pg-boss 12.4.0 → 12.4.1
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/attorney.d.ts +19 -0
- package/dist/attorney.d.ts.map +1 -0
- package/dist/attorney.js +170 -0
- package/dist/boss.d.ts +16 -0
- package/dist/boss.d.ts.map +1 -0
- package/dist/boss.js +135 -0
- package/dist/contractor.d.ts +22 -0
- package/dist/contractor.d.ts.map +1 -0
- package/dist/contractor.js +81 -0
- package/dist/db.d.ts +16 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +46 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +233 -0
- package/dist/manager.d.ts +85 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +481 -0
- package/dist/migrationStore.d.ts +7 -0
- package/dist/migrationStore.d.ts.map +1 -0
- package/dist/migrationStore.js +126 -0
- package/dist/plans.d.ts +78 -0
- package/dist/plans.d.ts.map +1 -0
- package/dist/plans.js +885 -0
- package/dist/timekeeper.d.ts +34 -0
- package/dist/timekeeper.d.ts.map +1 -0
- package/dist/timekeeper.js +158 -0
- package/dist/tools.d.ts +18 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +45 -0
- package/dist/types.d.ts +230 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/worker.d.ts +41 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +107 -0
- package/package.json +7 -11
- package/dist/index.d.mts +0 -285
- package/dist/index.mjs +0 -2468
package/dist/index.js
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import EventEmitter from 'node:events';
|
|
2
|
+
import * as Attorney from "./attorney.js";
|
|
3
|
+
import Contractor from "./contractor.js";
|
|
4
|
+
import Manager from "./manager.js";
|
|
5
|
+
import Timekeeper from "./timekeeper.js";
|
|
6
|
+
import Boss from "./boss.js";
|
|
7
|
+
import { delay } from "./tools.js";
|
|
8
|
+
import DbDefault from "./db.js";
|
|
9
|
+
export { JOB_STATES as states } from "./plans.js";
|
|
10
|
+
export { QUEUE_POLICIES as policies } from "./plans.js";
|
|
11
|
+
export const events = Object.freeze({
|
|
12
|
+
error: 'error',
|
|
13
|
+
warning: 'warning',
|
|
14
|
+
wip: 'wip',
|
|
15
|
+
stopped: 'stopped'
|
|
16
|
+
});
|
|
17
|
+
export function getConstructionPlans(schema) {
|
|
18
|
+
return Contractor.constructionPlans(schema);
|
|
19
|
+
}
|
|
20
|
+
export function getMigrationPlans(schema, version) {
|
|
21
|
+
return Contractor.migrationPlans(schema, version);
|
|
22
|
+
}
|
|
23
|
+
export function getRollbackPlans(schema, version) {
|
|
24
|
+
return Contractor.rollbackPlans(schema, version);
|
|
25
|
+
}
|
|
26
|
+
export class PgBoss extends EventEmitter {
|
|
27
|
+
#stoppingOn;
|
|
28
|
+
#stopped;
|
|
29
|
+
#starting;
|
|
30
|
+
#started;
|
|
31
|
+
#config;
|
|
32
|
+
#db;
|
|
33
|
+
#boss;
|
|
34
|
+
#contractor;
|
|
35
|
+
#manager;
|
|
36
|
+
#timekeeper;
|
|
37
|
+
constructor(value) {
|
|
38
|
+
super();
|
|
39
|
+
this.#stoppingOn = null;
|
|
40
|
+
this.#stopped = true;
|
|
41
|
+
const config = Attorney.getConfig(value);
|
|
42
|
+
this.#config = config;
|
|
43
|
+
const db = this.getDb();
|
|
44
|
+
this.#db = db;
|
|
45
|
+
if ('_pgbdb' in this.#db && this.#db._pgbdb) {
|
|
46
|
+
this.#promoteEvents(this.#db);
|
|
47
|
+
}
|
|
48
|
+
const contractor = new Contractor(db, config);
|
|
49
|
+
const manager = new Manager(db, config);
|
|
50
|
+
const boss = new Boss(db, manager, config);
|
|
51
|
+
const timekeeper = new Timekeeper(db, manager, config);
|
|
52
|
+
manager.timekeeper = timekeeper;
|
|
53
|
+
this.#promoteEvents(manager);
|
|
54
|
+
this.#promoteEvents(boss);
|
|
55
|
+
this.#promoteEvents(timekeeper);
|
|
56
|
+
this.#boss = boss;
|
|
57
|
+
this.#contractor = contractor;
|
|
58
|
+
this.#manager = manager;
|
|
59
|
+
this.#timekeeper = timekeeper;
|
|
60
|
+
}
|
|
61
|
+
#promoteEvents(emitter) {
|
|
62
|
+
for (const event of Object.values(emitter?.events)) {
|
|
63
|
+
emitter.on(event, arg => this.emit(event, arg));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async start() {
|
|
67
|
+
if (this.#starting || this.#started) {
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
this.#starting = true;
|
|
71
|
+
if (this.#db._pgbdb && !this.#db.opened) {
|
|
72
|
+
await this.#db.open();
|
|
73
|
+
}
|
|
74
|
+
if (this.#config.migrate) {
|
|
75
|
+
await this.#contractor.start();
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
await this.#contractor.check();
|
|
79
|
+
}
|
|
80
|
+
await this.#manager.start();
|
|
81
|
+
if (this.#config.supervise) {
|
|
82
|
+
await this.#boss.start();
|
|
83
|
+
}
|
|
84
|
+
if (this.#config.schedule) {
|
|
85
|
+
await this.#timekeeper.start();
|
|
86
|
+
}
|
|
87
|
+
this.#starting = false;
|
|
88
|
+
this.#started = true;
|
|
89
|
+
this.#stopped = false;
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
async stop(options = {}) {
|
|
93
|
+
if (this.#stoppingOn || this.#stopped) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
let { close = true, graceful = true, timeout = 30000 } = options;
|
|
97
|
+
timeout = Math.max(timeout, 1000);
|
|
98
|
+
this.#stoppingOn = Date.now();
|
|
99
|
+
await this.#manager.stop();
|
|
100
|
+
await this.#timekeeper.stop();
|
|
101
|
+
await this.#boss.stop();
|
|
102
|
+
const shutdown = async () => {
|
|
103
|
+
await this.#manager.failWip();
|
|
104
|
+
if (this.#db._pgbdb && this.#db.opened && close) {
|
|
105
|
+
await this.#db.close();
|
|
106
|
+
// Give event loop time to process socket closes
|
|
107
|
+
await delay(10);
|
|
108
|
+
}
|
|
109
|
+
this.#stopped = true;
|
|
110
|
+
this.#stoppingOn = null;
|
|
111
|
+
this.#started = false;
|
|
112
|
+
this.emit(events.stopped);
|
|
113
|
+
};
|
|
114
|
+
if (!graceful) {
|
|
115
|
+
return await shutdown();
|
|
116
|
+
}
|
|
117
|
+
while ((Date.now() - this.#stoppingOn) < timeout && this.#manager.hasPendingCleanups()) {
|
|
118
|
+
await delay(500);
|
|
119
|
+
}
|
|
120
|
+
await shutdown();
|
|
121
|
+
}
|
|
122
|
+
async send(...args) {
|
|
123
|
+
return await this.#manager.send(...args);
|
|
124
|
+
}
|
|
125
|
+
async sendAfter(name, data, options, after) {
|
|
126
|
+
return this.#manager.sendAfter(name, data, options, after);
|
|
127
|
+
}
|
|
128
|
+
sendThrottled(name, data, options, seconds, key) {
|
|
129
|
+
return this.#manager.sendThrottled(name, data, options, seconds, key);
|
|
130
|
+
}
|
|
131
|
+
sendDebounced(name, data, options, seconds, key) {
|
|
132
|
+
return this.#manager.sendDebounced(name, data, options, seconds, key);
|
|
133
|
+
}
|
|
134
|
+
insert(name, jobs, options) {
|
|
135
|
+
return this.#manager.insert(name, jobs, options);
|
|
136
|
+
}
|
|
137
|
+
fetch(name, options = {}) {
|
|
138
|
+
return this.#manager.fetch(name, options);
|
|
139
|
+
}
|
|
140
|
+
work(...args) {
|
|
141
|
+
return this.#manager.work(...args);
|
|
142
|
+
}
|
|
143
|
+
offWork(name, options) {
|
|
144
|
+
return this.#manager.offWork(name, options);
|
|
145
|
+
}
|
|
146
|
+
notifyWorker(workerId) {
|
|
147
|
+
return this.#manager.notifyWorker(workerId);
|
|
148
|
+
}
|
|
149
|
+
subscribe(event, name) {
|
|
150
|
+
return this.#manager.subscribe(event, name);
|
|
151
|
+
}
|
|
152
|
+
unsubscribe(event, name) {
|
|
153
|
+
return this.#manager.unsubscribe(event, name);
|
|
154
|
+
}
|
|
155
|
+
publish(event, data, options) {
|
|
156
|
+
return this.#manager.publish(event, data, options);
|
|
157
|
+
}
|
|
158
|
+
cancel(name, id, options) {
|
|
159
|
+
return this.#manager.cancel(name, id, options);
|
|
160
|
+
}
|
|
161
|
+
resume(name, id, options) {
|
|
162
|
+
return this.#manager.resume(name, id, options);
|
|
163
|
+
}
|
|
164
|
+
retry(name, id, options) {
|
|
165
|
+
return this.#manager.retry(name, id, options);
|
|
166
|
+
}
|
|
167
|
+
deleteJob(name, id, options) {
|
|
168
|
+
return this.#manager.deleteJob(name, id, options);
|
|
169
|
+
}
|
|
170
|
+
deleteQueuedJobs(name) {
|
|
171
|
+
return this.#manager.deleteQueuedJobs(name);
|
|
172
|
+
}
|
|
173
|
+
deleteStoredJobs(name) {
|
|
174
|
+
return this.#manager.deleteStoredJobs(name);
|
|
175
|
+
}
|
|
176
|
+
deleteAllJobs(name) {
|
|
177
|
+
return this.#manager.deleteAllJobs(name);
|
|
178
|
+
}
|
|
179
|
+
complete(name, id, data, options) {
|
|
180
|
+
return this.#manager.complete(name, id, data, options);
|
|
181
|
+
}
|
|
182
|
+
fail(name, id, data, options) {
|
|
183
|
+
return this.#manager.fail(name, id, data, options);
|
|
184
|
+
}
|
|
185
|
+
getJobById(name, id, options) {
|
|
186
|
+
return this.#manager.getJobById(name, id, options);
|
|
187
|
+
}
|
|
188
|
+
createQueue(name, options) {
|
|
189
|
+
return this.#manager.createQueue(name, options);
|
|
190
|
+
}
|
|
191
|
+
updateQueue(name, options) {
|
|
192
|
+
return this.#manager.updateQueue(name, options);
|
|
193
|
+
}
|
|
194
|
+
deleteQueue(name) {
|
|
195
|
+
return this.#manager.deleteQueue(name);
|
|
196
|
+
}
|
|
197
|
+
getQueues(names) {
|
|
198
|
+
return this.#manager.getQueues();
|
|
199
|
+
}
|
|
200
|
+
getQueue(name) {
|
|
201
|
+
return this.#manager.getQueue(name);
|
|
202
|
+
}
|
|
203
|
+
getQueueStats(name) {
|
|
204
|
+
return this.#manager.getQueueStats(name);
|
|
205
|
+
}
|
|
206
|
+
supervise(name) {
|
|
207
|
+
return this.#boss.supervise(name);
|
|
208
|
+
}
|
|
209
|
+
isInstalled() {
|
|
210
|
+
return this.#contractor.isInstalled();
|
|
211
|
+
}
|
|
212
|
+
schemaVersion() {
|
|
213
|
+
return this.#contractor.schemaVersion();
|
|
214
|
+
}
|
|
215
|
+
schedule(name, cron, data, options) {
|
|
216
|
+
return this.#timekeeper.schedule(name, cron, data, options);
|
|
217
|
+
}
|
|
218
|
+
unschedule(name, key) {
|
|
219
|
+
return this.#timekeeper.unschedule(name, key);
|
|
220
|
+
}
|
|
221
|
+
getSchedules(name, key) {
|
|
222
|
+
return this.#timekeeper.getSchedules(name, key);
|
|
223
|
+
}
|
|
224
|
+
getDb() {
|
|
225
|
+
if (this.#db) {
|
|
226
|
+
return this.#db;
|
|
227
|
+
}
|
|
228
|
+
if (this.#config.db) {
|
|
229
|
+
return this.#config.db;
|
|
230
|
+
}
|
|
231
|
+
return new DbDefault(this.#config);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import EventEmitter from 'node:events';
|
|
2
|
+
import type Db from './db.ts';
|
|
3
|
+
import type Timekeeper from './timekeeper.ts';
|
|
4
|
+
import * as types from './types.ts';
|
|
5
|
+
import Worker from './worker.ts';
|
|
6
|
+
declare class Manager extends EventEmitter implements types.EventsMixin {
|
|
7
|
+
events: {
|
|
8
|
+
error: string;
|
|
9
|
+
wip: string;
|
|
10
|
+
};
|
|
11
|
+
db: (types.IDatabase & {
|
|
12
|
+
_pgbdb?: false;
|
|
13
|
+
}) | Db;
|
|
14
|
+
config: types.ResolvedConstructorOptions;
|
|
15
|
+
wipTs: number;
|
|
16
|
+
workers: Map<string, Worker>;
|
|
17
|
+
stopped: boolean | undefined;
|
|
18
|
+
queueCacheInterval: NodeJS.Timeout | undefined;
|
|
19
|
+
timekeeper: Timekeeper | undefined;
|
|
20
|
+
queues: Record<string, types.QueueResult> | null;
|
|
21
|
+
pendingOffWorkCleanups: Set<Promise<any>>;
|
|
22
|
+
constructor(db: types.IDatabase, config: types.ResolvedConstructorOptions);
|
|
23
|
+
start(): Promise<void>;
|
|
24
|
+
onCacheQueues({ emit }?: {
|
|
25
|
+
emit?: boolean | undefined;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
getQueueCache(name: string): Promise<types.QueueResult>;
|
|
28
|
+
stop(): Promise<void>;
|
|
29
|
+
failWip(): Promise<void>;
|
|
30
|
+
work<ReqData>(name: string, handler: types.WorkHandler<ReqData>): Promise<string>;
|
|
31
|
+
work<ReqData>(name: string, options: types.WorkOptions & {
|
|
32
|
+
includeMetadata: true;
|
|
33
|
+
}, handler: types.WorkWithMetadataHandler<ReqData>): Promise<string>;
|
|
34
|
+
work<ReqData>(name: string, options: types.WorkOptions, handler: types.WorkHandler<ReqData>): Promise<string>;
|
|
35
|
+
private addWorker;
|
|
36
|
+
private removeWorker;
|
|
37
|
+
private getWorkers;
|
|
38
|
+
private emitWip;
|
|
39
|
+
getWipData(options?: {
|
|
40
|
+
includeInternal?: boolean;
|
|
41
|
+
}): types.WipData[];
|
|
42
|
+
hasPendingCleanups(): boolean;
|
|
43
|
+
offWork(name: string, options?: types.OffWorkOptions): Promise<void>;
|
|
44
|
+
notifyWorker(workerId: string): void;
|
|
45
|
+
subscribe(event: string, name: string): Promise<void>;
|
|
46
|
+
unsubscribe(event: string, name: string): Promise<void>;
|
|
47
|
+
publish(event: string, data?: object, options?: types.SendOptions): Promise<void>;
|
|
48
|
+
send(request: types.Request): Promise<string | null>;
|
|
49
|
+
send(name: string, data?: object | null, options?: types.SendOptions): Promise<string | null>;
|
|
50
|
+
sendAfter(name: string, data: object, options: types.SendOptions, after: Date | string | number): Promise<string | null>;
|
|
51
|
+
sendThrottled(name: string, data: object, options: types.SendOptions, seconds: number, key?: string): Promise<string | null>;
|
|
52
|
+
sendDebounced(name: string, data: object, options: types.SendOptions, seconds: number, key?: string): Promise<string | null>;
|
|
53
|
+
createJob(request: types.Request): Promise<string | null>;
|
|
54
|
+
insert(name: string, jobs: types.JobInsert[], options?: types.InsertOptions): Promise<string[] | null>;
|
|
55
|
+
getDebounceStartAfter(singletonSeconds: number, clockOffset: number): number;
|
|
56
|
+
fetch<T>(name: string): Promise<types.Job<T>[]>;
|
|
57
|
+
fetch<T>(name: string, options: types.FetchOptions & {
|
|
58
|
+
includeMetadata: true;
|
|
59
|
+
}): Promise<types.JobWithMetadata<T>[]>;
|
|
60
|
+
fetch<T>(name: string, options: types.FetchOptions): Promise<types.Job<T>[]>;
|
|
61
|
+
private mapCompletionIdArg;
|
|
62
|
+
private mapCompletionDataArg;
|
|
63
|
+
private mapCommandResponse;
|
|
64
|
+
complete(name: string, id: string | string[], data?: object, options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
65
|
+
fail(name: string, id: string | string[], data?: any, options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
66
|
+
cancel(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
67
|
+
deleteJob(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
68
|
+
resume(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
69
|
+
retry(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
|
|
70
|
+
createQueue(name: string, options?: Omit<types.Queue, 'name'> & {
|
|
71
|
+
name?: string;
|
|
72
|
+
}): Promise<void>;
|
|
73
|
+
getQueues(names?: string | string[]): Promise<types.QueueResult[]>;
|
|
74
|
+
updateQueue(name: string, options?: types.UpdateQueueOptions): Promise<void>;
|
|
75
|
+
getQueue(name: string): Promise<any>;
|
|
76
|
+
deleteQueue(name: string): Promise<void>;
|
|
77
|
+
deleteQueuedJobs(name: string): Promise<void>;
|
|
78
|
+
deleteStoredJobs(name: string): Promise<void>;
|
|
79
|
+
deleteAllJobs(name: string): Promise<void>;
|
|
80
|
+
getQueueStats(name: string): Promise<any>;
|
|
81
|
+
getJobById<T>(name: string, id: string, options?: types.ConnectionOptions): Promise<types.JobWithMetadata<T> | null>;
|
|
82
|
+
private assertDb;
|
|
83
|
+
}
|
|
84
|
+
export default Manager;
|
|
85
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"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"}
|