@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
@@ -9,12 +9,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
9
9
  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");
10
10
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
11
  };
12
- var _JobManager_instances, _JobManager_context, _JobManager_meta, _JobManager_getQueueBinding, _JobManager_publishJobEvent;
12
+ 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;
13
13
  import { headers as natsHeaders } from "@nats-io/nats-core";
14
14
  import { ulid } from "ulid";
15
15
  import { createMapCarrier, injectTraceContext, } from "../../telemetry/carrier.js";
16
16
  import { recordTrellisError } from "../../telemetry/mod.js";
17
+ import { JobNotEnqueuedError } from "../../jobs.js";
17
18
  import { ActiveJob, ActiveJobRuntimeError, JobCancellationToken, } from "./active-job.js";
19
+ import { normalizeJobKeyPolicy } from "./key-coordinator.js";
18
20
  export class JobProcessError extends Error {
19
21
  constructor(kind, message) {
20
22
  super(message);
@@ -41,41 +43,83 @@ export class JobManager {
41
43
  __classPrivateFieldSet(this, _JobManager_context, context, "f");
42
44
  }
43
45
  async create(type, payload) {
44
- const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
45
- const meta = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this);
46
- const now = meta.nowIso();
47
- const id = meta.nextJobId();
48
- const context = createJobContext();
49
- const namespace = __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace;
50
- const deadline = computeDeadline(now, binding.defaultDeadlineMs);
51
- const job = {
52
- id,
53
- service: namespace,
54
- type,
55
- state: "pending",
56
- context,
57
- payload,
58
- createdAt: now,
59
- updatedAt: now,
60
- tries: 0,
61
- maxTries: binding.maxDeliver,
62
- ...(deadline ? { deadline } : {}),
63
- };
64
- const event = {
65
- jobId: id,
66
- service: job.service,
67
- jobType: type,
68
- eventType: "created",
69
- state: "pending",
70
- context,
71
- tries: 0,
72
- maxTries: binding.maxDeliver,
73
- payload,
74
- ...(deadline ? { deadline } : {}),
75
- timestamp: now,
76
- };
77
- await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event);
78
- return job;
46
+ const outcome = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submit).call(this, type, payload, true);
47
+ if (outcome.kind === "accepted") {
48
+ return outcome.job;
49
+ }
50
+ if (outcome.kind === "coalesced") {
51
+ throw new JobNotEnqueuedError({
52
+ reason: "coalesced",
53
+ key: outcome.key,
54
+ active: 0,
55
+ queued: 1,
56
+ limit: 0,
57
+ existingJobId: outcome.existing.id,
58
+ });
59
+ }
60
+ if (outcome.kind === "replaced") {
61
+ throw new JobNotEnqueuedError({
62
+ reason: "queue-depth",
63
+ key: outcome.key,
64
+ active: 0,
65
+ queued: 1,
66
+ limit: 0,
67
+ existingJobId: outcome.replaced.id,
68
+ });
69
+ }
70
+ throw new JobNotEnqueuedError({
71
+ reason: outcome.reason,
72
+ key: outcome.key,
73
+ active: outcome.active,
74
+ queued: outcome.queued,
75
+ limit: outcome.limit,
76
+ });
77
+ }
78
+ async submit(type, payload) {
79
+ return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submit).call(this, type, payload, false);
80
+ }
81
+ async createPrepared(submission) {
82
+ const outcome = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, true, true);
83
+ if (outcome.kind === "accepted") {
84
+ return outcome.job;
85
+ }
86
+ if (outcome.kind === "coalesced") {
87
+ throw new JobNotEnqueuedError({
88
+ reason: "coalesced",
89
+ key: outcome.key,
90
+ active: 0,
91
+ queued: 1,
92
+ limit: 0,
93
+ existingJobId: outcome.existing.id,
94
+ });
95
+ }
96
+ if (outcome.kind === "replaced") {
97
+ throw new JobNotEnqueuedError({
98
+ reason: "queue-depth",
99
+ key: outcome.key,
100
+ active: 0,
101
+ queued: 1,
102
+ limit: 0,
103
+ existingJobId: outcome.replaced.id,
104
+ });
105
+ }
106
+ throw new JobNotEnqueuedError({
107
+ reason: outcome.reason,
108
+ key: outcome.key,
109
+ active: outcome.active,
110
+ queued: outcome.queued,
111
+ limit: outcome.limit,
112
+ });
113
+ }
114
+ async submitPrepared(submission) {
115
+ return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, false, true);
116
+ }
117
+ async cleanupQueuedKeyedJob(job) {
118
+ const queue = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
119
+ const keyedPolicy = getKeyPolicy(queue);
120
+ if (!keyedPolicy)
121
+ return;
122
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_removeQueuedKeyedReservation).call(this, job, keyedPolicy);
79
123
  }
