@adonis-agora/durable 0.49.1 → 0.50.0

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 (324) hide show
  1. package/CHANGELOG.md +251 -0
  2. package/README.md +53 -22
  3. package/dist/assets/spa/assets/index-DupjrK7N.js +16 -0
  4. package/dist/assets/spa/assets/index-DupjrK7N.js.map +1 -0
  5. package/dist/assets/spa/index.html +1 -1
  6. package/dist/commands/durable_worker.d.ts.map +1 -1
  7. package/dist/commands/durable_worker.js +9 -8
  8. package/dist/commands/durable_worker.js.map +1 -1
  9. package/dist/configure.d.ts.map +1 -1
  10. package/dist/configure.js +1 -0
  11. package/dist/configure.js.map +1 -1
  12. package/dist/providers/dashboard_provider.d.ts +2 -0
  13. package/dist/providers/dashboard_provider.d.ts.map +1 -1
  14. package/dist/providers/dashboard_provider.js +50 -6
  15. package/dist/providers/dashboard_provider.js.map +1 -1
  16. package/dist/providers/durable_provider.d.ts.map +1 -1
  17. package/dist/providers/durable_provider.js +143 -34
  18. package/dist/providers/durable_provider.js.map +1 -1
  19. package/dist/src/admission-redis/redis-admission-backend.d.ts.map +1 -1
  20. package/dist/src/admission-redis/redis-admission-backend.js +3 -1
  21. package/dist/src/admission-redis/redis-admission-backend.js.map +1 -1
  22. package/dist/src/ambient-step.d.ts +24 -0
  23. package/dist/src/ambient-step.d.ts.map +1 -0
  24. package/dist/src/ambient-step.js +42 -0
  25. package/dist/src/ambient-step.js.map +1 -0
  26. package/dist/src/base-workflow.d.ts +10 -1
  27. package/dist/src/base-workflow.d.ts.map +1 -1
  28. package/dist/src/base-workflow.js.map +1 -1
  29. package/dist/src/codec-state-store.d.ts +28 -2
  30. package/dist/src/codec-state-store.d.ts.map +1 -1
  31. package/dist/src/codec-state-store.js +61 -3
  32. package/dist/src/codec-state-store.js.map +1 -1
  33. package/dist/src/commands/worker.d.ts +4 -1
  34. package/dist/src/commands/worker.d.ts.map +1 -1
  35. package/dist/src/commands/worker.js +27 -3
  36. package/dist/src/commands/worker.js.map +1 -1
  37. package/dist/src/config_types.d.ts +6 -0
  38. package/dist/src/config_types.d.ts.map +1 -1
  39. package/dist/src/control-plane-redis/redis-control-plane.d.ts.map +1 -1
  40. package/dist/src/control-plane-redis/redis-control-plane.js +22 -6
  41. package/dist/src/control-plane-redis/redis-control-plane.js.map +1 -1
  42. package/dist/src/control-planes/factory.d.ts +6 -0
  43. package/dist/src/control-planes/factory.d.ts.map +1 -1
  44. package/dist/src/control-planes/factory.js +1 -0
  45. package/dist/src/control-planes/factory.js.map +1 -1
  46. package/dist/src/dashboard/gateway-adapter.d.ts +15 -5
  47. package/dist/src/dashboard/gateway-adapter.d.ts.map +1 -1
  48. package/dist/src/dashboard/gateway-adapter.js +71 -7
  49. package/dist/src/dashboard/gateway-adapter.js.map +1 -1
  50. package/dist/src/dashboard/handlers.d.ts +53 -1
  51. package/dist/src/dashboard/handlers.d.ts.map +1 -1
  52. package/dist/src/dashboard/handlers.js +200 -20
  53. package/dist/src/dashboard/handlers.js.map +1 -1
  54. package/dist/src/dashboard/index.d.ts +2 -2
  55. package/dist/src/dashboard/index.d.ts.map +1 -1
  56. package/dist/src/dashboard/index.js +2 -2
  57. package/dist/src/dashboard/index.js.map +1 -1
  58. package/dist/src/dashboard/openapi.d.ts.map +1 -1
  59. package/dist/src/dashboard/openapi.js +71 -1
  60. package/dist/src/dashboard/openapi.js.map +1 -1
  61. package/dist/src/define_config.d.ts +122 -8
  62. package/dist/src/define_config.d.ts.map +1 -1
  63. package/dist/src/define_config.js.map +1 -1
  64. package/dist/src/diagnostics-bridge.d.ts +16 -3
  65. package/dist/src/diagnostics-bridge.d.ts.map +1 -1
  66. package/dist/src/diagnostics-bridge.js +9 -3
  67. package/dist/src/diagnostics-bridge.js.map +1 -1
  68. package/dist/src/discovery-roots.d.ts +92 -0
  69. package/dist/src/discovery-roots.d.ts.map +1 -0
  70. package/dist/src/discovery-roots.js +150 -0
  71. package/dist/src/discovery-roots.js.map +1 -0
  72. package/dist/src/engine.d.ts +418 -20
  73. package/dist/src/engine.d.ts.map +1 -1
  74. package/dist/src/engine.js +1523 -159
  75. package/dist/src/engine.js.map +1 -1
  76. package/dist/src/entities.d.ts +36 -1
  77. package/dist/src/entities.d.ts.map +1 -1
  78. package/dist/src/entities.js +65 -4
  79. package/dist/src/entities.js.map +1 -1
  80. package/dist/src/errors.d.ts +36 -0
  81. package/dist/src/errors.d.ts.map +1 -1
  82. package/dist/src/errors.js +44 -0
  83. package/dist/src/errors.js.map +1 -1
  84. package/dist/src/event-trigger-bridge.d.ts +8 -0
  85. package/dist/src/event-trigger-bridge.d.ts.map +1 -1
  86. package/dist/src/event-trigger-bridge.js +24 -3
  87. package/dist/src/event-trigger-bridge.js.map +1 -1
  88. package/dist/src/handshake/announced.d.ts +27 -0
  89. package/dist/src/handshake/announced.d.ts.map +1 -1
  90. package/dist/src/handshake/announced.js +62 -0
  91. package/dist/src/handshake/announced.js.map +1 -1
  92. package/dist/src/handshake/directory.d.ts +92 -0
  93. package/dist/src/handshake/directory.d.ts.map +1 -0
  94. package/dist/src/handshake/directory.js +139 -0
  95. package/dist/src/handshake/directory.js.map +1 -0
  96. package/dist/src/hooks/barrel-sources.d.ts +28 -0
  97. package/dist/src/hooks/barrel-sources.d.ts.map +1 -0
  98. package/dist/src/hooks/barrel-sources.js +92 -0
  99. package/dist/src/hooks/barrel-sources.js.map +1 -0
  100. package/dist/src/hooks/steps.d.ts +12 -3
  101. package/dist/src/hooks/steps.d.ts.map +1 -1
  102. package/dist/src/hooks/steps.js +7 -11
  103. package/dist/src/hooks/steps.js.map +1 -1
  104. package/dist/src/hooks/workflows.d.ts +12 -3
  105. package/dist/src/hooks/workflows.d.ts.map +1 -1
  106. package/dist/src/hooks/workflows.js +7 -13
  107. package/dist/src/hooks/workflows.js.map +1 -1
  108. package/dist/src/index.d.ts +12 -3
  109. package/dist/src/index.d.ts.map +1 -1
  110. package/dist/src/index.js +12 -3
  111. package/dist/src/index.js.map +1 -1
  112. package/dist/src/interfaces.d.ts +309 -21
  113. package/dist/src/interfaces.d.ts.map +1 -1
  114. package/dist/src/interfaces.js +10 -0
  115. package/dist/src/interfaces.js.map +1 -1
  116. package/dist/src/metrics.d.ts.map +1 -1
  117. package/dist/src/metrics.js +5 -0
  118. package/dist/src/metrics.js.map +1 -1
  119. package/dist/src/namespaces.d.ts +17 -0
  120. package/dist/src/namespaces.d.ts.map +1 -0
  121. package/dist/src/namespaces.js +24 -0
  122. package/dist/src/namespaces.js.map +1 -0
  123. package/dist/src/otel/durable-metrics.d.ts.map +1 -1
  124. package/dist/src/otel/durable-metrics.js +5 -0
  125. package/dist/src/otel/durable-metrics.js.map +1 -1
  126. package/dist/src/otel/durable-otel.d.ts.map +1 -1
  127. package/dist/src/otel/durable-otel.js +5 -0
  128. package/dist/src/otel/durable-otel.js.map +1 -1
  129. package/dist/src/pollers.d.ts +10 -1
  130. package/dist/src/pollers.d.ts.map +1 -1
  131. package/dist/src/pollers.js +15 -5
  132. package/dist/src/pollers.js.map +1 -1
  133. package/dist/src/protocol.d.ts +12 -0
  134. package/dist/src/protocol.d.ts.map +1 -1
  135. package/dist/src/protocol.js +27 -1
  136. package/dist/src/protocol.js.map +1 -1
  137. package/dist/src/remote-event.d.ts +6 -0
  138. package/dist/src/remote-event.d.ts.map +1 -0
  139. package/dist/src/remote-event.js +19 -0
  140. package/dist/src/remote-event.js.map +1 -0
  141. package/dist/src/remote-workflow-executor.d.ts +34 -12
  142. package/dist/src/remote-workflow-executor.d.ts.map +1 -1
  143. package/dist/src/remote-workflow-executor.js +42 -40
  144. package/dist/src/remote-workflow-executor.js.map +1 -1
  145. package/dist/src/run-detail-summary.d.ts +90 -3
  146. package/dist/src/run-detail-summary.d.ts.map +1 -1
  147. package/dist/src/run-detail-summary.js +360 -2
  148. package/dist/src/run-detail-summary.js.map +1 -1
  149. package/dist/src/run-facets.d.ts +48 -0
  150. package/dist/src/run-facets.d.ts.map +1 -0
  151. package/dist/src/run-facets.js +100 -0
  152. package/dist/src/run-facets.js.map +1 -0
  153. package/dist/src/run-gateway/interface.d.ts +27 -1
  154. package/dist/src/run-gateway/interface.d.ts.map +1 -1
  155. package/dist/src/run-gateway/proxy-run-gateway.d.ts +32 -4
  156. package/dist/src/run-gateway/proxy-run-gateway.d.ts.map +1 -1
  157. package/dist/src/run-gateway/proxy-run-gateway.js +101 -5
  158. package/dist/src/run-gateway/proxy-run-gateway.js.map +1 -1
  159. package/dist/src/run-gateway/run-request-responder.d.ts +18 -5
  160. package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
  161. package/dist/src/run-gateway/run-request-responder.js +155 -32
  162. package/dist/src/run-gateway/run-request-responder.js.map +1 -1
  163. package/dist/src/run-gateway/store-run-gateway.d.ts +23 -1
  164. package/dist/src/run-gateway/store-run-gateway.d.ts.map +1 -1
  165. package/dist/src/run-gateway/store-run-gateway.js +38 -0
  166. package/dist/src/run-gateway/store-run-gateway.js.map +1 -1
  167. package/dist/src/search-attributes-schema.d.ts +44 -0
  168. package/dist/src/search-attributes-schema.d.ts.map +1 -0
  169. package/dist/src/search-attributes-schema.js +51 -0
  170. package/dist/src/search-attributes-schema.js.map +1 -0
  171. package/dist/src/singleton-admission.d.ts +75 -0
  172. package/dist/src/singleton-admission.d.ts.map +1 -0
  173. package/dist/src/singleton-admission.js +156 -0
  174. package/dist/src/singleton-admission.js.map +1 -0
  175. package/dist/src/singleton-gate.d.ts +23 -8
  176. package/dist/src/singleton-gate.d.ts.map +1 -1
  177. package/dist/src/singleton-gate.js +59 -12
  178. package/dist/src/singleton-gate.js.map +1 -1
  179. package/dist/src/standard-schema.d.ts +83 -0
  180. package/dist/src/standard-schema.d.ts.map +1 -0
  181. package/dist/src/standard-schema.js +31 -0
  182. package/dist/src/standard-schema.js.map +1 -0
  183. package/dist/src/step-discovery.d.ts +21 -11
  184. package/dist/src/step-discovery.d.ts.map +1 -1
  185. package/dist/src/step-discovery.js +86 -45
  186. package/dist/src/step-discovery.js.map +1 -1
  187. package/dist/src/step-ref.d.ts +38 -12
  188. package/dist/src/step-ref.d.ts.map +1 -1
  189. package/dist/src/step-ref.js +5 -13
  190. package/dist/src/step-ref.js.map +1 -1
  191. package/dist/src/stores/factory.d.ts +6 -0
  192. package/dist/src/stores/factory.d.ts.map +1 -1
  193. package/dist/src/stores/factory.js +4 -1
  194. package/dist/src/stores/factory.js.map +1 -1
  195. package/dist/src/stores/lucid-helpers.d.ts +2 -0
  196. package/dist/src/stores/lucid-helpers.d.ts.map +1 -1
  197. package/dist/src/stores/lucid-helpers.js +7 -0
  198. package/dist/src/stores/lucid-helpers.js.map +1 -1
  199. package/dist/src/stores/lucid-mappers.d.ts +25 -0
  200. package/dist/src/stores/lucid-mappers.d.ts.map +1 -1
  201. package/dist/src/stores/lucid-mappers.js +81 -18
  202. package/dist/src/stores/lucid-mappers.js.map +1 -1
  203. package/dist/src/stores/lucid-schema.d.ts +59 -1
  204. package/dist/src/stores/lucid-schema.d.ts.map +1 -1
  205. package/dist/src/stores/lucid-schema.js +271 -25
  206. package/dist/src/stores/lucid-schema.js.map +1 -1
  207. package/dist/src/stores/lucid.d.ts +61 -2
  208. package/dist/src/stores/lucid.d.ts.map +1 -1
  209. package/dist/src/stores/lucid.js +346 -41
  210. package/dist/src/stores/lucid.js.map +1 -1
  211. package/dist/src/telescope/dashboard.d.ts.map +1 -1
  212. package/dist/src/telescope/dashboard.js +30 -1
  213. package/dist/src/telescope/dashboard.js.map +1 -1
  214. package/dist/src/telescope/data-providers.d.ts +19 -1
  215. package/dist/src/telescope/data-providers.d.ts.map +1 -1
  216. package/dist/src/telescope/data-providers.js +119 -3
  217. package/dist/src/telescope/data-providers.js.map +1 -1
  218. package/dist/src/telescope/extension.d.ts.map +1 -1
  219. package/dist/src/telescope/extension.js +2 -1
  220. package/dist/src/telescope/extension.js.map +1 -1
  221. package/dist/src/telescope/index.d.ts +1 -1
  222. package/dist/src/telescope/index.d.ts.map +1 -1
  223. package/dist/src/telescope/index.js +1 -1
  224. package/dist/src/telescope/index.js.map +1 -1
  225. package/dist/src/testing/in-memory-state-store.d.ts +44 -15
  226. package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
  227. package/dist/src/testing/in-memory-state-store.js +204 -41
  228. package/dist/src/testing/in-memory-state-store.js.map +1 -1
  229. package/dist/src/testing-kit/checkpoint-aggregation-contract.d.ts +16 -0
  230. package/dist/src/testing-kit/checkpoint-aggregation-contract.d.ts.map +1 -0
  231. package/dist/src/testing-kit/checkpoint-aggregation-contract.js +228 -0
  232. package/dist/src/testing-kit/checkpoint-aggregation-contract.js.map +1 -0
  233. package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
  234. package/dist/src/testing-kit/state-store-conformance.js +355 -3
  235. package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
  236. package/dist/src/transport-pool.d.ts +15 -1
  237. package/dist/src/transport-pool.d.ts.map +1 -1
  238. package/dist/src/transport-pool.js +50 -4
  239. package/dist/src/transport-pool.js.map +1 -1
  240. package/dist/src/transports/adaptive-concurrency.d.ts +168 -0
  241. package/dist/src/transports/adaptive-concurrency.d.ts.map +1 -0
  242. package/dist/src/transports/adaptive-concurrency.js +353 -0
  243. package/dist/src/transports/adaptive-concurrency.js.map +1 -0
  244. package/dist/src/transports/bullmq/adaptive-concurrency.d.ts +1 -165
  245. package/dist/src/transports/bullmq/adaptive-concurrency.d.ts.map +1 -1
  246. package/dist/src/transports/bullmq/adaptive-concurrency.js +3 -351
  247. package/dist/src/transports/bullmq/adaptive-concurrency.js.map +1 -1
  248. package/dist/src/transports/bullmq/bullmq-transport.d.ts +49 -1
  249. package/dist/src/transports/bullmq/bullmq-transport.d.ts.map +1 -1
  250. package/dist/src/transports/bullmq/bullmq-transport.js +330 -38
  251. package/dist/src/transports/bullmq/bullmq-transport.js.map +1 -1
  252. package/dist/src/transports/bullmq/deps.d.ts +18 -2
  253. package/dist/src/transports/bullmq/deps.d.ts.map +1 -1
  254. package/dist/src/transports/bullmq/deps.js +44 -2
  255. package/dist/src/transports/bullmq/deps.js.map +1 -1
  256. package/dist/src/transports/db-helpers.d.ts +39 -0
  257. package/dist/src/transports/db-helpers.d.ts.map +1 -1
  258. package/dist/src/transports/db-helpers.js +73 -0
  259. package/dist/src/transports/db-helpers.js.map +1 -1
  260. package/dist/src/transports/db-remote.d.ts +53 -0
  261. package/dist/src/transports/db-remote.d.ts.map +1 -0
  262. package/dist/src/transports/db-remote.js +147 -0
  263. package/dist/src/transports/db-remote.js.map +1 -0
  264. package/dist/src/transports/db-schema.d.ts +44 -1
  265. package/dist/src/transports/db-schema.d.ts.map +1 -1
  266. package/dist/src/transports/db-schema.js +227 -88
  267. package/dist/src/transports/db-schema.js.map +1 -1
  268. package/dist/src/transports/db.d.ts +189 -6
  269. package/dist/src/transports/db.d.ts.map +1 -1
  270. package/dist/src/transports/db.js +1291 -137
  271. package/dist/src/transports/db.js.map +1 -1
  272. package/dist/src/transports/event-emitter.d.ts +8 -0
  273. package/dist/src/transports/event-emitter.d.ts.map +1 -1
  274. package/dist/src/transports/event-emitter.js +36 -3
  275. package/dist/src/transports/event-emitter.js.map +1 -1
  276. package/dist/src/transports/factory.d.ts +110 -5
  277. package/dist/src/transports/factory.d.ts.map +1 -1
  278. package/dist/src/transports/factory.js +56 -9
  279. package/dist/src/transports/factory.js.map +1 -1
  280. package/dist/src/transports/queue-mock-adapter.d.ts +7 -2
  281. package/dist/src/transports/queue-mock-adapter.d.ts.map +1 -1
  282. package/dist/src/transports/queue-mock-adapter.js +18 -2
  283. package/dist/src/transports/queue-mock-adapter.js.map +1 -1
  284. package/dist/src/transports/queue-remote.d.ts +146 -0
  285. package/dist/src/transports/queue-remote.d.ts.map +1 -0
  286. package/dist/src/transports/queue-remote.js +398 -0
  287. package/dist/src/transports/queue-remote.js.map +1 -0
  288. package/dist/src/transports/queue.d.ts +159 -6
  289. package/dist/src/transports/queue.d.ts.map +1 -1
  290. package/dist/src/transports/queue.js +747 -37
  291. package/dist/src/transports/queue.js.map +1 -1
  292. package/dist/src/transports/task-failure.d.ts +31 -0
  293. package/dist/src/transports/task-failure.d.ts.map +1 -0
  294. package/dist/src/transports/task-failure.js +50 -0
  295. package/dist/src/transports/task-failure.js.map +1 -0
  296. package/dist/src/workflow-als.d.ts +1 -1
  297. package/dist/src/workflow-als.d.ts.map +1 -1
  298. package/dist/src/workflow-ctx.d.ts +10 -0
  299. package/dist/src/workflow-ctx.d.ts.map +1 -1
  300. package/dist/src/workflow-ctx.js +97 -15
  301. package/dist/src/workflow-ctx.js.map +1 -1
  302. package/dist/src/workflow-discovery.d.ts +32 -41
  303. package/dist/src/workflow-discovery.d.ts.map +1 -1
  304. package/dist/src/workflow-discovery.js +65 -88
  305. package/dist/src/workflow-discovery.js.map +1 -1
  306. package/dist/src/workflow-ref.d.ts +24 -0
  307. package/dist/src/workflow-ref.d.ts.map +1 -1
  308. package/dist/src/workflow-ref.js.map +1 -1
  309. package/dist/stubs/config/durable.stub +6 -0
  310. package/dist/stubs/config/durable_dashboard.stub +7 -3
  311. package/dist/stubs/database/migrations/create_durable_tables.stub +2 -1
  312. package/dist/stubs/database/migrations/create_durable_transport_messages.stub +43 -0
  313. package/dist/stubs/database/migrations/create_durable_transport_tables.stub +12 -9
  314. package/dist/stubs/database/migrations/create_durable_transport_worker_keys.stub +1 -1
  315. package/dist/stubs/make/workflow/main.stub +1 -1
  316. package/package.json +6 -4
  317. package/skills/durable-cluster/SKILL.md +80 -11
  318. package/skills/durable-determinism/SKILL.md +11 -5
  319. package/skills/durable-reliability/SKILL.md +77 -37
  320. package/skills/durable-setup/SKILL.md +51 -22
  321. package/skills/durable-transports-stores/SKILL.md +128 -18
  322. package/skills/durable-workflows/SKILL.md +71 -18
  323. package/dist/assets/spa/assets/index-DdB9zxuX.js +0 -16
  324. package/dist/assets/spa/assets/index-DdB9zxuX.js.map +0 -1
