@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
package/src/jobs.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AsyncResult, type BaseError, Result } from "@qlever-llc/result";
1
+ import { AsyncResult, BaseError, Result } from "@qlever-llc/result";
2
2
  import { UnexpectedError } from "./errors/index.js";
3
3
  import { type StaticDecode, Type } from "typebox";
4
4
 
@@ -41,6 +41,8 @@ export type JobState =
41
41
  | "failed"
42
42
  | "cancelled"
43
43
  | "expired"
44
+ | "skipped"
45
+ | "stale"
44
46
  | "dead"
45
47
  | "dismissed";
46
48
 
@@ -50,6 +52,116 @@ export type JobIdentity = {
50
52
  id: string;
51
53
  };
52
54
 
55
+ export type JobNotEnqueuedReason =
56
+ | "active-limit"
57
+ | "queue-depth"
58
+ | "stale-blocked"
59
+ | "coalesced";
60
+
61
+ export type JobNotEnqueuedErrorData = {
62
+ id: string;
63
+ type: "JobNotEnqueuedError";
64
+ message: string;
65
+ reason: JobNotEnqueuedReason;
66
+ key: string;
67
+ active: number;
68
+ queued: number;
69
+ limit: number;
70
+ existingJobId?: string;
71
+ context?: Record<string, unknown>;
72
+ traceId?: string;
73
+ };
74
+
75
+ /** Error returned when keyed job admission does not create a new job. */
76
+ export class JobNotEnqueuedError extends BaseError<JobNotEnqueuedErrorData> {
77
+ override readonly name = "JobNotEnqueuedError" as const;
78
+ readonly reason: JobNotEnqueuedReason;
79
+ readonly key: string;
80
+ readonly active: number;
81
+ readonly queued: number;
82
+ readonly limit: number;
83
+ readonly existingJobId?: string;
84
+
85
+ constructor(
86
+ options: ErrorOptions & {
87
+ reason: JobNotEnqueuedReason;
88
+ key: string;
89
+ active: number;
90
+ queued: number;
91
+ limit: number;
92
+ existingJobId?: string;
93
+ message?: string;
94
+ context?: Record<string, unknown>;
95
+ id?: string;
96
+ traceId?: string;
97
+ },
98
+ ) {
99
+ const {
100
+ reason,
101
+ key,
102
+ active,
103
+ queued,
104
+ limit,
105
+ existingJobId,
106
+ message,
107
+ ...baseOptions
108
+ } = options;
109
+ super(
110
+ message ?? `Job was not enqueued for key '${key}': ${reason}`,
111
+ baseOptions,
112
+ );
113
+ this.reason = reason;
114
+ this.key = key;
115
+ this.active = active;
116
+ this.queued = queued;
117
+ this.limit = limit;
118
+ this.existingJobId = existingJobId;
119
+ }
120
+
121
+ /** Serializes the admission error for transport or logging. */
122
+ override toSerializable(): JobNotEnqueuedErrorData {
123
+ const base = this.baseSerializable();
124
+ return {
125
+ id: base.id,
126
+ type: this.name,
127
+ message: base.message,
128
+ reason: this.reason,
129
+ key: this.key,
130
+ active: this.active,
131
+ queued: this.queued,
132
+ limit: this.limit,
133
+ ...(this.existingJobId !== undefined
134
+ ? { existingJobId: this.existingJobId }
135
+ : {}),
136
+ ...(base.context !== undefined ? { context: base.context } : {}),
137
+ ...(base.traceId !== undefined ? { traceId: base.traceId } : {}),
138
+ };
139
+ }
140
+ }
141
+
142
+ export type JobSubmitOutcome<TPayload, TResult> =
143
+ | { kind: "accepted"; ref: JobRef<TPayload, TResult>; key?: string }
144
+ | {
145
+ kind: "rejected";
146
+ key: string;
147
+ reason: "active-limit" | "queue-depth" | "stale-blocked";
148
+ active: number;
149
+ queued: number;
150
+ limit: number;
151
+ }
152
+ | {
153
+ kind: "coalesced";
154
+ key: string;
155
+ existing: JobIdentity;
156
+ reason: string;
157
+ }
158
+ | {
159
+ kind: "replaced";
160
+ key: string;
161
+ replaced: JobIdentity;
162
+ ref: JobRef<TPayload, TResult>;
163
+ };
164
+
53
165
  export type JobSnapshot<TPayload, TResult> = {
54
166
  id: string;
55
167
  service: string;
@@ -81,6 +193,8 @@ export type TerminalJob<TPayload, TResult> = JobSnapshot<TPayload, TResult> & {
81
193
  | "failed"
82
194
  | "cancelled"
83
195
  | "expired"
196
+ | "skipped"
197
+ | "stale"
84
198
  | "dead"
85
199
  | "dismissed";
86
200
  };
@@ -269,6 +383,9 @@ export class JobQueue<TPayload, TResult> {
269
383
  job: ActiveJob<TPayload, TResult>,
270
384
  ) => Promise<Result<TResult, BaseError>>,
271
385
  ) => void;
