{"version":3,"sources":["../../src/plugins/retry.ts"],"sourcesContent":["import { Plugin, RetryConfig } from \"../types\";\n\nconst retryPlugin: Plugin<RetryConfig> = {\n    name: \"retry\",\n\n    validateConfig(config) {\n        if (!config || config.attempts <= 0) {\n            throw new Error(`[retry] \"attempts\" must be > 0`);\n        }\n    },\n\n    wrap(handler, config) {\n        return async (req, res, next) => {\n            const attempts = config?.attempts ?? 1;\n            const delay = config?.delay ?? 0;\n\n            let lastError: any;\n\n            for (let i = 0; i < attempts; i++) {\n                try {\n                    return await handler(req, res, next);\n                } catch (err) {\n                    lastError = err;\n\n                    const shouldRetry = config?.shouldRetry\n                        ? config.shouldRetry(err)\n                        : true;\n\n                    if (!shouldRetry || i === attempts - 1) {\n                        throw err;\n                    }\n\n                    if (delay > 0) {\n                        await new Promise(r => setTimeout(r, delay));\n                    }\n                }\n            }\n\n            throw lastError;\n        };\n    }\n};\n\nexport default retryPlugin;"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,MAAM,cAAmC;AAAA,EACrC,MAAM;AAAA,EAEN,eAAe,QAAQ;AACnB,QAAI,CAAC,UAAU,OAAO,YAAY,GAAG;AACjC,YAAM,IAAI,MAAM,gCAAgC;AAAA,IACpD;AAAA,EACJ;AAAA,EAEA,KAAK,SAAS,QAAQ;AAClB,WAAO,CAAO,KAAK,KAAK,SAAS;AAZzC;AAaY,YAAM,YAAW,sCAAQ,aAAR,YAAoB;AACrC,YAAM,SAAQ,sCAAQ,UAAR,YAAiB;AAE/B,UAAI;AAEJ,eAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AAC/B,YAAI;AACA,iBAAO,MAAM,QAAQ,KAAK,KAAK,IAAI;AAAA,QACvC,SAAS,KAAK;AACV,sBAAY;AAEZ,gBAAM,eAAc,iCAAQ,eACtB,OAAO,YAAY,GAAG,IACtB;AAEN,cAAI,CAAC,eAAe,MAAM,WAAW,GAAG;AACpC,kBAAM;AAAA,UACV;AAEA,cAAI,QAAQ,GAAG;AACX,kBAAM,IAAI,QAAQ,OAAK,WAAW,GAAG,KAAK,CAAC;AAAA,UAC/C;AAAA,QACJ;AAAA,MACJ;AAEA,YAAM;AAAA,IACV;AAAA,EACJ;AACJ;AAEA,IAAO,gBAAQ;","names":[]}