@qlever-llc/trellis 0.10.22 → 0.11.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 (406) 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 +55 -0
  5. package/esm/auth/protocol.d.ts.map +1 -1
  6. package/esm/browser.d.ts +3 -3
  7. package/esm/browser.d.ts.map +1 -1
  8. package/esm/browser.js +1 -1
  9. package/esm/client_connect.d.ts +12 -3
  10. package/esm/client_connect.d.ts.map +1 -1
  11. package/esm/client_connect.js +112 -7
  12. package/esm/codec.d.ts +7 -6
  13. package/esm/codec.d.ts.map +1 -1
  14. package/esm/codec.js +125 -6
  15. package/esm/contract_support/canonical.d.ts +3 -0
  16. package/esm/contract_support/canonical.d.ts.map +1 -1
  17. package/esm/contract_support/canonical.js +3 -0
  18. package/esm/contract_support/mod.d.ts +125 -10
  19. package/esm/contract_support/mod.d.ts.map +1 -1
  20. package/esm/contract_support/mod.js +159 -5
  21. package/esm/contract_support/protocol.d.ts +92 -7
  22. package/esm/contract_support/protocol.d.ts.map +1 -1
  23. package/esm/contract_support/protocol.js +41 -7
  24. package/esm/contract_support/runtime.d.ts +4 -1
  25. package/esm/contract_support/runtime.d.ts.map +1 -1
  26. package/esm/errors/SchemaValidationError.d.ts +49 -0
  27. package/esm/errors/SchemaValidationError.d.ts.map +1 -0
  28. package/esm/errors/SchemaValidationError.js +67 -0
  29. package/esm/errors/index.d.ts +38 -9
  30. package/esm/errors/index.d.ts.map +1 -1
  31. package/esm/errors/index.js +16 -0
  32. package/esm/generated-sdk/auth/api.d.ts +33 -605
  33. package/esm/generated-sdk/auth/api.d.ts.map +1 -1
  34. package/esm/generated-sdk/auth/api.js +6 -1
  35. package/esm/generated-sdk/auth/client.d.ts +129 -134
  36. package/esm/generated-sdk/auth/client.d.ts.map +1 -1
  37. package/esm/generated-sdk/auth/contract.d.ts +2 -601
  38. package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
  39. package/esm/generated-sdk/auth/contract.js +310 -93
  40. package/esm/generated-sdk/auth/mod.d.ts +1 -1
  41. package/esm/generated-sdk/auth/mod.d.ts.map +1 -1
  42. package/esm/generated-sdk/auth/owned_api.d.ts +88 -86
  43. package/esm/generated-sdk/auth/owned_api.d.ts.map +1 -1
  44. package/esm/generated-sdk/auth/owned_api.js +6 -0
  45. package/esm/generated-sdk/auth/schemas.d.ts +284 -136
  46. package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
  47. package/esm/generated-sdk/auth/schemas.js +231 -92
  48. package/esm/generated-sdk/auth/types.d.ts +565 -89
  49. package/esm/generated-sdk/auth/types.d.ts.map +1 -1
  50. package/esm/generated-sdk/auth/types.js +1 -1
  51. package/esm/generated-sdk/health/api.d.ts +29 -18
  52. package/esm/generated-sdk/health/api.d.ts.map +1 -1
  53. package/esm/generated-sdk/health/client.d.ts +7 -21
  54. package/esm/generated-sdk/health/client.d.ts.map +1 -1
  55. package/esm/generated-sdk/health/contract.d.ts +2 -15
  56. package/esm/generated-sdk/health/contract.d.ts.map +1 -1
  57. package/esm/generated-sdk/health/contract.js +2 -10
  58. package/esm/generated-sdk/health/mod.d.ts +1 -1
  59. package/esm/generated-sdk/health/mod.d.ts.map +1 -1
  60. package/esm/generated-sdk/health/owned_api.d.ts +2 -2
  61. package/esm/generated-sdk/health/schemas.d.ts +1 -14
  62. package/esm/generated-sdk/health/schemas.d.ts.map +1 -1
  63. package/esm/generated-sdk/health/schemas.js +1 -9
  64. package/esm/generated-sdk/health/types.d.ts +10 -5
  65. package/esm/generated-sdk/health/types.d.ts.map +1 -1
  66. package/esm/generated-sdk/health/types.js +1 -2
  67. package/esm/generated-sdk/jobs/api.d.ts +29 -109
  68. package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
  69. package/esm/generated-sdk/jobs/client.d.ts +21 -33
  70. package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
  71. package/esm/generated-sdk/jobs/contract.d.ts +2 -106
  72. package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
  73. package/esm/generated-sdk/jobs/contract.js +268 -1
  74. package/esm/generated-sdk/jobs/mod.d.ts +1 -1
  75. package/esm/generated-sdk/jobs/mod.d.ts.map +1 -1
  76. package/esm/generated-sdk/jobs/owned_api.d.ts +22 -9
  77. package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  78. package/esm/generated-sdk/jobs/owned_api.js +20 -1
  79. package/esm/generated-sdk/jobs/schemas.d.ts +437 -0
  80. package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
  81. package/esm/generated-sdk/jobs/schemas.js +211 -0
  82. package/esm/generated-sdk/jobs/types.d.ts +195 -12
  83. package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
  84. package/esm/generated-sdk/jobs/types.js +1 -1
  85. package/esm/generated-sdk/state/api.d.ts +29 -68
  86. package/esm/generated-sdk/state/api.d.ts.map +1 -1
  87. package/esm/generated-sdk/state/client.d.ts +17 -31
  88. package/esm/generated-sdk/state/client.d.ts.map +1 -1
  89. package/esm/generated-sdk/state/contract.d.ts +1 -64
  90. package/esm/generated-sdk/state/contract.d.ts.map +1 -1
  91. package/esm/generated-sdk/state/mod.d.ts +1 -1
  92. package/esm/generated-sdk/state/mod.d.ts.map +1 -1
  93. package/esm/generated-sdk/state/owned_api.d.ts +7 -7
  94. package/esm/generated-sdk/state/types.d.ts +52 -9
  95. package/esm/generated-sdk/state/types.d.ts.map +1 -1
  96. package/esm/generated-sdk/trellis-core/api.d.ts +33 -45
  97. package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
  98. package/esm/generated-sdk/trellis-core/api.js +6 -1
  99. package/esm/generated-sdk/trellis-core/client.d.ts +31 -20
  100. package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
  101. package/esm/generated-sdk/trellis-core/contract.d.ts +2 -41
  102. package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  103. package/esm/generated-sdk/trellis-core/contract.js +91 -1
  104. package/esm/generated-sdk/trellis-core/mod.d.ts +1 -1
  105. package/esm/generated-sdk/trellis-core/mod.d.ts.map +1 -1
  106. package/esm/generated-sdk/trellis-core/owned_api.d.ts +4 -4
  107. package/esm/generated-sdk/trellis-core/schemas.d.ts +113 -0
  108. package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  109. package/esm/generated-sdk/trellis-core/schemas.js +81 -0
  110. package/esm/generated-sdk/trellis-core/types.d.ts +54 -7
  111. package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
  112. package/esm/generated-sdk/trellis-core/types.js +1 -1
  113. package/esm/health.d.ts +1 -1
  114. package/esm/health.d.ts.map +1 -1
  115. package/esm/health.js +1 -1
  116. package/esm/index.d.ts +4 -4
  117. package/esm/index.d.ts.map +1 -1
  118. package/esm/index.js +2 -2
  119. package/esm/jobs.d.ts +69 -3
  120. package/esm/jobs.d.ts.map +1 -1
  121. package/esm/jobs.js +92 -3
  122. package/esm/server/health.d.ts +2 -6
  123. package/esm/server/health.d.ts.map +1 -1
  124. package/esm/server/health_schemas.d.ts +0 -8
  125. package/esm/server/health_schemas.d.ts.map +1 -1
  126. package/esm/server/health_schemas.js +0 -5
  127. package/esm/server/internal_jobs/bindings.d.ts +11 -0
  128. package/esm/server/internal_jobs/bindings.d.ts.map +1 -1
  129. package/esm/server/internal_jobs/job-manager.d.ts +58 -2
  130. package/esm/server/internal_jobs/job-manager.d.ts.map +1 -1
  131. package/esm/server/internal_jobs/job-manager.js +429 -55
  132. package/esm/server/internal_jobs/key-coordinator.d.ts +269 -0
  133. package/esm/server/internal_jobs/key-coordinator.d.ts.map +1 -0
  134. package/esm/server/internal_jobs/key-coordinator.js +677 -0
  135. package/esm/server/internal_jobs/projection.d.ts.map +1 -1
  136. package/esm/server/internal_jobs/projection.js +2 -0
  137. package/esm/server/internal_jobs/runtime-worker.d.ts +5 -1
  138. package/esm/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  139. package/esm/server/internal_jobs/runtime-worker.js +14 -2
  140. package/esm/server/internal_jobs/types.d.ts +5 -5
  141. package/esm/server/internal_jobs/types.d.ts.map +1 -1
  142. package/esm/server/internal_jobs/types.js +6 -0
  143. package/esm/server/runtime.d.ts.map +1 -1
  144. package/esm/server/service.d.ts +81 -112
  145. package/esm/server/service.d.ts.map +1 -1
  146. package/esm/server/service.js +372 -130
  147. package/esm/server.d.ts +3 -3
  148. package/esm/server.d.ts.map +1 -1
  149. package/esm/service/deno.d.ts +1 -1
  150. package/esm/service/deno.d.ts.map +1 -1
  151. package/esm/service/drizzle.d.ts +52 -0
  152. package/esm/service/drizzle.d.ts.map +1 -0
  153. package/esm/service/drizzle.js +108 -0
  154. package/esm/service/mod.d.ts +3 -3
  155. package/esm/service/mod.d.ts.map +1 -1
  156. package/esm/service/mod.js +2 -2
  157. package/esm/service/node.d.ts +1 -1
  158. package/esm/service/node.d.ts.map +1 -1
  159. package/esm/service/outbox_inbox.d.ts +76 -22
  160. package/esm/service/outbox_inbox.d.ts.map +1 -1
  161. package/esm/service/outbox_inbox.js +231 -70
  162. package/esm/telemetry/metrics.d.ts +55 -0
  163. package/esm/telemetry/metrics.d.ts.map +1 -1
  164. package/esm/telemetry/metrics.js +86 -0
  165. package/esm/telemetry/mod.d.ts +2 -1
  166. package/esm/telemetry/mod.d.ts.map +1 -1
  167. package/esm/telemetry/mod.js +1 -1
  168. package/esm/trellis.d.ts +62 -30
  169. package/esm/trellis.d.ts.map +1 -1
  170. package/esm/trellis.js +125 -42
  171. package/package.json +14 -2
  172. package/script/auth/mod.d.ts +1 -1
  173. package/script/auth/mod.d.ts.map +1 -1
  174. package/script/auth/mod.js +11 -4
  175. package/script/auth/protocol.d.ts +55 -0
  176. package/script/auth/protocol.d.ts.map +1 -1
  177. package/script/browser.d.ts +3 -3
  178. package/script/browser.d.ts.map +1 -1
  179. package/script/browser.js +3 -2
  180. package/script/client_connect.d.ts +12 -3
  181. package/script/client_connect.d.ts.map +1 -1
  182. package/script/client_connect.js +111 -6
  183. package/script/codec.d.ts +7 -6
  184. package/script/codec.d.ts.map +1 -1
  185. package/script/codec.js +124 -5
  186. package/script/contract_support/canonical.d.ts +3 -0
  187. package/script/contract_support/canonical.d.ts.map +1 -1
  188. package/script/contract_support/canonical.js +3 -0
  189. package/script/contract_support/mod.d.ts +125 -10
  190. package/script/contract_support/mod.d.ts.map +1 -1
  191. package/script/contract_support/mod.js +165 -5
  192. package/script/contract_support/protocol.d.ts +92 -7
  193. package/script/contract_support/protocol.d.ts.map +1 -1
  194. package/script/contract_support/protocol.js +42 -8
  195. package/script/contract_support/runtime.d.ts +4 -1
  196. package/script/contract_support/runtime.d.ts.map +1 -1
  197. package/script/errors/SchemaValidationError.d.ts +49 -0
  198. package/script/errors/SchemaValidationError.d.ts.map +1 -0
  199. package/script/errors/SchemaValidationError.js +74 -0
  200. package/script/errors/index.d.ts +38 -9
  201. package/script/errors/index.d.ts.map +1 -1
  202. package/script/errors/index.js +20 -1
  203. package/script/generated-sdk/auth/api.d.ts +33 -605
  204. package/script/generated-sdk/auth/api.d.ts.map +1 -1
  205. package/script/generated-sdk/auth/api.js +6 -1
  206. package/script/generated-sdk/auth/client.d.ts +129 -134
  207. package/script/generated-sdk/auth/client.d.ts.map +1 -1
  208. package/script/generated-sdk/auth/contract.d.ts +2 -601
  209. package/script/generated-sdk/auth/contract.d.ts.map +1 -1
  210. package/script/generated-sdk/auth/contract.js +310 -93
  211. package/script/generated-sdk/auth/mod.d.ts +1 -1
  212. package/script/generated-sdk/auth/mod.d.ts.map +1 -1
  213. package/script/generated-sdk/auth/owned_api.d.ts +88 -86
  214. package/script/generated-sdk/auth/owned_api.d.ts.map +1 -1
  215. package/script/generated-sdk/auth/owned_api.js +6 -0
  216. package/script/generated-sdk/auth/schemas.d.ts +284 -136
  217. package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
  218. package/script/generated-sdk/auth/schemas.js +231 -92
  219. package/script/generated-sdk/auth/types.d.ts +565 -89
  220. package/script/generated-sdk/auth/types.d.ts.map +1 -1
  221. package/script/generated-sdk/auth/types.js +1 -1
  222. package/script/generated-sdk/health/api.d.ts +29 -18
  223. package/script/generated-sdk/health/api.d.ts.map +1 -1
  224. package/script/generated-sdk/health/client.d.ts +7 -21
  225. package/script/generated-sdk/health/client.d.ts.map +1 -1
  226. package/script/generated-sdk/health/contract.d.ts +2 -15
  227. package/script/generated-sdk/health/contract.d.ts.map +1 -1
  228. package/script/generated-sdk/health/contract.js +2 -10
  229. package/script/generated-sdk/health/mod.d.ts +1 -1
  230. package/script/generated-sdk/health/mod.d.ts.map +1 -1
  231. package/script/generated-sdk/health/owned_api.d.ts +2 -2
  232. package/script/generated-sdk/health/schemas.d.ts +1 -14
  233. package/script/generated-sdk/health/schemas.d.ts.map +1 -1
  234. package/script/generated-sdk/health/schemas.js +1 -9
  235. package/script/generated-sdk/health/types.d.ts +10 -5
  236. package/script/generated-sdk/health/types.d.ts.map +1 -1
  237. package/script/generated-sdk/health/types.js +1 -2
  238. package/script/generated-sdk/jobs/api.d.ts +29 -109
  239. package/script/generated-sdk/jobs/api.d.ts.map +1 -1
  240. package/script/generated-sdk/jobs/client.d.ts +21 -33
  241. package/script/generated-sdk/jobs/client.d.ts.map +1 -1
  242. package/script/generated-sdk/jobs/contract.d.ts +2 -106
  243. package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
  244. package/script/generated-sdk/jobs/contract.js +268 -1
  245. package/script/generated-sdk/jobs/mod.d.ts +1 -1
  246. package/script/generated-sdk/jobs/mod.d.ts.map +1 -1
  247. package/script/generated-sdk/jobs/owned_api.d.ts +22 -9
  248. package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  249. package/script/generated-sdk/jobs/owned_api.js +19 -0
  250. package/script/generated-sdk/jobs/schemas.d.ts +437 -0
  251. package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
  252. package/script/generated-sdk/jobs/schemas.js +212 -1
  253. package/script/generated-sdk/jobs/types.d.ts +195 -12
  254. package/script/generated-sdk/jobs/types.d.ts.map +1 -1
  255. package/script/generated-sdk/jobs/types.js +1 -1
  256. package/script/generated-sdk/state/api.d.ts +29 -68
  257. package/script/generated-sdk/state/api.d.ts.map +1 -1
  258. package/script/generated-sdk/state/client.d.ts +17 -31
  259. package/script/generated-sdk/state/client.d.ts.map +1 -1
  260. package/script/generated-sdk/state/contract.d.ts +1 -64
  261. package/script/generated-sdk/state/contract.d.ts.map +1 -1
  262. package/script/generated-sdk/state/mod.d.ts +1 -1
  263. package/script/generated-sdk/state/mod.d.ts.map +1 -1
  264. package/script/generated-sdk/state/owned_api.d.ts +7 -7
  265. package/script/generated-sdk/state/types.d.ts +52 -9
  266. package/script/generated-sdk/state/types.d.ts.map +1 -1
  267. package/script/generated-sdk/trellis-core/api.d.ts +33 -45
  268. package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
  269. package/script/generated-sdk/trellis-core/api.js +6 -1
  270. package/script/generated-sdk/trellis-core/client.d.ts +31 -20
  271. package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
  272. package/script/generated-sdk/trellis-core/contract.d.ts +2 -41
  273. package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  274. package/script/generated-sdk/trellis-core/contract.js +91 -1
  275. package/script/generated-sdk/trellis-core/mod.d.ts +1 -1
  276. package/script/generated-sdk/trellis-core/mod.d.ts.map +1 -1
  277. package/script/generated-sdk/trellis-core/owned_api.d.ts +4 -4
  278. package/script/generated-sdk/trellis-core/schemas.d.ts +113 -0
  279. package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  280. package/script/generated-sdk/trellis-core/schemas.js +81 -0
  281. package/script/generated-sdk/trellis-core/types.d.ts +54 -7
  282. package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
  283. package/script/generated-sdk/trellis-core/types.js +1 -1
  284. package/script/health.d.ts +1 -1
  285. package/script/health.d.ts.map +1 -1
  286. package/script/health.js +1 -2
  287. package/script/index.d.ts +4 -4
  288. package/script/index.d.ts.map +1 -1
  289. package/script/index.js +2 -2
  290. package/script/jobs.d.ts +69 -3
  291. package/script/jobs.d.ts.map +1 -1
  292. package/script/jobs.js +93 -3
  293. package/script/server/health.d.ts +2 -6
  294. package/script/server/health.d.ts.map +1 -1
  295. package/script/server/health_schemas.d.ts +0 -8
  296. package/script/server/health_schemas.d.ts.map +1 -1
  297. package/script/server/health_schemas.js +1 -6
  298. package/script/server/internal_jobs/bindings.d.ts +11 -0
  299. package/script/server/internal_jobs/bindings.d.ts.map +1 -1
  300. package/script/server/internal_jobs/job-manager.d.ts +58 -2
  301. package/script/server/internal_jobs/job-manager.d.ts.map +1 -1
  302. package/script/server/internal_jobs/job-manager.js +429 -54
  303. package/script/server/internal_jobs/key-coordinator.d.ts +269 -0
  304. package/script/server/internal_jobs/key-coordinator.d.ts.map +1 -0
  305. package/script/server/internal_jobs/key-coordinator.js +690 -0
  306. package/script/server/internal_jobs/projection.d.ts.map +1 -1
  307. package/script/server/internal_jobs/projection.js +2 -0
  308. package/script/server/internal_jobs/runtime-worker.d.ts +5 -1
  309. package/script/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  310. package/script/server/internal_jobs/runtime-worker.js +14 -2
  311. package/script/server/internal_jobs/types.d.ts +5 -5
  312. package/script/server/internal_jobs/types.d.ts.map +1 -1
  313. package/script/server/internal_jobs/types.js +6 -0
  314. package/script/server/runtime.d.ts.map +1 -1
  315. package/script/server/service.d.ts +81 -112
  316. package/script/server/service.d.ts.map +1 -1
  317. package/script/server/service.js +369 -127
  318. package/script/server.d.ts +3 -3
  319. package/script/server.d.ts.map +1 -1
  320. package/script/service/deno.d.ts +1 -1
  321. package/script/service/deno.d.ts.map +1 -1
  322. package/script/service/drizzle.d.ts +52 -0
  323. package/script/service/drizzle.d.ts.map +1 -0
  324. package/script/service/drizzle.js +113 -0
  325. package/script/service/mod.d.ts +3 -3
  326. package/script/service/mod.d.ts.map +1 -1
  327. package/script/service/mod.js +4 -3
  328. package/script/service/node.d.ts +1 -1
  329. package/script/service/node.d.ts.map +1 -1
  330. package/script/service/outbox_inbox.d.ts +76 -22
  331. package/script/service/outbox_inbox.d.ts.map +1 -1
  332. package/script/service/outbox_inbox.js +233 -70
  333. package/script/telemetry/metrics.d.ts +55 -0
  334. package/script/telemetry/metrics.d.ts.map +1 -1
  335. package/script/telemetry/metrics.js +88 -0
  336. package/script/telemetry/mod.d.ts +2 -1
  337. package/script/telemetry/mod.d.ts.map +1 -1
  338. package/script/telemetry/mod.js +3 -1
  339. package/script/trellis.d.ts +62 -30
  340. package/script/trellis.d.ts.map +1 -1
  341. package/script/trellis.js +124 -41
  342. package/src/auth/mod.ts +7 -0
  343. package/src/browser.ts +5 -7
  344. package/src/client_connect.ts +200 -12
  345. package/src/codec.ts +186 -11
  346. package/src/contract_support/canonical.ts +3 -0
  347. package/src/contract_support/mod.ts +380 -9
  348. package/src/contract_support/protocol.ts +57 -10
  349. package/src/contract_support/runtime.ts +7 -0
  350. package/src/errors/SchemaValidationError.ts +67 -0
  351. package/src/errors/index.ts +28 -0
  352. package/src/health.ts +0 -1
  353. package/src/index.ts +7 -8
  354. package/src/jobs.ts +138 -1
  355. package/src/sdk/_generated/auth/api.ts +38 -7
  356. package/src/sdk/_generated/auth/client.ts +168 -530
  357. package/src/sdk/_generated/auth/contract.ts +310 -93
  358. package/src/sdk/_generated/auth/mod.ts +0 -1
  359. package/src/sdk/_generated/auth/owned_api.ts +92 -86
  360. package/src/sdk/_generated/auth/schemas.ts +231 -92
  361. package/src/sdk/_generated/auth/types.ts +1069 -273
  362. package/src/sdk/_generated/core/api.ts +38 -7
  363. package/src/sdk/_generated/core/client.ts +47 -73
  364. package/src/sdk/_generated/core/contract.ts +91 -1
  365. package/src/sdk/_generated/core/mod.ts +0 -1
  366. package/src/sdk/_generated/core/owned_api.ts +4 -4
  367. package/src/sdk/_generated/core/schemas.ts +81 -0
  368. package/src/sdk/_generated/core/types.ts +79 -15
  369. package/src/sdk/_generated/health/api.ts +29 -5
  370. package/src/sdk/_generated/health/client.ts +11 -58
  371. package/src/sdk/_generated/health/contract.ts +2 -10
  372. package/src/sdk/_generated/health/mod.ts +0 -1
  373. package/src/sdk/_generated/health/owned_api.ts +2 -2
  374. package/src/sdk/_generated/health/schemas.ts +1 -9
  375. package/src/sdk/_generated/health/types.ts +23 -2
  376. package/src/sdk/_generated/jobs/api.ts +29 -5
  377. package/src/sdk/_generated/jobs/client.ts +25 -109
  378. package/src/sdk/_generated/jobs/contract.ts +269 -1
  379. package/src/sdk/_generated/jobs/mod.ts +0 -1
  380. package/src/sdk/_generated/jobs/owned_api.ts +30 -9
  381. package/src/sdk/_generated/jobs/schemas.ts +213 -0
  382. package/src/sdk/_generated/jobs/types.ts +252 -18
  383. package/src/sdk/_generated/state/api.ts +29 -5
  384. package/src/sdk/_generated/state/client.ts +18 -95
  385. package/src/sdk/_generated/state/mod.ts +0 -1
  386. package/src/sdk/_generated/state/owned_api.ts +7 -7
  387. package/src/sdk/_generated/state/types.ts +91 -15
  388. package/src/server/health.ts +2 -6
  389. package/src/server/health_schemas.ts +0 -6
  390. package/src/server/internal_jobs/bindings.ts +11 -0
  391. package/src/server/internal_jobs/job-manager.ts +553 -24
  392. package/src/server/internal_jobs/key-coordinator.ts +1080 -0
  393. package/src/server/internal_jobs/projection.ts +2 -0
  394. package/src/server/internal_jobs/runtime-worker.ts +17 -1
  395. package/src/server/internal_jobs/types.ts +6 -0
  396. package/src/server/runtime.ts +4 -0
  397. package/src/server/service.ts +645 -625
  398. package/src/server.ts +14 -7
  399. package/src/service/deno.ts +0 -5
  400. package/src/service/drizzle.ts +184 -0
  401. package/src/service/mod.ts +17 -7
  402. package/src/service/node.ts +0 -5
  403. package/src/service/outbox_inbox.ts +354 -88
  404. package/src/telemetry/metrics.ts +198 -1
  405. package/src/telemetry/mod.ts +6 -0
  406. package/src/trellis.ts +286 -105
