@shivaedev/jobs 0.39.0 → 0.40.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/CHANGELOG.md +17 -0
- package/README.md +43 -10
- package/dist/server/InspectionEngine.d.ts +27 -0
- package/dist/server/InspectionEngine.d.ts.map +1 -0
- package/dist/server/InspectionEngine.js +4 -0
- package/dist/server/InspectionEngine.js.map +1 -0
- package/dist/server/JobQueues.d.ts +6 -0
- package/dist/server/JobQueues.d.ts.map +1 -0
- package/dist/server/JobQueues.js +4 -0
- package/dist/server/JobQueues.js.map +1 -0
- package/dist/server/SchemaConnection.d.ts +7 -0
- package/dist/server/SchemaConnection.d.ts.map +1 -0
- package/dist/server/SchemaConnection.js +4 -0
- package/dist/server/SchemaConnection.js.map +1 -0
- package/dist/server/adapters/countsFor.d.ts.map +1 -0
- package/dist/server/adapters/countsFor.js.map +1 -0
- package/dist/server/adapters/ensureQueue.d.ts.map +1 -0
- package/dist/server/adapters/ensureQueue.js.map +1 -0
- package/dist/server/adapters/healthFor.d.ts.map +1 -0
- package/dist/server/adapters/healthFor.js.map +1 -0
- package/dist/server/adapters/inspection.d.ts +1 -2
- package/dist/server/adapters/inspection.d.ts.map +1 -1
- package/dist/server/adapters/inspection.js +20 -24
- package/dist/server/adapters/inspection.js.map +1 -1
- package/dist/server/adapters/inspectionJobs.d.ts +1 -43
- package/dist/server/adapters/inspectionJobs.d.ts.map +1 -1
- package/dist/server/adapters/inspectionJobs.js +1 -5
- package/dist/server/adapters/inspectionJobs.js.map +1 -1
- package/dist/server/adapters/inspectionLayer.d.ts +4 -0
- package/dist/server/adapters/inspectionLayer.d.ts.map +1 -0
- package/dist/server/adapters/inspectionLayer.js +7 -0
- package/dist/server/adapters/inspectionLayer.js.map +1 -0
- package/dist/server/adapters/inspectionReads.d.ts +12 -46
- package/dist/server/adapters/inspectionReads.d.ts.map +1 -1
- package/dist/server/adapters/inspectionReads.js +2 -2
- package/dist/server/adapters/inspectionReads.js.map +1 -1
- package/dist/server/adapters/inspectionSnapshot.d.ts +9 -4
- package/dist/server/adapters/inspectionSnapshot.d.ts.map +1 -1
- package/dist/server/adapters/inspectionSnapshot.js +17 -26
- package/dist/server/adapters/inspectionSnapshot.js.map +1 -1
- package/dist/server/adapters/installSchema.d.ts.map +1 -1
- package/dist/server/adapters/installSchema.js +4 -3
- package/dist/server/adapters/installSchema.js.map +1 -1
- package/dist/server/adapters/makeService.d.ts +4 -0
- package/dist/server/adapters/makeService.d.ts.map +1 -0
- package/dist/server/adapters/makeService.js +26 -0
- package/dist/server/adapters/makeService.js.map +1 -0
- package/dist/server/adapters/operationsLayer.d.ts +4 -0
- package/dist/server/adapters/operationsLayer.d.ts.map +1 -0
- package/dist/server/adapters/operationsLayer.js +17 -0
- package/dist/server/adapters/operationsLayer.js.map +1 -0
- package/dist/server/adapters/pgBossDefinitionLayer.d.ts.map +1 -0
- package/dist/server/{pgBossDefinitionLayer.js → adapters/pgBossDefinitionLayer.js} +7 -9
- package/dist/server/adapters/pgBossDefinitionLayer.js.map +1 -0
- package/dist/server/{register.d.ts → adapters/register.d.ts} +2 -2
- package/dist/server/adapters/register.d.ts.map +1 -0
- package/dist/server/{register.js → adapters/register.js} +8 -8
- package/dist/server/adapters/register.js.map +1 -0
- package/dist/server/adapters/registerReleasedJobs.d.ts +7 -0
- package/dist/server/adapters/registerReleasedJobs.d.ts.map +1 -0
- package/dist/server/{registerReleasedJobs.js → adapters/registerReleasedJobs.js} +5 -4
- package/dist/server/adapters/registerReleasedJobs.js.map +1 -0
- package/dist/server/adapters/registerWorker.d.ts +1 -1
- package/dist/server/adapters/registerWorker.d.ts.map +1 -1
- package/dist/server/adapters/registerWorker.js +2 -1
- package/dist/server/adapters/registerWorker.js.map +1 -1
- package/dist/server/adapters/retireJobs.d.ts.map +1 -1
- package/dist/server/adapters/retireJobs.js +1 -1
- package/dist/server/adapters/retireJobs.js.map +1 -1
- package/dist/server/adapters/runSchemaPlan.d.ts +4 -4
- package/dist/server/adapters/runSchemaPlan.d.ts.map +1 -1
- package/dist/server/adapters/runSchemaPlan.js +7 -4
- package/dist/server/adapters/runSchemaPlan.js.map +1 -1
- package/dist/server/enqueuePayload.d.ts +6 -0
- package/dist/server/enqueuePayload.d.ts.map +1 -0
- package/dist/server/enqueuePayload.js +29 -0
- package/dist/server/enqueuePayload.js.map +1 -0
- package/dist/server/getJob.d.ts +88 -0
- package/dist/server/getJob.d.ts.map +1 -0
- package/dist/server/{jobControl.js → getJob.js} +5 -7
- package/dist/server/getJob.js.map +1 -0
- package/dist/server/inspection.d.ts +13 -80
- package/dist/server/inspection.d.ts.map +1 -1
- package/dist/server/inspection.js +4 -39
- package/dist/server/inspection.js.map +1 -1
- package/dist/server/{operations/jobs.d.ts → inspectionJobs.d.ts} +8 -6
- package/dist/server/inspectionJobs.d.ts.map +1 -0
- package/dist/server/inspectionJobs.js +9 -0
- package/dist/server/inspectionJobs.js.map +1 -0
- package/dist/server/inspectionSnapshot.d.ts +82 -0
- package/dist/server/inspectionSnapshot.d.ts.map +1 -0
- package/dist/server/inspectionSnapshot.js +16 -0
- package/dist/server/inspectionSnapshot.js.map +1 -0
- package/dist/server/jobListings.d.ts +43 -13
- package/dist/server/jobListings.d.ts.map +1 -1
- package/dist/server/jobListings.js +8 -7
- package/dist/server/jobListings.js.map +1 -1
- package/dist/server/runQueueWorker.d.ts +3 -3
- package/dist/server/runQueueWorker.d.ts.map +1 -1
- package/dist/server/runQueueWorker.js +5 -3
- package/dist/server/runQueueWorker.js.map +1 -1
- package/dist/server/service.d.ts.map +1 -1
- package/dist/server/service.js +1 -1
- package/dist/server/service.js.map +1 -1
- package/dist/server/services/inspection/busy.d.ts +4 -0
- package/dist/server/services/inspection/busy.d.ts.map +1 -0
- package/dist/server/services/inspection/busy.js +7 -0
- package/dist/server/services/inspection/busy.js.map +1 -0
- package/dist/server/services/inspection/changes.d.ts +9 -0
- package/dist/server/services/inspection/changes.d.ts.map +1 -0
- package/dist/server/services/inspection/changes.js +8 -0
- package/dist/server/services/inspection/changes.js.map +1 -0
- package/dist/server/services/inspection/counts.d.ts +6 -0
- package/dist/server/services/inspection/counts.d.ts.map +1 -0
- package/dist/server/services/inspection/counts.js +8 -0
- package/dist/server/services/inspection/counts.js.map +1 -0
- package/dist/server/services/inspection/deferred.d.ts +7 -0
- package/dist/server/services/inspection/deferred.d.ts.map +1 -0
- package/dist/server/services/inspection/deferred.js +7 -0
- package/dist/server/services/inspection/deferred.js.map +1 -0
- package/dist/server/services/inspection/health.d.ts +6 -0
- package/dist/server/services/inspection/health.d.ts.map +1 -0
- package/dist/server/services/inspection/health.js +8 -0
- package/dist/server/services/inspection/health.js.map +1 -0
- package/dist/server/services/inspection/queue.d.ts +4 -0
- package/dist/server/services/inspection/queue.d.ts.map +1 -0
- package/dist/server/services/inspection/queue.js +7 -0
- package/dist/server/services/inspection/queue.js.map +1 -0
- package/dist/server/services/inspection/schedules.d.ts +4 -0
- package/dist/server/services/inspection/schedules.d.ts.map +1 -0
- package/dist/server/services/inspection/schedules.js +7 -0
- package/dist/server/services/inspection/schedules.js.map +1 -0
- package/dist/server/services/inspection/schemaVersion.d.ts +4 -0
- package/dist/server/services/inspection/schemaVersion.d.ts.map +1 -0
- package/dist/server/services/inspection/schemaVersion.js +7 -0
- package/dist/server/services/inspection/schemaVersion.js.map +1 -0
- package/dist/server/services/inspection/service.d.ts +40 -0
- package/dist/server/services/inspection/service.d.ts.map +1 -0
- package/dist/server/services/inspection/service.js +21 -0
- package/dist/server/services/inspection/service.js.map +1 -0
- package/dist/server/services/inspection/snapshot.d.ts +12 -0
- package/dist/server/services/inspection/snapshot.d.ts.map +1 -0
- package/dist/server/services/inspection/snapshot.js +7 -0
- package/dist/server/services/inspection/snapshot.js.map +1 -0
- package/dist/server/services/inspection/storedJobs.d.ts +6 -0
- package/dist/server/services/inspection/storedJobs.d.ts.map +1 -0
- package/dist/server/services/inspection/storedJobs.js +7 -0
- package/dist/server/services/inspection/storedJobs.js.map +1 -0
- package/dist/server/services/operations/counts.d.ts +6 -0
- package/dist/server/services/operations/counts.d.ts.map +1 -0
- package/dist/server/services/operations/counts.js +8 -0
- package/dist/server/services/operations/counts.js.map +1 -0
- package/dist/server/services/operations/deleteQueue.d.ts +4 -0
- package/dist/server/services/operations/deleteQueue.d.ts.map +1 -0
- package/dist/server/services/operations/deleteQueue.js +7 -0
- package/dist/server/services/operations/deleteQueue.js.map +1 -0
- package/dist/server/services/operations/enqueue.d.ts +5 -0
- package/dist/server/services/operations/enqueue.d.ts.map +1 -0
- package/dist/server/services/operations/enqueue.js +12 -0
- package/dist/server/services/operations/enqueue.js.map +1 -0
- package/dist/server/services/operations/getJob.d.ts +4 -0
- package/dist/server/services/operations/getJob.d.ts.map +1 -0
- package/dist/server/services/operations/getJob.js +7 -0
- package/dist/server/services/operations/getJob.js.map +1 -0
- package/dist/server/services/operations/health.d.ts +7 -0
- package/dist/server/services/operations/health.d.ts.map +1 -0
- package/dist/server/services/operations/health.js +10 -0
- package/dist/server/services/operations/health.js.map +1 -0
- package/dist/server/services/operations/listJobs.d.ts +6 -0
- package/dist/server/services/operations/listJobs.d.ts.map +1 -0
- package/dist/server/services/operations/listJobs.js +7 -0
- package/dist/server/services/operations/listJobs.js.map +1 -0
- package/dist/server/services/operations/refreshQueueStats.d.ts +4 -0
- package/dist/server/services/operations/refreshQueueStats.d.ts.map +1 -0
- package/dist/server/services/operations/refreshQueueStats.js +7 -0
- package/dist/server/services/operations/refreshQueueStats.js.map +1 -0
- package/dist/server/services/operations/retry.d.ts +4 -0
- package/dist/server/services/operations/retry.d.ts.map +1 -0
- package/dist/server/services/operations/retry.js +7 -0
- package/dist/server/services/operations/retry.js.map +1 -0
- package/dist/server/services/operations/service.d.ts +22 -0
- package/dist/server/services/operations/service.d.ts.map +1 -0
- package/dist/server/services/operations/service.js +21 -0
- package/dist/server/services/operations/service.js.map +1 -0
- package/dist/server/services/operations/unschedule.d.ts +4 -0
- package/dist/server/services/operations/unschedule.d.ts.map +1 -0
- package/dist/server/services/operations/unschedule.js +7 -0
- package/dist/server/services/operations/unschedule.js.map +1 -0
- package/dist/server/validateQueueNames.d.ts.map +1 -1
- package/dist/server/validateQueueNames.js +1 -1
- package/dist/server/validateQueueNames.js.map +1 -1
- package/package.json +6 -6
- package/src/server/InspectionEngine.ts +3 -0
- package/src/server/JobQueues.ts +2 -0
- package/src/server/SchemaConnection.ts +3 -0
- package/src/server/adapters/inspection.ts +24 -29
- package/src/server/adapters/inspectionJobs.ts +2 -12
- package/src/server/adapters/inspectionLayer.ts +7 -0
- package/src/server/adapters/inspectionReads.ts +2 -5
- package/src/server/adapters/inspectionSnapshot.ts +15 -33
- package/src/server/adapters/installSchema.ts +8 -5
- package/src/server/adapters/makeService.ts +31 -0
- package/src/server/adapters/operationsLayer.ts +23 -0
- package/src/server/{pgBossDefinitionLayer.ts → adapters/pgBossDefinitionLayer.ts} +7 -14
- package/src/server/{register.ts → adapters/register.ts} +7 -22
- package/src/server/{registerReleasedJobs.ts → adapters/registerReleasedJobs.ts} +6 -5
- package/src/server/adapters/registerWorker.ts +1 -1
- package/src/server/adapters/retireJobs.ts +1 -1
- package/src/server/adapters/runSchemaPlan.ts +7 -11
- package/src/server/enqueuePayload.ts +38 -0
- package/src/server/getJob.ts +28 -0
- package/src/server/inspection.ts +18 -43
- package/src/server/inspectionJobs.ts +13 -0
- package/src/server/inspectionSnapshot.ts +18 -0
- package/src/server/jobListings.ts +20 -16
- package/src/server/runQueueWorker.ts +5 -6
- package/src/server/service.ts +1 -1
- package/src/server/services/inspection/busy.ts +6 -0
- package/src/server/services/inspection/changes.ts +7 -0
- package/src/server/services/inspection/counts.ts +7 -0
- package/src/server/services/inspection/deferred.ts +8 -0
- package/src/server/services/inspection/health.ts +10 -0
- package/src/server/services/inspection/queue.ts +8 -0
- package/src/server/services/inspection/schedules.ts +8 -0
- package/src/server/services/inspection/schemaVersion.ts +8 -0
- package/src/server/services/inspection/service.ts +20 -0
- package/src/server/services/inspection/snapshot.ts +8 -0
- package/src/server/services/inspection/storedJobs.ts +8 -0
- package/src/server/services/operations/counts.ts +7 -0
- package/src/server/services/operations/deleteQueue.ts +7 -0
- package/src/server/services/operations/enqueue.ts +12 -0
- package/src/server/services/operations/getJob.ts +6 -0
- package/src/server/services/operations/health.ts +9 -0
- package/src/server/services/operations/listJobs.ts +8 -0
- package/src/server/services/operations/refreshQueueStats.ts +7 -0
- package/src/server/services/operations/retry.ts +6 -0
- package/src/server/services/operations/service.ts +20 -0
- package/src/server/services/operations/unschedule.ts +7 -0
- package/src/server/validateQueueNames.ts +1 -1
- package/dist/server/PgBossInitialization.d.ts +0 -9
- package/dist/server/PgBossInitialization.d.ts.map +0 -1
- package/dist/server/PgBossInitialization.js +0 -4
- package/dist/server/PgBossInitialization.js.map +0 -1
- package/dist/server/PgBossOperations.d.ts +0 -27
- package/dist/server/PgBossOperations.d.ts.map +0 -1
- package/dist/server/PgBossOperations.js +0 -35
- package/dist/server/PgBossOperations.js.map +0 -1
- package/dist/server/countsFor.d.ts.map +0 -1
- package/dist/server/countsFor.js.map +0 -1
- package/dist/server/enqueueFor.d.ts +0 -4
- package/dist/server/enqueueFor.d.ts.map +0 -1
- package/dist/server/enqueueFor.js +0 -36
- package/dist/server/enqueueFor.js.map +0 -1
- package/dist/server/ensureQueue.d.ts.map +0 -1
- package/dist/server/ensureQueue.js.map +0 -1
- package/dist/server/healthFor.d.ts.map +0 -1
- package/dist/server/healthFor.js.map +0 -1
- package/dist/server/initializeInspection.d.ts +0 -4
- package/dist/server/initializeInspection.d.ts.map +0 -1
- package/dist/server/initializeInspection.js +0 -8
- package/dist/server/initializeInspection.js.map +0 -1
- package/dist/server/initializeJobs.d.ts +0 -4
- package/dist/server/initializeJobs.d.ts.map +0 -1
- package/dist/server/initializeJobs.js +0 -4
- package/dist/server/initializeJobs.js.map +0 -1
- package/dist/server/jobControl.d.ts +0 -10
- package/dist/server/jobControl.d.ts.map +0 -1
- package/dist/server/jobControl.js.map +0 -1
- package/dist/server/makeService.d.ts +0 -6
- package/dist/server/makeService.d.ts.map +0 -1
- package/dist/server/makeService.js +0 -22
- package/dist/server/makeService.js.map +0 -1
- package/dist/server/operations/busy.d.ts +0 -3
- package/dist/server/operations/busy.d.ts.map +0 -1
- package/dist/server/operations/busy.js +0 -4
- package/dist/server/operations/busy.js.map +0 -1
- package/dist/server/operations/changes.d.ts +0 -5
- package/dist/server/operations/changes.d.ts.map +0 -1
- package/dist/server/operations/changes.js +0 -4
- package/dist/server/operations/changes.js.map +0 -1
- package/dist/server/operations/counts.d.ts +0 -3
- package/dist/server/operations/counts.d.ts.map +0 -1
- package/dist/server/operations/counts.js +0 -4
- package/dist/server/operations/counts.js.map +0 -1
- package/dist/server/operations/deadLetteredJobs.d.ts +0 -6
- package/dist/server/operations/deadLetteredJobs.d.ts.map +0 -1
- package/dist/server/operations/deadLetteredJobs.js +0 -4
- package/dist/server/operations/deadLetteredJobs.js.map +0 -1
- package/dist/server/operations/deferred.d.ts +0 -6
- package/dist/server/operations/deferred.d.ts.map +0 -1
- package/dist/server/operations/deferred.js +0 -4
- package/dist/server/operations/deferred.js.map +0 -1
- package/dist/server/operations/deleteQueue.d.ts +0 -3
- package/dist/server/operations/deleteQueue.d.ts.map +0 -1
- package/dist/server/operations/deleteQueue.js +0 -4
- package/dist/server/operations/deleteQueue.js.map +0 -1
- package/dist/server/operations/enqueue.d.ts +0 -3
- package/dist/server/operations/enqueue.d.ts.map +0 -1
- package/dist/server/operations/enqueue.js +0 -4
- package/dist/server/operations/enqueue.js.map +0 -1
- package/dist/server/operations/failedJobs.d.ts +0 -6
- package/dist/server/operations/failedJobs.d.ts.map +0 -1
- package/dist/server/operations/failedJobs.js +0 -4
- package/dist/server/operations/failedJobs.js.map +0 -1
- package/dist/server/operations/getJob.d.ts +0 -6
- package/dist/server/operations/getJob.d.ts.map +0 -1
- package/dist/server/operations/getJob.js +0 -4
- package/dist/server/operations/getJob.js.map +0 -1
- package/dist/server/operations/health.d.ts +0 -3
- package/dist/server/operations/health.d.ts.map +0 -1
- package/dist/server/operations/health.js +0 -4
- package/dist/server/operations/health.js.map +0 -1
- package/dist/server/operations/inspection.d.ts +0 -3
- package/dist/server/operations/inspection.d.ts.map +0 -1
- package/dist/server/operations/inspection.js +0 -4
- package/dist/server/operations/inspection.js.map +0 -1
- package/dist/server/operations/inspectionHealth.d.ts +0 -5
- package/dist/server/operations/inspectionHealth.d.ts.map +0 -1
- package/dist/server/operations/inspectionHealth.js +0 -4
- package/dist/server/operations/inspectionHealth.js.map +0 -1
- package/dist/server/operations/jobs.d.ts.map +0 -1
- package/dist/server/operations/jobs.js +0 -4
- package/dist/server/operations/jobs.js.map +0 -1
- package/dist/server/operations/queue.d.ts +0 -3
- package/dist/server/operations/queue.d.ts.map +0 -1
- package/dist/server/operations/queue.js +0 -4
- package/dist/server/operations/queue.js.map +0 -1
- package/dist/server/operations/refreshQueueStats.d.ts +0 -3
- package/dist/server/operations/refreshQueueStats.d.ts.map +0 -1
- package/dist/server/operations/refreshQueueStats.js +0 -4
- package/dist/server/operations/refreshQueueStats.js.map +0 -1
- package/dist/server/operations/retry.d.ts +0 -3
- package/dist/server/operations/retry.d.ts.map +0 -1
- package/dist/server/operations/retry.js +0 -4
- package/dist/server/operations/retry.js.map +0 -1
- package/dist/server/operations/schedules.d.ts +0 -3
- package/dist/server/operations/schedules.d.ts.map +0 -1
- package/dist/server/operations/schedules.js +0 -4
- package/dist/server/operations/schedules.js.map +0 -1
- package/dist/server/operations/schemaVersion.d.ts +0 -3
- package/dist/server/operations/schemaVersion.d.ts.map +0 -1
- package/dist/server/operations/schemaVersion.js +0 -4
- package/dist/server/operations/schemaVersion.js.map +0 -1
- package/dist/server/operations/snapshot.d.ts +0 -3
- package/dist/server/operations/snapshot.d.ts.map +0 -1
- package/dist/server/operations/snapshot.js +0 -4
- package/dist/server/operations/snapshot.js.map +0 -1
- package/dist/server/operations/storedJobs.d.ts +0 -5
- package/dist/server/operations/storedJobs.d.ts.map +0 -1
- package/dist/server/operations/storedJobs.js +0 -4
- package/dist/server/operations/storedJobs.js.map +0 -1
- package/dist/server/operations/unschedule.d.ts +0 -3
- package/dist/server/operations/unschedule.d.ts.map +0 -1
- package/dist/server/operations/unschedule.js +0 -4
- package/dist/server/operations/unschedule.js.map +0 -1
- package/dist/server/pgBossDefinitionLayer.d.ts.map +0 -1
- package/dist/server/pgBossDefinitionLayer.js.map +0 -1
- package/dist/server/register.d.ts.map +0 -1
- package/dist/server/register.js.map +0 -1
- package/dist/server/registerReleasedJobs.d.ts +0 -6
- package/dist/server/registerReleasedJobs.d.ts.map +0 -1
- package/dist/server/registerReleasedJobs.js.map +0 -1
- package/src/server/PgBossInitialization.ts +0 -9
- package/src/server/PgBossOperations.ts +0 -35
- package/src/server/enqueueFor.ts +0 -44
- package/src/server/initializeInspection.ts +0 -8
- package/src/server/initializeJobs.ts +0 -4
- package/src/server/jobControl.ts +0 -27
- package/src/server/makeService.ts +0 -28
- package/src/server/operations/busy.ts +0 -5
- package/src/server/operations/changes.ts +0 -5
- package/src/server/operations/counts.ts +0 -5
- package/src/server/operations/deadLetteredJobs.ts +0 -5
- package/src/server/operations/deferred.ts +0 -5
- package/src/server/operations/deleteQueue.ts +0 -5
- package/src/server/operations/enqueue.ts +0 -5
- package/src/server/operations/failedJobs.ts +0 -5
- package/src/server/operations/getJob.ts +0 -5
- package/src/server/operations/health.ts +0 -5
- package/src/server/operations/inspection.ts +0 -5
- package/src/server/operations/inspectionHealth.ts +0 -5
- package/src/server/operations/jobs.ts +0 -5
- package/src/server/operations/queue.ts +0 -5
- package/src/server/operations/refreshQueueStats.ts +0 -5
- package/src/server/operations/retry.ts +0 -5
- package/src/server/operations/schedules.ts +0 -5
- package/src/server/operations/schemaVersion.ts +0 -5
- package/src/server/operations/snapshot.ts +0 -5
- package/src/server/operations/storedJobs.ts +0 -5
- package/src/server/operations/unschedule.ts +0 -5
- /package/dist/server/{countsFor.d.ts → adapters/countsFor.d.ts} +0 -0
- /package/dist/server/{countsFor.js → adapters/countsFor.js} +0 -0
- /package/dist/server/{ensureQueue.d.ts → adapters/ensureQueue.d.ts} +0 -0
- /package/dist/server/{ensureQueue.js → adapters/ensureQueue.js} +0 -0
- /package/dist/server/{healthFor.d.ts → adapters/healthFor.d.ts} +0 -0
- /package/dist/server/{healthFor.js → adapters/healthFor.js} +0 -0
- /package/dist/server/{pgBossDefinitionLayer.d.ts → adapters/pgBossDefinitionLayer.d.ts} +0 -0
- /package/src/server/{countsFor.ts → adapters/countsFor.ts} +0 -0
- /package/src/server/{ensureQueue.ts → adapters/ensureQueue.ts} +0 -0
- /package/src/server/{healthFor.ts → adapters/healthFor.ts} +0 -0
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { JobEngine } from "#server/engine.ts";
|
|
3
|
+
export declare const unschedule: (schedule: Pick<import("../../definition.ts").ScheduleDefinition<string>, "name" | "scheduleOptions">) => Effect.Effect<void, import("../../error.ts").PgBossError | import("../../error.ts").PgBossNotFoundError, JobEngine>;
|
|
4
|
+
//# sourceMappingURL=unschedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unschedule.d.ts","sourceRoot":"","sources":["../../../../src/server/services/operations/unschedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,eAAO,MAAM,UAAU,+NAGrB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { JobEngine } from "#server/engine.ts";
|
|
3
|
+
export const unschedule = Effect.fn("PgBossOperations.unschedule")(function* (...args) {
|
|
4
|
+
const engine = yield* JobEngine;
|
|
5
|
+
return yield* engine.unschedule(...args);
|
|
6
|
+
});
|
|
7
|
+
//# sourceMappingURL=unschedule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unschedule.js","sourceRoot":"","sources":["../../../../src/server/services/operations/unschedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,IAA6C;IAC7H,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IAChC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateQueueNames.d.ts","sourceRoot":"","sources":["../../src/server/validateQueueNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"validateQueueNames.d.ts","sourceRoot":"","sources":["../../src/server/validateQueueNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,eAAO,MAAM,kBAAkB,uIAW7B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { registrationName } from "#server/adapters/register.ts";
|
|
2
3
|
import { PgBossQueueNamesError } from "#server/error.ts";
|
|
3
|
-
import { registrationName } from "./register.js";
|
|
4
4
|
export const validateQueueNames = Effect.fnUntraced(function* (jobs, declared) {
|
|
5
5
|
if (declared === undefined) {
|
|
6
6
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateQueueNames.js","sourceRoot":"","sources":["../../src/server/validateQueueNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"validateQueueNames.js","sourceRoot":"","sources":["../../src/server/validateQueueNames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAgC,EAAE,QAAuC;IACvI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO;IACR,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;AACF,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/jobs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.1",
|
|
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.
|
|
48
|
+
"@shivaedev/sql": "0.44.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.
|
|
54
|
-
"@shivaedev/test-kits": "0.
|
|
55
|
-
"@shivaedev/test-sql": "0.24.
|
|
56
|
-
"@shivaedev/test-story": "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",
|
|
57
57
|
"@types/node": "24.19.2",
|
|
58
58
|
"effect": "4.1.0",
|
|
59
59
|
"pg-boss": "12.38.0",
|
|
@@ -1,31 +1,26 @@
|
|
|
1
|
-
import { Effect } from "effect";
|
|
2
|
-
import {
|
|
3
|
-
import type { PgBossClient } from "#server/client.ts";
|
|
4
|
-
import { countsFor } from "#server/countsFor.ts";
|
|
5
|
-
import { JobEngine } from "#server/engine.ts";
|
|
6
|
-
import { healthFor } from "#server/healthFor.ts";
|
|
1
|
+
import { Context, Effect } from "effect";
|
|
2
|
+
import { getJob } from "#server/getJob.ts";
|
|
7
3
|
import type { PgBossInspectionService } from "#server/inspection.ts";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
4
|
+
import { inspectionJobs } from "#server/inspectionJobs.ts";
|
|
5
|
+
import { inspectionSnapshot } from "#server/inspectionSnapshot.ts";
|
|
6
|
+
import { deadLetteredJobs, failedJobs } from "#server/jobListings.ts";
|
|
7
|
+
import { PgBossInspectionReads } from "#server/services/inspection/service.ts";
|
|
8
|
+
import { PgBossOperations } from "#server/services/operations/service.ts";
|
|
12
9
|
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}).pipe(Effect.provideService(JobEngine, engine));
|
|
31
|
-
}
|
|
10
|
+
export const inspection = Effect.fnUntraced(function* (): Effect.fn.Return<
|
|
11
|
+
PgBossInspectionService,
|
|
12
|
+
never,
|
|
13
|
+
"@shivaedev/jobs/PgBossInspectionReads" | "@shivaedev/jobs/PgBossOperations"
|
|
14
|
+
> {
|
|
15
|
+
const ambient = yield* Effect.context<"@shivaedev/jobs/PgBossInspectionReads" | "@shivaedev/jobs/PgBossOperations">();
|
|
16
|
+
const context = Context.pick(PgBossOperations, PgBossInspectionReads)(ambient);
|
|
17
|
+
const reads = yield* PgBossInspectionReads;
|
|
18
|
+
return {
|
|
19
|
+
...reads,
|
|
20
|
+
deadLetteredJobs: (queue, options) => deadLetteredJobs(queue, options).pipe(Effect.provide(context)),
|
|
21
|
+
failedJobs: (queue, options) => failedJobs(queue, options).pipe(Effect.provide(context)),
|
|
22
|
+
getJob: (queue, id) => getJob(queue, id).pipe(Effect.provide(context)),
|
|
23
|
+
jobs: (queue, options) => inspectionJobs(queue, options).pipe(Effect.provide(context)),
|
|
24
|
+
snapshot: (queues) => inspectionSnapshot(queues).pipe(Effect.provide(context)),
|
|
25
|
+
};
|
|
26
|
+
});
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { Effect
|
|
1
|
+
import { Effect } from "effect";
|
|
2
2
|
import type { JobReadOptions, PgBossClient } from "#server/client.ts";
|
|
3
|
-
import type { JobPayloadSchema } from "#server/definition.ts";
|
|
4
3
|
import { toPgBossError } from "#server/error.ts";
|
|
5
|
-
import { decodeStoredData } from "#server/storedRows.ts";
|
|
6
4
|
|
|
7
5
|
export function inspectionJobs(client: PgBossClient) {
|
|
8
6
|
function storedJobs(queue: { readonly name: string }, options?: JobReadOptions) {
|
|
@@ -16,13 +14,5 @@ export function inspectionJobs(client: PgBossClient) {
|
|
|
16
14
|
},
|
|
17
15
|
});
|
|
18
16
|
}
|
|
19
|
-
|
|
20
|
-
queue: { readonly name: TName; readonly schema: TPayload },
|
|
21
|
-
options?: JobReadOptions,
|
|
22
|
-
) {
|
|
23
|
-
return storedJobs(queue, options).pipe(
|
|
24
|
-
Effect.flatMap((rows) => Effect.forEach(rows, (job) => decodeStoredData(queue, job.data).pipe(Effect.map((data) => ({ ...job, data }))))),
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
return { jobs, storedJobs };
|
|
17
|
+
return { storedJobs };
|
|
28
18
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Context, Layer } from "effect";
|
|
2
|
+
import type { PgBossInspectionService } from "#server/inspection.ts";
|
|
3
|
+
import { inspection } from "./inspection.ts";
|
|
4
|
+
import { operationsLayer } from "./operationsLayer.ts";
|
|
5
|
+
export function inspectionLayer<TIdentifier extends string>(service: Context.Service<TIdentifier, PgBossInspectionService>) {
|
|
6
|
+
return Layer.effect(service, inspection()).pipe(Layer.provide(operationsLayer([])));
|
|
7
|
+
}
|
|
@@ -31,7 +31,6 @@ export function inspectionReads(client: PgBossClient, schema: string) {
|
|
|
31
31
|
);
|
|
32
32
|
return Schema.decodeUnknownSync(Busy)(rows[0]).busy;
|
|
33
33
|
}),
|
|
34
|
-
...inspectionJobs(client),
|
|
35
34
|
queue: (queue: Pick<QueueDefinition, "name">) => inspectionOperation(() => client.getQueue(queue.name), queue.name),
|
|
36
35
|
schedules: (name?: string, key?: string) =>
|
|
37
36
|
inspectionOperation(() => {
|
|
@@ -47,9 +46,7 @@ export function inspectionReads(client: PgBossClient, schema: string) {
|
|
|
47
46
|
}
|
|
48
47
|
return client.schemaVersion();
|
|
49
48
|
}),
|
|
50
|
-
snapshot: inspectionSnapshot(
|
|
51
|
-
|
|
52
|
-
() => schema,
|
|
53
|
-
),
|
|
49
|
+
snapshot: inspectionSnapshot(client, schema),
|
|
50
|
+
storedJobs: inspectionJobs(client).storedJobs,
|
|
54
51
|
};
|
|
55
52
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Schema } from "effect";
|
|
2
2
|
import { inspectionOperation } from "#server/adapters/inspectionOperation.ts";
|
|
3
3
|
import type { PgBossClient } from "#server/client.ts";
|
|
4
|
-
import
|
|
5
|
-
import type { SnapshotQueue, UnfinishedJob } from "#server/inspection.ts";
|
|
6
|
-
import { decodeStoredData, quotedSchema } from "#server/storedRows.ts";
|
|
4
|
+
import { quotedSchema } from "#server/storedRows.ts";
|
|
7
5
|
|
|
8
6
|
const Rows = Schema.Array(
|
|
9
7
|
Schema.Struct({
|
|
@@ -15,40 +13,24 @@ const Rows = Schema.Array(
|
|
|
15
13
|
}),
|
|
16
14
|
);
|
|
17
15
|
|
|
18
|
-
export function inspectionSnapshot(client:
|
|
19
|
-
return
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return inspectionOperation(async () => {
|
|
24
|
-
const quoted = quotedSchema(schema());
|
|
25
|
-
const db = client().getDb?.();
|
|
16
|
+
export function inspectionSnapshot(client: PgBossClient, schema: string) {
|
|
17
|
+
return (queues: readonly { readonly name: string }[]) =>
|
|
18
|
+
inspectionOperation(async () => {
|
|
19
|
+
const quoted = quotedSchema(schema);
|
|
20
|
+
const db = client.getDb?.();
|
|
26
21
|
if (db === undefined) {
|
|
27
22
|
throw new TypeError("This pg-boss client does not support getDb");
|
|
28
23
|
}
|
|
29
24
|
const { rows } = await db.executeSql(
|
|
30
25
|
`SELECT id, name AS queue, data, start_after AS "startAfter",
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
[
|
|
26
|
+
CASE WHEN state = 'retry' AND started_on IS NULL AND start_after > ${quoted}.job_now()
|
|
27
|
+
AND output ? 'jobDeferral'
|
|
28
|
+
THEN 'deferred' ELSE state::text END AS state
|
|
29
|
+
FROM ${quoted}.job
|
|
30
|
+
WHERE name = ANY($1::text[]) AND state IN ('created', 'retry', 'active', 'failed')
|
|
31
|
+
ORDER BY created_on, id`,
|
|
32
|
+
[queues.map(({ name }) => name)],
|
|
38
33
|
);
|
|
39
34
|
return Schema.decodeUnknownPromise(Rows)(rows);
|
|
40
|
-
})
|
|
41
|
-
Effect.flatMap((rows) =>
|
|
42
|
-
Effect.forEach(rows, ({ data, queue: name, ...row }) => {
|
|
43
|
-
const queue = byName.get(name);
|
|
44
|
-
if (queue === undefined) {
|
|
45
|
-
return Effect.die(new Error(`The snapshot returned a job of an unrequested queue ${name}`));
|
|
46
|
-
}
|
|
47
|
-
return decodeStoredData<TQueues[number]["name"], TQueues[number]["schema"]>(queue, data).pipe(
|
|
48
|
-
Effect.map((decoded): UnfinishedJob<TQueues[number]> => ({ ...row, data: decoded, queue: queue.name })),
|
|
49
|
-
);
|
|
50
|
-
}),
|
|
51
|
-
),
|
|
52
|
-
);
|
|
53
|
-
};
|
|
35
|
+
});
|
|
54
36
|
}
|
|
@@ -4,6 +4,7 @@ import type { Connection } from "effect/sql/SqlConnection";
|
|
|
4
4
|
import { getConstructionPlans, getMigrationPlans, PgBoss } from "pg-boss";
|
|
5
5
|
import pgBossPackage from "pg-boss/package.json" with { type: "json" };
|
|
6
6
|
import { jobStorePlans } from "#server/jobStorePlans.ts";
|
|
7
|
+
import { SchemaConnection } from "#server/SchemaConnection.ts";
|
|
7
8
|
import type { PgBossSchemaOptions } from "#server/schema.ts";
|
|
8
9
|
import { runSchemaPlan } from "./runSchemaPlan.ts";
|
|
9
10
|
import { resumeSchemaIndexes } from "./schemaIndexBuilds.ts";
|
|
@@ -26,7 +27,7 @@ async function installNativeSchema(
|
|
|
26
27
|
schema,
|
|
27
28
|
});
|
|
28
29
|
if (!(await client.isInstalled())) {
|
|
29
|
-
await runSchemaPlan(
|
|
30
|
+
await run(runSchemaPlan(construction).pipe(Effect.provideService(SchemaConnection, connection)));
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
32
33
|
const version = await client.schemaVersion();
|
|
@@ -43,10 +44,12 @@ async function installNativeSchema(
|
|
|
43
44
|
const partitionTables = Schema.decodeUnknownSync(Partitions)(
|
|
44
45
|
await run(connection.executeUnprepared(`SELECT table_name AS "tableName", policy FROM ${schema}.queue WHERE partition = true`, [], undefined)),
|
|
45
46
|
);
|
|
46
|
-
await
|
|
47
|
-
schema,
|
|
48
|
-
|
|
49
|
-
|
|
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
|
+
);
|
|
50
53
|
await resumeSchemaIndexes(client, schema);
|
|
51
54
|
}
|
|
52
55
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Context, Effect } from "effect";
|
|
2
|
+
import { inspection } from "#server/adapters/inspection.ts";
|
|
3
|
+
import { enqueuePayload } from "#server/enqueuePayload.ts";
|
|
4
|
+
import { getJob } from "#server/getJob.ts";
|
|
5
|
+
import { deadLetteredJobs, failedJobs } from "#server/jobListings.ts";
|
|
6
|
+
import type { PgBossService } from "#server/service.ts";
|
|
7
|
+
import { PgBossOperations } from "#server/services/operations/service.ts";
|
|
8
|
+
|
|
9
|
+
export const makeService = Effect.fnUntraced(function* (): Effect.fn.Return<
|
|
10
|
+
PgBossService,
|
|
11
|
+
never,
|
|
12
|
+
"@shivaedev/jobs/PgBossOperations" | "@shivaedev/jobs/PgBossInspectionReads"
|
|
13
|
+
> {
|
|
14
|
+
const ambient = yield* Effect.context<"@shivaedev/jobs/PgBossOperations">();
|
|
15
|
+
const context = Context.pick(PgBossOperations)(ambient);
|
|
16
|
+
const operations = yield* PgBossOperations;
|
|
17
|
+
const reads = yield* inspection();
|
|
18
|
+
return {
|
|
19
|
+
counts: operations.counts,
|
|
20
|
+
deadLetteredJobs: (queue, options) => deadLetteredJobs(queue, options).pipe(Effect.provide(context)),
|
|
21
|
+
deleteQueue: operations.deleteQueue,
|
|
22
|
+
enqueue: (queue, payload, options) => enqueuePayload(queue, payload, options).pipe(Effect.provide(context)),
|
|
23
|
+
failedJobs: (queue, options) => failedJobs(queue, options).pipe(Effect.provide(context)),
|
|
24
|
+
getJob: (queue, id) => getJob(queue, id).pipe(Effect.provide(context)),
|
|
25
|
+
health: operations.health,
|
|
26
|
+
inspection: () => Effect.succeed(reads),
|
|
27
|
+
refreshQueueStats: operations.refreshQueueStats,
|
|
28
|
+
retry: (queue, id) => operations.retry(queue.name, id),
|
|
29
|
+
unschedule: operations.unschedule,
|
|
30
|
+
};
|
|
31
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Effect, Layer } from "effect";
|
|
2
|
+
import { JobEngine } from "#server/engine.ts";
|
|
3
|
+
import { InspectionEngine } from "#server/InspectionEngine.ts";
|
|
4
|
+
import { JobQueues } from "#server/JobQueues.ts";
|
|
5
|
+
import { PgBoss } from "#server/PgBoss.ts";
|
|
6
|
+
import { PgBossInspectionReads } from "#server/services/inspection/service.ts";
|
|
7
|
+
import { PgBossOperations } from "#server/services/operations/service.ts";
|
|
8
|
+
import { inspectionReads } from "./inspectionReads.ts";
|
|
9
|
+
import { jobEngine } from "./jobEngine.ts";
|
|
10
|
+
export function operationsLayer(names: readonly string[]) {
|
|
11
|
+
return Layer.unwrap(
|
|
12
|
+
Effect.gen(function* () {
|
|
13
|
+
const acquired = yield* PgBoss;
|
|
14
|
+
const ports = Layer.mergeAll(
|
|
15
|
+
Layer.succeed(JobEngine, jobEngine(acquired.client, acquired.schema)),
|
|
16
|
+
Layer.succeed(InspectionEngine, inspectionReads(acquired.client, acquired.schema ?? "pgboss")),
|
|
17
|
+
Layer.succeed(JobQueues, names),
|
|
18
|
+
Layer.succeed(PgBoss, acquired),
|
|
19
|
+
);
|
|
20
|
+
return Layer.mergeAll(Layer.fresh(PgBossOperations.layer), Layer.fresh(PgBossInspectionReads.layer)).pipe(Layer.provide(ports));
|
|
21
|
+
}),
|
|
22
|
+
);
|
|
23
|
+
}
|
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import { type Context, Effect, Exit, Layer, Scope } from "effect";
|
|
2
2
|
import { clientErrorReporter } from "#server/adapters/clientErrorReporter.ts";
|
|
3
3
|
import { clientErrorSubscription } from "#server/adapters/clientErrorSubscription.ts";
|
|
4
|
-
import {
|
|
4
|
+
import { logClientError } from "#server/clientErrors.ts";
|
|
5
5
|
import type { JobRegistration, RegistrationRequirements } from "#server/definition.ts";
|
|
6
6
|
import type { PgBossError, PgBossQueueNamesError, PgBossQueueOptionsError } from "#server/error.ts";
|
|
7
7
|
import { PgBoss } from "#server/PgBoss.ts";
|
|
8
8
|
import type { PgBossLayerOptions, PgBossService } from "#server/service.ts";
|
|
9
|
-
import {
|
|
10
|
-
import { JobEngine } from "./engine.ts";
|
|
9
|
+
import { validateQueueNames } from "#server/validateQueueNames.ts";
|
|
11
10
|
import { makeService } from "./makeService.ts";
|
|
12
|
-
import {
|
|
13
|
-
import { PgBossOperations } from "./PgBossOperations.ts";
|
|
11
|
+
import { operationsLayer } from "./operationsLayer.ts";
|
|
14
12
|
import { registrationName } from "./register.ts";
|
|
15
13
|
import { registerReleasedJobs } from "./registerReleasedJobs.ts";
|
|
16
|
-
import { validateQueueNames } from "./validateQueueNames.ts";
|
|
17
14
|
|
|
18
15
|
export function pgBossDefinitionLayer<TIdentifier extends string, const TRegistrations extends readonly JobRegistration[], E>(
|
|
19
16
|
Service: Context.Service<TIdentifier, PgBossService>,
|
|
@@ -31,10 +28,7 @@ export function pgBossDefinitionLayer<TIdentifier extends string, R, E>(
|
|
|
31
28
|
) {
|
|
32
29
|
return Layer.unwrap(
|
|
33
30
|
Effect.map(Effect.context<Exclude<R, TIdentifier> | E>(), (dependencies) =>
|
|
34
|
-
Layer.effect(Service,
|
|
35
|
-
Layer.provide(Layer.fresh(PgBossOperations.layer)),
|
|
36
|
-
Layer.provide(Layer.succeed(PgBossInitialization, initializePgBoss(Service, options, dependencies, queueNames))),
|
|
37
|
-
),
|
|
31
|
+
Layer.effect(Service, initializePgBoss(Service, options, dependencies, queueNames)),
|
|
38
32
|
),
|
|
39
33
|
);
|
|
40
34
|
}
|
|
@@ -48,16 +42,15 @@ const initializePgBoss = Effect.fnUntraced(function* <TIdentifier extends string
|
|
|
48
42
|
yield* validateQueueNames(options.jobs, queueNames);
|
|
49
43
|
const acquired = yield* PgBoss;
|
|
50
44
|
const workerScope = yield* Scope.make();
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
);
|
|
45
|
+
const services = yield* Layer.build(operationsLayer(options.jobs.map(registrationName)));
|
|
46
|
+
const service = yield* makeService().pipe(Effect.provide(services));
|
|
54
47
|
yield* Effect.gen(function* () {
|
|
55
48
|
const context = yield* Effect.context<R | E>();
|
|
56
49
|
const reportError = options.onError ?? logClientError;
|
|
57
50
|
const report = yield* clientErrorReporter(reportError).pipe(Effect.provide(context));
|
|
58
51
|
const unsubscribe = yield* clientErrorSubscription(acquired.client, report);
|
|
59
52
|
yield* Effect.addFinalizer(() => Scope.close(workerScope, Exit.void).pipe(Effect.ensuring(Effect.sync(unsubscribe))));
|
|
60
|
-
yield* registerReleasedJobs(acquired.client, options.jobs,
|
|
53
|
+
yield* registerReleasedJobs(acquired.client, options.jobs, acquired.reused, acquired.schema, acquired.stop, options.retired).pipe(
|
|
61
54
|
Effect.provideService(Scope.Scope, workerScope),
|
|
62
55
|
);
|
|
63
56
|
}).pipe(Effect.provideService(Service, service), Effect.provide(dependencies));
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Effect, Scope } from "effect";
|
|
2
2
|
import { registerWorker } from "#server/adapters/registerWorker.ts";
|
|
3
3
|
import { workerDiagnostics } from "#server/adapters/workerDiagnostics.ts";
|
|
4
4
|
import type { PgBossClient } from "#server/client.ts";
|
|
5
5
|
import type { StopOptions } from "#server/clientOptions.ts";
|
|
6
6
|
import type { JobPayloadSchema, JobRegistration, QueueDefinition, QueueWorker, ScheduleDefinition, ScheduledWorker } from "#server/definition.ts";
|
|
7
|
-
import { ensureQueue } from "#server/ensureQueue.ts";
|
|
8
7
|
import { PgBossQueueOptionsError, toPgBossError } from "#server/error.ts";
|
|
9
8
|
import { runQueueWorker } from "#server/runQueueWorker.ts";
|
|
9
|
+
import { ensureQueue } from "./ensureQueue.ts";
|
|
10
10
|
|
|
11
11
|
function registrationDefinition(registration: JobRegistration): QueueDefinition | ScheduleDefinition {
|
|
12
12
|
if (registration._tag === "QueueDefinition") {
|
|
@@ -39,8 +39,6 @@ const prepareQueues = Effect.fnUntraced(function* (client: PgBossClient, registr
|
|
|
39
39
|
const registerQueue = Effect.fnUntraced(function* <R>(
|
|
40
40
|
client: PgBossClient,
|
|
41
41
|
registration: QueueWorker<JobPayloadSchema & { readonly DecodingServices: R }, R> | QueueDefinition,
|
|
42
|
-
context: Context.Context<R>,
|
|
43
|
-
scope: Scope.Scope,
|
|
44
42
|
schema: string,
|
|
45
43
|
stop: StopOptions | undefined,
|
|
46
44
|
) {
|
|
@@ -53,33 +51,21 @@ const registerQueue = Effect.fnUntraced(function* <R>(
|
|
|
53
51
|
client,
|
|
54
52
|
name,
|
|
55
53
|
queue.workerOptions,
|
|
56
|
-
(job, deadline) => runQueueWorker(registration, job, deadline
|
|
57
|
-
scope,
|
|
54
|
+
(job, deadline) => runQueueWorker(registration, job, deadline),
|
|
58
55
|
schema,
|
|
59
56
|
queue.maxDeferrals,
|
|
60
57
|
stop,
|
|
61
|
-
)
|
|
58
|
+
);
|
|
62
59
|
});
|
|
63
60
|
|
|
64
61
|
const registerSchedule = Effect.fnUntraced(function* <R>(
|
|
65
62
|
client: PgBossClient,
|
|
66
63
|
worker: ScheduledWorker<R>,
|
|
67
|
-
context: Context.Context<R>,
|
|
68
|
-
scope: Scope.Scope,
|
|
69
64
|
schema: string,
|
|
70
65
|
stop: StopOptions | undefined,
|
|
71
66
|
) {
|
|
72
67
|
const { schedule } = worker;
|
|
73
|
-
yield* registerWorker(
|
|
74
|
-
client,
|
|
75
|
-
schedule.name,
|
|
76
|
-
schedule.workerOptions,
|
|
77
|
-
() => workerDiagnostics(worker.effect),
|
|
78
|
-
scope,
|
|
79
|
-
schema,
|
|
80
|
-
schedule.maxDeferrals,
|
|
81
|
-
stop,
|
|
82
|
-
).pipe(Effect.provide(context));
|
|
68
|
+
yield* registerWorker(client, schedule.name, schedule.workerOptions, () => workerDiagnostics(worker.effect), schema, schedule.maxDeferrals, stop);
|
|
83
69
|
yield* Effect.tryPromise({
|
|
84
70
|
catch: (error) => toPgBossError("register", error, schedule.name),
|
|
85
71
|
try: () => client.schedule(schedule.name, schedule.cron, null, schedule.scheduleOptions),
|
|
@@ -97,7 +83,6 @@ export function registrationNames(registrations: readonly JobRegistration[]): re
|
|
|
97
83
|
export const registerJobs = Effect.fnUntraced(function* <R>(
|
|
98
84
|
client: PgBossClient,
|
|
99
85
|
registrations: readonly JobRegistration<R>[],
|
|
100
|
-
context: Context.Context<R>,
|
|
101
86
|
replaceWorkers: boolean,
|
|
102
87
|
schema = "pgboss",
|
|
103
88
|
startWorkers = true,
|
|
@@ -111,9 +96,9 @@ export const registerJobs = Effect.fnUntraced(function* <R>(
|
|
|
111
96
|
}
|
|
112
97
|
for (const registration of registrations) {
|
|
113
98
|
if (registration._tag === "QueueWorker" || registration._tag === "QueueDefinition") {
|
|
114
|
-
yield* registerQueue(client, registration,
|
|
99
|
+
yield* registerQueue(client, registration, schema, stop).pipe(Effect.provideService(Scope.Scope, scope));
|
|
115
100
|
} else {
|
|
116
|
-
yield* registerSchedule(client, registration,
|
|
101
|
+
yield* registerSchedule(client, registration, schema, stop).pipe(Effect.provideService(Scope.Scope, scope));
|
|
117
102
|
}
|
|
118
103
|
}
|
|
119
104
|
});
|
|
@@ -1,32 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { WorkerRelease } from "@shivaedev/sql/
|
|
1
|
+
import { Effect, Option, Scope } from "effect";
|
|
2
|
+
import { WorkerRelease } from "@shivaedev/sql/worker-release/service.ts";
|
|
3
3
|
import { retireJobs } from "#server/adapters/retireJobs.ts";
|
|
4
4
|
import type { PgBossClient } from "#server/client.ts";
|
|
5
5
|
import type { StopOptions } from "#server/clientOptions.ts";
|
|
6
6
|
import type { JobRegistration } from "#server/definition.ts";
|
|
7
7
|
import { toPgBossError } from "#server/error.ts";
|
|
8
|
+
import type { PgBoss } from "#server/PgBoss.ts";
|
|
8
9
|
import { registerJobs, registrationName } from "./register.ts";
|
|
9
10
|
|
|
10
11
|
export const registerReleasedJobs = Effect.fnUntraced(function* <R>(
|
|
11
12
|
client: PgBossClient,
|
|
12
13
|
jobs: readonly JobRegistration<R>[],
|
|
13
|
-
context: Context.Context<R>,
|
|
14
14
|
replaceWorkers: boolean,
|
|
15
15
|
schema: string | undefined,
|
|
16
16
|
stop: StopOptions | undefined,
|
|
17
17
|
retired: readonly string[] = [],
|
|
18
18
|
) {
|
|
19
|
+
const context = yield* Effect.context<R | PgBoss>();
|
|
19
20
|
const signal = yield* Effect.serviceOption(WorkerRelease);
|
|
20
21
|
const workers = jobs.filter((job) => job._tag !== "QueueDefinition");
|
|
21
22
|
const scope = yield* Effect.scope;
|
|
22
23
|
const register = retireJobs(client, jobs, retired).pipe(
|
|
23
|
-
Effect.andThen(registerJobs(client, jobs,
|
|
24
|
+
Effect.andThen(registerJobs(client, jobs, replaceWorkers, schema, true, stop)),
|
|
24
25
|
Effect.provideService(Scope.Scope, scope),
|
|
25
26
|
);
|
|
26
27
|
if (Option.isNone(signal) || (workers.length === 0 && retired.length === 0)) {
|
|
27
28
|
return yield* register;
|
|
28
29
|
}
|
|
29
|
-
yield* registerJobs(client, jobs,
|
|
30
|
+
yield* registerJobs(client, jobs, replaceWorkers, schema, false, stop);
|
|
30
31
|
let working = replaceWorkers;
|
|
31
32
|
let paused = false;
|
|
32
33
|
yield* signal.value.register((active) =>
|
|
@@ -16,11 +16,11 @@ export const registerWorker = Effect.fnUntraced(function* <R>(
|
|
|
16
16
|
name: string,
|
|
17
17
|
options: WorkerOptions,
|
|
18
18
|
run: (job: WorkerJob<unknown>, deadline: number) => Effect.Effect<unknown, unknown, R>,
|
|
19
|
-
scope: Scope.Scope,
|
|
20
19
|
schema: string,
|
|
21
20
|
maxDeferrals: number,
|
|
22
21
|
stop?: StopOptions,
|
|
23
22
|
) {
|
|
23
|
+
const scope = yield* Effect.scope;
|
|
24
24
|
const execute = Effect.runPromiseWith(yield* Effect.context<R>());
|
|
25
25
|
const workerScope = yield* Scope.fork(scope);
|
|
26
26
|
const fibers = yield* Scope.fork(workerScope);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
+
import { registrationNames } from "#server/adapters/register.ts";
|
|
2
3
|
import type { PgBossClient } from "#server/client.ts";
|
|
3
4
|
import type { JobRegistration } from "#server/definition.ts";
|
|
4
5
|
import { toPgBossError } from "#server/error.ts";
|
|
5
6
|
import { deadLetterQueueName } from "#server/health.ts";
|
|
6
|
-
import { registrationNames } from "#server/register.ts";
|
|
7
7
|
|
|
8
8
|
export const retireJobs = Effect.fnUntraced(function* (client: PgBossClient, jobs: readonly JobRegistration[], retired: readonly string[]) {
|
|
9
9
|
yield* Effect.try({
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SchemaConnection } from "#server/SchemaConnection.ts";
|
|
3
3
|
import { pendingIndexInserts } from "./schemaIndexBuilds.ts";
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
connection
|
|
7
|
-
plan: string,
|
|
8
|
-
run: <A, E>(effect: Effect.Effect<A, E>) => Promise<A>,
|
|
9
|
-
upgrade?: { readonly schema: string; readonly version: number },
|
|
10
|
-
): Promise<void> {
|
|
5
|
+
export const runSchemaPlan = Effect.fnUntraced(function* (plan: string, upgrade?: { readonly schema: string; readonly version: number }) {
|
|
6
|
+
const connection = yield* SchemaConnection;
|
|
11
7
|
// Native exported plans append concurrent index DDL after the migration transaction.
|
|
12
8
|
const parts = /^\s*BEGIN;(?<body>[\s\S]*)\n {4}COMMIT;(?<concurrent>[\s\S]*)$/u.exec(plan);
|
|
13
9
|
if (parts?.groups === undefined) {
|
|
@@ -23,10 +19,10 @@ export async function runSchemaPlan(
|
|
|
23
19
|
.filter((statement) => statement.trim() !== "");
|
|
24
20
|
const pending = upgrade === undefined ? "" : pendingIndexInserts(upgrade.schema, upgrade.version, commands, quote);
|
|
25
21
|
// Effect SQL uses the extended protocol, which accepts one statement per command.
|
|
26
|
-
|
|
22
|
+
yield* connection.executeRaw(`DO ${quote(`BEGIN EXECUTE ${quote(`${body}\n${pending}`)}; END`)}`, []);
|
|
27
23
|
if (upgrade === undefined) {
|
|
28
24
|
for (const statement of commands) {
|
|
29
|
-
|
|
25
|
+
yield* connection.executeRaw(statement, []);
|
|
30
26
|
}
|
|
31
27
|
}
|
|
32
|
-
}
|
|
28
|
+
});
|