@aws-amplify/storage 6.6.5 → 6.6.6-storage-browser.4949269.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. package/dist/cjs/errors/constants.js +8 -0
  2. package/dist/cjs/errors/constants.js.map +1 -0
  3. package/dist/cjs/errors/types/validation.js +12 -0
  4. package/dist/cjs/errors/types/validation.js.map +1 -1
  5. package/dist/cjs/providers/s3/apis/downloadData.js +3 -3
  6. package/dist/cjs/providers/s3/apis/downloadData.js.map +1 -1
  7. package/dist/cjs/providers/s3/apis/internal/copy.js +38 -6
  8. package/dist/cjs/providers/s3/apis/internal/copy.js.map +1 -1
  9. package/dist/cjs/providers/s3/apis/internal/getProperties.js +3 -4
  10. package/dist/cjs/providers/s3/apis/internal/getProperties.js.map +1 -1
  11. package/dist/cjs/providers/s3/apis/internal/getUrl.js +3 -3
  12. package/dist/cjs/providers/s3/apis/internal/getUrl.js.map +1 -1
  13. package/dist/cjs/providers/s3/apis/internal/list.js +4 -4
  14. package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
  15. package/dist/cjs/providers/s3/apis/internal/remove.js +3 -4
  16. package/dist/cjs/providers/s3/apis/internal/remove.js.map +1 -1
  17. package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js +22 -2
  18. package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js.map +1 -1
  19. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadCache.js +3 -2
  20. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadCache.js.map +1 -1
  21. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js +19 -8
  22. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js.map +1 -1
  23. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadPartExecutor.js +20 -11
  24. package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadPartExecutor.js.map +1 -1
  25. package/dist/cjs/providers/s3/apis/uploadData/putObjectJob.js +20 -7
  26. package/dist/cjs/providers/s3/apis/uploadData/putObjectJob.js.map +1 -1
  27. package/dist/cjs/providers/s3/apis/uploadData/validateObjectNotExists.js +25 -0
  28. package/dist/cjs/providers/s3/apis/uploadData/validateObjectNotExists.js.map +1 -0
  29. package/dist/cjs/providers/s3/utils/client/s3control/base.js +70 -0
  30. package/dist/cjs/providers/s3/utils/client/s3control/base.js.map +1 -0
  31. package/dist/cjs/providers/s3/utils/client/s3control/getDataAccess.js +58 -0
  32. package/dist/cjs/providers/s3/utils/client/s3control/getDataAccess.js.map +1 -0
  33. package/dist/cjs/providers/s3/utils/client/s3control/index.js +11 -0
  34. package/dist/cjs/providers/s3/utils/client/s3control/index.js.map +1 -0
  35. package/dist/cjs/providers/s3/utils/client/s3control/listCallerAccessGrants.js +63 -0
  36. package/dist/cjs/providers/s3/utils/client/s3control/listCallerAccessGrants.js.map +1 -0
  37. package/dist/cjs/providers/s3/utils/client/s3control/types.js.map +1 -0
  38. package/dist/cjs/providers/s3/utils/client/{abortMultipartUpload.js → s3data/abortMultipartUpload.js} +2 -2
  39. package/dist/cjs/providers/s3/utils/client/s3data/abortMultipartUpload.js.map +1 -0
  40. package/dist/cjs/providers/s3/utils/client/{base.js → s3data/base.js} +25 -3
  41. package/dist/cjs/providers/s3/utils/client/s3data/base.js.map +1 -0
  42. package/dist/cjs/providers/s3/utils/client/{completeMultipartUpload.js → s3data/completeMultipartUpload.js} +16 -11
  43. package/dist/cjs/providers/s3/utils/client/s3data/completeMultipartUpload.js.map +1 -0
  44. package/dist/cjs/providers/s3/utils/client/{copyObject.js → s3data/copyObject.js} +2 -2
  45. package/dist/cjs/providers/s3/utils/client/s3data/copyObject.js.map +1 -0
  46. package/dist/cjs/providers/s3/utils/client/{createMultipartUpload.js → s3data/createMultipartUpload.js} +8 -3
  47. package/dist/cjs/providers/s3/utils/client/s3data/createMultipartUpload.js.map +1 -0
  48. package/dist/cjs/providers/s3/utils/client/{deleteObject.js → s3data/deleteObject.js} +2 -2
  49. package/dist/cjs/providers/s3/utils/client/s3data/deleteObject.js.map +1 -0
  50. package/dist/cjs/providers/s3/utils/client/{getObject.js → s3data/getObject.js} +3 -3
  51. package/dist/cjs/providers/s3/utils/client/s3data/getObject.js.map +1 -0
  52. package/dist/cjs/providers/s3/utils/client/{headObject.js → s3data/headObject.js} +2 -2
  53. package/dist/cjs/providers/s3/utils/client/s3data/headObject.js.map +1 -0
  54. package/dist/cjs/providers/s3/utils/client/s3data/index.js.map +1 -0
  55. package/dist/cjs/providers/s3/utils/client/{listObjectsV2.js → s3data/listObjectsV2.js} +2 -2
  56. package/dist/cjs/providers/s3/utils/client/s3data/listObjectsV2.js.map +1 -0
  57. package/dist/cjs/providers/s3/utils/client/{listParts.js → s3data/listParts.js} +3 -2
  58. package/dist/cjs/providers/s3/utils/client/s3data/listParts.js.map +1 -0
  59. package/dist/cjs/providers/s3/utils/client/{putObject.js → s3data/putObject.js} +3 -2
  60. package/dist/cjs/providers/s3/utils/client/s3data/putObject.js.map +1 -0
  61. package/dist/cjs/providers/s3/utils/client/s3data/types.js +6 -0
  62. package/dist/cjs/providers/s3/utils/client/s3data/types.js.map +1 -0
  63. package/dist/cjs/providers/s3/utils/client/{uploadPart.js → s3data/uploadPart.js} +4 -3
  64. package/dist/cjs/providers/s3/utils/client/s3data/uploadPart.js.map +1 -0
  65. package/dist/cjs/providers/s3/utils/client/utils/createRetryDecider.js +57 -0
  66. package/dist/cjs/providers/s3/utils/client/utils/createRetryDecider.js.map +1 -0
  67. package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js +34 -1
  68. package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js.map +1 -1
  69. package/dist/cjs/providers/s3/utils/client/utils/index.js +4 -2
  70. package/dist/cjs/providers/s3/utils/client/utils/index.js.map +1 -1
  71. package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js +20 -6
  72. package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js.map +1 -1
  73. package/dist/cjs/providers/s3/utils/crc32.js +37 -0
  74. package/dist/cjs/providers/s3/utils/crc32.js.map +1 -0
  75. package/dist/cjs/providers/s3/utils/crc32.native.js +11 -0
  76. package/dist/cjs/providers/s3/utils/crc32.native.js.map +1 -0
  77. package/dist/cjs/providers/s3/utils/resolveIdentityId.js +14 -0
  78. package/dist/cjs/providers/s3/utils/resolveIdentityId.js.map +1 -0
  79. package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js +59 -13
  80. package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js.map +1 -1
  81. package/dist/cjs/providers/s3/utils/validateStorageOperationInput.js +4 -1
  82. package/dist/cjs/providers/s3/utils/validateStorageOperationInput.js.map +1 -1
  83. package/dist/cjs/providers/s3/utils/validateStorageOperationInputWithPrefix.js +4 -1
  84. package/dist/cjs/providers/s3/utils/validateStorageOperationInputWithPrefix.js.map +1 -1
  85. package/dist/cjs/storageBrowser/apis/constants.js +9 -0
  86. package/dist/cjs/storageBrowser/apis/constants.js.map +1 -0
  87. package/dist/cjs/storageBrowser/apis/getDataAccess.js +57 -0
  88. package/dist/cjs/storageBrowser/apis/getDataAccess.js.map +1 -0
  89. package/dist/cjs/storageBrowser/apis/listCallerAccessGrants.js +69 -0
  90. package/dist/cjs/storageBrowser/apis/listCallerAccessGrants.js.map +1 -0
  91. package/dist/cjs/storageBrowser/apis/types.js +6 -0
  92. package/dist/cjs/storageBrowser/apis/types.js.map +1 -0
  93. package/dist/cjs/storageBrowser/index.js +11 -0
  94. package/dist/cjs/storageBrowser/index.js.map +1 -0
  95. package/dist/cjs/storageBrowser/locationCredentialsStore/constants.js +9 -0
  96. package/dist/cjs/storageBrowser/locationCredentialsStore/constants.js.map +1 -0
  97. package/dist/cjs/storageBrowser/locationCredentialsStore/create.js +36 -0
  98. package/dist/cjs/storageBrowser/locationCredentialsStore/create.js.map +1 -0
  99. package/dist/cjs/storageBrowser/locationCredentialsStore/index.js +9 -0
  100. package/dist/cjs/storageBrowser/locationCredentialsStore/index.js.map +1 -0
  101. package/dist/cjs/storageBrowser/locationCredentialsStore/registry.js +58 -0
  102. package/dist/cjs/storageBrowser/locationCredentialsStore/registry.js.map +1 -0
  103. package/dist/cjs/storageBrowser/locationCredentialsStore/store.js +99 -0
  104. package/dist/cjs/storageBrowser/locationCredentialsStore/store.js.map +1 -0
  105. package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.js +15 -0
  106. package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.js.map +1 -0
  107. package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.js +29 -0
  108. package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.js.map +1 -0
  109. package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.js +32 -0
  110. package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.js.map +1 -0
  111. package/dist/cjs/storageBrowser/managedAuthConfigAdapter/index.js +9 -0
  112. package/dist/cjs/storageBrowser/managedAuthConfigAdapter/index.js.map +1 -0
  113. package/dist/cjs/storageBrowser/types.js +6 -0
  114. package/dist/cjs/storageBrowser/types.js.map +1 -0
  115. package/dist/esm/errors/constants.d.ts +1 -0
  116. package/dist/esm/errors/constants.mjs +6 -0
  117. package/dist/esm/errors/constants.mjs.map +1 -0
  118. package/dist/esm/errors/types/validation.d.ts +4 -1
  119. package/dist/esm/errors/types/validation.mjs +12 -0
  120. package/dist/esm/errors/types/validation.mjs.map +1 -1
  121. package/dist/esm/providers/s3/apis/downloadData.mjs +13 -13
  122. package/dist/esm/providers/s3/apis/downloadData.mjs.map +1 -1
  123. package/dist/esm/providers/s3/apis/internal/copy.mjs +48 -16
  124. package/dist/esm/providers/s3/apis/internal/copy.mjs.map +1 -1
  125. package/dist/esm/providers/s3/apis/internal/getProperties.mjs +13 -14
  126. package/dist/esm/providers/s3/apis/internal/getProperties.mjs.map +1 -1
  127. package/dist/esm/providers/s3/apis/internal/getUrl.mjs +13 -13
  128. package/dist/esm/providers/s3/apis/internal/getUrl.mjs.map +1 -1
  129. package/dist/esm/providers/s3/apis/internal/list.mjs +13 -13
  130. package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
  131. package/dist/esm/providers/s3/apis/internal/remove.mjs +13 -14
  132. package/dist/esm/providers/s3/apis/internal/remove.mjs.map +1 -1
  133. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.d.ts +2 -1
  134. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs +32 -12
  135. package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs.map +1 -1
  136. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.d.ts +3 -1
  137. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.mjs +13 -12
  138. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.mjs.map +1 -1
  139. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs +27 -16
  140. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs.map +1 -1
  141. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.d.ts +3 -2
  142. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.mjs +27 -18
  143. package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.mjs.map +1 -1
  144. package/dist/esm/providers/s3/apis/uploadData/putObjectJob.mjs +30 -17
  145. package/dist/esm/providers/s3/apis/uploadData/putObjectJob.mjs.map +1 -1
  146. package/dist/esm/providers/s3/apis/uploadData/validateObjectNotExists.d.ts +3 -0
  147. package/dist/esm/providers/s3/apis/uploadData/validateObjectNotExists.mjs +34 -0
  148. package/dist/esm/providers/s3/apis/uploadData/validateObjectNotExists.mjs.map +1 -0
  149. package/dist/esm/providers/s3/types/inputs.d.ts +5 -1
  150. package/dist/esm/providers/s3/types/options.d.ts +24 -1
  151. package/dist/esm/providers/s3/utils/client/s3control/base.d.ts +56 -0
  152. package/dist/esm/providers/s3/utils/client/s3control/base.mjs +74 -0
  153. package/dist/esm/providers/s3/utils/client/s3control/base.mjs.map +1 -0
  154. package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.d.ts +26 -0
  155. package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.mjs +63 -0
  156. package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.mjs.map +1 -0
  157. package/dist/esm/providers/s3/utils/client/s3control/index.d.ts +2 -0
  158. package/dist/esm/providers/s3/utils/client/s3control/index.mjs +3 -0
  159. package/dist/esm/providers/s3/utils/client/s3control/index.mjs.map +1 -0
  160. package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.d.ts +26 -0
  161. package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.mjs +67 -0
  162. package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.mjs.map +1 -0
  163. package/dist/esm/providers/s3/utils/client/s3control/types.d.ts +188 -0
  164. package/dist/esm/providers/s3/utils/client/{abortMultipartUpload.d.ts → s3data/abortMultipartUpload.d.ts} +4 -4
  165. package/dist/esm/providers/s3/utils/client/{abortMultipartUpload.mjs → s3data/abortMultipartUpload.mjs} +5 -6
  166. package/dist/esm/providers/s3/utils/client/s3data/abortMultipartUpload.mjs.map +1 -0
  167. package/dist/esm/providers/s3/utils/client/{base.d.ts → s3data/base.d.ts} +23 -1
  168. package/dist/esm/providers/s3/utils/client/{base.mjs → s3data/base.mjs} +29 -6
  169. package/dist/esm/providers/s3/utils/client/s3data/base.mjs.map +1 -0
  170. package/dist/esm/providers/s3/utils/client/{completeMultipartUpload.d.ts → s3data/completeMultipartUpload.d.ts} +6 -6
  171. package/dist/esm/providers/s3/utils/client/{completeMultipartUpload.mjs → s3data/completeMultipartUpload.mjs} +19 -14
  172. package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.mjs.map +1 -0
  173. package/dist/esm/providers/s3/utils/client/{copyObject.d.ts → s3data/copyObject.d.ts} +4 -4
  174. package/dist/esm/providers/s3/utils/client/{copyObject.mjs → s3data/copyObject.mjs} +6 -6
  175. package/dist/esm/providers/s3/utils/client/s3data/copyObject.mjs.map +1 -0
  176. package/dist/esm/providers/s3/utils/client/{createMultipartUpload.d.ts → s3data/createMultipartUpload.d.ts} +4 -4
  177. package/dist/esm/providers/s3/utils/client/{createMultipartUpload.mjs → s3data/createMultipartUpload.mjs} +12 -7
  178. package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.mjs.map +1 -0
  179. package/dist/esm/providers/s3/utils/client/{deleteObject.d.ts → s3data/deleteObject.d.ts} +4 -4
  180. package/dist/esm/providers/s3/utils/client/{deleteObject.mjs → s3data/deleteObject.mjs} +5 -6
  181. package/dist/esm/providers/s3/utils/client/s3data/deleteObject.mjs.map +1 -0
  182. package/dist/esm/providers/s3/utils/client/{getObject.d.ts → s3data/getObject.d.ts} +4 -4
  183. package/dist/esm/providers/s3/utils/client/{getObject.mjs → s3data/getObject.mjs} +7 -8
  184. package/dist/esm/providers/s3/utils/client/s3data/getObject.mjs.map +1 -0
  185. package/dist/esm/providers/s3/utils/client/{headObject.d.ts → s3data/headObject.d.ts} +4 -4
  186. package/dist/esm/providers/s3/utils/client/{headObject.mjs → s3data/headObject.mjs} +5 -6
  187. package/dist/esm/providers/s3/utils/client/s3data/headObject.mjs.map +1 -0
  188. package/dist/esm/providers/s3/utils/client/{listObjectsV2.d.ts → s3data/listObjectsV2.d.ts} +4 -4
  189. package/dist/esm/providers/s3/utils/client/{listObjectsV2.mjs → s3data/listObjectsV2.mjs} +6 -6
  190. package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.mjs.map +1 -0
  191. package/dist/esm/providers/s3/utils/client/{listParts.d.ts → s3data/listParts.d.ts} +4 -4
  192. package/dist/esm/providers/s3/utils/client/{listParts.mjs → s3data/listParts.mjs} +7 -6
  193. package/dist/esm/providers/s3/utils/client/s3data/listParts.mjs.map +1 -0
  194. package/dist/esm/providers/s3/utils/client/{putObject.d.ts → s3data/putObject.d.ts} +5 -5
  195. package/dist/esm/providers/s3/utils/client/{putObject.mjs → s3data/putObject.mjs} +6 -6
  196. package/dist/esm/providers/s3/utils/client/s3data/putObject.mjs.map +1 -0
  197. package/dist/esm/providers/s3/utils/client/s3data/types.mjs +2 -0
  198. package/dist/esm/providers/s3/utils/client/s3data/types.mjs.map +1 -0
  199. package/dist/esm/providers/s3/utils/client/{uploadPart.d.ts → s3data/uploadPart.d.ts} +5 -5
  200. package/dist/esm/providers/s3/utils/client/{uploadPart.mjs → s3data/uploadPart.mjs} +7 -7
  201. package/dist/esm/providers/s3/utils/client/s3data/uploadPart.mjs.map +1 -0
  202. package/dist/esm/providers/s3/utils/client/utils/createRetryDecider.d.ts +22 -0
  203. package/dist/esm/providers/s3/utils/client/utils/createRetryDecider.mjs +55 -0
  204. package/dist/esm/providers/s3/utils/client/utils/createRetryDecider.mjs.map +1 -0
  205. package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.d.ts +17 -0
  206. package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs +33 -1
  207. package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs.map +1 -1
  208. package/dist/esm/providers/s3/utils/client/utils/index.d.ts +2 -1
  209. package/dist/esm/providers/s3/utils/client/utils/index.mjs +2 -1
  210. package/dist/esm/providers/s3/utils/client/utils/index.mjs.map +1 -1
  211. package/dist/esm/providers/s3/utils/client/utils/parsePayload.d.ts +16 -1
  212. package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs +19 -5
  213. package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs.map +1 -1
  214. package/dist/esm/providers/s3/utils/crc32.d.ts +6 -0
  215. package/dist/esm/providers/s3/utils/crc32.mjs +34 -0
  216. package/dist/esm/providers/s3/utils/crc32.mjs.map +1 -0
  217. package/dist/esm/providers/s3/utils/crc32.native.d.ts +2 -0
  218. package/dist/esm/providers/s3/utils/crc32.native.mjs +8 -0
  219. package/dist/esm/providers/s3/utils/crc32.native.mjs.map +1 -0
  220. package/dist/esm/providers/s3/utils/resolveIdentityId.d.ts +1 -0
  221. package/dist/esm/providers/s3/utils/resolveIdentityId.mjs +12 -0
  222. package/dist/esm/providers/s3/utils/resolveIdentityId.mjs.map +1 -0
  223. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.d.ts +10 -2
  224. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs +57 -11
  225. package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs.map +1 -1
  226. package/dist/esm/providers/s3/utils/validateStorageOperationInput.mjs +4 -1
  227. package/dist/esm/providers/s3/utils/validateStorageOperationInput.mjs.map +1 -1
  228. package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.mjs +4 -1
  229. package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.mjs.map +1 -1
  230. package/dist/esm/storageBrowser/apis/constants.d.ts +2 -0
  231. package/dist/esm/storageBrowser/apis/constants.mjs +7 -0
  232. package/dist/esm/storageBrowser/apis/constants.mjs.map +1 -0
  233. package/dist/esm/storageBrowser/apis/getDataAccess.d.ts +2 -0
  234. package/dist/esm/storageBrowser/apis/getDataAccess.mjs +57 -0
  235. package/dist/esm/storageBrowser/apis/getDataAccess.mjs.map +1 -0
  236. package/dist/esm/storageBrowser/apis/listCallerAccessGrants.d.ts +2 -0
  237. package/dist/esm/storageBrowser/apis/listCallerAccessGrants.mjs +69 -0
  238. package/dist/esm/storageBrowser/apis/listCallerAccessGrants.mjs.map +1 -0
  239. package/dist/esm/storageBrowser/apis/types.d.ts +18 -0
  240. package/dist/esm/storageBrowser/apis/types.mjs +2 -0
  241. package/dist/esm/storageBrowser/apis/types.mjs.map +1 -0
  242. package/dist/esm/storageBrowser/index.d.ts +6 -0
  243. package/dist/esm/storageBrowser/index.mjs +3 -0
  244. package/dist/esm/storageBrowser/index.mjs.map +1 -0
  245. package/dist/esm/storageBrowser/locationCredentialsStore/constants.d.ts +2 -0
  246. package/dist/esm/storageBrowser/locationCredentialsStore/constants.mjs +7 -0
  247. package/dist/esm/storageBrowser/locationCredentialsStore/constants.mjs.map +1 -0
  248. package/dist/esm/storageBrowser/locationCredentialsStore/create.d.ts +2 -0
  249. package/dist/esm/storageBrowser/locationCredentialsStore/create.mjs +34 -0
  250. package/dist/esm/storageBrowser/locationCredentialsStore/create.mjs.map +1 -0
  251. package/dist/esm/storageBrowser/locationCredentialsStore/index.d.ts +1 -0
  252. package/dist/esm/storageBrowser/locationCredentialsStore/index.mjs +2 -0
  253. package/dist/esm/storageBrowser/locationCredentialsStore/index.mjs.map +1 -0
  254. package/dist/esm/storageBrowser/locationCredentialsStore/registry.d.ts +23 -0
  255. package/dist/esm/storageBrowser/locationCredentialsStore/registry.mjs +54 -0
  256. package/dist/esm/storageBrowser/locationCredentialsStore/registry.mjs.map +1 -0
  257. package/dist/esm/storageBrowser/locationCredentialsStore/store.d.ts +35 -0
  258. package/dist/esm/storageBrowser/locationCredentialsStore/store.mjs +95 -0
  259. package/dist/esm/storageBrowser/locationCredentialsStore/store.mjs.map +1 -0
  260. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.d.ts +8 -0
  261. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.mjs +13 -0
  262. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.mjs.map +1 -0
  263. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.d.ts +8 -0
  264. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.mjs +27 -0
  265. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.mjs.map +1 -0
  266. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.d.ts +19 -0
  267. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.mjs +30 -0
  268. package/dist/esm/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.mjs.map +1 -0
  269. package/dist/esm/storageBrowser/managedAuthConfigAdapter/index.d.ts +1 -0
  270. package/dist/esm/storageBrowser/managedAuthConfigAdapter/index.mjs +2 -0
  271. package/dist/esm/storageBrowser/managedAuthConfigAdapter/index.mjs.map +1 -0
  272. package/dist/esm/storageBrowser/types.d.ts +92 -0
  273. package/dist/esm/storageBrowser/types.mjs +2 -0
  274. package/dist/esm/storageBrowser/types.mjs.map +1 -0
  275. package/package.json +117 -107
  276. package/src/errors/constants.ts +4 -0
  277. package/src/errors/types/validation.ts +12 -0
  278. package/src/providers/s3/apis/downloadData.ts +2 -2
  279. package/src/providers/s3/apis/internal/copy.ts +42 -12
  280. package/src/providers/s3/apis/internal/getProperties.ts +2 -3
  281. package/src/providers/s3/apis/internal/getUrl.ts +2 -2
  282. package/src/providers/s3/apis/internal/list.ts +3 -3
  283. package/src/providers/s3/apis/internal/remove.ts +2 -3
  284. package/src/providers/s3/apis/uploadData/multipart/initialUpload.ts +30 -1
  285. package/src/providers/s3/apis/uploadData/multipart/uploadCache.ts +4 -1
  286. package/src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts +36 -17
  287. package/src/providers/s3/apis/uploadData/multipart/uploadPartExecutor.ts +23 -7
  288. package/src/providers/s3/apis/uploadData/putObjectJob.ts +22 -5
  289. package/src/providers/s3/apis/uploadData/validateObjectNotExists.ts +25 -0
  290. package/src/providers/s3/types/inputs.ts +7 -1
  291. package/src/providers/s3/types/options.ts +35 -1
  292. package/src/providers/s3/utils/client/s3control/base.ts +97 -0
  293. package/src/providers/s3/utils/client/s3control/getDataAccess.ts +96 -0
  294. package/src/providers/s3/utils/client/s3control/index.ts +13 -0
  295. package/src/providers/s3/utils/client/s3control/listCallerAccessGrants.ts +107 -0
  296. package/src/providers/s3/utils/client/s3control/types.ts +216 -0
  297. package/src/providers/s3/utils/client/{abortMultipartUpload.ts → s3data/abortMultipartUpload.ts} +4 -4
  298. package/src/providers/s3/utils/client/{base.ts → s3data/base.ts} +26 -3
  299. package/src/providers/s3/utils/client/{completeMultipartUpload.ts → s3data/completeMultipartUpload.ts} +28 -19
  300. package/src/providers/s3/utils/client/{copyObject.ts → s3data/copyObject.ts} +4 -4
  301. package/src/providers/s3/utils/client/{createMultipartUpload.ts → s3data/createMultipartUpload.ts} +15 -9
  302. package/src/providers/s3/utils/client/{deleteObject.ts → s3data/deleteObject.ts} +7 -7
  303. package/src/providers/s3/utils/client/{getObject.ts → s3data/getObject.ts} +13 -9
  304. package/src/providers/s3/utils/client/{headObject.ts → s3data/headObject.ts} +4 -4
  305. package/src/providers/s3/utils/client/{listObjectsV2.ts → s3data/listObjectsV2.ts} +7 -7
  306. package/src/providers/s3/utils/client/{listParts.ts → s3data/listParts.ts} +9 -8
  307. package/src/providers/s3/utils/client/{putObject.ts → s3data/putObject.ts} +6 -4
  308. package/src/providers/s3/utils/client/{uploadPart.ts → s3data/uploadPart.ts} +13 -6
  309. package/src/providers/s3/utils/client/utils/createRetryDecider.ts +96 -0
  310. package/src/providers/s3/utils/client/utils/deserializeHelpers.ts +41 -0
  311. package/src/providers/s3/utils/client/utils/index.ts +2 -1
  312. package/src/providers/s3/utils/client/utils/parsePayload.ts +36 -18
  313. package/src/providers/s3/utils/crc32.native.ts +11 -0
  314. package/src/providers/s3/utils/crc32.ts +51 -0
  315. package/src/providers/s3/utils/resolveIdentityId.ts +11 -0
  316. package/src/providers/s3/utils/resolveS3ConfigAndInput.ts +109 -14
  317. package/src/providers/s3/utils/validateStorageOperationInput.ts +5 -1
  318. package/src/providers/s3/utils/validateStorageOperationInputWithPrefix.ts +5 -1
  319. package/src/storageBrowser/apis/constants.ts +5 -0
  320. package/src/storageBrowser/apis/getDataAccess.ts +79 -0
  321. package/src/storageBrowser/apis/listCallerAccessGrants.ts +94 -0
  322. package/src/storageBrowser/apis/types.ts +33 -0
  323. package/src/storageBrowser/index.ts +25 -0
  324. package/src/storageBrowser/locationCredentialsStore/constants.ts +5 -0
  325. package/src/storageBrowser/locationCredentialsStore/create.ts +54 -0
  326. package/src/storageBrowser/locationCredentialsStore/index.ts +4 -0
  327. package/src/storageBrowser/locationCredentialsStore/registry.ts +88 -0
  328. package/src/storageBrowser/locationCredentialsStore/store.ts +161 -0
  329. package/src/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.ts +21 -0
  330. package/src/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.ts +40 -0
  331. package/src/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.ts +53 -0
  332. package/src/storageBrowser/managedAuthConfigAdapter/index.ts +8 -0
  333. package/src/storageBrowser/types.ts +117 -0
  334. package/dist/cjs/providers/s3/utils/client/abortMultipartUpload.js.map +0 -1
  335. package/dist/cjs/providers/s3/utils/client/base.js.map +0 -1
  336. package/dist/cjs/providers/s3/utils/client/completeMultipartUpload.js.map +0 -1
  337. package/dist/cjs/providers/s3/utils/client/copyObject.js.map +0 -1
  338. package/dist/cjs/providers/s3/utils/client/createMultipartUpload.js.map +0 -1
  339. package/dist/cjs/providers/s3/utils/client/deleteObject.js.map +0 -1
  340. package/dist/cjs/providers/s3/utils/client/getObject.js.map +0 -1
  341. package/dist/cjs/providers/s3/utils/client/headObject.js.map +0 -1
  342. package/dist/cjs/providers/s3/utils/client/index.js.map +0 -1
  343. package/dist/cjs/providers/s3/utils/client/listObjectsV2.js.map +0 -1
  344. package/dist/cjs/providers/s3/utils/client/listParts.js.map +0 -1
  345. package/dist/cjs/providers/s3/utils/client/putObject.js.map +0 -1
  346. package/dist/cjs/providers/s3/utils/client/types.js.map +0 -1
  347. package/dist/cjs/providers/s3/utils/client/uploadPart.js.map +0 -1
  348. package/dist/esm/providers/s3/utils/client/abortMultipartUpload.mjs.map +0 -1
  349. package/dist/esm/providers/s3/utils/client/base.mjs.map +0 -1
  350. package/dist/esm/providers/s3/utils/client/completeMultipartUpload.mjs.map +0 -1
  351. package/dist/esm/providers/s3/utils/client/copyObject.mjs.map +0 -1
  352. package/dist/esm/providers/s3/utils/client/createMultipartUpload.mjs.map +0 -1
  353. package/dist/esm/providers/s3/utils/client/deleteObject.mjs.map +0 -1
  354. package/dist/esm/providers/s3/utils/client/getObject.mjs.map +0 -1
  355. package/dist/esm/providers/s3/utils/client/headObject.mjs.map +0 -1
  356. package/dist/esm/providers/s3/utils/client/listObjectsV2.mjs.map +0 -1
  357. package/dist/esm/providers/s3/utils/client/listParts.mjs.map +0 -1
  358. package/dist/esm/providers/s3/utils/client/putObject.mjs.map +0 -1
  359. package/dist/esm/providers/s3/utils/client/uploadPart.mjs.map +0 -1
  360. /package/dist/cjs/providers/s3/utils/client/{types.js → s3control/types.js} +0 -0
  361. /package/dist/cjs/providers/s3/utils/client/{index.js → s3data/index.js} +0 -0
  362. /package/dist/esm/providers/s3/utils/client/{types.mjs → s3control/types.mjs} +0 -0
  363. /package/dist/esm/providers/s3/utils/client/{types.mjs.map → s3control/types.mjs.map} +0 -0
  364. /package/dist/esm/providers/s3/utils/client/{index.d.ts → s3data/index.d.ts} +0 -0
  365. /package/dist/esm/providers/s3/utils/client/{index.mjs → s3data/index.mjs} +0 -0
  366. /package/dist/esm/providers/s3/utils/client/{index.mjs.map → s3data/index.mjs.map} +0 -0
  367. /package/dist/esm/providers/s3/utils/client/{types.d.ts → s3data/types.d.ts} +0 -0
  368. /package/src/providers/s3/utils/client/{index.ts → s3data/index.ts} +0 -0
  369. /package/src/providers/s3/utils/client/{types.ts → s3data/types.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"uploadHandlers.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { resolveS3ConfigAndInput, validateStorageOperationInput, } from '../../../utils';\nimport { DEFAULT_ACCESS_LEVEL, DEFAULT_QUEUE_SIZE, STORAGE_INPUT_KEY, } from '../../../utils/constants';\nimport { StorageError } from '../../../../../errors/StorageError';\nimport { CanceledError } from '../../../../../errors/CanceledError';\nimport { abortMultipartUpload, completeMultipartUpload, headObject, } from '../../../utils/client';\nimport { getStorageUserAgentValue } from '../../../utils/userAgent';\nimport { logger } from '../../../../../utils';\nimport { uploadPartExecutor } from './uploadPartExecutor';\nimport { getUploadsCacheKey, removeCachedUpload } from './uploadCache';\nimport { getConcurrentUploadsProgressTracker } from './progressTracker';\nimport { loadOrCreateMultipartUpload } from './initialUpload';\nimport { getDataChunker } from './getDataChunker';\n/**\n * Create closure hiding the multipart upload implementation details and expose the upload job and control functions(\n * onPause, onResume, onCancel).\n *\n * @internal\n */\nexport const getMultipartUploadHandlers = (uploadDataInput, size) => {\n let resolveCallback;\n let rejectCallback;\n let inProgressUpload;\n let resolvedS3Config;\n let abortController;\n let resolvedAccessLevel;\n let resolvedBucket;\n let resolvedKeyPrefix;\n let resolvedIdentityId;\n let uploadCacheKey;\n let finalKey;\n // Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().\n // The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.\n // This should be replaced by a special abort reason. However,the support of this API is lagged behind.\n let isAbortSignalFromPause = false;\n const startUpload = async () => {\n const { options: uploadDataOptions, data } = uploadDataInput;\n const resolvedS3Options = await resolveS3ConfigAndInput(Amplify, uploadDataOptions);\n abortController = new AbortController();\n isAbortSignalFromPause = false;\n resolvedS3Config = resolvedS3Options.s3Config;\n resolvedBucket = resolvedS3Options.bucket;\n resolvedIdentityId = resolvedS3Options.identityId;\n const { inputType, objectKey } = validateStorageOperationInput(uploadDataInput, resolvedIdentityId);\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, onProgress, } = uploadDataOptions ?? {};\n finalKey = objectKey;\n // Resolve \"key\" specific options\n if (inputType === STORAGE_INPUT_KEY) {\n const accessLevel = uploadDataOptions\n ?.accessLevel;\n resolvedKeyPrefix = resolvedS3Options.keyPrefix;\n finalKey = resolvedKeyPrefix + objectKey;\n resolvedAccessLevel = resolveAccessLevel(accessLevel);\n }\n if (!inProgressUpload) {\n const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({\n s3Config: resolvedS3Config,\n accessLevel: resolvedAccessLevel,\n bucket: resolvedBucket,\n keyPrefix: resolvedKeyPrefix,\n key: objectKey,\n contentType,\n contentDisposition,\n contentEncoding,\n metadata,\n data,\n size,\n abortSignal: abortController.signal,\n });\n inProgressUpload = {\n uploadId,\n completedParts: cachedParts,\n };\n }\n uploadCacheKey = size\n ? getUploadsCacheKey({\n file: data instanceof File ? data : undefined,\n accessLevel: resolvedAccessLevel,\n contentType: uploadDataOptions?.contentType,\n bucket: resolvedBucket,\n size,\n key: objectKey,\n })\n : undefined;\n const dataChunker = getDataChunker(data, size);\n const completedPartNumberSet = new Set(inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber));\n const onPartUploadCompletion = (partNumber, eTag) => {\n inProgressUpload?.completedParts.push({\n PartNumber: partNumber,\n ETag: eTag,\n });\n };\n const concurrentUploadsProgressTracker = getConcurrentUploadsProgressTracker({\n size,\n onProgress,\n });\n const concurrentUploadPartExecutors = [];\n for (let index = 0; index < DEFAULT_QUEUE_SIZE; index++) {\n concurrentUploadPartExecutors.push(uploadPartExecutor({\n dataChunkerGenerator: dataChunker,\n completedPartNumberSet,\n s3Config: resolvedS3Config,\n abortSignal: abortController.signal,\n bucket: resolvedBucket,\n finalKey,\n uploadId: inProgressUpload.uploadId,\n onPartUploadCompletion,\n onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),\n isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,\n }));\n }\n await Promise.all(concurrentUploadPartExecutors);\n const { ETag: eTag } = await completeMultipartUpload({\n ...resolvedS3Config,\n abortSignal: abortController.signal,\n userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),\n }, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload.uploadId,\n MultipartUpload: {\n Parts: inProgressUpload.completedParts.sort((partA, partB) => partA.PartNumber - partB.PartNumber),\n },\n });\n if (size) {\n const { ContentLength: uploadedObjectSize } = await headObject(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n });\n if (uploadedObjectSize && uploadedObjectSize !== size) {\n throw new StorageError({\n name: 'Error',\n message: `Upload failed. Expected object size ${size}, but got ${uploadedObjectSize}.`,\n });\n }\n }\n if (uploadCacheKey) {\n await removeCachedUpload(uploadCacheKey);\n }\n const result = {\n eTag,\n contentType,\n metadata,\n };\n return inputType === STORAGE_INPUT_KEY\n ? { key: objectKey, ...result }\n : { path: objectKey, ...result };\n };\n const startUploadWithResumability = () => startUpload()\n .then(resolveCallback)\n .catch(error => {\n const abortSignal = abortController?.signal;\n if (abortSignal?.aborted && isAbortSignalFromPause) {\n logger.debug('upload paused.');\n }\n else {\n // Uncaught errors should be exposed to the users.\n rejectCallback(error);\n }\n });\n const multipartUploadJob = () => new Promise((resolve, reject) => {\n resolveCallback = resolve;\n rejectCallback = reject;\n startUploadWithResumability();\n });\n const onPause = () => {\n isAbortSignalFromPause = true;\n abortController?.abort();\n };\n const onResume = () => {\n startUploadWithResumability();\n };\n const onCancel = (message) => {\n // 1. abort in-flight API requests\n abortController?.abort(message);\n const cancelUpload = async () => {\n // 2. clear upload cache.\n if (uploadCacheKey) {\n await removeCachedUpload(uploadCacheKey);\n }\n // 3. clear multipart upload on server side.\n await abortMultipartUpload(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload?.uploadId,\n });\n };\n cancelUpload().catch(e => {\n logger.debug('error when cancelling upload task.', e);\n });\n rejectCallback(\n // Internal error that should not be exposed to the users. They should use isCancelError() to check if\n // the error is caused by cancel().\n new CanceledError(message ? { message } : undefined));\n };\n return {\n multipartUploadJob,\n onPause,\n onResume,\n onCancel,\n };\n};\nconst resolveAccessLevel = (accessLevel) => accessLevel ??\n Amplify.libraryOptions.Storage?.S3?.defaultAccessLevel ??\n DEFAULT_ACCESS_LEVEL;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uploadHandlers.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { resolveS3ConfigAndInput, validateStorageOperationInput, } from '../../../utils';\nimport { DEFAULT_ACCESS_LEVEL, DEFAULT_QUEUE_SIZE, STORAGE_INPUT_KEY, } from '../../../utils/constants';\nimport { StorageError } from '../../../../../errors/StorageError';\nimport { CanceledError } from '../../../../../errors/CanceledError';\nimport { abortMultipartUpload, completeMultipartUpload, headObject, } from '../../../utils/client/s3data';\nimport { getStorageUserAgentValue } from '../../../utils/userAgent';\nimport { logger } from '../../../../../utils';\nimport { validateObjectNotExists } from '../validateObjectNotExists';\nimport { uploadPartExecutor } from './uploadPartExecutor';\nimport { getUploadsCacheKey, removeCachedUpload } from './uploadCache';\nimport { getConcurrentUploadsProgressTracker } from './progressTracker';\nimport { loadOrCreateMultipartUpload } from './initialUpload';\nimport { getDataChunker } from './getDataChunker';\n/**\n * Create closure hiding the multipart upload implementation details and expose the upload job and control functions(\n * onPause, onResume, onCancel).\n *\n * @internal\n */\nexport const getMultipartUploadHandlers = (uploadDataInput, size) => {\n let resolveCallback;\n let rejectCallback;\n let inProgressUpload;\n let resolvedS3Config;\n let abortController;\n let resolvedAccessLevel;\n let resolvedBucket;\n let resolvedKeyPrefix;\n let resolvedIdentityId;\n let uploadCacheKey;\n let finalKey;\n // Special flag that differentiates HTTP requests abort error caused by pause() from ones caused by cancel().\n // The former one should NOT cause the upload job to throw, but cancels any pending HTTP requests.\n // This should be replaced by a special abort reason. However,the support of this API is lagged behind.\n let isAbortSignalFromPause = false;\n const startUpload = async () => {\n const { options: uploadDataOptions, data } = uploadDataInput;\n const resolvedS3Options = await resolveS3ConfigAndInput(Amplify, uploadDataInput);\n abortController = new AbortController();\n isAbortSignalFromPause = false;\n resolvedS3Config = resolvedS3Options.s3Config;\n resolvedBucket = resolvedS3Options.bucket;\n resolvedIdentityId = resolvedS3Options.identityId;\n const { inputType, objectKey } = validateStorageOperationInput(uploadDataInput, resolvedIdentityId);\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, preventOverwrite, onProgress, } = uploadDataOptions ?? {};\n finalKey = objectKey;\n // Resolve \"key\" specific options\n if (inputType === STORAGE_INPUT_KEY) {\n const accessLevel = uploadDataOptions\n ?.accessLevel;\n resolvedKeyPrefix = resolvedS3Options.keyPrefix;\n finalKey = resolvedKeyPrefix + objectKey;\n resolvedAccessLevel = resolveAccessLevel(accessLevel);\n }\n if (!inProgressUpload) {\n const { uploadId, cachedParts, finalCrc32 } = await loadOrCreateMultipartUpload({\n s3Config: resolvedS3Config,\n accessLevel: resolvedAccessLevel,\n bucket: resolvedBucket,\n keyPrefix: resolvedKeyPrefix,\n key: objectKey,\n contentType,\n contentDisposition,\n contentEncoding,\n metadata,\n data,\n size,\n abortSignal: abortController.signal,\n });\n inProgressUpload = {\n uploadId,\n completedParts: cachedParts,\n finalCrc32,\n };\n }\n uploadCacheKey = size\n ? getUploadsCacheKey({\n file: data instanceof File ? data : undefined,\n accessLevel: resolvedAccessLevel,\n contentType: uploadDataOptions?.contentType,\n bucket: resolvedBucket,\n size,\n key: objectKey,\n })\n : undefined;\n const dataChunker = getDataChunker(data, size);\n const completedPartNumberSet = new Set(inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber));\n const onPartUploadCompletion = (partNumber, eTag, crc32) => {\n inProgressUpload?.completedParts.push({\n PartNumber: partNumber,\n ETag: eTag,\n ChecksumCRC32: crc32,\n });\n };\n const concurrentUploadsProgressTracker = getConcurrentUploadsProgressTracker({\n size,\n onProgress,\n });\n const concurrentUploadPartExecutors = [];\n for (let index = 0; index < DEFAULT_QUEUE_SIZE; index++) {\n concurrentUploadPartExecutors.push(uploadPartExecutor({\n dataChunkerGenerator: dataChunker,\n completedPartNumberSet,\n s3Config: resolvedS3Config,\n abortSignal: abortController.signal,\n bucket: resolvedBucket,\n finalKey,\n uploadId: inProgressUpload.uploadId,\n onPartUploadCompletion,\n onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),\n isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,\n useCRC32Checksum: Boolean(inProgressUpload.finalCrc32),\n }));\n }\n await Promise.all(concurrentUploadPartExecutors);\n if (preventOverwrite) {\n await validateObjectNotExists(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n });\n }\n const { ETag: eTag } = await completeMultipartUpload({\n ...resolvedS3Config,\n abortSignal: abortController.signal,\n userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),\n }, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload.uploadId,\n ChecksumCRC32: inProgressUpload.finalCrc32,\n MultipartUpload: {\n Parts: inProgressUpload.completedParts.sort((partA, partB) => partA.PartNumber - partB.PartNumber),\n },\n });\n if (size) {\n const { ContentLength: uploadedObjectSize } = await headObject(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n });\n if (uploadedObjectSize && uploadedObjectSize !== size) {\n throw new StorageError({\n name: 'Error',\n message: `Upload failed. Expected object size ${size}, but got ${uploadedObjectSize}.`,\n });\n }\n }\n if (uploadCacheKey) {\n await removeCachedUpload(uploadCacheKey);\n }\n const result = {\n eTag,\n contentType,\n metadata,\n };\n return inputType === STORAGE_INPUT_KEY\n ? { key: objectKey, ...result }\n : { path: objectKey, ...result };\n };\n const startUploadWithResumability = () => startUpload()\n .then(resolveCallback)\n .catch(error => {\n const abortSignal = abortController?.signal;\n if (abortSignal?.aborted && isAbortSignalFromPause) {\n logger.debug('upload paused.');\n }\n else {\n // Uncaught errors should be exposed to the users.\n rejectCallback(error);\n }\n });\n const multipartUploadJob = () => new Promise((resolve, reject) => {\n resolveCallback = resolve;\n rejectCallback = reject;\n startUploadWithResumability();\n });\n const onPause = () => {\n isAbortSignalFromPause = true;\n abortController?.abort();\n };\n const onResume = () => {\n startUploadWithResumability();\n };\n const onCancel = (message) => {\n // 1. abort in-flight API requests\n abortController?.abort(message);\n const cancelUpload = async () => {\n // 2. clear upload cache.\n if (uploadCacheKey) {\n await removeCachedUpload(uploadCacheKey);\n }\n // 3. clear multipart upload on server side.\n await abortMultipartUpload(resolvedS3Config, {\n Bucket: resolvedBucket,\n Key: finalKey,\n UploadId: inProgressUpload?.uploadId,\n });\n };\n cancelUpload().catch(e => {\n logger.debug('error when cancelling upload task.', e);\n });\n rejectCallback(\n // Internal error that should not be exposed to the users. They should use isCancelError() to check if\n // the error is caused by cancel().\n new CanceledError(message ? { message } : undefined));\n };\n return {\n multipartUploadJob,\n onPause,\n onResume,\n onCancel,\n };\n};\nconst resolveAccessLevel = (accessLevel) => accessLevel ??\n Amplify.libraryOptions.Storage?.S3?.defaultAccessLevel ??\n DEFAULT_ACCESS_LEVEL;\n"],"names":[],"mappings":"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"}
