@qlever-llc/trellis 0.10.17 → 0.19.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/esm/auth/mod.d.ts +1 -1
  2. package/esm/auth/mod.d.ts.map +1 -1
  3. package/esm/auth/mod.js +1 -1
  4. package/esm/auth/protocol.d.ts +416 -398
  5. package/esm/auth/protocol.d.ts.map +1 -1
  6. package/esm/auth/protocol.js +35 -33
  7. package/esm/codec.d.ts +1 -0
  8. package/esm/codec.d.ts.map +1 -1
  9. package/esm/codec.js +1 -0
  10. package/esm/contract_support/canonical.d.ts +3 -0
  11. package/esm/contract_support/canonical.d.ts.map +1 -1
  12. package/esm/contract_support/canonical.js +3 -0
  13. package/esm/contract_support/mod.d.ts +28 -4
  14. package/esm/contract_support/mod.d.ts.map +1 -1
  15. package/esm/contract_support/mod.js +85 -4
  16. package/esm/contract_support/protocol.d.ts +92 -7
  17. package/esm/contract_support/protocol.d.ts.map +1 -1
  18. package/esm/contract_support/protocol.js +40 -6
  19. package/esm/errors/index.d.ts +9 -9
  20. package/esm/generated-sdk/auth/api.d.ts +4 -1
  21. package/esm/generated-sdk/auth/api.d.ts.map +1 -1
  22. package/esm/generated-sdk/auth/api.js +6 -1
  23. package/esm/generated-sdk/auth/client.d.ts +47 -32
  24. package/esm/generated-sdk/auth/client.d.ts.map +1 -1
  25. package/esm/generated-sdk/auth/contract.d.ts +1 -1
  26. package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
  27. package/esm/generated-sdk/auth/contract.js +1570 -1202
  28. package/esm/generated-sdk/auth/schemas.d.ts +1757 -1759
  29. package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
  30. package/esm/generated-sdk/auth/schemas.js +963 -768
  31. package/esm/generated-sdk/auth/types.d.ts +292 -302
  32. package/esm/generated-sdk/auth/types.d.ts.map +1 -1
  33. package/esm/generated-sdk/auth/types.js +1 -1
  34. package/esm/generated-sdk/health/client.d.ts +4 -4
  35. package/esm/generated-sdk/health/client.d.ts.map +1 -1
  36. package/esm/generated-sdk/health/contract.d.ts +1 -1
  37. package/esm/generated-sdk/health/contract.d.ts.map +1 -1
  38. package/esm/generated-sdk/health/contract.js +2 -10
  39. package/esm/generated-sdk/health/schemas.d.ts +1 -14
  40. package/esm/generated-sdk/health/schemas.d.ts.map +1 -1
  41. package/esm/generated-sdk/health/schemas.js +1 -9
  42. package/esm/generated-sdk/health/types.d.ts +3 -5
  43. package/esm/generated-sdk/health/types.d.ts.map +1 -1
  44. package/esm/generated-sdk/health/types.js +1 -2
  45. package/esm/generated-sdk/jobs/api.d.ts +13 -0
  46. package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
  47. package/esm/generated-sdk/jobs/client.d.ts +6 -4
  48. package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
  49. package/esm/generated-sdk/jobs/contract.d.ts +14 -1
  50. package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
  51. package/esm/generated-sdk/jobs/contract.js +268 -1
  52. package/esm/generated-sdk/jobs/owned_api.d.ts +13 -0
  53. package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  54. package/esm/generated-sdk/jobs/owned_api.js +20 -1
  55. package/esm/generated-sdk/jobs/schemas.d.ts +437 -0
  56. package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
  57. package/esm/generated-sdk/jobs/schemas.js +211 -0
  58. package/esm/generated-sdk/jobs/types.d.ts +123 -1
  59. package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
  60. package/esm/generated-sdk/jobs/types.js +1 -1
  61. package/esm/generated-sdk/state/client.d.ts +4 -4
  62. package/esm/generated-sdk/state/client.d.ts.map +1 -1
  63. package/esm/generated-sdk/trellis-core/api.d.ts +4 -1
  64. package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
  65. package/esm/generated-sdk/trellis-core/api.js +6 -1
  66. package/esm/generated-sdk/trellis-core/client.d.ts +28 -3
  67. package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
  68. package/esm/generated-sdk/trellis-core/contract.d.ts +1 -1
  69. package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  70. package/esm/generated-sdk/trellis-core/contract.js +91 -1
  71. package/esm/generated-sdk/trellis-core/schemas.d.ts +113 -0
  72. package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  73. package/esm/generated-sdk/trellis-core/schemas.js +81 -0
  74. package/esm/generated-sdk/trellis-core/types.d.ts +23 -1
  75. package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
  76. package/esm/generated-sdk/trellis-core/types.js +1 -1
  77. package/esm/health.d.ts +1 -1
  78. package/esm/health.d.ts.map +1 -1
  79. package/esm/health.js +1 -1
  80. package/esm/index.d.ts +2 -2
  81. package/esm/index.d.ts.map +1 -1
  82. package/esm/index.js +1 -1
  83. package/esm/jobs.d.ts +69 -3
  84. package/esm/jobs.d.ts.map +1 -1
  85. package/esm/jobs.js +92 -3
  86. package/esm/server/health.d.ts +2 -6
  87. package/esm/server/health.d.ts.map +1 -1
  88. package/esm/server/health_schemas.d.ts +0 -8
  89. package/esm/server/health_schemas.d.ts.map +1 -1
  90. package/esm/server/health_schemas.js +0 -5
  91. package/esm/server/internal_jobs/bindings.d.ts +11 -0
  92. package/esm/server/internal_jobs/bindings.d.ts.map +1 -1
  93. package/esm/server/internal_jobs/job-manager.d.ts +44 -1
  94. package/esm/server/internal_jobs/job-manager.d.ts.map +1 -1
  95. package/esm/server/internal_jobs/job-manager.js +361 -51
  96. package/esm/server/internal_jobs/key-coordinator.d.ts +260 -0
  97. package/esm/server/internal_jobs/key-coordinator.d.ts.map +1 -0
  98. package/esm/server/internal_jobs/key-coordinator.js +580 -0
  99. package/esm/server/internal_jobs/projection.d.ts.map +1 -1
  100. package/esm/server/internal_jobs/projection.js +2 -0
  101. package/esm/server/internal_jobs/runtime-worker.d.ts +5 -1
  102. package/esm/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  103. package/esm/server/internal_jobs/runtime-worker.js +14 -2
  104. package/esm/server/internal_jobs/types.d.ts +5 -5
  105. package/esm/server/internal_jobs/types.d.ts.map +1 -1
  106. package/esm/server/internal_jobs/types.js +6 -0
  107. package/esm/server/service.d.ts +8 -3
  108. package/esm/server/service.d.ts.map +1 -1
  109. package/esm/server/service.js +127 -6
  110. package/esm/service/drizzle.d.ts +27 -0
  111. package/esm/service/drizzle.d.ts.map +1 -0
  112. package/esm/service/drizzle.js +84 -0
  113. package/esm/service/mod.d.ts +1 -1
  114. package/esm/service/mod.d.ts.map +1 -1
  115. package/esm/service/mod.js +1 -1
  116. package/esm/service/outbox_inbox.d.ts.map +1 -1
  117. package/esm/service/outbox_inbox.js +13 -2
  118. package/esm/trellis.d.ts +24 -8
  119. package/esm/trellis.d.ts.map +1 -1
  120. package/esm/trellis.js +44 -22
  121. package/package.json +14 -2
  122. package/script/auth/mod.d.ts +1 -1
  123. package/script/auth/mod.d.ts.map +1 -1
  124. package/script/auth/mod.js +22 -6
  125. package/script/auth/protocol.d.ts +416 -398
  126. package/script/auth/protocol.d.ts.map +1 -1
  127. package/script/auth/protocol.js +40 -37
  128. package/script/codec.d.ts +1 -0
  129. package/script/codec.d.ts.map +1 -1
  130. package/script/codec.js +1 -0
  131. package/script/contract_support/canonical.d.ts +3 -0
  132. package/script/contract_support/canonical.d.ts.map +1 -1
  133. package/script/contract_support/canonical.js +3 -0
  134. package/script/contract_support/mod.d.ts +28 -4
  135. package/script/contract_support/mod.d.ts.map +1 -1
  136. package/script/contract_support/mod.js +90 -4
  137. package/script/contract_support/protocol.d.ts +92 -7
  138. package/script/contract_support/protocol.d.ts.map +1 -1
  139. package/script/contract_support/protocol.js +41 -7
  140. package/script/errors/index.d.ts +9 -9
  141. package/script/generated-sdk/auth/api.d.ts +4 -1
  142. package/script/generated-sdk/auth/api.d.ts.map +1 -1
  143. package/script/generated-sdk/auth/api.js +6 -1
  144. package/script/generated-sdk/auth/client.d.ts +47 -32
  145. package/script/generated-sdk/auth/client.d.ts.map +1 -1
  146. package/script/generated-sdk/auth/contract.d.ts +1 -1
  147. package/script/generated-sdk/auth/contract.d.ts.map +1 -1
  148. package/script/generated-sdk/auth/contract.js +1570 -1202
  149. package/script/generated-sdk/auth/schemas.d.ts +1757 -1759
  150. package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
  151. package/script/generated-sdk/auth/schemas.js +963 -768
  152. package/script/generated-sdk/auth/types.d.ts +292 -302
  153. package/script/generated-sdk/auth/types.d.ts.map +1 -1
  154. package/script/generated-sdk/auth/types.js +1 -1
  155. package/script/generated-sdk/health/client.d.ts +4 -4
  156. package/script/generated-sdk/health/client.d.ts.map +1 -1
  157. package/script/generated-sdk/health/contract.d.ts +1 -1
  158. package/script/generated-sdk/health/contract.d.ts.map +1 -1
  159. package/script/generated-sdk/health/contract.js +2 -10
  160. package/script/generated-sdk/health/schemas.d.ts +1 -14
  161. package/script/generated-sdk/health/schemas.d.ts.map +1 -1
  162. package/script/generated-sdk/health/schemas.js +1 -9
  163. package/script/generated-sdk/health/types.d.ts +3 -5
  164. package/script/generated-sdk/health/types.d.ts.map +1 -1
  165. package/script/generated-sdk/health/types.js +1 -2
  166. package/script/generated-sdk/jobs/api.d.ts +13 -0
  167. package/script/generated-sdk/jobs/api.d.ts.map +1 -1
  168. package/script/generated-sdk/jobs/client.d.ts +6 -4
  169. package/script/generated-sdk/jobs/client.d.ts.map +1 -1
  170. package/script/generated-sdk/jobs/contract.d.ts +14 -1
  171. package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
  172. package/script/generated-sdk/jobs/contract.js +268 -1
  173. package/script/generated-sdk/jobs/owned_api.d.ts +13 -0
  174. package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  175. package/script/generated-sdk/jobs/owned_api.js +19 -0
  176. package/script/generated-sdk/jobs/schemas.d.ts +437 -0
  177. package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
  178. package/script/generated-sdk/jobs/schemas.js +212 -1
  179. package/script/generated-sdk/jobs/types.d.ts +123 -1
  180. package/script/generated-sdk/jobs/types.d.ts.map +1 -1
  181. package/script/generated-sdk/jobs/types.js +1 -1
  182. package/script/generated-sdk/state/client.d.ts +4 -4
  183. package/script/generated-sdk/state/client.d.ts.map +1 -1
  184. package/script/generated-sdk/trellis-core/api.d.ts +4 -1
  185. package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
  186. package/script/generated-sdk/trellis-core/api.js +6 -1
  187. package/script/generated-sdk/trellis-core/client.d.ts +28 -3
  188. package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
  189. package/script/generated-sdk/trellis-core/contract.d.ts +1 -1
  190. package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  191. package/script/generated-sdk/trellis-core/contract.js +91 -1
  192. package/script/generated-sdk/trellis-core/schemas.d.ts +113 -0
  193. package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  194. package/script/generated-sdk/trellis-core/schemas.js +81 -0
  195. package/script/generated-sdk/trellis-core/types.d.ts +23 -1
  196. package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
  197. package/script/generated-sdk/trellis-core/types.js +1 -1
  198. package/script/health.d.ts +1 -1
  199. package/script/health.d.ts.map +1 -1
  200. package/script/health.js +1 -2
  201. package/script/index.d.ts +2 -2
  202. package/script/index.d.ts.map +1 -1
  203. package/script/index.js +2 -3
  204. package/script/jobs.d.ts +69 -3
  205. package/script/jobs.d.ts.map +1 -1
  206. package/script/jobs.js +93 -3
  207. package/script/server/health.d.ts +2 -6
  208. package/script/server/health.d.ts.map +1 -1
  209. package/script/server/health_schemas.d.ts +0 -8
  210. package/script/server/health_schemas.d.ts.map +1 -1
  211. package/script/server/health_schemas.js +1 -6
  212. package/script/server/internal_jobs/bindings.d.ts +11 -0
  213. package/script/server/internal_jobs/bindings.d.ts.map +1 -1
  214. package/script/server/internal_jobs/job-manager.d.ts +44 -1
  215. package/script/server/internal_jobs/job-manager.d.ts.map +1 -1
  216. package/script/server/internal_jobs/job-manager.js +361 -51
  217. package/script/server/internal_jobs/key-coordinator.d.ts +260 -0
  218. package/script/server/internal_jobs/key-coordinator.d.ts.map +1 -0
  219. package/script/server/internal_jobs/key-coordinator.js +593 -0
  220. package/script/server/internal_jobs/projection.d.ts.map +1 -1
  221. package/script/server/internal_jobs/projection.js +2 -0
  222. package/script/server/internal_jobs/runtime-worker.d.ts +5 -1
  223. package/script/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  224. package/script/server/internal_jobs/runtime-worker.js +14 -2
  225. package/script/server/internal_jobs/types.d.ts +5 -5
  226. package/script/server/internal_jobs/types.d.ts.map +1 -1
  227. package/script/server/internal_jobs/types.js +6 -0
  228. package/script/server/service.d.ts +8 -3
  229. package/script/server/service.d.ts.map +1 -1
  230. package/script/server/service.js +126 -5
  231. package/script/service/drizzle.d.ts +27 -0
  232. package/script/service/drizzle.d.ts.map +1 -0
  233. package/script/service/drizzle.js +88 -0
  234. package/script/service/mod.d.ts +1 -1
  235. package/script/service/mod.d.ts.map +1 -1
  236. package/script/service/mod.js +1 -2
  237. package/script/service/outbox_inbox.d.ts.map +1 -1
  238. package/script/service/outbox_inbox.js +13 -2
  239. package/script/trellis.d.ts +24 -8
  240. package/script/trellis.d.ts.map +1 -1
  241. package/script/trellis.js +44 -22
  242. package/src/auth/mod.ts +28 -2
  243. package/src/auth/protocol.ts +72 -37
  244. package/src/codec.ts +1 -0
  245. package/src/contract_support/canonical.ts +3 -0
  246. package/src/contract_support/mod.ts +158 -5
  247. package/src/contract_support/protocol.ts +56 -9
  248. package/src/health.ts +0 -1
  249. package/src/index.ts +2 -1
  250. package/src/jobs.ts +138 -1
  251. package/src/sdk/_generated/auth/api.ts +9 -2
  252. package/src/sdk/_generated/auth/client.ts +85 -78
  253. package/src/sdk/_generated/auth/contract.ts +1803 -1435
  254. package/src/sdk/_generated/auth/schemas.ts +1166 -971
  255. package/src/sdk/_generated/auth/types.ts +330 -314
  256. package/src/sdk/_generated/core/api.ts +9 -2
  257. package/src/sdk/_generated/core/client.ts +41 -2
  258. package/src/sdk/_generated/core/contract.ts +91 -1
  259. package/src/sdk/_generated/core/schemas.ts +81 -0
  260. package/src/sdk/_generated/core/types.ts +23 -1
  261. package/src/sdk/_generated/health/client.ts +6 -6
  262. package/src/sdk/_generated/health/contract.ts +2 -10
  263. package/src/sdk/_generated/health/schemas.ts +1 -9
  264. package/src/sdk/_generated/health/types.ts +6 -2
  265. package/src/sdk/_generated/jobs/client.ts +17 -6
  266. package/src/sdk/_generated/jobs/contract.ts +269 -1
  267. package/src/sdk/_generated/jobs/owned_api.ts +21 -0
  268. package/src/sdk/_generated/jobs/schemas.ts +213 -0
  269. package/src/sdk/_generated/jobs/types.ts +116 -1
  270. package/src/sdk/_generated/state/client.ts +6 -6
  271. package/src/server/health.ts +2 -6
  272. package/src/server/health_schemas.ts +0 -6
  273. package/src/server/internal_jobs/bindings.ts +11 -0
  274. package/src/server/internal_jobs/job-manager.ts +436 -16
  275. package/src/server/internal_jobs/key-coordinator.ts +955 -0
  276. package/src/server/internal_jobs/projection.ts +2 -0
  277. package/src/server/internal_jobs/runtime-worker.ts +17 -1
  278. package/src/server/internal_jobs/types.ts +6 -0
  279. package/src/server/service.ts +168 -9
  280. package/src/service/drizzle.ts +125 -0
  281. package/src/service/mod.ts +0 -1
  282. package/src/service/outbox_inbox.ts +16 -6
  283. package/src/trellis.ts +76 -27
