{"_id":"@aecomet/backoff-util","_rev":"14-9981f4c1b43dc885541745ab6b9ece08","name":"@aecomet/backoff-util","dist-tags":{"latest":"2.4.0"},"versions":{"1.0.0":{"name":"@aecomet/backoff-util","version":"1.0.0","author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.0","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"dist":{"shasum":"a03ae8c4fffe4643e9e22d877eba0df0cddf1ac0","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.0.tgz","fileCount":36,"integrity":"sha512-FqOiM5bzIpSD5L+9YDfkTCYn9ccFr3Z4an0VPVq09xneqpeMqxp5pZCkMRwRlEY2GLDHRtPHmSABrVE9U9wL5w==","signatures":[{"sig":"MEYCIQCmrg5ATP9gT6PTALKOqOJzlDCi5/ZDZhIqRxX5vY+kiQIhAOMvmcLsY+GFMj5ULKpgEeQxf/iIXCDznLJcXtuFLuFi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32968},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"9c433cbe9888b41432a55c6715c11e50d474e903","scripts":{"test":"vitest","build":"tsc && tsc-alias"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"_npmVersion":"10.8.1","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"22.4.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vitest":"^2.0.1","tsc-alias":"^1.8.10","@vitest/ui":"^2.0.2","typescript":"^5.5.3"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.0_1720933513563_0.319302579379916","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@aecomet/backoff-util","version":"1.0.1","author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.1","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"8130ace6d5e3a585287623adbb2a0c7016d3e380","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.1.tgz","fileCount":36,"integrity":"sha512-qKA2ekn2PgbIgO4QkRsGzDrdf9gfyCRRX70TiFtBz8DviFYeXGXpBnX1dhJ9xyOWc4I+mr1XjxHAPs7sFD2FEQ==","signatures":[{"sig":"MEQCIAFzirsUQrrOPUEeJIRHwFtuSUFIt3DOfaESLMkwGI4TAiBx6FK2eu7yciC6HKzMoLp6q9+PUnSKxMqyFyihzQpHpw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":33241},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"404222f0e9aa81965487c0777f1a3839bb2e571e","scripts":{"test":"vitest","build":"tsc && tsc-alias"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"10.8.1","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"22.4.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vitest":"^2.0.1","tsc-alias":"^1.8.10","@vitest/ui":"^2.0.2","typescript":"^5.5.3"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.1_1720933942889_0.3909656823804659","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@aecomet/backoff-util","version":"1.0.2","author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.2","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"30c7ed429607b7a1f0aba403dec5f129e1b033ce","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.2.tgz","fileCount":34,"integrity":"sha512-ca5j8qw5EO2W46JhydGq1CeVvNSmOGlnN/PgdsiMaQpJDxaUFUfegzBhmJj5k2LgsNk0YQx4x+ATBIhaQ5tjUQ==","signatures":[{"sig":"MEQCIHwZZdgdYwBSzxrHlZaM7iT66uPtyd8SiG5QvxEE49RAAiACesqMp2I24csCbdhYGjJbT7HD/mr9WPMjjCTrkYezsQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30218},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ea060d111d9c10a6e1b61bdb695958a6d2b2b1dd","scripts":{"test":"vitest","build":"tsc && tsc-alias"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"10.8.1","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"22.4.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vitest":"^2.0.1","tsc-alias":"^1.8.10","@vitest/ui":"^2.0.2","typescript":"^5.5.3"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.2_1721272178924_0.9245911296030889","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@aecomet/backoff-util","version":"1.0.3","keywords":["exponential backoff"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.3","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"542044d61652e3b4910e8de7a49f1b8ef2bb836c","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.3.tgz","fileCount":41,"integrity":"sha512-6EQP/cEab5znlywHlbrloJdUD/O53K1in6rksq87weDB5rNPgw5BYkVp+hH/pfqc26QBtajoGvbHDPy+dQboGw==","signatures":[{"sig":"MEUCIQDN8IZMwusG0jhAapklb9/smkT9eFI6Lm2r2LEvzCv/WgIgAn8iMApt5qD7kMVlBctBir4hL3LVKh/35woLva11zSo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20537},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3f49b4fea5cc26e0f5f81e58c20718b9877d644a","scripts":{"test":"vitest --config __tests__/vitest.config.mts","build":"tsc && tsc-alias","dev:html":"tsc --project example/html/tsconfig.json  && tsc-alias && vite --config example/html/vite.config.mts"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"10.8.1","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"22.4.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.3.4","axios":"^1.7.2","vitest":"^2.0.1","tsc-alias":"^1.8.10","@vitest/ui":"^2.0.2","typescript":"^5.5.3","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.3_1721280916616_0.585891547075716","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@aecomet/backoff-util","version":"1.0.4","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.4","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"b6e6048bbdaaa81bc485efa37962b68625cc4b63","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.4.tgz","fileCount":35,"integrity":"sha512-5vjKym2qcRS+mZ9GoJLlon57pgBvfYhebG5PgFmaQ2Jq14OlAf4YiQKGKZ/k2k4kEM1R0MpXDGav4emXx8yJ1g==","signatures":[{"sig":"MEUCICLqCANIoQZ06cBf/IaFlrTXBZSxvzB8mxSkzOYIJ9AyAiEA2WnjOKBrYnO1YFxbV1FOD940/qEK6MVxx37qilwi2TM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20728},"main":"dist/index.umd.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.umd.cjs"}},"gitHead":"2dd2782c294f8c44a1f95eeb3646f625aaf15e2a","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","dev:html":"vite --config example/html/vite.config.mts"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"10.8.1","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"22.4.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.3.4","axios":"^1.7.2","vitest":"^2.0.1","tsc-alias":"^1.8.10","@vitest/ui":"^2.0.2","typescript":"^5.5.3","vite-plugin-dts":"4.0.0-beta.1","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.4_1721398720427_0.04808952557686852","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@aecomet/backoff-util","version":"1.0.5","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.5","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"206e133da47caf9d57a75ddd2e144da20d3252c9","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.5.tgz","fileCount":35,"integrity":"sha512-vDMOKXFsxltaxPVrkNjUrVWM9BqWSN8YV7gJJQY979e031v0rVdFT75U+UHVCurOYl/M5iah/xAqews8QNV35A==","signatures":[{"sig":"MEYCIQCjHzThN+S51zH2qyrWQpmM1hMGHJudfYPnp82BQTE35AIhAP8nskuryN6ULyAzRoV3k+zl6jQH1gSnOwCWzDvURAy0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20720},"main":"dist/index.umd.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.umd.cjs"}},"gitHead":"2dd2782c294f8c44a1f95eeb3646f625aaf15e2a","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","dev:html":"vite --config example/html/vite.config.mts"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"10.8.3","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.4.8","axios":"^1.7.7","vitest":"^2.1.2","tsc-alias":"^1.8.10","@vitest/ui":"^2.1.2","typescript":"^5.6.3","vite-plugin-dts":"4.2.4","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.5_1728823997165_0.05380288814561052","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"@aecomet/backoff-util","version":"1.0.6","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.6","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"3de5a2eb3885b6451885a02fefde0cf32e26dde4","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.6.tgz","fileCount":35,"integrity":"sha512-vqedu6dmvCgNZP1wlGeSZCT0UcTTFSMw4SvO+hSyjkMrICxbBU6CpWrAu0Kx9nCzmBvao/3SVejQGiC1Vh4JGw==","signatures":[{"sig":"MEQCIAErVMjd8+vs7whiHqQg0jjqry3NP/w3LGuAM1Pb+XttAiAhOUwjxGeCNMG3sUswPEeXmbUwb2t8/f26Mk6SAVIYEQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20722},"main":"dist/index.umd.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.umd.cjs"}},"gitHead":"c6422d8dbb97fe5a88c2aed56f76ac1685831ce3","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","dev:html":"vite --config example/html/vite.config.mts"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"10.9.2","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.0.7","axios":"^1.7.9","vitest":"^3.0.2","tsc-alias":"^1.8.10","@vitest/ui":"^3.0.2","typescript":"^5.7.3","vite-plugin-dts":"4.5.0","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.6_1737337807753_0.7309700610091294","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@aecomet/backoff-util","version":"1.0.7","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.7","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"b80fa83897855dcc198313a0e36ac5542e129efa","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.7.tgz","fileCount":37,"integrity":"sha512-79WTq0ZCsqC+LfMi/7SKj9WXqig2/NfJPbcZl9LfkXj84d6qBdAEQV3gm05v/I6VWnZ428Vj0nqc4JLSiM3lYQ==","signatures":[{"sig":"MEQCIByjKuIUd6Rhdmda/lG+cBZP/wxTBr/wX1KQXJvHZELdAiALjlc3ME+SVUAtSS8f4BK3PGeg/z6b6nIMugLRgdcGfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21195},"main":"dist/index.umd.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.umd.cjs"}},"gitHead":"94034410b8a5d98549e2e3d0b06d88b0ab7c4419","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","dev:html":"vite --config example/html/vite.config.mts"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"10.9.2","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^6.2.1","axios":"^1.8.2","vitest":"^3.0.8","tsc-alias":"^1.8.11","@vitest/ui":"^3.0.8","typescript":"^5.8.2","vite-plugin-dts":"4.5.3","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.7_1741666269113_0.455194153595212","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@aecomet/backoff-util","version":"1.0.8","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.8","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"85bf0e8d6bd24866a033e2743aefb5a8d642f35c","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.8.tgz","fileCount":27,"integrity":"sha512-bOtYG1kEXal03aGlUxlnlZ2qKjrS8Zmw+lm2IYCmWySK5ogXKopYl1OuphYOECGR7u5S49PWKrjjPU2aPiBQOw==","signatures":[{"sig":"MEUCIQCXZZ+pkH9Y318iYAQl74sbiOwMQMVKvmRkeQq3pHIgXwIgDiiQ2IYA45APfismb3awGK3IlMwZxXxkWyXbjqnup3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14853},"main":"dist/index.umd.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.umd.cjs"}},"gitHead":"64002c0937c8dba8338d89466b69879b97a34e59","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","dev:html":"vite --config example/html/vite.config.mts"},"_npmUser":{"name":"aecomet","actor":{"name":"aecomet","type":"user","email":"engineer.t.o.0823@gmail.com"},"email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"11.4.2","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.4","vite":"^7.0.2","axios":"^1.10.0","vitest":"^3.2.4","tsc-alias":"^1.8.16","@vitest/ui":"^3.2.4","typescript":"^5.8.3","vite-plugin-dts":"4.5.4","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.8_1751763579855_0.36528526762638824","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@aecomet/backoff-util","version":"1.0.9","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.9","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"49d58cad6d22c0c710567bf1e37a106ec8770a6c","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.9.tgz","fileCount":37,"integrity":"sha512-oy89ZZOw0WW/DeGzsOYF0Fae2fsbIL2zV/W35/InpfWZPBRqEvm70tN4oIjEJALinCSeBjTH/l68SuL+CW9QJg==","signatures":[{"sig":"MEUCIGZslFi/0uYqoMkSrMugG6SHDk76fXtr4N+nHRvHI3kzAiEAtIyw/ysj3xDQJl3UdGTGlrshRwQL6kTtfYhPYEotnzI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20120},"main":"dist/index.umd.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.umd.cjs"}},"gitHead":"00fb5b744f47107456db2964429fb81a141788aa","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","dev:html":"vite --config example/html/vite.config.mts"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"11.9.0","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","vite":"^8.0.0","axios":"^1.13.6","vitest":"^4.1.0","tsc-alias":"^1.8.16","@vitest/ui":"^4.1.0","typescript":"^5.9.3","vite-plugin-dts":"4.5.4","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.9_1773404659554_0.5928483582998247","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@aecomet/backoff-util","version":"1.0.11","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@1.0.11","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"6e8b880c3b6ad0bc16e2f7fee9e518bab14687cc","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-1.0.11.tgz","fileCount":13,"integrity":"sha512-pqe4rCT7OYlXiEjuqJBc+PvE6GqfczVxV13yYAsbOMKwn++MYYyI7Fco3MToY/dviAjAdC2UEdCEKrqmDCWhOQ==","signatures":[{"sig":"MEUCIQDtOzJYhQi4m83BZj4KI/LJb75DogBPxftAtUa4UY9tiAIgbytx+9hT8/Wr/D3jBkkHXAqTOv+S0cvNLnC/v1sTXgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15661},"main":"dist/index.umd.js","_from":"file:aecomet-backoff-util-1.0.11.tgz","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.umd.cjs"}},"scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","dev:html":"vite --config example/html/vite.config.mts"},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"_resolved":"/private/var/folders/s1/jklnpzcd7w39pm1fds0rjd180000gn/T/0cae0554313d6d583018dbe675c12ad8/aecomet-backoff-util-1.0.11.tgz","_integrity":"sha512-pqe4rCT7OYlXiEjuqJBc+PvE6GqfczVxV13yYAsbOMKwn++MYYyI7Fco3MToY/dviAjAdC2UEdCEKrqmDCWhOQ==","repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"11.9.0","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","vite":"^8.0.0","axios":"^1.13.6","vitest":"^4.1.0","tsc-alias":"^1.8.16","@vitest/ui":"^4.1.0","typescript":"^5.9.3","vite-plugin-dts":"4.5.4","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_1.0.11_1774097749508_0.1589519646398323","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@aecomet/backoff-util","version":"2.0.0","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@2.0.0","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"7833e1dec3e0cee4a57e911ce00f7a7441c7b651","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-2.0.0.tgz","fileCount":10,"integrity":"sha512-P+VK5B8d6dymEPAHw36LsQ6rM0BwoEplA9tMTTyakpLKWBC/p0VWni+77VGfyhEG7PzE+3Y28YRVjeWV/JZw6A==","signatures":[{"sig":"MEUCIQDp5pTGVowQmkoTIHpJvNZmFpqwbUrDjUFco4LsY35AfgIgDxfKgVfLwF7AGKWVeNeYI3sQOjxVfCR5qQemKQWbXek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18115},"main":"dist/index.umd.js","types":"dist/src/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":{"types":"./dist/src/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/src/index.d.ts","default":"./dist/index.umd.cjs"}}},"gitHead":"2ffeb1c63595a6cc68924a5ba995714c10df5a5d","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","format":"prettier --write .","dev:html":"vite --config example/html/vite.config.mts","typecheck":"tsc --noEmit","format:check":"prettier --check ."},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"11.16.0","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"26.3.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.16","axios":"^1.17.0","vitest":"^4.1.8","prettier":"^3.8.3","@vitest/ui":"^4.1.8","typescript":"^6.0.3","vite-plugin-dts":"5.0.2","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_2.0.0_1780793923916_0.7987113196706292","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@aecomet/backoff-util","version":"2.3.0","keywords":["exponential backoff","retry"],"author":{"name":"aecomet"},"license":"MIT","_id":"@aecomet/backoff-util@2.3.0","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"homepage":"https://github.com/aecomet/backoff-util#readme","bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"dist":{"shasum":"8c43142c8a797cf699a9947ccf8b873d9fa11b43","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-2.3.0.tgz","fileCount":20,"integrity":"sha512-VkVO0R6PYqKy4Tb+86bWIA2mH5F19JNJW7908V3I0VSMBb4IwCUXCSflhR5lkixAqAeNOJFZ35AWSNjTQXG2dQ==","signatures":[{"sig":"MEQCIBG5AlzatPx4E6KqS8/4uae/iEXVPxQ3BavogtS23GVhAiBE43GxZ662+tWZF1y961wjmxdJrBDkXZhnE7Iam68ksA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22921},"main":"dist/index.umd.js","types":"dist/src/index.d.ts","module":"dist/index.mjs","exports":{".":{"import":{"types":"./dist/src/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/src/index.d.ts","default":"./dist/index.umd.cjs"}}},"gitHead":"9fde72dbba141f57ea46da195edb20683320f5dc","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","build":"vite build","format":"prettier --write .","dev:html":"vite --config example/html/vite.config.mts","typecheck":"tsc --noEmit","format:check":"prettier --check ."},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"repository":{"url":"git+https://github.com/aecomet/backoff-util.git","type":"git"},"_npmVersion":"11.17.0","description":"A utility to use retry any functions","directories":{},"_nodeVersion":"26.5.0","_hasShrinkwrap":false,"devDependencies":{"vite":"^8.1.4","axios":"^1.18.1","vitest":"^4.1.10","prettier":"^3.9.5","@vitest/ui":"^4.1.10","typescript":"^6.0.3","vite-plugin-dts":"5.0.3","vite-plugin-html":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/backoff-util_2.3.0_1783729280999_0.36820400078790216","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@aecomet/backoff-util","version":"2.4.0","description":"A utility to use retry any functions","keywords":["exponential backoff","retry"],"type":"module","main":"dist/index.cjs","module":"dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"types":"dist/index.d.mts","scripts":{"test":"vitest --config __tests__/vitest.config.mts run","dev:html":"vite --config example/html/vite.config.mts","build":"tsdown","format":"oxfmt --write .","format:check":"oxfmt --check .","typecheck":"tsc --noEmit"},"repository":{"type":"git","url":"git+https://github.com/aecomet/backoff-util.git"},"bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"homepage":"https://github.com/aecomet/backoff-util#readme","author":{"name":"aecomet"},"license":"MIT","devDependencies":{"@vitest/ui":"^4.1.10","axios":"^1.19.0","oxfmt":"^0.62.0","tsdown":"^0.22.14","typescript":"^7.0.2","vite":"^8.2.1","vite-plugin-html":"^3.2.2","vitest":"^4.1.10"},"gitHead":"4313131fea4c45a07d65beaa1a0d4396aab603da","_id":"@aecomet/backoff-util@2.4.0","_nodeVersion":"26.7.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-fAy7FouGtIeVlIIFOgs8ZxZgOO0fx2adW9WQAieQyxp0gGOekcqRT16+p8JCngZDCQ0K8pvZua+shvoW90MiJA==","shasum":"104fe1554c61b183e1b5c7bb698f4b1c8a703a77","tarball":"https://registry.npmjs.org/@aecomet/backoff-util/-/backoff-util-2.4.0.tgz","fileCount":18,"unpackedSize":44033,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC27N33fAo6GwKOtcOi95i+J+oZLKtglZ4JmaYJQ2osSwIhAIdbHWwLG0OXo7p35q1pSCV72NRsODhX6VJvqubCor0v"}]},"_npmUser":{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"},"directories":{},"maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/backoff-util_2.4.0_1786346141555_0.47275647309300495"},"_hasShrinkwrap":false}},"time":{"created":"2024-07-14T05:05:13.470Z","modified":"2026-08-10T07:15:41.865Z","1.0.0":"2024-07-14T05:05:13.758Z","1.0.1":"2024-07-14T05:12:23.041Z","1.0.2":"2024-07-18T03:09:39.134Z","1.0.3":"2024-07-18T05:35:16.776Z","1.0.4":"2024-07-19T14:18:40.604Z","1.0.5":"2024-10-13T12:53:17.345Z","1.0.6":"2025-01-20T01:50:07.934Z","1.0.7":"2025-03-11T04:11:09.280Z","1.0.8":"2025-07-06T00:59:40.044Z","1.0.9":"2026-03-13T12:24:19.685Z","1.0.11":"2026-03-21T12:55:49.646Z","2.0.0":"2026-06-07T00:58:44.055Z","2.3.0":"2026-07-11T00:21:21.188Z","2.4.0":"2026-08-10T07:15:41.706Z"},"bugs":{"url":"https://github.com/aecomet/backoff-util/issues"},"author":{"name":"aecomet"},"license":"MIT","homepage":"https://github.com/aecomet/backoff-util#readme","keywords":["exponential backoff","retry"],"repository":{"type":"git","url":"git+https://github.com/aecomet/backoff-util.git"},"description":"A utility to use retry any functions","maintainers":[{"name":"aecomet","email":"engineer.t.o.0823@gmail.com"}],"readme":"# backoff-util\n\nA TypeScript utility library that provides configurable retry logic with backoff for any async function.\n\n## Installation\n\n```sh\n# pnpm\npnpm add @aecomet/backoff-util\n\n# npm\nnpm install @aecomet/backoff-util\n\n# yarn\nyarn add @aecomet/backoff-util\n```\n\n## Usage\n\n### Default config\n\nRetries up to **10 times** with exponential backoff (base delay `10ms`, max `1000ms`).\n\n```js\nimport { Utility } from '@aecomet/backoff-util';\n\nconst utility = new Utility();\nconst result = await utility.backoff(async () => {\n  return await fetchSomething();\n});\n```\n\n### Custom options\n\n```js\nimport { Utility } from '@aecomet/backoff-util';\n\nconst utility = new Utility({\n  retryCount: 5,\n  minDelay: 100,\n  maxDelay: 2000,\n  delay: 'linear'\n});\nconst result = await utility.backoff(async () => {\n  return await fetchSomething();\n});\n```\n\n### `BackoffOptions`\n\n| Option        | Type                                             | Default         | Description                                                        |\n| ------------- | ------------------------------------------------ | --------------- | ------------------------------------------------------------------ |\n| `retryCount`  | `number`                                         | `10`            | Maximum number of retry attempts                                   |\n| `minDelay`    | `number`                                         | `10`            | Base delay value (ms) used in the backoff formula                  |\n| `maxDelay`    | `number`                                         | `1000`          | Upper bound for the computed delay (ms)                            |\n| `delay`       | `'exponential' \\| 'linear' \\| 'fixed'`           | `'exponential'` | Delay calculation strategy, or a custom function                   |\n| `factor`      | `number`                                         | `2`             | Multiplier for exponential delay (`minDelay * factor^attempt`)     |\n| `jitter`      | `'full' \\| 'none' \\| 'decorrelated'`             | `'full'`        | Jitter strategy, or a custom function                              |\n| `shouldRetry` | `(ctx: BackoffContext) => boolean`               | retry always    | Return `false` to stop retrying immediately                        |\n| `onRetry`     | `(ctx: BackoffContext) => void \\| Promise<void>` | none            | Called on each retry (async supported) for logging or side effects |\n| `timeoutMs`   | `number`                                         | none            | Total elapsed time limit (ms); throws when exceeded                |\n| `signal`      | `AbortSignal`                                    | none            | Cancels the retry loop when the signal is aborted                  |\n\n### Advanced usage\n\n```js\nimport { Utility } from '@aecomet/backoff-util';\n\nconst controller = new AbortController();\n\nconst utility = new Utility({\n  retryCount: 5,\n  minDelay: 100,\n  maxDelay: 2000,\n  delay: 'linear',\n  factor: 3,\n  jitter: 'none',\n  shouldRetry: (ctx) => {\n    return ctx.error instanceof Error && ctx.error.message.startsWith('5');\n  },\n  onRetry: (ctx) => {\n    console.log(`Retry #${ctx.attempt}:`, ctx.error);\n  },\n  timeoutMs: 10000,\n  signal: controller.signal\n});\n\nconst result = await utility.backoff(async () => fetchSomething());\n```\n\nThe callback may be synchronous — a non-Promise return value is resolved as-is:\n\n```js\nconst result = await utility.backoff(() => cachedValue); // resolves immediately\n```\n\n## Errors\n\nAll errors thrown by `backoff()` inherit from `BackoffError` (itself an `Error`), so you can\ncatch retry-specific failures with a single `instanceof` check:\n\n| Class                 | When thrown                       | Notes                                 |\n| --------------------- | --------------------------------- | ------------------------------------- |\n| `BackoffError`        | Retries exhausted without success | `cause` holds the last callback error |\n| `BackoffTimeoutError` | `timeoutMs` exceeded              | Extends `BackoffError`                |\n| `BackoffAbortError`   | `signal` aborted                  | Extends `BackoffError`                |\n\n```js\nimport { Utility, BackoffError } from '@aecomet/backoff-util';\n\ntry {\n  await utility.backoff(fetchSomething);\n} catch (error) {\n  if (error instanceof BackoffError) {\n    // Original failure is preserved for diagnostics\n    console.error('cause:', error.cause);\n  }\n}\n```\n\n### Custom delay / jitter (DI)\n\nYou can inject custom functions for full control:\n\n```js\nimport { Utility } from '@aecomet/backoff-util';\n\n// Custom exponential delay\nconst utility = new Utility({\n  delay: (ctx) => Math.min(100 * Math.pow(2, ctx.attempt), 5000),\n  jitter: (delay) => delay * (0.5 + Math.random())\n});\n```\n\n## `BackoffContext`\n\nCallbacks receive a context object:\n\n| Field       | Type                    | Description                                       |\n| ----------- | ----------------------- | ------------------------------------------------- |\n| `attempt`   | `number`                | Current attempt index (0-based)                   |\n| `error`     | `unknown`               | The error that caused the retry                   |\n| `elapsed`   | `number`                | Total elapsed time since the first call (ms)      |\n| `remaining` | `number`                | Number of retries left (including current)        |\n| `nextDelay` | `number` \\| `undefined` | Next wait time in ms (undefined on final attempt) |\n\n## OpenTelemetry integration\n\n`onRetry` receives a `BackoffContext` with `attempt`, `remaining`, `nextDelay`, and `error`.\nUse it to emit retry telemetry from your application's tracer:\n\n```js\nimport { trace } from '@opentelemetry/api';\nimport { Utility } from '@aecomet/backoff-util';\n\nconst tracer = trace.getTracer('http-client');\n\nconst utility = new Utility({\n  retryCount: 5,\n  onRetry: (ctx) => {\n    tracer.startActiveSpan('http.retry', (span) => {\n      span.setAttribute('retry.attempt', ctx.attempt);\n      span.setAttribute('retry.remaining', ctx.remaining);\n      span.setAttribute('retry.next_delay_ms', ctx.nextDelay ?? 0);\n      span.setAttribute('retry.elapsed_ms', ctx.elapsed);\n      if (ctx.error instanceof Error) {\n        span.recordException(ctx.error);\n      }\n      span.end();\n    });\n  }\n});\n```\n\n## Examples\n\nMore example code is available in the [`example/`](./example/) directory.\n\n```sh\npnpm build\n\nnode example/sample.mjs\nnode example/sampleWithConfig.mjs\nnode example/sampleWithAxios.mjs\nnode example/sampleWithShouldRetry.mjs\nnode example/sampleWithOnRetry.mjs\nnode example/sampleWithTimeout.mjs\nnode example/sampleWithStrategy.mjs\nnode example/sampleWithAbort.mjs\n```\n\n## For Developers\n\n### Prerequisites\n\n- Node.js `26.3.0` (see `.node-version`)\n- pnpm `11`\n\n```sh\n# Build\npnpm build\n\n# Run tests\npnpm test\n\n# Run tests with UI\npnpm test -- --ui\n\n# Link locally for testing in another project\npnpm link -g .\n```\n\n## Architecture\n\nSee [`docs/architecture.md`](./docs/architecture.md) for project structure and design details.\n\n## Migration\n\nIf you are upgrading from v1, see the [migration guide](./docs/migrations/v1-to-v2.md).\n","readmeFilename":"README.md"}