{"_id":"@assemora/queue-bullmq","_rev":"9-c29b85c13b604c1df845d2cc10f22699","name":"@assemora/queue-bullmq","dist-tags":{"latest":"0.2.7"},"versions":{"0.1.0":{"name":"@assemora/queue-bullmq","version":"0.1.0","license":"Apache-2.0","_id":"@assemora/queue-bullmq@0.1.0","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"homepage":"https://github.com/assemora/assemora#readme","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"f03b192b05d0723d227f9af22de375623a056414","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.1.0.tgz","fileCount":19,"integrity":"sha512-pell9wMRSQlEApPoajbEcz+EYwAc95nZrezKPFMXtxJGIK+saZ0OKpPZV+Xm7ay3FbHvDJZYwrOQaDq7cW3TCg==","signatures":[{"sig":"MEYCIQC2ExT5nmYLMgo9INkb0V2fu4sVTUfDrLEMJnO1hEBRxAIhAKwJo1cr58lExpPv0kWbxXYJlafKzt7N6wsXyT0hJUnZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69320},"main":"./dist/index.js","type":"module","_from":"file:assemora-queue-bullmq-0.1.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"_resolved":"/private/var/folders/3_/pn3k9dwn7lv8q_fy5h6lgnzr0000gn/T/725c5987f573a99429d76d0d791cbdf3/assemora-queue-bullmq-0.1.0.tgz","_integrity":"sha512-pell9wMRSQlEApPoajbEcz+EYwAc95nZrezKPFMXtxJGIK+saZ0OKpPZV+Xm7ay3FbHvDJZYwrOQaDq7cW3TCg==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.3.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"_nodeVersion":"24.1.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.1.0","@assemora/schema":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/queue-bullmq_0.1.0_1788602356878_0.07793655122056475","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@assemora/queue-bullmq","version":"0.2.0","license":"Apache-2.0","_id":"@assemora/queue-bullmq@0.2.0","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"homepage":"https://github.com/assemora/assemora#readme","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"c6bf8023e492a6dbff0b372fee6b40615d0dcacf","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.2.0.tgz","fileCount":19,"integrity":"sha512-ZKjpZzssusvWG01//GXHPYV7wnd5Ck7NjwTaRMjRLJXR/+eJfe2x/fI5nUwH/uIvXsdnN0J40UIvhD3EMMVYpg==","signatures":[{"sig":"MEUCIDqo4pA1ePiN5TYDahbXjZkx8iWsvaAASMBP/hPyr9FvAiEA8pwLluQv8VQirt2bNserMa7z7sjHa36ULvyOLtDC5tk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69320},"main":"./dist/index.js","type":"module","_from":"file:assemora-queue-bullmq-0.2.0.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"_resolved":"/private/var/folders/3_/pn3k9dwn7lv8q_fy5h6lgnzr0000gn/T/be033fef8b57c380c87a6cda2945fc94/assemora-queue-bullmq-0.2.0.tgz","_integrity":"sha512-ZKjpZzssusvWG01//GXHPYV7wnd5Ck7NjwTaRMjRLJXR/+eJfe2x/fI5nUwH/uIvXsdnN0J40UIvhD3EMMVYpg==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.3.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"_nodeVersion":"24.1.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.2.0","@assemora/schema":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/queue-bullmq_0.2.0_1788606326588_0.4559239229867962","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@assemora/queue-bullmq","version":"0.2.1","license":"Apache-2.0","_id":"@assemora/queue-bullmq@0.2.1","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"homepage":"https://github.com/assemora/assemora#readme","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"b4f0ac455fd9b2c4f2c69563edd54f4948241098","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.2.1.tgz","fileCount":19,"integrity":"sha512-2J+CgBVy1hHE4A+H5O8/78DfyUm+ZP/xZYOW3Vefux/nAslR83+KbRdPmJ+v7rE7SOFu0KbWi7NkZGlod3U5HA==","signatures":[{"sig":"MEUCIC45bsuQqawlnM5s4LjwCywgjaFTy4ho0vCAiaMbHQqwAiEAvXFPw1+6XNkduc4yYFiGGYNyz59v5u7Tq+tzMW35/Jw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69320},"main":"./dist/index.js","type":"module","_from":"file:assemora-queue-bullmq-0.2.1.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"_resolved":"/private/var/folders/3_/pn3k9dwn7lv8q_fy5h6lgnzr0000gn/T/a2f07cf4fc9ea8084c4be778d996d7e9/assemora-queue-bullmq-0.2.1.tgz","_integrity":"sha512-2J+CgBVy1hHE4A+H5O8/78DfyUm+ZP/xZYOW3Vefux/nAslR83+KbRdPmJ+v7rE7SOFu0KbWi7NkZGlod3U5HA==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.3.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"_nodeVersion":"24.1.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.2.1","@assemora/schema":"0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/queue-bullmq_0.2.1_1788610819977_0.8794169529232807","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@assemora/queue-bullmq","version":"0.2.2","license":"Apache-2.0","_id":"@assemora/queue-bullmq@0.2.2","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"homepage":"https://github.com/assemora/assemora#readme","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"cb37e012e1f16beea7c97752e138eda502d5ad7d","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.2.2.tgz","fileCount":19,"integrity":"sha512-5oRYvWxyXCHsgJQFdShLlZh7NbFzeIsc1RlC063BOIC3cWvTrqaf+Hv2Iv7zRS1O5954fwRCzSFNcjNc6YDcSw==","signatures":[{"sig":"MEYCIQDzZWFseZWUzpNkP8ewb8nJUMFkT+LUFhtzvoLdJW5GagIhANF/dN0pmbectVxFE02ccbQT2YQcr/Yvy3umNXABMa3R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69320},"main":"./dist/index.js","type":"module","_from":"file:assemora-queue-bullmq-0.2.2.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"_resolved":"/private/var/folders/3_/pn3k9dwn7lv8q_fy5h6lgnzr0000gn/T/966b9a1617a2e269eee1093886dd85f3/assemora-queue-bullmq-0.2.2.tgz","_integrity":"sha512-5oRYvWxyXCHsgJQFdShLlZh7NbFzeIsc1RlC063BOIC3cWvTrqaf+Hv2Iv7zRS1O5954fwRCzSFNcjNc6YDcSw==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.3.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"_nodeVersion":"24.1.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.2.2","@assemora/schema":"0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/queue-bullmq_0.2.2_1788618271941_0.12124759423195286","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@assemora/queue-bullmq","version":"0.2.3","license":"Apache-2.0","_id":"@assemora/queue-bullmq@0.2.3","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"homepage":"https://github.com/assemora/assemora#readme","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"bcba07a31f1bdc45c7defbc680fcbfd0f1d03a14","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.2.3.tgz","fileCount":19,"integrity":"sha512-enIMp3aSAK0Gm/h8Kspa4AsYdXKuYmbUEFvkDM97JgZ4lTARYXm8RzwtX2xUeDmpSLm42mOxygj+K6bCOdFbjw==","signatures":[{"sig":"MEYCIQDLqyhBJAm9ab0OlNLOUlsC4kFKGtFACg9HOqAfZkkIoQIhAN3T7itaZeLCo/l3zSQ9eydWOglRJJEBsadTZJTWfxw8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69320},"main":"./dist/index.js","type":"module","_from":"file:assemora-queue-bullmq-0.2.3.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"_resolved":"/tmp/32b4ca881bf45938fd1ce9bbdfa183fb/assemora-queue-bullmq-0.2.3.tgz","_integrity":"sha512-enIMp3aSAK0Gm/h8Kspa4AsYdXKuYmbUEFvkDM97JgZ4lTARYXm8RzwtX2xUeDmpSLm42mOxygj+K6bCOdFbjw==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.17.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"_nodeVersion":"24.19.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.2.3","@assemora/schema":"0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/queue-bullmq_0.2.3_1788960533600_0.27274164804374346","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@assemora/queue-bullmq","version":"0.2.4","license":"Apache-2.0","_id":"@assemora/queue-bullmq@0.2.4","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"homepage":"https://github.com/assemora/assemora#readme","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"1ab85e11238e6498875445f4b0113ee48c64efca","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.2.4.tgz","fileCount":19,"integrity":"sha512-VJENfqTc/2CkZ1GjiQ3Aj9P8zfeOMl9oEFHMX48C86RW98e3yZNM1r/3EZR9Q4DHfdtWNb+SM3mVRzgs7EsvAg==","signatures":[{"sig":"MEUCIGfTDTCKhwUVCFAuz5QmjK4DjLR18K7WkwevZJGzuQj3AiEAjXrnQovngMCLM+YrtFRwWlUnCRzzKiyjytkaOHc3brg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69320},"main":"./dist/index.js","type":"module","_from":"file:assemora-queue-bullmq-0.2.4.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"_resolved":"/private/var/folders/3_/pn3k9dwn7lv8q_fy5h6lgnzr0000gn/T/d1577253e4b53d38dcf2f7e9f1a9c4f7/assemora-queue-bullmq-0.2.4.tgz","_integrity":"sha512-VJENfqTc/2CkZ1GjiQ3Aj9P8zfeOMl9oEFHMX48C86RW98e3yZNM1r/3EZR9Q4DHfdtWNb+SM3mVRzgs7EsvAg==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.3.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"_nodeVersion":"24.1.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.2.4","@assemora/schema":"0.2.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/queue-bullmq_0.2.4_1788980033174_0.6310103574716888","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@assemora/queue-bullmq","version":"0.2.5","license":"Apache-2.0","_id":"@assemora/queue-bullmq@0.2.5","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"homepage":"https://github.com/assemora/assemora#readme","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"7110371166fcd3cd1f42e1b59a97c97734dbc08c","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.2.5.tgz","fileCount":19,"integrity":"sha512-9Jx9JdgZ2T7dUo+lNNr6+IS9+AY3IFkaQ8UsQEY76oxN6GgReWHSR9bFnbQpEmjZyZX8AFLYsia87DL8K8fMjw==","signatures":[{"sig":"MEUCIQCMuYk3tvXdhT4yIrUNvKhP4Xl5Lo8IDEwyWgsBNyGcLgIgCWaf9RvtI/PRdBxy6E/agZM5X3fI6ql1lgqp0rEiCFc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69320},"main":"./dist/index.js","type":"module","_from":"file:assemora-queue-bullmq-0.2.5.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"_resolved":"/private/var/folders/3_/pn3k9dwn7lv8q_fy5h6lgnzr0000gn/T/01b0e3d5de55405e28ba29dd8e722ab1/assemora-queue-bullmq-0.2.5.tgz","_integrity":"sha512-9Jx9JdgZ2T7dUo+lNNr6+IS9+AY3IFkaQ8UsQEY76oxN6GgReWHSR9bFnbQpEmjZyZX8AFLYsia87DL8K8fMjw==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.3.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"_nodeVersion":"24.1.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.2.5","@assemora/schema":"0.2.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/queue-bullmq_0.2.5_1789060958426_0.966494006276416","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@assemora/queue-bullmq","version":"0.2.6","license":"Apache-2.0","_id":"@assemora/queue-bullmq@0.2.6","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"homepage":"https://github.com/assemora/assemora#readme","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"bea0cc1351ddfda148e6a2a89458f53e0f7b85d5","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.2.6.tgz","fileCount":19,"integrity":"sha512-Rm79o54xTNExM7EY5bGmbNutwNfvdXcT1lpldUjrwDyNaRSs5ZK8ccikWnOLjOqk71bTx72V2ajKb5KJwkv2Pg==","signatures":[{"sig":"MEUCIQDzf7L9MJFu8BHhIKDrXk//qdRPOY3ph35H58rkr2Na9wIgUNU0Het90IUWW/6VNOoD7agdMyPSqj7ueQ2POfm1jCs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69320},"main":"./dist/index.js","type":"module","_from":"file:assemora-queue-bullmq-0.2.6.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"_resolved":"/private/var/folders/3_/pn3k9dwn7lv8q_fy5h6lgnzr0000gn/T/9f3c91d21ef461f5dd0539d4c89d9c6b/assemora-queue-bullmq-0.2.6.tgz","_integrity":"sha512-Rm79o54xTNExM7EY5bGmbNutwNfvdXcT1lpldUjrwDyNaRSs5ZK8ccikWnOLjOqk71bTx72V2ajKb5KJwkv2Pg==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.3.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"_nodeVersion":"24.1.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.2.6","@assemora/schema":"0.2.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"tmp":"tmp/queue-bullmq_0.2.6_1789064506915_0.11905058724504092","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"_id":"@assemora/queue-bullmq@0.2.7","bugs":{"url":"https://github.com/assemora/assemora/issues"},"dist":{"shasum":"e8936916d928fa050742dd0579c2ddfd1fe0b8f3","tarball":"https://registry.npmjs.org/@assemora/queue-bullmq/-/queue-bullmq-0.2.7.tgz","fileCount":19,"integrity":"sha512-UgSylgiLxpRsqiUaYVHU3RazoPVoFesyVCyUOmqTDsDtcfVUG1WISmBtliyiyj96k5KNqy4q1mKWOCVbnyWUwQ==","signatures":[{"sig":"MEQCID35clTwa772jMNcm7paQH+8CNWMROw6ObcMtmtoyOceAiBvYkZ6Nw1s2uAuEir1ERX79eM4sVQyRLPvfuA7+HrcnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICmoII3GQRWcYFjLWIMbH+HgWRzgGaa8MThFiIrPEqFdAiEA97bIXNY1X001f/weWzv+ainOq/JP1bFOImluv0+bch8="}],"unpackedSize":69320},"main":"./dist/index.js","name":"@assemora/queue-bullmq","type":"module","_from":"file:assemora-queue-bullmq-0.2.7.tgz","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"license":"Apache-2.0","scripts":{"build":"tsc -b tsconfig.build.json","clean":"rm -rf dist *.tsbuildinfo","typecheck":"tsc -p tsconfig.json --noEmit"},"version":"0.2.7","_npmUser":{"name":"artemmelnik","email":"artemmelnik989@gmail.com"},"homepage":"https://github.com/assemora/assemora#readme","_resolved":"/tmp/b6e2a8096cfd1e655f8f815396c1f2dc/assemora-queue-bullmq-0.2.7.tgz","_integrity":"sha512-UgSylgiLxpRsqiUaYVHU3RazoPVoFesyVCyUOmqTDsDtcfVUG1WISmBtliyiyj96k5KNqy4q1mKWOCVbnyWUwQ==","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"_npmVersion":"11.17.0","description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","directories":{},"maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"_nodeVersion":"24.19.0","dependencies":{"bullmq":"5.81.3","@assemora/core":"0.2.7","@assemora/schema":"0.2.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"24.13.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/queue-bullmq_0.2.7_1790692144436_0.8364696082493639"}}},"time":{"created":"2026-09-05T09:59:16.706Z","modified":"2026-09-29T14:29:04.818Z","0.1.0":"2026-09-05T09:59:16.996Z","0.2.0":"2026-09-05T11:05:26.722Z","0.2.1":"2026-09-05T12:20:20.113Z","0.2.2":"2026-09-05T14:24:32.283Z","0.2.3":"2026-09-09T13:28:53.743Z","0.2.4":"2026-09-09T18:53:53.306Z","0.2.5":"2026-09-10T17:22:38.560Z","0.2.6":"2026-09-10T18:21:47.052Z","0.2.7":"2026-09-29T14:29:04.565Z"},"bugs":{"url":"https://github.com/assemora/assemora/issues"},"license":"Apache-2.0","homepage":"https://github.com/assemora/assemora#readme","repository":{"url":"git+https://github.com/assemora/assemora.git","type":"git","directory":"packages/queue-bullmq"},"description":"BullMQ queue adapter: durable jobs on Redis (BullMQ inside)","maintainers":[{"name":"artemmelnik","email":"artemmelnik989@gmail.com"}],"readme":"# `@assemora/queue-bullmq`\n\nThe queue behind `dispatch()` (SPEC.md §82).\n\n```ts\nconst queue = bullQueue({\n  connection: { url: process.env.REDIS_URL },\n  queue: 'assemora',\n})\n\nconst app = createApplication({ queue, modules, authorization })\n```\n\nThat is the whole of the producer side. `dispatch(GenerateSitemap({ pageId }))` now\nwrites to Redis instead of running the job in the request that scheduled it, and\nnothing above this line changes — the adapter implements the `QueuePort` that\n`@assemora/core` declares, and core never learns what Redis is (ADR-0023).\n\nBullMQ and ioredis are declared here and nowhere else in the repository, which\n`pnpm boundaries` enforces (SPEC.md §8, §125.1). Neither appears in a signature this\npackage exports: no `Job`, no `Worker`, no `ConnectionOptions`.\n\n## The worker is four lines, because core owns the hard part\n\n```ts\nconst app = await createApplication({ queue, modules, authorization }).boot()\nconst worker = await queue.work({ concurrency: 8 })\n\nprocess.on('SIGTERM', async () => {\n  await worker.stop()\n  await app.shutdown()\n})\n```\n\n`work()` resolves once Redis has answered, so a worker that cannot reach the queue\nfails at startup rather than sitting there consuming nothing. `stop()` stops taking\nnew jobs and waits for the one in flight — an abandoned job is re-delivered when its\nlock expires and runs twice.\n\n## At least once, and what that costs\n\nA queue delivers **at least once**. Assemora does not pretend otherwise, and neither\nshould a handler: **write every job so that running it twice is the same as running it\nonce.**\n\nThe duplicate has nothing to do with `retries`. A worker holds a lock on the job it is\nrunning and renews it as it works; a worker that is *killed* rather than stopped —\n`SIGKILL`, an OOM kill, a machine that went away — renews nothing, and the job is\ninvisible to every other worker until that lock expires. Recovery is a scan on the\nsame interval, so the wait is between one and two lock durations:\n\n> **A hard-killed worker leaves the job it was holding unavailable for 30 to 60\n> seconds. Then another worker runs it again, from the beginning, even at\n> `retries: 0`.**\n\n`retries: 0` means *do not try again after a failure*. It is not a delivery count, and\nno setting anywhere makes one.\n\n`work({ reclaimAfterMs })` is the lever on the wait:\n\n```ts\nconst worker = await queue.work({ concurrency: 8, reclaimAfterMs: 10_000 })\n```\n\nLower it and a crashed worker's jobs come back sooner — at the price that a worker\nwhich blocks its own event loop for longer than the value has its job taken away and\nrun a second time while the first is still going. Raise it and a crash costs more time\nbefore the work is picked up. Neither end removes the duplicate; only an idempotent\nhandler does.\n\n`stop()` is the case where nothing is lost: it waits for the job in flight, which is\nexactly why a graceful stop is worth wiring to `SIGTERM`.\n\nA worker process has to build the application: `runJob` finds the job by name in the\nregistry the application filled, and re-validates the payload against that\ndeclaration. What is left for this package is Redis, retries and the graceful stop.\n\nThe port is `push` and nothing else. `work()` lives on the adapter rather than on the\nport because core never pulls — a stage of the mutation path pushes, and a method\ncore would never call is not a seam (ADR-0023).\n\n## Retries, and where an exhausted job goes\n\nA job declares `retries`, and this adapter reads it as *how many times to try again\nafter a failure*: `retries: 3` is four attempts. Between them the delay doubles from\n`retryDelayMs` (one second by default) with half of each delay randomised — a hundred\njobs that all failed on the same outage must not retry in the same millisecond. It\nbounds failures and nothing else; a worker that died holding the job is the section\nabove.\n\nEvery attempt is reported through the logger, because a queue fails between requests\nwith nobody waiting:\n\n| What happened | Level | Message |\n| --- | --- | --- |\n| Failed, attempts left | `warn` | `Job failed, the queue will try again` |\n| Failed, none left | `error` | `Job exhausted its retries and stays in the failed set` |\n| Connection dropped | `error` | `The queue connection failed` |\n\nAn exhausted job **stays in the queue's failed set**, with the reason, the attempt\ncount and the request id that scheduled it. It is not deleted and it is not aged out:\nthe work is gone either way, and losing the explanation as well is the failure this\npackage exists to prevent. Read it back without naming BullMQ:\n\n```ts\nfor (const failure of await queue.failed()) {\n  console.error(failure.name, failure.requestId, failure.reason)\n}\n```\n\nCompleted jobs are the opposite case — a receipt, not a record, since the audit log\nalready holds what the job's commands did (SPEC.md §67). They are kept for a day, and\nat most a thousand of them, so Redis does not grow without a bound nobody set.\n\nNothing is treated as unretryable, deliberately. BullMQ can fail a job on the first\nattempt, and it is tempting to do that for a payload the application refuses — but\nduring a rolling deploy an old worker legitimately does not know a new job's name yet,\nand dead-lettering that would destroy real work to save three cheap attempts.\n\n## What a payload may contain\n\nA payload crosses a queue as JSON, so it may hold strings, finite numbers, booleans,\n`null`, arrays, plain objects — and dates.\n\nDates are the one exception, and they are exact rather than lossy: a `Date` is written\nas its ISO string, which is what `timestamp().toJsonSchema()` already declares a\ntimestamp to be on the wire, and `runJob` re-parses the payload against the job's own\ninput schema on arrival — so a handler that declared `timestamp()` is handed the\n`Date` it declared.\n\nEverything else is refused when the job is pushed, naming the value and its path:\n\n```\n\"sitemap.generate\" cannot be queued: it carries a Map at payload.settings.seen.\n```\n\n`undefined`, `NaN`, `Infinity`, a `BigInt`, a function, a `Map`, a `Set`, a class\ninstance and a cycle are all refused. Each of them either vanishes or comes back as\nsomething else, and discovering that in a worker at three in the morning is the\nscenario the check exists to remove.\n\nOne seam is worth knowing: a job dispatched **inside a command** is held until the\ntransaction commits, and by then the caller has gone — so core logs a push failure\nrather than throwing it, and an unqueueable payload there is an `error` line, not a\nrejected command. Dispatching outside a command rejects at the call.\n\n## The envelope\n\n```ts\n{ name, payload, retries, requestId, actor?, dispatchedFrom }\n```\n\nThe actor and the request id survive Redis, so the job's own commands are authorized\nas the person whose action scheduled them and the audit log says who. The source does\nnot: a worker runs with `source: 'job'`, because a row it writes was not written by\nthe studio click that scheduled it, and `dispatchedFrom` is what remains of where the\nwork came from.\n\nComing back out the envelope is untrusted input like any other — anything holding the\nconnection string can write to that list — so it is parsed against a declared shape\nbefore a handler sees it, and a job that is not one fails as `MALFORMED_JOB` with the\noffending fields named.\n\n## Errors\n\nA failure to reach the queue is an `AssemoraError` with a code a caller can act on:\n\n| Code | Status | Means |\n| --- | --- | --- |\n| `QUEUE_UNAVAILABLE` | 503 | Not there, or not answering within `timeoutMs`. Try again |\n| `QUEUE_DENIED` | 500 | The credentials were refused. Fix the deployment |\n| `QUEUE_ERROR` | 500 | Redis rejected the operation |\n| `UNQUEUEABLE_PAYLOAD` | 422 | The payload would not survive JSON |\n| `MALFORMED_JOB` | 422 | What came back off the queue is not an envelope |\n\nThe connection string never appears in any of them. ioredis quotes the URL it was\ngiven in some connection errors, so every message and every cause is put through a\nredactor built from the adapter's own configuration — knowing the exact secret is\nwhat makes that precise rather than hopeful (SPEC.md §85).\n\n`timeoutMs` (five seconds by default) bounds pushing and starting a worker, because\nioredis will otherwise queue a command against a dead connection indefinitely and a\nrequest would hang instead of failing. It deliberately does not bound `stop()`. A\ntimed-out push may still land — nothing un-sends a command already on the wire — which\nis one more reason a job has to be idempotent: a queue delivers at least once.\n\n## Tested against a real Redis\n\n`tests/integration/queue-bullmq.test.ts` pushes a job, runs a worker, and asserts it\nran with the actor, the request id and the source the envelope promised; makes one\nfail and asserts it retried exactly as often as it asked and then stopped; and stops a\nworker mid-job to prove the job finished. An adapter tested only against a fake is an\nadapter nobody has run.\n\n`src/queue.test.ts` covers the three things that live *inside* `work()`, where no\ncaller can see them: that a forged envelope written straight to Redis is refused\nbefore any handler sees it, that a worker which cannot reach Redis fails at startup\ninstead of consuming nothing, and — by taking a worker's lock away under it — that a\n`retries: 0` job really is delivered twice.\n\nIt skips itself when nothing is reachable at `ASSEMORA_TEST_REDIS_URL`, and\n`ASSEMORA_REQUIRE_REDIS=1` turns that skip into a failure.\n\n## Workspace dependencies\n\n- `@assemora/schema`\n- `@assemora/core`\n","readmeFilename":"README.md"}