80
124
  process(job, cancellation, handler, metadata = {}, validation = {}) {
81
125
  return this.processWithHeartbeat(job, cancellation, () => {
@@ -83,25 +127,78 @@ export class JobManager {
83
127
  }, handler, metadata, validation);
84
128
  }
85
129
  async processWithHeartbeat(job, cancellation, heartbeat, handler, metadata = {}, validation = {}) {
86
- __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
87
130
  const tries = job.tries + 1;
88
- await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
89
- jobId: job.id,
90
- service: job.service,
91
- jobType: job.type,
92
- eventType: "started",
93
- state: "active",
94
- previousState: job.state,
95
- context: job.context,
96
- tries,
97
- timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
98
- });
131
+ const queue = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, job.type);
132
+ const keyedPolicy = getKeyPolicy(queue);
133
+ let lease;
134
+ let staleSlots = [];
135
+ if (keyedPolicy) {
136
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
137
+ if (!coordinator) {
138
+ throw new Error(`Keyed jobs queue '${job.type}' requires the JOBS_KEYS coordinator`);
139
+ }
140
+ const acquired = await coordinator.acquireActiveSlot({
141
+ service: job.service,
142
+ jobType: job.type,
143
+ jobId: job.id,
144
+ payload: job.payload,
145
+ context: job.context,
146
+ lifecycleState: metadata.latestState ?? job.state,
147
+ tries,
148
+ instanceId: metadata.instanceId ?? "unknown",
149
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
150
+ policy: keyedPolicy,
151
+ });
152
+ if (acquired.kind === "blocked") {
153
+ return { outcome: "deferred", tries, reason: acquired.reason };
154
+ }
155
+ lease = {
156
+ key: acquired.key,
157
+ keyHash: acquired.keyHash,
158
+ slotToken: acquired.slotToken,
159
+ policy: keyedPolicy,
160
+ };
161
+ staleSlots = acquired.stale;
162
+ }
163
+ try {
164
+ for (const stale of staleSlots) {
165
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, stale.jobId, {
166
+ jobId: stale.jobId,
167
+ service: job.service,
168
+ jobType: job.type,
169
+ eventType: "stale",
170
+ state: "stale",
171
+ previousState: "active",
172
+ context: stale.context,
173
+ tries: stale.tries,
174
+ error: "keyed job lease expired",
175
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
176
+ });
177
+ }
178
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
179
+ jobId: job.id,
180
+ service: job.service,
181
+ jobType: job.type,
182
+ eventType: "started",
183
+ state: "active",
184
+ previousState: job.state,
185
+ context: job.context,
186
+ tries,
187
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
188
+ });
189
+ }
190
+ catch (error) {
191
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlotAfterPublishFailure).call(this, job, lease, error);
192
+ throw error;
193
+ }
99
194
  try {
100
- const result = await this.withActiveJobAndHeartbeat({ ...job, state: "active", tries }, cancellation, heartbeat, handler, metadata);
195
+ 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);
101
196
  if (cancellation.isHostShutdown()) {
197
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
102
198
  return { outcome: "interrupted", tries };
103
199
  }
