{"version":3,"file":"retry.mjs","sources":["../../../../src/utils/retry/retry.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { ConsoleLogger } from '../../Logger/ConsoleLogger';\nimport { isNonRetryableError } from './isNonRetryableError';\nconst logger = new ConsoleLogger('retryUtil');\n/**\n * @private\n * Internal use of Amplify only\n */\nexport async 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 (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}\n"],"names":[],"mappings":";;;AAAA;AACA;AAGA,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC;AAC7C;AACA;AACA;AACA;AACO,eAAe,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE;AACzE,IAAI,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;AAC/C,QAAQ,MAAM,KAAK,CAAC,oCAAoC,CAAC;AACzD,IAAI;AACJ;AACA;AACA,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,EAAE,MAAM,KAAK;AAClD,QAAQ,IAAI,OAAO,GAAG,CAAC;AACvB,QAAQ,IAAI,UAAU,GAAG,KAAK;AAC9B,QAAQ,IAAI,OAAO;AACnB,QAAQ,IAAI,MAAM,GAAG,MAAM;AAC3B;AACA,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,IAAI,SAAS;AACrB,QAAQ,WAAW;AACnB,YAAY,WAAW,CAAC,IAAI,CAAC,MAAM;AACnC;AACA,gBAAgB,UAAU,GAAG,IAAI;AACjC;AACA,gBAAgB,YAAY,CAAC,OAAO,CAAC;AACrC,gBAAgB,MAAM,EAAE;AACxB,YAAY,CAAC,CAAC;AACd;AACA;AACA,QAAQ,OAAO,CAAC,UAAU,EAAE;AAC5B,YAAY,OAAO,EAAE;AACrB,YAAY,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/G,YAAY,IAAI;AAChB,gBAAgB,OAAO,CAAC,MAAM,eAAe,CAAC,GAAG,IAAI,CAAC,CAAC;AACvD,gBAAgB;AAChB,YAAY;AACZ,YAAY,OAAO,GAAG,EAAE;AACxB,gBAAgB,SAAS,GAAG,GAAG;AAC/B,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC;AACrE,gBAAgB,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE;AAC9C,oBAAoB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,GAAG,CAAC;AACpF,oBAAoB,MAAM,CAAC,GAAG,CAAC;AAC/B,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC;AAC3D,gBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AACjF;AACA;AACA,gBAAgB,IAAI,OAAO,KAAK,KAAK,IAAI,UAAU,EAAE;AACrD,oBAAoB,MAAM,CAAC,GAAG,CAAC;AAC/B,oBAAoB;AACpB,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,MAAM,IAAI,OAAO,CAAC,QAAQ,IAAI;AAClD,wBAAwB,MAAM,GAAG,QAAQ,CAAC;AAC1C,wBAAwB,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC;AAC7D,oBAAoB,CAAC,CAAC;AACtB,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,CAAC,SAAS,CAAC;AACzB,IAAI,CAAC,CAAC;AACN;;;;"}