@@ -10,17 +10,20 @@ 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_submitPrepared, _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
+ exports.createJobContext = createJobContext;
16
17
  const nats_core_1 = require("@nats-io/nats-core");
17
18
  const ulid_1 = require("ulid");
18
19
  const carrier_js_1 = require("../../telemetry/carrier.js");
19
20
  const mod_js_1 = require("../../telemetry/mod.js");
21
+ const jobs_js_1 = require("../../jobs.js");
20
22
  const active_job_js_1 = require("./active-job.js");
21
23
  Object.defineProperty(exports, "ActiveJob", { enumerable: true, get: function () { return active_job_js_1.ActiveJob; } });
22
24
  Object.defineProperty(exports, "ActiveJobRuntimeError", { enumerable: true, get: function () { return active_job_js_1.ActiveJobRuntimeError; } });
23
25
  Object.defineProperty(exports, "JobCancellationToken", { enumerable: true, get: function () { return active_job_js_1.JobCancellationToken; } });
26
+ const key_coordinator_js_1 = require("./key-coordinator.js");
24
27
  class JobProcessError extends Error {
25
28
  constructor(kind, message) {
26
29
  super(message);
@@ -48,41 +51,83 @@ class JobManager {
48
51
  __classPrivateFieldSet(this, _JobManager_context, context, "f");
49
52
  }
50
53
  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;
54
+ const outcome = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submit).call(this, type, payload, true);
55
+ if (outcome.kind === "accepted") {
56
+ return outcome.job;
57
+ }
58
+ if (outcome.kind === "coalesced") {
59
+ throw new jobs_js_1.JobNotEnqueuedError({
60
+ reason: "coalesced",
61
+ key: outcome.key,
62
+ active: 0,
63
+ queued: 1,
64
+ limit: 0,
65
+ existingJobId: outcome.existing.id,
66
+ });
67
+ }
68
+ if (outcome.kind === "replaced") {
69
+ throw new jobs_js_1.JobNotEnqueuedError({
70
+ reason: "queue-depth",
71
+ key: outcome.key,
72
+ active: 0,
73
+ queued: 1,
74
+ limit: 0,
75
+ existingJobId: outcome.replaced.id,
76
+ });
77
+ }
78
+ throw new jobs_js_1.JobNotEnqueuedError({
79
+ reason: outcome.reason,
80
+ key: outcome.key,
81
+ active: outcome.active,
82
+ queued: outcome.queued,
83
+ limit: outcome.limit,
84
+ });
85
+ }
86
+ async submit(type, payload) {
87
+ return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submit).call(this, type, payload, false);
88
+ }
89
+ async createPrepared(submission) {
90
+ const outcome = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, true, true);
91
+ if (outcome.kind === "accepted") {
92
+ return outcome.job;
93
+ }
94
+ if (outcome.kind === "coalesced") {
95
+ throw new jobs_js_1.JobNotEnqueuedError({
96
+ reason: "coalesced",
97
+ key: outcome.key,
98
+ active: 0,
99
+ queued: 1,
100
+ limit: 0,
101
+ existingJobId: outcome.existing.id,
102
+ });
103
+ }
104
+ if (outcome.kind === "replaced") {
105
+ throw new jobs_js_1.JobNotEnqueuedError({
106
+ reason: "queue-depth",
107
+ key: outcome.key,
108
+ active: 0,
109
+ queued: 1,
110
+ limit: 0,
111
+ existingJobId: outcome.replaced.id,
112
+ });
113
+ }
114
+ throw new jobs_js_1.JobNotEnqueuedError({
115
+ reason: outcome.reason,
116
+ key: outcome.key,
117
+ active: outcome.active,
118
+ queued: outcome.queued,
119
+ limit: outcome.limit,
120
+ });
121
+ }
122
+ async submitPrepared(submission) {
123
+ return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, false, true);
124
+ }
125
+ async cleanupQueuedKeyedJob(job) {
126
+ const queue = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
127
+ const keyedPolicy = getKeyPolicy(queue);
128
+ if (!keyedPolicy)
129
+ return;
130
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_removeQueuedKeyedReservation).call(this, job, keyedPolicy);
86
131
  }
