@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.
- package/dist/cjs/errors/constants.js +8 -0
- package/dist/cjs/errors/constants.js.map +1 -0
- package/dist/cjs/errors/types/validation.js +12 -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 +38 -6
- 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 +70 -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 +63 -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} +2 -2
- 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} +25 -3
- 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} +16 -11
- 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} +2 -2
- 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} +8 -3
- 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} +2 -2
- 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} +3 -3
- 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} +2 -2
- 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} +2 -2
- 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} +3 -2
- 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} +3 -2
- 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} +4 -3
- package/dist/cjs/providers/s3/utils/client/s3data/uploadPart.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/utils/createRetryDecider.js +57 -0
- package/dist/cjs/providers/s3/utils/client/utils/createRetryDecider.js.map +1 -0
- package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js +34 -1
- package/dist/cjs/providers/s3/utils/client/utils/deserializeHelpers.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/index.js +4 -2
- package/dist/cjs/providers/s3/utils/client/utils/index.js.map +1 -1
- package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js +20 -6
- package/dist/cjs/providers/s3/utils/client/utils/parsePayload.js.map +1 -1
- 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 +59 -13
- 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 +69 -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 +4 -1
- package/dist/esm/errors/types/validation.mjs +12 -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 +48 -16
- 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/inputs.d.ts +5 -1
- package/dist/esm/providers/s3/types/options.d.ts +24 -1
- package/dist/esm/providers/s3/utils/client/s3control/base.d.ts +56 -0
- package/dist/esm/providers/s3/utils/client/s3control/base.mjs +74 -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 +67 -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 +188 -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} +5 -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} +23 -1
- package/dist/esm/providers/s3/utils/client/{base.mjs → s3data/base.mjs} +29 -6
- 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} +19 -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} +5 -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 -8
- 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} +5 -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} +6 -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} +7 -7
- package/dist/esm/providers/s3/utils/client/s3data/uploadPart.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/utils/createRetryDecider.d.ts +22 -0
- package/dist/esm/providers/s3/utils/client/utils/createRetryDecider.mjs +55 -0
- package/dist/esm/providers/s3/utils/client/utils/createRetryDecider.mjs.map +1 -0
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.d.ts +17 -0
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs +33 -1
- package/dist/esm/providers/s3/utils/client/utils/deserializeHelpers.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/index.d.ts +2 -1
- package/dist/esm/providers/s3/utils/client/utils/index.mjs +2 -1
- package/dist/esm/providers/s3/utils/client/utils/index.mjs.map +1 -1
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.d.ts +16 -1
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs +19 -5
- package/dist/esm/providers/s3/utils/client/utils/parsePayload.mjs.map +1 -1
- 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 +10 -2
- package/dist/esm/providers/s3/utils/resolveS3ConfigAndInput.mjs +57 -11
- 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 +69 -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/package.json +117 -107
- package/src/errors/constants.ts +4 -0
- package/src/errors/types/validation.ts +12 -0
- package/src/providers/s3/apis/downloadData.ts +2 -2
- package/src/providers/s3/apis/internal/copy.ts +42 -12
- 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/inputs.ts +7 -1
- package/src/providers/s3/types/options.ts +35 -1
- package/src/providers/s3/utils/client/s3control/base.ts +97 -0
- package/src/providers/s3/utils/client/s3control/getDataAccess.ts +96 -0
- package/src/providers/s3/utils/client/s3control/index.ts +13 -0
- package/src/providers/s3/utils/client/s3control/listCallerAccessGrants.ts +107 -0
- package/src/providers/s3/utils/client/s3control/types.ts +216 -0
- package/src/providers/s3/utils/client/{abortMultipartUpload.ts → s3data/abortMultipartUpload.ts} +4 -4
- package/src/providers/s3/utils/client/{base.ts → s3data/base.ts} +26 -3
- package/src/providers/s3/utils/client/{completeMultipartUpload.ts → s3data/completeMultipartUpload.ts} +28 -19
- package/src/providers/s3/utils/client/{copyObject.ts → s3data/copyObject.ts} +4 -4
- package/src/providers/s3/utils/client/{createMultipartUpload.ts → s3data/createMultipartUpload.ts} +15 -9
- package/src/providers/s3/utils/client/{deleteObject.ts → s3data/deleteObject.ts} +7 -7
- package/src/providers/s3/utils/client/{getObject.ts → s3data/getObject.ts} +13 -9
- package/src/providers/s3/utils/client/{headObject.ts → s3data/headObject.ts} +4 -4
- package/src/providers/s3/utils/client/{listObjectsV2.ts → s3data/listObjectsV2.ts} +7 -7
- package/src/providers/s3/utils/client/{listParts.ts → s3data/listParts.ts} +9 -8
- package/src/providers/s3/utils/client/{putObject.ts → s3data/putObject.ts} +6 -4
- package/src/providers/s3/utils/client/{uploadPart.ts → s3data/uploadPart.ts} +13 -6
- package/src/providers/s3/utils/client/utils/createRetryDecider.ts +96 -0
- package/src/providers/s3/utils/client/utils/deserializeHelpers.ts +41 -0
- package/src/providers/s3/utils/client/utils/index.ts +2 -1
- package/src/providers/s3/utils/client/utils/parsePayload.ts +36 -18
- 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 +109 -14
- 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 +94 -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/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
|
@@ -2,11 +2,25 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { AmplifyClassV6, StorageAccessLevel } from '@aws-amplify/core';
|
|
5
|
+
import { CredentialsProviderOptions } from '@aws-amplify/core/internals/aws-client-utils';
|
|
5
6
|
|
|
6
7
|
import { assertValidationError } from '../../../errors/utils/assertValidationError';
|
|
7
8
|
import { StorageValidationErrorCode } from '../../../errors/types/validation';
|
|
8
9
|
import { resolvePrefix as defaultPrefixResolver } from '../../../utils/resolvePrefix';
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
StorageOperationInputWithKey,
|
|
12
|
+
StorageOperationInputWithPath,
|
|
13
|
+
StorageOperationInputWithPrefix,
|
|
14
|
+
} from '../../../types/inputs';
|
|
15
|
+
import { StorageError } from '../../../errors/StorageError';
|
|
16
|
+
import { CopyInput, CopyWithPathInput } from '../types';
|
|
17
|
+
import { INVALID_STORAGE_INPUT } from '../../../errors/constants';
|
|
18
|
+
import {
|
|
19
|
+
BucketInfo,
|
|
20
|
+
LocationCredentialsProvider,
|
|
21
|
+
ResolvedS3Config,
|
|
22
|
+
StorageBucket,
|
|
23
|
+
} from '../types/options';
|
|
10
24
|
|
|
11
25
|
import { DEFAULT_ACCESS_LEVEL, LOCAL_TESTING_S3_ENDPOINT } from './constants';
|
|
12
26
|
|
|
@@ -14,6 +28,7 @@ interface S3ApiOptions {
|
|
|
14
28
|
accessLevel?: StorageAccessLevel;
|
|
15
29
|
targetIdentityId?: string;
|
|
16
30
|
useAccelerateEndpoint?: boolean;
|
|
31
|
+
locationCredentialsProvider?: LocationCredentialsProvider;
|
|
17
32
|
bucket?: StorageBucket;
|
|
18
33
|
}
|
|
19
34
|
|
|
@@ -24,6 +39,16 @@ interface ResolvedS3ConfigAndInput {
|
|
|
24
39
|
isObjectLockEnabled?: boolean;
|
|
25
40
|
identityId?: string;
|
|
26
41
|
}
|
|
42
|
+
export type DeprecatedStorageInput =
|
|
43
|
+
| StorageOperationInputWithKey
|
|
44
|
+
| StorageOperationInputWithPrefix
|
|
45
|
+
| CopyInput;
|
|
46
|
+
|
|
47
|
+
export type CallbackPathStorageInput =
|
|
48
|
+
| StorageOperationInputWithPath
|
|
49
|
+
| CopyWithPathInput;
|
|
50
|
+
|
|
51
|
+
type StorageInput = DeprecatedStorageInput | CallbackPathStorageInput;
|
|
27
52
|
|
|
28
53
|
/**
|
|
29
54
|
* resolve the common input options for S3 API handlers from Amplify configuration and library options.
|
|
@@ -38,23 +63,35 @@ interface ResolvedS3ConfigAndInput {
|
|
|
38
63
|
*/
|
|
39
64
|
export const resolveS3ConfigAndInput = async (
|
|
40
65
|
amplify: AmplifyClassV6,
|
|
41
|
-
|
|
66
|
+
apiInput?: StorageInput & { options?: S3ApiOptions },
|
|
42
67
|
): Promise<ResolvedS3ConfigAndInput> => {
|
|
68
|
+
const { options: apiOptions } = apiInput ?? {};
|
|
43
69
|
/**
|
|
44
70
|
* IdentityId is always cached in memory so we can safely make calls here. It
|
|
45
71
|
* should be stable even for unauthenticated users, regardless of credentials.
|
|
46
72
|
*/
|
|
47
73
|
const { identityId } = await amplify.Auth.fetchAuthSession();
|
|
48
|
-
assertValidationError(!!identityId, StorageValidationErrorCode.NoIdentityId);
|
|
49
74
|
|
|
50
75
|
/**
|
|
51
76
|
* A credentials provider function instead of a static credentials object is
|
|
52
77
|
* used because the long-running tasks like multipart upload may span over the
|
|
53
78
|
* credentials expiry. Auth.fetchAuthSession() automatically refreshes the
|
|
54
79
|
* credentials if they are expired.
|
|
80
|
+
*
|
|
81
|
+
* The optional forceRefresh option is set when the S3 service returns expired
|
|
82
|
+
* tokens error in the previous API call attempt.
|
|
55
83
|
*/
|
|
56
|
-
const credentialsProvider = async () => {
|
|
57
|
-
|
|
84
|
+
const credentialsProvider = async (options?: CredentialsProviderOptions) => {
|
|
85
|
+
if (isLocationCredentialsProvider(apiOptions)) {
|
|
86
|
+
assertStorageInput(apiInput);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// TODO: forceRefresh option of fetchAuthSession would refresh both tokens and
|
|
90
|
+
// AWS credentials. So we do not support forceRefreshing from the Auth until
|
|
91
|
+
// we support refreshing only the credentials.
|
|
92
|
+
const { credentials } = isLocationCredentialsProvider(apiOptions)
|
|
93
|
+
? await apiOptions.locationCredentialsProvider(options)
|
|
94
|
+
: await amplify.Auth.fetchAuthSession();
|
|
58
95
|
assertValidationError(
|
|
59
96
|
!!credentials,
|
|
60
97
|
StorageValidationErrorCode.NoCredentials,
|
|
@@ -82,15 +119,14 @@ export const resolveS3ConfigAndInput = async (
|
|
|
82
119
|
isObjectLockEnabled,
|
|
83
120
|
} = amplify.libraryOptions?.Storage?.S3 ?? {};
|
|
84
121
|
|
|
85
|
-
const
|
|
86
|
-
accessLevel
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
});
|
|
122
|
+
const accessLevel =
|
|
123
|
+
apiOptions?.accessLevel ?? defaultAccessLevel ?? DEFAULT_ACCESS_LEVEL;
|
|
124
|
+
const targetIdentityId =
|
|
125
|
+
accessLevel === 'protected'
|
|
126
|
+
? (apiOptions?.targetIdentityId ?? identityId)
|
|
127
|
+
: identityId;
|
|
128
|
+
|
|
129
|
+
const keyPrefix = await prefixResolver({ accessLevel, targetIdentityId });
|
|
94
130
|
|
|
95
131
|
return {
|
|
96
132
|
s3Config: {
|
|
@@ -111,6 +147,65 @@ export const resolveS3ConfigAndInput = async (
|
|
|
111
147
|
};
|
|
112
148
|
};
|
|
113
149
|
|
|
150
|
+
const isLocationCredentialsProvider = (
|
|
151
|
+
options?: S3ApiOptions,
|
|
152
|
+
): options is S3ApiOptions & {
|
|
153
|
+
locationCredentialsProvider: LocationCredentialsProvider;
|
|
154
|
+
} => {
|
|
155
|
+
return !!options?.locationCredentialsProvider;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
const isInputWithCallbackPath = (input?: CallbackPathStorageInput) => {
|
|
159
|
+
return (
|
|
160
|
+
((input as StorageOperationInputWithPath)?.path &&
|
|
161
|
+
typeof (input as StorageOperationInputWithPath).path === 'function') ||
|
|
162
|
+
((input as CopyWithPathInput)?.destination?.path &&
|
|
163
|
+
typeof (input as CopyWithPathInput).destination?.path === 'function') ||
|
|
164
|
+
((input as CopyWithPathInput)?.source?.path &&
|
|
165
|
+
typeof (input as CopyWithPathInput).source?.path === 'function')
|
|
166
|
+
);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const isDeprecatedInput = (
|
|
170
|
+
input?: StorageInput,
|
|
171
|
+
): input is DeprecatedStorageInput => {
|
|
172
|
+
return (
|
|
173
|
+
isInputWithKey(input) ||
|
|
174
|
+
isInputWithPrefix(input) ||
|
|
175
|
+
isInputWithCopySourceOrDestination(input)
|
|
176
|
+
);
|
|
177
|
+
};
|
|
178
|
+
const assertStorageInput = (input?: StorageInput) => {
|
|
179
|
+
if (isDeprecatedInput(input) || isInputWithCallbackPath(input)) {
|
|
180
|
+
throw new StorageError({
|
|
181
|
+
name: INVALID_STORAGE_INPUT,
|
|
182
|
+
message: 'The input needs to have a path as a string value.',
|
|
183
|
+
recoverySuggestion:
|
|
184
|
+
'Please provide a valid path as a string value for the input.',
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
const isInputWithKey = (
|
|
190
|
+
input?: StorageInput,
|
|
191
|
+
): input is StorageOperationInputWithKey => {
|
|
192
|
+
return !!(typeof (input as StorageOperationInputWithKey).key === 'string');
|
|
193
|
+
};
|
|
194
|
+
const isInputWithPrefix = (
|
|
195
|
+
input?: StorageInput,
|
|
196
|
+
): input is StorageOperationInputWithPrefix => {
|
|
197
|
+
return !!(
|
|
198
|
+
typeof (input as StorageOperationInputWithPrefix).prefix === 'string'
|
|
199
|
+
);
|
|
200
|
+
};
|
|
201
|
+
const isInputWithCopySourceOrDestination = (
|
|
202
|
+
input?: StorageInput,
|
|
203
|
+
): input is CopyInput => {
|
|
204
|
+
return !!(
|
|
205
|
+
typeof (input as CopyInput).source?.key === 'string' ||
|
|
206
|
+
typeof (input as CopyInput).destination?.key === 'string'
|
|
207
|
+
);
|
|
208
|
+
};
|
|
114
209
|
const resolveBucketConfig = (
|
|
115
210
|
apiOptions: S3ApiOptions,
|
|
116
211
|
buckets: Record<string, BucketInfo> | undefined,
|
|
@@ -7,6 +7,7 @@ import { StorageValidationErrorCode } from '../../../errors/types/validation';
|
|
|
7
7
|
|
|
8
8
|
import { isInputWithPath } from './isInputWithPath';
|
|
9
9
|
import { STORAGE_INPUT_KEY, STORAGE_INPUT_PATH } from './constants';
|
|
10
|
+
import { resolveIdentityId } from './resolveIdentityId';
|
|
10
11
|
|
|
11
12
|
export const validateStorageOperationInput = (
|
|
12
13
|
input: Input,
|
|
@@ -22,7 +23,10 @@ export const validateStorageOperationInput = (
|
|
|
22
23
|
|
|
23
24
|
if (isInputWithPath(input)) {
|
|
24
25
|
const { path } = input;
|
|
25
|
-
const objectKey =
|
|
26
|
+
const objectKey =
|
|
27
|
+
typeof path === 'string'
|
|
28
|
+
? path
|
|
29
|
+
: path({ identityId: resolveIdentityId(identityId) });
|
|
26
30
|
|
|
27
31
|
assertValidationError(
|
|
28
32
|
!objectKey.startsWith('/'),
|
|
@@ -9,6 +9,7 @@ import { assertValidationError } from '../../../errors/utils/assertValidationErr
|
|
|
9
9
|
import { StorageValidationErrorCode } from '../../../errors/types/validation';
|
|
10
10
|
|
|
11
11
|
import { STORAGE_INPUT_PATH, STORAGE_INPUT_PREFIX } from './constants';
|
|
12
|
+
import { resolveIdentityId } from './resolveIdentityId';
|
|
12
13
|
|
|
13
14
|
// Local assertion function with StorageOperationInputWithPrefixPath as Input
|
|
14
15
|
const _isInputWithPath = (
|
|
@@ -28,7 +29,10 @@ export const validateStorageOperationInputWithPrefix = (
|
|
|
28
29
|
);
|
|
29
30
|
if (_isInputWithPath(input)) {
|
|
30
31
|
const { path } = input;
|
|
31
|
-
const objectKey =
|
|
32
|
+
const objectKey =
|
|
33
|
+
typeof path === 'string'
|
|
34
|
+
? path
|
|
35
|
+
: path({ identityId: resolveIdentityId(identityId) });
|
|
32
36
|
|
|
33
37
|
// Assert on no leading slash in the path parameter
|
|
34
38
|
assertValidationError(
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
AmplifyErrorCode,
|
|
6
|
+
StorageAction,
|
|
7
|
+
} from '@aws-amplify/core/internals/utils';
|
|
8
|
+
import { CredentialsProviderOptions } from '@aws-amplify/core/internals/aws-client-utils';
|
|
9
|
+
|
|
10
|
+
import { getStorageUserAgentValue } from '../../providers/s3/utils/userAgent';
|
|
11
|
+
import { getDataAccess as getDataAccessClient } from '../../providers/s3/utils/client/s3control';
|
|
12
|
+
import { StorageError } from '../../errors/StorageError';
|
|
13
|
+
import { logger } from '../../utils';
|
|
14
|
+
|
|
15
|
+
import { GetDataAccessInput, GetDataAccessOutput } from './types';
|
|
16
|
+
import { DEFAULT_CRED_TTL } from './constants';
|
|
17
|
+
|
|
18
|
+
export const getDataAccess = async (
|
|
19
|
+
input: GetDataAccessInput,
|
|
20
|
+
): Promise<GetDataAccessOutput> => {
|
|
21
|
+
const targetType = input.scope.endsWith('*') ? undefined : 'Object';
|
|
22
|
+
const clientCredentialsProvider = async (
|
|
23
|
+
options?: CredentialsProviderOptions,
|
|
24
|
+
) => {
|
|
25
|
+
const { credentials } = await input.credentialsProvider(options);
|
|
26
|
+
|
|
27
|
+
return credentials;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const result = await getDataAccessClient(
|
|
31
|
+
{
|
|
32
|
+
credentials: clientCredentialsProvider,
|
|
33
|
+
region: input.region,
|
|
34
|
+
userAgentValue: getStorageUserAgentValue(StorageAction.GetDataAccess),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
AccountId: input.accountId,
|
|
38
|
+
Target: input.scope,
|
|
39
|
+
Permission: input.permission,
|
|
40
|
+
TargetType: targetType,
|
|
41
|
+
DurationSeconds: DEFAULT_CRED_TTL,
|
|
42
|
+
},
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
const grantCredentials = result.Credentials;
|
|
46
|
+
|
|
47
|
+
// Ensure that S3 returned credentials (this shouldn't happen)
|
|
48
|
+
if (
|
|
49
|
+
!grantCredentials ||
|
|
50
|
+
!grantCredentials.AccessKeyId ||
|
|
51
|
+
!grantCredentials.SecretAccessKey ||
|
|
52
|
+
!grantCredentials.SessionToken ||
|
|
53
|
+
!grantCredentials.Expiration
|
|
54
|
+
) {
|
|
55
|
+
throw new StorageError({
|
|
56
|
+
name: AmplifyErrorCode.Unknown,
|
|
57
|
+
message: 'Service did not return valid temporary credentials.',
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
logger.debug(`Retrieved credentials for: ${result.MatchedGrantTarget}`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const {
|
|
64
|
+
AccessKeyId: accessKeyId,
|
|
65
|
+
SecretAccessKey: secretAccessKey,
|
|
66
|
+
SessionToken: sessionToken,
|
|
67
|
+
Expiration: expiration,
|
|
68
|
+
} = grantCredentials;
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
credentials: {
|
|
72
|
+
accessKeyId,
|
|
73
|
+
secretAccessKey,
|
|
74
|
+
sessionToken,
|
|
75
|
+
expiration,
|
|
76
|
+
},
|
|
77
|
+
scope: result.MatchedGrantTarget,
|
|
78
|
+
};
|
|
79
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { StorageAction } from '@aws-amplify/core/internals/utils';
|
|
5
|
+
import { CredentialsProviderOptions } from '@aws-amplify/core/internals/aws-client-utils';
|
|
6
|
+
|
|
7
|
+
import { logger } from '../../utils';
|
|
8
|
+
import { listCallerAccessGrants as listCallerAccessGrantsClient } from '../../providers/s3/utils/client/s3control';
|
|
9
|
+
import { LocationAccess, LocationType } from '../types';
|
|
10
|
+
import { StorageError } from '../../errors/StorageError';
|
|
11
|
+
import { getStorageUserAgentValue } from '../../providers/s3/utils/userAgent';
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
ListCallerAccessGrantsInput,
|
|
15
|
+
ListCallerAccessGrantsOutput,
|
|
16
|
+
} from './types';
|
|
17
|
+
import { MAX_PAGE_SIZE } from './constants';
|
|
18
|
+
|
|
19
|
+
export const listCallerAccessGrants = async (
|
|
20
|
+
input: ListCallerAccessGrantsInput,
|
|
21
|
+
): Promise<ListCallerAccessGrantsOutput> => {
|
|
22
|
+
const { credentialsProvider, accountId, region, nextToken, pageSize } = input;
|
|
23
|
+
|
|
24
|
+
logger.debug(`listing available locations from account ${input.accountId}`);
|
|
25
|
+
|
|
26
|
+
if (!!pageSize && pageSize > MAX_PAGE_SIZE) {
|
|
27
|
+
logger.debug(`defaulting pageSize to ${MAX_PAGE_SIZE}.`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const clientCredentialsProvider = async (
|
|
31
|
+
options?: CredentialsProviderOptions,
|
|
32
|
+
) => {
|
|
33
|
+
const { credentials } = await credentialsProvider(options);
|
|
34
|
+
|
|
35
|
+
return credentials;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const { CallerAccessGrantsList, NextToken } =
|
|
39
|
+
await listCallerAccessGrantsClient(
|
|
40
|
+
{
|
|
41
|
+
credentials: clientCredentialsProvider,
|
|
42
|
+
region,
|
|
43
|
+
userAgentValue: getStorageUserAgentValue(
|
|
44
|
+
StorageAction.ListCallerAccessGrants,
|
|
45
|
+
),
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
AccountId: accountId,
|
|
49
|
+
NextToken: nextToken,
|
|
50
|
+
MaxResults: pageSize ?? MAX_PAGE_SIZE,
|
|
51
|
+
},
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
const accessGrants: LocationAccess[] =
|
|
55
|
+
CallerAccessGrantsList?.map(grant => {
|
|
56
|
+
assertGrantScope(grant.GrantScope);
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
scope: grant.GrantScope,
|
|
60
|
+
permission: grant.Permission!,
|
|
61
|
+
type: parseGrantType(grant.GrantScope!),
|
|
62
|
+
};
|
|
63
|
+
}) ?? [];
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
locations: accessGrants,
|
|
67
|
+
nextToken: NextToken,
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const parseGrantType = (grantScope: string): LocationType => {
|
|
72
|
+
const bucketScopeReg = /^s3:\/\/(.*)\/\*$/;
|
|
73
|
+
const possibleBucketName = grantScope.match(bucketScopeReg)?.[1];
|
|
74
|
+
if (!grantScope.endsWith('*')) {
|
|
75
|
+
return 'OBJECT';
|
|
76
|
+
} else if (
|
|
77
|
+
grantScope.endsWith('/*') &&
|
|
78
|
+
possibleBucketName &&
|
|
79
|
+
possibleBucketName.indexOf('/') === -1
|
|
80
|
+
) {
|
|
81
|
+
return 'BUCKET';
|
|
82
|
+
} else {
|
|
83
|
+
return 'PREFIX';
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
function assertGrantScope(value: unknown): asserts value is string {
|
|
88
|
+
if (typeof value !== 'string' || !value.startsWith('s3://')) {
|
|
89
|
+
throw new StorageError({
|
|
90
|
+
name: 'InvalidGrantScope',
|
|
91
|
+
message: `Expected a valid grant scope, got ${value}`,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
CredentialsProvider,
|
|
6
|
+
ListLocationsInput,
|
|
7
|
+
ListLocationsOutput,
|
|
8
|
+
LocationCredentials,
|
|
9
|
+
Permission,
|
|
10
|
+
PrefixType,
|
|
11
|
+
Privilege,
|
|
12
|
+
} from '../types';
|
|
13
|
+
|
|
14
|
+
export interface ListCallerAccessGrantsInput extends ListLocationsInput {
|
|
15
|
+
accountId: string;
|
|
16
|
+
credentialsProvider: CredentialsProvider;
|
|
17
|
+
region: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type ListCallerAccessGrantsOutput = ListLocationsOutput;
|
|
21
|
+
|
|
22
|
+
export interface GetDataAccessInput {
|
|
23
|
+
accountId: string;
|
|
24
|
+
credentialsProvider: CredentialsProvider;
|
|
25
|
+
durationSeconds?: number;
|
|
26
|
+
permission: Permission;
|
|
27
|
+
prefixType?: PrefixType;
|
|
28
|
+
privilege?: Privilege;
|
|
29
|
+
region: string;
|
|
30
|
+
scope: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type GetDataAccessOutput = LocationCredentials;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
export { LocationCredentialsProvider } from '../providers/s3/types/options';
|
|
5
|
+
export { StorageSubpathStrategy } from '../types/options';
|
|
6
|
+
|
|
7
|
+
export { createLocationCredentialsStore } from './locationCredentialsStore';
|
|
8
|
+
export {
|
|
9
|
+
AuthConfigAdapter,
|
|
10
|
+
createManagedAuthConfigAdapter,
|
|
11
|
+
CreateManagedAuthConfigAdapterInput,
|
|
12
|
+
} from './managedAuthConfigAdapter';
|
|
13
|
+
export {
|
|
14
|
+
GetLocationCredentials,
|
|
15
|
+
ListLocations,
|
|
16
|
+
LocationCredentialsStore,
|
|
17
|
+
CreateLocationCredentialsStoreInput,
|
|
18
|
+
LocationCredentials,
|
|
19
|
+
ListLocationsInput,
|
|
20
|
+
ListLocationsOutput,
|
|
21
|
+
GetLocationCredentialsInput,
|
|
22
|
+
GetLocationCredentialsOutput,
|
|
23
|
+
Permission,
|
|
24
|
+
} from './types';
|
|
25
|
+
export { AWSTemporaryCredentials } from '../providers/s3/types/options';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
CreateLocationCredentialsStoreInput,
|
|
6
|
+
CredentialsLocation,
|
|
7
|
+
LocationCredentialsStore,
|
|
8
|
+
} from '../types';
|
|
9
|
+
import { StorageValidationErrorCode } from '../../errors/types/validation';
|
|
10
|
+
import { assertValidationError } from '../../errors/utils/assertValidationError';
|
|
11
|
+
import { LocationCredentialsProvider } from '../../providers/s3/types/options';
|
|
12
|
+
|
|
13
|
+
import { createStore, getValue, removeStore } from './registry';
|
|
14
|
+
|
|
15
|
+
export const createLocationCredentialsStore = (
|
|
16
|
+
input: CreateLocationCredentialsStoreInput,
|
|
17
|
+
): LocationCredentialsStore => {
|
|
18
|
+
const storeSymbol = createStore(input.handler);
|
|
19
|
+
|
|
20
|
+
const store = {
|
|
21
|
+
getProvider(providerLocation: CredentialsLocation) {
|
|
22
|
+
const locationCredentialsProvider = async ({
|
|
23
|
+
forceRefresh = false,
|
|
24
|
+
}: Parameters<LocationCredentialsProvider>[0] = {}) => {
|
|
25
|
+
validateS3Uri(providerLocation.scope);
|
|
26
|
+
|
|
27
|
+
// TODO(@AllanZhengYP): validate the action bucket and paths matches provider scope.
|
|
28
|
+
return getValue({
|
|
29
|
+
storeSymbol,
|
|
30
|
+
location: { ...providerLocation },
|
|
31
|
+
forceRefresh,
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
return locationCredentialsProvider;
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
destroy() {
|
|
39
|
+
removeStore(storeSymbol);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
return store;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
type S3Uri = string;
|
|
47
|
+
|
|
48
|
+
const validateS3Uri = (uri: S3Uri): void => {
|
|
49
|
+
const s3UrlSchemaRegex = /^s3:\/\/[^/]+/;
|
|
50
|
+
assertValidationError(
|
|
51
|
+
s3UrlSchemaRegex.test(uri),
|
|
52
|
+
StorageValidationErrorCode.InvalidS3Uri,
|
|
53
|
+
);
|
|
54
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/* eslint-disable unused-imports/no-unused-vars */
|
|
2
|
+
|
|
3
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
import { AWSTemporaryCredentials } from '../../providers/s3/types/options';
|
|
6
|
+
import { CredentialsLocation, GetLocationCredentials } from '../types';
|
|
7
|
+
import { assertValidationError } from '../../errors/utils/assertValidationError';
|
|
8
|
+
import { StorageValidationErrorCode } from '../../errors/types/validation';
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
LruLocationCredentialsStore,
|
|
12
|
+
fetchNewValue,
|
|
13
|
+
getCacheValue,
|
|
14
|
+
initStore,
|
|
15
|
+
} from './store';
|
|
16
|
+
|
|
17
|
+
interface StoreRegistrySymbol {
|
|
18
|
+
readonly value: symbol;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Keep all cache records for all instances of credentials store in a singleton
|
|
23
|
+
* so we can reliably de-reference from the memory when we destroy a store
|
|
24
|
+
* instance.
|
|
25
|
+
*/
|
|
26
|
+
const storeRegistry = new WeakMap<
|
|
27
|
+
StoreRegistrySymbol,
|
|
28
|
+
LruLocationCredentialsStore
|
|
29
|
+
>();
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export const createStore = (
|
|
35
|
+
refreshHandler: GetLocationCredentials,
|
|
36
|
+
size?: number,
|
|
37
|
+
) => {
|
|
38
|
+
const storeSymbol = { value: Symbol('LocationCredentialsStore') };
|
|
39
|
+
storeRegistry.set(storeSymbol, initStore(refreshHandler, size));
|
|
40
|
+
|
|
41
|
+
return storeSymbol;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const getLookUpLocations = (location: CredentialsLocation) => {
|
|
45
|
+
const { scope, permission } = location;
|
|
46
|
+
const locations = [{ scope, permission }];
|
|
47
|
+
if (permission === 'READ' || permission === 'WRITE') {
|
|
48
|
+
locations.push({ scope, permission: 'READWRITE' });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return locations;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const getCredentialsStore = (storeSymbol: StoreRegistrySymbol) => {
|
|
55
|
+
assertValidationError(
|
|
56
|
+
storeRegistry.has(storeSymbol),
|
|
57
|
+
StorageValidationErrorCode.LocationCredentialsStoreDestroyed,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
return storeRegistry.get(storeSymbol)!;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
export const getValue = async (input: {
|
|
67
|
+
storeSymbol: StoreRegistrySymbol;
|
|
68
|
+
location: CredentialsLocation;
|
|
69
|
+
forceRefresh: boolean;
|
|
70
|
+
}): Promise<{ credentials: AWSTemporaryCredentials }> => {
|
|
71
|
+
const { storeSymbol: storeReference, location, forceRefresh } = input;
|
|
72
|
+
const store = getCredentialsStore(storeReference);
|
|
73
|
+
if (!forceRefresh) {
|
|
74
|
+
const lookupLocations = getLookUpLocations(location);
|
|
75
|
+
for (const lookupLocation of lookupLocations) {
|
|
76
|
+
const credentials = getCacheValue(store, lookupLocation);
|
|
77
|
+
if (credentials !== null) {
|
|
78
|
+
return { credentials };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return fetchNewValue(store, location);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const removeStore = (storeSymbol: StoreRegistrySymbol) => {
|
|
87
|
+
storeRegistry.delete(storeSymbol);
|
|
88
|
+
};
|