@aws-sdk/middleware-flexible-checksums 3.972.10 → 3.973.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/index.js CHANGED
@@ -67,21 +67,6 @@ const NODE_RESPONSE_CHECKSUM_VALIDATION_CONFIG_OPTIONS = {
67
67
  default: DEFAULT_RESPONSE_CHECKSUM_VALIDATION,
68
68
  };
69
69
 
70
- const CLIENT_SUPPORTED_ALGORITHMS = [
71
- exports.ChecksumAlgorithm.CRC32,
72
- exports.ChecksumAlgorithm.CRC32C,
73
- exports.ChecksumAlgorithm.CRC64NVME,
74
- exports.ChecksumAlgorithm.SHA1,
75
- exports.ChecksumAlgorithm.SHA256,
76
- ];
77
- const PRIORITY_ORDER_ALGORITHMS = [
78
- exports.ChecksumAlgorithm.SHA256,
79
- exports.ChecksumAlgorithm.SHA1,
80
- exports.ChecksumAlgorithm.CRC32,
81
- exports.ChecksumAlgorithm.CRC32C,
82
- exports.ChecksumAlgorithm.CRC64NVME,
83
- ];
84
-
85
70
  const getChecksumAlgorithmForRequest = (input, { requestChecksumRequired, requestAlgorithmMember, requestChecksumCalculation }) => {
86
71
  if (!requestAlgorithmMember) {
87
72
  return requestChecksumCalculation === RequestChecksumCalculation.WHEN_SUPPORTED || requestChecksumRequired
@@ -92,10 +77,6 @@ const getChecksumAlgorithmForRequest = (input, { requestChecksumRequired, reques
92
77
  return undefined;
93
78
  }
94
79
  const checksumAlgorithm = input[requestAlgorithmMember];
95
- if (!CLIENT_SUPPORTED_ALGORITHMS.includes(checksumAlgorithm)) {
96
- throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client.` +
97
- ` Select one of ${CLIENT_SUPPORTED_ALGORITHMS}.`);
98
- }
99
80
  return checksumAlgorithm;
100
81
  };
101
82
 
@@ -123,25 +104,46 @@ const hasHeaderWithPrefix = (headerPrefix, headers) => {
123
104
 
124
105
  const isStreaming = (body) => body !== undefined && typeof body !== "string" && !ArrayBuffer.isView(body) && !isArrayBuffer.isArrayBuffer(body);
125
106
 
107
+ const CLIENT_SUPPORTED_ALGORITHMS = [
108
+ exports.ChecksumAlgorithm.CRC32,
109
+ exports.ChecksumAlgorithm.CRC32C,
110
+ exports.ChecksumAlgorithm.CRC64NVME,
111
+ exports.ChecksumAlgorithm.SHA1,
112
+ exports.ChecksumAlgorithm.SHA256,
113
+ ];
114
+ const PRIORITY_ORDER_ALGORITHMS = [
115
+ exports.ChecksumAlgorithm.SHA256,
116
+ exports.ChecksumAlgorithm.SHA1,
117
+ exports.ChecksumAlgorithm.CRC32,
118
+ exports.ChecksumAlgorithm.CRC32C,
119
+ exports.ChecksumAlgorithm.CRC64NVME,
120
+ ];
121
+
126
122
  const selectChecksumAlgorithmFunction = (checksumAlgorithm, config) => {
123
+ const { checksumAlgorithms = {} } = config;
127
124
  switch (checksumAlgorithm) {
128
125
  case exports.ChecksumAlgorithm.MD5:
129
- return config.md5;
126
+ return checksumAlgorithms?.MD5 ?? config.md5;
130
127
  case exports.ChecksumAlgorithm.CRC32:
131
- return getCrc32ChecksumAlgorithmFunction.getCrc32ChecksumAlgorithmFunction();
128
+ return checksumAlgorithms?.CRC32 ?? getCrc32ChecksumAlgorithmFunction.getCrc32ChecksumAlgorithmFunction();
132
129
  case exports.ChecksumAlgorithm.CRC32C:
133
- return crc32c.AwsCrc32c;
130
+ return checksumAlgorithms?.CRC32C ?? crc32c.AwsCrc32c;
134
131
  case exports.ChecksumAlgorithm.CRC64NVME:
135
132
  if (typeof crc64Nvme.crc64NvmeCrtContainer.CrtCrc64Nvme !== "function") {
136
- return crc64Nvme.Crc64Nvme;
133
+ return checksumAlgorithms?.CRC64NVME ?? crc64Nvme.Crc64Nvme;
137
134
  }
138
- return crc64Nvme.crc64NvmeCrtContainer.CrtCrc64Nvme;
135
+ return checksumAlgorithms?.CRC64NVME ?? crc64Nvme.crc64NvmeCrtContainer.CrtCrc64Nvme;
139
136
  case exports.ChecksumAlgorithm.SHA1:
140
- return config.sha1;
137
+ return checksumAlgorithms?.SHA1 ?? config.sha1;
141
138
  case exports.ChecksumAlgorithm.SHA256:
142
- return config.sha256;
139
+ return checksumAlgorithms?.SHA256 ?? config.sha256;
143
140
  default:
144
- throw new Error(`Unsupported checksum algorithm: ${checksumAlgorithm}`);
141
+ if (checksumAlgorithms?.[checksumAlgorithm]) {
142
+ return checksumAlgorithms[checksumAlgorithm];
143
+ }
144
+ throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client.` +
145
+ ` Select one of ${CLIENT_SUPPORTED_ALGORITHMS}, or provide an implementation to ` +
146
+ ` the client constructor checksums field.`);
145
147
  }
146
148
  };
147
149
 
@@ -416,6 +418,7 @@ const resolveFlexibleChecksumsConfig = (input) => {
416
418
  requestChecksumCalculation: utilMiddleware.normalizeProvider(requestChecksumCalculation ?? DEFAULT_REQUEST_CHECKSUM_CALCULATION),
417
419
  responseChecksumValidation: utilMiddleware.normalizeProvider(responseChecksumValidation ?? DEFAULT_RESPONSE_CHECKSUM_VALIDATION),
418
420
  requestStreamBufferSize: Number(requestStreamBufferSize ?? 0),
421
+ checksumAlgorithms: input.checksumAlgorithms ?? {},
419
422
  });
