@elaraai/e3-api-server 1.0.78 → 1.0.80

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 (129) hide show
  1. package/README.md +83 -19
  2. package/dist/src/beast2.js +1 -1
  3. package/dist/src/beast2.js.map +1 -1
  4. package/dist/src/cli.js +13 -0
  5. package/dist/src/cli.js.map +1 -1
  6. package/dist/src/errors.d.ts.map +1 -1
  7. package/dist/src/errors.js +8 -1
  8. package/dist/src/errors.js.map +1 -1
  9. package/dist/src/handlers/dataflow.d.ts +58 -11
  10. package/dist/src/handlers/dataflow.d.ts.map +1 -1
  11. package/dist/src/handlers/dataflow.js +120 -48
  12. package/dist/src/handlers/dataflow.js.map +1 -1
  13. package/dist/src/handlers/dataflow.spec.d.ts +6 -0
  14. package/dist/src/handlers/dataflow.spec.d.ts.map +1 -0
  15. package/dist/src/handlers/dataflow.spec.js +106 -0
  16. package/dist/src/handlers/dataflow.spec.js.map +1 -0
  17. package/dist/src/handlers/datasets.d.ts +60 -34
  18. package/dist/src/handlers/datasets.d.ts.map +1 -1
  19. package/dist/src/handlers/datasets.js +452 -306
  20. package/dist/src/handlers/datasets.js.map +1 -1
  21. package/dist/src/handlers/datasets.spec.js +338 -119
  22. package/dist/src/handlers/datasets.spec.js.map +1 -1
  23. package/dist/src/handlers/functions.d.ts.map +1 -1
  24. package/dist/src/handlers/functions.js +10 -8
  25. package/dist/src/handlers/functions.js.map +1 -1
  26. package/dist/src/handlers/functions.spec.js +2 -2
  27. package/dist/src/handlers/functions.spec.js.map +1 -1
  28. package/dist/src/handlers/index.d.ts +2 -2
  29. package/dist/src/handlers/index.d.ts.map +1 -1
  30. package/dist/src/handlers/index.js +2 -2
  31. package/dist/src/handlers/index.js.map +1 -1
  32. package/dist/src/handlers/records.d.ts.map +1 -1
  33. package/dist/src/handlers/records.js +15 -12
  34. package/dist/src/handlers/records.js.map +1 -1
  35. package/dist/src/handlers/records.spec.js +9 -5
  36. package/dist/src/handlers/records.spec.js.map +1 -1
  37. package/dist/src/handlers/repository.d.ts +59 -10
  38. package/dist/src/handlers/repository.d.ts.map +1 -1
  39. package/dist/src/handlers/repository.js +147 -40
  40. package/dist/src/handlers/repository.js.map +1 -1
  41. package/dist/src/handlers/tasks.d.ts +2 -1
  42. package/dist/src/handlers/tasks.d.ts.map +1 -1
  43. package/dist/src/handlers/tasks.js +31 -8
  44. package/dist/src/handlers/tasks.js.map +1 -1
  45. package/dist/src/handlers/tasks.spec.d.ts +6 -0
  46. package/dist/src/handlers/tasks.spec.d.ts.map +1 -0
  47. package/dist/src/handlers/tasks.spec.js +64 -0
  48. package/dist/src/handlers/tasks.spec.js.map +1 -0
  49. package/dist/src/handlers/workspaces.d.ts +44 -6
  50. package/dist/src/handlers/workspaces.d.ts.map +1 -1
  51. package/dist/src/handlers/workspaces.js +74 -40
  52. package/dist/src/handlers/workspaces.js.map +1 -1
  53. package/dist/src/handlers/workspaces.spec.d.ts +6 -0
  54. package/dist/src/handlers/workspaces.spec.d.ts.map +1 -0
  55. package/dist/src/handlers/workspaces.spec.js +164 -0
  56. package/dist/src/handlers/workspaces.spec.js.map +1 -0
  57. package/dist/src/index.d.ts +3 -0
  58. package/dist/src/index.d.ts.map +1 -1
  59. package/dist/src/index.js +7 -0
  60. package/dist/src/index.js.map +1 -1
  61. package/dist/src/local-dataflow.d.ts +14 -0
  62. package/dist/src/local-dataflow.d.ts.map +1 -0
  63. package/dist/src/local-dataflow.js +41 -0
  64. package/dist/src/local-dataflow.js.map +1 -0
  65. package/dist/src/middleware/repository.d.ts +39 -0
  66. package/dist/src/middleware/repository.d.ts.map +1 -0
  67. package/dist/src/middleware/repository.js +77 -0
  68. package/dist/src/middleware/repository.js.map +1 -0
  69. package/dist/src/routes/data.d.ts +2 -2
  70. package/dist/src/routes/data.d.ts.map +1 -1
  71. package/dist/src/routes/data.js +22 -45
  72. package/dist/src/routes/data.js.map +1 -1
  73. package/dist/src/routes/datasets.d.ts +0 -3
  74. package/dist/src/routes/datasets.d.ts.map +1 -1
  75. package/dist/src/routes/datasets.js +40 -8
  76. package/dist/src/routes/datasets.js.map +1 -1
  77. package/dist/src/routes/executions.d.ts +37 -2
  78. package/dist/src/routes/executions.d.ts.map +1 -1
  79. package/dist/src/routes/executions.js +21 -12
  80. package/dist/src/routes/executions.js.map +1 -1
  81. package/dist/src/routes/index.d.ts +2 -1
  82. package/dist/src/routes/index.d.ts.map +1 -1
  83. package/dist/src/routes/index.js +1 -0
  84. package/dist/src/routes/index.js.map +1 -1
  85. package/dist/src/routes/objects.d.ts +16 -2
  86. package/dist/src/routes/objects.d.ts.map +1 -1
  87. package/dist/src/routes/objects.js +34 -3
  88. package/dist/src/routes/objects.js.map +1 -1
  89. package/dist/src/routes/repositories.d.ts +26 -0
  90. package/dist/src/routes/repositories.d.ts.map +1 -0
  91. package/dist/src/routes/repositories.js +58 -0
  92. package/dist/src/routes/repositories.js.map +1 -0
  93. package/dist/src/routes/repositories.spec.d.ts +6 -0
  94. package/dist/src/routes/repositories.spec.d.ts.map +1 -0
  95. package/dist/src/routes/repositories.spec.js +77 -0
  96. package/dist/src/routes/repositories.spec.js.map +1 -0
  97. package/dist/src/routes/repository.d.ts +12 -2
  98. package/dist/src/routes/repository.d.ts.map +1 -1
  99. package/dist/src/routes/repository.js +24 -9
  100. package/dist/src/routes/repository.js.map +1 -1
  101. package/dist/src/routes/transfer.d.ts +11 -9
  102. package/dist/src/routes/transfer.d.ts.map +1 -1
  103. package/dist/src/routes/transfer.js +90 -115
  104. package/dist/src/routes/transfer.js.map +1 -1
  105. package/dist/src/routes/workspaces.d.ts +14 -1
  106. package/dist/src/routes/workspaces.d.ts.map +1 -1
  107. package/dist/src/routes/workspaces.js +57 -46
  108. package/dist/src/routes/workspaces.js.map +1 -1
  109. package/dist/src/server.d.ts +18 -6
  110. package/dist/src/server.d.ts.map +1 -1
  111. package/dist/src/server.js +55 -182
  112. package/dist/src/server.js.map +1 -1
  113. package/dist/src/server.spec.d.ts +6 -0
  114. package/dist/src/server.spec.d.ts.map +1 -0
  115. package/dist/src/server.spec.js +59 -0
  116. package/dist/src/server.spec.js.map +1 -0
  117. package/dist/src/types.d.ts +200 -16
  118. package/dist/src/types.d.ts.map +1 -1
  119. package/dist/src/types.js +5 -2
  120. package/dist/src/types.js.map +1 -1
  121. package/package.json +5 -5
  122. package/dist/src/async-operation-state.d.ts +0 -37
  123. package/dist/src/async-operation-state.d.ts.map +0 -1
  124. package/dist/src/async-operation-state.js +0 -118
  125. package/dist/src/async-operation-state.js.map +0 -1
  126. package/dist/src/orchestrator-manager.d.ts +0 -45
  127. package/dist/src/orchestrator-manager.d.ts.map +0 -1
  128. package/dist/src/orchestrator-manager.js +0 -150
  129. package/dist/src/orchestrator-manager.js.map +0 -1
