{"_id":"@arki/resilience","_rev":"2-e9bc476ffd98012756f37b573ee6096f","name":"@arki/resilience","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@arki/resilience","version":"0.0.1","keywords":["arki","typescript","resilience","retry","circuit-breaker","timeout","bulkhead","cockatiel"],"license":"MIT","_id":"@arki/resilience@0.0.1","maintainers":[{"name":"afurculita","email":"alex@furculita.net"}],"homepage":"https://arki.dev","bugs":{"url":"https://github.com/arki-labs/arki/issues"},"dist":{"shasum":"6dde592de2558962959a175e6bfed70890a5b023","tarball":"https://registry.npmjs.org/@arki/resilience/-/resilience-0.0.1.tgz","fileCount":27,"integrity":"sha512-n4JHmxSNVLVNY/L6ot3S8jg5V/G3STojIeZL4ACpIwn5jrZCXD/SV3h656ANH15OPFW5rUMYVkkHglY3FKc+zw==","signatures":[{"sig":"MEYCIQDoXOtrWKB3bseAdpreBTYAbvcLKecX9cgfWcx5b4RGiAIhANn3l7WLR7zPJIIPEwmHavTw+dEr46wTi2HJ35D96V6H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35561},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"36f4110d2cd2b8cff19cddef550cc6e6f9c7baab","_npmUser":{"name":"afurculita","email":"alex@furculita.net"},"repository":{"url":"git+https://github.com/arki-labs/arki.git","type":"git"},"_npmVersion":"10.9.2","description":"Resilience primitives for ARKI — retry, circuit breaker, timeout, bulkhead, and curated presets, built on cockatiel.","directories":{},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"cockatiel":"^3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resilience_0.0.1_1779365940811_0.34000719670344814","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@arki/resilience","version":"0.0.2","description":"Resilience primitives for ARKI — retry, circuit breaker, timeout, bulkhead, and curated presets, built on cockatiel.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/arki-labs/arki.git"},"homepage":"https://arki.dev","bugs":{"url":"https://github.com/arki-labs/arki/issues"},"keywords":["arki","typescript","resilience","retry","circuit-breaker","timeout","bulkhead","cockatiel"],"type":"module","sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./package.json":"./package.json"},"dependencies":{"cockatiel":"^3.2.1"},"publishConfig":{"access":"public"},"_id":"@arki/resilience@0.0.2","gitHead":"a46a9c2b0765c402f95674b9d12135930d5b213f","_nodeVersion":"22.13.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-ASAX9VabeKVkMxFvzDvOE3OQBFzV8fCHXTxOGbi/+Z/ZKUdSIDsJx7Ktsq8IQN7nrqMhQdSbm7OmSG1XfY8YOQ==","shasum":"97c1ae255007ce88ea948e64f7ebad24e358a6b9","tarball":"https://registry.npmjs.org/@arki/resilience/-/resilience-0.0.2.tgz","fileCount":33,"unpackedSize":49865,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC+liQxlGDOc0/YTeaRk6s9duIh4+bY8XSfj+a4ixxhrAiEA7pV0/226G9hzkCXMb0ggxFk7SHADYmRMOqwJwQJLPnY="}]},"_npmUser":{"name":"afurculita","email":"alex@furculita.net"},"directories":{},"maintainers":[{"name":"afurculita","email":"alex@furculita.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/resilience_0.0.2_1783067627901_0.3925772112273962"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-21T12:19:00.724Z","modified":"2026-07-03T08:33:48.271Z","0.0.1":"2026-05-21T12:19:00.962Z","0.0.2":"2026-07-03T08:33:48.128Z"},"bugs":{"url":"https://github.com/arki-labs/arki/issues"},"license":"MIT","homepage":"https://arki.dev","keywords":["arki","typescript","resilience","retry","circuit-breaker","timeout","bulkhead","cockatiel"],"repository":{"type":"git","url":"git+https://github.com/arki-labs/arki.git"},"description":"Resilience primitives for ARKI — retry, circuit breaker, timeout, bulkhead, and curated presets, built on cockatiel.","maintainers":[{"name":"afurculita","email":"alex@furculita.net"}],"readme":"# @arki/resilience\n\nResilience primitives for ARKI — retry, circuit breaker, timeout, bulkhead, and curated presets. Built on top of [`cockatiel`](https://github.com/connor4312/cockatiel) with ergonomic factories and ready-made policies for common workloads.\n\n## Installation\n\n```sh\nnpm install @arki/resilience\n# or\nbun add @arki/resilience\n# or\npnpm add @arki/resilience\n```\n\n## Usage\n\n### Pre-configured presets\n\n```ts\nimport { externalApiPolicy, withResilience } from '@arki/resilience';\n\nconst data = await withResilience(\n  () => fetch('https://api.example.com/billing').then(r => r.json()),\n  externalApiPolicy,\n);\n```\n\nThree curated presets ship out of the box:\n\n- `externalApiPolicy` — retry + timeout tuned for third-party HTTP calls.\n- `databasePolicy` — short timeout + retry for transient connection errors.\n- `backgroundJobPolicy` — longer timeout + aggressive retry for long-running work.\n\n### Building policies\n\n```ts\nimport {\n  createResiliencePolicy,\n  withResilience,\n} from '@arki/resilience';\n\nconst policy = createResiliencePolicy({\n  retry: { maxAttempts: 3, initialDelay: 200 },\n  timeout: { durationMs: 5_000 },\n  circuitBreaker: { halfOpenAfterMs: 30_000, threshold: 5 },\n});\n\nconst result = await withResilience(({ signal }) => doWork(signal), policy);\n```\n\n### Quick wrappers\n\nFor one-off calls without a long-lived policy:\n\n```ts\nimport { withRetry, withTimeout, withCircuitBreaker } from '@arki/resilience';\n\nawait withRetry(() => sendEmail('support@example.com'), { maxAttempts: 3 });\nawait withTimeout(() => slowOperation(), { durationMs: 1_000 });\n```\n\n### Observability\n\n```ts\nimport { attachPolicyLogger } from '@arki/resilience';\n\nattachPolicyLogger(policy, {\n  onRetry: (event) => console.log('retry', event),\n  onBreak: (event) => console.warn('circuit open', event),\n});\n```\n\n## API\n\n- `createResiliencePolicy(options)` — compose retry + timeout + circuit breaker + bulkhead.\n- `createRetryPolicy`, `createCircuitBreakerPolicy`, `createTimeoutPolicy`, `createBulkheadPolicy` — individual primitives.\n- `externalApiPolicy`, `databasePolicy`, `backgroundJobPolicy` — pre-tuned presets.\n- `withResilience`, `withRetry`, `withTimeout`, `withCircuitBreaker` — execution helpers.\n- `attachPolicyLogger(policy, logger)` — observability hooks.\n- `CircuitOpenError`, `TimeoutError`, `RetriesExhaustedError` — typed errors with helpers (`isResilienceError`, `isBrokenCircuitError`, `isBulkheadRejectedError`).\n- Re-exports `IPolicy`, `wrap`, `noop` from `cockatiel`.\n\n## Documentation\n\n`@arki/resilience` is framework-agnostic and works on its own. When you\ncompose it with the [`@arki/dot`](https://www.npmjs.com/package/@arki/dot)\napplication framework, see `packages/dot/docs/` for plugin authoring,\nlifecycle, and diagnostics.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}