@@ -10,8 +10,9 @@ interface UploadPartExecutorOptions {
10
10
  finalKey: string;
11
11
  uploadId: string;
12
12
  isObjectLockEnabled?: boolean;
13
- onPartUploadCompletion(partNumber: number, eTag: string): void;
13
+ useCRC32Checksum?: boolean;
14
+ onPartUploadCompletion(partNumber: number, eTag: string, crc32: string | undefined): void;
14
15
  onProgress?(event: TransferProgressEvent): void;
15
16
  }
16
- export declare const uploadPartExecutor: ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, }: UploadPartExecutorOptions) => Promise<void>;
17
+ export declare const uploadPartExecutor: ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, useCRC32Checksum, }: UploadPartExecutorOptions) => Promise<void>;
17
18
  export {};
@@ -1,23 +1,24 @@
1
- import { calculateContentMd5 } from '../../../utils/md5.mjs';
1
+ import '../../../utils/client/s3data/base.mjs';
2
+ import '../../../utils/client/s3data/getObject.mjs';
3
+ import '../../../utils/client/s3data/listObjectsV2.mjs';
4
+ import '../../../utils/client/s3data/putObject.mjs';
5
+ import '../../../utils/client/s3data/createMultipartUpload.mjs';
6
+ import { uploadPart } from '../../../utils/client/s3data/uploadPart.mjs';
7
+ import '../../../utils/client/s3data/completeMultipartUpload.mjs';
8
+ import '../../../utils/client/s3data/listParts.mjs';
9
+ import '../../../utils/client/s3data/abortMultipartUpload.mjs';
10
+ import '../../../utils/client/s3data/copyObject.mjs';
11
+ import '../../../utils/client/s3data/headObject.mjs';
12
+ import '../../../utils/client/s3data/deleteObject.mjs';
2
13
  import '../../../../../errors/types/validation.mjs';
