@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.
Files changed (252) hide show
  1. package/lib/AwsClients/S3/abortMultipartUpload.d.ts +21 -0
  2. package/lib/AwsClients/S3/abortMultipartUpload.js +85 -0
  3. package/lib/AwsClients/S3/base.d.ts +54 -0
  4. package/lib/AwsClients/S3/base.js +75 -0
  5. package/lib/AwsClients/S3/completeMultipartUpload.d.ts +20 -0
  6. package/lib/AwsClients/S3/completeMultipartUpload.js +162 -0
  7. package/lib/AwsClients/S3/copyObject.d.ts +24 -0
  8. package/lib/AwsClients/S3/copyObject.js +98 -0
  9. package/lib/AwsClients/S3/createMultipartUpload.d.ts +21 -0
  10. package/lib/AwsClients/S3/createMultipartUpload.js +95 -0
  11. package/lib/AwsClients/S3/deleteObject.d.ts +20 -0
  12. package/lib/AwsClients/S3/deleteObject.js +86 -0
  13. package/lib/AwsClients/S3/getObject.d.ts +27 -0
  14. package/lib/AwsClients/S3/getObject.js +216 -0
  15. package/lib/AwsClients/S3/headObject.d.ts +20 -0
  16. package/lib/AwsClients/S3/headObject.js +96 -0
  17. package/lib/AwsClients/S3/index.d.ts +13 -0
  18. package/lib/AwsClients/S3/index.js +30 -0
  19. package/lib/AwsClients/S3/index.native.d.ts +14 -0
  20. package/lib/AwsClients/S3/index.native.js +31 -0
  21. package/lib/AwsClients/S3/listObjectsV2.d.ts +20 -0
  22. package/lib/AwsClients/S3/listObjectsV2.js +146 -0
  23. package/lib/AwsClients/S3/listParts.d.ts +20 -0
  24. package/lib/AwsClients/S3/listParts.js +110 -0
  25. package/lib/AwsClients/S3/putObject.d.ts +23 -0
  26. package/lib/AwsClients/S3/putObject.js +93 -0
  27. package/lib/AwsClients/S3/runtime/base64/index.browser.d.ts +2 -0
  28. package/lib/AwsClients/S3/runtime/base64/index.browser.js +20 -0
  29. package/lib/AwsClients/S3/runtime/base64/index.native.d.ts +2 -0
  30. package/lib/AwsClients/S3/runtime/base64/index.native.js +17 -0
  31. package/lib/AwsClients/S3/runtime/constants.d.ts +9 -0
  32. package/lib/AwsClients/S3/runtime/constants.js +14 -0
  33. package/lib/AwsClients/S3/runtime/contentSha256middleware.d.ts +9 -0
  34. package/lib/AwsClients/S3/runtime/contentSha256middleware.js +70 -0
  35. package/lib/AwsClients/S3/runtime/index.browser.d.ts +5 -0
  36. package/lib/AwsClients/S3/runtime/index.browser.js +20 -0
  37. package/lib/AwsClients/S3/runtime/index.d.ts +5 -0
  38. package/lib/AwsClients/S3/runtime/index.js +21 -0
  39. package/lib/AwsClients/S3/runtime/index.native.d.ts +5 -0
  40. package/lib/AwsClients/S3/runtime/index.native.js +20 -0
  41. package/lib/AwsClients/S3/runtime/s3TransferHandler/fetch.d.ts +8 -0
  42. package/lib/AwsClients/S3/runtime/s3TransferHandler/fetch.js +15 -0
  43. package/lib/AwsClients/S3/runtime/s3TransferHandler/xhr.d.ts +8 -0
  44. package/lib/AwsClients/S3/runtime/s3TransferHandler/xhr.js +21 -0
  45. package/lib/AwsClients/S3/runtime/xhrTransferHandler.d.ts +22 -0
  46. package/lib/AwsClients/S3/runtime/xhrTransferHandler.js +201 -0
  47. package/lib/AwsClients/S3/runtime/xmlParser/dom.d.ts +8 -0
  48. package/lib/AwsClients/S3/runtime/xmlParser/dom.js +92 -0
  49. package/lib/AwsClients/S3/runtime/xmlParser/pureJs.d.ts +10 -0
  50. package/lib/AwsClients/S3/runtime/xmlParser/pureJs.js +57 -0
  51. package/lib/AwsClients/S3/types.d.ts +2857 -0
  52. package/lib/AwsClients/S3/types.js +4 -0
  53. package/lib/AwsClients/S3/uploadPart.d.ts +20 -0
  54. package/lib/AwsClients/S3/uploadPart.js +96 -0
  55. package/lib/AwsClients/S3/utils/deserializeHelpers.d.ts +78 -0
  56. package/lib/AwsClients/S3/utils/deserializeHelpers.js +153 -0
  57. package/lib/AwsClients/S3/utils/index.d.ts +5 -0
  58. package/lib/AwsClients/S3/utils/index.js +30 -0
  59. package/lib/AwsClients/S3/utils/parsePayload.d.ts +3 -0
  60. package/lib/AwsClients/S3/utils/parsePayload.js +96 -0
  61. package/lib/AwsClients/S3/utils/serializeHelpers.d.ts +42 -0
  62. package/lib/AwsClients/S3/utils/serializeHelpers.js +183 -0
  63. package/lib/Storage.d.ts +5 -5
  64. package/lib/Storage.js +60 -31
  65. package/lib/common/S3ClientUtils.d.ts +24 -15
  66. package/lib/common/S3ClientUtils.js +83 -95
  67. package/lib/common/StorageConstants.d.ts +0 -1
  68. package/lib/common/StorageConstants.js +3 -2
  69. package/lib/common/StorageErrorStrings.js +3 -1
  70. package/lib/common/StorageUtils.js +12 -6
  71. package/lib/index.js +19 -4
  72. package/lib/providers/AWSS3Provider.d.ts +4 -8
  73. package/lib/providers/AWSS3Provider.js +210 -139
  74. package/lib/providers/AWSS3ProviderManagedUpload.d.ts +7 -7
  75. package/lib/providers/AWSS3ProviderManagedUpload.js +184 -98
  76. package/lib/providers/AWSS3UploadTask.d.ts +8 -8
  77. package/lib/providers/AWSS3UploadTask.js +226 -129
  78. package/lib/providers/index.js +4 -2
  79. package/lib/tsconfig.tsbuildinfo +1 -0
  80. package/lib/types/AWSS3Provider.d.ts +62 -62
  81. package/lib/types/AWSS3Provider.js +0 -1
  82. package/lib/types/Provider.d.ts +1 -1
  83. package/lib/types/Provider.js +2 -1
  84. package/lib/types/Storage.d.ts +23 -23
  85. package/lib/types/Storage.js +0 -1
  86. package/lib/types/index.js +17 -1
  87. package/lib-esm/AwsClients/S3/abortMultipartUpload.d.ts +21 -0
  88. package/lib-esm/AwsClients/S3/abortMultipartUpload.js +82 -0
  89. package/lib-esm/AwsClients/S3/base.d.ts +54 -0
  90. package/lib-esm/AwsClients/S3/base.js +71 -0
  91. package/lib-esm/AwsClients/S3/completeMultipartUpload.d.ts +20 -0
  92. package/lib-esm/AwsClients/S3/completeMultipartUpload.js +159 -0
  93. package/lib-esm/AwsClients/S3/copyObject.d.ts +24 -0
  94. package/lib-esm/AwsClients/S3/copyObject.js +95 -0
  95. package/lib-esm/AwsClients/S3/createMultipartUpload.d.ts +21 -0
  96. package/lib-esm/AwsClients/S3/createMultipartUpload.js +92 -0
  97. package/lib-esm/AwsClients/S3/deleteObject.d.ts +20 -0
  98. package/lib-esm/AwsClients/S3/deleteObject.js +83 -0
  99. package/lib-esm/AwsClients/S3/getObject.d.ts +27 -0
  100. package/lib-esm/AwsClients/S3/getObject.js +212 -0
  101. package/lib-esm/AwsClients/S3/headObject.d.ts +20 -0
  102. package/lib-esm/AwsClients/S3/headObject.js +93 -0
  103. package/lib-esm/AwsClients/S3/index.d.ts +13 -0
  104. package/lib-esm/AwsClients/S3/index.js +14 -0
  105. package/lib-esm/AwsClients/S3/index.native.d.ts +14 -0
  106. package/lib-esm/AwsClients/S3/index.native.js +15 -0
  107. package/lib-esm/AwsClients/S3/listObjectsV2.d.ts +20 -0
  108. package/lib-esm/AwsClients/S3/listObjectsV2.js +143 -0
  109. package/lib-esm/AwsClients/S3/listParts.d.ts +20 -0
  110. package/lib-esm/AwsClients/S3/listParts.js +107 -0
  111. package/lib-esm/AwsClients/S3/putObject.d.ts +23 -0
  112. package/lib-esm/AwsClients/S3/putObject.js +90 -0
  113. package/lib-esm/AwsClients/S3/runtime/base64/index.browser.d.ts +2 -0
  114. package/lib-esm/AwsClients/S3/runtime/base64/index.browser.js +15 -0
  115. package/lib-esm/AwsClients/S3/runtime/base64/index.native.d.ts +2 -0
  116. package/lib-esm/AwsClients/S3/runtime/base64/index.native.js +12 -0
  117. package/lib-esm/AwsClients/S3/runtime/constants.d.ts +9 -0
  118. package/lib-esm/AwsClients/S3/runtime/constants.js +11 -0
  119. package/lib-esm/AwsClients/S3/runtime/contentSha256middleware.d.ts +9 -0
  120. package/lib-esm/AwsClients/S3/runtime/contentSha256middleware.js +66 -0
  121. package/lib-esm/AwsClients/S3/runtime/index.browser.d.ts +5 -0
  122. package/lib-esm/AwsClients/S3/runtime/index.browser.js +8 -0
  123. package/lib-esm/AwsClients/S3/runtime/index.d.ts +5 -0
  124. package/lib-esm/AwsClients/S3/runtime/index.js +9 -0
  125. package/lib-esm/AwsClients/S3/runtime/index.native.d.ts +5 -0
  126. package/lib-esm/AwsClients/S3/runtime/index.native.js +8 -0
  127. package/lib-esm/AwsClients/S3/runtime/s3TransferHandler/fetch.d.ts +8 -0
  128. package/lib-esm/AwsClients/S3/runtime/s3TransferHandler/fetch.js +12 -0
  129. package/lib-esm/AwsClients/S3/runtime/s3TransferHandler/xhr.d.ts +8 -0
  130. package/lib-esm/AwsClients/S3/runtime/s3TransferHandler/xhr.js +18 -0
  131. package/lib-esm/AwsClients/S3/runtime/xhrTransferHandler.d.ts +22 -0
  132. package/lib-esm/AwsClients/S3/runtime/xhrTransferHandler.js +196 -0
  133. package/lib-esm/AwsClients/S3/runtime/xmlParser/dom.d.ts +8 -0
  134. package/lib-esm/AwsClients/S3/runtime/xmlParser/dom.js +89 -0
  135. package/lib-esm/AwsClients/S3/runtime/xmlParser/pureJs.d.ts +10 -0
  136. package/lib-esm/AwsClients/S3/runtime/xmlParser/pureJs.js +54 -0
  137. package/lib-esm/AwsClients/S3/types.d.ts +2857 -0
  138. package/lib-esm/AwsClients/S3/types.js +3 -0
  139. package/lib-esm/AwsClients/S3/uploadPart.d.ts +20 -0
  140. package/lib-esm/AwsClients/S3/uploadPart.js +93 -0
  141. package/lib-esm/AwsClients/S3/utils/deserializeHelpers.d.ts +78 -0
  142. package/lib-esm/AwsClients/S3/utils/deserializeHelpers.js +144 -0
  143. package/lib-esm/AwsClients/S3/utils/index.d.ts +5 -0
  144. package/lib-esm/AwsClients/S3/utils/index.js +7 -0
  145. package/lib-esm/AwsClients/S3/utils/parsePayload.d.ts +3 -0
  146. package/lib-esm/AwsClients/S3/utils/parsePayload.js +91 -0
  147. package/lib-esm/AwsClients/S3/utils/serializeHelpers.d.ts +42 -0
  148. package/lib-esm/AwsClients/S3/utils/serializeHelpers.js +176 -0
  149. package/lib-esm/Storage.d.ts +5 -5
  150. package/lib-esm/Storage.js +53 -25
  151. package/lib-esm/common/S3ClientUtils.d.ts +24 -15
  152. package/lib-esm/common/S3ClientUtils.js +76 -93
  153. package/lib-esm/common/StorageConstants.d.ts +0 -1
  154. package/lib-esm/common/StorageConstants.js +2 -2
  155. package/lib-esm/common/StorageErrorStrings.js +2 -1
  156. package/lib-esm/common/StorageUtils.js +2 -1
  157. package/lib-esm/index.js +1 -1
  158. package/lib-esm/providers/AWSS3Provider.d.ts +4 -8
  159. package/lib-esm/providers/AWSS3Provider.js +162 -115
  160. package/lib-esm/providers/AWSS3ProviderManagedUpload.d.ts +7 -7
  161. package/lib-esm/providers/AWSS3ProviderManagedUpload.js +172 -87
  162. package/lib-esm/providers/AWSS3UploadTask.d.ts +8 -8
  163. package/lib-esm/providers/AWSS3UploadTask.js +202 -106
  164. package/lib-esm/providers/index.js +2 -1
  165. package/lib-esm/tsconfig.tsbuildinfo +1 -0
  166. package/lib-esm/types/AWSS3Provider.d.ts +62 -62
  167. package/lib-esm/types/AWSS3Provider.js +1 -1
  168. package/lib-esm/types/Provider.d.ts +1 -1
  169. package/lib-esm/types/Provider.js +3 -1
  170. package/lib-esm/types/Storage.d.ts +23 -23
  171. package/lib-esm/types/Storage.js +1 -1
  172. package/lib-esm/types/index.js +3 -1
  173. package/package.json +21 -26
  174. package/src/AwsClients/S3/abortMultipartUpload.ts +62 -0
  175. package/src/AwsClients/S3/base.ts +109 -0
  176. package/src/AwsClients/S3/completeMultipartUpload.ts +154 -0
  177. package/src/AwsClients/S3/copyObject.ts +90 -0
  178. package/src/AwsClients/S3/createMultipartUpload.ts +75 -0
  179. package/src/AwsClients/S3/deleteObject.ts +69 -0
  180. package/src/AwsClients/S3/getObject.ts +173 -0
  181. package/src/AwsClients/S3/headObject.ts +91 -0
  182. package/src/AwsClients/S3/index.native.ts +42 -0
  183. package/src/AwsClients/S3/index.ts +41 -0
  184. package/src/AwsClients/S3/listObjectsV2.ts +130 -0
  185. package/src/AwsClients/S3/listParts.ts +97 -0
  186. package/src/AwsClients/S3/putObject.ts +94 -0
  187. package/src/AwsClients/S3/runtime/base64/index.browser.ts +21 -0
  188. package/src/AwsClients/S3/runtime/base64/index.native.ts +16 -0
  189. package/src/AwsClients/S3/runtime/constants.ts +16 -0
  190. package/src/AwsClients/S3/runtime/contentSha256middleware.ts +29 -0
  191. package/src/AwsClients/S3/runtime/index.browser.ts +14 -0
  192. package/src/AwsClients/S3/runtime/index.native.ts +14 -0
  193. package/src/AwsClients/S3/runtime/index.ts +15 -0
  194. package/src/AwsClients/S3/runtime/s3TransferHandler/fetch.ts +23 -0
  195. package/src/AwsClients/S3/runtime/s3TransferHandler/xhr.ts +35 -0
  196. package/src/AwsClients/S3/runtime/xhrTransferHandler.ts +254 -0
  197. package/src/AwsClients/S3/runtime/xmlParser/dom.ts +92 -0
  198. package/src/AwsClients/S3/runtime/xmlParser/pureJs.ts +55 -0
  199. package/src/AwsClients/S3/types.ts +2877 -0
  200. package/src/AwsClients/S3/uploadPart.ts +83 -0
  201. package/src/AwsClients/S3/utils/deserializeHelpers.ts +136 -0
  202. package/src/AwsClients/S3/utils/index.ts +27 -0
  203. package/src/AwsClients/S3/utils/parsePayload.ts +45 -0
  204. package/src/AwsClients/S3/utils/serializeHelpers.ts +112 -0
  205. package/src/Storage.ts +30 -27
  206. package/src/common/S3ClientUtils.ts +57 -113
  207. package/src/common/StorageConstants.ts +2 -2
  208. package/src/common/StorageErrorStrings.ts +2 -0
  209. package/src/common/StorageUtils.ts +2 -0
  210. package/src/providers/AWSS3Provider.ts +80 -100
  211. package/src/providers/AWSS3ProviderManagedUpload.ts +56 -63
  212. package/src/providers/AWSS3UploadTask.ts +86 -87
  213. package/src/providers/index.ts +2 -0
  214. package/src/types/AWSS3Provider.ts +55 -49
  215. package/src/types/Provider.ts +7 -2
  216. package/lib/.tsbuildinfo +0 -3
  217. package/lib/Storage.js.map +0 -1
  218. package/lib/common/S3ClientUtils.js.map +0 -1
  219. package/lib/common/StorageConstants.js.map +0 -1
  220. package/lib/common/StorageErrorStrings.js.map +0 -1
  221. package/lib/common/StorageUtils.js.map +0 -1
  222. package/lib/index.js.map +0 -1
  223. package/lib/providers/AWSS3Provider.js.map +0 -1
  224. package/lib/providers/AWSS3ProviderManagedUpload.js.map +0 -1
  225. package/lib/providers/AWSS3UploadTask.js.map +0 -1
  226. package/lib/providers/axios-http-handler.d.ts +0 -40
  227. package/lib/providers/axios-http-handler.js +0 -193
  228. package/lib/providers/axios-http-handler.js.map +0 -1
  229. package/lib/providers/index.js.map +0 -1
  230. package/lib/types/AWSS3Provider.js.map +0 -1
  231. package/lib/types/Provider.js.map +0 -1
  232. package/lib/types/Storage.js.map +0 -1
  233. package/lib/types/index.js.map +0 -1
  234. package/lib-esm/.tsbuildinfo +0 -3
  235. package/lib-esm/Storage.js.map +0 -1
  236. package/lib-esm/common/S3ClientUtils.js.map +0 -1
  237. package/lib-esm/common/StorageConstants.js.map +0 -1
  238. package/lib-esm/common/StorageErrorStrings.js.map +0 -1
  239. package/lib-esm/common/StorageUtils.js.map +0 -1
  240. package/lib-esm/index.js.map +0 -1
  241. package/lib-esm/providers/AWSS3Provider.js.map +0 -1
  242. package/lib-esm/providers/AWSS3ProviderManagedUpload.js.map +0 -1
  243. package/lib-esm/providers/AWSS3UploadTask.js.map +0 -1
  244. package/lib-esm/providers/axios-http-handler.d.ts +0 -40
  245. package/lib-esm/providers/axios-http-handler.js +0 -191
  246. package/lib-esm/providers/axios-http-handler.js.map +0 -1
  247. package/lib-esm/providers/index.js.map +0 -1
  248. package/lib-esm/types/AWSS3Provider.js.map +0 -1
  249. package/lib-esm/types/Provider.js.map +0 -1
  250. package/lib-esm/types/Storage.js.map +0 -1
  251. package/lib-esm/types/index.js.map +0 -1
  252. 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
+ );