@@ -1,3 +1,21 @@
1
+ import { widenMysqlLongtextColumns } from '../stores/lucid-schema.js';
2
+ /**
3
+ * Create `name` unless it exists. Every instance runs this on first use, so two of them starting
4
+ * together race the same CREATE: the loser's statement fails although the table is there — which is
5
+ * success. Only an error that leaves the table missing is rethrown.
6
+ */
7
+ async function createTableIfMissing(db, name, build) {
8
+ const schema = () => db.connection().schema;
9
+ if (await schema().hasTable(name))
10
+ return;
11
+ try {
12
+ await schema().createTable(name, build);
13
+ }
14
+ catch (err) {
15
+ if (!(await schema().hasTable(name)))
16
+ throw err;
17
+ }
18
+ }
1
19
  /**
2
20
  * The DB transport's table names. Distinct from the durable *store* tables (`durable_workflow_runs`
3
21
  * etc.) — these carry the point-to-point work channels (tasks / results / heartbeats / control), so
@@ -8,6 +26,21 @@ export const TRANSPORT_TABLES = {
8
26
  results: 'durable_transport_results',
9
27
  heartbeats: 'durable_transport_heartbeats',
10
28
  control: 'durable_transport_control',
29
+ /** Remote-workflow decisions and step events, and the store-less (tenant pod) protocol's start-run,
30
+ * run-request, run-reply and tenant-event rows — one table told apart by `kind`. */
31
+ messages: 'durable_transport_messages',
32
+ };
33
+ /**
34
+ * The `kind`s of a {@link TRANSPORT_TABLES.messages} row. `recipient` is `''` for a row any consumer
35
+ * of the kind may claim, or the instance id of the one consumer it is addressed to.
36
+ */
37
+ export const MESSAGE_KINDS = {
38
+ decision: 'decision',
39
+ stepEvent: 'stepEvent',
40
+ startRun: 'startRun',
41
+ runRequest: 'runRequest',
42
+ runReply: 'runReply',
43
+ tenantEvent: 'tenantEvent',
11
44
  };