386
+ readonly #submit: (
387
+ payload: TPayload,
388
+ ) => AsyncResult<JobSubmitOutcome<TPayload, TResult>, BaseError>;
272
389
 
273
390
  constructor(impl: {
274
391
  create: (
@@ -279,9 +396,15 @@ export class JobQueue<TPayload, TResult> {
279
396
  job: ActiveJob<TPayload, TResult>,
280
397
  ) => Promise<Result<TResult, BaseError>>,
281
398
  ) => void;
399
+ submit?: (
400
+ payload: TPayload,
401
+ ) => AsyncResult<JobSubmitOutcome<TPayload, TResult>, BaseError>;
282
402
  }) {
283
403
  this.#create = impl.create;
284
404
  this.#handle = impl.handle;
405
+ this.#submit = impl.submit ??
406
+ ((payload) =>
407
+ impl.create(payload).map((ref) => ({ kind: "accepted", ref })));
285
408
  }
286
409
 
287
410
  create(payload: TPayload): AsyncResult<JobRef<TPayload, TResult>, BaseError> {
@@ -292,6 +415,20 @@ export class JobQueue<TPayload, TResult> {
292
415
  }
293
416
  }
294
417
 
418
+ /**
419
+ * Submits a job using queue policy outcomes for keyed queues.
420
+ * Unkeyed queues accept and return a new job reference.
421
+ */
422
+ submit(
423
+ payload: TPayload,
424
+ ): AsyncResult<JobSubmitOutcome<TPayload, TResult>, BaseError> {
425
+ try {
426
+ return this.#submit(payload);
427
+ } catch (cause) {
428
+ return AsyncResult.err(toUnexpectedError(cause));
429
+ }
430
+ }
431
+
295
432
  handle(
296
433
  handler: (
297
434
  job: ActiveJob<TPayload, TResult>,
@@ -1,12 +1,15 @@
1
1
  // Generated from ./generated/contracts/manifests/trellis.auth@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
 
@@ -416,14 +417,12 @@ export interface TrellisAuthClient {
416
417
  readonly auth: {
417
418
  connectionsClosed: {
418
419
  publish(
419
- event: Omit<Types.AuthConnectionsClosedEvent, "header">,
420
+ event: Types.AuthConnectionsClosedEvent,
420
421
  ): AsyncResult<void, ValidationError | UnexpectedError>;
421
422
  prepare(
422
- event: Omit<Types.AuthConnectionsClosedEvent, "header">,
423
+ event: Types.AuthConnectionsClosedEvent,
423
424
  ): Result<
424
- PreparedTrellisEvent<
425
- Omit<Types.AuthConnectionsClosedEvent, "header">
426
- >,
425
+ PreparedTrellisEvent<Types.AuthConnectionsClosedEvent>,
427
426
  ValidationError | UnexpectedError
428
427
  >;
429
428
  listen(
@@ -434,14 +433,12 @@ export interface TrellisAuthClient {
434
433
  };
435
434
  connectionsKicked: {
436
435
  publish(
437
- event: Omit<Types.AuthConnectionsKickedEvent, "header">,
436
+ event: Types.AuthConnectionsKickedEvent,
438
437
  ): AsyncResult<void, ValidationError | UnexpectedError>;
439
438
  prepare(
440
- event: Omit<Types.AuthConnectionsKickedEvent, "header">,
439
+ event: Types.AuthConnectionsKickedEvent,
441
440
  ): Result<
442
- PreparedTrellisEvent<
443
- Omit<Types.AuthConnectionsKickedEvent, "header">
444
- >,
441
+ PreparedTrellisEvent<Types.AuthConnectionsKickedEvent>,
445
442
  ValidationError | UnexpectedError
446
443
  >;
447
444
  listen(
@@ -452,14 +449,12 @@ export interface TrellisAuthClient {
452
449
  };
453
450
  connectionsOpened: {
454
451
  publish(
455
- event: Omit<Types.AuthConnectionsOpenedEvent, "header">,
452
+ event: Types.AuthConnectionsOpenedEvent,
456
453
  ): AsyncResult<void, ValidationError | UnexpectedError>;
457
454
  prepare(
458
- event: Omit<Types.AuthConnectionsOpenedEvent, "header">,
455
+ event: Types.AuthConnectionsOpenedEvent,
459
456
  ): Result<
460
- PreparedTrellisEvent<
461
- Omit<Types.AuthConnectionsOpenedEvent, "header">
462
- >,
457
+ PreparedTrellisEvent<Types.AuthConnectionsOpenedEvent>,
463
458
  ValidationError | UnexpectedError
464
459
  >;
465
460
  listen(
@@ -470,14 +465,12 @@ export interface TrellisAuthClient {
470
465
  };
471
466
  deviceUserAuthoritiesApproved: {
472
467
  publish(
473
- event: Omit<Types.AuthDeviceUserAuthoritiesApprovedEvent, "header">,
468
+ event: Types.AuthDeviceUserAuthoritiesApprovedEvent,
474
469
  ): AsyncResult<void, ValidationError | UnexpectedError>;
475
470
  prepare(
476
- event: Omit<Types.AuthDeviceUserAuthoritiesApprovedEvent, "header">,
471
+ event: Types.AuthDeviceUserAuthoritiesApprovedEvent,
477
472
  ): Result<
478
- PreparedTrellisEvent<
479
- Omit<Types.AuthDeviceUserAuthoritiesApprovedEvent, "header">
480
- >,
473
+ PreparedTrellisEvent<Types.AuthDeviceUserAuthoritiesApprovedEvent>,
481
474
  ValidationError | UnexpectedError
482
475
  >;
483
476
  listen(
@@ -488,14 +481,12 @@ export interface TrellisAuthClient {
488
481
  };
489
482
  deviceUserAuthoritiesRequested: {
490
483
  publish(
491
- event: Omit<Types.AuthDeviceUserAuthoritiesRequestedEvent, "header">,
484
+ event: Types.AuthDeviceUserAuthoritiesRequestedEvent,
492
485
  ): AsyncResult<void, ValidationError | UnexpectedError>;
493
486
  prepare(
494
- event: Omit<Types.AuthDeviceUserAuthoritiesRequestedEvent, "header">,
487
+ event: Types.AuthDeviceUserAuthoritiesRequestedEvent,
495
488
  ): Result<
496
- PreparedTrellisEvent<
497
- Omit<Types.AuthDeviceUserAuthoritiesRequestedEvent, "header">
498
- >,
489
+ PreparedTrellisEvent<Types.AuthDeviceUserAuthoritiesRequestedEvent>,
499
490
  ValidationError | UnexpectedError
500
491
  >;
501
492
  listen(
@@ -506,14 +497,12 @@ export interface TrellisAuthClient {
506
497
  };
507
498
  deviceUserAuthoritiesResolved: {
508
499
  publish(
509
- event: Omit<Types.AuthDeviceUserAuthoritiesResolvedEvent, "header">,
500
+ event: Types.AuthDeviceUserAuthoritiesResolvedEvent,
510
501
  ): AsyncResult<void, ValidationError | UnexpectedError>;
511
502
  prepare(
512
- event: Omit<Types.AuthDeviceUserAuthoritiesResolvedEvent, "header">,
503
+ event: Types.AuthDeviceUserAuthoritiesResolvedEvent,
513
504
  ): Result<
514
- PreparedTrellisEvent<
515
- Omit<Types.AuthDeviceUserAuthoritiesResolvedEvent, "header">
516
- >,
505
+ PreparedTrellisEvent<Types.AuthDeviceUserAuthoritiesResolvedEvent>,
517
506
  ValidationError | UnexpectedError
518
507
  >;
519
508
  listen(
@@ -524,19 +513,13 @@ export interface TrellisAuthClient {
524
513
  };
525
514
  deviceUserAuthoritiesReviewRequested: {
526
515
  publish(
527
- event: Omit<
528
- Types.AuthDeviceUserAuthoritiesReviewRequestedEvent,
529
- "header"
530
- >,
516
+ event: Types.AuthDeviceUserAuthoritiesReviewRequestedEvent,
531
517
  ): AsyncResult<void, ValidationError | UnexpectedError>;
532
518
  prepare(
533
- event: Omit<
534
- Types.AuthDeviceUserAuthoritiesReviewRequestedEvent,
535
- "header"
536
- >,
519
+ event: Types.AuthDeviceUserAuthoritiesReviewRequestedEvent,
537
520
  ): Result<
538
521
  PreparedTrellisEvent<
539
- Omit<Types.AuthDeviceUserAuthoritiesReviewRequestedEvent, "header">
522
+ Types.AuthDeviceUserAuthoritiesReviewRequestedEvent
540
523
  >,
541
524
  ValidationError | UnexpectedError
542
525
  >;
@@ -550,12 +533,12 @@ export interface TrellisAuthClient {
550
533
  };
551
534
  sessionsRevoked: {
552
535
  publish(
553
- event: Omit<Types.AuthSessionsRevokedEvent, "header">,
536
+ event: Types.AuthSessionsRevokedEvent,
554
537
  ): AsyncResult<void, ValidationError | UnexpectedError>;
555
538
  prepare(
556
- event: Omit<Types.AuthSessionsRevokedEvent, "header">,
539
+ event: Types.AuthSessionsRevokedEvent,
557
540
  ): Result<
558
- PreparedTrellisEvent<Omit<Types.AuthSessionsRevokedEvent, "header">>,
541
+ PreparedTrellisEvent<Types.AuthSessionsRevokedEvent>,
559
542
  ValidationError | UnexpectedError
560
543
  >;
561
544
  listen(
@@ -565,6 +548,24 @@ export interface TrellisAuthClient {
565
548
  ): AsyncResult<void, ValidationError | UnexpectedError>;
566
549
  };
567
550
  };
551
+ readonly health: {
552
+ heartbeat: {
553
+ publish(
554
+ event: HealthSdk.HealthHeartbeatEvent,
555
+ ): AsyncResult<void, ValidationError | UnexpectedError>;
556
+ prepare(
557
+ event: HealthSdk.HealthHeartbeatEvent,
558
+ ): Result<
559
+ PreparedTrellisEvent<HealthSdk.HealthHeartbeatEvent>,
560
+ ValidationError | UnexpectedError
561
+ >;
562
+ listen(
563
+ handler: EventCallback<HealthSdk.HealthHeartbeatEvent>,
564
+ subjectData?: Record<string, unknown>,
565
+ opts?: EventOpts,
566
+ ): AsyncResult<void, ValidationError | UnexpectedError>;
567
+ };
568
+ };
568
569
  };
569
570
  readonly feed: {};
570
571
  readonly operation: {
@@ -590,12 +591,12 @@ export interface ServiceEventSurface<TDeps> {
590
591
  readonly auth: {
591
592
  connectionsClosed: {
592
593
  publish(
593
- event: Omit<Types.AuthConnectionsClosedEvent, "header">,
594
+ event: Types.AuthConnectionsClosedEvent,
594
595
  ): AsyncResult<void, ValidationError | UnexpectedError>;
595
596
  prepare(
596
- event: Omit<Types.AuthConnectionsClosedEvent, "header">,
597
+ event: Types.AuthConnectionsClosedEvent,
597
598
  ): Result<
598
- PreparedTrellisEvent<Omit<Types.AuthConnectionsClosedEvent, "header">>,
599
+ PreparedTrellisEvent<Types.AuthConnectionsClosedEvent>,
599
600
  ValidationError | UnexpectedError
600
601
  >;
601
602
  listen(
@@ -606,12 +607,12 @@ export interface ServiceEventSurface<TDeps> {
606
607
  };
607
608
  connectionsKicked: {
608
609
  publish(
609
- event: Omit<Types.AuthConnectionsKickedEvent, "header">,
610
+ event: Types.AuthConnectionsKickedEvent,
610
611
  ): AsyncResult<void, ValidationError | UnexpectedError>;
611
612
  prepare(
612
- event: Omit<Types.AuthConnectionsKickedEvent, "header">,
613
+ event: Types.AuthConnectionsKickedEvent,
613
614
  ): Result<
614
- PreparedTrellisEvent<Omit<Types.AuthConnectionsKickedEvent, "header">>,
615
+ PreparedTrellisEvent<Types.AuthConnectionsKickedEvent>,
615
616
  ValidationError | UnexpectedError
616
617
  >;
617
618
  listen(
@@ -622,12 +623,12 @@ export interface ServiceEventSurface<TDeps> {
622
623
  };
623
624
  connectionsOpened: {
624
625
  publish(
625
- event: Omit<Types.AuthConnectionsOpenedEvent, "header">,
626
+ event: Types.AuthConnectionsOpenedEvent,
626
627
  ): AsyncResult<void, ValidationError | UnexpectedError>;
627
628
  prepare(
628
- event: Omit<Types.AuthConnectionsOpenedEvent, "header">,
629
+ event: Types.AuthConnectionsOpenedEvent,
629
630
  ): Result<
630
- PreparedTrellisEvent<Omit<Types.AuthConnectionsOpenedEvent, "header">>,
631
+ PreparedTrellisEvent<Types.AuthConnectionsOpenedEvent>,
631
632
  ValidationError | UnexpectedError
632
633
  >;
633
634
  listen(
@@ -638,14 +639,12 @@ export interface ServiceEventSurface<TDeps> {
638
639
  };
639
640
  deviceUserAuthoritiesApproved: {
640
641
  publish(
641
- event: Omit<Types.AuthDeviceUserAuthoritiesApprovedEvent, "header">,
642
+ event: Types.AuthDeviceUserAuthoritiesApprovedEvent,
642
643
  ): AsyncResult<void, ValidationError | UnexpectedError>;
643
644
  prepare(
644
- event: Omit<Types.AuthDeviceUserAuthoritiesApprovedEvent, "header">,
645
+ event: Types.AuthDeviceUserAuthoritiesApprovedEvent,
645
646
  ): Result<
646
- PreparedTrellisEvent<
647
- Omit<Types.AuthDeviceUserAuthoritiesApprovedEvent, "header">
648
- >,
647
+ PreparedTrellisEvent<Types.AuthDeviceUserAuthoritiesApprovedEvent>,
649
648
  ValidationError | UnexpectedError
650
649
  >;
651
650
  listen(
@@ -659,14 +658,12 @@ export interface ServiceEventSurface<TDeps> {
659
658
  };
660
659
  deviceUserAuthoritiesRequested: {
661
660
  publish(
662
- event: Omit<Types.AuthDeviceUserAuthoritiesRequestedEvent, "header">,
661
+ event: Types.AuthDeviceUserAuthoritiesRequestedEvent,
663
662
  ): AsyncResult<void, ValidationError | UnexpectedError>;
664
663
  prepare(
665
- event: Omit<Types.AuthDeviceUserAuthoritiesRequestedEvent, "header">,
664
+ event: Types.AuthDeviceUserAuthoritiesRequestedEvent,
666
665
  ): Result<
667
- PreparedTrellisEvent<
668
- Omit<Types.AuthDeviceUserAuthoritiesRequestedEvent, "header">
669
- >,
666
+ PreparedTrellisEvent<Types.AuthDeviceUserAuthoritiesRequestedEvent>,
670
667
  ValidationError | UnexpectedError
671
668
  >;
672
669
  listen(
@@ -680,14 +677,12 @@ export interface ServiceEventSurface<TDeps> {
680
677
  };
681
678
  deviceUserAuthoritiesResolved: {
682
679
  publish(
683
- event: Omit<Types.AuthDeviceUserAuthoritiesResolvedEvent, "header">,
680
+ event: Types.AuthDeviceUserAuthoritiesResolvedEvent,
684
681
  ): AsyncResult<void, ValidationError | UnexpectedError>;
685
682
  prepare(
686
- event: Omit<Types.AuthDeviceUserAuthoritiesResolvedEvent, "header">,
683
+ event: Types.AuthDeviceUserAuthoritiesResolvedEvent,
687
684
  ): Result<
688
- PreparedTrellisEvent<
689
- Omit<Types.AuthDeviceUserAuthoritiesResolvedEvent, "header">
690
- >,
685
+ PreparedTrellisEvent<Types.AuthDeviceUserAuthoritiesResolvedEvent>,
691
686
  ValidationError | UnexpectedError
692
687
  >;
693
688
  listen(
@@ -701,19 +696,13 @@ export interface ServiceEventSurface<TDeps> {
701
696
  };
702
697
  deviceUserAuthoritiesReviewRequested: {
703
698
  publish(
704
- event: Omit<
705
- Types.AuthDeviceUserAuthoritiesReviewRequestedEvent,
706
- "header"
707
- >,
699
+ event: Types.AuthDeviceUserAuthoritiesReviewRequestedEvent,
708
700
  ): AsyncResult<void, ValidationError | UnexpectedError>;
709
701
  prepare(
710
- event: Omit<
711
- Types.AuthDeviceUserAuthoritiesReviewRequestedEvent,
712
- "header"
713
- >,
702
+ event: Types.AuthDeviceUserAuthoritiesReviewRequestedEvent,
714
703
  ): Result<
715
704
  PreparedTrellisEvent<
716
- Omit<Types.AuthDeviceUserAuthoritiesReviewRequestedEvent, "header">
705
+ Types.AuthDeviceUserAuthoritiesReviewRequestedEvent
717
706
  >,
718
707
  ValidationError | UnexpectedError
719
708
  >;
@@ -728,12 +717,12 @@ export interface ServiceEventSurface<TDeps> {
728
717
  };
729
718
  sessionsRevoked: {
730
719
  publish(
731
- event: Omit<Types.AuthSessionsRevokedEvent, "header">,
720
+ event: Types.AuthSessionsRevokedEvent,
732
721
  ): AsyncResult<void, ValidationError | UnexpectedError>;
733
722
  prepare(
734
- event: Omit<Types.AuthSessionsRevokedEvent, "header">,
723
+ event: Types.AuthSessionsRevokedEvent,
735
724
  ): Result<
736
- PreparedTrellisEvent<Omit<Types.AuthSessionsRevokedEvent, "header">>,
725
+ PreparedTrellisEvent<Types.AuthSessionsRevokedEvent>,
737
726
  ValidationError | UnexpectedError
738
727
  >;
739
728
  listen(
@@ -743,6 +732,24 @@ export interface ServiceEventSurface<TDeps> {
743
732
  ): AsyncResult<void, ValidationError | UnexpectedError>;
744
733
  };
745
734
  };
735
+ readonly health: {
736
+ heartbeat: {
737
+ publish(
738
+ event: HealthSdk.HealthHeartbeatEvent,
739
+ ): AsyncResult<void, ValidationError | UnexpectedError>;
740
+ prepare(
741
+ event: HealthSdk.HealthHeartbeatEvent,
742
+ ): Result<
743
+ PreparedTrellisEvent<HealthSdk.HealthHeartbeatEvent>,
744
+ ValidationError | UnexpectedError
745
+ >;
746
+ listen(
747
+ handler: ServiceEventHandler<HealthSdk.HealthHeartbeatEvent, TDeps>,
748
+ subjectData?: Record<string, unknown>,
749
+ opts?: EventOpts,
750
+ ): AsyncResult<void, ValidationError | UnexpectedError>;
751
+ };
752
+ };
746
753
  }
747
754
 
748
755
  export interface ServiceHandle<TDeps = undefined> {