@outfoxx/sunday 1.0.9 → 1.0.10
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/LICENSE.txt +203 -0
- package/README.md +36 -2
- package/build/date-time-types.d.ts +35 -0
- package/build/date-time-types.js +699 -0
- package/build/date-time-types.js.map +1 -0
- package/build/event-parser.d.ts +17 -0
- package/build/event-parser.js +151 -0
- package/build/event-parser.js.map +1 -0
- package/build/fetch-event-source.d.ts +66 -0
- package/build/fetch-event-source.js +365 -0
- package/build/fetch-event-source.js.map +1 -0
- package/build/fetch-request-factory.d.ts +32 -0
- package/build/fetch-request-factory.js +316 -0
- package/build/fetch-request-factory.js.map +1 -0
- package/build/fetch.d.ts +9 -0
- package/build/fetch.js +140 -0
- package/build/fetch.js.map +1 -0
- package/build/header-parameters.d.ts +3 -0
- package/build/header-parameters.js +82 -0
- package/build/header-parameters.js.map +1 -0
- package/build/index.d.ts +26 -0
- package/build/index.js +41 -0
- package/build/index.js.map +1 -0
- package/{dist → build}/logger.d.ts +9 -0
- package/build/logger.js +36 -0
- package/build/logger.js.map +1 -0
- package/build/media-type-codecs/any-text-decoder.d.ts +7 -0
- package/build/media-type-codecs/any-text-decoder.js +29 -0
- package/build/media-type-codecs/any-text-decoder.js.map +1 -0
- package/build/media-type-codecs/any-text-encoder.d.ts +6 -0
- package/build/media-type-codecs/any-text-encoder.js +27 -0
- package/build/media-type-codecs/any-text-encoder.js.map +1 -0
- package/build/media-type-codecs/binary-decoder.d.ts +7 -0
- package/build/media-type-codecs/binary-decoder.js +33 -0
- package/build/media-type-codecs/binary-decoder.js.map +1 -0
- package/build/media-type-codecs/binary-encoder.d.ts +6 -0
- package/build/media-type-codecs/binary-encoder.js +30 -0
- package/build/media-type-codecs/binary-encoder.js.map +1 -0
- package/build/media-type-codecs/cbor-decoder.d.ts +13 -0
- package/build/media-type-codecs/cbor-decoder.js +38 -0
- package/build/media-type-codecs/cbor-decoder.js.map +1 -0
- package/build/media-type-codecs/cbor-encoder.d.ts +12 -0
- package/build/media-type-codecs/cbor-encoder.js +36 -0
- package/build/media-type-codecs/cbor-encoder.js.map +1 -0
- package/build/media-type-codecs/cbor-tags.d.ts +6 -0
- package/build/media-type-codecs/cbor-tags.js +20 -0
- package/build/media-type-codecs/cbor-tags.js.map +1 -0
- package/build/media-type-codecs/default-policies.d.ts +3 -0
- package/build/media-type-codecs/default-policies.js +33 -0
- package/build/media-type-codecs/default-policies.js.map +1 -0
- package/build/media-type-codecs/json-decoder.d.ts +14 -0
- package/build/media-type-codecs/json-decoder.js +40 -0
- package/build/media-type-codecs/json-decoder.js.map +1 -0
- package/build/media-type-codecs/json-encoder.d.ts +13 -0
- package/build/media-type-codecs/json-encoder.js +43 -0
- package/build/media-type-codecs/json-encoder.js.map +1 -0
- package/build/media-type-codecs/media-type-decoder.d.ts +14 -0
- package/build/media-type-codecs/media-type-decoder.js +18 -0
- package/build/media-type-codecs/media-type-decoder.js.map +1 -0
- package/build/media-type-codecs/media-type-decoders.d.ts +16 -0
- package/build/media-type-codecs/media-type-decoders.js +63 -0
- package/build/media-type-codecs/media-type-decoders.js.map +1 -0
- package/build/media-type-codecs/media-type-encoder.d.ts +12 -0
- package/build/media-type-codecs/media-type-encoder.js +22 -0
- package/build/media-type-codecs/media-type-encoder.js.map +1 -0
- package/build/media-type-codecs/media-type-encoders.d.ts +16 -0
- package/build/media-type-codecs/media-type-encoders.js +65 -0
- package/build/media-type-codecs/media-type-encoders.js.map +1 -0
- package/build/media-type-codecs/www-form-url-encoder.d.ts +31 -0
- package/build/media-type-codecs/www-form-url-encoder.js +281 -0
- package/build/media-type-codecs/www-form-url-encoder.js.map +1 -0
- package/build/media-type.d.ts +94 -0
- package/build/media-type.js +305 -0
- package/build/media-type.js.map +1 -0
- package/build/problem.d.ts +35 -0
- package/build/problem.js +122 -0
- package/build/problem.js.map +1 -0
- package/build/request-adapters.d.ts +23 -0
- package/build/request-adapters.js +53 -0
- package/build/request-adapters.js.map +1 -0
- package/build/request-factory.d.ts +39 -0
- package/build/request-factory.js +15 -0
- package/build/request-factory.js.map +1 -0
- package/build/result-response.d.ts +4 -0
- package/build/result-response.js +15 -0
- package/build/result-response.js.map +1 -0
- package/build/schema-builtins.d.ts +21 -0
- package/build/schema-builtins.js +201 -0
- package/build/schema-builtins.js.map +1 -0
- package/build/schema-policy.d.ts +31 -0
- package/build/schema-policy.js +41 -0
- package/build/schema-policy.js.map +1 -0
- package/build/schema-runtime.d.ts +25 -0
- package/build/schema-runtime.js +77 -0
- package/build/schema-runtime.js.map +1 -0
- package/build/sunday-error.d.ts +10 -0
- package/build/sunday-error.js +36 -0
- package/build/sunday-error.js.map +1 -0
- package/build/url-template.js +33 -0
- package/build/url-template.js.map +1 -0
- package/build/util/async-iterables.d.ts +15 -0
- package/build/util/async-iterables.js +179 -0
- package/build/util/async-iterables.js.map +1 -0
- package/build/util/errors.d.ts +2 -0
- package/build/util/errors.js +65 -0
- package/build/util/errors.js.map +1 -0
- package/build/util/nullify.d.ts +5 -0
- package/build/util/nullify.js +37 -0
- package/build/util/nullify.js.map +1 -0
- package/build/util/numbers.d.ts +11 -0
- package/build/util/numbers.js +41 -0
- package/build/util/numbers.js.map +1 -0
- package/build/util/subscriptions.d.ts +16 -0
- package/build/util/subscriptions.js +78 -0
- package/build/util/subscriptions.js.map +1 -0
- package/build/util/unknowns.d.ts +2 -0
- package/build/util/unknowns.js +23 -0
- package/build/util/unknowns.js.map +1 -0
- package/package.json +72 -49
- package/dist/any-type.d.ts +0 -2
- package/dist/any-type.js +0 -2
- package/dist/any-type.js.map +0 -1
- package/dist/binary-decoder.d.ts +0 -6
- package/dist/binary-decoder.js +0 -16
- package/dist/binary-decoder.js.map +0 -1
- package/dist/binary-encoder.d.ts +0 -5
- package/dist/binary-encoder.js +0 -13
- package/dist/binary-encoder.js.map +0 -1
- package/dist/cbor-decoder.d.ts +0 -15
- package/dist/cbor-decoder.js +0 -126
- package/dist/cbor-decoder.js.map +0 -1
- package/dist/cbor-encoder.d.ts +0 -29
- package/dist/cbor-encoder.js +0 -81
- package/dist/cbor-encoder.js.map +0 -1
- package/dist/cbor-tags.d.ts +0 -3
- package/dist/cbor-tags.js +0 -4
- package/dist/cbor-tags.js.map +0 -1
- package/dist/class-type.d.ts +0 -2
- package/dist/class-type.js +0 -2
- package/dist/class-type.js.map +0 -1
- package/dist/date-time-types.d.ts +0 -7
- package/dist/date-time-types.js +0 -5
- package/dist/date-time-types.js.map +0 -1
- package/dist/fetch-event-source.d.ts +0 -52
- package/dist/fetch-event-source.js +0 -271
- package/dist/fetch-event-source.js.map +0 -1
- package/dist/fetch-request-factory.d.ts +0 -26
- package/dist/fetch-request-factory.js +0 -125
- package/dist/fetch-request-factory.js.map +0 -1
- package/dist/fetch.d.ts +0 -1
- package/dist/fetch.js +0 -19
- package/dist/fetch.js.map +0 -1
- package/dist/http-error.d.ts +0 -10
- package/dist/http-error.js +0 -45
- package/dist/http-error.js.map +0 -1
- package/dist/index.d.ts +0 -25
- package/dist/index.js +0 -26
- package/dist/index.js.map +0 -1
- package/dist/json-decoder.d.ts +0 -31
- package/dist/json-decoder.js +0 -139
- package/dist/json-decoder.js.map +0 -1
- package/dist/json-encoder.d.ts +0 -35
- package/dist/json-encoder.js +0 -134
- package/dist/json-encoder.js.map +0 -1
- package/dist/logger.js +0 -2
- package/dist/logger.js.map +0 -1
- package/dist/media-type-decoder.d.ts +0 -4
- package/dist/media-type-decoder.js +0 -2
- package/dist/media-type-decoder.js.map +0 -1
- package/dist/media-type-decoders.d.ts +0 -17
- package/dist/media-type-decoders.js +0 -40
- package/dist/media-type-decoders.js.map +0 -1
- package/dist/media-type-encoder.d.ts +0 -8
- package/dist/media-type-encoder.js +0 -6
- package/dist/media-type-encoder.js.map +0 -1
- package/dist/media-type-encoders.d.ts +0 -17
- package/dist/media-type-encoders.js +0 -42
- package/dist/media-type-encoders.js.map +0 -1
- package/dist/media-type.d.ts +0 -14
- package/dist/media-type.js +0 -18
- package/dist/media-type.js.map +0 -1
- package/dist/problem.d.ts +0 -16
- package/dist/problem.js +0 -11
- package/dist/problem.js.map +0 -1
- package/dist/request-factory.d.ts +0 -38
- package/dist/request-factory.js +0 -2
- package/dist/request-factory.js.map +0 -1
- package/dist/url-encoder.d.ts +0 -59
- package/dist/url-encoder.js +0 -141
- package/dist/url-encoder.js.map +0 -1
- package/dist/url-template.js +0 -18
- package/dist/url-template.js.map +0 -1
- package/dist/util/base64.d.ts +0 -5
- package/dist/util/base64.js +0 -64
- package/dist/util/base64.js.map +0 -1
- package/dist/util/hex.d.ts +0 -4
- package/dist/util/hex.js +0 -18
- package/dist/util/hex.js.map +0 -1
- package/dist/util/rxjs.d.ts +0 -2
- package/dist/util/rxjs.js +0 -14
- package/dist/util/rxjs.js.map +0 -1
- package/dist/util/stream-rxjs.d.ts +0 -2
- package/dist/util/stream-rxjs.js +0 -26
- package/dist/util/stream-rxjs.js.map +0 -1
- package/src/any-type.ts +0 -4
- package/src/binary-decoder.ts +0 -24
- package/src/binary-encoder.ts +0 -19
- package/src/cbor-decoder.ts +0 -148
- package/src/cbor-encoder.ts +0 -95
- package/src/cbor-tags.ts +0 -3
- package/src/class-type.ts +0 -3
- package/src/date-time-types.ts +0 -10
- package/src/fetch-event-source.ts +0 -387
- package/src/fetch-request-factory.ts +0 -225
- package/src/fetch.ts +0 -30
- package/src/http-error.ts +0 -55
- package/src/index.ts +0 -26
- package/src/json-decoder.ts +0 -164
- package/src/json-encoder.ts +0 -162
- package/src/logger.ts +0 -8
- package/src/media-type-decoder.ts +0 -5
- package/src/media-type-decoders.ts +0 -59
- package/src/media-type-encoder.ts +0 -16
- package/src/media-type-encoders.ts +0 -61
- package/src/media-type.ts +0 -25
- package/src/problem.ts +0 -25
- package/src/request-factory.ts +0 -76
- package/src/url-encoder.ts +0 -173
- package/src/url-template.ts +0 -21
- package/src/util/base64.ts +0 -77
- package/src/util/hex.ts +0 -15
- package/src/util/rxjs.ts +0 -18
- package/src/util/stream-rxjs.ts +0 -28
- /package/{dist → build}/url-template.d.ts +0 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export declare class MediaType {
|
|
2
|
+
type: MediaType.Type;
|
|
3
|
+
tree: MediaType.Tree;
|
|
4
|
+
subtype: string;
|
|
5
|
+
suffix?: MediaType.Suffix;
|
|
6
|
+
parameters: Record<string, string>;
|
|
7
|
+
constructor(params: {
|
|
8
|
+
type: MediaType.Type;
|
|
9
|
+
tree?: MediaType.Tree;
|
|
10
|
+
subtype: string;
|
|
11
|
+
suffix?: MediaType.Suffix;
|
|
12
|
+
parameters?: Record<string, string>;
|
|
13
|
+
});
|
|
14
|
+
parameter(name: MediaType.ParameterName | string): string | undefined;
|
|
15
|
+
with(params: {
|
|
16
|
+
type?: MediaType.Type;
|
|
17
|
+
tree?: MediaType.Tree;
|
|
18
|
+
subtype?: string;
|
|
19
|
+
suffix?: MediaType.Suffix;
|
|
20
|
+
parameters?: Record<string, string>;
|
|
21
|
+
}): MediaType;
|
|
22
|
+
withParameter(parameter: MediaType.ParameterName | string, value: string): MediaType;
|
|
23
|
+
get value(): string;
|
|
24
|
+
compatible(other: MediaType): boolean;
|
|
25
|
+
equals(other: MediaType): boolean;
|
|
26
|
+
toString(): string;
|
|
27
|
+
}
|
|
28
|
+
export declare namespace MediaType {
|
|
29
|
+
enum Type {
|
|
30
|
+
Application = "application",
|
|
31
|
+
Audio = "audio",
|
|
32
|
+
Example = "example",
|
|
33
|
+
Font = "font",
|
|
34
|
+
Image = "image",
|
|
35
|
+
Message = "message",
|
|
36
|
+
Model = "model",
|
|
37
|
+
Multipart = "multipart",
|
|
38
|
+
Text = "text",
|
|
39
|
+
Video = "video",
|
|
40
|
+
Any = "*"
|
|
41
|
+
}
|
|
42
|
+
namespace Type {
|
|
43
|
+
function from(value: string): Type | undefined;
|
|
44
|
+
}
|
|
45
|
+
enum Tree {
|
|
46
|
+
Standard = "",
|
|
47
|
+
Vendor = "vnd.",
|
|
48
|
+
Personal = "prs.",
|
|
49
|
+
Unregistered = "x.",
|
|
50
|
+
Obsolete = "x-",
|
|
51
|
+
Any = "*"
|
|
52
|
+
}
|
|
53
|
+
namespace Tree {
|
|
54
|
+
function from(value: string): Tree | undefined;
|
|
55
|
+
}
|
|
56
|
+
enum Suffix {
|
|
57
|
+
XML = "xml",
|
|
58
|
+
JSON = "json",
|
|
59
|
+
BER = "ber",
|
|
60
|
+
DER = "der",
|
|
61
|
+
FastInfoSet = "fastinfoset",
|
|
62
|
+
WBXML = "wbxml",
|
|
63
|
+
Zip = "zip",
|
|
64
|
+
CBOR = "cbor"
|
|
65
|
+
}
|
|
66
|
+
namespace Suffix {
|
|
67
|
+
function from(value: string): Suffix | undefined;
|
|
68
|
+
}
|
|
69
|
+
enum ParameterName {
|
|
70
|
+
CharSet = "charset"
|
|
71
|
+
}
|
|
72
|
+
function from(value?: string | null): MediaType;
|
|
73
|
+
function from(value: string | null | undefined, def: MediaType): MediaType;
|
|
74
|
+
const Plain: MediaType;
|
|
75
|
+
const HTML: MediaType;
|
|
76
|
+
const JSON: MediaType;
|
|
77
|
+
const YAML: MediaType;
|
|
78
|
+
const CBOR: MediaType;
|
|
79
|
+
const EventStream: MediaType;
|
|
80
|
+
const OctetStream: MediaType;
|
|
81
|
+
const WWWFormUrlEncoded: MediaType;
|
|
82
|
+
const X509CACert: MediaType;
|
|
83
|
+
const X509UserCert: MediaType;
|
|
84
|
+
const Any: MediaType;
|
|
85
|
+
const AnyText: MediaType;
|
|
86
|
+
const AnyImage: MediaType;
|
|
87
|
+
const AnyAudio: MediaType;
|
|
88
|
+
const AnyVideo: MediaType;
|
|
89
|
+
const JSONStructured: MediaType;
|
|
90
|
+
const XMLStructured: MediaType;
|
|
91
|
+
const Problem: MediaType;
|
|
92
|
+
const JsonPatch: MediaType;
|
|
93
|
+
const MergePatch: MediaType;
|
|
94
|
+
}
|
|
@@ -0,0 +1,305 @@
|
|
|
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 class MediaType {
|
|
15
|
+
type;
|
|
16
|
+
tree;
|
|
17
|
+
subtype;
|
|
18
|
+
suffix;
|
|
19
|
+
parameters;
|
|
20
|
+
constructor(params) {
|
|
21
|
+
this.type = params.type;
|
|
22
|
+
this.tree = params.tree ?? MediaType.Tree.Standard;
|
|
23
|
+
this.subtype = params.subtype.toLowerCase();
|
|
24
|
+
this.suffix = params.suffix;
|
|
25
|
+
this.parameters = Object.entries(params.parameters ?? {}).reduce((obj, [name, value]) => {
|
|
26
|
+
obj[name.toLowerCase()] = value.toLowerCase();
|
|
27
|
+
return obj;
|
|
28
|
+
}, {});
|
|
29
|
+
}
|
|
30
|
+
parameter(name) {
|
|
31
|
+
return this.parameters[name];
|
|
32
|
+
}
|
|
33
|
+
with(params) {
|
|
34
|
+
return new MediaType({
|
|
35
|
+
type: params.type ?? this.type,
|
|
36
|
+
tree: params.tree ?? this.tree,
|
|
37
|
+
subtype: params.subtype ?? this.subtype,
|
|
38
|
+
suffix: params.suffix ?? this.suffix,
|
|
39
|
+
parameters: params.parameters ?? this.parameters,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
withParameter(parameter, value) {
|
|
43
|
+
const parameters = { ...this.parameters, [parameter]: value };
|
|
44
|
+
return this.with({ parameters });
|
|
45
|
+
}
|
|
46
|
+
get value() {
|
|
47
|
+
const type = this.type;
|
|
48
|
+
const tree = this.tree;
|
|
49
|
+
const suffix = this.suffix ? `+${this.suffix.toLowerCase()}` : '';
|
|
50
|
+
const parameters = Object.keys(this.parameters)
|
|
51
|
+
.sort((p1, p2) => p1.localeCompare(p2, 'und'))
|
|
52
|
+
.map((key) => `;${key}=${this.parameters[key]}`)
|
|
53
|
+
.join('');
|
|
54
|
+
return `${type}/${tree}${this.subtype}${suffix}${parameters}`;
|
|
55
|
+
}
|
|
56
|
+
compatible(other) {
|
|
57
|
+
if (this.type != MediaType.Type.Any &&
|
|
58
|
+
other.type != MediaType.Type.Any &&
|
|
59
|
+
this.type != other.type) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
if (this.tree != MediaType.Tree.Any &&
|
|
63
|
+
other.tree != MediaType.Tree.Any &&
|
|
64
|
+
this.tree != other.tree) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (this.subtype != '*' &&
|
|
68
|
+
other.subtype != '*' &&
|
|
69
|
+
this.subtype != other.subtype) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
if (this.suffix != other.suffix) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
const thisKeys = Object.keys(this.parameters);
|
|
76
|
+
const otherKeys = Object.keys(other.parameters);
|
|
77
|
+
return thisKeys
|
|
78
|
+
.filter((key) => otherKeys.includes(key))
|
|
79
|
+
.every((key) => this.parameters[key] == other.parameters[key]);
|
|
80
|
+
}
|
|
81
|
+
equals(other) {
|
|
82
|
+
if (this === other)
|
|
83
|
+
return true;
|
|
84
|
+
if (this.type != other.type)
|
|
85
|
+
return false;
|
|
86
|
+
if (this.tree != other.tree)
|
|
87
|
+
return false;
|
|
88
|
+
if (this.suffix != other.suffix)
|
|
89
|
+
return false;
|
|
90
|
+
if (this.subtype != other.subtype)
|
|
91
|
+
return false;
|
|
92
|
+
for (const parameterName of Object.keys(this.parameters)) {
|
|
93
|
+
if (this.parameters[parameterName] != other.parameters[parameterName]) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
toString() {
|
|
100
|
+
return this.value;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
(function (MediaType) {
|
|
104
|
+
let Type;
|
|
105
|
+
(function (Type) {
|
|
106
|
+
Type["Application"] = "application";
|
|
107
|
+
Type["Audio"] = "audio";
|
|
108
|
+
Type["Example"] = "example";
|
|
109
|
+
Type["Font"] = "font";
|
|
110
|
+
Type["Image"] = "image";
|
|
111
|
+
Type["Message"] = "message";
|
|
112
|
+
Type["Model"] = "model";
|
|
113
|
+
Type["Multipart"] = "multipart";
|
|
114
|
+
Type["Text"] = "text";
|
|
115
|
+
Type["Video"] = "video";
|
|
116
|
+
Type["Any"] = "*";
|
|
117
|
+
})(Type = MediaType.Type || (MediaType.Type = {}));
|
|
118
|
+
(function (Type) {
|
|
119
|
+
function from(value) {
|
|
120
|
+
return Object.values(Type).includes(value)
|
|
121
|
+
? value
|
|
122
|
+
: undefined;
|
|
123
|
+
}
|
|
124
|
+
Type.from = from;
|
|
125
|
+
})(Type = MediaType.Type || (MediaType.Type = {}));
|
|
126
|
+
let Tree;
|
|
127
|
+
(function (Tree) {
|
|
128
|
+
Tree["Standard"] = "";
|
|
129
|
+
Tree["Vendor"] = "vnd.";
|
|
130
|
+
Tree["Personal"] = "prs.";
|
|
131
|
+
Tree["Unregistered"] = "x.";
|
|
132
|
+
Tree["Obsolete"] = "x-";
|
|
133
|
+
Tree["Any"] = "*";
|
|
134
|
+
})(Tree = MediaType.Tree || (MediaType.Tree = {}));
|
|
135
|
+
(function (Tree) {
|
|
136
|
+
function from(value) {
|
|
137
|
+
return Object.values(Tree).includes(value)
|
|
138
|
+
? value
|
|
139
|
+
: undefined;
|
|
140
|
+
}
|
|
141
|
+
Tree.from = from;
|
|
142
|
+
})(Tree = MediaType.Tree || (MediaType.Tree = {}));
|
|
143
|
+
let Suffix;
|
|
144
|
+
(function (Suffix) {
|
|
145
|
+
Suffix["XML"] = "xml";
|
|
146
|
+
Suffix["JSON"] = "json";
|
|
147
|
+
Suffix["BER"] = "ber";
|
|
148
|
+
Suffix["DER"] = "der";
|
|
149
|
+
Suffix["FastInfoSet"] = "fastinfoset";
|
|
150
|
+
Suffix["WBXML"] = "wbxml";
|
|
151
|
+
Suffix["Zip"] = "zip";
|
|
152
|
+
Suffix["CBOR"] = "cbor";
|
|
153
|
+
})(Suffix = MediaType.Suffix || (MediaType.Suffix = {}));
|
|
154
|
+
(function (Suffix) {
|
|
155
|
+
function from(value) {
|
|
156
|
+
return Object.values(Suffix).includes(value)
|
|
157
|
+
? value
|
|
158
|
+
: undefined;
|
|
159
|
+
}
|
|
160
|
+
Suffix.from = from;
|
|
161
|
+
})(Suffix = MediaType.Suffix || (MediaType.Suffix = {}));
|
|
162
|
+
let ParameterName;
|
|
163
|
+
(function (ParameterName) {
|
|
164
|
+
ParameterName["CharSet"] = "charset";
|
|
165
|
+
})(ParameterName = MediaType.ParameterName || (MediaType.ParameterName = {}));
|
|
166
|
+
function from(value, def = undefined) {
|
|
167
|
+
const reqDef = () => {
|
|
168
|
+
if (!def) {
|
|
169
|
+
throw new Error('Invalid media type');
|
|
170
|
+
}
|
|
171
|
+
return def;
|
|
172
|
+
};
|
|
173
|
+
if (!value) {
|
|
174
|
+
return reqDef();
|
|
175
|
+
}
|
|
176
|
+
fullRegex.lastIndex = 0;
|
|
177
|
+
const match = fullRegex.exec(value);
|
|
178
|
+
if (match?.[0] != value) {
|
|
179
|
+
return reqDef();
|
|
180
|
+
}
|
|
181
|
+
const type = MediaType.Type.from(match[1]?.toLowerCase());
|
|
182
|
+
if (!type) {
|
|
183
|
+
return reqDef();
|
|
184
|
+
}
|
|
185
|
+
const tree = MediaType.Tree.from(match[2]?.toLowerCase()) ?? MediaType.Tree.Standard;
|
|
186
|
+
const subtype = match[3]?.toLowerCase();
|
|
187
|
+
if (!subtype) {
|
|
188
|
+
return reqDef();
|
|
189
|
+
}
|
|
190
|
+
const suffix = MediaType.Suffix.from(match[4]?.toLowerCase());
|
|
191
|
+
const parameters = {};
|
|
192
|
+
let parametersMatch = paramRegex.exec(match[5] ?? '');
|
|
193
|
+
while (parametersMatch?.[0]) {
|
|
194
|
+
const name = parametersMatch[1];
|
|
195
|
+
if (!name)
|
|
196
|
+
continue;
|
|
197
|
+
const value = parametersMatch[2];
|
|
198
|
+
if (!value)
|
|
199
|
+
continue;
|
|
200
|
+
parameters[name.toLowerCase()] = value.toLowerCase();
|
|
201
|
+
parametersMatch = paramRegex.exec(match[5]);
|
|
202
|
+
}
|
|
203
|
+
return new MediaType({
|
|
204
|
+
type,
|
|
205
|
+
tree,
|
|
206
|
+
subtype,
|
|
207
|
+
suffix,
|
|
208
|
+
parameters,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
MediaType.from = from;
|
|
212
|
+
const fullRegex = /^([a-z]+|\*)\/(x(?:-|\\.)|(?:vnd|prs|x)\.|\*)?([a-z0-9\-.]+|\*)(?:\+([a-z]+))?( *(?:; *[\w.-]+ *= *[\w.-]+ *)*)$/gi;
|
|
213
|
+
const paramRegex = / *; *([\w.-]+) *= *([\w.-]+)/gi;
|
|
214
|
+
MediaType.Plain = new MediaType({
|
|
215
|
+
type: MediaType.Type.Text,
|
|
216
|
+
subtype: 'plain',
|
|
217
|
+
});
|
|
218
|
+
MediaType.HTML = new MediaType({
|
|
219
|
+
type: MediaType.Type.Text,
|
|
220
|
+
subtype: 'html',
|
|
221
|
+
});
|
|
222
|
+
MediaType.JSON = new MediaType({
|
|
223
|
+
type: MediaType.Type.Application,
|
|
224
|
+
subtype: 'json',
|
|
225
|
+
});
|
|
226
|
+
MediaType.YAML = new MediaType({
|
|
227
|
+
type: MediaType.Type.Application,
|
|
228
|
+
subtype: 'yaml',
|
|
229
|
+
});
|
|
230
|
+
MediaType.CBOR = new MediaType({
|
|
231
|
+
type: MediaType.Type.Application,
|
|
232
|
+
subtype: 'cbor',
|
|
233
|
+
});
|
|
234
|
+
MediaType.EventStream = new MediaType({
|
|
235
|
+
type: MediaType.Type.Text,
|
|
236
|
+
subtype: 'event-stream',
|
|
237
|
+
});
|
|
238
|
+
MediaType.OctetStream = new MediaType({
|
|
239
|
+
type: MediaType.Type.Application,
|
|
240
|
+
subtype: 'octet-stream',
|
|
241
|
+
});
|
|
242
|
+
MediaType.WWWFormUrlEncoded = new MediaType({
|
|
243
|
+
type: MediaType.Type.Application,
|
|
244
|
+
tree: MediaType.Tree.Obsolete,
|
|
245
|
+
subtype: 'www-form-urlencoded',
|
|
246
|
+
});
|
|
247
|
+
MediaType.X509CACert = new MediaType({
|
|
248
|
+
type: MediaType.Type.Application,
|
|
249
|
+
tree: MediaType.Tree.Obsolete,
|
|
250
|
+
subtype: 'x509-ca-cert',
|
|
251
|
+
});
|
|
252
|
+
MediaType.X509UserCert = new MediaType({
|
|
253
|
+
type: MediaType.Type.Application,
|
|
254
|
+
tree: MediaType.Tree.Obsolete,
|
|
255
|
+
subtype: 'x509-user-cert',
|
|
256
|
+
});
|
|
257
|
+
MediaType.Any = new MediaType({
|
|
258
|
+
type: MediaType.Type.Any,
|
|
259
|
+
subtype: '*',
|
|
260
|
+
});
|
|
261
|
+
MediaType.AnyText = new MediaType({
|
|
262
|
+
type: MediaType.Type.Text,
|
|
263
|
+
subtype: '*',
|
|
264
|
+
});
|
|
265
|
+
MediaType.AnyImage = new MediaType({
|
|
266
|
+
type: MediaType.Type.Image,
|
|
267
|
+
subtype: '*',
|
|
268
|
+
});
|
|
269
|
+
MediaType.AnyAudio = new MediaType({
|
|
270
|
+
type: MediaType.Type.Audio,
|
|
271
|
+
subtype: '*',
|
|
272
|
+
});
|
|
273
|
+
MediaType.AnyVideo = new MediaType({
|
|
274
|
+
type: MediaType.Type.Video,
|
|
275
|
+
subtype: '*',
|
|
276
|
+
});
|
|
277
|
+
MediaType.JSONStructured = new MediaType({
|
|
278
|
+
type: MediaType.Type.Any,
|
|
279
|
+
tree: MediaType.Tree.Any,
|
|
280
|
+
subtype: '*',
|
|
281
|
+
suffix: Suffix.JSON,
|
|
282
|
+
});
|
|
283
|
+
MediaType.XMLStructured = new MediaType({
|
|
284
|
+
type: MediaType.Type.Any,
|
|
285
|
+
tree: MediaType.Tree.Any,
|
|
286
|
+
subtype: '*',
|
|
287
|
+
suffix: Suffix.XML,
|
|
288
|
+
});
|
|
289
|
+
MediaType.Problem = new MediaType({
|
|
290
|
+
type: MediaType.Type.Application,
|
|
291
|
+
subtype: 'problem',
|
|
292
|
+
suffix: Suffix.JSON,
|
|
293
|
+
});
|
|
294
|
+
MediaType.JsonPatch = new MediaType({
|
|
295
|
+
type: MediaType.Type.Application,
|
|
296
|
+
subtype: 'json-patch',
|
|
297
|
+
suffix: Suffix.JSON,
|
|
298
|
+
});
|
|
299
|
+
MediaType.MergePatch = new MediaType({
|
|
300
|
+
type: MediaType.Type.Application,
|
|
301
|
+
subtype: 'merge-patch',
|
|
302
|
+
suffix: Suffix.JSON,
|
|
303
|
+
});
|
|
304
|
+
})(MediaType || (MediaType = {}));
|
|
305
|
+
//# sourceMappingURL=media-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-type.js","sourceRoot":"","sources":["../src/media-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { SchemaLike } from './schema-runtime.js';
|
|
3
|
+
export interface Problem {
|
|
4
|
+
type: URL;
|
|
5
|
+
title: string;
|
|
6
|
+
status: number;
|
|
7
|
+
detail?: string;
|
|
8
|
+
instance?: URL;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
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>]>>;
|
|
17
|
+
}, z.core.$loose>;
|
|
18
|
+
export type ProblemSpec = z.infer<typeof ProblemWireSchema>;
|
|
19
|
+
export declare class Problem extends Error implements Problem {
|
|
20
|
+
static readonly BLANK_URL: URL;
|
|
21
|
+
type: URL;
|
|
22
|
+
title: string;
|
|
23
|
+
status: number;
|
|
24
|
+
detail?: string;
|
|
25
|
+
instance?: URL;
|
|
26
|
+
private readonly _parameters?;
|
|
27
|
+
get parameters(): Record<string, unknown> | undefined;
|
|
28
|
+
constructor(spec: ProblemSpec);
|
|
29
|
+
toString(): string;
|
|
30
|
+
static fromStatus(status: number, title: string): Problem;
|
|
31
|
+
static fromResponse(response: Response): Promise<Problem>;
|
|
32
|
+
private static parseURL;
|
|
33
|
+
}
|
|
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>;
|
|
35
|
+
export declare const ProblemSchema: SchemaLike<Problem>;
|
package/build/problem.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
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 { z } from 'zod';
|
|
15
|
+
import { ResponseExample } from './fetch.js';
|
|
16
|
+
import { defineSchema, } from './schema-runtime.js';
|
|
17
|
+
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(),
|
|
23
|
+
});
|
|
24
|
+
export class Problem extends Error {
|
|
25
|
+
static BLANK_URL = new URL('about:blank');
|
|
26
|
+
type;
|
|
27
|
+
title;
|
|
28
|
+
status;
|
|
29
|
+
detail;
|
|
30
|
+
instance;
|
|
31
|
+
_parameters;
|
|
32
|
+
get parameters() {
|
|
33
|
+
return this._parameters;
|
|
34
|
+
}
|
|
35
|
+
constructor(spec) {
|
|
36
|
+
super(`${spec.status.toString()} ${spec.type} - ${spec.title}`);
|
|
37
|
+
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;
|
|
40
|
+
this.status = status;
|
|
41
|
+
this.title = title;
|
|
42
|
+
this.detail = detail;
|
|
43
|
+
this.instance = Problem.parseURL(instance);
|
|
44
|
+
this._parameters = Object.keys(parameters).length ? parameters : undefined;
|
|
45
|
+
}
|
|
46
|
+
toString() {
|
|
47
|
+
const self = this;
|
|
48
|
+
return JSON.stringify({
|
|
49
|
+
type: this.type,
|
|
50
|
+
status: this.status,
|
|
51
|
+
title: this.title,
|
|
52
|
+
detail: this.detail,
|
|
53
|
+
instance: this.instance,
|
|
54
|
+
url: self.request?.url,
|
|
55
|
+
response: self.response?.example,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
static fromStatus(status, title) {
|
|
59
|
+
return new Problem({
|
|
60
|
+
type: Problem.BLANK_URL,
|
|
61
|
+
title,
|
|
62
|
+
status,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
static async fromResponse(response) {
|
|
66
|
+
const [bodyExcerpt, body] = await ResponseExample.bodyExcerpt(response, 256);
|
|
67
|
+
return new Problem({
|
|
68
|
+
type: Problem.BLANK_URL,
|
|
69
|
+
title: response.statusText,
|
|
70
|
+
status: response.status,
|
|
71
|
+
request: {
|
|
72
|
+
url: response.url,
|
|
73
|
+
},
|
|
74
|
+
response: {
|
|
75
|
+
headers: response.headers,
|
|
76
|
+
ok: response.ok,
|
|
77
|
+
redirected: response.redirected,
|
|
78
|
+
status: response.status,
|
|
79
|
+
statusText: response.statusText,
|
|
80
|
+
type: response.type,
|
|
81
|
+
url: response.url,
|
|
82
|
+
body,
|
|
83
|
+
example: ResponseExample.build(response, bodyExcerpt),
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
}
|
|
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
|
+
}
|
|
105
|
+
export function createProblemCodec(problemType, wireSchema) {
|
|
106
|
+
return z.codec(wireSchema, z.instanceof(problemType), {
|
|
107
|
+
decode: (value) => new problemType(value),
|
|
108
|
+
encode: (value) => ({
|
|
109
|
+
type: value.type?.toString() ?? Problem.BLANK_URL.toString(),
|
|
110
|
+
title: value.title,
|
|
111
|
+
status: value.status,
|
|
112
|
+
detail: value.detail,
|
|
113
|
+
instance: value.instance?.toString(),
|
|
114
|
+
...value.parameters,
|
|
115
|
+
}),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export const ProblemSchema = defineSchema(() => createProblemCodec(Problem, ProblemWireSchema), {
|
|
119
|
+
id: Symbol.for('@outfoxx/sunday/ProblemSchema'),
|
|
120
|
+
debugName: 'ProblemSchema',
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=problem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"problem.js","sourceRoot":"","sources":["../src/problem.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,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,YAAY,GAEb,MAAM,qBAAqB,CAAC;AAY7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC9D,CAAC,CAAC;AAIH,MAAM,OAAO,OAAQ,SAAQ,KAAK;IAEzB,MAAM,CAAU,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAEnD,IAAI,CAAM;IAEV,KAAK,CAAS;IAEd,MAAM,CAAS;IAEf,MAAM,CAAU;IAEhB,QAAQ,CAAO;IAEL,WAAW,CAA2B;IAEvD,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,YAAY,IAAiB;QAC3B,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEhE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;QACtE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,mDAAmD;QAE5E,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,IAA+C,CAAC;QAC7D,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG;YACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO;SACjC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,MAAc,EAAE,KAAa;QAC7C,OAAO,IAAI,OAAO,CAAC;YACjB,IAAI,EAAE,OAAO,CAAC,SAAS;YACvB,KAAK;YACL,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAkB;QAC1C,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,MAAM,eAAe,CAAC,WAAW,CAC3D,QAAQ,EACR,GAAG,CACJ,CAAC;QAEF,OAAO,IAAI,OAAO,CAAC;YACjB,IAAI,EAAE,OAAO,CAAC,SAAS;YACvB,KAAK,EAAE,QAAQ,CAAC,UAAU;YAC1B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE;gBACP,GAAG,EAAE,QAAQ,CAAC,GAAG;aAClB;YACD,QAAQ,EAAE;gBACR,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,GAAG,EAAE,QAAQ,CAAC,GAAG;gBACjB,IAAI;gBACJ,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC;aACtD;SACF,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,QAAQ,CAAC,KAAc;QACpC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,MAAM,CAAC;gBACL,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;;AAGH,MAAM,UAAU,kBAAkB,CAIhC,WAA0C,EAC1C,UAA4B;IAE5B,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;QACpD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;QACzC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5D,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE;YACpC,GAAG,KAAK,CAAC,UAAU;SACpB,CAAU;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAwB,YAAY,CAC5D,GAAG,EAAE,CAAC,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,CAAC,EACpD;IACE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC;IAC/C,SAAS,EAAE,eAAe;CAC3B,CACF,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { RequestAdapter, RequestFactory } from './request-factory.js';
|
|
2
|
+
export declare abstract class HeaderTokenAuthorizingAdapter implements RequestAdapter {
|
|
3
|
+
header: string;
|
|
4
|
+
tokenHeaderType: string;
|
|
5
|
+
applyToken(request: Request, accessToken: string): Request;
|
|
6
|
+
abstract adapt(requestFactory: RequestFactory, request: Request): Promise<Request>;
|
|
7
|
+
}
|
|
8
|
+
export declare class StaticHeaderTokenAuthorizingAdapter extends HeaderTokenAuthorizingAdapter {
|
|
9
|
+
private readonly accessToken;
|
|
10
|
+
constructor(accessToken: string);
|
|
11
|
+
adapt(_requestFactory: RequestFactory, request: Request): Promise<Request>;
|
|
12
|
+
}
|
|
13
|
+
export interface TokenAuthorization {
|
|
14
|
+
token: string;
|
|
15
|
+
expires: Date;
|
|
16
|
+
}
|
|
17
|
+
export declare class RefreshingHeaderTokenAuthorizingAdapter extends HeaderTokenAuthorizingAdapter {
|
|
18
|
+
private readonly refresh;
|
|
19
|
+
private authorization?;
|
|
20
|
+
constructor(refresh: (requestFactory: RequestFactory) => Promise<TokenAuthorization>);
|
|
21
|
+
shouldRefresh(): boolean;
|
|
22
|
+
adapt(requestFactory: RequestFactory, request: Request): Promise<Request>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
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 class HeaderTokenAuthorizingAdapter {
|
|
15
|
+
header = 'Authorization';
|
|
16
|
+
tokenHeaderType = 'Bearer';
|
|
17
|
+
applyToken(request, accessToken) {
|
|
18
|
+
const requestClone = request.clone();
|
|
19
|
+
requestClone.headers.set(this.header, `${this.tokenHeaderType} ${accessToken}`);
|
|
20
|
+
return requestClone;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class StaticHeaderTokenAuthorizingAdapter extends HeaderTokenAuthorizingAdapter {
|
|
24
|
+
accessToken;
|
|
25
|
+
constructor(accessToken) {
|
|
26
|
+
super();
|
|
27
|
+
this.accessToken = accessToken;
|
|
28
|
+
}
|
|
29
|
+
async adapt(_requestFactory, request) {
|
|
30
|
+
return this.applyToken(request, this.accessToken);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class RefreshingHeaderTokenAuthorizingAdapter extends HeaderTokenAuthorizingAdapter {
|
|
34
|
+
refresh;
|
|
35
|
+
authorization;
|
|
36
|
+
constructor(refresh) {
|
|
37
|
+
super();
|
|
38
|
+
this.refresh = refresh;
|
|
39
|
+
}
|
|
40
|
+
shouldRefresh() {
|
|
41
|
+
if (!this.authorization) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
return this.authorization.expires.getTime() <= Date.now();
|
|
45
|
+
}
|
|
46
|
+
async adapt(requestFactory, request) {
|
|
47
|
+
if (!this.authorization || this.shouldRefresh()) {
|
|
48
|
+
this.authorization = await this.refresh(requestFactory);
|
|
49
|
+
}
|
|
50
|
+
return this.applyToken(request, this.authorization.token);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=request-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-adapters.js","sourceRoot":"","sources":["../src/request-adapters.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;AAIjC,MAAM,OAAgB,6BAA6B;IACjD,MAAM,GAAG,eAAe,CAAC;IACzB,eAAe,GAAG,QAAQ,CAAC;IAE3B,UAAU,CAAC,OAAgB,EAAE,WAAmB;QAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,GAAG,CACtB,IAAI,CAAC,MAAM,EACX,GAAG,IAAI,CAAC,eAAe,IAAI,WAAW,EAAE,CACzC,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;CAMF;AAED,MAAM,OAAO,mCAAoC,SAAQ,6BAA6B;IACvD;IAA7B,YAA6B,WAAmB;QAC9C,KAAK,EAAE,CAAC;QADmB,gBAAW,GAAX,WAAW,CAAQ;IAEhD,CAAC;IAED,KAAK,CAAC,KAAK,CACT,eAA+B,EAC/B,OAAgB;QAEhB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;CACF;AAOD,MAAM,OAAO,uCAAwC,SAAQ,6BAA6B;IAIrE;IAHX,aAAa,CAAsB;IAE3C,YACmB,OAEe;QAEhC,KAAK,EAAE,CAAC;QAJS,YAAO,GAAP,OAAO,CAEQ;IAGlC,CAAC;IAED,aAAa;QACX,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,KAAK,CACT,cAA8B,EAC9B,OAAgB;QAEhB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;CACF"}
|