@xyne/workflow-sdk 1.0.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 (310) hide show
  1. package/README.md +36 -0
  2. package/dist/agents/agent-step.d.ts +152 -0
  3. package/dist/agents/agent-step.d.ts.map +1 -0
  4. package/dist/agents/agent-step.js +403 -0
  5. package/dist/agents/agent-step.js.map +1 -0
  6. package/dist/agents/base-runtime.d.ts +38 -0
  7. package/dist/agents/base-runtime.d.ts.map +1 -0
  8. package/dist/agents/base-runtime.js +21 -0
  9. package/dist/agents/base-runtime.js.map +1 -0
  10. package/dist/agents/index.d.ts +12 -0
  11. package/dist/agents/index.d.ts.map +1 -0
  12. package/dist/agents/index.js +17 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/agents/interceptor.d.ts +19 -0
  15. package/dist/agents/interceptor.d.ts.map +1 -0
  16. package/dist/agents/interceptor.js +21 -0
  17. package/dist/agents/interceptor.js.map +1 -0
  18. package/dist/agents/interceptors/approval-gate.d.ts +14 -0
  19. package/dist/agents/interceptors/approval-gate.d.ts.map +1 -0
  20. package/dist/agents/interceptors/approval-gate.js +19 -0
  21. package/dist/agents/interceptors/approval-gate.js.map +1 -0
  22. package/dist/agents/interceptors/tool-logger.d.ts +15 -0
  23. package/dist/agents/interceptors/tool-logger.d.ts.map +1 -0
  24. package/dist/agents/interceptors/tool-logger.js +23 -0
  25. package/dist/agents/interceptors/tool-logger.js.map +1 -0
  26. package/dist/agents/pi-mono-runtime.d.ts +88 -0
  27. package/dist/agents/pi-mono-runtime.d.ts.map +1 -0
  28. package/dist/agents/pi-mono-runtime.js +129 -0
  29. package/dist/agents/pi-mono-runtime.js.map +1 -0
  30. package/dist/agents/tool-registry.d.ts +25 -0
  31. package/dist/agents/tool-registry.d.ts.map +1 -0
  32. package/dist/agents/tool-registry.js +47 -0
  33. package/dist/agents/tool-registry.js.map +1 -0
  34. package/dist/agents/tool-types.d.ts +25 -0
  35. package/dist/agents/tool-types.d.ts.map +1 -0
  36. package/dist/agents/tool-types.js +9 -0
  37. package/dist/agents/tool-types.js.map +1 -0
  38. package/dist/agents/types.d.ts +91 -0
  39. package/dist/agents/types.d.ts.map +1 -0
  40. package/dist/agents/types.js +12 -0
  41. package/dist/agents/types.js.map +1 -0
  42. package/dist/builder/index.d.ts +30 -0
  43. package/dist/builder/index.d.ts.map +1 -0
  44. package/dist/builder/index.js +32 -0
  45. package/dist/builder/index.js.map +1 -0
  46. package/dist/client/index.d.ts +19 -0
  47. package/dist/client/index.d.ts.map +1 -0
  48. package/dist/client/index.js +18 -0
  49. package/dist/client/index.js.map +1 -0
  50. package/dist/client/types.d.ts +128 -0
  51. package/dist/client/types.d.ts.map +1 -0
  52. package/dist/client/types.js +10 -0
  53. package/dist/client/types.js.map +1 -0
  54. package/dist/client/workflow-client.d.ts +15 -0
  55. package/dist/client/workflow-client.d.ts.map +1 -0
  56. package/dist/client/workflow-client.js +293 -0
  57. package/dist/client/workflow-client.js.map +1 -0
  58. package/dist/common/attachment.d.ts +31 -0
  59. package/dist/common/attachment.d.ts.map +1 -0
  60. package/dist/common/attachment.js +21 -0
  61. package/dist/common/attachment.js.map +1 -0
  62. package/dist/common/executable-check.d.ts +42 -0
  63. package/dist/common/executable-check.d.ts.map +1 -0
  64. package/dist/common/executable-check.js +115 -0
  65. package/dist/common/executable-check.js.map +1 -0
  66. package/dist/common/index.d.ts +21 -0
  67. package/dist/common/index.d.ts.map +1 -0
  68. package/dist/common/index.js +19 -0
  69. package/dist/common/index.js.map +1 -0
  70. package/dist/common/resume-payload.d.ts +34 -0
  71. package/dist/common/resume-payload.d.ts.map +1 -0
  72. package/dist/common/resume-payload.js +12 -0
  73. package/dist/common/resume-payload.js.map +1 -0
  74. package/dist/engine/available-context.d.ts +29 -0
  75. package/dist/engine/available-context.d.ts.map +1 -0
  76. package/dist/engine/available-context.js +66 -0
  77. package/dist/engine/available-context.js.map +1 -0
  78. package/dist/engine/condition-evaluator.d.ts +13 -0
  79. package/dist/engine/condition-evaluator.d.ts.map +1 -0
  80. package/dist/engine/condition-evaluator.js +92 -0
  81. package/dist/engine/condition-evaluator.js.map +1 -0
  82. package/dist/engine/config-validator.d.ts +25 -0
  83. package/dist/engine/config-validator.d.ts.map +1 -0
  84. package/dist/engine/config-validator.js +316 -0
  85. package/dist/engine/config-validator.js.map +1 -0
  86. package/dist/engine/pause-step.d.ts +20 -0
  87. package/dist/engine/pause-step.d.ts.map +1 -0
  88. package/dist/engine/pause-step.js +24 -0
  89. package/dist/engine/pause-step.js.map +1 -0
  90. package/dist/engine/service-registry.d.ts +49 -0
  91. package/dist/engine/service-registry.d.ts.map +1 -0
  92. package/dist/engine/service-registry.js +76 -0
  93. package/dist/engine/service-registry.js.map +1 -0
  94. package/dist/engine/variable-resolver.d.ts +29 -0
  95. package/dist/engine/variable-resolver.d.ts.map +1 -0
  96. package/dist/engine/variable-resolver.js +130 -0
  97. package/dist/engine/variable-resolver.js.map +1 -0
  98. package/dist/engine/workflow-executor.d.ts +96 -0
  99. package/dist/engine/workflow-executor.d.ts.map +1 -0
  100. package/dist/engine/workflow-executor.js +837 -0
  101. package/dist/engine/workflow-executor.js.map +1 -0
  102. package/dist/index.d.ts +57 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +56 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/persistence/in-memory-adapter.d.ts +138 -0
  107. package/dist/persistence/in-memory-adapter.d.ts.map +1 -0
  108. package/dist/persistence/in-memory-adapter.js +315 -0
  109. package/dist/persistence/in-memory-adapter.js.map +1 -0
  110. package/dist/persistence/types.d.ts +214 -0
  111. package/dist/persistence/types.d.ts.map +1 -0
  112. package/dist/persistence/types.js +8 -0
  113. package/dist/persistence/types.js.map +1 -0
  114. package/dist/router/types.d.ts +57 -0
  115. package/dist/router/types.d.ts.map +1 -0
  116. package/dist/router/types.js +8 -0
  117. package/dist/router/types.js.map +1 -0
  118. package/dist/router/workflow-router.d.ts +26 -0
  119. package/dist/router/workflow-router.d.ts.map +1 -0
  120. package/dist/router/workflow-router.js +611 -0
  121. package/dist/router/workflow-router.js.map +1 -0
  122. package/dist/runtime/execution-event-bus.d.ts +38 -0
  123. package/dist/runtime/execution-event-bus.d.ts.map +1 -0
  124. package/dist/runtime/execution-event-bus.js +87 -0
  125. package/dist/runtime/execution-event-bus.js.map +1 -0
  126. package/dist/runtime/types.d.ts +129 -0
  127. package/dist/runtime/types.d.ts.map +1 -0
  128. package/dist/runtime/types.js +5 -0
  129. package/dist/runtime/types.js.map +1 -0
  130. package/dist/runtime/workflow-runtime.d.ts +256 -0
  131. package/dist/runtime/workflow-runtime.d.ts.map +1 -0
  132. package/dist/runtime/workflow-runtime.js +699 -0
  133. package/dist/runtime/workflow-runtime.js.map +1 -0
  134. package/dist/steps/base-step.d.ts +204 -0
  135. package/dist/steps/base-step.d.ts.map +1 -0
  136. package/dist/steps/base-step.js +69 -0
  137. package/dist/steps/base-step.js.map +1 -0
  138. package/dist/steps/builtin/code.step.d.ts +95 -0
  139. package/dist/steps/builtin/code.step.d.ts.map +1 -0
  140. package/dist/steps/builtin/code.step.js +122 -0
  141. package/dist/steps/builtin/code.step.js.map +1 -0
  142. package/dist/steps/builtin/conditional.step.d.ts +146 -0
  143. package/dist/steps/builtin/conditional.step.d.ts.map +1 -0
  144. package/dist/steps/builtin/conditional.step.js +71 -0
  145. package/dist/steps/builtin/conditional.step.js.map +1 -0
  146. package/dist/steps/builtin/dedup.step.d.ts +65 -0
  147. package/dist/steps/builtin/dedup.step.d.ts.map +1 -0
  148. package/dist/steps/builtin/dedup.step.js +61 -0
  149. package/dist/steps/builtin/dedup.step.js.map +1 -0
  150. package/dist/steps/builtin/http-request.step.d.ts +928 -0
  151. package/dist/steps/builtin/http-request.step.d.ts.map +1 -0
  152. package/dist/steps/builtin/http-request.step.js +570 -0
  153. package/dist/steps/builtin/http-request.step.js.map +1 -0
  154. package/dist/steps/builtin/loop.step.d.ts +100 -0
  155. package/dist/steps/builtin/loop.step.d.ts.map +1 -0
  156. package/dist/steps/builtin/loop.step.js +79 -0
  157. package/dist/steps/builtin/loop.step.js.map +1 -0
  158. package/dist/steps/builtin/parallel.step.d.ts +208 -0
  159. package/dist/steps/builtin/parallel.step.d.ts.map +1 -0
  160. package/dist/steps/builtin/parallel.step.js +249 -0
  161. package/dist/steps/builtin/parallel.step.js.map +1 -0
  162. package/dist/steps/builtin/switch.step.d.ts +200 -0
  163. package/dist/steps/builtin/switch.step.d.ts.map +1 -0
  164. package/dist/steps/builtin/switch.step.js +92 -0
  165. package/dist/steps/builtin/switch.step.js.map +1 -0
  166. package/dist/steps/builtin/transform.step.d.ts +247 -0
  167. package/dist/steps/builtin/transform.step.d.ts.map +1 -0
  168. package/dist/steps/builtin/transform.step.js +135 -0
  169. package/dist/steps/builtin/transform.step.js.map +1 -0
  170. package/dist/steps/builtin/wait.step.d.ts +921 -0
  171. package/dist/steps/builtin/wait.step.d.ts.map +1 -0
  172. package/dist/steps/builtin/wait.step.js +211 -0
  173. package/dist/steps/builtin/wait.step.js.map +1 -0
  174. package/dist/steps/step-registry.d.ts +64 -0
  175. package/dist/steps/step-registry.d.ts.map +1 -0
  176. package/dist/steps/step-registry.js +102 -0
  177. package/dist/steps/step-registry.js.map +1 -0
  178. package/dist/storage/in-memory-adapter.d.ts +25 -0
  179. package/dist/storage/in-memory-adapter.d.ts.map +1 -0
  180. package/dist/storage/in-memory-adapter.js +41 -0
  181. package/dist/storage/in-memory-adapter.js.map +1 -0
  182. package/dist/storage/types.d.ts +53 -0
  183. package/dist/storage/types.d.ts.map +1 -0
  184. package/dist/storage/types.js +13 -0
  185. package/dist/storage/types.js.map +1 -0
  186. package/dist/testing/index.d.ts +10 -0
  187. package/dist/testing/index.d.ts.map +1 -0
  188. package/dist/testing/index.js +10 -0
  189. package/dist/testing/index.js.map +1 -0
  190. package/dist/testing/mock-context.d.ts +13 -0
  191. package/dist/testing/mock-context.d.ts.map +1 -0
  192. package/dist/testing/mock-context.js +21 -0
  193. package/dist/testing/mock-context.js.map +1 -0
  194. package/dist/testing/mock-step-context.d.ts +47 -0
  195. package/dist/testing/mock-step-context.d.ts.map +1 -0
  196. package/dist/testing/mock-step-context.js +59 -0
  197. package/dist/testing/mock-step-context.js.map +1 -0
  198. package/dist/triggers/base-trigger.d.ts +58 -0
  199. package/dist/triggers/base-trigger.d.ts.map +1 -0
  200. package/dist/triggers/base-trigger.js +37 -0
  201. package/dist/triggers/base-trigger.js.map +1 -0
  202. package/dist/triggers/builtin/default-cron-trigger.d.ts +44 -0
  203. package/dist/triggers/builtin/default-cron-trigger.d.ts.map +1 -0
  204. package/dist/triggers/builtin/default-cron-trigger.js +31 -0
  205. package/dist/triggers/builtin/default-cron-trigger.js.map +1 -0
  206. package/dist/triggers/builtin/default-event-trigger.d.ts +32 -0
  207. package/dist/triggers/builtin/default-event-trigger.d.ts.map +1 -0
  208. package/dist/triggers/builtin/default-event-trigger.js +21 -0
  209. package/dist/triggers/builtin/default-event-trigger.js.map +1 -0
  210. package/dist/triggers/builtin/default-manual-trigger.d.ts +119 -0
  211. package/dist/triggers/builtin/default-manual-trigger.d.ts.map +1 -0
  212. package/dist/triggers/builtin/default-manual-trigger.js +64 -0
  213. package/dist/triggers/builtin/default-manual-trigger.js.map +1 -0
  214. package/dist/triggers/builtin/default-webhook-trigger.d.ts +72 -0
  215. package/dist/triggers/builtin/default-webhook-trigger.d.ts.map +1 -0
  216. package/dist/triggers/builtin/default-webhook-trigger.js +91 -0
  217. package/dist/triggers/builtin/default-webhook-trigger.js.map +1 -0
  218. package/dist/triggers/cron-trigger.d.ts +52 -0
  219. package/dist/triggers/cron-trigger.d.ts.map +1 -0
  220. package/dist/triggers/cron-trigger.js +15 -0
  221. package/dist/triggers/cron-trigger.js.map +1 -0
  222. package/dist/triggers/event-trigger.d.ts +14 -0
  223. package/dist/triggers/event-trigger.d.ts.map +1 -0
  224. package/dist/triggers/event-trigger.js +13 -0
  225. package/dist/triggers/event-trigger.js.map +1 -0
  226. package/dist/triggers/manual-trigger.d.ts +11 -0
  227. package/dist/triggers/manual-trigger.d.ts.map +1 -0
  228. package/dist/triggers/manual-trigger.js +10 -0
  229. package/dist/triggers/manual-trigger.js.map +1 -0
  230. package/dist/triggers/trigger-registry.d.ts +48 -0
  231. package/dist/triggers/trigger-registry.d.ts.map +1 -0
  232. package/dist/triggers/trigger-registry.js +81 -0
  233. package/dist/triggers/trigger-registry.js.map +1 -0
  234. package/dist/triggers/webhook-trigger.d.ts +54 -0
  235. package/dist/triggers/webhook-trigger.d.ts.map +1 -0
  236. package/dist/triggers/webhook-trigger.js +13 -0
  237. package/dist/triggers/webhook-trigger.js.map +1 -0
  238. package/dist/types/attachment.d.ts +23 -0
  239. package/dist/types/attachment.d.ts.map +1 -0
  240. package/dist/types/attachment.js +2 -0
  241. package/dist/types/attachment.js.map +1 -0
  242. package/dist/types/categories.d.ts +14 -0
  243. package/dist/types/categories.d.ts.map +1 -0
  244. package/dist/types/categories.js +10 -0
  245. package/dist/types/categories.js.map +1 -0
  246. package/dist/types/context.d.ts +61 -0
  247. package/dist/types/context.d.ts.map +1 -0
  248. package/dist/types/context.js +2 -0
  249. package/dist/types/context.js.map +1 -0
  250. package/dist/types/index.d.ts +18 -0
  251. package/dist/types/index.d.ts.map +1 -0
  252. package/dist/types/index.js +12 -0
  253. package/dist/types/index.js.map +1 -0
  254. package/dist/types/known-types.d.ts +34 -0
  255. package/dist/types/known-types.d.ts.map +1 -0
  256. package/dist/types/known-types.js +49 -0
  257. package/dist/types/known-types.js.map +1 -0
  258. package/dist/types/operators.d.ts +20 -0
  259. package/dist/types/operators.d.ts.map +1 -0
  260. package/dist/types/operators.js +27 -0
  261. package/dist/types/operators.js.map +1 -0
  262. package/dist/types/pause-path.d.ts +23 -0
  263. package/dist/types/pause-path.d.ts.map +1 -0
  264. package/dist/types/pause-path.js +2 -0
  265. package/dist/types/pause-path.js.map +1 -0
  266. package/dist/types/pause-state.d.ts +100 -0
  267. package/dist/types/pause-state.d.ts.map +1 -0
  268. package/dist/types/pause-state.js +15 -0
  269. package/dist/types/pause-state.js.map +1 -0
  270. package/dist/types/resume-payload.d.ts +34 -0
  271. package/dist/types/resume-payload.d.ts.map +1 -0
  272. package/dist/types/resume-payload.js +12 -0
  273. package/dist/types/resume-payload.js.map +1 -0
  274. package/dist/types/status.d.ts +27 -0
  275. package/dist/types/status.d.ts.map +1 -0
  276. package/dist/types/status.js +41 -0
  277. package/dist/types/status.js.map +1 -0
  278. package/dist/types/step-events.d.ts +22 -0
  279. package/dist/types/step-events.d.ts.map +1 -0
  280. package/dist/types/step-events.js +8 -0
  281. package/dist/types/step-events.js.map +1 -0
  282. package/dist/types/step-types.d.ts +12 -0
  283. package/dist/types/step-types.d.ts.map +1 -0
  284. package/dist/types/step-types.js +2 -0
  285. package/dist/types/step-types.js.map +1 -0
  286. package/dist/types/trigger-types.d.ts +12 -0
  287. package/dist/types/trigger-types.d.ts.map +1 -0
  288. package/dist/types/trigger-types.js +2 -0
  289. package/dist/types/trigger-types.js.map +1 -0
  290. package/dist/types/validation.d.ts +19 -0
  291. package/dist/types/validation.d.ts.map +1 -0
  292. package/dist/types/validation.js +11 -0
  293. package/dist/types/validation.js.map +1 -0
  294. package/dist/types/workflow-config.d.ts +122 -0
  295. package/dist/types/workflow-config.d.ts.map +1 -0
  296. package/dist/types/workflow-config.js +71 -0
  297. package/dist/types/workflow-config.js.map +1 -0
  298. package/dist/util/executable-check.d.ts +42 -0
  299. package/dist/util/executable-check.d.ts.map +1 -0
  300. package/dist/util/executable-check.js +115 -0
  301. package/dist/util/executable-check.js.map +1 -0
  302. package/dist/util/schema-convert.d.ts +14 -0
  303. package/dist/util/schema-convert.d.ts.map +1 -0
  304. package/dist/util/schema-convert.js +16 -0
  305. package/dist/util/schema-convert.js.map +1 -0
  306. package/dist/util/variable-ref.d.ts +52 -0
  307. package/dist/util/variable-ref.d.ts.map +1 -0
  308. package/dist/util/variable-ref.js +89 -0
  309. package/dist/util/variable-ref.js.map +1 -0
  310. package/package.json +97 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * createWorkflowRouter — framework-agnostic route definitions.
