@aws-amplify/storage 6.0.17-unstable.e316a2e.0 → 6.0.17
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/getProperties.js +1 -1
- package/dist/cjs/providers/s3/apis/internal/getProperties.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/getUrl.js +6 -6
- package/dist/cjs/providers/s3/apis/internal/getUrl.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/list.js +2 -2
- package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js +25 -25
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/base.js +1 -1
- package/dist/cjs/providers/s3/utils/client/base.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/base64/index.native.js +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/base64/index.native.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/contentSha256middleware.js +3 -3
- package/dist/cjs/providers/s3/utils/client/runtime/contentSha256middleware.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/fetch.js +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/fetch.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/xhr.js +4 -4
- package/dist/cjs/providers/s3/utils/client/runtime/s3TransferHandler/xhr.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/xhrTransferHandler.js +4 -4
- package/dist/cjs/providers/s3/utils/client/runtime/xhrTransferHandler.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/dom.js +4 -7
- package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/dom.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/pureJs.js +6 -5
- package/dist/cjs/providers/s3/utils/client/runtime/xmlParser/pureJs.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js +2 -2
- package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js.map +1 -1
- package/dist/cjs/providers/s3/utils/md5.js +8 -3
- package/dist/cjs/providers/s3/utils/md5.js.map +1 -1
- package/dist/cjs/providers/s3/utils/md5.native.js +6 -2
- package/dist/cjs/providers/s3/utils/md5.native.js.map +1 -1
- package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js +1 -1
- package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js.map +1 -1
- package/dist/cjs/providers/s3/utils/transferTask.js +10 -4
- package/dist/cjs/providers/s3/utils/transferTask.js.map +1 -1
- package/dist/esm/providers/s3/apis/getProperties.d.ts +1 -1
- package/dist/esm/providers/s3/apis/internal/getProperties.mjs +1 -1
- package/dist/esm/providers/s3/apis/internal/getProperties.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/getUrl.mjs +3 -3
- package/dist/esm/providers/s3/apis/internal/getUrl.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/list.d.ts +1 -1
- package/dist/esm/providers/s3/apis/internal/list.mjs +2 -2
- package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/list.d.ts +3 -3
- package/dist/esm/providers/s3/apis/server/list.d.ts +3 -3
- package/dist/esm/providers/s3/apis/uploadData/multipart/getDataChunker.d.ts +2 -2
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.d.ts +4 -4
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/progressTracker.d.ts +3 -3
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.d.ts +6 -6
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs +25 -25
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.d.ts +5 -5
- package/dist/esm/providers/s3/types/inputs.d.ts +2 -2
- package/dist/esm/providers/s3/types/options.d.ts +11 -11
- package/dist/esm/providers/s3/types/outputs.d.ts +1 -1
- package/dist/esm/providers/s3/utils/client/abortMultipartUpload.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/base.mjs +1 -1
- package/dist/esm/providers/s3/utils/client/base.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/completeMultipartUpload.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/copyObject.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/copyObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/createMultipartUpload.d.ts +3 -3
- package/dist/esm/providers/s3/utils/client/createMultipartUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/deleteObject.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/getObject.d.ts +3 -3
- package/dist/esm/providers/s3/utils/client/getObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/headObject.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/listObjectsV2.d.ts +3 -3
- package/dist/esm/providers/s3/utils/client/listParts.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/listParts.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/putObject.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/putObject.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/base64/index.native.mjs +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/base64/index.native.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.mjs +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/contentSha256middleware.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.mjs +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/fetch.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs +6 -6
- package/dist/esm/providers/s3/utils/client/runtime/s3TransferHandler/xhr.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.mjs +4 -4
- package/dist/esm/providers/s3/utils/client/runtime/xhrTransferHandler.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/xmlParser/dom.mjs +4 -7
- package/dist/esm/providers/s3/utils/client/runtime/xmlParser/dom.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/runtime/xmlParser/pureJs.mjs +6 -5
- package/dist/esm/providers/s3/utils/client/runtime/xmlParser/pureJs.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/types.d.ts +11 -22
- package/dist/esm/providers/s3/utils/client/uploadPart.d.ts +2 -2
- package/dist/esm/providers/s3/utils/client/uploadPart.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.d.ts +1 -3
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs +1 -1
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs +2 -2
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/serializeHelpers.d.ts +1 -1
- package/dist/esm/providers/s3/utils/md5.mjs +8 -3
- package/dist/esm/providers/s3/utils/md5.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/md5.native.mjs +6 -2
- package/dist/esm/providers/s3/utils/md5.native.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.d.ts +4 -4
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs +1 -1
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/transferTask.d.ts +10 -10
- package/dist/esm/providers/s3/utils/transferTask.mjs +10 -4
- package/dist/esm/providers/s3/utils/transferTask.mjs.map +1 -1
- package/dist/esm/types/common.d.ts +7 -7
- package/dist/esm/types/inputs.d.ts +9 -9
- package/dist/esm/types/options.d.ts +2 -2
- package/dist/esm/types/outputs.d.ts +6 -6
- package/dist/esm/utils/resolvePrefix.d.ts +2 -2
- package/package.json +107 -106
- package/src/errors/CanceledError.ts +1 -0
- package/src/errors/utils/assertValidationError.ts +1 -1
- package/src/providers/s3/apis/copy.ts +3 -1
- package/src/providers/s3/apis/downloadData.ts +5 -3
- package/src/providers/s3/apis/getProperties.ts +5 -2
- package/src/providers/s3/apis/getUrl.ts +3 -0
- package/src/providers/s3/apis/internal/copy.ts +5 -4
- package/src/providers/s3/apis/internal/getProperties.ts +8 -6
- package/src/providers/s3/apis/internal/getUrl.ts +11 -9
- package/src/providers/s3/apis/internal/list.ts +13 -10
- package/src/providers/s3/apis/internal/remove.ts +5 -3
- package/src/providers/s3/apis/list.ts +8 -4
- package/src/providers/s3/apis/remove.ts +4 -1
- package/src/providers/s3/apis/server/copy.ts +2 -1
- package/src/providers/s3/apis/server/getProperties.ts +3 -2
- package/src/providers/s3/apis/server/getUrl.ts +2 -1
- package/src/providers/s3/apis/server/list.ts +10 -7
- package/src/providers/s3/apis/server/remove.ts +2 -1
- package/src/providers/s3/apis/uploadData/byteLength.ts +1 -0
- package/src/providers/s3/apis/uploadData/index.ts +5 -2
- package/src/providers/s3/apis/uploadData/multipart/calculatePartSize.ts +1 -0
- package/src/providers/s3/apis/uploadData/multipart/getDataChunker.ts +6 -4
- package/src/providers/s3/apis/uploadData/multipart/initialUpload.ts +12 -9
- package/src/providers/s3/apis/uploadData/multipart/progressTracker.ts +5 -4
- package/src/providers/s3/apis/uploadData/multipart/uploadCache.ts +15 -12
- package/src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts +42 -36
- package/src/providers/s3/apis/uploadData/multipart/uploadPartExecutor.ts +7 -6
- package/src/providers/s3/apis/uploadData/putObjectJob.ts +2 -2
- package/src/providers/s3/types/inputs.ts +4 -4
- package/src/providers/s3/types/options.ts +11 -11
- package/src/providers/s3/types/outputs.ts +1 -1
- package/src/providers/s3/utils/client/abortMultipartUpload.ts +5 -4
- package/src/providers/s3/utils/client/base.ts +8 -6
- package/src/providers/s3/utils/client/completeMultipartUpload.ts +14 -6
- package/src/providers/s3/utils/client/copyObject.ts +7 -4
- package/src/providers/s3/utils/client/createMultipartUpload.ts +7 -5
- package/src/providers/s3/utils/client/deleteObject.ts +6 -5
- package/src/providers/s3/utils/client/getObject.ts +14 -12
- package/src/providers/s3/utils/client/headObject.ts +6 -5
- package/src/providers/s3/utils/client/listObjectsV2.ts +6 -3
- package/src/providers/s3/utils/client/listParts.ts +9 -6
- package/src/providers/s3/utils/client/putObject.ts +6 -5
- package/src/providers/s3/utils/client/runtime/base64/index.browser.ts +2 -1
- package/src/providers/s3/utils/client/runtime/base64/index.native.ts +1 -1
- package/src/providers/s3/utils/client/runtime/contentSha256middleware.ts +6 -4
- package/src/providers/s3/utils/client/runtime/s3TransferHandler/fetch.ts +7 -5
- package/src/providers/s3/utils/client/runtime/s3TransferHandler/xhr.ts +11 -11
- package/src/providers/s3/utils/client/runtime/xhrTransferHandler.ts +21 -14
- package/src/providers/s3/utils/client/runtime/xmlParser/dom.ts +6 -7
- package/src/providers/s3/utils/client/runtime/xmlParser/pureJs.ts +10 -5
- package/src/providers/s3/utils/client/types.ts +12 -14
- package/src/providers/s3/utils/client/uploadPart.ts +6 -5
- package/src/providers/s3/utils/client/utils/deserializeHelpers.ts +13 -8
- package/src/providers/s3/utils/client/utils/parsePayload.ts +6 -4
- package/src/providers/s3/utils/client/utils/serializeHelpers.ts +8 -5
- package/src/providers/s3/utils/md5.native.ts +9 -3
- package/src/providers/s3/utils/md5.ts +12 -4
- package/src/providers/s3/utils/resolveS3ConfigAndInput.ts +10 -8
- package/src/providers/s3/utils/transferTask.ts +26 -14
- package/src/providers/s3/utils/userAgent.ts +1 -1
- package/src/types/common.ts +7 -7
- package/src/types/inputs.ts +11 -11
- package/src/types/options.ts +2 -2
- package/src/types/outputs.ts +6 -6
- package/src/utils/resolvePrefix.ts +7 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.mjs","sources":["../../../../../../src/providers/s3/apis/internal/list.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { resolveS3ConfigAndInput } from '../../utils';\nimport { listObjectsV2, } from '../../utils/client';\nimport { getStorageUserAgentValue } from '../../utils/userAgent';\nimport { logger } from '../../../../utils';\nconst MAX_PAGE_SIZE = 1000;\nexport const list = async (amplify, input) => {\n const { options = {}, prefix: path = '' } = input ?? {};\n const { s3Config, bucket, keyPrefix: prefix, } = await resolveS3ConfigAndInput(amplify, options);\n // @ts-expect-error pageSize and nextToken should not coexist with listAll\n if (options?.listAll && (options?.pageSize || options?.nextToken)) {\n const anyOptions = options;\n logger.debug(`listAll is set to true, ignoring ${anyOptions?.pageSize ? `pageSize: ${anyOptions?.pageSize}` : ''} ${anyOptions?.nextToken ? `nextToken: ${anyOptions?.nextToken}` : ''}.`);\n }\n const listParams = {\n Bucket: bucket,\n Prefix: `${prefix}${path}`,\n MaxKeys: options?.listAll ? undefined : options?.pageSize,\n ContinuationToken: options?.listAll ? undefined : options?.nextToken,\n };\n logger.debug(`listing items from \"${listParams.Prefix}\"`);\n return options.listAll\n ?
|
|
1
|
+
{"version":3,"file":"list.mjs","sources":["../../../../../../src/providers/s3/apis/internal/list.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { resolveS3ConfigAndInput } from '../../utils';\nimport { listObjectsV2, } from '../../utils/client';\nimport { getStorageUserAgentValue } from '../../utils/userAgent';\nimport { logger } from '../../../../utils';\nconst MAX_PAGE_SIZE = 1000;\nexport const list = async (amplify, input) => {\n const { options = {}, prefix: path = '' } = input ?? {};\n const { s3Config, bucket, keyPrefix: prefix, } = await resolveS3ConfigAndInput(amplify, options);\n // @ts-expect-error pageSize and nextToken should not coexist with listAll\n if (options?.listAll && (options?.pageSize || options?.nextToken)) {\n const anyOptions = options;\n logger.debug(`listAll is set to true, ignoring ${anyOptions?.pageSize ? `pageSize: ${anyOptions?.pageSize}` : ''} ${anyOptions?.nextToken ? `nextToken: ${anyOptions?.nextToken}` : ''}.`);\n }\n const listParams = {\n Bucket: bucket,\n Prefix: `${prefix}${path}`,\n MaxKeys: options?.listAll ? undefined : options?.pageSize,\n ContinuationToken: options?.listAll ? undefined : options?.nextToken,\n };\n logger.debug(`listing items from \"${listParams.Prefix}\"`);\n return options.listAll\n ? _listAll({ s3Config, listParams, prefix })\n : _list({ s3Config, listParams, prefix });\n};\nconst _listAll = async ({ s3Config, listParams, prefix, }) => {\n const listResult = [];\n let continuationToken = listParams.ContinuationToken;\n do {\n const { items: pageResults, nextToken: pageNextToken } = await _list({\n prefix,\n s3Config,\n listParams: {\n ...listParams,\n ContinuationToken: continuationToken,\n MaxKeys: MAX_PAGE_SIZE,\n },\n });\n listResult.push(...pageResults);\n continuationToken = pageNextToken;\n } while (continuationToken);\n return {\n items: listResult,\n };\n};\nconst _list = async ({ s3Config, listParams, prefix, }) => {\n const listParamsClone = { ...listParams };\n if (!listParamsClone.MaxKeys || listParamsClone.MaxKeys > MAX_PAGE_SIZE) {\n logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);\n listParamsClone.MaxKeys = MAX_PAGE_SIZE;\n }\n const response = await listObjectsV2({\n ...s3Config,\n userAgentValue: getStorageUserAgentValue(StorageAction.List),\n }, listParamsClone);\n if (!response?.Contents) {\n return {\n items: [],\n };\n }\n const listResult = response.Contents.map(item => ({\n key: item.Key.substring(prefix.length),\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n }));\n return {\n items: listResult,\n nextToken: response.NextContinuationToken,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ListAllInput,
|
|
2
|
-
|
|
1
|
+
import { ListAllInput, ListAllOutput, ListPaginateInput, ListPaginateOutput } from '../types';
|
|
2
|
+
interface ListApi {
|
|
3
3
|
/**
|
|
4
4
|
* List files with given prefix in pages
|
|
5
5
|
* pageSize defaulted to 1000. Additionally, the result will include a nextToken if there are more items to retrieve.
|
|
@@ -17,6 +17,6 @@ type ListApi = {
|
|
|
17
17
|
* @throws validation: {@link StorageValidationErrorCode } - thrown when there are issues with credentials
|
|
18
18
|
*/
|
|
19
19
|
(input?: ListAllInput): Promise<ListAllOutput>;
|
|
20
|
-
}
|
|
20
|
+
}
|
|
21
21
|
export declare const list: ListApi;
|
|
22
22
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AmplifyServer } from '@aws-amplify/core/internals/adapter-core';
|
|
2
|
-
import { ListAllInput,
|
|
3
|
-
|
|
2
|
+
import { ListAllInput, ListAllOutput, ListPaginateInput, ListPaginateOutput } from '../../types';
|
|
3
|
+
interface ListApi {
|
|
4
4
|
/**
|
|
5
5
|
* Lists bucket objects with pagination.
|
|
6
6
|
* @param {ListPaginateInput} The input object
|
|
@@ -18,6 +18,6 @@ type ListApi = {
|
|
|
18
18
|
* @throws validation: {@link StorageValidationErrorCode } - thrown when there are issues with credentials
|
|
19
19
|
*/
|
|
20
20
|
(contextSpec: AmplifyServer.ContextSpec, input?: ListAllInput): Promise<ListAllOutput>;
|
|
21
|
-
}
|
|
21
|
+
}
|
|
22
22
|
export declare const list: ListApi;
|
|
23
23
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StorageUploadDataPayload } from '../../../../../types';
|
|
2
|
-
export
|
|
2
|
+
export interface PartToUpload {
|
|
3
3
|
partNumber: number;
|
|
4
4
|
data: Blob | ArrayBuffer | string;
|
|
5
5
|
size: number;
|
|
6
|
-
}
|
|
6
|
+
}
|
|
7
7
|
export declare const getDataChunker: (data: StorageUploadDataPayload, totalSize?: number) => Generator<PartToUpload, void, undefined>;
|
|
@@ -2,7 +2,7 @@ import { StorageAccessLevel } from '@aws-amplify/core';
|
|
|
2
2
|
import { ResolvedS3Config } from '../../../types/options';
|
|
3
3
|
import { StorageUploadDataPayload } from '../../../../../types';
|
|
4
4
|
import { Part } from '../../../utils/client';
|
|
5
|
-
|
|
5
|
+
interface LoadOrCreateMultipartUploadOptions {
|
|
6
6
|
s3Config: ResolvedS3Config;
|
|
7
7
|
data: StorageUploadDataPayload;
|
|
8
8
|
bucket: string;
|
|
@@ -15,11 +15,11 @@ type LoadOrCreateMultipartUploadOptions = {
|
|
|
15
15
|
metadata?: Record<string, string>;
|
|
16
16
|
size?: number;
|
|
17
17
|
abortSignal?: AbortSignal;
|
|
18
|
-
}
|
|
19
|
-
|
|
18
|
+
}
|
|
19
|
+
interface LoadOrCreateMultipartUploadResult {
|
|
20
20
|
uploadId: string;
|
|
21
21
|
cachedParts: Part[];
|
|
22
|
-
}
|
|
22
|
+
}
|
|
23
23
|
/**
|
|
24
24
|
* Load the in-progress multipart upload from local storage or async storage(RN) if it exists, or create a new multipart
|
|
25
25
|
* upload.
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { getUploadsCacheKey, findCachedUploadParts, cacheMultipartUpload } from './uploadCache.mjs';
|
|
2
1
|
import '../../../utils/client/base.mjs';
|
|
3
2
|
import '../../../utils/client/getObject.mjs';
|
|
4
3
|
import '../../../utils/client/listObjectsV2.mjs';
|
|
@@ -14,6 +13,7 @@ import '../../../utils/client/deleteObject.mjs';
|
|
|
14
13
|
import '../../../../../errors/types/validation.mjs';
|
|
15
14
|
import '@aws-amplify/core/internals/utils';
|
|
16
15
|
import { logger } from '../../../../../utils/logger.mjs';
|
|
16
|
+
import { getUploadsCacheKey, findCachedUploadParts, cacheMultipartUpload } from './uploadCache.mjs';
|
|
17
17
|
|
|
18
18
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
19
19
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialUpload.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/initialUpload.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport {
|
|
1
|
+
{"version":3,"file":"initialUpload.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/initialUpload.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { createMultipartUpload } from '../../../utils/client';\nimport { logger } from '../../../../../utils';\nimport { cacheMultipartUpload, findCachedUploadParts, getUploadsCacheKey, } from './uploadCache';\n/**\n * Load the in-progress multipart upload from local storage or async storage(RN) if it exists, or create a new multipart\n * upload.\n *\n * @internal\n */\nexport const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType, bucket, accessLevel, keyPrefix, key, contentDisposition, contentEncoding, metadata, abortSignal, }) => {\n const finalKey = keyPrefix + key;\n let cachedUpload;\n if (size === undefined) {\n logger.debug('uploaded data size cannot be determined, skipping cache.');\n cachedUpload = undefined;\n }\n else {\n const uploadCacheKey = getUploadsCacheKey({\n size,\n contentType,\n file: data instanceof File ? data : undefined,\n bucket,\n accessLevel,\n key,\n });\n const cachedUploadParts = await findCachedUploadParts({\n s3Config,\n cacheKey: uploadCacheKey,\n bucket,\n finalKey,\n });\n cachedUpload = cachedUploadParts\n ? { ...cachedUploadParts, uploadCacheKey }\n : undefined;\n }\n if (cachedUpload) {\n return {\n uploadId: cachedUpload.uploadId,\n cachedParts: cachedUpload.parts,\n };\n }\n else {\n const { UploadId } = await createMultipartUpload({\n ...s3Config,\n abortSignal,\n }, {\n Bucket: bucket,\n Key: finalKey,\n ContentType: contentType,\n ContentDisposition: contentDisposition,\n ContentEncoding: contentEncoding,\n Metadata: metadata,\n });\n if (size === undefined) {\n logger.debug('uploaded data size cannot be determined, skipping cache.');\n return {\n uploadId: UploadId,\n cachedParts: [],\n };\n }\n const uploadCacheKey = getUploadsCacheKey({\n size,\n contentType,\n file: data instanceof File ? data : undefined,\n bucket,\n accessLevel,\n key,\n });\n await cacheMultipartUpload(uploadCacheKey, {\n uploadId: UploadId,\n bucket,\n key,\n fileName: data instanceof File ? data.name : '',\n });\n return {\n uploadId: UploadId,\n cachedParts: [],\n };\n }\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,2BAA2B,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,kBAAkB,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,GAAG,KAAK;AAC9L,IAAI,MAAM,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC;AACrC,IAAI,IAAI,YAAY,CAAC;AACrB,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AAC5B,QAAQ,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;AACjF,QAAQ,YAAY,GAAG,SAAS,CAAC;AACjC,KAAK;AACL,SAAS;AACT,QAAQ,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAClD,YAAY,IAAI;AAChB,YAAY,WAAW;AACvB,YAAY,IAAI,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,GAAG,SAAS;AACzD,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,GAAG;AACf,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CAAC;AAC9D,YAAY,QAAQ;AACpB,YAAY,QAAQ,EAAE,cAAc;AACpC,YAAY,MAAM;AAClB,YAAY,QAAQ;AACpB,SAAS,CAAC,CAAC;AACX,QAAQ,YAAY,GAAG,iBAAiB;AACxC,cAAc,EAAE,GAAG,iBAAiB,EAAE,cAAc,EAAE;AACtD,cAAc,SAAS,CAAC;AACxB,KAAK;AACL,IAAI,IAAI,YAAY,EAAE;AACtB,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,YAAY,CAAC,QAAQ;AAC3C,YAAY,WAAW,EAAE,YAAY,CAAC,KAAK;AAC3C,SAAS,CAAC;AACV,KAAK;AACL,SAAS;AACT,QAAQ,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,qBAAqB,CAAC;AACzD,YAAY,GAAG,QAAQ;AACvB,YAAY,WAAW;AACvB,SAAS,EAAE;AACX,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,GAAG,EAAE,QAAQ;AACzB,YAAY,WAAW,EAAE,WAAW;AACpC,YAAY,kBAAkB,EAAE,kBAAkB;AAClD,YAAY,eAAe,EAAE,eAAe;AAC5C,YAAY,QAAQ,EAAE,QAAQ;AAC9B,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE;AAChC,YAAY,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;AACrF,YAAY,OAAO;AACnB,gBAAgB,QAAQ,EAAE,QAAQ;AAClC,gBAAgB,WAAW,EAAE,EAAE;AAC/B,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAClD,YAAY,IAAI;AAChB,YAAY,WAAW;AACvB,YAAY,IAAI,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,GAAG,SAAS;AACzD,YAAY,MAAM;AAClB,YAAY,WAAW;AACvB,YAAY,GAAG;AACf,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,oBAAoB,CAAC,cAAc,EAAE;AACnD,YAAY,QAAQ,EAAE,QAAQ;AAC9B,YAAY,MAAM;AAClB,YAAY,GAAG;AACf,YAAY,QAAQ,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE;AAC3D,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,QAAQ;AAC9B,YAAY,WAAW,EAAE,EAAE;AAC3B,SAAS,CAAC;AACV,KAAK;AACL;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { TransferProgressEvent } from '../../../../../types';
|
|
2
|
-
|
|
2
|
+
interface ConcurrentUploadsProgressTrackerOptions {
|
|
3
3
|
size?: number;
|
|
4
|
-
onProgress
|
|
5
|
-
}
|
|
4
|
+
onProgress?(event: TransferProgressEvent): void;
|
|
5
|
+
}
|
|
6
6
|
/**
|
|
7
7
|
* Track the progress from multiple concurrent uploads, and invoke the onProgress callback.
|
|
8
8
|
*
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { StorageAccessLevel } from '@aws-amplify/core';
|
|
2
2
|
import { ResolvedS3Config } from '../../../types/options';
|
|
3
3
|
import { Part } from '../../../utils/client';
|
|
4
|
-
|
|
4
|
+
interface FindCachedUploadPartsOptions {
|
|
5
5
|
cacheKey: string;
|
|
6
6
|
s3Config: ResolvedS3Config;
|
|
7
7
|
bucket: string;
|
|
8
8
|
finalKey: string;
|
|
9
|
-
}
|
|
9
|
+
}
|
|
10
10
|
/**
|
|
11
11
|
* Find the cached multipart upload id and get the parts that have been uploaded
|
|
12
12
|
* with ListParts API. If the cached upload is expired(1 hour), return null.
|
|
@@ -15,21 +15,21 @@ export declare const findCachedUploadParts: ({ cacheKey, s3Config, bucket, final
|
|
|
15
15
|
parts: Part[];
|
|
16
16
|
uploadId: string;
|
|
17
17
|
} | null>;
|
|
18
|
-
|
|
18
|
+
interface FileMetadata {
|
|
19
19
|
bucket: string;
|
|
20
20
|
fileName: string;
|
|
21
21
|
key: string;
|
|
22
22
|
uploadId: string;
|
|
23
23
|
lastTouched: number;
|
|
24
|
-
}
|
|
25
|
-
|
|
24
|
+
}
|
|
25
|
+
interface UploadsCacheKeyOptions {
|
|
26
26
|
size: number;
|
|
27
27
|
contentType?: string;
|
|
28
28
|
bucket: string;
|
|
29
29
|
accessLevel: StorageAccessLevel;
|
|
30
30
|
key: string;
|
|
31
31
|
file?: File;
|
|
32
|
-
}
|
|
32
|
+
}
|
|
33
33
|
/**
|
|
34
34
|
* Get the cache key of a multipart upload. Data source cached by different: size, content type, bucket, access level,
|
|
35
35
|
* key. If the data source is a File instance, the upload is additionally indexed by file name and last modified time.
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Amplify } from '@aws-amplify/core';
|
|
2
2
|
import { StorageAction } from '@aws-amplify/core/internals/utils';
|
|
3
|
-
import { getDataChunker } from './getDataChunker.mjs';
|
|
4
3
|
import '@smithy/md5-js';
|
|
5
4
|
import '@aws-amplify/core/internals/aws-client-utils';
|
|
6
5
|
import '../../../utils/client/runtime/s3TransferHandler/fetch.mjs';
|
|
@@ -13,10 +12,6 @@ import { CanceledError } from '../../../../../errors/CanceledError.mjs';
|
|
|
13
12
|
import '../../../../../errors/types/validation.mjs';
|
|
14
13
|
import { logger } from '../../../../../utils/logger.mjs';
|
|
15
14
|
import { DEFAULT_QUEUE_SIZE, DEFAULT_ACCESS_LEVEL } from '../../../utils/constants.mjs';
|
|
16
|
-
import { loadOrCreateMultipartUpload } from './initialUpload.mjs';
|
|
17
|
-
import { getConcurrentUploadsProgressTracker } from './progressTracker.mjs';
|
|
18
|
-
import { getUploadsCacheKey, removeCachedUpload } from './uploadCache.mjs';
|
|
19
|
-
import { uploadPartExecutor } from './uploadPartExecutor.mjs';
|
|
20
15
|
import '../../../utils/client/base.mjs';
|
|
21
16
|
import '../../../utils/client/getObject.mjs';
|
|
22
17
|
import '../../../utils/client/listObjectsV2.mjs';
|
|
@@ -30,6 +25,11 @@ import '../../../utils/client/copyObject.mjs';
|
|
|
30
25
|
import { headObject } from '../../../utils/client/headObject.mjs';
|
|
31
26
|
import '../../../utils/client/deleteObject.mjs';
|
|
32
27
|
import { getStorageUserAgentValue } from '../../../utils/userAgent.mjs';
|
|
28
|
+
import { uploadPartExecutor } from './uploadPartExecutor.mjs';
|
|
29
|
+
import { getUploadsCacheKey, removeCachedUpload } from './uploadCache.mjs';
|
|
30
|
+
import { getConcurrentUploadsProgressTracker } from './progressTracker.mjs';
|
|
31
|
+
import { loadOrCreateMultipartUpload } from './initialUpload.mjs';
|
|
32
|
+
import { getDataChunker } from './getDataChunker.mjs';
|
|
33
33
|
|
|
34
34
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
35
35
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -43,10 +43,10 @@ const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, s
|
|
|
43
43
|
let resolveCallback;
|
|
44
44
|
let rejectCallback;
|
|
45
45
|
let inProgressUpload;
|
|
46
|
-
let
|
|
46
|
+
let resolvedS3Config;
|
|
47
47
|
let abortController;
|
|
48
|
-
let
|
|
49
|
-
let
|
|
48
|
+
let resolvedBucket;
|
|
49
|
+
let resolvedKeyPrefix;
|
|
50
50
|
let uploadCacheKey;
|
|
51
51
|
// Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().
|
|
52
52
|
// The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.
|
|
@@ -54,18 +54,18 @@ const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, s
|
|
|
54
54
|
let isAbortSignalFromPause = false;
|
|
55
55
|
const startUpload = async () => {
|
|
56
56
|
const resolvedS3Options = await resolveS3ConfigAndInput(Amplify, uploadDataOptions);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
resolvedS3Config = resolvedS3Options.s3Config;
|
|
58
|
+
resolvedBucket = resolvedS3Options.bucket;
|
|
59
|
+
resolvedKeyPrefix = resolvedS3Options.keyPrefix;
|
|
60
60
|
abortController = new AbortController();
|
|
61
61
|
isAbortSignalFromPause = false;
|
|
62
62
|
const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, accessLevel, onProgress, } = uploadDataOptions ?? {};
|
|
63
63
|
if (!inProgressUpload) {
|
|
64
64
|
const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({
|
|
65
|
-
s3Config,
|
|
65
|
+
s3Config: resolvedS3Config,
|
|
66
66
|
accessLevel: resolveAccessLevel(accessLevel),
|
|
67
|
-
bucket,
|
|
68
|
-
keyPrefix,
|
|
67
|
+
bucket: resolvedBucket,
|
|
68
|
+
keyPrefix: resolvedKeyPrefix,
|
|
69
69
|
key,
|
|
70
70
|
contentType,
|
|
71
71
|
contentDisposition,
|
|
@@ -80,13 +80,13 @@ const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, s
|
|
|
80
80
|
completedParts: cachedParts,
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
|
-
const finalKey =
|
|
83
|
+
const finalKey = resolvedKeyPrefix + key;
|
|
84
84
|
uploadCacheKey = size
|
|
85
85
|
? getUploadsCacheKey({
|
|
86
86
|
file: data instanceof File ? data : undefined,
|
|
87
87
|
accessLevel: resolveAccessLevel(uploadDataOptions?.accessLevel),
|
|
88
88
|
contentType: uploadDataOptions?.contentType,
|
|
89
|
-
bucket:
|
|
89
|
+
bucket: resolvedBucket,
|
|
90
90
|
size,
|
|
91
91
|
key,
|
|
92
92
|
})
|
|
@@ -108,9 +108,9 @@ const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, s
|
|
|
108
108
|
concurrentUploadPartExecutors.push(uploadPartExecutor({
|
|
109
109
|
dataChunkerGenerator: dataChunker,
|
|
110
110
|
completedPartNumberSet,
|
|
111
|
-
s3Config,
|
|
111
|
+
s3Config: resolvedS3Config,
|
|
112
112
|
abortSignal: abortController.signal,
|
|
113
|
-
bucket,
|
|
113
|
+
bucket: resolvedBucket,
|
|
114
114
|
finalKey,
|
|
115
115
|
uploadId: inProgressUpload.uploadId,
|
|
116
116
|
onPartUploadCompletion,
|
|
@@ -120,11 +120,11 @@ const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, s
|
|
|
120
120
|
}
|
|
121
121
|
await Promise.all(concurrentUploadPartExecutors);
|
|
122
122
|
const { ETag: eTag } = await completeMultipartUpload({
|
|
123
|
-
...
|
|
123
|
+
...resolvedS3Config,
|
|
124
124
|
abortSignal: abortController.signal,
|
|
125
125
|
userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),
|
|
126
126
|
}, {
|
|
127
|
-
Bucket:
|
|
127
|
+
Bucket: resolvedBucket,
|
|
128
128
|
Key: finalKey,
|
|
129
129
|
UploadId: inProgressUpload.uploadId,
|
|
130
130
|
MultipartUpload: {
|
|
@@ -132,8 +132,8 @@ const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, s
|
|
|
132
132
|
},
|
|
133
133
|
});
|
|
134
134
|
if (size) {
|
|
135
|
-
const { ContentLength: uploadedObjectSize } = await headObject(
|
|
136
|
-
Bucket:
|
|
135
|
+
const { ContentLength: uploadedObjectSize } = await headObject(resolvedS3Config, {
|
|
136
|
+
Bucket: resolvedBucket,
|
|
137
137
|
Key: finalKey,
|
|
138
138
|
});
|
|
139
139
|
if (uploadedObjectSize && uploadedObjectSize !== size) {
|
|
@@ -186,9 +186,9 @@ const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, s
|
|
|
186
186
|
await removeCachedUpload(uploadCacheKey);
|
|
187
187
|
}
|
|
188
188
|
// 3. clear multipart upload on server side.
|
|
189
|
-
await abortMultipartUpload(
|
|
190
|
-
Bucket:
|
|
191
|
-
Key:
|
|
189
|
+
await abortMultipartUpload(resolvedS3Config, {
|
|
190
|
+
Bucket: resolvedBucket,
|
|
191
|
+
Key: resolvedKeyPrefix + key,
|
|
192
192
|
UploadId: inProgressUpload?.uploadId,
|
|
193
193
|
});
|
|
194
194
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadHandlers.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { getDataChunker } from './getDataChunker';\nimport { resolveS3ConfigAndInput } from '../../../utils';\nimport { DEFAULT_ACCESS_LEVEL, DEFAULT_QUEUE_SIZE, } from '../../../utils/constants';\nimport { loadOrCreateMultipartUpload } from './initialUpload';\nimport { getConcurrentUploadsProgressTracker } from './progressTracker';\nimport { getUploadsCacheKey, removeCachedUpload } from './uploadCache';\nimport { uploadPartExecutor } from './uploadPartExecutor';\nimport { StorageError } from '../../../../../errors/StorageError';\nimport { CanceledError } from '../../../../../errors/CanceledError';\nimport { abortMultipartUpload, completeMultipartUpload, headObject, } from '../../../utils/client';\nimport { getStorageUserAgentValue } from '../../../utils/userAgent';\nimport { logger } from '../../../../../utils';\n/**\n * Create closure hiding the multipart upload implementation details and expose the upload job and control functions(\n * onPause, onResume, onCancel).\n *\n * @internal\n */\nexport const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, size) => {\n let resolveCallback;\n let rejectCallback;\n let inProgressUpload;\n let s3Config;\n let abortController;\n let bucket;\n let keyPrefix;\n let uploadCacheKey;\n // Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().\n // The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.\n // This should be replaced by a special abort reason. However,the support of this API is lagged behind.\n let isAbortSignalFromPause = false;\n const startUpload = async () => {\n const resolvedS3Options = await resolveS3ConfigAndInput(Amplify, uploadDataOptions);\n s3Config = resolvedS3Options.s3Config;\n bucket = resolvedS3Options.bucket;\n keyPrefix = resolvedS3Options.keyPrefix;\n abortController = new AbortController();\n isAbortSignalFromPause = false;\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, accessLevel, onProgress, } = uploadDataOptions ?? {};\n if (!inProgressUpload) {\n const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({\n s3Config,\n accessLevel: resolveAccessLevel(accessLevel),\n bucket,\n keyPrefix,\n key,\n contentType,\n contentDisposition,\n contentEncoding,\n metadata,\n data,\n size,\n abortSignal: abortController.signal,\n });\n inProgressUpload = {\n uploadId,\n completedParts: cachedParts,\n };\n }\n const finalKey = keyPrefix + key;\n uploadCacheKey = size\n ? getUploadsCacheKey({\n file: data instanceof File ? data : undefined,\n accessLevel: resolveAccessLevel(uploadDataOptions?.accessLevel),\n contentType: uploadDataOptions?.contentType,\n bucket: bucket,\n size,\n key,\n })\n : undefined;\n const dataChunker = getDataChunker(data, size);\n const completedPartNumberSet = new Set(inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber));\n const onPartUploadCompletion = (partNumber, eTag) => {\n inProgressUpload?.completedParts.push({\n PartNumber: partNumber,\n ETag: eTag,\n });\n };\n const concurrentUploadsProgressTracker = getConcurrentUploadsProgressTracker({\n size,\n onProgress,\n });\n const concurrentUploadPartExecutors = [];\n for (let index = 0; index < DEFAULT_QUEUE_SIZE; index++) {\n concurrentUploadPartExecutors.push(uploadPartExecutor({\n dataChunkerGenerator: dataChunker,\n completedPartNumberSet,\n s3Config,\n abortSignal: abortController.signal,\n bucket,\n finalKey,\n uploadId: inProgressUpload.uploadId,\n onPartUploadCompletion,\n onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),\n isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,\n }));\n }\n await Promise.all(concurrentUploadPartExecutors);\n const { ETag: eTag } = await completeMultipartUpload({\n ...s3Config,\n abortSignal: abortController.signal,\n userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),\n }, {\n Bucket: bucket,\n Key: finalKey,\n UploadId: inProgressUpload.uploadId,\n MultipartUpload: {\n Parts: inProgressUpload.completedParts.sort((partA, partB) => partA.PartNumber - partB.PartNumber),\n },\n });\n if (size) {\n const { ContentLength: uploadedObjectSize } = await headObject(s3Config, {\n Bucket: bucket,\n Key: finalKey,\n });\n if (uploadedObjectSize && uploadedObjectSize !== size) {\n throw new StorageError({\n name: 'Error',\n message: `Upload failed. Expected object size ${size}, but got ${uploadedObjectSize}.`,\n });\n }\n }\n if (uploadCacheKey) {\n await removeCachedUpload(uploadCacheKey);\n }\n return {\n key,\n eTag,\n contentType,\n metadata,\n };\n };\n const startUploadWithResumability = () => startUpload()\n .then(resolveCallback)\n .catch(error => {\n const abortSignal = abortController?.signal;\n if (abortSignal?.aborted && isAbortSignalFromPause) {\n logger.debug('upload paused.');\n }\n else {\n // Uncaught errors should be exposed to the users.\n rejectCallback(error);\n }\n });\n const multipartUploadJob = () => new Promise((resolve, reject) => {\n resolveCallback = resolve;\n rejectCallback = reject;\n startUploadWithResumability();\n });\n const onPause = () => {\n isAbortSignalFromPause = true;\n abortController?.abort();\n };\n const onResume = () => {\n startUploadWithResumability();\n };\n const onCancel = (message) => {\n // 1. abort in-flight API requests\n abortController?.abort(message);\n const cancelUpload = async () => {\n // 2. clear upload cache.\n if (uploadCacheKey) {\n await removeCachedUpload(uploadCacheKey);\n }\n // 3. clear multipart upload on server side.\n await abortMultipartUpload(s3Config, {\n Bucket: bucket,\n Key: keyPrefix + key,\n UploadId: inProgressUpload?.uploadId,\n });\n };\n cancelUpload().catch(e => {\n logger.debug('error when cancelling upload task.', e);\n });\n rejectCallback(\n // Internal error that should not be exposed to the users. They should use isCancelError() to check if\n // the error is caused by cancel().\n new CanceledError(message ? { message } : undefined));\n };\n return {\n multipartUploadJob,\n onPause,\n onResume,\n onCancel,\n };\n};\nconst resolveAccessLevel = (accessLevel) => accessLevel ??\n Amplify.libraryOptions.Storage?.S3?.defaultAccessLevel ??\n DEFAULT_ACCESS_LEVEL;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uploadHandlers.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { resolveS3ConfigAndInput } from '../../../utils';\nimport { DEFAULT_ACCESS_LEVEL, DEFAULT_QUEUE_SIZE, } from '../../../utils/constants';\nimport { StorageError } from '../../../../../errors/StorageError';\nimport { CanceledError } from '../../../../../errors/CanceledError';\nimport { abortMultipartUpload, completeMultipartUpload, headObject, } from '../../../utils/client';\nimport { getStorageUserAgentValue } from '../../../utils/userAgent';\nimport { logger } from '../../../../../utils';\nimport { uploadPartExecutor } from './uploadPartExecutor';\nimport { getUploadsCacheKey, removeCachedUpload } from './uploadCache';\nimport { getConcurrentUploadsProgressTracker } from './progressTracker';\nimport { loadOrCreateMultipartUpload } from './initialUpload';\nimport { getDataChunker } from './getDataChunker';\n/**\n * Create closure hiding the multipart upload implementation details and expose the upload job and control functions(\n * onPause, onResume, onCancel).\n *\n * @internal\n */\nexport const getMultipartUploadHandlers = ({ options: uploadDataOptions, key, data }, size) => {\n let resolveCallback;\n let rejectCallback;\n let inProgressUpload;\n let resolvedS3Config;\n let abortController;\n let resolvedBucket;\n let resolvedKeyPrefix;\n let uploadCacheKey;\n // Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().\n // The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.\n // This should be replaced by a special abort reason. However,the support of this API is lagged behind.\n let isAbortSignalFromPause = false;\n const startUpload = async () => {\n const resolvedS3Options = await resolveS3ConfigAndInput(Amplify, uploadDataOptions);\n resolvedS3Config = resolvedS3Options.s3Config;\n resolvedBucket = resolvedS3Options.bucket;\n resolvedKeyPrefix = resolvedS3Options.keyPrefix;\n abortController = new AbortController();\n isAbortSignalFromPause = false;\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, accessLevel, onProgress, } = uploadDataOptions ?? {};\n if (!inProgressUpload) {\n const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({\n s3Config: resolvedS3Config,\n accessLevel: resolveAccessLevel(accessLevel),\n bucket: resolvedBucket,\n keyPrefix: resolvedKeyPrefix,\n key,\n contentType,\n contentDisposition,\n contentEncoding,\n metadata,\n data,\n size,\n abortSignal: abortController.signal,\n });\n inProgressUpload = {\n uploadId,\n completedParts: cachedParts,\n };\n }\n const finalKey = resolvedKeyPrefix + key;\n uploadCacheKey = size\n ? getUploadsCacheKey({\n file: data instanceof File ? data : undefined,\n accessLevel: resolveAccessLevel(uploadDataOptions?.accessLevel),\n contentType: uploadDataOptions?.contentType,\n bucket: resolvedBucket,\n size,\n key,\n })\n : undefined;\n const dataChunker = getDataChunker(data, size);\n const completedPartNumberSet = new Set(inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber));\n const onPartUploadCompletion = (partNumber, eTag) => {\n inProgressUpload?.completedParts.push({\n PartNumber: partNumber,\n ETag: eTag,\n });\n };\n const concurrentUploadsProgressTracker = getConcurrentUploadsProgressTracker({\n size,\n onProgress,\n });\n const concurrentUploadPartExecutors = [];\n for (let index = 0; index < DEFAULT_QUEUE_SIZE; index++) {\n concurrentUploadPartExecutors.push(uploadPartExecutor({\n dataChunkerGenerator: dataChunker,\n completedPartNumberSet,\n s3Config: resolvedS3Config,\n abortSignal: abortController.signal,\n bucket: resolvedBucket,\n finalKey,\n uploadId: inProgressUpload.uploadId,\n onPartUploadCompletion,\n onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),\n isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,\n }));\n }\n await Promise.all(concurrentUploadPartExecutors);\n const { ETag: eTag } = await completeMultipartUpload({\n ...resolvedS3Config,\n abortSignal: abortController.signal,\n userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),\n }, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload.uploadId,\n MultipartUpload: {\n Parts: inProgressUpload.completedParts.sort((partA, partB) => partA.PartNumber - partB.PartNumber),\n },\n });\n if (size) {\n const { ContentLength: uploadedObjectSize } = await headObject(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n });\n if (uploadedObjectSize && uploadedObjectSize !== size) {\n throw new StorageError({\n name: 'Error',\n message: `Upload failed. Expected object size ${size}, but got ${uploadedObjectSize}.`,\n });\n }\n }\n if (uploadCacheKey) {\n await removeCachedUpload(uploadCacheKey);\n }\n return {\n key,\n eTag,\n contentType,\n metadata,\n };\n };\n const startUploadWithResumability = () => startUpload()\n .then(resolveCallback)\n .catch(error => {\n const abortSignal = abortController?.signal;\n if (abortSignal?.aborted && isAbortSignalFromPause) {\n logger.debug('upload paused.');\n }\n else {\n // Uncaught errors should be exposed to the users.\n rejectCallback(error);\n }\n });\n const multipartUploadJob = () => new Promise((resolve, reject) => {\n resolveCallback = resolve;\n rejectCallback = reject;\n startUploadWithResumability();\n });\n const onPause = () => {\n isAbortSignalFromPause = true;\n abortController?.abort();\n };\n const onResume = () => {\n startUploadWithResumability();\n };\n const onCancel = (message) => {\n // 1. abort in-flight API requests\n abortController?.abort(message);\n const cancelUpload = async () => {\n // 2. clear upload cache.\n if (uploadCacheKey) {\n await removeCachedUpload(uploadCacheKey);\n }\n // 3. clear multipart upload on server side.\n await abortMultipartUpload(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: resolvedKeyPrefix + key,\n UploadId: inProgressUpload?.uploadId,\n });\n };\n cancelUpload().catch(e => {\n logger.debug('error when cancelling upload task.', e);\n });\n rejectCallback(\n // Internal error that should not be exposed to the users. They should use isCancelError() to check if\n // the error is caused by cancel().\n new CanceledError(message ? { message } : undefined));\n };\n return {\n multipartUploadJob,\n onPause,\n onResume,\n onCancel,\n };\n};\nconst resolveAccessLevel = (accessLevel) => accessLevel ??\n Amplify.libraryOptions.Storage?.S3?.defaultAccessLevel ??\n DEFAULT_ACCESS_LEVEL;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { PartToUpload } from './getDataChunker';
|
|
2
1
|
import { TransferProgressEvent } from '../../../../../types';
|
|
3
2
|
import { ResolvedS3Config } from '../../../types/options';
|
|
4
|
-
|
|
3
|
+
import { PartToUpload } from './getDataChunker';
|
|
4
|
+
interface UploadPartExecutorOptions {
|
|
5
5
|
dataChunkerGenerator: Generator<PartToUpload, void, undefined>;
|
|
6
6
|
completedPartNumberSet: Set<number>;
|
|
7
7
|
s3Config: ResolvedS3Config;
|
|
@@ -10,8 +10,8 @@ type UploadPartExecutorOptions = {
|
|
|
10
10
|
finalKey: string;
|
|
11
11
|
uploadId: string;
|
|
12
12
|
isObjectLockEnabled?: boolean;
|
|
13
|
-
onPartUploadCompletion
|
|
14
|
-
onProgress
|
|
15
|
-
}
|
|
13
|
+
onPartUploadCompletion(partNumber: number, eTag: string): void;
|
|
14
|
+
onProgress?(event: TransferProgressEvent): void;
|
|
15
|
+
}
|
|
16
16
|
export declare const uploadPartExecutor: ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, }: UploadPartExecutorOptions) => Promise<void>;
|
|
17
17
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StorageCopyInput, StorageGetPropertiesInput, StorageGetUrlInput, StorageListInput, StorageRemoveInput,
|
|
2
|
-
import { GetPropertiesOptions, GetUrlOptions, ListAllOptions, ListPaginateOptions, RemoveOptions,
|
|
1
|
+
import { StorageCopyInput, StorageDownloadDataInput, StorageGetPropertiesInput, StorageGetUrlInput, StorageListInput, StorageRemoveInput, StorageUploadDataInput } from '../../../types';
|
|
2
|
+
import { CopyDestinationOptions, CopySourceOptions, DownloadDataOptions, GetPropertiesOptions, GetUrlOptions, ListAllOptions, ListPaginateOptions, RemoveOptions, UploadDataOptions } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Input type for S3 copy API.
|
|
5
5
|
*/
|
|
@@ -2,37 +2,37 @@ import { StorageAccessLevel } from '@aws-amplify/core';
|
|
|
2
2
|
import { AWSCredentials } from '@aws-amplify/core/internals/utils';
|
|
3
3
|
import { TransferProgressEvent } from '../../../types';
|
|
4
4
|
import { StorageListAllOptions, StorageListPaginateOptions } from '../../../types/options';
|
|
5
|
-
|
|
5
|
+
interface CommonOptions {
|
|
6
6
|
/**
|
|
7
7
|
* Whether to use accelerate endpoint.
|
|
8
8
|
* @default false
|
|
9
9
|
*/
|
|
10
10
|
useAccelerateEndpoint?: boolean;
|
|
11
|
-
}
|
|
11
|
+
}
|
|
12
12
|
type ReadOptions = {
|
|
13
13
|
accessLevel?: 'guest' | 'private';
|
|
14
14
|
} | {
|
|
15
15
|
accessLevel: 'protected';
|
|
16
16
|
targetIdentityId?: string;
|
|
17
17
|
};
|
|
18
|
-
|
|
18
|
+
interface WriteOptions {
|
|
19
19
|
accessLevel?: StorageAccessLevel;
|
|
20
|
-
}
|
|
21
|
-
|
|
20
|
+
}
|
|
21
|
+
interface BytesRangeOptions {
|
|
22
22
|
bytesRange?: {
|
|
23
23
|
start: number;
|
|
24
24
|
end: number;
|
|
25
25
|
};
|
|
26
|
-
}
|
|
26
|
+
}
|
|
27
27
|
/**
|
|
28
28
|
* Transfer-related options type for S3 downloadData, uploadData APIs.
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
interface TransferOptions {
|
|
31
31
|
/**
|
|
32
32
|
* Callback function tracking the upload/download progress.
|
|
33
33
|
*/
|
|
34
|
-
onProgress
|
|
35
|
-
}
|
|
34
|
+
onProgress?(event: TransferProgressEvent): void;
|
|
35
|
+
}
|
|
36
36
|
/**
|
|
37
37
|
* Input options type for S3 getProperties API.
|
|
38
38
|
*/
|
|
@@ -101,11 +101,11 @@ export type CopyDestinationOptions = WriteOptions & {
|
|
|
101
101
|
*
|
|
102
102
|
* @internal
|
|
103
103
|
*/
|
|
104
|
-
export
|
|
104
|
+
export interface ResolvedS3Config {
|
|
105
105
|
region: string;
|
|
106
106
|
credentials: AWSCredentials;
|
|
107
107
|
customEndpoint?: string;
|
|
108
108
|
forcePathStyle?: boolean;
|
|
109
109
|
useAccelerateEndpoint?: boolean;
|
|
110
|
-
}
|
|
110
|
+
}
|
|
111
111
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StorageDownloadDataOutput, StorageGetUrlOutput, StorageItem, StorageListOutput,
|
|
1
|
+
import { DownloadTask, StorageDownloadDataOutput, StorageGetUrlOutput, StorageItem, StorageListOutput, UploadTask } from '../../../types';
|
|
2
2
|
/**
|
|
3
3
|
* type for S3 item.
|
|
4
4
|
*/
|
|
@@ -20,10 +20,10 @@ export declare const abortMultipartUpload: (config: {
|
|
|
20
20
|
onDownloadProgress?: ((event: import("../../../..").TransferProgressEvent) => void) | undefined;
|
|
21
21
|
onUploadProgress?: ((event: import("../../../..").TransferProgressEvent) => void) | undefined;
|
|
22
22
|
abortSignal?: AbortSignal | undefined;
|
|
23
|
-
userAgentHeader?: string | undefined;
|
|
24
|
-
maxAttempts?: number | undefined;
|
|
25
23
|
credentials: import("@aws-sdk/types").AwsCredentialIdentity | (() => Promise<import("@aws-sdk/types").AwsCredentialIdentity>);
|
|
26
24
|
region: string;
|
|
27
25
|
customEndpoint?: string | undefined;
|
|
28
26
|
forcePathStyle?: boolean | undefined;
|
|
27
|
+
userAgentHeader?: string | undefined;
|
|
28
|
+
maxAttempts?: number | undefined;
|
|
29
29
|
}, input: AbortMultipartUploadInput) => Promise<MetadataBearer>;
|
|
@@ -8,7 +8,7 @@ import 'buffer';
|
|
|
8
8
|
|
|
9
9
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
10
10
|
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
-
const DOMAIN_PATTERN = /^[a-z0-9][a-z0-9
|
|
11
|
+
const DOMAIN_PATTERN = /^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/;
|
|
12
12
|
const IP_ADDRESS_PATTERN = /(\d+\.){3}\d+/;
|
|
13
13
|
const DOTS_PATTERN = /\.\./;
|
|
14
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.mjs","sources":["../../../../../../src/providers/s3/utils/client/base.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport {
|
|
1
|
+
{"version":3,"file":"base.mjs","sources":["../../../../../../src/providers/s3/utils/client/base.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { AmplifyUrl, getAmplifyUserAgent, } from '@aws-amplify/core/internals/utils';\nimport { getDnsSuffix, getRetryDecider, jitteredBackoff, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { parseXmlError } from './utils';\nconst DOMAIN_PATTERN = /^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/;\nconst IP_ADDRESS_PATTERN = /(\\d+\\.){3}\\d+/;\nconst DOTS_PATTERN = /\\.\\./;\n/**\n * The service name used to sign requests if the API requires authentication.\n */\nexport const SERVICE_NAME = 's3';\n/**\n * The endpoint resolver function that returns the endpoint URL for a given region, and input parameters.\n */\nconst endpointResolver = (options, apiInput) => {\n const { region, useAccelerateEndpoint, customEndpoint, forcePathStyle } = options;\n let endpoint;\n // 1. get base endpoint\n if (customEndpoint) {\n endpoint = new AmplifyUrl(customEndpoint);\n }\n else if (useAccelerateEndpoint) {\n if (forcePathStyle) {\n throw new Error('Path style URLs are not supported with S3 Transfer Acceleration.');\n }\n endpoint = new AmplifyUrl(`https://s3-accelerate.${getDnsSuffix(region)}`);\n }\n else {\n endpoint = new AmplifyUrl(`https://s3.${region}.${getDnsSuffix(region)}`);\n }\n // 2. inject bucket name\n if (apiInput?.Bucket) {\n if (!isDnsCompatibleBucketName(apiInput.Bucket)) {\n throw new Error(`Invalid bucket name: \"${apiInput.Bucket}\".`);\n }\n if (forcePathStyle || apiInput.Bucket.includes('.')) {\n endpoint.pathname = `/${apiInput.Bucket}`;\n }\n else {\n endpoint.host = `${apiInput.Bucket}.${endpoint.host}`;\n }\n }\n return { url: endpoint };\n};\n/**\n * Determines whether a given string is DNS compliant per the rules outlined by\n * S3. Length, capitaization, and leading dot restrictions are enforced by the\n * DOMAIN_PATTERN regular expression.\n * @internal\n *\n * @see https://github.com/aws/aws-sdk-js-v3/blob/f2da6182298d4d6b02e84fb723492c07c27469a8/packages/middleware-bucket-endpoint/src/bucketHostnameUtils.ts#L39-L48\n * @see https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html\n */\nexport const isDnsCompatibleBucketName = (bucketName) => DOMAIN_PATTERN.test(bucketName) &&\n !IP_ADDRESS_PATTERN.test(bucketName) &&\n !DOTS_PATTERN.test(bucketName);\n/**\n * @internal\n */\nexport const defaultConfig = {\n service: SERVICE_NAME,\n endpointResolver,\n retryDecider: getRetryDecider(parseXmlError),\n computeDelay: jitteredBackoff,\n userAgentValue: getAmplifyUserAgent(),\n useAccelerateEndpoint: false,\n uriEscapePath: false, // Required by S3. See https://github.com/aws/aws-sdk-js-v3/blob/9ba012dfa3a3429aa2db0f90b3b0b3a7a31f9bc3/packages/signature-v4/src/SignatureV4.ts#L76-L83\n};\n"],"names":[],"mappings":";;;;;;;;AAAA;AACA;AAIA,MAAM,cAAc,GAAG,oCAAoC,CAAC;AAC5D,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAC3C,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B;AACA;AACA;AACY,MAAC,YAAY,GAAG,KAAK;AACjC;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK;AAChD,IAAI,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;AACtF,IAAI,IAAI,QAAQ,CAAC;AACjB;AACA,IAAI,IAAI,cAAc,EAAE;AACxB,QAAQ,QAAQ,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;AAClD,KAAK;AACL,SAAS,IAAI,qBAAqB,EAAE;AACpC,QAAQ,IAAI,cAAc,EAAE;AAC5B,YAAY,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;AAChG,SAAS;AACT,QAAQ,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,sBAAsB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,KAAK;AACL,SAAS;AACT,QAAQ,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,KAAK;AACL;AACA,IAAI,IAAI,QAAQ,EAAE,MAAM,EAAE;AAC1B,QAAQ,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACzD,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,SAAS;AACT,QAAQ,IAAI,cAAc,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7D,YAAY,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACtD,SAAS;AACT,aAAa;AACb,YAAY,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,SAAS;AACT,KAAK;AACL,IAAI,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,yBAAyB,GAAG,CAAC,UAAU,KAAK,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;AACxF,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE;AACnC;AACA;AACA;AACY,MAAC,aAAa,GAAG;AAC7B,IAAI,OAAO,EAAE,YAAY;AACzB,IAAI,gBAAgB;AACpB,IAAI,YAAY,EAAE,eAAe,CAAC,aAAa,CAAC;AAChD,IAAI,YAAY,EAAE,eAAe;AACjC,IAAI,cAAc,EAAE,mBAAmB,EAAE;AACzC,IAAI,qBAAqB,EAAE,KAAK;AAChC,IAAI,aAAa,EAAE,KAAK;AACxB;;;;"}
|
|
@@ -19,10 +19,10 @@ export declare const completeMultipartUpload: (config: {
|
|
|
19
19
|
onDownloadProgress?: ((event: import("../../../..").TransferProgressEvent) => void) | undefined;
|
|
20
20
|
onUploadProgress?: ((event: import("../../../..").TransferProgressEvent) => void) | undefined;
|
|
21
21
|
abortSignal?: AbortSignal | undefined;
|
|
22
|
-
userAgentHeader?: string | undefined;
|
|
23
|
-
maxAttempts?: number | undefined;
|
|
24
22
|
credentials: import("@aws-amplify/core/internals/aws-client-utils").Credentials | (() => Promise<import("@aws-amplify/core/internals/aws-client-utils").Credentials>);
|
|
25
23
|
region: string;
|
|
26
24
|
customEndpoint?: string | undefined;
|
|
27
25
|
forcePathStyle?: boolean | undefined;
|
|
26
|
+
userAgentHeader?: string | undefined;
|
|
27
|
+
maxAttempts?: number | undefined;
|
|
28
28
|
}, input: CompleteMultipartUploadInput) => Promise<CompleteMultipartUploadOutput>;
|
|
@@ -19,10 +19,10 @@ export declare const copyObject: (config: {
|
|
|
19
19
|
onDownloadProgress?: ((event: import("../../../..").TransferProgressEvent) => void) | undefined;
|
|
20
20
|
onUploadProgress?: ((event: import("../../../..").TransferProgressEvent) => void) | undefined;
|
|
21
21
|
abortSignal?: AbortSignal | undefined;
|
|
22
|
-
userAgentHeader?: string | undefined;
|
|
23
|
-
maxAttempts?: number | undefined;
|
|
24
22
|
credentials: import("@aws-amplify/core/internals/aws-client-utils").Credentials | (() => Promise<import("@aws-amplify/core/internals/aws-client-utils").Credentials>);
|
|
25
23
|
region: string;
|
|
26
24
|
customEndpoint?: string | undefined;
|
|
27
25
|
forcePathStyle?: boolean | undefined;
|
|
26
|
+
userAgentHeader?: string | undefined;
|
|
27
|
+
maxAttempts?: number | undefined;
|
|
28
28
|
}, input: CopyObjectInput) => Promise<CopyObjectCommandOutput>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyObject.mjs","sources":["../../../../../../src/providers/s3/utils/client/copyObject.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 { defaultConfig } from './base';\nimport { buildStorageServiceError, parseXmlBody, parseXmlError, s3TransferHandler,
|
|
1
|
+
{"version":3,"file":"copyObject.mjs","sources":["../../../../../../src/providers/s3/utils/client/copyObject.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 { defaultConfig } from './base';\nimport { assignStringVariables, buildStorageServiceError, parseXmlBody, parseXmlError, s3TransferHandler, serializeObjectConfigsToHeaders, serializePathnameObjectKey, validateS3RequiredParameter, } from './utils';\nconst copyObjectSerializer = async (input, endpoint) => {\n const headers = {\n ...(await serializeObjectConfigsToHeaders(input)),\n ...assignStringVariables({\n 'x-amz-copy-source': input.CopySource,\n 'x-amz-metadata-directive': input.MetadataDirective,\n }),\n };\n const url = new AmplifyUrl(endpoint.url.toString());\n validateS3RequiredParameter(!!input.Key, 'Key');\n url.pathname = serializePathnameObjectKey(url, input.Key);\n return {\n method: 'PUT',\n headers,\n url,\n };\n};\nconst copyObjectDeserializer = async (response) => {\n if (response.statusCode >= 300) {\n const error = (await parseXmlError(response));\n throw buildStorageServiceError(error, response.statusCode);\n }\n else {\n await parseXmlBody(response);\n return {\n $metadata: parseMetadata(response),\n };\n }\n};\nexport const copyObject = composeServiceApi(s3TransferHandler, copyObjectSerializer, copyObjectDeserializer, { ...defaultConfig, responseType: 'text' });\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA;AACA;AAMA,MAAM,oBAAoB,GAAG,OAAO,KAAK,EAAE,QAAQ,KAAK;AACxD,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,MAAM,+BAA+B,CAAC,KAAK,CAAC;AACxD,QAAQ,GAAG,qBAAqB,CAAC;AACjC,YAAY,mBAAmB,EAAE,KAAK,CAAC,UAAU;AACjD,YAAY,0BAA0B,EAAE,KAAK,CAAC,iBAAiB;AAC/D,SAAS,CAAC;AACV,KAAK,CAAC;AACN,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxD,IAAI,2BAA2B,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACpD,IAAI,GAAG,CAAC,QAAQ,GAAG,0BAA0B,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9D,IAAI,OAAO;AACX,QAAQ,MAAM,EAAE,KAAK;AACrB,QAAQ,OAAO;AACf,QAAQ,GAAG;AACX,KAAK,CAAC;AACN,CAAC,CAAC;AACF,MAAM,sBAAsB,GAAG,OAAO,QAAQ,KAAK;AACnD,IAAI,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE;AACpC,QAAQ,MAAM,KAAK,IAAI,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,QAAQ,MAAM,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;AACnE,KAAK;AACL,SAAS;AACT,QAAQ,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC;AAC9C,SAAS,CAAC;AACV,KAAK;AACL,CAAC,CAAC;AACU,MAAC,UAAU,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,EAAE,GAAG,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE;;;;"}
|
|
@@ -20,10 +20,10 @@ export declare const createMultipartUpload: (config: {
|
|
|
20
20
|
onDownloadProgress?: ((event: import("../../../..").TransferProgressEvent) => void) | undefined;
|
|
21
21
|
onUploadProgress?: ((event: import("../../../..").TransferProgressEvent) => void) | undefined;
|
|
22
22
|
abortSignal?: AbortSignal | undefined;
|
|
23
|
-
userAgentHeader?: string | undefined;
|
|
24
|
-
maxAttempts?: number | undefined;
|
|
25
23
|
credentials: import("@aws-amplify/core/internals/aws-client-utils").Credentials | (() => Promise<import("@aws-amplify/core/internals/aws-client-utils").Credentials>);
|
|
26
24
|
region: string;
|
|
27
25
|
customEndpoint?: string | undefined;
|
|
28
26
|
forcePathStyle?: boolean | undefined;
|
|
29
|
-
|
|
27
|
+
userAgentHeader?: string | undefined;
|
|
28
|
+
maxAttempts?: number | undefined;
|
|
29
|
+
}, input: import("./types").CreateMultipartUploadRequest) => Promise<CreateMultipartUploadOutput>;
|