104
200
  if (cancellation.isCancelled()) {
201
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
105
202
  return { outcome: "cancelled", tries };
106
203
  }
107
204
  try {
@@ -114,6 +211,11 @@ export class JobManager {
114
211
  catch (error) {
115
212
  throw JobProcessError.failed(error instanceof Error ? error.message : String(error));
116
213
  }
214
+ const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
215
+ if (release === "staleCompletion") {
216
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
217
+ return { outcome: "stale_completion_ignored", tries };
218
+ }
117
219
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
118
220
  jobId: job.id,
119
221
  service: job.service,
@@ -130,9 +232,11 @@ export class JobManager {
130
232
  }
131
233
  catch (error) {
132
234
  if (cancellation.isHostShutdown()) {
235
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
133
236
  return { outcome: "interrupted", tries };
134
237
  }
135
238
  if (cancellation.isCancelled()) {
239
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
136
240
  return { outcome: "cancelled", tries };
137
241
  }
138
242
  if (error instanceof JobProcessError) {
@@ -144,6 +248,11 @@ export class JobManager {
144
248
  operation: job.type,
145
249
  phase: "handler_result",
146
250
  });
251
+ const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
252
+ if (release === "staleCompletion") {
253
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
254
+ return { outcome: "stale_completion_ignored", tries };
255
+ }
147
256
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
148
257
  jobId: job.id,
149
258
  service: job.service,
@@ -164,6 +273,11 @@ export class JobManager {
164
273
  operation: job.type,
165
274
  phase: "handler_result",
166
275
  });
276
+ const release = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
277
+ if (release === "staleCompletion") {
278
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishStaleCompletionIgnored).call(this, job, tries);
279
+ return { outcome: "stale_completion_ignored", tries };
280
+ }
167
281
  await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
168
282
  jobId: job.id,
169
283
  service: job.service,
@@ -234,7 +348,10 @@ export class JobManager {
234
348
  throw new ActiveJobRuntimeError("worker heartbeat unavailable");
235
349
  }, f, metadata);
236
350
  }
237
- async withActiveJobAndHeartbeat(job, cancellation, heartbeat, f, metadata = {}) {
351
+ async withActiveJobAndHeartbeat(job, cancellation, heartbeat, f, metadata = {}, lease) {
352
+ const stopAutoHeartbeat = lease
353
+ ? startAutoHeartbeat(heartbeat, lease.policy.heartbeatIntervalMs)
354
+ : () => { };
238
355
  const activeJob = new ActiveJob(job, cancellation, {
239
356
  updateProgress: (progress) => this.emitProgress(job, progress),
240
357
  log: (entry) => this.emitLog(job, entry),
@@ -252,7 +369,12 @@ export class JobManager {
252
369
  }, {
253
370
  redeliveryCount: metadata.redeliveryCount ?? 0,
254
371
  });
255
- return await f(activeJob);
372
+ try {
373
+ return await f(activeJob);
374
+ }
375
+ finally {
376
+ stopAutoHeartbeat();
377
+ }
256
378
  }
257
379
  }
258
380
  _JobManager_context = new WeakMap(), _JobManager_instances = new WeakSet(), _JobManager_meta = function _JobManager_meta() {
@@ -266,9 +388,9 @@ _JobManager_context = new WeakMap(), _JobManager_instances = new WeakSet(), _Job
266
388
  throw new Error(`Missing jobs binding for queue '${type}'`);
267
389
  }
268
390
  return binding;
269
- }, _JobManager_publishJobEvent = async function _JobManager_publishJobEvent(type, jobId, event) {
391
+ }, _JobManager_publishJobEvent = async function _JobManager_publishJobEvent(type, jobId, event, stableMessageId) {
270
392
  const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
271
- const headers = headersFromJobContext(event.context);
393
+ const headers = headersFromJobContext(event.context, stableMessageId);
272
394
  try {
273
395
  await __classPrivateFieldGet(this, _JobManager_context, "f").nc.publish(`${binding.publishPrefix}.${jobId}.${event.eventType}`, new TextEncoder().encode(JSON.stringify(event)), { headers });
274
396
  }
@@ -282,7 +404,256 @@ _JobManager_context = new WeakMap(), _JobManager_instances = new WeakSet(), _Job
282
404
  });
