@aws-amplify/storage 6.6.0 → 6.6.1-storage-browser.37d5283.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.
- package/dist/cjs/errors/constants.js +8 -0
- package/dist/cjs/errors/constants.js.map +1 -0
- package/dist/cjs/errors/types/validation.js +20 -0
- package/dist/cjs/errors/types/validation.js.map +1 -1
- package/dist/cjs/providers/s3/apis/downloadData.js +3 -3
- package/dist/cjs/providers/s3/apis/downloadData.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/copy.js +59 -14
- package/dist/cjs/providers/s3/apis/internal/copy.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/getProperties.js +3 -4
- package/dist/cjs/providers/s3/apis/internal/getProperties.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/getUrl.js +3 -3
- package/dist/cjs/providers/s3/apis/internal/getUrl.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/list.js +4 -4
- package/dist/cjs/providers/s3/apis/internal/list.js.map +1 -1
- package/dist/cjs/providers/s3/apis/internal/remove.js +3 -4
- package/dist/cjs/providers/s3/apis/internal/remove.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js +22 -2
- package/dist/cjs/providers/s3/apis/uploadData/multipart/initialUpload.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadCache.js +3 -2
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadCache.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js +19 -8
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadHandlers.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadPartExecutor.js +20 -11
- package/dist/cjs/providers/s3/apis/uploadData/multipart/uploadPartExecutor.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/putObjectJob.js +20 -7
- package/dist/cjs/providers/s3/apis/uploadData/putObjectJob.js.map +1 -1
- package/dist/cjs/providers/s3/apis/uploadData/validateObjectNotExists.js +25 -0
- package/dist/cjs/providers/s3/apis/uploadData/validateObjectNotExists.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/s3control/base.js +45 -0
- package/dist/cjs/providers/s3/utils/client/s3control/base.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/s3control/getDataAccess.js +58 -0
- package/dist/cjs/providers/s3/utils/client/s3control/getDataAccess.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/s3control/index.js +11 -0
- package/dist/cjs/providers/s3/utils/client/s3control/index.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/s3control/listCallerAccessGrants.js +59 -0
- package/dist/cjs/providers/s3/utils/client/s3control/listCallerAccessGrants.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/s3control/types.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{abortMultipartUpload.js → s3data/abortMultipartUpload.js} +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/abortMultipartUpload.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{base.js → s3data/base.js} +2 -2
- package/dist/cjs/providers/s3/utils/client/s3data/base.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{completeMultipartUpload.js → s3data/completeMultipartUpload.js} +14 -9
- package/dist/cjs/providers/s3/utils/client/s3data/completeMultipartUpload.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{copyObject.js → s3data/copyObject.js} +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/copyObject.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{createMultipartUpload.js → s3data/createMultipartUpload.js} +7 -2
- package/dist/cjs/providers/s3/utils/client/s3data/createMultipartUpload.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{deleteObject.js → s3data/deleteObject.js} +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/deleteObject.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{getObject.js → s3data/getObject.js} +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/getObject.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{headObject.js → s3data/headObject.js} +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/headObject.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/index.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{listObjectsV2.js → s3data/listObjectsV2.js} +1 -1
- package/dist/cjs/providers/s3/utils/client/s3data/listObjectsV2.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{listParts.js → s3data/listParts.js} +2 -1
- package/dist/cjs/providers/s3/utils/client/s3data/listParts.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{putObject.js → s3data/putObject.js} +2 -1
- package/dist/cjs/providers/s3/utils/client/s3data/putObject.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/s3data/types.js +6 -0
- package/dist/cjs/providers/s3/utils/client/s3data/types.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/{uploadPart.js → s3data/uploadPart.js} +3 -2
- package/dist/cjs/providers/s3/utils/client/s3data/uploadPart.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/utils/index.js +3 -1
- package/dist/cjs/providers/s3/utils/client/utils/index.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/retryDecider.js +61 -0
- package/dist/cjs/providers/s3/utils/client/utils/retryDecider.js.map +1 -0
- package/dist/cjs/providers/s3/utils/crc32.js +37 -0
- package/dist/cjs/providers/s3/utils/crc32.js.map +1 -0
- package/dist/cjs/providers/s3/utils/crc32.native.js +11 -0
- package/dist/cjs/providers/s3/utils/crc32.native.js.map +1 -0
- package/dist/cjs/providers/s3/utils/resolveIdentityId.js +14 -0
- package/dist/cjs/providers/s3/utils/resolveIdentityId.js.map +1 -0
- package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js +74 -14
- package/dist/cjs/providers/s3/utils/resolveS3ConfigAndInput.js.map +1 -1
- package/dist/cjs/providers/s3/utils/validateStorageOperationInput.js +4 -1
- package/dist/cjs/providers/s3/utils/validateStorageOperationInput.js.map +1 -1
- package/dist/cjs/providers/s3/utils/validateStorageOperationInputWithPrefix.js +4 -1
- package/dist/cjs/providers/s3/utils/validateStorageOperationInputWithPrefix.js.map +1 -1
- package/dist/cjs/storageBrowser/apis/constants.js +9 -0
- package/dist/cjs/storageBrowser/apis/constants.js.map +1 -0
- package/dist/cjs/storageBrowser/apis/getDataAccess.js +57 -0
- package/dist/cjs/storageBrowser/apis/getDataAccess.js.map +1 -0
- package/dist/cjs/storageBrowser/apis/listCallerAccessGrants.js +79 -0
- package/dist/cjs/storageBrowser/apis/listCallerAccessGrants.js.map +1 -0
- package/dist/cjs/storageBrowser/apis/types.js +6 -0
- package/dist/cjs/storageBrowser/apis/types.js.map +1 -0
- package/dist/cjs/storageBrowser/index.js +11 -0
- package/dist/cjs/storageBrowser/index.js.map +1 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/constants.js +9 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/constants.js.map +1 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/create.js +36 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/create.js.map +1 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/index.js +9 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/index.js.map +1 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/registry.js +58 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/registry.js.map +1 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/store.js +99 -0
- package/dist/cjs/storageBrowser/locationCredentialsStore/store.js.map +1 -0
- package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.js +15 -0
- package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.js.map +1 -0
- package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.js +29 -0
- package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.js.map +1 -0
- package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.js +32 -0
- package/dist/cjs/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.js.map +1 -0
- package/dist/cjs/storageBrowser/managedAuthConfigAdapter/index.js +9 -0
- package/dist/cjs/storageBrowser/managedAuthConfigAdapter/index.js.map +1 -0
- package/dist/cjs/storageBrowser/types.js +6 -0
- package/dist/cjs/storageBrowser/types.js.map +1 -0
- package/dist/esm/errors/constants.d.ts +1 -0
- package/dist/esm/errors/constants.mjs +6 -0
- package/dist/esm/errors/constants.mjs.map +1 -0
- package/dist/esm/errors/types/validation.d.ts +6 -1
- package/dist/esm/errors/types/validation.mjs +20 -0
- package/dist/esm/errors/types/validation.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/downloadData.mjs +13 -13
- package/dist/esm/providers/s3/apis/downloadData.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/copy.mjs +69 -24
- package/dist/esm/providers/s3/apis/internal/copy.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/getProperties.mjs +13 -14
- package/dist/esm/providers/s3/apis/internal/getProperties.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/getUrl.mjs +13 -13
- package/dist/esm/providers/s3/apis/internal/getUrl.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/list.mjs +13 -13
- package/dist/esm/providers/s3/apis/internal/list.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/internal/remove.mjs +13 -14
- package/dist/esm/providers/s3/apis/internal/remove.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.d.ts +2 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs +32 -12
- package/dist/esm/providers/s3/apis/uploadData/multipart/initialUpload.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.d.ts +3 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.mjs +13 -12
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadCache.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs +27 -16
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadHandlers.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.d.ts +3 -2
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.mjs +27 -18
- package/dist/esm/providers/s3/apis/uploadData/multipart/uploadPartExecutor.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/putObjectJob.mjs +30 -17
- package/dist/esm/providers/s3/apis/uploadData/putObjectJob.mjs.map +1 -1
- package/dist/esm/providers/s3/apis/uploadData/validateObjectNotExists.d.ts +3 -0
- package/dist/esm/providers/s3/apis/uploadData/validateObjectNotExists.mjs +34 -0
- package/dist/esm/providers/s3/apis/uploadData/validateObjectNotExists.mjs.map +1 -0
- package/dist/esm/providers/s3/types/index.d.ts +1 -1
- package/dist/esm/providers/s3/types/inputs.d.ts +5 -2
- package/dist/esm/providers/s3/types/options.d.ts +38 -1
- package/dist/esm/providers/s3/utils/client/s3control/base.d.ts +31 -0
- package/dist/esm/providers/s3/utils/client/s3control/base.mjs +48 -0
- package/dist/esm/providers/s3/utils/client/s3control/base.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.d.ts +26 -0
- package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.mjs +63 -0
- package/dist/esm/providers/s3/utils/client/s3control/getDataAccess.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/s3control/index.d.ts +2 -0
- package/dist/esm/providers/s3/utils/client/s3control/index.mjs +3 -0
- package/dist/esm/providers/s3/utils/client/s3control/index.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.d.ts +26 -0
- package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.mjs +64 -0
- package/dist/esm/providers/s3/utils/client/s3control/listCallerAccessGrants.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/s3control/types.d.ts +176 -0
- package/dist/esm/providers/s3/utils/client/{abortMultipartUpload.d.ts → s3data/abortMultipartUpload.d.ts} +4 -4
- package/dist/esm/providers/s3/utils/client/{abortMultipartUpload.mjs → s3data/abortMultipartUpload.mjs} +6 -6
- package/dist/esm/providers/s3/utils/client/s3data/abortMultipartUpload.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{base.d.ts → s3data/base.d.ts} +1 -1
- package/dist/esm/providers/s3/utils/client/{base.mjs → s3data/base.mjs} +5 -5
- package/dist/esm/providers/s3/utils/client/s3data/base.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{completeMultipartUpload.d.ts → s3data/completeMultipartUpload.d.ts} +6 -6
- package/dist/esm/providers/s3/utils/client/{completeMultipartUpload.mjs → s3data/completeMultipartUpload.mjs} +20 -14
- package/dist/esm/providers/s3/utils/client/s3data/completeMultipartUpload.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{copyObject.d.ts → s3data/copyObject.d.ts} +4 -4
- package/dist/esm/providers/s3/utils/client/{copyObject.mjs → s3data/copyObject.mjs} +6 -6
- package/dist/esm/providers/s3/utils/client/s3data/copyObject.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{createMultipartUpload.d.ts → s3data/createMultipartUpload.d.ts} +4 -4
- package/dist/esm/providers/s3/utils/client/{createMultipartUpload.mjs → s3data/createMultipartUpload.mjs} +12 -7
- package/dist/esm/providers/s3/utils/client/s3data/createMultipartUpload.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{deleteObject.d.ts → s3data/deleteObject.d.ts} +4 -4
- package/dist/esm/providers/s3/utils/client/{deleteObject.mjs → s3data/deleteObject.mjs} +6 -6
- package/dist/esm/providers/s3/utils/client/s3data/deleteObject.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{getObject.d.ts → s3data/getObject.d.ts} +4 -4
- package/dist/esm/providers/s3/utils/client/{getObject.mjs → s3data/getObject.mjs} +7 -7
- package/dist/esm/providers/s3/utils/client/s3data/getObject.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{headObject.d.ts → s3data/headObject.d.ts} +4 -4
- package/dist/esm/providers/s3/utils/client/{headObject.mjs → s3data/headObject.mjs} +6 -6
- package/dist/esm/providers/s3/utils/client/s3data/headObject.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{listObjectsV2.d.ts → s3data/listObjectsV2.d.ts} +4 -4
- package/dist/esm/providers/s3/utils/client/{listObjectsV2.mjs → s3data/listObjectsV2.mjs} +6 -6
- package/dist/esm/providers/s3/utils/client/s3data/listObjectsV2.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{listParts.d.ts → s3data/listParts.d.ts} +4 -4
- package/dist/esm/providers/s3/utils/client/{listParts.mjs → s3data/listParts.mjs} +7 -6
- package/dist/esm/providers/s3/utils/client/s3data/listParts.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{putObject.d.ts → s3data/putObject.d.ts} +5 -5
- package/dist/esm/providers/s3/utils/client/{putObject.mjs → s3data/putObject.mjs} +7 -6
- package/dist/esm/providers/s3/utils/client/s3data/putObject.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/s3data/types.mjs +2 -0
- package/dist/esm/providers/s3/utils/client/s3data/types.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/{uploadPart.d.ts → s3data/uploadPart.d.ts} +5 -5
- package/dist/esm/providers/s3/utils/client/{uploadPart.mjs → s3data/uploadPart.mjs} +8 -7
- package/dist/esm/providers/s3/utils/client/s3data/uploadPart.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/utils/index.d.ts +1 -0
- package/dist/esm/providers/s3/utils/client/utils/index.mjs +1 -0
- package/dist/esm/providers/s3/utils/client/utils/index.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/retryDecider.d.ts +13 -0
- package/dist/esm/providers/s3/utils/client/utils/retryDecider.mjs +59 -0
- package/dist/esm/providers/s3/utils/client/utils/retryDecider.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/crc32.d.ts +6 -0
- package/dist/esm/providers/s3/utils/crc32.mjs +34 -0
- package/dist/esm/providers/s3/utils/crc32.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/crc32.native.d.ts +2 -0
- package/dist/esm/providers/s3/utils/crc32.native.mjs +8 -0
- package/dist/esm/providers/s3/utils/crc32.native.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/resolveIdentityId.d.ts +1 -0
- package/dist/esm/providers/s3/utils/resolveIdentityId.mjs +12 -0
- package/dist/esm/providers/s3/utils/resolveIdentityId.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.d.ts +11 -2
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs +72 -12
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/validateStorageOperationInput.mjs +4 -1
- package/dist/esm/providers/s3/utils/validateStorageOperationInput.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.mjs +4 -1
- package/dist/esm/providers/s3/utils/validateStorageOperationInputWithPrefix.mjs.map +1 -1
- package/dist/esm/storageBrowser/apis/constants.d.ts +2 -0
- package/dist/esm/storageBrowser/apis/constants.mjs +7 -0
- package/dist/esm/storageBrowser/apis/constants.mjs.map +1 -0
- package/dist/esm/storageBrowser/apis/getDataAccess.d.ts +2 -0
- package/dist/esm/storageBrowser/apis/getDataAccess.mjs +57 -0
- package/dist/esm/storageBrowser/apis/getDataAccess.mjs.map +1 -0
- package/dist/esm/storageBrowser/apis/listCallerAccessGrants.d.ts +2 -0
- package/dist/esm/storageBrowser/apis/listCallerAccessGrants.mjs +79 -0
- package/dist/esm/storageBrowser/apis/listCallerAccessGrants.mjs.map +1 -0
- package/dist/esm/storageBrowser/apis/types.d.ts +18 -0
- package/dist/esm/storageBrowser/apis/types.mjs +2 -0
- package/dist/esm/storageBrowser/apis/types.mjs.map +1 -0
- package/dist/esm/storageBrowser/index.d.ts +6 -0
- package/dist/esm/storageBrowser/index.mjs +3 -0
- package/dist/esm/storageBrowser/index.mjs.map +1 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/constants.d.ts +2 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/constants.mjs +7 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/constants.mjs.map +1 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/create.d.ts +2 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/create.mjs +34 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/create.mjs.map +1 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/index.d.ts +1 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/index.mjs +2 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/index.mjs.map +1 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/registry.d.ts +23 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/registry.mjs +54 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/registry.mjs.map +1 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/store.d.ts +35 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/store.mjs +95 -0
- package/dist/esm/storageBrowser/locationCredentialsStore/store.mjs.map +1 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.d.ts +8 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.mjs +13 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.mjs.map +1 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.d.ts +8 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.mjs +27 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.mjs.map +1 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.d.ts +19 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.mjs +30 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.mjs.map +1 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/index.d.ts +1 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/index.mjs +2 -0
- package/dist/esm/storageBrowser/managedAuthConfigAdapter/index.mjs.map +1 -0
- package/dist/esm/storageBrowser/types.d.ts +92 -0
- package/dist/esm/storageBrowser/types.mjs +2 -0
- package/dist/esm/storageBrowser/types.mjs.map +1 -0
- package/dist/esm/types/inputs.d.ts +3 -3
- package/package.json +117 -107
- package/src/errors/constants.ts +4 -0
- package/src/errors/types/validation.ts +21 -0
- package/src/providers/s3/apis/downloadData.ts +2 -2
- package/src/providers/s3/apis/internal/copy.ts +77 -23
- package/src/providers/s3/apis/internal/getProperties.ts +2 -3
- package/src/providers/s3/apis/internal/getUrl.ts +2 -2
- package/src/providers/s3/apis/internal/list.ts +3 -3
- package/src/providers/s3/apis/internal/remove.ts +2 -3
- package/src/providers/s3/apis/uploadData/multipart/initialUpload.ts +30 -1
- package/src/providers/s3/apis/uploadData/multipart/uploadCache.ts +4 -1
- package/src/providers/s3/apis/uploadData/multipart/uploadHandlers.ts +36 -17
- package/src/providers/s3/apis/uploadData/multipart/uploadPartExecutor.ts +23 -7
- package/src/providers/s3/apis/uploadData/putObjectJob.ts +22 -5
- package/src/providers/s3/apis/uploadData/validateObjectNotExists.ts +25 -0
- package/src/providers/s3/types/index.ts +2 -0
- package/src/providers/s3/types/inputs.ts +11 -1
- package/src/providers/s3/types/options.ts +51 -1
- package/src/providers/s3/utils/client/s3control/base.ts +70 -0
- package/src/providers/s3/utils/client/s3control/getDataAccess.ts +97 -0
- package/src/providers/s3/utils/client/s3control/index.ts +13 -0
- package/src/providers/s3/utils/client/s3control/listCallerAccessGrants.ts +104 -0
- package/src/providers/s3/utils/client/s3control/types.ts +213 -0
- package/src/providers/s3/utils/client/{abortMultipartUpload.ts → s3data/abortMultipartUpload.ts} +4 -3
- package/src/providers/s3/utils/client/{base.ts → s3data/base.ts} +2 -3
- package/src/providers/s3/utils/client/{completeMultipartUpload.ts → s3data/completeMultipartUpload.ts} +29 -18
- package/src/providers/s3/utils/client/{copyObject.ts → s3data/copyObject.ts} +4 -3
- package/src/providers/s3/utils/client/{createMultipartUpload.ts → s3data/createMultipartUpload.ts} +15 -8
- package/src/providers/s3/utils/client/{deleteObject.ts → s3data/deleteObject.ts} +7 -6
- package/src/providers/s3/utils/client/{getObject.ts → s3data/getObject.ts} +8 -7
- package/src/providers/s3/utils/client/{headObject.ts → s3data/headObject.ts} +4 -3
- package/src/providers/s3/utils/client/{listObjectsV2.ts → s3data/listObjectsV2.ts} +7 -6
- package/src/providers/s3/utils/client/{listParts.ts → s3data/listParts.ts} +9 -7
- package/src/providers/s3/utils/client/{putObject.ts → s3data/putObject.ts} +6 -3
- package/src/providers/s3/utils/client/{uploadPart.ts → s3data/uploadPart.ts} +13 -5
- package/src/providers/s3/utils/client/utils/index.ts +1 -0
- package/src/providers/s3/utils/client/utils/retryDecider.ts +81 -0
- package/src/providers/s3/utils/crc32.native.ts +11 -0
- package/src/providers/s3/utils/crc32.ts +51 -0
- package/src/providers/s3/utils/resolveIdentityId.ts +11 -0
- package/src/providers/s3/utils/resolveS3ConfigAndInput.ts +142 -16
- package/src/providers/s3/utils/validateStorageOperationInput.ts +5 -1
- package/src/providers/s3/utils/validateStorageOperationInputWithPrefix.ts +5 -1
- package/src/storageBrowser/apis/constants.ts +5 -0
- package/src/storageBrowser/apis/getDataAccess.ts +79 -0
- package/src/storageBrowser/apis/listCallerAccessGrants.ts +107 -0
- package/src/storageBrowser/apis/types.ts +33 -0
- package/src/storageBrowser/index.ts +25 -0
- package/src/storageBrowser/locationCredentialsStore/constants.ts +5 -0
- package/src/storageBrowser/locationCredentialsStore/create.ts +54 -0
- package/src/storageBrowser/locationCredentialsStore/index.ts +4 -0
- package/src/storageBrowser/locationCredentialsStore/registry.ts +88 -0
- package/src/storageBrowser/locationCredentialsStore/store.ts +161 -0
- package/src/storageBrowser/managedAuthConfigAdapter/createListLocationsHandler.ts +21 -0
- package/src/storageBrowser/managedAuthConfigAdapter/createLocationCredentialsHandler.ts +40 -0
- package/src/storageBrowser/managedAuthConfigAdapter/createManagedAuthConfigAdapter.ts +53 -0
- package/src/storageBrowser/managedAuthConfigAdapter/index.ts +8 -0
- package/src/storageBrowser/types.ts +117 -0
- package/src/types/inputs.ts +7 -3
- package/dist/cjs/providers/s3/utils/client/abortMultipartUpload.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/base.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/completeMultipartUpload.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/copyObject.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/createMultipartUpload.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/deleteObject.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/getObject.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/headObject.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/index.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/listObjectsV2.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/listParts.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/putObject.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/types.js.map +0 -1
- package/dist/cjs/providers/s3/utils/client/uploadPart.js.map +0 -1
- package/dist/esm/providers/s3/utils/client/abortMultipartUpload.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/base.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/completeMultipartUpload.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/copyObject.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/createMultipartUpload.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/deleteObject.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/getObject.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/headObject.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/listObjectsV2.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/listParts.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/putObject.mjs.map +0 -1
- package/dist/esm/providers/s3/utils/client/uploadPart.mjs.map +0 -1
- /package/dist/cjs/providers/s3/utils/client/{types.js → s3control/types.js} +0 -0
- /package/dist/cjs/providers/s3/utils/client/{index.js → s3data/index.js} +0 -0
- /package/dist/esm/providers/s3/utils/client/{types.mjs → s3control/types.mjs} +0 -0
- /package/dist/esm/providers/s3/utils/client/{types.mjs.map → s3control/types.mjs.map} +0 -0
- /package/dist/esm/providers/s3/utils/client/{index.d.ts → s3data/index.d.ts} +0 -0
- /package/dist/esm/providers/s3/utils/client/{index.mjs → s3data/index.mjs} +0 -0
- /package/dist/esm/providers/s3/utils/client/{index.mjs.map → s3data/index.mjs.map} +0 -0
- /package/dist/esm/providers/s3/utils/client/{types.d.ts → s3data/types.d.ts} +0 -0
- /package/src/providers/s3/utils/client/{index.ts → s3data/index.ts} +0 -0
- /package/src/providers/s3/utils/client/{types.ts → s3data/types.ts} +0 -0
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import '../../../utils/client/base.mjs';
|
|
2
|
-
import '../../../utils/client/getObject.mjs';
|
|
3
|
-
import '../../../utils/client/listObjectsV2.mjs';
|
|
4
|
-
import '../../../utils/client/putObject.mjs';
|
|
5
|
-
import { createMultipartUpload } from '../../../utils/client/createMultipartUpload.mjs';
|
|
6
|
-
import '../../../utils/client/uploadPart.mjs';
|
|
7
|
-
import '../../../utils/client/completeMultipartUpload.mjs';
|
|
8
|
-
import '../../../utils/client/listParts.mjs';
|
|
9
|
-
import '../../../utils/client/abortMultipartUpload.mjs';
|
|
10
|
-
import '../../../utils/client/copyObject.mjs';
|
|
11
|
-
import '../../../utils/client/headObject.mjs';
|
|
12
|
-
import '../../../utils/client/deleteObject.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 { createMultipartUpload } from '../../../utils/client/s3data/createMultipartUpload.mjs';
|
|
6
|
+
import '../../../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';
|
|
13
13
|
import '../../../../../errors/types/validation.mjs';
|
|
14
14
|
import '@aws-amplify/core/internals/utils';
|
|
15
15
|
import { logger } from '../../../../../utils/logger.mjs';
|
|
16
|
+
import { calculateContentCRC32 } from '../../../utils/crc32.mjs';
|
|
16
17
|
import { constructContentDisposition } from '../../../utils/constructContentDisposition.mjs';
|
|
17
18
|
import { getUploadsCacheKey, findCachedUploadParts, cacheMultipartUpload } from './uploadCache.mjs';
|
|
19
|
+
import { getDataChunker } from './getDataChunker.mjs';
|
|
18
20
|
|
|
19
21
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
20
22
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -54,9 +56,11 @@ const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType,
|
|
|
54
56
|
return {
|
|
55
57
|
uploadId: cachedUpload.uploadId,
|
|
56
58
|
cachedParts: cachedUpload.parts,
|
|
59
|
+
finalCrc32: cachedUpload.finalCrc32,
|
|
57
60
|
};
|
|
58
61
|
}
|
|
59
62
|
else {
|
|
63
|
+
const finalCrc32 = await getCombinedCrc32(data, size);
|
|
60
64
|
const { UploadId } = await createMultipartUpload({
|
|
61
65
|
...s3Config,
|
|
62
66
|
abortSignal,
|
|
@@ -67,12 +71,14 @@ const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType,
|
|
|
67
71
|
ContentDisposition: constructContentDisposition(contentDisposition),
|
|
68
72
|
ContentEncoding: contentEncoding,
|
|
69
73
|
Metadata: metadata,
|
|
74
|
+
ChecksumAlgorithm: finalCrc32 ? 'CRC32' : undefined,
|
|
70
75
|
});
|
|
71
76
|
if (size === undefined) {
|
|
72
77
|
logger.debug('uploaded data size cannot be determined, skipping cache.');
|
|
73
78
|
return {
|
|
74
79
|
uploadId: UploadId,
|
|
75
80
|
cachedParts: [],
|
|
81
|
+
finalCrc32,
|
|
76
82
|
};
|
|
77
83
|
}
|
|
78
84
|
const uploadCacheKey = getUploadsCacheKey({
|
|
@@ -87,14 +93,28 @@ const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType,
|
|
|
87
93
|
uploadId: UploadId,
|
|
88
94
|
bucket,
|
|
89
95
|
key,
|
|
96
|
+
finalCrc32,
|
|
90
97
|
fileName: data instanceof File ? data.name : '',
|
|
91
98
|
});
|
|
92
99
|
return {
|
|
93
100
|
uploadId: UploadId,
|
|
94
101
|
cachedParts: [],
|
|
102
|
+
finalCrc32,
|
|
95
103
|
};
|
|
96
104
|
}
|
|
97
105
|
};
|
|
106
|
+
const getCombinedCrc32 = async (data, size) => {
|
|
107
|
+
const crc32List = [];
|
|
108
|
+
const dataChunker = getDataChunker(data, size);
|
|
109
|
+
for (const { data: checkData } of dataChunker) {
|
|
110
|
+
const checksumArrayBuffer = (await calculateContentCRC32(checkData))
|
|
111
|
+
?.checksumArrayBuffer;
|
|
112
|
+
if (checksumArrayBuffer === undefined)
|
|
113
|
+
return undefined;
|
|
114
|
+
crc32List.push(checksumArrayBuffer);
|
|
115
|
+
}
|
|
116
|
+
return `${(await calculateContentCRC32(new Blob(crc32List)))?.checksum}-${crc32List.length}`;
|
|
117
|
+
};
|
|
98
118
|
|
|
99
119
|
export { loadOrCreateMultipartUpload };
|
|
100
120
|
//# sourceMappingURL=initialUpload.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialUpload.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/initialUpload.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { createMultipartUpload } from '../../../utils/client';\nimport { logger } from '../../../../../utils';\nimport { constructContentDisposition } from '../../../utils/constructContentDisposition';\nimport { cacheMultipartUpload, findCachedUploadParts, getUploadsCacheKey, } from './uploadCache';\n/**\n * Load the in-progress multipart upload from local storage or async storage(RN) if it exists, or create a new multipart\n * upload.\n *\n * @internal\n */\nexport const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType, bucket, accessLevel, keyPrefix, key, contentDisposition, contentEncoding, metadata, abortSignal, }) => {\n const finalKey = keyPrefix !== undefined ? keyPrefix + key : key;\n let cachedUpload;\n if (size === undefined) {\n logger.debug('uploaded data size cannot be determined, skipping cache.');\n cachedUpload = undefined;\n }\n else {\n const uploadCacheKey = getUploadsCacheKey({\n size,\n contentType,\n file: data instanceof File ? data : undefined,\n bucket,\n accessLevel,\n key,\n });\n const cachedUploadParts = await findCachedUploadParts({\n s3Config,\n cacheKey: uploadCacheKey,\n bucket,\n finalKey,\n });\n cachedUpload = cachedUploadParts\n ? { ...cachedUploadParts, uploadCacheKey }\n : undefined;\n }\n if (cachedUpload) {\n return {\n uploadId: cachedUpload.uploadId,\n cachedParts: cachedUpload.parts,\n };\n }\n else {\n const { UploadId } = await createMultipartUpload({\n ...s3Config,\n abortSignal,\n }, {\n Bucket: bucket,\n Key: finalKey,\n ContentType: contentType,\n ContentDisposition: constructContentDisposition(contentDisposition),\n ContentEncoding: contentEncoding,\n Metadata: metadata,\n });\n if (size === undefined) {\n logger.debug('uploaded data size cannot be determined, skipping cache.');\n return {\n uploadId: UploadId,\n cachedParts: [],\n };\n }\n const uploadCacheKey = getUploadsCacheKey({\n size,\n contentType,\n file: data instanceof File ? data : undefined,\n bucket,\n accessLevel,\n key,\n });\n await cacheMultipartUpload(uploadCacheKey, {\n uploadId: UploadId,\n bucket,\n key,\n fileName: data instanceof File ? data.name : '',\n });\n return {\n uploadId: UploadId,\n cachedParts: [],\n };\n }\n};\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"initialUpload.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/initialUpload.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { createMultipartUpload } from '../../../utils/client/s3data';\nimport { logger } from '../../../../../utils';\nimport { calculateContentCRC32 } from '../../../utils/crc32';\nimport { constructContentDisposition } from '../../../utils/constructContentDisposition';\nimport { cacheMultipartUpload, findCachedUploadParts, getUploadsCacheKey, } from './uploadCache';\nimport { getDataChunker } from './getDataChunker';\n/**\n * Load the in-progress multipart upload from local storage or async storage(RN) if it exists, or create a new multipart\n * upload.\n *\n * @internal\n */\nexport const loadOrCreateMultipartUpload = async ({ s3Config, data, size, contentType, bucket, accessLevel, keyPrefix, key, contentDisposition, contentEncoding, metadata, abortSignal, }) => {\n const finalKey = keyPrefix !== undefined ? keyPrefix + key : key;\n let cachedUpload;\n if (size === undefined) {\n logger.debug('uploaded data size cannot be determined, skipping cache.');\n cachedUpload = undefined;\n }\n else {\n const uploadCacheKey = getUploadsCacheKey({\n size,\n contentType,\n file: data instanceof File ? data : undefined,\n bucket,\n accessLevel,\n key,\n });\n const cachedUploadParts = await findCachedUploadParts({\n s3Config,\n cacheKey: uploadCacheKey,\n bucket,\n finalKey,\n });\n cachedUpload = cachedUploadParts\n ? { ...cachedUploadParts, uploadCacheKey }\n : undefined;\n }\n if (cachedUpload) {\n return {\n uploadId: cachedUpload.uploadId,\n cachedParts: cachedUpload.parts,\n finalCrc32: cachedUpload.finalCrc32,\n };\n }\n else {\n const finalCrc32 = await getCombinedCrc32(data, size);\n const { UploadId } = await createMultipartUpload({\n ...s3Config,\n abortSignal,\n }, {\n Bucket: bucket,\n Key: finalKey,\n ContentType: contentType,\n ContentDisposition: constructContentDisposition(contentDisposition),\n ContentEncoding: contentEncoding,\n Metadata: metadata,\n ChecksumAlgorithm: finalCrc32 ? 'CRC32' : undefined,\n });\n if (size === undefined) {\n logger.debug('uploaded data size cannot be determined, skipping cache.');\n return {\n uploadId: UploadId,\n cachedParts: [],\n finalCrc32,\n };\n }\n const uploadCacheKey = getUploadsCacheKey({\n size,\n contentType,\n file: data instanceof File ? data : undefined,\n bucket,\n accessLevel,\n key,\n });\n await cacheMultipartUpload(uploadCacheKey, {\n uploadId: UploadId,\n bucket,\n key,\n finalCrc32,\n fileName: data instanceof File ? data.name : '',\n });\n return {\n uploadId: UploadId,\n cachedParts: [],\n finalCrc32,\n };\n }\n};\nconst getCombinedCrc32 = async (data, size) => {\n const crc32List = [];\n const dataChunker = getDataChunker(data, size);\n for (const { data: checkData } of dataChunker) {\n const checksumArrayBuffer = (await calculateContentCRC32(checkData))\n ?.checksumArrayBuffer;\n if (checksumArrayBuffer === undefined)\n return undefined;\n crc32List.push(checksumArrayBuffer);\n }\n return `${(await calculateContentCRC32(new Blob(crc32List)))?.checksum}-${crc32List.length}`;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StorageAccessLevel } from '@aws-amplify/core';
|
|
2
2
|
import { ResolvedS3Config } from '../../../types/options';
|
|
3
|
-
import { Part } from '../../../utils/client';
|
|
3
|
+
import { Part } from '../../../utils/client/s3data';
|
|
4
4
|
interface FindCachedUploadPartsOptions {
|
|
5
5
|
cacheKey: string;
|
|
6
6
|
s3Config: ResolvedS3Config;
|
|
@@ -14,12 +14,14 @@ interface FindCachedUploadPartsOptions {
|
|
|
14
14
|
export declare const findCachedUploadParts: ({ cacheKey, s3Config, bucket, finalKey, }: FindCachedUploadPartsOptions) => Promise<{
|
|
15
15
|
parts: Part[];
|
|
16
16
|
uploadId: string;
|
|
17
|
+
finalCrc32?: string;
|
|
17
18
|
} | null>;
|
|
18
19
|
interface FileMetadata {
|
|
19
20
|
bucket: string;
|
|
20
21
|
fileName: string;
|
|
21
22
|
key: string;
|
|
22
23
|
uploadId: string;
|
|
24
|
+
finalCrc32?: string;
|
|
23
25
|
lastTouched: number;
|
|
24
26
|
}
|
|
25
27
|
interface UploadsCacheKeyOptions {
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { defaultStorage } from '@aws-amplify/core';
|
|
2
2
|
import { UPLOADS_STORAGE_KEY } from '../../../utils/constants.mjs';
|
|
3
|
-
import '../../../utils/client/base.mjs';
|
|
4
|
-
import '../../../utils/client/getObject.mjs';
|
|
5
|
-
import '../../../utils/client/listObjectsV2.mjs';
|
|
6
|
-
import '../../../utils/client/putObject.mjs';
|
|
7
|
-
import '../../../utils/client/createMultipartUpload.mjs';
|
|
8
|
-
import '../../../utils/client/uploadPart.mjs';
|
|
9
|
-
import '../../../utils/client/completeMultipartUpload.mjs';
|
|
10
|
-
import { listParts } from '../../../utils/client/listParts.mjs';
|
|
11
|
-
import '../../../utils/client/abortMultipartUpload.mjs';
|
|
12
|
-
import '../../../utils/client/copyObject.mjs';
|
|
13
|
-
import '../../../utils/client/headObject.mjs';
|
|
14
|
-
import '../../../utils/client/deleteObject.mjs';
|
|
3
|
+
import '../../../utils/client/s3data/base.mjs';
|
|
4
|
+
import '../../../utils/client/s3data/getObject.mjs';
|
|
5
|
+
import '../../../utils/client/s3data/listObjectsV2.mjs';
|
|
6
|
+
import '../../../utils/client/s3data/putObject.mjs';
|
|
7
|
+
import '../../../utils/client/s3data/createMultipartUpload.mjs';
|
|
8
|
+
import '../../../utils/client/s3data/uploadPart.mjs';
|
|
9
|
+
import '../../../utils/client/s3data/completeMultipartUpload.mjs';
|
|
10
|
+
import { listParts } from '../../../utils/client/s3data/listParts.mjs';
|
|
11
|
+
import '../../../utils/client/s3data/abortMultipartUpload.mjs';
|
|
12
|
+
import '../../../utils/client/s3data/copyObject.mjs';
|
|
13
|
+
import '../../../utils/client/s3data/headObject.mjs';
|
|
14
|
+
import '../../../utils/client/s3data/deleteObject.mjs';
|
|
15
15
|
import '../../../../../errors/types/validation.mjs';
|
|
16
16
|
import '@aws-amplify/core/internals/utils';
|
|
17
17
|
import { logger } from '../../../../../utils/logger.mjs';
|
|
@@ -42,6 +42,7 @@ const findCachedUploadParts = async ({ cacheKey, s3Config, bucket, finalKey, })
|
|
|
42
42
|
return {
|
|
43
43
|
parts: Parts,
|
|
44
44
|
uploadId: cachedUpload.uploadId,
|
|
45
|
+
finalCrc32: cachedUpload.finalCrc32,
|
|
45
46
|
};
|
|
46
47
|
}
|
|
47
48
|
catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadCache.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/uploadCache.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { defaultStorage, } from '@aws-amplify/core';\nimport { UPLOADS_STORAGE_KEY } from '../../../utils/constants';\nimport { listParts } from '../../../utils/client';\nimport { logger } from '../../../../../utils';\nconst ONE_HOUR = 1000 * 60 * 60;\n/**\n * Find the cached multipart upload id and get the parts that have been uploaded\n * with ListParts API. If the cached upload is expired(1 hour), return null.\n */\nexport const findCachedUploadParts = async ({ cacheKey, s3Config, bucket, finalKey, }) => {\n const cachedUploads = await listCachedUploadTasks(defaultStorage);\n if (!cachedUploads[cacheKey] ||\n cachedUploads[cacheKey].lastTouched < Date.now() - ONE_HOUR // Uploads are cached for 1 hour\n ) {\n return null;\n }\n const cachedUpload = cachedUploads[cacheKey];\n cachedUpload.lastTouched = Date.now();\n await defaultStorage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(cachedUploads));\n try {\n const { Parts = [] } = await listParts(s3Config, {\n Bucket: bucket,\n Key: finalKey,\n UploadId: cachedUpload.uploadId,\n });\n return {\n parts: Parts,\n uploadId: cachedUpload.uploadId,\n };\n }\n catch (e) {\n logger.debug('failed to list cached parts, removing cached upload.');\n await removeCachedUpload(cacheKey);\n return null;\n }\n};\nconst listCachedUploadTasks = async (kvStorage) => {\n try {\n return JSON.parse((await kvStorage.getItem(UPLOADS_STORAGE_KEY)) ?? '{}');\n }\n catch (e) {\n logger.debug('failed to parse cached uploads record.');\n return {};\n }\n};\n/**\n * Get the cache key of a multipart upload. Data source cached by different: size, content type, bucket, access level,\n * key. If the data source is a File instance, the upload is additionally indexed by file name and last modified time.\n * So the library always created a new multipart upload if the file is modified.\n */\nexport const getUploadsCacheKey = ({ file, size, contentType, bucket, accessLevel, key, }) => {\n let levelStr;\n const resolvedContentType = contentType ?? file?.type ?? 'application/octet-stream';\n // If no access level is defined, we're using custom gen2 access rules\n if (accessLevel === undefined) {\n levelStr = 'custom';\n }\n else {\n levelStr = accessLevel === 'guest' ? 'public' : accessLevel;\n }\n const baseId = `${size}_${resolvedContentType}_${bucket}_${levelStr}_${key}`;\n if (file) {\n return `${file.name}_${file.lastModified}_${baseId}`;\n }\n else {\n return baseId;\n }\n};\nexport const cacheMultipartUpload = async (cacheKey, fileMetadata) => {\n const cachedUploads = await listCachedUploadTasks(defaultStorage);\n cachedUploads[cacheKey] = {\n ...fileMetadata,\n lastTouched: Date.now(),\n };\n await defaultStorage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(cachedUploads));\n};\nexport const removeCachedUpload = async (cacheKey) => {\n const cachedUploads = await listCachedUploadTasks(defaultStorage);\n delete cachedUploads[cacheKey];\n await defaultStorage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(cachedUploads));\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uploadCache.mjs","sources":["../../../../../../../src/providers/s3/apis/uploadData/multipart/uploadCache.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { defaultStorage, } from '@aws-amplify/core';\nimport { UPLOADS_STORAGE_KEY } from '../../../utils/constants';\nimport { listParts } from '../../../utils/client/s3data';\nimport { logger } from '../../../../../utils';\nconst ONE_HOUR = 1000 * 60 * 60;\n/**\n * Find the cached multipart upload id and get the parts that have been uploaded\n * with ListParts API. If the cached upload is expired(1 hour), return null.\n */\nexport const findCachedUploadParts = async ({ cacheKey, s3Config, bucket, finalKey, }) => {\n const cachedUploads = await listCachedUploadTasks(defaultStorage);\n if (!cachedUploads[cacheKey] ||\n cachedUploads[cacheKey].lastTouched < Date.now() - ONE_HOUR // Uploads are cached for 1 hour\n ) {\n return null;\n }\n const cachedUpload = cachedUploads[cacheKey];\n cachedUpload.lastTouched = Date.now();\n await defaultStorage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(cachedUploads));\n try {\n const { Parts = [] } = await listParts(s3Config, {\n Bucket: bucket,\n Key: finalKey,\n UploadId: cachedUpload.uploadId,\n });\n return {\n parts: Parts,\n uploadId: cachedUpload.uploadId,\n finalCrc32: cachedUpload.finalCrc32,\n };\n }\n catch (e) {\n logger.debug('failed to list cached parts, removing cached upload.');\n await removeCachedUpload(cacheKey);\n return null;\n }\n};\nconst listCachedUploadTasks = async (kvStorage) => {\n try {\n return JSON.parse((await kvStorage.getItem(UPLOADS_STORAGE_KEY)) ?? '{}');\n }\n catch (e) {\n logger.debug('failed to parse cached uploads record.');\n return {};\n }\n};\n/**\n * Get the cache key of a multipart upload. Data source cached by different: size, content type, bucket, access level,\n * key. If the data source is a File instance, the upload is additionally indexed by file name and last modified time.\n * So the library always created a new multipart upload if the file is modified.\n */\nexport const getUploadsCacheKey = ({ file, size, contentType, bucket, accessLevel, key, }) => {\n let levelStr;\n const resolvedContentType = contentType ?? file?.type ?? 'application/octet-stream';\n // If no access level is defined, we're using custom gen2 access rules\n if (accessLevel === undefined) {\n levelStr = 'custom';\n }\n else {\n levelStr = accessLevel === 'guest' ? 'public' : accessLevel;\n }\n const baseId = `${size}_${resolvedContentType}_${bucket}_${levelStr}_${key}`;\n if (file) {\n return `${file.name}_${file.lastModified}_${baseId}`;\n }\n else {\n return baseId;\n }\n};\nexport const cacheMultipartUpload = async (cacheKey, fileMetadata) => {\n const cachedUploads = await listCachedUploadTasks(defaultStorage);\n cachedUploads[cacheKey] = {\n ...fileMetadata,\n lastTouched: Date.now(),\n };\n await defaultStorage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(cachedUploads));\n};\nexport const removeCachedUpload = async (cacheKey) => {\n const cachedUploads = await listCachedUploadTasks(defaultStorage);\n delete cachedUploads[cacheKey];\n await defaultStorage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(cachedUploads));\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -13,19 +13,20 @@ import '../../../../../errors/types/validation.mjs';
|
|
|
13
13
|
import { logger } from '../../../../../utils/logger.mjs';
|
|
14
14
|
import { validateStorageOperationInput } from '../../../utils/validateStorageOperationInput.mjs';
|
|
15
15
|
import { STORAGE_INPUT_KEY, DEFAULT_QUEUE_SIZE, DEFAULT_ACCESS_LEVEL } from '../../../utils/constants.mjs';
|
|
16
|
-
import '../../../utils/client/base.mjs';
|
|
17
|
-
import '../../../utils/client/getObject.mjs';
|
|
18
|
-
import '../../../utils/client/listObjectsV2.mjs';
|
|
19
|
-
import '../../../utils/client/putObject.mjs';
|
|
20
|
-
import '../../../utils/client/createMultipartUpload.mjs';
|
|
21
|
-
import '../../../utils/client/uploadPart.mjs';
|
|
22
|
-
import { completeMultipartUpload } from '../../../utils/client/completeMultipartUpload.mjs';
|
|
23
|
-
import '../../../utils/client/listParts.mjs';
|
|
24
|
-
import { abortMultipartUpload } from '../../../utils/client/abortMultipartUpload.mjs';
|
|
25
|
-
import '../../../utils/client/copyObject.mjs';
|
|
26
|
-
import { headObject } from '../../../utils/client/headObject.mjs';
|
|
27
|
-
import '../../../utils/client/deleteObject.mjs';
|
|
16
|
+
import '../../../utils/client/s3data/base.mjs';
|
|
17
|
+
import '../../../utils/client/s3data/getObject.mjs';
|
|
18
|
+
import '../../../utils/client/s3data/listObjectsV2.mjs';
|
|
19
|
+
import '../../../utils/client/s3data/putObject.mjs';
|
|
20
|
+
import '../../../utils/client/s3data/createMultipartUpload.mjs';
|
|
21
|
+
import '../../../utils/client/s3data/uploadPart.mjs';
|
|
22
|
+
import { completeMultipartUpload } from '../../../utils/client/s3data/completeMultipartUpload.mjs';
|
|
23
|
+
import '../../../utils/client/s3data/listParts.mjs';
|
|
24
|
+
import { abortMultipartUpload } from '../../../utils/client/s3data/abortMultipartUpload.mjs';
|
|
25
|
+
import '../../../utils/client/s3data/copyObject.mjs';
|
|
26
|
+
import { headObject } from '../../../utils/client/s3data/headObject.mjs';
|
|
27
|
+
import '../../../utils/client/s3data/deleteObject.mjs';
|
|
28
28
|
import { getStorageUserAgentValue } from '../../../utils/userAgent.mjs';
|
|
29
|
+
import { validateObjectNotExists } from '../validateObjectNotExists.mjs';
|
|
29
30
|
import { uploadPartExecutor } from './uploadPartExecutor.mjs';
|
|
30
31
|
import { getUploadsCacheKey, removeCachedUpload } from './uploadCache.mjs';
|
|
31
32
|
import { getConcurrentUploadsProgressTracker } from './progressTracker.mjs';
|
|
@@ -58,14 +59,14 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
58
59
|
let isAbortSignalFromPause = false;
|
|
59
60
|
const startUpload = async () => {
|
|
60
61
|
const { options: uploadDataOptions, data } = uploadDataInput;
|
|
61
|
-
const resolvedS3Options = await resolveS3ConfigAndInput(Amplify,
|
|
62
|
+
const resolvedS3Options = await resolveS3ConfigAndInput(Amplify, uploadDataInput);
|
|
62
63
|
abortController = new AbortController();
|
|
63
64
|
isAbortSignalFromPause = false;
|
|
64
65
|
resolvedS3Config = resolvedS3Options.s3Config;
|
|
65
66
|
resolvedBucket = resolvedS3Options.bucket;
|
|
66
67
|
resolvedIdentityId = resolvedS3Options.identityId;
|
|
67
68
|
const { inputType, objectKey } = validateStorageOperationInput(uploadDataInput, resolvedIdentityId);
|
|
68
|
-
const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, onProgress, } = uploadDataOptions ?? {};
|
|
69
|
+
const { contentDisposition, contentEncoding, contentType = 'application/octet-stream', metadata, preventOverwrite, onProgress, } = uploadDataOptions ?? {};
|
|
69
70
|
finalKey = objectKey;
|
|
70
71
|
// Resolve "key" specific options
|
|
71
72
|
if (inputType === STORAGE_INPUT_KEY) {
|
|
@@ -76,7 +77,7 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
76
77
|
resolvedAccessLevel = resolveAccessLevel(accessLevel);
|
|
77
78
|
}
|
|
78
79
|
if (!inProgressUpload) {
|
|
79
|
-
const { uploadId, cachedParts } = await loadOrCreateMultipartUpload({
|
|
80
|
+
const { uploadId, cachedParts, finalCrc32 } = await loadOrCreateMultipartUpload({
|
|
80
81
|
s3Config: resolvedS3Config,
|
|
81
82
|
accessLevel: resolvedAccessLevel,
|
|
82
83
|
bucket: resolvedBucket,
|
|
@@ -93,6 +94,7 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
93
94
|
inProgressUpload = {
|
|
94
95
|
uploadId,
|
|
95
96
|
completedParts: cachedParts,
|
|
97
|
+
finalCrc32,
|
|
96
98
|
};
|
|
97
99
|
}
|
|
98
100
|
uploadCacheKey = size
|
|
@@ -107,10 +109,11 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
107
109
|
: undefined;
|
|
108
110
|
const dataChunker = getDataChunker(data, size);
|
|
109
111
|
const completedPartNumberSet = new Set(inProgressUpload.completedParts.map(({ PartNumber }) => PartNumber));
|
|
110
|
-
const onPartUploadCompletion = (partNumber, eTag) => {
|
|
112
|
+
const onPartUploadCompletion = (partNumber, eTag, crc32) => {
|
|
111
113
|
inProgressUpload?.completedParts.push({
|
|
112
114
|
PartNumber: partNumber,
|
|
113
115
|
ETag: eTag,
|
|
116
|
+
ChecksumCRC32: crc32,
|
|
114
117
|
});
|
|
115
118
|
};
|
|
116
119
|
const concurrentUploadsProgressTracker = getConcurrentUploadsProgressTracker({
|
|
@@ -130,9 +133,16 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
130
133
|
onPartUploadCompletion,
|
|
131
134
|
onProgress: concurrentUploadsProgressTracker.getOnProgressListener(),
|
|
132
135
|
isObjectLockEnabled: resolvedS3Options.isObjectLockEnabled,
|
|
136
|
+
useCRC32Checksum: Boolean(inProgressUpload.finalCrc32),
|
|
133
137
|
}));
|
|
134
138
|
}
|
|
135
139
|
await Promise.all(concurrentUploadPartExecutors);
|
|
140
|
+
if (preventOverwrite) {
|
|
141
|
+
await validateObjectNotExists(resolvedS3Config, {
|
|
142
|
+
Bucket: resolvedBucket,
|
|
143
|
+
Key: finalKey,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
136
146
|
const { ETag: eTag } = await completeMultipartUpload({
|
|
137
147
|
...resolvedS3Config,
|
|
138
148
|
abortSignal: abortController.signal,
|
|
@@ -141,6 +151,7 @@ const getMultipartUploadHandlers = (uploadDataInput, size) => {
|
|
|
141
151
|
Bucket: resolvedBucket,
|
|
142
152
|
Key: finalKey,
|
|
143
153
|
UploadId: inProgressUpload.uploadId,
|
|
154
|
+
ChecksumCRC32: inProgressUpload.finalCrc32,
|
|
144
155
|
MultipartUpload: {
|
|
145
156
|
Parts: inProgressUpload.completedParts.sort((partA, partB) => partA.PartNumber - partB.PartNumber),
|
|
146
157
|
},
|
|
@@ -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
|
-
|
|
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
|
|
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/
|
|
6
|
-
import '../../../utils/
|
|
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
|
-
|
|
52
|
-
|
|
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 {
|
|
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,
|
|
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:
|
|
51
|
-
|
|
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,
|
|
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;;;;"}
|