3
14
  import '@aws-amplify/core/internals/utils';
4
15
  import { logger } from '../../../../../utils/logger.mjs';
5
- import '../../../utils/client/base.mjs';
6
- import '../../../utils/client/getObject.mjs';
7
- import '../../../utils/client/listObjectsV2.mjs';
8
- import '../../../utils/client/putObject.mjs';
9
- import '../../../utils/client/createMultipartUpload.mjs';
10
- import { uploadPart } from '../../../utils/client/uploadPart.mjs';
11
- import '../../../utils/client/completeMultipartUpload.mjs';
12
- import '../../../utils/client/listParts.mjs';
13
- import '../../../utils/client/abortMultipartUpload.mjs';
14
- import '../../../utils/client/copyObject.mjs';
15
- import '../../../utils/client/headObject.mjs';
16
- import '../../../utils/client/deleteObject.mjs';
16
+ import { calculateContentCRC32 } from '../../../utils/crc32.mjs';
17
+ import { calculateContentMd5 } from '../../../utils/md5.mjs';
17
18
 
18
19
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
19
20
  // SPDX-License-Identifier: Apache-2.0
20
- const uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, }) => {
21
+ const uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, useCRC32Checksum, }) => {
21
22
  let transferredBytes = 0;
22
23
  for (const { data, partNumber, size } of dataChunkerGenerator) {
23
24
  if (abortSignal.aborted) {
@@ -33,6 +34,15 @@ const uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet
33
34
  }
34
35
  else {
35
36
  // handle cancel error
37
+ let checksumCRC32;
38
+ if (useCRC32Checksum) {
39
+ checksumCRC32 = await calculateContentCRC32(data);
40
+ }
41
+ const contentMD5 =
42
+ // check if checksum exists. ex: should not exist in react native
43
+ !checksumCRC32 && isObjectLockEnabled
44
+ ? await calculateContentMd5(data)
45
+ : undefined;
36
46
  const { ETag: eTag } = await uploadPart({
37
47
  ...s3Config,
38
48
  abortSignal,
@@ -48,13 +58,12 @@ const uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet
48
58
  UploadId: uploadId,
49
59
  Body: data,
50
60
  PartNumber: partNumber,
51
- ContentMD5: isObjectLockEnabled
52
- ? await calculateContentMd5(data)
53
- : undefined,
61
+ ChecksumCRC32: checksumCRC32?.checksum,
62
+ ContentMD5: contentMD5,
54
63
  });
55
64
  transferredBytes += size;
56
65
  // eTag will always be set even the S3 model interface marks it as optional.
57
- onPartUploadCompletion(partNumber, eTag);
66
+ onPartUploadCompletion(partNumber, eTag, checksumCRC32?.checksum);
58
67
  }
59
68
  }
60
69
  };
