@aws-amplify/storage 5.6.4-api-v6.2 → 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 (251) 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 +0 -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 +1 -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/lib/.tsbuildinfo +0 -3
  216. package/lib/Storage.js.map +0 -1
  217. package/lib/common/S3ClientUtils.js.map +0 -1
  218. package/lib/common/StorageConstants.js.map +0 -1
  219. package/lib/common/StorageErrorStrings.js.map +0 -1
  220. package/lib/common/StorageUtils.js.map +0 -1
  221. package/lib/index.js.map +0 -1
  222. package/lib/providers/AWSS3Provider.js.map +0 -1
  223. package/lib/providers/AWSS3ProviderManagedUpload.js.map +0 -1
  224. package/lib/providers/AWSS3UploadTask.js.map +0 -1
  225. package/lib/providers/axios-http-handler.d.ts +0 -40
  226. package/lib/providers/axios-http-handler.js +0 -193
  227. package/lib/providers/axios-http-handler.js.map +0 -1
  228. package/lib/providers/index.js.map +0 -1
  229. package/lib/types/AWSS3Provider.js.map +0 -1
  230. package/lib/types/Provider.js.map +0 -1
  231. package/lib/types/Storage.js.map +0 -1
  232. package/lib/types/index.js.map +0 -1
  233. package/lib-esm/.tsbuildinfo +0 -3
  234. package/lib-esm/Storage.js.map +0 -1
  235. package/lib-esm/common/S3ClientUtils.js.map +0 -1
  236. package/lib-esm/common/StorageConstants.js.map +0 -1
  237. package/lib-esm/common/StorageErrorStrings.js.map +0 -1
  238. package/lib-esm/common/StorageUtils.js.map +0 -1
  239. package/lib-esm/index.js.map +0 -1
  240. package/lib-esm/providers/AWSS3Provider.js.map +0 -1
  241. package/lib-esm/providers/AWSS3ProviderManagedUpload.js.map +0 -1
  242. package/lib-esm/providers/AWSS3UploadTask.js.map +0 -1
  243. package/lib-esm/providers/axios-http-handler.d.ts +0 -40
  244. package/lib-esm/providers/axios-http-handler.js +0 -191
  245. package/lib-esm/providers/axios-http-handler.js.map +0 -1
  246. package/lib-esm/providers/index.js.map +0 -1
  247. package/lib-esm/types/AWSS3Provider.js.map +0 -1
  248. package/lib-esm/types/Provider.js.map +0 -1
  249. package/lib-esm/types/Storage.js.map +0 -1
  250. package/lib-esm/types/index.js.map +0 -1
  251. package/src/providers/axios-http-handler.ts +0 -242
@@ -3,33 +3,30 @@
3
3
 
4
4
  import { ConsoleLogger as Logger, StorageAction } from '@aws-amplify/core';
5
5
  import {
6
- PutObjectCommandInput,
7
- PutObjectCommand,
8
- CreateMultipartUploadCommand,
9
- UploadPartCommand,
10
- CompleteMultipartUploadCommand,
11
- CompleteMultipartUploadCommandInput,
12
- ListPartsCommand,
13
- AbortMultipartUploadCommand,
6
+ PutObjectInput,
7
+ putObject,
8
+ createMultipartUpload,
14
9
  CompletedPart,
15
- S3Client,
16
- } from '@aws-sdk/client-s3';
10
+ uploadPart,
11
+ CompleteMultipartUploadInput,
12
+ completeMultipartUpload,
13
+ abortMultipartUpload,
14
+ listParts,
15
+ } from '../AwsClients/S3';
17
16
  import {
18
- SEND_UPLOAD_PROGRESS_EVENT,
19
17
  SEND_DOWNLOAD_PROGRESS_EVENT,
20
- AxiosHttpHandlerOptions,
21
- } from './axios-http-handler';
22
- import * as events from 'events';
18
+ SEND_UPLOAD_PROGRESS_EVENT,
19
+ } from '../AwsClients/S3/utils';
20
+ import { EventEmitter } from 'events';
23
21
  import {
24
- autoAdjustClockskewMiddleware,
25
- autoAdjustClockskewMiddlewareOptions,
26
22
  calculatePartSize,
27
- createPrefixMiddleware,
28
- createS3Client,
29
- prefixMiddlewareOptions,
30
23
  DEFAULT_PART_SIZE,
31
24
  DEFAULT_QUEUE_SIZE,
32
25
  MAX_OBJECT_SIZE,
26
+ S3ResolvedConfig,
27
+ loadS3Config,
28
+ getPrefix,
29
+ credentialsProvider,
33
30
  } from '../common/S3ClientUtils';