3
+ *
4
+ * Returns an array of `RouteDefinition` objects the host maps to their
5
+ * HTTP framework. Each definition has: method, path, handler, and whether
6
+ * it needs authentication.
7
+ *
8
+ * Usage with Express:
9
+ * ```ts
10
+ * const routes = createWorkflowRouter(runtime, { authenticate });
11
+ * for (const route of routes) {
12
+ * const handler = async (req, res) => {
13
+ * const result = await route.handler(
14
+ * { params: req.params, query: req.query, body: req.body, headers: req.headers },
15
+ * route.authenticated !== false ? await authenticate(req.headers) : null,
16
+ * );
17
+ * res.status(result.status).json(result.body);
18
+ * };
19
+ * router[route.method.toLowerCase()](route.path, handler);
20
+ * }
21
+ * ```
22
+ */
23
+ import type { WorkflowRuntime } from '../runtime/workflow-runtime.js';
24
+ import type { RouteDefinition, RouterOptions } from './types.js';
25
+ export declare function createWorkflowRouter(runtime: WorkflowRuntime, _opts: RouterOptions): RouteDefinition[];
26
+ //# sourceMappingURL=workflow-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-router.d.ts","sourceRoot":"","sources":["../../src/router/workflow-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAA8B,aAAa,EAAE,MAAM,YAAY,CAAC;AA+C7F,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,aAAa,GACnB,eAAe,EAAE,CA4jBnB"}
@@ -0,0 +1,611 @@
1
+ /**
2
+ * createWorkflowRouter — framework-agnostic route definitions.
3
+ *
4
+ * Returns an array of `RouteDefinition` objects the host maps to their
5
+ * HTTP framework. Each definition has: method, path, handler, and whether
6
+ * it needs authentication.
7
+ *
8
+ * Usage with Express:
9
+ * ```ts
10
+ * const routes = createWorkflowRouter(runtime, { authenticate });
11
+ * for (const route of routes) {
12
+ * const handler = async (req, res) => {
13
+ * const result = await route.handler(
14
+ * { params: req.params, query: req.query, body: req.body, headers: req.headers },
15
+ * route.authenticated !== false ? await authenticate(req.headers) : null,
16
+ * );
17
+ * res.status(result.status).json(result.body);
18
+ * };
19
+ * router[route.method.toLowerCase()](route.path, handler);
20
+ * }
21
+ * ```
22
+ */
23
+ import { OPERATOR_DESCRIPTORS } from '../types/operators.js';
24
+ import { getAvailableContext } from '../engine/available-context.js';
25
+ import { isExecutable } from '../common/executable-check.js';
26
+ import { createEventChannel } from '../runtime/execution-event-bus.js';
27
+ // ─── Helpers ───
28
+ function ok(body) {
29
+ return { status: 200, body };
30
+ }
31
+ function created(body) {
32
+ return { status: 201, body };
33
+ }
34
+ function notFound(msg) {
35
+ return { status: 404, body: { error: msg } };
36
+ }
37
+ function badRequest(msg) {
38
+ return { status: 400, body: { error: msg } };
39
+ }
40
+ function error(status, msg) {
41
+ return { status, body: { error: msg } };
42
+ }
43
+ function authMetadata(auth) {
44
+ return auth?.metadata ?? {};
45
+ }
46
+ /** Format a single SSE message. */
47
+ function formatSSE(event, data) {
48
+ return `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
49
+ }
50
+ // ─── Router Factory ───
51
+ export function createWorkflowRouter(runtime, _opts) {
52
+ const routes = [];
53
+ // ─── Workflow CRUD ───
54
+ routes.push({
55
+ method: 'GET',
56
+ path: '/workflows',
57
+ handler: async (_req, auth) => {
58
+ const workflows = await runtime.listWorkflows(authMetadata(auth));
59
+ return ok({ workflows });
60
+ },
61
+ });
62
+ routes.push({
63
+ method: 'GET',
64
+ path: '/workflows/:id',
65
+ handler: async (req) => {
66
+ const id = req.params['id'];
67
+ if (!id)
68
+ return badRequest('Missing workflow ID');
69
+ const workflow = await runtime.getWorkflow(id);
70
+ if (!workflow)
71
+ return notFound(`Workflow ${id} not found`);
72
+ return ok(workflow);
73
+ },
74
+ });
75
+ routes.push({
76
+ method: 'POST',
77
+ path: '/workflows',
78
+ handler: async (req, _auth) => {
79
+ const body = req.body;
80
+ if (!body || !body['name'] || !body['config']) {
81
+ return badRequest('Body must contain "name" and "config"');
82
+ }
83
+ try {
84
+ const workflow = await runtime.createWorkflow({
85
+ name: body['name'],
86
+ config: body['config'],
87
+ metadata: body['metadata'] ?? undefined,
88
+ });
89
+ return created(workflow);
90
+ }
91
+ catch (err) {
92
+ return error(400, err instanceof Error ? err.message : 'Create failed');
93
+ }
94
+ },
95
+ });
96
+ routes.push({
97
+ method: 'PUT',
98
+ path: '/workflows/:id',
99
+ handler: async (req, _auth) => {
100
+ const id = req.params['id'];
101
+ if (!id)
102
+ return badRequest('Missing workflow ID');
103
+ const body = req.body;
104
+ if (!body)
105
+ return badRequest('Request body is required');
106
+ try {
107
+ const input = {};
108
+ if (typeof body['name'] === 'string')
109
+ input.name = body['name'];
110
+ if (body['config'])
111
+ input.config = body['config'];
112
+ if (body['metadata'])
113
+ input.metadata = body['metadata'];
114
+ const workflow = await runtime.updateWorkflow(id, input);
115
+ return ok(workflow);
116
+ }
117
+ catch (err) {
118
+ if (err instanceof Error && err.message.includes('not found')) {
119
+ return notFound(err.message);
120
+ }
121
+ return error(400, err instanceof Error ? err.message : 'Update failed');
122
+ }
123
+ },
124
+ });
125
+ // ─── Validation ───
126
+ routes.push({
127
+ method: 'POST',
128
+ path: '/workflows/validate',
129
+ handler: async (req) => {
130
+ const config = req.body;
131
+ if (!config || !config['trigger'] || !config['steps']) {
132
+ return badRequest('Body must be a WorkflowConfig with trigger and steps');
133
+ }
134
+ const result = runtime.validateConfig(config);
135
+ return ok(result);
136
+ },
137
+ });
138
+ // ─── Lifecycle ───
139
+ routes.push({
140
+ method: 'POST',
141
+ path: '/workflows/:id/activate',
142
+ handler: async (req, _auth) => {
143
+ const id = req.params['id'];
144
+ if (!id)
145
+ return badRequest('Missing workflow ID');
146
+ try {
147
+ await runtime.activateWorkflow(id);
148
+ return ok({ activated: true });
149
+ }
150
+ catch (err) {
151
+ return error(400, err instanceof Error ? err.message : 'Activation failed');
152
+ }
153
+ },
154
+ });
155
+ routes.push({
156
+ method: 'POST',
157
+ path: '/workflows/:id/deactivate',
158
+ handler: async (req, _auth) => {
159
+ const id = req.params['id'];
160
+ if (!id)
161
+ return badRequest('Missing workflow ID');
162
+ try {
163
+ await runtime.deactivateWorkflow(id);
164
+ return ok({ deactivated: true });
165
+ }
166
+ catch (err) {
167
+ return error(400, err instanceof Error ? err.message : 'Deactivation failed');
168
+ }
169
+ },
170
+ });
171
+ // ─── Trigger ───
172
+ routes.push({
173
+ method: 'POST',
174
+ path: '/workflows/:id/trigger',
175
+ handler: async (req, _auth) => {
176
+ const id = req.params['id'];
177
+ if (!id)
178
+ return badRequest('Missing workflow ID');
179
+ try {
180
+ const body = req.body ?? {};
181
+ // attachments comes in as a JSON array of Attachment refs the client
182
+ // got back from POST /uploads. Pull it out of the body so it isn't
183
+ // double-merged into context.trigger.
184
+ const rawAttachments = body['attachments'];
185
+ const attachments = Array.isArray(rawAttachments)
186
+ ? rawAttachments.filter(isAttachment)
187
+ : undefined;
188
+ const payload = { ...body };
189
+ delete payload['attachments'];
190
+ const executionId = await runtime.triggerManual(id, payload, attachments);
191
+ return created({ executionId });
192
+ }
193
+ catch (err) {
194
+ if (err instanceof Error && err.message.includes('not found')) {
195
+ return notFound(err.message);
196
+ }
197
+ return error(400, err instanceof Error ? err.message : 'Trigger failed');
198
+ }
199
+ },
200
+ });
201
+ // ─── Uploads (multipart) ───
202
+ routes.push({
203
+ method: 'POST',
204
+ path: '/uploads',
205
+ handler: async (req, auth) => {
206
+ if (!runtime.storage) {
207
+ return error(501, 'No StorageAdapter configured — file uploads are disabled');
208
+ }
209
+ const files = req.files;
210
+ if (!files || files.length === 0) {
211
+ return badRequest('No files in request — did the host run a multipart parser?');
212
+ }
213
+ // Perimeter check: reject executables unless the host opted in. This
214
+ // applies to ALL uploads regardless of workflow — the upload route
215
+ // doesn't know which workflow the files are for yet.
216
+ if (!runtime.allowExecutableUploads) {
217
+ for (const file of files) {
218
+ const reason = isExecutable(file.mimeType, file.name);
219
+ if (reason) {
220
+ return badRequest(`"${file.name}" rejected: ${reason}`);
221
+ }
222
+ }
223
+ }
224
+ const scope = auth?.metadata ?? {};
225
+ try {
226
+ const attachments = [];
227
+ for (const file of files) {
228
+ attachments.push(await runtime.storage.store(scope, {
229
+ name: file.name,
230
+ mimeType: file.mimeType,
231
+ bytes: file.bytes,
232
+ }));
233
+ }
234
+ return created({ attachments });
235
+ }
236
+ catch (err) {
237
+ return error(500, err instanceof Error ? err.message : 'Upload failed');
238
+ }
239
+ },
240
+ });
241
+ // ─── Executions ───
242
+ routes.push({
243
+ method: 'GET',
244
+ path: '/executions/:execId',
245
+ handler: async (req) => {
246
+ const execId = req.params['execId'];
247
+ if (!execId)
248
+ return badRequest('Missing execution ID');
249
+ const detail = await runtime.getExecutionDetail(execId);
250
+ if (!detail)
251
+ return notFound(`Execution ${execId} not found`);
252
+ return ok({
253
+ ...detail.execution,
254
+ steps: detail.steps,
255
+ config: detail.config,
256
+ triggerData: detail.triggerData,
257
+ });
258
+ },
259
+ });
260
+ routes.push({
261
+ method: 'POST',
262
+ path: '/executions/:execId/resume',
263
+ handler: async (req, _auth) => {
264
+ const execId = req.params['execId'];
265
+ if (!execId)
266
+ return badRequest('Missing execution ID');
267
+ const body = (req.body ?? {});
268
+ const resumeInput = {};
269
+ if (body['data'] !== undefined) {
270
+ const parsed = parseResumePayload(body['data']);
271
+ if (!parsed)
272
+ return badRequest('Invalid resume payload: missing or invalid `action`');
273
+ resumeInput.data = parsed;
274
+ }
275
+ if (typeof body['abort'] === 'boolean') {
276
+ resumeInput.abort = body['abort'];
277
+ }
278
+ try {
279
+ await runtime.resume(execId, resumeInput);
280
+ return ok({ resumed: true });
281
+ }
282
+ catch (err) {
283
+ if (err instanceof Error && err.message.includes('not found')) {
284
+ return notFound(err.message);
285
+ }
286
+ return error(400, err instanceof Error ? err.message : 'Resume failed');
287
+ }
288
+ },
289
+ });
290
+ // ─── Webhooks (no auth — validated by secret in path) ───
291
+ routes.push({
292
+ method: 'POST',
293
+ path: '/webhooks/:workflowId/:secret',
294
+ authenticated: false,
295
+ handler: async (req, _auth) => {
296
+ const path = `/webhooks/${req.params['workflowId'] ?? ''}/${req.params['secret'] ?? ''}`;
297
+ const result = await runtime.handleWebhook(path, {
298
+ method: req.params['method'] ?? 'POST',
299
+ headers: req.headers,
300
+ body: req.body,
301
+ query: req.query,
302
+ });
303
+ const response = {
304
+ status: result.httpResponse.status,
305
+ body: result.httpResponse.body,
306
+ };
307
+ if (result.httpResponse.headers) {
308
+ response.headers = result.httpResponse.headers;
309
+ }
310
+ return response;
311
+ },
312
+ });
313
+ // ─── Wait callbacks (no auth — validated by workflow secret in path) ───
314
+ routes.push({
315
+ method: 'POST',
316
+ path: '/wait/callback/:secret/:executionId',
317
+ authenticated: false,
318
+ handler: async (req, _auth) => {
319
+ const secret = req.params['secret'] ?? '';
320
+ const executionId = req.params['executionId'] ?? '';
321
+ const result = await runtime.handleWaitCallback(secret, executionId, req.body);
322
+ return { status: result.status, body: result.body };
323
+ },
324
+ });
325
+ // ─── Schema metadata (for UI) ───
326
+ routes.push({
327
+ method: 'GET',
328
+ path: '/schema/triggers',
329
+ handler: async () => {
330
+ return ok({
331
+ triggers: runtime.triggers.listSummaries(),
332
+ });
333
+ },
334
+ });
335
+ routes.push({
336
+ method: 'GET',
337
+ path: '/schema/steps',
338
+ handler: async () => {
339
+ return ok({
340
+ steps: runtime.steps.listSummaries(),
341
+ });
342
+ },
343
+ });
344
+ // ─── Schema detail (single step/trigger with full JSON Schema) ───
345
+ routes.push({
346
+ method: 'GET',
347
+ path: '/schema/triggers/:type',
348
+ handler: async (req) => {
349
+ const type = req.params['type'];
350
+ if (!type)
351
+ return badRequest('Missing trigger type');
352
+ if (!runtime.triggers.has(type)) {
353
+ return notFound(`Unknown trigger type "${type}"`);
354
+ }
355
+ return ok(runtime.triggers.getDescriptor(type));
356
+ },
357
+ });
358
+ routes.push({
359
+ method: 'GET',
360
+ path: '/schema/steps/:type',
361
+ handler: async (req) => {
362
+ const type = req.params['type'];
363
+ if (!type)
364
+ return badRequest('Missing step type');
365
+ if (!runtime.steps.has(type)) {
366
+ return notFound(`Unknown step type "${type}"`);
367
+ }
368
+ return ok(runtime.steps.getDescriptor(type));
369
+ },
370
+ });
371
+ routes.push({
372
+ method: 'GET',
373
+ path: '/schema/operators',
374
+ handler: async () => {
375
+ return ok({ operators: OPERATOR_DESCRIPTORS });
376
+ },
377
+ });
378
+ // ─── Available Context (for variable picker UI) ───
379
+ routes.push({
380
+ method: 'POST',
381
+ path: '/schema/available-context',
382
+ handler: async (req) => {
383
+ const body = req.body;
384
+ if (!body || !body['config'] || !body['atStepId']) {
385
+ return badRequest('Body must contain "config" (WorkflowConfig) and "atStepId" (string)');
386
+ }
387
+ const config = body['config'];
388
+ const atStepId = body['atStepId'];
389
+ const context = getAvailableContext(config, atStepId, runtime.steps, runtime.triggers);
390
+ return ok({ context });
391
+ },
392
+ });
393
+ // ─── Execution List ───
394
+ routes.push({
395
+ method: 'GET',
396
+ path: '/executions',
397
+ handler: async (req) => {
398
+ const query = req.query;
399
+ const params = {};
400
+ if (typeof query['workflowId'] === 'string')
401
+ params.workflowId = query['workflowId'];
402
+ if (typeof query['status'] === 'string')
403
+ params.status = query['status'];
404
+ if (typeof query['limit'] === 'string')
405
+ params.limit = Number(query['limit']);
406
+ if (typeof query['cursor'] === 'string')
407
+ params.cursor = query['cursor'];
408
+ const result = await runtime.listExecutions(params);
409
+ return ok(result);
410
+ },
411
+ });
412
+ // ─── Execution Rerun ───
413
+ routes.push({
414
+ method: 'POST',
415
+ path: '/executions/:execId/rerun',
416
+ handler: async (req) => {
417
+ const execId = req.params['execId'];
418
+ if (!execId)
419
+ return badRequest('Missing execution ID');
420
+ const body = (req.body ?? {});
421
+ const fromStepId = body['fromStepId'];
422
+ if (typeof fromStepId !== 'string' || !fromStepId) {
423
+ return badRequest('Missing or invalid fromStepId');
424
+ }
425
+ const opts = {};
426
+ if (body['configOverrides'] && typeof body['configOverrides'] === 'object') {
427
+ opts.configOverrides = body['configOverrides'];
428
+ }
429
+ if (typeof body['inheritStepState'] === 'boolean') {
430
+ opts.inheritStepState = body['inheritStepState'];
431
+ }
432
+ try {
433
+ const newExecutionId = await runtime.rerunFromStep(execId, fromStepId, opts);
434
+ return ok({ executionId: newExecutionId });
435
+ }
436
+ catch (err) {
437
+ if (err instanceof Error && err.message.includes('not found')) {
438
+ return notFound(err.message);
439
+ }
440
+ return error(400, err instanceof Error ? err.message : 'Rerun failed');
441
+ }
442
+ },
443
+ });
444
+ // ─── Execution Cancel ───
445
+ routes.push({
446
+ method: 'POST',
447
+ path: '/executions/:execId/cancel',
448
+ handler: async (req) => {
449
+ const execId = req.params['execId'];
450
+ if (!execId)
451
+ return badRequest('Missing execution ID');
452
+ try {
453
+ await runtime.cancelExecution(execId);
454
+ return ok({ cancelled: true });
455
+ }
456
+ catch (err) {
457
+ if (err instanceof Error && err.message.includes('not found')) {
458
+ return notFound(err.message);
459
+ }
460
+ return error(400, err instanceof Error ? err.message : 'Cancel failed');
461
+ }
462
+ },
463
+ });
464
+ // ─── Credentials ───
465
+ routes.push({
466
+ method: 'GET',
467
+ path: '/credentials',
468
+ handler: async (_req, auth) => {
469
+ const credentials = await runtime.listCredentials(authMetadata(auth));
470
+ return ok({ credentials });
471
+ },
472
+ });
473
+ routes.push({
474
+ method: 'POST',
475
+ path: '/credentials',
476
+ handler: async (req, auth) => {
477
+ const body = req.body;
478
+ if (!body || !body['name'] || !body['type'] || !body['data']) {
479
+ return badRequest('Body must contain "name", "type", and "data"');
480
+ }
481
+ const cred = await runtime.createCredential(authMetadata(auth), body['name'], { type: body['type'], data: body['data'] });
482
+ return created(cred);
483
+ },
484
+ });
485
+ routes.push({
486
+ method: 'DELETE',
487
+ path: '/credentials/:name',
488
+ handler: async (req, auth) => {
489
+ const name = req.params['name'];
490
+ if (!name)
491
+ return badRequest('Missing credential name');
492
+ await runtime.deleteCredential(authMetadata(auth), name);
493
+ return { status: 204, body: undefined };
494
+ },
495
+ });
496
+ // ─── SSE: Execution Event Stream ───
497
+ routes.push({
498
+ method: 'GET',
499
+ path: '/executions/:execId/stream',
500
+ handler: async (req) => {
501
+ const execId = req.params['execId'];
502
+ if (!execId)
503
+ return badRequest('Missing execution ID');
504
+ const eventBus = runtime.eventBus;
505
+ if (!eventBus) {
506
+ return error(501, 'Event streaming not configured');
507
+ }
508
+ const detail = await runtime.getExecutionDetail(execId);
509
+ if (!detail)
510
+ return notFound(`Execution ${execId} not found`);
511
+ const isTerminal = ['COMPLETED', 'FAILED', 'CANCELLED'].includes(detail.execution.status);
512
+ async function* generateSSE() {
513
+ // 1. Send initial snapshot
514
+ yield formatSSE('snapshot', {
515
+ ...detail.execution,
516
+ steps: detail.steps,
517
+ config: detail.config,
518
+ triggerData: detail.triggerData,
519
+ });
520
+ // 2. If already terminal, close immediately
521
+ if (isTerminal)
522
+ return;
523
+ // 3. Subscribe to live events
524
+ const channel = createEventChannel();
525
+ const unsub = eventBus.subscribe(execId, channel.push);
526
+ try {
527
+ for await (const event of channel) {
528
+ yield formatSSE(event.event, event.data);
529
+ // Close stream on terminal events
530
+ if (event.event === 'execution_completed' ||
531
+ event.event === 'execution_failed' ||
532
+ event.event === 'execution_cancelled') {
533
+ break;
534
+ }
535
+ }
536
+ }
537
+ finally {
538
+ unsub();
539
+ }
540
+ }
541
+ return {
542
+ status: 200,
543
+ body: null,
544
+ headers: {
545
+ 'Content-Type': 'text/event-stream',
546
+ 'Cache-Control': 'no-cache',
547
+ 'Connection': 'keep-alive',
548
+ },
549
+ stream: generateSSE(),
550
+ };
551
+ },
552
+ });
553
+ return routes;
554
+ }
555
+ /** Narrow an arbitrary value to {@link Attachment}. */
556
+ function isAttachment(value) {
557
+ if (!value || typeof value !== 'object' || Array.isArray(value))
558
+ return false;
559
+ const v = value;
560
+ return (typeof v['name'] === 'string' &&
561
+ typeof v['mimeType'] === 'string' &&
562
+ typeof v['data'] === 'string');
563
+ }
564
+ const RESUME_ACTIONS = new Set([
565
+ 'approve',
566
+ 'retry',
567
+ 'abort',
568
+ ]);
569
+ /**
570
+ * Validate an arbitrary JSON body into a typed `ResumePayload`.
571
+ * Returns null if `action` is missing or not one of the allowed values.
572
+ */
573
+ function parseResumePayload(raw) {
574
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
575
+ return null;
576
+ const obj = raw;
577
+ const action = obj['action'];
578
+ if (typeof action !== 'string' || !RESUME_ACTIONS.has(action)) {
579
+ return null;
580
+ }
581
+ const payload = { action: action };
582
+ if (typeof obj['feedback'] === 'string') {
583
+ payload.feedback = obj['feedback'];
584
+ }
585
+ const attachments = obj['attachments'];
586
+ if (Array.isArray(attachments)) {
587
+ const cleaned = [];
588
+ for (const a of attachments) {
589
+ if (a && typeof a === 'object' && !Array.isArray(a)) {
590
+ const rec = a;
591
+ if (typeof rec['name'] === 'string' &&
592
+ typeof rec['mimeType'] === 'string' &&
593
+ typeof rec['data'] === 'string') {
594
+ cleaned.push({
595
+ name: rec['name'],
596
+ mimeType: rec['mimeType'],
597
+ data: rec['data'],
598
+ });
599
+ }
600
+ }
601
+ }
602
+ if (cleaned.length > 0)
603
+ payload.attachments = cleaned;
604
+ }
605
+ const data = obj['data'];
606
+ if (data && typeof data === 'object' && !Array.isArray(data)) {
607
+ payload.data = data;
608
+ }
609
+ return payload;
610
+ }
611
+ //# sourceMappingURL=workflow-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-router.js","sourceRoot":"","sources":["../../src/router/workflow-router.ts"],"names":[],"mappings":"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"}