@@ -1 +1 @@
1
- {"version":3,"file":"uploadPartExecutor.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/uploadPartExecutor.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { calculateContentMd5 } from '../../../utils';\nimport { uploadPart } from '../../../utils/client';\nimport { logger } from '../../../../../utils';\nexport const uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, }) => {\n let transferredBytes = 0;\n for (const { data, partNumber, size } of dataChunkerGenerator) {\n if (abortSignal.aborted) {\n logger.debug('upload executor aborted.');\n break;\n }\n if (completedPartNumberSet.has(partNumber)) {\n logger.debug(`part ${partNumber} already uploaded.`);\n transferredBytes += size;\n onProgress?.({\n transferredBytes,\n });\n }\n else {\n // handle cancel error\n const { ETag: eTag } = await uploadPart({\n ...s3Config,\n abortSignal,\n onUploadProgress: (event) => {\n const { transferredBytes: currentPartTransferredBytes } = event;\n onProgress?.({\n transferredBytes: transferredBytes + currentPartTransferredBytes,\n });\n },\n }, {\n Bucket: bucket,\n Key: finalKey,\n UploadId: uploadId,\n Body: data,\n PartNumber: partNumber,\n ContentMD5: isObjectLockEnabled\n ? await calculateContentMd5(data)\n : undefined,\n });\n transferredBytes += size;\n // eTag will always be set even the S3 model interface marks it as optional.\n onPartUploadCompletion(partNumber, eTag);\n }\n }\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA;AACA;AAIY,MAAC,kBAAkB,GAAG,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,mBAAmB,GAAG,KAAK;AAC3M,IAAI,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAC7B,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,oBAAoB,EAAE;AACnE,QAAQ,IAAI,WAAW,CAAC,OAAO,EAAE;AACjC,YAAY,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACrD,YAAY,MAAM;AAClB,SAAS;AACT,QAAQ,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACpD,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACjE,YAAY,gBAAgB,IAAI,IAAI,CAAC;AACrC,YAAY,UAAU,GAAG;AACzB,gBAAgB,gBAAgB;AAChC,aAAa,CAAC,CAAC;AACf,SAAS;AACT,aAAa;AACb;AACA,YAAY,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC;AACpD,gBAAgB,GAAG,QAAQ;AAC3B,gBAAgB,WAAW;AAC3B,gBAAgB,gBAAgB,EAAE,CAAC,KAAK,KAAK;AAC7C,oBAAoB,MAAM,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,GAAG,KAAK,CAAC;AACpF,oBAAoB,UAAU,GAAG;AACjC,wBAAwB,gBAAgB,EAAE,gBAAgB,GAAG,2BAA2B;AACxF,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,aAAa,EAAE;AACf,gBAAgB,MAAM,EAAE,MAAM;AAC9B,gBAAgB,GAAG,EAAE,QAAQ;AAC7B,gBAAgB,QAAQ,EAAE,QAAQ;AAClC,gBAAgB,IAAI,EAAE,IAAI;AAC1B,gBAAgB,UAAU,EAAE,UAAU;AACtC,gBAAgB,UAAU,EAAE,mBAAmB;AAC/C,sBAAsB,MAAM,mBAAmB,CAAC,IAAI,CAAC;AACrD,sBAAsB,SAAS;AAC/B,aAAa,CAAC,CAAC;AACf,YAAY,gBAAgB,IAAI,IAAI,CAAC;AACrC;AACA,YAAY,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrD,SAAS;AACT,KAAK;AACL;;;;"}
1
+ {"version":3,"file":"uploadPartExecutor.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/uploadPartExecutor.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { uploadPart } from '../../../utils/client/s3data';\nimport { logger } from '../../../../../utils';\nimport { calculateContentCRC32 } from '../../../utils/crc32';\nimport { calculateContentMd5 } from '../../../utils';\nexport const uploadPartExecutor = async ({ dataChunkerGenerator, completedPartNumberSet, s3Config, abortSignal, bucket, finalKey, uploadId, onPartUploadCompletion, onProgress, isObjectLockEnabled, useCRC32Checksum, }) => {\n let transferredBytes = 0;\n for (const { data, partNumber, size } of dataChunkerGenerator) {\n if (abortSignal.aborted) {\n logger.debug('upload executor aborted.');\n break;\n }\n if (completedPartNumberSet.has(partNumber)) {\n logger.debug(`part ${partNumber} already uploaded.`);\n transferredBytes += size;\n onProgress?.({\n transferredBytes,\n });\n }\n else {\n // handle cancel error\n let checksumCRC32;\n if (useCRC32Checksum) {\n checksumCRC32 = await calculateContentCRC32(data);\n }\n const contentMD5 = \n // check if checksum exists. ex: should not exist in react native\n !checksumCRC32 && isObjectLockEnabled\n ? await calculateContentMd5(data)\n : undefined;\n const { ETag: eTag } = await uploadPart({\n ...s3Config,\n abortSignal,\n onUploadProgress: (event) => {\n const { transferredBytes: currentPartTransferredBytes } = event;\n onProgress?.({\n transferredBytes: transferredBytes + currentPartTransferredBytes,\n });\n },\n }, {\n Bucket: bucket,\n Key: finalKey,\n UploadId: uploadId,\n Body: data,\n PartNumber: partNumber,\n ChecksumCRC32: checksumCRC32?.checksum,\n ContentMD5: contentMD5,\n });\n transferredBytes += size;\n // eTag will always be set even the S3 model interface marks it as optional.\n onPartUploadCompletion(partNumber, eTag, checksumCRC32?.checksum);\n }\n }\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA;AAKY,MAAC,kBAAkB,GAAG,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,GAAG,KAAK;AAC7N,IAAI,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAC7B,IAAI,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,oBAAoB,EAAE;AACnE,QAAQ,IAAI,WAAW,CAAC,OAAO,EAAE;AACjC,YAAY,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACrD,YAAY,MAAM;AAClB,SAAS;AACT,QAAQ,IAAI,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACpD,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACjE,YAAY,gBAAgB,IAAI,IAAI,CAAC;AACrC,YAAY,UAAU,GAAG;AACzB,gBAAgB,gBAAgB;AAChC,aAAa,CAAC,CAAC;AACf,SAAS;AACT,aAAa;AACb;AACA,YAAY,IAAI,aAAa,CAAC;AAC9B,YAAY,IAAI,gBAAgB,EAAE;AAClC,gBAAgB,aAAa,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAClE,aAAa;AACb,YAAY,MAAM,UAAU;AAC5B;AACA,YAAY,CAAC,aAAa,IAAI,mBAAmB;AACjD,kBAAkB,MAAM,mBAAmB,CAAC,IAAI,CAAC;AACjD,kBAAkB,SAAS,CAAC;AAC5B,YAAY,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC;AACpD,gBAAgB,GAAG,QAAQ;AAC3B,gBAAgB,WAAW;AAC3B,gBAAgB,gBAAgB,EAAE,CAAC,KAAK,KAAK;AAC7C,oBAAoB,MAAM,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,GAAG,KAAK,CAAC;AACpF,oBAAoB,UAAU,GAAG;AACjC,wBAAwB,gBAAgB,EAAE,gBAAgB,GAAG,2BAA2B;AACxF,qBAAqB,CAAC,CAAC;AACvB,iBAAiB;AACjB,aAAa,EAAE;AACf,gBAAgB,MAAM,EAAE,MAAM;AAC9B,gBAAgB,GAAG,EAAE,QAAQ;AAC7B,gBAAgB,QAAQ,EAAE,QAAQ;AAClC,gBAAgB,IAAI,EAAE,IAAI;AAC1B,gBAAgB,UAAU,EAAE,UAAU;AACtC,gBAAgB,aAAa,EAAE,aAAa,EAAE,QAAQ;AACtD,gBAAgB,UAAU,EAAE,UAAU;AACtC,aAAa,CAAC,CAAC;AACf,YAAY,gBAAgB,IAAI,IAAI,CAAC;AACrC;AACA,YAAY,sBAAsB,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;AAC9E,SAAS;AACT,KAAK;AACL;;;;"}
@@ -6,20 +6,22 @@ import '../../../../errors/types/validation.mjs';
6
6
  import '../../../../utils/logger.mjs';
