{"_id":"promise-fn-retry","_rev":"15-22a5ff9fa4151463165aab57d42a171b","name":"promise-fn-retry","dist-tags":{"latest":"2.1.0"},"versions":{"1.0.0":{"name":"promise-fn-retry","version":"1.0.0","keywords":["promise","retry","node","javascript","web","integrations","integration","request","fetch"],"author":{"name":"felippemauricio"},"license":"ISC","_id":"promise-fn-retry@1.0.0","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"c89603aa09d3abb09e186f615647c0e4d4f7dd4b","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.0.tgz","fileCount":12,"integrity":"sha512-3+XhD6Dp5sxe1t3lFynbwjMwv4iwIZ72UK5zdfitU4J3PopemJljclGk6Jz4FJpBv+g/2rCEbePPgsuDn08Gig==","signatures":[{"sig":"MEUCIE+0LKiQahYuQHnmN0olhLw7f0kesU345mYsggkAkKEKAiEAymzFnFo2xqcbzKdWG+Cz52vWNThKHT6cIIMY1vgEqNc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":212740,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb80q+CRA9TVsSAnZWagAA13kP/1yFCJBrpunzbyjXNEaG\nnnpw1aiajN+dUhOFm6knZ5Oik4acyxLIcOkR6Wj9CL/+ulH6W/mBGi9TU82V\nrmJEgs2Y5g8mLRzMjStBHRhA0M1xl1HRsgH+u5ovV7pYmMY/F7ABdJraY0XN\nOOuxzKpg7JSajcWx+yqkIJpa9QMjllEz6b++LEQBeARzqMqx/bVOV4TIn6/A\nT7odq2qhvvDjzUhMdEFh2sUKMpb0CurZcEqq679rFhl2TUU5FQGkvOZoACnr\n5iW/Xvxdc4+5X95a+qv96M2n+H0jOSUQa6RbYosfSBaC2mrzCMPDazonuoTb\n1JlXsqE8fMeKBjiNqvJFNAwwjkXY4LXIJVF71MzettVcmF/gdK6B2Hi0ZBYA\nIjaXPXxRDAiU3SJAnrCZSzZT65Q2lddtW+yEpEbrHPpr6d/ZBBs0oez3G0DR\nzi8WsKfywDQI2rspYvHVsc1ts6kIbDp6XiV7YOhm7WDRche1JdrTmKOVna4i\nqYGD22gZ4jYC0OMhm1o0LvuAb3eSK1SCxnQcs9jSuha9TwBwLkr/WY5eKcdV\nSp6dN7HOdHMpDW609e6KJmDBThXqIgenHJF72DynEKFvmmLqEDvzSUMC0vBa\nsv8HHtI00UVIszWxzhVgbah3xAbY7IlI0mCqrfrb/UKOUwFRV3xBN3rYBnxU\n3fgU\r\n=iZX2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"4ff051a107959af1e40410646b00fd1dd9b4f194","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test-coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"_npmVersion":"6.4.1","description":"A simple retry to be used in integrations with NodeJS","directories":{},"_nodeVersion":"11.1.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","eslint":"^5.9.0","coveralls":"^3.0.2","@babel/cli":"^7.1.5","babel-core":"^7.0.0-bridge","babel-jest":"^23.6.0","@babel/core":"^7.1.6","@babel/preset-env":"^7.1.6","eslint-plugin-import":"^2.14.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.0_1542671037708_0.14162013893892134","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"promise-fn-retry","version":"1.0.1","keywords":["promise","retry","node","javascript","web","integrations","integration","request","fetch"],"author":{"name":"felippemauricio"},"license":"ISC","_id":"promise-fn-retry@1.0.1","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"a35150eb2e55e39f14c6827e0bcf05b22d5113f7","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.1.tgz","fileCount":5,"integrity":"sha512-+s1DhyXk9bWARiYXuOwGxHsOy39FLJUbXzjVW/fSCC1vb0gP1Zir8UpzBqxn+INpAe4lstFs97BaT4V/6qzqcA==","signatures":[{"sig":"MEUCIQDSW9Dn4kSh6v0VRUrS8QE/zsXfPSjbetrkaMGNQashOQIgSNNoGGC8iBpscbZrLtn0sc9fvboNLunXk2uaNvnjwNc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":222308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb805DCRA9TVsSAnZWagAAaq8P/jR1P9l+VJLSg/wPO6kT\nyStwmdPPvYTYHj0/Esn4b4uvv30OuWUWyabfApOU4eSI/LfDTyrPTVCiGiDV\nURkxnYujNw7jHOWzofJvs3APS8KkZeLUQodnQw+1ftuE+srCtKlvwj7dY9eD\n/+hobIoqFevNa+5RVgJL3o1Z75/oEsUUijUIjG5795U7gXhiB20OyzIEL/4O\nK2b2w4lPQExsnnKfdqMfq+SiXlDnpawGCwxCUlV83b1yNes0A0QgwNYSvZtR\njKO5I4ZhqhDSUBKYYtl3W0OSKZjHbuMz9uPBCrwAuRacUDIYUPttO67DlxqJ\n2nycqJcqxKcozneR4uWJv3yA8P+Q2buXy2y7gWlDM18Jel/M6zIbYNOVimbH\nyNYQTqk4ljkNnwgRyNBhawHpoYqzN1cHEnMKBekKctrWURHnsVgRnJPG+HKr\nT98AC4SBhqiPXKi/+P0YbyqoWMVkejudDa+o7BbrduSlJ/xWLTeUWO/+E9qP\nYN6Je8DamUzrfsa3MZiptcZWhtg5JXHsG6gvP3YK6pcdFevMqeRAF3ccukfN\nfEu+6TbDNHyYSvVSajgqeOzxI8B8joVIEC8zs2Ay4VNQObIO2PcW1mDnyxqV\nKLh9WLl592w2I7Zd7xHWchYk0k5kbwbXDweCTSlSeaKwD6pLe3O9CpvXwhlg\neqCX\r\n=g9Ye\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"9fed396af9037b506f20a48d72448683af279609","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test-coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"_npmVersion":"6.4.1","description":"A simple retry to be used in integrations with NodeJS","directories":{},"_nodeVersion":"11.1.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","eslint":"^5.9.0","coveralls":"^3.0.2","@babel/cli":"^7.1.5","babel-core":"^7.0.0-bridge","babel-jest":"^23.6.0","@babel/core":"^7.1.6","@babel/preset-env":"^7.1.6","eslint-plugin-import":"^2.14.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.1_1542671939160_0.2655980558808331","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"promise-fn-retry","version":"1.0.2","keywords":["promise","retry","node","javascript","web","integrations","integration","request","fetch"],"author":{"name":"felippemauricio"},"license":"ISC","_id":"promise-fn-retry@1.0.2","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"cd834fb3df6d9f563a459d26515f92c996b1de01","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.2.tgz","fileCount":4,"integrity":"sha512-RHaMmDj0FNSb+sGQpsIOkCLRWuOXcBeuly3N0TLfStByprg0m7lVwiU8r4qBIf7rjzMgOspG1rQ3pKaPFmlIdw==","signatures":[{"sig":"MEQCIC+xMDJDCwpwLh3Xthk0AlQRBE55t3FqNM0qiZPsY62mAiAaGPEuR1U1bejtJMmmgqF47XlrFsZwcz5H3hHiXULSjg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8777,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb82TDCRA9TVsSAnZWagAA4osP/28Fnu615WnAfZogSE33\n8J3/yCxGIbb5WMcdpmd4OWwHIK14+hRBboAVCucPBRHFJa1BFXcE/NRr6kAp\nH+CMMb1IRHJFbb/b/Gxzp9kJjnLx3gLJy7UwsnC898SJWe8KCwHX6xGuZsb+\n+FuxU9Z94r2gwqUrG3PCvh/q5sAeKcYwJ+2EL+swmqzyAI2QjRC7UYY2bK+b\nJNj2ZTrWuAPJClimREE0fwBr8DYTL5in3UNIVSaax4BcPhtBRWdfdxWjX+B8\nNL8HEvu2SqVboKr/wFNTIMzxPeKE8+hIedxXAweHybtJhF6sGp5NWPJn6e2n\nRp09Et/SVvgoD3i7D8zlI9/CO1GWWrdvO82Yno94KVOzuZoKrwq/FRr6QrMY\nhQylOjy2A72bTjsJQmHnO8yfhdiH2Bo27PCcSacix6BDzLghPhSoQuet2uAv\n7pQGCVtHSHSlAdrDRY1t8mnt81U/W4zRUCNUPyObnosC6MG+mJs4fI1CBEmc\nWwnL8rLcTBXcS3CfpRKhj9e1pHh23F8/uS6ShopVT7D7zj5ba0eIeP8H5opU\nO8yK4bYB8zquBdNFw4RBEUlVw0XmhN3PgAWTVpFSkT4CMRuenFAjbpXJSIO0\nzOZNn0bf0UCg1yQCA+SOzeVFJkO9xuIgSEikLaSOhQhpmVsVAQjuBA+cyScX\nVMkn\r\n=SURf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"5a7a3c568d49cd74ca3e7878555537b7e83118b8","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test-coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"_npmVersion":"6.4.1","description":"A simple retry to be used in integrations with NodeJS","directories":{},"_nodeVersion":"11.1.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","eslint":"^5.9.0","coveralls":"^3.0.2","@babel/cli":"^7.1.5","babel-core":"^7.0.0-bridge","babel-jest":"^23.6.0","@babel/core":"^7.1.6","@babel/preset-env":"^7.1.6","eslint-plugin-import":"^2.14.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.2_1542677698986_0.5181370885868659","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"promise-fn-retry","version":"1.0.3","keywords":["promise","retry","node","javascript","web","integrations","integration","request","fetch"],"author":{"name":"felippemauricio"},"license":"MIT","_id":"promise-fn-retry@1.0.3","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"447bb8250d4ba5202b08bdf3995686de649c8dba","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.3.tgz","fileCount":4,"integrity":"sha512-ZWZ244/xymnvq/cQTZS1pemQN4a14Y3ZMJudBvy7hwFgNZ6rz/w0TqByuzMSO086QzGRh8QLVtIvQBRdpH64tw==","signatures":[{"sig":"MEQCIFIijbduRAWVDg1AhpjShgrkP7wqbEOCoin1p4Or2TazAiBIDMtDrYb+2MDx/w0gm8Bm5St/tlyhCWc3iGjYAv0Glg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9062,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb82kiCRA9TVsSAnZWagAAQAwQAKC0sfsh/DA8lwbz1u9i\nsJIbmWSM2FQflz2B+O7IUePSE9zmR0wJsHUhFYaj4s5xMV4xVyNfKbeERRMj\nNI8AZpqrekTmVfljjqZnIWkYVdbLYRBrQGPw4b+WSN3ejeqqqKBHCefauJ7y\n24D0b5dzufjpes7KDweEI+8DKuX8xrDFUk6Q1kUG+lQPCuMbmaph/5+3T2zq\nWEmNTm3qh3nzfPPbRmjfj3IVJLbvH4sR8Q2Zy0CuQPRq2fVA8RHoZPWNqW6d\no6b9sVIQOGLIhBaSVwYaS5hzXGpkg3gWOObp0/gRPulqPx8h6tlm+68atsOd\nYF4uLpsgl8015grSuJCUMCgbEEmVXb6a9y1XAUGLrnUVWM+/FR6+IyLNHDFP\nibssbFAjEmceVT+2y16ITnDcuPAO94M1BuR4WVz0GCq0P6qpEZcd24so6p7d\n6PM064r8qMqUK7cDKkVjP72zENIo7Xt3GEOAPvm3bNJ4nvr+wfS88SW88b6+\nW8APw6C2KePzpLm1tNUmgMLQ9ZI4G1QEFTxpZjcY4MD9aHHuEjJk0VHsl/CK\n83cKEt4rkiFkI/wqci1BvTYhl2e4+nSAmZibKWokBH5vpUnlUKNi4Rjmk7cZ\n/T8cHReuRaNiiaQGRNavGmpRHP2cS1R2+MUOBlJBhiVj9Ucoal70DPZ13AmF\nEmYw\r\n=6b6Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"c8c50457d062ef9c568fb33f27873fbe96fd7df1","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test-coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"_npmVersion":"6.4.1","description":"A simple retry to be used in integrations with NodeJS","directories":{},"_nodeVersion":"11.1.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","eslint":"^5.9.0","coveralls":"^3.0.2","@babel/cli":"^7.1.5","babel-core":"^7.0.0-bridge","babel-jest":"^23.6.0","@babel/core":"^7.1.6","@babel/preset-env":"^7.1.6","eslint-plugin-import":"^2.14.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.3_1542678818212_0.546114355692523","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"promise-fn-retry","version":"1.0.4","keywords":["promise","retry","node","javascript","web","integrations","integration","request","fetch"],"author":{"name":"felippemauricio"},"license":"MIT","_id":"promise-fn-retry@1.0.4","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"0c4d8603bd5bf0201dd2bbf270975f42d448e75b","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.4.tgz","fileCount":4,"integrity":"sha512-wyC4wk+xPMeCMh3cUzIB3Kbi02jqlHaRO+ga0j3EvEtjqY+bmtTA8Z03RkDyEYNFc8794Ck4HkEc06sZZSPKUg==","signatures":[{"sig":"MEQCIGJlhtXbPsZc6/bRogqJ86f65C+W9WqRI901cnDqzDDwAiBEU4oZ696Bw3+/A2OD1U4Uvi3RTVHj6/nBKKQi1799SA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb83CUCRA9TVsSAnZWagAA15QP/j+iQDfIwz5KUH0Nn29d\nfFFLjGH44Zu/9y6liDpDFyGjoQIW7MjHWl1PTraSC6Cp//wMs//iHe9QKd9x\nezILrei7czBar//Jvm2oQ1anxCZaXRBDxPshv1nCS6Bjwxdd1cPirUKaqwZi\ndo1LyF51Hp/9C+hq0+wCASLGtsupVUExt1fxtmgYZKLHc8CWGn7MUcIqLH/D\n3y5N7C/i01jh1tIgQED04BfZiuoxKzApXtYfWpof1Ru0sQorZ7mojVVHpvt/\nWuxi1wketP5IR7XVz8xJPR6KRSkx23291FBCDqssz4YtmoOck7Hmv8AsdcUz\ndRsdv5EuF+MXzNapRoaUgoE+MvuEhtoE/RxrYMLVBxxDxYIB3yHZ5Y13UDsH\nVFcQhFBOxwISKCzKoLbu5adPYrgQcOZ7zQ8HMGPE2MdbUCPggz8SNr7h/MfW\nb1OEHDjSKao8R/xjxEtB/uNjnS/syUQM0utAVnkG/QhThXk89WMGnK7lhcYN\ntbwGdeRuk2nm6kg2XEvLxx2f+rf5qNvjENOQcdsL4c728h4yE9rW1NA6WglS\nhlSiWdf13WHfObAYCEY+8DaM0B8xjgtewU3VlY4IQb9YpxVrLHXZGC/J1Gdq\ngMLS5NfGX3ltRSvmYGVW4s3an10UEHxEmW+dwbpFcju4cCbKg+xhXM0YCKg3\noDeY\r\n=UEYC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"4ed5e8f819d033b3f63be1e9a3e844bee0812ca7","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test-coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"_npmVersion":"6.4.1","description":"A simple retry to be used in integrations with NodeJS","directories":{},"_nodeVersion":"11.1.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^23.6.0","eslint":"^5.9.0","coveralls":"^3.0.2","@babel/cli":"^7.1.5","babel-core":"^7.0.0-bridge","babel-jest":"^23.6.0","@babel/core":"^7.1.6","@babel/preset-env":"^7.1.6","eslint-plugin-import":"^2.14.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.4_1542680723574_0.001639077279845802","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"promise-fn-retry","version":"1.0.5","keywords":["fetch","javascript","integration","integrations","node","request","retry","promise","web"],"author":{"url":"https://github.com/felippemauricio","name":"Felippe Maurício","email":"felippemauriciov@gmail.com"},"license":"MIT","_id":"promise-fn-retry@1.0.5","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"85d681143bd20e76fca29f0a51d7e4f7f312dee0","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.5.tgz","fileCount":4,"integrity":"sha512-vuGaa2ghebXrvjurlLXwfSJZx1Jua9fZ/Z7gJzApHjpha8W5xFqbLlAhd7MYKZLB4KFpOR4jiLvbcfszH/ZWZA==","signatures":[{"sig":"MEYCIQC9uRnIBgeSjI0rCJWWDF9tJHwGP8fBTrGGE0vYEZVwpgIhANCOMsqgPkS+G7MHe+fJJ5igxK8uhMEHRxmuRBrl3WMb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXxS1CRA9TVsSAnZWagAAYEMP/1pQwyVYidXjxDzIs+1W\njO+h3uO+y0sBwZ8CffW5FvDe6ZnxWTDh6IwlqNCYi8fjfHb07iO1D1klbNLP\neMRxlChASsBOW7YwSUvf0YePr0Ew1OA+p82Eo3GmAxhfQT0FBpmKIWgt3gHD\nKFwIwWIQRFCs0CDAhoJMMKLH9bR65q5n2PaW02VM89X3jUTpxW/iAlVjnCPS\nbXOgt5TAUnOJINwUGgjz876ACX3EtRxH/DxWJpHtLiwbV+a1hr7iJv16aJMh\n/DPD6kmi27FgCbW4WmMIP+lJ2BnKk8e1J2jWVFeA0spvpgNzqBUuQWImydqm\n4m8jTjDsumgtvc4xTAf4+UNrirefY7+EqVC5rFDscYD0HkU/KQPKB5qH8DrL\n4C10c7lUj1wiw4u49k677ZjFiM1Qponp8cqUk9fh1pSizpNfwkylJYip2gSo\n4JBU3rICtQYkhxdcW6VJoVzkwcKmvVYgc6iCHk+cXBGzdk6eBIdFCtnZwEFy\nqAaTzNtyu38sZtO7TIdCQ4CjL0OmM6O+XESxgxOOpQVvT3THtV06taRQeRM9\nK21x0pbrdBV1ackxfAB+o4Ob4VtxrQOszT2z0sew9ERGQGB7e4wUde7BIc99\nCIWnJgeraEcgTjCc2MYfQNsnOwhq9lVPmeHNxtsEpsRGaQUPur/mR/fBwyVe\nP89A\r\n=9RDo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"bc1c68d39b42c78c654621711a0ecd6c417c32ed","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test:ci":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"_npmVersion":"6.5.0","description":"A simple retry to be used in integrations with NodeJS","directories":{},"_nodeVersion":"11.9.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^24.1.0","eslint":"^5.13.0","coveralls":"^3.0.2","@babel/cli":"^7.2.3","babel-jest":"^24.1.0","@babel/core":"^7.2.2","@babel/preset-env":"^7.3.1","eslint-plugin-import":"^2.16.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.5_1549735093096_0.15897617544844134","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"promise-fn-retry","version":"1.0.6","keywords":["fetch","javascript","integration","integrations","node","request","retry","promise","web"],"author":{"url":"https://github.com/felippemauricio","name":"Felippe Maurício","email":"felippemauriciov@gmail.com"},"license":"MIT","_id":"promise-fn-retry@1.0.6","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"295ec4493e2da6027db01127b82e79b32d696ea1","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.6.tgz","fileCount":12,"integrity":"sha512-6GY5Rgrz62mKgpa+GGCt1zNad0QsP+InY+cOTPu3H+oOhDdm1gS1CZyNDWKzQOAwv+FU2ZQCuNG8Kv/wc4yCIQ==","signatures":[{"sig":"MEYCIQD3XgEiEJyyTcP22oOpDQoJrtUiMJjuPiVACETCV5B8swIhANSlr+sTLCIP0elRTnv/AIL4vgTrKL89LP034eOmzUjI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":14791,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcX2/BCRA9TVsSAnZWagAABOUQAKCZMOsLcLmjQRDN7jfF\nWOUWlMn52iPrmVnx8gtThcWArN8IqgFglX36j8XZcbb1ZyhVoigYyDaCO5PP\n272TB4nDP1O7H/OxbC7cghSIfbdjWlUQCo4v23+evC8dZk7kpfeRT7WtPtIU\n0tReE4PK/EJY8QUfuISXRamLskse2MXQxsokslvsoRO+l0WLrcoL0QmY6Rsz\nwYQyEJA925EICgOQt2B/6we2hNvg293kc2kYicUy7VfmYXe8OxuWNfhWh/hN\neh/Uyc19dwMuRrVbetofWJnfKjB8WSdQQuhNh0S45I60fJq2BWtM3ROS5Zgd\nEYSSEFNGHQW/AZOElw2UB5Q8XNQRVYSvGaiGc3pza+wQj12plliMC/vBYRU5\ngmn/oWMsCyGwP/ImmOWkOV+AYjXpDxZ7mIgbm+tria+yVJMEVclxpHYY187I\nQ9gsgcJq2KT71OjFKV7K7AqRCTKPmTpSTbql3asJ1Scrl8EOwMAqU1FEXQ4h\n3b+xEYTx+CLqQN6HDsJtDN3L0z6yG/XMMhTLgbvvV/Z7feLKP5y0stNjjTjs\nWiYxmUoinGONW17qeV3skK0FWE8hCqM6kEwAN/kRdjyxPyuSYhg2Nr2wsfv7\nry5LA0ySaKHuV5AOElHcJaY4lVlIkRO6GvmJHPd97qb+OPW6WQxqeqcyH+xr\npzl2\r\n=8Tpf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test:coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"description":"A simple retry to be used in integrations with NodeJS","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2018 Felippe Maurício\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_hasShrinkwrap":false,"devDependencies":{"jest":"^24.1.0","eslint":"^5.13.0","coveralls":"^3.0.2","@babel/cli":"^7.2.3","babel-jest":"^24.1.0","@babel/core":"^7.2.2","@babel/preset-env":"^7.3.1","eslint-plugin-import":"^2.16.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.6_1549758400594_0.8072468655353753","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"promise-fn-retry","version":"1.0.7","keywords":["fetch","javascript","integration","integrations","node","request","retry","promise","web"],"author":{"url":"https://github.com/felippemauricio","name":"Felippe Maurício","email":"felippemauriciov@gmail.com"},"license":"MIT","_id":"promise-fn-retry@1.0.7","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"1bb526b2182aca31d06b2aeaa642301696f3984a","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.7.tgz","fileCount":6,"integrity":"sha512-8MJ9+cTtjtb5ZUMHnyrbVavWnEr9q1D+X5vx8tMDYfjU78gDSg6bQYnyQRIH2NhshA/N8ds/xPdORpv4er1d5g==","signatures":[{"sig":"MEUCIAwqIOhVzbGB1lh6HwAgr8bSyl3qAqbsk73zX5Np6W0xAiEApyWP5Dwd4FU85CppTFPEgBYBXrdz09HOF7MLqzU6kgo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":10860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcX3GGCRA9TVsSAnZWagAAh1kP/1fFdnK+e7U9W7V9/Nam\niMpPmQo7KxEE+v0IaVXmjSwfs7PO8Tt0lC5ernQvAPuT39F4BehUz73WpDnz\nDxWvDO6IfP4FeeH4LhkjMCDaGTYQ8cIJ8GR7eqMDnF7uI/4os+xYMxDeEfQ5\nIgrDfXwb53I3aL7xWYnRBRO1Jij7yCtob/e5kAPl5WAskATkVPnOt/mEF+Yb\n0h6NlxrK8YSCPt4dSv1e0Zh6RJEBk+wc6FBIM7zB5RVD89AEyNTj0eTf/RUL\nO7I0GF+NDMSh4UAe/fgeSXfxvrHOZ412ZgXnh2yXZFi4gWmvOj3x3SwvPMVR\n9cI/K+hX+EBFoQ+xPtwvDNCW6Sde9M/sumvOhKBwCm6U6hA7hE6xnzb0l3n3\n6zgjo/iU+4xOqYSDVxMjWJ6yRk551/rM34Loi3wgyfKj9hn8JC5ItU2S3jH5\n28p3tgV1iSrqYrNlnkkZR1Cz7rBQ+jd5XLehubJJEveBAVkU3NW9RkTiIe2N\nE6Ptqh7O1eTDpBmxfK/3lsFT1xG7u8qalxwerUtVtalOVP6uk7zJbukRZFXO\nNwVuUN5/zETaLT0uqlKRobwiKgywzCL0ujsWzZIUkr6I+fI/3iRzF1beej20\nFPDGci441IJkZrpN1hntM1QxyDwtkpI3goPcGwa39KWTNFY6jqsd8s9PTB5w\nIfze\r\n=fBeg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test:coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"description":"A simple retry to be used in integrations with NodeJS","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2018 Felippe Maurício\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_hasShrinkwrap":false,"devDependencies":{"jest":"^24.1.0","eslint":"^5.13.0","coveralls":"^3.0.2","@babel/cli":"^7.2.3","babel-jest":"^24.1.0","@babel/core":"^7.2.2","@babel/preset-env":"^7.3.1","eslint-plugin-import":"^2.16.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.7_1549758853999_0.7211781654063947","host":"s3://npm-registry-packages"}},"1.0.8":{"name":"promise-fn-retry","version":"1.0.8","keywords":["fetch","integration","node","request","retry","promise"],"author":{"url":"https://github.com/felippemauricio","name":"Felippe Maurício","email":"felippemauriciov@gmail.com"},"license":"MIT","_id":"promise-fn-retry@1.0.8","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"25d32e71b9472793261fee962851979e6c832609","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.8.tgz","fileCount":6,"integrity":"sha512-KKhQ1m0iXadSWaihd9N7sI6UkV8UgH85qGt3xtg7Ynnob2haS3fraT5RiAVp1lcG78+HFZ1eqRvC6+/jVXWxoQ==","signatures":[{"sig":"MEUCIAQR8z2m8RbhAGKkGpAfI5f/oK625bOuxsV1q5tOZkznAiEAsf1w1wP16gCptb/pejVjNyakiW/LendAz29EaE5oWqA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9718,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYN5YCRA9TVsSAnZWagAA/7AP/0RZ/2kFp+GIqQVGd5sH\nUu700oXq1lGIjSNK9mfbcp/DFZda9/edGyTWqGlEVjL/eSPWrLgQSGdrnytk\niKQNUyvOjC3Caq86sepOu52emYUuItXWj3j4eQKnICFFiaQu07hFGIPsDiGj\nOLo8OvTXIm2Fdaiw0bEVLBVyzN0rHhZ5UefQBrFZ+86IglGBO04U2iHtPiFW\nvygQThjQuQNNuNrDOIvTSj1Jyr4llOL3Wm68GEDOkJgZziHJP5qxTb2opDw6\nJj3FFya6M6GHoZX8+bA3ILTUWzp+Vi3jesJNxrsSMz/n/e+saHdGlhgyZJ97\n9u5gNYzjaiC6GbnVVvuabOu7n5M1+DuDGnt+SQl0ZeiFD5Ne/Of+SLfU+otd\nnfQySJlZsuJtfC5uORH9YjE50zZGJ2zd8oMIMJjjzuWtlJfL1HsJ3zm3ec/9\n/l5Bji0Zd8D5Wbt1M37udSaL2zjTFu6zO9ECHSGeYp9YuLaI9DGsEG38k0Qf\n+Iufz6EV+J6Dl/bnzFJGPCYkaLeUw4v8xs3DACmZre03cSWeLmYbemYpfP3C\nRgmubIFYahNlliSLGLJfk+klfMfncwmUX0AZF1VUaYIlaIOrRZWHwZxaZeAi\nkhO+7m5gnXtOcPHRM5cbBRdtF4R+V39wn3vdDOhaJwBEzvRcRhBl1RvUb80y\nP7eE\r\n=cphR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","scripts":{"lint":"eslint .","test":"jest","build":"babel src --out-dir lib","test:coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"description":"A simple retry to be used in integrations with NodeJS","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2018 Felippe Maurício\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_hasShrinkwrap":false,"devDependencies":{"jest":"^24.1.0","eslint":"^5.13.0","coveralls":"^3.0.2","@babel/cli":"^7.2.3","babel-jest":"^24.1.0","@babel/core":"^7.2.2","babel-eslint":"^10.0.1","@babel/preset-env":"^7.3.1","eslint-plugin-import":"^2.16.0","eslint-config-airbnb-base":"^13.1.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.8_1549852247431_0.6956704696151836","host":"s3://npm-registry-packages"}},"1.0.9":{"name":"promise-fn-retry","version":"1.0.9","keywords":["fetch","integration","node","request","retry","promise"],"author":{"url":"https://github.com/felippemauricio","name":"Felippe Maurício","email":"felippemauriciov@gmail.com"},"license":"MIT","_id":"promise-fn-retry@1.0.9","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"e6c32760202c5ac12087de1a9c2077739d144d0b","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.9.tgz","fileCount":6,"integrity":"sha512-GW2acGEuq4Yij2g4aC8VyR78BR1od23x3kz+w40esuazYvjXBa2famUU86jhody6bgbd71K+RvyLoMxaxnpXjQ==","signatures":[{"sig":"MEUCIQCtAgRRDJxye1vlmw1yI39md4wh//tFZPZdK20y/u8nQQIgUh4eMppaa9emAUG+KcJy4d4MXPwBHMtjtCPohkulCPs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9348,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcY1VhCRA9TVsSAnZWagAA7ZAQAKKusuarrMC/cLPjIsMP\nsWNbnS/Kd57OR/R0IPwf0FCnmqYL5canv/QeycLwKb4SIXFjEGWtEfmskPaT\nuAxAXmvIBD4WzweN/ojQ0lwfKB/DZKhYZ39ckFVQUXtmMBXsWJVNO44OUbMY\nyIKTbA4pDv8S/RN7gUHeFSda1vCeis2lsYkKw11l2Y/OkeBjD+hz0e2IFkBG\nF9e1IIQxGA9QpsdDTU1IP8NrM2uSDFTP9M2j8fdWBaHj/AJ920fghffROkrW\nvlGLVfT5XsHZBu3/D6VFkEFkXLzdyZmATWdyqAwn9Piw/ZRPp2ZCpvoxRFVI\nFuD+xecjN4ViPssMtmGIXNykFUSy9w0YgMZUAvSERsX+mIWZ8zZ1XUBi2F1a\nLecKHP5SHr7vbB1Ag+V9nx1VPuhirqVlmdPb7zZ6Jpi6CKnsnfp0VqKbeUi/\nlhK9etKbKForEDz+djBUc8etIyqX52borlJHSoLDdFTlIrGa7TX2c9MdZkfq\nLz5/Co/746iiJ25RsCb/ePYBvKz2kNjVHcQW2RfSuxJwEuLQ9gui2cLjQunM\naW8+JkUcdTzjvjSFNS7VawmGgZkKCrmZpDsJAPOe2TlMmTIKwhzn8pPeaQsG\naavVQq7mM9Obf+nBo4ANSIsllBdtPD9cnzi13TfVw1LHMVGD1wRBMLvyHEzG\n1cLd\r\n=WqL4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","scripts":{"lint":"eslint .","test":"jest","build":"NODE_ENV=production babel src --out-dir lib","test:watch":"jest --watch","test:coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"description":"A simple retry to be used in integrations with NodeJS","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2018 Felippe Maurício\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_hasShrinkwrap":false,"devDependencies":{"jest":"^24.1.0","eslint":"^5.13.0","coveralls":"^3.0.2","@babel/cli":"^7.2.3","babel-jest":"^24.1.0","@babel/core":"^7.2.2","babel-eslint":"^10.0.1","@babel/preset-env":"^7.3.1","eslint-plugin-import":"^2.16.0","eslint-config-airbnb-base":"^13.1.0","babel-plugin-add-module-exports":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.9_1550013793001_0.009174110884433428","host":"s3://npm-registry-packages"}},"1.0.10":{"name":"promise-fn-retry","version":"1.0.10","keywords":["fetch","integration","node","request","retry","promise"],"author":{"url":"https://github.com/felippemauricio","name":"Felippe Maurício","email":"felippemauriciov@gmail.com"},"license":"MIT","_id":"promise-fn-retry@1.0.10","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"6fba2badcfd43e4517d2a01b48a167b77cc01b53","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.10.tgz","fileCount":5,"integrity":"sha512-6hKDltGF1ogPsnruLEBYNWayrhM/gk1CeeDVw/sVyrTdGXpC5UfT4B2luPqlXD1jFn+Rp9lt3zzeID8ITrmGaQ==","signatures":[{"sig":"MEUCIQCLJbR9zJJ3upmLSjLVSVKVZTnaLV0AfW04eeMxeI4XUgIgbl3WC8+dS9ERaCSX4U78OnlwOUZHGHjKdv5ER7X/KS8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9398,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdDZTBCRA9TVsSAnZWagAAxC4QAJbJKb6/OoBih5fdzGJX\noF9HKboZy/Oc40jth+eEqMkmqNg+Kle07uOrxHEcjxphvPfAospip499EyUk\nTPYLs4lhCfk/17FjQAsm4oOD7jZACLwCcifhL5inE97FKxFS2xCS5FAOjmyg\nIe0BxrTvJqdyjVW0M1anipoO1SCiKWmm1XY44/J6/Omjour5KvGpby0Zo4eT\nOgwIF3rGv4jkBkg7pXPllXd+MN4qrkK/CUPCsfdp4YRD9xvGXB2xyUMED2fB\nb+4vtPzra8i+NFtp1ymdjt+bjvX9PrkKz2ArL9Qf67bGqU4+SZ6NgR/nApz7\nTurQ5D/tTIx1uazVSmeCku/uuSOLNKkjfaGMUKsF/DnhR0eh9fXd2RvuN082\nE2gq25lxTR/mbEnZ7lsXYXjIC+0CtSxpiIOpy0ebD0cYh0L2vHb0JWeYdU1h\n5gZdbe1Q5SZ6XDIdK67Pdaf9k2UuGEt2cPnkhgAioSL86vA4KXJpR4m2xI3h\nWgKqNZHaGOmiVDbswY+YMFw9Xd4W2goRzJGc70ID4BkPt9iBnc0Brloa9BIL\n6LHnb+k5/f2MeNcN6x06wUR6TUGH201kLDXhPSE4Zg5cnwuTKS9J2dTilw9g\nx0G/1gC0boc3n6SU49KDEz5WUg19Wft8+wVVj6AAI3Stsdg6Qag/bPNshDQL\nYqAI\r\n=B8dJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"777fd8a22f3178884f1de96417f63b185d0e1e68","scripts":{"lint":"eslint .","test":"jest","build":"NODE_ENV=production babel src --out-dir lib","test:watch":"jest --watch","test:coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"_npmVersion":"6.9.0","description":"A simple retry to be used in integrations with NodeJS","directories":{},"_nodeVersion":"10.15.3","_hasShrinkwrap":false,"devDependencies":{"jest":"^24.8.0","eslint":"^5.16.0","coveralls":"^3.0.4","@babel/cli":"^7.4.4","babel-jest":"^24.8.0","@babel/core":"^7.4.5","babel-eslint":"^10.0.2","@babel/preset-env":"^7.4.5","eslint-plugin-import":"^2.17.3","eslint-config-airbnb-base":"^13.1.0","babel-plugin-add-module-exports":"^1.0.2"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.10_1561171136788_0.24364415222512315","host":"s3://npm-registry-packages"}},"1.0.11":{"name":"promise-fn-retry","version":"1.0.11","keywords":["fetch","integration","node","request","retry","promise"],"author":{"url":"https://github.com/felippemauriciov","name":"Felippe Maurício","email":"felippemauriciov@gmail.com"},"license":"MIT","_id":"promise-fn-retry@1.0.11","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauriciov/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauriciov/promise-fn-retry/issues"},"dist":{"shasum":"3d10549f3942a018d69641e15b70d513c1530368","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-1.0.11.tgz","fileCount":5,"integrity":"sha512-8RfsagpIGMmPMXK0OgGvXeFg1l4g+TRHcXFvmD5DHXx2t4bnyBC43uZeO+YXJjNWr7Bc/eUexLfN21u02VxzTg==","signatures":[{"sig":"MEQCIAMasXTl1RS6Nh1rSwDjLOE0kSZlQ30LeJFiNaOjOYHOAiAN4TBdu7UGG5Wqvk00cGj+UbCaP97I1fWc77+PmsAeNw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9858,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUgj9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrigA/+JzZ91yaHWklzsEedToQL+H7LVimH7DQQcFsvvoAznCLAZYCC\r\nGkEcIAn8EG+wgqH8dAlS/lR/NpfhCMOt4yJ1eSAeMucg8p1U642laC9gt592\r\nL8ihvyUY2+PZ2fMLXqevmJ3b0xp+z+EASgYdCn5scPpKlQNzHVTssKVK5m5r\r\n+reFs9HHL/J1w3UAIw4FCrO9hUrjrickqBaRLSCenOOj9CPPLvDeIHY9T7+l\r\n2zPG0O42JtpFmWf0fLpuehwCOEPAQt/CVXngUIKyIkh4nYnNur3UcewxhIdk\r\nIe7lZIs4WxVi7xFSuODkzjgZq8owqWA7FpoC5aiLVvZ791nZZLfK0he5b1Ke\r\nv4xKF5URYtYXIBqIAx5TI04BYu8Wh/CsN+rKMQv8fdZz3okPZFk6BxUq05hB\r\nLh5mVMDMsw0Hj4ip2I28tl20ecMIrEs0tr0oTq4dEo56T25IesccaSY42ONW\r\nRzi/72xYCQZBepJzRZ8micTNphvx94wib0LggTGaqf+J5OERYrWS4T4bYjGv\r\nSl1+5WY+nfqCZzgAzYtK5fe4xh+GycB/jooIfxGbVmDFQR3au5PMr5cWN07j\r\nQid+UvS6AnRaZd2CzKLoBQU4lQ7Q+9/d1CglQ/n48HCF21z++UWG4hWpu4x+\r\nj3BePNUIc/OQAxI9A8LIcNf9t66/Thg/I24=\r\n=z7H5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/index.js","gitHead":"8cc81ccbb5f42619e46409e43d7fa04f4aa06d20","scripts":{"lint":"eslint .","test":"jest","build":"NODE_ENV=production babel src --out-dir lib","test:watch":"jest --watch","test:coverage":"jest --coverage --coverageReporters=text-lcov | coveralls"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauriciov/promise-fn-retry.git","type":"git"},"_npmVersion":"8.19.3","description":"A simple retry to be used in integrations with NodeJS","directories":{},"_nodeVersion":"16.19.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^27.0.5","eslint":"^7.29.0","coveralls":"^3.1.0","@babel/cli":"^7.14.5","babel-jest":"^27.0.5","@babel/core":"^7.14.6","babel-eslint":"^10.0.2","@babel/preset-env":"^7.14.7","eslint-plugin-import":"^2.23.4","eslint-config-airbnb-base":"^14.2.1","babel-plugin-add-module-exports":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_1.0.11_1683097853745_0.3833977607087178","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"promise-fn-retry","version":"2.0.0","keywords":["fetch","integration","node","browser","request","retry","promise","backoff","jitter","abortsignal","typescript"],"author":{"url":"https://github.com/felippemauricio","name":"Felippe Maurício","email":"felippemauriciov@gmail.com"},"license":"MIT","_id":"promise-fn-retry@2.0.0","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"dist":{"shasum":"a25499e17430c8fa0810ffda49ec83d7669f1169","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-2.0.0.tgz","fileCount":9,"integrity":"sha512-0AkBVu/LjiFPHOHUpNlCRyVKKIVhQZ1+eAp2vORoEje4QNq4c2isOq5GyT4U1paLRnHSC9890T5u+Ok2ko4maA==","signatures":[{"sig":"MEUCIQCb08Nvm+sfh7EMwo5JIfzjvwpVUbptJS2BCKvOHYh7TgIgHDxHGQWCy9ngqEoI3AHpJoofAOnIVOuYMGjImDz21DI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/promise-fn-retry@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32809},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=12"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"5bc240367f4c97c02e5602f280a9bfb2692b1a9a","scripts":{"lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","typecheck":"tsc --noEmit","test:watch":"vitest","demo:backend":"npm run build && node demo/backend/server.mjs","demo:browser":"npm run build && node demo/serve.mjs","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"repository":{"url":"git+https://github.com/felippemauricio/promise-fn-retry.git","type":"git"},"_npmVersion":"10.9.8","description":"A tiny, typed, isomorphic retry with exponential backoff, jitter and AbortSignal for failed promises","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","_hasShrinkwrap":false,"packageManager":"npm@11.17.0","devDependencies":{"tsup":"^8.5.1","eslint":"^10.5.0","vitest":"^4.1.9","prettier":"^3.8.4","@eslint/js":"^10.0.1","typescript":"^6.0.3","typescript-eslint":"^8.61.1","@vitest/coverage-v8":"^4.1.9"},"_npmOperationalInternal":{"tmp":"tmp/promise-fn-retry_2.0.0_1782106800039_0.15630136285212437","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"promise-fn-retry","version":"2.1.0","description":"A tiny, typed, isomorphic retry with exponential backoff, jitter and AbortSignal for failed promises","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"sideEffects":false,"engines":{"node":">=12"},"packageManager":"npm@11.17.0","scripts":{"build":"tsup","typecheck":"tsc --noEmit","lint":"eslint .","format":"prettier --write .","format:check":"prettier --check .","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","docs:dev":"vitepress dev website","docs:build":"vitepress build website","docs:preview":"vitepress preview website","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/felippemauricio/promise-fn-retry.git"},"keywords":["fetch","integration","node","browser","request","retry","promise","backoff","jitter","abortsignal","typescript"],"author":{"name":"Felippe Maurício","email":"felippemauriciov@gmail.com","url":"https://github.com/felippemauricio"},"license":"MIT","bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","devDependencies":{"@eslint/js":"^10.0.1","@vitest/coverage-v8":"^4.1.9","eslint":"^10.5.0","prettier":"^3.8.4","tsup":"^8.5.1","typescript":"^6.0.3","typescript-eslint":"^8.61.1","vitepress":"^1.6.4","vitest":"^4.1.9"},"_id":"promise-fn-retry@2.1.0","gitHead":"81bfbd87eaa8604942c6992ec5f4e95c25b26cfb","_nodeVersion":"22.23.0","_npmVersion":"10.9.8","dist":{"integrity":"sha512-G+4eCq07qBS+I2Kr0GBlwf4h/HGTYvjBkOGGH0Vo8MapsSqIpbBiVJFIVMRTSgfCwEwnhBeYQmgrJI98CgAJjg==","shasum":"723e72cc6e6f9ce6448fff23fa00014bab3f0ba3","tarball":"https://registry.npmjs.org/promise-fn-retry/-/promise-fn-retry-2.1.0.tgz","fileCount":9,"unpackedSize":70146,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/promise-fn-retry@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCRBfI72hOuXpPzxQOKMSE9Io31+j8/P1lW5RMP4wQ/igIhAMv8zir0VCj5t4R1ucXI9RAHRqTAE4wSXogg8MDfaS80"}]},"_npmUser":{"name":"felippemauricio","email":"felippemauriciov@gmail.com"},"directories":{},"maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/promise-fn-retry_2.1.0_1782356325748_0.7138762222600816"},"_hasShrinkwrap":false}},"time":{"created":"2018-11-19T23:43:57.708Z","modified":"2026-06-25T02:58:46.159Z","1.0.0":"2018-11-19T23:43:57.862Z","1.0.1":"2018-11-19T23:58:59.354Z","1.0.2":"2018-11-20T01:34:59.148Z","1.0.3":"2018-11-20T01:53:38.344Z","1.0.4":"2018-11-20T02:25:23.714Z","1.0.5":"2019-02-09T17:58:13.247Z","1.0.6":"2019-02-10T00:26:40.691Z","1.0.7":"2019-02-10T00:34:14.115Z","1.0.8":"2019-02-11T02:30:47.528Z","1.0.9":"2019-02-12T23:23:13.112Z","1.0.10":"2019-06-22T02:38:56.914Z","1.0.11":"2023-05-03T07:10:53.899Z","2.0.0":"2026-06-22T05:40:00.183Z","2.1.0":"2026-06-25T02:58:45.899Z"},"bugs":{"url":"https://github.com/felippemauricio/promise-fn-retry/issues"},"author":{"name":"Felippe Maurício","email":"felippemauriciov@gmail.com","url":"https://github.com/felippemauricio"},"license":"MIT","homepage":"https://github.com/felippemauricio/promise-fn-retry#readme","keywords":["fetch","integration","node","browser","request","retry","promise","backoff","jitter","abortsignal","typescript"],"repository":{"type":"git","url":"git+https://github.com/felippemauricio/promise-fn-retry.git"},"description":"A tiny, typed, isomorphic retry with exponential backoff, jitter and AbortSignal for failed promises","maintainers":[{"name":"felippemauricio","email":"felippemauriciov@gmail.com"}],"readme":"# promise-fn-retry\n\n> Retry a flaky promise the right way — exponential backoff, jitter, a delay cap and cancellation. Tiny, typed, and runs anywhere.\n\n[![npm version](https://img.shields.io/npm/v/promise-fn-retry.svg)](https://www.npmjs.com/package/promise-fn-retry)\n[![CI](https://github.com/felippemauricio/promise-fn-retry/actions/workflows/ci.yml/badge.svg)](https://github.com/felippemauricio/promise-fn-retry/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/felippemauricio/promise-fn-retry/branch/main/graph/badge.svg)](https://codecov.io/gh/felippemauricio/promise-fn-retry)\n[![types: included](https://img.shields.io/badge/types-included-3178c6.svg)](https://github.com/felippemauricio/promise-fn-retry/blob/main/src/index.ts)\n[![zero dependencies](https://img.shields.io/badge/dependencies-0-brightgreen.svg)](https://github.com/felippemauricio/promise-fn-retry/blob/main/package.json)\n[![docs](https://img.shields.io/badge/docs-live-35e0c8.svg)](https://felippemauricio.github.io/promise-fn-retry/)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/felippemauricio/promise-fn-retry/blob/main/LICENSE.md)\n\n`promise-fn-retry` wraps a function that returns a promise and retries it when it\nrejects. You control how many times, how long to wait between attempts, and\nwhether a given error is even worth retrying. The waiting is the interesting part:\nthe delay grows exponentially, can be capped, and can be randomised to stop many\nclients from retrying in lockstep.\n\n```ts\nimport retry from 'promise-fn-retry';\n\n// Retry up to 5 times, doubling the wait each time, with jitter.\nconst user = await retry(() => fetch('/api/user').then((r) => r.json()), {\n  times: 5,\n  backoffFactor: 2,\n  jitter: true,\n});\n```\n\n> ### ▶ [Try the live playground →](https://felippemauricio.github.io/promise-fn-retry/)\n>\n> Tune `times`, `backoffFactor`, `maxDelayTime`, equal/full `jitter`, `forever`,\n> an `AbortSignal` and a `BailError` give-up, then watch every attempt land on a\n> **backoff timeline — to scale, in real time**. The clearest way to feel how the\n> options shape the waiting.\n\n## Why\n\n- **Just a function.** One call, `retry(fn, options)`. No classes, no builders.\n- **Smart waiting.** Exponential backoff with a configurable factor, an optional\n  delay cap, equal or full jitter, a `forever` mode, and a `getDelay` hook to honour\n  server hints like `Retry-After`.\n- **Bounded.** Time out a single hung attempt (`attemptTimeout`) and cap the total\n  time spent retrying (`maxElapsedTime`) — not just the attempt count.\n- **Cancellable.** Pass an `AbortSignal` to stop pending retries.\n- **Selective.** Decide per error whether to retry (`shouldRetry`), or throw a\n  `BailError` from `fn` to give up immediately on the result.\n- **Polls, too.** Retry on the resolved value with `until` to wait for a condition.\n- **Observable.** Hook every retry for logging or metrics (`onRetry`).\n- **Runs anywhere.** Browser and Node (≥ 12), shipped as both ESM and CommonJS.\n- **Typed, zero-dependency.** Type declarations are bundled — no `@types/...` needed.\n\n## Installation\n\n```bash\nnpm install promise-fn-retry\n```\n\n## Quick start\n\nWrap any function that returns a promise. With no options, it retries once after\n`100ms`:\n\n```ts\nimport retry from 'promise-fn-retry';\n\nconst data = await retry(() => fetch('https://api.example.com/data'));\n```\n\nPass options to shape the retry behaviour:\n\n```ts\nconst data = await retry(() => fetch('https://api.example.com/data'), {\n  times: 3,\n  initialDelayTime: 200,\n});\n```\n\n### CommonJS\n\n`require` returns the function directly, exactly like v1:\n\n```js\nconst retry = require('promise-fn-retry');\n\nretry(() => fetch('https://api.example.com/data'), { times: 3 });\n```\n\n## API\n\n```ts\nretry<T>(fn: (attempt: number) => Promise<T>, options?: Options): Promise<T>;\n```\n\nCalls `fn` with the current **1-indexed attempt number** (`1` on the first try,\n`2` on the first retry, and so on). If the returned promise resolves, `retry`\nresolves with that value. If it rejects, `retry` waits and calls `fn` again, up\nto `times` retries. When the retries are exhausted (or `shouldRetry` returns\n`false`, or the `signal` aborts, or `fn` throws a [`BailError`](#bail-out-early)),\nthe promise rejects with the last error.\n\nOnly `fn` is required. Every option has a default that reproduces v1 behaviour.\n\n### Options\n\n| Option             | Type                                                 | Default     | Description                                                                                                       |\n| ------------------ | ---------------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------- |\n| `times`            | `number`                                             | `1`         | Number of retries after the first failure.                                                                        |\n| `initialDelayTime` | `number`                                             | `100`       | Delay in milliseconds before the first retry.                                                                     |\n| `backoffFactor`    | `number`                                             | `2`         | Multiplier applied to the delay on each retry. `1` = constant, `2` = doubles, `3` = steeper.                      |\n| `maxDelayTime`     | `number`                                             | `Infinity`  | Upper bound on the delay between attempts, in milliseconds.                                                       |\n| `jitter`           | `boolean \\| 'equal' \\| 'full'`                       | `false`     | Randomise each delay. `'equal'` (or `true`) spreads it across `[delay / 2, delay]`; `'full'` across `[0, delay]`. |\n| `forever`          | `boolean`                                            | `false`     | Retry indefinitely until success or abort, ignoring `times`.                                                      |\n| `attemptTimeout`   | `number`                                             | `Infinity`  | Abort and retry a single attempt that runs longer than this, in ms (see below).                                   |\n| `maxElapsedTime`   | `number`                                             | `Infinity`  | Stop retrying once this much wall-clock time has elapsed in total, in ms.                                         |\n| `getDelay`         | `(error, ctx) => number \\| null`                     | `null`      | Derive the next wait from the error (e.g. a `Retry-After` header); return ms to override, or `null` to keep it.   |\n| `until`            | `(result) => boolean`                                | `null`      | Retry while the resolved value fails this predicate — turns `retry` into a poll-until.                            |\n| `signal`           | `AbortSignal`                                        | `undefined` | Cancel pending retries. Works in the browser and in Node.                                                         |\n| `onRetry`          | `(error: unknown, options: ResolvedOptions) => void` | `null`      | Called on each retry. Useful for logging and metrics.                                                             |\n| `shouldRetry`      | `(error: unknown) => boolean`                        | `null`      | Called before each retry. Return `false` to stop retrying immediately.                                            |\n\n#### Alternative option names\n\nA few alternative option names are accepted as aliases and mapped onto the\ncanonical options above. If you pass both a canonical option and its alias, the\ncanonical one wins.\n\n| Alias        | Maps to            |\n| ------------ | ------------------ |\n| `retries`    | `times`            |\n| `factor`     | `backoffFactor`    |\n| `minTimeout` | `initialDelayTime` |\n| `maxTimeout` | `maxDelayTime`     |\n| `randomize`  | `jitter: 'full'`   |\n\n### Returns\n\n`Promise<T>` — resolves with whatever `fn` resolves to, or rejects with the last\nerror thrown by `fn` (or with the abort reason if a `signal` aborts).\n\n### Exported types\n\n```ts\nimport retry, {\n  retry, // named export, same function as the default\n  BailError, // value export — throw it from fn to give up (see below)\n  type Options,\n  type ResolvedOptions,\n  type OnRetry,\n  AttemptTimeoutError, // value export — the error a timed-out attempt rejects with\n  type ShouldRetry,\n  type Jitter,\n  type OperationFn,\n  type GetDelay,\n  type Until,\n} from 'promise-fn-retry';\n```\n\n## How the delay is calculated\n\nEach retry multiplies the previous delay by `backoffFactor`, starting from\n`initialDelayTime`. The result is then clamped to `maxDelayTime`, and finally —\nif `jitter` is on — randomised.\n\nWith the defaults (`initialDelayTime: 100`, `backoffFactor: 2`):\n\n| Retry | Delay  |\n| ----- | ------ |\n| 1st   | 100 ms |\n| 2nd   | 200 ms |\n| 3rd   | 400 ms |\n| 4th   | 800 ms |\n\n- **`maxDelayTime`** caps the growth, e.g. `maxDelayTime: 500` turns the sequence\n  above into `100 → 200 → 400 → 500 → 500 …`.\n- **`jitter`** spreads each delay randomly. `'equal'` (or `true`) keeps it within\n  `[delay / 2, delay]`, so the `400 ms` step lands between `200 ms` and `400 ms`;\n  `'full'` widens that to `[0, delay]` — anywhere up to `400 ms`.\n\nYou can feel this directly in the [playground](https://felippemauricio.github.io/promise-fn-retry/),\nwhich plots every attempt on a timeline to scale.\n\n## Recipes\n\n### Retry only on the errors worth retrying\n\nRetry transient failures (network errors, `5xx`) but give up immediately on a\n`4xx` you can't recover from:\n\n```ts\nconst data = await retry(\n  async () => {\n    const res = await fetch('/api/things');\n    if (!res.ok) throw Object.assign(new Error('Request failed'), { status: res.status });\n    return res.json();\n  },\n  {\n    times: 4,\n    shouldRetry: (error) => {\n      const status = (error as { status?: number }).status;\n      return status === undefined || status >= 500;\n    },\n  },\n);\n```\n\n### Bail out early\n\n`shouldRetry` only sees the error. When the decision depends on the _result_ —\nsay an HTTP `404` body you can read but should never retry — throw a `BailError`\nfrom inside `fn`. It stops immediately and rejects with the wrapped cause,\nskipping the wait, `shouldRetry` and any remaining attempts (even with `forever`):\n\n```ts\nimport retry, { BailError } from 'promise-fn-retry';\n\nconst data = await retry(\n  async (attempt) => {\n    const res = await fetch('/api/things');\n    if (res.status === 404) throw new BailError(new Error('Not found')); // give up now\n    if (!res.ok) throw new Error('Transient failure'); // retried\n    return res.json();\n  },\n  { times: 5 },\n);\n```\n\n### Retry forever until it works (or you abort)\n\n```ts\nconst controller = new AbortController();\n\nconst data = await retry(connectToBroker, {\n  forever: true,\n  initialDelayTime: 500,\n  maxDelayTime: 10_000,\n  signal: controller.signal, // the only way out besides success\n});\n```\n\n### Cancel with an AbortSignal\n\n```ts\nconst controller = new AbortController();\n\nconst promise = retry(loadDashboard, { times: 5, signal: controller.signal });\n\n// Later — e.g. the user navigates away:\ncontroller.abort();\n```\n\nIf the signal is already aborted, `fn` is never called. If it aborts during a\nwait, the pending timer is cleared and the promise rejects.\n\n### Tune the backoff for many clients\n\nA delay cap plus jitter keeps a fleet of clients from hammering a recovering\nservice all at once:\n\n```ts\nawait retry(callApi, {\n  times: 6,\n  initialDelayTime: 200,\n  backoffFactor: 2,\n  maxDelayTime: 5_000,\n  jitter: true,\n});\n```\n\n### Observe every retry\n\n```ts\nawait retry(callApi, {\n  times: 3,\n  onRetry: (error) => {\n    logger.warn('Retrying after failure', { error });\n    metrics.increment('api.retry');\n  },\n});\n```\n\n### Act on the attempt number\n\n`fn` receives the 1-indexed attempt number, handy for logging or for changing\nbehaviour as attempts climb:\n\n```ts\nawait retry(\n  (attempt) => {\n    console.log(`Attempt ${attempt}`);\n    return fetch(`/api/things?attempt=${attempt}`);\n  },\n  { times: 3 },\n);\n```\n\n### Bound a single attempt with `attemptTimeout`\n\nA request that hangs forever never rejects, so retries never even start. Give each\nattempt a deadline: if it runs over, the attempt is aborted and retried. Where\n`AbortController` is available, `fn` receives a per-attempt `AbortSignal` that\naborts on timeout (or when your outer `signal` aborts) — wire it into `fetch`:\n\n```ts\nconst data = await retry(\n  (attempt, signal) => fetch('/api/slow', { signal }).then((r) => r.json()),\n  {\n    times: 3,\n    attemptTimeout: 2_000, // give up on an attempt after 2s and try again\n  },\n);\n```\n\n### Cap the total time spent retrying\n\nBound the whole operation by wall-clock time, not just attempt count — useful for\na request budget or an SLA. The final wait is trimmed so it never overshoots:\n\n```ts\nawait retry(callApi, {\n  forever: true,\n  initialDelayTime: 200,\n  maxElapsedTime: 30_000, // keep trying for at most 30s, then reject\n});\n```\n\n### Honour a server's `Retry-After`\n\nWhen the failure carries a hint about how long to wait, use it instead of the\ncomputed backoff:\n\n```ts\nawait retry(callApi, {\n  times: 5,\n  getDelay: (error, { computedDelay }) => {\n    const retryAfter = (error as { retryAfterMs?: number }).retryAfterMs;\n    return retryAfter ?? computedDelay; // fall back to the backoff curve\n  },\n});\n```\n\n### Poll until a condition holds\n\nSome calls succeed but aren't _done_ — a job that reports `status: 'pending'`.\nRetry on the resolved value, not just on errors:\n\n```ts\nconst job = await retry(() => fetch(`/jobs/${id}`).then((r) => r.json()), {\n  forever: true,\n  initialDelayTime: 1_000,\n  maxElapsedTime: 60_000, // stop polling after a minute\n  until: (result) => (result as { status: string }).status === 'done',\n});\n```\n\n## Compatibility\n\n- **Runtimes:** modern browsers and Node `>= 12`.\n- **Modules:** ships ESM (`import`) and CommonJS (`require`); `require('promise-fn-retry')`\n  returns the function directly.\n- **Types:** bundled — TypeScript users need nothing extra.\n- **Dependencies:** none.\n\n## Migrating from v1\n\nThe call signature and default behaviour are unchanged, so existing code keeps\nworking without edits. When upgrading:\n\n- **Remove `@types/promise-fn-retry`** — types are now bundled with the package.\n- You can now `import` it as ESM as well as `require` it.\n- New optional options are available: `backoffFactor`, `maxDelayTime`, `jitter`,\n  `forever`, `attemptTimeout`, `maxElapsedTime`, `getDelay`, `until` and `signal`,\n  plus a `BailError` to give up early and an `attempt` number passed to `fn`. You\n  only adopt them if you want them.\n\n## Documentation\n\nFull guides, the API reference and an **interactive playground** — with a live\nbackoff-timeline visualisation embedded on every feature page — live on the docs\nsite:\n\n**<https://felippemauricio.github.io/promise-fn-retry/>**\n\nRun the docs locally with `npm run docs:dev`.\n\n## Development\n\n```bash\nnpm install\nnpm test          # run the tests (Vitest)\nnpm run lint      # ESLint\nnpm run typecheck # tsc --noEmit\nnpm run build     # tsup → dist/ (ESM + CJS + .d.ts)\n```\n\n## Working with Claude Code\n\nThis repository is set up to be edited with [Claude Code](https://claude.com/claude-code)\n(or any coding agent). A [`CLAUDE.md`](https://github.com/felippemauricio/promise-fn-retry/blob/main/CLAUDE.md)\nat the root tells the agent what the library does, where the code lives\n(`src/types.ts`, `src/retry.ts`, `src/index.ts`), the commands to run, and the\nconventions to follow.\n\nTo make a change:\n\n```bash\ngit clone https://github.com/felippemauricio/promise-fn-retry.git\ncd promise-fn-retry\nnpm install\nclaude   # start Claude Code in the repo, then describe what you want\n```\n\nSome prompts that work well here:\n\n- _\"Add a `maxRetries`-reached callback that fires when the retries are exhausted.\"_\n- _\"Change the jitter strategy to full jitter and update the tests and README.\"_\n- _\"Add a `timeout` option that rejects an individual attempt after N ms.\"_\n\nThe agent has everything it needs to keep the bar high: `npm test` (100%\ncoverage is enforced), `npm run lint`, `npm run typecheck` and `npm run build`.\nConventions it should follow are in `CLAUDE.md` — strict TypeScript, additive\noptions that preserve the defaults, Conventional Commits, and documentation in\nAustralian English. Run the full check before opening a PR:\n\n```bash\nnpm run lint && npm run format:check && npm run typecheck && npm run test:coverage && npm run build\n```\n\n## Contributing\n\nIssues and pull requests are welcome — please open an issue to discuss\nsignificant changes first. Documentation is written in Australian English (en-AU).\n\n## License\n\nMIT © 2018-present Felippe Maurício. See [LICENSE.md](https://github.com/felippemauricio/promise-fn-retry/blob/main/LICENSE.md).\n\nBuilt and maintained by Felippe Maurício — [LinkedIn](https://www.linkedin.com/in/felippemauricio/) · [GitHub](https://github.com/felippemauricio).\n","readmeFilename":"README.md"}