@@ -1 +1 @@
1
- {"version":3,"file":"job-manager.d.ts","sourceRoot":"","sources":["../../../src/server/internal_jobs/job-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAQ1E,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EACV,GAAG,EAGH,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,KAAK,SAAS,GAAG;IACf,OAAO,CACL,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,EACnB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,SAAS,IAAI,MAAM,CAAC;IACpB,MAAM,IAAI,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,SAAS,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,KAAK,oBAAoB,CAAC,QAAQ,EAAE,OAAO,IAAI;IAC7C,cAAc,CAAC,EAAE,CACf,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,KACxB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;gBAE1B,IAAI,EAAE,WAAW,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM;IAMzD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IAIlD,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;CAGhD;AAED,MAAM,MAAM,iBAAiB,CAAC,OAAO,IACjC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACxD;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,OAAO,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,qBAAa,UAAU,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;;gBAG/C,OAAO,EAAE,iBAAiB;IA4ChC,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAyClC,OAAO,CACL,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC3B,YAAY,EAAE,oBAAoB,EAClC,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EAChE,QAAQ,GAAE,wBAA6B,EACvC,UAAU,GAAE,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAM,GACvD,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAahC,oBAAoB,CACxB,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC3B,YAAY,EAAE,oBAAoB,EAClC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC9B,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EAChE,QAAQ,GAAE,wBAA6B,EACvC,UAAU,GAAE,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAM,GACvD,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAuHhC,YAAY,CAChB,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC3B,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC;IA2BV,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B3E,aAAa,CAAC,CAAC,EACb,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC3B,YAAY,EAAE,oBAAoB,EAClC,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACpD,QAAQ,GAAE,wBAA6B,GACtC,OAAO,CAAC,CAAC,CAAC;IAYP,yBAAyB,CAAC,CAAC,EAC/B,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAC3B,YAAY,EAAE,oBAAoB,EAClC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC9B,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACpD,QAAQ,GAAE,wBAA6B,GACtC,OAAO,CAAC,CAAC,CAAC;CAsBd;AAqED,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"job-manager.d.ts","sourceRoot":"","sources":["../../../src/server/internal_jobs/job-manager.ts"],"names":[],"mappings":"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"}
@@ -10,17 +10,19 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _JobManager_instances, _JobManager_context, _JobManager_meta, _JobManager_getQueueBinding, _JobManager_publishJobEvent;
13
+ var _JobManager_instances, _JobManager_context, _JobManager_meta, _JobManager_getQueueBinding, _JobManager_publishJobEvent, _JobManager_submit, _JobManager_admitKeyedCreate, _JobManager_removeQueuedKeyedReservation, _JobManager_restoreReplacedKeyedReservation, _JobManager_publishSkipped, _JobManager_keyedHeartbeat, _JobManager_releaseKeyedSlot, _JobManager_releaseKeyedSlotAfterPublishFailure, _JobManager_publishStaleCompletionIgnored;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.JobCancellationToken = exports.ActiveJobRuntimeError = exports.ActiveJob = exports.JobManager = exports.JobProcessError = void 0;
16
16
  const nats_core_1 = require("@nats-io/nats-core");
17
17
  const ulid_1 = require("ulid");
18
18
  const carrier_js_1 = require("../../telemetry/carrier.js");
19
19
  const mod_js_1 = require("../../telemetry/mod.js");
20
+ const jobs_js_1 = require("../../jobs.js");
20
21
  const active_job_js_1 = require("./active-job.js");
21
22
  Object.defineProperty(exports, "ActiveJob", { enumerable: true, get: function () { return active_job_js_1.ActiveJob; } });
22
23
  Object.defineProperty(exports, "ActiveJobRuntimeError", { enumerable: true, get: function () { return active_job_js_1.ActiveJobRuntimeError; } });
23
24
  Object.defineProperty(exports, "JobCancellationToken", { enumerable: true, get: function () { return active_job_js_1.JobCancellationToken; } });
25
+ const key_coordinator_js_1 = require("./key-coordinator.js");
24
26
  class JobProcessError extends Error {
25
27
  constructor(kind, message) {
26
28
  super(message);
@@ -48,41 +50,47 @@ class JobManager {
48
50
  __classPrivateFieldSet(this, _JobManager_context, context, "f");
49
51
  }
50
52
  async create(type, payload) {
51
- const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
52
- const meta = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this);
53
- const now = meta.nowIso();
54
- const id = meta.nextJobId();
55
- const context = createJobContext();
56
- const namespace = __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace;
57
- const deadline = computeDeadline(now, binding.defaultDeadlineMs);
58
- const job = {
59
- id,
60
- service: namespace,
61
- type,
62
- state: "pending",
63
- context,
64
- payload,
65
- createdAt: now,
66
- updatedAt: now,
67
- tries: 0,
68
- maxTries: binding.maxDeliver,
69
- ...(deadline ? { deadline } : {}),
70
- };
71
- const event = {
72
- jobId: id,
73
- service: job.service,
74
- jobType: type,
75
- eventType: "created",
76
- state: "pending",
77
- context,
78
- tries: 0,
79
- maxTries: binding.maxDeliver,
80
- payload,
81
- ...(deadline ? { deadline } : {}),
82
- timestamp: now,
83
- };
84
- await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event);
85
- return job;
53
+ const outcome = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submit).call(this, type, payload, true);
54
+ if (outcome.kind === "accepted") {
55
+ return outcome.job;
56
+ }
57
+ if (outcome.kind === "coalesced") {
58
+ throw new jobs_js_1.JobNotEnqueuedError({
59
+ reason: "coalesced",
60
+ key: outcome.key,
61
+ active: 0,
62
+ queued: 1,
63
+ limit: 0,
64
+ existingJobId: outcome.existing.id,
65
+ });
66
+ }
67
+ if (outcome.kind === "replaced") {
68
+ throw new jobs_js_1.JobNotEnqueuedError({
69
+ reason: "queue-depth",
70
+ key: outcome.key,
71
+ active: 0,
72
+ queued: 1,
73
+ limit: 0,
74
+ existingJobId: outcome.replaced.id,
75
+ });
76
+ }
77
+ throw new jobs_js_1.JobNotEnqueuedError({
78
+ reason: outcome.reason,
79
+ key: outcome.key,
80
+ active: outcome.active,
81
+ queued: outcome.queued,
82
+ limit: outcome.limit,
83
+ });
84
+ }
85
+ async submit(type, payload) {
86
+ return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submit).call(this, type, payload, false);
87
+ }
88
+ async cleanupQueuedKeyedJob(job) {
89
+ const queue = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
90
+ const keyedPolicy = getKeyPolicy(queue);
91
+ if (!keyedPolicy)
92
+ return;
93
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_removeQueuedKeyedReservation).call(this, job, keyedPolicy);
86
94
  }
