{"_id":"@anyq/cloudflare-queues","_rev":"3-e9009eba715f90bdf03b5f5272379ad9","name":"@anyq/cloudflare-queues","dist-tags":{"latest":"0.5.0"},"versions":{"0.3.2":{"name":"@anyq/cloudflare-queues","version":"0.3.2","keywords":["anyq","queue","cloudflare","cloudflare-queues","workers","message-queue"],"author":"Shantanu Sharma","license":"MIT","_id":"@anyq/cloudflare-queues@0.3.2","maintainers":[{"name":"sns45","email":"notifyshantanu@gmail.com"}],"homepage":"https://github.com/sns45/anyq#readme","bugs":{"url":"https://github.com/sns45/anyq/issues"},"dist":{"shasum":"2c47d16181404b21edf2dbf4a039c1ae2dbba307","tarball":"https://registry.npmjs.org/@anyq/cloudflare-queues/-/cloudflare-queues-0.3.2.tgz","fileCount":11,"integrity":"sha512-mvNEpJgab/MeOVyWij1YZ87siT6keaqGL2D1jGwP82rb3fqPTIY/65FoVqYSrGKEzVIuk4NreUqvwstF7vMmEA==","signatures":[{"sig":"MEQCIHoe3mQgbd4JGJw/3kxvh7UvkH9PMdI5xnpVmz6dzRZkAiBOm7wFlYYVVCb5aEoIrsW7jljwVvE5yKEAIFIU54BSEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50055},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"2c47d16181404b21edf2dbf4a039c1ae2dbba307","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun build ./src/index.ts --outdir ./dist --target bun --watch","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target bun && bun run build:types","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"bun test --watch","build:types":"tsc --emitDeclarationOnly --outDir dist"},"_npmUser":{"name":"sns45","email":"notifyshantanu@gmail.com"},"_integrity":"sha512-mvNEpJgab/MeOVyWij1YZ87siT6keaqGL2D1jGwP82rb3fqPTIY/65FoVqYSrGKEzVIuk4NreUqvwstF7vMmEA==","repository":{"url":"https://github.com/sns45/anyq","type":"git","directory":"packages/cloudflare-queues"},"_npmVersion":"10.8.3","description":"Cloudflare Queues adapter for anyq","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@anyq/core":"0.3.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"miniflare":"^3.20250718.3","@types/bun":"latest","typescript":"^5.4.5","@cloudflare/workers-types":"^4.20260702.1"},"peerDependencies":{"@anyq/core":"0.3.2"},"_npmOperationalInternal":{"tmp":"tmp/cloudflare-queues_0.3.2_1784910278873_0.9332736774218411","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@anyq/cloudflare-queues","version":"0.4.0","keywords":["anyq","queue","cloudflare","cloudflare-queues","workers","message-queue"],"author":"Shantanu Sharma","license":"Apache-2.0","_id":"@anyq/cloudflare-queues@0.4.0","maintainers":[{"name":"sns45","email":"notifyshantanu@gmail.com"}],"homepage":"https://github.com/sns45/anyq#readme","bugs":{"url":"https://github.com/sns45/anyq/issues"},"dist":{"shasum":"ca6d347b0dc088feccded76cb3bf1c631cf26a7c","tarball":"https://registry.npmjs.org/@anyq/cloudflare-queues/-/cloudflare-queues-0.4.0.tgz","fileCount":13,"integrity":"sha512-csk2IGOFAsy0PtnHSjMx9N2tfDUaFKETOcFhos8qb4xDAJL5ZaLP9T3yb76CSNl8O6zzzOhjwcHeCXWJ+R+Ajw==","signatures":[{"sig":"MEUCIQDL8F5VhozrLnsGUYKU7LP2cg6yr1+zLOcsZMlwFOem7wIgWUVHhJNnO/smsp4wzHu14sjSi7X2nTV8Fwm8eASPbyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62073},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"ca6d347b0dc088feccded76cb3bf1c631cf26a7c","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"bun build ./src/index.ts --outdir ./dist --target bun --watch","test":"bun test","build":"bun build ./src/index.ts --outdir ./dist --target bun && bun run build:types","clean":"rm -rf dist coverage","typecheck":"tsc --noEmit","test:watch":"bun test --watch","build:types":"tsc --emitDeclarationOnly --outDir dist"},"_npmUser":{"name":"sns45","email":"notifyshantanu@gmail.com"},"_integrity":"sha512-csk2IGOFAsy0PtnHSjMx9N2tfDUaFKETOcFhos8qb4xDAJL5ZaLP9T3yb76CSNl8O6zzzOhjwcHeCXWJ+R+Ajw==","repository":{"url":"https://github.com/sns45/anyq","type":"git","directory":"packages/cloudflare-queues"},"_npmVersion":"10.8.3","description":"Cloudflare Queues adapter for anyq","directories":{},"_nodeVersion":"26.3.0","dependencies":{"@anyq/core":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"miniflare":"^3.20250718.3","@types/bun":"latest","typescript":"^5.4.5","@cloudflare/workers-types":"^4.20260702.1"},"peerDependencies":{"@anyq/core":"0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/cloudflare-queues_0.4.0_1787860580275_0.6273968953375151","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@anyq/cloudflare-queues","version":"0.5.0","description":"Cloudflare Queues adapter for anyq","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"bun build ./src/index.ts --outdir ./dist --target bun && bun run build:types","build:types":"tsc --emitDeclarationOnly --outDir dist","dev":"bun build ./src/index.ts --outdir ./dist --target bun --watch","test":"bun test","test:watch":"bun test --watch","typecheck":"tsc --noEmit","clean":"rm -rf dist coverage"},"dependencies":{"@anyq/core":"0.5.0"},"devDependencies":{"@cloudflare/workers-types":"^4.20260702.1","@types/bun":"latest","miniflare":"^3.20250718.3","typescript":"^5.4.5"},"peerDependencies":{"@anyq/core":"0.5.0"},"keywords":["anyq","queue","cloudflare","cloudflare-queues","workers","message-queue"],"license":"Apache-2.0","author":"Shantanu Sharma","repository":{"type":"git","url":"https://github.com/sns45/anyq","directory":"packages/cloudflare-queues"},"homepage":"https://github.com/sns45/anyq#readme","bugs":{"url":"https://github.com/sns45/anyq/issues"},"publishConfig":{"access":"public"},"_id":"@anyq/cloudflare-queues@0.5.0","_integrity":"sha512-krifU1QApSoFETaUr3jm4lf7Vyvmy0A96qcuonYzfcn2XDRBWl5qKI8UwWWVgNdl3HgXxSNj1oVPoxLgZZxrAg==","_nodeVersion":"26.3.0","_npmVersion":"10.8.3","shasum":"d9013eb06bb3b8f37edd19fa98e3367a53e729f1","dist":{"integrity":"sha512-krifU1QApSoFETaUr3jm4lf7Vyvmy0A96qcuonYzfcn2XDRBWl5qKI8UwWWVgNdl3HgXxSNj1oVPoxLgZZxrAg==","shasum":"d9013eb06bb3b8f37edd19fa98e3367a53e729f1","tarball":"https://registry.npmjs.org/@anyq/cloudflare-queues/-/cloudflare-queues-0.5.0.tgz","fileCount":13,"unpackedSize":62077,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFMouBO6ii13dVNN72zrM95i/4RN/IQOvSKAf10h5jR1AiEA5w4FIZmHJRmTYxzn13LKxRba1mcP2dCVorys23hrN14="}]},"_npmUser":{"name":"sns45","email":"notifyshantanu@gmail.com"},"directories":{},"maintainers":[{"name":"sns45","email":"notifyshantanu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cloudflare-queues_0.5.0_1788809004151_0.9427432123896238"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-24T16:24:38.730Z","modified":"2026-09-07T19:23:24.686Z","0.3.2":"2026-07-24T16:24:39.064Z","0.4.0":"2026-08-27T19:56:20.429Z","0.5.0":"2026-09-07T19:23:24.283Z"},"bugs":{"url":"https://github.com/sns45/anyq/issues"},"author":"Shantanu Sharma","license":"Apache-2.0","homepage":"https://github.com/sns45/anyq#readme","keywords":["anyq","queue","cloudflare","cloudflare-queues","workers","message-queue"],"repository":{"type":"git","url":"https://github.com/sns45/anyq","directory":"packages/cloudflare-queues"},"description":"Cloudflare Queues adapter for anyq","maintainers":[{"name":"sns45","email":"notifyshantanu@gmail.com"}],"readme":"# @anyq/cloudflare-queues\n\nCloudflare Queues adapter for **anyq** - push-based queuing for Cloudflare Workers.\n\nCloudflare Queues works differently from broker-polling adapters like SQS or\nRabbitMQ: a producer publishes through a `Queue` binding declared in\n`wrangler.toml`/`wrangler.jsonc` (`env.MY_QUEUE.send(...)`), and the platform\ndelivers batches directly to a Worker's `queue(batch, env, ctx)` export.\nThere is no long-poll pull loop, so the consumer in this package registers a\nhandler and exposes `processBatch()` for your Worker to call.\n\n## Installation\n\n```bash\nnpm install @anyq/cloudflare-queues @anyq/core\n```\n\nAdd `@cloudflare/workers-types` to your Worker project's devDependencies if\nyou don't already have it (used for the `Queue`/`MessageBatch`/`Message`\ntypes).\n\n## Usage\n\n```typescript\nimport { CloudflareQueuesProducer, CloudflareQueuesConsumer } from '@anyq/cloudflare-queues';\nimport type { MessageBatch, Queue } from '@cloudflare/workers-types';\n\ninterface Env {\n  MY_QUEUE: Queue;\n}\n\nexport default {\n  async fetch(request: Request, env: Env) {\n    const producer = new CloudflareQueuesProducer({\n      driver: 'cloudflare-queues',\n      queue: env.MY_QUEUE,\n    });\n\n    await producer.connect();\n    await producer.publish({ orderId: '123' });\n    await producer.disconnect();\n\n    return new Response('ok');\n  },\n\n  async queue(batch: MessageBatch, env: Env) {\n    const consumer = new CloudflareQueuesConsumer({ driver: 'cloudflare-queues' });\n    await consumer.connect();\n\n    await consumer.subscribe(async (message) => {\n      console.log('Received:', message.body);\n      await message.ack();\n    });\n\n    await consumer.processBatch(batch);\n  },\n};\n```\n\n## Configuration\n\n```typescript\ninterface CloudflareQueuesConfig {\n  driver: 'cloudflare-queues';\n  queue?: Queue;        // Queue binding, e.g. env.MY_QUEUE (required for the producer)\n  queueName?: string;   // For logging/metadata only\n}\n```\n\n## Features\n\n- Fire-and-forget publish (`send`) and batch publish (`sendBatch`, auto-chunked at 100 messages)\n- Push-based consumption: wrap a delivered `MessageBatch` via `processBatch()`\n- Per-message `ack()` / `retry()` mapped onto anyq's `ack()` / `nack(requeue)`\n- Native delayed redelivery via `Message#retry({ delaySeconds })`\n\n## Retry strategies\n\nThis adapter participates in the opt-in pluggable retry strategies from `@anyq/core`. Pass a strategy via `BaseQueueConfig.strategy` and `CloudflareQueuesConsumer.applyStrategy()` takes over per-message error handling inside `processBatch()`; omit it and the legacy behaviour (log + emit `error`, `nack(true)` to retry) runs unchanged.\n\n| Capability | Support |\n|---|---|\n| `supportsNativeDelay` | **true** |\n| Native `park` | `Message#retry({ delaySeconds })` |\n| `deadLetterMessage` | default (`nack(false)` → `ack()`, dropping the message). Configure a dead letter queue on the Cloudflare Queue itself (`wrangler.toml`) if you want broker-native DLQ routing |\n\n```typescript\nimport { backpressurePause } from '@anyq/core';\n\nconst consumer = new CloudflareQueuesConsumer({\n  driver: 'cloudflare-queues',\n  strategy: backpressurePause({ pauseMs: 30_000 }),\n});\n```\n\nSee `@anyq/core` for the full strategy catalogue.\n\n## License\n\nApache License 2.0. See [LICENSE](https://github.com/sns45/anyq/blob/main/LICENSE).\n","readmeFilename":"README.md"}