pg-boss 10.4.0 → 10.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.
Files changed (48) hide show
  1. package/.claude/settings.local.json +11 -1
  2. package/dist/attorney.d.ts +19 -0
  3. package/dist/attorney.d.ts.map +1 -0
  4. package/dist/attorney.js +227 -0
  5. package/dist/bam.d.ts +14 -0
  6. package/dist/bam.d.ts.map +1 -0
  7. package/dist/bam.js +114 -0
  8. package/dist/boss.d.ts +16 -0
  9. package/dist/boss.d.ts.map +1 -0
  10. package/dist/boss.js +163 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +333 -0
  14. package/dist/contractor.d.ts +22 -0
  15. package/dist/contractor.d.ts.map +1 -0
  16. package/dist/contractor.js +81 -0
  17. package/dist/db.d.ts +16 -0
  18. package/dist/db.d.ts.map +1 -0
  19. package/dist/db.js +46 -0
  20. package/dist/index.d.ts +72 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +266 -0
  23. package/dist/manager.d.ts +93 -0
  24. package/dist/manager.d.ts.map +1 -0
  25. package/dist/manager.js +746 -0
  26. package/dist/migrationStore.d.ts +7 -0
  27. package/dist/migrationStore.d.ts.map +1 -0
  28. package/dist/migrationStore.js +425 -0
  29. package/dist/plans.d.ts +102 -0
  30. package/dist/plans.d.ts.map +1 -0
  31. package/dist/plans.js +1220 -0
  32. package/dist/spy.d.ts +23 -0
  33. package/dist/spy.d.ts.map +1 -0
  34. package/dist/spy.js +73 -0
  35. package/dist/timekeeper.d.ts +34 -0
  36. package/dist/timekeeper.d.ts.map +1 -0
  37. package/dist/timekeeper.js +158 -0
  38. package/dist/tools.d.ts +18 -0
  39. package/dist/tools.d.ts.map +1 -0
  40. package/dist/tools.js +45 -0
  41. package/dist/types.d.ts +301 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +1 -0
  44. package/dist/worker.d.ts +43 -0
  45. package/dist/worker.d.ts.map +1 -0
  46. package/dist/worker.js +113 -0
  47. package/package.json +1 -1
  48. package/src/plans.js +4 -4
