@shivaedev/jobs 0.39.0 → 0.40.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 (400) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +43 -10
  3. package/dist/server/InspectionEngine.d.ts +27 -0
  4. package/dist/server/InspectionEngine.d.ts.map +1 -0
  5. package/dist/server/InspectionEngine.js +4 -0
  6. package/dist/server/InspectionEngine.js.map +1 -0
  7. package/dist/server/JobQueues.d.ts +6 -0
  8. package/dist/server/JobQueues.d.ts.map +1 -0
  9. package/dist/server/JobQueues.js +4 -0
  10. package/dist/server/JobQueues.js.map +1 -0
  11. package/dist/server/SchemaConnection.d.ts +7 -0
  12. package/dist/server/SchemaConnection.d.ts.map +1 -0
  13. package/dist/server/SchemaConnection.js +4 -0
  14. package/dist/server/SchemaConnection.js.map +1 -0
  15. package/dist/server/adapters/countsFor.d.ts.map +1 -0
  16. package/dist/server/adapters/countsFor.js.map +1 -0
  17. package/dist/server/adapters/ensureQueue.d.ts.map +1 -0
  18. package/dist/server/adapters/ensureQueue.js.map +1 -0
  19. package/dist/server/adapters/healthFor.d.ts.map +1 -0
  20. package/dist/server/adapters/healthFor.js.map +1 -0
  21. package/dist/server/adapters/inspection.d.ts +1 -2
  22. package/dist/server/adapters/inspection.d.ts.map +1 -1
  23. package/dist/server/adapters/inspection.js +20 -24
  24. package/dist/server/adapters/inspection.js.map +1 -1
  25. package/dist/server/adapters/inspectionJobs.d.ts +1 -43
  26. package/dist/server/adapters/inspectionJobs.d.ts.map +1 -1
  27. package/dist/server/adapters/inspectionJobs.js +1 -5
  28. package/dist/server/adapters/inspectionJobs.js.map +1 -1
  29. package/dist/server/adapters/inspectionLayer.d.ts +4 -0
  30. package/dist/server/adapters/inspectionLayer.d.ts.map +1 -0
  31. package/dist/server/adapters/inspectionLayer.js +7 -0
  32. package/dist/server/adapters/inspectionLayer.js.map +1 -0
  33. package/dist/server/adapters/inspectionReads.d.ts +12 -46
  34. package/dist/server/adapters/inspectionReads.d.ts.map +1 -1
  35. package/dist/server/adapters/inspectionReads.js +2 -2
  36. package/dist/server/adapters/inspectionReads.js.map +1 -1
  37. package/dist/server/adapters/inspectionSnapshot.d.ts +9 -4
  38. package/dist/server/adapters/inspectionSnapshot.d.ts.map +1 -1
  39. package/dist/server/adapters/inspectionSnapshot.js +17 -26
  40. package/dist/server/adapters/inspectionSnapshot.js.map +1 -1
  41. package/dist/server/adapters/installSchema.d.ts.map +1 -1
  42. package/dist/server/adapters/installSchema.js +4 -3
  43. package/dist/server/adapters/installSchema.js.map +1 -1
  44. package/dist/server/adapters/makeService.d.ts +4 -0
  45. package/dist/server/adapters/makeService.d.ts.map +1 -0
  46. package/dist/server/adapters/makeService.js +26 -0
  47. package/dist/server/adapters/makeService.js.map +1 -0
  48. package/dist/server/adapters/operationsLayer.d.ts +4 -0
  49. package/dist/server/adapters/operationsLayer.d.ts.map +1 -0
  50. package/dist/server/adapters/operationsLayer.js +17 -0
  51. package/dist/server/adapters/operationsLayer.js.map +1 -0
  52. package/dist/server/adapters/pgBossDefinitionLayer.d.ts.map +1 -0
  53. package/dist/server/{pgBossDefinitionLayer.js → adapters/pgBossDefinitionLayer.js} +7 -9
  54. package/dist/server/adapters/pgBossDefinitionLayer.js.map +1 -0
  55. package/dist/server/{register.d.ts → adapters/register.d.ts} +2 -2
  56. package/dist/server/adapters/register.d.ts.map +1 -0
  57. package/dist/server/{register.js → adapters/register.js} +8 -8
  58. package/dist/server/adapters/register.js.map +1 -0
  59. package/dist/server/adapters/registerReleasedJobs.d.ts +7 -0
  60. package/dist/server/adapters/registerReleasedJobs.d.ts.map +1 -0
  61. package/dist/server/{registerReleasedJobs.js → adapters/registerReleasedJobs.js} +5 -4
  62. package/dist/server/adapters/registerReleasedJobs.js.map +1 -0
  63. package/dist/server/adapters/registerWorker.d.ts +1 -1
  64. package/dist/server/adapters/registerWorker.d.ts.map +1 -1
  65. package/dist/server/adapters/registerWorker.js +2 -1
  66. package/dist/server/adapters/registerWorker.js.map +1 -1
  67. package/dist/server/adapters/retireJobs.d.ts.map +1 -1
  68. package/dist/server/adapters/retireJobs.js +1 -1
  69. package/dist/server/adapters/retireJobs.js.map +1 -1
  70. package/dist/server/adapters/runSchemaPlan.d.ts +4 -4
  71. package/dist/server/adapters/runSchemaPlan.d.ts.map +1 -1
  72. package/dist/server/adapters/runSchemaPlan.js +7 -4
  73. package/dist/server/adapters/runSchemaPlan.js.map +1 -1
  74. package/dist/server/enqueuePayload.d.ts +6 -0
  75. package/dist/server/enqueuePayload.d.ts.map +1 -0
  76. package/dist/server/enqueuePayload.js +29 -0
  77. package/dist/server/enqueuePayload.js.map +1 -0
  78. package/dist/server/getJob.d.ts +88 -0
  79. package/dist/server/getJob.d.ts.map +1 -0
  80. package/dist/server/{jobControl.js → getJob.js} +5 -7
  81. package/dist/server/getJob.js.map +1 -0
  82. package/dist/server/inspection.d.ts +13 -80
  83. package/dist/server/inspection.d.ts.map +1 -1
  84. package/dist/server/inspection.js +4 -39
  85. package/dist/server/inspection.js.map +1 -1
  86. package/dist/server/{operations/jobs.d.ts → inspectionJobs.d.ts} +8 -6
  87. package/dist/server/inspectionJobs.d.ts.map +1 -0
  88. package/dist/server/inspectionJobs.js +9 -0
  89. package/dist/server/inspectionJobs.js.map +1 -0
  90. package/dist/server/inspectionSnapshot.d.ts +82 -0
  91. package/dist/server/inspectionSnapshot.d.ts.map +1 -0
  92. package/dist/server/inspectionSnapshot.js +16 -0
  93. package/dist/server/inspectionSnapshot.js.map +1 -0
  94. package/dist/server/jobListings.d.ts +43 -13
  95. package/dist/server/jobListings.d.ts.map +1 -1
  96. package/dist/server/jobListings.js +8 -7
  97. package/dist/server/jobListings.js.map +1 -1
  98. package/dist/server/runQueueWorker.d.ts +3 -3
  99. package/dist/server/runQueueWorker.d.ts.map +1 -1
  100. package/dist/server/runQueueWorker.js +5 -3
  101. package/dist/server/runQueueWorker.js.map +1 -1
  102. package/dist/server/service.d.ts.map +1 -1
  103. package/dist/server/service.js +1 -1
  104. package/dist/server/service.js.map +1 -1
  105. package/dist/server/services/inspection/busy.d.ts +4 -0
  106. package/dist/server/services/inspection/busy.d.ts.map +1 -0
  107. package/dist/server/services/inspection/busy.js +7 -0
  108. package/dist/server/services/inspection/busy.js.map +1 -0
  109. package/dist/server/services/inspection/changes.d.ts +9 -0
  110. package/dist/server/services/inspection/changes.d.ts.map +1 -0
  111. package/dist/server/services/inspection/changes.js +8 -0
  112. package/dist/server/services/inspection/changes.js.map +1 -0
  113. package/dist/server/services/inspection/counts.d.ts +6 -0
  114. package/dist/server/services/inspection/counts.d.ts.map +1 -0
  115. package/dist/server/services/inspection/counts.js +8 -0
  116. package/dist/server/services/inspection/counts.js.map +1 -0
  117. package/dist/server/services/inspection/deferred.d.ts +7 -0
  118. package/dist/server/services/inspection/deferred.d.ts.map +1 -0
  119. package/dist/server/services/inspection/deferred.js +7 -0
  120. package/dist/server/services/inspection/deferred.js.map +1 -0
  121. package/dist/server/services/inspection/health.d.ts +6 -0
  122. package/dist/server/services/inspection/health.d.ts.map +1 -0
  123. package/dist/server/services/inspection/health.js +8 -0
  124. package/dist/server/services/inspection/health.js.map +1 -0
  125. package/dist/server/services/inspection/queue.d.ts +4 -0
  126. package/dist/server/services/inspection/queue.d.ts.map +1 -0
  127. package/dist/server/services/inspection/queue.js +7 -0
  128. package/dist/server/services/inspection/queue.js.map +1 -0
  129. package/dist/server/services/inspection/schedules.d.ts +4 -0
  130. package/dist/server/services/inspection/schedules.d.ts.map +1 -0
  131. package/dist/server/services/inspection/schedules.js +7 -0
  132. package/dist/server/services/inspection/schedules.js.map +1 -0
  133. package/dist/server/services/inspection/schemaVersion.d.ts +4 -0
  134. package/dist/server/services/inspection/schemaVersion.d.ts.map +1 -0
  135. package/dist/server/services/inspection/schemaVersion.js +7 -0
  136. package/dist/server/services/inspection/schemaVersion.js.map +1 -0
  137. package/dist/server/services/inspection/service.d.ts +40 -0
  138. package/dist/server/services/inspection/service.d.ts.map +1 -0
  139. package/dist/server/services/inspection/service.js +21 -0
  140. package/dist/server/services/inspection/service.js.map +1 -0
  141. package/dist/server/services/inspection/snapshot.d.ts +12 -0
  142. package/dist/server/services/inspection/snapshot.d.ts.map +1 -0
  143. package/dist/server/services/inspection/snapshot.js +7 -0
  144. package/dist/server/services/inspection/snapshot.js.map +1 -0
  145. package/dist/server/services/inspection/storedJobs.d.ts +6 -0
  146. package/dist/server/services/inspection/storedJobs.d.ts.map +1 -0
  147. package/dist/server/services/inspection/storedJobs.js +7 -0
  148. package/dist/server/services/inspection/storedJobs.js.map +1 -0
  149. package/dist/server/services/operations/counts.d.ts +6 -0
  150. package/dist/server/services/operations/counts.d.ts.map +1 -0
  151. package/dist/server/services/operations/counts.js +8 -0
  152. package/dist/server/services/operations/counts.js.map +1 -0
  153. package/dist/server/services/operations/deleteQueue.d.ts +4 -0
  154. package/dist/server/services/operations/deleteQueue.d.ts.map +1 -0
  155. package/dist/server/services/operations/deleteQueue.js +7 -0
  156. package/dist/server/services/operations/deleteQueue.js.map +1 -0
  157. package/dist/server/services/operations/enqueue.d.ts +5 -0
  158. package/dist/server/services/operations/enqueue.d.ts.map +1 -0
  159. package/dist/server/services/operations/enqueue.js +12 -0
  160. package/dist/server/services/operations/enqueue.js.map +1 -0
  161. package/dist/server/services/operations/getJob.d.ts +4 -0
  162. package/dist/server/services/operations/getJob.d.ts.map +1 -0
  163. package/dist/server/services/operations/getJob.js +7 -0
  164. package/dist/server/services/operations/getJob.js.map +1 -0
  165. package/dist/server/services/operations/health.d.ts +7 -0
  166. package/dist/server/services/operations/health.d.ts.map +1 -0
  167. package/dist/server/services/operations/health.js +10 -0
  168. package/dist/server/services/operations/health.js.map +1 -0
  169. package/dist/server/services/operations/listJobs.d.ts +6 -0
  170. package/dist/server/services/operations/listJobs.d.ts.map +1 -0
  171. package/dist/server/services/operations/listJobs.js +7 -0
  172. package/dist/server/services/operations/listJobs.js.map +1 -0
  173. package/dist/server/services/operations/refreshQueueStats.d.ts +4 -0
  174. package/dist/server/services/operations/refreshQueueStats.d.ts.map +1 -0
  175. package/dist/server/services/operations/refreshQueueStats.js +7 -0
  176. package/dist/server/services/operations/refreshQueueStats.js.map +1 -0
  177. package/dist/server/services/operations/retry.d.ts +4 -0
  178. package/dist/server/services/operations/retry.d.ts.map +1 -0
  179. package/dist/server/services/operations/retry.js +7 -0
  180. package/dist/server/services/operations/retry.js.map +1 -0
  181. package/dist/server/services/operations/service.d.ts +22 -0
  182. package/dist/server/services/operations/service.d.ts.map +1 -0
  183. package/dist/server/services/operations/service.js +21 -0
  184. package/dist/server/services/operations/service.js.map +1 -0
  185. package/dist/server/services/operations/unschedule.d.ts +4 -0
  186. package/dist/server/services/operations/unschedule.d.ts.map +1 -0
  187. package/dist/server/services/operations/unschedule.js +7 -0
  188. package/dist/server/services/operations/unschedule.js.map +1 -0
  189. package/dist/server/validateQueueNames.d.ts.map +1 -1
  190. package/dist/server/validateQueueNames.js +1 -1
  191. package/dist/server/validateQueueNames.js.map +1 -1
  192. package/package.json +6 -6
  193. package/src/server/InspectionEngine.ts +3 -0
  194. package/src/server/JobQueues.ts +2 -0
  195. package/src/server/SchemaConnection.ts +3 -0
  196. package/src/server/adapters/inspection.ts +24 -29
  197. package/src/server/adapters/inspectionJobs.ts +2 -12
  198. package/src/server/adapters/inspectionLayer.ts +7 -0
  199. package/src/server/adapters/inspectionReads.ts +2 -5
  200. package/src/server/adapters/inspectionSnapshot.ts +15 -33
  201. package/src/server/adapters/installSchema.ts +8 -5
  202. package/src/server/adapters/makeService.ts +31 -0
  203. package/src/server/adapters/operationsLayer.ts +23 -0
  204. package/src/server/{pgBossDefinitionLayer.ts → adapters/pgBossDefinitionLayer.ts} +7 -14
  205. package/src/server/{register.ts → adapters/register.ts} +7 -22
  206. package/src/server/{registerReleasedJobs.ts → adapters/registerReleasedJobs.ts} +6 -5
  207. package/src/server/adapters/registerWorker.ts +1 -1
  208. package/src/server/adapters/retireJobs.ts +1 -1
  209. package/src/server/adapters/runSchemaPlan.ts +7 -11
  210. package/src/server/enqueuePayload.ts +38 -0
  211. package/src/server/getJob.ts +28 -0
  212. package/src/server/inspection.ts +18 -43
  213. package/src/server/inspectionJobs.ts +13 -0
  214. package/src/server/inspectionSnapshot.ts +18 -0
  215. package/src/server/jobListings.ts +20 -16
  216. package/src/server/runQueueWorker.ts +5 -6
  217. package/src/server/service.ts +1 -1
  218. package/src/server/services/inspection/busy.ts +6 -0
  219. package/src/server/services/inspection/changes.ts +7 -0
  220. package/src/server/services/inspection/counts.ts +7 -0
  221. package/src/server/services/inspection/deferred.ts +8 -0
  222. package/src/server/services/inspection/health.ts +10 -0
  223. package/src/server/services/inspection/queue.ts +8 -0
  224. package/src/server/services/inspection/schedules.ts +8 -0
  225. package/src/server/services/inspection/schemaVersion.ts +8 -0
  226. package/src/server/services/inspection/service.ts +20 -0
  227. package/src/server/services/inspection/snapshot.ts +8 -0
  228. package/src/server/services/inspection/storedJobs.ts +8 -0
  229. package/src/server/services/operations/counts.ts +7 -0
  230. package/src/server/services/operations/deleteQueue.ts +7 -0
  231. package/src/server/services/operations/enqueue.ts +12 -0
  232. package/src/server/services/operations/getJob.ts +6 -0
  233. package/src/server/services/operations/health.ts +9 -0
  234. package/src/server/services/operations/listJobs.ts +8 -0
  235. package/src/server/services/operations/refreshQueueStats.ts +7 -0
  236. package/src/server/services/operations/retry.ts +6 -0
  237. package/src/server/services/operations/service.ts +20 -0
  238. package/src/server/services/operations/unschedule.ts +7 -0
  239. package/src/server/validateQueueNames.ts +1 -1
  240. package/dist/server/PgBossInitialization.d.ts +0 -9
  241. package/dist/server/PgBossInitialization.d.ts.map +0 -1
  242. package/dist/server/PgBossInitialization.js +0 -4
  243. package/dist/server/PgBossInitialization.js.map +0 -1
  244. package/dist/server/PgBossOperations.d.ts +0 -27
  245. package/dist/server/PgBossOperations.d.ts.map +0 -1
  246. package/dist/server/PgBossOperations.js +0 -35
  247. package/dist/server/PgBossOperations.js.map +0 -1
  248. package/dist/server/countsFor.d.ts.map +0 -1
  249. package/dist/server/countsFor.js.map +0 -1
  250. package/dist/server/enqueueFor.d.ts +0 -4
  251. package/dist/server/enqueueFor.d.ts.map +0 -1
  252. package/dist/server/enqueueFor.js +0 -36
  253. package/dist/server/enqueueFor.js.map +0 -1
  254. package/dist/server/ensureQueue.d.ts.map +0 -1
  255. package/dist/server/ensureQueue.js.map +0 -1
  256. package/dist/server/healthFor.d.ts.map +0 -1
  257. package/dist/server/healthFor.js.map +0 -1
  258. package/dist/server/initializeInspection.d.ts +0 -4
  259. package/dist/server/initializeInspection.d.ts.map +0 -1
  260. package/dist/server/initializeInspection.js +0 -8
  261. package/dist/server/initializeInspection.js.map +0 -1
  262. package/dist/server/initializeJobs.d.ts +0 -4
  263. package/dist/server/initializeJobs.d.ts.map +0 -1
  264. package/dist/server/initializeJobs.js +0 -4
  265. package/dist/server/initializeJobs.js.map +0 -1
  266. package/dist/server/jobControl.d.ts +0 -10
  267. package/dist/server/jobControl.d.ts.map +0 -1
  268. package/dist/server/jobControl.js.map +0 -1
  269. package/dist/server/makeService.d.ts +0 -6
  270. package/dist/server/makeService.d.ts.map +0 -1
  271. package/dist/server/makeService.js +0 -22
  272. package/dist/server/makeService.js.map +0 -1
  273. package/dist/server/operations/busy.d.ts +0 -3
  274. package/dist/server/operations/busy.d.ts.map +0 -1
  275. package/dist/server/operations/busy.js +0 -4
  276. package/dist/server/operations/busy.js.map +0 -1
  277. package/dist/server/operations/changes.d.ts +0 -5
  278. package/dist/server/operations/changes.d.ts.map +0 -1
  279. package/dist/server/operations/changes.js +0 -4
  280. package/dist/server/operations/changes.js.map +0 -1
  281. package/dist/server/operations/counts.d.ts +0 -3
  282. package/dist/server/operations/counts.d.ts.map +0 -1
  283. package/dist/server/operations/counts.js +0 -4
  284. package/dist/server/operations/counts.js.map +0 -1
  285. package/dist/server/operations/deadLetteredJobs.d.ts +0 -6
  286. package/dist/server/operations/deadLetteredJobs.d.ts.map +0 -1
  287. package/dist/server/operations/deadLetteredJobs.js +0 -4
  288. package/dist/server/operations/deadLetteredJobs.js.map +0 -1
  289. package/dist/server/operations/deferred.d.ts +0 -6
  290. package/dist/server/operations/deferred.d.ts.map +0 -1
  291. package/dist/server/operations/deferred.js +0 -4
  292. package/dist/server/operations/deferred.js.map +0 -1
  293. package/dist/server/operations/deleteQueue.d.ts +0 -3
  294. package/dist/server/operations/deleteQueue.d.ts.map +0 -1
  295. package/dist/server/operations/deleteQueue.js +0 -4
  296. package/dist/server/operations/deleteQueue.js.map +0 -1
  297. package/dist/server/operations/enqueue.d.ts +0 -3
  298. package/dist/server/operations/enqueue.d.ts.map +0 -1
  299. package/dist/server/operations/enqueue.js +0 -4
  300. package/dist/server/operations/enqueue.js.map +0 -1
  301. package/dist/server/operations/failedJobs.d.ts +0 -6
  302. package/dist/server/operations/failedJobs.d.ts.map +0 -1
  303. package/dist/server/operations/failedJobs.js +0 -4
  304. package/dist/server/operations/failedJobs.js.map +0 -1
  305. package/dist/server/operations/getJob.d.ts +0 -6
  306. package/dist/server/operations/getJob.d.ts.map +0 -1
  307. package/dist/server/operations/getJob.js +0 -4
  308. package/dist/server/operations/getJob.js.map +0 -1
  309. package/dist/server/operations/health.d.ts +0 -3
  310. package/dist/server/operations/health.d.ts.map +0 -1
  311. package/dist/server/operations/health.js +0 -4
  312. package/dist/server/operations/health.js.map +0 -1
  313. package/dist/server/operations/inspection.d.ts +0 -3
  314. package/dist/server/operations/inspection.d.ts.map +0 -1
  315. package/dist/server/operations/inspection.js +0 -4
  316. package/dist/server/operations/inspection.js.map +0 -1
  317. package/dist/server/operations/inspectionHealth.d.ts +0 -5
  318. package/dist/server/operations/inspectionHealth.d.ts.map +0 -1
  319. package/dist/server/operations/inspectionHealth.js +0 -4
  320. package/dist/server/operations/inspectionHealth.js.map +0 -1
  321. package/dist/server/operations/jobs.d.ts.map +0 -1
  322. package/dist/server/operations/jobs.js +0 -4
  323. package/dist/server/operations/jobs.js.map +0 -1
  324. package/dist/server/operations/queue.d.ts +0 -3
  325. package/dist/server/operations/queue.d.ts.map +0 -1
  326. package/dist/server/operations/queue.js +0 -4
  327. package/dist/server/operations/queue.js.map +0 -1
  328. package/dist/server/operations/refreshQueueStats.d.ts +0 -3
  329. package/dist/server/operations/refreshQueueStats.d.ts.map +0 -1
  330. package/dist/server/operations/refreshQueueStats.js +0 -4
  331. package/dist/server/operations/refreshQueueStats.js.map +0 -1
  332. package/dist/server/operations/retry.d.ts +0 -3
  333. package/dist/server/operations/retry.d.ts.map +0 -1
  334. package/dist/server/operations/retry.js +0 -4
  335. package/dist/server/operations/retry.js.map +0 -1
  336. package/dist/server/operations/schedules.d.ts +0 -3
  337. package/dist/server/operations/schedules.d.ts.map +0 -1
  338. package/dist/server/operations/schedules.js +0 -4
  339. package/dist/server/operations/schedules.js.map +0 -1
  340. package/dist/server/operations/schemaVersion.d.ts +0 -3
  341. package/dist/server/operations/schemaVersion.d.ts.map +0 -1
  342. package/dist/server/operations/schemaVersion.js +0 -4
  343. package/dist/server/operations/schemaVersion.js.map +0 -1
  344. package/dist/server/operations/snapshot.d.ts +0 -3
  345. package/dist/server/operations/snapshot.d.ts.map +0 -1
  346. package/dist/server/operations/snapshot.js +0 -4
  347. package/dist/server/operations/snapshot.js.map +0 -1
  348. package/dist/server/operations/storedJobs.d.ts +0 -5
  349. package/dist/server/operations/storedJobs.d.ts.map +0 -1
  350. package/dist/server/operations/storedJobs.js +0 -4
  351. package/dist/server/operations/storedJobs.js.map +0 -1
  352. package/dist/server/operations/unschedule.d.ts +0 -3
  353. package/dist/server/operations/unschedule.d.ts.map +0 -1
  354. package/dist/server/operations/unschedule.js +0 -4
  355. package/dist/server/operations/unschedule.js.map +0 -1
  356. package/dist/server/pgBossDefinitionLayer.d.ts.map +0 -1
  357. package/dist/server/pgBossDefinitionLayer.js.map +0 -1
  358. package/dist/server/register.d.ts.map +0 -1
  359. package/dist/server/register.js.map +0 -1
  360. package/dist/server/registerReleasedJobs.d.ts +0 -6
  361. package/dist/server/registerReleasedJobs.d.ts.map +0 -1
  362. package/dist/server/registerReleasedJobs.js.map +0 -1
  363. package/src/server/PgBossInitialization.ts +0 -9
  364. package/src/server/PgBossOperations.ts +0 -35
  365. package/src/server/enqueueFor.ts +0 -44
  366. package/src/server/initializeInspection.ts +0 -8
  367. package/src/server/initializeJobs.ts +0 -4
  368. package/src/server/jobControl.ts +0 -27
  369. package/src/server/makeService.ts +0 -28
  370. package/src/server/operations/busy.ts +0 -5
  371. package/src/server/operations/changes.ts +0 -5
  372. package/src/server/operations/counts.ts +0 -5
  373. package/src/server/operations/deadLetteredJobs.ts +0 -5
  374. package/src/server/operations/deferred.ts +0 -5
  375. package/src/server/operations/deleteQueue.ts +0 -5
  376. package/src/server/operations/enqueue.ts +0 -5
  377. package/src/server/operations/failedJobs.ts +0 -5
  378. package/src/server/operations/getJob.ts +0 -5
  379. package/src/server/operations/health.ts +0 -5
  380. package/src/server/operations/inspection.ts +0 -5
  381. package/src/server/operations/inspectionHealth.ts +0 -5
  382. package/src/server/operations/jobs.ts +0 -5
  383. package/src/server/operations/queue.ts +0 -5
  384. package/src/server/operations/refreshQueueStats.ts +0 -5
  385. package/src/server/operations/retry.ts +0 -5
  386. package/src/server/operations/schedules.ts +0 -5
  387. package/src/server/operations/schemaVersion.ts +0 -5
  388. package/src/server/operations/snapshot.ts +0 -5
  389. package/src/server/operations/storedJobs.ts +0 -5
  390. package/src/server/operations/unschedule.ts +0 -5
  391. /package/dist/server/{countsFor.d.ts → adapters/countsFor.d.ts} +0 -0
  392. /package/dist/server/{countsFor.js → adapters/countsFor.js} +0 -0
  393. /package/dist/server/{ensureQueue.d.ts → adapters/ensureQueue.d.ts} +0 -0
  394. /package/dist/server/{ensureQueue.js → adapters/ensureQueue.js} +0 -0
  395. /package/dist/server/{healthFor.d.ts → adapters/healthFor.d.ts} +0 -0
  396. /package/dist/server/{healthFor.js → adapters/healthFor.js} +0 -0
  397. /package/dist/server/{pgBossDefinitionLayer.d.ts → adapters/pgBossDefinitionLayer.d.ts} +0 -0
  398. /package/src/server/{countsFor.ts → adapters/countsFor.ts} +0 -0
  399. /package/src/server/{ensureQueue.ts → adapters/ensureQueue.ts} +0 -0
  400. /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;AAChC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGzD,eAAO,MAAM,kBAAkB,uIAW7B,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;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,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"}
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.39.0",
3
+ "version": "0.40.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.42.0"
48
+ "@shivaedev/sql": "0.43.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.65.0",
54
- "@shivaedev/test-kits": "0.8.0",
55
- "@shivaedev/test-sql": "0.24.0",
56
- "@shivaedev/test-story": "0.42.0",
53
+ "@shivaedev/quality": "0.66.0",
54
+ "@shivaedev/test-kits": "0.8.1",
55
+ "@shivaedev/test-sql": "0.24.1",
56
+ "@shivaedev/test-story": "0.42.1",
57
57
  "@types/node": "24.19.2",