283
405
  throw error;
284
406
  }
407
+ }, _JobManager_submit = async function _JobManager_submit(type, payload, strictCreate) {
408
+ const meta = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this);
409
+ const now = meta.nowIso();
410
+ const id = meta.nextJobId();
411
+ const context = createJobContext();
412
+ const namespace = __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace;
413
+ const submission = {
414
+ submissionId: id,
415
+ mode: strictCreate ? "create" : "submit",
416
+ service: namespace,
417
+ queue: type,
418
+ jobId: id,
419
+ payload,
420
+ createdAt: now,
421
+ context,
422
+ };
423
+ return await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_submitPrepared).call(this, submission, strictCreate);
424
+ }, _JobManager_submitPrepared = async function _JobManager_submitPrepared(submission, strictCreate, stableMessageIds) {
425
+ const { queue: type, jobId: id, createdAt: now, context, service, payload, } = submission;
426
+ const binding = __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_getQueueBinding).call(this, type);
427
+ const deadline = computeDeadline(now, binding.defaultDeadlineMs);
428
+ const job = {
429
+ id,
430
+ service,
431
+ type,
432
+ state: "pending",
433
+ context,
434
+ payload,
435
+ createdAt: now,
436
+ updatedAt: now,
437
+ tries: 0,
438
+ maxTries: binding.maxDeliver,
439
+ ...(deadline ? { deadline } : {}),
440
+ };
441
+ const event = {
442
+ jobId: id,
443
+ service,
444
+ jobType: type,
445
+ eventType: "created",
446
+ state: "pending",
447
+ context,
448
+ tries: 0,
449
+ maxTries: binding.maxDeliver,
450
+ payload,
451
+ ...(deadline ? { deadline } : {}),
452
+ timestamp: now,
453
+ };
454
+ const keyedPolicy = getKeyPolicy(binding);
455
+ if (keyedPolicy) {
456
+ const admission = await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_admitKeyedCreate).call(this, {
457
+ type,
458
+ job,
459
+ event,
460
+ policy: keyedPolicy,
461
+ strictCreate,
462
+ submissionId: submission.submissionId,
463
+ });
464
+ if (admission.kind !== "accepted" && admission.kind !== "replaced") {
465
+ return admission;
466
+ }
467
+ if (strictCreate && admission.kind === "replaced") {
468
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_restoreReplacedKeyedReservation).call(this, job, admission.replaced, keyedPolicy, submission.submissionId);
469
+ return {
470
+ kind: "rejected",
471
+ key: admission.key,
472
+ reason: "queue-depth",
473
+ active: admission.state.active.length,
474
+ queued: admission.state.queued.length,
475
+ limit: keyedPolicy.queue.maxQueuedPerKey,
476
+ };
477
+ }
478
+ if (admission.kind === "replaced") {
479
+ try {
480
+ const skippedMsgId = stableMessageIds
481
+ ? `trellis-job-skipped:${submission.submissionId}:${admission.replaced.id}`
482
+ : undefined;
483
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishSkipped).call(this, type, admission.replaced, now, skippedMsgId);
484
+ }
485
+ catch (error) {
486
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_restoreReplacedKeyedReservation).call(this, job, admission.replaced, keyedPolicy, submission.submissionId);
487
+ throw error;
488
+ }
489
+ }
490
+ try {
491
+ const createdMsgId = stableMessageIds
492
+ ? `trellis-job-created:${submission.submissionId}`
493
+ : undefined;
494
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event, createdMsgId);
495
+ }
496
+ catch (error) {
497
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_removeQueuedKeyedReservation).call(this, job, keyedPolicy);
498
+ throw error;
499
+ }
500
+ if (admission.kind === "replaced") {
501
+ return {
502
+ kind: "replaced",
503
+ key: admission.key,
504
+ replaced: {
505
+ service: admission.replaced.service,
506
+ jobType: admission.replaced.jobType,
507
+ id: admission.replaced.id,
508
+ },
509
+ job,
510
+ };
511
+ }
512
+ return { kind: "accepted", job, key: admission.key };
513
+ }
514
+ const createdMsgId = stableMessageIds
515
+ ? `trellis-job-created:${submission.submissionId}`
516
+ : undefined;
517
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, id, event, createdMsgId);
518
+ return { kind: "accepted", job };
519
+ }, _JobManager_admitKeyedCreate = async function _JobManager_admitKeyedCreate(args) {
520
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
521
+ if (!coordinator) {
522
+ throw new Error(`Keyed jobs queue '${args.type}' requires the JOBS_KEYS coordinator`);
523
+ }
524
+ return await coordinator.admitCreate({
525
+ service: args.job.service,
526
+ jobType: args.type,
527
+ jobId: args.job.id,
528
+ payload: args.job.payload,
529
+ context: args.event.context,
530
+ createdAt: args.event.timestamp,
531
+ policy: args.policy,
532
+ strictCreate: args.strictCreate,
533
+ ...(args.submissionId ? { submissionId: args.submissionId } : {}),
534
+ });
535
+ }, _JobManager_removeQueuedKeyedReservation = async function _JobManager_removeQueuedKeyedReservation(job, policy) {
536
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
537
+ if (!coordinator)
538
+ return;
539
+ await coordinator.removeQueuedJob({
540
+ service: job.service,
541
+ jobType: job.type,
542
+ jobId: job.id,
543
+ payload: job.payload,
544
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
545
+ policy,
546
+ });
547
+ }, _JobManager_restoreReplacedKeyedReservation = async function _JobManager_restoreReplacedKeyedReservation(job, replaced, policy, submissionId) {
548
+ const coordinator = __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator;
549
+ if (!coordinator)
550
+ return;
551
+ await coordinator.restoreReplacedQueuedJob({
552
+ service: job.service,
553
+ jobType: job.type,
554
+ replacementJobId: job.id,
555
+ replaced,
556
+ payload: job.payload,
557
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
558
+ policy,
559
+ ...(submissionId ? { submissionId } : {}),
560
+ });
561
+ }, _JobManager_publishSkipped = async function _JobManager_publishSkipped(type, replaced, timestamp, stableMessageId) {
562
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, type, replaced.id, {
563
+ jobId: replaced.id,
564
+ service: __classPrivateFieldGet(this, _JobManager_context, "f").jobs.namespace,
565
+ jobType: type,
566
+ eventType: "skipped",
567
+ state: "skipped",
568
+ previousState: "pending",
569
+ context: replaced.context,
570
+ tries: 0,
571
+ error: "replaced by newer keyed job",
572
+ timestamp,
573
+ }, stableMessageId);
574
+ }, _JobManager_keyedHeartbeat = function _JobManager_keyedHeartbeat(job, lease, heartbeat) {
575
+ return async () => {
576
+ await heartbeat();
577
+ const renewed = await __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator.renewHeartbeat({
578
+ service: job.service,
579
+ jobType: job.type,
580
+ jobId: job.id,
581
+ lease,
582
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
583
+ });
584
+ if (renewed.kind === "lost") {
585
+ recordTrellisError(new ActiveJobRuntimeError("keyed job slot lease was lost"), {
586
+ surface: "job",
587
+ direction: "worker",
588
+ operation: job.type,
589
+ phase: "heartbeat",
590
+ });
591
+ }
592
+ };
593
+ }, _JobManager_releaseKeyedSlot = async function _JobManager_releaseKeyedSlot(job, lease) {
594
+ if (!lease)
595
+ return undefined;
596
+ const released = await __classPrivateFieldGet(this, _JobManager_context, "f").keyCoordinator.releaseActiveSlot({
597
+ service: job.service,
598
+ jobType: job.type,
599
+ jobId: job.id,
600
+ lease,
601
+ now: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
602
+ });
603
+ return released.kind === "released" ? "released" : "staleCompletion";
604
+ }, _JobManager_releaseKeyedSlotAfterPublishFailure = async function _JobManager_releaseKeyedSlotAfterPublishFailure(job, lease, publishError) {
605
+ try {
606
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_releaseKeyedSlot).call(this, job, lease);
607
+ }
608
+ catch (cleanupError) {
609
+ recordTrellisError(cleanupError, {
610
+ surface: "job",
611
+ direction: "worker",
612
+ operation: job.type,
613
+ phase: "keyed_slot_cleanup",
614
+ });
615
+ recordTrellisError(publishError, {
616
+ surface: "job",
617
+ direction: "worker",
618
+ operation: job.type,
619
+ phase: "publish",
620
+ });
621
+ }
622
+ }, _JobManager_publishStaleCompletionIgnored = async function _JobManager_publishStaleCompletionIgnored(job, tries) {
623
+ await __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_publishJobEvent).call(this, job.type, job.id, {
624
+ jobId: job.id,
625
+ service: job.service,
626
+ jobType: job.type,
627
+ eventType: "staleCompletionIgnored",
628
+ state: "stale",
629
+ previousState: "active",
630
+ context: job.context,
631
+ tries,
632
+ error: "keyed job slot lease was lost before completion",
633
+ timestamp: __classPrivateFieldGet(this, _JobManager_instances, "m", _JobManager_meta).call(this).nowIso(),
634
+ });
285
635
  };