12
45
  /**
13
46
  * The worker advertisement keys (design §7.2) — the descriptor and heartbeat keys a worker runtime
@@ -21,18 +54,39 @@ export const WORKER_KEYS_TABLE = 'durable_transport_worker_keys';
21
54
  * the db transport's other tables.
22
55
  */
23
56
  export async function createWorkerKeysTable(db) {
24
- const conn = () => db.connection().schema;
25
- if (await conn().hasTable(WORKER_KEYS_TABLE))
57
+ await createTableIfMissing(db, WORKER_KEYS_TABLE, buildWorkerKeysTable);
58
+ await widenPayloadColumns(db, [WORKER_KEYS_TABLE]);
59
+ }
60
+ /**
61
+ * The columns that hold free-form JSON payloads (a step's input/output/error/events, the control and
62
+ * message payloads, a worker key's value). They are `longtext` on MySQL, where `text` stops at 64KB
63
+ * and a bigger step input or output fails to write (strict mode) or is cut off; an existing `text`
64
+ * one is widened in place on boot. Postgres and SQLite `text` has no limit and is unchanged.
65
+ * `notNull` lists the `NOT NULL` ones, which a MySQL `MODIFY` must restate.
66
+ */
67
+ export const TRANSPORT_JSON_COLUMNS = {
68
+ durable_transport_tasks: { columns: ['input', 'context'] },
69
+ durable_transport_results: { columns: ['output', 'error', 'events'] },
70
+ durable_transport_control: { columns: ['payload'], notNull: ['payload'] },
71
+ durable_transport_messages: { columns: ['payload'], notNull: ['payload'] },
72
+ durable_transport_worker_keys: { columns: ['value'], notNull: ['value'] },
73
+ };
74
+ /** MySQL only: widen the {@link TRANSPORT_JSON_COLUMNS} of `tables` that are still `text`. */
75
+ async function widenPayloadColumns(db, tables) {
76
+ const client = db.connection();
77
+ if (client.dialect.name !== 'mysql')
26
78
  return;
27
- await conn().createTable(WORKER_KEYS_TABLE, (table) => {
28
- table.string('key', 512).primary();
29
- table.text('value').notNullable();
30
- table.bigInteger('expires_at').notNullable();
31
- table.index(['expires_at'], 'durable_transport_worker_keys_expires_idx');
32
- });
79
+ const spec = Object.fromEntries(tables.flatMap((t) => (TRANSPORT_JSON_COLUMNS[t] ? [[t, TRANSPORT_JSON_COLUMNS[t]]] : [])));
80
+ await widenMysqlLongtextColumns(client, spec);
81
+ }
82
+ function buildWorkerKeysTable(table) {
83
+ table.string('key', 512).primary();
84
+ table.text('value', 'longtext').notNullable();
85
+ table.bigInteger('expires_at').notNullable();
86
+ table.index(['expires_at'], 'durable_transport_worker_keys_expires_idx');
33
87
  }