7
7
  import { validateStorageOperationInput } from '../../utils/validateStorageOperationInput.mjs';
8
8
  import { STORAGE_INPUT_KEY } from '../../utils/constants.mjs';
9
- import '../../utils/client/base.mjs';
10
- import '../../utils/client/getObject.mjs';
11
- import '../../utils/client/listObjectsV2.mjs';
12
- import { putObject } from '../../utils/client/putObject.mjs';
13
- import '../../utils/client/createMultipartUpload.mjs';
14
- import '../../utils/client/uploadPart.mjs';
15
- import '../../utils/client/completeMultipartUpload.mjs';
16
- import '../../utils/client/listParts.mjs';
17
- import '../../utils/client/abortMultipartUpload.mjs';
18
- import '../../utils/client/copyObject.mjs';
19
- import '../../utils/client/headObject.mjs';
20
- import '../../utils/client/deleteObject.mjs';
9
+ import '../../utils/client/s3data/base.mjs';
10
+ import '../../utils/client/s3data/getObject.mjs';
11
+ import '../../utils/client/s3data/listObjectsV2.mjs';
12
+ import { putObject } from '../../utils/client/s3data/putObject.mjs';
13
+ import '../../utils/client/s3data/createMultipartUpload.mjs';
14
+ import '../../utils/client/s3data/uploadPart.mjs';
15
+ import '../../utils/client/s3data/completeMultipartUpload.mjs';
16
+ import '../../utils/client/s3data/listParts.mjs';
17
+ import '../../utils/client/s3data/abortMultipartUpload.mjs';
18
+ import '../../utils/client/s3data/copyObject.mjs';
19
+ import '../../utils/client/s3data/headObject.mjs';
20
+ import '../../utils/client/s3data/deleteObject.mjs';
21
21
  import { getStorageUserAgentValue } from '../../utils/userAgent.mjs';