420
423
  };
421
424
 
@@ -1,5 +1,4 @@
1
1
  import { DEFAULT_CHECKSUM_ALGORITHM, RequestChecksumCalculation } from "./constants";
2
- import { CLIENT_SUPPORTED_ALGORITHMS } from "./types";
3
2
  export const getChecksumAlgorithmForRequest = (input, { requestChecksumRequired, requestAlgorithmMember, requestChecksumCalculation }) => {
4
3
  if (!requestAlgorithmMember) {
5
4
  return requestChecksumCalculation === RequestChecksumCalculation.WHEN_SUPPORTED || requestChecksumRequired
@@ -10,9 +9,5 @@ export const getChecksumAlgorithmForRequest = (input, { requestChecksumRequired,
10
9
  return undefined;
11
10
  }
12
11
  const checksumAlgorithm = input[requestAlgorithmMember];
13
- if (!CLIENT_SUPPORTED_ALGORITHMS.includes(checksumAlgorithm)) {
14
- throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client.` +
15
- ` Select one of ${CLIENT_SUPPORTED_ALGORITHMS}.`);
16
- }
17
12
  return checksumAlgorithm;
18
13
  };
@@ -1,10 +1,11 @@
1
1
  import { normalizeProvider } from "@smithy/util-middleware";
2
- import { DEFAULT_REQUEST_CHECKSUM_CALCULATION, DEFAULT_RESPONSE_CHECKSUM_VALIDATION, } from "./constants";
2
+ import { DEFAULT_REQUEST_CHECKSUM_CALCULATION, DEFAULT_RESPONSE_CHECKSUM_VALIDATION } from "./constants";
3
3
  export const resolveFlexibleChecksumsConfig = (input) => {
4
4
  const { requestChecksumCalculation, responseChecksumValidation, requestStreamBufferSize } = input;
5
5
  return Object.assign(input, {
6
6
  requestChecksumCalculation: normalizeProvider(requestChecksumCalculation ?? DEFAULT_REQUEST_CHECKSUM_CALCULATION),
7
7
  responseChecksumValidation: normalizeProvider(responseChecksumValidation ?? DEFAULT_RESPONSE_CHECKSUM_VALIDATION),
8
8
  requestStreamBufferSize: Number(requestStreamBufferSize ?? 0),
9
+ checksumAlgorithms: input.checksumAlgorithms ?? {},
9
10
  });
10
11
  };
@@ -2,24 +2,31 @@ import { AwsCrc32c } from "@aws-crypto/crc32c";
2
2
  import { Crc64Nvme, crc64NvmeCrtContainer } from "@aws-sdk/crc64-nvme";
3
3
  import { ChecksumAlgorithm } from "./constants";
4
4
  import { getCrc32ChecksumAlgorithmFunction } from "./getCrc32ChecksumAlgorithmFunction";
5
+ import { CLIENT_SUPPORTED_ALGORITHMS } from "./types";
5
6
  export const selectChecksumAlgorithmFunction = (checksumAlgorithm, config) => {
7
+ const { checksumAlgorithms = {} } = config;
6
8
  switch (checksumAlgorithm) {
7
9
  case ChecksumAlgorithm.MD5:
8
- return config.md5;
10
+ return checksumAlgorithms?.MD5 ?? config.md5;
9
11
  case ChecksumAlgorithm.CRC32:
10
- return getCrc32ChecksumAlgorithmFunction();
12
+ return checksumAlgorithms?.CRC32 ?? getCrc32ChecksumAlgorithmFunction();
11
13
  case ChecksumAlgorithm.CRC32C:
12
- return AwsCrc32c;
14
+ return checksumAlgorithms?.CRC32C ?? AwsCrc32c;
13
15
  case ChecksumAlgorithm.CRC64NVME:
14
16
  if (typeof crc64NvmeCrtContainer.CrtCrc64Nvme !== "function") {
15
- return Crc64Nvme;
17
+ return checksumAlgorithms?.CRC64NVME ?? Crc64Nvme;
16
18
  }
17
- return crc64NvmeCrtContainer.CrtCrc64Nvme;
19
+ return checksumAlgorithms?.CRC64NVME ?? crc64NvmeCrtContainer.CrtCrc64Nvme;
18
20
  case ChecksumAlgorithm.SHA1:
19
- return config.sha1;
21
+ return checksumAlgorithms?.SHA1 ?? config.sha1;
20
22
  case ChecksumAlgorithm.SHA256:
21
- return config.sha256;
23
+ return checksumAlgorithms?.SHA256 ?? config.sha256;
22
24
  default:
23
- throw new Error(`Unsupported checksum algorithm: ${checksumAlgorithm}`);
25
+ if (checksumAlgorithms?.[checksumAlgorithm]) {
26
+ return checksumAlgorithms[checksumAlgorithm];
27
+ }
28
+ throw new Error(`The checksum algorithm "${checksumAlgorithm}" is not supported by the client.` +
29
+ ` Select one of ${CLIENT_SUPPORTED_ALGORITHMS}, or provide an implementation to ` +
30
+ ` the client constructor checksums field.`);
24
31
  }
25
32
  };
@@ -1,5 +1,6 @@
1
- import { BodyLengthCalculator, ChecksumConstructor, Encoder, GetAwsChunkedEncodingStream, HashConstructor, Provider, StreamCollector, StreamHasher } from "@smithy/types";
2
- import { RequestChecksumCalculation, ResponseChecksumValidation } from "./constants";
1
+ import type { BodyLengthCalculator, ChecksumConstructor, Encoder, GetAwsChunkedEncodingStream, HashConstructor, Provider, StreamCollector, StreamHasher } from "@smithy/types";
2
+ import type { RequestChecksumCalculation, ResponseChecksumValidation } from "./constants";
3
+ import type { FlexibleChecksumsInputConfig } from "./resolveFlexibleChecksumsConfig";
3
4
  /**
4
5
  * @internal
5
6
  */
@@ -53,4 +54,5 @@ export interface PreviouslyResolved {
53
54
  * Minimum bytes from a stream to buffer into a chunk before passing to chunked encoding.
54
55
  */
55
56
  requestStreamBufferSize: number;
57
+ checksumAlgorithms?: FlexibleChecksumsInputConfig["checksumAlgorithms"];
56
58
  }
@@ -1,4 +1,5 @@
1
- import { ChecksumAlgorithm, RequestChecksumCalculation } from "./constants";
1
+ import type { ChecksumAlgorithm } from "./constants";
2
+ import { RequestChecksumCalculation } from "./constants";
2
3
  export interface GetChecksumAlgorithmForRequestOptions {
3
4
  /**
4
5
  * Indicates an operation requires a checksum in its HTTP request.
@@ -18,4 +19,4 @@ export interface GetChecksumAlgorithmForRequestOptions {
18
19
  * the priority array of location to use to populate checksum and names
19
20
  * to be used as a key at the location.
20
21
  */
21
- export declare const getChecksumAlgorithmForRequest: (input: any, { requestChecksumRequired, requestAlgorithmMember, requestChecksumCalculation }: GetChecksumAlgorithmForRequestOptions) => ChecksumAlgorithm | undefined;
22
+ export declare const getChecksumAlgorithmForRequest: (input: any, { requestChecksumRequired, requestAlgorithmMember, requestChecksumCalculation }: GetChecksumAlgorithmForRequestOptions) => ChecksumAlgorithm | string | undefined;
@@ -2,4 +2,4 @@ import { ChecksumAlgorithm } from "./constants";
2
2
  /**
3
3
  * Returns location (header/trailer) name to use to populate checksum in.
4
4
  */
5
- export declare const getChecksumLocationName: (algorithm: ChecksumAlgorithm) => string;
5
+ export declare const getChecksumLocationName: (algorithm: ChecksumAlgorithm | string) => string;
@@ -1,5 +1,5 @@
1
- import { Provider } from "@smithy/types";
2
- import { RequestChecksumCalculation, ResponseChecksumValidation } from "./constants";
1
+ import type { ChecksumConstructor, Provider } from "@smithy/types";
2
+ import type { RequestChecksumCalculation, ResponseChecksumValidation } from "./constants";
3
3
  /**
4
4
  * @public
5
5
  */
@@ -28,6 +28,19 @@ export interface FlexibleChecksumsInputConfig {
28
28
  * of 8kb or greater.
29
29
  */
30
30
  requestStreamBufferSize?: number | false;
31
+ /**
32
+ * Optional implementations of checksum algorithms adhering to the
33
+ * Checksum interface.
34
+ */
35
+ checksumAlgorithms?: {
36
+ CRC32?: ChecksumConstructor;
37
+ CRC32C?: ChecksumConstructor;
38
+ CRC64NVME?: ChecksumConstructor;
39
+ SHA1?: ChecksumConstructor;
40
+ SHA256?: ChecksumConstructor;
41
+ } & {
42
+ [algorithmId: string]: ChecksumConstructor;
43
+ };
31
44
  }
32
45
  /**
33
46
  * @internal
@@ -36,6 +49,7 @@ export interface FlexibleChecksumsResolvedConfig {
36
49
  requestChecksumCalculation: Provider<RequestChecksumCalculation>;
37
50
  responseChecksumValidation: Provider<ResponseChecksumValidation>;
38
51
  requestStreamBufferSize: number;
52
+ checksumAlgorithms?: FlexibleChecksumsInputConfig["checksumAlgorithms"];
39
53
  }
40
54
  /**
41
55
  * @internal
@@ -1,7 +1,7 @@
1
- import { ChecksumConstructor, HashConstructor } from "@smithy/types";
2
- import { PreviouslyResolved } from "./configuration";
1
+ import type { ChecksumConstructor, HashConstructor } from "@smithy/types";
2
+ import type { PreviouslyResolved } from "./configuration";
3
3
  import { ChecksumAlgorithm } from "./constants";
4
4
  /**
5
5
  * Returns the function that will compute the checksum for the given {@link ChecksumAlgorithm}.
6
6
  */
7
- export declare const selectChecksumAlgorithmFunction: (checksumAlgorithm: ChecksumAlgorithm, config: PreviouslyResolved) => ChecksumConstructor | HashConstructor;
7
+ export declare const selectChecksumAlgorithmFunction: (checksumAlgorithm: ChecksumAlgorithm | string, config: PreviouslyResolved) => ChecksumConstructor | HashConstructor;
@@ -12,6 +12,7 @@ import {
12
12
  RequestChecksumCalculation,
13
13
  ResponseChecksumValidation,
14
14
  } from "./constants";
15
+ import { FlexibleChecksumsInputConfig } from "./resolveFlexibleChecksumsConfig";
15
16
  export interface PreviouslyResolved {
16
17
  base64Encoder: Encoder;
17
18
  bodyLengthChecker: BodyLengthCalculator;
@@ -24,4 +25,5 @@ export interface PreviouslyResolved {
24
25
  streamHasher: StreamHasher<any>;
25
26
  streamCollector: StreamCollector;
26
27
  requestStreamBufferSize: number;
28
+ checksumAlgorithms?: FlexibleChecksumsInputConfig["checksumAlgorithms"];
27
29
  }
@@ -1,4 +1,5 @@
1
- import { ChecksumAlgorithm, RequestChecksumCalculation } from "./constants";
1
+ import { ChecksumAlgorithm } from "./constants";
2
+ import { RequestChecksumCalculation } from "./constants";
2
3
  export interface GetChecksumAlgorithmForRequestOptions {
3
4
  requestChecksumRequired: boolean;
4
5
  requestAlgorithmMember?: string;
@@ -11,4 +12,4 @@ export declare const getChecksumAlgorithmForRequest: (
11
12
  requestAlgorithmMember,
12
13
  requestChecksumCalculation,
13
14
  }: GetChecksumAlgorithmForRequestOptions
14
- ) => ChecksumAlgorithm | undefined;
15
+ ) => ChecksumAlgorithm | string | undefined;
@@ -1,4 +1,4 @@
1
1
  import { ChecksumAlgorithm } from "./constants";
2
2
  export declare const getChecksumLocationName: (
3
- algorithm: ChecksumAlgorithm
3
+ algorithm: ChecksumAlgorithm | string
4
4
  ) => string;
@@ -1,4 +1,4 @@
1
- import { Provider } from "@smithy/types";
1
+ import { ChecksumConstructor, Provider } from "@smithy/types";
2
2
  import {
3
3
  RequestChecksumCalculation,
4
4
  ResponseChecksumValidation,
@@ -11,11 +11,21 @@ export interface FlexibleChecksumsInputConfig {
11
11
  | ResponseChecksumValidation
12
12
  | Provider<ResponseChecksumValidation>;
13
13
  requestStreamBufferSize?: number | false;
14
+ checksumAlgorithms?: {
15
+ CRC32?: ChecksumConstructor;
16
+ CRC32C?: ChecksumConstructor;
17
+ CRC64NVME?: ChecksumConstructor;
18
+ SHA1?: ChecksumConstructor;
19
+ SHA256?: ChecksumConstructor;
20
+ } & {
21
+ [algorithmId: string]: ChecksumConstructor;
22
+ };
14
23
  }
15
24
  export interface FlexibleChecksumsResolvedConfig {
16
25
  requestChecksumCalculation: Provider<RequestChecksumCalculation>;
17
26
  responseChecksumValidation: Provider<ResponseChecksumValidation>;
18
27
  requestStreamBufferSize: number;
28
+ checksumAlgorithms?: FlexibleChecksumsInputConfig["checksumAlgorithms"];
19
29
  }
20
30
  export declare const resolveFlexibleChecksumsConfig: <T>(
21
31
  input: T & FlexibleChecksumsInputConfig
@@ -2,6 +2,6 @@ import { ChecksumConstructor, HashConstructor } from "@smithy/types";
2
2
  import { PreviouslyResolved } from "./configuration";
3
3
  import { ChecksumAlgorithm } from "./constants";
4
4
  export declare const selectChecksumAlgorithmFunction: (
5
- checksumAlgorithm: ChecksumAlgorithm,
5
+ checksumAlgorithm: ChecksumAlgorithm | string,
6
6
  config: PreviouslyResolved
7
7
  ) => ChecksumConstructor | HashConstructor;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-sdk/middleware-flexible-checksums",
3
- "version": "3.972.10",
3
+ "version": "3.973.0",
4
4
  "scripts": {
5
5
  "build": "concurrently 'yarn:build:types' 'yarn:build:es' && yarn build:cjs",
6
6
  "build:cjs": "node ../../scripts/compilation/inline middleware-flexible-checksums",
@@ -37,20 +37,20 @@
37
37
  "@aws-crypto/crc32": "5.2.0",
38
38
  "@aws-crypto/crc32c": "5.2.0",
39
39
  "@aws-crypto/util": "5.2.0",
40
- "@aws-sdk/core": "^3.973.12",
41
- "@aws-sdk/crc64-nvme": "3.972.0",
42
- "@aws-sdk/types": "^3.973.1",
43
- "@smithy/is-array-buffer": "^4.2.0",
44
- "@smithy/node-config-provider": "^4.3.8",
45
- "@smithy/protocol-http": "^5.3.8",
46
- "@smithy/types": "^4.12.0",
47
- "@smithy/util-middleware": "^4.2.8",
48
- "@smithy/util-stream": "^4.5.12",
49
- "@smithy/util-utf8": "^4.2.0",
40
+ "@aws-sdk/core": "^3.973.14",
41
+ "@aws-sdk/crc64-nvme": "^3.972.2",
42
+ "@aws-sdk/types": "^3.973.3",
43
+ "@smithy/is-array-buffer": "^4.2.1",
44
+ "@smithy/node-config-provider": "^4.3.10",
45
+ "@smithy/protocol-http": "^5.3.10",
46
+ "@smithy/types": "^4.13.0",
47
+ "@smithy/util-middleware": "^4.2.10",
48
+ "@smithy/util-stream": "^4.5.15",
49
+ "@smithy/util-utf8": "^4.2.1",
50
50
  "tslib": "^2.6.2"
51
51
  },
52
52
  "devDependencies": {
53
- "@smithy/node-http-handler": "^4.4.10",
53
+ "@smithy/node-http-handler": "^4.4.12",
54
54
  "concurrently": "7.0.0",
55
55
  "downlevel-dts": "0.10.1",
56
56
  "premove": "4.0.0",