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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/esm/auth/mod.d.ts +1 -1
  2. package/esm/auth/mod.d.ts.map +1 -1
  3. package/esm/auth/mod.js +1 -1
  4. package/esm/auth/protocol.d.ts +416 -398
  5. package/esm/auth/protocol.d.ts.map +1 -1
  6. package/esm/auth/protocol.js +35 -33
  7. package/esm/codec.d.ts +1 -0
  8. package/esm/codec.d.ts.map +1 -1
  9. package/esm/codec.js +1 -0
  10. package/esm/contract_support/canonical.d.ts +3 -0
  11. package/esm/contract_support/canonical.d.ts.map +1 -1
  12. package/esm/contract_support/canonical.js +3 -0
  13. package/esm/contract_support/mod.d.ts +28 -4
  14. package/esm/contract_support/mod.d.ts.map +1 -1
  15. package/esm/contract_support/mod.js +85 -4
  16. package/esm/contract_support/protocol.d.ts +92 -7
  17. package/esm/contract_support/protocol.d.ts.map +1 -1
  18. package/esm/contract_support/protocol.js +40 -6
  19. package/esm/errors/index.d.ts +9 -9
  20. package/esm/generated-sdk/auth/api.d.ts +4 -1
  21. package/esm/generated-sdk/auth/api.d.ts.map +1 -1
  22. package/esm/generated-sdk/auth/api.js +6 -1
  23. package/esm/generated-sdk/auth/client.d.ts +47 -32
  24. package/esm/generated-sdk/auth/client.d.ts.map +1 -1
  25. package/esm/generated-sdk/auth/contract.d.ts +1 -1
  26. package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
  27. package/esm/generated-sdk/auth/contract.js +1570 -1202
  28. package/esm/generated-sdk/auth/schemas.d.ts +1757 -1759
  29. package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
  30. package/esm/generated-sdk/auth/schemas.js +963 -768
  31. package/esm/generated-sdk/auth/types.d.ts +292 -302
  32. package/esm/generated-sdk/auth/types.d.ts.map +1 -1
  33. package/esm/generated-sdk/auth/types.js +1 -1
  34. package/esm/generated-sdk/health/client.d.ts +4 -4
  35. package/esm/generated-sdk/health/client.d.ts.map +1 -1
  36. package/esm/generated-sdk/health/contract.d.ts +1 -1
  37. package/esm/generated-sdk/health/contract.d.ts.map +1 -1
  38. package/esm/generated-sdk/health/contract.js +2 -10
  39. package/esm/generated-sdk/health/schemas.d.ts +1 -14
  40. package/esm/generated-sdk/health/schemas.d.ts.map +1 -1
  41. package/esm/generated-sdk/health/schemas.js +1 -9
  42. package/esm/generated-sdk/health/types.d.ts +3 -5
  43. package/esm/generated-sdk/health/types.d.ts.map +1 -1
  44. package/esm/generated-sdk/health/types.js +1 -2
  45. package/esm/generated-sdk/jobs/api.d.ts +13 -0
  46. package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
  47. package/esm/generated-sdk/jobs/client.d.ts +6 -4
  48. package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
  49. package/esm/generated-sdk/jobs/contract.d.ts +14 -1
  50. package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
  51. package/esm/generated-sdk/jobs/contract.js +268 -1
  52. package/esm/generated-sdk/jobs/owned_api.d.ts +13 -0
  53. package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  54. package/esm/generated-sdk/jobs/owned_api.js +20 -1
  55. package/esm/generated-sdk/jobs/schemas.d.ts +437 -0
  56. package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
  57. package/esm/generated-sdk/jobs/schemas.js +211 -0
  58. package/esm/generated-sdk/jobs/types.d.ts +123 -1
  59. package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
  60. package/esm/generated-sdk/jobs/types.js +1 -1
  61. package/esm/generated-sdk/state/client.d.ts +4 -4
  62. package/esm/generated-sdk/state/client.d.ts.map +1 -1
  63. package/esm/generated-sdk/trellis-core/api.d.ts +4 -1
  64. package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
  65. package/esm/generated-sdk/trellis-core/api.js +6 -1
  66. package/esm/generated-sdk/trellis-core/client.d.ts +28 -3
  67. package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
  68. package/esm/generated-sdk/trellis-core/contract.d.ts +1 -1
  69. package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  70. package/esm/generated-sdk/trellis-core/contract.js +91 -1
  71. package/esm/generated-sdk/trellis-core/schemas.d.ts +113 -0
  72. package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  73. package/esm/generated-sdk/trellis-core/schemas.js +81 -0
  74. package/esm/generated-sdk/trellis-core/types.d.ts +23 -1
  75. package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
  76. package/esm/generated-sdk/trellis-core/types.js +1 -1
  77. package/esm/health.d.ts +1 -1
  78. package/esm/health.d.ts.map +1 -1
  79. package/esm/health.js +1 -1
  80. package/esm/index.d.ts +2 -2
  81. package/esm/index.d.ts.map +1 -1
  82. package/esm/index.js +1 -1
  83. package/esm/jobs.d.ts +69 -3
  84. package/esm/jobs.d.ts.map +1 -1
  85. package/esm/jobs.js +92 -3
  86. package/esm/server/health.d.ts +2 -6
  87. package/esm/server/health.d.ts.map +1 -1
  88. package/esm/server/health_schemas.d.ts +0 -8
  89. package/esm/server/health_schemas.d.ts.map +1 -1
  90. package/esm/server/health_schemas.js +0 -5
  91. package/esm/server/internal_jobs/bindings.d.ts +11 -0
  92. package/esm/server/internal_jobs/bindings.d.ts.map +1 -1
  93. package/esm/server/internal_jobs/job-manager.d.ts +44 -1
  94. package/esm/server/internal_jobs/job-manager.d.ts.map +1 -1
  95. package/esm/server/internal_jobs/job-manager.js +361 -51
  96. package/esm/server/internal_jobs/key-coordinator.d.ts +260 -0
  97. package/esm/server/internal_jobs/key-coordinator.d.ts.map +1 -0
  98. package/esm/server/internal_jobs/key-coordinator.js +580 -0
  99. package/esm/server/internal_jobs/projection.d.ts.map +1 -1
  100. package/esm/server/internal_jobs/projection.js +2 -0
  101. package/esm/server/internal_jobs/runtime-worker.d.ts +5 -1
  102. package/esm/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  103. package/esm/server/internal_jobs/runtime-worker.js +14 -2
  104. package/esm/server/internal_jobs/types.d.ts +5 -5
  105. package/esm/server/internal_jobs/types.d.ts.map +1 -1
  106. package/esm/server/internal_jobs/types.js +6 -0
  107. package/esm/server/service.d.ts +8 -3
  108. package/esm/server/service.d.ts.map +1 -1
  109. package/esm/server/service.js +127 -6
  110. package/esm/service/drizzle.d.ts +27 -0
  111. package/esm/service/drizzle.d.ts.map +1 -0
  112. package/esm/service/drizzle.js +84 -0
  113. package/esm/service/mod.d.ts +1 -1
  114. package/esm/service/mod.d.ts.map +1 -1
  115. package/esm/service/mod.js +1 -1
  116. package/esm/service/outbox_inbox.d.ts.map +1 -1
  117. package/esm/service/outbox_inbox.js +13 -2
  118. package/esm/trellis.d.ts +24 -8
  119. package/esm/trellis.d.ts.map +1 -1
  120. package/esm/trellis.js +44 -22
  121. package/package.json +14 -2
  122. package/script/auth/mod.d.ts +1 -1
  123. package/script/auth/mod.d.ts.map +1 -1
  124. package/script/auth/mod.js +22 -6
  125. package/script/auth/protocol.d.ts +416 -398
  126. package/script/auth/protocol.d.ts.map +1 -1
  127. package/script/auth/protocol.js +40 -37
  128. package/script/codec.d.ts +1 -0
  129. package/script/codec.d.ts.map +1 -1
  130. package/script/codec.js +1 -0
  131. package/script/contract_support/canonical.d.ts +3 -0
  132. package/script/contract_support/canonical.d.ts.map +1 -1
  133. package/script/contract_support/canonical.js +3 -0
  134. package/script/contract_support/mod.d.ts +28 -4
  135. package/script/contract_support/mod.d.ts.map +1 -1
  136. package/script/contract_support/mod.js +90 -4
  137. package/script/contract_support/protocol.d.ts +92 -7
  138. package/script/contract_support/protocol.d.ts.map +1 -1
  139. package/script/contract_support/protocol.js +41 -7
  140. package/script/errors/index.d.ts +9 -9
  141. package/script/generated-sdk/auth/api.d.ts +4 -1
  142. package/script/generated-sdk/auth/api.d.ts.map +1 -1
  143. package/script/generated-sdk/auth/api.js +6 -1
  144. package/script/generated-sdk/auth/client.d.ts +47 -32
  145. package/script/generated-sdk/auth/client.d.ts.map +1 -1
  146. package/script/generated-sdk/auth/contract.d.ts +1 -1
  147. package/script/generated-sdk/auth/contract.d.ts.map +1 -1
  148. package/script/generated-sdk/auth/contract.js +1570 -1202
  149. package/script/generated-sdk/auth/schemas.d.ts +1757 -1759
  150. package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
  151. package/script/generated-sdk/auth/schemas.js +963 -768
  152. package/script/generated-sdk/auth/types.d.ts +292 -302
  153. package/script/generated-sdk/auth/types.d.ts.map +1 -1
  154. package/script/generated-sdk/auth/types.js +1 -1
  155. package/script/generated-sdk/health/client.d.ts +4 -4
  156. package/script/generated-sdk/health/client.d.ts.map +1 -1
  157. package/script/generated-sdk/health/contract.d.ts +1 -1
  158. package/script/generated-sdk/health/contract.d.ts.map +1 -1
  159. package/script/generated-sdk/health/contract.js +2 -10
  160. package/script/generated-sdk/health/schemas.d.ts +1 -14
  161. package/script/generated-sdk/health/schemas.d.ts.map +1 -1
  162. package/script/generated-sdk/health/schemas.js +1 -9
  163. package/script/generated-sdk/health/types.d.ts +3 -5
  164. package/script/generated-sdk/health/types.d.ts.map +1 -1
  165. package/script/generated-sdk/health/types.js +1 -2
  166. package/script/generated-sdk/jobs/api.d.ts +13 -0
  167. package/script/generated-sdk/jobs/api.d.ts.map +1 -1
  168. package/script/generated-sdk/jobs/client.d.ts +6 -4
  169. package/script/generated-sdk/jobs/client.d.ts.map +1 -1
  170. package/script/generated-sdk/jobs/contract.d.ts +14 -1
  171. package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
  172. package/script/generated-sdk/jobs/contract.js +268 -1
  173. package/script/generated-sdk/jobs/owned_api.d.ts +13 -0
  174. package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  175. package/script/generated-sdk/jobs/owned_api.js +19 -0
  176. package/script/generated-sdk/jobs/schemas.d.ts +437 -0
  177. package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
  178. package/script/generated-sdk/jobs/schemas.js +212 -1
  179. package/script/generated-sdk/jobs/types.d.ts +123 -1
  180. package/script/generated-sdk/jobs/types.d.ts.map +1 -1
  181. package/script/generated-sdk/jobs/types.js +1 -1
  182. package/script/generated-sdk/state/client.d.ts +4 -4
  183. package/script/generated-sdk/state/client.d.ts.map +1 -1
  184. package/script/generated-sdk/trellis-core/api.d.ts +4 -1
  185. package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
  186. package/script/generated-sdk/trellis-core/api.js +6 -1
  187. package/script/generated-sdk/trellis-core/client.d.ts +28 -3
  188. package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
  189. package/script/generated-sdk/trellis-core/contract.d.ts +1 -1
  190. package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  191. package/script/generated-sdk/trellis-core/contract.js +91 -1
  192. package/script/generated-sdk/trellis-core/schemas.d.ts +113 -0
  193. package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  194. package/script/generated-sdk/trellis-core/schemas.js +81 -0
  195. package/script/generated-sdk/trellis-core/types.d.ts +23 -1
  196. package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
  197. package/script/generated-sdk/trellis-core/types.js +1 -1
  198. package/script/health.d.ts +1 -1
  199. package/script/health.d.ts.map +1 -1
  200. package/script/health.js +1 -2
  201. package/script/index.d.ts +2 -2
  202. package/script/index.d.ts.map +1 -1
  203. package/script/index.js +2 -3
  204. package/script/jobs.d.ts +69 -3
  205. package/script/jobs.d.ts.map +1 -1
  206. package/script/jobs.js +93 -3
  207. package/script/server/health.d.ts +2 -6
  208. package/script/server/health.d.ts.map +1 -1
  209. package/script/server/health_schemas.d.ts +0 -8
  210. package/script/server/health_schemas.d.ts.map +1 -1
  211. package/script/server/health_schemas.js +1 -6
  212. package/script/server/internal_jobs/bindings.d.ts +11 -0
  213. package/script/server/internal_jobs/bindings.d.ts.map +1 -1
  214. package/script/server/internal_jobs/job-manager.d.ts +44 -1
  215. package/script/server/internal_jobs/job-manager.d.ts.map +1 -1
  216. package/script/server/internal_jobs/job-manager.js +361 -51
  217. package/script/server/internal_jobs/key-coordinator.d.ts +260 -0
  218. package/script/server/internal_jobs/key-coordinator.d.ts.map +1 -0
  219. package/script/server/internal_jobs/key-coordinator.js +593 -0
  220. package/script/server/internal_jobs/projection.d.ts.map +1 -1
  221. package/script/server/internal_jobs/projection.js +2 -0
  222. package/script/server/internal_jobs/runtime-worker.d.ts +5 -1
  223. package/script/server/internal_jobs/runtime-worker.d.ts.map +1 -1
  224. package/script/server/internal_jobs/runtime-worker.js +14 -2
  225. package/script/server/internal_jobs/types.d.ts +5 -5
  226. package/script/server/internal_jobs/types.d.ts.map +1 -1
  227. package/script/server/internal_jobs/types.js +6 -0
  228. package/script/server/service.d.ts +8 -3
  229. package/script/server/service.d.ts.map +1 -1
  230. package/script/server/service.js +126 -5
  231. package/script/service/drizzle.d.ts +27 -0
  232. package/script/service/drizzle.d.ts.map +1 -0
  233. package/script/service/drizzle.js +88 -0
  234. package/script/service/mod.d.ts +1 -1
  235. package/script/service/mod.d.ts.map +1 -1
  236. package/script/service/mod.js +1 -2
  237. package/script/service/outbox_inbox.d.ts.map +1 -1
  238. package/script/service/outbox_inbox.js +13 -2
  239. package/script/trellis.d.ts +24 -8
  240. package/script/trellis.d.ts.map +1 -1
  241. package/script/trellis.js +44 -22
  242. package/src/auth/mod.ts +28 -2
  243. package/src/auth/protocol.ts +72 -37
  244. package/src/codec.ts +1 -0
  245. package/src/contract_support/canonical.ts +3 -0
  246. package/src/contract_support/mod.ts +158 -5
  247. package/src/contract_support/protocol.ts +56 -9
  248. package/src/health.ts +0 -1
  249. package/src/index.ts +2 -1
  250. package/src/jobs.ts +138 -1
  251. package/src/sdk/_generated/auth/api.ts +9 -2
  252. package/src/sdk/_generated/auth/client.ts +85 -78
  253. package/src/sdk/_generated/auth/contract.ts +1803 -1435
  254. package/src/sdk/_generated/auth/schemas.ts +1166 -971
  255. package/src/sdk/_generated/auth/types.ts +330 -314
  256. package/src/sdk/_generated/core/api.ts +9 -2
  257. package/src/sdk/_generated/core/client.ts +41 -2
  258. package/src/sdk/_generated/core/contract.ts +91 -1
  259. package/src/sdk/_generated/core/schemas.ts +81 -0
  260. package/src/sdk/_generated/core/types.ts +23 -1
  261. package/src/sdk/_generated/health/client.ts +6 -6
  262. package/src/sdk/_generated/health/contract.ts +2 -10
  263. package/src/sdk/_generated/health/schemas.ts +1 -9
  264. package/src/sdk/_generated/health/types.ts +6 -2
  265. package/src/sdk/_generated/jobs/client.ts +17 -6
  266. package/src/sdk/_generated/jobs/contract.ts +269 -1
  267. package/src/sdk/_generated/jobs/owned_api.ts +21 -0
  268. package/src/sdk/_generated/jobs/schemas.ts +213 -0
  269. package/src/sdk/_generated/jobs/types.ts +116 -1
  270. package/src/sdk/_generated/state/client.ts +6 -6
  271. package/src/server/health.ts +2 -6
  272. package/src/server/health_schemas.ts +0 -6
  273. package/src/server/internal_jobs/bindings.ts +11 -0
  274. package/src/server/internal_jobs/job-manager.ts +436 -16
  275. package/src/server/internal_jobs/key-coordinator.ts +955 -0
  276. package/src/server/internal_jobs/projection.ts +2 -0
  277. package/src/server/internal_jobs/runtime-worker.ts +17 -1
  278. package/src/server/internal_jobs/types.ts +6 -0
  279. package/src/server/service.ts +168 -9
  280. package/src/service/drizzle.ts +125 -0
  281. package/src/service/mod.ts +0 -1
  282. package/src/service/outbox_inbox.ts +16 -6
  283. package/src/trellis.ts +76 -27