22
+ import { calculateContentCRC32 } from '../../utils/crc32.mjs';
22
23
  import { constructContentDisposition } from '../../utils/constructContentDisposition.mjs';
24
+ import { validateObjectNotExists } from './validateObjectNotExists.mjs';
23
25
 
24
26
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
25
27
  // SPDX-License-Identifier: Apache-2.0
@@ -30,10 +32,22 @@ import { constructContentDisposition } from '../../utils/constructContentDisposi
30
32
  */
31
33
  const putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () => {
32
34
  const { options: uploadDataOptions, data } = uploadDataInput;
33
- const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } = await resolveS3ConfigAndInput(Amplify, uploadDataOptions);
35
+ const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } = await resolveS3ConfigAndInput(Amplify, uploadDataInput);
34
36
  const { inputType, objectKey } = validateStorageOperationInput(uploadDataInput, identityId);
35
37
  const finalKey = inputType === STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;
36
- const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, onProgress, } = uploadDataOptions ?? {};
38
+ const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', preventOverwrite, metadata, onProgress, } = uploadDataOptions ?? {};
39
+ const checksumCRC32 = await calculateContentCRC32(data);
40
+ const contentMD5 =
41
+ // check if checksum exists. ex: should not exist in react native
42
+ !checksumCRC32 && isObjectLockEnabled
43
+ ? await calculateContentMd5(data)
44
+ : undefined;
45
+ if (preventOverwrite) {
46
+ await validateObjectNotExists(s3Config, {
47
+ Bucket: bucket,
48
+ Key: finalKey,
49
+ });
50
+ }
37
51
  const { ETag: eTag, VersionId: versionId } = await putObject({
38
52
  ...s3Config,
39
53
  abortSignal,
@@ -47,9 +61,8 @@ const putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () =>
47
61
  ContentDisposition: constructContentDisposition(contentDisposition),
48
62
  ContentEncoding: contentEncoding,
49
63
  Metadata: metadata,
50
- ContentMD5: isObjectLockEnabled
51
- ? await calculateContentMd5(data)
52
- : undefined,
64
+ ContentMD5: contentMD5,
65
+ ChecksumCRC32: checksumCRC32?.checksum,
53
66
  });