87
95
  process(job, cancellation, handler, metadata = {}, validation = {}) {
88
96
  return this.processWithHeartbeat(job, cancellation, () => {
@@ -90,25 +98,78 @@ class JobManager {
90
98
  }, handler, metadata, validation);
91
99
  }
92
100
  async processWithHeartbeat(job, cancellation, heartbeat, handler, metadata = {}, validation = {}) {
93
- __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
94
101
  const tries = job.tries + 1;
95
- await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
96
- jobId: job.id,
97
- service: job.service,
98
- jobType: job.type,
99
- eventType: "started",
100
- state: "active",
101
- previousState: job.state,
102
- context: job.context,
103
- tries,
104
- timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
105
- });
102
+ const queue = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
103
+ const keyedPolicy = getKeyPolicy(queue);
104
+ let lease;
105
+ let staleSlots = [];
106
+ if (keyedPolicy) {
107
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
108
+ if (!coordinator) {
109
+ throw new Error(`Keyed jobs queue '${job.type}' requires the JOBS_KEYS coordinator`);
110
+ }
111
+ const acquired = await coordinator.acquireActiveSlot({
112
+ service: job.service,
113
+ jobType: job.type,
114
+ jobId: job.id,
115
+ payload: job.payload,
116
+ context: job.context,
117
+ lifecycleState: metadata.latestState ?? job.state,
118
+ tries,
119
+ instanceId: metadata.instanceId ?? "unknown",
120
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
121
+ policy: keyedPolicy,
122
+ });
123
+ if (acquired.kind === "blocked") {
124
+ return { outcome: "deferred", tries, reason: acquired.reason };
125
+ }
126
+ lease = {
127
+ key: acquired.key,
128
+ keyHash: acquired.keyHash,
129
+ slotToken: acquired.slotToken,
130
+ policy: keyedPolicy,
131
+ };
132
+ staleSlots = acquired.stale;
133
+ }
134
+ try {
135
+ for (const stale of staleSlots) {
136
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, stale.jobId, {
137
+ jobId: stale.jobId,
138
+ service: job.service,
139
+ jobType: job.type,
140
+ eventType: "stale",
141
+ state: "stale",
142
+ previousState: "active",
143
+ context: stale.context,
144
+ tries: stale.tries,
145
+ error: "keyed job lease expired",
146
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
147
+ });
148
+ }
149
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
150
+ jobId: job.id,
151
+ service: job.service,
152
+ jobType: job.type,
153
+ eventType: "started",
154
+ state: "active",
155
+ previousState: job.state,
156
+ context: job.context,
157
+ tries,
158
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
159
+ });
160
+ }
161
+ catch (error) {
162
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlotAfterPublishFailure).call(this, job, lease, error);
163
+ throw error;
164
+ }
106
165
  try {
107
- const result = await this.withActiveJobAndHeartbeat({ ...job, state: "active", tries }, cancellation, heartbeat, handler, metadata);
166
+ const result = await this.withActiveJobAndHeartbeat({ ...job, state: "active", tries }, cancellation, lease ? __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_keyedHeartbeat).call(this, job, lease, heartbeat) : heartbeat, handler, metadata, lease);
108
167
  if (cancellation.isHostShutdown()) {
168
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
109
169
  return { outcome: "interrupted", tries };
110
170
  }
