equipped 5.1.5 → 5.1.6

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/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [5.1.6](https://github.com/kevinand11/equipped/compare/v5.1.5...v5.1.6) (2025-12-07)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * custom id for bull jobs ([f56fb23](https://github.com/kevinand11/equipped/commit/f56fb23a12fc2bafe5d58ea062768a2f64bb83dc))
11
+
5
12
  ### [5.1.5](https://github.com/kevinand11/equipped/compare/v5.1.4...v5.1.5) (2025-12-07)
6
13
 
7
14
 
@@ -49,7 +49,7 @@ class RedisJob {
49
49
  this.#crons = crons;
50
50
  }
51
51
  static #getNewId() {
52
- return [Date.now(), _indexcjs3.Random.string()].join(":");
52
+ return [Date.now(), _indexcjs3.Random.string()].join("_");
53
53
  }
54
54
  async addDelayed(data, delayInMs) {
55
55
  const job = await this.#queue.add("DelayedJob" /* DelayedJob */, data, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/jobs/types/redis.ts","/home/runner/work/equipped/equipped/dist/cjs/jobs/types/redis.cjs"],"names":["JobNames"],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/jobs/types/redis.cjs","sourcesContent":["import { Queue, Worker } from 'bullmq'\n\nimport { RedisCache } from '../../cache/types/redis'\nimport { Instance } from '../../instance'\nimport type { CronTypes, DelayedJobs, RepeatableJobs } from '../../types'\nimport { Random } from '../../utilities'\nimport type { RedisJobConfig } from '../pipes'\n\nenum JobNames {\n\tCronJob = 'CronJob',\n\tRepeatableJob = 'RepeatableJob',\n\tDelayedJob = 'DelayedJob',\n}\n\ntype Cron = CronTypes[keyof CronTypes]\ntype DelayedJobEvent = DelayedJobs[keyof DelayedJobs]\ntype RepeatableJobEvent = RepeatableJobs[keyof RepeatableJobs]\ntype DelayedJobCallback = (data: DelayedJobEvent) => Promise<void> | void\ntype CronJobCallback = (name: CronTypes[keyof CronTypes]) => Promise<void> | void\ntype RepeatableJobCallback = (data: RepeatableJobEvent) => Promise<void> | void\n\ntype JobCallbacks = { onDelayed?: DelayedJobCallback; onCron?: CronJobCallback; onRepeatable?: RepeatableJobCallback }\n\nexport class RedisJob {\n\t#queue: Queue\n\t#callbacks: JobCallbacks = {}\n\t#crons: { name: Cron; cron: string }[] = []\n\n\tconstructor(config: RedisJobConfig) {\n\t\tconst redisCache = new RedisCache(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tthis.#queue = new Queue(config.queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tconfig.queueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.#callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.#callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.#callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.client.options, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.#cleanup()\n\t\t\t\tawait Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\t\tworker.run()\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n\n\tset callbacks(callbacks: JobCallbacks) {\n\t\tthis.#callbacks = callbacks\n\t}\n\n\tset crons(crons: { name: Cron; cron: string }[]) {\n\t\tthis.#crons = crons\n\t}\n\n\tstatic #getNewId() {\n\t\treturn [Date.now(), Random.string()].join(':')\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string): Promise<string> {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n}\n",null]}
1
+ {"version":3,"sources":["../../../../src/jobs/types/redis.ts","/home/runner/work/equipped/equipped/dist/cjs/jobs/types/redis.cjs"],"names":["JobNames"],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/jobs/types/redis.cjs","sourcesContent":["import { Queue, Worker } from 'bullmq'\n\nimport { RedisCache } from '../../cache/types/redis'\nimport { Instance } from '../../instance'\nimport type { CronTypes, DelayedJobs, RepeatableJobs } from '../../types'\nimport { Random } from '../../utilities'\nimport type { RedisJobConfig } from '../pipes'\n\nenum JobNames {\n\tCronJob = 'CronJob',\n\tRepeatableJob = 'RepeatableJob',\n\tDelayedJob = 'DelayedJob',\n}\n\ntype Cron = CronTypes[keyof CronTypes]\ntype DelayedJobEvent = DelayedJobs[keyof DelayedJobs]\ntype RepeatableJobEvent = RepeatableJobs[keyof RepeatableJobs]\ntype DelayedJobCallback = (data: DelayedJobEvent) => Promise<void> | void\ntype CronJobCallback = (name: CronTypes[keyof CronTypes]) => Promise<void> | void\ntype RepeatableJobCallback = (data: RepeatableJobEvent) => Promise<void> | void\n\ntype JobCallbacks = { onDelayed?: DelayedJobCallback; onCron?: CronJobCallback; onRepeatable?: RepeatableJobCallback }\n\nexport class RedisJob {\n\t#queue: Queue\n\t#callbacks: JobCallbacks = {}\n\t#crons: { name: Cron; cron: string }[] = []\n\n\tconstructor(config: RedisJobConfig) {\n\t\tconst redisCache = new RedisCache(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tthis.#queue = new Queue(config.queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tconfig.queueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.#callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.#callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.#callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.client.options, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.#cleanup()\n\t\t\t\tawait Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\t\tworker.run()\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n\n\tset callbacks(callbacks: JobCallbacks) {\n\t\tthis.#callbacks = callbacks\n\t}\n\n\tset crons(crons: { name: Cron; cron: string }[]) {\n\t\tthis.#crons = crons\n\t}\n\n\tstatic #getNewId() {\n\t\treturn [Date.now(), Random.string()].join('_')\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string): Promise<string> {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n}\n",null]}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } async function _asyncOptionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _bullmq = require('bullmq');var _redismincjs = require('../../cache/types/redis.min.cjs');var _indexmincjs = require('../../instance/index.min.cjs');var _indexmincjs3 = require('../../utilities/index.min.cjs');var c=(t=>(t.CronJob="CronJob",t.RepeatableJob="RepeatableJob",t.DelayedJob="DelayedJob",t))(c||{});class s{#e;#a={};#o=[];constructor(e){const a=new (0, _redismincjs.RedisCache)(e.redisConfig,{maxRetriesPerRequest:null,enableReadyCheck:!1});this.#e=new (0, _bullmq.Queue)(e.queueName,{connection:a.client.options,skipVersionCheck:!0});const t=new (0, _bullmq.Worker)(e.queueName,async o=>{switch(o.name){case"DelayedJob":return _optionalChain([this, 'access', _ => _.#a, 'access', _2 => _2.onDelayed, 'optionalCall', _3 => _3(o.data)]);case"CronJob":return _optionalChain([this, 'access', _4 => _4.#a, 'access', _5 => _5.onCron, 'optionalCall', _6 => _6(o.data.type)]);case"RepeatableJob":return _optionalChain([this, 'access', _7 => _7.#a, 'access', _8 => _8.onRepeatable, 'optionalCall', _9 => _9(o.data)])}},{connection:a.client.options,autorun:!1,skipVersionCheck:!0});_indexmincjs.Instance.on("start",async()=>{await this.#n(),await Promise.all(this.#o.map(({cron:o,name:n})=>this.#s(n,o))),t.run()},10)}set callbacks(e){this.#a=e}set crons(e){this.#o=e}static#t(){return[Date.now(),_indexmincjs3.Random.string()].join(":")}async addDelayed(e,a){return(await this.#e.add("DelayedJob",e,{jobId:s.#t(),delay:a,removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async addRepeatable(e,a,t){returnawait _asyncNullishCoalesce(await _asyncOptionalChain([(await this.#e.add("RepeatableJob",e,{jobId:s.#t(),repeat:{pattern:a,...t?{tz:t}:{}},removeOnComplete:!0,backoff:1e3,attempts:3})), 'access', async _10 => _10.opts, 'optionalAccess', async _11 => _11.repeat, 'optionalAccess', async _12 => _12.key]), async () => (""))}async removeDelayed(e){const a=await this.#e.getJob(e);a&&await a.remove()}async retryAllFailedJobs(){const e=await this.#e.getFailed();await Promise.all(e.map(a=>a.retry()))}async#s(e,a){return(await this.#e.add("CronJob",{type:e},{jobId:s.#t(),repeat:{pattern:a},removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async#n(){await this.retryAllFailedJobs();const e=await this.#e.getJobSchedulers();await Promise.all(e.map(a=>this.#e.removeJobScheduler(a.key)))}}exports.RedisJob = s;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } async function _asyncOptionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _bullmq = require('bullmq');var _redismincjs = require('../../cache/types/redis.min.cjs');var _indexmincjs = require('../../instance/index.min.cjs');var _indexmincjs3 = require('../../utilities/index.min.cjs');var c=(t=>(t.CronJob="CronJob",t.RepeatableJob="RepeatableJob",t.DelayedJob="DelayedJob",t))(c||{});class s{#e;#a={};#o=[];constructor(e){const a=new (0, _redismincjs.RedisCache)(e.redisConfig,{maxRetriesPerRequest:null,enableReadyCheck:!1});this.#e=new (0, _bullmq.Queue)(e.queueName,{connection:a.client.options,skipVersionCheck:!0});const t=new (0, _bullmq.Worker)(e.queueName,async o=>{switch(o.name){case"DelayedJob":return _optionalChain([this, 'access', _ => _.#a, 'access', _2 => _2.onDelayed, 'optionalCall', _3 => _3(o.data)]);case"CronJob":return _optionalChain([this, 'access', _4 => _4.#a, 'access', _5 => _5.onCron, 'optionalCall', _6 => _6(o.data.type)]);case"RepeatableJob":return _optionalChain([this, 'access', _7 => _7.#a, 'access', _8 => _8.onRepeatable, 'optionalCall', _9 => _9(o.data)])}},{connection:a.client.options,autorun:!1,skipVersionCheck:!0});_indexmincjs.Instance.on("start",async()=>{await this.#n(),await Promise.all(this.#o.map(({cron:o,name:n})=>this.#s(n,o))),t.run()},10)}set callbacks(e){this.#a=e}set crons(e){this.#o=e}static#t(){return[Date.now(),_indexmincjs3.Random.string()].join("_")}async addDelayed(e,a){return(await this.#e.add("DelayedJob",e,{jobId:s.#t(),delay:a,removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async addRepeatable(e,a,t){returnawait _asyncNullishCoalesce(await _asyncOptionalChain([(await this.#e.add("RepeatableJob",e,{jobId:s.#t(),repeat:{pattern:a,...t?{tz:t}:{}},removeOnComplete:!0,backoff:1e3,attempts:3})), 'access', async _10 => _10.opts, 'optionalAccess', async _11 => _11.repeat, 'optionalAccess', async _12 => _12.key]), async () => (""))}async removeDelayed(e){const a=await this.#e.getJob(e);a&&await a.remove()}async retryAllFailedJobs(){const e=await this.#e.getFailed();await Promise.all(e.map(a=>a.retry()))}async#s(e,a){return(await this.#e.add("CronJob",{type:e},{jobId:s.#t(),repeat:{pattern:a},removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async#n(){await this.retryAllFailedJobs();const e=await this.#e.getJobSchedulers();await Promise.all(e.map(a=>this.#e.removeJobScheduler(a.key)))}}exports.RedisJob = s;
2
2
  //# sourceMappingURL=redis.min.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/jobs/types/redis.ts"],"names":["config","redisCache","RedisCache","Queue","job","#callbacks","#cleanup","#crons","cron","#addCron","name","worker","callbacks","crons","#getNewId","Random","data","delayInMs","tz","#queue","jobId","failedJobs","RedisJob","repeatableJobs"],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/jobs/types/redis.min.cjs","sourcesContent":["import { Queue, Worker } from 'bullmq'\n\nimport { RedisCache } from '../../cache/types/redis'\nimport { Instance } from '../../instance'\nimport type { CronTypes, DelayedJobs, RepeatableJobs } from '../../types'\nimport { Random } from '../../utilities'\nimport type { RedisJobConfig } from '../pipes'\n\nenum JobNames {\n\tCronJob = 'CronJob',\n\tRepeatableJob = 'RepeatableJob',\n\tDelayedJob = 'DelayedJob',\n}\n\ntype Cron = CronTypes[keyof CronTypes]\ntype DelayedJobEvent = DelayedJobs[keyof DelayedJobs]\ntype RepeatableJobEvent = RepeatableJobs[keyof RepeatableJobs]\ntype DelayedJobCallback = (data: DelayedJobEvent) => Promise<void> | void\ntype CronJobCallback = (name: CronTypes[keyof CronTypes]) => Promise<void> | void\ntype RepeatableJobCallback = (data: RepeatableJobEvent) => Promise<void> | void\n\ntype JobCallbacks = { onDelayed?: DelayedJobCallback; onCron?: CronJobCallback; onRepeatable?: RepeatableJobCallback }\n\nexport class RedisJob {\n\t#queue: Queue\n\t#callbacks: JobCallbacks = {}\n\t#crons: { name: Cron; cron: string }[] = []\n\n\tconstructor(config: RedisJobConfig) {\n\t\tconst redisCache = new RedisCache(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tthis.#queue = new Queue(config.queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tconfig.queueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.#callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.#callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.#callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.client.options, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.#cleanup()\n\t\t\t\tawait Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\t\tworker.run()\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n\n\tset callbacks(callbacks: JobCallbacks) {\n\t\tthis.#callbacks = callbacks\n\t}\n\n\tset crons(crons: { name: Cron; cron: string }[]) {\n\t\tthis.#crons = crons\n\t}\n\n\tstatic #getNewId() {\n\t\treturn [Date.now(), Random.string()].join(':')\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string): Promise<string> {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../../../src/jobs/types/redis.ts"],"names":["config","redisCache","RedisCache","Queue","job","#callbacks","#cleanup","#crons","cron","#addCron","name","worker","callbacks","crons","#getNewId","Random","data","delayInMs","tz","#queue","jobId","failedJobs","RedisJob","repeatableJobs"],"mappings":"AAAA,6vCAA8B,8DAGrB,2DAEc,6DAKtB,IAAA,CAAA,CAAA,CAAA,CAAgB,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,SAChB,CAAA,CAAA,CAAA,aAAa,CAAA,eAYP,CAAA,CAAA,CAAA,UAEqB,CAAC,YAG5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAYA,CAAAA,CAAwB,CACnC,CAAA,MAAMC,CAAa,CAAA,CAAA,CAAA,CAAIC,CAAAA,CAAWF,CAAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,WACxC,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,IAAsB,4BAAA,CAAA,CAAA,CACtB,WAAA,CAAA,CAAA,oBAEa,CAAIG,IAAa,CAAA,gBAAa,CAAA,CAAA,CAAA,CAAA,CAAYF,CAAAA,IAAW,CAAA,CAAA,CAAA,CAAO,IAAA,kBAAA,CAAA,CAAA,CAAS,SAAA,CAAA,CAAA,UAAwB,CAC3G,CAAA,CAAA,MAAe,CAAA,OACP,CAAA,gBACAG,CAAAA,CAAQ,CACd,CAAA,CAAA,CAAA,MAAY,CAAA,CAAA,IACX,mBAAA,CAAA,CAAA,CAAK,SAAA,CAAA,MACJ,CAAA,EAAA,CAAQ,MAAKC,CAAAA,CAAW,CAAA,IAAA,CAAA,CAAA,IAAA,YACzB,CAAK,uBAAA,IACJ,mBAAA,CAAA,CAAA,qBAAA,SAAaA,0BAAW,CAAA,CAAA,CAAA,IAAA,GAAiBD,CAAAA,IAAI,SAC9C,CAAA,uBAAK,IAAA,qBAAA,CAAA,CAAA,qBAAA,MACJ,0BAAA,CAAA,CAAQ,CAAA,IAAKC,CAAAA,IAAW,GAAA,CAAA,IAAA,eAE3B,CAAA,uBACE,IAAA,qBAAA,CAAYJ,CAAAA,qBAAW,YAAO,0BAAA,CAAS,CAAA,CAAA,IAAA,GAAA,CAAS,CAAA,CAAA,CAAO,UAAA,CAAA,CAAA,CAAA,MAAuB,CACjF,OAGC,CAAA,OACA,CAAA,CAAA,CAAA,CAAA,gBACO,CAAKK,CAAAA,CAAAA,CAAS,CAAA,CACpB,qBAAA,CAAA,EAAA,CAAA,OAAM,CAAA,KAAY,CAAA,CAAA,EAAA,CAAKC,MAAO,IAAO,CAAA,CAAA,CAAA,CAAAC,CAAAA,CAAM,MAAK,OAAM,CAAA,GAAKC,CAASC,IAAW,CAAC,CAAA,CAChFC,CAAAA,GAAO,CAAA,CAAI,CACZ,IAED,CACD,CAEA,CAAA,IAAI,CAAA,CAAA,CAAA,CAAA,EAAA,IAAUC,CAAyB,CACtC,CAAA,CAAA,CAAA,CAAA,CAAKP,CAAAA,CAAAA,CAAaO,CACnB,CAEA,CAAA,GAAI,CAAA,CAAA,CAAA,CAAA,EAAMC,CAAAA,CAAuC,IAChD,SAGD,CAAA,CAAA,CAAA,CAAOC,IAAY,CAClB,CAAA,CAAA,CAAA,CAAA,CAAA,IAAQ,KAAK,CAAA,CAAI,CAAA,CAAGC,IAAO,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,MAAE,CAAK,CAAA,CAAA,CAAG,CAC9C,MAEA,CAAM,IAAA,CAAA,GAAA,CAAA,CAAA,CAAWC,oBAAAA,CAAuBC,MAQvC,CAAA,CAAA,CAAA,CAPY,IAAA,CAAA,GAAM,CAAA,CAAA,MAAY,UAAI,CAAA,CAAA,CAAA,CAAA,CAAqBD,CAAAA,MACtD,CAAA,MAA0B,IAC1B,CAAA,CAAA,CAAA,CAAOC,GACP,CAAA,YAAA,CAAA,CAAA,CAAkB,CAAA,KAClB,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,KACT,CAAA,CAAA,CAAA,gBAEc,CAAA,CAAA,CAAS,CACzB,OAEM,CAAA,GAAA,CAAA,QAAA,CAAcD,CAAAA,CAA0BR,CAAAA,CAAcU,CAAAA,EAQ3D,CAAA,QAPY,CAAA,CAAA,CAAA,MAAWC,aAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,6DACjC,CAAA,MAAgBL,IAAU,CAC1B,CAAA,CAAA,CAAA,GAAA,CAAQ,eAAqBI,CAAK,CAAE,CAAA,CAAA,KAAQ,CAAG,CAAA,CAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,OACA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAS,CAAA,EAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAEgB,CAAA,CAAA,CAAA,CAAA,OAAe,CACjC,GAEA,CAAA,QAAM,CAAA,CAAA,CAAA,CAAA,CAAA,6BAAA,IAAcE,qCACnB,MAAMhB,qCAAM,KAAA,eAAA,IAAM,CAAA,MAAY,aACrB,CAAA,CAAA,CAAA,CAAA,MAAU,CAAA,CAAA,MAGpB,IAAA,CAAM,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,MACL,CAAA,CAAA,MAAmB,CAAA,CAAA,CAAA,MAAM,kBACzB,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,MAAYiB,IAAW,CAAKjB,CAAAA,CAAAA,CAAQA,SAAW,CAAC,CACvD,CAEA,MAAMK,OAYL,CAAA,GAAA,CAAA,CAAA,CAXY,GAAA,CAAA,CAAA,EAAM,CAAA,CAAA,KAAY,CAAA,CAAA,CAAA,CAC7B,CAAA,KAAA,CAAA,CAAA,CAAA,CACA,CAAE,CAAA,CAAA,CAAA,MAED,CAAA,MAAOa,IAAmB,CAAA,CAC1B,CAAA,CAAA,GAAA,CAAA,SAAU,CAASd,CAAK,IACxB,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAA,CAClB,MAAA,CAAA,CAAS,OACT,CAAA,CAAA,CAAA,CAAA,gBAGa,CAAA,CAAA,CAAS,CACzB,OAEMF,CAAAA,GACL,CAAA,QAAM,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA,CAAA,KACX,CAAA,CAAA,CAAA,CAAMiB,CAAAA,MAAiB,IAAM,CAAA,kBAAY,CAAA,CAAA,CAAiB,MAC1D,CAAA,CAAM,MAAA,IAAQ,CAAA,CAAIA,CAAAA,CAAe,gBAAyB,CAAA,CAAA,CAAA,MAAA,OAAA,CAAA,GAAuB,CAAA,CAAA,CAAG,GACrF,CACD,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,kBAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,qBAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/jobs/types/redis.min.cjs","sourcesContent":["import { Queue, Worker } from 'bullmq'\n\nimport { RedisCache } from '../../cache/types/redis'\nimport { Instance } from '../../instance'\nimport type { CronTypes, DelayedJobs, RepeatableJobs } from '../../types'\nimport { Random } from '../../utilities'\nimport type { RedisJobConfig } from '../pipes'\n\nenum JobNames {\n\tCronJob = 'CronJob',\n\tRepeatableJob = 'RepeatableJob',\n\tDelayedJob = 'DelayedJob',\n}\n\ntype Cron = CronTypes[keyof CronTypes]\ntype DelayedJobEvent = DelayedJobs[keyof DelayedJobs]\ntype RepeatableJobEvent = RepeatableJobs[keyof RepeatableJobs]\ntype DelayedJobCallback = (data: DelayedJobEvent) => Promise<void> | void\ntype CronJobCallback = (name: CronTypes[keyof CronTypes]) => Promise<void> | void\ntype RepeatableJobCallback = (data: RepeatableJobEvent) => Promise<void> | void\n\ntype JobCallbacks = { onDelayed?: DelayedJobCallback; onCron?: CronJobCallback; onRepeatable?: RepeatableJobCallback }\n\nexport class RedisJob {\n\t#queue: Queue\n\t#callbacks: JobCallbacks = {}\n\t#crons: { name: Cron; cron: string }[] = []\n\n\tconstructor(config: RedisJobConfig) {\n\t\tconst redisCache = new RedisCache(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tthis.#queue = new Queue(config.queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tconfig.queueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.#callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.#callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.#callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.client.options, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.#cleanup()\n\t\t\t\tawait Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\t\tworker.run()\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n\n\tset callbacks(callbacks: JobCallbacks) {\n\t\tthis.#callbacks = callbacks\n\t}\n\n\tset crons(crons: { name: Cron; cron: string }[]) {\n\t\tthis.#crons = crons\n\t}\n\n\tstatic #getNewId() {\n\t\treturn [Date.now(), Random.string()].join('_')\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string): Promise<string> {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n}\n"]}
@@ -1,2 +1,2 @@
1
- import{Queue as r,Worker as i}from"bullmq";import{RedisCache as l}from "../../cache/types/redis.min.mjs";import{Instance as b}from "../../instance/index.min.mjs";import{Random as p}from "../../utilities/index.min.mjs";var c=(t=>(t.CronJob="CronJob",t.RepeatableJob="RepeatableJob",t.DelayedJob="DelayedJob",t))(c||{});class s{#e;#a={};#o=[];constructor(e){const a=new l(e.redisConfig,{maxRetriesPerRequest:null,enableReadyCheck:!1});this.#e=new r(e.queueName,{connection:a.client.options,skipVersionCheck:!0});const t=new i(e.queueName,async o=>{switch(o.name){case"DelayedJob":return this.#a.onDelayed?.(o.data);case"CronJob":return this.#a.onCron?.(o.data.type);case"RepeatableJob":return this.#a.onRepeatable?.(o.data)}},{connection:a.client.options,autorun:!1,skipVersionCheck:!0});b.on("start",async()=>{await this.#n(),await Promise.all(this.#o.map(({cron:o,name:n})=>this.#s(n,o))),t.run()},10)}set callbacks(e){this.#a=e}set crons(e){this.#o=e}static#t(){return[Date.now(),p.string()].join(":")}async addDelayed(e,a){return(await this.#e.add("DelayedJob",e,{jobId:s.#t(),delay:a,removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async addRepeatable(e,a,t){return(await this.#e.add("RepeatableJob",e,{jobId:s.#t(),repeat:{pattern:a,...t?{tz:t}:{}},removeOnComplete:!0,backoff:1e3,attempts:3})).opts?.repeat?.key??""}async removeDelayed(e){const a=await this.#e.getJob(e);a&&await a.remove()}async retryAllFailedJobs(){const e=await this.#e.getFailed();await Promise.all(e.map(a=>a.retry()))}async#s(e,a){return(await this.#e.add("CronJob",{type:e},{jobId:s.#t(),repeat:{pattern:a},removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async#n(){await this.retryAllFailedJobs();const e=await this.#e.getJobSchedulers();await Promise.all(e.map(a=>this.#e.removeJobScheduler(a.key)))}}export{s as RedisJob};
1
+ import{Queue as r,Worker as i}from"bullmq";import{RedisCache as l}from "../../cache/types/redis.min.mjs";import{Instance as b}from "../../instance/index.min.mjs";import{Random as p}from "../../utilities/index.min.mjs";var c=(t=>(t.CronJob="CronJob",t.RepeatableJob="RepeatableJob",t.DelayedJob="DelayedJob",t))(c||{});class s{#e;#a={};#o=[];constructor(e){const a=new l(e.redisConfig,{maxRetriesPerRequest:null,enableReadyCheck:!1});this.#e=new r(e.queueName,{connection:a.client.options,skipVersionCheck:!0});const t=new i(e.queueName,async o=>{switch(o.name){case"DelayedJob":return this.#a.onDelayed?.(o.data);case"CronJob":return this.#a.onCron?.(o.data.type);case"RepeatableJob":return this.#a.onRepeatable?.(o.data)}},{connection:a.client.options,autorun:!1,skipVersionCheck:!0});b.on("start",async()=>{await this.#n(),await Promise.all(this.#o.map(({cron:o,name:n})=>this.#s(n,o))),t.run()},10)}set callbacks(e){this.#a=e}set crons(e){this.#o=e}static#t(){return[Date.now(),p.string()].join("_")}async addDelayed(e,a){return(await this.#e.add("DelayedJob",e,{jobId:s.#t(),delay:a,removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async addRepeatable(e,a,t){return(await this.#e.add("RepeatableJob",e,{jobId:s.#t(),repeat:{pattern:a,...t?{tz:t}:{}},removeOnComplete:!0,backoff:1e3,attempts:3})).opts?.repeat?.key??""}async removeDelayed(e){const a=await this.#e.getJob(e);a&&await a.remove()}async retryAllFailedJobs(){const e=await this.#e.getFailed();await Promise.all(e.map(a=>a.retry()))}async#s(e,a){return(await this.#e.add("CronJob",{type:e},{jobId:s.#t(),repeat:{pattern:a},removeOnComplete:!0,backoff:1e3,attempts:3})).id.toString()}async#n(){await this.retryAllFailedJobs();const e=await this.#e.getJobSchedulers();await Promise.all(e.map(a=>this.#e.removeJobScheduler(a.key)))}}export{s as RedisJob};
2
2
  //# sourceMappingURL=redis.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/jobs/types/redis.ts"],"sourcesContent":["import { Queue, Worker } from 'bullmq'\n\nimport { RedisCache } from '../../cache/types/redis'\nimport { Instance } from '../../instance'\nimport type { CronTypes, DelayedJobs, RepeatableJobs } from '../../types'\nimport { Random } from '../../utilities'\nimport type { RedisJobConfig } from '../pipes'\n\nenum JobNames {\n\tCronJob = 'CronJob',\n\tRepeatableJob = 'RepeatableJob',\n\tDelayedJob = 'DelayedJob',\n}\n\ntype Cron = CronTypes[keyof CronTypes]\ntype DelayedJobEvent = DelayedJobs[keyof DelayedJobs]\ntype RepeatableJobEvent = RepeatableJobs[keyof RepeatableJobs]\ntype DelayedJobCallback = (data: DelayedJobEvent) => Promise<void> | void\ntype CronJobCallback = (name: CronTypes[keyof CronTypes]) => Promise<void> | void\ntype RepeatableJobCallback = (data: RepeatableJobEvent) => Promise<void> | void\n\ntype JobCallbacks = { onDelayed?: DelayedJobCallback; onCron?: CronJobCallback; onRepeatable?: RepeatableJobCallback }\n\nexport class RedisJob {\n\t#queue: Queue\n\t#callbacks: JobCallbacks = {}\n\t#crons: { name: Cron; cron: string }[] = []\n\n\tconstructor(config: RedisJobConfig) {\n\t\tconst redisCache = new RedisCache(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tthis.#queue = new Queue(config.queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tconfig.queueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.#callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.#callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.#callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.client.options, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.#cleanup()\n\t\t\t\tawait Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\t\tworker.run()\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n\n\tset callbacks(callbacks: JobCallbacks) {\n\t\tthis.#callbacks = callbacks\n\t}\n\n\tset crons(crons: { name: Cron; cron: string }[]) {\n\t\tthis.#crons = crons\n\t}\n\n\tstatic #getNewId() {\n\t\treturn [Date.now(), Random.string()].join(':')\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string): Promise<string> {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n}\n"],"mappings":"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","names":["Queue","Worker","RedisCache","Instance","Random","JobNames","RedisJob","#queue","#callbacks","#crons","config","redisCache","worker","job","#cleanup","cron","name","#addCron","callbacks","crons","#getNewId","data","delayInMs","tz","jobId","failedJobs","type","repeatableJobs"]}
1
+ {"version":3,"sources":["../../../../src/jobs/types/redis.ts"],"sourcesContent":["import { Queue, Worker } from 'bullmq'\n\nimport { RedisCache } from '../../cache/types/redis'\nimport { Instance } from '../../instance'\nimport type { CronTypes, DelayedJobs, RepeatableJobs } from '../../types'\nimport { Random } from '../../utilities'\nimport type { RedisJobConfig } from '../pipes'\n\nenum JobNames {\n\tCronJob = 'CronJob',\n\tRepeatableJob = 'RepeatableJob',\n\tDelayedJob = 'DelayedJob',\n}\n\ntype Cron = CronTypes[keyof CronTypes]\ntype DelayedJobEvent = DelayedJobs[keyof DelayedJobs]\ntype RepeatableJobEvent = RepeatableJobs[keyof RepeatableJobs]\ntype DelayedJobCallback = (data: DelayedJobEvent) => Promise<void> | void\ntype CronJobCallback = (name: CronTypes[keyof CronTypes]) => Promise<void> | void\ntype RepeatableJobCallback = (data: RepeatableJobEvent) => Promise<void> | void\n\ntype JobCallbacks = { onDelayed?: DelayedJobCallback; onCron?: CronJobCallback; onRepeatable?: RepeatableJobCallback }\n\nexport class RedisJob {\n\t#queue: Queue\n\t#callbacks: JobCallbacks = {}\n\t#crons: { name: Cron; cron: string }[] = []\n\n\tconstructor(config: RedisJobConfig) {\n\t\tconst redisCache = new RedisCache(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tthis.#queue = new Queue(config.queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tconfig.queueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.#callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.#callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.#callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.client.options, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.#cleanup()\n\t\t\t\tawait Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\t\tworker.run()\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n\n\tset callbacks(callbacks: JobCallbacks) {\n\t\tthis.#callbacks = callbacks\n\t}\n\n\tset crons(crons: { name: Cron; cron: string }[]) {\n\t\tthis.#crons = crons\n\t}\n\n\tstatic #getNewId() {\n\t\treturn [Date.now(), Random.string()].join('_')\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string): Promise<string> {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n}\n"],"mappings":"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","names":["Queue","Worker","RedisCache","Instance","Random","JobNames","RedisJob","#queue","#callbacks","#crons","config","redisCache","worker","job","#cleanup","cron","name","#addCron","callbacks","crons","#getNewId","data","delayInMs","tz","jobId","failedJobs","type","repeatableJobs"]}
@@ -49,7 +49,7 @@ class RedisJob {
49
49
  this.#crons = crons;
50
50
  }
51
51
  static #getNewId() {
52
- return [Date.now(), Random.string()].join(":");
52
+ return [Date.now(), Random.string()].join("_");
53
53
  }
54
54
  async addDelayed(data, delayInMs) {
55
55
  const job = await this.#queue.add("DelayedJob" /* DelayedJob */, data, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/jobs/types/redis.ts"],"sourcesContent":["import { Queue, Worker } from 'bullmq'\n\nimport { RedisCache } from '../../cache/types/redis'\nimport { Instance } from '../../instance'\nimport type { CronTypes, DelayedJobs, RepeatableJobs } from '../../types'\nimport { Random } from '../../utilities'\nimport type { RedisJobConfig } from '../pipes'\n\nenum JobNames {\n\tCronJob = 'CronJob',\n\tRepeatableJob = 'RepeatableJob',\n\tDelayedJob = 'DelayedJob',\n}\n\ntype Cron = CronTypes[keyof CronTypes]\ntype DelayedJobEvent = DelayedJobs[keyof DelayedJobs]\ntype RepeatableJobEvent = RepeatableJobs[keyof RepeatableJobs]\ntype DelayedJobCallback = (data: DelayedJobEvent) => Promise<void> | void\ntype CronJobCallback = (name: CronTypes[keyof CronTypes]) => Promise<void> | void\ntype RepeatableJobCallback = (data: RepeatableJobEvent) => Promise<void> | void\n\ntype JobCallbacks = { onDelayed?: DelayedJobCallback; onCron?: CronJobCallback; onRepeatable?: RepeatableJobCallback }\n\nexport class RedisJob {\n\t#queue: Queue\n\t#callbacks: JobCallbacks = {}\n\t#crons: { name: Cron; cron: string }[] = []\n\n\tconstructor(config: RedisJobConfig) {\n\t\tconst redisCache = new RedisCache(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tthis.#queue = new Queue(config.queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tconfig.queueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.#callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.#callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.#callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.client.options, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.#cleanup()\n\t\t\t\tawait Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\t\tworker.run()\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n\n\tset callbacks(callbacks: JobCallbacks) {\n\t\tthis.#callbacks = callbacks\n\t}\n\n\tset crons(crons: { name: Cron; cron: string }[]) {\n\t\tthis.#crons = crons\n\t}\n\n\tstatic #getNewId() {\n\t\treturn [Date.now(), Random.string()].join(':')\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string): Promise<string> {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n}\n"],"mappings":"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","names":["JobNames"]}
1
+ {"version":3,"sources":["../../../../src/jobs/types/redis.ts"],"sourcesContent":["import { Queue, Worker } from 'bullmq'\n\nimport { RedisCache } from '../../cache/types/redis'\nimport { Instance } from '../../instance'\nimport type { CronTypes, DelayedJobs, RepeatableJobs } from '../../types'\nimport { Random } from '../../utilities'\nimport type { RedisJobConfig } from '../pipes'\n\nenum JobNames {\n\tCronJob = 'CronJob',\n\tRepeatableJob = 'RepeatableJob',\n\tDelayedJob = 'DelayedJob',\n}\n\ntype Cron = CronTypes[keyof CronTypes]\ntype DelayedJobEvent = DelayedJobs[keyof DelayedJobs]\ntype RepeatableJobEvent = RepeatableJobs[keyof RepeatableJobs]\ntype DelayedJobCallback = (data: DelayedJobEvent) => Promise<void> | void\ntype CronJobCallback = (name: CronTypes[keyof CronTypes]) => Promise<void> | void\ntype RepeatableJobCallback = (data: RepeatableJobEvent) => Promise<void> | void\n\ntype JobCallbacks = { onDelayed?: DelayedJobCallback; onCron?: CronJobCallback; onRepeatable?: RepeatableJobCallback }\n\nexport class RedisJob {\n\t#queue: Queue\n\t#callbacks: JobCallbacks = {}\n\t#crons: { name: Cron; cron: string }[] = []\n\n\tconstructor(config: RedisJobConfig) {\n\t\tconst redisCache = new RedisCache(config.redisConfig, {\n\t\t\tmaxRetriesPerRequest: null,\n\t\t\tenableReadyCheck: false,\n\t\t})\n\t\tthis.#queue = new Queue(config.queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tconfig.queueName,\n\t\t\tasync (job) => {\n\t\t\t\tswitch (job.name) {\n\t\t\t\t\tcase JobNames.DelayedJob:\n\t\t\t\t\t\treturn (this.#callbacks.onDelayed as any)?.(job.data)\n\t\t\t\t\tcase JobNames.CronJob:\n\t\t\t\t\t\treturn (this.#callbacks.onCron as any)?.(job.data.type)\n\t\t\t\t\tcase JobNames.RepeatableJob:\n\t\t\t\t\t\treturn (this.#callbacks.onRepeatable as any)?.(job.data)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ connection: redisCache.client.options, autorun: false, skipVersionCheck: true },\n\t\t)\n\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tawait this.#cleanup()\n\t\t\t\tawait Promise.all(this.#crons.map(({ cron, name }) => this.#addCron(name, cron)))\n\t\t\t\tworker.run()\n\t\t\t},\n\t\t\t10,\n\t\t)\n\t}\n\n\tset callbacks(callbacks: JobCallbacks) {\n\t\tthis.#callbacks = callbacks\n\t}\n\n\tset crons(crons: { name: Cron; cron: string }[]) {\n\t\tthis.#crons = crons\n\t}\n\n\tstatic #getNewId() {\n\t\treturn [Date.now(), Random.string()].join('_')\n\t}\n\n\tasync addDelayed(data: DelayedJobEvent, delayInMs: number): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.DelayedJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\tdelay: delayInMs,\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.id!.toString()\n\t}\n\n\tasync addRepeatable(data: RepeatableJobEvent, cron: string, tz?: string): Promise<string> {\n\t\tconst job = await this.#queue.add(JobNames.RepeatableJob, data, {\n\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\trepeat: { pattern: cron, ...(tz ? { tz } : {}) },\n\t\t\tremoveOnComplete: true,\n\t\t\tbackoff: 1000,\n\t\t\tattempts: 3,\n\t\t})\n\t\treturn job.opts?.repeat?.key ?? ''\n\t}\n\n\tasync removeDelayed(jobId: string) {\n\t\tconst job = await this.#queue.getJob(jobId)\n\t\tif (job) await job.remove()\n\t}\n\n\tasync retryAllFailedJobs() {\n\t\tconst failedJobs = await this.#queue.getFailed()\n\t\tawait Promise.all(failedJobs.map((job) => job.retry()))\n\t}\n\n\tasync #addCron(type: Cron | string, cron: string): Promise<string> {\n\t\tconst job = await this.#queue.add(\n\t\t\tJobNames.CronJob,\n\t\t\t{ type },\n\t\t\t{\n\t\t\t\tjobId: RedisJob.#getNewId(),\n\t\t\t\trepeat: { pattern: cron },\n\t\t\t\tremoveOnComplete: true,\n\t\t\t\tbackoff: 1000,\n\t\t\t\tattempts: 3,\n\t\t\t},\n\t\t)\n\t\treturn job.id!.toString()\n\t}\n\n\tasync #cleanup() {\n\t\tawait this.retryAllFailedJobs()\n\t\tconst repeatableJobs = await this.#queue.getJobSchedulers()\n\t\tawait Promise.all(repeatableJobs.map((job) => this.#queue.removeJobScheduler(job.key)))\n\t}\n}\n"],"mappings":"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","names":["JobNames"]}
@@ -49,7 +49,7 @@ class RedisJob {
49
49
  this.#crons = crons;
50
50
  }
51
51
  static #getNewId() {
52
- return [Date.now(), Random.string()].join(":");
52
+ return [Date.now(), Random.string()].join("_");
53
53
  }
54
54
  async addDelayed(data, delayInMs) {
55
55
  const job = await this.#queue.add("DelayedJob" /* DelayedJob */, data, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "equipped",
3
- "version": "5.1.5",
3
+ "version": "5.1.6",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "type": "module",