636
+ function getKeyPolicy(binding) {
637
+ if (!binding.keyConcurrency) {
638
+ return undefined;
639
+ }
640
+ return normalizeJobKeyPolicy({
641
+ keyConcurrency: binding.keyConcurrency,
642
+ queue: binding.queue,
643
+ });
644
+ }
645
+ function startAutoHeartbeat(heartbeat, intervalMs) {
646
+ const timer = setInterval(() => {
647
+ void heartbeat().catch((error) => {
648
+ recordTrellisError(error, {
649
+ surface: "job",
650
+ direction: "worker",
651
+ phase: "heartbeat",
652
+ });
653
+ });
654
+ }, intervalMs);
655
+ return () => clearInterval(timer);
656
+ }
286
657
  function computeDeadline(now, deadlineMs) {
287
658
  if (deadlineMs === undefined) {
288
659
  return undefined;
@@ -291,7 +662,7 @@ function computeDeadline(now, deadlineMs) {
291
662
  timestamp.setTime(timestamp.getTime() + deadlineMs);
292
663
  return timestamp.toISOString();
293
664
  }
294
- function createJobContext() {
665
+ export function createJobContext() {
295
666
  const carrier = createMapCarrier();
296
667
  injectTraceContext(carrier);
297
668
  const inheritedTraceparent = carrier.get("traceparent");
@@ -306,13 +677,16 @@ function createJobContext() {
306
677
  ...(tracestate ? { tracestate } : {}),
307
678
  };
308
679
  }
309
- function headersFromJobContext(context) {
680
+ function headersFromJobContext(context, stableMessageId) {
310
681
  const headers = natsHeaders();
311
682
  headers.set("request-id", context.requestId);
312
683
  headers.set("traceparent", context.traceparent);
313
684
  if (context.tracestate) {
314
685
  headers.set("tracestate", context.tracestate);
315
686
  }
687
+ if (stableMessageId) {
688
+ headers.set("Nats-Msg-Id", stableMessageId);
689
+ }
316
690
  return headers;
317
691
  }
318
692
  function isValidTraceparent(value) {