@@ -1,12 +1,15 @@
1
1
  // Generated from ./generated/contracts/manifests/trellis.core@v1.json
2
2
  import { OWNED_API } from "./owned_api.js";
3
+ import { OWNED_API as HealthApi } from "../health/mod.js";
3
4
 
4
5
  export { OWNED_API };
5
6
 
6
7
  export type UsedApi = {
7
8
  rpc: {};
8
9
  operations: {};
9
- events: {};
10
+ events: {
11
+ readonly "Health.Heartbeat": typeof HealthApi.events["Health.Heartbeat"];
12
+ };
10
13
  feeds: {};
11
14
  subjects: {};
12
15
  };
@@ -14,7 +17,11 @@ export type UsedApi = {
14
17
  export const USED_API: UsedApi = {
15
18
  rpc: {},
16
19
  operations: {},
17
- events: {},
20
+ events: {
21
+ get "Health.Heartbeat"() {
22
+ return HealthApi.events["Health.Heartbeat"];
23
+ },
24
+ },
18
25
  feeds: {},
19
26
  subjects: {},
20
27
  };
@@ -33,6 +33,7 @@ import type {
33
33
  } from "../../../index.js";
34
34
  import type { API, Api } from "./api.js";
35
35
  import type * as Types from "./types.js";
36
+ import type * as HealthSdk from "../health/mod.js";
36
37
 
37
38
  type WithDeps<TDeps> = [TDeps] extends [undefined] ? {} : { deps: TDeps };
38
39
 
@@ -110,7 +111,26 @@ export interface TrellisCoreClient {
110
111
  ): AsyncResult<Types.TrellisSurfaceStatusOutput, BaseError>;
111
112
  };
