@x12i/memorix-pipeline-orchestrator 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 (166) hide show
  1. package/README.md +99 -0
  2. package/dist/browser.d.ts +9 -0
  3. package/dist/browser.d.ts.map +1 -0
  4. package/dist/browser.js +9 -0
  5. package/dist/browser.js.map +1 -0
  6. package/dist/catalog.d.ts +11 -0
  7. package/dist/catalog.d.ts.map +1 -0
  8. package/dist/catalog.js +11 -0
  9. package/dist/catalog.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +67 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/collections.d.ts +25 -0
  15. package/dist/collections.d.ts.map +1 -0
  16. package/dist/collections.js +50 -0
  17. package/dist/collections.js.map +1 -0
  18. package/dist/examples/fetch-interfaces.d.ts +12 -0
  19. package/dist/examples/fetch-interfaces.d.ts.map +1 -0
  20. package/dist/examples/fetch-interfaces.js +206 -0
  21. package/dist/examples/fetch-interfaces.js.map +1 -0
  22. package/dist/graph.d.ts +16 -0
  23. package/dist/graph.d.ts.map +1 -0
  24. package/dist/graph.js +78 -0
  25. package/dist/graph.js.map +1 -0
  26. package/dist/handlers/ops.d.ts +8 -0
  27. package/dist/handlers/ops.d.ts.map +1 -0
  28. package/dist/handlers/ops.js +112 -0
  29. package/dist/handlers/ops.js.map +1 -0
  30. package/dist/handlers/pipelines.d.ts +9 -0
  31. package/dist/handlers/pipelines.d.ts.map +1 -0
  32. package/dist/handlers/pipelines.js +170 -0
  33. package/dist/handlers/pipelines.js.map +1 -0
  34. package/dist/handlers/runs.d.ts +13 -0
  35. package/dist/handlers/runs.d.ts.map +1 -0
  36. package/dist/handlers/runs.js +157 -0
  37. package/dist/handlers/runs.js.map +1 -0
  38. package/dist/handlers/schedules.d.ts +8 -0
  39. package/dist/handlers/schedules.d.ts.map +1 -0
  40. package/dist/handlers/schedules.js +123 -0
  41. package/dist/handlers/schedules.js.map +1 -0
  42. package/dist/handlers/shared.d.ts +11 -0
  43. package/dist/handlers/shared.d.ts.map +1 -0
  44. package/dist/handlers/shared.js +47 -0
  45. package/dist/handlers/shared.js.map +1 -0
  46. package/dist/handlers/steps.d.ts +8 -0
  47. package/dist/handlers/steps.d.ts.map +1 -0
  48. package/dist/handlers/steps.js +49 -0
  49. package/dist/handlers/steps.js.map +1 -0
  50. package/dist/handlers/templates.d.ts +8 -0
  51. package/dist/handlers/templates.d.ts.map +1 -0
  52. package/dist/handlers/templates.js +98 -0
  53. package/dist/handlers/templates.js.map +1 -0
  54. package/dist/http/server.d.ts +22 -0
  55. package/dist/http/server.d.ts.map +1 -0
  56. package/dist/http/server.js +106 -0
  57. package/dist/http/server.js.map +1 -0
  58. package/dist/index.d.ts +25 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +24 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/pipeline-handlers.d.ts +12 -0
  63. package/dist/pipeline-handlers.d.ts.map +1 -0
  64. package/dist/pipeline-handlers.js +238 -0
  65. package/dist/pipeline-handlers.js.map +1 -0
  66. package/dist/runtime/build-invoke-envelope.d.ts +31 -0
  67. package/dist/runtime/build-invoke-envelope.d.ts.map +1 -0
  68. package/dist/runtime/build-invoke-envelope.js +258 -0
  69. package/dist/runtime/build-invoke-envelope.js.map +1 -0
  70. package/dist/runtime/checkpoints.d.ts +49 -0
  71. package/dist/runtime/checkpoints.d.ts.map +1 -0
  72. package/dist/runtime/checkpoints.js +45 -0
  73. package/dist/runtime/checkpoints.js.map +1 -0
  74. package/dist/runtime/durable-schedule-ticker.d.ts +23 -0
  75. package/dist/runtime/durable-schedule-ticker.d.ts.map +1 -0
  76. package/dist/runtime/durable-schedule-ticker.js +107 -0
  77. package/dist/runtime/durable-schedule-ticker.js.map +1 -0
  78. package/dist/runtime/execute-run.d.ts +30 -0
  79. package/dist/runtime/execute-run.d.ts.map +1 -0
  80. package/dist/runtime/execute-run.js +639 -0
  81. package/dist/runtime/execute-run.js.map +1 -0
  82. package/dist/runtime/execute-step.d.ts +22 -0
  83. package/dist/runtime/execute-step.d.ts.map +1 -0
  84. package/dist/runtime/execute-step.js +406 -0
  85. package/dist/runtime/execute-step.js.map +1 -0
  86. package/dist/runtime/leases.d.ts +45 -0
  87. package/dist/runtime/leases.d.ts.map +1 -0
  88. package/dist/runtime/leases.js +84 -0
  89. package/dist/runtime/leases.js.map +1 -0
  90. package/dist/runtime/memory-ports.d.ts +21 -0
  91. package/dist/runtime/memory-ports.d.ts.map +1 -0
  92. package/dist/runtime/memory-ports.js +99 -0
  93. package/dist/runtime/memory-ports.js.map +1 -0
  94. package/dist/runtime/object-content-resolver.d.ts +23 -0
  95. package/dist/runtime/object-content-resolver.d.ts.map +1 -0
  96. package/dist/runtime/object-content-resolver.js +117 -0
  97. package/dist/runtime/object-content-resolver.js.map +1 -0
  98. package/dist/runtime/pipeline-services-invoker.d.ts +10 -0
  99. package/dist/runtime/pipeline-services-invoker.d.ts.map +1 -0
  100. package/dist/runtime/pipeline-services-invoker.js +69 -0
  101. package/dist/runtime/pipeline-services-invoker.js.map +1 -0
  102. package/dist/runtime/ports.d.ts +74 -0
  103. package/dist/runtime/ports.d.ts.map +1 -0
  104. package/dist/runtime/ports.js +2 -0
  105. package/dist/runtime/ports.js.map +1 -0
  106. package/dist/runtime/preflight.d.ts +39 -0
  107. package/dist/runtime/preflight.d.ts.map +1 -0
  108. package/dist/runtime/preflight.js +234 -0
  109. package/dist/runtime/preflight.js.map +1 -0
  110. package/dist/runtime/run-context.d.ts +10 -0
  111. package/dist/runtime/run-context.d.ts.map +1 -0
  112. package/dist/runtime/run-context.js +72 -0
  113. package/dist/runtime/run-context.js.map +1 -0
  114. package/dist/runtime/sandbox-ports.d.ts +9 -0
  115. package/dist/runtime/sandbox-ports.d.ts.map +1 -0
  116. package/dist/runtime/sandbox-ports.js +216 -0
  117. package/dist/runtime/sandbox-ports.js.map +1 -0
  118. package/dist/runtime/schedule-ticker.d.ts +24 -0
  119. package/dist/runtime/schedule-ticker.d.ts.map +1 -0
  120. package/dist/runtime/schedule-ticker.js +155 -0
  121. package/dist/runtime/schedule-ticker.js.map +1 -0
  122. package/dist/runtime/schedule-utils.d.ts +11 -0
  123. package/dist/runtime/schedule-utils.d.ts.map +1 -0
  124. package/dist/runtime/schedule-utils.js +54 -0
  125. package/dist/runtime/schedule-utils.js.map +1 -0
  126. package/dist/seeds/cortex-xdr.d.ts +11 -0
  127. package/dist/seeds/cortex-xdr.d.ts.map +1 -0
  128. package/dist/seeds/cortex-xdr.js +1759 -0
  129. package/dist/seeds/cortex-xdr.js.map +1 -0
  130. package/dist/seeds/firewall-topology.d.ts +11 -0
  131. package/dist/seeds/firewall-topology.d.ts.map +1 -0
  132. package/dist/seeds/firewall-topology.js +1310 -0
  133. package/dist/seeds/firewall-topology.js.map +1 -0
  134. package/dist/seeds/platform-smoke.d.ts +22 -0
  135. package/dist/seeds/platform-smoke.d.ts.map +1 -0
  136. package/dist/seeds/platform-smoke.js +314 -0
  137. package/dist/seeds/platform-smoke.js.map +1 -0
  138. package/dist/seeds/tenable-nessus.d.ts +12 -0
  139. package/dist/seeds/tenable-nessus.d.ts.map +1 -0
  140. package/dist/seeds/tenable-nessus.js +880 -0
  141. package/dist/seeds/tenable-nessus.js.map +1 -0
  142. package/dist/store/catalox.d.ts +15 -0
  143. package/dist/store/catalox.d.ts.map +1 -0
  144. package/dist/store/catalox.js +581 -0
  145. package/dist/store/catalox.js.map +1 -0
  146. package/dist/store/memory.d.ts +3 -0
  147. package/dist/store/memory.d.ts.map +1 -0
  148. package/dist/store/memory.js +352 -0
  149. package/dist/store/memory.js.map +1 -0
  150. package/dist/store/stack.d.ts +13 -0
  151. package/dist/store/stack.d.ts.map +1 -0
  152. package/dist/store/stack.js +72 -0
  153. package/dist/store/stack.js.map +1 -0
  154. package/dist/store/types.d.ts +50 -0
  155. package/dist/store/types.d.ts.map +1 -0
  156. package/dist/store/types.js +45 -0
  157. package/dist/store/types.js.map +1 -0
  158. package/dist/types.d.ts +324 -0
  159. package/dist/types.d.ts.map +1 -0
  160. package/dist/types.js +12 -0
  161. package/dist/types.js.map +1 -0
  162. package/dist/validate.d.ts +14 -0
  163. package/dist/validate.d.ts.map +1 -0
  164. package/dist/validate.js +263 -0
  165. package/dist/validate.js.map +1 -0
  166. package/package.json +72 -0
