bunqueue 2.6.48 → 2.6.50

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.
@@ -21,6 +21,16 @@ export interface CloudCommand {
21
21
  state?: string;
22
22
  limit?: number;
23
23
  offset?: number;
24
+ priority?: number;
25
+ delay?: number;
26
+ url?: string;
27
+ events?: string[];
28
+ secret?: string;
29
+ webhookId?: string;
30
+ enabled?: boolean;
31
+ keepLogs?: number;
32
+ max?: number;
33
+ concurrency?: number;
24
34
  }
25
35
  /** Result sent back to dashboard */
26
36
  export interface CloudCommandResult {
@@ -1 +1 @@
1
- {"version":3,"file":"commandHandler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/commandHandler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAInE,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,oCAAoC;AACpC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgND,8CAA8C;AAC9C,wBAAsB,aAAa,CACjC,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,kBAAkB,CAAC,CA8B7B"}
1
+ {"version":3,"file":"commandHandler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/commandHandler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAInE,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oCAAoC;AACpC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8CAA8C;AAC9C,wBAAsB,aAAa,CACjC,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,kBAAkB,CAAC,CA8B7B"}
@@ -5,195 +5,8 @@
5
5
  *
6
6
  * All commands are whitelisted — unknown actions are rejected.
7
7
  */
8
- import { jobId } from '../../domain/types/job';
9
8
  import { cloudLog } from './logger';
10
- /** Whitelisted commands */
11
- const COMMANDS = {
12
- 'queue:pause': (qm, cmd) => {
13
- qm.pause(cmd.queue ?? '');
14
- return { queue: cmd.queue, paused: true };
15
- },
16
- 'queue:resume': (qm, cmd) => {
17
- qm.resume(cmd.queue ?? '');
18
- return { queue: cmd.queue, paused: false };
19
- },
20
- 'queue:drain': (qm, cmd) => {
21
- const count = qm.drain(cmd.queue ?? '');
22
- return { queue: cmd.queue, drained: count };
23
- },
24
- 'queue:clean': (qm, cmd) => {
25
- const count = qm.clean(cmd.queue ?? '', cmd.graceMs ?? 0, cmd.state, cmd.limit);
26
- return { queue: cmd.queue, cleaned: count };
27
- },
28
- 'job:cancel': async (qm, cmd) => {
29
- const ok = await qm.cancel(jobId(cmd.jobId ?? ''));
30
- return { cancelled: ok };
31
- },
32
- 'job:promote': async (qm, cmd) => {
33
- const ok = await qm.promote(jobId(cmd.jobId ?? ''));
34
- return { promoted: ok };
35
- },
36
- 'job:retry': (qm, cmd) => {
37
- if (cmd.queue) {
38
- const count = qm.retryDlq(cmd.queue, cmd.jobId ? jobId(cmd.jobId) : undefined);
39
- return { retried: count };
40
- }
41
- return { retried: 0 };
42
- },
43
- 'dlq:retry': (qm, cmd) => {
44
- const count = qm.retryDlq(cmd.queue ?? '', cmd.jobId ? jobId(cmd.jobId) : undefined);
45
- return { retried: count };
46
- },
47
- 'dlq:purge': (qm, cmd) => {
48
- const count = qm.purgeDlq(cmd.queue ?? '');
49
- return { purged: count };
50
- },
51
- 'cron:upsert': (qm, cmd) => {
52
- // Remove existing if any, then add
53
- qm.removeCron(cmd.name ?? '');
54
- const cron = qm.addCron({
55
- name: cmd.name ?? '',
56
- queue: cmd.queue ?? '',
57
- data: cmd.data ?? {},
58
- schedule: cmd.schedule,
59
- });
60
- return { name: cron.name, nextRun: cron.nextRun };
61
- },
62
- 'cron:delete': (qm, cmd) => {
63
- const ok = qm.removeCron(cmd.name ?? '');
64
- return { deleted: ok };
65
- },
66
- 'stats:refresh': (qm) => {
67
- return qm.getStats();
68
- },
69
- 'job:logs': (qm, cmd) => {
70
- const logs = qm.getLogs(jobId(cmd.jobId ?? ''));
71
- return { logs };
72
- },
73
- 'job:result': (qm, cmd) => {
74
- const result = qm.getResult(jobId(cmd.jobId ?? ''));
75
- return { result: result ?? null };
76
- },
77
- 'job:list': (qm, cmd) => {
78
- const limit = cmd.limit ?? 50;
79
- const offset = cmd.offset ?? 0;
80
- const states = cmd.state
81
- ? cmd.state.split(',')
82
- : ['waiting', 'active', 'delayed', 'completed', 'failed'];
83
- const jobs = qm.getJobs(cmd.queue ?? '', {
84
- state: states,
85
- start: offset,
86
- end: offset + limit - 1,
87
- });
88
- return {
89
- jobs: jobs.map((j) => {
90
- const data = j.data;
91
- return {
92
- id: String(j.id),
93
- name: data?.name ?? 'default',
94
- queue: j.queue,
95
- state: j.completedAt
96
- ? 'completed'
97
- : j.startedAt
98
- ? 'active'
99
- : j.runAt > Date.now()
100
- ? 'delayed'
101
- : 'waiting',
102
- data,
103
- priority: j.priority,
104
- createdAt: j.createdAt,
105
- startedAt: j.startedAt ?? null,
106
- completedAt: j.completedAt ?? null,
107
- attempts: j.attempts,
108
- maxAttempts: j.maxAttempts,
109
- progress: j.progress,
110
- duration: j.completedAt && j.startedAt ? j.completedAt - j.startedAt : null,
111
- };
112
- }),
113
- total: qm.count(cmd.queue ?? ''),
114
- offset,
115
- limit,
116
- };
117
- },
118
- 'job:get': async (qm, cmd) => {
119
- const job = await qm.getJob(jobId(cmd.jobId ?? ''));
120
- if (!job)
121
- return { job: null };
122
- const data = job.data;
123
- const logs = qm.getLogs(jobId(cmd.jobId ?? ''));
124
- const result = qm.getResult(jobId(cmd.jobId ?? ''));
125
- return {
126
- job: {
127
- id: String(job.id),
128
- name: data?.name ?? 'default',
129
- queue: job.queue,
130
- state: job.completedAt
131
- ? 'completed'
132
- : job.startedAt
133
- ? 'active'
134
- : job.runAt > Date.now()
135
- ? 'delayed'
136
- : 'waiting',
137
- data,
138
- priority: job.priority,
139
- createdAt: job.createdAt,
140
- startedAt: job.startedAt ?? null,
141
- completedAt: job.completedAt ?? null,
142
- attempts: job.attempts,
143
- maxAttempts: job.maxAttempts,
144
- progress: job.progress,
145
- duration: job.completedAt && job.startedAt ? job.completedAt - job.startedAt : null,
146
- logs,
147
- result: result ?? null,
148
- },
149
- };
150
- },
151
- 'queue:detail': (qm, cmd) => {
152
- const queue = cmd.queue ?? '';
153
- const counts = qm.getQueueJobCounts(queue);
154
- const paused = qm.isPaused(queue);
155
- const stallConfig = qm.getStallConfig(queue);
156
- const dlqConfig = qm.getDlqConfig(queue);
157
- const dlqEntries = qm.getDlqEntries(queue).slice(0, 50);
158
- const jobs = qm.getJobs(queue, {
159
- state: ['waiting', 'active', 'delayed', 'completed', 'failed'],
160
- start: 0,
161
- end: 49,
162
- });
163
- return {
164
- queue,
165
- paused,
166
- counts,
167
- stallConfig: { stallInterval: stallConfig.stallInterval, maxStalls: stallConfig.maxStalls },
168
- dlqConfig: { maxRetries: dlqConfig.maxAutoRetries, maxAge: dlqConfig.maxAge ?? 0 },
169
- dlqEntries: dlqEntries.map((e) => ({
170
- jobId: String(e.job.id),
171
- reason: e.reason,
172
- error: e.error,
173
- enteredAt: e.enteredAt,
174
- retryCount: e.retryCount,
175
- })),
176
- jobs: jobs.map((j) => {
177
- const data = j.data;
178
- return {
179
- id: String(j.id),
180
- name: data?.name ?? 'default',
181
- state: j.completedAt
182
- ? 'completed'
183
- : j.startedAt
184
- ? 'active'
185
- : j.runAt > Date.now()
186
- ? 'delayed'
187
- : 'waiting',
188
- priority: j.priority,
189
- createdAt: j.createdAt,
190
- attempts: j.attempts,
191
- maxAttempts: j.maxAttempts,
192
- };
193
- }),
194
- };
195
- },
196
- };
9
+ import { COMMANDS } from './commands';
197
10
  /** Process a command and return the result */
198
11
  export async function handleCommand(queueManager, cmd) {
199
12
  const handler = COMMANDS[cmd.action];
@@ -1 +1 @@
1
- {"version":3,"file":"commandHandler.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/commandHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commandHandler.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/commandHandler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAsCtC,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAA0B,EAC1B,GAAiB;IAEjB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,oBAAoB,GAAG,CAAC,MAAM,EAAE;SACxC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7E,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACtC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;SACnB,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Cloud Command Definitions
3
+ * Whitelisted commands that the dashboard can execute via WebSocket.
4
+ */
5
+ import type { QueueManager } from '../../application/queueManager';
6
+ import type { CloudCommand } from './commandHandler';
7
+ type Handler = (qm: QueueManager, cmd: CloudCommand) => unknown;
8
+ /** All whitelisted commands */
9
+ export declare const COMMANDS: Partial<Record<string, Handler>>;
10
+ export {};
11
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,KAAK,OAAO,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;AAkChE,+BAA+B;AAC/B,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2OrD,CAAC"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Cloud Command Definitions
3
+ * Whitelisted commands that the dashboard can execute via WebSocket.
4
+ */
5
+ import { jobId } from '../../domain/types/job';
6
+ /** Helper: derive job state from timestamps */
7
+ function deriveState(j) {
8
+ if (j.completedAt)
9
+ return 'completed';
10
+ if (j.startedAt)
11
+ return 'active';
12
+ if (j.runAt > Date.now())
13
+ return 'delayed';
14
+ return 'waiting';
15
+ }
16
+ /** Helper: map job to API response format */
17
+ function mapJob(j) {
18
+ const data = j.data;
19
+ return {
20
+ id: String(j.id),
21
+ name: data?.name ?? 'default',
22
+ queue: j.queue,
23
+ state: deriveState(j),
24
+ data,
25
+ priority: j.priority,
26
+ createdAt: j.createdAt,
27
+ startedAt: j.startedAt ?? null,
28
+ completedAt: j.completedAt ?? null,
29
+ attempts: j.attempts,
30
+ maxAttempts: j.maxAttempts,
31
+ progress: j.progress,
32
+ duration: j.completedAt && j.startedAt ? j.completedAt - j.startedAt : null,
33
+ };
34
+ }
35
+ /** All whitelisted commands */
36
+ export const COMMANDS = {
37
+ // --- Queue control ---
38
+ 'queue:pause': (qm, cmd) => {
39
+ qm.pause(cmd.queue ?? '');
40
+ return { queue: cmd.queue, paused: true };
41
+ },
42
+ 'queue:resume': (qm, cmd) => {
43
+ qm.resume(cmd.queue ?? '');
44
+ return { queue: cmd.queue, paused: false };
45
+ },
46
+ 'queue:drain': (qm, cmd) => {
47
+ const count = qm.drain(cmd.queue ?? '');
48
+ return { queue: cmd.queue, drained: count };
49
+ },
50
+ 'queue:clean': (qm, cmd) => {
51
+ const count = qm.clean(cmd.queue ?? '', cmd.graceMs ?? 0, cmd.state, cmd.limit);
52
+ return { queue: cmd.queue, cleaned: count };
53
+ },
54
+ 'queue:obliterate': (qm, cmd) => {
55
+ qm.obliterate(cmd.queue ?? '');
56
+ return { queue: cmd.queue, obliterated: true };
57
+ },
58
+ 'queue:promoteAll': async (qm, cmd) => {
59
+ const limit = cmd.limit ?? 1000;
60
+ const jobs = qm.getJobs(cmd.queue ?? '', { state: ['delayed'], start: 0, end: limit - 1 });
61
+ let promoted = 0;
62
+ for (const j of jobs) {
63
+ try {
64
+ await qm.promote(j.id);
65
+ promoted++;
66
+ }
67
+ catch {
68
+ // skip
69
+ }
70
+ }
71
+ return { queue: cmd.queue, promoted };
72
+ },
73
+ 'queue:retryCompleted': (qm, cmd) => {
74
+ const count = qm.retryCompleted(cmd.queue ?? '');
75
+ return { queue: cmd.queue, retried: count };
76
+ },
77
+ // --- Queue config ---
78
+ 'queue:rateLimit': (qm, cmd) => {
79
+ qm.setRateLimit(cmd.queue ?? '', cmd.max ?? 100);
80
+ return { queue: cmd.queue, rateLimit: cmd.max ?? 100 };
81
+ },
82
+ 'queue:clearRateLimit': (qm, cmd) => {
83
+ qm.clearRateLimit(cmd.queue ?? '');
84
+ return { queue: cmd.queue, rateLimit: null };
85
+ },
86
+ 'queue:concurrency': (qm, cmd) => {
87
+ qm.setConcurrency(cmd.queue ?? '', cmd.concurrency ?? 10);
88
+ return { queue: cmd.queue, concurrency: cmd.concurrency ?? 10 };
89
+ },
90
+ 'queue:clearConcurrency': (qm, cmd) => {
91
+ qm.clearConcurrency(cmd.queue ?? '');
92
+ return { queue: cmd.queue, concurrency: null };
93
+ },
94
+ 'queue:stallConfig': (qm, cmd) => {
95
+ qm.setStallConfig(cmd.queue ?? '', cmd.config ?? {});
96
+ return { queue: cmd.queue, stallConfig: cmd.config };
97
+ },
98
+ 'queue:dlqConfig': (qm, cmd) => {
99
+ qm.setDlqConfig(cmd.queue ?? '', cmd.config ?? {});
100
+ return { queue: cmd.queue, dlqConfig: cmd.config };
101
+ },
102
+ // --- Queue detail ---
103
+ 'queue:detail': (qm, cmd) => {
104
+ const queue = cmd.queue ?? '';
105
+ const counts = qm.getQueueJobCounts(queue);
106
+ const paused = qm.isPaused(queue);
107
+ const stallConfig = qm.getStallConfig(queue);
108
+ const dlqConfig = qm.getDlqConfig(queue);
109
+ const dlqEntries = qm.getDlqEntries(queue).slice(0, 50);
110
+ const jobs = qm.getJobs(queue, {
111
+ state: ['waiting', 'active', 'delayed', 'completed', 'failed'],
112
+ start: 0,
113
+ end: 49,
114
+ });
115
+ return {
116
+ queue,
117
+ paused,
118
+ counts,
119
+ stallConfig: { stallInterval: stallConfig.stallInterval, maxStalls: stallConfig.maxStalls },
120
+ dlqConfig: { maxRetries: dlqConfig.maxAutoRetries, maxAge: dlqConfig.maxAge ?? 0 },
121
+ dlqEntries: dlqEntries.map((e) => ({
122
+ jobId: String(e.job.id),
123
+ reason: e.reason,
124
+ error: e.error,
125
+ enteredAt: e.enteredAt,
126
+ retryCount: e.retryCount,
127
+ })),
128
+ jobs: jobs.map(mapJob),
129
+ };
130
+ },
131
+ // --- Job operations ---
132
+ 'job:cancel': async (qm, cmd) => {
133
+ const ok = await qm.cancel(jobId(cmd.jobId ?? ''));
134
+ return { cancelled: ok };
135
+ },
136
+ 'job:promote': async (qm, cmd) => {
137
+ const ok = await qm.promote(jobId(cmd.jobId ?? ''));
138
+ return { promoted: ok };
139
+ },
140
+ 'job:push': async (qm, cmd) => {
141
+ const job = await qm.push(cmd.queue ?? '', {
142
+ data: cmd.data ?? {},
143
+ priority: cmd.priority,
144
+ delay: cmd.delay,
145
+ });
146
+ return { jobId: String(job.id), queue: cmd.queue };
147
+ },
148
+ 'job:priority': async (qm, cmd) => {
149
+ const ok = await qm.changePriority(jobId(cmd.jobId ?? ''), cmd.priority ?? 0);
150
+ return { changed: ok };
151
+ },
152
+ 'job:discard': async (qm, cmd) => {
153
+ const ok = await qm.discard(jobId(cmd.jobId ?? ''));
154
+ return { discarded: ok };
155
+ },
156
+ 'job:delay': async (qm, cmd) => {
157
+ await qm.changeDelay(jobId(cmd.jobId ?? ''), cmd.delay ?? 0);
158
+ return { delayed: true };
159
+ },
160
+ 'job:updateData': async (qm, cmd) => {
161
+ const ok = await qm.updateJobData(jobId(cmd.jobId ?? ''), cmd.data);
162
+ return { updated: ok };
163
+ },
164
+ 'job:clearLogs': (qm, cmd) => {
165
+ qm.clearLogs(jobId(cmd.jobId ?? ''), cmd.keepLogs);
166
+ return { cleared: true };
167
+ },
168
+ // --- Job queries ---
169
+ 'job:retry': (qm, cmd) => {
170
+ if (cmd.queue) {
171
+ const count = qm.retryDlq(cmd.queue, cmd.jobId ? jobId(cmd.jobId) : undefined);
172
+ return { retried: count };
173
+ }
174
+ return { retried: 0 };
175
+ },
176
+ 'job:logs': (qm, cmd) => {
177
+ const logs = qm.getLogs(jobId(cmd.jobId ?? ''));
178
+ return { logs };
179
+ },
180
+ 'job:result': (qm, cmd) => {
181
+ const result = qm.getResult(jobId(cmd.jobId ?? ''));
182
+ return { result: result ?? null };
183
+ },
184
+ 'job:list': (qm, cmd) => {
185
+ const limit = cmd.limit ?? 50;
186
+ const offset = cmd.offset ?? 0;
187
+ const states = cmd.state
188
+ ? cmd.state.split(',')
189
+ : ['waiting', 'active', 'delayed', 'completed', 'failed'];
190
+ const jobs = qm.getJobs(cmd.queue ?? '', {
191
+ state: states,
192
+ start: offset,
193
+ end: offset + limit - 1,
194
+ });
195
+ return { jobs: jobs.map(mapJob), total: qm.count(cmd.queue ?? ''), offset, limit };
196
+ },
197
+ 'job:get': async (qm, cmd) => {
198
+ const job = await qm.getJob(jobId(cmd.jobId ?? ''));
199
+ if (!job)
200
+ return { job: null };
201
+ const mapped = mapJob(job);
202
+ return {
203
+ job: {
204
+ ...mapped,
205
+ logs: qm.getLogs(jobId(cmd.jobId ?? '')),
206
+ result: qm.getResult(jobId(cmd.jobId ?? '')) ?? null,
207
+ },
208
+ };
209
+ },
210
+ // --- DLQ ---
211
+ 'dlq:retry': (qm, cmd) => {
212
+ const count = qm.retryDlq(cmd.queue ?? '', cmd.jobId ? jobId(cmd.jobId) : undefined);
213
+ return { retried: count };
214
+ },
215
+ 'dlq:purge': (qm, cmd) => {
216
+ const count = qm.purgeDlq(cmd.queue ?? '');
217
+ return { purged: count };
218
+ },
219
+ // --- Cron ---
220
+ 'cron:upsert': (qm, cmd) => {
221
+ qm.removeCron(cmd.name ?? '');
222
+ const cron = qm.addCron({
223
+ name: cmd.name ?? '',
224
+ queue: cmd.queue ?? '',
225
+ data: cmd.data ?? {},
226
+ schedule: cmd.schedule,
227
+ });
228
+ return { name: cron.name, nextRun: cron.nextRun };
229
+ },
230
+ 'cron:delete': (qm, cmd) => {
231
+ const ok = qm.removeCron(cmd.name ?? '');
232
+ return { deleted: ok };
233
+ },
234
+ // --- Webhooks ---
235
+ 'webhook:add': (qm, cmd) => {
236
+ const wh = qm.webhookManager.add(cmd.url ?? '', cmd.events ?? [], cmd.queue ?? undefined, cmd.secret ?? undefined);
237
+ return { id: wh.id, url: wh.url, events: wh.events };
238
+ },
239
+ 'webhook:remove': (qm, cmd) => {
240
+ const ok = qm.webhookManager.remove(cmd.webhookId ?? '');
241
+ return { removed: ok };
242
+ },
243
+ 'webhook:set-enabled': (qm, cmd) => {
244
+ const ok = qm.webhookManager.setEnabled(cmd.webhookId ?? '', cmd.enabled ?? true);
245
+ return { updated: ok };
246
+ },
247
+ // --- Stats & backup ---
248
+ 'stats:refresh': (qm) => {
249
+ return qm.getStats();
250
+ },
251
+ 's3:backup': async (qm) => {
252
+ const handles = qm.serverHandles;
253
+ if (handles?.triggerBackup) {
254
+ return await handles.triggerBackup();
255
+ }
256
+ return { error: 'S3 backup not configured' };
257
+ },
258
+ };
259
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAwBrE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/cloud/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAgCrE"}
@@ -10,6 +10,13 @@ export function loadCloudConfig(dataPath) {
10
10
  // Both URL and API key required to enable
11
11
  if (!url || !apiKey)
12
12
  return null;
13
+ // Only cloud.bunqueue.io is accepted
14
+ const ALLOWED_URL = 'https://cloud.bunqueue.io';
15
+ const normalized = url.replace(/\/+$/, '').toLowerCase();
16
+ if (normalized !== ALLOWED_URL) {
17
+ console.warn(`[Cloud] Rejected BUNQUEUE_CLOUD_URL="${url}" — only ${ALLOWED_URL} is supported`);
18
+ return null;
19
+ }
13
20
  return {
14
21
  url: url.replace(/\/+$/, ''), // Strip trailing slashes
15
22
  apiKey,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAE9B,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAE9C,0CAA0C;IAC1C,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjC,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,yBAAyB;QACvD,MAAM;QACN,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,6BAA6B,IAAI,IAAI;QAC5D,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,4BAA4B,IAAI,QAAQ,EAAE;QAChE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,IAAI,MAAM,EAAE,EAAE,CAAC;QACtE,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,+BAA+B,KAAK,MAAM;QAClE,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QACpF,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QAC5E,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,IAAI,KAAK,EAAE,EAAE,CAAC;QACrE,uBAAuB,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,wCAAwC,IAAI,GAAG,EAAE,EAAE,CAAC;QAC9F,qBAAqB,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,uCAAuC,IAAI,OAAO,EAAE,EAAE,CAAC;QAC/F,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,4BAA4B,KAAK,OAAO;QAC9D,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,uBAAuB,KAAK,OAAO;QACpD,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC1B,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,8BAA8B,KAAK,MAAM;KAClE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/infrastructure/cloud/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAE9B,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAE9C,0CAA0C;IAC1C,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEjC,qCAAqC;IACrC,MAAM,WAAW,GAAG,2BAA2B,CAAC;IAChD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,wCAAwC,GAAG,YAAY,WAAW,eAAe,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,yBAAyB;QACvD,MAAM;QACN,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,6BAA6B,IAAI,IAAI;QAC5D,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,4BAA4B,IAAI,QAAQ,EAAE;QAChE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,IAAI,MAAM,EAAE,EAAE,CAAC;QACtE,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,+BAA+B,KAAK,MAAM;QAClE,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QACpF,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QAC5E,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,0BAA0B,IAAI,KAAK,EAAE,EAAE,CAAC;QACrE,uBAAuB,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,wCAAwC,IAAI,GAAG,EAAE,EAAE,CAAC;QAC9F,qBAAqB,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,uCAAuC,IAAI,OAAO,EAAE,EAAE,CAAC;QAC/F,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,4BAA4B,KAAK,OAAO;QAC9D,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,uBAAuB,KAAK,OAAO;QACpD,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC1B,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,8BAA8B,KAAK,MAAM;KAClE,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunqueue",
3
- "version": "2.6.48",
3
+ "version": "2.6.50",
4
4
  "description": "High-performance job queue for Bun & AI agents. SQLite persistence, cron scheduling, priorities, retries, DLQ, webhooks, native MCP server. Zero external dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",