87
132
  process(job, cancellation, handler, metadata = {}, validation = {}) {
88
133
  return this.processWithHeartbeat(job, cancellation, () => {
@@ -90,25 +135,78 @@ class JobManager {
90
135
  }, handler, metadata, validation);
91
136
  }
92
137
  async processWithHeartbeat(job, cancellation, heartbeat, handler, metadata = {}, validation = {}) {
93
- __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
94
138
  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
- });
139
+ const queue = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
140
+ const keyedPolicy = getKeyPolicy(queue);
141
+ let lease;
142
+ let staleSlots = [];
143
+ if (keyedPolicy) {
144
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
145
+ if (!coordinator) {
146
+ throw new Error(`Keyed jobs queue '${job.type}' requires the JOBS_KEYS coordinator`);
147
+ }
148
+ const acquired = await coordinator.acquireActiveSlot({
149
+ service: job.service,
150
+ jobType: job.type,
151
+ jobId: job.id,
152
+ payload: job.payload,
153
+ context: job.context,
154
+ lifecycleState: metadata.latestState ?? job.state,
155
+ tries,
156
+ instanceId: metadata.instanceId ?? "unknown",
157
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
158
+ policy: keyedPolicy,
159
+ });
160
+ if (acquired.kind === "blocked") {
161
+ return { outcome: "deferred", tries, reason: acquired.reason };
162
+ }
163
+ lease = {
164
+ key: acquired.key,
165
+ keyHash: acquired.keyHash,
166
+ slotToken: acquired.slotToken,
167
+ policy: keyedPolicy,
168
+ };
169
+ staleSlots = acquired.stale;
170
+ }
171
+ try {
172
+ for (const stale of staleSlots) {
173
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, stale.jobId, {
174
+ jobId: stale.jobId,
175
+ service: job.service,
176
+ jobType: job.type,
177
+ eventType: "stale",
178
+ state: "stale",
179
+ previousState: "active",
180
+ context: stale.context,
181
+ tries: stale.tries,
182
+ error: "keyed job lease expired",
183
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
184
+ });
185
+ }
186
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
187
+ jobId: job.id,
188
+ service: job.service,
189
+ jobType: job.type,
190
+ eventType: "started",
191
+ state: "active",
192
+ previousState: job.state,
193
+ context: job.context,
194
+ tries,
195
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
196
+ });
197
+ }
198
+ catch (error) {
199
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlotAfterPublishFailure).call(this, job, lease, error);
200
+ throw error;
201
+ }
106
202
  try {
107
- const result = await this.withActiveJobAndHeartbeat({ ...job, state: "active", tries }, cancellation, heartbeat, handler, metadata);
203
+ 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
204
  if (cancellation.isHostShutdown()) {
205
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
109
206
  return { outcome: "interrupted", tries };
110
207
  }
111
208
  if (cancellation.isCancelled()) {
209
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
112
210
  return { outcome: "cancelled", tries };
113
211
  }
114
212
  try {
@@ -121,6 +219,11 @@ class JobManager {
121
219
  catch (error) {
122
220
  throw JobProcessError.failed(error instanceof Error ? error.message : String(error));
123
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
+ }
124
227
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
125
228
  jobId: job.id,
126
229
  service: job.service,
@@ -137,9 +240,11 @@ class JobManager {
137
240
  }
138
241
  catch (error) {
139
242
  if (cancellation.isHostShutdown()) {
243
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
140
244
  return { outcome: "interrupted", tries };
141
245
  }
142
246
  if (cancellation.isCancelled()) {
247
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
143
248
  return { outcome: "cancelled", tries };
144
249
  }
145
250
  if (error instanceof JobProcessError) {
@@ -151,6 +256,11 @@ class JobManager {
151
256
  operation: job.type,
152
257
  phase: "handler_result",
153
258
  });
259
+ const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
260
+ if (release === "staleCompletion") {
261
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
262
+ return { outcome: "stale_completion_ignored", tries };
263
+ }
154
264
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
155
265
  jobId: job.id,
156
266
  service: job.service,
@@ -171,6 +281,11 @@ class JobManager {
171
281
  operation: job.type,
172
282
  phase: "handler_result",
173
283
  });
284
+ const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
285
+ if (release === "staleCompletion") {
286
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
287
+ return { outcome: "stale_completion_ignored", tries };
288
+ }
174
289
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
175
290
  jobId: job.id,
176
291
  service: job.service,
@@ -241,7 +356,10 @@ class JobManager {
241
356
  throw new active_job_js_1.ActiveJobRuntimeError("worker heartbeat unavailable");
242
357
  }, f, metadata);
243
358
  }
244
- async withActiveJobAndHeartbeat(job, cancellation, heartbeat, f, metadata = {}) {
359
+ async withActiveJobAndHeartbeat(job, cancellation, heartbeat, f, metadata = {}, lease) {
360
+ const stopAutoHeartbeat = lease
361
+ ? startAutoHeartbeat(heartbeat, lease.policy.heartbeatIntervalMs)
362
+ : () => { };
245
363
  const activeJob = new active_job_js_1.ActiveJob(job, cancellation, {
246
364
  updateProgress: (progress) => this.emitProgress(job, progress),
247
365
  log: (entry) => this.emitLog(job, entry),
@@ -259,7 +377,12 @@ class JobManager {
259
377
  }, {
260
378
  redeliveryCount: metadata.redeliveryCount ?? 0,
261
379
  });
262
- return await f(activeJob);
380
+ try {
381
+ return await f(activeJob);
382
+ }
383
+ finally {
384
+ stopAutoHeartbeat();
385
+ }
263
386
  }
264
387
  }
265
388
  exports.JobManager = JobManager;
@@ -274,9 +397,9 @@ _JobManager_context = new WeakMap(), _JobManager_instances = new WeakSet(), _Job
274
397
  throw new Error(`Missing jobs binding for queue '${type}'`);
275
398
  }
276
399
  return binding;
277
- }, _JobManager_publishJobEvent = async function _JobManager_publishJobEvent(type, jobId, event) {
400
+ }, _JobManager_publishJobEvent = async function _JobManager_publishJobEvent(type, jobId, event, stableMessageId) {
278
401
  const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
279
- const headers = headersFromJobContext(event.context);
402
+ const headers = headersFromJobContext(event.context, stableMessageId);
280
403
  try {
281
404
  await __classPrivateFieldGet(this, _JobManager_context, "f").nc.publish(`${binding.publishPrefix}.${jobId}.${event.eventType}`, new TextEncoder().encode(JSON.stringify(event)), { headers });
282
405
  }
@@ -290,7 +413,256 @@ _JobManager_context = new WeakMap(), _JobManager_instances = new WeakSet(), _Job
290
413
  });