111
171
  if (cancellation.isCancelled()) {
172
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
112
173
  return { outcome: "cancelled", tries };
113
174
  }
114
175
  try {
@@ -121,6 +182,11 @@ class JobManager {
121
182
  catch (error) {
122
183
  throw JobProcessError.failed(error instanceof Error ? error.message : String(error));
123
184
  }
185
+ const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
186
+ if (release === "staleCompletion") {
187
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
188
+ return { outcome: "stale_completion_ignored", tries };
189
+ }
124
190
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
125
191
  jobId: job.id,
126
192
  service: job.service,
@@ -137,9 +203,11 @@ class JobManager {
137
203
  }
138
204
  catch (error) {
139
205
  if (cancellation.isHostShutdown()) {
206
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
140
207
  return { outcome: "interrupted", tries };
141
208
  }
142
209
  if (cancellation.isCancelled()) {
210
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
143
211
  return { outcome: "cancelled", tries };
144
212
  }
145
213
  if (error instanceof JobProcessError) {
@@ -151,6 +219,11 @@ class JobManager {
151
219
  operation: job.type,
152
220
  phase: "handler_result",
153
221
  });
222
+ const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
223
+ if (release === "staleCompletion") {
224
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
225
+ return { outcome: "stale_completion_ignored", tries };
226
+ }
154
227
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
155
228
  jobId: job.id,
156
229
  service: job.service,
@@ -171,6 +244,11 @@ class JobManager {
171
244
  operation: job.type,
172
245
  phase: "handler_result",
173
246
  });
247
+ const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
248
+ if (release === "staleCompletion") {
249
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
250
+ return { outcome: "stale_completion_ignored", tries };
251
+ }
174
252
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
175
253
  jobId: job.id,
176
254
  service: job.service,
@@ -241,7 +319,10 @@ class JobManager {
241
319
  throw new active_job_js_1.ActiveJobRuntimeError("worker heartbeat unavailable");
242
320
  }, f, metadata);
243
321
  }
