@opens/bullmq 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -88,15 +88,19 @@ var BullMQWrapper = class {
88
88
  concurrency,
89
89
  connection: connection ?? this.defaultConnection,
90
90
  removeOnComplete: {
91
- age: removeOnCompleteAge ?? 0,
92
- count: removeOnCompleteCount ?? 0
91
+ age: removeOnCompleteAge ?? 60 * 60,
92
+ count: removeOnCompleteCount ?? 20
93
93
  },
94
94
  removeOnFail: {
95
- age: removeOnFailAge ?? 0,
96
- count: removeOnFailCount ?? 0
95
+ age: removeOnFailAge ?? 60 * 60,
96
+ count: removeOnFailCount ?? 50
97
97
  }
98
98
  }
99
99
  );
100
+ worker.on("ready", () => {
101
+ console.log(`[opens/bullmq]: '${taskName}' worker is ready`);
102
+ });
103
+ worker.on("error", console.error);
100
104
  return { worker };
101
105
  }
102
106
  async publishTask(params) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/wrapper.ts","../src/default-connection.ts"],"sourcesContent":["import { BullMQWrapper } from './wrapper';\nimport { DefaultConnection } from './default-connection';\nexport const bullmq = new BullMQWrapper(DefaultConnection.getInstance());\n","import * as BullMQ from 'bullmq';\nimport { Redis } from 'ioredis';\n\nexport class BullMQWrapper {\n private taskQueues: Map<string, BullMQ.Queue> = new Map();\n\n constructor(private defaultConnection: Redis) {}\n\n public createTask(params: {\n taskName: string;\n defaultOptions: BullMQ.DefaultJobOptions;\n connection?: Redis;\n up?: (data: any, job: BullMQ.Job) => Promise<void>;\n down?: (data: any, job: BullMQ.Job, err: unknown) => Promise<void>;\n concurrency?: number;\n removeOnCompleteAge?: number;\n removeOnCompleteCount?: number;\n removeOnFailAge?: number;\n removeOnFailCount?: number;\n }) {\n const { taskName, up, down, defaultOptions, connection, concurrency } = params;\n if (this.taskQueues.has(taskName)) return;\n\n const queue = new BullMQ.Queue(taskName, {\n connection: this.defaultConnection ?? connection,\n defaultJobOptions: { backoff: { delay: 1000 * 60 * 5, type: 'fixed' }, attempts: 10, ...defaultOptions },\n });\n this.taskQueues.set(taskName, queue);\n console.debug(`[@opens/bullmq]: task queue'${taskName}' created`);\n if (!up) return { queue };\n\n const { worker } = this.createWorker({\n up,\n down,\n concurrency: concurrency ?? 1,\n ...params,\n });\n return { queue, worker };\n }\n\n public createWorker(params: {\n taskName: string;\n up: (data: any, job: BullMQ.Job) => Promise<void>;\n down?: (data: any, job: BullMQ.Job, err: unknown) => Promise<void>;\n connection?: Redis;\n concurrency: number;\n removeOnCompleteAge?: number;\n removeOnCompleteCount?: number;\n removeOnFailAge?: number;\n removeOnFailCount?: number;\n onError?: Function;\n }) {\n const {\n taskName,\n up,\n down,\n concurrency,\n connection,\n removeOnFailCount,\n removeOnCompleteAge,\n removeOnCompleteCount,\n removeOnFailAge,\n } = params;\n const registeredQueue = this.taskQueues.get(taskName);\n if (!registeredQueue) throw new Error(`No task queue for [${taskName}] found`);\n\n const worker = new BullMQ.Worker(\n taskName,\n async (job) => {\n try {\n await up(job.data, job);\n } catch (error) {\n if (down) await down(job.data, job, error);\n throw error;\n } finally {\n }\n },\n {\n concurrency,\n connection: connection ?? this.defaultConnection,\n removeOnComplete: {\n age: removeOnCompleteAge ?? 0,\n count: removeOnCompleteCount ?? 0,\n },\n removeOnFail: {\n age: removeOnFailAge ?? 0,\n count: removeOnFailCount ?? 0,\n },\n },\n );\n\n return { worker };\n }\n\n public async publishTask(params: { taskName: string; taskData: any; taskOptions: BullMQ.JobsOptions }) {\n const queue = this.taskQueues.get(params.taskName);\n if (!queue) return null;\n const job = await queue.add('', params.taskData, params.taskOptions);\n return job.asJSON();\n }\n\n public getTaskCount() {\n return this.taskQueues.size;\n }\n\n public async removeDeduplication(params: { taskName: string; deduplicationId: string }) {\n const queue = this.taskQueues.get(params.taskName);\n if (!queue) return 0;\n const result = await queue.removeDeduplicationKey(params.deduplicationId);\n return result;\n }\n}\n","import { Redis } from 'ioredis';\nexport class DefaultConnection {\n static getInstance() {\n const host = process.env.BULLMQ_REDIS_HOST;\n const port = process.env.BULLMQ_REDIS_PORT;\n if (!host) throw new Error('Environment variable ${BULLMQ_REDIS_HOST} is undefined');\n if (!port) throw new Error('Environment variable ${BULLMQ_REDIS_PORT} is undefined');\n return new Redis({ host, port: parseInt(port), maxRetriesPerRequest: null });\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/wrapper.ts","../src/default-connection.ts"],"sourcesContent":["import { BullMQWrapper } from './wrapper';\nimport { DefaultConnection } from './default-connection';\nexport const bullmq = new BullMQWrapper(DefaultConnection.getInstance());\n","import * as BullMQ from 'bullmq';\nimport { Redis } from 'ioredis';\n\nexport class BullMQWrapper {\n private taskQueues: Map<string, BullMQ.Queue> = new Map();\n\n constructor(private defaultConnection: Redis) {}\n\n public createTask(params: {\n taskName: string;\n defaultOptions: BullMQ.DefaultJobOptions;\n connection?: Redis;\n up?: (data: any, job: BullMQ.Job) => Promise<void>;\n down?: (data: any, job: BullMQ.Job, err: unknown) => Promise<void>;\n concurrency?: number;\n removeOnCompleteAge?: number;\n removeOnCompleteCount?: number;\n removeOnFailAge?: number;\n removeOnFailCount?: number;\n }) {\n const { taskName, up, down, defaultOptions, connection, concurrency } = params;\n if (this.taskQueues.has(taskName)) return;\n\n const queue = new BullMQ.Queue(taskName, {\n connection: this.defaultConnection ?? connection,\n defaultJobOptions: { backoff: { delay: 1000 * 60 * 5, type: 'fixed' }, attempts: 10, ...defaultOptions },\n });\n this.taskQueues.set(taskName, queue);\n console.debug(`[@opens/bullmq]: task queue'${taskName}' created`);\n if (!up) return { queue };\n\n const { worker } = this.createWorker({\n up,\n down,\n concurrency: concurrency ?? 1,\n ...params,\n });\n return { queue, worker };\n }\n\n public createWorker(params: {\n taskName: string;\n up: (data: any, job: BullMQ.Job) => Promise<void>;\n down?: (data: any, job: BullMQ.Job, err: unknown) => Promise<void>;\n connection?: Redis;\n concurrency: number;\n removeOnCompleteAge?: number;\n removeOnCompleteCount?: number;\n removeOnFailAge?: number;\n removeOnFailCount?: number;\n onError?: Function;\n }) {\n const {\n taskName,\n up,\n down,\n concurrency,\n connection,\n removeOnFailCount,\n removeOnCompleteAge,\n removeOnCompleteCount,\n removeOnFailAge,\n } = params;\n const registeredQueue = this.taskQueues.get(taskName);\n if (!registeredQueue) throw new Error(`No task queue for [${taskName}] found`);\n\n const worker = new BullMQ.Worker(\n taskName,\n async (job) => {\n try {\n await up(job.data, job);\n } catch (error) {\n if (down) await down(job.data, job, error);\n throw error;\n } finally {\n }\n },\n {\n concurrency,\n connection: connection ?? this.defaultConnection,\n removeOnComplete: {\n age: removeOnCompleteAge ?? 60 * 60,\n count: removeOnCompleteCount ?? 20,\n },\n removeOnFail: {\n age: removeOnFailAge ?? 60 * 60,\n count: removeOnFailCount ?? 50,\n },\n },\n );\n worker.on('ready', () => {\n console.log(`[opens/bullmq]: '${taskName}' worker is ready`);\n });\n worker.on('error', console.error);\n return { worker };\n }\n\n public async publishTask(params: { taskName: string; taskData: any; taskOptions: BullMQ.JobsOptions }) {\n const queue = this.taskQueues.get(params.taskName);\n if (!queue) return null;\n const job = await queue.add('', params.taskData, params.taskOptions);\n return job.asJSON();\n }\n\n public getTaskCount() {\n return this.taskQueues.size;\n }\n\n public async removeDeduplication(params: { taskName: string; deduplicationId: string }) {\n const queue = this.taskQueues.get(params.taskName);\n if (!queue) return 0;\n const result = await queue.removeDeduplicationKey(params.deduplicationId);\n return result;\n }\n}\n","import { Redis } from 'ioredis';\nexport class DefaultConnection {\n static getInstance() {\n const host = process.env.BULLMQ_REDIS_HOST;\n const port = process.env.BULLMQ_REDIS_PORT;\n if (!host) throw new Error('Environment variable ${BULLMQ_REDIS_HOST} is undefined');\n if (!port) throw new Error('Environment variable ${BULLMQ_REDIS_PORT} is undefined');\n return new Redis({ host, port: parseInt(port), maxRetriesPerRequest: null });\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opens/bullmq",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "A wrapper around bullmq",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",