@shivaedev/jobs 0.40.1 → 0.41.0

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 (43) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +8 -1
  3. package/dist/server/adapters/installSchema.d.ts.map +1 -1
  4. package/dist/server/adapters/installSchema.js +31 -31
  5. package/dist/server/adapters/installSchema.js.map +1 -1
  6. package/dist/server/adapters/jobEngine.d.ts.map +1 -1
  7. package/dist/server/adapters/jobEngine.js +2 -0
  8. package/dist/server/adapters/jobEngine.js.map +1 -1
  9. package/dist/server/adapters/makeService.d.ts.map +1 -1
  10. package/dist/server/adapters/makeService.js +1 -0
  11. package/dist/server/adapters/makeService.js.map +1 -1
  12. package/dist/server/adapters/pgBossDefinitionLayer.js +16 -17
  13. package/dist/server/adapters/pgBossDefinitionLayer.js.map +1 -1
  14. package/dist/server/adapters/runScheduleNow.d.ts +6 -0
  15. package/dist/server/adapters/runScheduleNow.d.ts.map +1 -0
  16. package/dist/server/adapters/runScheduleNow.js +19 -0
  17. package/dist/server/adapters/runScheduleNow.js.map +1 -0
  18. package/dist/server/engine.d.ts +1 -1
  19. package/dist/server/error.d.ts +2 -2
  20. package/dist/server/error.d.ts.map +1 -1
  21. package/dist/server/error.js.map +1 -1
  22. package/dist/server/service.d.ts +1 -0
  23. package/dist/server/service.d.ts.map +1 -1
  24. package/dist/server/service.js.map +1 -1
  25. package/dist/server/services/operations/runScheduleNow.d.ts +4 -0
  26. package/dist/server/services/operations/runScheduleNow.d.ts.map +1 -0
  27. package/dist/server/services/operations/runScheduleNow.js +7 -0
  28. package/dist/server/services/operations/runScheduleNow.js.map +1 -0
  29. package/dist/server/services/operations/service.d.ts +1 -0
  30. package/dist/server/services/operations/service.d.ts.map +1 -1
  31. package/dist/server/services/operations/service.js +2 -1
  32. package/dist/server/services/operations/service.js.map +1 -1
  33. package/package.json +6 -6
  34. package/src/server/adapters/installSchema.ts +38 -40
  35. package/src/server/adapters/jobEngine.ts +2 -0
  36. package/src/server/adapters/makeService.ts +1 -0
  37. package/src/server/adapters/pgBossDefinitionLayer.ts +21 -25
  38. package/src/server/adapters/runScheduleNow.ts +21 -0
  39. package/src/server/engine.ts +1 -1
  40. package/src/server/error.ts +2 -1
  41. package/src/server/service.ts +3 -0
  42. package/src/server/services/operations/runScheduleNow.ts +8 -0
  43. package/src/server/services/operations/service.ts +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.41.0 - 2026-11-06
4
+
5
+ ### Added
6
+
7
+ - Run a registered schedule immediately through `runScheduleNow` using its normal queue and handler while preserving its timetable.
8
+
3
9
  ## 0.40.1 - 2026-11-06
4
10
 
5
11
  ### Changed
package/README.md CHANGED
@@ -465,6 +465,13 @@ Automatic migration and `installPgBossSchema` install the queue-change trigger.
465
465
 
466
466
  ### Administer queues and schedules
467
467
 
468
+ `runScheduleNow(schedule)` enqueues one immediate run using the registered schedule's queue, payload and options, with `startAfter: 0`. Pass the schedule definition, including its `scheduleOptions.key` when keyed. The worker processes it as a normal job, and the cron registration stays unchanged. The result is `Option<string>`, containing the new run's ID when pg-boss accepts it. A missing registration fails with `PgBossNotFoundError`.
469
+
470
+ ```ts
471
+ const jobs = yield* Jobs;
472
+ const runId = yield* jobs.runScheduleNow(Cleanup);
473
+ ```
474
+
468
475
  `unschedule(schedule)` removes the registration named by the schedule definition and its `scheduleOptions.key` (the empty key by default). Other keys for that queue stay registered. A missing registration fails with `PgBossNotFoundError`, carrying `operation: "unschedule"`, `queue` and `key`.
469
476
 
470
477
  `deleteQueue(queue)` stops local workers for that name and deletes the queue through the owned client. Other queues stay in place. A missing queue fails with `PgBossNotFoundError` with `operation: "deleteQueue"` and `queue`; a native refusal, such as deleting a dead-letter queue still in use, fails with `PgBossError`.
@@ -617,7 +624,7 @@ Jobs declares its public types independently of pg-boss. The option fields keep
617
624
 
618
625
  Queue and scheduled workers reject `perJobResults: true` and `transactional: true` during Layer acquisition with a registration `PgBossError`; its redacted `original` names the unsupported options. Omit these options or set them to `false`. The adapter settles each job itself and does not expose pg-boss's transaction client to handlers.
619
626
 
620
- `pgBossLayer(options)` accepts `PgBossOptions`, built from jobs-owned `ClientOptions` with a redacted connection string and lifecycle settings. `Jobs.layer(options)` accepts registrations, retired names and `onError`. Custom clients must supply native `complete` and `fail` capabilities to register queue or schedule workers; missing settlement capabilities fail Layer acquisition with a registration `PgBossError`. Workers also require `getDb()` to read the PostgreSQL clock when a batch arrives. Producer-only clients do not need these capabilities. Custom clients can also supply the optional native capabilities `findJobs`, `retry`, `update`, `getDb` and `updateQueue` for lookup, retry, live counts and listings, deferral and reconciliation; administration uses optional `deleteQueue`, `getSchedule`, `unschedule` and `supervise` capabilities. A requested operation fails with `PgBossError` if its required capability is absent.
627
+ `pgBossLayer(options)` accepts `PgBossOptions`, built from jobs-owned `ClientOptions` with a redacted connection string and lifecycle settings. `Jobs.layer(options)` accepts registrations, retired names and `onError`. Custom clients must supply native `complete` and `fail` capabilities to register queue or schedule workers; missing settlement capabilities fail Layer acquisition with a registration `PgBossError`. Workers also require `getDb()` to read the PostgreSQL clock when a batch arrives. Producer-only clients do not need these capabilities. Custom clients can also supply the optional native capabilities `findJobs`, `retry`, `update`, `getDb` and `updateQueue` for lookup, retry, live counts and listings, deferral and reconciliation; administration uses optional `deleteQueue`, `getSchedule`, `getSchedules`, `unschedule` and `supervise` capabilities. A requested operation fails with `PgBossError` if its required capability is absent.
621
628
 