291
414
  throw error;
292
415
  }
416
+ }, _JobManager_submit = async function _JobManager_submit(type, payload, strictCreate) {
417
+ const meta = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this);
418
+ const now = meta.nowIso();
419
+ const id = meta.nextJobId();
420
+ const context = createJobContext();
421
+ const namespace = __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace;
422
+ const submission = {
423
+ submissionId: id,
424
+ mode: strictCreate ? "create" : "submit",
425
+ service: namespace,
426
+ queue: type,
427
+ jobId: id,
428
+ payload,
429
+ createdAt: now,
430
+ context,
431
+ };
432
+ return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, strictCreate);
433
+ }, _JobManager_submitPrepared = async function _JobManager_submitPrepared(submission, strictCreate, stableMessageIds) {
434
+ const { queue: type, jobId: id, createdAt: now, context, service, payload, } = submission;
435
+ const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
436
+ const deadline = computeDeadline(now, binding.defaultDeadlineMs);
437
+ const job = {
438
+ id,
439
+ service,
440
+ type,
441
+ state: "pending",
442
+ context,
443
+ payload,
444
+ createdAt: now,
445
+ updatedAt: now,
446
+ tries: 0,
447
+ maxTries: binding.maxDeliver,
448
+ ...(deadline ? { deadline } : {}),
449
+ };
450
+ const event = {
451
+ jobId: id,
452
+ service,
453
+ jobType: type,
454
+ eventType: "created",
455
+ state: "pending",
456
+ context,
457
+ tries: 0,
458
+ maxTries: binding.maxDeliver,
459
+ payload,
460
+ ...(deadline ? { deadline } : {}),
461
+ timestamp: now,
462
+ };
463
+ const keyedPolicy = getKeyPolicy(binding);
464
+ if (keyedPolicy) {
465
+ const admission = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_admitKeyedCreate).call(this, {
466
+ type,
467
+ job,
468
+ event,
469
+ policy: keyedPolicy,
470
+ strictCreate,
471
+ submissionId: submission.submissionId,
472
+ });
473
+ if (admission.kind !== "accepted" && admission.kind !== "replaced") {
474
+ return admission;
475
+ }
476
+ if (strictCreate && admission.kind === "replaced") {
477
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_restoreReplacedKeyedReservation).call(this, job, admission.replaced, keyedPolicy, submission.submissionId);
478
+ return {
479
+ kind: "rejected",
480
+ key: admission.key,
481
+ reason: "queue-depth",
482
+ active: admission.state.active.length,
483
+ queued: admission.state.queued.length,
484
+ limit: keyedPolicy.queue.maxQueuedPerKey,
485
+ };
486
+ }
487
+ if (admission.kind === "replaced") {
488
+ try {
489
+ const skippedMsgId = stableMessageIds
490
+ ? `trellis-job-skipped:${submission.submissionId}:${admission.replaced.id}`
491
+ : undefined;
492
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishSkipped).call(this, type, admission.replaced, now, skippedMsgId);
493
+ }
494
+ catch (error) {
495
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_restoreReplacedKeyedReservation).call(this, job, admission.replaced, keyedPolicy, submission.submissionId);
496
+ throw error;
497
+ }
498
+ }
499
+ try {
500
+ const createdMsgId = stableMessageIds
501
+ ? `trellis-job-created:${submission.submissionId}`
502
+ : undefined;
503
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event, createdMsgId);
504
+ }
505
+ catch (error) {
506
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_removeQueuedKeyedReservation).call(this, job, keyedPolicy);
507
+ throw error;
508
+ }
509
+ if (admission.kind === "replaced") {
510
+ return {
511
+ kind: "replaced",
512
+ key: admission.key,
513
+ replaced: {
514
+ service: admission.replaced.service,
515
+ jobType: admission.replaced.jobType,
516
+ id: admission.replaced.id,
517
+ },
518
+ job,
519
+ };
520
+ }
521
+ return { kind: "accepted", job, key: admission.key };
522
+ }
523
+ const createdMsgId = stableMessageIds
524
+ ? `trellis-job-created:${submission.submissionId}`
525
+ : undefined;
526
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event, createdMsgId);
527
+ return { kind: "accepted", job };
528
+ }, _JobManager_admitKeyedCreate = async function _JobManager_admitKeyedCreate(args) {
529
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
530
+ if (!coordinator) {
531
+ throw new Error(`Keyed jobs queue '${args.type}' requires the JOBS_KEYS coordinator`);
532
+ }
533
+ return await coordinator.admitCreate({
534
+ service: args.job.service,
535
+ jobType: args.type,
536
+ jobId: args.job.id,
537
+ payload: args.job.payload,
538
+ context: args.event.context,
539
+ createdAt: args.event.timestamp,
540
+ policy: args.policy,
541
+ strictCreate: args.strictCreate,
542
+ ...(args.submissionId ? { submissionId: args.submissionId } : {}),
543
+ });
544
+ }, _JobManager_removeQueuedKeyedReservation = async function _JobManager_removeQueuedKeyedReservation(job, policy) {
545
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
546
+ if (!coordinator)
547
+ return;
548
+ await coordinator.removeQueuedJob({
549
+ service: job.service,
550
+ jobType: job.type,
551
+ jobId: job.id,
552
+ payload: job.payload,
553
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
554
+ policy,
555
+ });
556
+ }, _JobManager_restoreReplacedKeyedReservation = async function _JobManager_restoreReplacedKeyedReservation(job, replaced, policy, submissionId) {
557
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
558
+ if (!coordinator)
559
+ return;
560
+ await coordinator.restoreReplacedQueuedJob({
561
+ service: job.service,
562
+ jobType: job.type,
563
+ replacementJobId: job.id,
564
+ replaced,
565
+ payload: job.payload,
566
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
567
+ policy,
568
+ ...(submissionId ? { submissionId } : {}),
569
+ });
570
+ }, _JobManager_publishSkipped = async function _JobManager_publishSkipped(type, replaced, timestamp, stableMessageId) {
571
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, replaced.id, {
572
+ jobId: replaced.id,
573
+ service: __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace,
574
+ jobType: type,
575
+ eventType: "skipped",
576
+ state: "skipped",
577
+ previousState: "pending",
578
+ context: replaced.context,
579
+ tries: 0,
580
+ error: "replaced by newer keyed job",
581
+ timestamp,
582
+ }, stableMessageId);
583
+ }, _JobManager_keyedHeartbeat = function _JobManager_keyedHeartbeat(job, lease, heartbeat) {
584
+ return async () => {
585
+ await heartbeat();
586
+ const renewed = await __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator.renewHeartbeat({
587
+ service: job.service,
588
+ jobType: job.type,
589
+ jobId: job.id,
590
+ lease,
591
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
592
+ });
593
+ if (renewed.kind === "lost") {
594
+ (0, mod_js_1.recordTrellisError)(new active_job_js_1.ActiveJobRuntimeError("keyed job slot lease was lost"), {
595
+ surface: "job",
596
+ direction: "worker",
597
+ operation: job.type,
598
+ phase: "heartbeat",
599
+ });
600
+ }
601
+ };
602
+ }, _JobManager_releaseKeyedSlot = async function _JobManager_releaseKeyedSlot(job, lease) {
603
+ if (!lease)
604
+ return undefined;
605
+ const released = await __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator.releaseActiveSlot({
606
+ service: job.service,
607
+ jobType: job.type,
608
+ jobId: job.id,
609
+ lease,
610
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
611
+ });
612
+ return released.kind === "released" ? "released" : "staleCompletion";
613
+ }, _JobManager_releaseKeyedSlotAfterPublishFailure = async function _JobManager_releaseKeyedSlotAfterPublishFailure(job, lease, publishError) {
614
+ try {
615
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
616
+ }
617
+ catch (cleanupError) {
618
+ (0, mod_js_1.recordTrellisError)(cleanupError, {
619
+ surface: "job",
620
+ direction: "worker",
621
+ operation: job.type,
622
+ phase: "keyed_slot_cleanup",
623
+ });
624
+ (0, mod_js_1.recordTrellisError)(publishError, {
625
+ surface: "job",
626
+ direction: "worker",
627
+ operation: job.type,
628
+ phase: "publish",
629
+ });
630
+ }
631
+ }, _JobManager_publishStaleCompletionIgnored = async function _JobManager_publishStaleCompletionIgnored(job, tries) {
632
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
633
+ jobId: job.id,
634
+ service: job.service,
635
+ jobType: job.type,
636
+ eventType: "staleCompletionIgnored",
637
+ state: "stale",
638
+ previousState: "active",
639
+ context: job.context,
640
+ tries,
641
+ error: "keyed job slot lease was lost before completion",
642
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
643
+ });
293
644
  };
