{"versions":{"3.0.0-beta.0":{"name":"cockatiel","version":"3.0.0-beta.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.22","@types/chai-as-promised":"^7.1.4","@types/chai-subset":"^1.3.3","@types/mocha":"^9.0.0","@types/node":"^16.11.7","@types/sinon":"^10.0.6","@types/sinon-chai":"^3.2.5","chai":"^4.3.4","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^9.1.3","nyc":"^15.1.0","prettier":"^2.4.1","remark-cli":"^10.0.0","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^12.0.1","sinon-chai":"^3.7.0","source-map-support":"^0.5.20","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^4.4.4"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"gitHead":"dba20f0bfa2d28719bb7cb53ca2ad94999ab2518","_id":"cockatiel@3.0.0-beta.0","_nodeVersion":"16.6.1","_npmVersion":"7.20.3","dist":{"integrity":"sha512-4H6SA90M3HXWqShMhgx2YvoYoB3x32oZwynxFfBEmiK+5DLjh7fC/1C9Uat5YLcmQ/h9mgncAvi+8eYXbCOTxA==","shasum":"f1616d999e6414e82cb49ac0664d4c1249a42b8a","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.0.0-beta.0.tgz","fileCount":279,"unpackedSize":507771,"size":72586,"noattachment":false},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.0.0-beta.0_1636930528423_0.39678419022929257"},"_hasShrinkwrap":false,"publish_time":1636930528630,"_cnpm_publish_time":1636930528630,"_cnpmcore_publish_time":"2021-12-17T03:07:25.730Z","contributors":[]},"2.0.2":{"name":"cockatiel","version":"2.0.2","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^2.0.0","remark-cli":"^7.0.1","remark-toc":"^7.0.0","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"gitHead":"90e865b2dbd4e086b348e1e7a79650c1c427ed84","_id":"cockatiel@2.0.2","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"shasum":"b8bc06df324dd1c769833c4d91478eb1d5519b4f","size":77346,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-2.0.2.tgz","integrity":"sha512-ehw7t3twohGiMTxARX0AcFiUxndXLhnIBWbnRnHtfde2jRywlPpPB/o3s9YSptXPj6tkOG0fzET4CUUx4GIpEg=="},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_2.0.2_1623371565771_0.05696013285161583"},"_hasShrinkwrap":false,"publish_time":1623371565892,"_cnpm_publish_time":1623371565892,"_cnpmcore_publish_time":"2021-12-17T03:07:26.444Z","contributors":[]},"2.0.1":{"name":"cockatiel","version":"2.0.1","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^2.0.0","remark-cli":"^7.0.1","remark-toc":"^7.0.0","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"gitHead":"7aceec5fb89eefe4a1a083fba9c22715bd1dc6a1","_id":"cockatiel@2.0.1","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"shasum":"2b59587d54d53d33ed49b601cfaab97cad9cc6e7","size":76780,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-2.0.1.tgz","integrity":"sha512-fAw5ToPGZSnoYl5NpW2zKnY/d4gAUeP4GuGnxm7W23ayTtZipwPrIv7h3z8pq0NMDISuCEkKGsXCk3bKkzb13A=="},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_2.0.1_1607705277467_0.18405251316945836"},"_hasShrinkwrap":false,"publish_time":1607705277722,"_cnpm_publish_time":1607705277722,"_cnpmcore_publish_time":"2021-12-17T03:07:27.145Z","contributors":[]},"2.0.0":{"name":"cockatiel","version":"2.0.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^2.0.0","remark-cli":"^7.0.1","remark-toc":"^7.0.0","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"gitHead":"371251b137aa3c4bf68489e7163b5d0e67025149","_id":"cockatiel@2.0.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"shasum":"8eb1479ad0c76e6f15ff0e12d6f60192a1c8aa7a","size":76699,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-2.0.0.tgz","integrity":"sha512-zEobgx9f8RGBpPAuR8/z0nXJCuz7lrk3KcbUNEo0QxE/5/EM3fvk9LoL+Egm2CmMwFONlQyOKYbXMDwY+sXKXw=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_2.0.0_1601003877472_0.8186859913759392"},"_hasShrinkwrap":false,"publish_time":1601003877616,"_cnpm_publish_time":1601003877616,"_cnpmcore_publish_time":"2021-12-17T03:07:27.518Z","contributors":[]},"1.1.1":{"name":"cockatiel","version":"1.1.1","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^2.0.0","remark-cli":"^7.0.1","remark-toc":"^7.0.0","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"gitHead":"417e8c85dff351187c3657c6928a82e701a391b7","_id":"cockatiel@1.1.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"shasum":"851fcee67df9a824c7946cb0927c9351b552d26b","size":75910,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-1.1.1.tgz","integrity":"sha512-YO02ZhTcK2HOZodksWfg4tS1GYYt1j7R6U1unAkwcQf1uoIYKSBqPrfqXlLNbsyMvkDXMwa2nuwZDHbUkB1VbQ=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_1.1.1_1595035810120_0.4043394036086676"},"_hasShrinkwrap":false,"publish_time":1595035810268,"_cnpm_publish_time":1595035810268,"_cnpmcore_publish_time":"2021-12-17T03:07:27.884Z","contributors":[]},"1.1.0":{"name":"cockatiel","version":"1.1.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^2.0.0","remark-cli":"^7.0.1","remark-toc":"^7.0.0","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"gitHead":"0cd9c3e5e278bb01bb91d412a4a39541b3ade555","_id":"cockatiel@1.1.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"shasum":"3e40f922ea69f18fab935a49916b53e5212fb18d","size":74963,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-1.1.0.tgz","integrity":"sha512-NmlrOkW+DYYPy7bkDpbPx0c4Rd/XSk8eigWo3Hex9kkfRgSMSoWyHu6yKFMQEIAivk+nMgefnLJkSrIrwjtCTw=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_1.1.0_1594253557813_0.4641522486972103"},"_hasShrinkwrap":false,"publish_time":1594253557958,"_cnpm_publish_time":1594253557958,"_cnpmcore_publish_time":"2021-12-17T03:07:28.291Z","contributors":[]},"1.0.1":{"name":"cockatiel","version":"1.0.1","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^1.19.1","remark-cli":"^7.0.1","remark-toc":"^7.0.0","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"all"},"gitHead":"d946f4e0d6305b893d80c6407bbde99e6ebf71d8","_id":"cockatiel@1.0.1","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"shasum":"430f658b468b9e37ed1a1f2b72cf602402b6b66f","size":71134,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-1.0.1.tgz","integrity":"sha512-JIkOGyNDKWgNCwmwWg0zCHb85o44tNTTzQh0x1qKtmLjTFEfaB6nFQSjbcv+N5r20kEEB4JugU0INQMd4NIqKw=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_1.0.1_1592840714130_0.7879640715816547"},"_hasShrinkwrap":false,"publish_time":1592840714399,"_cnpm_publish_time":1592840714399,"_cnpmcore_publish_time":"2021-12-17T03:07:28.780Z","contributors":[]},"1.0.0":{"name":"cockatiel","version":"1.0.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^1.19.1","remark-cli":"^7.0.1","remark-toc":"^7.0.0","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"all"},"gitHead":"dabe9bf5c6fb550a4a2c9e9305e5dcb738a494d6","_id":"cockatiel@1.0.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"shasum":"3b95c5fd433b9c0b6596537a2f22e902bf4cd023","size":70669,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-1.0.0.tgz","integrity":"sha512-nPXIsxFrN5Jv/nnczFK6OzZynOu5Ex/VPjh6GelASNUkx58IxeZKN2R8GOkHEm0XAIi8+/vB/yiMAOeErDO/nA=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_1.0.0_1592627810394_0.45450174967896384"},"_hasShrinkwrap":false,"publish_time":1592627810592,"_cnpm_publish_time":1592627810592,"_cnpmcore_publish_time":"2021-12-17T03:07:29.194Z","contributors":[]},"0.1.5":{"name":"cockatiel","version":"0.1.5","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^1.19.1","remark-cli":"^7.0.1","remark-toc":"^7.0.0","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"all"},"gitHead":"882433f50c3463637e6c86e640f9b5ef92854d7d","_id":"cockatiel@0.1.5","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"shasum":"df5ecfbb0be959b1c0f0392e83c09c2c187b2a1e","size":65921,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-0.1.5.tgz","integrity":"sha512-M/uxU61/VZqXAkMvvF41TYlZjVj7rpPIJ3F9X7TdMPe4oxsfdKnWY1l85aMtj8BplDrY1bgHdSHq3vW1A9simA=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_0.1.5_1583114563743_0.8885642306318535"},"_hasShrinkwrap":false,"publish_time":1583114563838,"_cnpm_publish_time":1583114563838,"_cnpmcore_publish_time":"2021-12-17T03:07:29.646Z","contributors":[]},"0.1.4":{"name":"cockatiel","version":"0.1.4","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=10 <11 || >=12"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -u validate-links -f readme.md","fmt":"prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^1.19.1","remark-cli":"^7.0.1","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"all"},"gitHead":"3b18082aecbdc965e5a626a89a254911a8f38b5c","_id":"cockatiel@0.1.4","_nodeVersion":"12.11.1","_npmVersion":"6.11.3","_npmUser":{"name":"anonymous","email":"connor@peet.io"},"dist":{"shasum":"318360234a17bec4e13b512f62a0bcfb590ca4a4","size":63060,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-0.1.4.tgz","integrity":"sha512-Qc6RK1bnI+fy02LntFq/wK74Y8fSRuAUeHOS8HTqMVlWa7IEka1f2qTDthaZ8V5jahCl+XxlbpTyV4/rpnj8GA=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_0.1.4_1582567643771_0.6020412573284524"},"_hasShrinkwrap":false,"publish_time":1582567643904,"_cnpm_publish_time":1582567643904,"_cnpmcore_publish_time":"2021-12-17T03:07:30.079Z","contributors":[]},"0.1.3":{"name":"cockatiel","version":"0.1.3","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -u validate-links -f readme.md","fmt":"prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^1.19.1","remark-cli":"^7.0.1","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"all"},"gitHead":"ed755de89f7ec1b33454ec34f57bb3c943b1e35c","_id":"cockatiel@0.1.3","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"shasum":"9f464bc17c4f7ad3494e37ab579b2fa29ff9be61","size":64113,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-0.1.3.tgz","integrity":"sha512-+f3qHGCU/MrONP5q5UQtqHb7C2I4bvUMR3UGYCkoRpCWfJpVbdMm2oMGFzVp2a0Eog62FV8MxLW167pFjMJXMA=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_0.1.3_1580098041208_0.605239159453963"},"_hasShrinkwrap":false,"publish_time":1580098041365,"_cnpm_publish_time":1580098041365,"_cnpmcore_publish_time":"2021-12-17T03:07:30.757Z","contributors":[]},"0.1.2":{"name":"cockatiel","version":"0.1.2","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -u validate-links -f readme.md","fmt":"prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^1.19.1","remark-cli":"^7.0.1","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"all"},"gitHead":"45223a25b7450b10e75ad2ec36ce9c574ed839c1","_id":"cockatiel@0.1.2","_nodeVersion":"10.16.3","_npmVersion":"6.9.0","_npmUser":{"name":"anonymous","email":"connor@peet.io"},"dist":{"shasum":"aaa70abbea423cffc30b23573e020306b85c44f3","size":86560,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-0.1.2.tgz","integrity":"sha512-tSF2tNAxyv0w9tjMbKW85IXMAtdriXaXamT5z6CHZnwNI8f2lMLnPm7+JF8fiNS5Ela0fsUFLEuMrA2aoOBTig=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_0.1.2_1576168425964_0.19383482203201896"},"_hasShrinkwrap":false,"publish_time":1576168426147,"_cnpm_publish_time":1576168426147,"_cnpmcore_publish_time":"2021-12-17T03:07:31.122Z","contributors":[]},"0.1.1":{"name":"cockatiel","version":"0.1.1","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -u validate-links -f readme.md","fmt":"prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^1.19.1","remark-cli":"^7.0.1","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"all"},"gitHead":"157d8fa02d8deb2e2ab16488f017ce706a4db4ad","_id":"cockatiel@0.1.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.1","_npmUser":{"name":"anonymous","email":"connor@peet.io"},"dist":{"shasum":"e64589f784f357c81b4ddf7e751dde8ee48d89d1","size":85936,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-0.1.1.tgz","integrity":"sha512-Kaw2guZ3u5lZnARhAGNahLjijDuEUhW4iSZBbIfTyZbld0A3/lO1Yf7L8hkAxgVA7whBqMjPOJ2gy+vZU1nytg=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_0.1.1_1575253237640_0.7053494584140694"},"_hasShrinkwrap":false,"publish_time":1575253237774,"_cnpm_publish_time":1575253237774,"_cnpmcore_publish_time":"2021-12-17T03:07:31.411Z","contributors":[]},"0.1.0":{"name":"cockatiel","version":"0.1.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha --opts mocha.opts","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\"","test:md":"remark -u validate-links -f readme.md","fmt":"prettier --write \"src/**/*.ts\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.2.5","@types/chai-as-promised":"^7.1.2","@types/chai-subset":"^1.3.3","@types/mocha":"^5.2.7","@types/node":"^12.12.7","@types/sinon":"^7.5.0","@types/sinon-chai":"^3.2.3","chai":"^4.2.0","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^6.2.2","nyc":"^14.1.1","prettier":"^1.19.1","remark-cli":"^7.0.1","remark-validate-links":"^9.0.1","rimraf":"^3.0.0","sinon":"^7.5.0","sinon-chai":"^3.3.0","source-map-support":"^0.5.16","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^3.7.2"},"prettier":{"printWidth":100,"singleQuote":true,"trailingComma":"all"},"gitHead":"c1779fece3975a2ead1050da132ac59916b9b717","_id":"cockatiel@0.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.1","_npmUser":{"name":"anonymous","email":"connor@peet.io"},"dist":{"shasum":"a6be919056e91c5d9419a3c5d9129dd5a3162d78","size":85309,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-0.1.0.tgz","integrity":"sha512-7Q0TspespfxNtXqlItH7TnOUZ2jta9ZXTvACJfmsgqworvMz7ZiRaBKK+Hp72tbmrJVYzz+5LbwpYE2KDC4HBQ=="},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_0.1.0_1574440885240_0.4151906369832019"},"_hasShrinkwrap":false,"publish_time":1574440885382,"_cnpm_publish_time":1574440885382,"_cnpmcore_publish_time":"2021-12-17T03:07:31.845Z","contributors":[]},"3.0.0-beta.1":{"name":"cockatiel","version":"3.0.0-beta.1","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:lint && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:lint":"tslint -p tsconfig.json","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\" && npm run test:lint -- --fix","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^2.6.2","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","tslint":"^5.20.1","tslint-config-prettier":"^1.18.0","typescript":"^4.7.2"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"gitHead":"26c8d982a11dee5926dde96fb93f51f8e9ed1c77","_id":"cockatiel@3.0.0-beta.1","_nodeVersion":"16.9.1","_npmVersion":"7.21.1","dist":{"integrity":"sha512-/DLBpKe+kl0RtXoPx9E1OR1os4nXOXYzt3j1mQM/T8hEFSXPSpABzva52Mdb/s8NYFllwonRo/etKkQfqSxn3w==","shasum":"743a42897c159a348f5bb252dc4ea02c7535e18f","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.0.0-beta.1.tgz","fileCount":267,"unpackedSize":690598,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDw0R4wVcaamgs7gJhtWlHRWPhwCctRFDux/54FhpfE1QIgcDrNTL5NNhcd0nKfUpx4zusk8+O78fU8zD6Clldhfmo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJilgJ9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq0vw/+NzvJeyxsMLzNvp4qKIzMJgI1LymIuFTFTaf9x0OEIF9/uV/W\r\nFIQ5eBBkLzp4tN4SHox8xRQdeQBls9T4PhfiIBWiFflYnRTcm6By0MfSvtU2\r\nd7eRb4eLgvyRjdmrx3HXPSDwJwB63i1Vsb3SNj0MzKHLlOZntIARZPJ300ID\r\n7AXhS4UXgncBWPoSBONKUV69WN78wVFLu/4F0ENk7fZu+JXhyFRnTYI9nPV6\r\n4T4e9K42IOx+kOkcN5jdHgtDttdPzYydArKnq+lUHNNqNGSTfQRy0JOHFXZh\r\n6C0nnuXbxgV/nzUiFcx3OWUA8DPq9UVAEzCrhdcJB7mIk3ufLVuSSc7f86as\r\ns7LwTcLZv1VNhqAQ6+CxK9GKP7KqHcla1y5juTYooL2eArI6j5VD2B3Z4lr0\r\nAqdcDR1pj8RwIFVzf2xhdqEX4AxS6hWxa0ikxkC1iccyun7Xfyyq+grOvpED\r\nhbe/lstChzWjh2zoQKYpM3Bzbucihs8ddyMV7TvhoLH3BQZ0mEa3zthA4XHe\r\nL3qbiGCZOEIsO/MAJFOPy9kiSV8N7n+3cmoePQWDT2ibwFgPuVPCGcX/wTbE\r\ntY/pzdus2L33OzTFNsi3TwkERAedrqIIsSEvQkm6jmoTPCrxhTbP0U2WjD50\r\nicV8tlad0PnVT9VT/7NVy15NTTJXa0pxBdE=\r\n=LYJx\r\n-----END PGP SIGNATURE-----\r\n","size":98177},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.0.0-beta.1_1653998205393_0.7188437382375326"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-05-31T13:09:04.292Z","contributors":[]},"3.0.0":{"name":"cockatiel","version":"3.0.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\"","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^2.6.2","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","typescript":"^4.7.4"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"types":"./dist\\index.d.ts","gitHead":"ae2917f9bbed6dc95a759d4f1d902a2ef649ac4c","_id":"cockatiel@3.0.0","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-1uDbVAqFAtDyfhQXz6fJKCG8kjk5q0o0R0Wz/jtxUEvXVuTpaCEfNnqcXim7C5BI6i43VFdnIIPZNzFpzO5C1Q==","shasum":"cd7bd61b6f4940b77e9b7fe1a42a0704a8e7f5ce","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.0.0.tgz","fileCount":267,"unpackedSize":686667,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuRsT6JXyFzth8CD4/Gykz4HAwMTapFYB9hE5yJYq6QQIhALm27ROFKoSYtXpTaLCF+LZC8t917XIHc8TGEBOONtub"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+ACDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwUg/8CsEkmq/MNGWyf4LxrEKu1RBa/9Rp3PfZQ561aph0f/QnPYZj\r\nennoh9mQgOYC331JeUT0Vg5a7C1TT3xZkfMYrsaB6ZjJ6oAdTGs1cbuG5AU8\r\neAPHqQtZrnYkxyBe3RqrUrRxFI0iseiBGUfzicAV8W9Vu5WA5v43dx+5JXU+\r\nfyvv5SkZXwi8RC5xw6tCryCvz+KruWqfv6SnE/3uw8GcqpVsb6OOYXpG3hJx\r\ngYeCKJWCVRA8AGaOmxY3SCO8EnAlm1Da773+fxTdvsRrkWtp+GaJ7W9bQZ74\r\n2oKGsoh36ePYTU5AZEoIN6Lf49iu87dFi3WJmPN7FJScQs5EBHAhbA4b2c+a\r\nuFeXgRDzHZInOBCkjzmT2PnRTu4cxq7dCfnbSfFKAggw+J+3lZIVl0wN3IBV\r\nGFcgA34MVT6qmZf5oIFk4YJ5zZhQwvcOlx9UxV9bsTpvBqR5lSQUSoIk0r+J\r\nQqNyQfe/t5cq7fk8FdGRj8PvqbJ/i8S1qXqPB3PXks4sR319pcuVilT9oY01\r\nIflSPLo0ui/QaSBp/VI3xyQ3QhgJROhxaAtKRmxKhSwr6CVnqEzJ12SYKw+X\r\nvrkHc0bMVImSaYI41tV2BGFpM8IM0Euc3NoqbXKKUNAltiDFoUVvJOPl/0qv\r\neHLhZqUMvPbfI1/joUQXDRn2SvMbkWyxvnc=\r\n=Hq/t\r\n-----END PGP SIGNATURE-----\r\n","size":98075},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.0.0_1660420227204_0.8376313290316388"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-08-13T19:50:38.417Z","contributors":[]},"3.0.0-anyengine.0":{"name":"cockatiel","version":"3.0.0-anyengine.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\"","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^2.6.2","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","typescript":"^4.7.4"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"types":"./dist/index.d.ts","readmeFilename":"readme.md","gitHead":"cdf45ad57bbfa4d849ca6586e31cbac734f39345","_id":"cockatiel@3.0.0-anyengine.0","_nodeVersion":"16.9.1","_npmVersion":"8.18.0","dist":{"integrity":"sha512-ptAyLrqfIIu8sPsoIJFpIzHn8qTj9CajRIcbZ1HPRLluzIxlNZ6pOjmm0zao1wXsrPPRJ+FTAitHf4CzdlT9Dg==","shasum":"be0e0eccc5fa047af64a0e32020921095a2c9bbf","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.0.0-anyengine.0.tgz","fileCount":267,"unpackedSize":686640,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDL/Tf8kD1Z0oENT4p6rgPw2W09jZsHh0zULQNO+ALxlgIgIM/AANLGWXvbWmBEHBaOmvR3pW3rSnaNpRUNgtKRJHU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjCPolACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqihQ/9HwClWu5QIUVB/Gsx6KKdGEg+YavsOEos1bnnxjP/EKJdgk1c\r\nbDpMzxD9pxnWudtGJq4a1MVMtBGqVGmj3JsYhRPUQ5+MGTCauU1v/QOPcB6s\r\nLzHph30ycd1yq/Unvs/VnxHoLJkz2f8Hg7V3QjhpQ+yhBZXo4lPJh/vvkJWN\r\nE9zC+M56D5p+LeoJ/3OjOBQ0H6sgYm/sxUNB1eqOTOh3rhOoJ3xqC8wFUASo\r\n9ZvI9/fmOaTZ4rROpdEVgTh/apH/BKyJtX+vIf5LhuPA2u3USNMfE89Cy6+J\r\nibqEjyvdHS1JT04UylfJVzcU/V2wqXFq/f3ToxPpTqQWs7mb9bmB0o69SjOA\r\nhA00VaYygkn8RHxhz47hbtLxZT8nI0CTokkievYFZf3HIWxqIk3bFmK5VqKD\r\n59rCFYZWHojMTeGbIosNP92qYUSH2YUH1aokZL7W/ThKi/uNmgDLwQUoudZ0\r\nVMfSgY0aLHDzfK0NzD8RaohqiVhqaa7a92cl+cU1edWJuk2BMo/XUeiFTExB\r\nUwY0TEsrtT9OnGTdMW9Xsp75FzzAbVNE8+gOLQFYH26n3wh+1jCdY+mbzfqH\r\ndCOBG9RcEdxdkl5F4AFsSmJnVgDivWYUhKL6bsK7WSBE47gE436lgzpBbNyH\r\nHrU/IB1lIkP8FECSBnxtmISHtYe71DFq630=\r\n=8NXE\r\n-----END PGP SIGNATURE-----\r\n","size":98070},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.0.0-anyengine.0_1661532709649_0.5361288826984496"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2022-08-26T16:51:55.896Z","contributors":[]},"3.1.0":{"name":"cockatiel","version":"3.1.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\"","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^2.6.2","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","typescript":"^4.7.4"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"types":"./dist\\index.d.ts","gitHead":"e4a8111dda017f95573710cdc1834d29dac638cc","_id":"cockatiel@3.1.0","_nodeVersion":"16.14.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-CzQ3wzdpQ+JTMnYEbRikVHHaNaCqdrAze3/984k/iUcFtGoHzLfUL9a3iYfDad6lheA3QwMRCbcAdtMqS9wQ8w==","shasum":"391f05afbe478635e41165db606a53fb4d7d082d","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.1.0.tgz","fileCount":267,"unpackedSize":692509,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnjyZ9+1Ngua6OhvsNsIzjgxVYNkXefmyJgWr4Pq0n0AiEAtlB0pydUibKHW/ybOkPMkUXrhuBLFO7J35pd00ji/DU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkC2QKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqocA/+O/JUD7St+UBOdXD6SusV/4a3X8pSPJA4FgixmFg7KYZ6FDGK\r\nAq1/j7u1MZr6tWBQSPh5g7AcR5ONGcHaoRKtrSwMi22PiXGV5A+B1AKKGttd\r\nUTFNUpDHXnQkcUyiLLTNKx5iIMkqOM5fXXRK/i7yksf7yxNUPOcU7opgu41J\r\nT55PMbcGvHICztTDuWFlm+XeNSaMv2BhQIQUD3T87o/PNbiNAPQ1WA02e7l1\r\nFwpQz+aNddzoFaeh1W+CF600p1SLXVxBLTkm6lIs6pKiLy2UyL9X6o066leT\r\n9oa3QLbO9CfD4elzAYd8/aF5H1k8yTZs44Mhf9W5MNQ2MWvZOKYI/eGwE19s\r\n/utNdLkvWTd3UycCwH8DCxiljJ0N66Xji//cAyJ/psiw2L6lW+jE7Rqjtn4T\r\n0Q5f+JmjscgYDVKFb+UO7Q+ouhiQsLN72i4BgRbYTCMUVc524yS8EwbgCYhu\r\nz8q3Sm/+e6cH0XutmuQsAYtQJaREL9wi1LCQkNwdIryq2BZOuFmgFKnHKxj8\r\nIHjnCymf8VWwlGTD1tAILa3hZ9zzKbInoC84LANXfLzIQIuUb4fTS2WQBm7K\r\n9LcLlhbZyu4hOVXFAV6E25tEVBnzxWwHVuneAIQx34eIudw1114yJePLFXys\r\n5RMFkKpgPh5Tlfo59328a8LCgHa88DRLJPQ=\r\n=jkQe\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.1.0_1678468106331_0.44920552591745055"},"_hasShrinkwrap":false,"contributors":[]},"3.1.1":{"name":"cockatiel","version":"3.1.1","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\"","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^2.6.2","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","typescript":"^4.7.4"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"types":"./dist/index.d.ts","gitHead":"9ba5ddb1d31f81041a87269b76c3cdbe3844852c","_id":"cockatiel@3.1.1","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-zHMqBGvkZLfMKkBMD+0U8X1nW8zYwMtymgJ8CTknWOmTDpvjEwygtFN4QR9A1iFQDwCbg8g8+B/zVBoxvj1feQ==","shasum":"82c95dcad673649c43c0a35c424c5d2ad59d4e6b","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.1.1.tgz","fileCount":267,"unpackedSize":693105,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB6Y7/I0rmYea+f+76EqyJQffB/Ip+skR+TOx3NqAjUWAiAFhqEmq6PZUqNVclhdpFhqrNSeJ/qapuFmhYOi6ikN6Q=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkEfG4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqwlA//b8nVQXyYLB0U04Vo+EPCYRk1Fl63ezLzGvEldCzGpl0NQrZT\r\n/50T9xrupbrQOLjExXrDhz8GeX4nDHAPGbWPENMx+pNK9ckS0F+SxWpw4YWP\r\n+gq6qzyRwVos0o8SKoxnmEV8n8mzmhwiIfcAJEB1H6PsQJ/N0CRDJheQ2ASa\r\nRaOCqsibEGCFgw2Ebbju4mwz/HSaVJHyc8q/WhWzlu3fu0Bp/Q0MYFcKtWbV\r\nQX0VLV7ZLBCDsF5oBvHuublv6sOynND7VTDsn47TM4v5EhTE9pH3aDDCpWRE\r\nHrdKyEUgbYhhr0Zkofi+ISKXwmTKdfK//eZfbWq84IDz4/oQk7WwzGJGS21q\r\nAk8FQ8g03q4z/zVVVRJrV+lM/qyOv6UE3O41LuJcSQZjNnNYz4OEKcbrCMfV\r\n+qoTcCXLcedZ6oRxKmJ359ys2PHukXzN1/9uhLDhJyhA4+xRt8nQaAey5apQ\r\nMeFWiwNzHB3DUBVtnWUYu5eu71YzHrj0fkw2pL60I3A6if07pDvlN9l0KO5w\r\nVJv3GIcv+V3zVFmV6YtFNehaf2OJUEa1kAsTLT0hyG6ui97v9ujxmvwYS1u7\r\nl9s9HANaQUMwvYux4sAR0fp4boMFAlxpEyQaU+Tx3Y5NfM6BKscgZ3eug+f0\r\nb1v66DT4ICzTWS6WZkJK6INYDg+IQagwQSA=\r\n=+CJ8\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.1.1_1678897592411_0.6981690143498755"},"_hasShrinkwrap":false,"contributors":[]},"3.1.2":{"name":"cockatiel","version":"3.1.2","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\"","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^2.6.2","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","typescript":"^4.7.4"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"types":"./dist/index.d.ts","gitHead":"03614ab8caa55b245cf78748e850da0f143e8746","_id":"cockatiel@3.1.2","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-5yARKww0dWyWg2/3xZeXgoxjHLwpVqFptj9Zy7qioJ6+/L0ARM184sgMUrQDjxw7ePJWlGhV998mKhzrxT0/Kg==","shasum":"4863d7a92c3c22d78ac8c6ae35137c77f81924eb","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.1.2.tgz","fileCount":165,"unpackedSize":408315,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIECEfrvngxWVYsigWI0nRM67CJMItvaHrq1Eg9e1u/UHAiEAgnftgIu3lMw955elm5TbWjSXfx1zY6MV8NQPhBOQr+c="}]},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.1.2_1702582250196_0.858407732910125"},"_hasShrinkwrap":false,"contributors":[]},"3.1.3":{"name":"cockatiel","version":"3.1.3","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\"","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^2.6.2","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","typescript":"^4.7.4"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"_id":"cockatiel@3.1.3","gitHead":"1885f251a4f1a82498f19fefc26c5f7fa9368e1b","types":"./dist/index.d.ts","_nodeVersion":"18.17.0","_npmVersion":"10.4.0","dist":{"integrity":"sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ==","shasum":"bb1774a498a17e739dd994d56610dc6538b02858","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.1.3.tgz","fileCount":165,"unpackedSize":408537,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7S3i100LtIxq5wcH6ktynSHVPhUG7v7PK4flR3cbPJwIhAJAVRI6tIngZpRkihwLmwPzM5mg4l5dgOzo7ehuMioAx"}]},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.1.3_1714799187268_0.5269986133426725"},"_hasShrinkwrap":false,"contributors":[]},"3.2.0":{"name":"cockatiel","version":"3.2.0","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\"","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^3.3.3","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","typescript":"^5.5.3"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"_id":"cockatiel@3.2.0","gitHead":"aa54e836082d44732bd03fcb067e6253d7629191","types":"./dist/index.d.ts","_nodeVersion":"20.12.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-cPUHhRPgBotJnCqo6viuLDkxNU+yqoVnnmVgUU4W5B5/PYFKYMBRxIcMGlMaLk7bWAHOwHx2yNud0t0Y9iTfGw==","shasum":"e824301221336bdc98e82b97cc6d75b72a819828","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.2.0.tgz","fileCount":177,"unpackedSize":458406,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6pQDh8KCNiBxI+vBsCpMpFmBMWtwGJPWAxi8MnXTG0AiB0O3EEkTGjZDhCX6E8tIK9SklXRJ7ZY/5dWEXd/C6tiQ=="}],"size":70790},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.2.0_1721625731436_0.11053356113124746"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-07-22T05:22:11.603Z","publish_time":1721625731603,"_source_registry_name":"default","contributors":[]},"3.2.1":{"name":"cockatiel","version":"3.2.1","description":"A resilience and transient-fault-handling library that allows developers to express policies such as Backoff, Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback in a fluent and thread-safe manner. Inspired by .NET Polly.","main":"dist/index.js","module":"dist/esm/index.js","engines":{"node":">=16"},"sideEffects":false,"scripts":{"prepublishOnly":"npm run compile","test":"rimraf dist && tsc && npm run test:unit && npm run test:fmt && npm run test:md","test:cover":"rimraf dist && tsc && nyc npm run test:unit","test:unit":"mocha","test:fmt":"prettier --list-different \"src/**/*.ts\" \"*.md\"","test:md":"remark -f readme.md -q","fmt":"remark readme.md -f -o readme.md && prettier --write \"src/**/*.ts\" \"*.md\"","compile":"rimraf dist && tsc && tsc -p tsconfig.esm.json","watch":"rimraf dist && tsc --watch"},"nyc":{"all":true,"instrument":true,"include":["dist/**/*.js","src/**/*.ts"],"extension":[".ts"],"reporter":["cobertura","text-summary","html"],"exclude":["**/*.test.{ts,js}"]},"repository":{"type":"git","url":"git+https://github.com/connor4312/cockatiel.git"},"keywords":["circuit-breaker","retry","backoff","jitter","resilience","timeout","fallback","fluent","polly"],"author":{"name":"Connor Peet","email":"connor@peet.io"},"license":"MIT","bugs":{"url":"https://github.com/connor4312/cockatiel/issues"},"homepage":"https://github.com/connor4312/cockatiel#readme","devDependencies":{"@types/chai":"^4.3.1","@types/chai-as-promised":"^7.1.5","@types/chai-subset":"^1.3.3","@types/mocha":"^9.1.1","@types/node":"^16.11.7","@types/sinon":"^10.0.11","@types/sinon-chai":"^3.2.8","chai":"^4.3.6","chai-as-promised":"^7.1.1","chai-subset":"^1.6.0","mocha":"^10.0.0","nyc":"^15.1.0","prettier":"^3.3.3","remark-cli":"^10.0.1","remark-toc":"^8.0.1","remark-validate-links":"^11.0.2","rimraf":"^3.0.2","sinon":"^14.0.0","sinon-chai":"^3.7.0","source-map-support":"^0.5.21","typescript":"^5.5.3"},"prettier":{"printWidth":100,"arrowParens":"avoid","singleQuote":true,"trailingComma":"all"},"_id":"cockatiel@3.2.1","gitHead":"32a70686ef3470f6c94c1325fbc7982d582b8432","types":"./dist/index.d.ts","_nodeVersion":"20.12.1","_npmVersion":"10.5.0","dist":{"integrity":"sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==","shasum":"575f937bc4040a20ae27352a6d07c9c5a741981f","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/cockatiel/-/cockatiel-3.2.1.tgz","fileCount":177,"unpackedSize":465428,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCfuogokLpqyjeBkv7b2rmc8nFcvHJhNRt4vasZLjEXNgIhAN7EwUBNfKzdaK6gRikSWZQzWIfmHBP2z4o235AT9sub"}],"size":71593},"_npmUser":{"name":"anonymous","email":"connor@peet.io"},"directories":{},"maintainers":[{"name":"anonymous","email":"connor@peet.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/cockatiel_3.2.1_1721664764645_0.7686630185874559"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-07-22T16:12:44.922Z","publish_time":1721664764922,"_source_registry_name":"default","contributors":[]}},"dist-tags":{"anyengine":"3.0.0-anyengine.0","latest":"3.2.1"},"name":"cockatiel","time":{"created":"2022-01-27T14:48:41.925Z","modified":"2024-07-22T16:34:16.238Z","3.0.0-beta.0":"2021-11-14T22:55:28.630Z","2.0.2":"2021-06-11T00:32:45.892Z","2.0.1":"2020-12-11T16:47:57.722Z","2.0.0":"2020-09-25T03:17:57.616Z","1.1.1":"2020-07-18T01:30:10.268Z","1.1.0":"2020-07-09T00:12:37.958Z","1.0.1":"2020-06-22T15:45:14.399Z","1.0.0":"2020-06-20T04:36:50.592Z","0.1.5":"2020-03-02T02:02:43.838Z","0.1.4":"2020-02-24T18:07:23.904Z","0.1.3":"2020-01-27T04:07:21.365Z","0.1.2":"2019-12-12T16:33:46.147Z","0.1.1":"2019-12-02T02:20:37.774Z","0.1.0":"2019-11-22T16:41:25.382Z","3.0.0-beta.1":"2022-05-31T11:56:45.554Z","3.0.0":"2022-08-13T19:50:27.478Z","3.0.0-anyengine.0":"2022-08-26T16:51:49.870Z","3.1.0":"2023-03-10T17:08:26.490Z","3.1.1":"2023-03-15T16:26:32.607Z","3.1.2":"2023-12-14T19:30:50.481Z","3.1.3":"2024-05-04T05:06:27.495Z","3.2.0":"2024-07-22T05:22:11.603Z","3.2.1":"2024-07-22T16:12:44.922Z"},"readme":"# Cockatiel\n\n[![Actions Status](https://github.com/connor4312/cockatiel/workflows/Run%20Tests/badge.svg)](https://github.com/connor4312/cockatiel/actions)\n[![npm bundle size](https://img.shields.io/bundlephobia/minzip/cockatiel)](https://bundlephobia.com/result?p=cockatiel@0.1.0)\n![No dependencies](https://img.shields.io/badge/dependencies-none-success)\n\nCockatiel is resilience and transient-fault-handling library that allows developers to express policies such as Retry, Circuit Breaker, Timeout, Bulkhead Isolation, and Fallback. .NET has [Polly](https://github.com/App-vNext/Polly), a wonderful one-stop shop for all your fault handling needs--I missed having such a library for my JavaScript projects, and grew tired of copy-pasting retry logic between my projects. Hence, this module!\n\n    npm install --save cockatiel\n\nThen go forth with confidence:\n\n```js\nimport {\n  ConsecutiveBreaker,\n  ExponentialBackoff,\n  retry,\n  handleAll,\n  circuitBreaker,\n  wrap,\n} from 'cockatiel';\nimport { database } from './my-db';\n\n// Create a retry policy that'll try whatever function we execute 3\n// times with a randomized exponential backoff.\nconst retryPolicy = retry(handleAll, { maxAttempts: 3, backoff: new ExponentialBackoff() });\n\n// Create a circuit breaker that'll stop calling the executed function for 10\n// seconds if it fails 5 times in a row. This can give time for e.g. a database\n// to recover without getting tons of traffic.\nconst circuitBreakerPolicy = circuitBreaker(handleAll, {\n  halfOpenAfter: 10 * 1000,\n  breaker: new ConsecutiveBreaker(5),\n});\n\n// Combine these! Create a policy that retries 3 times, calling through the circuit breaker\nconst retryWithBreaker = wrap(retryPolicy, circuitBreakerPolicy);\n\nexports.handleRequest = async (req, res) => {\n  // Call your database safely!\n  const data = await retryWithBreaker.execute(() => database.getInfo(req.params.id));\n  return res.json(data);\n};\n```\n\nI recommend reading the [Polly wiki](https://github.com/App-vNext/Polly/wiki) for more information for details and mechanics around the patterns we provide.\n\n## Table of Contents\n\n- [`IPolicy` (the shape of a policy)](#ipolicy-the-shape-of-a-policy)\n- [`Policy`](#policy)\n  - [`handleAll`](#handleall)\n  - [`handleType(ctor[, filter])` / `policy.orType(ctor[, filter])`](#handletypector-filter--policyortypector-filter)\n  - [`handleWhen(filter)` / `policy.orWhen(filter)`](#handlewhenfilter--policyorwhenfilter)\n  - [`handleResultType(ctor[, filter])` / `policy.orResultType(ctor[, filter])`](#handleresulttypector-filter--policyorresulttypector-filter)\n  - [`handleWhenResult(filter)` / `policy.orWhenResult(filter)`](#handlewhenresultfilter--policyorwhenresultfilter)\n  - [`wrap(...policies)`](#wrappolicies)\n  - [`@usePolicy(policy)`](#usepolicypolicy)\n  - [`noop`](#noop)\n- [Events](#events)\n  - [`Event.toPromise(event[, signal])`](#eventtopromiseevent-signal)\n  - [`Event.once(event, callback)`](#eventonceevent-callback)\n- [`retry(policy, options)`](#retrypolicy-options)\n  - [Backoffs](#backoffs)\n    - [`ConstantBackoff`](#constantbackoff)\n    - [`ExponentialBackoff`](#exponentialbackoff)\n    - [`IterableBackoff`](#iterablebackoff)\n    - [`DelegateBackoff`](#delegatebackoff)\n  - [`retry.execute(fn[, signal])`](#retryexecutefn-signal)\n  - [`retry.dangerouslyUnref()`](#retrydangerouslyunref)\n  - [`retry.onRetry(callback)`](#retryonretrycallback)\n  - [`retry.onSuccess(callback)`](#retryonsuccesscallback)\n  - [`retry.onFailure(callback)`](#retryonfailurecallback)\n  - [`retry.onGiveUp(callback)`](#retryongiveupcallback)\n- [`circuitBreaker(policy, { halfOpenAfter, breaker[, initialState] })`](#circuitbreakerpolicy--halfopenafter-breaker-initialstate-)\n  - [Breakers](#breakers)\n    - [`ConsecutiveBreaker`](#consecutivebreaker)\n    - [`CountBreaker`](#countbreaker)\n    - [`SamplingBreaker`](#samplingbreaker)\n  - [`breaker.execute(fn[, signal])`](#breakerexecutefn-signal)\n  - [`breaker.state`](#breakerstate)\n  - [`breaker.onBreak(callback)`](#breakeronbreakcallback)\n  - [`breaker.onReset(callback)`](#breakeronresetcallback)\n  - [`breaker.onHalfOpen(callback)`](#breakeronhalfopencallback)\n  - [`breaker.onStateChange(callback)`](#breakeronstatechangecallback)\n  - [`breaker.onSuccess(callback)`](#breakeronsuccesscallback)\n  - [`breaker.onFailure(callback)`](#breakeronfailurecallback)\n  - [`breaker.isolate()`](#breakerisolate)\n  - [`breaker.toJSON()`](#breakertojson)\n- [`timeout(duration, strategy)`](#timeoutduration-strategy)\n  - [`timeout.dangerouslyUnref()`](#timeoutdangerouslyunref)\n  - [`timeout.execute(fn[, signal])`](#timeoutexecutefn-signal)\n  - [`timeout.onTimeout(callback)`](#timeoutontimeoutcallback)\n  - [`timeout.onSuccess(callback)`](#timeoutonsuccesscallback)\n  - [`timeout.onFailure(callback)`](#timeoutonfailurecallback)\n- [`bulkhead(limit[, queue])`](#bulkheadlimit-queue)\n  - [`bulkhead.execute(fn[, signal])`](#bulkheadexecutefn-signal)\n  - [`bulkhead.onReject(callback)`](#bulkheadonrejectcallback)\n  - [`bulkhead.onSuccess(callback)`](#bulkheadonsuccesscallback)\n  - [`bulkhead.onFailure(callback)`](#bulkheadonfailurecallback)\n  - [`bulkhead.executionSlots`](#bulkheadexecutionslots)\n  - [`bulkhead.queueSlots`](#bulkheadqueueslots)\n- [`fallback(policy, valueOrFactory)`](#fallbackpolicy-valueorfactory)\n  - [`fallback.execute(fn[, signal])`](#fallbackexecutefn-signal)\n  - [`fallback.onSuccess(callback)`](#fallbackonsuccesscallback)\n  - [`fallback.onFailure(callback)`](#fallbackonfailurecallback)\n- [See Also](#see-also)\n\n## `IPolicy` (the shape of a policy)\n\nAll Cockatiel fault handling policies (fallbacks, circuit breakers, bulkheads, timeouts, retries) adhere to the same interface. In TypeScript, this is given as:\n\n```ts\nexport interface IPolicy<ContextType extends { signal: AbortSignal }> {\n  /**\n   * Fires on the policy when a request successfully completes and some\n   * successful value will be returned. In a retry policy, this is fired once\n   * even if the request took multiple retries to succeed.\n   */\n  readonly onSuccess: Event<ISuccessEvent>;\n\n  /**\n   * Fires on the policy when a request fails *due to a handled reason* fails\n   * and will give rejection to the called.\n   */\n  readonly onFailure: Event<IFailureEvent>;\n\n  /**\n   * Runs the function through behavior specified by the policy.\n   */\n  execute<T>(fn: (context: ContextType) => PromiseLike<T> | T, signal?: AbortSignal): Promise<T>;\n}\n```\n\nIf you don't read TypeScript often, here's what it means:\n\n- There are two [events](#events), `onSuccess`/`onFailure`, that are called when a call succeeds or fails. Note that `onFailure` _only_ is called if a handled error is thrown.\n\n  As a design decision, Cockatiel won't assume all thrown errors are actually failures unless you tell us. For example, in your application you might have errors thrown if the user submits invalid input, and triggering fault handling behavior for this reason would not be desirable!\n\n- There's an `execute` function that you can use to \"wrap\" your own function. Anything you return from that function is returned, in a promise, from `execute`. You can optionally pass an abort signal to the `execute()` function, and the function will always be called with an object _at least_ containing an abort signal (some policies might add extra metadata for you).\n\n## `Policy`\n\nThe Policy defines how errors and results are handled. Everything in Cockatiel ultimately deals with handling errors or bad results. The Policy sets up how\n\n### `handleAll`\n\nA generic policy to handle _all_ errors.\n\n```ts\nimport { handleAll } from 'cockatiel';\n\nretry(handleAll /* ... */);\n```\n\n### `handleType(ctor[, filter])` / `policy.orType(ctor[, filter])`\n\nTells the policy to handle errors of the given type, passing in the contructor. If a `filter` function is also passed, we'll only handle errors if that also returns true.\n\n```ts\nimport { handleType } from 'cockatiel';\n\nhandleType(NetworkError).orType(HttpError, err => err.statusCode === 503);\n// ...\n```\n\n### `handleWhen(filter)` / `policy.orWhen(filter)`\n\nTells the policy to handle any error for which the filter returns truthy\n\n```ts\nimport { handleWhen } from 'cockatiel';\n\nhandleWhen(err => err instanceof NetworkError).orWhen(err => err.shouldRetry === true);\n// ...\n```\n\n### `handleResultType(ctor[, filter])` / `policy.orResultType(ctor[, filter])`\n\nTells the policy to treat certain return values of the function as errors--retrying if they appear, for instance. Results will be retried if they're an instance of the given class. If a `filter` function is also passed, we'll only treat return values as errors if that also returns true.\n\n```ts\nimport { handleResultType } from 'cockatiel';\n\nhandleResultType(ReturnedNetworkError).orResultType(HttpResult, res => res.statusCode === 503);\n// ...\n```\n\n### `handleWhenResult(filter)` / `policy.orWhenResult(filter)`\n\nTells the policy to treat certain return values of the function as errors--retrying if they appear, for instance. Results will be retried the filter function returns true.\n\n```ts\nimport { handleWhenResult } from 'cockatiel';\n\nhandleWhenResult(res => res.statusCode === 503).orWhenResult(res => res.statusCode === 429);\n// ...\n```\n\n### `wrap(...policies)`\n\nWraps the given set of policies into a single policy. For instance, this:\n\n```js\nconst result = await retry.execute(() =>\n  breaker.execute(() => timeout.execute(({ signal }) => getData(signal))),\n);\n```\n\nIs the equivalent to:\n\n```js\nimport { wrap } from 'cockatiel';\n\nconst result = await wrap(retry, breaker, timeout).execute(({ signal }) => getData(signal));\n```\n\nThe `context` argument passed to the executed function is the merged object of all previous policies. So for instance, in the above example you'll get the abort signal from the [TimeoutPolicy](#timeoutduration-strategy) as well as the attempt number from the [RetryPolicy](#retrypolicy-options):\n\n```ts\nimport { wrap } from 'cockatiel';\n\nwrap(retry, breaker, timeout).execute(context => {\n  console.log(context);\n  // => { attempts: 1, cancellation: }\n});\n```\n\nThe individual wrapped policies are accessible on the `policies` property of the policy returned from `wrap()`.\n\n### `@usePolicy(policy)`\n\nA decorator that can be used to wrap class methods and apply the given policy to them. It also adds the last argument normally given in `Policy.execute` as the last argument in the function call. For example:\n\n```ts\nimport { usePolicy, handleAll, retry } from 'cockatiel';\n\nconst retry = retry(handleAll, { attempts: 3 });\n\nclass Database {\n  @usePolicy(retry)\n  public getUserInfo(userId, context) {\n    console.log('Retry attempt number', context.attempt);\n    // implementation here\n  }\n}\n\nconst db = new Database();\ndb.getUserInfo(3).then(info => console.log('User 3 info:', info));\n```\n\nNote that it will force the return type to be a Promise, since that's what policies return.\n\n### `noop`\n\nA no-op policy, which may be useful for tests and stubs.\n\n```ts\nimport { noop, handleAll, retry } from 'cockatiel';\n\nconst policy = isProduction ? retry(handleAll, { attempts: 3 }) : noop;\n\nexport async function handleRequest() {\n  return policy.execute(() => getInfoFromDatabase());\n}\n```\n\n## Events\n\nCockatiel uses a simple bespoke style for events, similar to those that we use in VS Code. These events provide better type-safety (you can never subscribe to the wrong event name) and better functionality around triggering listeners.\n\nAn event can be subscribed to simply by passing a callback. Take [`onFailure`](#fallbackonfailurecallback) for instance:\n\n```js\nconst listener = policy.onFailure(error => {\n  console.log(error);\n});\n```\n\nThe event returns an `IDisposable` instance. To unsubscribe the listener, call `.dispose()` on the returned instance. It's always safe to call an IDisposable's `.dispose()` multiple times.\n\n```js\nlistener.dispose();\n```\n\nWe provide a couple extra utilities around events as well.\n\n### `Event.toPromise(event[, signal])`\n\nReturns a promise that resolves once the event fires. Optionally, you can pass in an [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to control when you stop listening, which will reject the promise with a `TaskCancelledError` if it's not already resolved.\n\n```js\nimport { Event } from 'cockatiel';\n\nasync function waitForFallback(policy) {\n  await Event.toPromise(policy.onFallback);\n  console.log('a fallback happened!');\n}\n```\n\n### `Event.once(event, callback)`\n\nWaits for the event to fire once, and then automatically unregisters the listener. This method itself returns an `IDisposable`, which you could use to unregister the listener if needed.\n\n```js\nimport { Event } from 'cockatiel';\n\nasync function waitForFallback(policy) {\n  Event.once(policy.onFallback, () => {\n    console.log('a fallback happened!');\n  });\n}\n```\n\n## `retry(policy, options)`\n\n`retry()` uses a [Policy](#Policy) to retry running something multiple times. Like other builders, you can use a retry builder between multiple calls.\n\nTo use `retry()`, first pass in the [Policy](#Policy) to use, and then the options. The options are an object containing:\n\n- `maxAttempts`: the number of attempts to make before giving up\n- `backoff`: a generator that tells Cockatiel how long to wait between attempts. A number of backoff implementations are provided out of the box:\n\n  - [ConstantBackoff](#constantbackoff)\n  - [IterableBackoff](#iterablebackoff)\n  - [ExponentialBackoff](#exponentialbackoff)\n  - [DelegateBackoff](#DelegateBackoff) (advanced)\n\nHere are some examples:\n\n```ts\nimport { retry, handleAll, handleType, ExponentialBackoff } from 'cockatiel';\n\nconst response1 = await retry(\n  handleAll, // handle all errors\n  { maxAttempts: 3 }, // retry three times, with no backoff\n).execute(() => getJson('https://example.com'));\n\nconst response2 = await retry(\n  handleType(NetworkError), // handle only network errors,\n  { maxAttempts: 3, backoff: new ExponentialBackoff() }, // backoff exponentially 3 times\n).execute(() => getJson('https://example.com'));\n```\n\n### Backoffs\n\nBackoff algorithms are immutable. The backoff class adheres to the interface:\n\n```ts\nexport interface IBackoffFactory<T> {\n  /**\n   * Returns the next backoff duration.\n   */\n  next(context: T): IBackoff<T>;\n}\n```\n\nThe backoff, returned from the `next()` call, has the appropriate delay and `next()` method again.\n\n```ts\nexport interface IBackoff<T> {\n  next(context: T): IBackoff<T>; // same as above\n\n  /**\n   * Returns the number of milliseconds to wait for this backoff attempt.\n   */\n  readonly duration: number;\n}\n```\n\n#### `ConstantBackoff`\n\nA backoff that backs off for a constant amount of time.\n\n```ts\nimport { ConstantBackoff } from 'cockatiel';\n\n// Waits 50ms between back offs, forever\nconst foreverBackoff = new ConstantBackoff(50);\n```\n\n#### `ExponentialBackoff`\n\n> Tip: exponential backoffs and [circuit breakers](#circuitbreakerpolicy--halfopenafter-breaker-initialstate-) are great friends!\n\nThe crowd favorite. By default, it uses a decorrelated jitter algorithm, which is a good default for most applications. Takes in an options object, which can have any of these properties:\n\n```ts\nexport interface IExponentialBackoffOptions<S> {\n  /**\n   * Delay generator function to use. This package provides several of these/\n   * Defaults to \"decorrelatedJitterGenerator\", a good default for most\n   * scenarios (see the linked Polly issue).\n   *\n   * @see https://github.com/App-vNext/Polly/issues/530\n   * @see https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/\n   */\n  generator: GeneratorFn<S>;\n\n  /**\n   * Maximum delay, in milliseconds. Defaults to 30s.\n   */\n  maxDelay: number;\n\n  /**\n   * Backoff exponent. Defaults to 2.\n   */\n  exponent: number;\n\n  /**\n   * The initial, first delay of the backoff, in milliseconds.\n   * Defaults to 128ms.\n   */\n  initialDelay: number;\n}\n```\n\nExample:\n\n```ts\nimport { ExponentialBackoff, noJitterGenerator } from 'cockatiel';\n\n// Use all the defaults. Decorrelated jitter, 30 seconds max delay, infinite attempts:\nconst defaultBackoff = new ExponentialBackoff();\n\n// Have some lower limits:\nconst limitedBackoff = new ExponentialBackoff({ maxDelay: 1000, initialDelay: 4 });\n\n// Use a backoff without jitter\nconst limitedBackoff = new ExponentialBackoff({ generator: noJitterGenerator });\n```\n\nSeveral jitter strategies are provided. This [AWS blog post](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/) has more information around the strategies and why you might want to use them. The available jitter generators exported from `cockatiel` are:\n\n- `decorrelatedJitterGenerator` -- The default implementation, the one that [Polly.Contrib.WaitAndRetry uses](https://github.com/Polly-Contrib/Polly.Contrib.WaitAndRetry/tree/79224cff9670b159418f955af4d0a9ebc2a09778#new-jitter-recommendation)\n- `noJitterGenerator` -- Does not add any jitter\n- `fullJitterGenerator` -- Jitters between `[0, interval)`\n- `halfJitterGenerator` -- Jitters between `[interval / 2, interval)`\n\n#### `IterableBackoff`\n\nTakes in a list of delays, and goes through them one by one. When it reaches the end of the list, the backoff will continue to use the last value.\n\n```ts\nimport { IterableBackoff } from 'cockatiel';\n\n// Wait 100ms, 200ms, and then 500ms between attempts:\nconst backoff = new IterableBackoff([100, 200, 500]);\n```\n\n#### `DelegateBackoff`\n\nDelegates determining the backoff to the given function. The function should return a number of milliseconds to wait.\n\n```ts\nimport { DelegateBackoff } from 'cockatiel';\n\n// Try with any random delay up to 500ms\nconst backoff = new DelegateBackoff(context => Math.random() * 500));\n```\n\nThe first parameter is the generic `context` in which the backoff is being used. For retries, the context is an interface like this:\n\n```ts\nexport interface IRetryBackoffContext<ReturnType> {\n  /**\n   * The retry attempt, starting at 1 for calls into backoffs.\n   */\n  attempt: number;\n\n  /**\n   * The result of the last method call. Either a thrown error, or a value\n   * that we determined should be retried upon.\n   */\n  result: { error: Error } | { value: ReturnType };\n}\n```\n\nYou can also take in a `state` as the second parameter, and return an object containing the `{ state: S, delay: number }`. Here's both of those in action that we use to create a backoff policy that will stop backing off if we get the same error twice in a row, otherwise do an exponential backoff:\n\n```ts\nimport { DelegateBackoff } from 'cockatiel';\n\nconst myDelegateBackoff = new DelegateBackoff((context, lastError) => {\n  if (context.result.error && context.result.error === lastError) {\n    throw context.result.error;\n  }\n\n  return { delay: 100 * Math.pow(2, context.count), state: context.result.error };\n});\n```\n\n### `retry.execute(fn[, signal])`\n\nExecutes the function. The current retry context, containing the attempts and abort token, `{ attempt: number, signal: AbortSignal }`, is passed as the function's first argument. The function should throw, return a promise, or return a value, which get handled as configured in the Policy.\n\nIf the function doesn't succeed before the backoff ceases or cancellation is requested, the last error thrown will be bubbled up, or the last result will be returned (if you used any of the `handleResult*` methods).\n\n```ts\nawait retry(handleAll, { maxAttempts: 3 }).execute(() => getJson('https://example.com'));\n```\n\n### `retry.dangerouslyUnref()`\n\nWhen retrying, a referenced timer is created. This means the Node.js event loop is kept active while we're delaying a retried call. Calling this method on the retry builder will unreference the timer, allowing the process to exit even if a retry might still be pending:\n\n```ts\nconst response1 = await retry(handleAll, { maxAttempts: 3 })\n  .dangerouslyUnref()\n  .execute(() => getJson('https://example.com'));\n```\n\n### `retry.onRetry(callback)`\n\nAn [event emitter](#events) that fires when we retry a call, before any backoff. It's invoked with an object that includes:\n\n- the `delay` we're going to wait before retrying,\n- the `attempt` number of the upcoming retry, starting at `1`, and;\n- either a thrown error like `{ error: someError, delay: number }`, or an errorful result in an object like `{ value: someValue, delay: number }` when using [result filtering](#handleresulttypector-filter--policyorresulttypector-filter).\n\nUseful for telemetry. Returns a disposable instance.\n\n```js\nconst listener = retry.onRetry(reason => console.log('retrying a function call:', reason));\n\n// ...\n\nlistener.dispose();\n```\n\n### `retry.onSuccess(callback)`\n\nAn [event emitter](#events) that fires whenever a function is successfully called. It's invoked with an object containing the duration in milliseconds to nanosecond precision.\n\n```js\nconst listener = retry.onSuccess(({ duration }) => {\n  console.log(`retry call ran in ${duration}ms`);\n});\n\n// ...\n\nlistener.dispose();\n```\n\n### `retry.onFailure(callback)`\n\nAn [event emitter](#events) that fires whenever a function throw an error or returns an errorful result. It's invoked with the duration of the call, the reason for the failure, and an boolean indicating whether the error is handled by the policy.\n\n```js\nconst listener = retry.onFailure(({ duration, handled, reason }) => {\n  console.log(`retry call ran in ${duration}ms and failed with`, reason);\n  console.log(handled ? 'error was handled' : 'error was not handled');\n});\n\n// later:\nlistener.dispose();\n```\n\n### `retry.onGiveUp(callback)`\n\nAn [event emitter](#events) that fires when we're no longer retrying a call and are giving up. It's invoked with either a thrown error in an object like `{ error: someError }`, or an errorful result in an object like `{ value: someValue }` when using [result filtering](#handleresulttypector-filter--policyorresulttypector-filter). Useful for telemetry. Returns a disposable instance.\n\n```js\nconst listener = retry.onGiveUp(reason => console.log('retrying a function call:', reason));\n\nlistener.dispose();\n```\n\n## `circuitBreaker(policy, { halfOpenAfter, breaker[, initialState] })`\n\nCircuit breakers stop execution for a period of time after a failure threshold has been reached. This is very useful to allow faulting systems to recover without overloading them. See the [Polly docs](https://github.com/App-vNext/Polly/wiki/Circuit-Breaker#how-the-polly-circuitbreaker-works) for more detailed information around circuit breakers.\n\n> It's **important** that you reuse the same circuit breaker across multiple requests, otherwise it won't do anything!\n\nTo create a breaker, you use a [Policy](#Policy) like you normally would, and call `circuitBreaker()`.\n\n- The `halfOpenAfter` option is the number of milliseconds after which we should try to close the circuit after failure ('closing the circuit' means restarting requests).\n\n  You may also pass a backoff strategy instead of a constant number of milliseconds if you wish to increase the interval between consecutive failing half-open checks.\n\n- The `breaker` is the [breaker policy](#breakers) which controls when the circuit opens.\n\n- The `initialState` option can be passed if you're hydrating the breaker from state collectiond from previous execution using [breaker.toJSON()](#breakertojson).\n\nCalls to `execute()` while the circuit is open (not taking requests) will throw a `BrokenCircuitError`.\n\n```js\nimport {\n  circuitBreaker,\n  handleAll,\n  BrokenCircuitError,\n  ConsecutiveBreaker,\n  SamplingBreaker,\n  ExponentialBackoff,\n} from 'cockatiel';\n\n// Break if more than 20% of requests fail in a 30 second time window:\nconst breaker = circuitBreaker(handleAll, {\n  halfOpenAfter: 10 * 1000,\n  breaker: new SamplingBreaker({ threshold: 0.2, duration: 30 * 1000 }),\n});\n\n// Break if more than 5 requests in a row fail, and use a backoff for retry attempts:\nconst breaker = circuitBreaker(handleAll, {\n  halfOpenAfter: new ExponentialBackoff(),\n  breaker: new ConsecutiveBreaker(5),\n});\n\n// Get info from the database, or return 'service unavailable' if it's down/recovering\nexport async function handleRequest() {\n  try {\n    return await breaker.execute(() => getInfoFromDatabase());\n  } catch (e) {\n    if (e instanceof BrokenCircuitError) {\n      return 'service unavailable';\n    } else {\n      throw e;\n    }\n  }\n}\n```\n\n### Breakers\n\n#### `ConsecutiveBreaker`\n\nThe `ConsecutiveBreaker` breaks after `n` requests in a row fail. Simple, easy.\n\n```js\n// Break if more than 5 requests in a row fail:\nconst breaker = circuitBreaker(handleAll, {\n  halfOpenAfter: 10 * 1000,\n  breaker: new ConsecutiveBreaker(5),\n});\n```\n\n#### `CountBreaker`\n\nThe `CountBreaker` breaks after a proportion of requests in a count based sliding window fail. It is inspired by the [Count-based sliding window in Resilience4j](https://resilience4j.readme.io/docs/circuitbreaker#count-based-sliding-window).\n\n```js\n// Break if more than 20% of requests fail in a sliding window of size 100:\nconst breaker = circuitBreaker(handleAll, {\n  halfOpenAfter: 10 * 1000,\n  breaker: new CountBreaker({ threshold: 0.2, size: 100 }),\n});\n```\n\nYou can specify a minimum minimum-number-of-calls value to use, to avoid opening the circuit when there are only few samples in the sliding window. By default this value is set to the sliding window size, but you can override it if necessary:\n\n```js\nconst breaker = circuitBreaker(handleAll, {\n  halfOpenAfter: 10 * 1000,\n  breaker: new CountBreaker({\n    threshold: 0.2,\n    size: 100,\n    minimumNumberOfCalls: 50, // require 50 requests before we can break\n  }),\n});\n```\n\n#### `SamplingBreaker`\n\nThe `SamplingBreaker` breaks after a proportion of requests over a time period fail.\n\n```js\n// Break if more than 20% of requests fail in a 30 second time window:\nconst breaker = circuitBreaker(handleAll, {\n  halfOpenAfter: 10 * 1000,\n  breaker: new SamplingBreaker({ threshold: 0.2, duration: 30 * 1000 }),\n});\n```\n\nYou can specify a minimum requests-per-second value to use to avoid opening the circuit under periods of low load. By default we'll choose a value such that you need 5 failures per second for the breaker to kick in, and you can configure this if it doesn't work for you:\n\n```js\nconst breaker = circuitBreaker(handleAll, {\n  halfOpenAfter: 10 * 1000,\n  breaker: new SamplingBreaker({\n    threshold: 0.2,\n    duration: 30 * 1000,\n    minimumRps: 10, // require 10 requests per second before we can break\n  }),\n});\n```\n\n### `breaker.execute(fn[, signal])`\n\nExecutes the function. May throw a `BrokenCircuitError` if the circuit is open. If a half-open test is currently running and it succeeds, the circuit breaker will check the abort signal (possibly throwing a `TaskCancelledError`) before continuing to run the inner function.\n\nOtherwise, it calls the inner function and returns what it returns, or throws what it throws.\n\nLike all `Policy.execute` methods, any propagated `{ signal: AbortSignal }` will be given as the first argument to `fn`.\n\n```ts\nconst response = await breaker.execute(() => getJson('https://example.com'));\n```\n\n### `breaker.state`\n\nThe current state of the circuit breaker, allowing for introspection.\n\n```js\nimport { CircuitState } from 'cockatiel';\n\nif (breaker.state === CircuitState.Open) {\n  console.log('the circuit is open right now');\n}\n```\n\n### `breaker.onBreak(callback)`\n\nAn [event emitter](#events) that fires when the circuit opens as a result of failures. Returns a disposable instance.\n\n```js\nconst listener = breaker.onBreak(() => console.log('circuit is open'));\n\nlistener.dispose();\n```\n\n### `breaker.onReset(callback)`\n\nAn [event emitter](#events) that fires when the circuit closes after being broken. Returns a disposable instance.\n\n```js\nconst listener = breaker.onReset(() => console.log('circuit is closed'));\n\nlistener.dispose();\n```\n\n### `breaker.onHalfOpen(callback)`\n\nAn [event emitter](#events) when the circuit breaker is half open (running a test call). Either `onBreak` on `onReset` will subsequently fire.\n\n```js\nconst listener = breaker.onHalfOpen(() => console.log('circuit is testing a request'));\n\nlistener.dispose();\n```\n\n### `breaker.onStateChange(callback)`\n\nAn [event emitter](#events) that fires whenever the circuit state changes in general, after the more specific `onReset`, `onHalfOpen`, `onBreak` emitters fires.\n\n```js\nimport { CircuitState } from 'cockatiel';\n\nconst listener = breaker.onStateChange(state => {\n  if (state === CircuitState.Closed) {\n    console.log('circuit breaker is once again closed');\n  }\n});\n\nlistener.dispose();\n```\n\n### `breaker.onSuccess(callback)`\n\nAn [event emitter](#events) that fires whenever a function is successfully called. It's invoked with an object containing the duration in milliseconds to nanosecond precision.\n\n```js\nconst listener = breaker.onSuccess(({ duration }) => {\n  console.log(`circuit breaker call ran in ${duration}ms`);\n});\n\n// later:\nlistener.dispose();\n```\n\n### `breaker.onFailure(callback)`\n\nAn [event emitter](#events) that fires whenever a function throw an error or returns an errorful result. It's invoked with the duration of the call, the reason for the failure, and an boolean indicating whether the error is handled by the policy.\n\n```js\nconst listener = breaker.onFailure(({ duration, handled, reason }) => {\n  console.log(`circuit breaker call ran in ${duration}ms and failed with`, reason);\n  console.log(handled ? 'error was handled' : 'error was not handled');\n});\n\n// later:\nlistener.dispose();\n```\n\n### `breaker.isolate()`\n\nManually holds the circuit open, until the returned disposable is disposed of. While held open, the circuit will throw `IsolatedCircuitError`, a type of `BrokenCircuitError`, on attempted executions. It's safe to have multiple `isolate()` calls; we'll refcount them behind the scenes.\n\n```js\nconst handle = breaker.isolate();\n\n// later, allow calls again:\nhandle.dispose();\n```\n\n### `breaker.toJSON()`\n\nReturns the circuit breaker state so that it can be re-created later. This is useful in cases like serverless functions where you may want to keep the breaker state across multiple executions.\n\n```js\nconst breakerState = breaker.toJSON();\n\n// ...in a later execution\n\nconst breaker = circuitBreaker(policy, {\n  halfOpenAfter: 1000,\n  breaker: new ConsecutiveBreaker(3),\n  initialState: breakerState,\n});\n```\n\nNote that if the breaker is currently half open, the serialized state will record it in such a way that it's open when restored and will use the first call as the half-open test.\n\n## `timeout(duration, strategy)`\n\nCreates a timeout policy. The duration specifies how long to wait before timing out `execute()`'d functions. The strategy for timeouts, \"Cooperative\" or \"Aggressive\". An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) will be pass to any executed function, and in cooperative timeouts we'll simply wait for that function to return or throw. In aggressive timeouts, we'll immediately throw a TaskCancelledError when the timeout is reached, in addition to marking the passed token as failed.\n\n```js\nimport { TimeoutStrategy, timeout, TaskCancelledError } from 'cockatiel';\n\nconst timeout = timeout(2000, TimeoutStrategy.Cooperative);\n\nexport async function handleRequest() {\n  try {\n    return await timeout.execute(signal => getInfoFromDatabase(signal));\n  } catch (e) {\n    if (e instanceof TaskCancelledError) {\n      return 'database timed out';\n    } else {\n      throw e;\n    }\n  }\n}\n```\n\n### `timeout.dangerouslyUnref()`\n\nWhen timing out, a referenced timer is created. This means the Node.js event loop is kept active while we're waiting for the timeout, as long as the function hasn't returned. Calling this method on the timeout builder will unreference the timer, allowing the process to exit even if a timeout might still be happening.\n\n### `timeout.execute(fn[, signal])`\n\nExecutes the given function as configured in the policy. An [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) will be pass to the function, which it should use for aborting operations as needed. If cancellation is requested on the parent abort signal provided as the second argument to `execute()`, the cancellation will be propagated.\n\n```ts\nawait timeout.execute(({ signal }) => getInfoFromDatabase(signal));\n```\n\n### `timeout.onTimeout(callback)`\n\nAn [event emitter](#events) that fires when a timeout is reached. Useful for telemetry. Returns a disposable instance.\n\nIn the \"aggressive\" timeout strategy, a timeout event will immediately preceed a failure event and promise rejection. In the cooperative timeout strategy, the timeout event is still emitted, _but_ the success or failure is determined by what the executed function throws or returns.\n\n```ts\nconst listener = timeout.onTimeout(() => console.log('timeout was reached'));\n\nlistener.dispose();\n```\n\n### `timeout.onSuccess(callback)`\n\nAn [event emitter](#events) that fires whenever a function is successfully called. It's invoked with an object containing the duration in milliseconds to nanosecond precision.\n\n```js\nconst listener = timeout.onSuccess(({ duration }) => {\n  console.log(`timeout call ran in ${duration}ms`);\n});\n\n// later:\nlistener.dispose();\n```\n\n### `timeout.onFailure(callback)`\n\nAn [event emitter](#events) that fires whenever a function throw an error or returns an errorful result. It's invoked with the duration of the call, the reason for the failure, and an boolean indicating whether the error is handled by the policy.\n\nThis is _only_ called when the function itself fails, and not when a timeout happens.\n\n```js\nconst listener = timeout.onFailure(({ duration, handled, reason }) => {\n  console.log(`timeout call ran in ${duration}ms and failed with`, reason);\n  console.log(handled ? 'error was handled' : 'error was not handled');\n});\n\n// later:\nlistener.dispose();\n```\n\n## `bulkhead(limit[, queue])`\n\nA Bulkhead is a simple structure that limits the number of concurrent calls. Attempting to exceed the capacity will cause `execute()` to throw a `BulkheadRejectedError`.\n\n```js\nimport { bulkhead } from 'cockatiel';\n\nconst bulkhead = bulkhead(12); // limit to 12 concurrent calls\n\nexport async function handleRequest() {\n  try {\n    return await bulkhead.execute(() => getInfoFromDatabase());\n  } catch (e) {\n    if (e instanceof BulkheadRejectedError) {\n      return 'too much load, try again later';\n    } else {\n      throw e;\n    }\n  }\n}\n```\n\nYou can optionally pass a second parameter to `bulkhead()`, which will allow for events to be queued instead of rejected after capacity is exceeded. Once again, if this queue fills up, a `BulkheadRejectedError` will be thrown.\n\n```js\nconst bulkhead = bulkhead(12, 4); // limit to 12 concurrent calls, with 4 queued up\n```\n\n### `bulkhead.execute(fn[, signal])`\n\nDepending on the bulkhead state, either:\n\n- Executes the function immediately and returns its results;\n- Queues the function for execution and returns its results when it runs, or;\n- Throws a `BulkheadRejectedError` if the configured concurrency and queue limits have been execeeded.\n\nThe abort signal is checked (possibly resulting in a TaskCancelledError) when the function is first submitted to the bulkhead, and when it dequeues.\n\nLike all `Policy.execute` methods, any propagated `{ signal: AbortSignal }` will be given as the first argument to `fn`.\n\n```js\nconst data = await bulkhead.execute(({ signal }) => getInfoFromDatabase(signal));\n```\n\n### `bulkhead.onReject(callback)`\n\nAn [event emitter](#events) that fires when a call is rejected. Useful for telemetry. Returns a disposable instance.\n\n```js\nconst listener = bulkhead.onReject(() => console.log('bulkhead call was rejected'));\n\nlistener.dispose();\n```\n\n### `bulkhead.onSuccess(callback)`\n\nAn [event emitter](#events) that fires whenever a function is successfully called. It's invoked with an object containing the duration in milliseconds to nanosecond precision.\n\n```js\nconst listener = bulkhead.onSuccess(({ duration }) => {\n  console.log(`bulkhead call ran in ${duration}ms`);\n});\n\n// later:\nlistener.dispose();\n```\n\n### `bulkhead.onFailure(callback)`\n\nAn [event emitter](#events) that fires whenever a function throw an error or returns an errorful result. It's invoked with the duration of the call, the reason for the failure, and an boolean indicating whether the error is handled by the policy.\n\nThis is _only_ called when the function itself fails, and not when a bulkhead rejection occurs.\n\n```js\nconst listener = bulkhead.onFailure(({ duration, handled, reason }) => {\n  console.log(`bulkhead call ran in ${duration}ms and failed with`, reason);\n  console.log(handled ? 'error was handled' : 'error was not handled');\n});\n\n// later:\nlistener.dispose();\n```\n\n### `bulkhead.executionSlots`\n\nReturns the number of execution slots left in the bulkhead. If either this or `bulkhead.queueSlots` is greater than zero, the `execute()` will not throw a `BulkheadRejectedError`.\n\n### `bulkhead.queueSlots`\n\nReturns the number of queue slots left in the bulkhead. If either this or `bulkhead.executionSlots` is greater than zero, the `execute()` will not throw a `BulkheadRejectedError`.\n\n## `fallback(policy, valueOrFactory)`\n\nCreates a policy that returns the `valueOrFactory` if an executed function fails. As the name suggests, `valueOrFactory` either be a value, or a function we'll call when a failure happens to create a value.\n\n```js\nimport { handleType, fallback } from 'cockatiel';\n\nconst fallback = fallback(handleType(DatabaseError), () => getStaleData());\n\nexport function handleRequest() {\n  return fallback.execute(() => getInfoFromDatabase());\n}\n```\n\n### `fallback.execute(fn[, signal])`\n\nExecutes the given function. Any _handled_ error or errorful value will be eaten, and instead the fallback value will be returned.\n\nLike all `Policy.execute` methods, any propagated `{ signal: AbortSignal }` will be given as the first argument to `fn`.\n\n```js\nconst result = await fallback.execute(() => getInfoFromDatabase());\n```\n\n### `fallback.onSuccess(callback)`\n\nAn [event emitter](#events) that fires whenever a function is successfully called. It's invoked with an object containing the duration in milliseconds to nanosecond precision.\n\n```js\nconst listener = fallback.onSuccess(({ duration }) => {\n  console.log(`fallback call ran in ${duration}ms`);\n});\n\n// later:\nlistener.dispose();\n```\n\n### `fallback.onFailure(callback)`\n\nAn [event emitter](#events) that fires whenever a function throw an error or returns an errorful result. It's invoked with the duration of the call, the reason for the failure, and an boolean indicating whether the error is handled by the policy.\n\nIf the error was handled, the fallback will kick in.\n\n```js\nconst listener = fallback.onFailure(({ duration, handled, reason }) => {\n  console.log(`fallback call ran in ${duration}ms and failed with`, reason);\n  console.log(handled ? 'error was handled' : 'error was not handled');\n});\n\n// later:\nlistener.dispose();\n```\n\n## See Also\n\n- [App-vNext/Polly](https://github.com/App-vNext/Polly): the original, .NET implementation of Polly\n- [polly-js](https://github.com/mauricedb/polly-js): a similar package with a subset of .NET Polly/Cockatiel functionality","users":{}}