package/dist/cli.js ADDED
@@ -0,0 +1,333 @@
1
+ #!/usr/bin/env node
2
+ import { parseArgs } from 'node:util';
3
+ import { readFileSync, existsSync } from 'node:fs';
4
+ import { resolve } from 'node:path';
5
+ import Db from "./db.js";
6
+ import * as plans from "./plans.js";
7
+ import * as migrationStore from "./migrationStore.js";
8
+ import packageJson from '../package.json' with { type: 'json' };
9
+ const schemaVersion = packageJson.pgboss.schema;
10
+ function printHelp() {
11
+ console.log(`
12
+ pg-boss CLI v${packageJson.version}
13
+
14
+ Usage: pg-boss <command> [options]
15
+
16
+ Commands:
17
+ migrate Run pending migrations (creates schema if not exists)
18
+ create Create the pg-boss schema (initial installation)
19
+ version Show current schema version
20
+ plans Output SQL plans without executing
21
+ rollback Rollback the last migration
22
+
23
+ Options:
24
+ --help, -h Show this help message
25
+ --config, -c <file> Path to config file (default: pgboss.json)
26
+ --schema, -s <name> Schema name (default: pgboss)
27
+ --host <host> Database host
28
+ --port <port> Database port
29
+ --database, -d <name> Database name
30
+ --user, -u <user> Database user
31
+ --password, -p <pass> Database password
32
+ --connection-string Full connection string (overrides other connection options)
33
+ --ssl Enable SSL connection
34
+ --dry-run Output SQL without executing (for plans command)
35
+
36
+ Environment Variables:
37
+ PGBOSS_DATABASE_URL Full connection string
38
+ PGBOSS_HOST Database host
39
+ PGBOSS_PORT Database port
40
+ PGBOSS_DATABASE Database name
41
+ PGBOSS_USER Database user
42
+ PGBOSS_PASSWORD Database password
43
+ PGBOSS_SCHEMA Schema name (default: pgboss)
44
+
45
+ Config File (pgboss.json):
46
+ {
47
+ "host": "localhost",
48
+ "port": 5432,
49
+ "database": "mydb",
50
+ "user": "postgres",
51
+ "password": "secret",
52
+ "schema": "pgboss",
53
+ "ssl": false
54
+ }
55
+
56
+ Examples:
57
+ pg-boss migrate
58
+ pg-boss migrate --schema my_schema
59
+ pg-boss create --connection-string postgres://user:pass@localhost/db
60
+ pg-boss plans migrate --dry-run
61
+ pg-boss version
62
+ PGBOSS_DATABASE_URL=postgres://localhost/mydb pg-boss migrate
63
+ `);
64
+ }
65
+ function loadConfigFile(configPath) {
66
+ const paths = configPath
67
+ ? [resolve(configPath)]
68
+ : [
69
+ resolve('pgboss.json'),
70
+ resolve('.pgbossrc'),
71
+ resolve('.pgbossrc.json')
72
+ ];
73
+ for (const filePath of paths) {
74
+ if (existsSync(filePath)) {
75
+ try {
76
+ const content = readFileSync(filePath, 'utf-8');
77
+ const config = JSON.parse(content);
78
+ console.log(`Loaded config from ${filePath}`);
79
+ return config;
80
+ }
81
+ catch (err) {
82
+ console.error(`Error reading config file ${filePath}: ${err.message}`);
83
+ process.exit(1);
84
+ }
85
+ }
86
+ }
87
+ return {};
88
+ }
89
+ function getConnectionConfig(args) {
90
+ const fileConfig = loadConfigFile(args.config);
91
+ const config = {
92
+ connectionString: args.connectionString || process.env.PGBOSS_DATABASE_URL || fileConfig.connectionString,
93
+ host: args.host || process.env.PGBOSS_HOST || fileConfig.host,
94
+ port: args.port ? parseInt(args.port, 10) : (process.env.PGBOSS_PORT ? parseInt(process.env.PGBOSS_PORT, 10) : fileConfig.port),
95
+ database: args.database || process.env.PGBOSS_DATABASE || fileConfig.database,
96
+ user: args.user || process.env.PGBOSS_USER || fileConfig.user,
97
+ password: args.password || process.env.PGBOSS_PASSWORD || fileConfig.password,
98
+ schema: args.schema || process.env.PGBOSS_SCHEMA || fileConfig.schema || plans.DEFAULT_SCHEMA
99
+ };
100
+ if (args.ssl || fileConfig.ssl) {
101
+ config.ssl = args.ssl ? { rejectUnauthorized: false } : fileConfig.ssl;
102
+ }
103
+ if (!config.connectionString && !config.host && !config.database) {
104
+ console.error('Error: No database connection configured.');
105
+ console.error('Provide connection via --connection-string, environment variables, or config file.');
106
+ console.error('Run "pg-boss --help" for more information.');
107
+ process.exit(1);
108
+ }
109
+ return config;
110
+ }
111
+ function parseCliArgs() {
112
+ const { values, positionals } = parseArgs({
113
+ options: {
114
+ help: { type: 'boolean', short: 'h' },
115
+ config: { type: 'string', short: 'c' },
116
+ schema: { type: 'string', short: 's' },
117
+ host: { type: 'string' },
118
+ port: { type: 'string' },
119
+ database: { type: 'string', short: 'd' },
120
+ user: { type: 'string', short: 'u' },
121
+ password: { type: 'string', short: 'p' },
122
+ 'connection-string': { type: 'string' },
123
+ ssl: { type: 'boolean' },
124
+ 'dry-run': { type: 'boolean' }
125
+ },
126
+ allowPositionals: true
127
+ });
128
+ return {
129
+ help: values.help,
130
+ config: values.config,
131
+ schema: values.schema,
132
+ host: values.host,
133
+ port: values.port,
134
+ database: values.database,
135
+ user: values.user,
136
+ password: values.password,
137
+ connectionString: values['connection-string'],
138
+ ssl: values.ssl,
139
+ dryRun: values['dry-run'],
140
+ command: positionals[0],
141
+ subCommand: positionals[1]
142
+ };
143
+ }
144
+ async function createDb(config) {
145
+ const db = new Db(config);
146
+ await db.open();
147
+ return db;
148
+ }
149
+ async function getSchemaVersion(db, schema) {
150
+ try {
151
+ const result = await db.executeSql(plans.versionTableExists(schema));
152
+ if (!result.rows[0].name) {
153
+ return null;
154
+ }
155
+ const versionResult = await db.executeSql(plans.getVersion(schema));
156
+ return versionResult.rows.length ? parseInt(versionResult.rows[0].version) : null;
157
+ }
158
+ catch {
159
+ return null;
160
+ }
161
+ }
162
+ async function cmdVersion(args) {
163
+ const config = getConnectionConfig(args);
164
+ const schema = config.schema || plans.DEFAULT_SCHEMA;
165
+ const db = await createDb(config);
166
+ try {
167
+ const version = await getSchemaVersion(db, schema);
168
+ if (version === null) {
169
+ console.log(`pg-boss is not installed in schema "${schema}"`);
170
+ }
171
+ else {
172
+ console.log(`Current schema version: ${version}`);
173
+ console.log(`Latest schema version: ${schemaVersion}`);
174
+ if (version < schemaVersion) {
175
+ console.log(`Migrations pending: ${schemaVersion - version}`);
176
+ }
177
+ else {
178
+ console.log('Schema is up to date');
179
+ }
180
+ }
181
+ }
182
+ finally {
183
+ await db.close();
184
+ }
185
+ }
186
+ async function cmdCreate(args) {
187
+ const config = getConnectionConfig(args);
188
+ const schema = config.schema || plans.DEFAULT_SCHEMA;
189
+ if (args.dryRun) {
190
+ const sql = plans.create(schema, schemaVersion, { createSchema: true });
191
+ console.log('-- SQL to create pg-boss schema:');
192
+ console.log(sql);
193
+ return;
194
+ }
195
+ const db = await createDb(config);
196
+ try {
197
+ const version = await getSchemaVersion(db, schema);
198
+ if (version !== null) {
199
+ console.log(`pg-boss is already installed in schema "${schema}" at version ${version}`);
200
+ return;
201
+ }
202
+ console.log(`Creating pg-boss schema "${schema}"...`);
203
+ const sql = plans.create(schema, schemaVersion, { createSchema: true });
204
+ await db.executeSql(sql);
205
+ console.log(`Successfully created pg-boss schema "${schema}" at version ${schemaVersion}`);
206
+ }
207
+ finally {
208
+ await db.close();
209
+ }
210
+ }
211
+ async function cmdMigrate(args) {
212
+ const config = getConnectionConfig(args);
213
+ const schema = config.schema || plans.DEFAULT_SCHEMA;
214
+ if (args.dryRun) {
215
+ const sql = migrationStore.migrate(schema, 0);
216
+ console.log('-- SQL to migrate pg-boss from version 0 to latest:');
217
+ console.log(sql);
218
+ return;
219
+ }
220
+ const db = await createDb(config);
221
+ try {
222
+ const version = await getSchemaVersion(db, schema);
223
+ if (version === null) {
224
+ console.log(`pg-boss is not installed. Creating schema "${schema}"...`);
225
+ const sql = plans.create(schema, schemaVersion, { createSchema: true });
226
+ await db.executeSql(sql);
227
+ console.log(`Successfully created pg-boss schema "${schema}" at version ${schemaVersion}`);
228
+ return;
229
+ }
230
+ if (version >= schemaVersion) {
231
+ console.log(`pg-boss schema "${schema}" is already at version ${version} (latest: ${schemaVersion})`);
232
+ return;
233
+ }
234
+ console.log(`Migrating pg-boss schema "${schema}" from version ${version} to ${schemaVersion}...`);
235
+ const sql = migrationStore.migrate(schema, version);
236
+ await db.executeSql(sql);
237
+ console.log(`Successfully migrated pg-boss schema "${schema}" to version ${schemaVersion}`);
238
+ }
239
+ finally {
240
+ await db.close();
241
+ }
242
+ }
243
+ async function cmdRollback(args) {
244
+ const config = getConnectionConfig(args);
245
+ const schema = config.schema || plans.DEFAULT_SCHEMA;
246
+ const db = await createDb(config);
247
+ try {
248
+ const version = await getSchemaVersion(db, schema);
249
+ if (version === null) {
250
+ console.log(`pg-boss is not installed in schema "${schema}"`);
251
+ return;
252
+ }
253
+ if (version <= 1) {
254
+ console.log('Cannot rollback: already at minimum version');
255
+ return;
256
+ }
257
+ if (args.dryRun) {
258
+ const sql = migrationStore.rollback(schema, version);
259
+ console.log(`-- SQL to rollback pg-boss from version ${version} to ${version - 1}:`);
260
+ console.log(sql);
261
+ return;
262
+ }
263
+ console.log(`Rolling back pg-boss schema "${schema}" from version ${version} to ${version - 1}...`);
264
+ const sql = migrationStore.rollback(schema, version);
265
+ await db.executeSql(sql);
266
+ console.log(`Successfully rolled back pg-boss schema "${schema}" to version ${version - 1}`);
267
+ }
268
+ finally {
269
+ await db.close();
270
+ }
271
+ }
272
+ async function cmdPlans(args) {
273
+ const fileConfig = loadConfigFile(args.config);
274
+ const schema = args.schema || process.env.PGBOSS_SCHEMA || fileConfig.schema || plans.DEFAULT_SCHEMA;
275
+ const subCommand = args.subCommand || 'migrate';
276
+ switch (subCommand) {
277
+ case 'create':
278
+ case 'construct':
279
+ console.log('-- SQL to create pg-boss schema:');
280
+ console.log(plans.create(schema, schemaVersion, { createSchema: true }));
281
+ break;
282
+ case 'migrate':
283
+ console.log('-- SQL to migrate pg-boss (from version 0 to latest):');
284
+ console.log(migrationStore.migrate(schema, 0));
285
+ break;
286
+ case 'rollback':
287
+ console.log(`-- SQL to rollback pg-boss from version ${schemaVersion} to ${schemaVersion - 1}:`);
288
+ console.log(migrationStore.rollback(schema, schemaVersion));
289
+ break;
290
+ default:
291
+ console.error(`Unknown plans subcommand: ${subCommand}`);
292
+ console.error('Available: create, migrate, rollback');
293
+ process.exit(1);
294
+ }
295
+ }
296
+ async function main() {
297
+ const args = parseCliArgs();
298
+ if (args.help || !args.command) {
299
+ printHelp();
300
+ process.exit(0);
301
+ }
302
+ try {
303
+ switch (args.command) {
304
+ case 'version':
305
+ await cmdVersion(args);
306
+ break;
307
+ case 'create':
308
+ await cmdCreate(args);
309
+ break;
310
+ case 'migrate':
311
+ await cmdMigrate(args);
312
+ break;
313
+ case 'rollback':
314
+ await cmdRollback(args);
315
+ break;
316
+ case 'plans':
317
+ await cmdPlans(args);
318
+ break;
319
+ default:
320
+ console.error(`Unknown command: ${args.command}`);
321
+ console.error('Run "pg-boss --help" for available commands.');
322
+ process.exit(1);
323
+ }
324
+ }
325
+ catch (err) {
326
+ console.error(`Error: ${err.message}`);
327
+ if (process.env.DEBUG) {
328
+ console.error(err.stack);
329
+ }
330
+ process.exit(1);
331
+ }
332
+ }
333
+ main();
@@ -0,0 +1,22 @@
1
+ import type * as types from './types.ts';
2
+ declare class Contractor {
3
+ static constructionPlans(schema?: string, options?: {
4
+ createSchema: boolean;
5
+ }): string;
6
+ static migrationPlans(schema?: string, version?: number): string;
7
+ static rollbackPlans(schema?: string, version?: number): string;
8
+ private config;
9
+ private db;
10
+ private migrations;
11
+ constructor(db: types.IDatabase, config: types.ResolvedConstructorOptions);
12
+ schemaVersion(): Promise<number | null>;
13
+ isInstalled(): Promise<boolean>;
14
+ start(): Promise<void>;
15
+ check(): Promise<void>;
16
+ create(): Promise<void>;
17
+ migrate(version: number): Promise<void>;
18
+ next(version: number): Promise<void>;
19
+ rollback(version: number): Promise<void>;
20
+ }
21
+ export default Contractor;
22
+ //# sourceMappingURL=contractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contractor.d.ts","sourceRoot":"","sources":["../src/contractor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAIxC,cAAM,UAAU;IACd,MAAM,CAAC,iBAAiB,CAAE,MAAM,SAAuB,EAAE,OAAO;;KAAyB;IAIzF,MAAM,CAAC,cAAc,CAAE,MAAM,SAAuB,EAAE,OAAO,SAAoB;IAIjF,MAAM,CAAC,aAAa,CAAE,MAAM,SAAuB,EAAE,OAAO,SAAgB;IAI5E,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,UAAU,CAAmB;gBAExB,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,0BAA0B;IAMpE,aAAa;IAKb,WAAW;IAKX,KAAK;IAcL,KAAK;IAcL,MAAM;IASN,OAAO,CAAE,OAAO,EAAE,MAAM;IASxB,IAAI,CAAE,OAAO,EAAE,MAAM;IAKrB,QAAQ,CAAE,OAAO,EAAE,MAAM;CAIhC;AAED,eAAe,UAAU,CAAA"}
@@ -0,0 +1,81 @@
1
+ import assert from 'node:assert';
2
+ import * as plans from "./plans.js";
3
+ import * as migrationStore from "./migrationStore.js";
4
+ import packageJson from '../package.json' with { type: 'json' };
5
+ const schemaVersion = packageJson.pgboss.schema;
6
+ class Contractor {
7
+ static constructionPlans(schema = plans.DEFAULT_SCHEMA, options = { createSchema: true }) {
8
+ return plans.create(schema, schemaVersion, options);
9
+ }
10
+ static migrationPlans(schema = plans.DEFAULT_SCHEMA, version = schemaVersion - 1) {
11
+ return migrationStore.migrate(schema, version);
12
+ }
13
+ static rollbackPlans(schema = plans.DEFAULT_SCHEMA, version = schemaVersion) {
14
+ return migrationStore.rollback(schema, version);
15
+ }
16
+ config;
17
+ db;
18
+ migrations;
19
+ constructor(db, config) {
20
+ this.config = config;
21
+ this.db = db;
22
+ this.migrations = this.config.migrations || migrationStore.getAll(this.config.schema);
23
+ }
24
+ async schemaVersion() {
25
+ const result = await this.db.executeSql(plans.getVersion(this.config.schema));
26
+ return result.rows.length ? parseInt(result.rows[0].version) : null;
27
+ }
28
+ async isInstalled() {
29
+ const result = await this.db.executeSql(plans.versionTableExists(this.config.schema));
30
+ return !!result.rows[0].name;
31
+ }
32
+ async start() {
33
+ const installed = await this.isInstalled();
34
+ if (installed) {
35
+ const version = await this.schemaVersion();
36
+ if (version !== null && schemaVersion > version) {
37
+ await this.migrate(version);
38
+ }
39
+ }
40
+ else {
41
+ await this.create();
42
+ }
43
+ }
44
+ async check() {
45
+ const installed = await this.isInstalled();
46
+ if (!installed) {
47
+ throw new Error('pg-boss is not installed');
48
+ }
49
+ const version = await this.schemaVersion();
50
+ if (schemaVersion !== version) {
51
+ throw new Error('pg-boss database requires migrations');
52
+ }
53
+ }
54
+ async create() {
55
+ try {
56
+ const commands = plans.create(this.config.schema, schemaVersion, this.config);
57
+ await this.db.executeSql(commands);
58
+ }
59
+ catch (err) {
60
+ assert(err.message.includes(plans.CREATE_RACE_MESSAGE), err);
61
+ }
62
+ }
63
+ async migrate(version) {
64
+ try {
65
+ const commands = migrationStore.migrate(this.config.schema, version, this.migrations);
66
+ await this.db.executeSql(commands);
67
+ }
68
+ catch (err) {
69
+ assert(err.message.includes(plans.MIGRATE_RACE_MESSAGE), err);
70
+ }
71
+ }
72
+ async next(version) {
73
+ const commands = migrationStore.next(this.config.schema, version, this.migrations);
74
+ await this.db.executeSql(commands);
75
+ }
76
+ async rollback(version) {
77
+ const commands = migrationStore.rollback(this.config.schema, version, this.migrations);
78
+ await this.db.executeSql(commands);
79
+ }
80
+ }
81
+ export default Contractor;
package/dist/db.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import EventEmitter from 'node:events';
2
+ import type * as types from './types.ts';
3
+ declare class Db extends EventEmitter implements types.IDatabase, types.EventsMixin {
4
+ private pool;
5
+ private config;
6
+ opened: boolean;
7
+ constructor(config: types.DatabaseOptions);
8
+ events: {
9
+ error: string;
10
+ };
11
+ open(): Promise<void>;
12
+ close(): Promise<void>;
13
+ executeSql(text: string, values?: unknown[]): Promise<import("pg").QueryResult<any>>;
14
+ }
15
+ export default Db;
16
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AAGtC,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,cAAM,EAAG,SAAQ,YAAa,YAAW,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW;IACzE,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,MAAM,CAAuB;IAGrC,MAAM,EAAE,OAAO,CAAA;gBAEF,MAAM,EAAE,KAAK,CAAC,eAAe;IAY1C,MAAM;;MAEL;IAEK,IAAI;IAMJ,KAAK;IAOL,UAAU,CAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE;CAenD;AAED,eAAe,EAAE,CAAA"}
package/dist/db.js ADDED
@@ -0,0 +1,46 @@
1
+ import EventEmitter from 'node:events';
2
+ import pg from 'pg';
3
+ import assert from 'node:assert';
4
+ class Db extends EventEmitter {
5
+ pool;
6
+ config;
7
+ /** @internal */
8
+ _pgbdb;
9
+ opened;
10
+ constructor(config) {
11
+ super();
12
+ config.application_name = config.application_name || 'pgboss';
13
+ config.connectionTimeoutMillis = config.connectionTimeoutMillis || 10000;
14
+ // config.maxUses = config.maxUses || 1000
15
+ this.config = config;
16
+ this._pgbdb = true;
17
+ this.opened = false;
18
+ }
19
+ events = {
20
+ error: 'error'
21
+ };
22
+ async open() {
23
+ this.pool = new pg.Pool(this.config);
24
+ this.pool.on('error', error => this.emit('error', error));
25
+ this.opened = true;
26
+ }
27
+ async close() {
28
+ if (!this.pool.ending) {
29
+ this.opened = false;
30
+ await this.pool.end();
31
+ }
32
+ }
33
+ async executeSql(text, values) {
34
+ assert(this.opened, 'Database not opened. Call open() before executing SQL.');
35
+ // if (this.config.debug === true) {
36
+ // console.log(`${new Date().toISOString()}: DEBUG SQL`)
37
+ // console.log(text)
38
+ // if (values) {
39
+ // console.log(`${new Date().toISOString()}: DEBUG VALUES`)
40
+ // console.log(values)
41
+ // }
42
+ // }
43
+ return await this.pool.query(text, values);
44
+ }
45
+ }
46
+ export default Db;
@@ -0,0 +1,72 @@
1
+ import EventEmitter from 'node:events';
2
+ import type * as types from './types.ts';
3
+ import type { JobSpyInterface } from './spy.ts';
4
+ export { JOB_STATES as states } from './plans.ts';
5
+ export { QUEUE_POLICIES as policies } from './plans.ts';
6
+ export declare const events: types.Events;
7
+ export declare function getConstructionPlans(schema?: string): string;
8
+ export declare function getMigrationPlans(schema?: string, version?: number): string;
9
+ export declare function getRollbackPlans(schema?: string, version?: number): string;
10
+ export declare class PgBoss extends EventEmitter<types.PgBossEventMap> {
11
+ #private;
12
+ constructor(connectionString: string);
13
+ constructor(options: types.ConstructorOptions);
14
+ start(): Promise<this>;
15
+ stop(options?: types.StopOptions): Promise<void>;
16
+ send(request: types.Request): Promise<string | null>;
17
+ send(name: string, data?: object | null, options?: types.SendOptions): Promise<string | null>;
18
+ sendAfter(name: string, data: object | null, options: types.SendOptions | null, date: Date): Promise<string | null>;
19
+ sendAfter(name: string, data: object | null, options: types.SendOptions | null, dateString: string): Promise<string | null>;
20
+ sendAfter(name: string, data: object | null, options: types.SendOptions | null, seconds: number): Promise<string | null>;
21
+ sendThrottled(name: string, data: object | null, options: types.SendOptions | null, seconds: number, key?: string): Promise<string | null>;
22
+ sendDebounced(name: string, data: object | null, options: types.SendOptions | null, seconds: number, key?: string): Promise<string | null>;
23
+ insert(name: string, jobs: types.JobInsert[], options?: types.InsertOptions): Promise<string[] | null>;
24
+ fetch<T>(name: string, options: types.FetchOptions & {
25
+ includeMetadata: true;
26
+ }): Promise<types.JobWithMetadata<T>[]>;
27
+ fetch<T>(name: string, options?: types.FetchOptions): Promise<types.Job<T>[]>;
28
+ work<ReqData, ResData = any>(name: string, handler: types.WorkHandler<ReqData, ResData>): Promise<string>;
29
+ work<ReqData, ResData = any>(name: string, options: types.WorkOptions & {
30
+ includeMetadata: true;
31
+ }, handler: types.WorkWithMetadataHandler<ReqData, ResData>): Promise<string>;
32
+ work<ReqData, ResData = any>(name: string, options: types.WorkOptions, handler: types.WorkHandler<ReqData, ResData>): Promise<string>;
33
+ offWork(name: string, options?: types.OffWorkOptions): Promise<void>;
34
+ notifyWorker(workerId: string): void;
35
+ subscribe(event: string, name: string): Promise<void>;
36
+ unsubscribe(event: string, name: string): Promise<void>;
37
+ publish(event: string, data?: object, options?: types.SendOptions): Promise<void>;
38
+ cancel(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
39
+ resume(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
40
+ retry(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
41
+ deleteJob(name: string, id: string | string[], options?: types.ConnectionOptions): Promise<types.CommandResponse>;
42
+ deleteQueuedJobs(name: string): Promise<void>;
43
+ deleteStoredJobs(name: string): Promise<void>;
44
+ deleteAllJobs(name?: string): Promise<void>;
45
+ complete(name: string, id: string | string[], data?: object | null, options?: types.ConnectionOptions): Promise<types.CommandResponse>;
46
+ fail(name: string, id: string | string[], data?: object | null, options?: types.ConnectionOptions): Promise<types.CommandResponse>;
47
+ /**
48
+ * @deprecated Use findJobs() instead
49
+ */
50
+ getJobById<T>(name: string, id: string, options?: types.ConnectionOptions): Promise<types.JobWithMetadata<T> | null>;
51
+ findJobs<T>(name: string, options?: types.FindJobsOptions): Promise<types.JobWithMetadata<T>[]>;
52
+ createQueue(name: string, options?: Omit<types.Queue, 'name'>): Promise<void>;
53
+ updateQueue(name: string, options?: types.UpdateQueueOptions): Promise<void>;
54
+ deleteQueue(name: string): Promise<void>;
55
+ getQueues(names?: string[]): Promise<types.QueueResult[]>;
56
+ getQueue(name: string): Promise<types.QueueResult | null>;
57
+ getQueueStats(name: string): Promise<types.QueueResult>;
58
+ supervise(name?: string): Promise<void>;
59
+ getSpy<T = object>(name: string): JobSpyInterface<T>;
60
+ clearSpies(): void;
61
+ isInstalled(): Promise<boolean>;
62
+ schemaVersion(): Promise<number | null>;
63
+ schedule(name: string, cron: string, data?: object | null, options?: types.ScheduleOptions): Promise<void>;
64
+ unschedule(name: string, key?: string): Promise<void>;
65
+ getSchedules(name?: string, key?: string): Promise<types.Schedule[]>;
66
+ getBamStatus(): Promise<types.BamStatusSummary[]>;
67
+ getBamEntries(): Promise<types.BamEntry[]>;
68
+ getDb(): types.IDatabase;
69
+ }
70
+ export type { BamEntry, BamEvent, BamStatusSummary, ConnectionOptions, ConstructorOptions, FetchOptions, FindJobsOptions, IDatabase as Db, InsertOptions, Job, JobFetchOptions, JobInsert, JobPollingOptions, JobStates, Events, JobWithMetadata, MaintenanceOptions, OffWorkOptions, Queue, QueueOptions, QueuePolicy, QueueResult, Request, Schedule, ScheduleOptions, SchedulingOptions, SendOptions, StopOptions, WipData, WorkHandler, WorkOptions, WorkWithMetadataHandler, } from './types.ts';
71
+ export type { JobSpyInterface, JobSpyState, JobDataSelector, JobSelector, SpyJob, } from './spy.ts';
72
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}