54
67
  const result = {
55
68
  eTag,
@@ -1 +1 @@
1
- {"version":3,"file":"putObjectJob.mjs","sources":["../../../../../../src/providers/s3/apis/uploadData/putObjectJob.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { calculateContentMd5, resolveS3ConfigAndInput, validateStorageOperationInput, } from '../../utils';\nimport { putObject } from '../../utils/client';\nimport { getStorageUserAgentValue } from '../../utils/userAgent';\nimport { STORAGE_INPUT_KEY } from '../../utils/constants';\nimport { constructContentDisposition } from '../../utils/constructContentDisposition';\n/**\n * Get a function the returns a promise to call putObject API to S3.\n *\n * @internal\n */\nexport const putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () => {\n const { options: uploadDataOptions, data } = uploadDataInput;\n const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } = await resolveS3ConfigAndInput(Amplify, uploadDataOptions);\n const { inputType, objectKey } = validateStorageOperationInput(uploadDataInput, identityId);\n const finalKey = inputType === STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, onProgress, } = uploadDataOptions ?? {};\n const { ETag: eTag, VersionId: versionId } = await putObject({\n ...s3Config,\n abortSignal,\n onUploadProgress: onProgress,\n userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),\n }, {\n Bucket: bucket,\n Key: finalKey,\n Body: data,\n ContentType: contentType,\n ContentDisposition: constructContentDisposition(contentDisposition),\n ContentEncoding: contentEncoding,\n Metadata: metadata,\n ContentMD5: isObjectLockEnabled\n ? await calculateContentMd5(data)\n : undefined,\n });\n const result = {\n eTag,\n versionId,\n contentType,\n metadata,\n size: totalLength,\n };\n return inputType === STORAGE_INPUT_KEY\n ? { key: objectKey, ...result }\n : { path: objectKey, ...result };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAQA;AACA;AACA;AACA;AACA;AACY,MAAC,YAAY,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,KAAK,YAAY;AACvF,IAAI,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC;AACjE,IAAI,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACvI,IAAI,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,6BAA6B,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAChG,IAAI,MAAM,QAAQ,GAAG,SAAS,KAAK,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACzF,IAAI,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,WAAW,GAAG,0BAA0B,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,iBAAiB,IAAI,EAAE,CAAC;AAC7I,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC;AACjE,QAAQ,GAAG,QAAQ;AACnB,QAAQ,WAAW;AACnB,QAAQ,gBAAgB,EAAE,UAAU;AACpC,QAAQ,cAAc,EAAE,wBAAwB,CAAC,aAAa,CAAC,UAAU,CAAC;AAC1E,KAAK,EAAE;AACP,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,GAAG,EAAE,QAAQ;AACrB,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,WAAW,EAAE,WAAW;AAChC,QAAQ,kBAAkB,EAAE,2BAA2B,CAAC,kBAAkB,CAAC;AAC3E,QAAQ,eAAe,EAAE,eAAe;AACxC,QAAQ,QAAQ,EAAE,QAAQ;AAC1B,QAAQ,UAAU,EAAE,mBAAmB;AACvC,cAAc,MAAM,mBAAmB,CAAC,IAAI,CAAC;AAC7C,cAAc,SAAS;AACvB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,IAAI;AACZ,QAAQ,SAAS;AACjB,QAAQ,WAAW;AACnB,QAAQ,QAAQ;AAChB,QAAQ,IAAI,EAAE,WAAW;AACzB,KAAK,CAAC;AACN,IAAI,OAAO,SAAS,KAAK,iBAAiB;AAC1C,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE;AACvC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC;AACzC;;;;"}
1
+ {"version":3,"file":"putObjectJob.mjs","sources":["../../../../../../src/providers/s3/apis/uploadData/putObjectJob.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { StorageAction } from '@aws-amplify/core/internals/utils';\nimport { calculateContentMd5, resolveS3ConfigAndInput, validateStorageOperationInput, } from '../../utils';\nimport { putObject } from '../../utils/client/s3data';\nimport { getStorageUserAgentValue } from '../../utils/userAgent';\nimport { STORAGE_INPUT_KEY } from '../../utils/constants';\nimport { calculateContentCRC32 } from '../../utils/crc32';\nimport { constructContentDisposition } from '../../utils/constructContentDisposition';\nimport { validateObjectNotExists } from './validateObjectNotExists';\n/**\n * Get a function the returns a promise to call putObject API to S3.\n *\n * @internal\n */\nexport const putObjectJob = (uploadDataInput, abortSignal, totalLength) => async () => {\n const { options: uploadDataOptions, data } = uploadDataInput;\n const { bucket, keyPrefix, s3Config, isObjectLockEnabled, identityId } = await resolveS3ConfigAndInput(Amplify, uploadDataInput);\n const { inputType, objectKey } = validateStorageOperationInput(uploadDataInput, identityId);\n const finalKey = inputType === STORAGE_INPUT_KEY ? keyPrefix + objectKey : objectKey;\n const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', preventOverwrite, metadata, onProgress, } = uploadDataOptions ?? {};\n const checksumCRC32 = await calculateContentCRC32(data);\n const contentMD5 = \n // check if checksum exists. ex: should not exist in react native\n !checksumCRC32 && isObjectLockEnabled\n ? await calculateContentMd5(data)\n : undefined;\n if (preventOverwrite) {\n await validateObjectNotExists(s3Config, {\n Bucket: bucket,\n Key: finalKey,\n });\n }\n const { ETag: eTag, VersionId: versionId } = await putObject({\n ...s3Config,\n abortSignal,\n onUploadProgress: onProgress,\n userAgentValue: getStorageUserAgentValue(StorageAction.UploadData),\n }, {\n Bucket: bucket,\n Key: finalKey,\n Body: data,\n ContentType: contentType,\n ContentDisposition: constructContentDisposition(contentDisposition),\n ContentEncoding: contentEncoding,\n Metadata: metadata,\n ContentMD5: contentMD5,\n ChecksumCRC32: checksumCRC32?.checksum,\n });\n const result = {\n eTag,\n versionId,\n contentType,\n metadata,\n size: totalLength,\n };\n return inputType === STORAGE_INPUT_KEY\n ? { key: objectKey, ...result }\n : { path: objectKey, ...result };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AAUA;AACA;AACA;AACA;AACA;AACY,MAAC,YAAY,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,WAAW,KAAK,YAAY;AACvF,IAAI,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC;AACjE,IAAI,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,EAAE,UAAU,EAAE,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACrI,IAAI,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,6BAA6B,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;AAChG,IAAI,MAAM,QAAQ,GAAG,SAAS,KAAK,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACzF,IAAI,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,WAAW,GAAG,0BAA0B,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,iBAAiB,IAAI,EAAE,CAAC;AAC/J,IAAI,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC5D,IAAI,MAAM,UAAU;AACpB;AACA,IAAI,CAAC,aAAa,IAAI,mBAAmB;AACzC,UAAU,MAAM,mBAAmB,CAAC,IAAI,CAAC;AACzC,UAAU,SAAS,CAAC;AACpB,IAAI,IAAI,gBAAgB,EAAE;AAC1B,QAAQ,MAAM,uBAAuB,CAAC,QAAQ,EAAE;AAChD,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,GAAG,EAAE,QAAQ;AACzB,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC;AACjE,QAAQ,GAAG,QAAQ;AACnB,QAAQ,WAAW;AACnB,QAAQ,gBAAgB,EAAE,UAAU;AACpC,QAAQ,cAAc,EAAE,wBAAwB,CAAC,aAAa,CAAC,UAAU,CAAC;AAC1E,KAAK,EAAE;AACP,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,GAAG,EAAE,QAAQ;AACrB,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,WAAW,EAAE,WAAW;AAChC,QAAQ,kBAAkB,EAAE,2BAA2B,CAAC,kBAAkB,CAAC;AAC3E,QAAQ,eAAe,EAAE,eAAe;AACxC,QAAQ,QAAQ,EAAE,QAAQ;AAC1B,QAAQ,UAAU,EAAE,UAAU;AAC9B,QAAQ,aAAa,EAAE,aAAa,EAAE,QAAQ;AAC9C,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,MAAM,GAAG;AACnB,QAAQ,IAAI;AACZ,QAAQ,SAAS;AACjB,QAAQ,WAAW;AACnB,QAAQ,QAAQ;AAChB,QAAQ,IAAI,EAAE,WAAW;AACzB,KAAK,CAAC;AACN,IAAI,OAAO,SAAS,KAAK,iBAAiB;AAC1C,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE;AACvC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC;AACzC;;;;"}
@@ -0,0 +1,3 @@
1
+ import { ResolvedS3Config } from '../../types/options';
2
+ import { HeadObjectInput } from '../../utils/client/s3data';
3
+ export declare const validateObjectNotExists: (s3Config: ResolvedS3Config, input: HeadObjectInput) => Promise<void>;
@@ -0,0 +1,34 @@
1
+ import { StorageError } from '../../../../errors/StorageError.mjs';
2
+ import '../../utils/client/s3data/base.mjs';
3
+ import '../../utils/client/s3data/getObject.mjs';
4
+ import '../../utils/client/s3data/listObjectsV2.mjs';
5
+ import '../../utils/client/s3data/putObject.mjs';
6
+ import '../../utils/client/s3data/createMultipartUpload.mjs';
7
+ import '../../utils/client/s3data/uploadPart.mjs';
8
+ import '../../utils/client/s3data/completeMultipartUpload.mjs';
9
+ import '../../utils/client/s3data/listParts.mjs';
10
+ import '../../utils/client/s3data/abortMultipartUpload.mjs';
11
+ import '../../utils/client/s3data/copyObject.mjs';
12
+ import { headObject } from '../../utils/client/s3data/headObject.mjs';
13
+ import '../../utils/client/s3data/deleteObject.mjs';
14
+
15
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
16
+ // SPDX-License-Identifier: Apache-2.0
17
+ const validateObjectNotExists = async (s3Config, input) => {
18
+ try {
19
+ await headObject(s3Config, input);
20
+ throw new StorageError({
21
+ name: 'PreconditionFailed',
22
+ message: 'At least one of the pre-conditions you specified did not hold',
23
+ });
24
+ }
25
+ catch (error) {
26
+ const serviceError = error;
27
+ if (serviceError.name !== 'NotFound') {
28
+ throw error;
29
+ }
30
+ }
31
+ };
32
+
33
+ export { validateObjectNotExists };
34
+ //# sourceMappingURL=validateObjectNotExists.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateObjectNotExists.mjs","sources":["../../../../../../src/providers/s3/apis/uploadData/validateObjectNotExists.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { StorageError } from '../../../../errors/StorageError';\nimport { headObject } from '../../utils/client/s3data';\nexport const validateObjectNotExists = async (s3Config, input) => {\n try {\n await headObject(s3Config, input);\n throw new StorageError({\n name: 'PreconditionFailed',\n message: 'At least one of the pre-conditions you specified did not hold',\n });\n }\n catch (error) {\n const serviceError = error;\n if (serviceError.name !== 'NotFound') {\n throw error;\n }\n }\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA;AACA;AAGY,MAAC,uBAAuB,GAAG,OAAO,QAAQ,EAAE,KAAK,KAAK;AAClE,IAAI,IAAI;AACR,QAAQ,MAAM,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC1C,QAAQ,MAAM,IAAI,YAAY,CAAC;AAC/B,YAAY,IAAI,EAAE,oBAAoB;AACtC,YAAY,OAAO,EAAE,+DAA+D;AACpF,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,YAAY,GAAG,KAAK,CAAC;AACnC,QAAQ,IAAI,YAAY,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9C,YAAY,MAAM,KAAK,CAAC;AACxB,SAAS;AACT,KAAK;AACL;;;;"}
@@ -1,5 +1,7 @@
1
1
  import { StorageCopyInputWithKey, StorageCopyInputWithPath, StorageDownloadDataInputWithKey, StorageDownloadDataInputWithPath, StorageGetPropertiesInputWithKey, StorageGetPropertiesInputWithPath, StorageGetUrlInputWithKey, StorageGetUrlInputWithPath, StorageListInputWithPath, StorageListInputWithPrefix, StorageRemoveInputWithKey, StorageRemoveInputWithPath, StorageUploadDataInputWithKey, StorageUploadDataInputWithPath } from '../../../types';
2
+ import { StorageOperationOptionsInput } from '../../../types/inputs';
2
3
  import { CopyDestinationOptionsWithKey, CopySourceOptionsWithKey, DownloadDataOptionsWithKey, DownloadDataOptionsWithPath, GetPropertiesOptionsWithKey, GetPropertiesOptionsWithPath, GetUrlOptionsWithKey, GetUrlOptionsWithPath, ListAllOptionsWithPath, ListAllOptionsWithPrefix, ListPaginateOptionsWithPath, ListPaginateOptionsWithPrefix, RemoveOptions, UploadDataOptionsWithKey, UploadDataOptionsWithPath } from '../types';
4
+ import { LocationCredentialsProvider } from './options';
3
5
  /**
4
6
  * @deprecated Use {@link CopyWithPathInput} instead.
5
7
  * Input type for S3 copy API.
@@ -8,7 +10,9 @@ export type CopyInput = StorageCopyInputWithKey<CopySourceOptionsWithKey, CopyDe
8
10
  /**
9
11
  * Input type with path for S3 copy API.
10
12
  */
11
- export type CopyWithPathInput = StorageCopyInputWithPath;
13
+ export type CopyWithPathInput = StorageCopyInputWithPath & StorageOperationOptionsInput<{
14
+ locationCredentialsProvider?: LocationCredentialsProvider;
15
+ }>;
12
16
  /**
13
17
  * @deprecated Use {@link GetPropertiesWithPathInput} instead.
14
18
  * Input type for S3 getProperties API.
@@ -1,7 +1,18 @@
1
1
  import { StorageAccessLevel } from '@aws-amplify/core';
2
- import { SigningOptions } from '@aws-amplify/core/internals/aws-client-utils';
2
+ import { AWSCredentials } from '@aws-amplify/core/internals/utils';
3
+ import { CredentialsProviderOptions, SigningOptions } from '@aws-amplify/core/internals/aws-client-utils';
3
4
  import { TransferProgressEvent } from '../../../types';
4
5
  import { StorageListAllOptions, StorageListPaginateOptions, StorageSubpathStrategy } from '../../../types/options';
6
+ /**
7
+ * @internal
8
+ */
9
+ export type AWSTemporaryCredentials = Required<Pick<AWSCredentials, 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'expiration'>>;
10
+ /**
11
+ * @internal
12
+ */
13
+ export type LocationCredentialsProvider = (options?: CredentialsProviderOptions) => Promise<{
14
+ credentials: AWSTemporaryCredentials;
15
+ }>;
5
16
  export interface BucketInfo {
6
17
  bucketName: string;
7
18
  region: string;
@@ -13,6 +24,13 @@ interface CommonOptions {
13
24
  * @default false
14
25
  */
15
26
  useAccelerateEndpoint?: boolean;
27
+ /**
28
+ * Async function returning AWS credentials for an API call. This function
29
+ * is invoked with S3 locations(bucket and path).
30
+ * If omitted, the global credentials configured in Amplify Auth
31
+ * would be used.
32
+ */
33
+ locationCredentialsProvider?: LocationCredentialsProvider;
16
34
  bucket?: StorageBucket;
17
35
  }
18
36
  /**
@@ -147,6 +165,11 @@ export type UploadDataOptions = CommonOptions & TransferOptions & {
147
165
  * @see https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#UserMetadata
148
166
  */
149
167
  metadata?: Record<string, string>;
168
+ /**
169
+ * Enforces target key does not already exist in S3 before committing upload.
170
+ * @default false
171
+ */
172
+ preventOverwrite?: boolean;
150
173
  };
151
174
  /** @deprecated Use {@link UploadDataOptionsWithPath} instead. */
152
175
  export type UploadDataOptionsWithKey = WriteOptions & UploadDataOptions;
@@ -0,0 +1,56 @@
1
+ import { EndpointResolverOptions } from '@aws-amplify/core/internals/aws-client-utils';
2
+ /**
3
+ * The service name used to sign requests if the API requires authentication.
4
+ */
5
+ export declare const SERVICE_NAME = "s3";
6
+ /**
7
+ * Options for endpoint resolver.
8
+ *
9
+ * @internal
10
+ */
11
+ export type S3EndpointResolverOptions = EndpointResolverOptions & {
12
+ /**
13
+ * Fully qualified custom endpoint for S3. If this is set, this endpoint will be used regardless of region.
14
+ */
15
+ customEndpoint?: string;
16
+ };
17
+ /**
18
+ * Error parser for the XML payload of S3 control plane error response. The
19
+ * error's `Code` and `Message` locates at the nested `Error` element instead of
20
+ * the XML root element.
21
+ *
22
+ * @example
23
+ * ```
24
+ * <?xml version="1.0" encoding="UTF-8"?>
25
+ * <ErrorResponse>
26
+ * <Error>
27
+ * <Code>AccessDenied</Code>
28
+ * <Message>Access Denied</Message>
29
+ * </Error>
30
+ * <RequestId>656c76696e6727732072657175657374</RequestId>
31
+ * <HostId>Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==</HostId>
32
+ * </ErrorResponse>
33
+ * ```
34
+ *
35
+ * @internal
36
+ */
37
+ export declare const parseXmlError: import("@aws-amplify/core/internals/aws-client-utils").ErrorParser;
38
+ /**
39
+ * @internal
40
+ */
41
+ export declare const retryDecider: import("../utils/createRetryDecider").RetryDecider;
42
+ /**
43
+ * @internal
44
+ */
45
+ export declare const defaultConfig: {
46
+ service: string;
47
+ endpointResolver: (options: S3EndpointResolverOptions, apiInput?: {
48
+ AccountId?: string;
49
+ }) => {
50
+ url: URL;
51
+ };
52
+ retryDecider: import("../utils/createRetryDecider").RetryDecider;
53
+ computeDelay: (attempt: number) => number;
54
+ userAgentValue: string;
55
+ uriEscapePath: boolean;
56
+ };
@@ -0,0 +1,74 @@
1
+ import { getAmplifyUserAgent, AmplifyUrl } from '@aws-amplify/core/internals/utils';
2
+ import { jitteredBackoff, getDnsSuffix } from '@aws-amplify/core/internals/aws-client-utils';
3
+ import { createXmlErrorParser } from '../utils/parsePayload.mjs';
4
+ import '../runtime/s3TransferHandler/fetch.mjs';
5
+ import 'fast-xml-parser';
6
+ import '../runtime/s3TransferHandler/xhr.mjs';
7
+ import 'buffer';
8
+ import { createRetryDecider } from '../utils/createRetryDecider.mjs';
9
+
10
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
11
+ // SPDX-License-Identifier: Apache-2.0
12
+ /**
13
+ * The service name used to sign requests if the API requires authentication.
14
+ */
15
+ const SERVICE_NAME = 's3';
16
+ /**
17
+ * The endpoint resolver function that returns the endpoint URL for a given region, and input parameters.
18
+ */
19
+ const endpointResolver = (options, apiInput) => {
20
+ const { region, customEndpoint } = options;
21
+ const { AccountId: accountId } = apiInput || {};
22
+ let endpoint;
23
+ // 1. get base endpoint
24
+ if (customEndpoint) {
25
+ endpoint = new AmplifyUrl(customEndpoint);
26
+ }
27
+ else if (accountId) {
28
+ // Control plane operations
29
+ endpoint = new AmplifyUrl(`https://${accountId}.s3-control.${region}.${getDnsSuffix(region)}`);
30
+ }
31
+ else {
32
+ endpoint = new AmplifyUrl(`https://s3-control.${region}.${getDnsSuffix(region)}`);
33
+ }
34
+ return { url: endpoint };
35
+ };
36
+ /**
37
+ * Error parser for the XML payload of S3 control plane error response. The
38
+ * error's `Code` and `Message` locates at the nested `Error` element instead of
39
+ * the XML root element.
40
+ *
41
+ * @example
42
+ * ```
43
+ * <?xml version="1.0" encoding="UTF-8"?>
44
+ * <ErrorResponse>
45
+ * <Error>
46
+ * <Code>AccessDenied</Code>
47
+ * <Message>Access Denied</Message>
48
+ * </Error>
49
+ * <RequestId>656c76696e6727732072657175657374</RequestId>
50
+ * <HostId>Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==</HostId>
51
+ * </ErrorResponse>
52
+ * ```
53
+ *
54
+ * @internal
55
+ */
56
+ const parseXmlError = createXmlErrorParser();
57
+ /**
58
+ * @internal
59
+ */
60
+ const retryDecider = createRetryDecider(parseXmlError);
61
+ /**
62
+ * @internal
63
+ */
64
+ const defaultConfig = {
65
+ service: SERVICE_NAME,
66
+ endpointResolver,
67
+ retryDecider,
68
+ computeDelay: jitteredBackoff,
69
+ userAgentValue: getAmplifyUserAgent(),
70
+ uriEscapePath: false, // Required by S3. See https://github.com/aws/aws-sdk-js-v3/blob/9ba012dfa3a3429aa2db0f90b3b0b3a7a31f9bc3/packages/signature-v4/src/SignatureV4.ts#L76-L83
71
+ };
72
+
73
+ export { SERVICE_NAME, defaultConfig, parseXmlError, retryDecider };
74
+ //# sourceMappingURL=base.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.mjs","sources":["../../../../../../../src/providers/s3/utils/client/s3control/base.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { AmplifyUrl, getAmplifyUserAgent, } from '@aws-amplify/core/internals/utils';\nimport { getDnsSuffix, jitteredBackoff, } from '@aws-amplify/core/internals/aws-client-utils';\nimport { createRetryDecider, createXmlErrorParser } from '../utils';\n/**\n * The service name used to sign requests if the API requires authentication.\n */\nexport const SERVICE_NAME = 's3';\n/**\n * The endpoint resolver function that returns the endpoint URL for a given region, and input parameters.\n */\nconst endpointResolver = (options, apiInput) => {\n const { region, customEndpoint } = options;\n const { AccountId: accountId } = apiInput || {};\n let endpoint;\n // 1. get base endpoint\n if (customEndpoint) {\n endpoint = new AmplifyUrl(customEndpoint);\n }\n else if (accountId) {\n // Control plane operations\n endpoint = new AmplifyUrl(`https://${accountId}.s3-control.${region}.${getDnsSuffix(region)}`);\n }\n else {\n endpoint = new AmplifyUrl(`https://s3-control.${region}.${getDnsSuffix(region)}`);\n }\n return { url: endpoint };\n};\n/**\n * Error parser for the XML payload of S3 control plane error response. The\n * error's `Code` and `Message` locates at the nested `Error` element instead of\n * the XML root element.\n *\n * @example\n * ```\n * \t<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n * \t<ErrorResponse>\n * \t <Error>\n * \t\t <Code>AccessDenied</Code>\n * \t\t <Message>Access Denied</Message>\n * \t\t</Error>\n * \t\t<RequestId>656c76696e6727732072657175657374</RequestId>\n * \t\t<HostId>Uuag1LuByRx9e6j5Onimru9pO4ZVKnJ2Qz7/C1NPcfTWAtRPfTaOFg==</HostId>\n * \t</ErrorResponse>\n * \t```\n *\n * @internal\n */\nexport const parseXmlError = createXmlErrorParser();\n/**\n * @internal\n */\nexport const retryDecider = createRetryDecider(parseXmlError);\n/**\n * @internal\n */\nexport const defaultConfig = {\n service: SERVICE_NAME,\n endpointResolver,\n retryDecider,\n computeDelay: jitteredBackoff,\n userAgentValue: getAmplifyUserAgent(),\n uriEscapePath: false, // Required by S3. See https://github.com/aws/aws-sdk-js-v3/blob/9ba012dfa3a3429aa2db0f90b3b0b3a7a31f9bc3/packages/signature-v4/src/SignatureV4.ts#L76-L83\n};\n"],"names":[],"mappings":";;;;;;;;;AAAA;AACA;AAIA;AACA;AACA;AACY,MAAC,YAAY,GAAG,KAAK;AACjC;AACA;AACA;AACA,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK;AAChD,IAAI,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;AAC/C,IAAI,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAC;AACpD,IAAI,IAAI,QAAQ,CAAC;AACjB;AACA,IAAI,IAAI,cAAc,EAAE;AACxB,QAAQ,QAAQ,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;AAClD,KAAK;AACL,SAAS,IAAI,SAAS,EAAE;AACxB;AACA,QAAQ,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvG,KAAK;AACL,SAAS;AACT,QAAQ,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,KAAK;AACL,IAAI,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,aAAa,GAAG,oBAAoB,GAAG;AACpD;AACA;AACA;AACY,MAAC,YAAY,GAAG,kBAAkB,CAAC,aAAa,EAAE;AAC9D;AACA;AACA;AACY,MAAC,aAAa,GAAG;AAC7B,IAAI,OAAO,EAAE,YAAY;AACzB,IAAI,gBAAgB;AACpB,IAAI,YAAY;AAChB,IAAI,YAAY,EAAE,eAAe;AACjC,IAAI,cAAc,EAAE,mBAAmB,EAAE;AACzC,IAAI,aAAa,EAAE,KAAK;AACxB;;;;"}
@@ -0,0 +1,26 @@
1
+ import { Endpoint, HttpResponse } from '@aws-amplify/core/internals/aws-client-utils';
2
+ import type { GetDataAccessCommandInput, GetDataAccessCommandOutput } from './types';
3
+ export type GetDataAccessInput = GetDataAccessCommandInput;
4
+ export type GetDataAccessOutput = GetDataAccessCommandOutput;
5
+ export declare const getDataAccess: (config: {
6
+ responseType?: "blob" | "text" | undefined;
7
+ service?: string | undefined;
8
+ endpointResolver?: (((options: import("@aws-amplify/core/internals/aws-client-utils").EndpointResolverOptions, input?: any) => Endpoint) & ((options: import("./base").S3EndpointResolverOptions, apiInput?: {
9
+ AccountId?: string | undefined;
10
+ } | undefined) => {
11
+ url: URL;
12
+ })) | undefined;
13
+ retryDecider?: (((response?: HttpResponse | undefined, error?: unknown, middlewareContext?: import("@aws-amplify/core/internals/aws-client-utils").MiddlewareContext | undefined) => Promise<import("@aws-amplify/core/internals/aws-client-utils").RetryDeciderOutput>) & import("../utils/createRetryDecider").RetryDecider) | undefined;
14
+ computeDelay?: ((attempt: number) => number) | undefined;
15
+ userAgentValue?: string | undefined;
16
+ uriEscapePath?: boolean | undefined;
17
+ } & {
18
+ credentials: import("@aws-amplify/core/internals/aws-client-utils").Credentials | ((options?: import("@aws-amplify/core/internals/aws-client-utils").CredentialsProviderOptions | undefined) => Promise<import("@aws-amplify/core/internals/aws-client-utils").Credentials>);
19
+ region: string;
20
+ onDownloadProgress?: ((event: import("../../../../..").TransferProgressEvent) => void) | undefined;
21
+ onUploadProgress?: ((event: import("../../../../..").TransferProgressEvent) => void) | undefined;
22
+ abortSignal?: AbortSignal | undefined;
23
+ customEndpoint?: string | undefined;
24
+ userAgentHeader?: string | undefined;
25
+ maxAttempts?: number | undefined;
26
+ }, input: import("./types").GetDataAccessRequest) => Promise<GetDataAccessCommandOutput>;
@@ -0,0 +1,63 @@
1
+ import { parseMetadata } from '@aws-amplify/core/internals/aws-client-utils';
2
+ import { composeServiceApi } from '@aws-amplify/core/internals/aws-client-utils/composers';
3
+ import { AmplifyUrl, AmplifyUrlSearchParams } from '@aws-amplify/core/internals/utils';
4
+ import { parseXmlBody } from '../utils/parsePayload.mjs';
5
+ import { s3TransferHandler } from '../runtime/s3TransferHandler/fetch.mjs';
6
+ import 'fast-xml-parser';
7
+ import '../runtime/s3TransferHandler/xhr.mjs';
8
+ import 'buffer';
9
+ import { buildStorageServiceError, map, deserializeTimestamp } from '../utils/deserializeHelpers.mjs';
10
+ import { assignStringVariables } from '../utils/serializeHelpers.mjs';
11
+ import { defaultConfig, parseXmlError } from './base.mjs';
12
+
13
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
14
+ // SPDX-License-Identifier: Apache-2.0
15
+ const getDataAccessSerializer = (input, endpoint) => {
16
+ const headers = assignStringVariables({
17
+ 'x-amz-account-id': input.AccountId,
18
+ });
19
+ const query = assignStringVariables({
20
+ durationSeconds: input.DurationSeconds,
21
+ permission: input.Permission,
22
+ privilege: input.Privilege,
23
+ target: input.Target,
24
+ targetType: input.TargetType,
25
+ });
26
+ const url = new AmplifyUrl(endpoint.url.toString());
27
+ url.search = new AmplifyUrlSearchParams(query).toString();
28
+ // Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetDataAccess.html
29
+ url.pathname = '/v20180820/accessgrantsinstance/dataaccess';
30
+ return {
31
+ method: 'GET',
32
+ headers,
33
+ url,
34
+ };
35
+ };
36
+ const getDataAccessDeserializer = async (response) => {
37
+ if (response.statusCode >= 300) {
38
+ // error is always set when statusCode >= 300
39
+ const error = (await parseXmlError(response));
40
+ throw buildStorageServiceError(error, response.statusCode);
41
+ }
42
+ else {
43
+ const parsed = await parseXmlBody(response);
44
+ const contents = map(parsed, {
45
+ Credentials: ['Credentials', deserializeCredentials],
46
+ MatchedGrantTarget: 'MatchedGrantTarget',
47
+ });
48
+ return {
49
+ $metadata: parseMetadata(response),
50
+ ...contents,
51
+ };
52
+ }
53
+ };
54
+ const deserializeCredentials = (output) => map(output, {
55
+ AccessKeyId: 'AccessKeyId',
56
+ Expiration: ['Expiration', deserializeTimestamp],
57
+ SecretAccessKey: 'SecretAccessKey',
58
+ SessionToken: 'SessionToken',
59
+ });
60
+ const getDataAccess = composeServiceApi(s3TransferHandler, getDataAccessSerializer, getDataAccessDeserializer, { ...defaultConfig, responseType: 'text' });
61
+
62
+ export { getDataAccess };
63
+ //# sourceMappingURL=getDataAccess.mjs.map