@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
@@ -117,6 +117,8 @@ type StartQueueWorkerLoopOptions<TResult> = {
117
117
  resultSchema?: SchemaRef;
118
118
  validateResult?: (args: ResultValidationArgs<TResult>) => Promise<void> | void;
119
119
  handler: (job: ActiveJob<unknown, TResult>) => Promise<TResult>;
120
+ instanceId?: string;
121
+ deferralBackoffMs?: number;
120
122
  };
121
123
  type StartNatsQueueWorkerOptions<TResult> = StartNatsRuntimeDeps & {
122
124
  manager: JobManager<unknown, TResult>;
@@ -128,6 +130,7 @@ type StartNatsQueueWorkerOptions<TResult> = StartNatsRuntimeDeps & {
128
130
  validatePayload?: (args: PayloadValidationArgs<TResult>) => Promise<void> | void;
129
131
  validateResult?: (args: ResultValidationArgs<TResult>) => Promise<void> | void;
130
132
  handler: (job: ActiveJob<unknown, TResult>) => Promise<TResult>;
133
+ instanceId?: string;
131
134
  };
132
135
  export declare function processWorkPayloadWithContextAndHeartbeat<TResult>(manager: JobManager<unknown, TResult>, payload: Uint8Array, cancellation: JobCancellationToken, heartbeat: () => Promise<void>, handler: (job: ActiveJob<unknown, TResult>) => Promise<TResult>, validation?: {
133
136
  payloadSchema?: SchemaRef;
@@ -135,8 +138,9 @@ export declare function processWorkPayloadWithContextAndHeartbeat<TResult>(manag
135
138
  resultSchema?: SchemaRef;
136
139
  validateResult?: (args: ResultValidationArgs<TResult>) => Promise<void> | void;
137
140
  }, runtime?: {
141
+ latestState?: Job["state"];
138
142
  redeliveryCount?: number;
139
- }): Promise<JobProcessOutcome<TResult> | undefined>;
143
+ }, instanceId?: string): Promise<JobProcessOutcome<TResult> | undefined>;
140
144
  export declare function projectedWorkDecision(projected: Job | undefined, _work: Job): ProjectedWorkDecision;
141
145
  export declare function lifecycleWorkDecision(latest: JobEvent | undefined): ProjectedWorkDecision;
142
146
  export declare function ackActionForOutcome(outcome: JobProcessOutcome<unknown> | undefined): WorkerAckAction;
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-worker.d.ts","sourceRoot":"","sources":["../../../src/server/internal_jobs/runtime-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-worker.d.ts","sourceRoot":"","sources":["../../../src/server/internal_jobs/runtime-worker.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,7 @@ function toWorkerConsumer(consumer) {
65
65
  },
66
66
  };
67
67
  }