112
113
  };
113
- readonly event: {};
114
+ readonly event: {
115
+ readonly health: {
116
+ heartbeat: {
117
+ publish(
118
+ event: HealthSdk.HealthHeartbeatEvent,
119
+ ): AsyncResult<void, ValidationError | UnexpectedError>;
120
+ prepare(
121
+ event: HealthSdk.HealthHeartbeatEvent,
122
+ ): Result<
123
+ PreparedTrellisEvent<HealthSdk.HealthHeartbeatEvent>,
124
+ ValidationError | UnexpectedError
125
+ >;
126
+ listen(
127
+ handler: EventCallback<HealthSdk.HealthHeartbeatEvent>,
128
+ subjectData?: Record<string, unknown>,
129
+ opts?: EventOpts,
130
+ ): AsyncResult<void, ValidationError | UnexpectedError>;
131
+ };
132
+ };
133
+ };
114
134
  readonly feed: {};
115
135
  readonly operation: {};
116
136
  wait(): AsyncResult<void, BaseError>;
@@ -127,7 +147,26 @@ export type ServiceWithDeps<TDeps> = Omit<TrellisCoreClient, "event"> & {
127
147
  with<TNextDeps>(deps: TNextDeps): ServiceWithDeps<TNextDeps>;
128
148
  };