@@ -1,45 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Elara AI Pty Ltd
3
- * Licensed under BSL 1.1. See LICENSE for details.
4
- */
5
- import { LocalOrchestrator, type ExecutionHandle, type ExecutionStateStore } from '@elaraai/e3-core';
6
- /**
7
- * Get the orchestrator for a repository.
8
- */
9
- export declare function getOrchestrator(repoPath: string): LocalOrchestrator;
10
- /**
11
- * Get the state store for a repository.
12
- */
13
- export declare function getStateStore(repoPath: string): ExecutionStateStore;
14
- /**
15
- * Set the active execution for a workspace.
16
- * Replaces any previous execution.
17
- */
18
- export declare function setActiveExecution(repoPath: string, workspace: string, handle: ExecutionHandle): void;
19
- /**
20
- * Get the active execution for a workspace.
21
- */
22
- export declare function getActiveExecution(repoPath: string, workspace: string): ExecutionHandle | null;
23
- /**
24
- * Clear the active execution for a workspace.
25
- */
26
- export declare function clearActiveExecution(repoPath: string, workspace: string): void;
27
- /**
28
- * Check if there's an active (running) execution for a workspace.
29
- */
30
- export declare function hasActiveExecution(repoPath: string, workspace: string): boolean;
31
- /**
32
- * Get the start time for an execution (for duration calculation).
33
- */
34
- export declare function getExecutionStartTime(repoPath: string, workspace: string, executionId: string): number | null;
35
- /**
36
- * Get the latest execution for a workspace (may not be active/running).
37
- * Useful for polling completed executions.
38
- */
39
- export declare function getLatestExecution(repoPath: string, workspace: string): Promise<ExecutionHandle | null>;
40
- /**
41
- * Clear all in-memory state (for testing).
42
- * Note: This does not clear persisted file-based state.
43
- */
44
- export declare function clearAll(): void;
45
- //# sourceMappingURL=orchestrator-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator-manager.d.ts","sourceRoot":"","sources":["../../src/orchestrator-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EACL,iBAAiB,EAEjB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAgE1B;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAEnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAEnE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAOrG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAG9F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAQ9E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG7G;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAe7G;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAK/B"}
@@ -1,150 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Elara AI Pty Ltd
3
- * Licensed under BSL 1.1. See LICENSE for details.
4
- */
5
- /**
6
- * Orchestrator manager for e3-api-server.
7
- *
8
- * Manages LocalOrchestrator instances per repository, each with its own
9
- * FileStateStore for durable execution state persistence.
10
- */
11
- import { join } from 'node:path';
12
- import { LocalOrchestrator, FileStateStore, } from '@elaraai/e3-core';
13
- /**
14
- * Map of state stores per repository path.
15
- */
16
- const stateStores = new Map();
17
- /**
18
- * Map of orchestrators per repository path.
19
- */
20
- const orchestrators = new Map();
21
- /**
22
- * Get or create a FileStateStore for a repository.
23
- */
24
- function getOrCreateStateStore(repoPath) {
25
- let store = stateStores.get(repoPath);
26
- if (!store) {
27
- const workspacesDir = join(repoPath, 'workspaces');
28
- store = new FileStateStore(workspacesDir);
29
- stateStores.set(repoPath, store);
30
- }
31
- return store;
32
- }
33
- /**
34
- * Get or create a LocalOrchestrator for a repository.
35
- */
36
- function getOrCreateOrchestrator(repoPath) {
37
- let orch = orchestrators.get(repoPath);
38
- if (!orch) {
39
- const stateStore = getOrCreateStateStore(repoPath);
40
- orch = new LocalOrchestrator(stateStore);
41
- orchestrators.set(repoPath, orch);
42
- }
43
- return orch;
44
- }
45
- /**
46
- * Map of active execution handles by workspace key.
47
- * Key format: `${repoPath}::${workspace}`
48
- */
49
- const activeExecutions = new Map();
50
- /**
51
- * Map of execution start times for duration tracking.
52
- * Key format: `${repoPath}::${workspace}:${executionId}`
53
- */
54
- const executionStartTimes = new Map();
55
- /**
56
- * Generate a key for workspace-level lookups.
57
- */
58
- function makeWorkspaceKey(repoPath, workspace) {
59
- return `${repoPath}::${workspace}`;
60
- }
61
- /**
62
- * Generate a key for execution-level lookups.
63
- */
64
- function makeExecutionKey(repoPath, workspace, executionId) {
65
- return `${repoPath}::${workspace}:${executionId}`;
66
- }
67
- /**
68
- * Get the orchestrator for a repository.
69
- */
70
- export function getOrchestrator(repoPath) {
71
- return getOrCreateOrchestrator(repoPath);
72
- }
73
- /**
74
- * Get the state store for a repository.
75
- */
76
- export function getStateStore(repoPath) {
77
- return getOrCreateStateStore(repoPath);
78
- }
79
- /**
80
- * Set the active execution for a workspace.
81
- * Replaces any previous execution.
82
- */
83
- export function setActiveExecution(repoPath, workspace, handle) {
84
- const key = makeWorkspaceKey(repoPath, workspace);
85
- activeExecutions.set(key, handle);
86
- // Record start time for duration tracking
87
- const execKey = makeExecutionKey(repoPath, workspace, handle.id);
88
- executionStartTimes.set(execKey, Date.now());
89
- }
90
- /**
91
- * Get the active execution for a workspace.
92
- */
93
- export function getActiveExecution(repoPath, workspace) {
94
- const key = makeWorkspaceKey(repoPath, workspace);
95
- return activeExecutions.get(key) ?? null;
96
- }
97
- /**
98
- * Clear the active execution for a workspace.
99
- */
100
- export function clearActiveExecution(repoPath, workspace) {
101
- const key = makeWorkspaceKey(repoPath, workspace);
102
- const handle = activeExecutions.get(key);
103
- if (handle) {
104
- const execKey = makeExecutionKey(repoPath, workspace, handle.id);
105
- executionStartTimes.delete(execKey);
106
- }
107
- activeExecutions.delete(key);
108
- }
109
- /**
110
- * Check if there's an active (running) execution for a workspace.
111
- */
112
- export function hasActiveExecution(repoPath, workspace) {
113
- return activeExecutions.has(makeWorkspaceKey(repoPath, workspace));
114
- }
115
- /**
116
- * Get the start time for an execution (for duration calculation).
117
- */
118
- export function getExecutionStartTime(repoPath, workspace, executionId) {
119
- const key = makeExecutionKey(repoPath, workspace, executionId);
120
- return executionStartTimes.get(key) ?? null;
121
- }
122
- /**
123
- * Get the latest execution for a workspace (may not be active/running).
124
- * Useful for polling completed executions.
125
- */
126
- export async function getLatestExecution(repoPath, workspace) {
127
- // First check for active execution
128
- const active = getActiveExecution(repoPath, workspace);
129
- if (active) {
130
- return active;
131
- }
132
- // Otherwise check state store for latest
133
- const stateStore = getOrCreateStateStore(repoPath);
134
- const state = await stateStore.readLatest(repoPath, workspace);
135
- if (state) {
136
- return { id: state.id, repo: repoPath, workspace };
137
- }
138
- return null;
139
- }
140
- /**
141
- * Clear all in-memory state (for testing).
142
- * Note: This does not clear persisted file-based state.
143
- */
144
- export function clearAll() {
145
- activeExecutions.clear();
146
- executionStartTimes.clear();
147
- stateStores.clear();
148
- orchestrators.clear();
149
- }
150
- //# sourceMappingURL=orchestrator-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator-manager.js","sourceRoot":"","sources":["../../src/orchestrator-manager.ts"],"names":[],"mappings":"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"}