{"_id":"@creadev.org/qos","_rev":"4-de55b19c84d2f297702d98d89549ea67","name":"@creadev.org/qos","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@creadev.org/qos","version":"0.1.0","keywords":["qos","retry","timeout","circuit-breaker"],"author":{"name":"dhaupin"},"license":"MIT","_id":"@creadev.org/qos@0.1.0","maintainers":[{"name":"dhaupin","email":"dhaupin@gmail.com"}],"homepage":"https://github.com/dhaupin/creadev-qos#readme","bugs":{"url":"https://github.com/dhaupin/creadev-qos/issues"},"dist":{"shasum":"abfea103aa4a8a361e707157f3bf825e030dc25e","tarball":"https://registry.npmjs.org/@creadev.org/qos/-/qos-0.1.0.tgz","fileCount":19,"integrity":"sha512-cxorm1eYEPmfFQlDuMe9mEoCHPD1al6mdbiMWQk7weQx8KOZHku7ifw1XRL0h00mTVDoe61f5jK9OUjCA6rKHw==","signatures":[{"sig":"MEQCIGGGgMi9C2deoH7+59gCx48WLFW45XbdiOHSUqJXR11QAiADslvaOb/a0Z+lVYog9QU15Wa9yzGDdaA1BtBM2eKXQg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29721},"type":"module","exports":{".":"./src/index.ts","./retry":"./src/retry.ts","./timeout":"./src/timeout.ts"},"gitHead":"e63bb297abfb97e1dce77263680aa488540c0820","scripts":{"test":"vitest","build":"tsc"},"_npmUser":{"name":"dhaupin","email":"dhaupin@gmail.com"},"repository":{"url":"git+https://github.com/dhaupin/creadev-qos.git","type":"git"},"_npmVersion":"10.8.2","description":"Shared QoS utilities - retry, timeout, circuit breaker","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.1","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/qos_0.1.0_1778067703900_0.5555621563902164","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@creadev.org/qos","version":"0.2.0","keywords":["qos","retry","timeout","circuit-breaker","http"],"author":{"name":"dhaupin"},"license":"MIT","_id":"@creadev.org/qos@0.2.0","maintainers":[{"name":"dhaupin","email":"dhaupin@gmail.com"}],"homepage":"https://github.com/dhaupin/creadev-qos#readme","bugs":{"url":"https://github.com/dhaupin/creadev-qos/issues"},"dist":{"shasum":"4011b1df7b65e09a4119cf7d98f49ea1e9453a70","tarball":"https://registry.npmjs.org/@creadev.org/qos/-/qos-0.2.0.tgz","fileCount":20,"integrity":"sha512-DdAsWizRao2xrLq1HazdIHry2b2vq2YtTvtt5FDIxnMCQZPXnWnc4+/Kn0p5+rrqT0yztdvJsr0i0sq+vTtEpA==","signatures":[{"sig":"MEUCIQDDTjA9TQ6/4TlqcBYvEP7w6aHlo0smDUJaBnB2zzM5ugIgH3FOcmv1RI/j2KMAceQJyOZCG4t8ZlEnrJpVyrVEC0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31180},"type":"module","exports":{".":"./src/index.ts","./http":"./src/http.ts","./retry":"./src/retry.ts","./timeout":"./src/timeout.ts"},"gitHead":"b8f59fd82e5a6019b79ab3af5bdcecf463bdd507","scripts":{"test":"vitest","build":"tsc"},"_npmUser":{"name":"dhaupin","email":"dhaupin@gmail.com"},"repository":{"url":"git+https://github.com/dhaupin/creadev-qos.git","type":"git"},"_npmVersion":"10.8.2","description":"Shared QoS utilities - retry, timeout, circuit breaker, http utilities","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.1","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/qos_0.2.0_1778457441969_0.5211526101314614","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@creadev.org/qos","version":"0.3.0","keywords":["qos","retry","timeout","circuit-breaker","http"],"author":{"name":"dhaupin"},"license":"MIT","_id":"@creadev.org/qos@0.3.0","maintainers":[{"name":"dhaupin","email":"dhaupin@gmail.com"}],"homepage":"https://github.com/dhaupin/creadev-qos#readme","bugs":{"url":"https://github.com/dhaupin/creadev-qos/issues"},"dist":{"shasum":"10a722d5f44282085b5e833c6a02ffb8e6117de8","tarball":"https://registry.npmjs.org/@creadev.org/qos/-/qos-0.3.0.tgz","fileCount":20,"integrity":"sha512-ls7V5/AR5FdQQnXvXT5WV4HKR5qRdUIgeKfobO5r5okw+YjAgZENXqzekUysU7ADPoHRZ9Xypsg++5SgeYtxAw==","signatures":[{"sig":"MEYCIQD3LEFUUEq8hoVFOiqNHmHFtMskWLLw2rEnSI2Y1PoIwQIhAMtSIWc8fgEhJHLuhsvwMExwsQwESb7vDjSVNVg8MUYl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31180},"type":"module","exports":{".":"./src/index.ts","./http":"./src/http.ts","./retry":"./src/retry.ts","./timeout":"./src/timeout.ts"},"gitHead":"e0402f00c9a6a023c6cd274542df7d71b5f2e5a8","scripts":{"test":"vitest","build":"tsc"},"_npmUser":{"name":"dhaupin","email":"dhaupin@gmail.com"},"repository":{"url":"git+https://github.com/dhaupin/creadev-qos.git","type":"git"},"_npmVersion":"10.8.2","description":"Shared QoS utilities - retry, timeout, circuit breaker, http utilities","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.6.1","typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/qos_0.3.0_1778458887009_0.15601334001095002","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@creadev.org/qos","version":"0.3.1","type":"module","description":"Shared QoS utilities - retry, timeout, circuit breaker, http utilities","keywords":["qos","retry","timeout","circuit-breaker","http"],"author":{"name":"dhaupin"},"repository":{"type":"git","url":"git+https://github.com/dhaupin/creadev-qos.git"},"license":"MIT","main":"./dist/index.js","types":"./dist/index.d.ts","publishConfig":{"access":"public"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./retry":{"types":"./dist/retry.d.ts","import":"./dist/retry.js"},"./timeout":{"types":"./dist/timeout.d.ts","import":"./dist/timeout.js"},"./bulkhead":{"types":"./dist/bulkhead.d.ts","import":"./dist/bulkhead.js"},"./throttler":{"types":"./dist/throttler.d.ts","import":"./dist/throttler.js"}},"scripts":{"build":"tsc","test":"vitest"},"devDependencies":{"typescript":"^5.0.0","vitest":"^1.6.1"},"_id":"@creadev.org/qos@0.3.1","gitHead":"d7d8c88312b4a2431fb7923c06f181ee8bada44c","bugs":{"url":"https://github.com/dhaupin/creadev-qos/issues"},"homepage":"https://github.com/dhaupin/creadev-qos#readme","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-a0iIxdyBqIRV6gq4hnwXDIBEfwVeRk9cPg1kohcgc8m12zlqHwxG9pSicdSm/tuniGUbrcpJLArN19gqzaqThA==","shasum":"23acee2bca76e1b1a7b0cee3671ef029e73395cf","tarball":"https://registry.npmjs.org/@creadev.org/qos/-/qos-0.3.1.tgz","fileCount":28,"unpackedSize":48320,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAgOikWO9oJlA4SEVNOrNlEtYR/VrEixtxkNNu6/dfjtAiA5aeCq7ENC7iROuwrTu5cOzoaGXZfuoqOfv5pLSlw5Gg=="}]},"_npmUser":{"name":"dhaupin","email":"dhaupin@gmail.com"},"directories":{},"maintainers":[{"name":"dhaupin","email":"dhaupin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qos_0.3.1_1778467548054_0.6166178726722278"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T11:41:43.826Z","modified":"2026-05-11T02:45:48.356Z","0.1.0":"2026-05-06T11:41:44.047Z","0.2.0":"2026-05-10T23:57:22.114Z","0.3.0":"2026-05-11T00:21:27.166Z","0.3.1":"2026-05-11T02:45:48.210Z"},"bugs":{"url":"https://github.com/dhaupin/creadev-qos/issues"},"author":{"name":"dhaupin"},"license":"MIT","homepage":"https://github.com/dhaupin/creadev-qos#readme","keywords":["qos","retry","timeout","circuit-breaker","http"],"repository":{"type":"git","url":"git+https://github.com/dhaupin/creadev-qos.git"},"description":"Shared QoS utilities - retry, timeout, circuit breaker, http utilities","maintainers":[{"name":"dhaupin","email":"dhaupin@gmail.com"}],"readme":"# @creadev.org/qos\n\n> Quality of Service utilities - retry, timeout, circuit breaker, throttler, bulkhead.\n\n[![npm](https://img.shields.io/npm/v/@creadev.org/qos)](https://www.npmjs.com/package/@creadev.org/qos)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Install\n\n```bash\nnpm install @creadev.org/qos\n```\n\n## Usage\n\n### Retry with Backoff\n\n```typescript\nimport { withRetry } from '@creadev.org/qos';\n\n// Retry with automatic backoff\nconst result = await withRetry(fetchData(), { \n  retries: 3,\n  backoff: 'exponential'\n});\n```\n\n### Circuit Breaker\n\n```typescript\nimport { CircuitBreaker } from '@creadev.org/qos';\n\nconst breaker = new CircuitBreaker({\n  failureThreshold: 5,\n  resetTimeoutMs: 30000\n});\n\ntry {\n  const result = await breaker.execute(() => apiCall());\n} catch (err) {\n  // Circuit open - failures threshold reached\n}\n```\n\n### Throttler (from vant)\n\n```typescript\nimport { Throttler } from '@creadev.org/qos';\n\n// Throttle to max 10 calls per second\nconst t = new Throttler({ limit: 10, window: 1000 });\nconst throttledFn = t.throttle(() => doWork());\n// Excess calls are silently dropped\n```\n\n### Bulkhead (from vant)\n\n```typescript\nimport { Bulkhead } from '@creadev.org/qos';\n\n// Max 5 concurrent\nconst b = new Bulkhead({ concurrency: 5 });\nawait b.run(() => apiCall()); // Queued if at limit\n```\n\n### Timeout\n\n```typescript\nimport { withTimeout } from '@creadev.org/qos';\n\n// Auto-timeout with rejection\nconst result = await withTimeout(fetchData(), { ms: 5000 });\n```\n\n## API\n\n### withRetry\n\n| Option | Type | Default | Description |\n|--------|------|---------|--------------|\n| `retries` | `number` | `3` | Number of retry attempts |\n| `backoff` | `'fixed'` \\| `'exponential'` | `'exponential'` | Backoff strategy |\n| `baseDelayMs` | `number` | `1000` | Base delay |\n\n### CircuitBreaker\n\n| Method | Description |\n|--------|-------------|\n| `breaker.execute(fn)` | Execute function, respects circuit state |\n| `breaker.status` | `'closed' | 'open' | 'half-open'` |\n\n### Throttler\n\n| Method | Description |\n|--------|-------------|\n| `new Throttler(opts)` | Create with `limit`, `window` ms |\n| `t.throttle(fn)` | Wrap function, drops excess calls |\n| `t.clear()` | Clear all tracked calls |\n| `t.stats()` | Get `{ tracked, uptime }` |\n\n### Bulkhead\n\n| Method | Description |\n|--------|-------------|\n| `new Bulkhead(opts)` | Create with `concurrency` |\n| `b.run(fn)` | Execute, queue if at limit |\n| `b.isFull()` | Check if at capacity |\n| `b.getStatus()` | Get `{ running, queued, uptime }` |\n\n### withTimeout\n\n| Option | Type | Description |\n|--------|------|--------------|\n| `ms` | `number` | Timeout in milliseconds |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}