@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
@@ -0,0 +1,593 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeJobKeyPolicy = normalizeJobKeyPolicy;
4
+ exports.deriveJobKey = deriveJobKey;
5
+ exports.stableKeyHash = stableKeyHash;
6
+ exports.reduceAdmission = reduceAdmission;
7
+ exports.reduceRestoreReplacedQueuedJob = reduceRestoreReplacedQueuedJob;
8
+ exports.reduceAcquireActiveSlot = reduceAcquireActiveSlot;
9
+ exports.reduceRemoveQueuedJob = reduceRemoveQueuedJob;
10
+ exports.reduceRenewHeartbeat = reduceRenewHeartbeat;
11
+ exports.reduceReleaseActiveSlot = reduceReleaseActiveSlot;
12
+ exports.createNatsJobKeyCoordinator = createNatsJobKeyCoordinator;
13
+ exports.isJobKeyState = isJobKeyState;
14
+ const kv_1 = require("@nats-io/kv");
15
+ const JOBS_KEYS_BUCKET = "JOBS_KEYS";
16
+ const DEFAULT_HEARTBEAT_INTERVAL_MS = 30_000;
17
+ const DEFAULT_HEARTBEAT_TTL_MS = 120_000;
18
+ const DEFAULT_MAX_ACTIVE = 1;
19
+ const DEFAULT_MAX_QUEUED_PER_KEY = 0;
20
+ const DEFAULT_QUEUE_WHEN_FULL = "reject";
21
+ const DEFAULT_STALE_POLICY = "fail-stale";
22
+ const MAX_CAS_ATTEMPTS = 8;
23
+ /** Normalizes keyed queue policy defaults when bindings omit normalized values. */
24
+ function normalizeJobKeyPolicy(args) {
25
+ return {
26
+ key: [...args.keyConcurrency.key],
27
+ maxActive: args.keyConcurrency.maxActive ?? DEFAULT_MAX_ACTIVE,
28
+ heartbeatIntervalMs: args.keyConcurrency.heartbeatIntervalMs ??
29
+ DEFAULT_HEARTBEAT_INTERVAL_MS,
30
+ heartbeatTtlMs: args.keyConcurrency.heartbeatTtlMs ??
31
+ DEFAULT_HEARTBEAT_TTL_MS,
32
+ stalePolicy: args.keyConcurrency.stalePolicy ?? DEFAULT_STALE_POLICY,
33
+ queue: {
34
+ maxQueuedPerKey: args.queue?.maxQueuedPerKey ??
35
+ DEFAULT_MAX_QUEUED_PER_KEY,
36
+ whenFull: args.queue?.whenFull ?? DEFAULT_QUEUE_WHEN_FULL,
37
+ },
38
+ };
39
+ }
40
+ /** Derives the display key and stable hash for a keyed job payload. */
41
+ async function deriveJobKey(args) {
42
+ const segments = args.template.map((segment) => {
43
+ if (!segment.startsWith("/")) {
44
+ return segment;
45
+ }
46
+ const value = resolveJsonPointer(args.payload, segment);
47
+ if (!isScalarKeySegment(value)) {
48
+ throw new Error(`Job key pointer '${segment}' did not resolve to a string, finite number, or boolean`);
49
+ }
50
+ return value;
51
+ });
52
+ const key = segments.map((segment) => String(segment)).join(":");
53
+ const keyHash = await stableKeyHash(JSON.stringify({ version: 1, segments }));
54
+ return {
55
+ service: args.service,
56
+ jobType: args.jobType,
57
+ key,
58
+ keyHash,
59
+ kvKey: `${args.service}.${args.jobType}.${keyHash}`,
60
+ };
61
+ }
62
+ /** Produces a stable SHA-256 hex hash for a display key. */
63
+ async function stableKeyHash(value) {
64
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(value));
65
+ return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
66
+ }
67
+ /** Applies keyed admission policy to an existing key state. */
68
+ function reduceAdmission(args) {
69
+ const state = args.state ?? emptyState({
70
+ service: args.request.service,
71
+ jobType: args.request.jobType,
72
+ key: args.derived.key,
73
+ keyHash: args.derived.keyHash,
74
+ now: args.request.createdAt,
75
+ policy: args.policy,
76
+ });
77
+ const active = state.active.length;
78
+ const queued = state.queued.length;
79
+ const queueLimit = args.policy.queue.maxQueuedPerKey +
80
+ Math.max(0, args.policy.maxActive - active);
81
+ if (queued < queueLimit) {
82
+ return {
83
+ kind: "accepted",
84
+ key: state.key,
85
+ keyHash: state.keyHash,
86
+ state: appendQueued(state, args.request, args.policy),
87
+ };
88
+ }
89
+ if (args.request.strictCreate) {
90
+ const reason = active >= args.policy.maxActive
91
+ ? "active-limit"
92
+ : "queue-depth";
93
+ return {
94
+ kind: "rejected",
95
+ key: state.key,
96
+ reason,
97
+ active,
98
+ queued,
99
+ limit: reason === "active-limit" ? args.policy.maxActive : queueLimit,
100
+ };
101
+ }
102
+ if (args.policy.queue.whenFull === "coalesce") {
103
+ const existing = state.queued[0] ?? state.active[0];
104
+ if (existing) {
105
+ return {
106
+ kind: "coalesced",
107
+ key: state.key,
108
+ existing: {
109
+ service: state.service,
110
+ jobType: state.jobType,
111
+ id: existing.jobId,
112
+ },
113
+ reason: state.queued[0] ? "queue-full" : "active-limit",
114
+ };
115
+ }
116
+ }
117
+ if (args.policy.queue.whenFull === "replace-oldest" && state.queued[0]) {
118
+ const [replaced, ...remaining] = state.queued;
119
+ return {
120
+ kind: "replaced",
121
+ key: state.key,
122
+ keyHash: state.keyHash,
123
+ replaced: {
124
+ service: state.service,
125
+ jobType: state.jobType,
126
+ id: replaced.jobId,
127
+ createdAt: replaced.createdAt,
128
+ requestId: replaced.requestId,
129
+ context: replaced.context,
130
+ },
131
+ state: appendQueued({ ...state, queued: remaining }, args.request, args.policy),
132
+ };
133
+ }
134
+ const reason = active >= args.policy.maxActive
135
+ ? "active-limit"
136
+ : "queue-depth";
137
+ return {
138
+ kind: "rejected",
139
+ key: state.key,
140
+ reason,
141
+ active,
142
+ queued,
143
+ limit: reason === "active-limit" ? args.policy.maxActive : queueLimit,
144
+ };
145
+ }
146
+ /** Restores the replaced queued reservation when replacement lifecycle publish fails. */
147
+ function reduceRestoreReplacedQueuedJob(args) {
148
+ const base = args.state ?? emptyState({
149
+ service: args.replaced.service,
150
+ jobType: args.replaced.jobType,
151
+ key: args.derived.key,
152
+ keyHash: args.derived.keyHash,
153
+ now: args.now,
154
+ policy: args.policy,
155
+ });
156
+ const queuedWithoutReplacement = base.queued.filter((entry) => entry.jobId !== args.replacementJobId);
157
+ const alreadyPresent = queuedWithoutReplacement.some((entry) => entry.jobId === args.replaced.id) || base.active.some((slot) => slot.jobId === args.replaced.id);
158
+ const restoredQueued = alreadyPresent ? queuedWithoutReplacement : [{
159
+ jobId: args.replaced.id,
160
+ createdAt: args.replaced.createdAt,
161
+ requestId: args.replaced.requestId,
162
+ context: args.replaced.context,
163
+ }, ...queuedWithoutReplacement];
164
+ return {
165
+ kind: "restored",
166
+ state: {
167
+ ...base,
168
+ maxActive: args.policy.maxActive,
169
+ maxQueuedPerKey: args.policy.queue.maxQueuedPerKey,
170
+ queued: restoredQueued,
171
+ updatedAt: args.now,
172
+ },
173
+ };
174
+ }
175
+ /** Applies active slot acquisition policy to an existing key state. */
176
+ function reduceAcquireActiveSlot(args) {
177
+ const base = args.state ?? emptyState({
178
+ service: args.request.service,
179
+ jobType: args.request.jobType,
180
+ key: args.derived.key,
181
+ keyHash: args.derived.keyHash,
182
+ now: args.request.now,
183
+ policy: args.policy,
184
+ });
185
+ const nowMs = Date.parse(args.request.now);
186
+ const expired = base.active.filter((slot) => Date.parse(slot.leaseExpiresAt) <= nowMs);
187
+ if (expired.length > 0 && args.policy.stalePolicy === "block" &&
188
+ base.active.length >= args.policy.maxActive) {
189
+ return {
190
+ kind: "blocked",
191
+ key: base.key,
192
+ reason: "stale-blocked",
193
+ active: base.active.length,
194
+ queued: base.queued.length,
195
+ limit: args.policy.maxActive,
196
+ };
197
+ }
198
+ const active = args.policy.stalePolicy === "fail-stale"
199
+ ? base.active.filter((slot) => Date.parse(slot.leaseExpiresAt) > nowMs)
200
+ : base.active;
201
+ const isQueued = base.queued.some((entry) => entry.jobId === args.request.jobId);
202
+ const isAlreadyActive = base.active.some((slot) => slot.jobId === args.request.jobId);
203
+ const isRetry = args.request.lifecycleState === "retry";
204
+ if (!isQueued && !isAlreadyActive && !isRetry) {
205
+ return {
206
+ kind: "blocked",
207
+ key: base.key,
208
+ reason: "not-queued",
209
+ active: active.length,
210
+ queued: base.queued.length,
211
+ limit: args.policy.queue.maxQueuedPerKey,
212
+ };
213
+ }
214
+ if (active.length >= args.policy.maxActive) {
215
+ return {
216
+ kind: "blocked",
217
+ key: base.key,
218
+ reason: "active-limit",
219
+ active: active.length,
220
+ queued: base.queued.length,
221
+ limit: args.policy.maxActive,
222
+ };
223
+ }
224
+ const leaseExpiresAt = new Date(nowMs + args.policy.heartbeatTtlMs)
225
+ .toISOString();
226
+ const queued = base.queued.filter((entry) => entry.jobId !== args.request.jobId);
227
+ const slot = {
228
+ jobId: args.request.jobId,
229
+ slotToken: args.slotToken,
230
+ instanceId: args.request.instanceId,
231
+ startedAt: args.request.now,
232
+ heartbeatAt: args.request.now,
233
+ leaseExpiresAt,
234
+ tries: args.request.tries,
235
+ context: args.request.context,
236
+ };
237
+ const state = {
238
+ ...base,
239
+ maxActive: args.policy.maxActive,
240
+ maxQueuedPerKey: args.policy.queue.maxQueuedPerKey,
241
+ active: [...active, slot],
242
+ queued,
243
+ staleTakeoverCount: base.staleTakeoverCount + expired.length,
244
+ updatedAt: args.request.now,
245
+ };
246
+ return {
247
+ kind: "acquired",
248
+ key: base.key,
249
+ keyHash: base.keyHash,
250
+ slotToken: args.slotToken,
251
+ stale: args.policy.stalePolicy === "fail-stale" ? expired : [],
252
+ state,
253
+ };
254
+ }
255
+ /** Removes a queued keyed-job reservation when work is terminal before start. */
256
+ function reduceRemoveQueuedJob(args) {
257
+ if (!args.state) {
258
+ return { kind: "not-found" };
259
+ }
260
+ const queued = args.state.queued.filter((entry) => entry.jobId !== args.jobId);
261
+ if (queued.length === args.state.queued.length) {
262
+ return { kind: "not-found" };
263
+ }
264
+ return {
265
+ kind: "removed",
266
+ state: { ...args.state, queued, updatedAt: args.now },
267
+ };
268
+ }
269
+ /** Renews a matching active slot lease in key state. */
270
+ function reduceRenewHeartbeat(args) {
271
+ if (!args.state) {
272
+ return { kind: "lost" };
273
+ }
274
+ const nowMs = Date.parse(args.now);
275
+ let renewed = false;
276
+ const active = args.state.active.map((slot) => {
277
+ if (slot.jobId !== args.jobId || slot.slotToken !== args.slotToken) {
278
+ return slot;
279
+ }
280
+ renewed = true;
281
+ return {
282
+ ...slot,
283
+ heartbeatAt: args.now,
284
+ leaseExpiresAt: new Date(nowMs + args.policy.heartbeatTtlMs)
285
+ .toISOString(),
286
+ };
287
+ });
288
+ if (!renewed) {
289
+ return { kind: "lost" };
290
+ }
291
+ return {
292
+ kind: "renewed",
293
+ state: { ...args.state, active, updatedAt: args.now },
294
+ };
295
+ }
296
+ /** Releases a matching active slot or reports a stale completion. */
297
+ function reduceReleaseActiveSlot(args) {
298
+ if (!args.state) {
299
+ return { kind: "staleCompletion" };
300
+ }
301
+ const nextActive = args.state.active.filter((slot) => slot.jobId !== args.jobId || slot.slotToken !== args.slotToken);
302
+ if (nextActive.length === args.state.active.length) {
303
+ return { kind: "staleCompletion" };
304
+ }
305
+ return {
306
+ kind: "released",
307
+ state: { ...args.state, active: nextActive, updatedAt: args.now },
308
+ };
309
+ }
310
+ /** Creates a NATS KV backed coordinator for the Trellis-owned JOBS_KEYS bucket. */
311
+ function createNatsJobKeyCoordinator(nats, bucketPrefix = JOBS_KEYS_BUCKET) {
312
+ const kvPromises = new Map();
313
+ const openKv = (service) => {
314
+ const bucket = jobKeysBucketName(bucketPrefix, service);
315
+ const existing = kvPromises.get(bucket);
316
+ if (existing) {
317
+ return existing;
318
+ }
319
+ const opened = new kv_1.Kvm(nats).open(bucket);
320
+ kvPromises.set(bucket, opened);
321
+ return opened;
322
+ };
323
+ return {
324
+ async admitCreate(request) {
325
+ const derived = await deriveJobKey({
326
+ service: request.service,
327
+ jobType: request.jobType,
328
+ payload: request.payload,
329
+ template: request.policy.key,
330
+ });
331
+ return await updateState(() => openKv(request.service), derived, (state) => reduceAdmission({
332
+ state,
333
+ derived,
334
+ request,
335
+ policy: request.policy,
336
+ }));
337
+ },
338
+ async restoreReplacedQueuedJob(args) {
339
+ const derived = await deriveJobKey({
340
+ service: args.service,
341
+ jobType: args.jobType,
342
+ payload: args.payload,
343
+ template: args.policy.key,
344
+ });
345
+ return await updateState(() => openKv(args.service), derived, (state) => reduceRestoreReplacedQueuedJob({
346
+ state,
347
+ derived,
348
+ replacementJobId: args.replacementJobId,
349
+ replaced: args.replaced,
350
+ now: args.now,
351
+ policy: args.policy,
352
+ }));
353
+ },
354
+ async removeQueuedJob(args) {
355
+ const derived = await deriveJobKey({
356
+ service: args.service,
357
+ jobType: args.jobType,
358
+ payload: args.payload,
359
+ template: args.policy.key,
360
+ });
361
+ return await updateState(() => openKv(args.service), derived, (state) => reduceRemoveQueuedJob({
362
+ state,
363
+ jobId: args.jobId,
364
+ now: args.now,
365
+ }));
366
+ },
367
+ async acquireActiveSlot(request) {
368
+ const derived = await deriveJobKey({
369
+ service: request.service,
370
+ jobType: request.jobType,
371
+ payload: request.payload,
372
+ template: request.policy.key,
373
+ });
374
+ const slotToken = crypto.randomUUID();
375
+ return await updateState(() => openKv(request.service), derived, (state) => reduceAcquireActiveSlot({
376
+ state,
377
+ derived,
378
+ request,
379
+ policy: request.policy,
380
+ slotToken,
381
+ }));
382
+ },
383
+ async renewHeartbeat(args) {
384
+ const derived = {
385
+ service: args.service,
386
+ jobType: args.jobType,
387
+ key: args.lease.key,
388
+ keyHash: args.lease.keyHash,
389
+ kvKey: `${args.service}.${args.jobType}.${args.lease.keyHash}`,
390
+ };
391
+ return await updateState(() => openKv(args.service), derived, (state) => reduceRenewHeartbeat({
392
+ state,
393
+ jobId: args.jobId,
394
+ slotToken: args.lease.slotToken,
395
+ now: args.now,
396
+ policy: args.lease.policy,
397
+ }));
398
+ },
399
+ async releaseActiveSlot(args) {
400
+ const derived = {
401
+ service: args.service,
402
+ jobType: args.jobType,
403
+ key: args.lease.key,
404
+ keyHash: args.lease.keyHash,
405
+ kvKey: `${args.service}.${args.jobType}.${args.lease.keyHash}`,
406
+ };
407
+ return await updateState(() => openKv(args.service), derived, (state) => reduceReleaseActiveSlot({
408
+ state,
409
+ jobId: args.jobId,
410
+ slotToken: args.lease.slotToken,
411
+ now: args.now,
412
+ }));
413
+ },
414
+ };
415
+ }
416
+ function jobKeysBucketName(prefix, service) {
417
+ return `${prefix}_${service}`;
418
+ }
419
+ function appendQueued(state, request, policy) {
420
+ return {
421
+ ...state,
422
+ maxActive: policy.maxActive,
423
+ maxQueuedPerKey: policy.queue.maxQueuedPerKey,
424
+ queued: [
425
+ ...state.queued,
426
+ {
427
+ jobId: request.jobId,
428
+ createdAt: request.createdAt,
429
+ requestId: request.context.requestId,
430
+ context: request.context,
431
+ },
432
+ ],
433
+ updatedAt: request.createdAt,
434
+ };
435
+ }
436
+ function emptyState(args) {
437
+ return {
438
+ version: 1,
439
+ service: args.service,
440
+ jobType: args.jobType,
441
+ key: args.key,
442
+ keyHash: args.keyHash,
443
+ maxActive: args.policy.maxActive,
444
+ maxQueuedPerKey: args.policy.queue.maxQueuedPerKey,
445
+ active: [],
446
+ queued: [],
447
+ staleTakeoverCount: 0,
448
+ updatedAt: args.now,
449
+ };
450
+ }
451
+ function resolveJsonPointer(payload, pointer) {
452
+ const tokens = pointer.slice(1).split("/").map((token) => token.replaceAll("~1", "/").replaceAll("~0", "~"));
453
+ let current = payload;
454
+ for (const token of tokens) {
455
+ if (Array.isArray(current)) {
456
+ if (!/^0$|^[1-9][0-9]*$/.test(token)) {
457
+ return undefined;
458
+ }
459
+ current = current[Number(token)];
460
+ continue;
461
+ }
462
+ if (current !== null && typeof current === "object") {
463
+ current = current[token];
464
+ continue;
465
+ }
466
+ return undefined;
467
+ }
468
+ return current;
469
+ }
470
+ function isScalarKeySegment(value) {
471
+ return typeof value === "string" ||
472
+ (typeof value === "number" && Number.isFinite(value)) ||
473
+ typeof value === "boolean";
474
+ }
475
+ async function updateState(openKv, derived, reducer) {
476
+ const kv = await openKv();
477
+ for (let attempt = 0; attempt < MAX_CAS_ATTEMPTS; attempt += 1) {
478
+ const entry = await getStateEntry(kv, derived.kvKey);
479
+ const current = entry ? parseState(entry, derived) : undefined;
480
+ const outcome = reducer(current);
481
+ const next = outcomeState(outcome);
482
+ if (!next) {
483
+ return outcome;
484
+ }
485
+ try {
486
+ if (entry) {
487
+ await kv.update(derived.kvKey, JSON.stringify(next), entry.revision);
488
+ }
489
+ else {
490
+ await kv.create(derived.kvKey, JSON.stringify(next));
491
+ }
492
+ return outcome;
493
+ }
494
+ catch (error) {
495
+ if (!isCasConflict(error)) {
496
+ throw error;
497
+ }
498
+ }
499
+ }
500
+ throw new Error(`Could not update keyed job state '${derived.kvKey}'`);
501
+ }
502
+ async function getStateEntry(kv, key) {
503
+ const entry = await kv.get(key);
504
+ if (!entry || entry.operation === "DEL" || entry.operation === "PURGE") {
505
+ return undefined;
506
+ }
507
+ return entry;
508
+ }
509
+ function parseState(entry, derived) {
510
+ const decoded = entry.json();
511
+ if (!isJobKeyState(decoded)) {
512
+ return undefined;
513
+ }
514
+ assertStateMatchesDerived(decoded, derived);
515
+ return decoded;
516
+ }
517
+ function assertStateMatchesDerived(state, derived) {
518
+ if (state.service !== derived.service || state.jobType !== derived.jobType ||
519
+ state.keyHash !== derived.keyHash) {
520
+ throw new Error(`keyed job state '${derived.kvKey}' does not match derived service, job type, and key hash`);
521
+ }
522
+ }
523
+ /** Returns whether an unknown value is a well-formed keyed job coordination state. */
524
+ function isJobKeyState(value) {
525
+ if (value === null || typeof value !== "object")
526
+ return false;
527
+ const state = value;
528
+ return state.version === 1 && isNonEmptyString(state.service) &&
529
+ isNonEmptyString(state.jobType) && typeof state.key === "string" &&
530
+ isNonEmptyString(state.keyHash) && isPositiveInteger(state.maxActive) &&
531
+ (state.maxQueuedPerKey === undefined ||
532
+ isNonNegativeInteger(state.maxQueuedPerKey)) &&
533
+ Array.isArray(state.active) && state.active.every(isJobKeyActiveSlot) &&
534
+ Array.isArray(state.queued) && state.queued.every(isJobKeyQueued) &&
535
+ isNonNegativeInteger(state.staleTakeoverCount) &&
536
+ isValidIsoTimestamp(state.updatedAt);
537
+ }
538
+ function isJobKeyQueued(value) {
539
+ if (value === null || typeof value !== "object")
540
+ return false;
541
+ const entry = value;
542
+ return isNonEmptyString(entry.jobId) &&
543
+ isValidIsoTimestamp(entry.createdAt) &&
544
+ isNonEmptyString(entry.requestId) && isJobContext(entry.context);
545
+ }
546
+ function isJobKeyActiveSlot(value) {
547
+ if (value === null || typeof value !== "object")
548
+ return false;
549
+ const slot = value;
550
+ return isNonEmptyString(slot.jobId) && isNonEmptyString(slot.slotToken) &&
551
+ isNonEmptyString(slot.instanceId) && isValidIsoTimestamp(slot.startedAt) &&
552
+ isValidIsoTimestamp(slot.heartbeatAt) &&
553
+ isValidIsoTimestamp(slot.leaseExpiresAt) &&
554
+ isNonNegativeInteger(slot.tries) && isJobContext(slot.context);
555
+ }
556
+ function isJobContext(value) {
557
+ if (value === null || typeof value !== "object")
558
+ return false;
559
+ const context = value;
560
+ return isNonEmptyString(context.requestId) &&
561
+ isNonEmptyString(context.traceId) &&
562
+ isNonEmptyString(context.traceparent) &&
563
+ (context.tracestate === undefined ||
564
+ typeof context.tracestate === "string");
565
+ }
566
+ function isNonEmptyString(value) {
567
+ return typeof value === "string" && value.length > 0;
568
+ }
569
+ function isPositiveInteger(value) {
570
+ return typeof value === "number" && Number.isInteger(value) && value > 0;
571
+ }
572
+ function isNonNegativeInteger(value) {
573
+ return typeof value === "number" && Number.isInteger(value) && value >= 0;
574
+ }
575
+ function isValidIsoTimestamp(value) {
576
+ return typeof value === "string" && Number.isFinite(Date.parse(value));
577
+ }
578
+ function outcomeState(outcome) {
579
+ if (outcome === null || typeof outcome !== "object")
580
+ return undefined;
581
+ const candidate = outcome;
582
+ return isJobKeyState(candidate.state) ? candidate.state : undefined;
583
+ }
584
+ function isCasConflict(error) {
585
+ if (!(error instanceof Error))
586
+ return false;
587
+ const message = error.message.toLowerCase();
588
+ return message.includes("wrong last sequence") ||
589
+ message.includes("wrong last_seq") ||
590
+ message.includes("sequence mismatch") ||
591
+ message.includes("entry exists") ||
592
+ message.includes("already exists");
593
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/server/internal_jobs/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAW1D,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACpE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,GACjC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,SAAS,CAQpC"}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/server/internal_jobs/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAa1D,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAEnD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACpE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,GACjC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,SAAS,CAQpC"}
@@ -7,6 +7,8 @@ const TERMINAL_STATES = new Set([
7
7
  "failed",
8
8
  "cancelled",
9
9
  "expired",
10
+ "skipped",
11
+ "stale",
10
12
  "dead",
11
13
  "dismissed",
12
14
  ]);
@@ -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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"}