129
149
 
130
- export type ServiceEventSurface<TDeps> = {};
150
+ export interface ServiceEventSurface<TDeps> {
151
+ readonly health: {
152
+ heartbeat: {
153
+ publish(
154
+ event: HealthSdk.HealthHeartbeatEvent,
155
+ ): AsyncResult<void, ValidationError | UnexpectedError>;
156
+ prepare(
157
+ event: HealthSdk.HealthHeartbeatEvent,
158
+ ): Result<
159
+ PreparedTrellisEvent<HealthSdk.HealthHeartbeatEvent>,
160
+ ValidationError | UnexpectedError
161
+ >;
162
+ listen(
163
+ handler: ServiceEventHandler<HealthSdk.HealthHeartbeatEvent, TDeps>,
164
+ subjectData?: Record<string, unknown>,
165
+ opts?: EventOpts,
166
+ ): AsyncResult<void, ValidationError | UnexpectedError>;
167
+ };
168
+ };
169
+ }
131
170
 
132
171
  export interface ServiceHandle<TDeps = undefined> {
133
172
  readonly rpc: {
@@ -13,7 +13,7 @@ const CONTRACT_MODULE_METADATA = Symbol.for(
13
13
 
14
14
  export const CONTRACT_ID = "trellis.core@v1" as const;
15
15
  export const CONTRACT_DIGEST =
16
- "L4HW6uUIxDhK1Kpa_PUxpumoMberMgiCgJTNN5Qvje0" as const;
16
+ "1vbZgyhBkgKDSkzqvkwItxObBfaLNdysxFBeTT-Ng2c" as const;
17
17
  export const CONTRACT = {
18
18
  "capabilities": {
19
19
  "trellis.core::catalog.read": {
@@ -170,6 +170,41 @@ export const CONTRACT = {
170
170
  "type": "integer",
171
171
  },
172
172
  "dlq": { "type": "boolean" },
173
+ "keyConcurrency": {
174
+ "properties": {
175
+ "heartbeatIntervalMs": {
176
+ "minimum": 1,
177
+ "type": "integer",
178
+ },
179
+ "heartbeatTtlMs": {
180
+ "minimum": 1,
181
+ "type": "integer",
182
+ },
183
+ "key": {
184
+ "items": { "minLength": 1, "type": "string" },
185
+ "minItems": 1,
186
+ "type": "array",
187
+ },
188
+ "maxActive": {
189
+ "minimum": 1,
190
+ "type": "integer",
191
+ },
192
+ "stalePolicy": {
193
+ "anyOf": [{
194
+ "const": "fail-stale",
195
+ "type": "string",
196
+ }, { "const": "block", "type": "string" }],
197
+ },
198
+ },
199
+ "required": [
200
+ "key",
201
+ "maxActive",
202
+ "heartbeatIntervalMs",
203
+ "heartbeatTtlMs",
204
+ "stalePolicy",
205
+ ],
206
+ "type": "object",
207
+ },
173
208
  "logs": { "type": "boolean" },
174
209
  "maxDeliver": { "minimum": 1, "type": "integer" },
175
210
  "payload": {
@@ -184,6 +219,26 @@ export const CONTRACT = {
184
219
  "minLength": 1,
185
220
  "type": "string",
186
221
  },
222
+ "queue": {
223
+ "properties": {
224
+ "maxQueuedPerKey": {
225
+ "minimum": 0,
226
+ "type": "integer",
227
+ },
228
+ "whenFull": {
229
+ "anyOf": [
230
+ { "const": "reject", "type": "string" },
231
+ { "const": "coalesce", "type": "string" },
232
+ {
233
+ "const": "replace-oldest",
234
+ "type": "string",
235
+ },
236
+ ],
237
+ },
238
+ },
239
+ "required": ["maxQueuedPerKey", "whenFull"],
240
+ "type": "object",
241
+ },
187
242
  "queueType": { "minLength": 1, "type": "string" },
188
243
  "result": {
189
244
  "properties": {
@@ -478,6 +533,29 @@ export const CONTRACT = {
478
533
  "required": ["markdown"],
479
534
  "type": "object",
480
535
  },
536
+ "keyConcurrency": {
537
+ "properties": {
538
+ "heartbeatIntervalMs": {
539
+ "minimum": 1,
540
+ "type": "integer",
541
+ },
542
+ "heartbeatTtlMs": { "minimum": 1, "type": "integer" },
543
+ "key": {
544
+ "items": { "minLength": 1, "type": "string" },
545
+ "minItems": 1,
546
+ "type": "array",
547
+ },
548
+ "maxActive": { "minimum": 1, "type": "integer" },
549
+ "stalePolicy": {
550
+ "anyOf": [
551
+ { "const": "fail-stale", "type": "string" },
552
+ { "const": "block", "type": "string" },
553
+ ],
554
+ },
555
+ },
556
+ "required": ["key"],
557
+ "type": "object",
558
+ },
481
559
  "logs": { "type": "boolean" },
482
560
  "maxDeliver": { "minimum": 1, "type": "integer" },
483
561
  "payload": {
@@ -488,6 +566,18 @@ export const CONTRACT = {
488
566
  "type": "object",
489
567
  },
490
568
  "progress": { "type": "boolean" },
569
+ "queue": {
570
+ "properties": {
571
+ "maxQueuedPerKey": { "minimum": 0, "type": "integer" },
572
+ "whenFull": {
573
+ "anyOf": [{ "const": "reject", "type": "string" }, {
574
+ "const": "coalesce",
575
+ "type": "string",
576
+ }, { "const": "replace-oldest", "type": "string" }],
577
+ },
578
+ },
579
+ "type": "object",
580
+ },
491
581
  "result": {
492
582
  "properties": {
493
583
  "schema": { "minLength": 1, "type": "string" },
@@ -75,6 +75,38 @@ export const TrellisBindingsGetResponseSchema = {
75
75
  "type": "integer",
76
76
  },
77
77
  "dlq": { "type": "boolean" },
78
+ "keyConcurrency": {
79
+ "properties": {
80
+ "heartbeatIntervalMs": {
81
+ "minimum": 1,
82
+ "type": "integer",
83
+ },
84
+ "heartbeatTtlMs": {
85
+ "minimum": 1,
86
+ "type": "integer",
87
+ },
88
+ "key": {
89
+ "items": { "minLength": 1, "type": "string" },
90
+ "minItems": 1,
91
+ "type": "array",
92
+ },
93
+ "maxActive": { "minimum": 1, "type": "integer" },
94
+ "stalePolicy": {
95
+ "anyOf": [{
96
+ "const": "fail-stale",
97
+ "type": "string",
98
+ }, { "const": "block", "type": "string" }],
99
+ },
100
+ },
101
+ "required": [
102
+ "key",
103
+ "maxActive",
104
+ "heartbeatIntervalMs",
105
+ "heartbeatTtlMs",
106
+ "stalePolicy",
107
+ ],
108
+ "type": "object",
109
+ },
78
110
  "logs": { "type": "boolean" },
79
111
  "maxDeliver": { "minimum": 1, "type": "integer" },
80
112
  "payload": {
@@ -86,6 +118,23 @@ export const TrellisBindingsGetResponseSchema = {
86
118
  },
87
119
  "progress": { "type": "boolean" },
88
120
  "publishPrefix": { "minLength": 1, "type": "string" },
121
+ "queue": {
122
+ "properties": {
123
+ "maxQueuedPerKey": {
124
+ "minimum": 0,
125
+ "type": "integer",
126
+ },
127
+ "whenFull": {
128
+ "anyOf": [
129
+ { "const": "reject", "type": "string" },
130
+ { "const": "coalesce", "type": "string" },
131
+ { "const": "replace-oldest", "type": "string" },
132
+ ],
133
+ },
134
+ },
135
+ "required": ["maxQueuedPerKey", "whenFull"],
136
+ "type": "object",
137
+ },
89
138
  "queueType": { "minLength": 1, "type": "string" },
90
139
  "result": {
91
140
  "properties": {
@@ -381,6 +430,26 @@ export const TrellisContractGetResponseSchema = {
381
430
  "required": ["markdown"],
382
431
  "type": "object",
383
432
  },
433
+ "keyConcurrency": {
434
+ "properties": {
435
+ "heartbeatIntervalMs": { "minimum": 1, "type": "integer" },
436
+ "heartbeatTtlMs": { "minimum": 1, "type": "integer" },
437
+ "key": {
438
+ "items": { "minLength": 1, "type": "string" },
439
+ "minItems": 1,
440
+ "type": "array",
441
+ },
442
+ "maxActive": { "minimum": 1, "type": "integer" },
443
+ "stalePolicy": {
444
+ "anyOf": [{ "const": "fail-stale", "type": "string" }, {
445
+ "const": "block",
446
+ "type": "string",
447
+ }],
448
+ },
449
+ },
450
+ "required": ["key"],
451
+ "type": "object",
452
+ },
384
453
  "logs": { "type": "boolean" },
385
454
  "maxDeliver": { "minimum": 1, "type": "integer" },
386
455
  "payload": {
@@ -391,6 +460,18 @@ export const TrellisContractGetResponseSchema = {
391
460
  "type": "object",
392
461
  },
393
462
  "progress": { "type": "boolean" },
463
+ "queue": {
464
+ "properties": {
465
+ "maxQueuedPerKey": { "minimum": 0, "type": "integer" },
466
+ "whenFull": {
467
+ "anyOf": [{ "const": "reject", "type": "string" }, {
468
+ "const": "coalesce",
469
+ "type": "string",
470
+ }, { "const": "replace-oldest", "type": "string" }],
471
+ },
472
+ },
473
+ "type": "object",
474
+ },
394
475
  "result": {
395
476
  "properties": {
396
477
  "schema": { "minLength": 1, "type": "string" },
@@ -4,7 +4,7 @@ import type { API } from "./api.js";
4
4
 
5
5
  export const CONTRACT_ID = "trellis.core@v1" as const;
6
6
  export const CONTRACT_DIGEST =
7
- "L4HW6uUIxDhK1Kpa_PUxpumoMberMgiCgJTNN5Qvje0" as const;
7
+ "1vbZgyhBkgKDSkzqvkwItxObBfaLNdysxFBeTT-Ng2c" as const;
8
8
 
9
9
  export type TrellisBindingsGetInput = { contractId?: string; digest?: string };
10
10
  export type TrellisBindingsGetOutput = {
@@ -35,11 +35,22 @@ export type TrellisBindingsGetOutput = {
35
35
  consumerName: string;
36
36
  defaultDeadlineMs?: number;
37
37
  dlq: boolean;
38
+ keyConcurrency?: {
39
+ heartbeatIntervalMs: number;
40
+ heartbeatTtlMs: number;
41
+ key: Array<string>;
42
+ maxActive: number;
43
+ stalePolicy: "fail-stale" | "block";
44
+ };
38
45
  logs: boolean;
39
46
  maxDeliver: number;
40
47
  payload: { schema: string };
41
48
  progress: boolean;
42
49
  publishPrefix: string;
50
+ queue?: {
51
+ maxQueuedPerKey: number;
52
+ whenFull: "reject" | "coalesce" | "replace-oldest";
53
+ };
43
54
  queueType: string;
44
55
  result?: { schema: string };
45
56
  workSubject: string;
@@ -138,10 +149,21 @@ export type TrellisContractGetOutput = {
138
149
  defaultDeadlineMs?: number;
139
150
  dlq?: boolean;
140
151
  docs?: { markdown: string; summary?: string };
152
+ keyConcurrency?: {
153
+ heartbeatIntervalMs?: number;
154
+ heartbeatTtlMs?: number;
155
+ key: Array<string>;
156
+ maxActive?: number;
157
+ stalePolicy?: "fail-stale" | "block";
158
+ };
141
159
  logs?: boolean;
142
160
  maxDeliver?: number;
143
161
  payload: { schema: string };
144
162
  progress?: boolean;
163
+ queue?: {
164
+ maxQueuedPerKey?: number;
165
+ whenFull?: "reject" | "coalesce" | "replace-oldest";
166
+ };
145
167
  result?: { schema: string };
146
168
  };
147
169
  };
@@ -99,12 +99,12 @@ export interface TrellisHealthClient {
99
99
  readonly health: {
100
100
  heartbeat: {
101
101
  publish(
102
- event: Omit<Types.HealthHeartbeatEvent, "header">,
102
+ event: Types.HealthHeartbeatEvent,
103
103
  ): AsyncResult<void, ValidationError | UnexpectedError>;
104
104
  prepare(
105
- event: Omit<Types.HealthHeartbeatEvent, "header">,
105
+ event: Types.HealthHeartbeatEvent,
106
106
  ): Result<
107
- PreparedTrellisEvent<Omit<Types.HealthHeartbeatEvent, "header">>,
107
+ PreparedTrellisEvent<Types.HealthHeartbeatEvent>,
108
108
  ValidationError | UnexpectedError
109
109
  >;
110
110
  listen(
@@ -135,12 +135,12 @@ export interface ServiceEventSurface<TDeps> {
135
135
  readonly health: {
136
136
  heartbeat: {
137
137
  publish(
138
- event: Omit<Types.HealthHeartbeatEvent, "header">,
138
+ event: Types.HealthHeartbeatEvent,
139
139
  ): AsyncResult<void, ValidationError | UnexpectedError>;
140
140
  prepare(
141
- event: Omit<Types.HealthHeartbeatEvent, "header">,
141
+ event: Types.HealthHeartbeatEvent,
142
142
  ): Result<
143
- PreparedTrellisEvent<Omit<Types.HealthHeartbeatEvent, "header">>,
143
+ PreparedTrellisEvent<Types.HealthHeartbeatEvent>,
144
144
  ValidationError | UnexpectedError
145
145
  >;
146
146
  listen(
@@ -13,7 +13,7 @@ const CONTRACT_MODULE_METADATA = Symbol.for(
13
13
 
14
14
  export const CONTRACT_ID = "trellis.health@v1" as const;
15
15
  export const CONTRACT_DIGEST =
16
- "RHDzeH2V6Nltzk6WklCLbTIK48hF0hNuO9Qk6-BosT4" as const;
16
+ "z9RdJVXAI4q-hSkpvUX_xMYEJaKslMsayevlW4UlSeQ" as const;
17
17
  export const CONTRACT = {
18
18
  "description":
19
19
  "Expose shared Trellis heartbeat events for service observability.",
@@ -61,14 +61,6 @@ export const CONTRACT = {
61
61
  },
62
62
  "type": "array",
63
63
  },
64
- "header": {
65
- "properties": {
66
- "id": { "type": "string" },
67
- "time": { "format": "date-time", "type": "string" },
68
- },
69
- "required": ["id", "time"],
70
- "type": "object",
71
- },
72
64
  "service": {
73
65
  "properties": {
74
66
  "contractDigest": { "type": "string" },
@@ -115,7 +107,7 @@ export const CONTRACT = {
115
107
  },
116
108
  "summary": { "type": "string" },
117
109
  },
118
- "required": ["header", "service", "status", "checks"],
110
+ "required": ["service", "status", "checks"],
119
111
  "type": "object",
120
112
  },
121
113
  },
@@ -21,14 +21,6 @@ export const HealthHeartbeatSchema = {
21
21
  },
22
22
  "type": "array",
23
23
  },
24
- "header": {
25
- "properties": {
26
- "id": { "type": "string" },
27
- "time": { "format": "date-time", "type": "string" },
28
- },
29
- "required": ["id", "time"],
30
- "type": "object",
31
- },
32
24
  "service": {
33
25
  "properties": {
34
26
  "contractDigest": { "type": "string" },
@@ -75,6 +67,6 @@ export const HealthHeartbeatSchema = {
75
67
  },
76
68
  "summary": { "type": "string" },
77
69
  },
78
- "required": ["header", "service", "status", "checks"],
70
+ "required": ["service", "status", "checks"],
79
71
  "type": "object",
80
72
  } as const;
@@ -1,7 +1,9 @@
1
1
  // Generated from ./generated/contracts/manifests/trellis.health@v1.json
2
+ import type { TrellisEventMessage } from "../../../index.js";
3
+
2
4
  export const CONTRACT_ID = "trellis.health@v1" as const;
3
5
  export const CONTRACT_DIGEST =
4
- "RHDzeH2V6Nltzk6WklCLbTIK48hF0hNuO9Qk6-BosT4" as const;
6
+ "z9RdJVXAI4q-hSkpvUX_xMYEJaKslMsayevlW4UlSeQ" as const;
5
7
 
6
8
  export type HealthHeartbeatEvent = {
7
9
  checks: Array<
@@ -14,7 +16,6 @@ export type HealthHeartbeatEvent = {
14
16
  summary?: string;
15
17
  }
16
18
  >;
17
- header: { id: string; time: string };
18
19
  service: {
19
20
  contractDigest: string;
20
21
  contractId: string;
@@ -31,6 +32,9 @@ export type HealthHeartbeatEvent = {
31
32
  status: "healthy" | "unhealthy" | "degraded";
32
33
  summary?: string;
33
34
  };
35
+ export type HealthHeartbeatEventMessage = TrellisEventMessage<
36
+ HealthHeartbeatEvent
37
+ >;
34
38
 
35
39
  export interface RpcMap {
36
40
  }
@@ -117,6 +117,10 @@ export interface TrellisJobsClient {
117
117
  input: Types.JobsGetInput,
118
118
  opts?: RequestOpts,
119
119
  ): AsyncResult<Types.JobsGetOutput, BaseError>;
120
+ getKey(
121
+ input: Types.JobsGetKeyInput,
122
+ opts?: RequestOpts,
123
+ ): AsyncResult<Types.JobsGetKeyOutput, BaseError>;
120
124
  health(
121
125
  input: Types.JobsHealthInput,
122
126
  opts?: RequestOpts,
@@ -153,12 +157,12 @@ export interface TrellisJobsClient {
153
157
  readonly health: {
154
158
  heartbeat: {
155
159
  publish(
156
- event: Omit<HealthSdk.HealthHeartbeatEvent, "header">,
160
+ event: HealthSdk.HealthHeartbeatEvent,
157
161
  ): AsyncResult<void, ValidationError | UnexpectedError>;
158
162
  prepare(
159
- event: Omit<HealthSdk.HealthHeartbeatEvent, "header">,
163
+ event: HealthSdk.HealthHeartbeatEvent,
160
164
  ): Result<
161
- PreparedTrellisEvent<Omit<HealthSdk.HealthHeartbeatEvent, "header">>,
165
+ PreparedTrellisEvent<HealthSdk.HealthHeartbeatEvent>,
162
166
  ValidationError | UnexpectedError
163
167
  >;
164
168
  listen(
@@ -189,12 +193,12 @@ export interface ServiceEventSurface<TDeps> {
189
193
  readonly health: {
190
194
  heartbeat: {
191
195
  publish(
192
- event: Omit<HealthSdk.HealthHeartbeatEvent, "header">,
196
+ event: HealthSdk.HealthHeartbeatEvent,
193
197
  ): AsyncResult<void, ValidationError | UnexpectedError>;
194
198
  prepare(
195
- event: Omit<HealthSdk.HealthHeartbeatEvent, "header">,
199
+ event: HealthSdk.HealthHeartbeatEvent,
196
200
  ): Result<
197
- PreparedTrellisEvent<Omit<HealthSdk.HealthHeartbeatEvent, "header">>,
201
+ PreparedTrellisEvent<HealthSdk.HealthHeartbeatEvent>,
198
202
  ValidationError | UnexpectedError
199
203
  >;
200
204
  listen(
@@ -226,6 +230,13 @@ export interface ServiceHandle<TDeps = undefined> {
226
230
  get(
227
231
  handler: RpcHandler<Types.JobsGetInput, Types.JobsGetOutput, TDeps>,
228
232
  ): Promise<void>;
233
+ getKey(
234
+ handler: RpcHandler<
235
+ Types.JobsGetKeyInput,
236
+ Types.JobsGetKeyOutput,
237
+ TDeps
238
+ >,
239
+ ): Promise<void>;
229
240
  health(
230
241
  handler: RpcHandler<
231
242
  Types.JobsHealthInput,