@lowerdeck/cron 1.0.4 → 1.0.5

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.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("@lowerdeck/execution-context"),r=require("@lowerdeck/id"),n=require("@lowerdeck/redis"),t=require("@lowerdeck/sentry"),o=require("bullmq"),c=t.getSentry(),i=function(){var e;return(e=console).log.apply(e,["[CRON MANAGER]:"].concat([].slice.call(arguments)))},u=new Set;exports.createCron=function(t,a){if(u.has(t.name))throw new Error("Cron with name "+t.name+" already exists");var s=n.parseRedisUrl(t.redisUrl),l=new o.Queue(t.name,{connection:s,defaultJobOptions:{removeOnComplete:!0,removeOnFail:!0}});return{start:function(){try{return i("Starting cron job "+t.name+" to run every "+t.cron+" using bullmq"),Promise.resolve(l.upsertJobScheduler("cron",{pattern:t.cron},{opts:{removeDependencyOnFailure:!0,removeOnComplete:!0,removeOnFail:!0,keepLogs:0}})).then(function(){var n=new o.Worker(t.name,function(){try{return e.provideExecutionContext(e.createExecutionContext({type:"scheduled",contextId:r.generateCustomId("cron_"),cron:t.cron,name:t.name}),function(){try{return i("Running cron job "+t.name),Promise.resolve(function(e,r){try{var n=Promise.resolve(a()).then(function(){})}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}(0,function(e){throw c.captureException(e,{tags:{cronName:t.name}}),e}))}catch(e){return Promise.reject(e)}}),Promise.resolve()}catch(e){return Promise.reject(e)}},{connection:s});return{close:n.close.bind(n)}})}catch(e){return Promise.reject(e)}}}};
1
+ var e=require("@lowerdeck/execution-context"),r=require("@lowerdeck/id"),n=require("@lowerdeck/redis"),t=require("@lowerdeck/sentry"),o=require("bullmq"),c=t.getSentry(),i=function(){var e;return(e=console).log.apply(e,["[CRON MANAGER]:"].concat([].slice.call(arguments)))},u=new Set;exports.createCron=function(t,a){if(u.has(t.name))throw new Error("Cron with name "+t.name+" already exists");var s=n.parseRedisUrl(t.redisUrl),l=new o.Queue("Cr0N_"+t.name,{connection:s,defaultJobOptions:{removeOnComplete:!0,removeOnFail:{age:86400}}});return{start:function(){try{return i("Starting cron job "+t.name+" to run every "+t.cron+" using bullmq"),Promise.resolve(l.upsertJobScheduler("cron",{pattern:t.cron},{opts:{removeDependencyOnFailure:!0,removeOnComplete:!0,removeOnFail:!0,keepLogs:0}})).then(function(){var n=new o.Worker(l.name,function(){try{return e.provideExecutionContext(e.createExecutionContext({type:"scheduled",contextId:r.generateCustomId("cron_"),cron:t.cron,name:t.name}),function(){try{return i("Running cron job "+t.name),Promise.resolve(function(e,r){try{var n=Promise.resolve(a()).then(function(){})}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}(0,function(e){throw c.captureException(e,{tags:{cronName:t.name}}),e}))}catch(e){return Promise.reject(e)}}),Promise.resolve()}catch(e){return Promise.reject(e)}},{connection:s,concurrency:1});return{close:n.close.bind(n)}})}catch(e){return Promise.reject(e)}}}};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context';\nimport { generateCustomId } from '@lowerdeck/id';\nimport { IQueueProcessor } from '@lowerdeck/queue';\nimport { parseRedisUrl } from '@lowerdeck/redis';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { Queue, Worker } from 'bullmq';\n\nlet Sentry = getSentry();\n\nlet log = (...any: any[]) => console.log('[CRON MANAGER]:', ...any);\n\nlet seenNames = new Set<string>();\n\nexport let createCron = (\n opts: {\n name: string;\n cron: string;\n redisUrl: string;\n },\n handler: () => Promise<void>\n): IQueueProcessor => {\n if (seenNames.has(opts.name)) {\n throw new Error(`Cron with name ${opts.name} already exists`);\n }\n\n let connection = parseRedisUrl(opts.redisUrl);\n let queue = new Queue(opts.name, {\n connection,\n defaultJobOptions: {\n removeOnComplete: true,\n removeOnFail: true\n }\n });\n\n return {\n start: async () => {\n log(`Starting cron job ${opts.name} to run every ${opts.cron} using bullmq`);\n\n await queue.upsertJobScheduler(\n 'cron',\n {\n pattern: opts.cron\n },\n {\n opts: {\n removeDependencyOnFailure: true,\n removeOnComplete: true,\n removeOnFail: true,\n keepLogs: 0\n }\n }\n );\n\n let worker = new Worker(\n opts.name,\n async () => {\n provideExecutionContext(\n createExecutionContext({\n type: 'scheduled',\n contextId: generateCustomId('cron_'),\n cron: opts.cron,\n name: opts.name\n }),\n async () => {\n log(`Running cron job ${opts.name}`);\n\n try {\n await handler();\n } catch (err) {\n Sentry.captureException(err, {\n tags: {\n cronName: opts.name\n }\n });\n throw err;\n }\n }\n );\n },\n { connection }\n );\n\n return {\n close: worker.close.bind(worker)\n };\n }\n };\n};\n"],"names":["Sentry","getSentry","log","_console","console","apply","concat","slice","call","arguments","seenNames","Set","opts","handler","has","name","Error","connection","parseRedisUrl","redisUrl","queue","Queue","defaultJobOptions","removeOnComplete","removeOnFail","start","cron","Promise","resolve","upsertJobScheduler","pattern","removeDependencyOnFailure","keepLogs","then","worker","Worker","provideExecutionContext","createExecutionContext","type","contextId","generateCustomId","_catch","err","captureException","tags","cronName","e","reject","close","bind"],"mappings":"0JAOIA,EAASC,EAAAA,YAETC,EAAM,WAAH,IAAAC,EAAsB,OAAAA,EAAAC,SAAQF,IAAGG,MAAAF,EAAA,CAAC,mBAAiBG,OAAAC,GAAAA,MAAAC,KAAAC,YAAS,EAE/DC,EAAY,IAAIC,uBAEI,SACtBC,EAKAC,GAEA,GAAIH,EAAUI,IAAIF,EAAKG,MACrB,MAAU,IAAAC,MAAwBJ,kBAAAA,EAAKG,KAAI,mBAG7C,IAAIE,EAAaC,EAAAA,cAAcN,EAAKO,UAChCC,EAAQ,IAAIC,EAAKA,MAACT,EAAKG,KAAM,CAC/BE,WAAAA,EACAK,kBAAmB,CACjBC,kBAAkB,EAClBC,cAAc,KAIlB,MAAO,CACLC,MAAK,WAAa,IAC6D,OAA7EvB,EAAyBU,qBAAAA,EAAKG,KAAI,iBAAiBH,EAAKc,KAAI,iBAAiBC,QAAAC,QAEvER,EAAMS,mBACV,OACA,CACEC,QAASlB,EAAKc,MAEhB,CACEd,KAAM,CACJmB,2BAA2B,EAC3BR,kBAAkB,EAClBC,cAAc,EACdQ,SAAU,MAGfC,KAED,WAAA,IAAIC,EAAS,IAAIC,EAAMA,OACrBvB,EAAKG,KACM,WAAA,IAsBP,OArBFqB,EAAAA,wBACEC,EAAsBA,uBAAC,CACrBC,KAAM,YACNC,UAAWC,mBAAiB,SAC5Bd,KAAMd,EAAKc,KACXX,KAAMH,EAAKG,sBAG0B,OAArCb,EAAwBU,oBAAAA,EAAKG,MAAQY,QAAAC,gCAEjCD,QAAAC,QACIf,KAASoB,KAAA,WAAA,4DAHoBQ,CAAA,EAI5BC,SAAAA,GAMP,MALA1C,EAAO2C,iBAAiBD,EAAK,CAC3BE,KAAM,CACJC,SAAUjC,EAAKG,QAGb2B,CACR,GACF,CAAC,MAAAI,GAAAnB,OAAAA,QAAAoB,OAAAD,EACF,CAAA,GAACnB,QAAAC,SACJ,CAAC,MAAAkB,GAAAnB,OAAAA,QAAAoB,OAAAD,KACD,CAAE7B,WAAAA,IAGJ,MAAO,CACL+B,MAAOd,EAAOc,MAAMC,KAAKf,GACzB,EACJ,CAAC,MAAAY,GAAA,OAAAnB,QAAAoB,OAAAD,KAEL"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context';\nimport { generateCustomId } from '@lowerdeck/id';\nimport { IQueueProcessor } from '@lowerdeck/queue';\nimport { parseRedisUrl } from '@lowerdeck/redis';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { Queue, Worker } from 'bullmq';\n\nlet Sentry = getSentry();\n\nlet log = (...any: any[]) => console.log('[CRON MANAGER]:', ...any);\n\nlet seenNames = new Set<string>();\n\nexport let createCron = (\n opts: {\n name: string;\n cron: string;\n redisUrl: string;\n },\n handler: () => Promise<void>\n): IQueueProcessor => {\n if (seenNames.has(opts.name)) {\n throw new Error(`Cron with name ${opts.name} already exists`);\n }\n\n let connection = parseRedisUrl(opts.redisUrl);\n let queue = new Queue(`Cr0N_${opts.name}`, {\n connection,\n defaultJobOptions: {\n removeOnComplete: true,\n removeOnFail: {\n age: 60 * 60 * 24 // 1 day\n }\n }\n });\n\n return {\n start: async () => {\n log(`Starting cron job ${opts.name} to run every ${opts.cron} using bullmq`);\n\n await queue.upsertJobScheduler(\n 'cron',\n {\n pattern: opts.cron\n },\n {\n opts: {\n removeDependencyOnFailure: true,\n removeOnComplete: true,\n removeOnFail: true,\n keepLogs: 0\n }\n }\n );\n\n let worker = new Worker(\n queue.name,\n async () => {\n provideExecutionContext(\n createExecutionContext({\n type: 'scheduled',\n contextId: generateCustomId('cron_'),\n cron: opts.cron,\n name: opts.name\n }),\n async () => {\n log(`Running cron job ${opts.name}`);\n\n try {\n await handler();\n } catch (err) {\n Sentry.captureException(err, {\n tags: {\n cronName: opts.name\n }\n });\n throw err;\n }\n }\n );\n },\n {\n connection,\n\n concurrency: 1\n }\n );\n\n return {\n close: worker.close.bind(worker)\n };\n }\n };\n};\n"],"names":["Sentry","getSentry","log","_console","console","apply","concat","slice","call","arguments","seenNames","Set","opts","handler","has","name","Error","connection","parseRedisUrl","redisUrl","queue","Queue","defaultJobOptions","removeOnComplete","removeOnFail","age","start","cron","Promise","resolve","upsertJobScheduler","pattern","removeDependencyOnFailure","keepLogs","then","worker","Worker","provideExecutionContext","createExecutionContext","type","contextId","generateCustomId","_catch","err","captureException","tags","cronName","e","reject","concurrency","close","bind"],"mappings":"0JAOIA,EAASC,EAAAA,YAETC,EAAM,WAAHC,IAAAA,EAAsB,OAAAA,EAAAC,SAAQF,IAAGG,MAAAF,EAAA,CAAC,mBAAiBG,UAAAC,MAAAC,KAAAC,YAAS,EAE/DC,EAAY,IAAIC,uBAEI,SACtBC,EAKAC,GAEA,GAAIH,EAAUI,IAAIF,EAAKG,MACrB,MAAU,IAAAC,MAAK,kBAAmBJ,EAAKG,KAAqB,mBAG9D,IAAIE,EAAaC,EAAaA,cAACN,EAAKO,UAChCC,EAAQ,IAAIC,EAAKA,MAAST,QAAAA,EAAKG,KAAQ,CACzCE,WAAAA,EACAK,kBAAmB,CACjBC,kBAAkB,EAClBC,aAAc,CACZC,IAAK,UAKX,MAAO,CACLC,MAAKA,eAC0E,OAA7ExB,uBAAyBU,EAAKG,KAAI,iBAAiBH,EAAKe,KAAmB,iBAAEC,QAAAC,QAEvET,EAAMU,mBACV,OACA,CACEC,QAASnB,EAAKe,MAEhB,CACEf,KAAM,CACJoB,2BAA2B,EAC3BT,kBAAkB,EAClBC,cAAc,EACdS,SAAU,MAGfC,KAED,WAAA,IAAIC,EAAS,IAAIC,EAAMA,OACrBhB,EAAML,KACK,WAAA,IAsBP,OArBFsB,EAAuBA,wBACrBC,EAAsBA,uBAAC,CACrBC,KAAM,YACNC,UAAWC,EAAgBA,iBAAC,SAC5Bd,KAAMf,EAAKe,KACXZ,KAAMH,EAAKG,OACX,WAAA,IAEqC,OAArCb,EAAG,oBAAqBU,EAAKG,MAAQa,QAAAC,gCAEjCD,QAAAC,QACIhB,KAASqB,KAAA,WAAA,4DAHoBQ,GAIpC,SAAQC,GAMP,MALA3C,EAAO4C,iBAAiBD,EAAK,CAC3BE,KAAM,CACJC,SAAUlC,EAAKG,QAGb4B,CACR,GACF,CAAC,MAAAI,GAAA,OAAAnB,QAAAoB,OAAAD,EACF,CAAA,GAACnB,QAAAC,SACJ,CAAC,MAAAkB,GAAA,OAAAnB,QAAAoB,OAAAD,EACD,CAAA,EAAA,CACE9B,WAAAA,EAEAgC,YAAa,IAIjB,MAAO,CACLC,MAAOf,EAAOe,MAAMC,KAAKhB,GACzB,EACJ,CAAC,MAAAY,GAAA,OAAAnB,QAAAoB,OAAAD,KAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAWnD,eAAO,IAAI,UAAU,GACnB,MAAM;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,EACD,SAAS,MAAM,OAAO,CAAC,IAAI,CAAC,KAC3B,eAmEF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAWnD,eAAO,IAAI,UAAU,GACnB,MAAM;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,EACD,SAAS,MAAM,OAAO,CAAC,IAAI,CAAC,KAC3B,eAyEF,CAAC"}
@@ -1,2 +1,2 @@
1
- import{provideExecutionContext as e,createExecutionContext as r}from"@lowerdeck/execution-context";import{generateCustomId as n}from"@lowerdeck/id";import{parseRedisUrl as o}from"@lowerdeck/redis";import{getSentry as t}from"@lowerdeck/sentry";import{Queue as c,Worker as i}from"bullmq";var m=t(),a=function(){var e;return(e=console).log.apply(e,["[CRON MANAGER]:"].concat([].slice.call(arguments)))},u=new Set,l=function(t,l){if(u.has(t.name))throw new Error("Cron with name "+t.name+" already exists");var s=o(t.redisUrl),p=new c(t.name,{connection:s,defaultJobOptions:{removeOnComplete:!0,removeOnFail:!0}});return{start:function(){try{return a("Starting cron job "+t.name+" to run every "+t.cron+" using bullmq"),Promise.resolve(p.upsertJobScheduler("cron",{pattern:t.cron},{opts:{removeDependencyOnFailure:!0,removeOnComplete:!0,removeOnFail:!0,keepLogs:0}})).then(function(){var o=new i(t.name,function(){try{return e(r({type:"scheduled",contextId:n("cron_"),cron:t.cron,name:t.name}),function(){try{return a("Running cron job "+t.name),Promise.resolve(function(e,r){try{var n=Promise.resolve(l()).then(function(){})}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}(0,function(e){throw m.captureException(e,{tags:{cronName:t.name}}),e}))}catch(e){return Promise.reject(e)}}),Promise.resolve()}catch(e){return Promise.reject(e)}},{connection:s});return{close:o.close.bind(o)}})}catch(e){return Promise.reject(e)}}}};export{l as createCron};
1
+ import{provideExecutionContext as e,createExecutionContext as r}from"@lowerdeck/execution-context";import{generateCustomId as n}from"@lowerdeck/id";import{parseRedisUrl as o}from"@lowerdeck/redis";import{getSentry as t}from"@lowerdeck/sentry";import{Queue as c,Worker as i}from"bullmq";var m=t(),a=function(){var e;return(e=console).log.apply(e,["[CRON MANAGER]:"].concat([].slice.call(arguments)))},u=new Set,l=function(t,l){if(u.has(t.name))throw new Error("Cron with name "+t.name+" already exists");var s=o(t.redisUrl),p=new c("Cr0N_"+t.name,{connection:s,defaultJobOptions:{removeOnComplete:!0,removeOnFail:{age:86400}}});return{start:function(){try{return a("Starting cron job "+t.name+" to run every "+t.cron+" using bullmq"),Promise.resolve(p.upsertJobScheduler("cron",{pattern:t.cron},{opts:{removeDependencyOnFailure:!0,removeOnComplete:!0,removeOnFail:!0,keepLogs:0}})).then(function(){var o=new i(p.name,function(){try{return e(r({type:"scheduled",contextId:n("cron_"),cron:t.cron,name:t.name}),function(){try{return a("Running cron job "+t.name),Promise.resolve(function(e,r){try{var n=Promise.resolve(l()).then(function(){})}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}(0,function(e){throw m.captureException(e,{tags:{cronName:t.name}}),e}))}catch(e){return Promise.reject(e)}}),Promise.resolve()}catch(e){return Promise.reject(e)}},{connection:s,concurrency:1});return{close:o.close.bind(o)}})}catch(e){return Promise.reject(e)}}}};export{l as createCron};
2
2
  //# sourceMappingURL=index.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.js","sources":["../src/index.ts"],"sourcesContent":["import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context';\nimport { generateCustomId } from '@lowerdeck/id';\nimport { IQueueProcessor } from '@lowerdeck/queue';\nimport { parseRedisUrl } from '@lowerdeck/redis';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { Queue, Worker } from 'bullmq';\n\nlet Sentry = getSentry();\n\nlet log = (...any: any[]) => console.log('[CRON MANAGER]:', ...any);\n\nlet seenNames = new Set<string>();\n\nexport let createCron = (\n opts: {\n name: string;\n cron: string;\n redisUrl: string;\n },\n handler: () => Promise<void>\n): IQueueProcessor => {\n if (seenNames.has(opts.name)) {\n throw new Error(`Cron with name ${opts.name} already exists`);\n }\n\n let connection = parseRedisUrl(opts.redisUrl);\n let queue = new Queue(opts.name, {\n connection,\n defaultJobOptions: {\n removeOnComplete: true,\n removeOnFail: true\n }\n });\n\n return {\n start: async () => {\n log(`Starting cron job ${opts.name} to run every ${opts.cron} using bullmq`);\n\n await queue.upsertJobScheduler(\n 'cron',\n {\n pattern: opts.cron\n },\n {\n opts: {\n removeDependencyOnFailure: true,\n removeOnComplete: true,\n removeOnFail: true,\n keepLogs: 0\n }\n }\n );\n\n let worker = new Worker(\n opts.name,\n async () => {\n provideExecutionContext(\n createExecutionContext({\n type: 'scheduled',\n contextId: generateCustomId('cron_'),\n cron: opts.cron,\n name: opts.name\n }),\n async () => {\n log(`Running cron job ${opts.name}`);\n\n try {\n await handler();\n } catch (err) {\n Sentry.captureException(err, {\n tags: {\n cronName: opts.name\n }\n });\n throw err;\n }\n }\n );\n },\n { connection }\n );\n\n return {\n close: worker.close.bind(worker)\n };\n }\n };\n};\n"],"names":["Sentry","getSentry","log","_console","console","apply","concat","slice","call","arguments","seenNames","Set","createCron","opts","handler","has","name","Error","connection","parseRedisUrl","redisUrl","queue","Queue","defaultJobOptions","removeOnComplete","removeOnFail","start","cron","Promise","resolve","upsertJobScheduler","pattern","removeDependencyOnFailure","keepLogs","then","worker","Worker","provideExecutionContext","createExecutionContext","type","contextId","generateCustomId","_catch","err","captureException","tags","cronName","e","reject","close","bind"],"mappings":"8RAOA,IAAIA,EAASC,IAETC,EAAM,WAAH,IAAAC,EAAsB,OAAAA,EAAAC,SAAQF,IAAGG,MAAAF,EAAA,CAAC,mBAAiBG,OAAAC,GAAAA,MAAAC,KAAAC,YAAS,EAE/DC,EAAY,IAAIC,IAETC,EAAa,SACtBC,EAKAC,GAEA,GAAIJ,EAAUK,IAAIF,EAAKG,MACrB,MAAU,IAAAC,MAAwBJ,kBAAAA,EAAKG,KAAI,mBAG7C,IAAIE,EAAaC,EAAcN,EAAKO,UAChCC,EAAQ,IAAIC,EAAMT,EAAKG,KAAM,CAC/BE,WAAAA,EACAK,kBAAmB,CACjBC,kBAAkB,EAClBC,cAAc,KAIlB,MAAO,CACLC,MAAK,WAAa,IAC6D,OAA7ExB,EAAyBW,qBAAAA,EAAKG,KAAI,iBAAiBH,EAAKc,KAAI,iBAAiBC,QAAAC,QAEvER,EAAMS,mBACV,OACA,CACEC,QAASlB,EAAKc,MAEhB,CACEd,KAAM,CACJmB,2BAA2B,EAC3BR,kBAAkB,EAClBC,cAAc,EACdQ,SAAU,MAGfC,KAED,WAAA,IAAIC,EAAS,IAAIC,EACfvB,EAAKG,KACM,WAAA,IAsBP,OArBFqB,EACEC,EAAuB,CACrBC,KAAM,YACNC,UAAWC,EAAiB,SAC5Bd,KAAMd,EAAKc,KACXX,KAAMH,EAAKG,sBAG0B,OAArCd,EAAwBW,oBAAAA,EAAKG,MAAQY,QAAAC,gCAEjCD,QAAAC,QACIf,KAASoB,KAAA,WAAA,4DAHoBQ,CAAA,EAI5BC,SAAAA,GAMP,MALA3C,EAAO4C,iBAAiBD,EAAK,CAC3BE,KAAM,CACJC,SAAUjC,EAAKG,QAGb2B,CACR,GACF,CAAC,MAAAI,GAAAnB,OAAAA,QAAAoB,OAAAD,EACF,CAAA,GAACnB,QAAAC,SACJ,CAAC,MAAAkB,GAAAnB,OAAAA,QAAAoB,OAAAD,KACD,CAAE7B,WAAAA,IAGJ,MAAO,CACL+B,MAAOd,EAAOc,MAAMC,KAAKf,GACzB,EACJ,CAAC,MAAAY,GAAA,OAAAnB,QAAAoB,OAAAD,KAEL"}
1
+ {"version":3,"file":"index.module.js","sources":["../src/index.ts"],"sourcesContent":["import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context';\nimport { generateCustomId } from '@lowerdeck/id';\nimport { IQueueProcessor } from '@lowerdeck/queue';\nimport { parseRedisUrl } from '@lowerdeck/redis';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { Queue, Worker } from 'bullmq';\n\nlet Sentry = getSentry();\n\nlet log = (...any: any[]) => console.log('[CRON MANAGER]:', ...any);\n\nlet seenNames = new Set<string>();\n\nexport let createCron = (\n opts: {\n name: string;\n cron: string;\n redisUrl: string;\n },\n handler: () => Promise<void>\n): IQueueProcessor => {\n if (seenNames.has(opts.name)) {\n throw new Error(`Cron with name ${opts.name} already exists`);\n }\n\n let connection = parseRedisUrl(opts.redisUrl);\n let queue = new Queue(`Cr0N_${opts.name}`, {\n connection,\n defaultJobOptions: {\n removeOnComplete: true,\n removeOnFail: {\n age: 60 * 60 * 24 // 1 day\n }\n }\n });\n\n return {\n start: async () => {\n log(`Starting cron job ${opts.name} to run every ${opts.cron} using bullmq`);\n\n await queue.upsertJobScheduler(\n 'cron',\n {\n pattern: opts.cron\n },\n {\n opts: {\n removeDependencyOnFailure: true,\n removeOnComplete: true,\n removeOnFail: true,\n keepLogs: 0\n }\n }\n );\n\n let worker = new Worker(\n queue.name,\n async () => {\n provideExecutionContext(\n createExecutionContext({\n type: 'scheduled',\n contextId: generateCustomId('cron_'),\n cron: opts.cron,\n name: opts.name\n }),\n async () => {\n log(`Running cron job ${opts.name}`);\n\n try {\n await handler();\n } catch (err) {\n Sentry.captureException(err, {\n tags: {\n cronName: opts.name\n }\n });\n throw err;\n }\n }\n );\n },\n {\n connection,\n\n concurrency: 1\n }\n );\n\n return {\n close: worker.close.bind(worker)\n };\n }\n };\n};\n"],"names":["Sentry","getSentry","log","_console","console","apply","concat","slice","call","arguments","seenNames","Set","createCron","opts","handler","has","name","Error","connection","parseRedisUrl","redisUrl","queue","Queue","defaultJobOptions","removeOnComplete","removeOnFail","age","start","cron","Promise","resolve","upsertJobScheduler","pattern","removeDependencyOnFailure","keepLogs","then","worker","Worker","provideExecutionContext","createExecutionContext","type","contextId","generateCustomId","_catch","err","captureException","tags","cronName","e","reject","concurrency","close","bind"],"mappings":"8RAOA,IAAIA,EAASC,IAETC,EAAM,WAAHC,IAAAA,EAAsB,OAAAA,EAAAC,SAAQF,IAAGG,MAAAF,EAAA,CAAC,mBAAiBG,UAAAC,MAAAC,KAAAC,YAAS,EAE/DC,EAAY,IAAIC,IAETC,EAAa,SACtBC,EAKAC,GAEA,GAAIJ,EAAUK,IAAIF,EAAKG,MACrB,MAAU,IAAAC,MAAK,kBAAmBJ,EAAKG,KAAqB,mBAG9D,IAAIE,EAAaC,EAAcN,EAAKO,UAChCC,EAAQ,IAAIC,EAAcT,QAAAA,EAAKG,KAAQ,CACzCE,WAAAA,EACAK,kBAAmB,CACjBC,kBAAkB,EAClBC,aAAc,CACZC,IAAK,UAKX,MAAO,CACLC,MAAKA,eAC0E,OAA7EzB,uBAAyBW,EAAKG,KAAI,iBAAiBH,EAAKe,KAAmB,iBAAEC,QAAAC,QAEvET,EAAMU,mBACV,OACA,CACEC,QAASnB,EAAKe,MAEhB,CACEf,KAAM,CACJoB,2BAA2B,EAC3BT,kBAAkB,EAClBC,cAAc,EACdS,SAAU,MAGfC,KAED,WAAA,IAAIC,EAAS,IAAIC,EACfhB,EAAML,KACK,WAAA,IAsBP,OArBFsB,EACEC,EAAuB,CACrBC,KAAM,YACNC,UAAWC,EAAiB,SAC5Bd,KAAMf,EAAKe,KACXZ,KAAMH,EAAKG,OACX,WAAA,IAEqC,OAArCd,EAAG,oBAAqBW,EAAKG,MAAQa,QAAAC,gCAEjCD,QAAAC,QACIhB,KAASqB,KAAA,WAAA,4DAHoBQ,GAIpC,SAAQC,GAMP,MALA5C,EAAO6C,iBAAiBD,EAAK,CAC3BE,KAAM,CACJC,SAAUlC,EAAKG,QAGb4B,CACR,GACF,CAAC,MAAAI,GAAA,OAAAnB,QAAAoB,OAAAD,EACF,CAAA,GAACnB,QAAAC,SACJ,CAAC,MAAAkB,GAAA,OAAAnB,QAAAoB,OAAAD,EACD,CAAA,EAAA,CACE9B,WAAAA,EAEAgC,YAAa,IAIjB,MAAO,CACLC,MAAOf,EAAOe,MAAMC,KAAKhB,GACzB,EACJ,CAAC,MAAAY,GAAA,OAAAnB,QAAAoB,OAAAD,KAEL"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@lowerdeck/execution-context"),require("@lowerdeck/id"),require("@lowerdeck/redis"),require("@lowerdeck/sentry"),require("bullmq")):"function"==typeof define&&define.amd?define(["exports","@lowerdeck/execution-context","@lowerdeck/id","@lowerdeck/redis","@lowerdeck/sentry","bullmq"],r):r((e||self).cron={},e.executionContext,e.id,e.redis,e.sentry,e.bullmq)}(this,function(e,r,n,o,t,c){var i=t.getSentry(),u=function(){var e;return(e=console).log.apply(e,["[CRON MANAGER]:"].concat([].slice.call(arguments)))},l=new Set;e.createCron=function(e,t){if(l.has(e.name))throw new Error("Cron with name "+e.name+" already exists");var s=o.parseRedisUrl(e.redisUrl),a=new c.Queue(e.name,{connection:s,defaultJobOptions:{removeOnComplete:!0,removeOnFail:!0}});return{start:function(){try{return u("Starting cron job "+e.name+" to run every "+e.cron+" using bullmq"),Promise.resolve(a.upsertJobScheduler("cron",{pattern:e.cron},{opts:{removeDependencyOnFailure:!0,removeOnComplete:!0,removeOnFail:!0,keepLogs:0}})).then(function(){var o=new c.Worker(e.name,function(){try{return r.provideExecutionContext(r.createExecutionContext({type:"scheduled",contextId:n.generateCustomId("cron_"),cron:e.cron,name:e.name}),function(){try{return u("Running cron job "+e.name),Promise.resolve(function(e,r){try{var n=Promise.resolve(t()).then(function(){})}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}(0,function(r){throw i.captureException(r,{tags:{cronName:e.name}}),r}))}catch(e){return Promise.reject(e)}}),Promise.resolve()}catch(e){return Promise.reject(e)}},{connection:s});return{close:o.close.bind(o)}})}catch(e){return Promise.reject(e)}}}}});
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@lowerdeck/execution-context"),require("@lowerdeck/id"),require("@lowerdeck/redis"),require("@lowerdeck/sentry"),require("bullmq")):"function"==typeof define&&define.amd?define(["exports","@lowerdeck/execution-context","@lowerdeck/id","@lowerdeck/redis","@lowerdeck/sentry","bullmq"],r):r((e||self).cron={},e.executionContext,e.id,e.redis,e.sentry,e.bullmq)}(this,function(e,r,n,o,t,c){var i=t.getSentry(),u=function(){var e;return(e=console).log.apply(e,["[CRON MANAGER]:"].concat([].slice.call(arguments)))},l=new Set;e.createCron=function(e,t){if(l.has(e.name))throw new Error("Cron with name "+e.name+" already exists");var a=o.parseRedisUrl(e.redisUrl),s=new c.Queue("Cr0N_"+e.name,{connection:a,defaultJobOptions:{removeOnComplete:!0,removeOnFail:{age:86400}}});return{start:function(){try{return u("Starting cron job "+e.name+" to run every "+e.cron+" using bullmq"),Promise.resolve(s.upsertJobScheduler("cron",{pattern:e.cron},{opts:{removeDependencyOnFailure:!0,removeOnComplete:!0,removeOnFail:!0,keepLogs:0}})).then(function(){var o=new c.Worker(s.name,function(){try{return r.provideExecutionContext(r.createExecutionContext({type:"scheduled",contextId:n.generateCustomId("cron_"),cron:e.cron,name:e.name}),function(){try{return u("Running cron job "+e.name),Promise.resolve(function(e,r){try{var n=Promise.resolve(t()).then(function(){})}catch(e){return r(e)}return n&&n.then?n.then(void 0,r):n}(0,function(r){throw i.captureException(r,{tags:{cronName:e.name}}),r}))}catch(e){return Promise.reject(e)}}),Promise.resolve()}catch(e){return Promise.reject(e)}},{connection:a,concurrency:1});return{close:o.close.bind(o)}})}catch(e){return Promise.reject(e)}}}}});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/index.ts"],"sourcesContent":["import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context';\nimport { generateCustomId } from '@lowerdeck/id';\nimport { IQueueProcessor } from '@lowerdeck/queue';\nimport { parseRedisUrl } from '@lowerdeck/redis';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { Queue, Worker } from 'bullmq';\n\nlet Sentry = getSentry();\n\nlet log = (...any: any[]) => console.log('[CRON MANAGER]:', ...any);\n\nlet seenNames = new Set<string>();\n\nexport let createCron = (\n opts: {\n name: string;\n cron: string;\n redisUrl: string;\n },\n handler: () => Promise<void>\n): IQueueProcessor => {\n if (seenNames.has(opts.name)) {\n throw new Error(`Cron with name ${opts.name} already exists`);\n }\n\n let connection = parseRedisUrl(opts.redisUrl);\n let queue = new Queue(opts.name, {\n connection,\n defaultJobOptions: {\n removeOnComplete: true,\n removeOnFail: true\n }\n });\n\n return {\n start: async () => {\n log(`Starting cron job ${opts.name} to run every ${opts.cron} using bullmq`);\n\n await queue.upsertJobScheduler(\n 'cron',\n {\n pattern: opts.cron\n },\n {\n opts: {\n removeDependencyOnFailure: true,\n removeOnComplete: true,\n removeOnFail: true,\n keepLogs: 0\n }\n }\n );\n\n let worker = new Worker(\n opts.name,\n async () => {\n provideExecutionContext(\n createExecutionContext({\n type: 'scheduled',\n contextId: generateCustomId('cron_'),\n cron: opts.cron,\n name: opts.name\n }),\n async () => {\n log(`Running cron job ${opts.name}`);\n\n try {\n await handler();\n } catch (err) {\n Sentry.captureException(err, {\n tags: {\n cronName: opts.name\n }\n });\n throw err;\n }\n }\n );\n },\n { connection }\n );\n\n return {\n close: worker.close.bind(worker)\n };\n }\n };\n};\n"],"names":["Sentry","getSentry","log","_console","console","apply","concat","slice","call","arguments","seenNames","Set","opts","handler","has","name","Error","connection","parseRedisUrl","redisUrl","queue","Queue","defaultJobOptions","removeOnComplete","removeOnFail","start","cron","Promise","resolve","upsertJobScheduler","pattern","removeDependencyOnFailure","keepLogs","then","worker","Worker","provideExecutionContext","createExecutionContext","type","contextId","generateCustomId","_catch","err","captureException","tags","cronName","e","reject","close","bind"],"mappings":"qgBAOA,IAAIA,EAASC,EAAAA,YAETC,EAAM,WAAH,IAAAC,EAAsB,OAAAA,EAAAC,SAAQF,IAAGG,MAAAF,EAAA,CAAC,mBAAiBG,OAAAC,GAAAA,MAAAC,KAAAC,YAAS,EAE/DC,EAAY,IAAIC,iBAEI,SACtBC,EAKAC,GAEA,GAAIH,EAAUI,IAAIF,EAAKG,MACrB,MAAU,IAAAC,MAAwBJ,kBAAAA,EAAKG,KAAI,mBAG7C,IAAIE,EAAaC,EAAAA,cAAcN,EAAKO,UAChCC,EAAQ,IAAIC,EAAKA,MAACT,EAAKG,KAAM,CAC/BE,WAAAA,EACAK,kBAAmB,CACjBC,kBAAkB,EAClBC,cAAc,KAIlB,MAAO,CACLC,MAAK,WAAa,IAC6D,OAA7EvB,EAAyBU,qBAAAA,EAAKG,KAAI,iBAAiBH,EAAKc,KAAI,iBAAiBC,QAAAC,QAEvER,EAAMS,mBACV,OACA,CACEC,QAASlB,EAAKc,MAEhB,CACEd,KAAM,CACJmB,2BAA2B,EAC3BR,kBAAkB,EAClBC,cAAc,EACdQ,SAAU,MAGfC,KAED,WAAA,IAAIC,EAAS,IAAIC,EAAMA,OACrBvB,EAAKG,KACM,WAAA,IAsBP,OArBFqB,EAAAA,wBACEC,EAAsBA,uBAAC,CACrBC,KAAM,YACNC,UAAWC,mBAAiB,SAC5Bd,KAAMd,EAAKc,KACXX,KAAMH,EAAKG,sBAG0B,OAArCb,EAAwBU,oBAAAA,EAAKG,MAAQY,QAAAC,gCAEjCD,QAAAC,QACIf,KAASoB,KAAA,WAAA,4DAHoBQ,CAAA,EAI5BC,SAAAA,GAMP,MALA1C,EAAO2C,iBAAiBD,EAAK,CAC3BE,KAAM,CACJC,SAAUjC,EAAKG,QAGb2B,CACR,GACF,CAAC,MAAAI,GAAAnB,OAAAA,QAAAoB,OAAAD,EACF,CAAA,GAACnB,QAAAC,SACJ,CAAC,MAAAkB,GAAAnB,OAAAA,QAAAoB,OAAAD,KACD,CAAE7B,WAAAA,IAGJ,MAAO,CACL+B,MAAOd,EAAOc,MAAMC,KAAKf,GACzB,EACJ,CAAC,MAAAY,GAAA,OAAAnB,QAAAoB,OAAAD,KAEL"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/index.ts"],"sourcesContent":["import { createExecutionContext, provideExecutionContext } from '@lowerdeck/execution-context';\nimport { generateCustomId } from '@lowerdeck/id';\nimport { IQueueProcessor } from '@lowerdeck/queue';\nimport { parseRedisUrl } from '@lowerdeck/redis';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { Queue, Worker } from 'bullmq';\n\nlet Sentry = getSentry();\n\nlet log = (...any: any[]) => console.log('[CRON MANAGER]:', ...any);\n\nlet seenNames = new Set<string>();\n\nexport let createCron = (\n opts: {\n name: string;\n cron: string;\n redisUrl: string;\n },\n handler: () => Promise<void>\n): IQueueProcessor => {\n if (seenNames.has(opts.name)) {\n throw new Error(`Cron with name ${opts.name} already exists`);\n }\n\n let connection = parseRedisUrl(opts.redisUrl);\n let queue = new Queue(`Cr0N_${opts.name}`, {\n connection,\n defaultJobOptions: {\n removeOnComplete: true,\n removeOnFail: {\n age: 60 * 60 * 24 // 1 day\n }\n }\n });\n\n return {\n start: async () => {\n log(`Starting cron job ${opts.name} to run every ${opts.cron} using bullmq`);\n\n await queue.upsertJobScheduler(\n 'cron',\n {\n pattern: opts.cron\n },\n {\n opts: {\n removeDependencyOnFailure: true,\n removeOnComplete: true,\n removeOnFail: true,\n keepLogs: 0\n }\n }\n );\n\n let worker = new Worker(\n queue.name,\n async () => {\n provideExecutionContext(\n createExecutionContext({\n type: 'scheduled',\n contextId: generateCustomId('cron_'),\n cron: opts.cron,\n name: opts.name\n }),\n async () => {\n log(`Running cron job ${opts.name}`);\n\n try {\n await handler();\n } catch (err) {\n Sentry.captureException(err, {\n tags: {\n cronName: opts.name\n }\n });\n throw err;\n }\n }\n );\n },\n {\n connection,\n\n concurrency: 1\n }\n );\n\n return {\n close: worker.close.bind(worker)\n };\n }\n };\n};\n"],"names":["Sentry","getSentry","log","_console","console","apply","concat","slice","call","arguments","seenNames","Set","opts","handler","has","name","Error","connection","parseRedisUrl","redisUrl","queue","Queue","defaultJobOptions","removeOnComplete","removeOnFail","age","start","cron","Promise","resolve","upsertJobScheduler","pattern","removeDependencyOnFailure","keepLogs","then","worker","Worker","provideExecutionContext","createExecutionContext","type","contextId","generateCustomId","_catch","err","captureException","tags","cronName","e","reject","concurrency","close","bind"],"mappings":"qgBAOA,IAAIA,EAASC,EAAAA,YAETC,EAAM,WAAHC,IAAAA,EAAsB,OAAAA,EAAAC,SAAQF,IAAGG,MAAAF,EAAA,CAAC,mBAAiBG,UAAAC,MAAAC,KAAAC,YAAS,EAE/DC,EAAY,IAAIC,iBAEI,SACtBC,EAKAC,GAEA,GAAIH,EAAUI,IAAIF,EAAKG,MACrB,MAAU,IAAAC,MAAK,kBAAmBJ,EAAKG,KAAqB,mBAG9D,IAAIE,EAAaC,EAAaA,cAACN,EAAKO,UAChCC,EAAQ,IAAIC,EAAKA,MAAST,QAAAA,EAAKG,KAAQ,CACzCE,WAAAA,EACAK,kBAAmB,CACjBC,kBAAkB,EAClBC,aAAc,CACZC,IAAK,UAKX,MAAO,CACLC,MAAKA,eAC0E,OAA7ExB,uBAAyBU,EAAKG,KAAI,iBAAiBH,EAAKe,KAAmB,iBAAEC,QAAAC,QAEvET,EAAMU,mBACV,OACA,CACEC,QAASnB,EAAKe,MAEhB,CACEf,KAAM,CACJoB,2BAA2B,EAC3BT,kBAAkB,EAClBC,cAAc,EACdS,SAAU,MAGfC,KAED,WAAA,IAAIC,EAAS,IAAIC,EAAMA,OACrBhB,EAAML,KACK,WAAA,IAsBP,OArBFsB,EAAuBA,wBACrBC,EAAsBA,uBAAC,CACrBC,KAAM,YACNC,UAAWC,EAAgBA,iBAAC,SAC5Bd,KAAMf,EAAKe,KACXZ,KAAMH,EAAKG,OACX,WAAA,IAEqC,OAArCb,EAAG,oBAAqBU,EAAKG,MAAQa,QAAAC,gCAEjCD,QAAAC,QACIhB,KAASqB,KAAA,WAAA,4DAHoBQ,GAIpC,SAAQC,GAMP,MALA3C,EAAO4C,iBAAiBD,EAAK,CAC3BE,KAAM,CACJC,SAAUlC,EAAKG,QAGb4B,CACR,GACF,CAAC,MAAAI,GAAA,OAAAnB,QAAAoB,OAAAD,EACF,CAAA,GAACnB,QAAAC,SACJ,CAAC,MAAAkB,GAAA,OAAAnB,QAAAoB,OAAAD,EACD,CAAA,EAAA,CACE9B,WAAAA,EAEAgC,YAAa,IAIjB,MAAO,CACLC,MAAOf,EAAOe,MAAMC,KAAKhB,GACzB,EACJ,CAAC,MAAAY,GAAA,OAAAnB,QAAAoB,OAAAD,KAEL"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lowerdeck/cron",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -32,7 +32,7 @@
32
32
  "dependencies": {
33
33
  "@lowerdeck/execution-context": "^1.0.2",
34
34
  "@lowerdeck/id": "^1.0.5",
35
- "@lowerdeck/queue": "^1.0.4",
35
+ "@lowerdeck/queue": "^1.0.5",
36
36
  "@lowerdeck/redis": "^1.0.3",
37
37
  "@lowerdeck/sentry": "^1.0.2",
38
38
  "bullmq": "^5.34.3"
package/src/index.ts CHANGED
@@ -24,11 +24,13 @@ export let createCron = (
24
24
  }
25
25
 
26
26
  let connection = parseRedisUrl(opts.redisUrl);
27
- let queue = new Queue(opts.name, {
27
+ let queue = new Queue(`Cr0N_${opts.name}`, {
28
28
  connection,
29
29
  defaultJobOptions: {
30
30
  removeOnComplete: true,
31
- removeOnFail: true
31
+ removeOnFail: {
32
+ age: 60 * 60 * 24 // 1 day
33
+ }
32
34
  }
33
35
  });
34
36
 
@@ -52,7 +54,7 @@ export let createCron = (
52
54
  );
53
55
 
54
56
  let worker = new Worker(
55
- opts.name,
57
+ queue.name,
56
58
  async () => {
57
59
  provideExecutionContext(
58
60
  createExecutionContext({
@@ -77,7 +79,11 @@ export let createCron = (
77
79
  }
78
80
  );
79
81
  },
80
- { connection }
82
+ {
83
+ connection,
84
+
85
+ concurrency: 1
86
+ }
81
87
  );
82
88
 
83
89
  return {