244
- async withActiveJobAndHeartbeat(job, cancellation, heartbeat, f, metadata = {}) {
322
+ async withActiveJobAndHeartbeat(job, cancellation, heartbeat, f, metadata = {}, lease) {
323
+ const stopAutoHeartbeat = lease
324
+ ? startAutoHeartbeat(heartbeat, lease.policy.heartbeatIntervalMs)
325
+ : () => { };
245
326
  const activeJob = new active_job_js_1.ActiveJob(job, cancellation, {
246
327
  updateProgress: (progress) => this.emitProgress(job, progress),
247
328
  log: (entry) => this.emitLog(job, entry),
@@ -259,7 +340,12 @@ class JobManager {
259
340
  }, {
260
341
  redeliveryCount: metadata.redeliveryCount ?? 0,
261
342
  });
262
- return await f(activeJob);
343
+ try {
344
+ return await f(activeJob);
345
+ }
346
+ finally {
347
+ stopAutoHeartbeat();
348
+ }
263
349
  }
264
350
  }
265
351
  exports.JobManager = JobManager;
@@ -290,7 +376,231 @@ _JobManager_context = new WeakMap(), _JobManager_instances = new WeakSet(), _Job
290
376
  });
291
377
  throw error;
292
378
  }
379
+ }, _JobManager_submit = async function _JobManager_submit(type, payload, strictCreate) {
380
+ const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
381
+ const meta = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this);
382
+ const now = meta.nowIso();
383
+ const id = meta.nextJobId();
384
+ const context = createJobContext();
385
+ const namespace = __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace;
386
+ const deadline = computeDeadline(now, binding.defaultDeadlineMs);
387
+ const job = {
388
+ id,
389
+ service: namespace,
390
+ type,
391
+ state: "pending",
392
+ context,
393
+ payload,
394
+ createdAt: now,
395
+ updatedAt: now,
396
+ tries: 0,
397
+ maxTries: binding.maxDeliver,
398
+ ...(deadline ? { deadline } : {}),
399
+ };
400
+ const event = {
401
+ jobId: id,
402
+ service: job.service,
403
+ jobType: type,
404
+ eventType: "created",
405
+ state: "pending",
406
+ context,
407
+ tries: 0,
408
+ maxTries: binding.maxDeliver,
409
+ payload,
410
+ ...(deadline ? { deadline } : {}),
411
+ timestamp: now,
412
+ };
413
+ const keyedPolicy = getKeyPolicy(binding);
414
+ if (keyedPolicy) {
415
+ const admission = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_admitKeyedCreate).call(this, {
416
+ type,
417
+ job,
418
+ event,
419
+ policy: keyedPolicy,
420
+ strictCreate,
421
+ });
422
+ if (admission.kind !== "accepted" && admission.kind !== "replaced") {
423
+ return admission;
424
+ }
425
+ if (strictCreate && admission.kind === "replaced") {
426
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_restoreReplacedKeyedReservation).call(this, job, admission.replaced, keyedPolicy);
427
+ return {
428
+ kind: "rejected",
429
+ key: admission.key,
430
+ reason: "queue-depth",
431
+ active: admission.state.active.length,
432
+ queued: admission.state.queued.length,
433
+ limit: keyedPolicy.queue.maxQueuedPerKey,
434
+ };
435
+ }
436
+ if (admission.kind === "replaced") {
437
+ try {
438
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishSkipped).call(this, type, admission.replaced, now);
439
+ }
440
+ catch (error) {
441
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_restoreReplacedKeyedReservation).call(this, job, admission.replaced, keyedPolicy);
442
+ throw error;
443
+ }
444
+ }
445
+ try {
446
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event);
447
+ }
448
+ catch (error) {
449
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_removeQueuedKeyedReservation).call(this, job, keyedPolicy);
450
+ throw error;
451
+ }
452
+ if (admission.kind === "replaced") {
453
+ return {
454
+ kind: "replaced",
455
+ key: admission.key,
456
+ replaced: {
457
+ service: admission.replaced.service,
458
+ jobType: admission.replaced.jobType,
459
+ id: admission.replaced.id,
460
+ },
461
+ job,
462
+ };
463
+ }
464
+ return { kind: "accepted", job, key: admission.key };
465
+ }
466
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event);
467
+ return { kind: "accepted", job };
468
+ }, _JobManager_admitKeyedCreate = async function _JobManager_admitKeyedCreate(args) {
469
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
470
+ if (!coordinator) {
471
+ throw new Error(`Keyed jobs queue '${args.type}' requires the JOBS_KEYS coordinator`);
472
+ }
473
+ return await coordinator.admitCreate({
474
+ service: args.job.service,
475
+ jobType: args.type,
476
+ jobId: args.job.id,
477
+ payload: args.job.payload,
478
+ context: args.event.context,
479
+ createdAt: args.event.timestamp,
480
+ policy: args.policy,
481
+ strictCreate: args.strictCreate,
482
+ });
483
+ }, _JobManager_removeQueuedKeyedReservation = async function _JobManager_removeQueuedKeyedReservation(job, policy) {
484
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
485
+ if (!coordinator)
486
+ return;
487
+ await coordinator.removeQueuedJob({
488
+ service: job.service,
489
+ jobType: job.type,
490
+ jobId: job.id,
491
+ payload: job.payload,
492
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
493
+ policy,
494
+ });
495
+ }, _JobManager_restoreReplacedKeyedReservation = async function _JobManager_restoreReplacedKeyedReservation(job, replaced, policy) {
496
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
497
+ if (!coordinator)
498
+ return;
499
+ await coordinator.restoreReplacedQueuedJob({
500
+ service: job.service,
501
+ jobType: job.type,
502
+ replacementJobId: job.id,
503
+ replaced,
504
+ payload: job.payload,
505
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
506
+ policy,
507
+ });
508
+ }, _JobManager_publishSkipped = async function _JobManager_publishSkipped(type, replaced, timestamp) {
509
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, replaced.id, {
510
+ jobId: replaced.id,
511
+ service: __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace,
512
+ jobType: type,
513
+ eventType: "skipped",
514
+ state: "skipped",
515
+ previousState: "pending",
516
+ context: replaced.context,
517
+ tries: 0,
518
+ error: "replaced by newer keyed job",
519
+ timestamp,
520
+ });
521
+ }, _JobManager_keyedHeartbeat = function _JobManager_keyedHeartbeat(job, lease, heartbeat) {
522
+ return async () => {
523
+ await heartbeat();
524
+ const renewed = await __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator.renewHeartbeat({
525
+ service: job.service,
526
+ jobType: job.type,
527
+ jobId: job.id,
528
+ lease,
529
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
530
+ });
531
+ if (renewed.kind === "lost") {
532
+ (0, mod_js_1.recordTrellisError)(new active_job_js_1.ActiveJobRuntimeError("keyed job slot lease was lost"), {
533
+ surface: "job",
534
+ direction: "worker",
535
+ operation: job.type,
536
+ phase: "heartbeat",
537
+ });
538
+ }
539
+ };
540
+ }, _JobManager_releaseKeyedSlot = async function _JobManager_releaseKeyedSlot(job, lease) {
541
+ if (!lease)
542
+ return undefined;
543
+ const released = await __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator.releaseActiveSlot({
544
+ service: job.service,
545
+ jobType: job.type,
546
+ jobId: job.id,
547
+ lease,
548
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
549
+ });
550
+ return released.kind === "released" ? "released" : "staleCompletion";
551
+ }, _JobManager_releaseKeyedSlotAfterPublishFailure = async function _JobManager_releaseKeyedSlotAfterPublishFailure(job, lease, publishError) {
552
+ try {
553
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
554
+ }
555
+ catch (cleanupError) {
556
+ (0, mod_js_1.recordTrellisError)(cleanupError, {
557
+ surface: "job",
558
+ direction: "worker",
559
+ operation: job.type,
560
+ phase: "keyed_slot_cleanup",
561
+ });
562
+ (0, mod_js_1.recordTrellisError)(publishError, {
563
+ surface: "job",
564
+ direction: "worker",
565
+ operation: job.type,
566
+ phase: "publish",
567
+ });
568
+ }
569
+ }, _JobManager_publishStaleCompletionIgnored = async function _JobManager_publishStaleCompletionIgnored(job, tries) {
570
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
571
+ jobId: job.id,
572
+ service: job.service,
573
+ jobType: job.type,
574
+ eventType: "staleCompletionIgnored",
575
+ state: "stale",
576
+ previousState: "active",
577
+ context: job.context,
578
+ tries,
579
+ error: "keyed job slot lease was lost before completion",
580
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
581
+ });
293
582
  };
583
+ function getKeyPolicy(binding) {
584
+ if (!binding.keyConcurrency) {
585
+ return undefined;
586
+ }
587
+ return (0, key_coordinator_js_1.normalizeJobKeyPolicy)({
588
+ keyConcurrency: binding.keyConcurrency,
589
+ queue: binding.queue,
590
+ });
591
+ }
592
+ function startAutoHeartbeat(heartbeat, intervalMs) {
593
+ const timer = setInterval(() => {
594
+ void heartbeat().catch((error) => {
595
+ (0, mod_js_1.recordTrellisError)(error, {
596
+ surface: "job",
597
+ direction: "worker",
598
+ phase: "heartbeat",
599
+ });
600
+ });
601
+ }, intervalMs);
602
+ return () => clearInterval(timer);
603
+ }
294
604
  function computeDeadline(now, deadlineMs) {
295
605
  if (deadlineMs === undefined) {
296
606
  return undefined;