645
+ function getKeyPolicy(binding) {
646
+ if (!binding.keyConcurrency) {
647
+ return undefined;
648
+ }
649
+ return (0, key_coordinator_js_1.normalizeJobKeyPolicy)({
650
+ keyConcurrency: binding.keyConcurrency,
651
+ queue: binding.queue,
652
+ });
653
+ }
654
+ function startAutoHeartbeat(heartbeat, intervalMs) {
655
+ const timer = setInterval(() => {
656
+ void heartbeat().catch((error) => {
657
+ (0, mod_js_1.recordTrellisError)(error, {
658
+ surface: "job",
659
+ direction: "worker",
660
+ phase: "heartbeat",
661
+ });
662
+ });
663
+ }, intervalMs);
664
+ return () => clearInterval(timer);
665
+ }
294
666
  function computeDeadline(now, deadlineMs) {
295
667
  if (deadlineMs === undefined) {
296
668
  return undefined;
@@ -314,13 +686,16 @@ function createJobContext() {
314
686
  ...(tracestate ? { tracestate } : {}),
315
687
  };
316
688
  }
317
- function headersFromJobContext(context) {
689
+ function headersFromJobContext(context, stableMessageId) {
318
690
  const headers = (0, nats_core_1.headers)();
319
691
  headers.set("request-id", context.requestId);
320
692
  headers.set("traceparent", context.traceparent);
321
693
  if (context.tracestate) {
322
694
  headers.set("tracestate", context.tracestate);
323
695
  }
696
+ if (stableMessageId) {
697
+ headers.set("Nats-Msg-Id", stableMessageId);
698
+ }
324
699
  return headers;
325
700
  }
326
701
  function isValidTraceparent(value) {