package/dist/graph.js ADDED
@@ -0,0 +1,78 @@
1
+ import { validatePipelineStepGraph } from "./validate.js";
2
+ export class PipelineStepGraphError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "PipelineStepGraphError";
6
+ }
7
+ }
8
+ function indexById(steps) {
9
+ const byId = new Map();
10
+ for (const step of steps) {
11
+ if (!step.id?.trim()) {
12
+ throw new PipelineStepGraphError("every step must have an id");
13
+ }
14
+ if (byId.has(step.id)) {
15
+ throw new PipelineStepGraphError(`duplicate step id: ${step.id}`);
16
+ }
17
+ byId.set(step.id, step);
18
+ }
19
+ return byId;
20
+ }
21
+ /**
22
+ * Topological order of steps (dependencies first).
23
+ * Throws if the graph is invalid or has a cycle.
24
+ */
25
+ export function topologicalOrder(steps) {
26
+ const validation = validatePipelineStepGraph(steps);
27
+ if (!validation.ok) {
28
+ const msg = validation.issues.map((i) => i.message).join("; ");
29
+ throw new PipelineStepGraphError(msg);
30
+ }
31
+ const byId = indexById(steps);
32
+ const indegree = new Map();
33
+ const dependents = new Map();
34
+ for (const id of byId.keys()) {
35
+ indegree.set(id, 0);
36
+ dependents.set(id, []);
37
+ }
38
+ for (const step of byId.values()) {
39
+ for (const dep of step.dependsOn) {
40
+ indegree.set(step.id, (indegree.get(step.id) ?? 0) + 1);
41
+ dependents.get(dep).push(step.id);
42
+ }
43
+ }
44
+ const queue = [...byId.keys()].filter((id) => (indegree.get(id) ?? 0) === 0).sort();
45
+ const ordered = [];
46
+ while (queue.length > 0) {
47
+ const id = queue.shift();
48
+ ordered.push(byId.get(id));
49
+ for (const child of dependents.get(id) ?? []) {
50
+ const next = (indegree.get(child) ?? 0) - 1;
51
+ indegree.set(child, next);
52
+ if (next === 0) {
53
+ queue.push(child);
54
+ queue.sort();
55
+ }
56
+ }
57
+ }
58
+ if (ordered.length !== byId.size) {
59
+ throw new PipelineStepGraphError("dependency cycle detected");
60
+ }
61
+ return ordered;
62
+ }
63
+ /**
64
+ * Steps whose dependencies are all in `completedStepIds` and that are not yet completed.
65
+ */
66
+ export function readySteps(steps, completedStepIds) {
67
+ const done = new Set(completedStepIds);
68
+ return steps.filter((step) => !done.has(step.id) && (step.dependsOn ?? []).every((dep) => done.has(dep)));
69
+ }
70
+ /** True when every dependency of `stepId` is in `completedStepIds`. */
71
+ export function dependenciesSatisfied(steps, stepId, completedStepIds) {
72
+ const step = steps.find((s) => s.id === stepId);
73
+ if (!step)
74
+ return false;
75
+ const done = new Set(completedStepIds);
76
+ return (step.dependsOn ?? []).every((dep) => done.has(dep));
77
+ }
78
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { OperationalStores } from "@x12i/memorix-pipeline-runtime";
2
+ import { type ApiResult } from "./shared.js";
3
+ export declare function handleListArtifacts(stores: OperationalStores | null | undefined, searchParams: URLSearchParams): Promise<ApiResult>;
4
+ export declare function handleListReceipts(stores: OperationalStores | null | undefined, searchParams: URLSearchParams): Promise<ApiResult>;
5
+ export declare function handleListDlq(stores: OperationalStores | null | undefined, searchParams: URLSearchParams): Promise<ApiResult>;
6
+ export declare function handleDlqReplay(stores: OperationalStores | null | undefined, issueId: string, body: string): Promise<ApiResult>;
7
+ export declare function handleListCheckpoints(stores: OperationalStores | null | undefined, searchParams: URLSearchParams): Promise<ApiResult>;
8
+ //# sourceMappingURL=ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/handlers/ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AASrB,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC5C,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAYpB;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC5C,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAkBpB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC5C,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAYpB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC5C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CA0BpB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC5C,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAYpB"}
@@ -0,0 +1,112 @@
1
+ import { asNonEmptyString, jsonError, jsonOk, parseJsonBody, } from "./shared.js";
2
+ // Ops handlers accept OperationalStores directly (not the full OrchestratorRuntimePorts).
3
+ // This keeps them independent of the invoker/rawStore/snapshotStore runtime.
4
+ function missingStores() {
5
+ return jsonError(501, "operational stores not configured");
6
+ }
7
+ export async function handleListArtifacts(stores, searchParams) {
8
+ if (!stores)
9
+ return missingStores();
10
+ const orgId = asNonEmptyString(searchParams.get("orgId"));
11
+ if (!orgId)
12
+ return jsonError(400, "orgId is required");
13
+ const runId = asNonEmptyString(searchParams.get("runId"));
14
+ if (!runId)
15
+ return jsonError(400, "runId is required");
16
+ try {
17
+ const artifacts = await stores.artifacts.listByRunId(orgId, runId);
18
+ return jsonOk({ artifacts, count: artifacts.length });
19
+ }
20
+ catch (err) {
21
+ return jsonError(500, err instanceof Error ? err.message : "internal error");
22
+ }
23
+ }
24
+ export async function handleListReceipts(stores, searchParams) {
25
+ if (!stores)
26
+ return missingStores();
27
+ const orgId = asNonEmptyString(searchParams.get("orgId"));
28
+ if (!orgId)
29
+ return jsonError(400, "orgId is required");
30
+ const runId = asNonEmptyString(searchParams.get("runId"));
31
+ if (!runId)
32
+ return jsonError(400, "runId is required");
33
+ const stepId = asNonEmptyString(searchParams.get("stepId"));
34
+ try {
35
+ const receipts = runId && stepId
36
+ ? await stores.receipts.listByStepId(orgId, runId, stepId)
37
+ : runId
38
+ ? await stores.receipts.listByRunId(orgId, runId)
39
+ : [];
40
+ return jsonOk({ receipts, count: receipts.length });
41
+ }
42
+ catch (err) {
43
+ return jsonError(500, err instanceof Error ? err.message : "internal error");
44
+ }
45
+ }
46
+ export async function handleListDlq(stores, searchParams) {
47
+ if (!stores)
48
+ return missingStores();
49
+ const orgId = asNonEmptyString(searchParams.get("orgId"));
50
+ if (!orgId)
51
+ return jsonError(400, "orgId is required");
52
+ const runId = asNonEmptyString(searchParams.get("runId"));
53
+ if (!runId)
54
+ return jsonError(400, "runId is required");
55
+ try {
56
+ const issues = await stores.dlq.listByRunId(orgId, runId);
57
+ return jsonOk({ issues, count: issues.length });
58
+ }
59
+ catch (err) {
60
+ return jsonError(500, err instanceof Error ? err.message : "internal error");
61
+ }
62
+ }
63
+ export async function handleDlqReplay(stores, issueId, body) {
64
+ if (!stores)
65
+ return missingStores();
66
+ const parsed = parseJsonBody(body);
67
+ const orgId = asNonEmptyString(parsed?.orgId);
68
+ if (!orgId)
69
+ return jsonError(400, "orgId is required in request body");
70
+ try {
71
+ const issue = await stores.dlq.get(orgId, issueId);
72
+ if (!issue)
73
+ return jsonError(404, `DLQ issue not found: ${issueId}`);
74
+ if (issue.status === "resolved" || issue.status === "abandoned") {
75
+ return jsonError(409, `DLQ issue ${issueId} is ${issue.status} and cannot be replayed`);
76
+ }
77
+ await stores.dlq.incrementReplayCount(orgId, issueId);
78
+ const updated = await stores.dlq.updateStatus(orgId, issueId, "replaying");
79
+ if (!updated)
80
+ return jsonError(404, `DLQ issue not found: ${issueId}`);
81
+ const replayContext = {
82
+ runId: updated.runId,
83
+ stepId: updated.stepId,
84
+ replayCount: updated.replayCount,
85
+ pins: updated.pins,
86
+ payload: updated.payload,
87
+ payloadRef: updated.payloadRef,
88
+ };
89
+ return jsonOk({ issue: updated, replayContext }, 202);
90
+ }
91
+ catch (err) {
92
+ return jsonError(500, err instanceof Error ? err.message : "internal error");
93
+ }
94
+ }
95
+ export async function handleListCheckpoints(stores, searchParams) {
96
+ if (!stores)
97
+ return missingStores();
98
+ const orgId = asNonEmptyString(searchParams.get("orgId"));
99
+ if (!orgId)
100
+ return jsonError(400, "orgId is required");
101
+ const runId = asNonEmptyString(searchParams.get("runId"));
102
+ if (!runId)
103
+ return jsonError(400, "runId is required");
104
+ try {
105
+ const checkpoints = await stores.checkpoints.list(orgId, runId);
106
+ return jsonOk({ checkpoints, count: checkpoints.length });
107
+ }
108
+ catch (err) {
109
+ return jsonError(500, err instanceof Error ? err.message : "internal error");
110
+ }
111
+ }
112
+ //# sourceMappingURL=ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/handlers/ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { PipelineOrchestratorStore } from "../store/types.js";
2
+ import { type ApiResult } from "./shared.js";
3
+ export declare function handleListPipelines(store: PipelineOrchestratorStore): Promise<ApiResult>;
4
+ export declare function handleGetPipeline(store: PipelineOrchestratorStore, pipelineId: string): Promise<ApiResult>;
5
+ export declare function handleCreatePipeline(store: PipelineOrchestratorStore, body: string): Promise<ApiResult>;
6
+ export declare function handleUpdatePipeline(store: PipelineOrchestratorStore, pipelineId: string, body: string): Promise<ApiResult>;
7
+ export declare function handleDeletePipeline(store: PipelineOrchestratorStore, pipelineId: string): Promise<ApiResult>;
8
+ export declare function handleValidatePipeline(store: PipelineOrchestratorStore, pipelineId: string): Promise<ApiResult>;
9
+ //# sourceMappingURL=pipelines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipelines.d.ts","sourceRoot":"","sources":["../../src/handlers/pipelines.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,SAAS,CAAC,CAG9F;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,yBAAyB,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,CAMpB;AAOD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,EAChC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CAqCpB;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,EAChC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CAoEpB;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,yBAAyB,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,CAiBpB"}
@@ -0,0 +1,170 @@
1
+ import { validatePipelineStepGraph } from "../validate.js";
2
+ import { asNonEmptyString, asStringArray, jsonError, jsonOk, mapStoreError, parseJsonBody, } from "./shared.js";
3
+ export async function handleListPipelines(store) {
4
+ const pipelines = await store.listPipelines();
5
+ return jsonOk({ pipelines });
6
+ }
7
+ export async function handleGetPipeline(store, pipelineId) {
8
+ const pipeline = await store.getPipeline(decodeURIComponent(pipelineId));
9
+ if (!pipeline) {
10
+ return jsonError(404, `Pipeline not found: ${pipelineId}`, { code: "not_found" });
11
+ }
12
+ return jsonOk({ pipeline });
13
+ }
14
+ function asObjectRecord(value) {
15
+ if (value == null || typeof value !== "object" || Array.isArray(value))
16
+ return undefined;
17
+ return value;
18
+ }
19
+ export async function handleCreatePipeline(store, body) {
20
+ const parsed = parseJsonBody(body);
21
+ if (!parsed)
22
+ return jsonError(400, "JSON object body required");
23
+ const id = asNonEmptyString(parsed.id);
24
+ const name = asNonEmptyString(parsed.name);
25
+ const stepIds = asStringArray(parsed.stepIds);
26
+ if (!id)
27
+ return jsonError(400, "id is required");
28
+ if (!name)
29
+ return jsonError(400, "name is required");
30
+ if (!stepIds)
31
+ return jsonError(400, "stepIds must be an array of strings");
32
+ const input = {
33
+ id,
34
+ name,
35
+ stepIds,
36
+ };
37
+ if (typeof parsed.description === "string")
38
+ input.description = parsed.description;
39
+ if (typeof parsed.agentId === "string")
40
+ input.agentId = parsed.agentId;
41
+ if (typeof parsed.vendor === "string")
42
+ input.vendor = parsed.vendor;
43
+ if (typeof parsed.templateId === "string")
44
+ input.templateId = parsed.templateId;
45
+ if ("requiredRunInputs" in parsed) {
46
+ const required = asStringArray(parsed.requiredRunInputs);
47
+ if (!required)
48
+ return jsonError(400, "requiredRunInputs must be an array of strings");
49
+ input.requiredRunInputs = required;
50
+ }
51
+ if ("defaults" in parsed) {
52
+ const defaults = asObjectRecord(parsed.defaults);
53
+ if (!defaults)
54
+ return jsonError(400, "defaults must be an object when provided");
55
+ input.defaults = defaults;
56
+ }
57
+ if ("objectTypes" in parsed) {
58
+ input.objectTypes = parsed.objectTypes;
59
+ }
60
+ try {
61
+ const pipeline = await store.createPipeline(input);
62
+ return jsonOk({ pipeline }, 201);
63
+ }
64
+ catch (err) {
65
+ return mapStoreError(err);
66
+ }
67
+ }
68
+ export async function handleUpdatePipeline(store, pipelineId, body) {
69
+ const parsed = parseJsonBody(body);
70
+ if (!parsed)
71
+ return jsonError(400, "JSON object body required");
72
+ const patch = {};
73
+ if ("name" in parsed) {
74
+ const name = asNonEmptyString(parsed.name);
75
+ if (!name)
76
+ return jsonError(400, "name must be a non-empty string");
77
+ patch.name = name;
78
+ }
79
+ if ("description" in parsed) {
80
+ if (parsed.description != null && typeof parsed.description !== "string") {
81
+ return jsonError(400, "description must be a string when provided");
82
+ }
83
+ patch.description = typeof parsed.description === "string" ? parsed.description : null;
84
+ }
85
+ if ("agentId" in parsed) {
86
+ if (parsed.agentId != null && typeof parsed.agentId !== "string") {
87
+ return jsonError(400, "agentId must be a string when provided");
88
+ }
89
+ patch.agentId = typeof parsed.agentId === "string" ? parsed.agentId : null;
90
+ }
91
+ if ("vendor" in parsed) {
92
+ if (parsed.vendor != null && typeof parsed.vendor !== "string") {
93
+ return jsonError(400, "vendor must be a string when provided");
94
+ }
95
+ patch.vendor = typeof parsed.vendor === "string" ? parsed.vendor : null;
96
+ }
97
+ if ("templateId" in parsed) {
98
+ if (parsed.templateId != null && typeof parsed.templateId !== "string") {
99
+ return jsonError(400, "templateId must be a string when provided");
100
+ }
101
+ patch.templateId = typeof parsed.templateId === "string" ? parsed.templateId : null;
102
+ }
103
+ if ("stepIds" in parsed) {
104
+ const stepIds = asStringArray(parsed.stepIds);
105
+ if (!stepIds)
106
+ return jsonError(400, "stepIds must be an array of strings");
107
+ patch.stepIds = stepIds;
108
+ }
109
+ if ("requiredRunInputs" in parsed) {
110
+ if (parsed.requiredRunInputs === null) {
111
+ patch.requiredRunInputs = null;
112
+ }
113
+ else {
114
+ const required = asStringArray(parsed.requiredRunInputs);
115
+ if (!required)
116
+ return jsonError(400, "requiredRunInputs must be an array of strings");
117
+ patch.requiredRunInputs = required;
118
+ }
119
+ }
120
+ if ("defaults" in parsed) {
121
+ if (parsed.defaults === null) {
122
+ patch.defaults = null;
123
+ }
124
+ else {
125
+ const defaults = asObjectRecord(parsed.defaults);
126
+ if (!defaults)
127
+ return jsonError(400, "defaults must be an object when provided");
128
+ patch.defaults = defaults;
129
+ }
130
+ }
131
+ if ("objectTypes" in parsed) {
132
+ patch.objectTypes =
133
+ parsed.objectTypes === null
134
+ ? null
135
+ : parsed.objectTypes;
136
+ }
137
+ try {
138
+ const pipeline = await store.updatePipeline(decodeURIComponent(pipelineId), patch);
139
+ return jsonOk({ pipeline });
140
+ }
141
+ catch (err) {
142
+ return mapStoreError(err);
143
+ }
144
+ }
145
+ export async function handleDeletePipeline(store, pipelineId) {
146
+ const deleted = await store.deletePipeline(decodeURIComponent(pipelineId));
147
+ if (!deleted) {
148
+ return jsonError(404, `Pipeline not found: ${pipelineId}`, { code: "not_found" });
149
+ }
150
+ return jsonOk({ deleted: true });
151
+ }
152
+ export async function handleValidatePipeline(store, pipelineId) {
153
+ const pipeline = await store.getPipeline(decodeURIComponent(pipelineId));
154
+ if (!pipeline) {
155
+ return jsonError(404, `Pipeline not found: ${pipelineId}`, { code: "not_found" });
156
+ }
157
+ const steps = [];
158
+ for (const id of pipeline.stepIds) {
159
+ const step = await store.getStep(id);
160
+ if (!step) {
161
+ return jsonOk({
162
+ ok: false,
163
+ issues: [{ path: `stepIds`, message: `unknown step: ${id}` }],
164
+ });
165
+ }
166
+ steps.push(step);
167
+ }
168
+ return jsonOk(validatePipelineStepGraph(steps));
169
+ }
170
+ //# sourceMappingURL=pipelines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipelines.js","sourceRoot":"","sources":["../../src/handlers/pipelines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { OrchestratorRuntimePorts } from "../runtime/ports.js";
2
+ import type { PipelineOrchestratorStore } from "../store/types.js";
3
+ import { type ApiResult } from "./shared.js";
4
+ export declare function handleListRuns(store: PipelineOrchestratorStore, searchParams: URLSearchParams): Promise<ApiResult>;
5
+ export declare function handleGetRun(store: PipelineOrchestratorStore, runId: string): Promise<ApiResult>;
6
+ export declare function handleStartRun(store: PipelineOrchestratorStore, ports: OrchestratorRuntimePorts, body: string, searchParams: URLSearchParams): Promise<ApiResult>;
7
+ export declare function handlePreflightRun(store: PipelineOrchestratorStore, body: string): Promise<ApiResult>;
8
+ export declare function handleRetryRun(store: PipelineOrchestratorStore, ports: OrchestratorRuntimePorts, runId: string, body: string, searchParams: URLSearchParams): Promise<ApiResult>;
9
+ export declare function handleCancelRun(store: PipelineOrchestratorStore, runId: string): Promise<ApiResult>;
10
+ export declare function handleResumeRun(store: PipelineOrchestratorStore, ports: OrchestratorRuntimePorts, runId: string, searchParams: URLSearchParams): Promise<ApiResult>;
11
+ export declare function handleReconcileRun(store: PipelineOrchestratorStore, ports: OrchestratorRuntimePorts, runId: string): Promise<ApiResult>;
12
+ export declare function handleGetRunLease(store: PipelineOrchestratorStore, ports: OrchestratorRuntimePorts, runId: string): Promise<ApiResult>;
13
+ //# sourceMappingURL=runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/handlers/runs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAML,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAErB,wBAAsB,cAAc,CAClC,KAAK,EAAE,yBAAyB,EAChC,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAIpB;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,CAAC,CAIpB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,wBAAwB,EAC/B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAyCpB;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,yBAAyB,EAChC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CAgBpB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAkBpB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,CAAC,CAOpB;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAapB;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,CAAC,CAcpB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,yBAAyB,EAChC,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,SAAS,CAAC,CAiBpB"}
@@ -0,0 +1,157 @@
1
+ import { cancelPipelineRun, resumePipelineRun, retryPipelineRunFromStep, startPipelineRun, } from "../runtime/execute-run.js";
2
+ import { getRunClaim, reconcileExpiredClaims } from "../runtime/leases.js";
3
+ import { asNonEmptyString, jsonError, jsonOk, mapStoreError, parseJsonBody, } from "./shared.js";
4
+ export async function handleListRuns(store, searchParams) {
5
+ const pipelineId = searchParams.get("pipelineId")?.trim() || undefined;
6
+ const runs = await store.listRuns({ pipelineId });
7
+ return jsonOk({ runs });
8
+ }
9
+ export async function handleGetRun(store, runId) {
10
+ const run = await store.getRun(decodeURIComponent(runId));
11
+ if (!run)
12
+ return jsonError(404, `Run not found: ${runId}`, { code: "not_found" });
13
+ return jsonOk({ run });
14
+ }
15
+ export async function handleStartRun(store, ports, body, searchParams) {
16
+ const parsed = parseJsonBody(body);
17
+ if (!parsed)
18
+ return jsonError(400, "JSON object body required");
19
+ const pipelineId = asNonEmptyString(parsed.pipelineId);
20
+ if (!pipelineId)
21
+ return jsonError(400, "pipelineId is required");
22
+ const wait = searchParams.get("wait") === "1" || searchParams.get("wait") === "true";
23
+ const context = parsed.context != null && typeof parsed.context === "object" && !Array.isArray(parsed.context)
24
+ ? parsed.context
25
+ : undefined;
26
+ const orgId = asNonEmptyString(parsed.orgId);
27
+ let mode;
28
+ if ("mode" in parsed) {
29
+ if (parsed.mode !== "ondemand" &&
30
+ parsed.mode !== "simulation" &&
31
+ parsed.mode !== "dry-run" &&
32
+ parsed.mode !== "shadow" &&
33
+ parsed.mode !== "staged") {
34
+ return jsonError(400, "mode must be ondemand|simulation|dry-run|shadow|staged");
35
+ }
36
+ mode = parsed.mode;
37
+ }
38
+ try {
39
+ const run = await startPipelineRun({
40
+ store,
41
+ ports,
42
+ input: {
43
+ pipelineId,
44
+ context,
45
+ mode,
46
+ orgId: orgId || undefined,
47
+ skipPreflight: parsed.skipPreflight === true,
48
+ },
49
+ wait,
50
+ });
51
+ return jsonOk({ run, runId: run.runId }, wait ? 200 : 202);
52
+ }
53
+ catch (err) {
54
+ return mapStoreError(err);
55
+ }
56
+ }
57
+ export async function handlePreflightRun(store, body) {
58
+ const parsed = parseJsonBody(body);
59
+ if (!parsed)
60
+ return jsonError(400, "JSON object body required");
61
+ const pipelineId = asNonEmptyString(parsed.pipelineId);
62
+ if (!pipelineId)
63
+ return jsonError(400, "pipelineId is required");
64
+ const context = parsed.context != null && typeof parsed.context === "object" && !Array.isArray(parsed.context)
65
+ ? parsed.context
66
+ : undefined;
67
+ const orgId = asNonEmptyString(parsed.orgId);
68
+ const { preflightPipelineRun } = await import("../runtime/preflight.js");
69
+ const result = await preflightPipelineRun({
70
+ store,
71
+ input: { pipelineId, context, orgId: orgId || undefined },
72
+ });
73
+ return jsonOk(result, result.ok ? 200 : 422);
74
+ }
75
+ export async function handleRetryRun(store, ports, runId, body, searchParams) {
76
+ const parsed = parseJsonBody(body);
77
+ if (!parsed)
78
+ return jsonError(400, "JSON object body required");
79
+ const fromStepId = asNonEmptyString(parsed.fromStepId);
80
+ if (!fromStepId)
81
+ return jsonError(400, "fromStepId is required");
82
+ const wait = searchParams.get("wait") === "1" || searchParams.get("wait") === "true";
83
+ try {
84
+ const run = await retryPipelineRunFromStep({
85
+ store,
86
+ ports,
87
+ runId: decodeURIComponent(runId),
88
+ fromStepId,
89
+ wait,
90
+ });
91
+ return jsonOk({ run });
92
+ }
93
+ catch (err) {
94
+ return mapStoreError(err);
95
+ }
96
+ }
97
+ export async function handleCancelRun(store, runId) {
98
+ try {
99
+ const run = await cancelPipelineRun(store, decodeURIComponent(runId));
100
+ return jsonOk({ run });
101
+ }
102
+ catch (err) {
103
+ return mapStoreError(err);
104
+ }
105
+ }
106
+ export async function handleResumeRun(store, ports, runId, searchParams) {
107
+ const wait = searchParams.get("wait") === "1" || searchParams.get("wait") === "true";
108
+ try {
109
+ const run = await resumePipelineRun({
110
+ store,
111
+ ports,
112
+ runId: decodeURIComponent(runId),
113
+ wait,
114
+ });
115
+ return jsonOk({ run });
116
+ }
117
+ catch (err) {
118
+ return mapStoreError(err);
119
+ }
120
+ }
121
+ export async function handleReconcileRun(store, ports, runId) {
122
+ if (!ports.operational) {
123
+ return jsonError(422, "operational stores not configured");
124
+ }
125
+ try {
126
+ const result = await reconcileExpiredClaims({
127
+ operational: ports.operational,
128
+ store,
129
+ runId: decodeURIComponent(runId),
130
+ });
131
+ return jsonOk(result);
132
+ }
133
+ catch (err) {
134
+ return mapStoreError(err);
135
+ }
136
+ }
137
+ export async function handleGetRunLease(store, ports, runId) {
138
+ if (!ports.operational) {
139
+ return jsonError(422, "operational stores not configured");
140
+ }
141
+ const run = await store.getRun(decodeURIComponent(runId));
142
+ if (!run)
143
+ return jsonError(404, `Run not found: ${runId}`, { code: "not_found" });
144
+ const orgId = run.orgId ?? "default";
145
+ try {
146
+ const claim = await getRunClaim({
147
+ operational: ports.operational,
148
+ orgId,
149
+ runId: run.runId,
150
+ });
151
+ return jsonOk({ claim });
152
+ }
153
+ catch (err) {
154
+ return mapStoreError(err);
155
+ }
156
+ }
157
+ //# sourceMappingURL=runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/handlers/runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { PipelineOrchestratorStore } from "../store/types.js";
2
+ import { type ApiResult } from "./shared.js";
3
+ export declare function handleListSchedules(store: PipelineOrchestratorStore, searchParams: URLSearchParams): Promise<ApiResult>;
4
+ export declare function handleGetSchedule(store: PipelineOrchestratorStore, scheduleId: string): Promise<ApiResult>;
5
+ export declare function handleCreateSchedule(store: PipelineOrchestratorStore, body: string): Promise<ApiResult>;
6
+ export declare function handleUpdateSchedule(store: PipelineOrchestratorStore, scheduleId: string, body: string): Promise<ApiResult>;
7
+ export declare function handleDeleteSchedule(store: PipelineOrchestratorStore, scheduleId: string): Promise<ApiResult>;
8
+ //# sourceMappingURL=schedules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../src/handlers/schedules.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAML,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAiBrB,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,yBAAyB,EAChC,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,SAAS,CAAC,CAIpB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,yBAAyB,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,CAMpB;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,EAChC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CA0BpB;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,EAChC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,SAAS,CAAC,CAyDpB;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,CAMpB"}