@aws-sdk/middleware-flexible-checksums 3.489.0 → 3.496.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.
@@ -1,2 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ module.exports = require("./index.js");
@@ -1,18 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM = exports.DEFAULT_CHECKSUM_ALGORITHM = exports.ChecksumLocation = exports.ChecksumAlgorithm = void 0;
4
- var ChecksumAlgorithm;
5
- (function (ChecksumAlgorithm) {
6
- ChecksumAlgorithm["MD5"] = "MD5";
7
- ChecksumAlgorithm["CRC32"] = "CRC32";
8
- ChecksumAlgorithm["CRC32C"] = "CRC32C";
9
- ChecksumAlgorithm["SHA1"] = "SHA1";
10
- ChecksumAlgorithm["SHA256"] = "SHA256";
11
- })(ChecksumAlgorithm = exports.ChecksumAlgorithm || (exports.ChecksumAlgorithm = {}));
12
- var ChecksumLocation;
13
- (function (ChecksumLocation) {
14
- ChecksumLocation["HEADER"] = "header";
15
- ChecksumLocation["TRAILER"] = "trailer";
16
- })(ChecksumLocation = exports.ChecksumLocation || (exports.ChecksumLocation = {}));
17
- exports.DEFAULT_CHECKSUM_ALGORITHM = ChecksumAlgorithm.MD5;
18
- exports.S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM = ChecksumAlgorithm.CRC32;
1
+ module.exports = require("./index.js");
@@ -1,73 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.flexibleChecksumsMiddleware = exports.flexibleChecksumsMiddlewareOptions = void 0;
4
- const protocol_http_1 = require("@smithy/protocol-http");
5
- const getChecksumAlgorithmForRequest_1 = require("./getChecksumAlgorithmForRequest");
6
- const getChecksumLocationName_1 = require("./getChecksumLocationName");
7
- const hasHeader_1 = require("./hasHeader");
8
- const isStreaming_1 = require("./isStreaming");
9
- const selectChecksumAlgorithmFunction_1 = require("./selectChecksumAlgorithmFunction");
10
- const stringHasher_1 = require("./stringHasher");
11
- exports.flexibleChecksumsMiddlewareOptions = {
12
- name: "flexibleChecksumsMiddleware",
13
- step: "build",
14
- tags: ["BODY_CHECKSUM"],
15
- override: true,
16
- };
17
- const flexibleChecksumsMiddleware = (config, middlewareConfig) => (next, context) => async (args) => {
18
- if (!protocol_http_1.HttpRequest.isInstance(args.request)) {
19
- return next(args);
20
- }
21
- const { request } = args;
22
- const { body: requestBody, headers } = request;
23
- const { base64Encoder, streamHasher } = config;
24
- const { input, requestChecksumRequired, requestAlgorithmMember } = middlewareConfig;
25
- const checksumAlgorithm = (0, getChecksumAlgorithmForRequest_1.getChecksumAlgorithmForRequest)(input, {
26
- requestChecksumRequired,
27
- requestAlgorithmMember,
28
- }, !!context.isS3ExpressBucket);
29
- let updatedBody = requestBody;
30
- let updatedHeaders = headers;
31
- if (checksumAlgorithm) {
32
- const checksumLocationName = (0, getChecksumLocationName_1.getChecksumLocationName)(checksumAlgorithm);
33
- const checksumAlgorithmFn = (0, selectChecksumAlgorithmFunction_1.selectChecksumAlgorithmFunction)(checksumAlgorithm, config);
34
- if ((0, isStreaming_1.isStreaming)(requestBody)) {
35
- const { getAwsChunkedEncodingStream, bodyLengthChecker } = config;
36
- updatedBody = getAwsChunkedEncodingStream(requestBody, {
37
- base64Encoder,
38
- bodyLengthChecker,
39
- checksumLocationName,
40
- checksumAlgorithmFn,
41
- streamHasher,
42
- });
43
- updatedHeaders = {
44
- ...headers,
45
- "content-encoding": headers["content-encoding"]
46
- ? `${headers["content-encoding"]},aws-chunked`
47
- : "aws-chunked",
48
- "transfer-encoding": "chunked",
49
- "x-amz-decoded-content-length": headers["content-length"],
50
- "x-amz-content-sha256": "STREAMING-UNSIGNED-PAYLOAD-TRAILER",
51
- "x-amz-trailer": checksumLocationName,
52
- };
53
- delete updatedHeaders["content-length"];
54
- }
55
- else if (!(0, hasHeader_1.hasHeader)(checksumLocationName, headers)) {
56
- const rawChecksum = await (0, stringHasher_1.stringHasher)(checksumAlgorithmFn, requestBody);
57
- updatedHeaders = {
58
- ...headers,
59
- [checksumLocationName]: base64Encoder(rawChecksum),
60
- };
61
- }
62
- }
63
- const result = await next({
64
- ...args,
65
- request: {
66
- ...request,
67
- headers: updatedHeaders,
68
- body: updatedBody,
69
- },
70
- });
71
- return result;
72
- };
73
- exports.flexibleChecksumsMiddleware = flexibleChecksumsMiddleware;
1
+ module.exports = require("./index.js");
@@ -1,54 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.flexibleChecksumsResponseMiddleware = exports.flexibleChecksumsResponseMiddlewareOptions = void 0;
4
- const protocol_http_1 = require("@smithy/protocol-http");
5
- const getChecksumAlgorithmListForResponse_1 = require("./getChecksumAlgorithmListForResponse");
6
- const getChecksumLocationName_1 = require("./getChecksumLocationName");
7
- const isChecksumWithPartNumber_1 = require("./isChecksumWithPartNumber");
8
- const isStreaming_1 = require("./isStreaming");
9
- const create_read_stream_on_buffer_1 = require("./streams/create-read-stream-on-buffer");
10
- const validateChecksumFromResponse_1 = require("./validateChecksumFromResponse");
11
- exports.flexibleChecksumsResponseMiddlewareOptions = {
12
- name: "flexibleChecksumsResponseMiddleware",
13
- toMiddleware: "deserializerMiddleware",
14
- relation: "after",
15
- tags: ["BODY_CHECKSUM"],
16
- override: true,
17
- };
18
- const flexibleChecksumsResponseMiddleware = (config, middlewareConfig) => (next, context) => async (args) => {
19
- if (!protocol_http_1.HttpRequest.isInstance(args.request)) {
20
- return next(args);
21
- }
22
- const input = args.input;
23
- const result = await next(args);
24
- const response = result.response;
25
- let collectedStream = undefined;
26
- const { requestValidationModeMember, responseAlgorithms } = middlewareConfig;
27
- if (requestValidationModeMember && input[requestValidationModeMember] === "ENABLED") {
28
- const { clientName, commandName } = context;
29
- const isS3WholeObjectMultipartGetResponseChecksum = clientName === "S3Client" &&
30
- commandName === "GetObjectCommand" &&
31
- (0, getChecksumAlgorithmListForResponse_1.getChecksumAlgorithmListForResponse)(responseAlgorithms).every((algorithm) => {
32
- const responseHeader = (0, getChecksumLocationName_1.getChecksumLocationName)(algorithm);
33
- const checksumFromResponse = response.headers[responseHeader];
34
- return !checksumFromResponse || (0, isChecksumWithPartNumber_1.isChecksumWithPartNumber)(checksumFromResponse);
35
- });
36
- if (isS3WholeObjectMultipartGetResponseChecksum) {
37
- return result;
38
- }
39
- const isStreamingBody = (0, isStreaming_1.isStreaming)(response.body);
40
- if (isStreamingBody) {
41
- collectedStream = await config.streamCollector(response.body);
42
- response.body = (0, create_read_stream_on_buffer_1.createReadStreamOnBuffer)(collectedStream);
43
- }
44
- await (0, validateChecksumFromResponse_1.validateChecksumFromResponse)(result.response, {
45
- config,
46
- responseAlgorithms,
47
- });
48
- if (isStreamingBody && collectedStream) {
49
- response.body = (0, create_read_stream_on_buffer_1.createReadStreamOnBuffer)(collectedStream);
50
- }
51
- }
52
- return result;
53
- };
54
- exports.flexibleChecksumsResponseMiddleware = flexibleChecksumsResponseMiddleware;
1
+ module.exports = require("./index.js");
@@ -1,10 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getChecksum = void 0;
4
- const isStreaming_1 = require("./isStreaming");
5
- const stringHasher_1 = require("./stringHasher");
6
- const getChecksum = async (body, { streamHasher, checksumAlgorithmFn, base64Encoder }) => {
7
- const digest = (0, isStreaming_1.isStreaming)(body) ? streamHasher(checksumAlgorithmFn, body) : (0, stringHasher_1.stringHasher)(checksumAlgorithmFn, body);
8
- return base64Encoder(await digest);
9
- };
10
- exports.getChecksum = getChecksum;
1
+ module.exports = require("./index.js");
@@ -1,18 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getChecksumAlgorithmForRequest = void 0;
4
- const constants_1 = require("./constants");
5
- const types_1 = require("./types");
6
- const getChecksumAlgorithmForRequest = (input, { requestChecksumRequired, requestAlgorithmMember }, isS3Express) => {
7
- const defaultAlgorithm = isS3Express ? constants_1.S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM : constants_1.DEFAULT_CHECKSUM_ALGORITHM;
8
- if (!requestAlgorithmMember || !input[requestAlgorithmMember]) {
9
- return requestChecksumRequired ? defaultAlgorithm : undefined;
10
- }
11
- const checksumAlgorithm = input[requestAlgorithmMember];
12
- if (!types_1.CLIENT_SUPPORTED_ALGORITHMS.includes(checksumAlgorithm)) {
13
- throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client.` +
14
- ` Select one of ${types_1.CLIENT_SUPPORTED_ALGORITHMS}.`);
15
- }
16
- return checksumAlgorithm;
17
- };
18
- exports.getChecksumAlgorithmForRequest = getChecksumAlgorithmForRequest;
1
+ module.exports = require("./index.js");
@@ -1,15 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getChecksumAlgorithmListForResponse = void 0;
4
- const types_1 = require("./types");
5
- const getChecksumAlgorithmListForResponse = (responseAlgorithms = []) => {
6
- const validChecksumAlgorithms = [];
7
- for (const algorithm of types_1.PRIORITY_ORDER_ALGORITHMS) {
8
- if (!responseAlgorithms.includes(algorithm) || !types_1.CLIENT_SUPPORTED_ALGORITHMS.includes(algorithm)) {
9
- continue;
10
- }
11
- validChecksumAlgorithms.push(algorithm);
12
- }
13
- return validChecksumAlgorithms;
14
- };
15
- exports.getChecksumAlgorithmListForResponse = getChecksumAlgorithmListForResponse;
1
+ module.exports = require("./index.js");
@@ -1,6 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getChecksumLocationName = void 0;
4
- const constants_1 = require("./constants");
5
- const getChecksumLocationName = (algorithm) => algorithm === constants_1.ChecksumAlgorithm.MD5 ? "content-md5" : `x-amz-checksum-${algorithm.toLowerCase()}`;
6
- exports.getChecksumLocationName = getChecksumLocationName;
1
+ module.exports = require("./index.js");
@@ -1,12 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFlexibleChecksumsPlugin = void 0;
4
- const flexibleChecksumsMiddleware_1 = require("./flexibleChecksumsMiddleware");
5
- const flexibleChecksumsResponseMiddleware_1 = require("./flexibleChecksumsResponseMiddleware");
6
- const getFlexibleChecksumsPlugin = (config, middlewareConfig) => ({
7
- applyToStack: (clientStack) => {
8
- clientStack.add((0, flexibleChecksumsMiddleware_1.flexibleChecksumsMiddleware)(config, middlewareConfig), flexibleChecksumsMiddleware_1.flexibleChecksumsMiddlewareOptions);
9
- clientStack.addRelativeTo((0, flexibleChecksumsResponseMiddleware_1.flexibleChecksumsResponseMiddleware)(config, middlewareConfig), flexibleChecksumsResponseMiddleware_1.flexibleChecksumsResponseMiddlewareOptions);
10
- },
11
- });
12
- exports.getFlexibleChecksumsPlugin = getFlexibleChecksumsPlugin;
1
+ module.exports = require("./index.js");
@@ -1,13 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hasHeader = void 0;
4
- const hasHeader = (header, headers) => {
5
- const soughtHeader = header.toLowerCase();
6
- for (const headerName of Object.keys(headers)) {
7
- if (soughtHeader === headerName.toLowerCase()) {
8
- return true;
9
- }
10
- }
11
- return false;
12
- };
13
- exports.hasHeader = hasHeader;
1
+ module.exports = require("./index.js");
package/dist-cjs/index.js CHANGED
@@ -1,6 +1,308 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./constants"), exports);
5
- tslib_1.__exportStar(require("./flexibleChecksumsMiddleware"), exports);
6
- tslib_1.__exportStar(require("./getFlexibleChecksumsPlugin"), exports);
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
+ ChecksumAlgorithm: () => ChecksumAlgorithm,
24
+ ChecksumLocation: () => ChecksumLocation,
25
+ DEFAULT_CHECKSUM_ALGORITHM: () => DEFAULT_CHECKSUM_ALGORITHM,
26
+ S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM: () => S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM,
27
+ flexibleChecksumsMiddleware: () => flexibleChecksumsMiddleware,
28
+ flexibleChecksumsMiddlewareOptions: () => flexibleChecksumsMiddlewareOptions,
29
+ getFlexibleChecksumsPlugin: () => getFlexibleChecksumsPlugin
30
+ });
31
+ module.exports = __toCommonJS(src_exports);
32
+
33
+ // src/constants.ts
34
+ var ChecksumAlgorithm = /* @__PURE__ */ ((ChecksumAlgorithm3) => {
35
+ ChecksumAlgorithm3["MD5"] = "MD5";
36
+ ChecksumAlgorithm3["CRC32"] = "CRC32";
37
+ ChecksumAlgorithm3["CRC32C"] = "CRC32C";
38
+ ChecksumAlgorithm3["SHA1"] = "SHA1";
39
+ ChecksumAlgorithm3["SHA256"] = "SHA256";
40
+ return ChecksumAlgorithm3;
41
+ })(ChecksumAlgorithm || {});
42
+ var ChecksumLocation = /* @__PURE__ */ ((ChecksumLocation2) => {
43
+ ChecksumLocation2["HEADER"] = "header";
44
+ ChecksumLocation2["TRAILER"] = "trailer";
45
+ return ChecksumLocation2;
46
+ })(ChecksumLocation || {});
47
+ var DEFAULT_CHECKSUM_ALGORITHM = "MD5" /* MD5 */;
48
+ var S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM = "CRC32" /* CRC32 */;
49
+
50
+ // src/flexibleChecksumsMiddleware.ts
51
+ var import_protocol_http = require("@smithy/protocol-http");
52
+
53
+ // src/types.ts
54
+ var CLIENT_SUPPORTED_ALGORITHMS = [
55
+ "CRC32" /* CRC32 */,
56
+ "CRC32C" /* CRC32C */,
57
+ "SHA1" /* SHA1 */,
58
+ "SHA256" /* SHA256 */
59
+ ];
60
+ var PRIORITY_ORDER_ALGORITHMS = [
61
+ "CRC32" /* CRC32 */,
62
+ "CRC32C" /* CRC32C */,
63
+ "SHA1" /* SHA1 */,
64
+ "SHA256" /* SHA256 */
65
+ ];
66
+
67
+ // src/getChecksumAlgorithmForRequest.ts
68
+ var getChecksumAlgorithmForRequest = /* @__PURE__ */ __name((input, { requestChecksumRequired, requestAlgorithmMember }, isS3Express) => {
69
+ const defaultAlgorithm = isS3Express ? S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM : DEFAULT_CHECKSUM_ALGORITHM;
70
+ if (!requestAlgorithmMember || !input[requestAlgorithmMember]) {
71
+ return requestChecksumRequired ? defaultAlgorithm : void 0;
72
+ }
73
+ const checksumAlgorithm = input[requestAlgorithmMember];
74
+ if (!CLIENT_SUPPORTED_ALGORITHMS.includes(checksumAlgorithm)) {
75
+ throw new Error(
76
+ `The checksum algorithm "${checksumAlgorithm}" is not supported by the client. Select one of ${CLIENT_SUPPORTED_ALGORITHMS}.`
77
+ );
78
+ }
79
+ return checksumAlgorithm;
80
+ }, "getChecksumAlgorithmForRequest");
81
+
82
+ // src/getChecksumLocationName.ts
83
+ var getChecksumLocationName = /* @__PURE__ */ __name((algorithm) => algorithm === "MD5" /* MD5 */ ? "content-md5" : `x-amz-checksum-${algorithm.toLowerCase()}`, "getChecksumLocationName");
84
+
85
+ // src/hasHeader.ts
86
+ var hasHeader = /* @__PURE__ */ __name((header, headers) => {
87
+ const soughtHeader = header.toLowerCase();
88
+ for (const headerName of Object.keys(headers)) {
89
+ if (soughtHeader === headerName.toLowerCase()) {
90
+ return true;
91
+ }
92
+ }
93
+ return false;
94
+ }, "hasHeader");
95
+
96
+ // src/isStreaming.ts
97
+ var import_is_array_buffer = require("@smithy/is-array-buffer");
98
+ var isStreaming = /* @__PURE__ */ __name((body) => body !== void 0 && typeof body !== "string" && !ArrayBuffer.isView(body) && !(0, import_is_array_buffer.isArrayBuffer)(body), "isStreaming");
99
+
100
+ // src/selectChecksumAlgorithmFunction.ts
101
+ var import_crc32 = require("@aws-crypto/crc32");
102
+ var import_crc32c = require("@aws-crypto/crc32c");
103
+ var selectChecksumAlgorithmFunction = /* @__PURE__ */ __name((checksumAlgorithm, config) => ({
104
+ ["MD5" /* MD5 */]: config.md5,
105
+ ["CRC32" /* CRC32 */]: import_crc32.AwsCrc32,
106
+ ["CRC32C" /* CRC32C */]: import_crc32c.AwsCrc32c,
107
+ ["SHA1" /* SHA1 */]: config.sha1,
108
+ ["SHA256" /* SHA256 */]: config.sha256
109
+ })[checksumAlgorithm], "selectChecksumAlgorithmFunction");
110
+
111
+ // src/stringHasher.ts
112
+ var import_util_utf8 = require("@smithy/util-utf8");
113
+ var stringHasher = /* @__PURE__ */ __name((checksumAlgorithmFn, body) => {
114
+ const hash = new checksumAlgorithmFn();
115
+ hash.update((0, import_util_utf8.toUint8Array)(body || ""));
116
+ return hash.digest();
117
+ }, "stringHasher");
118
+
119
+ // src/flexibleChecksumsMiddleware.ts
120
+ var flexibleChecksumsMiddlewareOptions = {
121
+ name: "flexibleChecksumsMiddleware",
122
+ step: "build",
123
+ tags: ["BODY_CHECKSUM"],
124
+ override: true
125
+ };
126
+ var flexibleChecksumsMiddleware = /* @__PURE__ */ __name((config, middlewareConfig) => (next, context) => async (args) => {
127
+ if (!import_protocol_http.HttpRequest.isInstance(args.request)) {
128
+ return next(args);
129
+ }
130
+ const { request } = args;
131
+ const { body: requestBody, headers } = request;
132
+ const { base64Encoder, streamHasher } = config;
133
+ const { input, requestChecksumRequired, requestAlgorithmMember } = middlewareConfig;
134
+ const checksumAlgorithm = getChecksumAlgorithmForRequest(
135
+ input,
136
+ {
137
+ requestChecksumRequired,
138
+ requestAlgorithmMember
139
+ },
140
+ !!context.isS3ExpressBucket
141
+ );
142
+ let updatedBody = requestBody;
143
+ let updatedHeaders = headers;
144
+ if (checksumAlgorithm) {
145
+ const checksumLocationName = getChecksumLocationName(checksumAlgorithm);
146
+ const checksumAlgorithmFn = selectChecksumAlgorithmFunction(checksumAlgorithm, config);
147
+ if (isStreaming(requestBody)) {
148
+ const { getAwsChunkedEncodingStream, bodyLengthChecker } = config;
149
+ updatedBody = getAwsChunkedEncodingStream(requestBody, {
150
+ base64Encoder,
151
+ bodyLengthChecker,
152
+ checksumLocationName,
153
+ checksumAlgorithmFn,
154
+ streamHasher
155
+ });
156
+ updatedHeaders = {
157
+ ...headers,
158
+ "content-encoding": headers["content-encoding"] ? `${headers["content-encoding"]},aws-chunked` : "aws-chunked",
159
+ "transfer-encoding": "chunked",
160
+ "x-amz-decoded-content-length": headers["content-length"],
161
+ "x-amz-content-sha256": "STREAMING-UNSIGNED-PAYLOAD-TRAILER",
162
+ "x-amz-trailer": checksumLocationName
163
+ };
164
+ delete updatedHeaders["content-length"];
165
+ } else if (!hasHeader(checksumLocationName, headers)) {
166
+ const rawChecksum = await stringHasher(checksumAlgorithmFn, requestBody);
167
+ updatedHeaders = {
168
+ ...headers,
169
+ [checksumLocationName]: base64Encoder(rawChecksum)
170
+ };
171
+ }
172
+ }
173
+ const result = await next({
174
+ ...args,
175
+ request: {
176
+ ...request,
177
+ headers: updatedHeaders,
178
+ body: updatedBody
179
+ }
180
+ });
181
+ return result;
182
+ }, "flexibleChecksumsMiddleware");
183
+
184
+ // src/flexibleChecksumsResponseMiddleware.ts
185
+
186
+
187
+ // src/getChecksumAlgorithmListForResponse.ts
188
+ var getChecksumAlgorithmListForResponse = /* @__PURE__ */ __name((responseAlgorithms = []) => {
189
+ const validChecksumAlgorithms = [];
190
+ for (const algorithm of PRIORITY_ORDER_ALGORITHMS) {
191
+ if (!responseAlgorithms.includes(algorithm) || !CLIENT_SUPPORTED_ALGORITHMS.includes(algorithm)) {
192
+ continue;
193
+ }
194
+ validChecksumAlgorithms.push(algorithm);
195
+ }
196
+ return validChecksumAlgorithms;
197
+ }, "getChecksumAlgorithmListForResponse");
198
+
199
+ // src/isChecksumWithPartNumber.ts
200
+ var isChecksumWithPartNumber = /* @__PURE__ */ __name((checksum) => {
201
+ const lastHyphenIndex = checksum.lastIndexOf("-");
202
+ if (lastHyphenIndex !== -1) {
203
+ const numberPart = checksum.slice(lastHyphenIndex + 1);
204
+ if (!numberPart.startsWith("0")) {
205
+ const number = parseInt(numberPart, 10);
206
+ if (!isNaN(number) && number >= 1 && number <= 1e4) {
207
+ return true;
208
+ }
209
+ }
210
+ }
211
+ return false;
212
+ }, "isChecksumWithPartNumber");
213
+
214
+ // src/flexibleChecksumsResponseMiddleware.ts
215
+ var import_create_read_stream_on_buffer = require("./streams/create-read-stream-on-buffer");
216
+
217
+ // src/getChecksum.ts
218
+ var getChecksum = /* @__PURE__ */ __name(async (body, { streamHasher, checksumAlgorithmFn, base64Encoder }) => {
219
+ const digest = isStreaming(body) ? streamHasher(checksumAlgorithmFn, body) : stringHasher(checksumAlgorithmFn, body);
220
+ return base64Encoder(await digest);
221
+ }, "getChecksum");
222
+
223
+ // src/validateChecksumFromResponse.ts
224
+ var validateChecksumFromResponse = /* @__PURE__ */ __name(async (response, { config, responseAlgorithms }) => {
225
+ const checksumAlgorithms = getChecksumAlgorithmListForResponse(responseAlgorithms);
226
+ const { body: responseBody, headers: responseHeaders } = response;
227
+ for (const algorithm of checksumAlgorithms) {
228
+ const responseHeader = getChecksumLocationName(algorithm);
229
+ const checksumFromResponse = responseHeaders[responseHeader];
230
+ if (checksumFromResponse) {
231
+ const checksumAlgorithmFn = selectChecksumAlgorithmFunction(algorithm, config);
232
+ const { streamHasher, base64Encoder } = config;
233
+ const checksum = await getChecksum(responseBody, { streamHasher, checksumAlgorithmFn, base64Encoder });
234
+ if (checksum === checksumFromResponse) {
235
+ break;
236
+ }
237
+ throw new Error(
238
+ `Checksum mismatch: expected "${checksum}" but received "${checksumFromResponse}" in response header "${responseHeader}".`
239
+ );
240
+ }
241
+ }
242
+ }, "validateChecksumFromResponse");
243
+
244
+ // src/flexibleChecksumsResponseMiddleware.ts
245
+ var flexibleChecksumsResponseMiddlewareOptions = {
246
+ name: "flexibleChecksumsResponseMiddleware",
247
+ toMiddleware: "deserializerMiddleware",
248
+ relation: "after",
249
+ tags: ["BODY_CHECKSUM"],
250
+ override: true
251
+ };
252
+ var flexibleChecksumsResponseMiddleware = /* @__PURE__ */ __name((config, middlewareConfig) => (next, context) => async (args) => {
253
+ if (!import_protocol_http.HttpRequest.isInstance(args.request)) {
254
+ return next(args);
255
+ }
256
+ const input = args.input;
257
+ const result = await next(args);
258
+ const response = result.response;
259
+ let collectedStream = void 0;
260
+ const { requestValidationModeMember, responseAlgorithms } = middlewareConfig;
261
+ if (requestValidationModeMember && input[requestValidationModeMember] === "ENABLED") {
262
+ const { clientName, commandName } = context;
263
+ const isS3WholeObjectMultipartGetResponseChecksum = clientName === "S3Client" && commandName === "GetObjectCommand" && getChecksumAlgorithmListForResponse(responseAlgorithms).every((algorithm) => {
264
+ const responseHeader = getChecksumLocationName(algorithm);
265
+ const checksumFromResponse = response.headers[responseHeader];
266
+ return !checksumFromResponse || isChecksumWithPartNumber(checksumFromResponse);
267
+ });
268
+ if (isS3WholeObjectMultipartGetResponseChecksum) {
269
+ return result;
270
+ }
271
+ const isStreamingBody = isStreaming(response.body);
272
+ if (isStreamingBody) {
273
+ collectedStream = await config.streamCollector(response.body);
274
+ response.body = (0, import_create_read_stream_on_buffer.createReadStreamOnBuffer)(collectedStream);
275
+ }
276
+ await validateChecksumFromResponse(result.response, {
277
+ config,
278
+ responseAlgorithms
279
+ });
280
+ if (isStreamingBody && collectedStream) {
281
+ response.body = (0, import_create_read_stream_on_buffer.createReadStreamOnBuffer)(collectedStream);
282
+ }
283
+ }
284
+ return result;
285
+ }, "flexibleChecksumsResponseMiddleware");
286
+
287
+ // src/getFlexibleChecksumsPlugin.ts
288
+ var getFlexibleChecksumsPlugin = /* @__PURE__ */ __name((config, middlewareConfig) => ({
289
+ applyToStack: (clientStack) => {
290
+ clientStack.add(flexibleChecksumsMiddleware(config, middlewareConfig), flexibleChecksumsMiddlewareOptions);
291
+ clientStack.addRelativeTo(
292
+ flexibleChecksumsResponseMiddleware(config, middlewareConfig),
293
+ flexibleChecksumsResponseMiddlewareOptions
294
+ );
295
+ }
296
+ }), "getFlexibleChecksumsPlugin");
297
+ // Annotate the CommonJS export names for ESM import in node:
298
+
299
+ 0 && (module.exports = {
300
+ ChecksumAlgorithm,
301
+ ChecksumLocation,
302
+ DEFAULT_CHECKSUM_ALGORITHM,
303
+ S3_EXPRESS_DEFAULT_CHECKSUM_ALGORITHM,
304
+ flexibleChecksumsMiddleware,
305
+ flexibleChecksumsMiddlewareOptions,
306
+ getFlexibleChecksumsPlugin
307
+ });
308
+
@@ -1,17 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isChecksumWithPartNumber = void 0;
4
- const isChecksumWithPartNumber = (checksum) => {
5
- const lastHyphenIndex = checksum.lastIndexOf("-");
6
- if (lastHyphenIndex !== -1) {
7
- const numberPart = checksum.slice(lastHyphenIndex + 1);
8
- if (!numberPart.startsWith("0")) {
9
- const number = parseInt(numberPart, 10);
10
- if (!isNaN(number) && number >= 1 && number <= 10000) {
11
- return true;
12
- }
13
- }
14
- }
15
- return false;
16
- };
17
- exports.isChecksumWithPartNumber = isChecksumWithPartNumber;
1
+ module.exports = require("./index.js");
@@ -1,6 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isStreaming = void 0;
4
- const is_array_buffer_1 = require("@smithy/is-array-buffer");
5
- const isStreaming = (body) => body !== undefined && typeof body !== "string" && !ArrayBuffer.isView(body) && !(0, is_array_buffer_1.isArrayBuffer)(body);
6
- exports.isStreaming = isStreaming;
1
+ module.exports = require("./index.js");
@@ -1,14 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.selectChecksumAlgorithmFunction = void 0;
4
- const crc32_1 = require("@aws-crypto/crc32");
5
- const crc32c_1 = require("@aws-crypto/crc32c");
6
- const constants_1 = require("./constants");
7
- const selectChecksumAlgorithmFunction = (checksumAlgorithm, config) => ({
8
- [constants_1.ChecksumAlgorithm.MD5]: config.md5,
9
- [constants_1.ChecksumAlgorithm.CRC32]: crc32_1.AwsCrc32,
10
- [constants_1.ChecksumAlgorithm.CRC32C]: crc32c_1.AwsCrc32c,
11
- [constants_1.ChecksumAlgorithm.SHA1]: config.sha1,
12
- [constants_1.ChecksumAlgorithm.SHA256]: config.sha256,
13
- }[checksumAlgorithm]);
14
- exports.selectChecksumAlgorithmFunction = selectChecksumAlgorithmFunction;
1
+ module.exports = require("./index.js");
@@ -1,10 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stringHasher = void 0;
4
- const util_utf8_1 = require("@smithy/util-utf8");
5
- const stringHasher = (checksumAlgorithmFn, body) => {
6
- const hash = new checksumAlgorithmFn();
7
- hash.update((0, util_utf8_1.toUint8Array)(body || ""));
8
- return hash.digest();
9
- };
10
- exports.stringHasher = stringHasher;
1
+ module.exports = require("./index.js");
package/dist-cjs/types.js CHANGED
@@ -1,16 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PRIORITY_ORDER_ALGORITHMS = exports.CLIENT_SUPPORTED_ALGORITHMS = void 0;
4
- const constants_1 = require("./constants");
5
- exports.CLIENT_SUPPORTED_ALGORITHMS = [
6
- constants_1.ChecksumAlgorithm.CRC32,
7
- constants_1.ChecksumAlgorithm.CRC32C,
8
- constants_1.ChecksumAlgorithm.SHA1,
9
- constants_1.ChecksumAlgorithm.SHA256,
10
- ];
11
- exports.PRIORITY_ORDER_ALGORITHMS = [
12
- constants_1.ChecksumAlgorithm.CRC32,
13
- constants_1.ChecksumAlgorithm.CRC32C,
14
- constants_1.ChecksumAlgorithm.SHA1,
15
- constants_1.ChecksumAlgorithm.SHA256,
16
- ];
1
+ module.exports = require("./index.js");
@@ -1,26 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateChecksumFromResponse = void 0;
4
- const getChecksum_1 = require("./getChecksum");
5
- const getChecksumAlgorithmListForResponse_1 = require("./getChecksumAlgorithmListForResponse");
6
- const getChecksumLocationName_1 = require("./getChecksumLocationName");
7
- const selectChecksumAlgorithmFunction_1 = require("./selectChecksumAlgorithmFunction");
8
- const validateChecksumFromResponse = async (response, { config, responseAlgorithms }) => {
9
- const checksumAlgorithms = (0, getChecksumAlgorithmListForResponse_1.getChecksumAlgorithmListForResponse)(responseAlgorithms);
10
- const { body: responseBody, headers: responseHeaders } = response;
11
- for (const algorithm of checksumAlgorithms) {
12
- const responseHeader = (0, getChecksumLocationName_1.getChecksumLocationName)(algorithm);
13
- const checksumFromResponse = responseHeaders[responseHeader];
14
- if (checksumFromResponse) {
15
- const checksumAlgorithmFn = (0, selectChecksumAlgorithmFunction_1.selectChecksumAlgorithmFunction)(algorithm, config);
16
- const { streamHasher, base64Encoder } = config;
17
- const checksum = await (0, getChecksum_1.getChecksum)(responseBody, { streamHasher, checksumAlgorithmFn, base64Encoder });
18
- if (checksum === checksumFromResponse) {
19
- break;
20
- }
21
- throw new Error(`Checksum mismatch: expected "${checksum}" but received "${checksumFromResponse}"` +
22
- ` in response header "${responseHeader}".`);
23
- }
24
- }
25
- };
26
- exports.validateChecksumFromResponse = validateChecksumFromResponse;
1
+ module.exports = require("./index.js");
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@aws-sdk/middleware-flexible-checksums",
3
- "version": "3.489.0",
3
+ "version": "3.496.0",
4
4
  "scripts": {
5
5
  "build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
6
- "build:cjs": "tsc -p tsconfig.cjs.json",
6
+ "build:cjs": "node ../../scripts/compilation/inline middleware-flexible-checksums",
7
7
  "build:es": "tsc -p tsconfig.es.json",
8
8
  "build:include:deps": "lerna run --scope $npm_package_name --include-dependencies build",
9
9
  "build:types": "tsc -p tsconfig.types.json",
@@ -30,15 +30,15 @@
30
30
  "dependencies": {
31
31
  "@aws-crypto/crc32": "3.0.0",
32
32
  "@aws-crypto/crc32c": "3.0.0",
33
- "@aws-sdk/types": "3.489.0",
34
- "@smithy/is-array-buffer": "^2.0.0",
35
- "@smithy/protocol-http": "^3.0.12",
36
- "@smithy/types": "^2.8.0",
37
- "@smithy/util-utf8": "^2.0.2",
33
+ "@aws-sdk/types": "3.496.0",
34
+ "@smithy/is-array-buffer": "^2.1.1",
35
+ "@smithy/protocol-http": "^3.1.1",
36
+ "@smithy/types": "^2.9.1",
37
+ "@smithy/util-utf8": "^2.1.1",
38
38
  "tslib": "^2.5.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@smithy/node-http-handler": "^2.2.2",
41
+ "@smithy/node-http-handler": "^2.3.1",
42
42
  "concurrently": "7.0.0",
43
43
  "downlevel-dts": "0.10.1",
44
44
  "rimraf": "3.0.2",