@aws-amplify/storage 6.8.5-unstable.3c4d29e.0 → 6.8.5-unstable.7d58598.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/providers/s3/apis/internal/uploadData/multipart/initialUpload.js +13 -3
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/initialUpload.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadCache.js +21 -10
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadCache.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.js +5 -2
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.js +2 -2
- package/dist/cjs/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/putObjectJob.js +1 -1
- package/dist/cjs/providers/s3/apis/internal/uploadData/putObjectJob.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/completeMultipartUpload.js +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/completeMultipartUpload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/createMultipartUpload.js +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/createMultipartUpload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/getObject.js +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/getObject.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/listObjectsV2.js +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/listObjectsV2.js.map +1 -1
- package/dist/cjs/providers/s3/utils/crc32.js +4 -5
- package/dist/cjs/providers/s3/utils/crc32.js.map +1 -1
- package/dist/cjs/providers/s3/utils/hexUtils.js +1 -3
- package/dist/cjs/providers/s3/utils/hexUtils.js.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/initialUpload.mjs +14 -4
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/initialUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadCache.d.ts +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadCache.mjs +20 -9
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadCache.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.mjs +5 -2
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.mjs +2 -2
- package/dist/esm/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/putObjectJob.mjs +1 -1
- package/dist/esm/providers/s3/apis/internal/uploadData/putObjectJob.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/getObject.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/getObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/crc32.d.ts +4 -6
- package/dist/esm/providers/s3/utils/crc32.mjs +5 -6
- package/dist/esm/providers/s3/utils/crc32.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/hexUtils.d.ts +0 -1
- package/dist/esm/providers/s3/utils/hexUtils.mjs +1 -2
- package/dist/esm/providers/s3/utils/hexUtils.mjs.map +1 -1
- package/package.json +5 -5
- package/src/providers/s3/apis/internal/uploadData/multipart/initialUpload.ts +14 -4
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadCache.ts +30 -10
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadHandlers.ts +5 -2
- package/src/providers/s3/apis/internal/uploadData/multipart/uploadPartExecutor.ts +4 -4
- package/src/providers/s3/apis/internal/uploadData/putObjectJob.ts +1 -1
- package/src/providers/s3/utils/client/s3data/completeMultipartUpload.ts +2 -0
- package/src/providers/s3/utils/client/s3data/createMultipartUpload.ts +3 -1
- package/src/providers/s3/utils/client/s3data/getObject.ts +1 -0
- package/src/providers/s3/utils/client/s3data/listObjectsV2.ts +2 -0
- package/src/providers/s3/utils/crc32.ts +6 -13
- package/src/providers/s3/utils/hexUtils.ts +0 -3
- package/dist/cjs/providers/s3/utils/getCombinedCrc32.js +0 -31
- package/dist/cjs/providers/s3/utils/getCombinedCrc32.js.map +0 -1
- package/dist/cjs/providers/s3/utils/getCombinedCrc32.native.js +0 -40
- package/dist/cjs/providers/s3/utils/getCombinedCrc32.native.js.map +0 -1
- package/dist/esm/providers/s3/utils/getCombinedCrc32.d.ts +0 -14
- package/dist/esm/providers/s3/utils/getCombinedCrc32.mjs +0 -29
- package/dist/esm/providers/s3/utils/getCombinedCrc32.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/getCombinedCrc32.native.d.ts +0 -14
- package/dist/esm/providers/s3/utils/getCombinedCrc32.native.mjs +0 -38
- package/dist/esm/providers/s3/utils/getCombinedCrc32.native.mjs.map +0 -1
- package/src/providers/s3/utils/getCombinedCrc32.native.ts +0 -46
- package/src/providers/s3/utils/getCombinedCrc32.ts +0 -34
|
@@ -18,6 +18,7 @@ const createMultipartUploadSerializer = async (input, endpoint) => {
|
|
|
18
18
|
...(await serializeObjectConfigsToHeaders(input)),
|
|
19
19
|
...assignStringVariables({
|
|
20
20
|
'x-amz-checksum-algorithm': input.ChecksumAlgorithm,
|
|
21
|
+
'x-amz-checksum-type': input.ChecksumType,
|
|
21
22
|
'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,
|
|
22
23
|
}),
|
|
23
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMultipartUpload.mjs","sources":["../../../../../../../src/providers/s3/utils/client/s3data/createMultipartUpload.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { parseMetadata, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { AmplifyUrl } from '@aws-amplify/core/internals/utils';\nimport { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { assignStringVariables, buildStorageServiceError, map, parseXmlBody, s3TransferHandler, serializeObjectConfigsToHeaders, serializePathnameObjectKey, validateS3RequiredParameter, } from '../utils';\nimport { validateObjectUrl } from '../../validateObjectUrl';\nimport { defaultConfig, parseXmlError } from './base';\nconst createMultipartUploadSerializer = async (input, endpoint) => {\n const headers = {\n ...(await serializeObjectConfigsToHeaders(input)),\n ...assignStringVariables({\n 'x-amz-checksum-algorithm': input.ChecksumAlgorithm,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n };\n const url = new AmplifyUrl(endpoint.url.toString());\n validateS3RequiredParameter(!!input.Key, 'Key');\n url.pathname = serializePathnameObjectKey(url, input.Key);\n url.search = 'uploads';\n validateObjectUrl({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'POST',\n headers,\n url,\n };\n};\nconst createMultipartUploadDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw buildStorageServiceError((await parseXmlError(response)));\n }\n else {\n const parsed = await parseXmlBody(response);\n const contents = map(parsed, {\n UploadId: 'UploadId',\n });\n return {\n $metadata: parseMetadata(response),\n ...contents,\n };\n }\n};\nexport const createMultipartUpload = composeServiceApi(s3TransferHandler, createMultipartUploadSerializer, createMultipartUploadDeserializer, { ...defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;AACA;AAOA,MAAM,+BAA+B,GAAG,OAAO,KAAK,EAAE,QAAQ,KAAK;AACnE,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,MAAM,+BAA+B,CAAC,KAAK,CAAC,CAAC;AACzD,QAAQ,GAAG,qBAAqB,CAAC;AACjC,YAAY,0BAA0B,EAAE,KAAK,CAAC,iBAAiB;AAC/D,YAAY,6BAA6B,EAAE,KAAK,CAAC,mBAAmB;AACpE,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvD,IAAI,2BAA2B,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AACnD,IAAI,GAAG,CAAC,QAAQ,GAAG,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AAC7D,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS;AAC1B,IAAI,iBAAiB,CAAC;AACtB,QAAQ,UAAU,EAAE,KAAK,CAAC,MAAM;AAChC,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAG;AACtB,QAAQ,SAAS,EAAE,GAAG;AACtB,KAAK,CAAC;AACN,IAAI,OAAO;AACX,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,OAAO;AACf,QAAQ,GAAG;AACX,KAAK;AACL,CAAC;AACD,MAAM,iCAAiC,GAAG,OAAO,QAAQ,KAAK;AAC9D,IAAI,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE;AACpC;AACA,QAAQ,MAAM,wBAAwB,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,EAAE;AACvE;AACA,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC;AACnD,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE;AACrC,YAAY,QAAQ,EAAE,UAAU;AAChC,SAAS,CAAC;AACV,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC;AAC9C,YAAY,GAAG,QAAQ;AACvB,SAAS;AACT;AACA,CAAC;AACW,MAAC,qBAAqB,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,EAAE,GAAG,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE;;;;"}
|
|
1
|
+
{"version":3,"file":"createMultipartUpload.mjs","sources":["../../../../../../../src/providers/s3/utils/client/s3data/createMultipartUpload.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { parseMetadata, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { AmplifyUrl } from '@aws-amplify/core/internals/utils';\nimport { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { assignStringVariables, buildStorageServiceError, map, parseXmlBody, s3TransferHandler, serializeObjectConfigsToHeaders, serializePathnameObjectKey, validateS3RequiredParameter, } from '../utils';\nimport { validateObjectUrl } from '../../validateObjectUrl';\nimport { defaultConfig, parseXmlError } from './base';\nconst createMultipartUploadSerializer = async (input, endpoint) => {\n const headers = {\n ...(await serializeObjectConfigsToHeaders(input)),\n ...assignStringVariables({\n 'x-amz-checksum-algorithm': input.ChecksumAlgorithm,\n 'x-amz-checksum-type': input.ChecksumType,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n };\n const url = new AmplifyUrl(endpoint.url.toString());\n validateS3RequiredParameter(!!input.Key, 'Key');\n url.pathname = serializePathnameObjectKey(url, input.Key);\n url.search = 'uploads';\n validateObjectUrl({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'POST',\n headers,\n url,\n };\n};\nconst createMultipartUploadDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw buildStorageServiceError((await parseXmlError(response)));\n }\n else {\n const parsed = await parseXmlBody(response);\n const contents = map(parsed, {\n UploadId: 'UploadId',\n });\n return {\n $metadata: parseMetadata(response),\n ...contents,\n };\n }\n};\nexport const createMultipartUpload = composeServiceApi(s3TransferHandler, createMultipartUploadSerializer, createMultipartUploadDeserializer, { ...defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":";;;;;;;;;;;;;AAAA;AACA;AAOA,MAAM,+BAA+B,GAAG,OAAO,KAAK,EAAE,QAAQ,KAAK;AACnE,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,MAAM,+BAA+B,CAAC,KAAK,CAAC,CAAC;AACzD,QAAQ,GAAG,qBAAqB,CAAC;AACjC,YAAY,0BAA0B,EAAE,KAAK,CAAC,iBAAiB;AAC/D,YAAY,qBAAqB,EAAE,KAAK,CAAC,YAAY;AACrD,YAAY,6BAA6B,EAAE,KAAK,CAAC,mBAAmB;AACpE,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvD,IAAI,2BAA2B,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;AACnD,IAAI,GAAG,CAAC,QAAQ,GAAG,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;AAC7D,IAAI,GAAG,CAAC,MAAM,GAAG,SAAS;AAC1B,IAAI,iBAAiB,CAAC;AACtB,QAAQ,UAAU,EAAE,KAAK,CAAC,MAAM;AAChC,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAG;AACtB,QAAQ,SAAS,EAAE,GAAG;AACtB,KAAK,CAAC;AACN,IAAI,OAAO;AACX,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,OAAO;AACf,QAAQ,GAAG;AACX,KAAK;AACL,CAAC;AACD,MAAM,iCAAiC,GAAG,OAAO,QAAQ,KAAK;AAC9D,IAAI,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE;AACpC;AACA,QAAQ,MAAM,wBAAwB,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,EAAE;AACvE;AACA,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC;AACnD,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE;AACrC,YAAY,QAAQ,EAAE,UAAU;AAChC,SAAS,CAAC;AACV,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC;AAC9C,YAAY,GAAG,QAAQ;AACvB,SAAS;AACT;AACA,CAAC;AACW,MAAC,qBAAqB,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,iCAAiC,EAAE,EAAE,GAAG,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE;;;;"}
|
|
@@ -56,6 +56,7 @@ const getObjectDeserializer = async (response) => {
|
|
|
56
56
|
ChecksumCRC32C: 'x-amz-checksum-crc32c',
|
|
57
57
|
ChecksumSHA1: 'x-amz-checksum-sha1',
|
|
58
58
|
ChecksumSHA256: 'x-amz-checksum-sha256',
|
|
59
|
+
ChecksumType: 'x-amz-checksum-type',
|
|
59
60
|
MissingMeta: ['x-amz-missing-meta', deserializeNumber],
|
|
60
61
|
VersionId: 'x-amz-version-id',
|
|
61
62
|
CacheControl: 'cache-control',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getObject.mjs","sources":["../../../../../../../src/providers/s3/utils/client/s3data/getObject.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { EMPTY_SHA256_HASH, parseMetadata, presignUrl, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { AmplifyUrl, AmplifyUrlSearchParams, } from '@aws-amplify/core/internals/utils';\nimport { CONTENT_SHA256_HEADER, assignStringVariables, buildStorageServiceError, deserializeBoolean, deserializeMetadata, deserializeNumber, deserializeTimestamp, map, s3TransferHandler, serializePathnameObjectKey, validateS3RequiredParameter, } from '../utils';\nimport { validateObjectUrl } from '../../validateObjectUrl';\nimport { defaultConfig, parseXmlError, } from './base';\nconst USER_AGENT_HEADER = 'x-amz-user-agent';\nconst getObjectSerializer = async (input, endpoint) => {\n const url = new AmplifyUrl(endpoint.url.toString());\n validateS3RequiredParameter(!!input.Key, 'Key');\n url.pathname = serializePathnameObjectKey(url, input.Key);\n url.search = new AmplifyUrlSearchParams({\n 'x-id': 'GetObject',\n }).toString();\n validateObjectUrl({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'GET',\n headers: {\n ...(input.Range && { Range: input.Range }),\n ...assignStringVariables({\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n },\n url,\n };\n};\nconst getObjectDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw buildStorageServiceError((await parseXmlError(response)));\n }\n else {\n return {\n ...map(response.headers, {\n DeleteMarker: ['x-amz-delete-marker', deserializeBoolean],\n AcceptRanges: 'accept-ranges',\n Expiration: 'x-amz-expiration',\n Restore: 'x-amz-restore',\n LastModified: ['last-modified', deserializeTimestamp],\n ContentLength: ['content-length', deserializeNumber],\n ETag: 'etag',\n ChecksumCRC32: 'x-amz-checksum-crc32',\n ChecksumCRC32C: 'x-amz-checksum-crc32c',\n ChecksumSHA1: 'x-amz-checksum-sha1',\n ChecksumSHA256: 'x-amz-checksum-sha256',\n MissingMeta: ['x-amz-missing-meta', deserializeNumber],\n VersionId: 'x-amz-version-id',\n CacheControl: 'cache-control',\n ContentDisposition: 'content-disposition',\n ContentEncoding: 'content-encoding',\n ContentLanguage: 'content-language',\n ContentRange: 'content-range',\n ContentType: 'content-type',\n Expires: ['expires', deserializeTimestamp],\n WebsiteRedirectLocation: 'x-amz-website-redirect-location',\n ServerSideEncryption: 'x-amz-server-side-encryption',\n SSECustomerAlgorithm: 'x-amz-server-side-encryption-customer-algorithm',\n SSECustomerKeyMD5: 'x-amz-server-side-encryption-customer-key-md5',\n SSEKMSKeyId: 'x-amz-server-side-encryption-aws-kms-key-id',\n BucketKeyEnabled: [\n 'x-amz-server-side-encryption-bucket-key-enabled',\n deserializeBoolean,\n ],\n StorageClass: 'x-amz-storage-class',\n RequestCharged: 'x-amz-request-charged',\n ReplicationStatus: 'x-amz-replication-status',\n PartsCount: ['x-amz-mp-parts-count', deserializeNumber],\n TagCount: ['x-amz-tagging-count', deserializeNumber],\n ObjectLockMode: 'x-amz-object-lock-mode',\n ObjectLockRetainUntilDate: [\n 'x-amz-object-lock-retain-until-date',\n deserializeTimestamp,\n ],\n ObjectLockLegalHoldStatus: 'x-amz-object-lock-legal-hold',\n }),\n Metadata: deserializeMetadata(response.headers),\n $metadata: parseMetadata(response),\n // @ts-expect-error The body is a CompatibleHttpResponse type because the lower-level handler is XHR instead of\n // fetch, which represents payload in Blob instread of ReadableStream.\n Body: response.body,\n };\n }\n};\nexport const getObject = composeServiceApi(s3TransferHandler, getObjectSerializer, getObjectDeserializer, { ...defaultConfig, responseType: 'blob' });\n/**\n * Get a presigned URL for the `getObject` API.\n *\n * @internal\n */\nexport const getPresignedGetObjectUrl = async (config, input) => {\n const endpoint = defaultConfig.endpointResolver(config, input);\n const { url, headers, method } = await getObjectSerializer(input, endpoint);\n // TODO: set content sha256 query parameter with value of UNSIGNED-PAYLOAD instead of empty hash.\n // It requires changes in presignUrl. Without this change, the generated url still works,\n // but not the same as other tools like AWS SDK and CLI.\n url.searchParams.append(CONTENT_SHA256_HEADER, EMPTY_SHA256_HASH);\n if (config.userAgentValue) {\n url.searchParams.append(config.userAgentHeader ?? USER_AGENT_HEADER, config.userAgentValue);\n }\n if (input.ResponseContentType) {\n url.searchParams.append('response-content-type', input.ResponseContentType);\n }\n if (input.ResponseContentDisposition) {\n url.searchParams.append('response-content-disposition', input.ResponseContentDisposition);\n }\n for (const [headerName, value] of Object.entries(headers).sort(([key1], [key2]) => key1.localeCompare(key2))) {\n url.searchParams.append(headerName, value);\n }\n return presignUrl({ method, url, body: undefined }, {\n signingService: defaultConfig.service,\n signingRegion: config.region,\n ...defaultConfig,\n ...config,\n });\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"getObject.mjs","sources":["../../../../../../../src/providers/s3/utils/client/s3data/getObject.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { EMPTY_SHA256_HASH, parseMetadata, presignUrl, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { AmplifyUrl, AmplifyUrlSearchParams, } from '@aws-amplify/core/internals/utils';\nimport { CONTENT_SHA256_HEADER, assignStringVariables, buildStorageServiceError, deserializeBoolean, deserializeMetadata, deserializeNumber, deserializeTimestamp, map, s3TransferHandler, serializePathnameObjectKey, validateS3RequiredParameter, } from '../utils';\nimport { validateObjectUrl } from '../../validateObjectUrl';\nimport { defaultConfig, parseXmlError, } from './base';\nconst USER_AGENT_HEADER = 'x-amz-user-agent';\nconst getObjectSerializer = async (input, endpoint) => {\n const url = new AmplifyUrl(endpoint.url.toString());\n validateS3RequiredParameter(!!input.Key, 'Key');\n url.pathname = serializePathnameObjectKey(url, input.Key);\n url.search = new AmplifyUrlSearchParams({\n 'x-id': 'GetObject',\n }).toString();\n validateObjectUrl({\n bucketName: input.Bucket,\n key: input.Key,\n objectURL: url,\n });\n return {\n method: 'GET',\n headers: {\n ...(input.Range && { Range: input.Range }),\n ...assignStringVariables({\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n }),\n },\n url,\n };\n};\nconst getObjectDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw buildStorageServiceError((await parseXmlError(response)));\n }\n else {\n return {\n ...map(response.headers, {\n DeleteMarker: ['x-amz-delete-marker', deserializeBoolean],\n AcceptRanges: 'accept-ranges',\n Expiration: 'x-amz-expiration',\n Restore: 'x-amz-restore',\n LastModified: ['last-modified', deserializeTimestamp],\n ContentLength: ['content-length', deserializeNumber],\n ETag: 'etag',\n ChecksumCRC32: 'x-amz-checksum-crc32',\n ChecksumCRC32C: 'x-amz-checksum-crc32c',\n ChecksumSHA1: 'x-amz-checksum-sha1',\n ChecksumSHA256: 'x-amz-checksum-sha256',\n ChecksumType: 'x-amz-checksum-type',\n MissingMeta: ['x-amz-missing-meta', deserializeNumber],\n VersionId: 'x-amz-version-id',\n CacheControl: 'cache-control',\n ContentDisposition: 'content-disposition',\n ContentEncoding: 'content-encoding',\n ContentLanguage: 'content-language',\n ContentRange: 'content-range',\n ContentType: 'content-type',\n Expires: ['expires', deserializeTimestamp],\n WebsiteRedirectLocation: 'x-amz-website-redirect-location',\n ServerSideEncryption: 'x-amz-server-side-encryption',\n SSECustomerAlgorithm: 'x-amz-server-side-encryption-customer-algorithm',\n SSECustomerKeyMD5: 'x-amz-server-side-encryption-customer-key-md5',\n SSEKMSKeyId: 'x-amz-server-side-encryption-aws-kms-key-id',\n BucketKeyEnabled: [\n 'x-amz-server-side-encryption-bucket-key-enabled',\n deserializeBoolean,\n ],\n StorageClass: 'x-amz-storage-class',\n RequestCharged: 'x-amz-request-charged',\n ReplicationStatus: 'x-amz-replication-status',\n PartsCount: ['x-amz-mp-parts-count', deserializeNumber],\n TagCount: ['x-amz-tagging-count', deserializeNumber],\n ObjectLockMode: 'x-amz-object-lock-mode',\n ObjectLockRetainUntilDate: [\n 'x-amz-object-lock-retain-until-date',\n deserializeTimestamp,\n ],\n ObjectLockLegalHoldStatus: 'x-amz-object-lock-legal-hold',\n }),\n Metadata: deserializeMetadata(response.headers),\n $metadata: parseMetadata(response),\n // @ts-expect-error The body is a CompatibleHttpResponse type because the lower-level handler is XHR instead of\n // fetch, which represents payload in Blob instread of ReadableStream.\n Body: response.body,\n };\n }\n};\nexport const getObject = composeServiceApi(s3TransferHandler, getObjectSerializer, getObjectDeserializer, { ...defaultConfig, responseType: 'blob' });\n/**\n * Get a presigned URL for the `getObject` API.\n *\n * @internal\n */\nexport const getPresignedGetObjectUrl = async (config, input) => {\n const endpoint = defaultConfig.endpointResolver(config, input);\n const { url, headers, method } = await getObjectSerializer(input, endpoint);\n // TODO: set content sha256 query parameter with value of UNSIGNED-PAYLOAD instead of empty hash.\n // It requires changes in presignUrl. Without this change, the generated url still works,\n // but not the same as other tools like AWS SDK and CLI.\n url.searchParams.append(CONTENT_SHA256_HEADER, EMPTY_SHA256_HASH);\n if (config.userAgentValue) {\n url.searchParams.append(config.userAgentHeader ?? USER_AGENT_HEADER, config.userAgentValue);\n }\n if (input.ResponseContentType) {\n url.searchParams.append('response-content-type', input.ResponseContentType);\n }\n if (input.ResponseContentDisposition) {\n url.searchParams.append('response-content-disposition', input.ResponseContentDisposition);\n }\n for (const [headerName, value] of Object.entries(headers).sort(([key1], [key2]) => key1.localeCompare(key2))) {\n url.searchParams.append(headerName, value);\n }\n return presignUrl({ method, url, body: undefined }, {\n signingService: defaultConfig.service,\n signingRegion: config.region,\n ...defaultConfig,\n ...config,\n });\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -84,6 +84,7 @@ const deserializeObject = (output) => map(output, {
|
|
|
84
84
|
'ChecksumAlgorithm',
|
|
85
85
|
value => emptyArrayGuard(value, deserializeChecksumAlgorithmList),
|
|
86
86
|
],
|
|
87
|
+
ChecksumType: ['ChecksumType', (deserializeStringTag)],
|
|
87
88
|
Size: ['Size', deserializeNumber],
|
|
88
89
|
StorageClass: ['StorageClass', (deserializeStringTag)],
|
|
89
90
|
Owner: ['Owner', deserializeOwner],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listObjectsV2.mjs","sources":["../../../../../../../src/providers/s3/utils/client/s3data/listObjectsV2.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { parseMetadata, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { AmplifyUrl, AmplifyUrlSearchParams, } from '@aws-amplify/core/internals/utils';\nimport { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { assignStringVariables, buildStorageServiceError, deserializeBoolean, deserializeNumber, deserializeTimestamp, emptyArrayGuard, map, parseXmlBody, s3TransferHandler, } from '../utils';\nimport { IntegrityError } from '../../../../../errors/IntegrityError';\nimport { deserializeStringTag } from '../utils/deserializeHelpers';\nimport { defaultConfig, parseXmlError } from './base';\nconst listObjectsV2Serializer = (input, endpoint) => {\n const headers = assignStringVariables({\n 'x-amz-request-payer': input.RequestPayer,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n });\n const query = assignStringVariables({\n 'list-type': '2',\n 'continuation-token': input.ContinuationToken,\n delimiter: input.Delimiter,\n 'encoding-type': input.EncodingType,\n 'fetch-owner': input.FetchOwner,\n 'max-keys': input.MaxKeys,\n prefix: input.Prefix,\n 'start-after': input.StartAfter,\n });\n const url = new AmplifyUrl(endpoint.url.toString());\n url.search = new AmplifyUrlSearchParams(query).toString();\n return {\n method: 'GET',\n headers,\n url,\n };\n};\nconst listObjectsV2Deserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw buildStorageServiceError((await parseXmlError(response)));\n }\n else {\n const parsed = await parseXmlBody(response);\n const contents = map(parsed, {\n CommonPrefixes: [\n 'CommonPrefixes',\n value => emptyArrayGuard(value, deserializeCommonPrefixList),\n ],\n Contents: [\n 'Contents',\n value => emptyArrayGuard(value, deserializeObjectList),\n ],\n ContinuationToken: 'ContinuationToken',\n Delimiter: 'Delimiter',\n EncodingType: ['EncodingType', (deserializeStringTag)],\n IsTruncated: ['IsTruncated', deserializeBoolean],\n KeyCount: ['KeyCount', deserializeNumber],\n MaxKeys: ['MaxKeys', deserializeNumber],\n Name: 'Name',\n NextContinuationToken: 'NextContinuationToken',\n Prefix: 'Prefix',\n StartAfter: 'StartAfter',\n });\n const output = {\n $metadata: parseMetadata(response),\n ...contents,\n };\n validateCorroboratingElements(output);\n return output;\n }\n};\nconst deserializeCommonPrefixList = (output) => output.map(deserializeCommonPrefix);\nconst deserializeCommonPrefix = (output) => map(output, {\n Prefix: 'Prefix',\n});\nconst deserializeObjectList = (output) => output.map(deserializeObject);\nconst deserializeObject = (output) => map(output, {\n Key: 'Key',\n LastModified: ['LastModified', deserializeTimestamp],\n ETag: 'ETag',\n ChecksumAlgorithm: [\n 'ChecksumAlgorithm',\n value => emptyArrayGuard(value, deserializeChecksumAlgorithmList),\n ],\n Size: ['Size', deserializeNumber],\n StorageClass: ['StorageClass', (deserializeStringTag)],\n Owner: ['Owner', deserializeOwner],\n});\nconst deserializeChecksumAlgorithmList = (output) => output.map((deserializeStringTag));\nconst deserializeOwner = (output) => map(output, { DisplayName: 'DisplayName', ID: 'ID' });\nconst validateCorroboratingElements = (response) => {\n const { IsTruncated, KeyCount, Contents = [], CommonPrefixes = [], NextContinuationToken, } = response;\n const validTruncation = (IsTruncated && !!NextContinuationToken) ||\n (!IsTruncated && !NextContinuationToken);\n const validNumberOfKeysReturned = KeyCount === Contents.length + CommonPrefixes.length;\n if (!validTruncation || !validNumberOfKeysReturned) {\n throw new IntegrityError({ metadata: response.$metadata });\n }\n};\nexport const listObjectsV2 = composeServiceApi(s3TransferHandler, listObjectsV2Serializer, listObjectsV2Deserializer, { ...defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"listObjectsV2.mjs","sources":["../../../../../../../src/providers/s3/utils/client/s3data/listObjectsV2.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { parseMetadata, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { AmplifyUrl, AmplifyUrlSearchParams, } from '@aws-amplify/core/internals/utils';\nimport { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';\nimport { assignStringVariables, buildStorageServiceError, deserializeBoolean, deserializeNumber, deserializeTimestamp, emptyArrayGuard, map, parseXmlBody, s3TransferHandler, } from '../utils';\nimport { IntegrityError } from '../../../../../errors/IntegrityError';\nimport { deserializeStringTag } from '../utils/deserializeHelpers';\nimport { defaultConfig, parseXmlError } from './base';\nconst listObjectsV2Serializer = (input, endpoint) => {\n const headers = assignStringVariables({\n 'x-amz-request-payer': input.RequestPayer,\n 'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,\n });\n const query = assignStringVariables({\n 'list-type': '2',\n 'continuation-token': input.ContinuationToken,\n delimiter: input.Delimiter,\n 'encoding-type': input.EncodingType,\n 'fetch-owner': input.FetchOwner,\n 'max-keys': input.MaxKeys,\n prefix: input.Prefix,\n 'start-after': input.StartAfter,\n });\n const url = new AmplifyUrl(endpoint.url.toString());\n url.search = new AmplifyUrlSearchParams(query).toString();\n return {\n method: 'GET',\n headers,\n url,\n };\n};\nconst listObjectsV2Deserializer = async (response) => {\n if (response.statusCode >= 300) {\n // error is always set when statusCode >= 300\n throw buildStorageServiceError((await parseXmlError(response)));\n }\n else {\n const parsed = await parseXmlBody(response);\n const contents = map(parsed, {\n CommonPrefixes: [\n 'CommonPrefixes',\n value => emptyArrayGuard(value, deserializeCommonPrefixList),\n ],\n Contents: [\n 'Contents',\n value => emptyArrayGuard(value, deserializeObjectList),\n ],\n ContinuationToken: 'ContinuationToken',\n Delimiter: 'Delimiter',\n EncodingType: ['EncodingType', (deserializeStringTag)],\n IsTruncated: ['IsTruncated', deserializeBoolean],\n KeyCount: ['KeyCount', deserializeNumber],\n MaxKeys: ['MaxKeys', deserializeNumber],\n Name: 'Name',\n NextContinuationToken: 'NextContinuationToken',\n Prefix: 'Prefix',\n StartAfter: 'StartAfter',\n });\n const output = {\n $metadata: parseMetadata(response),\n ...contents,\n };\n validateCorroboratingElements(output);\n return output;\n }\n};\nconst deserializeCommonPrefixList = (output) => output.map(deserializeCommonPrefix);\nconst deserializeCommonPrefix = (output) => map(output, {\n Prefix: 'Prefix',\n});\nconst deserializeObjectList = (output) => output.map(deserializeObject);\nconst deserializeObject = (output) => map(output, {\n Key: 'Key',\n LastModified: ['LastModified', deserializeTimestamp],\n ETag: 'ETag',\n ChecksumAlgorithm: [\n 'ChecksumAlgorithm',\n value => emptyArrayGuard(value, deserializeChecksumAlgorithmList),\n ],\n ChecksumType: ['ChecksumType', (deserializeStringTag)],\n Size: ['Size', deserializeNumber],\n StorageClass: ['StorageClass', (deserializeStringTag)],\n Owner: ['Owner', deserializeOwner],\n});\nconst deserializeChecksumAlgorithmList = (output) => output.map((deserializeStringTag));\nconst deserializeOwner = (output) => map(output, { DisplayName: 'DisplayName', ID: 'ID' });\nconst validateCorroboratingElements = (response) => {\n const { IsTruncated, KeyCount, Contents = [], CommonPrefixes = [], NextContinuationToken, } = response;\n const validTruncation = (IsTruncated && !!NextContinuationToken) ||\n (!IsTruncated && !NextContinuationToken);\n const validNumberOfKeysReturned = KeyCount === Contents.length + CommonPrefixes.length;\n if (!validTruncation || !validNumberOfKeysReturned) {\n throw new IntegrityError({ metadata: response.$metadata });\n }\n};\nexport const listObjectsV2 = composeServiceApi(s3TransferHandler, listObjectsV2Serializer, listObjectsV2Deserializer, { ...defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
export declare const calculateContentCRC32: (content: Blob | string | ArrayBuffer | ArrayBufferView, seed?: number) => Promise<CRC32Checksum>;
|
|
1
|
+
/**
|
|
2
|
+
* Calculate the CRC32 checksum for given content and return base64 encoded checksum.
|
|
3
|
+
*/
|
|
4
|
+
export declare const calculateContentCRC32: (content: Blob | string | ArrayBuffer | ArrayBufferView, seed?: number) => Promise<string>;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import crc32 from 'crc-32';
|
|
2
|
-
import { hexToBase64
|
|
2
|
+
import { hexToBase64 } from './hexUtils.mjs';
|
|
3
3
|
import { readFile } from './readFile.mjs';
|
|
4
4
|
|
|
5
5
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
6
|
// SPDX-License-Identifier: Apache-2.0
|
|
7
7
|
const CHUNK_SIZE = 1024 * 1024; // 1MB chunks
|
|
8
|
+
/**
|
|
9
|
+
* Calculate the CRC32 checksum for given content and return base64 encoded checksum.
|
|
10
|
+
*/
|
|
8
11
|
const calculateContentCRC32 = async (content, seed = 0) => {
|
|
9
12
|
let internalSeed = seed;
|
|
10
13
|
if (content instanceof ArrayBuffer || ArrayBuffer.isView(content)) {
|
|
@@ -42,11 +45,7 @@ const calculateContentCRC32 = async (content, seed = 0) => {
|
|
|
42
45
|
}
|
|
43
46
|
}
|
|
44
47
|
const hex = internalSeed.toString(16).padStart(8, '0');
|
|
45
|
-
return
|
|
46
|
-
checksumArrayBuffer: hexToArrayBuffer(hex),
|
|
47
|
-
checksum: hexToBase64(hex),
|
|
48
|
-
seed: internalSeed,
|
|
49
|
-
};
|
|
48
|
+
return hexToBase64(hex);
|
|
50
49
|
};
|
|
51
50
|
|
|
52
51
|
export { calculateContentCRC32 };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crc32.mjs","sources":["../../../../../src/providers/s3/utils/crc32.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport crc32 from 'crc-32';\nimport {
|
|
1
|
+
{"version":3,"file":"crc32.mjs","sources":["../../../../../src/providers/s3/utils/crc32.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport crc32 from 'crc-32';\nimport { hexToBase64 } from './hexUtils';\nimport { readFile } from './readFile';\nconst CHUNK_SIZE = 1024 * 1024; // 1MB chunks\n/**\n * Calculate the CRC32 checksum for given content and return base64 encoded checksum.\n */\nexport const calculateContentCRC32 = async (content, seed = 0) => {\n let internalSeed = seed;\n if (content instanceof ArrayBuffer || ArrayBuffer.isView(content)) {\n let uint8Array;\n if (content instanceof ArrayBuffer) {\n uint8Array = new Uint8Array(content);\n }\n else {\n uint8Array = new Uint8Array(content.buffer, content.byteOffset, content.byteLength);\n }\n let offset = 0;\n while (offset < uint8Array.length) {\n const end = Math.min(offset + CHUNK_SIZE, uint8Array.length);\n const chunk = uint8Array.slice(offset, end);\n internalSeed = crc32.buf(chunk, internalSeed) >>> 0;\n offset = end;\n }\n }\n else {\n let blob;\n if (content instanceof Blob) {\n blob = content;\n }\n else {\n blob = new Blob([content]);\n }\n let offset = 0;\n while (offset < blob.size) {\n const end = Math.min(offset + CHUNK_SIZE, blob.size);\n const chunk = blob.slice(offset, end);\n const arrayBuffer = await readFile(chunk);\n const uint8Array = new Uint8Array(arrayBuffer);\n internalSeed = crc32.buf(uint8Array, internalSeed) >>> 0;\n offset = end;\n }\n }\n const hex = internalSeed.toString(16).padStart(8, '0');\n return hexToBase64(hex);\n};\n"],"names":[],"mappings":";;;;AAAA;AACA;AAIA,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/B;AACA;AACA;AACY,MAAC,qBAAqB,GAAG,OAAO,OAAO,EAAE,IAAI,GAAG,CAAC,KAAK;AAClE,IAAI,IAAI,YAAY,GAAG,IAAI;AAC3B,IAAI,IAAI,OAAO,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;AACvE,QAAQ,IAAI,UAAU;AACtB,QAAQ,IAAI,OAAO,YAAY,WAAW,EAAE;AAC5C,YAAY,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;AAChD;AACA,aAAa;AACb,YAAY,UAAU,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC;AAC/F;AACA,QAAQ,IAAI,MAAM,GAAG,CAAC;AACtB,QAAQ,OAAO,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE;AAC3C,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;AACxE,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;AACvD,YAAY,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;AAC/D,YAAY,MAAM,GAAG,GAAG;AACxB;AACA;AACA,SAAS;AACT,QAAQ,IAAI,IAAI;AAChB,QAAQ,IAAI,OAAO,YAAY,IAAI,EAAE;AACrC,YAAY,IAAI,GAAG,OAAO;AAC1B;AACA,aAAa;AACb,YAAY,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AACtC;AACA,QAAQ,IAAI,MAAM,GAAG,CAAC;AACtB,QAAQ,OAAO,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;AACnC,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AAChE,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;AACjD,YAAY,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC;AACrD,YAAY,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;AAC1D,YAAY,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC;AACpE,YAAY,MAAM,GAAG,GAAG;AACxB;AACA;AACA,IAAI,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC1D,IAAI,OAAO,WAAW,CAAC,GAAG,CAAC;AAC3B;;;;"}
|
|
@@ -6,8 +6,7 @@ import { toBase64 } from './client/runtime/base64/index.native.mjs';
|
|
|
6
6
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
7
|
// SPDX-License-Identifier: Apache-2.0
|
|
8
8
|
const hexToUint8Array = (hexString) => new Uint8Array((hexString.match(/\w{2}/g) ?? []).map(h => parseInt(h, 16)));
|
|
9
|
-
const hexToArrayBuffer = (hexString) => hexToUint8Array(hexString).buffer;
|
|
10
9
|
const hexToBase64 = (hexString) => toBase64(hexToUint8Array(hexString));
|
|
11
10
|
|
|
12
|
-
export {
|
|
11
|
+
export { hexToBase64, hexToUint8Array };
|
|
13
12
|
//# sourceMappingURL=hexUtils.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hexUtils.mjs","sources":["../../../../../src/providers/s3/utils/hexUtils.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { toBase64 } from './client/runtime';\nexport const hexToUint8Array = (hexString) => new Uint8Array((hexString.match(/\\w{2}/g) ?? []).map(h => parseInt(h, 16)));\nexport const
|
|
1
|
+
{"version":3,"file":"hexUtils.mjs","sources":["../../../../../src/providers/s3/utils/hexUtils.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { toBase64 } from './client/runtime';\nexport const hexToUint8Array = (hexString) => new Uint8Array((hexString.match(/\\w{2}/g) ?? []).map(h => parseInt(h, 16)));\nexport const hexToBase64 = (hexString) => toBase64(hexToUint8Array(hexString));\n"],"names":[],"mappings":";;;;;AAAA;AACA;AAEY,MAAC,eAAe,GAAG,CAAC,SAAS,KAAK,IAAI,UAAU,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5G,MAAC,WAAW,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-amplify/storage",
|
|
3
|
-
"version": "6.8.5-unstable.
|
|
3
|
+
"version": "6.8.5-unstable.7d58598.0+7d58598",
|
|
4
4
|
"description": "Storage category of aws-amplify",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.mjs",
|
|
@@ -108,12 +108,12 @@
|
|
|
108
108
|
"./package.json": "./package.json"
|
|
109
109
|
},
|
|
110
110
|
"peerDependencies": {
|
|
111
|
-
"@aws-amplify/core": "6.11.5-unstable.
|
|
111
|
+
"@aws-amplify/core": "6.11.5-unstable.7d58598.0+7d58598"
|
|
112
112
|
},
|
|
113
113
|
"devDependencies": {
|
|
114
|
-
"@aws-amplify/core": "6.11.5-unstable.
|
|
115
|
-
"@aws-amplify/react-native": "1.1.10-unstable.
|
|
114
|
+
"@aws-amplify/core": "6.11.5-unstable.7d58598.0+7d58598",
|
|
115
|
+
"@aws-amplify/react-native": "1.1.10-unstable.7d58598.0+7d58598",
|
|
116
116
|
"@types/node": "20.14.12"
|
|
117
117
|
},
|
|
118
|
-
"gitHead": "
|
|
118
|
+
"gitHead": "7d58598f7fcd9a3c158c8462b8aa763cce3b85f3"
|
|
119
119
|
}
|
|
@@ -16,11 +16,11 @@ import { Part, createMultipartUpload } from '../../../../utils/client/s3data';
|
|
|
16
16
|
import { logger } from '../../../../../../utils';
|
|
17
17
|
import { constructContentDisposition } from '../../../../utils/constructContentDisposition';
|
|
18
18
|
import { CHECKSUM_ALGORITHM_CRC32 } from '../../../../utils/constants';
|
|
19
|
-
import {
|
|
19
|
+
import { calculateContentCRC32 } from '../../../../utils/crc32';
|
|
20
20
|
|
|
21
21
|
import {
|
|
22
22
|
cacheMultipartUpload,
|
|
23
|
-
|
|
23
|
+
findCachedUploadPartsAndEvictExpired,
|
|
24
24
|
getUploadsCacheKey,
|
|
25
25
|
} from './uploadCache';
|
|
26
26
|
|
|
@@ -100,7 +100,7 @@ export const loadOrCreateMultipartUpload = async ({
|
|
|
100
100
|
optionsHash,
|
|
101
101
|
});
|
|
102
102
|
|
|
103
|
-
const cachedUploadParts = await
|
|
103
|
+
const cachedUploadParts = await findCachedUploadPartsAndEvictExpired({
|
|
104
104
|
s3Config,
|
|
105
105
|
cacheKey: uploadCacheKey,
|
|
106
106
|
bucket,
|
|
@@ -119,9 +119,18 @@ export const loadOrCreateMultipartUpload = async ({
|
|
|
119
119
|
finalCrc32: cachedUpload.finalCrc32,
|
|
120
120
|
};
|
|
121
121
|
} else {
|
|
122
|
+
/**
|
|
123
|
+
* Note: This step reads the uploading file from beginning to end to calculate the CRC32 checksum of the entire
|
|
124
|
+
* object before sending the 1st byte over the wire. This is a performance bottleneck when uploading large files.
|
|
125
|
+
* The rationale to do this is S3 team wants to reduce the possibility of a file getting corrupted(on disk or in
|
|
126
|
+
* memory). So we calculate the full-object checksum as soon as possible in the upload flow.
|
|
127
|
+
*
|
|
128
|
+
* Going forward we should re-evaluate this decision with S3 team. The alternative is calling calculateContentCRC32()
|
|
129
|
+
* as we upload each part sequentially with seeds from already uploaded parts, ideally inside the data chunker.
|
|
130
|
+
*/
|
|
122
131
|
const finalCrc32 =
|
|
123
132
|
checksumAlgorithm === CHECKSUM_ALGORITHM_CRC32
|
|
124
|
-
? await
|
|
133
|
+
? await calculateContentCRC32(data)
|
|
125
134
|
: undefined;
|
|
126
135
|
|
|
127
136
|
const { UploadId } = await createMultipartUpload(
|
|
@@ -137,6 +146,7 @@ export const loadOrCreateMultipartUpload = async ({
|
|
|
137
146
|
ContentEncoding: contentEncoding,
|
|
138
147
|
Metadata: metadata,
|
|
139
148
|
ChecksumAlgorithm: finalCrc32 ? 'CRC32' : undefined,
|
|
149
|
+
ChecksumType: finalCrc32 ? 'FULL_OBJECT' : undefined,
|
|
140
150
|
ExpectedBucketOwner: expectedBucketOwner,
|
|
141
151
|
},
|
|
142
152
|
);
|
|
@@ -27,7 +27,7 @@ interface FindCachedUploadPartsOptions {
|
|
|
27
27
|
* Find the cached multipart upload id and get the parts that have been uploaded
|
|
28
28
|
* with ListParts API. If the cached upload is expired(1 hour), return null.
|
|
29
29
|
*/
|
|
30
|
-
export const
|
|
30
|
+
export const findCachedUploadPartsAndEvictExpired = async ({
|
|
31
31
|
resumableUploadsCache,
|
|
32
32
|
cacheKey,
|
|
33
33
|
s3Config,
|
|
@@ -38,20 +38,33 @@ export const findCachedUploadParts = async ({
|
|
|
38
38
|
uploadId: string;
|
|
39
39
|
finalCrc32?: string;
|
|
40
40
|
} | null> => {
|
|
41
|
-
const
|
|
41
|
+
const allCachedUploads = await listCachedUploadTasks(resumableUploadsCache);
|
|
42
|
+
// Evict all outdated uploads.
|
|
43
|
+
const validCachedUploads = Object.fromEntries(
|
|
44
|
+
Object.entries(allCachedUploads).filter(
|
|
45
|
+
([_, cacheValue]) => cacheValue.lastTouched >= Date.now() - ONE_HOUR,
|
|
46
|
+
),
|
|
47
|
+
);
|
|
42
48
|
if (
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
Object.keys(validCachedUploads).length !==
|
|
50
|
+
Object.keys(allCachedUploads).length
|
|
45
51
|
) {
|
|
52
|
+
await resumableUploadsCache.setItem(
|
|
53
|
+
UPLOADS_STORAGE_KEY,
|
|
54
|
+
JSON.stringify(validCachedUploads),
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!validCachedUploads[cacheKey]) {
|
|
46
59
|
return null;
|
|
47
60
|
}
|
|
48
61
|
|
|
49
|
-
const cachedUpload =
|
|
62
|
+
const cachedUpload = validCachedUploads[cacheKey];
|
|
50
63
|
cachedUpload.lastTouched = Date.now();
|
|
51
64
|
|
|
52
65
|
await resumableUploadsCache.setItem(
|
|
53
66
|
UPLOADS_STORAGE_KEY,
|
|
54
|
-
JSON.stringify(
|
|
67
|
+
JSON.stringify(validCachedUploads),
|
|
55
68
|
);
|
|
56
69
|
|
|
57
70
|
try {
|
|
@@ -111,12 +124,19 @@ export const serializeUploadOptions = (
|
|
|
111
124
|
'resumableUploadsCache', // Internally injected implementation not set by customers
|
|
112
125
|
'locationCredentialsProvider', // Internally injected implementation not set by customers
|
|
113
126
|
] satisfies (keyof typeof options)[];
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
([key]) => !unserializableOptionProperties.includes(key),
|
|
117
|
-
),
|
|
127
|
+
const serializableOptionEntries = Object.entries(options).filter(
|
|
128
|
+
([key]) => !unserializableOptionProperties.includes(key),
|
|
118
129
|
);
|
|
119
130
|
|
|
131
|
+
if (options.checksumAlgorithm === 'crc-32') {
|
|
132
|
+
// Additional options to differentiate the upload cache created before introducing the full-object checksum and
|
|
133
|
+
// after. If full-object checksum is enabled, the previous upload caches that created with composite checksum should
|
|
134
|
+
// be ignored.
|
|
135
|
+
serializableOptionEntries.push(['checksumType', 'FULL_OBJECT']);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const serializableOptions = Object.fromEntries(serializableOptionEntries);
|
|
139
|
+
|
|
120
140
|
return JSON.stringify(serializableOptions);
|
|
121
141
|
};
|
|
122
142
|
|
|
@@ -155,7 +155,7 @@ export const getMultipartUploadHandlers = (
|
|
|
155
155
|
resolvedAccessLevel = resolveAccessLevel(accessLevel);
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
const
|
|
158
|
+
const optionsHash = await calculateContentCRC32(
|
|
159
159
|
serializeUploadOptions(uploadDataOptions),
|
|
160
160
|
);
|
|
161
161
|
|
|
@@ -255,6 +255,7 @@ export const getMultipartUploadHandlers = (
|
|
|
255
255
|
Key: finalKey,
|
|
256
256
|
UploadId: inProgressUpload.uploadId,
|
|
257
257
|
ChecksumCRC32: inProgressUpload.finalCrc32,
|
|
258
|
+
ChecksumType: inProgressUpload.finalCrc32 ? 'FULL_OBJECT' : undefined,
|
|
258
259
|
IfNoneMatch: preventOverwrite ? '*' : undefined,
|
|
259
260
|
MultipartUpload: {
|
|
260
261
|
Parts: sortUploadParts(inProgressUpload.completedParts),
|
|
@@ -263,7 +264,9 @@ export const getMultipartUploadHandlers = (
|
|
|
263
264
|
},
|
|
264
265
|
);
|
|
265
266
|
|
|
266
|
-
|
|
267
|
+
// If full-object CRC32 checksum is NOT enabled, we need to ensure the upload integrity by making extra HEAD call
|
|
268
|
+
// to verify the uploaded object size.
|
|
269
|
+
if (!inProgressUpload.finalCrc32) {
|
|
267
270
|
const { ContentLength: uploadedObjectSize, $metadata } = await headObject(
|
|
268
271
|
resolvedS3Config,
|
|
269
272
|
{
|
|
@@ -5,7 +5,7 @@ import { TransferProgressEvent } from '../../../../../../types';
|
|
|
5
5
|
import { ResolvedS3Config } from '../../../../types/options';
|
|
6
6
|
import { uploadPart } from '../../../../utils/client/s3data';
|
|
7
7
|
import { logger } from '../../../../../../utils';
|
|
8
|
-
import {
|
|
8
|
+
import { calculateContentCRC32 } from '../../../../utils/crc32';
|
|
9
9
|
import { calculateContentMd5 } from '../../../../utils';
|
|
10
10
|
|
|
11
11
|
import { PartToUpload } from './getDataChunker';
|
|
@@ -58,7 +58,7 @@ export const uploadPartExecutor = async ({
|
|
|
58
58
|
});
|
|
59
59
|
} else {
|
|
60
60
|
// handle cancel error
|
|
61
|
-
let checksumCRC32:
|
|
61
|
+
let checksumCRC32: string | undefined;
|
|
62
62
|
if (useCRC32Checksum) {
|
|
63
63
|
checksumCRC32 = await calculateContentCRC32(data);
|
|
64
64
|
}
|
|
@@ -85,14 +85,14 @@ export const uploadPartExecutor = async ({
|
|
|
85
85
|
UploadId: uploadId,
|
|
86
86
|
Body: data,
|
|
87
87
|
PartNumber: partNumber,
|
|
88
|
-
ChecksumCRC32: checksumCRC32
|
|
88
|
+
ChecksumCRC32: checksumCRC32,
|
|
89
89
|
ContentMD5: contentMD5,
|
|
90
90
|
ExpectedBucketOwner: expectedBucketOwner,
|
|
91
91
|
},
|
|
92
92
|
);
|
|
93
93
|
transferredBytes += size;
|
|
94
94
|
// eTag will always be set even the S3 model interface marks it as optional.
|
|
95
|
-
onPartUploadCompletion(partNumber, eTag!, checksumCRC32
|
|
95
|
+
onPartUploadCompletion(partNumber, eTag!, checksumCRC32);
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
};
|
|
@@ -95,7 +95,7 @@ export const putObjectJob =
|
|
|
95
95
|
ContentEncoding: contentEncoding,
|
|
96
96
|
Metadata: metadata,
|
|
97
97
|
ContentMD5: contentMD5,
|
|
98
|
-
ChecksumCRC32: checksumCRC32
|
|
98
|
+
ChecksumCRC32: checksumCRC32,
|
|
99
99
|
ExpectedBucketOwner: expectedBucketOwner,
|
|
100
100
|
IfNoneMatch: preventOverwrite ? '*' : undefined,
|
|
101
101
|
},
|
|
@@ -49,6 +49,7 @@ export type CompleteMultipartUploadInput = Pick<
|
|
|
49
49
|
| 'UploadId'
|
|
50
50
|
| 'MultipartUpload'
|
|
51
51
|
| 'ChecksumCRC32'
|
|
52
|
+
| 'ChecksumType'
|
|
52
53
|
| 'ExpectedBucketOwner'
|
|
53
54
|
| 'IfNoneMatch'
|
|
54
55
|
>;
|
|
@@ -66,6 +67,7 @@ const completeMultipartUploadSerializer = async (
|
|
|
66
67
|
'content-type': 'application/xml',
|
|
67
68
|
...assignStringVariables({
|
|
68
69
|
'x-amz-checksum-crc32': input.ChecksumCRC32,
|
|
70
|
+
'x-amz-checksum-type': input.ChecksumType,
|
|
69
71
|
'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,
|
|
70
72
|
'If-None-Match': input.IfNoneMatch,
|
|
71
73
|
}),
|
|
@@ -32,7 +32,8 @@ import { defaultConfig, parseXmlError } from './base';
|
|
|
32
32
|
export type CreateMultipartUploadInput = Extract<
|
|
33
33
|
CreateMultipartUploadCommandInput,
|
|
34
34
|
PutObjectInput
|
|
35
|
-
|
|
35
|
+
> &
|
|
36
|
+
Pick<CreateMultipartUploadCommandInput, 'ChecksumType'>;
|
|
36
37
|
|
|
37
38
|
export type CreateMultipartUploadOutput = Pick<
|
|
38
39
|
CreateMultipartUploadCommandOutput,
|
|
@@ -47,6 +48,7 @@ const createMultipartUploadSerializer = async (
|
|
|
47
48
|
...(await serializeObjectConfigsToHeaders(input)),
|
|
48
49
|
...assignStringVariables({
|
|
49
50
|
'x-amz-checksum-algorithm': input.ChecksumAlgorithm,
|
|
51
|
+
'x-amz-checksum-type': input.ChecksumType,
|
|
50
52
|
'x-amz-expected-bucket-owner': input.ExpectedBucketOwner,
|
|
51
53
|
}),
|
|
52
54
|
};
|
|
@@ -105,6 +105,7 @@ const getObjectDeserializer = async (
|
|
|
105
105
|
ChecksumCRC32C: 'x-amz-checksum-crc32c',
|
|
106
106
|
ChecksumSHA1: 'x-amz-checksum-sha1',
|
|
107
107
|
ChecksumSHA256: 'x-amz-checksum-sha256',
|
|
108
|
+
ChecksumType: 'x-amz-checksum-type',
|
|
108
109
|
MissingMeta: ['x-amz-missing-meta', deserializeNumber],
|
|
109
110
|
VersionId: 'x-amz-version-id',
|
|
110
111
|
CacheControl: 'cache-control',
|
|
@@ -29,6 +29,7 @@ import { deserializeStringTag } from '../utils/deserializeHelpers';
|
|
|
29
29
|
|
|
30
30
|
import type {
|
|
31
31
|
ChecksumAlgorithm,
|
|
32
|
+
ChecksumType,
|
|
32
33
|
ListObjectsV2CommandInput,
|
|
33
34
|
ListObjectsV2CommandOutput,
|
|
34
35
|
StorageClass,
|
|
@@ -126,6 +127,7 @@ const deserializeObject = (output: any) =>
|
|
|
126
127
|
'ChecksumAlgorithm',
|
|
127
128
|
value => emptyArrayGuard(value, deserializeChecksumAlgorithmList),
|
|
128
129
|
],
|
|
130
|
+
ChecksumType: ['ChecksumType', deserializeStringTag<ChecksumType>],
|
|
129
131
|
Size: ['Size', deserializeNumber],
|
|
130
132
|
StorageClass: ['StorageClass', deserializeStringTag<StorageClass>],
|
|
131
133
|
Owner: ['Owner', deserializeOwner],
|
|
@@ -3,21 +3,18 @@
|
|
|
3
3
|
|
|
4
4
|
import crc32 from 'crc-32';
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { hexToBase64 } from './hexUtils';
|
|
7
7
|
import { readFile } from './readFile';
|
|
8
8
|
|
|
9
9
|
const CHUNK_SIZE = 1024 * 1024; // 1MB chunks
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
seed: number;
|
|
15
|
-
}
|
|
16
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Calculate the CRC32 checksum for given content and return base64 encoded checksum.
|
|
13
|
+
*/
|
|
17
14
|
export const calculateContentCRC32 = async (
|
|
18
15
|
content: Blob | string | ArrayBuffer | ArrayBufferView,
|
|
19
16
|
seed = 0,
|
|
20
|
-
): Promise<
|
|
17
|
+
): Promise<string> => {
|
|
21
18
|
let internalSeed = seed;
|
|
22
19
|
|
|
23
20
|
if (content instanceof ArrayBuffer || ArrayBuffer.isView(content)) {
|
|
@@ -64,9 +61,5 @@ export const calculateContentCRC32 = async (
|
|
|
64
61
|
|
|
65
62
|
const hex = internalSeed.toString(16).padStart(8, '0');
|
|
66
63
|
|
|
67
|
-
return
|
|
68
|
-
checksumArrayBuffer: hexToArrayBuffer(hex),
|
|
69
|
-
checksum: hexToBase64(hex),
|
|
70
|
-
seed: internalSeed,
|
|
71
|
-
};
|
|
64
|
+
return hexToBase64(hex);
|
|
72
65
|
};
|
|
@@ -6,8 +6,5 @@ import { toBase64 } from './client/runtime';
|
|
|
6
6
|
export const hexToUint8Array = (hexString: string) =>
|
|
7
7
|
new Uint8Array((hexString.match(/\w{2}/g)! ?? []).map(h => parseInt(h, 16)));
|
|
8
8
|
|
|
9
|
-
export const hexToArrayBuffer = (hexString: string) =>
|
|
10
|
-
hexToUint8Array(hexString).buffer;
|
|
11
|
-
|
|
12
9
|
export const hexToBase64 = (hexString: string) =>
|
|
13
10
|
toBase64(hexToUint8Array(hexString));
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getCombinedCrc32 = void 0;
|
|
7
|
-
const getDataChunker_1 = require("../apis/internal/uploadData/multipart/getDataChunker");
|
|
8
|
-
const crc32_1 = require("./crc32");
|
|
9
|
-
/**
|
|
10
|
-
* Calculates a combined CRC32 checksum for the given data.
|
|
11
|
-
*
|
|
12
|
-
* This function chunks the input data, calculates CRC32 for each chunk,
|
|
13
|
-
* and then combines these checksums into a single value.
|
|
14
|
-
*
|
|
15
|
-
* @async
|
|
16
|
-
* @param {StorageUploadDataPayload} data - The data to calculate the checksum for.
|
|
17
|
-
* @param {number | undefined} size - The size of each chunk. If undefined, a default chunk size will be used.
|
|
18
|
-
* @returns {Promise<string>} A promise that resolves to a string containing the combined CRC32 checksum
|
|
19
|
-
* and the number of chunks, separated by a hyphen.
|
|
20
|
-
*/
|
|
21
|
-
const getCombinedCrc32 = async (data, size) => {
|
|
22
|
-
const crc32List = [];
|
|
23
|
-
const dataChunker = (0, getDataChunker_1.getDataChunker)(data, size);
|
|
24
|
-
for (const { data: checkData } of dataChunker) {
|
|
25
|
-
const { checksumArrayBuffer } = await (0, crc32_1.calculateContentCRC32)(checkData);
|
|
26
|
-
crc32List.push(checksumArrayBuffer);
|
|
27
|
-
}
|
|
28
|
-
return `${(await (0, crc32_1.calculateContentCRC32)(new Blob(crc32List))).checksum}-${crc32List.length}`;
|
|
29
|
-
};
|
|
30
|
-
exports.getCombinedCrc32 = getCombinedCrc32;
|
|
31
|
-
//# sourceMappingURL=getCombinedCrc32.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getCombinedCrc32.js","sources":["../../../../../src/providers/s3/utils/getCombinedCrc32.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getCombinedCrc32 = void 0;\nconst getDataChunker_1 = require(\"../apis/internal/uploadData/multipart/getDataChunker\");\nconst crc32_1 = require(\"./crc32\");\n/**\n * Calculates a combined CRC32 checksum for the given data.\n *\n * This function chunks the input data, calculates CRC32 for each chunk,\n * and then combines these checksums into a single value.\n *\n * @async\n * @param {StorageUploadDataPayload} data - The data to calculate the checksum for.\n * @param {number | undefined} size - The size of each chunk. If undefined, a default chunk size will be used.\n * @returns {Promise<string>} A promise that resolves to a string containing the combined CRC32 checksum\n * and the number of chunks, separated by a hyphen.\n */\nconst getCombinedCrc32 = async (data, size) => {\n const crc32List = [];\n const dataChunker = (0, getDataChunker_1.getDataChunker)(data, size);\n for (const { data: checkData } of dataChunker) {\n const { checksumArrayBuffer } = await (0, crc32_1.calculateContentCRC32)(checkData);\n crc32List.push(checksumArrayBuffer);\n }\n return `${(await (0, crc32_1.calculateContentCRC32)(new Blob(crc32List))).checksum}-${crc32List.length}`;\n};\nexports.getCombinedCrc32 = getCombinedCrc32;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,gBAAgB,GAAG,MAAM;AACjC,MAAM,gBAAgB,GAAG,OAAO,CAAC,sDAAsD,CAAC;AACxF,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,OAAO,IAAI,EAAE,IAAI,KAAK;AAC/C,IAAI,MAAM,SAAS,GAAG,EAAE;AACxB,IAAI,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC;AACxE,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,WAAW,EAAE;AACnD,QAAQ,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,IAAI,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC;AAC3F,QAAQ,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAC3C;AACA,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,OAAO,CAAC,qBAAqB,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AAC5G,CAAC;AACD,OAAO,CAAC,gBAAgB,GAAG,gBAAgB;;"}
|