@aws-amplify/storage 5.6.3 → 5.6.4-api-v6.13
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/lib/AwsClients/S3/abortMultipartUpload.d.ts +21 -0
- package/lib/AwsClients/S3/abortMultipartUpload.js +85 -0
- package/lib/AwsClients/S3/base.d.ts +54 -0
- package/lib/AwsClients/S3/base.js +75 -0
- package/lib/AwsClients/S3/completeMultipartUpload.d.ts +20 -0
- package/lib/AwsClients/S3/completeMultipartUpload.js +162 -0
- package/lib/AwsClients/S3/copyObject.d.ts +24 -0
- package/lib/AwsClients/S3/copyObject.js +98 -0
- package/lib/AwsClients/S3/createMultipartUpload.d.ts +21 -0
- package/lib/AwsClients/S3/createMultipartUpload.js +95 -0
- package/lib/AwsClients/S3/deleteObject.d.ts +20 -0
- package/lib/AwsClients/S3/deleteObject.js +86 -0
- package/lib/AwsClients/S3/getObject.d.ts +27 -0
- package/lib/AwsClients/S3/getObject.js +216 -0
- package/lib/AwsClients/S3/headObject.d.ts +20 -0
- package/lib/AwsClients/S3/headObject.js +96 -0
- package/lib/AwsClients/S3/index.d.ts +13 -0
- package/lib/AwsClients/S3/index.js +30 -0
- package/lib/AwsClients/S3/index.native.d.ts +14 -0
- package/lib/AwsClients/S3/index.native.js +31 -0
- package/lib/AwsClients/S3/listObjectsV2.d.ts +20 -0
- package/lib/AwsClients/S3/listObjectsV2.js +146 -0
- package/lib/AwsClients/S3/listParts.d.ts +20 -0
- package/lib/AwsClients/S3/listParts.js +110 -0
- package/lib/AwsClients/S3/putObject.d.ts +23 -0
- package/lib/AwsClients/S3/putObject.js +93 -0
- package/lib/AwsClients/S3/runtime/base64/index.browser.d.ts +2 -0
- package/lib/AwsClients/S3/runtime/base64/index.browser.js +20 -0
- package/lib/AwsClients/S3/runtime/base64/index.native.d.ts +2 -0
- package/lib/AwsClients/S3/runtime/base64/index.native.js +17 -0
- package/lib/AwsClients/S3/runtime/constants.d.ts +9 -0
- package/lib/AwsClients/S3/runtime/constants.js +14 -0
- package/lib/AwsClients/S3/runtime/contentSha256middleware.d.ts +9 -0
- package/lib/AwsClients/S3/runtime/contentSha256middleware.js +70 -0
- package/lib/AwsClients/S3/runtime/index.browser.d.ts +5 -0
- package/lib/AwsClients/S3/runtime/index.browser.js +20 -0
- package/lib/AwsClients/S3/runtime/index.d.ts +5 -0
- package/lib/AwsClients/S3/runtime/index.js +21 -0
- package/lib/AwsClients/S3/runtime/index.native.d.ts +5 -0
- package/lib/AwsClients/S3/runtime/index.native.js +20 -0
- package/lib/AwsClients/S3/runtime/s3TransferHandler/fetch.d.ts +8 -0
- package/lib/AwsClients/S3/runtime/s3TransferHandler/fetch.js +15 -0
- package/lib/AwsClients/S3/runtime/s3TransferHandler/xhr.d.ts +8 -0
- package/lib/AwsClients/S3/runtime/s3TransferHandler/xhr.js +21 -0
- package/lib/AwsClients/S3/runtime/xhrTransferHandler.d.ts +22 -0
- package/lib/AwsClients/S3/runtime/xhrTransferHandler.js +201 -0
- package/lib/AwsClients/S3/runtime/xmlParser/dom.d.ts +8 -0
- package/lib/AwsClients/S3/runtime/xmlParser/dom.js +92 -0
- package/lib/AwsClients/S3/runtime/xmlParser/pureJs.d.ts +10 -0
- package/lib/AwsClients/S3/runtime/xmlParser/pureJs.js +57 -0
- package/lib/AwsClients/S3/types.d.ts +2857 -0
- package/lib/AwsClients/S3/types.js +4 -0
- package/lib/AwsClients/S3/uploadPart.d.ts +20 -0
- package/lib/AwsClients/S3/uploadPart.js +96 -0
- package/lib/AwsClients/S3/utils/deserializeHelpers.d.ts +78 -0
- package/lib/AwsClients/S3/utils/deserializeHelpers.js +153 -0
- package/lib/AwsClients/S3/utils/index.d.ts +5 -0
- package/lib/AwsClients/S3/utils/index.js +30 -0
- package/lib/AwsClients/S3/utils/parsePayload.d.ts +3 -0
- package/lib/AwsClients/S3/utils/parsePayload.js +96 -0
- package/lib/AwsClients/S3/utils/serializeHelpers.d.ts +42 -0
- package/lib/AwsClients/S3/utils/serializeHelpers.js +183 -0
- package/lib/Storage.d.ts +5 -5
- package/lib/Storage.js +60 -31
- package/lib/common/S3ClientUtils.d.ts +24 -15
- package/lib/common/S3ClientUtils.js +83 -95
- package/lib/common/StorageConstants.d.ts +0 -1
- package/lib/common/StorageConstants.js +3 -2
- package/lib/common/StorageErrorStrings.js +3 -1
- package/lib/common/StorageUtils.js +12 -6
- package/lib/index.js +19 -4
- package/lib/providers/AWSS3Provider.d.ts +4 -8
- package/lib/providers/AWSS3Provider.js +210 -139
- package/lib/providers/AWSS3ProviderManagedUpload.d.ts +7 -7
- package/lib/providers/AWSS3ProviderManagedUpload.js +184 -98
- package/lib/providers/AWSS3UploadTask.d.ts +8 -8
- package/lib/providers/AWSS3UploadTask.js +226 -129
- package/lib/providers/index.js +4 -2
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/AWSS3Provider.d.ts +62 -62
- package/lib/types/AWSS3Provider.js +0 -1
- package/lib/types/Provider.d.ts +1 -1
- package/lib/types/Provider.js +2 -1
- package/lib/types/Storage.d.ts +23 -23
- package/lib/types/Storage.js +0 -1
- package/lib/types/index.js +17 -1
- package/lib-esm/AwsClients/S3/abortMultipartUpload.d.ts +21 -0
- package/lib-esm/AwsClients/S3/abortMultipartUpload.js +82 -0
- package/lib-esm/AwsClients/S3/base.d.ts +54 -0
- package/lib-esm/AwsClients/S3/base.js +71 -0
- package/lib-esm/AwsClients/S3/completeMultipartUpload.d.ts +20 -0
- package/lib-esm/AwsClients/S3/completeMultipartUpload.js +159 -0
- package/lib-esm/AwsClients/S3/copyObject.d.ts +24 -0
- package/lib-esm/AwsClients/S3/copyObject.js +95 -0
- package/lib-esm/AwsClients/S3/createMultipartUpload.d.ts +21 -0
- package/lib-esm/AwsClients/S3/createMultipartUpload.js +92 -0
- package/lib-esm/AwsClients/S3/deleteObject.d.ts +20 -0
- package/lib-esm/AwsClients/S3/deleteObject.js +83 -0
- package/lib-esm/AwsClients/S3/getObject.d.ts +27 -0
- package/lib-esm/AwsClients/S3/getObject.js +212 -0
- package/lib-esm/AwsClients/S3/headObject.d.ts +20 -0
- package/lib-esm/AwsClients/S3/headObject.js +93 -0
- package/lib-esm/AwsClients/S3/index.d.ts +13 -0
- package/lib-esm/AwsClients/S3/index.js +14 -0
- package/lib-esm/AwsClients/S3/index.native.d.ts +14 -0
- package/lib-esm/AwsClients/S3/index.native.js +15 -0
- package/lib-esm/AwsClients/S3/listObjectsV2.d.ts +20 -0
- package/lib-esm/AwsClients/S3/listObjectsV2.js +143 -0
- package/lib-esm/AwsClients/S3/listParts.d.ts +20 -0
- package/lib-esm/AwsClients/S3/listParts.js +107 -0
- package/lib-esm/AwsClients/S3/putObject.d.ts +23 -0
- package/lib-esm/AwsClients/S3/putObject.js +90 -0
- package/lib-esm/AwsClients/S3/runtime/base64/index.browser.d.ts +2 -0
- package/lib-esm/AwsClients/S3/runtime/base64/index.browser.js +15 -0
- package/lib-esm/AwsClients/S3/runtime/base64/index.native.d.ts +2 -0
- package/lib-esm/AwsClients/S3/runtime/base64/index.native.js +12 -0
- package/lib-esm/AwsClients/S3/runtime/constants.d.ts +9 -0
- package/lib-esm/AwsClients/S3/runtime/constants.js +11 -0
- package/lib-esm/AwsClients/S3/runtime/contentSha256middleware.d.ts +9 -0
- package/lib-esm/AwsClients/S3/runtime/contentSha256middleware.js +66 -0
- package/lib-esm/AwsClients/S3/runtime/index.browser.d.ts +5 -0
- package/lib-esm/AwsClients/S3/runtime/index.browser.js +8 -0
- package/lib-esm/AwsClients/S3/runtime/index.d.ts +5 -0
- package/lib-esm/AwsClients/S3/runtime/index.js +9 -0
- package/lib-esm/AwsClients/S3/runtime/index.native.d.ts +5 -0
- package/lib-esm/AwsClients/S3/runtime/index.native.js +8 -0
- package/lib-esm/AwsClients/S3/runtime/s3TransferHandler/fetch.d.ts +8 -0
- package/lib-esm/AwsClients/S3/runtime/s3TransferHandler/fetch.js +12 -0
- package/lib-esm/AwsClients/S3/runtime/s3TransferHandler/xhr.d.ts +8 -0
- package/lib-esm/AwsClients/S3/runtime/s3TransferHandler/xhr.js +18 -0
- package/lib-esm/AwsClients/S3/runtime/xhrTransferHandler.d.ts +22 -0
- package/lib-esm/AwsClients/S3/runtime/xhrTransferHandler.js +196 -0
- package/lib-esm/AwsClients/S3/runtime/xmlParser/dom.d.ts +8 -0
- package/lib-esm/AwsClients/S3/runtime/xmlParser/dom.js +89 -0
- package/lib-esm/AwsClients/S3/runtime/xmlParser/pureJs.d.ts +10 -0
- package/lib-esm/AwsClients/S3/runtime/xmlParser/pureJs.js +54 -0
- package/lib-esm/AwsClients/S3/types.d.ts +2857 -0
- package/lib-esm/AwsClients/S3/types.js +3 -0
- package/lib-esm/AwsClients/S3/uploadPart.d.ts +20 -0
- package/lib-esm/AwsClients/S3/uploadPart.js +93 -0
- package/lib-esm/AwsClients/S3/utils/deserializeHelpers.d.ts +78 -0
- package/lib-esm/AwsClients/S3/utils/deserializeHelpers.js +144 -0
- package/lib-esm/AwsClients/S3/utils/index.d.ts +5 -0
- package/lib-esm/AwsClients/S3/utils/index.js +7 -0
- package/lib-esm/AwsClients/S3/utils/parsePayload.d.ts +3 -0
- package/lib-esm/AwsClients/S3/utils/parsePayload.js +91 -0
- package/lib-esm/AwsClients/S3/utils/serializeHelpers.d.ts +42 -0
- package/lib-esm/AwsClients/S3/utils/serializeHelpers.js +176 -0
- package/lib-esm/Storage.d.ts +5 -5
- package/lib-esm/Storage.js +53 -25
- package/lib-esm/common/S3ClientUtils.d.ts +24 -15
- package/lib-esm/common/S3ClientUtils.js +76 -93
- package/lib-esm/common/StorageConstants.d.ts +0 -1
- package/lib-esm/common/StorageConstants.js +2 -2
- package/lib-esm/common/StorageErrorStrings.js +2 -1
- package/lib-esm/common/StorageUtils.js +2 -1
- package/lib-esm/index.js +1 -1
- package/lib-esm/providers/AWSS3Provider.d.ts +4 -8
- package/lib-esm/providers/AWSS3Provider.js +162 -115
- package/lib-esm/providers/AWSS3ProviderManagedUpload.d.ts +7 -7
- package/lib-esm/providers/AWSS3ProviderManagedUpload.js +172 -87
- package/lib-esm/providers/AWSS3UploadTask.d.ts +8 -8
- package/lib-esm/providers/AWSS3UploadTask.js +202 -106
- package/lib-esm/providers/index.js +2 -1
- package/lib-esm/tsconfig.tsbuildinfo +1 -0
- package/lib-esm/types/AWSS3Provider.d.ts +62 -62
- package/lib-esm/types/AWSS3Provider.js +1 -1
- package/lib-esm/types/Provider.d.ts +1 -1
- package/lib-esm/types/Provider.js +3 -1
- package/lib-esm/types/Storage.d.ts +23 -23
- package/lib-esm/types/Storage.js +1 -1
- package/lib-esm/types/index.js +3 -1
- package/package.json +21 -26
- package/src/AwsClients/S3/abortMultipartUpload.ts +62 -0
- package/src/AwsClients/S3/base.ts +109 -0
- package/src/AwsClients/S3/completeMultipartUpload.ts +154 -0
- package/src/AwsClients/S3/copyObject.ts +90 -0
- package/src/AwsClients/S3/createMultipartUpload.ts +75 -0
- package/src/AwsClients/S3/deleteObject.ts +69 -0
- package/src/AwsClients/S3/getObject.ts +173 -0
- package/src/AwsClients/S3/headObject.ts +91 -0
- package/src/AwsClients/S3/index.native.ts +42 -0
- package/src/AwsClients/S3/index.ts +41 -0
- package/src/AwsClients/S3/listObjectsV2.ts +130 -0
- package/src/AwsClients/S3/listParts.ts +97 -0
- package/src/AwsClients/S3/putObject.ts +94 -0
- package/src/AwsClients/S3/runtime/base64/index.browser.ts +21 -0
- package/src/AwsClients/S3/runtime/base64/index.native.ts +16 -0
- package/src/AwsClients/S3/runtime/constants.ts +16 -0
- package/src/AwsClients/S3/runtime/contentSha256middleware.ts +29 -0
- package/src/AwsClients/S3/runtime/index.browser.ts +14 -0
- package/src/AwsClients/S3/runtime/index.native.ts +14 -0
- package/src/AwsClients/S3/runtime/index.ts +15 -0
- package/src/AwsClients/S3/runtime/s3TransferHandler/fetch.ts +23 -0
- package/src/AwsClients/S3/runtime/s3TransferHandler/xhr.ts +35 -0
- package/src/AwsClients/S3/runtime/xhrTransferHandler.ts +254 -0
- package/src/AwsClients/S3/runtime/xmlParser/dom.ts +92 -0
- package/src/AwsClients/S3/runtime/xmlParser/pureJs.ts +55 -0
- package/src/AwsClients/S3/types.ts +2877 -0
- package/src/AwsClients/S3/uploadPart.ts +83 -0
- package/src/AwsClients/S3/utils/deserializeHelpers.ts +136 -0
- package/src/AwsClients/S3/utils/index.ts +27 -0
- package/src/AwsClients/S3/utils/parsePayload.ts +45 -0
- package/src/AwsClients/S3/utils/serializeHelpers.ts +112 -0
- package/src/Storage.ts +30 -27
- package/src/common/S3ClientUtils.ts +57 -113
- package/src/common/StorageConstants.ts +2 -2
- package/src/common/StorageErrorStrings.ts +2 -0
- package/src/common/StorageUtils.ts +2 -0
- package/src/providers/AWSS3Provider.ts +80 -100
- package/src/providers/AWSS3ProviderManagedUpload.ts +56 -63
- package/src/providers/AWSS3UploadTask.ts +86 -87
- package/src/providers/index.ts +2 -0
- package/src/types/AWSS3Provider.ts +55 -49
- package/src/types/Provider.ts +7 -2
- package/lib/.tsbuildinfo +0 -3
- package/lib/Storage.js.map +0 -1
- package/lib/common/S3ClientUtils.js.map +0 -1
- package/lib/common/StorageConstants.js.map +0 -1
- package/lib/common/StorageErrorStrings.js.map +0 -1
- package/lib/common/StorageUtils.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/providers/AWSS3Provider.js.map +0 -1
- package/lib/providers/AWSS3ProviderManagedUpload.js.map +0 -1
- package/lib/providers/AWSS3UploadTask.js.map +0 -1
- package/lib/providers/axios-http-handler.d.ts +0 -40
- package/lib/providers/axios-http-handler.js +0 -193
- package/lib/providers/axios-http-handler.js.map +0 -1
- package/lib/providers/index.js.map +0 -1
- package/lib/types/AWSS3Provider.js.map +0 -1
- package/lib/types/Provider.js.map +0 -1
- package/lib/types/Storage.js.map +0 -1
- package/lib/types/index.js.map +0 -1
- package/lib-esm/.tsbuildinfo +0 -3
- package/lib-esm/Storage.js.map +0 -1
- package/lib-esm/common/S3ClientUtils.js.map +0 -1
- package/lib-esm/common/StorageConstants.js.map +0 -1
- package/lib-esm/common/StorageErrorStrings.js.map +0 -1
- package/lib-esm/common/StorageUtils.js.map +0 -1
- package/lib-esm/index.js.map +0 -1
- package/lib-esm/providers/AWSS3Provider.js.map +0 -1
- package/lib-esm/providers/AWSS3ProviderManagedUpload.js.map +0 -1
- package/lib-esm/providers/AWSS3UploadTask.js.map +0 -1
- package/lib-esm/providers/axios-http-handler.d.ts +0 -40
- package/lib-esm/providers/axios-http-handler.js +0 -191
- package/lib-esm/providers/axios-http-handler.js.map +0 -1
- package/lib-esm/providers/index.js.map +0 -1
- package/lib-esm/types/AWSS3Provider.js.map +0 -1
- package/lib-esm/types/Provider.js.map +0 -1
- package/lib-esm/types/Storage.js.map +0 -1
- package/lib-esm/types/index.js.map +0 -1
- package/src/providers/axios-http-handler.ts +0 -242
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Endpoint,
|
|
6
|
+
HttpRequest,
|
|
7
|
+
HttpResponse,
|
|
8
|
+
parseMetadata,
|
|
9
|
+
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
10
|
+
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
11
|
+
import { MetadataBearer } from '@aws-sdk/types';
|
|
12
|
+
import type { AbortMultipartUploadCommandInput } from './types';
|
|
13
|
+
|
|
14
|
+
import { defaultConfig } from './base';
|
|
15
|
+
import {
|
|
16
|
+
parseXmlError,
|
|
17
|
+
s3TransferHandler,
|
|
18
|
+
serializePathnameObjectKey,
|
|
19
|
+
} from './utils';
|
|
20
|
+
|
|
21
|
+
export type AbortMultipartUploadInput = Pick<
|
|
22
|
+
AbortMultipartUploadCommandInput,
|
|
23
|
+
'Bucket' | 'Key' | 'UploadId'
|
|
24
|
+
>;
|
|
25
|
+
|
|
26
|
+
export type AbortMultipartUploadOutput = MetadataBearer;
|
|
27
|
+
|
|
28
|
+
const abortMultipartUploadSerializer = (
|
|
29
|
+
input: AbortMultipartUploadInput,
|
|
30
|
+
endpoint: Endpoint
|
|
31
|
+
): HttpRequest => {
|
|
32
|
+
const url = new URL(endpoint.url.toString());
|
|
33
|
+
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
34
|
+
url.search = new URLSearchParams({
|
|
35
|
+
uploadId: input.UploadId,
|
|
36
|
+
}).toString();
|
|
37
|
+
return {
|
|
38
|
+
method: 'DELETE',
|
|
39
|
+
headers: {},
|
|
40
|
+
url,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const abortMultipartUploadDeserializer = async (
|
|
45
|
+
response: HttpResponse
|
|
46
|
+
): Promise<AbortMultipartUploadOutput> => {
|
|
47
|
+
if (response.statusCode >= 300) {
|
|
48
|
+
const error = await parseXmlError(response);
|
|
49
|
+
throw error;
|
|
50
|
+
} else {
|
|
51
|
+
return {
|
|
52
|
+
$metadata: parseMetadata(response),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const abortMultipartUpload = composeServiceApi(
|
|
58
|
+
s3TransferHandler,
|
|
59
|
+
abortMultipartUploadSerializer,
|
|
60
|
+
abortMultipartUploadDeserializer,
|
|
61
|
+
{ ...defaultConfig, responseType: 'text' }
|
|
62
|
+
);
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { getAmplifyUserAgent } from '@aws-amplify/core';
|
|
5
|
+
import {
|
|
6
|
+
getDnsSuffix,
|
|
7
|
+
jitteredBackoff,
|
|
8
|
+
getRetryDecider,
|
|
9
|
+
EndpointResolverOptions,
|
|
10
|
+
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
11
|
+
import { parseXmlError } from './utils';
|
|
12
|
+
|
|
13
|
+
const DOMAIN_PATTERN = /^[a-z0-9][a-z0-9\.\-]{1,61}[a-z0-9]$/;
|
|
14
|
+
const IP_ADDRESS_PATTERN = /(\d+\.){3}\d+/;
|
|
15
|
+
const DOTS_PATTERN = /\.\./;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The service name used to sign requests if the API requires authentication.
|
|
19
|
+
*/
|
|
20
|
+
export const SERVICE_NAME = 's3';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Options for endpoint resolver.
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export type S3EndpointResolverOptions = EndpointResolverOptions & {
|
|
28
|
+
/**
|
|
29
|
+
* Whether to use the S3 Transfer Acceleration endpoint.
|
|
30
|
+
*/
|
|
31
|
+
useAccelerateEndpoint?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Fully qualified custom endpoint for S3. If this is set, this endpoint will be used regardless of region or
|
|
34
|
+
* useAccelerateEndpoint config.
|
|
35
|
+
* The path of this endpoint
|
|
36
|
+
*/
|
|
37
|
+
customEndpoint?: string;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Whether to force path style URLs for S3 objects (e.g., https://s3.amazonaws.com/<bucketName>/<key> instead of
|
|
41
|
+
* https://<bucketName>.s3.amazonaws.com/<key>
|
|
42
|
+
* @default false
|
|
43
|
+
*/
|
|
44
|
+
forcePathStyle?: boolean;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The endpoint resolver function that returns the endpoint URL for a given region, and input parameters.
|
|
49
|
+
*/
|
|
50
|
+
const endpointResolver = (
|
|
51
|
+
options: S3EndpointResolverOptions,
|
|
52
|
+
apiInput?: { Bucket?: string }
|
|
53
|
+
) => {
|
|
54
|
+
const { region, useAccelerateEndpoint, customEndpoint, forcePathStyle } =
|
|
55
|
+
options;
|
|
56
|
+
let endpoint: URL;
|
|
57
|
+
// 1. get base endpoint
|
|
58
|
+
if (customEndpoint) {
|
|
59
|
+
endpoint = new URL(customEndpoint);
|
|
60
|
+
} else if (useAccelerateEndpoint) {
|
|
61
|
+
if (forcePathStyle) {
|
|
62
|
+
throw new Error(
|
|
63
|
+
'Path style URLs are not supported with S3 Transfer Acceleration.'
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
endpoint = new URL(`https://s3-accelerate.${getDnsSuffix(region)}`);
|
|
67
|
+
} else {
|
|
68
|
+
endpoint = new URL(`https://s3.${region}.${getDnsSuffix(region)}`);
|
|
69
|
+
}
|
|
70
|
+
// 2. inject bucket name
|
|
71
|
+
if (apiInput?.Bucket) {
|
|
72
|
+
if (!isDnsCompatibleBucketName(apiInput.Bucket)) {
|
|
73
|
+
throw new Error(`Invalid bucket name: "${apiInput.Bucket}".`);
|
|
74
|
+
}
|
|
75
|
+
if (forcePathStyle || apiInput.Bucket.includes('.')) {
|
|
76
|
+
endpoint.pathname = `/${apiInput.Bucket}`;
|
|
77
|
+
} else {
|
|
78
|
+
endpoint.host = `${apiInput.Bucket}.${endpoint.host}`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { url: endpoint };
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Determines whether a given string is DNS compliant per the rules outlined by
|
|
86
|
+
* S3. Length, capitaization, and leading dot restrictions are enforced by the
|
|
87
|
+
* DOMAIN_PATTERN regular expression.
|
|
88
|
+
* @internal
|
|
89
|
+
*
|
|
90
|
+
* @see https://github.com/aws/aws-sdk-js-v3/blob/f2da6182298d4d6b02e84fb723492c07c27469a8/packages/middleware-bucket-endpoint/src/bucketHostnameUtils.ts#L39-L48
|
|
91
|
+
* @see https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
|
|
92
|
+
*/
|
|
93
|
+
export const isDnsCompatibleBucketName = (bucketName: string): boolean =>
|
|
94
|
+
DOMAIN_PATTERN.test(bucketName) &&
|
|
95
|
+
!IP_ADDRESS_PATTERN.test(bucketName) &&
|
|
96
|
+
!DOTS_PATTERN.test(bucketName);
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @internal
|
|
100
|
+
*/
|
|
101
|
+
export const defaultConfig = {
|
|
102
|
+
service: SERVICE_NAME,
|
|
103
|
+
endpointResolver,
|
|
104
|
+
retryDecider: getRetryDecider(parseXmlError),
|
|
105
|
+
computeDelay: jitteredBackoff,
|
|
106
|
+
userAgentValue: getAmplifyUserAgent(),
|
|
107
|
+
useAccelerateEndpoint: false,
|
|
108
|
+
uriEscapePath: false, // Required by S3. See https://github.com/aws/aws-sdk-js-v3/blob/9ba012dfa3a3429aa2db0f90b3b0b3a7a31f9bc3/packages/signature-v4/src/SignatureV4.ts#L76-L83
|
|
109
|
+
};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Endpoint,
|
|
6
|
+
HttpRequest,
|
|
7
|
+
HttpResponse,
|
|
8
|
+
parseMetadata,
|
|
9
|
+
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
10
|
+
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
11
|
+
import type {
|
|
12
|
+
CompleteMultipartUploadCommandInput,
|
|
13
|
+
CompleteMultipartUploadCommandOutput,
|
|
14
|
+
CompletedMultipartUpload,
|
|
15
|
+
CompletedPart,
|
|
16
|
+
} from './types';
|
|
17
|
+
import { defaultConfig } from './base';
|
|
18
|
+
import {
|
|
19
|
+
map,
|
|
20
|
+
parseXmlBody,
|
|
21
|
+
parseXmlError,
|
|
22
|
+
s3TransferHandler,
|
|
23
|
+
serializePathnameObjectKey,
|
|
24
|
+
serializeObjectSsecOptionsToHeaders,
|
|
25
|
+
} from './utils';
|
|
26
|
+
|
|
27
|
+
const INVALID_PARAMETER_ERROR_MSG =
|
|
28
|
+
'Invalid parameter for ComplteMultipartUpload API';
|
|
29
|
+
|
|
30
|
+
export type CompleteMultipartUploadInput = Pick<
|
|
31
|
+
CompleteMultipartUploadCommandInput,
|
|
32
|
+
| 'Bucket'
|
|
33
|
+
| 'Key'
|
|
34
|
+
| 'UploadId'
|
|
35
|
+
| 'MultipartUpload'
|
|
36
|
+
| 'SSECustomerAlgorithm'
|
|
37
|
+
| 'SSECustomerKey'
|
|
38
|
+
// TODO(AllanZhengYP): remove in V6.
|
|
39
|
+
| 'SSECustomerKeyMD5'
|
|
40
|
+
>;
|
|
41
|
+
|
|
42
|
+
export type CompleteMultipartUploadOutput = Pick<
|
|
43
|
+
CompleteMultipartUploadCommandOutput,
|
|
44
|
+
'$metadata' | 'Key' | 'ETag' | 'Location'
|
|
45
|
+
>;
|
|
46
|
+
|
|
47
|
+
const completeMultipartUploadSerializer = async (
|
|
48
|
+
input: CompleteMultipartUploadInput,
|
|
49
|
+
endpoint: Endpoint
|
|
50
|
+
): Promise<HttpRequest> => {
|
|
51
|
+
const headers = await serializeObjectSsecOptionsToHeaders(input);
|
|
52
|
+
headers['content-type'] = 'application/xml';
|
|
53
|
+
const url = new URL(endpoint.url.toString());
|
|
54
|
+
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
55
|
+
url.search = new URLSearchParams({ uploadId: input.UploadId }).toString();
|
|
56
|
+
return {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers,
|
|
59
|
+
url,
|
|
60
|
+
body:
|
|
61
|
+
'<?xml version="1.0" encoding="UTF-8"?>' +
|
|
62
|
+
serializeCompletedMultipartUpload(input.MultipartUpload),
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const serializeCompletedMultipartUpload = (
|
|
67
|
+
input: CompletedMultipartUpload
|
|
68
|
+
): string => {
|
|
69
|
+
if (!input.Parts?.length) {
|
|
70
|
+
throw new Error(`${INVALID_PARAMETER_ERROR_MSG}: ${input}`);
|
|
71
|
+
}
|
|
72
|
+
return `<CompleteMultipartUpload xmlns="http://s3.amazonaws.com/doc/2006-03-01/">${input.Parts.map(
|
|
73
|
+
serializeCompletedPartList
|
|
74
|
+
).join('')}</CompleteMultipartUpload>`;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const serializeCompletedPartList = (input: CompletedPart): string => {
|
|
78
|
+
if (!input.ETag || input.PartNumber == null) {
|
|
79
|
+
throw new Error(`${INVALID_PARAMETER_ERROR_MSG}: ${input}`);
|
|
80
|
+
}
|
|
81
|
+
return `<Part><ETag>${input.ETag}</ETag><PartNumber>${input.PartNumber}</PartNumber></Part>`;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Parse CompleteMultipartUpload API response payload, which may be empty or error indicating internal
|
|
86
|
+
* server error, even when the status code is 200.
|
|
87
|
+
*
|
|
88
|
+
* Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html#API_CompleteMultipartUpload_Example_4
|
|
89
|
+
*/
|
|
90
|
+
const parseXmlBodyOrThrow = async (response: HttpResponse): Promise<any> => {
|
|
91
|
+
const parsed = await parseXmlBody(response); // Handles empty body case
|
|
92
|
+
if (parsed.Code !== undefined && parsed.Message !== undefined) {
|
|
93
|
+
const error = await parseXmlError({
|
|
94
|
+
...response,
|
|
95
|
+
statusCode: 500, // To workaround the >=300 status code check common to other APIs.
|
|
96
|
+
});
|
|
97
|
+
error.$metadata.httpStatusCode = response.statusCode;
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
return parsed;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
const completeMultipartUploadDeserializer = async (
|
|
104
|
+
response: HttpResponse
|
|
105
|
+
): Promise<CompleteMultipartUploadOutput> => {
|
|
106
|
+
if (response.statusCode >= 300) {
|
|
107
|
+
const error = await parseXmlError(response);
|
|
108
|
+
throw error;
|
|
109
|
+
} else {
|
|
110
|
+
const parsed = await parseXmlBodyOrThrow(response);
|
|
111
|
+
const contents = map(parsed, {
|
|
112
|
+
ETag: 'ETag',
|
|
113
|
+
Key: 'Key',
|
|
114
|
+
Location: 'Location',
|
|
115
|
+
});
|
|
116
|
+
return {
|
|
117
|
+
$metadata: parseMetadata(response),
|
|
118
|
+
...contents,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
// CompleteMultiPartUpload API returns 200 status code with empty body or error message.
|
|
124
|
+
// This indicates internal server error after the response has been sent to the client.
|
|
125
|
+
// Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html#API_CompleteMultipartUpload_Example_4
|
|
126
|
+
const retryWhenErrorWith200StatusCode = async (
|
|
127
|
+
response: HttpResponse,
|
|
128
|
+
error?: Error
|
|
129
|
+
): Promise<boolean> => {
|
|
130
|
+
if (response.statusCode === 200) {
|
|
131
|
+
if (!response.body) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
const parsed = await parseXmlBody(response);
|
|
135
|
+
if (parsed.Code !== undefined && parsed.Message !== undefined) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const defaultRetryDecider = defaultConfig.retryDecider;
|
|
142
|
+
return defaultRetryDecider(response, error);
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export const completeMultipartUpload = composeServiceApi(
|
|
146
|
+
s3TransferHandler,
|
|
147
|
+
completeMultipartUploadSerializer,
|
|
148
|
+
completeMultipartUploadDeserializer,
|
|
149
|
+
{
|
|
150
|
+
...defaultConfig,
|
|
151
|
+
responseType: 'text',
|
|
152
|
+
retryDecider: retryWhenErrorWith200StatusCode,
|
|
153
|
+
}
|
|
154
|
+
);
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Endpoint,
|
|
6
|
+
HttpRequest,
|
|
7
|
+
HttpResponse,
|
|
8
|
+
parseMetadata,
|
|
9
|
+
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
10
|
+
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
11
|
+
import { MetadataBearer } from '@aws-sdk/types';
|
|
12
|
+
import type { CopyObjectCommandInput } from './types';
|
|
13
|
+
import { defaultConfig } from './base';
|
|
14
|
+
import {
|
|
15
|
+
assignStringVariables,
|
|
16
|
+
parseXmlBody,
|
|
17
|
+
parseXmlError,
|
|
18
|
+
s3TransferHandler,
|
|
19
|
+
serializeObjectConfigsToHeaders,
|
|
20
|
+
serializePathnameObjectKey,
|
|
21
|
+
} from './utils';
|
|
22
|
+
import type { S3ProviderCopyConfig } from '../../types/AWSS3Provider';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @see {@link S3ProviderCopyConfig}
|
|
26
|
+
*/
|
|
27
|
+
export type CopyObjectInput = Pick<
|
|
28
|
+
CopyObjectCommandInput,
|
|
29
|
+
| 'Bucket'
|
|
30
|
+
| 'CopySource'
|
|
31
|
+
| 'Key'
|
|
32
|
+
| 'MetadataDirective'
|
|
33
|
+
| 'CacheControl'
|
|
34
|
+
| 'ContentType'
|
|
35
|
+
| 'ContentDisposition'
|
|
36
|
+
| 'ContentLanguage'
|
|
37
|
+
| 'Expires'
|
|
38
|
+
| 'ACL'
|
|
39
|
+
| 'ServerSideEncryption'
|
|
40
|
+
| 'SSECustomerAlgorithm'
|
|
41
|
+
| 'SSECustomerKey'
|
|
42
|
+
// TODO(AllanZhengYP): remove in V6.
|
|
43
|
+
| 'SSECustomerKeyMD5'
|
|
44
|
+
| 'SSEKMSKeyId'
|
|
45
|
+
| 'Tagging'
|
|
46
|
+
| 'Metadata'
|
|
47
|
+
>;
|
|
48
|
+
|
|
49
|
+
export type CopyObjectOutput = MetadataBearer;
|
|
50
|
+
|
|
51
|
+
const copyObjectSerializer = async (
|
|
52
|
+
input: CopyObjectInput,
|
|
53
|
+
endpoint: Endpoint
|
|
54
|
+
): Promise<HttpRequest> => {
|
|
55
|
+
const headers = {
|
|
56
|
+
...(await serializeObjectConfigsToHeaders(input)),
|
|
57
|
+
...assignStringVariables({
|
|
58
|
+
'x-amz-copy-source': input.CopySource,
|
|
59
|
+
'x-amz-metadata-directive': input.MetadataDirective,
|
|
60
|
+
}),
|
|
61
|
+
};
|
|
62
|
+
const url = new URL(endpoint.url.toString());
|
|
63
|
+
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
64
|
+
return {
|
|
65
|
+
method: 'PUT',
|
|
66
|
+
headers,
|
|
67
|
+
url,
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const copyObjectDeserializer = async (
|
|
72
|
+
response: HttpResponse
|
|
73
|
+
): Promise<CopyObjectOutput> => {
|
|
74
|
+
if (response.statusCode >= 300) {
|
|
75
|
+
const error = await parseXmlError(response);
|
|
76
|
+
throw error;
|
|
77
|
+
} else {
|
|
78
|
+
await parseXmlBody(response);
|
|
79
|
+
return {
|
|
80
|
+
$metadata: parseMetadata(response),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export const copyObject = composeServiceApi(
|
|
86
|
+
s3TransferHandler,
|
|
87
|
+
copyObjectSerializer,
|
|
88
|
+
copyObjectDeserializer,
|
|
89
|
+
{ ...defaultConfig, responseType: 'text' }
|
|
90
|
+
);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Endpoint,
|
|
6
|
+
HttpRequest,
|
|
7
|
+
HttpResponse,
|
|
8
|
+
parseMetadata,
|
|
9
|
+
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
10
|
+
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
11
|
+
import type {
|
|
12
|
+
CreateMultipartUploadCommandInput,
|
|
13
|
+
CreateMultipartUploadCommandOutput,
|
|
14
|
+
} from './types';
|
|
15
|
+
import type { PutObjectInput } from './putObject';
|
|
16
|
+
|
|
17
|
+
import { defaultConfig } from './base';
|
|
18
|
+
import {
|
|
19
|
+
map,
|
|
20
|
+
parseXmlBody,
|
|
21
|
+
parseXmlError,
|
|
22
|
+
s3TransferHandler,
|
|
23
|
+
serializeObjectConfigsToHeaders,
|
|
24
|
+
serializePathnameObjectKey,
|
|
25
|
+
} from './utils';
|
|
26
|
+
|
|
27
|
+
export type CreateMultipartUploadInput = Extract<
|
|
28
|
+
CreateMultipartUploadCommandInput,
|
|
29
|
+
PutObjectInput
|
|
30
|
+
>;
|
|
31
|
+
|
|
32
|
+
export type CreateMultipartUploadOutput = Pick<
|
|
33
|
+
CreateMultipartUploadCommandOutput,
|
|
34
|
+
'UploadId' | '$metadata'
|
|
35
|
+
>;
|
|
36
|
+
|
|
37
|
+
const createMultipartUploadSerializer = async (
|
|
38
|
+
input: CreateMultipartUploadInput,
|
|
39
|
+
endpoint: Endpoint
|
|
40
|
+
): Promise<HttpRequest> => {
|
|
41
|
+
const headers = await serializeObjectConfigsToHeaders(input);
|
|
42
|
+
const url = new URL(endpoint.url.toString());
|
|
43
|
+
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
44
|
+
url.search = 'uploads';
|
|
45
|
+
return {
|
|
46
|
+
method: 'POST',
|
|
47
|
+
headers,
|
|
48
|
+
url,
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const createMultipartUploadDeserializer = async (
|
|
53
|
+
response: HttpResponse
|
|
54
|
+
): Promise<CreateMultipartUploadOutput> => {
|
|
55
|
+
if (response.statusCode >= 300) {
|
|
56
|
+
const error = await parseXmlError(response);
|
|
57
|
+
throw error;
|
|
58
|
+
} else {
|
|
59
|
+
const parsed = await parseXmlBody(response);
|
|
60
|
+
const contents = map(parsed, {
|
|
61
|
+
UploadId: 'UploadId',
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
$metadata: parseMetadata(response),
|
|
65
|
+
...contents,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export const createMultipartUpload = composeServiceApi(
|
|
71
|
+
s3TransferHandler,
|
|
72
|
+
createMultipartUploadSerializer,
|
|
73
|
+
createMultipartUploadDeserializer,
|
|
74
|
+
{ ...defaultConfig, responseType: 'text' }
|
|
75
|
+
);
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Endpoint,
|
|
6
|
+
HttpRequest,
|
|
7
|
+
HttpResponse,
|
|
8
|
+
parseMetadata,
|
|
9
|
+
} from '@aws-amplify/core/internals/aws-client-utils';
|
|
10
|
+
import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
|
|
11
|
+
import type {
|
|
12
|
+
DeleteObjectCommandInput,
|
|
13
|
+
DeleteObjectCommandOutput,
|
|
14
|
+
} from './types';
|
|
15
|
+
|
|
16
|
+
import { defaultConfig } from './base';
|
|
17
|
+
import {
|
|
18
|
+
deserializeBoolean,
|
|
19
|
+
map,
|
|
20
|
+
parseXmlError,
|
|
21
|
+
s3TransferHandler,
|
|
22
|
+
serializePathnameObjectKey,
|
|
23
|
+
} from './utils';
|
|
24
|
+
|
|
25
|
+
export type DeleteObjectInput = Pick<
|
|
26
|
+
DeleteObjectCommandInput,
|
|
27
|
+
'Bucket' | 'Key'
|
|
28
|
+
>;
|
|
29
|
+
|
|
30
|
+
export type DeleteObjectOutput = DeleteObjectCommandOutput;
|
|
31
|
+
|
|
32
|
+
const deleteObjectSerializer = (
|
|
33
|
+
input: DeleteObjectInput,
|
|
34
|
+
endpoint: Endpoint
|
|
35
|
+
): HttpRequest => {
|
|
36
|
+
const url = new URL(endpoint.url.toString());
|
|
37
|
+
url.pathname = serializePathnameObjectKey(url, input.Key);
|
|
38
|
+
return {
|
|
39
|
+
method: 'DELETE',
|
|
40
|
+
headers: {},
|
|
41
|
+
url,
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const deleteObjectDeserializer = async (
|
|
46
|
+
response: HttpResponse
|
|
47
|
+
): Promise<DeleteObjectOutput> => {
|
|
48
|
+
if (response.statusCode >= 300) {
|
|
49
|
+
const error = await parseXmlError(response);
|
|
50
|
+
throw error;
|
|
51
|
+
} else {
|
|
52
|
+
const content = map(response.headers, {
|
|
53
|
+
DeleteMarker: ['x-amz-delete-marker', deserializeBoolean],
|
|
54
|
+
VersionId: 'x-amz-version-id',
|
|
55
|
+
RequestCharged: 'x-amz-request-charged',
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
...content,
|
|
59
|
+
$metadata: parseMetadata(response),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const deleteObject = composeServiceApi(
|
|
65
|
+
s3TransferHandler,
|
|
66
|
+
deleteObjectSerializer,
|
|
67
|
+
deleteObjectDeserializer,
|
|
68
|
+
{ ...defaultConfig, responseType: 'text' }
|
|
69
|
+
);
|