622
629
  `onError` handles pg-boss client `error` events using the services captured by the Layer. The Layer interrupts pending callbacks and waits for them to end before release completes. Only the owning jobs service is supplied automatically; a handler using another jobs definition still requires that definition's Layer.
623
630
 
@@ -1 +1 @@
1
- {"version":3,"file":"installSchema.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/installSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAMvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAiD7D,eAAO,MAAM,aAAa,oHAcxB,CAAC"}
1
+ {"version":3,"file":"installSchema.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/installSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAKvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAW7D,eAAO,MAAM,aAAa,oHAmDxB,CAAC"}
@@ -10,45 +10,45 @@ const Partitions = Schema.Array(Schema.Struct({
10
10
  policy: Schema.String,
11
11
  tableName: Schema.String,
12
12
  }));
13
- async function installNativeSchema(connection, options, run) {
14
- const schema = options.schema ?? "pgboss";
15
- const construction = getConstructionPlans(schema);
16
- const client = new PgBoss({
17
- db: { executeSql: async (text, values = []) => ({ rows: Array.from(await run(connection.executeUnprepared(text, values, undefined))) }) },
18
- schema,
19
- });
20
- if (!(await client.isInstalled())) {
21
- await run(runSchemaPlan(construction).pipe(Effect.provideService(SchemaConnection, connection)));
22
- return;
23
- }
24
- const version = await client.schemaVersion();
25
- if (version === null) {
26
- throw new Error("The pg-boss version table is empty");
27
- }
28
- if (version > pgBossPackage.pgboss.schema) {
29
- return;
30
- }
31
- if (version >= 27) {
32
- await resumeSchemaIndexes(client, schema);
33
- }
34
- if (version < pgBossPackage.pgboss.schema) {
35
- const partitionTables = Schema.decodeUnknownSync(Partitions)(await run(connection.executeUnprepared(`SELECT table_name AS "tableName", policy FROM ${schema}.queue WHERE partition = true`, [], undefined)));
36
- await run(runSchemaPlan(getMigrationPlans(schema, version, { partitionTables: Array.from(partitionTables) }), {
37
- schema,
38
- version: pgBossPackage.pgboss.schema,
39
- }).pipe(Effect.provideService(SchemaConnection, connection)));
40
- await resumeSchemaIndexes(client, schema);
41
- }
42
- }
43
13
  export const installSchema = Effect.fnUntraced(function* (options) {
44
14
  const sql = yield* SqlClient.SqlClient;
45
15
  const connection = yield* sql.reserve;
16
+ async function installNativeSchema(execute) {
17
+ const schema = options.schema ?? "pgboss";
18
+ const construction = getConstructionPlans(schema);
19
+ const client = new PgBoss({
20
+ db: { executeSql: async (text, values = []) => ({ rows: Array.from(await execute(connection.executeUnprepared(text, values, undefined))) }) },
21
+ schema,
22
+ });
23
+ if (!(await client.isInstalled())) {
24
+ await execute(runSchemaPlan(construction).pipe(Effect.provideService(SchemaConnection, connection)));
25
+ return;
26
+ }
27
+ const version = await client.schemaVersion();
28
+ if (version === null) {
29
+ throw new Error("The pg-boss version table is empty");
30
+ }
31
+ if (version > pgBossPackage.pgboss.schema) {
32
+ return;
33
+ }
34
+ if (version >= 27) {
35
+ await resumeSchemaIndexes(client, schema);
36
+ }
37
+ if (version < pgBossPackage.pgboss.schema) {
38
+ const partitionTables = Schema.decodeUnknownSync(Partitions)(await execute(connection.executeUnprepared(`SELECT table_name AS "tableName", policy FROM ${schema}.queue WHERE partition = true`, [], undefined)));
39
+ await execute(runSchemaPlan(getMigrationPlans(schema, version, { partitionTables: Array.from(partitionTables) }), {
40
+ schema,
41
+ version: pgBossPackage.pgboss.schema,
42
+ }).pipe(Effect.provideService(SchemaConnection, connection)));
43
+ await resumeSchemaIndexes(client, schema);
44
+ }
45
+ }
46
46
  const run = Effect.runPromiseWith(yield* Effect.context());
47
47
  yield* Effect.tryPromise({
48
48
  catch: (error) => error,
49
49
  try: async (signal) => {
50
50
  const execute = (effect) => run(effect, { signal });
51
- await installNativeSchema(connection, options, execute);
51
+ await installNativeSchema(execute);
52
52
  },
53
53
  });
54
54
  for (const plan of jobStorePlans(options.schema ?? "pgboss")) {
@@ -1 +1 @@
1
- {"version":3,"file":"installSchema.js","sourceRoot":"","sources":["../../../src/server/adapters/installSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installSchema.js","sourceRoot":"","sources":["../../../src/server/adapters/installSchema.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"jobEngine.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/jobEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMnD,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CA8C1G"}
1
+ {"version":3,"file":"jobEngine.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/jobEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAOnD,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CA+C1G"}
@@ -2,6 +2,7 @@ import { Effect } from "effect";
2
2
  import { toPgBossError } from "#server/error.ts";
3
3
  import { listJobs } from "./listJobs.js";
4
4
  import { queueAdministration } from "./queueAdministration.js";
5
+ import { runScheduleNow } from "./runScheduleNow.js";
5
6
  import { settleDeferral } from "./settleDeferral.js";
6
7
  export function jobEngine(client, schema = "pgboss") {
7
8
  return {
@@ -32,6 +33,7 @@ export function jobEngine(client, schema = "pgboss") {
32
33
  await client.update(queue, undefined, { id, startAfter: 0 });
33
34
  },
34
35
  }),
36
+ runScheduleNow: (schedule) => runScheduleNow(client, schedule),
35
37
  settleDeferral: (job, at, reason, maxDeferrals) => Effect.tryPromise({
36
38
  catch: (error) => toPgBossError("settle", error, job.name),
37
39
  try: () => settleDeferral(client, schema, job, at, reason, maxDeferrals),
@@ -1 +1 @@
1
- {"version":3,"file":"jobEngine.js","sourceRoot":"","sources":["../../../src/server/adapters/jobEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobEngine.js","sourceRoot":"","sources":["../../../src/server/adapters/jobEngine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"makeService.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/makeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,eAAO,MAAM,WAAW,yHAsBtB,CAAC"}
1
+ {"version":3,"file":"makeService.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/makeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,eAAO,MAAM,WAAW,yHAuBtB,CAAC"}
@@ -20,6 +20,7 @@ export const makeService = Effect.fnUntraced(function* () {
20
20
  inspection: () => Effect.succeed(reads),
21
21
  refreshQueueStats: operations.refreshQueueStats,
22
22
  retry: (queue, id) => operations.retry(queue.name, id),
23
+ runScheduleNow: operations.runScheduleNow,
23
24
  unschedule: operations.unschedule,
24
25
  };
25
26
  });
@@ -1 +1 @@
1
- {"version":3,"file":"makeService.js","sourceRoot":"","sources":["../../../src/server/adapters/makeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;IAKrD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAsC,CAAC;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;IAClC,OAAO;QACN,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpG,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3G,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxF,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;QAC/C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACtD,UAAU,EAAE,UAAU,CAAC,UAAU;KACjC,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"makeService.js","sourceRoot":"","sources":["../../../src/server/adapters/makeService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;IAKrD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAsC,CAAC;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;IAClC,OAAO;QACN,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpG,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3G,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxF,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACvC,iBAAiB,EAAE,UAAU,CAAC,iBAAiB;QAC/C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QACtD,cAAc,EAAE,UAAU,CAAC,cAAc;QACzC,UAAU,EAAE,UAAU,CAAC,UAAU;KACjC,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -9,22 +9,21 @@ import { operationsLayer } from "./operationsLayer.js";
9
9
  import { registrationName } from "./register.js";
10
10
  import { registerReleasedJobs } from "./registerReleasedJobs.js";
11
11
  export function pgBossDefinitionLayer(Service, options, queueNames) {
12
- return Layer.unwrap(Effect.map(Effect.context(), (dependencies) => Layer.effect(Service, initializePgBoss(Service, options, dependencies, queueNames))));
12
+ return Layer.unwrap(Effect.map(Effect.context(), (dependencies) => Layer.effect(Service, Effect.gen(function* () {
13
+ yield* validateQueueNames(options.jobs, queueNames);
14
+ const acquired = yield* PgBoss;
15
+ const workerScope = yield* Scope.make();
16
+ const services = yield* Layer.build(operationsLayer(options.jobs.map(registrationName)));
17
+ const service = yield* makeService().pipe(Effect.provide(services));
18
+ yield* Effect.gen(function* () {
19
+ const context = yield* Effect.context();
20
+ const reportError = options.onError ?? logClientError;
21
+ const report = yield* clientErrorReporter(reportError).pipe(Effect.provide(context));
22
+ const unsubscribe = yield* clientErrorSubscription(acquired.client, report);
23
+ yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void).pipe(Effect.ensuring(Effect.sync(unsubscribe))));
24
+ yield* registerReleasedJobs(acquired.client, options.jobs, acquired.reused, acquired.schema, acquired.stop, options.retired).pipe(Effect.provideService(Scope.Scope, workerScope));
25
+ }).pipe(Effect.provideService(Service, service), Effect.provide(dependencies));
26
+ return service;
27
+ }))));
13
28
  }
14
- const initializePgBoss = Effect.fnUntraced(function* (Service, options, dependencies, queueNames) {
15
- yield* validateQueueNames(options.jobs, queueNames);
16
- const acquired = yield* PgBoss;
17
- const workerScope = yield* Scope.make();
18
- const services = yield* Layer.build(operationsLayer(options.jobs.map(registrationName)));
19
- const service = yield* makeService().pipe(Effect.provide(services));
20
- yield* Effect.gen(function* () {
21
- const context = yield* Effect.context();
22
- const reportError = options.onError ?? logClientError;
23
- const report = yield* clientErrorReporter(reportError).pipe(Effect.provide(context));
24
- const unsubscribe = yield* clientErrorSubscription(acquired.client, report);
25
- yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void).pipe(Effect.ensuring(Effect.sync(unsubscribe))));
26
- yield* registerReleasedJobs(acquired.client, options.jobs, acquired.reused, acquired.schema, acquired.stop, options.retired).pipe(Effect.provideService(Scope.Scope, workerScope));
27
- }).pipe(Effect.provideService(Service, service), Effect.provide(dependencies));
28
- return service;
29
- });
30
29
  //# sourceMappingURL=pgBossDefinitionLayer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pgBossDefinitionLayer.js","sourceRoot":"","sources":["../../../src/server/adapters/pgBossDefinitionLayer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pgBossDefinitionLayer.js","sourceRoot":"","sources":["../../../src/server/adapters/pgBossDefinitionLayer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Effect, Option } from "effect";
2
+ import type { PgBossClient } from "#server/client.ts";
3
+ import { PgBossNotFoundError } from "#server/error.ts";
4
+ import type { PgBossService } from "#server/service.ts";
5
+ export declare function runScheduleNow(client: PgBossClient, schedule: Parameters<PgBossService["runScheduleNow"]>[0]): Effect.Effect<Option.Option<string>, import("#server/error.ts").PgBossError | PgBossNotFoundError, never>;
6
+ //# sourceMappingURL=runScheduleNow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runScheduleNow.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/runScheduleNow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAiB,MAAM,kBAAkB,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,6GAe5G"}
@@ -0,0 +1,19 @@
1
+ import { Effect, Option } from "effect";
2
+ import { PgBossNotFoundError, toPgBossError } from "#server/error.ts";
3
+ export function runScheduleNow(client, schedule) {
4
+ const key = schedule.scheduleOptions.key ?? "";
5
+ return Effect.tryPromise({
6
+ catch: (error) => (error instanceof PgBossNotFoundError ? error : toPgBossError("runScheduleNow", error, schedule.name)),
7
+ try: async () => {
8
+ if (client.getSchedules === undefined) {
9
+ throw new TypeError("This pg-boss client does not support getSchedules");
10
+ }
11
+ const [registered] = await client.getSchedules(schedule.name, key);
12
+ if (registered === undefined) {
13
+ throw new PgBossNotFoundError({ key, operation: "runScheduleNow", queue: schedule.name });
14
+ }
15
+ return Option.fromNullishOr(await client.send(registered.name, registered.data, { ...registered.options, startAfter: 0 }));
16
+ },
17
+ });
18
+ }
19
+ //# sourceMappingURL=runScheduleNow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runScheduleNow.js","sourceRoot":"","sources":["../../../src/server/adapters/runScheduleNow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtE,MAAM,UAAU,cAAc,CAAC,MAAoB,EAAE,QAAwD;IAC5G,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,EAAE,CAAC;IAC/C,OAAO,MAAM,CAAC,UAAU,CAAC;QACxB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxH,GAAG,EAAE,KAAK,IAAI,EAAE;YACf,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,IAAI,mBAAmB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3F,CAAC;YACD,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5H,CAAC;KACD,CAAC,CAAC;AACJ,CAAC"}
@@ -6,7 +6,7 @@ import type { PgBossService } from "#server/service.ts";
6
6
  export type StoredJob = Awaited<ReturnType<NonNullable<PgBossClient["findJobs"]>>>[number];
7
7
  export type JobAttempt = Pick<StoredJob, "name" | "id" | "retryCount">;
8
8
  export type Listing = "deadLetteredJobs" | "failedJobs";
9
- declare const JobEngine_base: Context.ServiceClass<JobEngine, "@shivaedev/jobs/JobEngine", Pick<PgBossService, "deleteQueue" | "refreshQueueStats" | "unschedule"> & {
9
+ declare const JobEngine_base: Context.ServiceClass<JobEngine, "@shivaedev/jobs/JobEngine", Pick<PgBossService, "deleteQueue" | "refreshQueueStats" | "runScheduleNow" | "unschedule"> & {
10
10
  readonly getJob: (queue: string, id: string) => Effect.Effect<StoredJob | undefined, PgBossError>;
11
11
  readonly retry: (queue: string, id: string) => Effect.Effect<void, PgBossError>;
12
12
  readonly listJobs: (listing: Listing, queue: string, query: KeysetPageQuery) => Effect.Effect<readonly unknown[], PgBossError>;
@@ -1,10 +1,10 @@
1
1
  import { Cause, Redacted } from "effect";
2
- export type PgBossOperation = "counts" | "deadLetteredJobs" | "deleteQueue" | "enqueue" | "failedJobs" | "getJob" | "health" | "install" | "inspect" | "register" | "refreshQueueStats" | "retry" | "settle" | "start" | "stop" | "unschedule";
2
+ export type PgBossOperation = "counts" | "deadLetteredJobs" | "deleteQueue" | "enqueue" | "failedJobs" | "getJob" | "health" | "install" | "inspect" | "register" | "refreshQueueStats" | "retry" | "runScheduleNow" | "settle" | "start" | "stop" | "unschedule";
3
3
  declare const PgBossNotFoundError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => Cause.YieldableError & {
4
4
  readonly _tag: "PgBossNotFoundError";
5
5
  } & Readonly<A>;
6
6
  export declare class PgBossNotFoundError extends PgBossNotFoundError_base<{
7
- readonly operation: "deleteQueue" | "unschedule";
7
+ readonly operation: "deleteQueue" | "runScheduleNow" | "unschedule";
8
8
  readonly queue: string;
9
9
  readonly key?: string;
10
10
  }> {
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/server/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAQ,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAG/C,MAAM,MAAM,eAAe,GACxB,QAAQ,GACR,kBAAkB,GAClB,aAAa,GACb,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,UAAU,GACV,mBAAmB,GACnB,OAAO,GACP,QAAQ,GACR,OAAO,GACP,MAAM,GACN,YAAY,CAAC;;;;AAEhB,qBAAa,mBAAoB,SAAQ,yBAAwC;IAChF,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,YAAY,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAI7B;CACD;;;;AAED,qBAAa,WAAY,SAAQ,iBAAgC;IAChE,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;IAED,IAAa,OAAO,IAAI,MAAM,CAK7B;CACD;;;;AAUD,qBAAa,uBAAwB,SAAQ,6BAA4C;IACxF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC;CACtD,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAE7B;CACD;;;;AAED,qBAAa,qBAAsB,SAAQ,2BAA0C;IACpF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAE7B;CACD;;;;AAED,qBAAa,wBAAyB,SAAQ,8BAA6C;IAC1F,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAE7B;CACD;;;;AAED,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC9E,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;CAAG;AAEL,wBAAgB,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAMrG"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/server/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAQ,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAG/C,MAAM,MAAM,eAAe,GACxB,QAAQ,GACR,kBAAkB,GAClB,aAAa,GACb,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,UAAU,GACV,mBAAmB,GACnB,OAAO,GACP,gBAAgB,GAChB,QAAQ,GACR,OAAO,GACP,MAAM,GACN,YAAY,CAAC;;;;AAEhB,qBAAa,mBAAoB,SAAQ,yBAAwC;IAChF,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAI7B;CACD;;;;AAED,qBAAa,WAAY,SAAQ,iBAAgC;IAChE,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;IAED,IAAa,OAAO,IAAI,MAAM,CAK7B;CACD;;;;AAUD,qBAAa,uBAAwB,SAAQ,6BAA4C;IACxF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC;CACtD,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAE7B;CACD;;;;AAED,qBAAa,qBAAsB,SAAQ,2BAA0C;IACpF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAE7B;CACD;;;;AAED,qBAAa,wBAAyB,SAAQ,8BAA6C;IAC1F,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;IACD,IAAa,OAAO,IAAI,MAAM,CAE7B;CACD;;;;AAED,qBAAa,kBAAmB,SAAQ,wBAAuC;IAC9E,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;CAAG;AAEL,wBAAgB,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAMrG"}
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/server/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAoBzD,MAAM,OAAO,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAI7E;IACD,IAAa,OAAO;QACnB,OAAO,IAAI,CAAC,SAAS,KAAK,aAAa;YACtC,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,iBAAiB;YACtC,CAAC,CAAC,YAAY,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,iBAAiB,CAAC;IACvF,CAAC;CACD;AAED,MAAM,OAAO,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,aAAa,CAI7D;IACD,6GAA6G;IAC7G,IAAa,OAAO;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,OAAO,WAAW,IAAI,CAAC,SAAS,GAAG,MAAM,YAAY,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;IAC5I,CAAC;CACD;AAED,SAAS,YAAY,CAAC,QAAiB;IACtC,IAAI,CAAC,CAAC,QAAQ,YAAY,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,QAAQ,CAAC;IACxB,CAAC;IACD,MAAM,IAAI,GAAY,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;AACtG,CAAC;AAED,MAAM,OAAO,uBAAwB,SAAQ,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAGrF;IACD,IAAa,OAAO;QACnB,OAAO,SAAS,IAAI,CAAC,KAAK,0CAA0C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/F,CAAC;CACD;AAED,MAAM,OAAO,qBAAsB,SAAQ,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAGjF;IACD,IAAa,OAAO;QACnB,OAAO,uDAAuD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACtI,CAAC;CACD;AAED,MAAM,OAAO,wBAAyB,SAAQ,IAAI,CAAC,WAAW,CAAC,0BAA0B,CAGvF;IACD,IAAa,OAAO;QACnB,OAAO,yBAAyB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,wCAAwC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACnH,CAAC;CACD;AAED,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAI3E;CAAG;AAEL,MAAM,UAAU,aAAa,CAAC,SAA0B,EAAE,KAAc,EAAE,KAAc;IACvF,OAAO,IAAI,WAAW,CAAC;QACtB,SAAS;QACT,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC9B,KAAK;KACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/server/error.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,7 @@ export interface PgBossService {
28
28
  readonly inspection: () => Effect.Effect<PgBossInspectionService>;
29
29
  readonly refreshQueueStats: (queue?: Pick<QueueDefinition, "name">) => Effect.Effect<void, PgBossError>;
30
30
  readonly retry: (queue: Pick<QueueDefinition, "name">, id: string) => Effect.Effect<void, PgBossError>;
31
+ readonly runScheduleNow: (schedule: Pick<ScheduleDefinition, "name" | "scheduleOptions">) => Effect.Effect<Option.Option<string>, PgBossError | PgBossNotFoundError>;
31
32
  readonly unschedule: (schedule: Pick<ScheduleDefinition, "name" | "scheduleOptions">) => Effect.Effect<void, PgBossError | PgBossNotFoundError>;
32
33
  }
33
34
  export type PgBossOptions = Omit<ClientOptions, "connectionString"> & {
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/server/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/server/service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/server/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,KAAK,EAA2C,MAAM,QAAQ,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAgBlF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAsD3C,MAAM,UAAU,WAAW,CAAC,OAAsB;IACjD,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,UAAU,CAAmC,UAAuB,EAAE,UAA8B;IACnH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAA6B,UAAU,CAAC,CAAC;IACxE,SAAS,KAAK,CAAqE,OAA8C;QAChI,OAAO,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/server/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAe,KAAK,EAA2C,MAAM,QAAQ,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAgBlF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAyD3C,MAAM,UAAU,WAAW,CAAC,OAAsB;IACjD,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,UAAU,CAAmC,UAAuB,EAAE,UAA8B;IACnH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAA6B,UAAU,CAAC,CAAC;IACxE,SAAS,KAAK,CAAqE,OAA8C;QAChI,OAAO,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Effect } from "effect";
2
+ import { JobEngine } from "#server/engine.ts";
3
+ export declare const runScheduleNow: (schedule: Pick<import("../../definition.ts").ScheduleDefinition<string>, "name" | "scheduleOptions">) => Effect.Effect<import("effect/Option").Option<string>, import("../../error.ts").PgBossError | import("../../error.ts").PgBossNotFoundError, JobEngine>;
4
+ //# sourceMappingURL=runScheduleNow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runScheduleNow.d.ts","sourceRoot":"","sources":["../../../../src/server/services/operations/runScheduleNow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,eAAO,MAAM,cAAc,iQAGzB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Effect } from "effect";
2
+ import { JobEngine } from "#server/engine.ts";
3
+ export const runScheduleNow = Effect.fn("PgBossOperations.runScheduleNow")(function* (...args) {
4
+ const engine = yield* JobEngine;
5
+ return yield* engine.runScheduleNow(...args);
6
+ });
7
+ //# sourceMappingURL=runScheduleNow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runScheduleNow.js","sourceRoot":"","sources":["../../../../src/server/services/operations/runScheduleNow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAiD;IACzI,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IAChC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC"}
@@ -15,6 +15,7 @@ export declare const PgBossOperations: import("effect/Context").Service<"@shivae
15
15
  readonly listJobs: (listing: import("#server/engine.ts").Listing, queue: string, query: import("@shivaedev/sql/keysetPage.ts").KeysetPageQuery) => Effect.Effect<readonly unknown[], import("../../error.ts").PgBossError, never>;
16
16
  readonly refreshQueueStats: (queue?: Pick<import("../../definition.ts").QueueDefinition<string, import("../../definition.ts").JobPayloadSchema>, "name"> | undefined) => Effect.Effect<void, import("../../error.ts").PgBossError, never>;
17
17
  readonly retry: (queue: string, id: string) => Effect.Effect<void, import("../../error.ts").PgBossError, never>;
18
+ readonly runScheduleNow: (schedule: Pick<import("../../definition.ts").ScheduleDefinition<string>, "name" | "scheduleOptions">) => Effect.Effect<import("effect/Option").Option<string>, import("../../error.ts").PgBossError | import("../../error.ts").PgBossNotFoundError, never>;
18
19
  readonly unschedule: (schedule: Pick<import("../../definition.ts").ScheduleDefinition<string>, "name" | "scheduleOptions">) => Effect.Effect<void, import("../../error.ts").PgBossError | import("../../error.ts").PgBossNotFoundError, never>;
19
20
  }>> & {
20
21
  readonly layer: import("effect/Layer").Layer<"@shivaedev/jobs/PgBossOperations", never, JobEngine | JobQueues | PgBoss>;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/server/services/operations/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAU3C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAK3B,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/server/services/operations/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAW3C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAK3B,CAAC"}
@@ -11,11 +11,12 @@ import { health } from "./health.js";
11
11
  import { listJobs } from "./listJobs.js";
12
12
  import { refreshQueueStats } from "./refreshQueueStats.js";
13
13
  import { retry } from "./retry.js";
14
+ import { runScheduleNow } from "./runScheduleNow.js";
14
15
  import { unschedule } from "./unschedule.js";
15
16
  export const PgBossOperations = defineService({
16
17
  id: "@shivaedev/jobs/PgBossOperations",
17
18
  initialize: Effect.void,
18
- methods: () => ({ counts, deleteQueue, enqueue, getJob, health, listJobs, refreshQueueStats, retry, unschedule }),
19
+ methods: () => ({ counts, deleteQueue, enqueue, getJob, health, listJobs, refreshQueueStats, retry, runScheduleNow, unschedule }),
19
20
  requires: [PgBoss, JobEngine, JobQueues],
20
21
  });
21
22
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/server/services/operations/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC7C,EAAE,EAAE,kCAAkC;IACtC,UAAU,EAAE,MAAM,CAAC,IAAI;IACvB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACjH,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;CACxC,CAAC,CAAC"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/server/services/operations/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;IAC7C,EAAE,EAAE,kCAAkC;IACtC,UAAU,EAAE,MAAM,CAAC,IAAI;IACvB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;IACjI,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;CACxC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shivaedev/jobs",
3
- "version": "0.40.1",
3
+ "version": "0.41.0",
4
4
  "description": "Effect-native jobs and lifecycle management for pg-boss",
5
5
  "keywords": [
6
6
  "effect"
@@ -45,15 +45,15 @@
45
45
  "dependencies": {
46
46
  "@shivaedev/errors": "0.10.0",
47
47
  "@shivaedev/service": "0.8.0",
48
- "@shivaedev/sql": "0.44.0"
48
+ "@shivaedev/sql": "0.45.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@effect/sql-pg": "4.1.0",
52
52
  "@shivaedev/http": "0.8.0",
53
- "@shivaedev/quality": "0.67.0",
54
- "@shivaedev/test-kits": "0.9.0",
55
- "@shivaedev/test-sql": "0.24.2",
56
- "@shivaedev/test-story": "0.43.0",
53
+ "@shivaedev/quality": "0.69.1",
54
+ "@shivaedev/test-kits": "0.9.3",
55
+ "@shivaedev/test-sql": "0.24.3",
56
+ "@shivaedev/test-story": "0.44.2",
57
57
  "@types/node": "24.19.2",
58
58
  "effect": "4.1.0",
59
59
  "pg-boss": "12.38.0",
@@ -1,6 +1,5 @@
1
1
  import { Effect, Schema } from "effect";
2
2
  import { SqlClient } from "effect/sql";
3
- import type { Connection } from "effect/sql/SqlConnection";
4
3
  import { getConstructionPlans, getMigrationPlans, PgBoss } from "pg-boss";
5
4
  import pgBossPackage from "pg-boss/package.json" with { type: "json" };
6
5
  import { jobStorePlans } from "#server/jobStorePlans.ts";
@@ -15,54 +14,53 @@ const Partitions = Schema.Array(
15
14
  tableName: Schema.String,
16
15
  }),
17
16
  );
18
- async function installNativeSchema(
19
- connection: Connection,
20
- options: PgBossSchemaOptions,
21
- run: <A, E>(effect: Effect.Effect<A, E>) => Promise<A>,
22
- ): Promise<void> {
23
- const schema = options.schema ?? "pgboss";
24
- const construction = getConstructionPlans(schema);
25
- const client = new PgBoss({
26
- db: { executeSql: async (text, values = []) => ({ rows: Array.from(await run(connection.executeUnprepared(text, values, undefined))) }) },
27
- schema,
28
- });
29
- if (!(await client.isInstalled())) {
30
- await run(runSchemaPlan(construction).pipe(Effect.provideService(SchemaConnection, connection)));
31
- return;
32
- }
33
- const version = await client.schemaVersion();
34
- if (version === null) {
35
- throw new Error("The pg-boss version table is empty");
36
- }
37
- if (version > pgBossPackage.pgboss.schema) {
38
- return;
39
- }
40
- if (version >= 27) {
41
- await resumeSchemaIndexes(client, schema);
42
- }
43
- if (version < pgBossPackage.pgboss.schema) {
44
- const partitionTables = Schema.decodeUnknownSync(Partitions)(
45
- await run(connection.executeUnprepared(`SELECT table_name AS "tableName", policy FROM ${schema}.queue WHERE partition = true`, [], undefined)),
46
- );
47
- await run(
48
- runSchemaPlan(getMigrationPlans(schema, version, { partitionTables: Array.from(partitionTables) }), {
49
- schema,
50
- version: pgBossPackage.pgboss.schema,
51
- }).pipe(Effect.provideService(SchemaConnection, connection)),
52
- );
53
- await resumeSchemaIndexes(client, schema);
54
- }
55
- }
56
17
 
57
18
  export const installSchema = Effect.fnUntraced(function* (options: PgBossSchemaOptions) {
58
19
  const sql = yield* SqlClient.SqlClient;
59
20
  const connection = yield* sql.reserve;
21
+ async function installNativeSchema(execute: <A, E>(effect: Effect.Effect<A, E>) => Promise<A>): Promise<void> {
22
+ const schema = options.schema ?? "pgboss";
23
+ const construction = getConstructionPlans(schema);
24
+ const client = new PgBoss({
25
+ db: { executeSql: async (text, values = []) => ({ rows: Array.from(await execute(connection.executeUnprepared(text, values, undefined))) }) },
26
+ schema,
27
+ });
28
+ if (!(await client.isInstalled())) {
29
+ await execute(runSchemaPlan(construction).pipe(Effect.provideService(SchemaConnection, connection)));
30
+ return;
31
+ }
32
+ const version = await client.schemaVersion();
33
+ if (version === null) {
34
+ throw new Error("The pg-boss version table is empty");
35
+ }
36
+ if (version > pgBossPackage.pgboss.schema) {
37
+ return;
38
+ }
39
+ if (version >= 27) {
40
+ await resumeSchemaIndexes(client, schema);
41
+ }
42
+ if (version < pgBossPackage.pgboss.schema) {
43
+ const partitionTables = Schema.decodeUnknownSync(Partitions)(
44
+ await execute(
45
+ connection.executeUnprepared(`SELECT table_name AS "tableName", policy FROM ${schema}.queue WHERE partition = true`, [], undefined),
46
+ ),
47
+ );
48
+ await execute(
49
+ runSchemaPlan(getMigrationPlans(schema, version, { partitionTables: Array.from(partitionTables) }), {
50
+ schema,
51
+ version: pgBossPackage.pgboss.schema,
52
+ }).pipe(Effect.provideService(SchemaConnection, connection)),
53
+ );
54
+ await resumeSchemaIndexes(client, schema);
55
+ }
56
+ }
57
+
60
58
  const run = Effect.runPromiseWith(yield* Effect.context<never>());
61
59
  yield* Effect.tryPromise({
62
60
  catch: (error) => error,
63
61
  try: async (signal) => {
64
62
  const execute: typeof run = (effect) => run(effect, { signal });
65
- await installNativeSchema(connection, options, execute);
63
+ await installNativeSchema(execute);
66
64
  },
67
65
  });
68
66
  for (const plan of jobStorePlans(options.schema ?? "pgboss")) {
@@ -4,6 +4,7 @@ import type { JobEngine } from "#server/engine.ts";
4
4
  import { toPgBossError } from "#server/error.ts";
5
5
  import { listJobs } from "./listJobs.ts";
6
6
  import { queueAdministration } from "./queueAdministration.ts";
7
+ import { runScheduleNow } from "./runScheduleNow.ts";
7
8
  import { settleDeferral } from "./settleDeferral.ts";
8
9
 
9
10
  export function jobEngine(client: PgBossClient, schema = "pgboss"): Context.Service.Shape<typeof JobEngine> {
@@ -37,6 +38,7 @@ export function jobEngine(client: PgBossClient, schema = "pgboss"): Context.Serv
37
38
  await client.update(queue, undefined, { id, startAfter: 0 });
38
39
  },
39
40
  }),
41
+ runScheduleNow: (schedule) => runScheduleNow(client, schedule),
40
42
  settleDeferral: (job, at, reason, maxDeferrals) =>
41
43
  Effect.tryPromise({
42
44
  catch: (error) => toPgBossError("settle", error, job.name),
@@ -26,6 +26,7 @@ export const makeService = Effect.fnUntraced(function* (): Effect.fn.Return<
26
26
  inspection: () => Effect.succeed(reads),
27
27
  refreshQueueStats: operations.refreshQueueStats,
28
28
  retry: (queue, id) => operations.retry(queue.name, id),
29
+ runScheduleNow: operations.runScheduleNow,
29
30
  unschedule: operations.unschedule,
30
31
  };
31
32
  });
@@ -28,31 +28,27 @@ export function pgBossDefinitionLayer<TIdentifier extends string, R, E>(
28
28
  ) {
29
29
  return Layer.unwrap(
30
30
  Effect.map(Effect.context<Exclude<R, TIdentifier> | E>(), (dependencies) =>
31
- Layer.effect(Service, initializePgBoss(Service, options, dependencies, queueNames)),
31
+ Layer.effect(
32
+ Service,
33
+ Effect.gen(function* () {
34
+ yield* validateQueueNames(options.jobs, queueNames);
35
+ const acquired = yield* PgBoss;
36
+ const workerScope = yield* Scope.make();
37
+ const services = yield* Layer.build(operationsLayer(options.jobs.map(registrationName)));
38
+ const service = yield* makeService().pipe(Effect.provide(services));
39
+ yield* Effect.gen(function* () {
40
+ const context = yield* Effect.context<R | E>();
41
+ const reportError = options.onError ?? logClientError;
42
+ const report = yield* clientErrorReporter(reportError).pipe(Effect.provide(context));
43
+ const unsubscribe = yield* clientErrorSubscription(acquired.client, report);
44
+ yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void).pipe(Effect.ensuring(Effect.sync(unsubscribe))));
45
+ yield* registerReleasedJobs(acquired.client, options.jobs, acquired.reused, acquired.schema, acquired.stop, options.retired).pipe(
46
+ Effect.provideService(Scope.Scope, workerScope),
47
+ );
48
+ }).pipe(Effect.provideService(Service, service), Effect.provide(dependencies));
49
+ return service;
50
+ }),
51
+ ),
32
52
  ),
33
53
  );
34
54
  }
35
-
36
- const initializePgBoss = Effect.fnUntraced(function* <TIdentifier extends string, R, E>(
37
- Service: Context.Service<TIdentifier, PgBossService>,
38
- options: PgBossLayerOptions<readonly JobRegistration<R>[], E>,
39
- dependencies: Context.Context<Exclude<R, TIdentifier> | E>,
40
- queueNames?: readonly string[],
41
- ) {
42
- yield* validateQueueNames(options.jobs, queueNames);
43
- const acquired = yield* PgBoss;
44
- const workerScope = yield* Scope.make();
45
- const services = yield* Layer.build(operationsLayer(options.jobs.map(registrationName)));
46
- const service = yield* makeService().pipe(Effect.provide(services));
47
- yield* Effect.gen(function* () {
48
- const context = yield* Effect.context<R | E>();
49
- const reportError = options.onError ?? logClientError;
50
- const report = yield* clientErrorReporter(reportError).pipe(Effect.provide(context));
51
- const unsubscribe = yield* clientErrorSubscription(acquired.client, report);
52
- yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void).pipe(Effect.ensuring(Effect.sync(unsubscribe))));
53
- yield* registerReleasedJobs(acquired.client, options.jobs, acquired.reused, acquired.schema, acquired.stop, options.retired).pipe(
54
- Effect.provideService(Scope.Scope, workerScope),
55
- );
56
- }).pipe(Effect.provideService(Service, service), Effect.provide(dependencies));
57
- return service;
58
- });
@@ -0,0 +1,21 @@
1
+ import { Effect, Option } from "effect";
2
+ import type { PgBossClient } from "#server/client.ts";
3
+ import { PgBossNotFoundError, toPgBossError } from "#server/error.ts";
4
+ import type { PgBossService } from "#server/service.ts";
5
+
6
+ export function runScheduleNow(client: PgBossClient, schedule: Parameters<PgBossService["runScheduleNow"]>[0]) {
7
+ const key = schedule.scheduleOptions.key ?? "";
8
+ return Effect.tryPromise({
9
+ catch: (error) => (error instanceof PgBossNotFoundError ? error : toPgBossError("runScheduleNow", error, schedule.name)),
10
+ try: async () => {
11
+ if (client.getSchedules === undefined) {
12
+ throw new TypeError("This pg-boss client does not support getSchedules");
13
+ }
14
+ const [registered] = await client.getSchedules(schedule.name, key);
15
+ if (registered === undefined) {
16
+ throw new PgBossNotFoundError({ key, operation: "runScheduleNow", queue: schedule.name });
17
+ }
18
+ return Option.fromNullishOr(await client.send(registered.name, registered.data, { ...registered.options, startAfter: 0 }));
19
+ },
20
+ });
21
+ }
@@ -10,7 +10,7 @@ export type Listing = "deadLetteredJobs" | "failedJobs";
10
10
 
11
11
  export class JobEngine extends Context.Service<
12
12
  JobEngine,
13
- Pick<PgBossService, "deleteQueue" | "refreshQueueStats" | "unschedule"> & {
13
+ Pick<PgBossService, "deleteQueue" | "refreshQueueStats" | "runScheduleNow" | "unschedule"> & {
14
14
  readonly getJob: (queue: string, id: string) => Effect.Effect<StoredJob | undefined, PgBossError>;
15
15
  readonly retry: (queue: string, id: string) => Effect.Effect<void, PgBossError>;
16
16
  readonly listJobs: (listing: Listing, queue: string, query: KeysetPageQuery) => Effect.Effect<readonly unknown[], PgBossError>;
@@ -14,13 +14,14 @@ export type PgBossOperation =
14
14
  | "register"
15
15
  | "refreshQueueStats"
16
16
  | "retry"
17
+ | "runScheduleNow"
17
18
  | "settle"
18
19
  | "start"
19
20
  | "stop"
20
21
  | "unschedule";
21
22
 
22
23
  export class PgBossNotFoundError extends Data.TaggedError("PgBossNotFoundError")<{
23
- readonly operation: "deleteQueue" | "unschedule";
24
+ readonly operation: "deleteQueue" | "runScheduleNow" | "unschedule";
24
25
  readonly queue: string;
25
26
  readonly key?: string;
26
27
  }> {
@@ -44,6 +44,9 @@ export interface PgBossService {
44
44
  readonly inspection: () => Effect.Effect<PgBossInspectionService>;
45
45
  readonly refreshQueueStats: (queue?: Pick<QueueDefinition, "name">) => Effect.Effect<void, PgBossError>;
46
46
  readonly retry: (queue: Pick<QueueDefinition, "name">, id: string) => Effect.Effect<void, PgBossError>;
47
+ readonly runScheduleNow: (
48
+ schedule: Pick<ScheduleDefinition, "name" | "scheduleOptions">,
49
+ ) => Effect.Effect<Option.Option<string>, PgBossError | PgBossNotFoundError>;
47
50
  readonly unschedule: (schedule: Pick<ScheduleDefinition, "name" | "scheduleOptions">) => Effect.Effect<void, PgBossError | PgBossNotFoundError>;
48
51
  }
49
52
 
@@ -0,0 +1,8 @@
1
+ import { Effect } from "effect";
2
+ import { JobEngine } from "#server/engine.ts";
3
+ import type { PgBossService } from "#server/service.ts";
4
+
5
+ export const runScheduleNow = Effect.fn("PgBossOperations.runScheduleNow")(function* (...args: Parameters<PgBossService["runScheduleNow"]>) {
6
+ const engine = yield* JobEngine;
7
+ return yield* engine.runScheduleNow(...args);
8
+ });
@@ -11,10 +11,11 @@ import { health } from "./health.ts";
11
11
  import { listJobs } from "./listJobs.ts";
12
12
  import { refreshQueueStats } from "./refreshQueueStats.ts";
13
13
  import { retry } from "./retry.ts";
14
+ import { runScheduleNow } from "./runScheduleNow.ts";
14
15
  import { unschedule } from "./unschedule.ts";
15
16
  export const PgBossOperations = defineService({
16
17
  id: "@shivaedev/jobs/PgBossOperations",
17
18
  initialize: Effect.void,
18
- methods: () => ({ counts, deleteQueue, enqueue, getJob, health, listJobs, refreshQueueStats, retry, unschedule }),
19
+ methods: () => ({ counts, deleteQueue, enqueue, getJob, health, listJobs, refreshQueueStats, retry, runScheduleNow, unschedule }),
19
20
  requires: [PgBoss, JobEngine, JobQueues],
20
21
  });