34
88
  /**
35
- * Idempotent DDL for the four transport tables, via Lucid's schema builder (Knex). Portable across
89
+ * Idempotent DDL for the transport tables, via Lucid's schema builder (Knex). Portable across
36
90
  * SQLite / Postgres / MySQL: JSON payloads (`input`/`output`/`error`/`payload`) are stored as TEXT
37
91
  * and (de)serialized by the transport, and every timestamp is an epoch-ms `bigInteger`, so there's
38
92
  * no dependency on a dialect's native JSON/date type.
@@ -44,96 +98,181 @@ export async function createWorkerKeysTable(db) {
44
98
  * (`node ace configure @adonis-agora/durable`); this helper is for standalone use and tests.
45
99
  */
46
100
  export async function createDurableTransportTables(db) {
47
- // Knex's schema builder is stateful — take a FRESH `db.connection().schema` per hasTable/createTable
48
- // so each DDL statement executes exactly once.
49
- const conn = () => db.connection().schema;
50
- // ── tasks: engine → worker (a RemoteTask) ──────────────────────────────────
51
- if (!(await conn().hasTable(TRANSPORT_TABLES.tasks))) {
52
- await conn().createTable(TRANSPORT_TABLES.tasks, (table) => {
53
- table.string('step_id').primary();
54
- table.string('run_id').notNullable();
55
- table.integer('seq').notNullable();
56
- table.string('name').notNullable();
57
- table.string('grp').notNullable();
58
- table.string('namespace').notNullable().defaultTo('default');
59
- table.text('input');
60
- table.string('traceparent');
61
- table.text('context');
62
- table.string('transport');
63
- table.integer('attempt').notNullable();
64
- table.string('claimed_by');
65
- table.bigInteger('claimed_at');
66
- table.bigInteger('created_at').notNullable();
67
- table.index(['namespace', 'grp', 'claimed_at', 'created_at'], 'durable_transport_tasks_grp_idx');
68
- });
69
- }
70
- // ── results: worker → engine (a StepResult) ────────────────────────────────
71
- if (!(await conn().hasTable(TRANSPORT_TABLES.results))) {
72
- await conn().createTable(TRANSPORT_TABLES.results, (table) => {
73
- table.string('step_id').primary();
74
- table.string('run_id').notNullable();
75
- table.integer('seq').notNullable();
76
- table.string('status').notNullable();
77
- table.string('namespace').notNullable().defaultTo('default');
78
- table.text('output');
79
- table.text('error');
80
- table.bigInteger('started_at');
81
- table.text('events');
82
- table.string('claimed_by');
83
- table.bigInteger('claimed_at');
84
- table.bigInteger('created_at').notNullable();
85
- table.index(['namespace', 'claimed_at', 'created_at'], 'durable_transport_results_idx');
86
- });
87
- }
88
- // ── heartbeats: worker → engine (liveness for a long step) ─────────────────
89
- if (!(await conn().hasTable(TRANSPORT_TABLES.heartbeats))) {
90
- await conn().createTable(TRANSPORT_TABLES.heartbeats, (table) => {
91
- table.increments('id').primary();
92
- table.string('run_id').notNullable();
93
- table.integer('seq').notNullable();
94
- table.string('step_id').notNullable();
95
- table.string('grp').notNullable();
96
- table.string('namespace').notNullable().defaultTo('default');
97
- table.string('claimed_by');
98
- table.bigInteger('claimed_at');
99
- table.bigInteger('created_at').notNullable();
100
- table.index(['namespace', 'claimed_at', 'created_at'], 'durable_transport_heartbeats_idx');
101
- });
102
- }
103
- // ── control: best-effort control-plane messages (single-consumer) ──────────
104
- if (!(await conn().hasTable(TRANSPORT_TABLES.control))) {
105
- await conn().createTable(TRANSPORT_TABLES.control, (table) => {
106
- table.increments('id').primary();
107
- table.text('payload').notNullable();
108
- table.string('namespace').notNullable().defaultTo('default');
109
- table.string('claimed_by');
110
- table.bigInteger('claimed_at');
111
- table.bigInteger('created_at').notNullable();
112
- table.index(['namespace', 'claimed_at', 'created_at'], 'durable_transport_control_idx');
113
- });
101
+ // Knex's schema builder is stateful — createTableIfMissing takes a FRESH `db.connection().schema`
102
+ // per hasTable/createTable so each DDL statement executes exactly once.
103
+ for (const table of [
104
+ TRANSPORT_TABLES.tasks,
105
+ TRANSPORT_TABLES.results,
106
+ TRANSPORT_TABLES.heartbeats,
107
+ TRANSPORT_TABLES.control,
108
+ ]) {
109
+ await createTableIfMissing(db, table, TRANSPORT_TABLE_DEFS[table]);
114
110
  }
111
+ await createMessagesTable(db);
115
112
  await createWorkerKeysTable(db);
116
- // Upgrade path: a deployment created before namespaces existed already has these tables (so the
117
- // guards above skipped them) but lacks the `namespace` column. Back-fill it — `notNullable` +
118
- // `defaultTo('default')` stamps every legacy in-flight row `'default'`, so a default engine's
119
- // `WHERE namespace='default'` claims exactly the rows it did before. Idempotent via `hasColumn`.
120
- await ensureNamespaceColumn(db);
113
+ // Upgrade path: a deployment created by an older version already has these tables (so the guards
114
+ // above skipped them) but lacks the columns added since. Back-fill them — idempotent via
115
+ // `hasColumn`, and every added column is `notNullable` with a default, so legacy in-flight rows
116
+ // read exactly as they did before.
117
+ await ensureAddedColumns(db);
118
+ // MySQL: a table created while the payload columns were `text` gets them widened to `longtext`.
119
+ await widenPayloadColumns(db, Object.keys(TRANSPORT_JSON_COLUMNS));
120
+ }
121
+ /**
122
+ * Idempotent DDL for the messages table: one-shot rows like the other channels (claimed by one
123
+ * consumer, deleted once handled), told apart by `kind` and addressed by `recipient` — `''` for any
124
+ * consumer of the kind, else the instance id of the one it is for (a run reply, a tenant event, a
125
+ * decision for the engine that dispatched the turn). `reply_to` carries a request's requester.
126
+ */
127
+ export async function createMessagesTable(db) {
128
+ await createTableIfMissing(db, TRANSPORT_TABLES.messages, buildMessagesTable);
129
+ }
130
+ function buildMessagesTable(table) {
131
+ table.increments('id').primary();
132
+ table.string('kind', 32).notNullable();
133
+ table.string('namespace').notNullable().defaultTo('default');
134
+ table.string('recipient').notNullable().defaultTo('');
135
+ table.string('reply_to');
136
+ table.text('payload', 'longtext').notNullable();
137
+ table.string('claimed_by');
138
+ table.bigInteger('claimed_at');
139
+ table.bigInteger('created_at').notNullable();
140
+ table.index(['namespace', 'kind', 'recipient', 'claimed_at', 'id'], 'durable_transport_messages_idx');
121
141
  }
122
- /** Add the `namespace` column (default `'default'`) to any transport table created before namespaces. */
123
- async function ensureNamespaceColumn(db) {
124
- for (const table of Object.values(TRANSPORT_TABLES)) {
125
- const schema = db.connection().schema;
126
- if (!(await schema.hasColumn(table, 'namespace'))) {
127
- await db.connection().schema.alterTable(table, (t) => {
142
+ /**
143
+ * Columns added to the transport tables after their first release, with the default that makes a
144
+ * legacy row behave as before:
145
+ *
146
+ * - `namespace` on every channel table, `'default'` — a default engine's `WHERE namespace='default'`
147
+ * claims exactly the rows it did before namespaces existed.
148
+ * - `reclaims` on the tasks table, `0` — the count of lapsed claims taken over (the poison-task
149
+ * bound, see `DbTransportOptions.maxStalledCount`); a legacy row starts uncounted.
150
+ * - `priority` on the tasks table, `0` — the dispatch priority rows are claimed by (higher first);
151
+ * a legacy row is "normal", like a dispatch without a priority.
152
+ * - `kind` on the tasks table, `'step'` — what a row carries: a step, or a remote workflow turn; a
153
+ * legacy row is a step, the only kind there was.
154
+ */
155
+ async function ensureAddedColumns(db) {
156
+ const added = [
157
+ ...Object.values(TRANSPORT_TABLES).map((table) => ({
158
+ table,
159
+ column: 'namespace',
160
+ add: (t) => {
128
161
  t.string('namespace').notNullable().defaultTo('default');
129
- });
162
+ },
163
+ })),
164
+ {
165
+ table: TRANSPORT_TABLES.tasks,
166
+ column: 'reclaims',
167
+ add: (t) => {
168
+ t.integer('reclaims').notNullable().defaultTo(0);
169
+ },
170
+ },
171
+ {
172
+ table: TRANSPORT_TABLES.tasks,
173
+ column: 'priority',
174
+ add: (t) => {
175
+ t.integer('priority').notNullable().defaultTo(0);
176
+ },
177
+ },
178
+ {
179
+ table: TRANSPORT_TABLES.tasks,
180
+ column: 'kind',
181
+ add: (t) => {
182
+ t.string('kind', 16).notNullable().defaultTo('step');
183
+ },
184
+ },
185
+ ];
186
+ for (const { table, column, add } of added) {
187
+ if (await db.connection().schema.hasColumn(table, column))
188
+ continue;
189
+ try {
190
+ await db.connection().schema.alterTable(table, add);
191
+ }
192
+ catch (err) {
193
+ // Another instance added it first (the same race as createTableIfMissing).
194
+ if (!(await db.connection().schema.hasColumn(table, column)))
195
+ throw err;
130
196
  }
131
197
  }
132
198
  }
199
+ /**
200
+ * The CREATE TABLE body of every transport table (Knex schema builder), shared by
201
+ * {@link createDurableTransportTables} and the dialect tests. Payload columns are `longtext`, which
202
+ * Knex emits on MySQL only (Postgres and SQLite get `text`). See {@link TRANSPORT_JSON_COLUMNS}.
203
+ */
204
+ export const TRANSPORT_TABLE_DEFS = {
205
+ // ── tasks: engine → worker (a RemoteTask) ──────────────────────────────────
206
+ [TRANSPORT_TABLES.tasks]: (table) => {
207
+ table.string('step_id').primary();
208
+ table.string('run_id').notNullable();
209
+ table.integer('seq').notNullable();
210
+ table.string('name').notNullable();
211
+ table.string('grp').notNullable();
212
+ table.string('namespace').notNullable().defaultTo('default');
213
+ table.text('input', 'longtext');
214
+ table.string('traceparent');
215
+ table.text('context', 'longtext');
216
+ table.string('transport');
217
+ table.integer('attempt').notNullable();
218
+ // How many times a lapsed claim on this row was taken over — the poison-task bound.
219
+ table.integer('reclaims').notNullable().defaultTo(0);
220
+ // Dispatch priority, higher first (the engine's convention); absent = 0, "normal".
221
+ table.integer('priority').notNullable().defaultTo(0);
222
+ // `step` (a RemoteTask) or `workflow` (a remote workflow turn: a WorkflowTask in `input`).
223
+ table.string('kind', 16).notNullable().defaultTo('step');
224
+ table.string('claimed_by');
225
+ table.bigInteger('claimed_at');
226
+ table.bigInteger('created_at').notNullable();
227
+ table.index(['namespace', 'grp', 'claimed_at', 'created_at'], 'durable_transport_tasks_grp_idx');
228
+ },
229
+ // ── results: worker → engine (a StepResult) ────────────────────────────────
230
+ [TRANSPORT_TABLES.results]: (table) => {
231
+ table.string('step_id').primary();
232
+ table.string('run_id').notNullable();
233
+ table.integer('seq').notNullable();
234
+ table.string('status').notNullable();
235
+ table.string('namespace').notNullable().defaultTo('default');
236
+ table.text('output', 'longtext');
237
+ table.text('error', 'longtext');
238
+ table.bigInteger('started_at');
239
+ table.text('events', 'longtext');
240
+ table.string('claimed_by');
241
+ table.bigInteger('claimed_at');
242
+ table.bigInteger('created_at').notNullable();
243
+ table.index(['namespace', 'claimed_at', 'created_at'], 'durable_transport_results_idx');
244
+ },
245
+ // ── heartbeats: worker → engine (liveness for a long step) ─────────────────
246
+ [TRANSPORT_TABLES.heartbeats]: (table) => {
247
+ table.increments('id').primary();
248
+ table.string('run_id').notNullable();
249
+ table.integer('seq').notNullable();
250
+ table.string('step_id').notNullable();
251
+ table.string('grp').notNullable();
252
+ table.string('namespace').notNullable().defaultTo('default');
253
+ table.string('claimed_by');
254
+ table.bigInteger('claimed_at');
255
+ table.bigInteger('created_at').notNullable();
256
+ table.index(['namespace', 'claimed_at', 'created_at'], 'durable_transport_heartbeats_idx');
257
+ },
258
+ // ── control: best-effort control-plane messages (single-consumer) ──────────
259
+ [TRANSPORT_TABLES.control]: (table) => {
260
+ table.increments('id').primary();
261
+ table.text('payload', 'longtext').notNullable();
262
+ table.string('namespace').notNullable().defaultTo('default');
263
+ table.string('claimed_by');
264
+ table.bigInteger('claimed_at');
265
+ table.bigInteger('created_at').notNullable();
266
+ table.index(['namespace', 'claimed_at', 'created_at'], 'durable_transport_control_idx');
267
+ },
268
+ [TRANSPORT_TABLES.messages]: buildMessagesTable,
269
+ [WORKER_KEYS_TABLE]: buildWorkerKeysTable,
270
+ };
133
271
  /** Drop every transport table. Used by tests and the migration `down`. */
134
272
  export async function dropDurableTransportTables(db) {
135
273
  const conn = () => db.connection().schema;
136
274
  await conn().dropTableIfExists(WORKER_KEYS_TABLE);
275
+ await conn().dropTableIfExists(TRANSPORT_TABLES.messages);
137
276
  await conn().dropTableIfExists(TRANSPORT_TABLES.control);
138
277
  await conn().dropTableIfExists(TRANSPORT_TABLES.heartbeats);
139
278
  await conn().dropTableIfExists(TRANSPORT_TABLES.results);
@@ -1 +1 @@
1
- {"version":3,"file":"db-schema.js","sourceRoot":"","sources":["../../../src/transports/db-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db-schema.js","sourceRoot":"","sources":["../../../src/transports/db-schema.ts"],"names":[],"mappings":"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"}