{"_rev":"5-de00624f044fa2f0134d6e5a6556fd81","time":{"created":"2026-02-11T13:37:12.375Z","modified":"2026-02-11T13:37:12.796Z","0.1.0":"2026-02-11T08:19:59.851Z","0.3.0":"2026-02-11T12:32:35.271Z","1.0.0":"2026-02-11T13:37:12.593Z"},"_id":"@duchnvvn/job-mq-server","name":"@duchnvvn/job-mq-server","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@duchnvvn/job-mq-server","version":"1.0.0","description":"NestJS Job MQ module powered by BullMQ and ioredis.","license":"MIT","private":false,"publishConfig":{"access":"public"},"main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc -p tsconfig.json","clean":"node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"","typecheck":"tsc -p tsconfig.json --noEmit","pack:dry":"npm pack --dry-run","prepublishOnly":"npm run typecheck && npm run clean && npm run build"},"dependencies":{"bullmq":"^5.61.2","ioredis":"^5.8.1"},"peerDependencies":{"@nestjs/common":"^10.0.0 || ^11.0.0","@nestjs/core":"^10.0.0 || ^11.0.0","@nestjs/platform-socket.io":"^10.0.0 || ^11.0.0","@nestjs/websockets":"^10.0.0 || ^11.0.0","reflect-metadata":"^0.2.0","rxjs":"^7.8.0","socket.io":"^4.7.0"},"devDependencies":{"@nestjs/common":"^11.1.0","@nestjs/core":"^11.1.0","@nestjs/platform-socket.io":"^11.1.0","@nestjs/websockets":"^11.1.0","@types/node":"^22.13.5","reflect-metadata":"^0.2.2","rxjs":"^7.8.2","socket.io":"^4.8.1","typescript":"^5.7.3"},"gitHead":"3683912c709806a8c5fa194408427a29cb607ef2","_id":"@duchnvvn/job-mq-server@1.0.0","_nodeVersion":"22.17.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-Y7W4kFpdtrzYTD0mRRjzcW2sfGJ0Gf9VNdySQsBUruTADtA3ckeJPUbhSPD/rhFkdSsUqmY96xEOk9aqgZ8wGA==","shasum":"eb7333c254def964c1535a3ebebed1e0141e582a","tarball":"https://registry.npmjs.org/@duchnvvn/job-mq-server/-/job-mq-server-1.0.0.tgz","fileCount":32,"unpackedSize":85141,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGfmurnY51sUcfkwklgnhAPwA99rf9QwhgGnUTdPWePIAiA+Rj86/9Nk2iTxgiVJQBbS5HyBvdAyVd/eh31kgcHJKQ=="}]},"_npmUser":{"name":"duchnv","email":"duchnv.vn@gmail.com"},"directories":{},"maintainers":[{"name":"duchnv","email":"duchnv.vn@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/job-mq-server_1.0.0_1770817032462_0.1116031943401612"},"_hasShrinkwrap":false}},"maintainers":[{"name":"duchnv","email":"duchnv.vn@gmail.com"}],"description":"NestJS Job MQ module powered by BullMQ and ioredis.","license":"MIT","readme":"# @duchnvvn/job-mq-server\n\nNestJS module for queue-based job management with:\n\n- BullMQ + ioredis integration\n- REST APIs for job lifecycle management\n- Socket.IO websocket topics for commands + live job events\n- Optional in-module BullMQ worker processors\n- Strong defaults with low setup effort\n\n## Install\n\n```bash\nnpm install @duchnvvn/job-mq-server bullmq ioredis\n```\n\nYou also need NestJS websocket dependencies in your app:\n\n```bash\nnpm install @nestjs/websockets @nestjs/platform-socket.io socket.io\n```\n\n## Quick Start\n\n```ts\nimport { Module } from '@nestjs/common';\nimport { JobMqModule } from '@duchnvvn/job-mq-server';\n\n@Module({\n  imports: [\n    JobMqModule.forRoot({\n      redis: { host: '127.0.0.1', port: 6379 },\n      processors: [\n        {\n          name: 'send-email',\n          handler: async (job, ctx) => {\n            await ctx.throwIfCancellationRequested();\n            // business logic here\n            return { sent: true, id: job.id };\n          },\n        },\n      ],\n      worker: {\n        enabled: true,\n        concurrency: 10,\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\nREST routes are exposed under `/job-mq/*` and websocket namespace is `/job-mq`.\n\n## REST Endpoints\n\n- `POST /job-mq/jobs`\n- `GET /job-mq/jobs/:id`\n- `GET /job-mq/jobs`\n- `POST /job-mq/jobs/:id/cancel`\n- `DELETE /job-mq/jobs/:id`\n- `POST /job-mq/queue/pause`\n- `POST /job-mq/queue/resume`\n- `GET /job-mq/health`\n\n## WebSocket Topics\n\nClient -> server commands:\n\n- `jobs.create`\n- `jobs.get`\n- `jobs.list`\n- `jobs.cancel`\n- `jobs.delete`\n- `jobs.subscribe`\n- `jobs.unsubscribe`\n- `queue.pause`\n- `queue.resume`\n\nServer -> client:\n\n- `<topic>.result` command response with matching `requestId`\n- `jobs.events` queue lifecycle events\n\n## Configuration Highlights\n\n- Redis connection options (`ioredis` options)\n- Queue name and prefix\n- Default BullMQ job options\n- Worker options and processors\n- API/websocket enable switches\n- List query defaults (statuses, pagination, ordering)\n\n## Publish to Artifactory\n\n```bash\nnpm config set @job-mq:registry https://<your-artifactory>/artifactory/api/npm/<repo-name>/\nnpm publish\n```\n","readmeFilename":"README.md"}