{"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\tconst queueName = Instance.get().getScopedName(config.queueName)\n\t\tthis.#queue = new Queue(queueName, { connection: redisCache.client.options, skipVersionCheck: true })\n\t\tconst worker = new Worker(\n\t\t\tqueueName,\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]}