34
31
 
35
32
  const logger = new Logger('AWSS3ProviderManagedUpload');
@@ -37,7 +34,7 @@ const logger = new Logger('AWSS3ProviderManagedUpload');
37
34
  export declare interface Part {
38
35
  bodyPart: any;
39
36
  partNumber: number;
40
- emitter: events.EventEmitter;
37
+ emitter: EventEmitter;
41
38
  etag?: string;
42
39
  _lastUploadedBytes: number;
43
40
  }
@@ -45,27 +42,27 @@ export declare interface Part {
45
42
  export class AWSS3ProviderManagedUpload {
46
43
  // Data for current upload
47
44
  private body;
48
- private params: PutObjectCommandInput;
45
+ private params: PutObjectInput;
49
46
  private opts = null;
50
47
  private completedParts: CompletedPart[] = [];
51
- private s3client: S3Client;
48
+ private s3Config: S3ResolvedConfig;
52
49
  private uploadId: string | undefined;
53
50
  private partSize = DEFAULT_PART_SIZE;
54
51
 
55
52
  // Progress reporting
56
53
  private bytesUploaded = 0;
57
54
  private totalBytesToUpload = 0;
58
- private emitter: events.EventEmitter | null = null;
55
+ private emitter: EventEmitter | null = null;
59
56
 
60
- constructor(
61
- params: PutObjectCommandInput,
62
- opts,
63
- emitter: events.EventEmitter
64
- ) {
57
+ constructor(params: PutObjectInput, opts, emitter: EventEmitter) {
65
58
  this.params = params;
66
59
  this.opts = opts;
67
60
  this.emitter = emitter;
68
- this.s3client = this._createNewS3Client(opts, emitter);
61
+ this.s3Config = loadS3Config({
62
+ ...opts,
63
+ emitter,
64
+ storageAction: StorageAction.Put,
65
+ });
69
66
  }
70
67
 
71
68
  public async upload() {
@@ -75,8 +72,10 @@ export class AWSS3ProviderManagedUpload {
75
72
  if (this.totalBytesToUpload <= DEFAULT_PART_SIZE) {
76
73
  // Multipart upload is not required. Upload the sanitized body as is
77
74
  this.params.Body = this.body;
78
- const putObjectCommand = new PutObjectCommand(this.params);
79
- return this.s3client.send(putObjectCommand);
75
+ return putObject(this.s3Config, {
76
+ ...this.params,
77
+ Key: await this.getObjectKeyWithPrefix(this.params.Key),
78
+ });
80
79
  } else {
81
80
  // Step 1: Determine appropriate part size.
82
81
  this.partSize = calculatePartSize(this.totalBytesToUpload);
@@ -127,7 +126,7 @@ export class AWSS3ProviderManagedUpload {
127
126
  parts.push({
128
127
  bodyPart: this.body.slice(bodyStart, bodyEnd),
129
128
  partNumber: parts.length + 1,
130
- emitter: new events.EventEmitter(),
129
+ emitter: new EventEmitter(),
131
130
  _lastUploadedBytes: 0,
132
131
  });
133
132
  bodyStart += this.partSize;
@@ -141,10 +140,10 @@ export class AWSS3ProviderManagedUpload {
141
140
 
142
141
  private async createMultiPartUpload() {
143
142
  try {
144
- const createMultiPartUploadCommand = new CreateMultipartUploadCommand(
145
- this.params
146
- );
147
- const response = await this.s3client.send(createMultiPartUploadCommand);
143
+ const response = await createMultipartUpload(this.s3Config, {
144
+ ...this.params,
145
+ Key: await this.getObjectKeyWithPrefix(this.params.Key),
146
+ });
148
147
  logger.debug(response.UploadId);
149
148
  return response.UploadId;
150
149
  } catch (error) {
@@ -162,7 +161,6 @@ export class AWSS3ProviderManagedUpload {
162
161
  const allResults = await Promise.all(
163
162
  parts.map(async part => {
164
163
  this.setupEventListener(part);
165
- const options: AxiosHttpHandlerOptions = { emitter: part.emitter };
166
164
  const {
167
165
  Key,
168
166
  Bucket,
@@ -170,18 +168,18 @@ export class AWSS3ProviderManagedUpload {
170
168
  SSECustomerKey,
171
169
  SSECustomerKeyMD5,
172
170
  } = this.params;
173
- const res = await this.s3client.send(
174
- new UploadPartCommand({
171
+ const res = await uploadPart(
172
+ { ...this.s3Config, emitter: part.emitter },
173
+ {
175
174
  PartNumber: part.partNumber,
176
175
  Body: part.bodyPart,
177
176
  UploadId: uploadId,
178
- Key,
177
+ Key: await this.getObjectKeyWithPrefix(this.params.Key),
179
178
  Bucket,
180
- ...(SSECustomerAlgorithm && { SSECustomerAlgorithm }),
181
- ...(SSECustomerKey && { SSECustomerKey }),
182
- ...(SSECustomerKeyMD5 && { SSECustomerKeyMD5 }),
183
- }),
184
- options
179
+ SSECustomerAlgorithm,
180
+ SSECustomerKey,
181
+ SSECustomerKeyMD5,
182
+ }
185
183
  );
186
184
  return res;
187
185
  })
@@ -202,16 +200,15 @@ export class AWSS3ProviderManagedUpload {
202
200
  }
203
201
 
204
202
  private async finishMultiPartUpload(uploadId: string) {
205
- const input: CompleteMultipartUploadCommandInput = {
203
+ const input: CompleteMultipartUploadInput = {
206
204
  Bucket: this.params.Bucket,
207
- Key: this.params.Key,
205
+ Key: await this.getObjectKeyWithPrefix(this.params.Key),
208
206
  UploadId: uploadId,
209
207
  MultipartUpload: { Parts: this.completedParts },
210
208
  };
211
- const completeUploadCommand = new CompleteMultipartUploadCommand(input);
212
209
  try {
213
- const data = await this.s3client.send(completeUploadCommand);
214
- return data.Key;
210
+ const { Key } = await completeMultipartUpload(this.s3Config, input);
211
+ return Key;
215
212
  } catch (error) {
216
213
  logger.error('Error happened while finishing the upload.');
217
214
  throw error;
@@ -232,14 +229,14 @@ export class AWSS3ProviderManagedUpload {
232
229
 
233
230
  const input = {
234
231
  Bucket: this.params.Bucket,
235
- Key: this.params.Key,
232
+ Key: await this.getObjectKeyWithPrefix(this.params.Key),
236
233
  UploadId: uploadId,
237
234
  };
238
235
 
239
- await this.s3client.send(new AbortMultipartUploadCommand(input));
236
+ await abortMultipartUpload(this.s3Config, input);
240
237
 
241
238
  // verify that all parts are removed.
242
- const data = await this.s3client.send(new ListPartsCommand(input));
239
+ const data = await listParts(this.s3Config, input);
243
240
 
244
241
  if (data && data.Parts && data.Parts.length > 0) {
245
242
  throw new Error('Multipart upload clean up failed.');
@@ -320,16 +317,12 @@ export class AWSS3ProviderManagedUpload {
320
317
  return false;
321
318
  }
322
319
 
323
- protected _createNewS3Client(config, emitter?: events.EventEmitter) {
324
- const s3client = createS3Client(config, StorageAction.Put, emitter);
325
- s3client.middlewareStack.add(
326
- createPrefixMiddleware(this.opts, this.params.Key),
327
- prefixMiddlewareOptions
328
- );
329
- s3client.middlewareStack.add(
330
- autoAdjustClockskewMiddleware(s3client.config),
331
- autoAdjustClockskewMiddlewareOptions
320
+ private async getObjectKeyWithPrefix(keyWithoutPrefix: string) {
321
+ return (
322
+ (await getPrefix({
323
+ ...this.opts,
324
+ credentials: await credentialsProvider(),
325
+ })) + keyWithoutPrefix
332
326
  );
333
- return s3client;
334
327
  }
335
328
  }
@@ -1,33 +1,30 @@
1
- import {
2
- UploadPartCommandInput,
3
- CompletedPart,
4
- S3Client,
5
- UploadPartCommand,
6
- CompleteMultipartUploadCommand,
7
- Part,
8
- AbortMultipartUploadCommand,
9
- ListPartsCommand,
10
- CreateMultipartUploadCommand,
11
- PutObjectCommandInput,
12
- ListObjectsV2Command,
13
- } from '@aws-sdk/client-s3';
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
14
3
  import * as events from 'events';
15
- import axios, { Canceler, CancelTokenSource } from 'axios';
16
- import { HttpHandlerOptions } from '@aws-sdk/types';
17
4
  import { Logger } from '@aws-amplify/core';
18
5
  import { UploadTask } from '../types/Provider';
6
+ import {
7
+ PutObjectInput,
8
+ createMultipartUpload,
9
+ uploadPart,
10
+ UploadPartInput,
11
+ listObjectsV2,
12
+ CompletedPart,
13
+ Part,
14
+ listParts,
15
+ completeMultipartUpload,
16
+ abortMultipartUpload,
17
+ } from '../AwsClients/S3';
18
+ import { isCancelError, CANCELED_ERROR_MESSAGE } from '../AwsClients/S3/utils';
19
19
  import {
20
20
  calculatePartSize,
21
21
  DEFAULT_PART_SIZE,
22
22
  DEFAULT_QUEUE_SIZE,
23
23
  MAX_OBJECT_SIZE,
24
+ S3ResolvedConfig,
24
25
  } from '../common/S3ClientUtils';
25
26
  import { byteLength, isFile } from '../common/StorageUtils';
26
- import { AWSS3ProviderUploadErrorStrings } from '../common/StorageErrorStrings';
27
- import {
28
- SET_CONTENT_LENGTH_HEADER,
29
- UPLOADS_STORAGE_KEY,
30
- } from '../common/StorageConstants';
27
+ import { UPLOADS_STORAGE_KEY } from '../common/StorageConstants';
31
28
  import { StorageAccessLevel } from '..';
32
29
 
33
30
  const logger = new Logger('AWSS3UploadTask');
@@ -47,19 +44,19 @@ export enum TaskEvents {
47
44
  }
48
45
 
49
46
  export interface AWSS3UploadTaskParams {
50
- s3Client: S3Client;
47
+ s3Config: S3ResolvedConfig;
51
48
  file: Blob;
52
49
  storage: Storage;
53
50
  level: StorageAccessLevel;
54
- params: PutObjectCommandInput;
51
+ params: PutObjectInput;
55
52
  prefixPromise: Promise<string>;
56
53
  emitter?: events.EventEmitter;
57
54
  }
58
55
 
59
56
  export interface InProgressRequest {
60
- uploadPartInput: UploadPartCommandInput;
57
+ uploadPartInput: UploadPartInput;
61
58
  s3Request: Promise<any>;
62
- cancel: Canceler;
59
+ abortController: AbortController;
63
60
  }
64
61
 
65
62
  export interface UploadTaskCompleteEvent {
@@ -94,16 +91,16 @@ export class AWSS3UploadTask implements UploadTask {
94
91
  private readonly emitter: events.EventEmitter;
95
92
  private readonly file: Blob;
96
93
  private readonly queueSize = DEFAULT_QUEUE_SIZE;
97
- private readonly s3client: S3Client;
94
+ private readonly s3Config: S3ResolvedConfig;
98
95
  private readonly storage: Storage;
99
96
  private readonly storageSync: Promise<any>;
100
97
  private readonly fileId: string;
101
- private readonly params: PutObjectCommandInput;
98
+ private readonly params: PutObjectInput;
102
99
  private readonly prefixPromise: Promise<string>;
103
100
  private partSize: number = DEFAULT_PART_SIZE;
104
101
  private inProgress: InProgressRequest[] = [];
105
102
  private completedParts: CompletedPart[] = [];
106
- private queued: UploadPartCommandInput[] = [];
103
+ private queued: UploadPartInput[] = [];
107
104
  private bytesUploaded: number = 0;
108
105
  private totalBytes: number = 0;
109
106
  private uploadId: string;
@@ -111,7 +108,7 @@ export class AWSS3UploadTask implements UploadTask {
111
108
  public state: AWSS3UploadTaskState = AWSS3UploadTaskState.INIT;
112
109
 
113
110
  constructor({
114
- s3Client,
111
+ s3Config,
115
112
  file,
116
113
  emitter,
117
114
  storage,
@@ -120,8 +117,7 @@ export class AWSS3UploadTask implements UploadTask {
120
117
  prefixPromise,
121
118
  }: AWSS3UploadTaskParams) {
122
119
  this.prefixPromise = prefixPromise;
123
- this.s3client = s3Client;
124
- this.s3client.middlewareStack.remove(SET_CONTENT_LENGTH_HEADER);
120
+ this.s3Config = s3Config;
125
121
  this.storage = storage;
126
122
  this.storageSync = Promise.resolve();
127
123
  if (typeof this.storage['sync'] === 'function') {
@@ -155,15 +151,12 @@ export class AWSS3UploadTask implements UploadTask {
155
151
  key: string;
156
152
  bucket: string;
157
153
  }) {
158
- const listObjectRes = await this.s3client.send(
159
- new ListObjectsV2Command({
160
- Bucket: bucket,
161
- Prefix: key,
162
- })
163
- );
164
- const { Contents = [] } = listObjectRes;
165
- const prefix = await this.prefixPromise;
166
- const obj = Contents.find(o => o.Key === `${prefix}${key}`);
154
+ const objectKeyPrefix = await this.prefixPromise;
155
+ const { Contents = [] } = await listObjectsV2(this.s3Config, {
156
+ Bucket: bucket,
157
+ Prefix: objectKeyPrefix + key,
158
+ });
159
+ const obj = Contents.find(o => o.Key === `${objectKeyPrefix}${key}`);
167
160
  return obj;
168
161
  }
169
162
 
@@ -207,16 +200,14 @@ export class AWSS3UploadTask implements UploadTask {
207
200
  cachedUploadFileData.lastTouched = Date.now();
208
201
  this.storage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(uploadRequests));
209
202
 
210
- const listPartsOutput = await this.s3client.send(
211
- new ListPartsCommand({
212
- Bucket: this.params.Bucket,
213
- Key: this.params.Key,
214
- UploadId: cachedUploadFileData.uploadId,
215
- })
216
- );
203
+ const { Parts = [] } = await listParts(this.s3Config, {
204
+ Bucket: this.params.Bucket,
205
+ Key: (await this.prefixPromise) + this.params.Key,
206
+ UploadId: cachedUploadFileData.uploadId,
207
+ });
217
208
 
218
209
  return {
219
- parts: listPartsOutput.Parts || [],
210
+ parts: Parts,
220
211
  uploadId: cachedUploadFileData.uploadId,
221
212
  };
222
213
  }
@@ -267,7 +258,7 @@ export class AWSS3UploadTask implements UploadTask {
267
258
  }: {
268
259
  eTag: string;
269
260
  partNumber: number;
270
- chunk: UploadPartCommandInput['Body'];
261
+ chunk: UploadPartInput['Body'];
271
262
  }) {
272
263
  this.completedParts.push({
273
264
  ETag: eTag,
@@ -289,17 +280,15 @@ export class AWSS3UploadTask implements UploadTask {
289
280
 
290
281
  private async _completeUpload() {
291
282
  try {
292
- await this.s3client.send(
293
- new CompleteMultipartUploadCommand({
294
- Bucket: this.params.Bucket,
295
- Key: this.params.Key,
296
- UploadId: this.uploadId,
297
- MultipartUpload: {
298
- // Parts are not always completed in order, we need to manually sort them
299
- Parts: this.completedParts.sort(comparePartNumber),
300
- },
301
- })
302
- );
283
+ await completeMultipartUpload(this.s3Config, {
284
+ Bucket: this.params.Bucket,
285
+ Key: (await this.prefixPromise) + this.params.Key,
286
+ UploadId: this.uploadId,
287
+ MultipartUpload: {
288
+ // Parts are not always completed in order, we need to manually sort them
289
+ Parts: [...this.completedParts].sort(comparePartNumber),
290
+ },
291
+ });
303
292
  await this._verifyFileSize();
304
293
  this._emitEvent<UploadTaskCompleteEvent>(TaskEvents.UPLOAD_COMPLETE, {
305
294
  key: this.params.Key,
@@ -313,13 +302,20 @@ export class AWSS3UploadTask implements UploadTask {
313
302
  }
314
303
 
315
304
  private async _makeUploadPartRequest(
316
- input: UploadPartCommandInput,
317
- cancelTokenSource: CancelTokenSource
305
+ input: UploadPartInput,
306
+ abortSignal: AbortSignal
318
307
  ) {
319
308
  try {
320
- const res = await this.s3client.send(new UploadPartCommand(input), {
321
- cancelTokenSource,
322
- } as HttpHandlerOptions);
309
+ const res = await uploadPart(
310
+ {
311
+ ...this.s3Config,
312
+ abortSignal,
313
+ },
314
+ {
315
+ ...input,
316
+ Key: (await this.prefixPromise) + this.params.Key,
317
+ }
318
+ );
323
319
  await this._onPartUploadCompletion({
324
320
  eTag: res.ETag,
325
321
  partNumber: input.PartNumber,
@@ -333,12 +329,9 @@ export class AWSS3UploadTask implements UploadTask {
333
329
  } else {
334
330
  logger.error('error starting next part of upload: ', err);
335
331
  }
336
- // axios' cancel will also throw an error, however we don't need to emit an event in that case as it's an
332
+ // xhr transfer handlers' cancel will also throw an error, however we don't need to emit an event in that case as it's an
337
333
  // expected behavior
338
- if (
339
- !axios.isCancel(err) &&
340
- err.message !== AWSS3ProviderUploadErrorStrings.UPLOAD_PAUSED_MESSAGE
341
- ) {
334
+ if (!isCancelError(err) && err.message !== CANCELED_ERROR_MESSAGE) {
342
335
  this._emitEvent(TaskEvents.ERROR, err);
343
336
  this.pause();
344
337
  }
@@ -347,12 +340,15 @@ export class AWSS3UploadTask implements UploadTask {
347
340
 
348
341
  private _startNextPart() {
349
342
  if (this.queued.length > 0 && this.state !== AWSS3UploadTaskState.PAUSED) {
350
- const cancelTokenSource = axios.CancelToken.source();
343
+ const abortController = new AbortController();
351
344
  const nextPart = this.queued.shift();
352
345
  this.inProgress.push({
353
346
  uploadPartInput: nextPart,
354
- s3Request: this._makeUploadPartRequest(nextPart, cancelTokenSource),
355
- cancel: cancelTokenSource.cancel,
347
+ s3Request: this._makeUploadPartRequest(
348
+ nextPart,
349
+ abortController.signal
350
+ ),
351
+ abortController,
356
352
  });
357
353
  }
358
354
  }
@@ -395,7 +391,7 @@ export class AWSS3UploadTask implements UploadTask {
395
391
 
396
392
  private _createParts() {
397
393
  const size = this.file.size;
398
- const parts: UploadPartCommandInput[] = [];
394
+ const parts: UploadPartInput[] = [];
399
395
  for (let bodyStart = 0; bodyStart < size; ) {
400
396
  const bodyEnd = Math.min(bodyStart + this.partSize, size);
401
397
  parts.push({
@@ -430,9 +426,10 @@ export class AWSS3UploadTask implements UploadTask {
430
426
  }
431
427
 
432
428
  private async _initMultipartUpload() {
433
- const res = await this.s3client.send(
434
- new CreateMultipartUploadCommand(this.params)
435
- );
429
+ const res = await createMultipartUpload(this.s3Config, {
430
+ ...this.params,
431
+ Key: (await this.prefixPromise) + this.params.Key,
432
+ });
436
433
  this._cache({
437
434
  uploadId: res.UploadId,
438
435
  lastTouched: Date.now(),
@@ -452,7 +449,11 @@ export class AWSS3UploadTask implements UploadTask {
452
449
  this.uploadId = uploadId;
453
450
  this.queued = this._createParts();
454
451
  this._initCachedUploadParts(parts);
455
- this._startUpload();
452
+ if (this._isDone()) {
453
+ this._completeUpload();
454
+ } else {
455
+ this._startUpload();
456
+ }
456
457
  } else {
457
458
  if (!this.uploadId) {
458
459
  const uploadId = await this._initMultipartUpload();
@@ -462,7 +463,7 @@ export class AWSS3UploadTask implements UploadTask {
462
463
  }
463
464
  }
464
465
  } catch (err) {
465
- if (!axios.isCancel(err)) {
466
+ if (!isCancelError(err)) {
466
467
  logger.error('Error initializing the upload task', err);
467
468
  this._emitEvent(TaskEvents.ERROR, err);
468
469
  }
@@ -506,13 +507,11 @@ export class AWSS3UploadTask implements UploadTask {
506
507
  this.bytesUploaded = 0;
507
508
  this.state = AWSS3UploadTaskState.CANCELLED;
508
509
  try {
509
- await this.s3client.send(
510
- new AbortMultipartUploadCommand({
511
- Bucket: this.params.Bucket,
512
- Key: this.params.Key,
513
- UploadId: this.uploadId,
514
- })
515
- );
510
+ await abortMultipartUpload(this.s3Config, {
511
+ Bucket: this.params.Bucket,
512
+ Key: (await this.prefixPromise) + this.params.Key,
513
+ UploadId: this.uploadId,
514
+ });
516
515
  await this._removeFromCache();
517
516
  return true;
518
517
  } catch (err) {
@@ -534,14 +533,14 @@ export class AWSS3UploadTask implements UploadTask {
534
533
  logger.warn('This task is already paused');
535
534
  }
536
535
  this.state = AWSS3UploadTaskState.PAUSED;
537
- // Use axios cancel token to abort the part request immediately
536
+ // Abort the part request immediately
538
537
  // Add the inProgress parts back to pending
539
538
  const removedInProgressReq = this.inProgress.splice(
540
539
  0,
541
540
  this.inProgress.length
542
541
  );
543
542
  removedInProgressReq.forEach(req => {
544
- req.cancel(AWSS3ProviderUploadErrorStrings.UPLOAD_PAUSED_MESSAGE);
543
+ req.abortController.abort();
545
544
  });
546
545
  // Put all removed in progress parts back into the queue
547
546
  this.queued.unshift(
@@ -1 +1,3 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
1
3
  export { AWSS3Provider } from './AWSS3Provider';