58
58
  "effect": "4.1.0",
59
59
  "pg-boss": "12.38.0",
@@ -0,0 +1,3 @@
1
+ import { Context } from "effect";
2
+ import type { inspectionReads } from "#server/adapters/inspectionReads.ts";
3
+ export class InspectionEngine extends Context.Service<InspectionEngine, ReturnType<typeof inspectionReads>>()("@shivaedev/jobs/InspectionEngine") {}
@@ -0,0 +1,2 @@
1
+ import { Context } from "effect";
2
+ export class JobQueues extends Context.Service<JobQueues, readonly string[]>()("@shivaedev/jobs/JobQueues") {}
@@ -0,0 +1,3 @@
1
+ import { Context } from "effect";
2
+ import type { Connection } from "effect/sql/SqlConnection";
3
+ export class SchemaConnection extends Context.Service<SchemaConnection, Connection>()("@shivaedev/jobs/SchemaConnection") {}
@@ -1,31 +1,26 @@
1
- import { Effect } from "effect";
2
- import { jobEngine } from "#server/adapters/jobEngine.ts";
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 { jobControl } from "#server/jobControl.ts";
9
- import { jobListings } from "#server/jobListings.ts";
10
- import { inspectionChanges } from "./inspectionChanges.ts";
11
- import { inspectionReads } from "./inspectionReads.ts";
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 function inspection(client: PgBossClient, schema = "pgboss"): Effect.Effect<PgBossInspectionService> {
14
- const engine = jobEngine(client, schema);
15
- return Effect.gen(function* () {
16
- const listings = yield* jobListings;
17
- const { getJob } = yield* jobControl;
18
- return {
19
- ...inspectionReads(client, schema),
20
- ...listings,
21
- changes: (queue?: { readonly name: string }) => inspectionChanges(client, schema, queue?.name),
22
- counts: (queue: { readonly name: string }) => countsFor(client, schema, queue.name),
23
- getJob,
24
- health: (queues: readonly { readonly name: string }[]) =>
25
- healthFor(
26
- client,
27
- queues.map((queue) => queue.name),
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, type Schema } from "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
- function jobs<TName extends string, TPayload extends JobPayloadSchema | typeof Schema.Null>(
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
- () => client,
52
- () => schema,
53
- ),
49
+ snapshot: inspectionSnapshot(client, schema),
50
+ storedJobs: inspectionJobs(client).storedJobs,
54
51
  };
55
52
  }
@@ -1,9 +1,7 @@
1
- import { Effect, Schema } from "effect";
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 type { PgBossError, PgBossPayloadError } from "#server/error.ts";
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: () => PgBossClient, schema: () => string) {
19
- return <const TQueues extends readonly SnapshotQueue[]>(
20
- queues: TQueues,
21
- ): Effect.Effect<readonly UnfinishedJob<TQueues[number]>[], PgBossPayloadError | PgBossError, TQueues[number]["schema"]["DecodingServices"]> => {
22
- const byName = new Map<string, TQueues[number]>(queues.map((queue) => [queue.name, queue]));
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
- CASE WHEN state = 'retry' AND started_on IS NULL AND start_after > ${quoted}.job_now()
32
- AND output ? 'jobDeferral'
33
- THEN 'deferred' ELSE state::text END AS state
34
- FROM ${quoted}.job
35
- WHERE name = ANY($1::text[]) AND state IN ('created', 'retry', 'active', 'failed')
36
- ORDER BY created_on, id`,
37
- [[...byName.keys()]],
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
- }).pipe(
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(connection, construction, run);
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 runSchemaPlan(connection, getMigrationPlans(schema, version, { partitionTables: Array.from(partitionTables) }), run, {
47
- schema,
48
- version: pgBossPackage.pgboss.schema,
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 { jobEngine } from "#server/adapters/jobEngine.ts";
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 { logClientError } from "./clientErrors.ts";
10
- import { JobEngine } from "./engine.ts";
9
+ import { validateQueueNames } from "#server/validateQueueNames.ts";
11
10
  import { makeService } from "./makeService.ts";
12
- import { PgBossInitialization } from "./PgBossInitialization.ts";
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, PgBossOperations).pipe(
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 service = yield* makeService(acquired.client, options.jobs.map(registrationName), acquired.schema).pipe(
52
- Effect.provideService(JobEngine, jobEngine(acquired.client, acquired.schema)),
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, context, acquired.reused, acquired.schema, acquired.stop, options.retired).pipe(
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 { type Context, Effect, Scope } from "effect";
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, client, schema),
57
- scope,
54
+ (job, deadline) => runQueueWorker(registration, job, deadline),
58
55
  schema,
59
56
  queue.maxDeferrals,
60
57
  stop,
61
- ).pipe(Effect.provide(context));
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, context, scope, schema, stop);
99
+ yield* registerQueue(client, registration, schema, stop).pipe(Effect.provideService(Scope.Scope, scope));
115
100
  } else {
116
- yield* registerSchedule(client, registration, context, scope, schema, stop);
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 { type Context, Effect, Option, Scope } from "effect";
2
- import { WorkerRelease } from "@shivaedev/sql/WorkerRelease.ts";
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, context, replaceWorkers, schema, true, stop)),
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, context, replaceWorkers, schema, false, stop);
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 type { Effect } from "effect";
2
- import type { Connection } from "effect/sql/SqlConnection";
1
+ import { Effect } from "effect";
2
+ import { SchemaConnection } from "#server/SchemaConnection.ts";
3
3
  import { pendingIndexInserts } from "./schemaIndexBuilds.ts";
4
4
 
5
- export async function runSchemaPlan(
6
- connection: 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
- await run(connection.executeRaw(`DO ${quote(`BEGIN EXECUTE ${quote(`${body}\n${pending}`)}; END`)}`, []));
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
- await run(connection.executeRaw(statement, []));
25
+ yield* connection.executeRaw(statement, []);
30
26
  }
31
27
  }
32
- }
28
+ });