{"_id":"@blokcert/node-red-contrib-delayed-job","_rev":"6-2bccb85374f8842162f2abc695c5eafb","name":"@blokcert/node-red-contrib-delayed-job","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@blokcert/node-red-contrib-delayed-job","version":"0.1.0","keywords":["node-red"],"author":{"name":"caspar.wei"},"license":"MIT","_id":"@blokcert/node-red-contrib-delayed-job@0.1.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-delayed-job#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-delayed-job/issues"},"dist":{"shasum":"cc3df53305ff074e03525b6e92ab13a80e332074","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-delayed-job/-/node-red-contrib-delayed-job-0.1.0.tgz","fileCount":12,"integrity":"sha512-NYtX2ftReXByXBeFW2FI7PB1vjGZBAfQspXjJwWBHlCqTKxsinc8WWKhCUaw4iuw1iyVg/yCKrHb1477pJpszQ==","signatures":[{"sig":"MEUCIEdwNGziawZdsyypvkCSA3YGSmhsPziQWNndF8uISiP4AiEAzWmxrzN2kVG21x9kffuYOY9OuxccUwKPNfyNuwmMH14=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18229},"engines":{"node":">=18.0.0"},"gitHead":"27cb3b18812920518aea38bd776a5538adee7096","scripts":{"test":"mocha --timeout 10000 test/**/*_spec.js"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"delayed-job":"delayed-job/delayed-job.js","delayed-job-redis":"delayed-job/delayed-job-redis.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-delayed-job.git","type":"git"},"_npmVersion":"11.4.2","description":"A Node-RED node for Redis-backed delayed job queues using BullMQ","directories":{},"_nodeVersion":"24.4.1","dependencies":{"bullmq":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.0","mocha":"^10.0.0","node-red":">=3.0.0","node-red-node-test-helper":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-delayed-job_0.1.0_1770743439658_0.9775754829483903","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@blokcert/node-red-contrib-delayed-job","version":"0.1.1","keywords":["node-red"],"author":{"name":"caspar.wei"},"license":"MIT","_id":"@blokcert/node-red-contrib-delayed-job@0.1.1","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-delayed-job#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-delayed-job/issues"},"dist":{"shasum":"6a1fc87c29bcc868031ea64ac22d5f18007c9ef4","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-delayed-job/-/node-red-contrib-delayed-job-0.1.1.tgz","fileCount":13,"integrity":"sha512-wfkAjt/CUljOP98ZhLW/1q+95SV5ticpOaJ9cYe7FpudYDqmcbNMif7tLUH+RB4nX/tTplOQ6fRMk3Su5Yfpdw==","signatures":[{"sig":"MEUCIDYcufcbe/jrxY9s0va78lMHnq+izbiHbQF1SCn/ciLoAiEA5CVl3loHNLdw1xn4xPTE8GEYz+lEHc57t5Xln87WIGs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22136},"engines":{"node":">=18.0.0"},"gitHead":"666f194192a3a827a41ad3c93ab0bf48208446a2","scripts":{"test":"mocha --timeout 10000 test/**/*_spec.js"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"delayed-job":"delayed-job/delayed-job.js","delayed-job-redis":"delayed-job/delayed-job-redis.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-delayed-job.git","type":"git"},"_npmVersion":"11.4.2","description":"A Node-RED node for Redis-backed delayed job queues using BullMQ","directories":{},"_nodeVersion":"24.4.1","dependencies":{"bullmq":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.0","mocha":"^10.0.0","node-red":">=3.0.0","node-red-node-test-helper":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-delayed-job_0.1.1_1770743824614_0.6082656435692577","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@blokcert/node-red-contrib-delayed-job","version":"0.2.0","keywords":["node-red"],"author":{"name":"caspar.wei"},"license":"MIT","_id":"@blokcert/node-red-contrib-delayed-job@0.2.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-delayed-job#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-delayed-job/issues"},"dist":{"shasum":"e987fdffc1685c111a4639f91fa8dfdc533cdd35","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-delayed-job/-/node-red-contrib-delayed-job-0.2.0.tgz","fileCount":13,"integrity":"sha512-WWgxZc4N1RDfZNDjHaqt2vNexF3mdKFMawgV+aWBjW8vi6+IRwYdvDDg+rbkVxTkGwilJonmu/CEzy9HviG6Nw==","signatures":[{"sig":"MEQCICYQgONi7WPSGR5PyMRg4/rMSVUcLyR8n/Z28W8YTp2/AiAi42McEf5PLqVv284IYidhUxqhhC+iEALG2r3NfVAn1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25949},"engines":{"node":">=18.0.0"},"gitHead":"9d698509d9b9cc2c030876cc69a7b4eb3af71808","scripts":{"test":"mocha --timeout 10000 test/**/*_spec.js"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"delayed-job":"delayed-job/delayed-job.js","delayed-job-redis":"delayed-job/delayed-job-redis.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-delayed-job.git","type":"git"},"_npmVersion":"11.4.2","description":"A Node-RED node for Redis-backed delayed job queues using BullMQ","directories":{},"_nodeVersion":"24.4.1","dependencies":{"bullmq":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.0","mocha":"^10.0.0","node-red":">=3.0.0","node-red-node-test-helper":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-delayed-job_0.2.0_1770746222222_0.0733909259004184","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@blokcert/node-red-contrib-delayed-job","version":"0.2.1","keywords":["node-red"],"author":{"name":"caspar.wei"},"license":"MIT","_id":"@blokcert/node-red-contrib-delayed-job@0.2.1","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-delayed-job#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-delayed-job/issues"},"dist":{"shasum":"f8c8855fe5836165d0da2879d42815049fce9458","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-delayed-job/-/node-red-contrib-delayed-job-0.2.1.tgz","fileCount":13,"integrity":"sha512-PIwCLmznhrWYs2UEL4xIERXzVMlvPXxLoYeKyuRW20Lvt/wqPtoxdEAhOWrH8sMKaUT0c5ZWJPMujHN6QRgqrg==","signatures":[{"sig":"MEUCIFC/gLymzI0P+tvm9mU1dji0iu6PIhyS78Mw7z7SDTK4AiEAj9tC4u7qJotvaRZkyx8G8AMoy8F/gUR+mMAoyNKWGIs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25954},"engines":{"node":">=18.0.0"},"gitHead":"2905747573653c21db2a705fcb72eaf9aac645eb","scripts":{"test":"mocha --timeout 10000 test/**/*_spec.js"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"delayed-job":"delayed-job/delayed-job.js","delayed-job-redis":"delayed-job/delayed-job-redis.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-delayed-job.git","type":"git"},"_npmVersion":"11.4.2","description":"A Node-RED node for Redis-backed delayed job queues using BullMQ","directories":{},"_nodeVersion":"24.4.1","dependencies":{"bullmq":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.0","mocha":"^10.0.0","node-red":">=3.0.0","node-red-node-test-helper":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-delayed-job_0.2.1_1770746710831_0.38978633956379594","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@blokcert/node-red-contrib-delayed-job","version":"0.3.0","keywords":["node-red"],"author":{"name":"caspar.wei"},"license":"MIT","_id":"@blokcert/node-red-contrib-delayed-job@0.3.0","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"homepage":"https://github.com/MingShyanWei/node-red-contrib-delayed-job#readme","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-delayed-job/issues"},"dist":{"shasum":"5140062bbe173e26863126f29b31360271a2775d","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-delayed-job/-/node-red-contrib-delayed-job-0.3.0.tgz","fileCount":13,"integrity":"sha512-DN/vtMNGnIMXon3htEnQqm0zH2Pw5GhaM0myeWRcPMZIuWYotalfd/C2EONTSnVnbZ1iahvzu/2a3ZjHIruZ1g==","signatures":[{"sig":"MEYCIQCRZh2Naie8cW/kImjQjAQ9SG1JHKHG+kMUdwUnOPqncQIhAPI7r2u91COnlMTbZSYXD79z+eDqtYES+iGEby2RNu7K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26473},"engines":{"node":">=18.0.0"},"gitHead":"e7a84ced255ffc7cb65a3df57e7fd69712c472b6","scripts":{"test":"mocha --timeout 10000 test/**/*_spec.js"},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"node-red":{"nodes":{"delayed-job":"delayed-job/delayed-job.js","delayed-job-redis":"delayed-job/delayed-job-redis.js"},"version":">=2.0.0"},"repository":{"url":"git+https://github.com/MingShyanWei/node-red-contrib-delayed-job.git","type":"git"},"_npmVersion":"11.4.2","description":"A Node-RED node for Redis-backed delayed job queues using BullMQ","directories":{},"_nodeVersion":"24.4.1","dependencies":{"bullmq":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.0","mocha":"^10.0.0","node-red":">=3.0.0","node-red-node-test-helper":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-delayed-job_0.3.0_1770747560946_0.43490192470826994","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@blokcert/node-red-contrib-delayed-job","version":"0.4.0","description":"A Node-RED node for Redis-backed delayed job queues using BullMQ","keywords":["node-red"],"author":{"name":"caspar.wei"},"repository":{"type":"git","url":"git+https://github.com/MingShyanWei/node-red-contrib-delayed-job.git"},"node-red":{"version":">=2.0.0","nodes":{"delayed-job-redis":"delayed-job/delayed-job-redis.js","delayed-job":"delayed-job/delayed-job.js","job-complete":"delayed-job/job-complete.js","job-fault":"delayed-job/job-fault.js"}},"dependencies":{"bullmq":"^5.0.0"},"devDependencies":{"node-red":">=3.0.0","node-red-node-test-helper":"^0.3.0","mocha":"^10.0.0","chai":"^4.3.0"},"scripts":{"test":"mocha --timeout 10000 test/**/*_spec.js"},"engines":{"node":">=18.0.0"},"license":"MIT","_id":"@blokcert/node-red-contrib-delayed-job@0.4.0","gitHead":"2546590342900c4a0ca78213553b12abf02df8f8","bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-delayed-job/issues"},"homepage":"https://github.com/MingShyanWei/node-red-contrib-delayed-job#readme","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-N7XS4evfnPKr37fe+oviX/7qlvw+FsksQX59+dHcMvo357g9bupKxAVhOrlNPTSgtHeOle5WI2XKiidhw4PMdQ==","shasum":"9c6d4e56eb22e894847d4ab7c0694678885f5b4a","tarball":"https://registry.npmjs.org/@blokcert/node-red-contrib-delayed-job/-/node-red-contrib-delayed-job-0.4.0.tgz","fileCount":26,"unpackedSize":54709,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCensaqKH8qQSoncK4sCq9JqOihw6uHTuAp9HqN/agK7gIgdiLqvOVnQ9eIojdfr7+1sVSLow7s4HEiCOhJZnZi0kc="}]},"_npmUser":{"name":"caspar.wei","email":"a0956050976@gmail.com"},"directories":{},"maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-contrib-delayed-job_0.4.0_1770802737770_0.08737935170844957"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-10T17:10:39.567Z","modified":"2026-02-11T09:38:58.060Z","0.1.0":"2026-02-10T17:10:39.861Z","0.1.1":"2026-02-10T17:17:04.769Z","0.2.0":"2026-02-10T17:57:02.363Z","0.2.1":"2026-02-10T18:05:10.973Z","0.3.0":"2026-02-10T18:19:21.096Z","0.4.0":"2026-02-11T09:38:57.918Z"},"bugs":{"url":"https://github.com/MingShyanWei/node-red-contrib-delayed-job/issues"},"author":{"name":"caspar.wei"},"license":"MIT","homepage":"https://github.com/MingShyanWei/node-red-contrib-delayed-job#readme","keywords":["node-red"],"repository":{"type":"git","url":"git+https://github.com/MingShyanWei/node-red-contrib-delayed-job.git"},"description":"A Node-RED node for Redis-backed delayed job queues using BullMQ","maintainers":[{"name":"caspar.wei","email":"a0956050976@gmail.com"}],"readme":"# @blokcert/node-red-contrib-delayed-job\n\nA Node-RED node for Redis-backed delayed job queues using [BullMQ](https://docs.bullmq.io/).\n\nEach node acts as both **producer** and **consumer** — messages are serialized into a Redis queue on input, and a background worker picks them up and sends them to the output.\n\n## Features\n\n- **Delayed execution** — schedule jobs to run after a specified delay\n- **Job priority** — lower number = higher priority\n- **TTL (Time-to-live)** — automatically discard expired jobs\n- **Rate limiting** — control the interval between job processing\n- **Concurrency** — process multiple jobs simultaneously\n- **Crash recovery** — jobs persist in Redis; restarting Node-RED picks up unfinished jobs\n- **Distributed workers** — multiple Node-RED instances sharing the same queue name form a worker pool\n- **Buffer support** — `Buffer` objects are preserved through serialization\n- **i18n** — English and Traditional Chinese (zh-TW)\n\n## Install\n\n```bash\ncd ~/.node-red\nnpm install @blokcert/node-red-contrib-delayed-job\n```\n\nRequires a running Redis server (or compatible, e.g. Valkey, Dragonfly).\n\n## Nodes\n\n### delayed-job\n\nThe main node. Drag it into your flow, configure the Redis connection, and wire it up.\n\n**Input:** messages are serialized and added to the Redis queue.\n\n**Output:** when a job is picked up by the worker, the deserialized message is sent out.\n\n#### Node Settings\n\n| Setting | Default | Description |\n|---|---|---|\n| Redis | (required) | Redis connection config |\n| Concurrency | 1 | Number of jobs processed simultaneously |\n| Interval | 0 ms | Minimum time between job processing (rate limit) |\n\n#### Message Properties\n\n| Property | Type | Description |\n|---|---|---|\n| `msg.delay` | number | Delay in milliseconds before the job is processed |\n| `msg.priority` | number | Job priority (lower = higher priority) |\n| `msg.ttl` | number | Time-to-live in seconds. Expired jobs are discarded. Default: 7 days |\n| `msg.keepAfter` | number | Keep job in Redis for N seconds after completion. Default: 7 days |\n\n### delayed-job-redis (Config Node)\n\nShared Redis connection configuration.\n\n| Setting | Default | Description |\n|---|---|---|\n| Host | 127.0.0.1 | Redis server hostname |\n| Port | 6379 | Redis server port |\n| Password | — | Authentication password (stored encrypted) |\n| DB | 0 | Redis database index |\n| TLS | off | Enable TLS/SSL |\n| Queue Name | default | Queue name prefix. Same name = shared queue across instances |\n\n## How It Works\n\n```\n[inject] → [delayed-job] → [debug]\n              ↕ Redis\n```\n\n1. A message arrives at the input\n2. The node serializes it (removing `_msgid`) and adds it to the BullMQ queue in Redis\n3. The background worker picks up the job, deserializes the message, and sends it to the output\n4. Node-RED assigns a new `_msgid`\n\n### Queue Isolation\n\nEach node instance gets a unique queue: `{queueName}-{nodeId}`. To share a queue across multiple Node-RED instances (distributed worker pool), use the same Queue Name in the Redis config.\n\n### Crash Recovery\n\nJobs are stored in Redis and retained for 7 days after completion by default. If Node-RED crashes or restarts, the worker will pick up any remaining jobs automatically.\n\n### Limitations\n\n- `msg.req` and `msg.res` (HTTP request/response objects) cannot be serialized and will be lost\n- Non-JSON-serializable properties will be dropped\n\n## Example Flow\n\n```json\n[\n  {\n    \"id\": \"inject1\",\n    \"type\": \"inject\",\n    \"payload\": \"hello\",\n    \"wires\": [[\"delayed1\"]]\n  },\n  {\n    \"id\": \"delayed1\",\n    \"type\": \"delayed-job\",\n    \"name\": \"my queue\",\n    \"wires\": [[\"debug1\"]]\n  },\n  {\n    \"id\": \"debug1\",\n    \"type\": \"debug\",\n    \"name\": \"output\"\n  }\n]\n```\n\n## Testing\n\nRequires a local Redis server running.\n\n```bash\nnpm test\n```\n\nSet `REDIS_HOST` and `REDIS_PORT` environment variables to use a non-default Redis server.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}