@smithy/fetch-http-handler 2.3.1 → 2.4.0
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/dist-cjs/fetch-http-handler.js +1 -117
- package/dist-cjs/index.js +218 -5
- package/dist-cjs/request-timeout.js +1 -15
- package/dist-cjs/stream-collector.js +1 -50
- package/package.json +7 -7
|
@@ -1,117 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FetchHttpHandler = exports.keepAliveSupport = void 0;
|
|
4
|
-
const protocol_http_1 = require("@smithy/protocol-http");
|
|
5
|
-
const querystring_builder_1 = require("@smithy/querystring-builder");
|
|
6
|
-
const request_timeout_1 = require("./request-timeout");
|
|
7
|
-
exports.keepAliveSupport = {
|
|
8
|
-
supported: Boolean(typeof Request !== "undefined" && "keepalive" in new Request("https://[::1]")),
|
|
9
|
-
};
|
|
10
|
-
class FetchHttpHandler {
|
|
11
|
-
static create(instanceOrOptions) {
|
|
12
|
-
if (typeof (instanceOrOptions === null || instanceOrOptions === void 0 ? void 0 : instanceOrOptions.handle) === "function") {
|
|
13
|
-
return instanceOrOptions;
|
|
14
|
-
}
|
|
15
|
-
return new FetchHttpHandler(instanceOrOptions);
|
|
16
|
-
}
|
|
17
|
-
constructor(options) {
|
|
18
|
-
if (typeof options === "function") {
|
|
19
|
-
this.configProvider = options().then((opts) => opts || {});
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
this.config = options !== null && options !== void 0 ? options : {};
|
|
23
|
-
this.configProvider = Promise.resolve(this.config);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
destroy() {
|
|
27
|
-
}
|
|
28
|
-
async handle(request, { abortSignal } = {}) {
|
|
29
|
-
var _a, _b;
|
|
30
|
-
if (!this.config) {
|
|
31
|
-
this.config = await this.configProvider;
|
|
32
|
-
}
|
|
33
|
-
const requestTimeoutInMs = this.config.requestTimeout;
|
|
34
|
-
const keepAlive = this.config.keepAlive === true;
|
|
35
|
-
if (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted) {
|
|
36
|
-
const abortError = new Error("Request aborted");
|
|
37
|
-
abortError.name = "AbortError";
|
|
38
|
-
return Promise.reject(abortError);
|
|
39
|
-
}
|
|
40
|
-
let path = request.path;
|
|
41
|
-
const queryString = (0, querystring_builder_1.buildQueryString)(request.query || {});
|
|
42
|
-
if (queryString) {
|
|
43
|
-
path += `?${queryString}`;
|
|
44
|
-
}
|
|
45
|
-
if (request.fragment) {
|
|
46
|
-
path += `#${request.fragment}`;
|
|
47
|
-
}
|
|
48
|
-
let auth = "";
|
|
49
|
-
if (request.username != null || request.password != null) {
|
|
50
|
-
const username = (_a = request.username) !== null && _a !== void 0 ? _a : "";
|
|
51
|
-
const password = (_b = request.password) !== null && _b !== void 0 ? _b : "";
|
|
52
|
-
auth = `${username}:${password}@`;
|
|
53
|
-
}
|
|
54
|
-
const { port, method } = request;
|
|
55
|
-
const url = `${request.protocol}//${auth}${request.hostname}${port ? `:${port}` : ""}${path}`;
|
|
56
|
-
const body = method === "GET" || method === "HEAD" ? undefined : request.body;
|
|
57
|
-
const requestOptions = { body, headers: new Headers(request.headers), method: method };
|
|
58
|
-
if (typeof AbortController !== "undefined") {
|
|
59
|
-
requestOptions["signal"] = abortSignal;
|
|
60
|
-
}
|
|
61
|
-
if (exports.keepAliveSupport.supported) {
|
|
62
|
-
requestOptions["keepalive"] = keepAlive;
|
|
63
|
-
}
|
|
64
|
-
const fetchRequest = new Request(url, requestOptions);
|
|
65
|
-
const raceOfPromises = [
|
|
66
|
-
fetch(fetchRequest).then((response) => {
|
|
67
|
-
const fetchHeaders = response.headers;
|
|
68
|
-
const transformedHeaders = {};
|
|
69
|
-
for (const pair of fetchHeaders.entries()) {
|
|
70
|
-
transformedHeaders[pair[0]] = pair[1];
|
|
71
|
-
}
|
|
72
|
-
const hasReadableStream = response.body != undefined;
|
|
73
|
-
if (!hasReadableStream) {
|
|
74
|
-
return response.blob().then((body) => ({
|
|
75
|
-
response: new protocol_http_1.HttpResponse({
|
|
76
|
-
headers: transformedHeaders,
|
|
77
|
-
reason: response.statusText,
|
|
78
|
-
statusCode: response.status,
|
|
79
|
-
body,
|
|
80
|
-
}),
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
response: new protocol_http_1.HttpResponse({
|
|
85
|
-
headers: transformedHeaders,
|
|
86
|
-
reason: response.statusText,
|
|
87
|
-
statusCode: response.status,
|
|
88
|
-
body: response.body,
|
|
89
|
-
}),
|
|
90
|
-
};
|
|
91
|
-
}),
|
|
92
|
-
(0, request_timeout_1.requestTimeout)(requestTimeoutInMs),
|
|
93
|
-
];
|
|
94
|
-
if (abortSignal) {
|
|
95
|
-
raceOfPromises.push(new Promise((resolve, reject) => {
|
|
96
|
-
abortSignal.onabort = () => {
|
|
97
|
-
const abortError = new Error("Request aborted");
|
|
98
|
-
abortError.name = "AbortError";
|
|
99
|
-
reject(abortError);
|
|
100
|
-
};
|
|
101
|
-
}));
|
|
102
|
-
}
|
|
103
|
-
return Promise.race(raceOfPromises);
|
|
104
|
-
}
|
|
105
|
-
updateHttpClientConfig(key, value) {
|
|
106
|
-
this.config = undefined;
|
|
107
|
-
this.configProvider = this.configProvider.then((config) => {
|
|
108
|
-
config[key] = value;
|
|
109
|
-
return config;
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
httpHandlerConfigs() {
|
|
113
|
-
var _a;
|
|
114
|
-
return (_a = this.config) !== null && _a !== void 0 ? _a : {};
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
exports.FetchHttpHandler = FetchHttpHandler;
|
|
1
|
+
module.exports = require("./index.js");
|
package/dist-cjs/index.js
CHANGED
|
@@ -1,5 +1,218 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
FetchHttpHandler: () => FetchHttpHandler,
|
|
24
|
+
keepAliveSupport: () => keepAliveSupport,
|
|
25
|
+
streamCollector: () => streamCollector
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(src_exports);
|
|
28
|
+
|
|
29
|
+
// src/fetch-http-handler.ts
|
|
30
|
+
var import_protocol_http = require("@smithy/protocol-http");
|
|
31
|
+
var import_querystring_builder = require("@smithy/querystring-builder");
|
|
32
|
+
|
|
33
|
+
// src/request-timeout.ts
|
|
34
|
+
function requestTimeout(timeoutInMs = 0) {
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
if (timeoutInMs) {
|
|
37
|
+
setTimeout(() => {
|
|
38
|
+
const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);
|
|
39
|
+
timeoutError.name = "TimeoutError";
|
|
40
|
+
reject(timeoutError);
|
|
41
|
+
}, timeoutInMs);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
__name(requestTimeout, "requestTimeout");
|
|
46
|
+
|
|
47
|
+
// src/fetch-http-handler.ts
|
|
48
|
+
var keepAliveSupport = {
|
|
49
|
+
supported: Boolean(typeof Request !== "undefined" && "keepalive" in new Request("https://[::1]"))
|
|
50
|
+
};
|
|
51
|
+
var _FetchHttpHandler = class _FetchHttpHandler {
|
|
52
|
+
/**
|
|
53
|
+
* @returns the input if it is an HttpHandler of any class,
|
|
54
|
+
* or instantiates a new instance of this handler.
|
|
55
|
+
*/
|
|
56
|
+
static create(instanceOrOptions) {
|
|
57
|
+
if (typeof (instanceOrOptions == null ? void 0 : instanceOrOptions.handle) === "function") {
|
|
58
|
+
return instanceOrOptions;
|
|
59
|
+
}
|
|
60
|
+
return new _FetchHttpHandler(instanceOrOptions);
|
|
61
|
+
}
|
|
62
|
+
constructor(options) {
|
|
63
|
+
if (typeof options === "function") {
|
|
64
|
+
this.configProvider = options().then((opts) => opts || {});
|
|
65
|
+
} else {
|
|
66
|
+
this.config = options ?? {};
|
|
67
|
+
this.configProvider = Promise.resolve(this.config);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
destroy() {
|
|
71
|
+
}
|
|
72
|
+
async handle(request, { abortSignal } = {}) {
|
|
73
|
+
if (!this.config) {
|
|
74
|
+
this.config = await this.configProvider;
|
|
75
|
+
}
|
|
76
|
+
const requestTimeoutInMs = this.config.requestTimeout;
|
|
77
|
+
const keepAlive = this.config.keepAlive === true;
|
|
78
|
+
if (abortSignal == null ? void 0 : abortSignal.aborted) {
|
|
79
|
+
const abortError = new Error("Request aborted");
|
|
80
|
+
abortError.name = "AbortError";
|
|
81
|
+
return Promise.reject(abortError);
|
|
82
|
+
}
|
|
83
|
+
let path = request.path;
|
|
84
|
+
const queryString = (0, import_querystring_builder.buildQueryString)(request.query || {});
|
|
85
|
+
if (queryString) {
|
|
86
|
+
path += `?${queryString}`;
|
|
87
|
+
}
|
|
88
|
+
if (request.fragment) {
|
|
89
|
+
path += `#${request.fragment}`;
|
|
90
|
+
}
|
|
91
|
+
let auth = "";
|
|
92
|
+
if (request.username != null || request.password != null) {
|
|
93
|
+
const username = request.username ?? "";
|
|
94
|
+
const password = request.password ?? "";
|
|
95
|
+
auth = `${username}:${password}@`;
|
|
96
|
+
}
|
|
97
|
+
const { port, method } = request;
|
|
98
|
+
const url = `${request.protocol}//${auth}${request.hostname}${port ? `:${port}` : ""}${path}`;
|
|
99
|
+
const body = method === "GET" || method === "HEAD" ? void 0 : request.body;
|
|
100
|
+
const requestOptions = { body, headers: new Headers(request.headers), method };
|
|
101
|
+
if (typeof AbortController !== "undefined") {
|
|
102
|
+
requestOptions["signal"] = abortSignal;
|
|
103
|
+
}
|
|
104
|
+
if (keepAliveSupport.supported) {
|
|
105
|
+
requestOptions["keepalive"] = keepAlive;
|
|
106
|
+
}
|
|
107
|
+
const fetchRequest = new Request(url, requestOptions);
|
|
108
|
+
const raceOfPromises = [
|
|
109
|
+
fetch(fetchRequest).then((response) => {
|
|
110
|
+
const fetchHeaders = response.headers;
|
|
111
|
+
const transformedHeaders = {};
|
|
112
|
+
for (const pair of fetchHeaders.entries()) {
|
|
113
|
+
transformedHeaders[pair[0]] = pair[1];
|
|
114
|
+
}
|
|
115
|
+
const hasReadableStream = response.body != void 0;
|
|
116
|
+
if (!hasReadableStream) {
|
|
117
|
+
return response.blob().then((body2) => ({
|
|
118
|
+
response: new import_protocol_http.HttpResponse({
|
|
119
|
+
headers: transformedHeaders,
|
|
120
|
+
reason: response.statusText,
|
|
121
|
+
statusCode: response.status,
|
|
122
|
+
body: body2
|
|
123
|
+
})
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
response: new import_protocol_http.HttpResponse({
|
|
128
|
+
headers: transformedHeaders,
|
|
129
|
+
reason: response.statusText,
|
|
130
|
+
statusCode: response.status,
|
|
131
|
+
body: response.body
|
|
132
|
+
})
|
|
133
|
+
};
|
|
134
|
+
}),
|
|
135
|
+
requestTimeout(requestTimeoutInMs)
|
|
136
|
+
];
|
|
137
|
+
if (abortSignal) {
|
|
138
|
+
raceOfPromises.push(
|
|
139
|
+
new Promise((resolve, reject) => {
|
|
140
|
+
abortSignal.onabort = () => {
|
|
141
|
+
const abortError = new Error("Request aborted");
|
|
142
|
+
abortError.name = "AbortError";
|
|
143
|
+
reject(abortError);
|
|
144
|
+
};
|
|
145
|
+
})
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
return Promise.race(raceOfPromises);
|
|
149
|
+
}
|
|
150
|
+
updateHttpClientConfig(key, value) {
|
|
151
|
+
this.config = void 0;
|
|
152
|
+
this.configProvider = this.configProvider.then((config) => {
|
|
153
|
+
config[key] = value;
|
|
154
|
+
return config;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
httpHandlerConfigs() {
|
|
158
|
+
return this.config ?? {};
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
__name(_FetchHttpHandler, "FetchHttpHandler");
|
|
162
|
+
var FetchHttpHandler = _FetchHttpHandler;
|
|
163
|
+
|
|
164
|
+
// src/stream-collector.ts
|
|
165
|
+
var import_util_base64 = require("@smithy/util-base64");
|
|
166
|
+
var streamCollector = /* @__PURE__ */ __name((stream) => {
|
|
167
|
+
if (typeof Blob === "function" && stream instanceof Blob) {
|
|
168
|
+
return collectBlob(stream);
|
|
169
|
+
}
|
|
170
|
+
return collectStream(stream);
|
|
171
|
+
}, "streamCollector");
|
|
172
|
+
async function collectBlob(blob) {
|
|
173
|
+
const base64 = await readToBase64(blob);
|
|
174
|
+
const arrayBuffer = (0, import_util_base64.fromBase64)(base64);
|
|
175
|
+
return new Uint8Array(arrayBuffer);
|
|
176
|
+
}
|
|
177
|
+
__name(collectBlob, "collectBlob");
|
|
178
|
+
async function collectStream(stream) {
|
|
179
|
+
let res = new Uint8Array(0);
|
|
180
|
+
const reader = stream.getReader();
|
|
181
|
+
let isDone = false;
|
|
182
|
+
while (!isDone) {
|
|
183
|
+
const { done, value } = await reader.read();
|
|
184
|
+
if (value) {
|
|
185
|
+
const prior = res;
|
|
186
|
+
res = new Uint8Array(prior.length + value.length);
|
|
187
|
+
res.set(prior);
|
|
188
|
+
res.set(value, prior.length);
|
|
189
|
+
}
|
|
190
|
+
isDone = done;
|
|
191
|
+
}
|
|
192
|
+
return res;
|
|
193
|
+
}
|
|
194
|
+
__name(collectStream, "collectStream");
|
|
195
|
+
function readToBase64(blob) {
|
|
196
|
+
return new Promise((resolve, reject) => {
|
|
197
|
+
const reader = new FileReader();
|
|
198
|
+
reader.onloadend = () => {
|
|
199
|
+
if (reader.readyState !== 2) {
|
|
200
|
+
return reject(new Error("Reader aborted too early"));
|
|
201
|
+
}
|
|
202
|
+
const result = reader.result ?? "";
|
|
203
|
+
const commaIndex = result.indexOf(",");
|
|
204
|
+
const dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;
|
|
205
|
+
resolve(result.substring(dataOffset));
|
|
206
|
+
};
|
|
207
|
+
reader.onabort = () => reject(new Error("Read aborted"));
|
|
208
|
+
reader.onerror = () => reject(reader.error);
|
|
209
|
+
reader.readAsDataURL(blob);
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
__name(readToBase64, "readToBase64");
|
|
213
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
214
|
+
0 && (module.exports = {
|
|
215
|
+
FetchHttpHandler,
|
|
216
|
+
keepAliveSupport,
|
|
217
|
+
streamCollector
|
|
218
|
+
});
|
|
@@ -1,15 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.requestTimeout = void 0;
|
|
4
|
-
function requestTimeout(timeoutInMs = 0) {
|
|
5
|
-
return new Promise((resolve, reject) => {
|
|
6
|
-
if (timeoutInMs) {
|
|
7
|
-
setTimeout(() => {
|
|
8
|
-
const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);
|
|
9
|
-
timeoutError.name = "TimeoutError";
|
|
10
|
-
reject(timeoutError);
|
|
11
|
-
}, timeoutInMs);
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
exports.requestTimeout = requestTimeout;
|
|
1
|
+
module.exports = require("./index.js");
|
|
@@ -1,50 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.streamCollector = void 0;
|
|
4
|
-
const util_base64_1 = require("@smithy/util-base64");
|
|
5
|
-
const streamCollector = (stream) => {
|
|
6
|
-
if (typeof Blob === "function" && stream instanceof Blob) {
|
|
7
|
-
return collectBlob(stream);
|
|
8
|
-
}
|
|
9
|
-
return collectStream(stream);
|
|
10
|
-
};
|
|
11
|
-
exports.streamCollector = streamCollector;
|
|
12
|
-
async function collectBlob(blob) {
|
|
13
|
-
const base64 = await readToBase64(blob);
|
|
14
|
-
const arrayBuffer = (0, util_base64_1.fromBase64)(base64);
|
|
15
|
-
return new Uint8Array(arrayBuffer);
|
|
16
|
-
}
|
|
17
|
-
async function collectStream(stream) {
|
|
18
|
-
let res = new Uint8Array(0);
|
|
19
|
-
const reader = stream.getReader();
|
|
20
|
-
let isDone = false;
|
|
21
|
-
while (!isDone) {
|
|
22
|
-
const { done, value } = await reader.read();
|
|
23
|
-
if (value) {
|
|
24
|
-
const prior = res;
|
|
25
|
-
res = new Uint8Array(prior.length + value.length);
|
|
26
|
-
res.set(prior);
|
|
27
|
-
res.set(value, prior.length);
|
|
28
|
-
}
|
|
29
|
-
isDone = done;
|
|
30
|
-
}
|
|
31
|
-
return res;
|
|
32
|
-
}
|
|
33
|
-
function readToBase64(blob) {
|
|
34
|
-
return new Promise((resolve, reject) => {
|
|
35
|
-
const reader = new FileReader();
|
|
36
|
-
reader.onloadend = () => {
|
|
37
|
-
var _a;
|
|
38
|
-
if (reader.readyState !== 2) {
|
|
39
|
-
return reject(new Error("Reader aborted too early"));
|
|
40
|
-
}
|
|
41
|
-
const result = ((_a = reader.result) !== null && _a !== void 0 ? _a : "");
|
|
42
|
-
const commaIndex = result.indexOf(",");
|
|
43
|
-
const dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;
|
|
44
|
-
resolve(result.substring(dataOffset));
|
|
45
|
-
};
|
|
46
|
-
reader.onabort = () => reject(new Error("Read aborted"));
|
|
47
|
-
reader.onerror = () => reject(reader.error);
|
|
48
|
-
reader.readAsDataURL(blob);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
1
|
+
module.exports = require("./index.js");
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smithy/fetch-http-handler",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Provides a way to make requests",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types && yarn build:types:downlevel'",
|
|
7
|
-
"build:cjs": "
|
|
7
|
+
"build:cjs": "node ../../scripts/inline fetch-http-handler",
|
|
8
8
|
"build:es": "yarn g:tsc -p tsconfig.es.json",
|
|
9
9
|
"build:types": "yarn g:tsc -p tsconfig.types.json",
|
|
10
10
|
"build:types:downlevel": "downlevel-dts dist-types dist-types/ts3.4",
|
|
@@ -24,14 +24,14 @@
|
|
|
24
24
|
"module": "./dist-es/index.js",
|
|
25
25
|
"types": "./dist-types/index.d.ts",
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@smithy/protocol-http": "^3.0
|
|
28
|
-
"@smithy/querystring-builder": "^2.0
|
|
29
|
-
"@smithy/types": "^2.
|
|
30
|
-
"@smithy/util-base64": "^2.0
|
|
27
|
+
"@smithy/protocol-http": "^3.1.0",
|
|
28
|
+
"@smithy/querystring-builder": "^2.1.0",
|
|
29
|
+
"@smithy/types": "^2.9.0",
|
|
30
|
+
"@smithy/util-base64": "^2.1.0",
|
|
31
31
|
"tslib": "^2.5.0"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@smithy/abort-controller": "^2.0
|
|
34
|
+
"@smithy/abort-controller": "^2.1.0",
|
|
35
35
|
"@tsconfig/recommended": "1.0.1",
|
|
36
36
|
"@types/chai-as-promised": "^7.1.2",
|
|
37
37
|
"chai": "^4.2.0",
|