@aws-amplify/core 6.0.15 → 6.0.16-eslint-test.319d1b3.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/BackgroundProcessManager/BackgroundProcessManager.js +11 -16
- package/dist/cjs/BackgroundProcessManager/BackgroundProcessManager.js.map +1 -1
- package/dist/cjs/Cache/StorageCacheCommon.js +5 -5
- package/dist/cjs/Cache/StorageCacheCommon.js.map +1 -1
- package/dist/cjs/Cache/utils/CacheList.js +2 -2
- package/dist/cjs/Cache/utils/CacheList.js.map +1 -1
- package/dist/cjs/Hub/index.js +2 -2
- package/dist/cjs/Hub/index.js.map +1 -1
- package/dist/cjs/I18n/I18n.js +8 -13
- package/dist/cjs/I18n/I18n.js.map +1 -1
- package/dist/cjs/I18n/index.js +4 -4
- package/dist/cjs/I18n/index.js.map +1 -1
- package/dist/cjs/Logger/ConsoleLogger.js +7 -7
- package/dist/cjs/Logger/ConsoleLogger.js.map +1 -1
- package/dist/cjs/Mutex/Mutex.js +4 -1
- package/dist/cjs/Mutex/Mutex.js.map +1 -1
- package/dist/cjs/Platform/detectFramework.js +3 -1
- package/dist/cjs/Platform/detectFramework.js.map +1 -1
- package/dist/cjs/Platform/detection/Angular.js +2 -4
- package/dist/cjs/Platform/detection/Angular.js.map +1 -1
- package/dist/cjs/Platform/detection/Expo.js +1 -2
- package/dist/cjs/Platform/detection/Expo.js.map +1 -1
- package/dist/cjs/Platform/detection/Next.js +3 -2
- package/dist/cjs/Platform/detection/Next.js.map +1 -1
- package/dist/cjs/Platform/detection/Nuxt.js +3 -4
- package/dist/cjs/Platform/detection/Nuxt.js.map +1 -1
- package/dist/cjs/Platform/index.js +1 -1
- package/dist/cjs/Platform/index.js.map +1 -1
- package/dist/cjs/Platform/version.js +1 -1
- package/dist/cjs/Platform/version.js.map +1 -1
- package/dist/cjs/Reachability/Reachability.js +6 -2
- package/dist/cjs/Reachability/Reachability.js.map +1 -1
- package/dist/cjs/ServiceWorker/ServiceWorker.js +11 -11
- package/dist/cjs/ServiceWorker/ServiceWorker.js.map +1 -1
- package/dist/cjs/Signer/DateUtils.js +1 -1
- package/dist/cjs/Signer/DateUtils.js.map +1 -1
- package/dist/cjs/Signer/Signer.js +3 -3
- package/dist/cjs/Signer/Signer.js.map +1 -1
- package/dist/cjs/adapterCore/serverContext/serverContext.js +1 -1
- package/dist/cjs/adapterCore/serverContext/serverContext.js.map +1 -1
- package/dist/cjs/awsClients/cognitoIdentity/base.js +2 -2
- package/dist/cjs/awsClients/cognitoIdentity/base.js.map +1 -1
- package/dist/cjs/awsClients/cognitoIdentity/getCredentialsForIdentity.js +1 -1
- package/dist/cjs/awsClients/cognitoIdentity/getCredentialsForIdentity.js.map +1 -1
- package/dist/cjs/awsClients/cognitoIdentity/getId.js +1 -1
- package/dist/cjs/awsClients/cognitoIdentity/getId.js.map +1 -1
- package/dist/cjs/awsClients/pinpoint/getInAppMessages.js +1 -1
- package/dist/cjs/awsClients/pinpoint/getInAppMessages.js.map +1 -1
- package/dist/cjs/awsClients/pinpoint/putEvents.js +1 -1
- package/dist/cjs/awsClients/pinpoint/putEvents.js.map +1 -1
- package/dist/cjs/awsClients/pinpoint/types.js +0 -1
- package/dist/cjs/awsClients/pinpoint/types.js.map +1 -1
- package/dist/cjs/awsClients/pinpoint/updateEndpoint.js +1 -1
- package/dist/cjs/awsClients/pinpoint/updateEndpoint.js.map +1 -1
- package/dist/cjs/clients/handlers/authenticated.js +3 -3
- package/dist/cjs/clients/handlers/authenticated.js.map +1 -1
- package/dist/cjs/clients/handlers/unauthenticated.js +1 -1
- package/dist/cjs/clients/handlers/unauthenticated.js.map +1 -1
- package/dist/cjs/clients/index.js +3 -3
- package/dist/cjs/clients/index.js.map +1 -1
- package/dist/cjs/clients/internal/composeServiceApi.js +1 -1
- package/dist/cjs/clients/internal/composeServiceApi.js.map +1 -1
- package/dist/cjs/clients/internal/composeTransferHandler.js +1 -1
- package/dist/cjs/clients/internal/composeTransferHandler.js.map +1 -1
- package/dist/cjs/clients/middleware/retry/defaultRetryDecider.js +2 -2
- package/dist/cjs/clients/middleware/retry/defaultRetryDecider.js.map +1 -1
- package/dist/cjs/clients/middleware/retry/index.js +2 -2
- package/dist/cjs/clients/middleware/retry/index.js.map +1 -1
- package/dist/cjs/clients/middleware/retry/jitteredBackoff.js +1 -1
- package/dist/cjs/clients/middleware/retry/jitteredBackoff.js.map +1 -1
- package/dist/cjs/clients/middleware/retry/middleware.js +6 -6
- package/dist/cjs/clients/middleware/retry/middleware.js.map +1 -1
- package/dist/cjs/clients/middleware/signing/index.js +2 -2
- package/dist/cjs/clients/middleware/signing/index.js.map +1 -1
- package/dist/cjs/clients/middleware/signing/middleware.js +3 -3
- package/dist/cjs/clients/middleware/signing/middleware.js.map +1 -1
- package/dist/cjs/clients/middleware/signing/signer/signatureV4/presignUrl.js +1 -2
- package/dist/cjs/clients/middleware/signing/signer/signatureV4/presignUrl.js.map +1 -1
- package/dist/cjs/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js +1 -1
- package/dist/cjs/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.js.map +1 -1
- package/dist/cjs/clients/middleware/userAgent/index.js +2 -2
- package/dist/cjs/clients/middleware/userAgent/index.js.map +1 -1
- package/dist/cjs/clients/middleware/userAgent/middleware.js +3 -3
- package/dist/cjs/clients/middleware/userAgent/middleware.js.map +1 -1
- package/dist/cjs/clients/serde/json.js +1 -1
- package/dist/cjs/clients/serde/json.js.map +1 -1
- package/dist/cjs/errors/errorHelpers.js +1 -1
- package/dist/cjs/errors/errorHelpers.js.map +1 -1
- package/dist/cjs/parseAWSExports.js +1 -1
- package/dist/cjs/parseAWSExports.js.map +1 -1
- package/dist/cjs/providers/pinpoint/apis/updateEndpoint.js +1 -1
- package/dist/cjs/providers/pinpoint/apis/updateEndpoint.js.map +1 -1
- package/dist/cjs/providers/pinpoint/utils/PinpointEventBuffer.js +2 -3
- package/dist/cjs/providers/pinpoint/utils/PinpointEventBuffer.js.map +1 -1
- package/dist/cjs/providers/pinpoint/utils/isAppInForeground.native.js +0 -1
- package/dist/cjs/providers/pinpoint/utils/isAppInForeground.native.js.map +1 -1
- package/dist/cjs/singleton/Amplify.js +1 -1
- package/dist/cjs/singleton/Amplify.js.map +1 -1
- package/dist/cjs/singleton/apis/fetchAuthSession.js +1 -1
- package/dist/cjs/singleton/apis/fetchAuthSession.js.map +1 -1
- package/dist/cjs/utils/WordArray.js +2 -2
- package/dist/cjs/utils/WordArray.js.map +1 -1
- package/dist/cjs/utils/deDupeAsyncFunction.js +8 -8
- package/dist/cjs/utils/deDupeAsyncFunction.js.map +1 -1
- package/dist/cjs/utils/getClientInfo/getClientInfo.android.js +2 -3
- package/dist/cjs/utils/getClientInfo/getClientInfo.android.js.map +1 -1
- package/dist/cjs/utils/getClientInfo/getClientInfo.ios.js +2 -3
- package/dist/cjs/utils/getClientInfo/getClientInfo.ios.js.map +1 -1
- package/dist/cjs/utils/queuedStorage/createQueuedStorage.native.js +2 -2
- package/dist/cjs/utils/queuedStorage/createQueuedStorage.native.js.map +1 -1
- package/dist/cjs/utils/retry/NonRetryableError.js +2 -2
- package/dist/cjs/utils/retry/NonRetryableError.js.map +1 -1
- package/dist/cjs/utils/retry/retry.js +15 -6
- package/dist/cjs/utils/retry/retry.js.map +1 -1
- package/dist/esm/BackgroundProcessManager/BackgroundProcessManager.d.ts +2 -8
- package/dist/esm/BackgroundProcessManager/BackgroundProcessManager.mjs +11 -16
- package/dist/esm/BackgroundProcessManager/BackgroundProcessManager.mjs.map +1 -1
- package/dist/esm/BackgroundProcessManager/types.d.ts +3 -3
- package/dist/esm/Cache/StorageCacheCommon.mjs +5 -5
- package/dist/esm/Cache/StorageCacheCommon.mjs.map +1 -1
- package/dist/esm/Cache/types/cache.d.ts +1 -1
- package/dist/esm/Cache/utils/CacheList.mjs +2 -2
- package/dist/esm/Cache/utils/CacheList.mjs.map +1 -1
- package/dist/esm/Hub/index.d.ts +4 -4
- package/dist/esm/Hub/index.mjs +2 -2
- package/dist/esm/Hub/index.mjs.map +1 -1
- package/dist/esm/Hub/types/AuthTypes.d.ts +11 -11
- package/dist/esm/Hub/types/HubTypes.d.ts +8 -8
- package/dist/esm/I18n/I18n.d.ts +0 -6
- package/dist/esm/I18n/I18n.mjs +8 -13
- package/dist/esm/I18n/I18n.mjs.map +1 -1
- package/dist/esm/I18n/index.mjs +4 -4
- package/dist/esm/I18n/index.mjs.map +1 -1
- package/dist/esm/Logger/ConsoleLogger.d.ts +1 -1
- package/dist/esm/Logger/ConsoleLogger.mjs +7 -7
- package/dist/esm/Logger/ConsoleLogger.mjs.map +1 -1
- package/dist/esm/Mutex/Mutex.mjs +4 -1
- package/dist/esm/Mutex/Mutex.mjs.map +1 -1
- package/dist/esm/Mutex/types.d.ts +2 -6
- package/dist/esm/Platform/detectFramework.mjs +3 -1
- package/dist/esm/Platform/detectFramework.mjs.map +1 -1
- package/dist/esm/Platform/detection/Angular.mjs +2 -4
- package/dist/esm/Platform/detection/Angular.mjs.map +1 -1
- package/dist/esm/Platform/detection/Expo.mjs +1 -2
- package/dist/esm/Platform/detection/Expo.mjs.map +1 -1
- package/dist/esm/Platform/detection/Next.mjs +3 -2
- package/dist/esm/Platform/detection/Next.mjs.map +1 -1
- package/dist/esm/Platform/detection/Nuxt.mjs +3 -4
- package/dist/esm/Platform/detection/Nuxt.mjs.map +1 -1
- package/dist/esm/Platform/detection/index.mjs.map +1 -1
- package/dist/esm/Platform/index.d.ts +2 -2
- package/dist/esm/Platform/index.mjs +1 -1
- package/dist/esm/Platform/index.mjs.map +1 -1
- package/dist/esm/Platform/types.d.ts +12 -12
- package/dist/esm/Platform/version.d.ts +1 -1
- package/dist/esm/Platform/version.mjs +1 -1
- package/dist/esm/Platform/version.mjs.map +1 -1
- package/dist/esm/Reachability/Reachability.mjs +6 -2
- package/dist/esm/Reachability/Reachability.mjs.map +1 -1
- package/dist/esm/Reachability/types.d.ts +2 -2
- package/dist/esm/ServiceWorker/ServiceWorker.d.ts +0 -1
- package/dist/esm/ServiceWorker/ServiceWorker.mjs +11 -11
- package/dist/esm/ServiceWorker/ServiceWorker.mjs.map +1 -1
- package/dist/esm/Signer/DateUtils.d.ts +9 -9
- package/dist/esm/Signer/DateUtils.mjs +1 -1
- package/dist/esm/Signer/DateUtils.mjs.map +1 -1
- package/dist/esm/Signer/Signer.mjs +3 -3
- package/dist/esm/Signer/Signer.mjs.map +1 -1
- package/dist/esm/adapterCore/serverContext/serverContext.d.ts +1 -1
- package/dist/esm/adapterCore/serverContext/serverContext.mjs +1 -1
- package/dist/esm/adapterCore/serverContext/serverContext.mjs.map +1 -1
- package/dist/esm/adapterCore/serverContext/types/amplifyServer.d.ts +7 -9
- package/dist/esm/awsClients/cognitoIdentity/base.d.ts +1 -1
- package/dist/esm/awsClients/cognitoIdentity/base.mjs +2 -2
- package/dist/esm/awsClients/cognitoIdentity/base.mjs.map +1 -1
- package/dist/esm/awsClients/cognitoIdentity/getCredentialsForIdentity.d.ts +2 -6
- package/dist/esm/awsClients/cognitoIdentity/getCredentialsForIdentity.mjs +1 -1
- package/dist/esm/awsClients/cognitoIdentity/getCredentialsForIdentity.mjs.map +1 -1
- package/dist/esm/awsClients/cognitoIdentity/getId.d.ts +2 -6
- package/dist/esm/awsClients/cognitoIdentity/getId.mjs +1 -1
- package/dist/esm/awsClients/cognitoIdentity/getId.mjs.map +1 -1
- package/dist/esm/awsClients/cognitoIdentity/types.d.ts +2 -4
- package/dist/esm/awsClients/pinpoint/base.mjs.map +1 -1
- package/dist/esm/awsClients/pinpoint/getInAppMessages.d.ts +1 -1
- package/dist/esm/awsClients/pinpoint/getInAppMessages.mjs +1 -1
- package/dist/esm/awsClients/pinpoint/getInAppMessages.mjs.map +1 -1
- package/dist/esm/awsClients/pinpoint/putEvents.d.ts +1 -1
- package/dist/esm/awsClients/pinpoint/putEvents.mjs +1 -1
- package/dist/esm/awsClients/pinpoint/putEvents.mjs.map +1 -1
- package/dist/esm/awsClients/pinpoint/types.d.ts +3 -6
- package/dist/esm/awsClients/pinpoint/updateEndpoint.d.ts +1 -1
- package/dist/esm/awsClients/pinpoint/updateEndpoint.mjs +1 -1
- package/dist/esm/awsClients/pinpoint/updateEndpoint.mjs.map +1 -1
- package/dist/esm/clients/handlers/authenticated.mjs +6 -6
- package/dist/esm/clients/handlers/authenticated.mjs.map +1 -1
- package/dist/esm/clients/handlers/unauthenticated.mjs +3 -3
- package/dist/esm/clients/handlers/unauthenticated.mjs.map +1 -1
- package/dist/esm/clients/index.d.ts +3 -3
- package/dist/esm/clients/index.mjs +3 -3
- package/dist/esm/clients/internal/composeServiceApi.d.ts +2 -2
- package/dist/esm/clients/internal/composeServiceApi.mjs +1 -1
- package/dist/esm/clients/internal/composeServiceApi.mjs.map +1 -1
- package/dist/esm/clients/internal/composeTransferHandler.d.ts +2 -2
- package/dist/esm/clients/internal/composeTransferHandler.mjs +1 -1
- package/dist/esm/clients/internal/composeTransferHandler.mjs.map +1 -1
- package/dist/esm/clients/middleware/retry/defaultRetryDecider.d.ts +1 -1
- package/dist/esm/clients/middleware/retry/defaultRetryDecider.mjs +2 -2
- package/dist/esm/clients/middleware/retry/defaultRetryDecider.mjs.map +1 -1
- package/dist/esm/clients/middleware/retry/index.d.ts +1 -1
- package/dist/esm/clients/middleware/retry/index.mjs +1 -1
- package/dist/esm/clients/middleware/retry/jitteredBackoff.mjs.map +1 -1
- package/dist/esm/clients/middleware/retry/middleware.d.ts +3 -3
- package/dist/esm/clients/middleware/retry/middleware.mjs +5 -5
- package/dist/esm/clients/middleware/retry/middleware.mjs.map +1 -1
- package/dist/esm/clients/middleware/signing/index.d.ts +1 -1
- package/dist/esm/clients/middleware/signing/index.mjs +1 -1
- package/dist/esm/clients/middleware/signing/middleware.d.ts +1 -1
- package/dist/esm/clients/middleware/signing/middleware.mjs +2 -2
- package/dist/esm/clients/middleware/signing/middleware.mjs.map +1 -1
- package/dist/esm/clients/middleware/signing/signer/signatureV4/presignUrl.d.ts +1 -1
- package/dist/esm/clients/middleware/signing/signer/signatureV4/presignUrl.mjs +1 -2
- package/dist/esm/clients/middleware/signing/signer/signatureV4/presignUrl.mjs.map +1 -1
- package/dist/esm/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.mjs +1 -1
- package/dist/esm/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.mjs.map +1 -1
- package/dist/esm/clients/middleware/userAgent/index.d.ts +1 -1
- package/dist/esm/clients/middleware/userAgent/index.mjs +1 -1
- package/dist/esm/clients/middleware/userAgent/middleware.d.ts +1 -1
- package/dist/esm/clients/middleware/userAgent/middleware.mjs +2 -2
- package/dist/esm/clients/middleware/userAgent/middleware.mjs.map +1 -1
- package/dist/esm/clients/serde/json.mjs +1 -1
- package/dist/esm/clients/serde/json.mjs.map +1 -1
- package/dist/esm/clients/types/aws.d.ts +3 -3
- package/dist/esm/clients/types/core.d.ts +3 -5
- package/dist/esm/errors/APIError.d.ts +1 -1
- package/dist/esm/errors/errorHelpers.mjs +1 -1
- package/dist/esm/errors/errorHelpers.mjs.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/parseAWSExports.mjs +1 -1
- package/dist/esm/parseAWSExports.mjs.map +1 -1
- package/dist/esm/providers/kinesis/types/kinesis.d.ts +2 -2
- package/dist/esm/providers/kinesis-firehose/types/kinesis-firehose.d.ts +2 -2
- package/dist/esm/providers/personalize/types/personalize.d.ts +2 -2
- package/dist/esm/providers/pinpoint/apis/updateEndpoint.mjs +1 -1
- package/dist/esm/providers/pinpoint/apis/updateEndpoint.mjs.map +1 -1
- package/dist/esm/providers/pinpoint/types/buffer.d.ts +6 -8
- package/dist/esm/providers/pinpoint/types/pinpoint.d.ts +10 -10
- package/dist/esm/providers/pinpoint/utils/PinpointEventBuffer.d.ts +1 -1
- package/dist/esm/providers/pinpoint/utils/PinpointEventBuffer.mjs +2 -3
- package/dist/esm/providers/pinpoint/utils/PinpointEventBuffer.mjs.map +1 -1
- package/dist/esm/providers/pinpoint/utils/getEventBuffer.d.ts +1 -1
- package/dist/esm/providers/pinpoint/utils/isAppInForeground.native.mjs +0 -1
- package/dist/esm/providers/pinpoint/utils/isAppInForeground.native.mjs.map +1 -1
- package/dist/esm/singleton/Amplify.d.ts +1 -1
- package/dist/esm/singleton/Amplify.mjs +1 -1
- package/dist/esm/singleton/Amplify.mjs.map +1 -1
- package/dist/esm/singleton/apis/fetchAuthSession.mjs +1 -1
- package/dist/esm/singleton/apis/fetchAuthSession.mjs.map +1 -1
- package/dist/esm/singleton/types.d.ts +9 -9
- package/dist/esm/types/core.d.ts +2 -2
- package/dist/esm/types/errors.d.ts +4 -4
- package/dist/esm/types/storage.d.ts +2 -2
- package/dist/esm/utils/WordArray.mjs +2 -2
- package/dist/esm/utils/WordArray.mjs.map +1 -1
- package/dist/esm/utils/deDupeAsyncFunction.d.ts +1 -5
- package/dist/esm/utils/deDupeAsyncFunction.mjs +8 -8
- package/dist/esm/utils/deDupeAsyncFunction.mjs.map +1 -1
- package/dist/esm/utils/getClientInfo/getClientInfo.android.mjs +0 -1
- package/dist/esm/utils/getClientInfo/getClientInfo.android.mjs.map +1 -1
- package/dist/esm/utils/getClientInfo/getClientInfo.ios.mjs +0 -1
- package/dist/esm/utils/getClientInfo/getClientInfo.ios.mjs.map +1 -1
- package/dist/esm/utils/globalHelpers/index.native.mjs.map +1 -1
- package/dist/esm/utils/queuedStorage/createQueuedStorage.native.mjs +2 -2
- package/dist/esm/utils/queuedStorage/createQueuedStorage.native.mjs.map +1 -1
- package/dist/esm/utils/retry/NonRetryableError.d.ts +0 -1
- package/dist/esm/utils/retry/NonRetryableError.mjs +2 -2
- package/dist/esm/utils/retry/NonRetryableError.mjs.map +1 -1
- package/dist/esm/utils/retry/retry.mjs +15 -6
- package/dist/esm/utils/retry/retry.mjs.map +1 -1
- package/dist/esm/utils/sessionListener/SessionListener.d.ts +1 -1
- package/dist/esm/utils/sessionListener/SessionListener.native.d.ts +1 -1
- package/dist/esm/utils/sessionListener/types.d.ts +2 -2
- package/package.json +5 -4
- package/src/BackgroundProcessManager/BackgroundProcessManager.ts +29 -34
- package/src/BackgroundProcessManager/types.ts +3 -3
- package/src/Cache/StorageCache.native.ts +5 -0
- package/src/Cache/StorageCache.ts +2 -0
- package/src/Cache/StorageCacheCommon.ts +49 -29
- package/src/Cache/types/cache.ts +2 -1
- package/src/Cache/utils/CacheList.ts +6 -3
- package/src/Cache/utils/cacheHelpers.ts +2 -1
- package/src/Hub/index.ts +15 -15
- package/src/Hub/types/AuthTypes.ts +11 -11
- package/src/Hub/types/HubTypes.ts +11 -8
- package/src/I18n/I18n.ts +10 -16
- package/src/I18n/index.ts +7 -7
- package/src/Logger/ConsoleLogger.ts +11 -9
- package/src/Mutex/Mutex.ts +8 -4
- package/src/Mutex/types.ts +3 -7
- package/src/Platform/customUserAgent.ts +3 -3
- package/src/Platform/detectFramework.ts +4 -1
- package/src/Platform/detection/Angular.ts +4 -4
- package/src/Platform/detection/Expo.ts +1 -2
- package/src/Platform/detection/Next.ts +5 -2
- package/src/Platform/detection/Nuxt.ts +5 -4
- package/src/Platform/detection/index.ts +9 -9
- package/src/Platform/index.ts +4 -4
- package/src/Platform/types.ts +12 -12
- package/src/Platform/version.ts +1 -1
- package/src/Reachability/Reachability.native.ts +6 -3
- package/src/Reachability/Reachability.ts +12 -6
- package/src/Reachability/types.ts +2 -2
- package/src/ServiceWorker/ServiceWorker.ts +28 -23
- package/src/Signer/DateUtils.ts +16 -16
- package/src/Signer/Signer.ts +19 -13
- package/src/adapterCore/serverContext/serverContext.ts +6 -5
- package/src/adapterCore/serverContext/serverContextRegistry.ts +2 -1
- package/src/adapterCore/serverContext/types/amplifyServer.ts +15 -17
- package/src/adapterCore/serverContext/types/cookieStorage.ts +1 -1
- package/src/awsClients/cognitoIdentity/base.ts +16 -12
- package/src/awsClients/cognitoIdentity/getCredentialsForIdentity.ts +13 -10
- package/src/awsClients/cognitoIdentity/getId.ts +12 -9
- package/src/awsClients/cognitoIdentity/types.ts +3 -3
- package/src/awsClients/pinpoint/base.ts +1 -1
- package/src/awsClients/pinpoint/getInAppMessages.ts +8 -5
- package/src/awsClients/pinpoint/putEvents.ts +8 -5
- package/src/awsClients/pinpoint/types.ts +3 -4
- package/src/awsClients/pinpoint/updateEndpoint.ts +8 -5
- package/src/clients/endpoints/getDnsSuffix.ts +1 -0
- package/src/clients/handlers/authenticated.ts +14 -7
- package/src/clients/handlers/fetch.ts +1 -1
- package/src/clients/handlers/unauthenticated.ts +8 -4
- package/src/clients/index.ts +9 -3
- package/src/clients/internal/composeServiceApi.ts +8 -7
- package/src/clients/internal/composeTransferHandler.ts +7 -6
- package/src/clients/middleware/retry/defaultRetryDecider.ts +5 -3
- package/src/clients/middleware/retry/index.ts +1 -1
- package/src/clients/middleware/retry/jitteredBackoff.ts +3 -1
- package/src/clients/middleware/retry/middleware.ts +12 -9
- package/src/clients/middleware/signing/index.ts +1 -1
- package/src/clients/middleware/signing/middleware.ts +5 -2
- package/src/clients/middleware/signing/signer/signatureV4/presignUrl.ts +4 -4
- package/src/clients/middleware/signing/signer/signatureV4/signRequest.ts +2 -1
- package/src/clients/middleware/signing/signer/signatureV4/utils/dataHashHelpers.ts +4 -2
- package/src/clients/middleware/signing/signer/signatureV4/utils/getCanonicalQueryString.ts +2 -1
- package/src/clients/middleware/signing/signer/signatureV4/utils/getCanonicalRequest.ts +2 -1
- package/src/clients/middleware/signing/signer/signatureV4/utils/getCanonicalUri.ts +1 -1
- package/src/clients/middleware/signing/signer/signatureV4/utils/getCredentialScope.ts +1 -1
- package/src/clients/middleware/signing/signer/signatureV4/utils/getFormattedDates.ts +2 -1
- package/src/clients/middleware/signing/signer/signatureV4/utils/getHashedPayload.ts +3 -0
- package/src/clients/middleware/signing/signer/signatureV4/utils/getSignature.ts +4 -3
- package/src/clients/middleware/signing/signer/signatureV4/utils/getSigningKey.ts +3 -1
- package/src/clients/middleware/signing/signer/signatureV4/utils/getSigningValues.ts +3 -1
- package/src/clients/middleware/signing/signer/signatureV4/utils/getStringToSign.ts +2 -2
- package/src/clients/middleware/signing/utils/getUpdatedSystemClockOffset.ts +2 -1
- package/src/clients/middleware/signing/utils/isClockSkewed.ts +2 -2
- package/src/clients/middleware/userAgent/index.ts +1 -1
- package/src/clients/middleware/userAgent/middleware.ts +3 -1
- package/src/clients/serde/json.ts +6 -2
- package/src/clients/serde/responseInfo.ts +6 -2
- package/src/clients/types/aws.ts +6 -3
- package/src/clients/types/core.ts +6 -8
- package/src/clients/types/http.ts +2 -1
- package/src/clients/utils/memoization.ts +2 -0
- package/src/errors/APIError.ts +3 -2
- package/src/errors/PlatformNotSupportedError.ts +1 -0
- package/src/errors/createAssertionFunction.ts +2 -1
- package/src/errors/errorHelpers.ts +2 -1
- package/src/index.ts +1 -0
- package/src/parseAWSExports.ts +12 -11
- package/src/providers/kinesis/types/kinesis.ts +2 -2
- package/src/providers/kinesis-firehose/types/kinesis-firehose.ts +2 -2
- package/src/providers/personalize/types/personalize.ts +2 -2
- package/src/providers/pinpoint/apis/updateEndpoint.ts +2 -2
- package/src/providers/pinpoint/types/buffer.ts +7 -8
- package/src/providers/pinpoint/types/pinpoint.ts +11 -10
- package/src/providers/pinpoint/utils/PinpointEventBuffer.ts +11 -21
- package/src/providers/pinpoint/utils/cacheEndpointId.ts +3 -1
- package/src/providers/pinpoint/utils/getCacheKey.ts +1 -1
- package/src/providers/pinpoint/utils/getEndpointId.ts +3 -1
- package/src/providers/pinpoint/utils/getEventBuffer.ts +2 -1
- package/src/providers/pinpoint/utils/isAppInForeground.native.ts +0 -1
- package/src/providers/pinpoint/utils/resolveEndpointId.ts +1 -0
- package/src/singleton/Amplify.ts +8 -6
- package/src/singleton/apis/fetchAuthSession.ts +2 -1
- package/src/singleton/apis/internal/fetchAuthSession.ts +1 -1
- package/src/singleton/apis/server/fetchAuthSession.ts +2 -2
- package/src/singleton/types.ts +15 -10
- package/src/types/core.ts +3 -3
- package/src/types/errors.ts +5 -5
- package/src/types/storage.ts +2 -2
- package/src/utils/WordArray.ts +2 -2
- package/src/utils/convert/base64/base64Encoder.ts +1 -0
- package/src/utils/convert/types.ts +1 -1
- package/src/utils/cryptoSecureRandomInt.ts +1 -0
- package/src/utils/deDupeAsyncFunction.ts +15 -20
- package/src/utils/generateRandomString.ts +1 -1
- package/src/utils/getClientInfo/getClientInfo.android.ts +3 -2
- package/src/utils/getClientInfo/getClientInfo.ios.ts +4 -2
- package/src/utils/getClientInfo/getClientInfo.ts +3 -3
- package/src/utils/globalHelpers/index.native.ts +2 -1
- package/src/utils/haveCredentialsChanged.ts +5 -2
- package/src/utils/isWebWorker.ts +1 -0
- package/src/utils/queuedStorage/createQueuedStorage.native.ts +8 -5
- package/src/utils/queuedStorage/createQueuedStorage.ts +7 -3
- package/src/utils/queuedStorage/types.ts +1 -1
- package/src/utils/retry/NonRetryableError.ts +0 -3
- package/src/utils/retry/isNonRetryableError.ts +1 -0
- package/src/utils/retry/jitteredBackoff.ts +3 -1
- package/src/utils/retry/jitteredExponentialRetry.ts +1 -1
- package/src/utils/retry/retry.ts +22 -8
- package/src/utils/sessionListener/SessionListener.native.ts +4 -3
- package/src/utils/sessionListener/SessionListener.ts +4 -3
- package/src/utils/sessionListener/index.ts +1 -0
- package/src/utils/sessionListener/types.ts +2 -2
- package/src/utils/urlSafeDecode.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Amplify.js","sources":["../../../src/singleton/Amplify.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Amplify = exports.AmplifyClass = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst
|
|
1
|
+
{"version":3,"file":"Amplify.js","sources":["../../../src/singleton/Amplify.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Amplify = exports.AmplifyClass = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst Hub_1 = require(\"../Hub\");\nconst parseAWSExports_1 = require(\"../parseAWSExports\");\nconst utils_1 = require(\"../utils\");\nconst Auth_1 = require(\"./Auth\");\nconst constants_1 = require(\"./constants\");\nclass AmplifyClass {\n constructor() {\n this.oAuthListener = undefined;\n this.resourcesConfig = {};\n this.libraryOptions = {};\n this.Auth = new Auth_1.AuthClass();\n }\n /**\n * Configures Amplify for use with your back-end resources.\n *\n * @remarks\n * This API does not perform any merging of either `resourcesConfig` or `libraryOptions`. The most recently\n * provided values will be used after configuration.\n *\n * @remarks\n * `configure` can be used to specify additional library options where available for supported categories.\n *\n * @param resourceConfig - Back-end resource configuration. Typically provided via the `aws-exports.js` file.\n * @param libraryOptions - Additional options for customizing the behavior of the library.\n */\n configure(resourcesConfig, libraryOptions) {\n let resolvedResourceConfig;\n if (Object.keys(resourcesConfig).some(key => key.startsWith('aws_'))) {\n resolvedResourceConfig = (0, parseAWSExports_1.parseAWSExports)(resourcesConfig);\n }\n else {\n resolvedResourceConfig = resourcesConfig;\n }\n this.resourcesConfig = resolvedResourceConfig;\n if (libraryOptions) {\n this.libraryOptions = libraryOptions;\n }\n // Make resource config immutable\n this.resourcesConfig = (0, utils_1.deepFreeze)(this.resourcesConfig);\n this.Auth.configure(this.resourcesConfig.Auth, this.libraryOptions.Auth);\n Hub_1.Hub.dispatch('core', {\n event: 'configure',\n data: this.resourcesConfig,\n }, 'Configure', Hub_1.AMPLIFY_SYMBOL);\n this.notifyOAuthListener();\n }\n /**\n * Provides access to the current back-end resource configuration for the Library.\n *\n * @returns Returns the immutable back-end resource configuration.\n */\n getConfig() {\n return this.resourcesConfig;\n }\n /** @internal */\n [constants_1.ADD_OAUTH_LISTENER](listener) {\n if (this.resourcesConfig.Auth?.Cognito.loginWith?.oauth) {\n // when Amplify has been configured with a valid OAuth config while adding the listener, run it directly\n listener(this.resourcesConfig.Auth?.Cognito);\n }\n else {\n // otherwise register the listener and run it later when Amplify gets configured with a valid oauth config\n this.oAuthListener = listener;\n }\n }\n notifyOAuthListener() {\n if (!this.resourcesConfig.Auth?.Cognito.loginWith?.oauth ||\n !this.oAuthListener) {\n return;\n }\n this.oAuthListener(this.resourcesConfig.Auth?.Cognito);\n // the listener should only be notified once with a valid oauth config\n this.oAuthListener = undefined;\n }\n}\nexports.AmplifyClass = AmplifyClass;\n/**\n * The `Amplify` utility is used to configure the library.\n *\n * @remarks\n * `Amplify` is responsible for orchestrating cross-category communication within the library.\n */\nexports.Amplify = new AmplifyClass();\n"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
// SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.fetchAuthSession = void 0;
|
|
7
|
-
const fetchAuthSession_1 = require("./internal/fetchAuthSession");
|
|
8
7
|
const Amplify_1 = require("../Amplify");
|
|
8
|
+
const fetchAuthSession_1 = require("./internal/fetchAuthSession");
|
|
9
9
|
const fetchAuthSession = (options) => {
|
|
10
10
|
return (0, fetchAuthSession_1.fetchAuthSession)(Amplify_1.Amplify, options);
|
|
11
11
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchAuthSession.js","sources":["../../../../src/singleton/apis/fetchAuthSession.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchAuthSession = void 0;\nconst
|
|
1
|
+
{"version":3,"file":"fetchAuthSession.js","sources":["../../../../src/singleton/apis/fetchAuthSession.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fetchAuthSession = void 0;\nconst Amplify_1 = require(\"../Amplify\");\nconst fetchAuthSession_1 = require(\"./internal/fetchAuthSession\");\nconst fetchAuthSession = (options) => {\n return (0, fetchAuthSession_1.fetchAuthSession)(Amplify_1.Amplify, options);\n};\nexports.fetchAuthSession = fetchAuthSession;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;AAClC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACxC,MAAM,kBAAkB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAClE,MAAM,gBAAgB,GAAG,CAAC,OAAO,KAAK;AACtC,IAAI,OAAO,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC,CAAC;AACF,OAAO,CAAC,gBAAgB,GAAG,gBAAgB;;"}
|
|
@@ -13,8 +13,8 @@ const cryptoSecureRandomInt_1 = require("./cryptoSecureRandomInt");
|
|
|
13
13
|
*/
|
|
14
14
|
function hexStringify(wordArray) {
|
|
15
15
|
// Shortcuts
|
|
16
|
-
const words = wordArray
|
|
17
|
-
const sigBytes = wordArray
|
|
16
|
+
const { words } = wordArray;
|
|
17
|
+
const { sigBytes } = wordArray;
|
|
18
18
|
// Convert
|
|
19
19
|
const hexChars = [];
|
|
20
20
|
for (let i = 0; i < sigBytes; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WordArray.js","sources":["../../../src/utils/WordArray.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cryptoSecureRandomInt_1 = require(\"./cryptoSecureRandomInt\");\n/**\n * Hex encoding strategy.\n * Converts a word array to a hex string.\n * @param {WordArray} wordArray The word array.\n * @return {string} The hex string.\n * @static\n */\nfunction hexStringify(wordArray) {\n // Shortcuts\n const words = wordArray
|
|
1
|
+
{"version":3,"file":"WordArray.js","sources":["../../../src/utils/WordArray.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cryptoSecureRandomInt_1 = require(\"./cryptoSecureRandomInt\");\n/**\n * Hex encoding strategy.\n * Converts a word array to a hex string.\n * @param {WordArray} wordArray The word array.\n * @return {string} The hex string.\n * @static\n */\nfunction hexStringify(wordArray) {\n // Shortcuts\n const { words } = wordArray;\n const { sigBytes } = wordArray;\n // Convert\n const hexChars = [];\n for (let i = 0; i < sigBytes; i++) {\n const bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n return hexChars.join('');\n}\nclass WordArray {\n constructor(words, sigBytes) {\n this.words = [];\n let Words = words;\n Words = this.words = Words || [];\n if (sigBytes !== undefined) {\n this.sigBytes = sigBytes;\n }\n else {\n this.sigBytes = Words.length * 4;\n }\n }\n random(nBytes) {\n const words = [];\n for (let i = 0; i < nBytes; i += 4) {\n words.push((0, cryptoSecureRandomInt_1.cryptoSecureRandomInt)());\n }\n return new WordArray(words, nBytes);\n }\n toString() {\n return hexStringify(this);\n }\n}\nexports.default = WordArray;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,MAAM,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,SAAS,EAAE;AACjC;AACA,IAAI,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;AAChC,IAAI,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;AACnC;AACA,IAAI,MAAM,QAAQ,GAAG,EAAE,CAAC;AACxB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACvC,QAAQ,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;AACpE,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,KAAK;AACL,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AACD,MAAM,SAAS,CAAC;AAChB,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE;AACjC,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACxB,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC;AAC1B,QAAQ,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;AACzC,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE;AACpC,YAAY,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACrC,SAAS;AACT,aAAa;AACb,YAAY,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7C,SAAS;AACT,KAAK;AACL,IAAI,MAAM,CAAC,MAAM,EAAE;AACnB,QAAQ,MAAM,KAAK,GAAG,EAAE,CAAC;AACzB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAC5C,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,qBAAqB,GAAG,CAAC,CAAC;AAC7E,SAAS;AACT,QAAQ,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,KAAK;AACL,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAClC,KAAK;AACL,CAAC;AACD,OAAO,CAAC,OAAO,GAAG,SAAS;;"}
|
|
@@ -15,17 +15,17 @@ const deDupeAsyncFunction = (asyncFunction) => {
|
|
|
15
15
|
return async (...args) => {
|
|
16
16
|
if (inflightPromise)
|
|
17
17
|
return inflightPromise;
|
|
18
|
-
inflightPromise = new Promise(
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
inflightPromise = new Promise((resolve, reject) => {
|
|
19
|
+
asyncFunction(...args)
|
|
20
|
+
.then(result => {
|
|
21
21
|
resolve(result);
|
|
22
|
-
}
|
|
23
|
-
|
|
22
|
+
})
|
|
23
|
+
.catch(error => {
|
|
24
24
|
reject(error);
|
|
25
|
-
}
|
|
26
|
-
|
|
25
|
+
})
|
|
26
|
+
.finally(() => {
|
|
27
27
|
inflightPromise = undefined;
|
|
28
|
-
}
|
|
28
|
+
});
|
|
29
29
|
});
|
|
30
30
|
return inflightPromise;
|
|
31
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deDupeAsyncFunction.js","sources":["../../../src/utils/deDupeAsyncFunction.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deDupeAsyncFunction = void 0;\n/**\n * returns in-flight promise if there is one\n *\n * @param asyncFunction - asyncFunction to be deduped.\n * @returns - the return type of the callback\n */\nconst deDupeAsyncFunction = (asyncFunction) => {\n let inflightPromise;\n return async (...args) => {\n if (inflightPromise)\n return inflightPromise;\n inflightPromise = new Promise(
|
|
1
|
+
{"version":3,"file":"deDupeAsyncFunction.js","sources":["../../../src/utils/deDupeAsyncFunction.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deDupeAsyncFunction = void 0;\n/**\n * returns in-flight promise if there is one\n *\n * @param asyncFunction - asyncFunction to be deduped.\n * @returns - the return type of the callback\n */\nconst deDupeAsyncFunction = (asyncFunction) => {\n let inflightPromise;\n return async (...args) => {\n if (inflightPromise)\n return inflightPromise;\n inflightPromise = new Promise((resolve, reject) => {\n asyncFunction(...args)\n .then(result => {\n resolve(result);\n })\n .catch(error => {\n reject(error);\n })\n .finally(() => {\n inflightPromise = undefined;\n });\n });\n return inflightPromise;\n };\n};\nexports.deDupeAsyncFunction = deDupeAsyncFunction;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC,CAAC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAmB,GAAG,CAAC,aAAa,KAAK;AAC/C,IAAI,IAAI,eAAe,CAAC;AACxB,IAAI,OAAO,OAAO,GAAG,IAAI,KAAK;AAC9B,QAAQ,IAAI,eAAe;AAC3B,YAAY,OAAO,eAAe,CAAC;AACnC,QAAQ,eAAe,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC3D,YAAY,aAAa,CAAC,GAAG,IAAI,CAAC;AAClC,iBAAiB,IAAI,CAAC,MAAM,IAAI;AAChC,gBAAgB,OAAO,CAAC,MAAM,CAAC,CAAC;AAChC,aAAa,CAAC;AACd,iBAAiB,KAAK,CAAC,KAAK,IAAI;AAChC,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,aAAa,CAAC;AACd,iBAAiB,OAAO,CAAC,MAAM;AAC/B,gBAAgB,eAAe,GAAG,SAAS,CAAC;AAC5C,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,eAAe,CAAC;AAC/B,KAAK,CAAC;AACN,CAAC,CAAC;AACF,OAAO,CAAC,mBAAmB,GAAG,mBAAmB;;"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.getClientInfo = void 0;
|
|
5
3
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
4
|
// SPDX-License-Identifier: Apache-2.0
|
|
7
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getClientInfo = void 0;
|
|
8
7
|
const react_native_1 = require("react-native");
|
|
9
8
|
const Logger_1 = require("../../Logger");
|
|
10
9
|
const logger = new Logger_1.ConsoleLogger('getClientInfo');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getClientInfo.android.js","sources":["../../../../src/utils/getClientInfo/getClientInfo.android.ts"],"sourcesContent":["\"use strict\";\
|
|
1
|
+
{"version":3,"file":"getClientInfo.android.js","sources":["../../../../src/utils/getClientInfo/getClientInfo.android.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getClientInfo = void 0;\nconst react_native_1 = require(\"react-native\");\nconst Logger_1 = require(\"../../Logger\");\nconst logger = new Logger_1.ConsoleLogger('getClientInfo');\nconst getClientInfo = () => {\n const dim = react_native_1.Dimensions.get('screen');\n logger.debug(react_native_1.Platform, dim);\n const OS = 'android';\n const { Version } = react_native_1.Platform;\n return {\n platform: OS,\n version: String(Version),\n appVersion: [OS, String(Version)].join('/'),\n };\n};\nexports.getClientInfo = getClientInfo;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;AAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AACzC,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AAC3D,MAAM,aAAa,GAAG,MAAM;AAC5B,IAAI,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxD,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC/C,IAAI,MAAM,EAAE,GAAG,SAAS,CAAC;AACzB,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC;AAChD,IAAI,OAAO;AACX,QAAQ,QAAQ,EAAE,EAAE;AACpB,QAAQ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AAChC,QAAQ,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACnD,KAAK,CAAC;AACN,CAAC,CAAC;AACF,OAAO,CAAC,aAAa,GAAG,aAAa;;"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.getClientInfo = void 0;
|
|
5
3
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
4
|
// SPDX-License-Identifier: Apache-2.0
|
|
7
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getClientInfo = void 0;
|
|
8
7
|
const react_native_1 = require("react-native");
|
|
9
8
|
const Logger_1 = require("../../Logger");
|
|
10
9
|
const logger = new Logger_1.ConsoleLogger('getClientInfo');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getClientInfo.ios.js","sources":["../../../../src/utils/getClientInfo/getClientInfo.ios.ts"],"sourcesContent":["\"use strict\";\
|
|
1
|
+
{"version":3,"file":"getClientInfo.ios.js","sources":["../../../../src/utils/getClientInfo/getClientInfo.ios.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getClientInfo = void 0;\nconst react_native_1 = require(\"react-native\");\nconst Logger_1 = require(\"../../Logger\");\nconst logger = new Logger_1.ConsoleLogger('getClientInfo');\nconst getClientInfo = () => {\n const dim = react_native_1.Dimensions.get('screen');\n logger.debug(react_native_1.Platform, dim);\n const OS = 'ios';\n const { Version } = react_native_1.Platform;\n const { make, model } = dimToMake(dim);\n return {\n platform: OS,\n version: String(Version),\n appVersion: [OS, String(Version)].join('/'),\n make,\n model,\n };\n};\nexports.getClientInfo = getClientInfo;\nfunction dimToMake(dim) {\n let { height, width } = dim;\n if (height < width) {\n const tmp = height;\n height = width;\n width = tmp;\n }\n if (width === 320 && height === 568) {\n return { make: 'iPhone', model: 'iPhone 5' };\n }\n if (width === 375 && height === 667) {\n return { make: 'iPhone', model: 'iPhone 6/7/8' };\n }\n if (width === 414 && height === 736) {\n return { make: 'iPhone', model: 'iPhone 6/7/8 plus' };\n }\n if (width === 375 && height === 812) {\n return { make: 'iPhone', model: 'iPhone X' };\n }\n if (width === 414 && height === 896) {\n return { make: 'iPhone', model: 'iPhone XR' };\n }\n if (width === 768 && height === 1024) {\n return { make: 'iPad', model: 'iPad Mini/Air' };\n }\n if (width === 834 && height === 1112) {\n return { make: 'iPad', model: 'iPad Pro' };\n }\n if (width === 1024 && height === 1366) {\n return { make: 'iPad', model: 'iPad Pro' };\n }\n if (width === 272 && height === 340) {\n return { make: 'Watch', model: 'Watch 38mm' };\n }\n if (width === 312 && height === 390) {\n return { make: 'Watch', model: 'Watch 42mm' };\n }\n return { make: null, model: null };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ exports.keyPrefix = `@${constants_1.DATABASE_NAME}`;
|
|
|
11
11
|
const createQueuedStorage = () => {
|
|
12
12
|
let currentBytesSize = 0;
|
|
13
13
|
let error;
|
|
14
|
-
const openDBPromise = new Promise((resolve,
|
|
14
|
+
const openDBPromise = new Promise((resolve, _reject) => {
|
|
15
15
|
try {
|
|
16
16
|
const asyncStorage = (0, react_native_1.loadAsyncStorage)();
|
|
17
17
|
getQueuedItemKeys(asyncStorage)
|
|
@@ -22,7 +22,7 @@ const createQueuedStorage = () => {
|
|
|
22
22
|
}
|
|
23
23
|
return undefined;
|
|
24
24
|
})
|
|
25
|
-
.then(
|
|
25
|
+
.then(__ => {
|
|
26
26
|
resolve(asyncStorage);
|
|
27
27
|
});
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createQueuedStorage.native.js","sources":["../../../../src/utils/queuedStorage/createQueuedStorage.native.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createQueuedStorage = exports.keyPrefix = void 0;\nconst react_native_1 = require(\"@aws-amplify/react-native\");\nconst constants_1 = require(\"./constants\");\nconst getAddItemBytesSize_1 = require(\"./getAddItemBytesSize\");\nexports.keyPrefix = `@${constants_1.DATABASE_NAME}`;\nconst createQueuedStorage = () => {\n let currentBytesSize = 0;\n let error;\n const openDBPromise = new Promise((resolve,
|
|
1
|
+
{"version":3,"file":"createQueuedStorage.native.js","sources":["../../../../src/utils/queuedStorage/createQueuedStorage.native.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createQueuedStorage = exports.keyPrefix = void 0;\nconst react_native_1 = require(\"@aws-amplify/react-native\");\nconst constants_1 = require(\"./constants\");\nconst getAddItemBytesSize_1 = require(\"./getAddItemBytesSize\");\nexports.keyPrefix = `@${constants_1.DATABASE_NAME}`;\nconst createQueuedStorage = () => {\n let currentBytesSize = 0;\n let error;\n const openDBPromise = new Promise((resolve, _reject) => {\n try {\n const asyncStorage = (0, react_native_1.loadAsyncStorage)();\n getQueuedItemKeys(asyncStorage)\n .then(keys => getQueuedItems(asyncStorage, keys))\n .then(items => {\n for (const item of items) {\n currentBytesSize += item.bytesSize;\n }\n return undefined;\n })\n .then(__ => {\n resolve(asyncStorage);\n });\n }\n catch (err) {\n error = err;\n resolve(undefined);\n }\n });\n const getAsyncStorage = async () => {\n const as = await openDBPromise;\n if (!as) {\n throw error;\n }\n return as;\n };\n const _peek = async (n) => {\n const as = await getAsyncStorage();\n const queuedItemKeys = await getQueuedItemKeys(as, true);\n const keysToGetValues = queuedItemKeys.slice(0, n);\n return getQueuedItems(as, keysToGetValues);\n };\n return {\n async add(item, { dequeueBeforeEnqueue } = { dequeueBeforeEnqueue: false }) {\n if (dequeueBeforeEnqueue) {\n const itemsToDelete = await this.peek(1);\n await this.delete(itemsToDelete);\n }\n const as = await getAsyncStorage();\n const itemBytesSize = (0, getAddItemBytesSize_1.getAddItemBytesSize)(item);\n const key = `${exports.keyPrefix}_${Date.now()}`;\n const queuedItem = {\n ...item,\n bytesSize: itemBytesSize,\n key,\n };\n await as.setItem(key, JSON.stringify(queuedItem));\n currentBytesSize += itemBytesSize;\n },\n async peek(n) {\n return _peek(n);\n },\n async peekAll() {\n return _peek();\n },\n async delete(items) {\n const as = await getAsyncStorage();\n const keysToDelete = items\n .map(item => item.key)\n .filter((id) => id !== undefined);\n await as.multiRemove(keysToDelete);\n for (const item of items) {\n currentBytesSize -= item.bytesSize;\n }\n },\n async clear() {\n const as = await getAsyncStorage();\n const keysToDelete = await getQueuedItemKeys(as);\n await as.multiRemove(keysToDelete);\n currentBytesSize = 0;\n },\n isFull(maxBytesSizeInMiB) {\n return currentBytesSize >= maxBytesSizeInMiB * 1024 * 1024;\n },\n };\n};\nexports.createQueuedStorage = createQueuedStorage;\nconst getQueuedItemKeys = async (as, sortKeys = false) => {\n const keys = (await as.getAllKeys()).filter(key => key.startsWith(exports.keyPrefix));\n return sortKeys\n ? keys.sort((a, b) => {\n const timestampA = a.split('_').pop();\n const timestampB = b.split('_').pop();\n return parseInt(timestampA) - parseInt(timestampB);\n })\n : keys;\n};\nconst getQueuedItems = async (as, keys) => (await as.multiGet(keys))\n .filter((item) => item[1] !== null)\n .map(([_, value]) => JSON.parse(value));\n"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.NonRetryableError = void 0;
|
|
7
7
|
class NonRetryableError extends Error {
|
|
8
|
-
constructor(
|
|
9
|
-
super(
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
10
|
this.nonRetryable = true;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NonRetryableError.js","sources":["../../../../src/utils/retry/NonRetryableError.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NonRetryableError = void 0;\nclass NonRetryableError extends Error {\n constructor(
|
|
1
|
+
{"version":3,"file":"NonRetryableError.js","sources":["../../../../src/utils/retry/NonRetryableError.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NonRetryableError = void 0;\nclass NonRetryableError extends Error {\n constructor() {\n super(...arguments);\n this.nonRetryable = true;\n }\n}\nexports.NonRetryableError = NonRetryableError;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC;AACnC,MAAM,iBAAiB,SAAS,KAAK,CAAC;AACtC,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;AAC5B,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC,KAAK;AACL,CAAC;AACD,OAAO,CAAC,iBAAiB,GAAG,iBAAiB;;"}
|
|
@@ -15,11 +15,15 @@ async function retry(functionToRetry, args, delayFn, onTerminate) {
|
|
|
15
15
|
if (typeof functionToRetry !== 'function') {
|
|
16
16
|
throw Error('functionToRetry must be a function');
|
|
17
17
|
}
|
|
18
|
+
// TODO(eslint): remove this linter suppression with refactoring.
|
|
19
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
18
20
|
return new Promise(async (resolve, reject) => {
|
|
19
21
|
let attempt = 0;
|
|
20
22
|
let terminated = false;
|
|
21
23
|
let timeout;
|
|
22
|
-
let wakeUp = () => {
|
|
24
|
+
let wakeUp = () => {
|
|
25
|
+
// no-op
|
|
26
|
+
}; // will be replaced with a resolver()
|
|
23
27
|
// used after the loop if terminated while waiting for a timer.
|
|
24
28
|
let lastError;
|
|
25
29
|
onTerminate &&
|
|
@@ -30,29 +34,34 @@ async function retry(functionToRetry, args, delayFn, onTerminate) {
|
|
|
30
34
|
clearTimeout(timeout);
|
|
31
35
|
wakeUp();
|
|
32
36
|
});
|
|
37
|
+
// TODO(eslint): remove this linter suppression with refactoring.
|
|
38
|
+
// eslint-disable-next-line no-unmodified-loop-condition
|
|
33
39
|
while (!terminated) {
|
|
34
40
|
attempt++;
|
|
35
41
|
logger.debug(`${functionToRetry.name} attempt #${attempt} with this vars: ${JSON.stringify(args)}`);
|
|
36
42
|
try {
|
|
37
|
-
|
|
43
|
+
resolve(await functionToRetry(...args));
|
|
44
|
+
return;
|
|
38
45
|
}
|
|
39
46
|
catch (err) {
|
|
40
47
|
lastError = err;
|
|
41
48
|
logger.debug(`error on ${functionToRetry.name}`, err);
|
|
42
49
|
if ((0, isNonRetryableError_1.isNonRetryableError)(err)) {
|
|
43
50
|
logger.debug(`${functionToRetry.name} non retryable error`, err);
|
|
44
|
-
|
|
51
|
+
reject(err);
|
|
52
|
+
return;
|
|
45
53
|
}
|
|
46
54
|
const retryIn = delayFn(attempt, args, err);
|
|
47
55
|
logger.debug(`${functionToRetry.name} retrying in ${retryIn} ms`);
|
|
48
56
|
// we check `terminated` again here because it could have flipped
|
|
49
57
|
// in the time it took `functionToRetry` to return.
|
|
50
58
|
if (retryIn === false || terminated) {
|
|
51
|
-
|
|
59
|
+
reject(err);
|
|
60
|
+
return;
|
|
52
61
|
}
|
|
53
62
|
else {
|
|
54
|
-
await new Promise(
|
|
55
|
-
wakeUp =
|
|
63
|
+
await new Promise(_resolve => {
|
|
64
|
+
wakeUp = _resolve; // export wakeUp for onTerminate handling
|
|
56
65
|
timeout = setTimeout(wakeUp, retryIn);
|
|
57
66
|
});
|
|
58
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sources":["../../../../src/utils/retry/retry.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.retry = void 0;\nconst ConsoleLogger_1 = require(\"../../Logger/ConsoleLogger\");\nconst isNonRetryableError_1 = require(\"./isNonRetryableError\");\nconst logger = new ConsoleLogger_1.ConsoleLogger('retryUtil');\n/**\n * @private\n * Internal use of Amplify only\n */\nasync function retry(functionToRetry, args, delayFn, onTerminate) {\n if (typeof functionToRetry !== 'function') {\n throw Error('functionToRetry must be a function');\n }\n return new Promise(async (resolve, reject) => {\n let attempt = 0;\n let terminated = false;\n let timeout;\n let wakeUp = () => { }; // will be replaced with a resolver()\n // used after the loop if terminated while waiting for a timer.\n let lastError;\n onTerminate &&\n onTerminate.then(() => {\n // signal not to try anymore.\n terminated = true;\n // stop sleeping if we're sleeping.\n clearTimeout(timeout);\n wakeUp();\n });\n while (!terminated) {\n attempt++;\n logger.debug(`${functionToRetry.name} attempt #${attempt} with this vars: ${JSON.stringify(args)}`);\n try {\n
|
|
1
|
+
{"version":3,"file":"retry.js","sources":["../../../../src/utils/retry/retry.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.retry = void 0;\nconst ConsoleLogger_1 = require(\"../../Logger/ConsoleLogger\");\nconst isNonRetryableError_1 = require(\"./isNonRetryableError\");\nconst logger = new ConsoleLogger_1.ConsoleLogger('retryUtil');\n/**\n * @private\n * Internal use of Amplify only\n */\nasync function retry(functionToRetry, args, delayFn, onTerminate) {\n if (typeof functionToRetry !== 'function') {\n throw Error('functionToRetry must be a function');\n }\n // TODO(eslint): remove this linter suppression with refactoring.\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n let attempt = 0;\n let terminated = false;\n let timeout;\n let wakeUp = () => {\n // no-op\n }; // will be replaced with a resolver()\n // used after the loop if terminated while waiting for a timer.\n let lastError;\n onTerminate &&\n onTerminate.then(() => {\n // signal not to try anymore.\n terminated = true;\n // stop sleeping if we're sleeping.\n clearTimeout(timeout);\n wakeUp();\n });\n // TODO(eslint): remove this linter suppression with refactoring.\n // eslint-disable-next-line no-unmodified-loop-condition\n while (!terminated) {\n attempt++;\n logger.debug(`${functionToRetry.name} attempt #${attempt} with this vars: ${JSON.stringify(args)}`);\n try {\n resolve(await functionToRetry(...args));\n return;\n }\n catch (err) {\n lastError = err;\n logger.debug(`error on ${functionToRetry.name}`, err);\n if ((0, isNonRetryableError_1.isNonRetryableError)(err)) {\n logger.debug(`${functionToRetry.name} non retryable error`, err);\n reject(err);\n return;\n }\n const retryIn = delayFn(attempt, args, err);\n logger.debug(`${functionToRetry.name} retrying in ${retryIn} ms`);\n // we check `terminated` again here because it could have flipped\n // in the time it took `functionToRetry` to return.\n if (retryIn === false || terminated) {\n reject(err);\n return;\n }\n else {\n await new Promise(_resolve => {\n wakeUp = _resolve; // export wakeUp for onTerminate handling\n timeout = setTimeout(wakeUp, retryIn);\n });\n }\n }\n }\n // reached if terminated while waiting for a timer.\n reject(lastError);\n });\n}\nexports.retry = retry;\n"],"names":[],"mappings":"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"}
|
|
@@ -21,12 +21,6 @@ export declare class BackgroundProcessManager {
|
|
|
21
21
|
* The list of outstanding jobs we'll need to wait for upon `close()`
|
|
22
22
|
*/
|
|
23
23
|
private jobs;
|
|
24
|
-
/**
|
|
25
|
-
* Creates a new manager for promises, observables, and other types
|
|
26
|
-
* of work that may be running in the background. This manager provides
|
|
27
|
-
* a centralized mechanism to request termination and await completion.
|
|
28
|
-
*/
|
|
29
|
-
constructor();
|
|
30
24
|
/**
|
|
31
25
|
* Executes an async `job` function, passing the return value through to
|
|
32
26
|
* the caller, registering it as a running job in the manager. When the
|
|
@@ -62,8 +56,8 @@ export declare class BackgroundProcessManager {
|
|
|
62
56
|
* @returns Job promise hooks + onTerminate signaling promise
|
|
63
57
|
*/
|
|
64
58
|
add(description?: string): {
|
|
65
|
-
resolve
|
|
66
|
-
reject
|
|
59
|
+
resolve(value?: unknown): void;
|
|
60
|
+
reject(reason?: any): void;
|
|
67
61
|
onTerminate: Promise<void>;
|
|
68
62
|
};
|
|
69
63
|
/**
|
|
@@ -14,11 +14,6 @@ import { BackgroundProcessManagerState } from './types.mjs';
|
|
|
14
14
|
* from the registry to avoid holding references to completed jobs.
|
|
15
15
|
*/
|
|
16
16
|
class BackgroundProcessManager {
|
|
17
|
-
/**
|
|
18
|
-
* Creates a new manager for promises, observables, and other types
|
|
19
|
-
* of work that may be running in the background. This manager provides
|
|
20
|
-
* a centralized mechanism to request termination and await completion.
|
|
21
|
-
*/
|
|
22
17
|
constructor() {
|
|
23
18
|
/**
|
|
24
19
|
* A string indicating whether the manager is accepting new work ("Open"),
|
|
@@ -52,7 +47,7 @@ class BackgroundProcessManager {
|
|
|
52
47
|
return this.addFunction(job, description);
|
|
53
48
|
}
|
|
54
49
|
else if (job instanceof BackgroundProcessManager) {
|
|
55
|
-
|
|
50
|
+
this.addManager(job, description);
|
|
56
51
|
}
|
|
57
52
|
else {
|
|
58
53
|
throw new Error('If `job` is provided, it must be an Observable, Function, or BackgroundProcessManager.');
|
|
@@ -97,7 +92,7 @@ class BackgroundProcessManager {
|
|
|
97
92
|
return jobResult;
|
|
98
93
|
}
|
|
99
94
|
addManager(manager, description) {
|
|
100
|
-
this.addCleaner(async () =>
|
|
95
|
+
this.addCleaner(async () => manager.close(), description);
|
|
101
96
|
}
|
|
102
97
|
/**
|
|
103
98
|
* Creates and registers a fabricated job for processes that need to operate
|
|
@@ -112,24 +107,24 @@ class BackgroundProcessManager {
|
|
|
112
107
|
addHook(description) {
|
|
113
108
|
// the resolve/reject functions we'll provide to the caller to signal
|
|
114
109
|
// the state of the job.
|
|
115
|
-
let
|
|
116
|
-
let
|
|
110
|
+
let promiseResolve;
|
|
111
|
+
let promiseReject;
|
|
117
112
|
// the underlying promise we'll use to manage it, pretty much like
|
|
118
113
|
// any other promise.
|
|
119
|
-
const promise = new Promise((
|
|
120
|
-
|
|
121
|
-
|
|
114
|
+
const promise = new Promise((resolve, reject) => {
|
|
115
|
+
promiseResolve = resolve;
|
|
116
|
+
promiseReject = reject;
|
|
122
117
|
});
|
|
123
118
|
// the function we call when we want to try to terminate this job.
|
|
124
119
|
let terminate;
|
|
125
120
|
// the promise the job can opt into listening to for termination.
|
|
126
|
-
const onTerminate = new Promise(
|
|
127
|
-
terminate =
|
|
121
|
+
const onTerminate = new Promise(resolve => {
|
|
122
|
+
terminate = resolve;
|
|
128
123
|
});
|
|
129
124
|
this.registerPromise(promise, terminate, description);
|
|
130
125
|
return {
|
|
131
|
-
resolve,
|
|
132
|
-
reject,
|
|
126
|
+
resolve: promiseResolve,
|
|
127
|
+
reject: promiseReject,
|
|
133
128
|
onTerminate,
|
|
134
129
|
};
|
|
135
130
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackgroundProcessManager.mjs","sources":["../../../src/BackgroundProcessManager/BackgroundProcessManager.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { BackgroundManagerNotOpenError } from './BackgroundManagerNotOpenError';\nimport { BackgroundProcessManagerState } from './types';\n/**\n * @private For internal Amplify use.\n *\n * Creates a new scope for promises, observables, and other types of work or\n * processes that may be running in the background. This manager provides\n * an singular entrypoint to request termination and await completion.\n *\n * As work completes on its own prior to close, the manager removes them\n * from the registry to avoid holding references to completed jobs.\n */\nexport class BackgroundProcessManager {\n /**\n * Creates a new manager for promises, observables, and other types\n * of work that may be running in the background. This manager provides\n * a centralized mechanism to request termination and await completion.\n */\n constructor() {\n /**\n * A string indicating whether the manager is accepting new work (\"Open\"),\n * waiting for work to complete (\"Closing\"), or fully done with all\n * submitted work and *not* accepting new jobs (\"Closed\").\n */\n this._state = BackgroundProcessManagerState.Open;\n /**\n * The list of outstanding jobs we'll need to wait for upon `close()`\n */\n this.jobs = new Set();\n }\n add(jobOrDescription, optionalDescription) {\n let job;\n let description;\n if (typeof jobOrDescription === 'string') {\n job = undefined;\n description = jobOrDescription;\n }\n else {\n job = jobOrDescription;\n description = optionalDescription;\n }\n const error = this.closedFailure(description);\n if (error)\n return error;\n if (job === undefined) {\n return this.addHook(description);\n }\n else if (typeof job === 'function') {\n return this.addFunction(job, description);\n }\n else if (job instanceof BackgroundProcessManager) {\n return this.addManager(job, description);\n }\n else {\n throw new Error('If `job` is provided, it must be an Observable, Function, or BackgroundProcessManager.');\n }\n }\n /**\n * Adds a **cleaner** function that doesn't immediately get executed.\n * Instead, the caller gets a **terminate** function back. The *cleaner* is\n * invoked only once the mananger *closes* or the returned **terminate**\n * function is called.\n *\n * @param clean The cleanup function.\n * @param description Optional description to help identify pending jobs.\n * @returns A terminate function.\n */\n addCleaner(clean, description) {\n const { resolve, onTerminate } = this.addHook(description);\n const proxy = async () => {\n await clean();\n resolve();\n };\n onTerminate.then(proxy);\n return proxy;\n }\n addFunction(job, description) {\n // the function we call when we want to try to terminate this job.\n let terminate;\n // the promise the job can opt into listening to for termination.\n const onTerminate = new Promise(resolve => {\n terminate = resolve;\n });\n // finally! start the job.\n const jobResult = job(onTerminate);\n // depending on what the job gives back, register the result\n // so we can monitor for completion.\n if (typeof jobResult?.then === 'function') {\n this.registerPromise(jobResult, terminate, description);\n }\n // At the end of the day, or you know, method call, it doesn't matter\n // what the return value is at all; we just pass it through to the\n // caller.\n return jobResult;\n }\n addManager(manager, description) {\n this.addCleaner(async () => await manager.close(), description);\n }\n /**\n * Creates and registers a fabricated job for processes that need to operate\n * with callbacks/hooks. The returned `resolve` and `reject`\n * functions can be used to signal the job is done successfully or not.\n * The returned `onTerminate` is a promise that will resolve when the\n * manager is requesting the termination of the job.\n *\n * @param description Optional description to help identify pending jobs.\n * @returns `{ resolve, reject, onTerminate }`\n */\n addHook(description) {\n // the resolve/reject functions we'll provide to the caller to signal\n // the state of the job.\n let resolve;\n let reject;\n // the underlying promise we'll use to manage it, pretty much like\n // any other promise.\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n // the function we call when we want to try to terminate this job.\n let terminate;\n // the promise the job can opt into listening to for termination.\n const onTerminate = new Promise(resolveTerminate => {\n terminate = resolveTerminate;\n });\n this.registerPromise(promise, terminate, description);\n return {\n resolve,\n reject,\n onTerminate,\n };\n }\n /**\n * Adds a Promise based job to the list of jobs for monitoring and listens\n * for either a success or failure, upon which the job is considered \"done\"\n * and removed from the registry.\n *\n * @param promise A promise that is on its way to being returned to a\n * caller, which needs to be tracked as a background job.\n * @param terminate The termination function to register, which can be\n * invoked to request the job stop.\n * @param description Optional description to help identify pending jobs.\n */\n registerPromise(promise, terminate, description) {\n const jobEntry = { promise, terminate, description };\n this.jobs.add(jobEntry);\n // in all of my testing, it is safe to multi-subscribe to a promise.\n // so, rather than create another layer of promising, we're just going\n // to hook into the promise we already have, and when it's done\n // (successfully or not), we no longer need to wait for it upon close.\n //\n // sorry this is a bit hand-wavy:\n //\n // i believe we use `.then` and `.catch` instead of `.finally` because\n // `.finally` is invoked in a different order in the sequence, and this\n // breaks assumptions throughout and causes failures.\n promise\n .then(() => {\n this.jobs.delete(jobEntry);\n })\n .catch(() => {\n this.jobs.delete(jobEntry);\n });\n }\n /**\n * The number of jobs being waited on.\n *\n * We don't use this for anything. It's just informational for the caller,\n * and can be used in logging and testing.\n *\n * @returns the number of jobs.\n */\n get length() {\n return this.jobs.size;\n }\n /**\n * The execution state of the manager. One of:\n *\n * 1. \"Open\" -> Accepting new jobs\n * 1. \"Closing\" -> Not accepting new work. Waiting for jobs to complete.\n * 1. \"Closed\" -> Not accepting new work. All submitted jobs are complete.\n */\n get state() {\n return this._state;\n }\n /**\n * The registered `description` of all still-pending jobs.\n *\n * @returns descriptions as an array.\n */\n get pending() {\n return Array.from(this.jobs).map(job => job.description);\n }\n /**\n * Whether the manager is accepting new jobs.\n */\n get isOpen() {\n return this._state === BackgroundProcessManagerState.Open;\n }\n /**\n * Whether the manager is rejecting new work, but still waiting for\n * submitted work to complete.\n */\n get isClosing() {\n return this._state === BackgroundProcessManagerState.Closing;\n }\n /**\n * Whether the manager is rejecting work and done waiting for submitted\n * work to complete.\n */\n get isClosed() {\n return this._state === BackgroundProcessManagerState.Closed;\n }\n closedFailure(description) {\n if (!this.isOpen) {\n return Promise.reject(new BackgroundManagerNotOpenError([\n `The manager is ${this.state}.`,\n `You tried to add \"${description}\".`,\n `Pending jobs: [\\n${this.pending\n .map(t => ' ' + t)\n .join(',\\n')}\\n]`,\n ].join('\\n')));\n }\n }\n /**\n * Signals jobs to stop (for those that accept interruptions) and waits\n * for confirmation that jobs have stopped.\n *\n * This immediately puts the manager into a closing state and just begins\n * to reject new work. After all work in the manager is complete, the\n * manager goes into a `Completed` state and `close()` returns.\n *\n * This call is idempotent.\n *\n * If the manager is already closing or closed, `finalCleaup` is not executed.\n *\n * @param onClosed\n * @returns The settled results of each still-running job's promise. If the\n * manager is already closed, this will contain the results as of when the\n * manager's `close()` was called in an `Open` state.\n */\n async close() {\n if (this.isOpen) {\n this._state = BackgroundProcessManagerState.Closing;\n for (const job of Array.from(this.jobs)) {\n try {\n job.terminate();\n }\n catch (error) {\n // Due to potential races with a job's natural completion, it's\n // reasonable to expect the termination call to fail. Hence,\n // not logging as an error.\n console.warn(`Failed to send termination signal to job. Error: ${error.message}`, job);\n }\n }\n // Use `allSettled()` because we want to wait for all to finish. We do\n // not want to stop waiting if there is a failure.\n this._closingPromise = Promise.allSettled(Array.from(this.jobs).map(j => j.promise));\n await this._closingPromise;\n this._state = BackgroundProcessManagerState.Closed;\n }\n return this._closingPromise;\n }\n /**\n * Signals the manager to start accepting work (again) and returns once\n * the manager is ready to do so.\n *\n * If the state is already `Open`, this call is a no-op.\n *\n * If the state is `Closed`, this call simply updates state and returns.\n *\n * If the state is `Closing`, this call waits for completion before it\n * updates the state and returns.\n */\n async open() {\n if (this.isClosing) {\n await this.close();\n }\n this._state = BackgroundProcessManagerState.Open;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BackgroundProcessManager.mjs","sources":["../../../src/BackgroundProcessManager/BackgroundProcessManager.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { BackgroundManagerNotOpenError } from './BackgroundManagerNotOpenError';\nimport { BackgroundProcessManagerState } from './types';\n/**\n * @private For internal Amplify use.\n *\n * Creates a new scope for promises, observables, and other types of work or\n * processes that may be running in the background. This manager provides\n * an singular entrypoint to request termination and await completion.\n *\n * As work completes on its own prior to close, the manager removes them\n * from the registry to avoid holding references to completed jobs.\n */\nexport class BackgroundProcessManager {\n constructor() {\n /**\n * A string indicating whether the manager is accepting new work (\"Open\"),\n * waiting for work to complete (\"Closing\"), or fully done with all\n * submitted work and *not* accepting new jobs (\"Closed\").\n */\n this._state = BackgroundProcessManagerState.Open;\n /**\n * The list of outstanding jobs we'll need to wait for upon `close()`\n */\n this.jobs = new Set();\n }\n add(jobOrDescription, optionalDescription) {\n let job;\n let description;\n if (typeof jobOrDescription === 'string') {\n job = undefined;\n description = jobOrDescription;\n }\n else {\n job = jobOrDescription;\n description = optionalDescription;\n }\n const error = this.closedFailure(description);\n if (error)\n return error;\n if (job === undefined) {\n return this.addHook(description);\n }\n else if (typeof job === 'function') {\n return this.addFunction(job, description);\n }\n else if (job instanceof BackgroundProcessManager) {\n this.addManager(job, description);\n }\n else {\n throw new Error('If `job` is provided, it must be an Observable, Function, or BackgroundProcessManager.');\n }\n }\n /**\n * Adds a **cleaner** function that doesn't immediately get executed.\n * Instead, the caller gets a **terminate** function back. The *cleaner* is\n * invoked only once the mananger *closes* or the returned **terminate**\n * function is called.\n *\n * @param clean The cleanup function.\n * @param description Optional description to help identify pending jobs.\n * @returns A terminate function.\n */\n addCleaner(clean, description) {\n const { resolve, onTerminate } = this.addHook(description);\n const proxy = async () => {\n await clean();\n resolve();\n };\n onTerminate.then(proxy);\n return proxy;\n }\n addFunction(job, description) {\n // the function we call when we want to try to terminate this job.\n let terminate;\n // the promise the job can opt into listening to for termination.\n const onTerminate = new Promise(resolve => {\n terminate = resolve;\n });\n // finally! start the job.\n const jobResult = job(onTerminate);\n // depending on what the job gives back, register the result\n // so we can monitor for completion.\n if (typeof jobResult?.then === 'function') {\n this.registerPromise(jobResult, terminate, description);\n }\n // At the end of the day, or you know, method call, it doesn't matter\n // what the return value is at all; we just pass it through to the\n // caller.\n return jobResult;\n }\n addManager(manager, description) {\n this.addCleaner(async () => manager.close(), description);\n }\n /**\n * Creates and registers a fabricated job for processes that need to operate\n * with callbacks/hooks. The returned `resolve` and `reject`\n * functions can be used to signal the job is done successfully or not.\n * The returned `onTerminate` is a promise that will resolve when the\n * manager is requesting the termination of the job.\n *\n * @param description Optional description to help identify pending jobs.\n * @returns `{ resolve, reject, onTerminate }`\n */\n addHook(description) {\n // the resolve/reject functions we'll provide to the caller to signal\n // the state of the job.\n let promiseResolve;\n let promiseReject;\n // the underlying promise we'll use to manage it, pretty much like\n // any other promise.\n const promise = new Promise((resolve, reject) => {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n // the function we call when we want to try to terminate this job.\n let terminate;\n // the promise the job can opt into listening to for termination.\n const onTerminate = new Promise(resolve => {\n terminate = resolve;\n });\n this.registerPromise(promise, terminate, description);\n return {\n resolve: promiseResolve,\n reject: promiseReject,\n onTerminate,\n };\n }\n /**\n * Adds a Promise based job to the list of jobs for monitoring and listens\n * for either a success or failure, upon which the job is considered \"done\"\n * and removed from the registry.\n *\n * @param promise A promise that is on its way to being returned to a\n * caller, which needs to be tracked as a background job.\n * @param terminate The termination function to register, which can be\n * invoked to request the job stop.\n * @param description Optional description to help identify pending jobs.\n */\n registerPromise(promise, terminate, description) {\n const jobEntry = { promise, terminate, description };\n this.jobs.add(jobEntry);\n // in all of my testing, it is safe to multi-subscribe to a promise.\n // so, rather than create another layer of promising, we're just going\n // to hook into the promise we already have, and when it's done\n // (successfully or not), we no longer need to wait for it upon close.\n //\n // sorry this is a bit hand-wavy:\n //\n // i believe we use `.then` and `.catch` instead of `.finally` because\n // `.finally` is invoked in a different order in the sequence, and this\n // breaks assumptions throughout and causes failures.\n promise\n .then(() => {\n this.jobs.delete(jobEntry);\n })\n .catch(() => {\n this.jobs.delete(jobEntry);\n });\n }\n /**\n * The number of jobs being waited on.\n *\n * We don't use this for anything. It's just informational for the caller,\n * and can be used in logging and testing.\n *\n * @returns the number of jobs.\n */\n get length() {\n return this.jobs.size;\n }\n /**\n * The execution state of the manager. One of:\n *\n * 1. \"Open\" -> Accepting new jobs\n * 1. \"Closing\" -> Not accepting new work. Waiting for jobs to complete.\n * 1. \"Closed\" -> Not accepting new work. All submitted jobs are complete.\n */\n get state() {\n return this._state;\n }\n /**\n * The registered `description` of all still-pending jobs.\n *\n * @returns descriptions as an array.\n */\n get pending() {\n return Array.from(this.jobs).map(job => job.description);\n }\n /**\n * Whether the manager is accepting new jobs.\n */\n get isOpen() {\n return this._state === BackgroundProcessManagerState.Open;\n }\n /**\n * Whether the manager is rejecting new work, but still waiting for\n * submitted work to complete.\n */\n get isClosing() {\n return this._state === BackgroundProcessManagerState.Closing;\n }\n /**\n * Whether the manager is rejecting work and done waiting for submitted\n * work to complete.\n */\n get isClosed() {\n return this._state === BackgroundProcessManagerState.Closed;\n }\n closedFailure(description) {\n if (!this.isOpen) {\n return Promise.reject(new BackgroundManagerNotOpenError([\n `The manager is ${this.state}.`,\n `You tried to add \"${description}\".`,\n `Pending jobs: [\\n${this.pending\n .map(t => ' ' + t)\n .join(',\\n')}\\n]`,\n ].join('\\n')));\n }\n }\n /**\n * Signals jobs to stop (for those that accept interruptions) and waits\n * for confirmation that jobs have stopped.\n *\n * This immediately puts the manager into a closing state and just begins\n * to reject new work. After all work in the manager is complete, the\n * manager goes into a `Completed` state and `close()` returns.\n *\n * This call is idempotent.\n *\n * If the manager is already closing or closed, `finalCleaup` is not executed.\n *\n * @param onClosed\n * @returns The settled results of each still-running job's promise. If the\n * manager is already closed, this will contain the results as of when the\n * manager's `close()` was called in an `Open` state.\n */\n async close() {\n if (this.isOpen) {\n this._state = BackgroundProcessManagerState.Closing;\n for (const job of Array.from(this.jobs)) {\n try {\n job.terminate();\n }\n catch (error) {\n // Due to potential races with a job's natural completion, it's\n // reasonable to expect the termination call to fail. Hence,\n // not logging as an error.\n console.warn(`Failed to send termination signal to job. Error: ${error.message}`, job);\n }\n }\n // Use `allSettled()` because we want to wait for all to finish. We do\n // not want to stop waiting if there is a failure.\n this._closingPromise = Promise.allSettled(Array.from(this.jobs).map(j => j.promise));\n await this._closingPromise;\n this._state = BackgroundProcessManagerState.Closed;\n }\n return this._closingPromise;\n }\n /**\n * Signals the manager to start accepting work (again) and returns once\n * the manager is ready to do so.\n *\n * If the state is already `Open`, this call is a no-op.\n *\n * If the state is `Closed`, this call simply updates state and returns.\n *\n * If the state is `Closing`, this call waits for completion before it\n * updates the state and returns.\n */\n async open() {\n if (this.isClosing) {\n await this.close();\n }\n this._state = BackgroundProcessManagerState.Open;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export declare enum BackgroundProcessManagerState {
|
|
|
19
19
|
* Completely internal to `BackgroundProcessManager`, and describes the structure of
|
|
20
20
|
* an entry in the jobs registry.
|
|
21
21
|
*/
|
|
22
|
-
export
|
|
22
|
+
export interface JobEntry {
|
|
23
23
|
/**
|
|
24
24
|
* The underlying promise provided by the job function to wait for.
|
|
25
25
|
*/
|
|
@@ -27,7 +27,7 @@ export type JobEntry = {
|
|
|
27
27
|
/**
|
|
28
28
|
* Request the termination of the job.
|
|
29
29
|
*/
|
|
30
|
-
terminate
|
|
30
|
+
terminate(): void;
|
|
31
31
|
/**
|
|
32
32
|
* An object provided by the caller that can be used to identify the description
|
|
33
33
|
* of the job, which can otherwise be unclear from the `promise` and
|
|
@@ -38,4 +38,4 @@ export type JobEntry = {
|
|
|
38
38
|
* on `close()`.
|
|
39
39
|
*/
|
|
40
40
|
description?: string;
|
|
41
|
-
}
|
|
41
|
+
}
|
|
@@ -390,8 +390,8 @@ class StorageCacheCommon {
|
|
|
390
390
|
async popOutItems(keys, sizeToPop) {
|
|
391
391
|
const items = [];
|
|
392
392
|
let remainedSize = sizeToPop;
|
|
393
|
-
for (
|
|
394
|
-
const val = await this.getStorage().getItem(
|
|
393
|
+
for (const key of keys) {
|
|
394
|
+
const val = await this.getStorage().getItem(key);
|
|
395
395
|
if (val != null) {
|
|
396
396
|
const item = JSON.parse(val);
|
|
397
397
|
items.push(item);
|
|
@@ -414,10 +414,10 @@ class StorageCacheCommon {
|
|
|
414
414
|
return 1;
|
|
415
415
|
}
|
|
416
416
|
});
|
|
417
|
-
for (
|
|
417
|
+
for (const item of items) {
|
|
418
418
|
// pop out items until we have enough room for new item
|
|
419
|
-
await this.removeCacheItem(
|
|
420
|
-
remainedSize -=
|
|
419
|
+
await this.removeCacheItem(item.key, item.byteSize);
|
|
420
|
+
remainedSize -= item.byteSize;
|
|
421
421
|
if (remainedSize <= 0) {
|
|
422
422
|
return;
|
|
423
423
|
}
|