@aws-amplify/core 5.3.2-unstable.ffe65ea.1 → 5.4.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/internals/aws-client-utils/package.json +8 -0
- package/internals/aws-clients/pinpoint/package.json +8 -0
- package/lib/Amplify.js +18 -3
- package/lib/AwsClients/CognitoIdentity/base.d.ts +28 -0
- package/lib/AwsClients/CognitoIdentity/base.js +109 -0
- package/lib/AwsClients/CognitoIdentity/getCredentialsForIdentity.d.ts +12 -0
- package/lib/AwsClients/CognitoIdentity/getCredentialsForIdentity.js +82 -0
- package/lib/AwsClients/CognitoIdentity/getId.d.ts +12 -0
- package/lib/AwsClients/CognitoIdentity/getId.js +72 -0
- package/lib/AwsClients/CognitoIdentity/index.d.ts +2 -0
- package/lib/AwsClients/CognitoIdentity/index.js +9 -0
- package/lib/AwsClients/CognitoIdentity/types.d.ts +153 -0
- package/lib/AwsClients/CognitoIdentity/types.js +4 -0
- package/lib/AwsClients/Pinpoint/base.d.ts +17 -0
- package/lib/AwsClients/Pinpoint/base.js +39 -0
- package/lib/AwsClients/Pinpoint/getInAppMessages.d.ts +13 -0
- package/lib/AwsClients/Pinpoint/getInAppMessages.js +77 -0
- package/lib/AwsClients/Pinpoint/index.d.ts +4 -0
- package/lib/AwsClients/Pinpoint/index.js +11 -0
- package/lib/AwsClients/Pinpoint/putEvents.d.ts +13 -0
- package/lib/AwsClients/Pinpoint/putEvents.js +78 -0
- package/lib/AwsClients/Pinpoint/types.d.ts +836 -0
- package/lib/AwsClients/Pinpoint/types.js +5 -0
- package/lib/AwsClients/Pinpoint/updateEndpoint.d.ts +13 -0
- package/lib/AwsClients/Pinpoint/updateEndpoint.js +81 -0
- package/lib/ClientDevice/android.js +3 -2
- package/lib/ClientDevice/browser.js +1 -1
- package/lib/ClientDevice/index.js +3 -3
- package/lib/ClientDevice/ios.js +3 -2
- package/lib/ClientDevice/reactnative.js +3 -3
- package/lib/Credentials.js +176 -113
- package/lib/Errors.js +1 -1
- package/lib/Hub.d.ts +4 -4
- package/lib/Hub.js +47 -12
- package/lib/I18n/I18n.js +13 -3
- package/lib/I18n/index.js +1 -1
- package/lib/I18n/types.js +1 -1
- package/lib/JS.js +29 -17
- package/lib/Logger/ConsoleLogger.js +51 -17
- package/lib/Logger/index.js +3 -3
- package/lib/Logger/logger-interface.js +0 -1
- package/lib/OAuthHelper/FacebookOAuth.js +41 -6
- package/lib/OAuthHelper/GoogleOAuth.js +41 -6
- package/lib/OAuthHelper/index.js +1 -1
- package/lib/Platform/index.js +8 -7
- package/lib/Platform/version.d.ts +1 -1
- package/lib/Platform/version.js +2 -2
- package/lib/Providers/AWSCloudWatchProvider.js +104 -44
- package/lib/Providers/index.js +2 -2
- package/lib/RNComponents/index.js +2 -2
- package/lib/RNComponents/reactnative.js +7 -5
- package/lib/ServiceWorker/ServiceWorker.js +11 -11
- package/lib/ServiceWorker/index.js +2 -2
- package/lib/Signer.js +17 -7
- package/lib/StorageHelper/index.js +1 -1
- package/lib/StorageHelper/reactnative.js +5 -3
- package/lib/UniversalStorage/index.d.ts +2 -2
- package/lib/UniversalStorage/index.js +24 -6
- package/lib/Util/BackgroundProcessManager.js +84 -23
- package/lib/Util/Constants.js +1 -1
- package/lib/Util/DateUtils.js +18 -3
- package/lib/Util/Mutex.js +0 -1
- package/lib/Util/Reachability.d.ts +1 -1
- package/lib/Util/Reachability.js +18 -6
- package/lib/Util/Reachability.native.d.ts +1 -1
- package/lib/Util/Reachability.native.js +4 -3
- package/lib/Util/Retry.js +103 -26
- package/lib/Util/StringUtils.js +1 -1
- package/lib/Util/index.js +24 -21
- package/lib/clients/endpoints/getDnsSuffix.d.ts +11 -0
- package/lib/clients/endpoints/getDnsSuffix.js +49 -0
- package/lib/clients/endpoints/index.d.ts +1 -0
- package/lib/clients/endpoints/index.js +7 -0
- package/lib/clients/endpoints/partitions.d.ts +33 -0
- package/lib/clients/endpoints/partitions.js +41 -0
- package/lib/clients/handlers/authenticated.d.ts +5 -0
- package/lib/clients/handlers/authenticated.js +15 -0
- package/lib/clients/handlers/fetch.d.ts +4 -0
- package/lib/clients/handlers/fetch.js +123 -0
- package/lib/clients/handlers/unauthenticated.d.ts +4 -0
- package/lib/clients/handlers/unauthenticated.js +10 -0
- package/lib/clients/index.d.ts +8 -0
- package/lib/clients/index.js +37 -0
- package/lib/clients/internal/composeServiceApi.d.ts +8 -0
- package/lib/clients/internal/composeServiceApi.js +75 -0
- package/lib/clients/internal/composeTransferHandler.d.ts +29 -0
- package/lib/clients/internal/composeTransferHandler.js +26 -0
- package/lib/clients/middleware/retry/defaultRetryDecider.d.ts +6 -0
- package/lib/clients/middleware/retry/defaultRetryDecider.js +101 -0
- package/lib/clients/middleware/retry/index.d.ts +3 -0
- package/lib/clients/middleware/retry/index.js +11 -0
- package/lib/clients/middleware/retry/jitteredBackoff.d.ts +2 -0
- package/lib/clients/middleware/retry/jitteredBackoff.js +16 -0
- package/lib/clients/middleware/retry/middleware.d.ts +40 -0
- package/lib/clients/middleware/retry/middleware.js +143 -0
- package/lib/clients/middleware/signing/index.d.ts +1 -0
- package/lib/clients/middleware/signing/index.js +7 -0
- package/lib/clients/middleware/signing/middleware.d.ts +13 -0
- package/lib/clients/middleware/signing/middleware.js +101 -0
- package/lib/clients/middleware/signing/signer/signatureV4/constants.js +1 -1
- package/lib/clients/middleware/signing/signer/signatureV4/index.js +4 -4
- package/lib/clients/middleware/signing/signer/signatureV4/index.native.js +4 -4
- package/lib/clients/middleware/signing/signer/signatureV4/presignUrl.js +46 -8
- package/lib/clients/middleware/signing/signer/signatureV4/signRequest.js +22 -11
- package/lib/clients/middleware/signing/signer/signatureV4/types/index.js +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/types/signer.js +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.d.ts +3 -2
- package/lib/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.js +7 -5
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.d.ts +2 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.js +23 -7
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.js +24 -8
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.js +8 -7
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.js +3 -2
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.js +3 -2
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js +3 -2
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.d.ts +2 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.js +4 -3
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignature.js +7 -6
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.d.ts +2 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.js +3 -2
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.js +8 -7
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.js +5 -4
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.js +3 -2
- package/lib/clients/middleware/signing/utils/extendedEncodeURIComponent.d.ts +10 -0
- package/lib/clients/middleware/signing/utils/extendedEncodeURIComponent.js +23 -0
- package/lib/clients/middleware/signing/utils/getSkewCorrectedDate.d.ts +10 -0
- package/lib/clients/middleware/signing/utils/getSkewCorrectedDate.js +18 -0
- package/lib/clients/middleware/signing/utils/getUpdatedSystemClockOffset.d.ts +9 -0
- package/lib/clients/middleware/signing/utils/getUpdatedSystemClockOffset.js +21 -0
- package/lib/clients/middleware/signing/utils/isClockSkewed.d.ts +11 -0
- package/lib/clients/middleware/signing/utils/isClockSkewed.js +23 -0
- package/lib/clients/middleware/userAgent/index.d.ts +1 -0
- package/lib/clients/middleware/userAgent/index.js +7 -0
- package/lib/clients/middleware/userAgent/middleware.d.ts +13 -0
- package/lib/clients/middleware/userAgent/middleware.js +77 -0
- package/lib/clients/serde/index.d.ts +2 -0
- package/lib/clients/serde/index.js +10 -0
- package/lib/clients/serde/json.d.ts +12 -0
- package/lib/clients/serde/json.js +115 -0
- package/lib/clients/serde/responseInfo.d.ts +3 -0
- package/lib/clients/serde/responseInfo.js +23 -0
- package/lib/clients/types/aws.d.ts +18 -1
- package/lib/clients/types/aws.js +0 -1
- package/lib/clients/types/core.d.ts +22 -0
- package/lib/clients/types/core.js +0 -1
- package/lib/clients/types/http.d.ts +8 -4
- package/lib/clients/types/http.js +0 -1
- package/lib/clients/types/index.d.ts +3 -2
- package/lib/clients/types/index.js +0 -1
- package/lib/clients/utils/isClockSkewError.d.ts +9 -0
- package/lib/clients/utils/isClockSkewError.js +27 -0
- package/lib/constants.js +1 -1
- package/lib/index.js +61 -60
- package/lib/parseAWSExports.js +15 -4
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/index.js +15 -1
- package/lib/types/types.d.ts +1 -1
- package/lib/types/types.js +0 -1
- package/lib-esm/Amplify.js +16 -2
- package/lib-esm/AwsClients/CognitoIdentity/base.d.ts +28 -0
- package/lib-esm/AwsClients/CognitoIdentity/base.js +104 -0
- package/lib-esm/AwsClients/CognitoIdentity/getCredentialsForIdentity.d.ts +12 -0
- package/lib-esm/AwsClients/CognitoIdentity/getCredentialsForIdentity.js +79 -0
- package/lib-esm/AwsClients/CognitoIdentity/getId.d.ts +12 -0
- package/lib-esm/AwsClients/CognitoIdentity/getId.js +69 -0
- package/lib-esm/AwsClients/CognitoIdentity/index.d.ts +2 -0
- package/lib-esm/AwsClients/CognitoIdentity/index.js +4 -0
- package/lib-esm/AwsClients/CognitoIdentity/types.d.ts +153 -0
- package/lib-esm/AwsClients/CognitoIdentity/types.js +3 -0
- package/lib-esm/AwsClients/Pinpoint/base.d.ts +17 -0
- package/lib-esm/AwsClients/Pinpoint/base.js +35 -0
- package/lib-esm/AwsClients/Pinpoint/getInAppMessages.d.ts +13 -0
- package/lib-esm/AwsClients/Pinpoint/getInAppMessages.js +74 -0
- package/lib-esm/AwsClients/Pinpoint/index.d.ts +4 -0
- package/lib-esm/AwsClients/Pinpoint/index.js +5 -0
- package/lib-esm/AwsClients/Pinpoint/putEvents.d.ts +13 -0
- package/lib-esm/AwsClients/Pinpoint/putEvents.js +75 -0
- package/lib-esm/AwsClients/Pinpoint/types.d.ts +836 -0
- package/lib-esm/AwsClients/Pinpoint/types.js +4 -0
- package/lib-esm/AwsClients/Pinpoint/updateEndpoint.d.ts +13 -0
- package/lib-esm/AwsClients/Pinpoint/updateEndpoint.js +78 -0
- package/lib-esm/ClientDevice/android.js +0 -1
- package/lib-esm/ClientDevice/browser.js +0 -1
- package/lib-esm/ClientDevice/index.js +0 -1
- package/lib-esm/ClientDevice/ios.js +0 -1
- package/lib-esm/ClientDevice/reactnative.js +0 -1
- package/lib-esm/Credentials.js +149 -87
- package/lib-esm/Errors.js +0 -1
- package/lib-esm/Hub.d.ts +4 -4
- package/lib-esm/Hub.js +43 -9
- package/lib-esm/I18n/I18n.js +11 -2
- package/lib-esm/I18n/index.js +0 -1
- package/lib-esm/I18n/types.js +0 -1
- package/lib-esm/JS.js +0 -1
- package/lib-esm/Logger/ConsoleLogger.js +49 -16
- package/lib-esm/Logger/index.js +0 -1
- package/lib-esm/Logger/logger-interface.js +1 -1
- package/lib-esm/OAuthHelper/FacebookOAuth.js +36 -2
- package/lib-esm/OAuthHelper/GoogleOAuth.js +36 -2
- package/lib-esm/OAuthHelper/index.js +0 -1
- package/lib-esm/Platform/index.js +5 -6
- package/lib-esm/Platform/version.d.ts +1 -1
- package/lib-esm/Platform/version.js +1 -2
- package/lib-esm/Providers/AWSCloudWatchProvider.js +75 -16
- package/lib-esm/Providers/index.js +0 -1
- package/lib-esm/RNComponents/index.js +0 -1
- package/lib-esm/RNComponents/reactnative.js +0 -1
- package/lib-esm/ServiceWorker/ServiceWorker.js +9 -10
- package/lib-esm/ServiceWorker/index.js +0 -1
- package/lib-esm/Signer.js +11 -2
- package/lib-esm/StorageHelper/index.js +0 -1
- package/lib-esm/StorageHelper/reactnative.js +0 -1
- package/lib-esm/UniversalStorage/index.d.ts +2 -2
- package/lib-esm/UniversalStorage/index.js +17 -3
- package/lib-esm/Util/BackgroundProcessManager.js +74 -14
- package/lib-esm/Util/Constants.js +0 -1
- package/lib-esm/Util/DateUtils.js +16 -2
- package/lib-esm/Util/Mutex.js +0 -1
- package/lib-esm/Util/Reachability.d.ts +1 -1
- package/lib-esm/Util/Reachability.js +11 -2
- package/lib-esm/Util/Reachability.native.d.ts +1 -1
- package/lib-esm/Util/Reachability.native.js +0 -1
- package/lib-esm/Util/Retry.js +92 -18
- package/lib-esm/Util/StringUtils.js +0 -1
- package/lib-esm/Util/index.js +0 -1
- package/lib-esm/clients/endpoints/getDnsSuffix.d.ts +11 -0
- package/lib-esm/clients/endpoints/getDnsSuffix.js +45 -0
- package/lib-esm/clients/endpoints/index.d.ts +1 -0
- package/lib-esm/clients/endpoints/index.js +3 -0
- package/lib-esm/clients/endpoints/partitions.d.ts +33 -0
- package/lib-esm/clients/endpoints/partitions.js +38 -0
- package/lib-esm/clients/handlers/authenticated.d.ts +5 -0
- package/lib-esm/clients/handlers/authenticated.js +12 -0
- package/lib-esm/clients/handlers/fetch.d.ts +4 -0
- package/lib-esm/clients/handlers/fetch.js +119 -0
- package/lib-esm/clients/handlers/unauthenticated.d.ts +4 -0
- package/lib-esm/clients/handlers/unauthenticated.js +7 -0
- package/lib-esm/clients/index.d.ts +8 -0
- package/lib-esm/clients/index.js +10 -0
- package/lib-esm/clients/internal/composeServiceApi.d.ts +8 -0
- package/lib-esm/clients/internal/composeServiceApi.js +71 -0
- package/lib-esm/clients/internal/composeTransferHandler.d.ts +29 -0
- package/lib-esm/clients/internal/composeTransferHandler.js +22 -0
- package/lib-esm/clients/middleware/retry/defaultRetryDecider.d.ts +6 -0
- package/lib-esm/clients/middleware/retry/defaultRetryDecider.js +97 -0
- package/lib-esm/clients/middleware/retry/index.d.ts +3 -0
- package/lib-esm/clients/middleware/retry/index.js +5 -0
- package/lib-esm/clients/middleware/retry/jitteredBackoff.d.ts +2 -0
- package/lib-esm/clients/middleware/retry/jitteredBackoff.js +12 -0
- package/lib-esm/clients/middleware/retry/middleware.d.ts +40 -0
- package/lib-esm/clients/middleware/retry/middleware.js +138 -0
- package/lib-esm/clients/middleware/signing/index.d.ts +1 -0
- package/lib-esm/clients/middleware/signing/index.js +3 -0
- package/lib-esm/clients/middleware/signing/middleware.d.ts +13 -0
- package/lib-esm/clients/middleware/signing/middleware.js +97 -0
- package/lib-esm/clients/middleware/signing/signer/signatureV4/constants.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/index.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/index.native.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/presignUrl.js +39 -3
- package/lib-esm/clients/middleware/signing/signer/signatureV4/signRequest.js +15 -6
- package/lib-esm/clients/middleware/signing/signer/signatureV4/types/index.js +1 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/types/signer.js +1 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.d.ts +3 -2
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.d.ts +2 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.js +20 -6
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.js +18 -4
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.js +1 -2
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.d.ts +2 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignature.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.d.ts +2 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.js +1 -2
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.js +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.js +0 -1
- package/lib-esm/clients/middleware/signing/utils/extendedEncodeURIComponent.d.ts +10 -0
- package/lib-esm/clients/middleware/signing/utils/extendedEncodeURIComponent.js +19 -0
- package/lib-esm/clients/middleware/signing/utils/getSkewCorrectedDate.d.ts +10 -0
- package/lib-esm/clients/middleware/signing/utils/getSkewCorrectedDate.js +14 -0
- package/lib-esm/clients/middleware/signing/utils/getUpdatedSystemClockOffset.d.ts +9 -0
- package/lib-esm/clients/middleware/signing/utils/getUpdatedSystemClockOffset.js +17 -0
- package/lib-esm/clients/middleware/signing/utils/isClockSkewed.d.ts +11 -0
- package/lib-esm/clients/middleware/signing/utils/isClockSkewed.js +19 -0
- package/lib-esm/clients/middleware/userAgent/index.d.ts +1 -0
- package/lib-esm/clients/middleware/userAgent/index.js +3 -0
- package/lib-esm/clients/middleware/userAgent/middleware.d.ts +13 -0
- package/lib-esm/clients/middleware/userAgent/middleware.js +73 -0
- package/lib-esm/clients/serde/index.d.ts +2 -0
- package/lib-esm/clients/serde/index.js +4 -0
- package/lib-esm/clients/serde/json.d.ts +12 -0
- package/lib-esm/clients/serde/json.js +110 -0
- package/lib-esm/clients/serde/responseInfo.d.ts +3 -0
- package/lib-esm/clients/serde/responseInfo.js +19 -0
- package/lib-esm/clients/types/aws.d.ts +18 -1
- package/lib-esm/clients/types/aws.js +1 -1
- package/lib-esm/clients/types/core.d.ts +22 -0
- package/lib-esm/clients/types/core.js +1 -1
- package/lib-esm/clients/types/http.d.ts +8 -4
- package/lib-esm/clients/types/http.js +1 -1
- package/lib-esm/clients/types/index.d.ts +3 -2
- package/lib-esm/clients/types/index.js +1 -1
- package/lib-esm/clients/utils/isClockSkewError.d.ts +9 -0
- package/lib-esm/clients/utils/isClockSkewError.js +23 -0
- package/lib-esm/constants.js +0 -1
- package/lib-esm/index.js +0 -1
- package/lib-esm/parseAWSExports.js +11 -2
- package/lib-esm/tsconfig.tsbuildinfo +1 -0
- package/lib-esm/types/index.js +1 -1
- package/lib-esm/types/types.d.ts +1 -1
- package/lib-esm/types/types.js +1 -1
- package/package.json +56 -22
- package/src/AwsClients/CognitoIdentity/base.ts +88 -0
- package/src/AwsClients/CognitoIdentity/getCredentialsForIdentity.ts +67 -0
- package/src/AwsClients/CognitoIdentity/getId.ts +58 -0
- package/src/AwsClients/CognitoIdentity/index.ts +9 -0
- package/src/AwsClients/CognitoIdentity/types.ts +159 -0
- package/src/AwsClients/Pinpoint/base.ts +41 -0
- package/src/AwsClients/Pinpoint/getInAppMessages.ts +56 -0
- package/src/AwsClients/Pinpoint/index.ts +15 -0
- package/src/AwsClients/Pinpoint/putEvents.ts +55 -0
- package/src/AwsClients/Pinpoint/types.ts +844 -0
- package/src/AwsClients/Pinpoint/updateEndpoint.ts +60 -0
- package/src/Credentials.ts +75 -100
- package/src/OAuthHelper/FacebookOAuth.ts +1 -1
- package/src/OAuthHelper/GoogleOAuth.ts +1 -1
- package/src/Platform/version.ts +1 -1
- package/src/StorageHelper/reactnative.ts +1 -1
- package/src/clients/endpoints/getDnsSuffix.ts +25 -0
- package/src/clients/endpoints/index.ts +4 -0
- package/src/clients/endpoints/partitions.ts +40 -0
- package/src/clients/handlers/authenticated.ts +19 -0
- package/src/clients/handlers/fetch.ts +75 -0
- package/src/clients/handlers/unauthenticated.ts +14 -0
- package/src/clients/index.ts +15 -0
- package/src/clients/internal/composeServiceApi.ts +50 -0
- package/src/clients/internal/composeTransferHandler.ts +89 -0
- package/src/clients/middleware/retry/defaultRetryDecider.ts +54 -0
- package/src/clients/middleware/retry/index.ts +6 -0
- package/src/clients/middleware/retry/jitteredBackoff.ts +16 -0
- package/src/clients/middleware/retry/middleware.ts +133 -0
- package/src/clients/middleware/signing/index.ts +4 -0
- package/src/clients/middleware/signing/middleware.ts +65 -0
- package/src/clients/middleware/signing/utils/extendedEncodeURIComponent.ts +21 -0
- package/src/clients/middleware/signing/utils/getSkewCorrectedDate.ts +14 -0
- package/src/clients/middleware/signing/utils/getUpdatedSystemClockOffset.ts +22 -0
- package/src/clients/middleware/signing/utils/isClockSkewed.ts +26 -0
- package/src/clients/middleware/userAgent/index.ts +4 -0
- package/src/clients/middleware/userAgent/middleware.ts +41 -0
- package/src/clients/serde/index.ts +5 -0
- package/src/clients/serde/json.ts +51 -0
- package/src/clients/serde/responseInfo.ts +20 -0
- package/src/clients/types/aws.ts +21 -0
- package/src/clients/types/core.ts +40 -0
- package/src/clients/types/http.ts +12 -2
- package/src/clients/types/index.ts +22 -2
- package/src/clients/utils/isClockSkewError.ts +24 -0
- package/lib/.tsbuildinfo +0 -3
- package/lib/Amplify.js.map +0 -1
- package/lib/ClientDevice/android.js.map +0 -1
- package/lib/ClientDevice/browser.js.map +0 -1
- package/lib/ClientDevice/index.js.map +0 -1
- package/lib/ClientDevice/ios.js.map +0 -1
- package/lib/ClientDevice/reactnative.js.map +0 -1
- package/lib/Credentials.js.map +0 -1
- package/lib/Errors.js.map +0 -1
- package/lib/Hub.js.map +0 -1
- package/lib/I18n/I18n.js.map +0 -1
- package/lib/I18n/index.js.map +0 -1
- package/lib/I18n/types.js.map +0 -1
- package/lib/JS.js.map +0 -1
- package/lib/Logger/ConsoleLogger.js.map +0 -1
- package/lib/Logger/index.js.map +0 -1
- package/lib/Logger/logger-interface.js.map +0 -1
- package/lib/OAuthHelper/FacebookOAuth.js.map +0 -1
- package/lib/OAuthHelper/GoogleOAuth.js.map +0 -1
- package/lib/OAuthHelper/index.js.map +0 -1
- package/lib/Platform/index.js.map +0 -1
- package/lib/Platform/version.js.map +0 -1
- package/lib/Providers/AWSCloudWatchProvider.js.map +0 -1
- package/lib/Providers/index.js.map +0 -1
- package/lib/RNComponents/index.js.map +0 -1
- package/lib/RNComponents/reactnative.js.map +0 -1
- package/lib/ServiceWorker/ServiceWorker.js.map +0 -1
- package/lib/ServiceWorker/index.js.map +0 -1
- package/lib/Signer.js.map +0 -1
- package/lib/StorageHelper/index.js.map +0 -1
- package/lib/StorageHelper/reactnative.js.map +0 -1
- package/lib/UniversalStorage/index.js.map +0 -1
- package/lib/Util/BackgroundProcessManager.js.map +0 -1
- package/lib/Util/CognitoIdentityClient.d.ts +0 -14
- package/lib/Util/CognitoIdentityClient.js +0 -31
- package/lib/Util/CognitoIdentityClient.js.map +0 -1
- package/lib/Util/Constants.js.map +0 -1
- package/lib/Util/DateUtils.js.map +0 -1
- package/lib/Util/Mutex.js.map +0 -1
- package/lib/Util/Reachability.js.map +0 -1
- package/lib/Util/Reachability.native.js.map +0 -1
- package/lib/Util/Retry.js.map +0 -1
- package/lib/Util/StringUtils.js.map +0 -1
- package/lib/Util/index.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/constants.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/index.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/index.native.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/presignUrl.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/signRequest.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/types/index.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/types/signer.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignature.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.js.map +0 -1
- package/lib/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.js.map +0 -1
- package/lib/clients/types/aws.js.map +0 -1
- package/lib/clients/types/core.js.map +0 -1
- package/lib/clients/types/http.js.map +0 -1
- package/lib/clients/types/index.js.map +0 -1
- package/lib/constants.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/parseAWSExports.js.map +0 -1
- package/lib/types/index.js.map +0 -1
- package/lib/types/types.js.map +0 -1
- package/lib-esm/.tsbuildinfo +0 -3
- package/lib-esm/Amplify.js.map +0 -1
- package/lib-esm/ClientDevice/android.js.map +0 -1
- package/lib-esm/ClientDevice/browser.js.map +0 -1
- package/lib-esm/ClientDevice/index.js.map +0 -1
- package/lib-esm/ClientDevice/ios.js.map +0 -1
- package/lib-esm/ClientDevice/reactnative.js.map +0 -1
- package/lib-esm/Credentials.js.map +0 -1
- package/lib-esm/Errors.js.map +0 -1
- package/lib-esm/Hub.js.map +0 -1
- package/lib-esm/I18n/I18n.js.map +0 -1
- package/lib-esm/I18n/index.js.map +0 -1
- package/lib-esm/I18n/types.js.map +0 -1
- package/lib-esm/JS.js.map +0 -1
- package/lib-esm/Logger/ConsoleLogger.js.map +0 -1
- package/lib-esm/Logger/index.js.map +0 -1
- package/lib-esm/Logger/logger-interface.js.map +0 -1
- package/lib-esm/OAuthHelper/FacebookOAuth.js.map +0 -1
- package/lib-esm/OAuthHelper/GoogleOAuth.js.map +0 -1
- package/lib-esm/OAuthHelper/index.js.map +0 -1
- package/lib-esm/Platform/index.js.map +0 -1
- package/lib-esm/Platform/version.js.map +0 -1
- package/lib-esm/Providers/AWSCloudWatchProvider.js.map +0 -1
- package/lib-esm/Providers/index.js.map +0 -1
- package/lib-esm/RNComponents/index.js.map +0 -1
- package/lib-esm/RNComponents/reactnative.js.map +0 -1
- package/lib-esm/ServiceWorker/ServiceWorker.js.map +0 -1
- package/lib-esm/ServiceWorker/index.js.map +0 -1
- package/lib-esm/Signer.js.map +0 -1
- package/lib-esm/StorageHelper/index.js.map +0 -1
- package/lib-esm/StorageHelper/reactnative.js.map +0 -1
- package/lib-esm/UniversalStorage/index.js.map +0 -1
- package/lib-esm/Util/BackgroundProcessManager.js.map +0 -1
- package/lib-esm/Util/CognitoIdentityClient.d.ts +0 -14
- package/lib-esm/Util/CognitoIdentityClient.js +0 -27
- package/lib-esm/Util/CognitoIdentityClient.js.map +0 -1
- package/lib-esm/Util/Constants.js.map +0 -1
- package/lib-esm/Util/DateUtils.js.map +0 -1
- package/lib-esm/Util/Mutex.js.map +0 -1
- package/lib-esm/Util/Reachability.js.map +0 -1
- package/lib-esm/Util/Reachability.native.js.map +0 -1
- package/lib-esm/Util/Retry.js.map +0 -1
- package/lib-esm/Util/StringUtils.js.map +0 -1
- package/lib-esm/Util/index.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/constants.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/index.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/index.native.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/presignUrl.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/signRequest.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/types/index.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/types/signer.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalHeaders.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignature.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSignedHeaders.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.js.map +0 -1
- package/lib-esm/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.js.map +0 -1
- package/lib-esm/clients/types/aws.js.map +0 -1
- package/lib-esm/clients/types/core.js.map +0 -1
- package/lib-esm/clients/types/http.js.map +0 -1
- package/lib-esm/clients/types/index.js.map +0 -1
- package/lib-esm/constants.js.map +0 -1
- package/lib-esm/index.js.map +0 -1
- package/lib-esm/parseAWSExports.js.map +0 -1
- package/lib-esm/types/index.js.map +0 -1
- package/lib-esm/types/types.js.map +0 -1
- package/src/Util/CognitoIdentityClient.ts +0 -48
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Middleware,
|
|
6
|
+
MiddlewareHandler,
|
|
7
|
+
TransferHandler,
|
|
8
|
+
Request as RequestBase,
|
|
9
|
+
Response as ResponseBase,
|
|
10
|
+
} from '../types';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Compose a transfer handler with a core transfer handler and a list of middleware.
|
|
14
|
+
* @param coreHandler Core transfer handler
|
|
15
|
+
* @param middleware List of middleware
|
|
16
|
+
* @returns A transfer handler whose option type is the union of the core
|
|
17
|
+
* transfer handler's option type and the middleware's option type.
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export const composeTransferHandler =
|
|
21
|
+
<
|
|
22
|
+
MiddlewareOptionsArr extends any[] = [],
|
|
23
|
+
Request extends RequestBase = RequestBase,
|
|
24
|
+
Response extends ResponseBase = ResponseBase,
|
|
25
|
+
CoreHandler extends TransferHandler<
|
|
26
|
+
Request,
|
|
27
|
+
Response,
|
|
28
|
+
any
|
|
29
|
+
> = TransferHandler<Request, Response, {}>
|
|
30
|
+
>(
|
|
31
|
+
coreHandler: CoreHandler,
|
|
32
|
+
middleware: OptionToMiddleware<Request, Response, MiddlewareOptionsArr>
|
|
33
|
+
) =>
|
|
34
|
+
(
|
|
35
|
+
request: Request,
|
|
36
|
+
options: MergeNoConflictKeys<
|
|
37
|
+
[...MiddlewareOptionsArr, InferOptionTypeFromTransferHandler<CoreHandler>]
|
|
38
|
+
>
|
|
39
|
+
) => {
|
|
40
|
+
const context = {};
|
|
41
|
+
let composedHandler: MiddlewareHandler<Request, Response> = (
|
|
42
|
+
request: Request
|
|
43
|
+
) => coreHandler(request, options);
|
|
44
|
+
for (let i = middleware.length - 1; i >= 0; i--) {
|
|
45
|
+
const m = middleware[i];
|
|
46
|
+
const resolvedMiddleware = m(options);
|
|
47
|
+
composedHandler = resolvedMiddleware(composedHandler, context);
|
|
48
|
+
}
|
|
49
|
+
return composedHandler(request);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Type to convert a middleware option type to a middleware type with the given
|
|
54
|
+
* option type.
|
|
55
|
+
*/
|
|
56
|
+
type OptionToMiddleware<
|
|
57
|
+
Request extends RequestBase,
|
|
58
|
+
Response extends ResponseBase,
|
|
59
|
+
Options extends any[]
|
|
60
|
+
> = Options extends []
|
|
61
|
+
? []
|
|
62
|
+
: Options extends [infer LastOption]
|
|
63
|
+
? [Middleware<Request, Response, LastOption>]
|
|
64
|
+
: Options extends [infer FirstOption, ...infer RestOptions]
|
|
65
|
+
? [
|
|
66
|
+
Middleware<Request, Response, FirstOption>,
|
|
67
|
+
...OptionToMiddleware<Request, Response, RestOptions>
|
|
68
|
+
]
|
|
69
|
+
: never;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Type to intersect multiple types if they have no conflict keys.
|
|
73
|
+
*/
|
|
74
|
+
type MergeNoConflictKeys<Options extends any[]> = Options extends [
|
|
75
|
+
infer OnlyOption
|
|
76
|
+
]
|
|
77
|
+
? OnlyOption
|
|
78
|
+
: Options extends [infer FirstOption, infer SecondOption]
|
|
79
|
+
? FirstOption & SecondOption
|
|
80
|
+
: Options extends [infer FirstOption, ...infer RestOptions]
|
|
81
|
+
? FirstOption & MergeNoConflictKeys<RestOptions>
|
|
82
|
+
: never;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Type to infer the option type of a transfer handler type.
|
|
86
|
+
*/
|
|
87
|
+
type InferOptionTypeFromTransferHandler<
|
|
88
|
+
T extends TransferHandler<any, any, any>
|
|
89
|
+
> = Parameters<T>[1];
|
|
@@ -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 { HttpResponse, ErrorParser } from '../../types';
|
|
5
|
+
import { isClockSkewError } from '../../utils/isClockSkewError';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Get retry decider function
|
|
9
|
+
* @param errorParser Function to load JavaScript error from HTTP response
|
|
10
|
+
*/
|
|
11
|
+
export const getRetryDecider =
|
|
12
|
+
(errorParser: ErrorParser) =>
|
|
13
|
+
async (response?: HttpResponse, error?: Error): Promise<boolean> => {
|
|
14
|
+
const { name: errorCode } = error ?? (await errorParser(response)) ?? {};
|
|
15
|
+
const statusCode = response?.statusCode;
|
|
16
|
+
return (
|
|
17
|
+
isConnectionError(error) ||
|
|
18
|
+
isThrottlingError(statusCode, errorCode) ||
|
|
19
|
+
isClockSkewError(errorCode) ||
|
|
20
|
+
isServerSideError(statusCode, errorCode)
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// reference: https://github.com/aws/aws-sdk-js-v3/blob/ab0e7be36e7e7f8a0c04834357aaad643c7912c3/packages/service-error-classification/src/constants.ts#L22-L37
|
|
25
|
+
const THROTTLING_ERROR_CODES = [
|
|
26
|
+
'BandwidthLimitExceeded',
|
|
27
|
+
'EC2ThrottledException',
|
|
28
|
+
'LimitExceededException',
|
|
29
|
+
'PriorRequestNotComplete',
|
|
30
|
+
'ProvisionedThroughputExceededException',
|
|
31
|
+
'RequestLimitExceeded',
|
|
32
|
+
'RequestThrottled',
|
|
33
|
+
'RequestThrottledException',
|
|
34
|
+
'SlowDown',
|
|
35
|
+
'ThrottledException',
|
|
36
|
+
'Throttling',
|
|
37
|
+
'ThrottlingException',
|
|
38
|
+
'TooManyRequestsException',
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const TIMEOUT_ERROR_CODES = [
|
|
42
|
+
'TimeoutError',
|
|
43
|
+
'RequestTimeout',
|
|
44
|
+
'RequestTimeoutException',
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const isThrottlingError = (statusCode?: number, errorCode?: string) =>
|
|
48
|
+
statusCode === 429 || THROTTLING_ERROR_CODES.includes(errorCode);
|
|
49
|
+
|
|
50
|
+
const isConnectionError = (error?: Error) => error?.name === 'Network error';
|
|
51
|
+
|
|
52
|
+
const isServerSideError = (statusCode?: number, errorCode?: string) =>
|
|
53
|
+
[500, 502, 503, 504].includes(statusCode) ||
|
|
54
|
+
TIMEOUT_ERROR_CODES.includes(errorCode);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
export { RetryOptions, retryMiddleware } from './middleware';
|
|
5
|
+
export { jitteredBackoff } from './jitteredBackoff';
|
|
6
|
+
export { getRetryDecider } from './defaultRetryDecider';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import type { RetryOptions } from './middleware';
|
|
5
|
+
// TODO: [v6] The separate retry utility is used by Data packages now and will replaced by retry middleware.
|
|
6
|
+
import { jitteredBackoff as jitteredBackoffUtil } from '../../../Util/Retry';
|
|
7
|
+
|
|
8
|
+
const DEFAULT_MAX_DELAY_MS = 5 * 60 * 1000;
|
|
9
|
+
|
|
10
|
+
export const jitteredBackoff: RetryOptions['computeDelay'] = attempt => {
|
|
11
|
+
const delayFunction = jitteredBackoffUtil(DEFAULT_MAX_DELAY_MS);
|
|
12
|
+
const delay = delayFunction(attempt);
|
|
13
|
+
// The delayFunction returns false when the delay is greater than the max delay(5 mins).
|
|
14
|
+
// In this case, the retry middleware will delay 5 mins instead, as a ceiling of the delay.
|
|
15
|
+
return delay === false ? DEFAULT_MAX_DELAY_MS : delay;
|
|
16
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { MetadataBearer } from '@aws-sdk/types';
|
|
5
|
+
import {
|
|
6
|
+
MiddlewareContext,
|
|
7
|
+
MiddlewareHandler,
|
|
8
|
+
Request,
|
|
9
|
+
Response,
|
|
10
|
+
} from '../../types/core';
|
|
11
|
+
|
|
12
|
+
const DEFAULT_RETRY_ATTEMPTS = 3;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Configuration of the retry middleware
|
|
16
|
+
*/
|
|
17
|
+
export interface RetryOptions<TResponse = Response> {
|
|
18
|
+
/**
|
|
19
|
+
* Function to decide if the request should be retried.
|
|
20
|
+
*
|
|
21
|
+
* @param response Optional response of the request.
|
|
22
|
+
* @param error Optional error thrown from previous attempts.
|
|
23
|
+
* @returns True if the request should be retried.
|
|
24
|
+
*/
|
|
25
|
+
retryDecider: (response?: TResponse, error?: unknown) => Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* Function to compute the delay in milliseconds before the next retry based
|
|
28
|
+
* on the number of attempts.
|
|
29
|
+
* @param attempt Current number of attempts, including the first attempt.
|
|
30
|
+
* @returns Delay in milliseconds.
|
|
31
|
+
*/
|
|
32
|
+
computeDelay: (attempt: number) => number;
|
|
33
|
+
/**
|
|
34
|
+
* Maximum number of retry attempts, starting from 1. Defaults to 3.
|
|
35
|
+
*/
|
|
36
|
+
maxAttempts?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Optional AbortSignal to abort the retry attempts.
|
|
39
|
+
*/
|
|
40
|
+
abortSignal?: AbortSignal;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Retry middleware
|
|
45
|
+
*/
|
|
46
|
+
export const retryMiddleware = <TInput = Request, TOutput = Response>({
|
|
47
|
+
maxAttempts = DEFAULT_RETRY_ATTEMPTS,
|
|
48
|
+
retryDecider,
|
|
49
|
+
computeDelay,
|
|
50
|
+
abortSignal,
|
|
51
|
+
}: RetryOptions<TOutput>) => {
|
|
52
|
+
if (maxAttempts < 1) {
|
|
53
|
+
throw new Error('maxAttempts must be greater than 0');
|
|
54
|
+
}
|
|
55
|
+
return (
|
|
56
|
+
next: MiddlewareHandler<TInput, TOutput>,
|
|
57
|
+
context: MiddlewareContext
|
|
58
|
+
) =>
|
|
59
|
+
async function retryMiddleware(request: TInput) {
|
|
60
|
+
let error: Error;
|
|
61
|
+
let attemptsCount = context.attemptsCount ?? 0;
|
|
62
|
+
let response: TOutput;
|
|
63
|
+
while (!abortSignal?.aborted && attemptsCount < maxAttempts) {
|
|
64
|
+
error = undefined;
|
|
65
|
+
response = undefined;
|
|
66
|
+
try {
|
|
67
|
+
response = await next(request);
|
|
68
|
+
} catch (e) {
|
|
69
|
+
error = e;
|
|
70
|
+
}
|
|
71
|
+
// context.attemptsCount may be updated after calling next handler which may retry the request by itself.
|
|
72
|
+
attemptsCount =
|
|
73
|
+
context.attemptsCount > attemptsCount
|
|
74
|
+
? context.attemptsCount
|
|
75
|
+
: attemptsCount + 1;
|
|
76
|
+
context.attemptsCount = attemptsCount;
|
|
77
|
+
if (await retryDecider(response, error)) {
|
|
78
|
+
if (!abortSignal?.aborted && attemptsCount < maxAttempts) {
|
|
79
|
+
// prevent sleep for last attempt or cancelled request;
|
|
80
|
+
const delay = computeDelay(attemptsCount);
|
|
81
|
+
await cancellableSleep(delay, abortSignal);
|
|
82
|
+
}
|
|
83
|
+
continue;
|
|
84
|
+
} else if (response) {
|
|
85
|
+
updateMetadataAttempts(response, attemptsCount);
|
|
86
|
+
return response;
|
|
87
|
+
} else {
|
|
88
|
+
updateMetadataAttempts(error, attemptsCount);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
throw abortSignal?.aborted
|
|
93
|
+
? new Error('Request aborted')
|
|
94
|
+
: error ?? new Error('Retry attempts exhausted');
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const cancellableSleep = (timeoutMs: number, abortSignal?: AbortSignal) => {
|
|
99
|
+
if (abortSignal?.aborted) {
|
|
100
|
+
return Promise.resolve();
|
|
101
|
+
}
|
|
102
|
+
let timeoutId;
|
|
103
|
+
let sleepPromiseResolveFn;
|
|
104
|
+
const sleepPromise = new Promise<void>(resolve => {
|
|
105
|
+
sleepPromiseResolveFn = resolve;
|
|
106
|
+
timeoutId = setTimeout(resolve, timeoutMs);
|
|
107
|
+
});
|
|
108
|
+
abortSignal?.addEventListener('abort', function cancelSleep(event) {
|
|
109
|
+
clearTimeout(timeoutId);
|
|
110
|
+
abortSignal?.removeEventListener('abort', cancelSleep);
|
|
111
|
+
sleepPromiseResolveFn();
|
|
112
|
+
});
|
|
113
|
+
return sleepPromise;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Check if the response is a contains `$metadata` property.
|
|
118
|
+
*
|
|
119
|
+
* @internal Amplify internal use only
|
|
120
|
+
*/
|
|
121
|
+
export const isMetadataBearer = (
|
|
122
|
+
response: unknown
|
|
123
|
+
): response is MetadataBearer => typeof response?.['$metadata'] === 'object';
|
|
124
|
+
|
|
125
|
+
const updateMetadataAttempts = (
|
|
126
|
+
nextHandlerOutput: Object,
|
|
127
|
+
attempts: number
|
|
128
|
+
) => {
|
|
129
|
+
if (isMetadataBearer(nextHandlerOutput)) {
|
|
130
|
+
nextHandlerOutput.$metadata.attempts = attempts;
|
|
131
|
+
}
|
|
132
|
+
nextHandlerOutput['$metadata'] = { attempts };
|
|
133
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
Credentials,
|
|
6
|
+
HttpRequest,
|
|
7
|
+
HttpResponse,
|
|
8
|
+
MiddlewareHandler,
|
|
9
|
+
} from '../../types';
|
|
10
|
+
import { isClockSkewError } from '../../utils/isClockSkewError';
|
|
11
|
+
import { signRequest } from './signer/signatureV4';
|
|
12
|
+
import { getSkewCorrectedDate } from './utils/getSkewCorrectedDate';
|
|
13
|
+
import { getUpdatedSystemClockOffset } from './utils/getUpdatedSystemClockOffset';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Configuration of the signing middleware
|
|
17
|
+
*/
|
|
18
|
+
export interface SigningOptions {
|
|
19
|
+
credentials: Credentials;
|
|
20
|
+
region: string;
|
|
21
|
+
service: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Middleware that SigV4 signs request with AWS credentials, and correct system clock offset.
|
|
26
|
+
*/
|
|
27
|
+
export const signingMiddleware = ({
|
|
28
|
+
credentials,
|
|
29
|
+
region,
|
|
30
|
+
service,
|
|
31
|
+
}: SigningOptions) => {
|
|
32
|
+
let currentSystemClockOffset;
|
|
33
|
+
return (next: MiddlewareHandler<HttpRequest, HttpResponse>) =>
|
|
34
|
+
async function signingMiddleware(request: HttpRequest) {
|
|
35
|
+
currentSystemClockOffset = currentSystemClockOffset ?? 0;
|
|
36
|
+
const signRequestOptions = {
|
|
37
|
+
credentials,
|
|
38
|
+
signingDate: getSkewCorrectedDate(currentSystemClockOffset),
|
|
39
|
+
signingRegion: region,
|
|
40
|
+
signingService: service,
|
|
41
|
+
};
|
|
42
|
+
const signedRequest = await signRequest(request, signRequestOptions);
|
|
43
|
+
try {
|
|
44
|
+
const response = await next(signedRequest);
|
|
45
|
+
return response;
|
|
46
|
+
} catch (error) {
|
|
47
|
+
const dateString = shouldUseServerTime(error)
|
|
48
|
+
? error.ServerTime
|
|
49
|
+
: getDateHeader(error.$response);
|
|
50
|
+
if (dateString) {
|
|
51
|
+
currentSystemClockOffset = getUpdatedSystemClockOffset(
|
|
52
|
+
Date.parse(dateString),
|
|
53
|
+
currentSystemClockOffset
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const shouldUseServerTime = ({ ServerTime, Code }: any): boolean =>
|
|
62
|
+
ServerTime && isClockSkewError(Code);
|
|
63
|
+
|
|
64
|
+
const getDateHeader = ({ headers }: any = {}): string | undefined =>
|
|
65
|
+
headers?.date ?? headers?.Date;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Wraps encodeURIComponent to encode additional characters to fully adhere to RFC 3986.
|
|
6
|
+
* @see https://github.com/aws/aws-sdk-js-v3/blob/86b432c464150069678b25ff88d57c2ca26e75a2/packages/smithy-client/src/extended-encode-uri-component.ts#L7
|
|
7
|
+
*
|
|
8
|
+
* @param uri URI string to encode
|
|
9
|
+
* @returns RFC 3986 encoded string
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export const extendedEncodeURIComponent = (uri: string): string => {
|
|
14
|
+
// Match characters normally not encoded by `encodeURIComponent`
|
|
15
|
+
const extendedCharacters = /[!'()*]/g;
|
|
16
|
+
|
|
17
|
+
return encodeURIComponent(uri).replace(extendedCharacters, hexEncode);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const hexEncode = (c: string) =>
|
|
21
|
+
`%${c.charCodeAt(0).toString(16).toUpperCase()}`;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Returns a `Date` that is corrected for clock skew.
|
|
6
|
+
*
|
|
7
|
+
* @param systemClockOffset The offset of the system clock in milliseconds.
|
|
8
|
+
*
|
|
9
|
+
* @returns `Date` representing the current time adjusted by the system clock offset.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export const getSkewCorrectedDate = (systemClockOffset: number): Date =>
|
|
14
|
+
new Date(Date.now() + systemClockOffset);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { isClockSkewed } from './isClockSkewed';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Returns the difference between clock time and the current system time if clock is skewed.
|
|
8
|
+
*
|
|
9
|
+
* @param clockTimeInMilliseconds Clock time in milliseconds.
|
|
10
|
+
* @param currentSystemClockOffset Current system clock offset in milliseconds.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export const getUpdatedSystemClockOffset = (
|
|
15
|
+
clockTimeInMilliseconds: number,
|
|
16
|
+
currentSystemClockOffset: number
|
|
17
|
+
): number => {
|
|
18
|
+
if (isClockSkewed(clockTimeInMilliseconds, currentSystemClockOffset)) {
|
|
19
|
+
return clockTimeInMilliseconds - Date.now();
|
|
20
|
+
}
|
|
21
|
+
return currentSystemClockOffset;
|
|
22
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { getSkewCorrectedDate } from './getSkewCorrectedDate';
|
|
5
|
+
|
|
6
|
+
// 5 mins in milliseconds. Ref: https://github.com/aws/aws-sdk-js-v3/blob/6c0f44fab30a1bb2134af47362a31332abc3666b/packages/middleware-signing/src/utils/isClockSkewed.ts#L10
|
|
7
|
+
const SKEW_WINDOW = 5 * 60 * 1000;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Checks if the provided date is within the skew window of 5 minutes.
|
|
11
|
+
*
|
|
12
|
+
* @param clockTimeInMilliseconds Time to check for skew in milliseconds.
|
|
13
|
+
* @param clockOffsetInMilliseconds Offset to check clock against in milliseconds.
|
|
14
|
+
*
|
|
15
|
+
* @returns True if skewed. False otherwise.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export const isClockSkewed = (
|
|
20
|
+
clockTimeInMilliseconds: number,
|
|
21
|
+
clockOffsetInMilliseconds: number
|
|
22
|
+
): boolean =>
|
|
23
|
+
Math.abs(
|
|
24
|
+
getSkewCorrectedDate(clockOffsetInMilliseconds).getTime() -
|
|
25
|
+
clockTimeInMilliseconds
|
|
26
|
+
) >= SKEW_WINDOW;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { HttpRequest, HttpResponse } from '../../types/http';
|
|
5
|
+
import { Middleware } from '../../types/core';
|
|
6
|
+
|
|
7
|
+
export interface UserAgentOptions {
|
|
8
|
+
userAgentHeader?: string;
|
|
9
|
+
userAgentValue?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Middleware injects user agent string to specified header(default to 'x-amz-user-agent'),
|
|
14
|
+
* if the header is not set already.
|
|
15
|
+
*
|
|
16
|
+
* TODO: incorporate new user agent design
|
|
17
|
+
*/
|
|
18
|
+
export const userAgentMiddleware: Middleware<
|
|
19
|
+
HttpRequest,
|
|
20
|
+
HttpResponse,
|
|
21
|
+
UserAgentOptions
|
|
22
|
+
> =
|
|
23
|
+
({
|
|
24
|
+
userAgentHeader = 'x-amz-user-agent',
|
|
25
|
+
userAgentValue = '',
|
|
26
|
+
}: UserAgentOptions) =>
|
|
27
|
+
next => {
|
|
28
|
+
return async function userAgentMiddleware(request) {
|
|
29
|
+
if (userAgentValue.trim().length === 0) {
|
|
30
|
+
const result = await next(request);
|
|
31
|
+
return result;
|
|
32
|
+
} else {
|
|
33
|
+
const headerName = userAgentHeader.toLowerCase();
|
|
34
|
+
request.headers[headerName] = request.headers[headerName]
|
|
35
|
+
? `${request.headers[headerName]} ${userAgentValue}`
|
|
36
|
+
: userAgentValue;
|
|
37
|
+
const response = await next(request);
|
|
38
|
+
return response;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { ErrorParser, HttpResponse } from '../types';
|
|
5
|
+
import { parseMetadata } from './responseInfo';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Utility functions for serializing and deserializing of JSON protocol in general(including: REST-JSON, JSON-RPC, etc.)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Error parser for AWS JSON protocol.
|
|
13
|
+
*/
|
|
14
|
+
export const parseJsonError: ErrorParser = async (response?: HttpResponse) => {
|
|
15
|
+
if (!response || response.statusCode < 300) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const body = await parseJsonBody(response);
|
|
19
|
+
const sanitizeErrorCode = (rawValue: string | number): string => {
|
|
20
|
+
const [cleanValue] = rawValue.toString().split(/[\,\:]+/);
|
|
21
|
+
if (cleanValue.includes('#')) {
|
|
22
|
+
return cleanValue.split('#')[1];
|
|
23
|
+
}
|
|
24
|
+
return cleanValue;
|
|
25
|
+
};
|
|
26
|
+
const code = sanitizeErrorCode(
|
|
27
|
+
response.headers['x-amzn-errortype'] ??
|
|
28
|
+
body.code ??
|
|
29
|
+
body.__type ??
|
|
30
|
+
'UnknownError'
|
|
31
|
+
);
|
|
32
|
+
const message = body.message ?? body.Message ?? 'Unknown error';
|
|
33
|
+
const error = new Error(message);
|
|
34
|
+
return Object.assign(error, {
|
|
35
|
+
name: code,
|
|
36
|
+
$metadata: parseMetadata(response),
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Parse JSON response body to JavaScript object.
|
|
42
|
+
*/
|
|
43
|
+
export const parseJsonBody = async (response: HttpResponse): Promise<any> => {
|
|
44
|
+
if (!response.body) {
|
|
45
|
+
throw new Error('Missing response payload');
|
|
46
|
+
}
|
|
47
|
+
const output = await response.body.json();
|
|
48
|
+
return Object.assign(output, {
|
|
49
|
+
$metadata: parseMetadata(response),
|
|
50
|
+
});
|
|
51
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { ResponseMetadata } from '@aws-sdk/types';
|
|
5
|
+
import { isMetadataBearer } from '../middleware/retry/middleware';
|
|
6
|
+
import { HttpResponse } from '../types/http';
|
|
7
|
+
|
|
8
|
+
export const parseMetadata = (response: HttpResponse): ResponseMetadata => {
|
|
9
|
+
const { headers, statusCode } = response;
|
|
10
|
+
return {
|
|
11
|
+
...(isMetadataBearer(response) ? response.$metadata : {}),
|
|
12
|
+
httpStatusCode: statusCode,
|
|
13
|
+
requestId:
|
|
14
|
+
headers['x-amzn-requestid'] ??
|
|
15
|
+
headers['x-amzn-request-id'] ??
|
|
16
|
+
headers['x-amz-request-id'],
|
|
17
|
+
extendedRequestId: headers['x-amz-id-2'],
|
|
18
|
+
cfId: headers['x-amz-cf-id'],
|
|
19
|
+
};
|
|
20
|
+
};
|
package/src/clients/types/aws.ts
CHANGED
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import { Endpoint } from './core';
|
|
5
|
+
import { HttpResponse } from './http';
|
|
6
|
+
|
|
4
7
|
export type { Credentials } from '@aws-sdk/types';
|
|
5
8
|
|
|
6
9
|
export type SourceData = string | ArrayBuffer | ArrayBufferView;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Basic option type for endpoint resolvers. It contains region only.
|
|
13
|
+
*/
|
|
14
|
+
export type EndpointResolverOptions = { region: string };
|
|
15
|
+
|
|
16
|
+
export interface ServiceClientOptions {
|
|
17
|
+
region: string;
|
|
18
|
+
endpointResolver: (options: EndpointResolverOptions) => Endpoint;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* parse errors from given response. If no error code is found, return undefined.
|
|
23
|
+
* This function is protocol-specific (e.g. JSON, XML, etc.)
|
|
24
|
+
*/
|
|
25
|
+
export type ErrorParser = (
|
|
26
|
+
response?: HttpResponse
|
|
27
|
+
) => Promise<Error | undefined>;
|
|
@@ -12,6 +12,46 @@ export interface Request {
|
|
|
12
12
|
export interface Response {
|
|
13
13
|
body: unknown;
|
|
14
14
|
}
|
|
15
|
+
|
|
16
|
+
export interface TransferHandler<
|
|
17
|
+
Input extends Request,
|
|
18
|
+
Output extends Response,
|
|
19
|
+
TransferOptions
|
|
20
|
+
> {
|
|
21
|
+
(request: Input, options: TransferOptions): Promise<Output>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A slimmed down version of the AWS SDK v3 middleware handler, only handling instantiated requests
|
|
26
|
+
*/
|
|
27
|
+
export type MiddlewareHandler<Input, Output> = (
|
|
28
|
+
request: Input
|
|
29
|
+
) => Promise<Output>;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The context object to store states across the middleware chain.
|
|
33
|
+
*/
|
|
34
|
+
export type MiddlewareContext = {
|
|
35
|
+
/**
|
|
36
|
+
* The number of times the request has been attempted. This is set by retry middleware
|
|
37
|
+
*/
|
|
38
|
+
attemptsCount?: number;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
type ConfiguredMiddleware<Input extends Request, Output extends Response> = (
|
|
42
|
+
next: MiddlewareHandler<Input, Output>,
|
|
43
|
+
context: MiddlewareContext
|
|
44
|
+
) => MiddlewareHandler<Input, Output>;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A slimmed down version of the AWS SDK v3 middleware, only handling tasks after Serde.
|
|
48
|
+
*/
|
|
49
|
+
export type Middleware<
|
|
50
|
+
Input extends Request,
|
|
51
|
+
Output extends Response,
|
|
52
|
+
MiddlewareOptions
|
|
53
|
+
> = (options: MiddlewareOptions) => ConfiguredMiddleware<Input, Output>;
|
|
54
|
+
|
|
15
55
|
export interface Endpoint {
|
|
16
56
|
url: URL;
|
|
17
57
|
}
|