68
- async function processWorkPayloadWithContextAndHeartbeat(manager, payload, cancellation, heartbeat, handler, validation, runtime) {
68
+ async function processWorkPayloadWithContextAndHeartbeat(manager, payload, cancellation, heartbeat, handler, validation, runtime, instanceId) {
69
69
  const event = parseWorkPayloadEvent(payload);
70
70
  if (!event) {
71
71
  return undefined;
@@ -86,7 +86,9 @@ async function processWorkPayloadWithContextAndHeartbeat(manager, payload, cance
86
86
  }
87
87
  return await handler(activeJob);
88
88
  }, {
89
+ latestState: runtime?.latestState,
89
90
  redeliveryCount: runtime?.redeliveryCount,
91
+ instanceId,
90
92
  }, {
91
93
  validateResult: validation?.validateResult
92
94
  ? (result, resultJob) => validation.validateResult({
@@ -116,6 +118,7 @@ function ackActionForOutcome(outcome) {
116
118
  switch (outcome.outcome) {
117
119
  case "retry":
118
120
  case "interrupted":
121
+ case "deferred":
119
122
  return "nak";
120
123
  default:
121
124
  return "ack";
@@ -170,6 +173,7 @@ async function startQueueWorkerLoop(options) {
170
173
  continue;
171
174
  }
172
175
  if (lifecycleWorkDecision(latestLifecycle) === "skip-ack") {
176
+ await options.manager.cleanupQueuedKeyedJob(job);
173
177
  registry.clearPending(key);
174
178
  await msg.ack();
175
179
  continue;
@@ -183,6 +187,7 @@ async function startQueueWorkerLoop(options) {
183
187
  continue;
184
188
  }
185
189
  if (projectedWorkDecision(projected, job) === "skip-ack") {
190
+ await options.manager.cleanupQueuedKeyedJob(job);
186
191
  registry.clearPending(key);
187
192
  await msg.ack();
188
193
  continue;
@@ -203,11 +208,15 @@ async function startQueueWorkerLoop(options) {
203
208
  resultSchema: options.resultSchema,
204
209
  validateResult: options.validateResult,
205
210
  }, {
211
+ latestState: latestLifecycle?.state,
206
212
  redeliveryCount: msg.info?.redeliveryCount,
207
- });
213
+ }, options.instanceId);
208
214
  if (ackActionForOutcome(outcome) === "ack") {
209
215
  await msg.ack();
210
216
  }
217
+ else if (outcome?.outcome === "deferred") {
218
+ await msg.nak(options.deferralBackoffMs ?? 1_000);
219
+ }
211
220
  else {
212
221
  await msg.nak();
213
222
  }
@@ -280,6 +289,8 @@ async function startNatsQueueWorker(options) {
280
289
  resultSchema: queue.result,
281
290
  validateResult: options.validateResult,
282
291
  handler: options.handler,
292
+ instanceId: options.instanceId,
293
+ deferralBackoffMs: queue.backoffMs[0] ?? 1_000,
283
294
  });
284
295
  }
285
296
  async function startWorkerHostFromBinding(binding, options) {
@@ -369,6 +380,7 @@ async function startNatsWorkerHostFromBinding(binding, options) {
369
380
  validatePayload: options.validatePayload,
370
381
  validateResult: options.validateResult,
371
382
  handler: options.handler,
383
+ instanceId: options.instanceId,
372
384
  };
373
385
  return await (isCustomNatsRuntimeDeps(options)
374
386
  ? startNatsQueueWorker({
@@ -6,7 +6,7 @@ export declare const JobContextSchema: Type.TObject<{
6
6
  tracestate: Type.TOptional<Type.TString>;
7
7
  }>;
8
8
  export type JobContext = StaticDecode<typeof JobContextSchema>;
9
- export declare const JobStateSchema: Type.TUnion<[Type.TLiteral<"pending">, Type.TLiteral<"active">, Type.TLiteral<"retry">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>;
9
+ export declare const JobStateSchema: Type.TUnion<[Type.TLiteral<"pending">, Type.TLiteral<"active">, Type.TLiteral<"retry">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"skipped">, Type.TLiteral<"stale">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>;
10
10
  export type JobState = StaticDecode<typeof JobStateSchema>;
11
11
  export declare const JobLogEntrySchema: Type.TObject<{
12
12
  timestamp: Type.TString;
@@ -25,7 +25,7 @@ export declare const JobSchema: Type.TObject<{
25
25
  id: Type.TString;
26
26
  service: Type.TString;
27
27
  type: Type.TString;
28
- state: Type.TUnion<[Type.TLiteral<"pending">, Type.TLiteral<"active">, Type.TLiteral<"retry">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>;
28
+ state: Type.TUnion<[Type.TLiteral<"pending">, Type.TLiteral<"active">, Type.TLiteral<"retry">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"skipped">, Type.TLiteral<"stale">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>;
29
29
  context: Type.TObject<{
30
30
  requestId: Type.TString;
31
31
  traceId: Type.TString;
@@ -62,9 +62,9 @@ export declare const JobEventSchema: Type.TObject<{
62
62
  jobId: Type.TString;
63
63
  service: Type.TString;
64
64
  jobType: Type.TString;
65
- eventType: Type.TUnion<[Type.TLiteral<"created">, Type.TLiteral<"started">, Type.TLiteral<"retry">, Type.TLiteral<"progress">, Type.TLiteral<"logged">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"retried">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>;
66
- state: Type.TUnion<[Type.TLiteral<"pending">, Type.TLiteral<"active">, Type.TLiteral<"retry">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>;
67
- previousState: Type.TOptional<Type.TUnion<[Type.TLiteral<"pending">, Type.TLiteral<"active">, Type.TLiteral<"retry">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>>;
65
+ eventType: Type.TUnion<[Type.TLiteral<"created">, Type.TLiteral<"started">, Type.TLiteral<"retry">, Type.TLiteral<"progress">, Type.TLiteral<"logged">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"skipped">, Type.TLiteral<"stale">, Type.TLiteral<"heartbeat">, Type.TLiteral<"staleCompletionIgnored">, Type.TLiteral<"retried">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>;
66
+ state: Type.TUnion<[Type.TLiteral<"pending">, Type.TLiteral<"active">, Type.TLiteral<"retry">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"skipped">, Type.TLiteral<"stale">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>;
67
+ previousState: Type.TOptional<Type.TUnion<[Type.TLiteral<"pending">, Type.TLiteral<"active">, Type.TLiteral<"retry">, Type.TLiteral<"completed">, Type.TLiteral<"failed">, Type.TLiteral<"cancelled">, Type.TLiteral<"expired">, Type.TLiteral<"skipped">, Type.TLiteral<"stale">, Type.TLiteral<"dead">, Type.TLiteral<"dismissed">]>>;
68
68
  context: Type.TObject<{
69
69
  requestId: Type.TString;
70
70
  traceId: Type.TString;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/internal_jobs/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,gBAAgB;;;;;EAO3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,eAAO,MAAM,cAAc,wPAUzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D,eAAO,MAAM,iBAAiB;;;;EAQ5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBpB,CAAC;AAEH,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IACjD,IAAI,CAAC,YAAY,CAAC,OAAO,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAC1D;IACA,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEJ,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BzB,CAAC;AAEH,MAAM,MAAM,QAAQ,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IACtD,IAAI,CAAC,YAAY,CAAC,OAAO,cAAc,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAC/D;IACA,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEJ,eAAO,MAAM,qBAAqB;;;;;;;EAOhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/internal_jobs/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,gBAAgB;;;;;EAO3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,eAAO,MAAM,cAAc,0SAYzB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAE3D,eAAO,MAAM,iBAAiB;;;;EAQ5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBpB,CAAC;AAEH,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IACjD,IAAI,CAAC,YAAY,CAAC,OAAO,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAC1D;IACA,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEJ,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCzB,CAAC;AAEH,MAAM,MAAM,QAAQ,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IACtD,IAAI,CAAC,YAAY,CAAC,OAAO,cAAc,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAC/D;IACA,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEJ,eAAO,MAAM,qBAAqB;;;;;;;EAOhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
@@ -18,6 +18,8 @@ exports.JobStateSchema = typebox_1.Type.Union([
18
18
  typebox_1.Type.Literal("failed"),
19
19
  typebox_1.Type.Literal("cancelled"),
20
20
  typebox_1.Type.Literal("expired"),
21
+ typebox_1.Type.Literal("skipped"),
22
+ typebox_1.Type.Literal("stale"),
21
23
  typebox_1.Type.Literal("dead"),
22
24
  typebox_1.Type.Literal("dismissed"),
23
25
  ]);
@@ -69,6 +71,10 @@ exports.JobEventSchema = typebox_1.Type.Object({
69
71
  typebox_1.Type.Literal("failed"),
70
72
  typebox_1.Type.Literal("cancelled"),
71
73
  typebox_1.Type.Literal("expired"),
74
+ typebox_1.Type.Literal("skipped"),
75
+ typebox_1.Type.Literal("stale"),
76
+ typebox_1.Type.Literal("heartbeat"),
77
+ typebox_1.Type.Literal("staleCompletionIgnored"),
72
78
  typebox_1.Type.Literal("retried"),
73
79
  typebox_1.Type.Literal("dead"),
74
80
  typebox_1.Type.Literal("dismissed"),
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOzD,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE/E,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC;AAE1D,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/server/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQzD,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE/E,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;AAEtE,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAC;AAE1D,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,aAAa,CAAC,EAAE,eAAe,CAAC;CAIjC,CAAC"}
@@ -8,15 +8,17 @@ import type { TrellisContractV1 } from "../contract_support/mod.js";
8
8
  import type { ContractJobsMetadata, ContractKvMetadata } from "../contract_support/mod.js";
9
9
  import { CONTRACT_JOBS_METADATA, CONTRACT_KV_METADATA } from "../contract_support/mod.js";
10
10
  import { AsyncResult, type BaseError, type MaybeAsync, Result } from "@qlever-llc/result";
11
- import { type HealthCheckFn, ServiceHealth, type ServiceHealthCheck, type ServiceHealthInfo } from "./health.js";
11
+ import { type HealthCheckFn, ServiceHealth, type ServiceHealthCheckFn, type ServiceHealthInfoFn } from "./health.js";
12
12
  import type { EventDesc } from "../contracts.js";
13
- import type { AcceptedOperation, ActiveEventFacade, EventListenerContext, EventOpts, FeedEventOf, FeedInputOf, FeedRegistration as RootFeedRegistration, HandlerTrellis, OperationHandlerContext, OperationOutputOf, OperationProgressOf, OperationRuntimeHandle, OperationTransferContextOf, PreparedTrellisEvent, RpcHandlerContext, RpcHandlerErrorOf } from "../trellis.js";
13
+ import type { AcceptedOperation, ActiveEventFacade, EventListenerContext, FeedEventOf, FeedInputOf, FeedRegistration as RootFeedRegistration, HandlerTrellis, OperationHandlerContext, OperationHandlerErrorOf, OperationOutputOf, OperationProgressOf, OperationRuntimeHandle, OperationTransferContextOf, PreparedTrellisEvent, RpcHandlerContext, RpcHandlerErrorOf } from "../trellis.js";
14
14
  import type { NatsConnectOpts } from "./runtime.js";
15
15
  import { type LoggerLike } from "../globals.js";
16
16
  import { TransferError, TransportError, UnexpectedError, ValidationError } from "../errors/index.js";
17
17
  import type { ReceiveTransferGrant } from "../transfer.js";
18
- import { ActiveJob as PublicActiveJob, JobRef } from "../jobs.js";
18
+ import { ActiveJob as PublicActiveJob, JobRef, type JobSubmitOutcome } from "../jobs.js";
19
+ import type { JobKeyConcurrencyBinding, JobQueuePolicyBinding } from "./internal_jobs/key-coordinator.js";
19
20
  import { type TrellisConnection } from "../connection.js";
21
+ import { type OutboxDispatcherOptions, type OutboxMessage, type SqlDialect, type SqlExecutor, type SqlOutboxTables } from "../service/outbox_inbox.js";
20
22
  type ExtraNatsConnectOpts = Omit<NatsConnectOpts, "servers" | "token" | "inboxPrefix" | "authenticator">;
21
23
  type ResourceBindingJobsQueue = {
22
24
  queueType: string;
@@ -37,6 +39,8 @@ type ResourceBindingJobsQueue = {
37
39
  logs: boolean;
38
40
  dlq: boolean;
39
41
  concurrency: number;
42
+ keyConcurrency?: JobKeyConcurrencyBinding;
43
+ queue?: JobQueuePolicyBinding;
40
44
  };
41
45
  type ResourceBindingJobs = {
42
46
  namespace: string;
@@ -187,54 +191,31 @@ type ContractOwnedApi<TContract extends ServiceContract<TrellisAPI, TrellisAPI |
187
191
  type ContractTrellisApi<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata>> = NonNullable<TContract["API"]["trellis"]> extends TrellisAPI ? NonNullable<TContract["API"]["trellis"]> : ContractOwnedApi<TContract>;
188
192
  type ContractJobsOf<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>> = NonNullable<TContract[typeof CONTRACT_JOBS_METADATA]>;
189
193
  type ContractKvOf<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>> = NonNullable<TContract[typeof CONTRACT_KV_METADATA]>;
190
- type ContractJobName<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata>> = keyof ContractJobsOf<TContract> & string;
191
194
  type ContractEventName<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata>> = ServiceEventName<ContractTrellisApi<TContract>>;
192
- type ContractFeedName<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata>> = keyof ContractOwnedApi<TContract>["feeds"] & string;
193
195
  type ContractOperationName<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata>> = keyof ContractOwnedApi<TContract>["operations"] & string;
194
- type ContractJobPayload<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata>, TJob extends ContractJobName<TContract>> = ContractJobsOf<TContract>[TJob]["payload"];
195
- type ContractJobResult<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata>, TJob extends ContractJobName<TContract>> = ContractJobsOf<TContract>[TJob]["result"];
196
- /** Arguments passed to a typed Trellis service job handler. */
197
- export type JobArgs<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, TJob extends ContractJobName<TContract>, TDeps = undefined> = {
198
- job: PublicActiveJob<ContractJobPayload<TContract, TJob>, ContractJobResult<TContract, TJob>>;
199
- client: Trellis<ContractTrellisApi<TContract>, ContractKvOf<TContract>, ContractJobsOf<TContract>>;
200
- } & WithDeps<TDeps>;
201
- /** Result returned by a typed Trellis service job handler. */
202
- export type JobResult<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, TJob extends ContractJobName<TContract>> = Result<ContractJobResult<TContract, TJob>, BaseError>;
203
- type WithDeps<TDeps> = [TDeps] extends [undefined] ? {} : {
204
- deps: TDeps;
205
- };
206
196
  /** Typed RPC handler function for an extracted Trellis service handler. */
207
- export type RpcHandler<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, M extends RpcMethodName<ContractOwnedApi<TContract>>, TDeps = undefined> = ({ input, context, client, }: {
197
+ export type RpcHandler<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, M extends RpcMethodName<ContractOwnedApi<TContract>>> = ({ input, context, client, }: {
208
198
  input: RpcMethodInput<ContractOwnedApi<TContract>, M>;
209
199
  context: RpcHandlerContext;
210
200
  client: Trellis<ContractTrellisApi<TContract>, ContractKvOf<TContract>, ContractJobsOf<TContract>>;
211
- } & WithDeps<TDeps>) => Promise<Result<RpcMethodOutput<ContractOwnedApi<TContract>, M>, RpcHandlerErrorOf<ContractOwnedApi<TContract>, M>>> | Result<RpcMethodOutput<ContractOwnedApi<TContract>, M>, RpcHandlerErrorOf<ContractOwnedApi<TContract>, M>>;
201
+ }) => Promise<Result<RpcMethodOutput<ContractOwnedApi<TContract>, M>, RpcHandlerErrorOf<ContractOwnedApi<TContract>, M>>> | Result<RpcMethodOutput<ContractOwnedApi<TContract>, M>, RpcHandlerErrorOf<ContractOwnedApi<TContract>, M>>;
212
202
  /** Typed event listener function for an extracted Trellis service listener. */
213
- export type ServiceEventHandler<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, E extends ContractEventName<TContract>, TDeps = undefined> = (args: {
203
+ export type ServiceEventHandler<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, E extends ContractEventName<TContract>> = (args: {
214
204
  event: ServiceEventOf<ContractTrellisApi<TContract>, E>;
215
205
  context: EventListenerContext;
216
206
  client: Trellis<ContractTrellisApi<TContract>, ContractKvOf<TContract>, ContractJobsOf<TContract>>;
217
- } & WithDeps<TDeps>) => MaybeAsync<void, BaseError>;
218
- /** Typed feed handler function for an extracted Trellis service handler. */
219
- export type FeedHandler<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, F extends ContractFeedName<TContract>, TDeps = undefined> = (context: {
220
- input: FeedInputOf<ContractOwnedApi<TContract>, F>;
221
- caller: unknown;
222
- signal: AbortSignal;
223
- emit(event: FeedEventOf<ContractOwnedApi<TContract>, F>): AsyncResult<void, ValidationError | UnexpectedError>;
224
- client: Trellis<ContractTrellisApi<TContract>, ContractKvOf<TContract>, ContractJobsOf<TContract>>;
225
- } & WithDeps<TDeps>) => unknown | Promise<unknown>;
226
- /** Typed job handler function for an extracted Trellis service job handler. */
227
- export type JobHandler<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, TJob extends ContractJobName<TContract>, TDeps = undefined> = (args: JobArgs<TContract, TJob, TDeps>) => Promise<JobResult<TContract, TJob>>;
207
+ }) => MaybeAsync<void, BaseError>;
228
208
  /** Typed operation handler function for an extracted Trellis service handler. */
229
- export type OperationHandler<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, O extends ContractOperationName<TContract>, TDeps = undefined> = (args: OperationHandlerContext<InferSchemaType<ContractOwnedApi<TContract>["operations"][O]["input"]>, OperationProgressOf<ContractOwnedApi<TContract>, O>, OperationOutputOf<ContractOwnedApi<TContract>, O>, OperationTransferContextOf<ContractOwnedApi<TContract>, O>> & {
209
+ export type OperationHandler<TContract extends ServiceContract<TrellisAPI, TrellisAPI | undefined, ContractJobsMetadata, ContractKvMetadata>, O extends ContractOperationName<TContract>> = (args: OperationHandlerContext<InferSchemaType<ContractOwnedApi<TContract>["operations"][O]["input"]>, OperationProgressOf<ContractOwnedApi<TContract>, O>, OperationOutputOf<ContractOwnedApi<TContract>, O>, OperationTransferContextOf<ContractOwnedApi<TContract>, O>, OperationHandlerErrorOf<ContractOwnedApi<TContract>, O>> & {
230
210
  client: Trellis<ContractTrellisApi<TContract>, ContractKvOf<TContract>, ContractJobsOf<TContract>>;
231
- } & WithDeps<TDeps>) => unknown | Promise<unknown>;
232
- /** Typed health info function for an extracted bound service health handler. */
233
- export type HealthInfoHandler<TDeps = undefined> = (args: WithDeps<TDeps>) => ServiceHealthInfo | undefined | Promise<ServiceHealthInfo | undefined>;
234
- /** Typed health check function for an extracted bound service health handler. */
235
- export type HealthCheckHandler<TDeps = undefined> = (args: WithDeps<TDeps>) => ServiceHealthCheck | Promise<ServiceHealthCheck>;
211
+ }) => unknown | Promise<unknown>;
212
+ /** Typed health info function for an extracted service health handler. */
213
+ export type HealthInfoHandler = ServiceHealthInfoFn;
214
+ /** Typed health check function for an extracted service health handler. */
215
+ export type HealthCheckHandler = ServiceHealthCheckFn;
236
216
  export type JobQueue<TPayload, TResult, TTrellisApi extends TrellisAPI, TKv extends ContractKvMetadata = ContractKvMetadata, TJobs extends ContractJobsMetadata = {}> = {
237
217
  create(payload: TPayload): AsyncResult<JobRef<TPayload, TResult>, BaseError>;
218
+ submit(payload: TPayload): AsyncResult<JobSubmitOutcome<TPayload, TResult>, BaseError>;
238
219
  handle(handler: (args: {
239
220
  job: PublicActiveJob<TPayload, TResult>;
240
221
  client: Trellis<TTrellisApi, TKv, TJobs>;
@@ -245,80 +226,68 @@ export type JobsFacadeOf<TJobs extends ContractJobsMetadata, TTrellisApi extends
245
226
  };
246
227
  type ServiceEventName<TA extends TrellisAPI> = keyof TA["events"] & string;
247
228
  type ServiceEventOf<TA extends TrellisAPI, E extends ServiceEventName<TA>> = TA["events"][E] extends EventDesc<infer TEvent> ? InferSchemaType<TEvent> : never;
248
- type ServiceEventPayloadOf<TA extends TrellisAPI, E extends ServiceEventName<TA>> = Omit<ServiceEventOf<TA, E>, "header">;
249
- type BoundEventHandleFn<TEventApi extends TrellisAPI, TTrellisApi extends TrellisAPI, E extends ServiceEventName<TEventApi>, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata, TDeps> = (args: {
250
- event: ServiceEventOf<TEventApi, E>;
251
- context: EventListenerContext;
252
- client: Trellis<TTrellisApi, TKv, TJobs>;
253
- deps: TDeps;
254
- }) => MaybeAsync<void, BaseError>;
255
- type BoundActiveEventFacade<TEventApi extends TrellisAPI, TTrellisApi extends TrellisAPI, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata, TDeps> = {
229
+ type ServiceEventPayloadOf<TA extends TrellisAPI, E extends ServiceEventName<TA>> = ServiceEventOf<TA, E> & Record<string, unknown>;
230
+ /** Runs SQL outbox work inside a caller-owned service database transaction. */
231
+ export type SqlOutboxTransactionRunner<TTx> = <TResult>(work: (context: {
232
+ tx: TTx;
233
+ executor: SqlExecutor;
234
+ }) => Promise<TResult> | TResult) => Promise<TResult>;
235
+ /** Options shared by all Trellis SQL outbox service bindings. */
236
+ export type TrellisServiceSqlOutboxCommonOptions = {
237
+ /** SQL dialect used by the Trellis helper tables. */
238
+ readonly dialect: SqlDialect;
239
+ /** Optional Trellis helper-table names; omitted names use Trellis defaults. */
240
+ readonly tables?: Partial<SqlOutboxTables>;
241
+ /** Optional process-local dispatcher tuning. */
242
+ readonly dispatcher?: OutboxDispatcherOptions;
243
+ };
244
+ /** Options for binding a Trellis service to generic caller-owned SQL storage. */
245
+ export type TrellisServiceSqlOutboxExecutorOptions<TTx> = TrellisServiceSqlOutboxCommonOptions & {
246
+ /** Non-transactional executor used by the process-local dispatcher. */
247
+ readonly executor: SqlExecutor;
248
+ /** Service-owned transaction runner for handler-scoped work. */
249
+ readonly transaction: SqlOutboxTransactionRunner<TTx>;
250
+ };
251
+ /** Options for binding a Trellis service to caller-owned SQL outbox storage. */
252
+ export type TrellisServiceSqlOutboxOptions<TTx> = TrellisServiceSqlOutboxExecutorOptions<TTx>;
253
+ /** Typed transaction-scoped event facade that enqueues prepared events. */
254
+ export type SqlOutboxEventEnqueueFacade<TEventApi extends TrellisAPI = TrellisAPI> = {
256
255
  readonly [TGroup in SurfaceGroupName<ServiceEventName<TEventApi>>]: {
257
256
  readonly [E in SurfaceKeysForGroup<ServiceEventName<TEventApi>, TGroup> as SurfaceLeafName<E>]: {
258
- prepare(event: ServiceEventPayloadOf<TEventApi, E>): Result<PreparedTrellisEvent<ServiceEventPayloadOf<TEventApi, E>>, ValidationError | UnexpectedError>;
259
- publish(event: ServiceEventPayloadOf<TEventApi, E>): AsyncResult<void, ValidationError | UnexpectedError>;
260
- listen(handler: BoundEventHandleFn<TEventApi, TTrellisApi, E, TKv, TJobs, TDeps>, subjectData?: Record<string, unknown>, opts?: EventOpts): AsyncResult<void, ValidationError | UnexpectedError>;
261
- };
262
- };
263
- };
264
- type BoundRpcHandleFn<TOwnedApi extends TrellisAPI, TTrellisApi extends TrellisAPI, M extends RpcMethodName<TOwnedApi>, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata, TDeps> = (args: {
265
- input: RpcMethodInput<TOwnedApi, M>;
266
- context: RpcHandlerContext;
267
- client: Trellis<TTrellisApi, TKv, TJobs>;
268
- deps: TDeps;
269
- }) => Promise<Result<RpcMethodOutput<TOwnedApi, M>, RpcHandlerErrorOf<TOwnedApi, M>>> | Result<RpcMethodOutput<TOwnedApi, M>, RpcHandlerErrorOf<TOwnedApi, M>>;
270
- type BoundFeedHandleFn<TOwnedApi extends TrellisAPI, TTrellisApi extends TrellisAPI, F extends keyof TOwnedApi["feeds"] & string, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata, TDeps> = (context: {
271
- input: FeedInputOf<TOwnedApi, F>;
272
- caller: unknown;
273
- signal: AbortSignal;
274
- emit(event: FeedEventOf<TOwnedApi, F>): AsyncResult<void, ValidationError | UnexpectedError>;
275
- client: Trellis<TTrellisApi, TKv, TJobs>;
276
- deps: TDeps;
277
- }) => unknown | Promise<unknown>;
278
- type BoundOperationHandleFn<TOwnedApi extends TrellisAPI, TTrellisApi extends TrellisAPI, O extends keyof TOwnedApi["operations"] & string, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata, TDeps> = ((handler: (context: OperationHandlerContext<InferSchemaType<TOwnedApi["operations"][O]["input"]>, OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationTransferContextOf<TOwnedApi, O>> & {
279
- client: Trellis<TTrellisApi, TKv, TJobs>;
280
- deps: TDeps;
281
- }) => unknown | Promise<unknown>) => Promise<void>) & Pick<OperationHandleFn<TOwnedApi, TTrellisApi, O, TKv, TJobs>, "accept" | "control">;
282
- type BoundTypedServiceHandleFacade<TOwnedApi extends TrellisAPI, TTrellisApi extends TrellisAPI, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata, TDeps> = {
283
- readonly rpc: {
284
- readonly [TGroup in SurfaceGroupName<RpcMethodName<TOwnedApi>>]: {
285
- readonly [M in SurfaceKeysForGroup<RpcMethodName<TOwnedApi>, TGroup> as SurfaceLeafName<M>]: (handler: BoundRpcHandleFn<TOwnedApi, TTrellisApi, M, TKv, TJobs, TDeps>) => Promise<void>;
286
- };
287
- };
288
- readonly feed: {
289
- readonly [TGroup in SurfaceGroupName<keyof TOwnedApi["feeds"] & string>]: {
290
- readonly [F in SurfaceKeysForGroup<keyof TOwnedApi["feeds"] & string, TGroup> as SurfaceLeafName<F>]: (handler: BoundFeedHandleFn<TOwnedApi, TTrellisApi, F, TKv, TJobs, TDeps>) => Promise<void>;
291
- };
292
- };
293
- readonly operation: {
294
- readonly [TGroup in SurfaceGroupName<keyof TOwnedApi["operations"] & string>]: {
295
- readonly [O in SurfaceKeysForGroup<keyof TOwnedApi["operations"] & string, TGroup> as SurfaceLeafName<O>]: BoundOperationHandleFn<TOwnedApi, TTrellisApi, O, TKv, TJobs, TDeps>;
257
+ enqueue(event: ServiceEventPayloadOf<TEventApi, E>): AsyncResult<OutboxMessage, ValidationError | UnexpectedError>;
296
258
  };
297
259
  };
298
260
  };
299
- type BoundJobQueue<TPayload, TResult, TTrellisApi extends TrellisAPI, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata, TDeps> = {
300
- create(payload: TPayload): AsyncResult<JobRef<TPayload, TResult>, BaseError>;
301
- handle(handler: (args: {
302
- job: PublicActiveJob<TPayload, TResult>;
303
- client: Trellis<TTrellisApi, TKv, TJobs>;
304
- deps: TDeps;
305
- }) => Promise<Result<TResult, BaseError>>): void;
261
+ /** Returned by outbox.job.<queue>.create/submit inside a transaction. */
262
+ export type SqlOutboxJobSubmission = {
263
+ readonly submissionId: string;
264
+ readonly jobId: string;
265
+ readonly queue: string;
266
+ readonly mode: "create" | "submit";
306
267
  };
307
- type BoundJobsFacadeOf<TJobs extends ContractJobsMetadata, TTrellisApi extends TrellisAPI, TKv extends ContractKvMetadata, TDeps> = {
308
- [K in keyof TJobs]: BoundJobQueue<TJobs[K]["payload"], TJobs[K]["result"], TTrellisApi, TKv, TJobs, TDeps>;
268
+ /** Transaction-scoped facade for enqueuing job creation/submission intents. */
269
+ export type SqlOutboxJobEnqueueFacade<TJobs extends ContractJobsMetadata> = {
270
+ readonly [K in keyof TJobs]: {
271
+ create(payload: TJobs[K]["payload"]): AsyncResult<SqlOutboxJobSubmission, ValidationError | UnexpectedError>;
272
+ submit(payload: TJobs[K]["payload"]): AsyncResult<SqlOutboxJobSubmission, ValidationError | UnexpectedError>;
273
+ };
309
274
  };
310
- type BoundServiceHealth<TDeps> = Omit<ServiceHealth, "add" | "setInfo"> & {
311
- setInfo(info: ServiceHealthInfo | HealthInfoHandler<TDeps>): void;
312
- add(name: string, check: HealthCheckHandler<TDeps>): () => void;
275
+ /** Context supplied to `outbox.transaction(...)` work callbacks. */
276
+ export type SqlOutboxTransactionContext<TTx, TEventApi extends TrellisAPI = TrellisAPI, TJobs extends ContractJobsMetadata = ContractJobsMetadata> = {
277
+ /** Service-owned transaction object supplied by the configured runner. */
278
+ readonly tx: TTx;
279
+ /** Transaction-scoped typed event enqueue facade. */
280
+ readonly event: SqlOutboxEventEnqueueFacade<TEventApi>;
281
+ /** Transaction-scoped typed job enqueue facade. */
282
+ readonly job: SqlOutboxJobEnqueueFacade<TJobs>;
313
283
  };
314
- /** Service wrapper returned by `TrellisService.with(deps)`. */
315
- export type BoundTrellisService<TOwnedApi extends TrellisAPI = TrellisAPI, TTrellisApi extends TrellisAPI = TOwnedApi, TJobs extends ContractJobsMetadata = {}, TKv extends ContractKvMetadata = ContractKvMetadata, TDeps = unknown> = Pick<TrellisService<TOwnedApi, TTrellisApi, TJobs, TKv>, "name" | "auth" | "kv" | "store" | "connection" | "createTransfer" | "completeOperation" | "publishPrepared" | "wait" | "stop"> & {
316
- readonly event: BoundActiveEventFacade<TTrellisApi, TTrellisApi, TKv, TJobs, TDeps>;
317
- readonly health: BoundServiceHealth<TDeps>;
318
- readonly jobs: BoundJobsFacadeOf<TJobs, TTrellisApi, TKv, TDeps>;
319
- readonly handle: BoundTypedServiceHandleFacade<TOwnedApi, TTrellisApi, TKv, TJobs, TDeps>;
320
- /** Returns a new bound wrapper that injects the provided dependencies. */
321
- with<TNextDeps>(deps: TNextDeps): BoundTrellisService<TOwnedApi, TTrellisApi, TJobs, TKv, TNextDeps>;
284
+ /** Startup-created SQL outbox dependency for transactional event/job enqueue. */
285
+ export type SqlOutbox<TTx, TEventApi extends TrellisAPI = TrellisAPI, TJobs extends ContractJobsMetadata = ContractJobsMetadata> = {
286
+ /**
287
+ * Runs service DB work and typed event/job enqueue operations in one SQL
288
+ * transaction, notifying the dispatcher once after a successful commit.
289
+ */
290
+ transaction<TResult>(work: (context: SqlOutboxTransactionContext<TTx, TEventApi, TJobs>) => Promise<TResult> | TResult): AsyncResult<TResult, ValidationError | UnexpectedError>;
322
291
  };
323
292
  type PascalSurfaceName<T extends string> = T extends `${infer Head}.${infer Tail}` ? `${Capitalize<Head>}${PascalSurfaceName<Tail>}` : Capitalize<T>;
324
293
  type LowerCamelSurfaceName<T extends string> = Uncapitalize<PascalSurfaceName<T>>;
@@ -354,24 +323,24 @@ type FeedHandleFn<TOwnedApi extends TrellisAPI, TTrellisApi extends TrellisAPI,
354
323
  emit(event: FeedEventOf<TOwnedApi, F>): AsyncResult<void, ValidationError | UnexpectedError>;
355
324
  client: Trellis<TTrellisApi, TKv, TJobs>;
356
325
  }) => unknown | Promise<unknown>;
357
- type OperationHandleFn<TOwnedApi extends TrellisAPI, TTrellisApi extends TrellisAPI, O extends keyof TOwnedApi["operations"] & string, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata> = ((handler: (context: OperationHandlerContext<InferSchemaType<TOwnedApi["operations"][O]["input"]>, OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationTransferContextOf<TOwnedApi, O>> & {
326
+ type OperationHandleFn<TOwnedApi extends TrellisAPI, TTrellisApi extends TrellisAPI, O extends keyof TOwnedApi["operations"] & string, TKv extends ContractKvMetadata, TJobs extends ContractJobsMetadata> = ((handler: (context: OperationHandlerContext<InferSchemaType<TOwnedApi["operations"][O]["input"]>, OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationTransferContextOf<TOwnedApi, O>, OperationHandlerErrorOf<TOwnedApi, O>> & {
358
327
  client: Trellis<TTrellisApi, TKv, TJobs>;
359
328
  }) => unknown | Promise<unknown>) => Promise<void>) & {
360
329
  accept(args: {
361
330
  sessionKey: string;
362
- }): AsyncResult<AcceptedOperation<OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>>, UnexpectedError>;
363
- control(operationId: string): AsyncResult<OperationRuntimeHandle<OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>>, BaseError>;
331
+ }): AsyncResult<AcceptedOperation<OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationHandlerErrorOf<TOwnedApi, O>>, UnexpectedError>;
332
+ control(operationId: string): AsyncResult<OperationRuntimeHandle<OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationHandlerErrorOf<TOwnedApi, O>>, BaseError>;
364
333
  };
365
334
  export type OperationRegistration<TOwnedApi extends TrellisAPI, TTrellisApi extends TrellisAPI, O extends keyof TOwnedApi["operations"] & string, TKv extends ContractKvMetadata = ContractKvMetadata, TJobs extends ContractJobsMetadata = {}> = {
366
335
  accept(args: {
367
336
  sessionKey: string;
368
- }): AsyncResult<AcceptedOperation<OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>>, UnexpectedError>;
337
+ }): AsyncResult<AcceptedOperation<OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationHandlerErrorOf<TOwnedApi, O>>, UnexpectedError>;
369
338
  /**
370
339
  * Loads an existing operation by id and returns a service-side control handle.
371
340
  * The operation must belong to this service and registration name.
372
341
  */
373
- control(operationId: string): AsyncResult<OperationRuntimeHandle<OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>>, BaseError>;
374
- handle(handler: (args: OperationHandlerContext<InferSchemaType<TOwnedApi["operations"][O]["input"]>, OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationTransferContextOf<TOwnedApi, O>> & {
342
+ control(operationId: string): AsyncResult<OperationRuntimeHandle<OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationHandlerErrorOf<TOwnedApi, O>>, BaseError>;
343
+ handle(handler: (args: OperationHandlerContext<InferSchemaType<TOwnedApi["operations"][O]["input"]>, OperationProgressOf<TOwnedApi, O>, OperationOutputOf<TOwnedApi, O>, OperationTransferContextOf<TOwnedApi, O>, OperationHandlerErrorOf<TOwnedApi, O>> & {
375
344
  client: Trellis<TTrellisApi, TKv, TJobs>;
376
345
  }) => unknown | Promise<unknown>): Promise<void>;
377
346
  };
@@ -408,10 +377,10 @@ export declare class TrellisService<TOwnedApi extends TrellisAPI = TrellisAPI, T
408
377
  readonly connection: TrellisConnection;
409
378
  private constructor();
410
379
  /**
411
- * Returns a service wrapper that injects application dependencies into
412
- * service-owned handler argument objects as `args.deps`.
380
+ * Creates an explicit SQL outbox helper for service-owned transactions.
381
+ * Services should create this at startup and close over it in handlers.
413
382
  */
414
- with<TDeps>(deps: TDeps): BoundTrellisService<TOwnedApi, TTrellisApi, TJobs, TKv, TDeps>;
383
+ createSqlOutbox<TTx>(options: TrellisServiceSqlOutboxExecutorOptions<TTx>): SqlOutbox<TTx, TTrellisApi, TJobs>;
415
384
  /** Publishes a prepared event through the service runtime connection. */
416
385
  publishPrepared(event: PreparedTrellisEvent): AsyncResult<void, UnexpectedError>;
417
386
  /**