@elaraai/e3-api-server 0.0.2-beta.12 → 0.0.2-beta.13

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 (111) hide show
  1. package/README.md +144 -29
  2. package/dist/src/async-operation-state.d.ts +63 -0
  3. package/dist/src/async-operation-state.d.ts.map +1 -0
  4. package/dist/src/async-operation-state.js +193 -0
  5. package/dist/src/async-operation-state.js.map +1 -0
  6. package/dist/src/auth/device.d.ts +26 -0
  7. package/dist/src/auth/device.d.ts.map +1 -0
  8. package/dist/src/auth/device.js +227 -0
  9. package/dist/src/auth/device.js.map +1 -0
  10. package/dist/src/auth/discovery.d.ts +23 -0
  11. package/dist/src/auth/discovery.d.ts.map +1 -0
  12. package/dist/src/auth/discovery.js +40 -0
  13. package/dist/src/auth/discovery.js.map +1 -0
  14. package/dist/src/auth/index.d.ts +56 -0
  15. package/dist/src/auth/index.d.ts.map +1 -0
  16. package/dist/src/auth/index.js +69 -0
  17. package/dist/src/auth/index.js.map +1 -0
  18. package/dist/src/auth/keys.d.ts +55 -0
  19. package/dist/src/auth/keys.d.ts.map +1 -0
  20. package/dist/src/auth/keys.js +78 -0
  21. package/dist/src/auth/keys.js.map +1 -0
  22. package/dist/src/beast2.d.ts +15 -3
  23. package/dist/src/beast2.d.ts.map +1 -1
  24. package/dist/src/beast2.js +30 -4
  25. package/dist/src/beast2.js.map +1 -1
  26. package/dist/src/cli.js +58 -6
  27. package/dist/src/cli.js.map +1 -1
  28. package/dist/src/errors.d.ts.map +1 -1
  29. package/dist/src/errors.js +5 -2
  30. package/dist/src/errors.js.map +1 -1
  31. package/dist/src/execution-state.d.ts +54 -0
  32. package/dist/src/execution-state.d.ts.map +1 -0
  33. package/dist/src/execution-state.js +150 -0
  34. package/dist/src/execution-state.js.map +1 -0
  35. package/dist/src/handlers/dataflow.d.ts +49 -0
  36. package/dist/src/handlers/dataflow.d.ts.map +1 -0
  37. package/dist/src/handlers/dataflow.js +371 -0
  38. package/dist/src/handlers/dataflow.js.map +1 -0
  39. package/dist/src/handlers/datasets.d.ts +23 -0
  40. package/dist/src/handlers/datasets.d.ts.map +1 -0
  41. package/dist/src/handlers/datasets.js +113 -0
  42. package/dist/src/handlers/datasets.js.map +1 -0
  43. package/dist/src/handlers/index.d.ts +12 -0
  44. package/dist/src/handlers/index.d.ts.map +1 -0
  45. package/dist/src/handlers/index.js +12 -0
  46. package/dist/src/handlers/index.js.map +1 -0
  47. package/dist/src/handlers/packages.d.ts +26 -0
  48. package/dist/src/handlers/packages.d.ts.map +1 -0
  49. package/dist/src/handlers/packages.js +101 -0
  50. package/dist/src/handlers/packages.js.map +1 -0
  51. package/dist/src/handlers/repos.d.ts +11 -0
  52. package/dist/src/handlers/repos.d.ts.map +1 -0
  53. package/dist/src/handlers/repos.js +52 -0
  54. package/dist/src/handlers/repos.js.map +1 -0
  55. package/dist/src/handlers/repository.d.ts +35 -0
  56. package/dist/src/handlers/repository.d.ts.map +1 -0
  57. package/dist/src/handlers/repository.js +142 -0
  58. package/dist/src/handlers/repository.js.map +1 -0
  59. package/dist/src/handlers/tasks.d.ts +18 -0
  60. package/dist/src/handlers/tasks.d.ts.map +1 -0
  61. package/dist/src/handlers/tasks.js +134 -0
  62. package/dist/src/handlers/tasks.js.map +1 -0
  63. package/dist/src/handlers/workspaces.d.ts +34 -0
  64. package/dist/src/handlers/workspaces.d.ts.map +1 -0
  65. package/dist/src/handlers/workspaces.js +225 -0
  66. package/dist/src/handlers/workspaces.js.map +1 -0
  67. package/dist/src/index.d.ts +3 -0
  68. package/dist/src/index.d.ts.map +1 -1
  69. package/dist/src/index.js +6 -0
  70. package/dist/src/index.js.map +1 -1
  71. package/dist/src/middleware/auth.d.ts +51 -0
  72. package/dist/src/middleware/auth.d.ts.map +1 -0
  73. package/dist/src/middleware/auth.js +158 -0
  74. package/dist/src/middleware/auth.js.map +1 -0
  75. package/dist/src/routes/datasets.d.ts +2 -1
  76. package/dist/src/routes/datasets.d.ts.map +1 -1
  77. package/dist/src/routes/datasets.js +50 -85
  78. package/dist/src/routes/datasets.js.map +1 -1
  79. package/dist/src/routes/executions.d.ts +2 -1
  80. package/dist/src/routes/executions.d.ts.map +1 -1
  81. package/dist/src/routes/executions.js +60 -286
  82. package/dist/src/routes/executions.js.map +1 -1
  83. package/dist/src/routes/index.d.ts +11 -0
  84. package/dist/src/routes/index.d.ts.map +1 -0
  85. package/dist/src/routes/index.js +11 -0
  86. package/dist/src/routes/index.js.map +1 -0
  87. package/dist/src/routes/packages.d.ts +2 -1
  88. package/dist/src/routes/packages.d.ts.map +1 -1
  89. package/dist/src/routes/packages.js +42 -105
  90. package/dist/src/routes/packages.js.map +1 -1
  91. package/dist/src/routes/repository.d.ts +2 -1
  92. package/dist/src/routes/repository.d.ts.map +1 -1
  93. package/dist/src/routes/repository.js +19 -54
  94. package/dist/src/routes/repository.js.map +1 -1
  95. package/dist/src/routes/tasks.d.ts +2 -1
  96. package/dist/src/routes/tasks.d.ts.map +1 -1
  97. package/dist/src/routes/tasks.js +22 -46
  98. package/dist/src/routes/tasks.js.map +1 -1
  99. package/dist/src/routes/workspaces.d.ts +2 -1
  100. package/dist/src/routes/workspaces.d.ts.map +1 -1
  101. package/dist/src/routes/workspaces.js +45 -116
  102. package/dist/src/routes/workspaces.js.map +1 -1
  103. package/dist/src/server.d.ts +24 -3
  104. package/dist/src/server.d.ts.map +1 -1
  105. package/dist/src/server.js +178 -19
  106. package/dist/src/server.js.map +1 -1
  107. package/dist/src/types.d.ts +486 -1
  108. package/dist/src/types.d.ts.map +1 -1
  109. package/dist/src/types.js +209 -2
  110. package/dist/src/types.js.map +1 -1
  111. package/package.json +15 -3
@@ -0,0 +1,371 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import { NullType, some, none, variant } from '@elaraai/east';
6
+ import { dataflowStart, dataflowExecute, dataflowGetGraph, workspaceStatus, executionFindCurrent, executionReadLog, WorkspaceLockError, DataflowAbortedError, } from '@elaraai/e3-core';
7
+ import { sendSuccess, sendError, sendSuccessWithStatus } from '../beast2.js';
8
+ import { errorToVariant } from '../errors.js';
9
+ import { WorkspaceStatusResultType, DataflowGraphType, LogChunkType, DataflowResultType, DataflowExecutionStateType, } from '../types.js';
10
+ import { createExecutionState, addExecutionEvent, completeExecution, abortExecution, getExecutionState, } from '../execution-state.js';
11
+ /**
12
+ * Convert core DatasetStatusInfo to API type.
13
+ */
14
+ function convertDatasetStatus(info) {
15
+ let status;
16
+ switch (info.status.type) {
17
+ case 'unset':
18
+ status = variant('unset', null);
19
+ break;
20
+ case 'stale':
21
+ status = variant('stale', null);
22
+ break;
23
+ case 'up-to-date':
24
+ status = variant('up-to-date', null);
25
+ break;
26
+ }
27
+ return {
28
+ path: info.path,
29
+ status,
30
+ hash: info.hash ? some(info.hash) : none,
31
+ isTaskOutput: info.isTaskOutput,
32
+ producedBy: info.producedBy ? some(info.producedBy) : none,
33
+ };
34
+ }
35
+ /**
36
+ * Convert core TaskStatusInfo to API type.
37
+ */
38
+ function convertTaskStatus(info) {
39
+ let status;
40
+ switch (info.status.type) {
41
+ case 'up-to-date':
42
+ status = variant('up-to-date', { cached: info.status.cached });
43
+ break;
44
+ case 'ready':
45
+ status = variant('ready', null);
46
+ break;
47
+ case 'waiting':
48
+ status = variant('waiting', { reason: info.status.reason });
49
+ break;
50
+ case 'in-progress':
51
+ status = variant('in-progress', {
52
+ pid: info.status.pid != null ? some(BigInt(info.status.pid)) : none,
53
+ startedAt: info.status.startedAt ? some(info.status.startedAt) : none,
54
+ });
55
+ break;
56
+ case 'failed':
57
+ status = variant('failed', {
58
+ exitCode: BigInt(info.status.exitCode),
59
+ completedAt: info.status.completedAt ? some(info.status.completedAt) : none,
60
+ });
61
+ break;
62
+ case 'error':
63
+ status = variant('error', {
64
+ message: info.status.message,
65
+ completedAt: info.status.completedAt ? some(info.status.completedAt) : none,
66
+ });
67
+ break;
68
+ case 'stale-running':
69
+ status = variant('stale-running', {
70
+ pid: info.status.pid != null ? some(BigInt(info.status.pid)) : none,
71
+ startedAt: info.status.startedAt ? some(info.status.startedAt) : none,
72
+ });
73
+ break;
74
+ }
75
+ return {
76
+ name: info.name,
77
+ hash: info.hash,
78
+ status,
79
+ inputs: info.inputs,
80
+ output: info.output,
81
+ dependsOn: info.dependsOn,
82
+ };
83
+ }
84
+ /**
85
+ * Convert core TaskExecutionResult to API type.
86
+ */
87
+ function convertTaskExecutionResult(result) {
88
+ let state;
89
+ switch (result.state) {
90
+ case 'success':
91
+ state = variant('success', null);
92
+ break;
93
+ case 'failed':
94
+ state = variant('failed', { exitCode: BigInt(result.exitCode ?? -1) });
95
+ break;
96
+ case 'error':
97
+ state = variant('error', { message: result.error ?? 'Unknown error' });
98
+ break;
99
+ case 'skipped':
100
+ state = variant('skipped', null);
101
+ break;
102
+ }
103
+ return {
104
+ name: result.name,
105
+ cached: result.cached,
106
+ state,
107
+ duration: result.duration,
108
+ };
109
+ }
110
+ /**
111
+ * Convert core DataflowResult to API type.
112
+ */
113
+ function convertDataflowResult(result) {
114
+ return {
115
+ success: result.success,
116
+ executed: BigInt(result.executed),
117
+ cached: BigInt(result.cached),
118
+ failed: BigInt(result.failed),
119
+ skipped: BigInt(result.skipped),
120
+ tasks: result.tasks.map(convertTaskExecutionResult),
121
+ duration: result.duration,
122
+ };
123
+ }
124
+ /**
125
+ * Convert core WorkspaceStatusResult to API type.
126
+ */
127
+ function convertWorkspaceStatus(result) {
128
+ return {
129
+ workspace: result.workspace,
130
+ lock: result.lock && result.lock.pid !== undefined
131
+ ? some({
132
+ pid: BigInt(result.lock.pid),
133
+ acquiredAt: result.lock.acquiredAt,
134
+ bootId: result.lock.bootId ? some(result.lock.bootId) : none,
135
+ command: result.lock.command ? some(result.lock.command) : none,
136
+ })
137
+ : none,
138
+ datasets: result.datasets.map(convertDatasetStatus),
139
+ tasks: result.tasks.map(convertTaskStatus),
140
+ summary: {
141
+ datasets: {
142
+ total: BigInt(result.summary.datasets.total),
143
+ unset: BigInt(result.summary.datasets.unset),
144
+ stale: BigInt(result.summary.datasets.stale),
145
+ upToDate: BigInt(result.summary.datasets.upToDate),
146
+ },
147
+ tasks: {
148
+ total: BigInt(result.summary.tasks.total),
149
+ upToDate: BigInt(result.summary.tasks.upToDate),
150
+ ready: BigInt(result.summary.tasks.ready),
151
+ waiting: BigInt(result.summary.tasks.waiting),
152
+ inProgress: BigInt(result.summary.tasks.inProgress),
153
+ failed: BigInt(result.summary.tasks.failed),
154
+ error: BigInt(result.summary.tasks.error),
155
+ staleRunning: BigInt(result.summary.tasks.staleRunning),
156
+ },
157
+ },
158
+ };
159
+ }
160
+ /**
161
+ * Convert a core TaskExecutionResult to a DataflowEvent.
162
+ */
163
+ function taskResultToEvent(result) {
164
+ const timestamp = new Date().toISOString();
165
+ if (result.cached) {
166
+ // Cached - no execution happened, just cache retrieval
167
+ return variant('cached', {
168
+ task: result.name,
169
+ timestamp,
170
+ });
171
+ }
172
+ switch (result.state) {
173
+ case 'success':
174
+ return variant('complete', {
175
+ task: result.name,
176
+ timestamp,
177
+ duration: result.duration,
178
+ });
179
+ case 'failed':
180
+ return variant('failed', {
181
+ task: result.name,
182
+ timestamp,
183
+ duration: result.duration,
184
+ exitCode: BigInt(result.exitCode ?? -1),
185
+ });
186
+ case 'error':
187
+ return variant('error', {
188
+ task: result.name,
189
+ timestamp,
190
+ message: result.error ?? 'Unknown error',
191
+ });
192
+ case 'skipped':
193
+ return variant('input_unavailable', {
194
+ task: result.name,
195
+ timestamp,
196
+ reason: 'Upstream task failed or inputs not available',
197
+ });
198
+ }
199
+ }
200
+ /**
201
+ * Start dataflow execution (non-blocking).
202
+ *
203
+ * Returns 202 Accepted immediately and runs execution in background.
204
+ * Creates execution state that can be polled via getDataflowExecution().
205
+ */
206
+ export async function startDataflow(storage, repoPath, workspace, options) {
207
+ try {
208
+ // Acquire lock first - returns null if already locked
209
+ const lock = await storage.locks.acquire(repoPath, workspace, variant('dataflow', null));
210
+ if (!lock) {
211
+ throw new WorkspaceLockError(workspace);
212
+ }
213
+ // Create execution state for polling
214
+ createExecutionState(repoPath, workspace);
215
+ // Track execution summary
216
+ let executed = 0;
217
+ let cached = 0;
218
+ let failed = 0;
219
+ let skipped = 0;
220
+ const startTime = Date.now();
221
+ // Start execution without awaiting - it runs in background
222
+ dataflowStart(storage, repoPath, workspace, {
223
+ concurrency: options.concurrency,
224
+ force: options.force,
225
+ filter: options.filter,
226
+ lock,
227
+ onTaskStart: (name) => {
228
+ // Record start event
229
+ addExecutionEvent(repoPath, workspace, variant('start', {
230
+ task: name,
231
+ timestamp: new Date().toISOString(),
232
+ }));
233
+ },
234
+ onTaskComplete: (result) => {
235
+ // Track summary counts
236
+ if (result.cached) {
237
+ cached++;
238
+ }
239
+ else if (result.state === 'success') {
240
+ executed++;
241
+ }
242
+ else if (result.state === 'failed' || result.state === 'error') {
243
+ failed++;
244
+ }
245
+ else if (result.state === 'skipped') {
246
+ skipped++;
247
+ }
248
+ // Record completion event
249
+ addExecutionEvent(repoPath, workspace, taskResultToEvent(result));
250
+ },
251
+ }).then((result) => {
252
+ // Execution completed
253
+ const duration = Date.now() - startTime;
254
+ completeExecution(repoPath, workspace, {
255
+ executed,
256
+ cached,
257
+ failed,
258
+ skipped,
259
+ duration,
260
+ }, result.success);
261
+ }).catch((err) => {
262
+ // Handle abort or error
263
+ if (err instanceof DataflowAbortedError) {
264
+ abortExecution(repoPath, workspace);
265
+ }
266
+ else {
267
+ // Mark as failed on unexpected error
268
+ const duration = Date.now() - startTime;
269
+ completeExecution(repoPath, workspace, {
270
+ executed,
271
+ cached,
272
+ failed,
273
+ skipped,
274
+ duration,
275
+ }, false);
276
+ console.error(`Dataflow execution error for workspace ${workspace}:`, err);
277
+ }
278
+ });
279
+ // Return immediately with 202 Accepted
280
+ return sendSuccessWithStatus(NullType, null, 202);
281
+ }
282
+ catch (err) {
283
+ return sendError(NullType, errorToVariant(err));
284
+ }
285
+ }
286
+ /**
287
+ * Execute dataflow (blocking).
288
+ *
289
+ * Blocks until execution completes and returns the result.
290
+ */
291
+ export async function executeDataflow(storage, repoPath, workspace, options) {
292
+ try {
293
+ const result = await dataflowExecute(storage, repoPath, workspace, options);
294
+ return sendSuccess(DataflowResultType, convertDataflowResult(result));
295
+ }
296
+ catch (err) {
297
+ return sendError(DataflowResultType, errorToVariant(err));
298
+ }
299
+ }
300
+ /**
301
+ * Get workspace status (for polling).
302
+ */
303
+ export async function getDataflowStatus(storage, repoPath, workspace) {
304
+ try {
305
+ const result = await workspaceStatus(storage, repoPath, workspace);
306
+ return sendSuccess(WorkspaceStatusResultType, convertWorkspaceStatus(result));
307
+ }
308
+ catch (err) {
309
+ return sendError(WorkspaceStatusResultType, errorToVariant(err));
310
+ }
311
+ }
312
+ /**
313
+ * Get dependency graph.
314
+ */
315
+ export async function getDataflowGraph(storage, repoPath, workspace) {
316
+ try {
317
+ const graph = await dataflowGetGraph(storage, repoPath, workspace);
318
+ return sendSuccess(DataflowGraphType, {
319
+ tasks: graph.tasks.map((t) => ({
320
+ name: t.name,
321
+ hash: t.hash,
322
+ inputs: t.inputs,
323
+ output: t.output,
324
+ dependsOn: t.dependsOn,
325
+ })),
326
+ });
327
+ }
328
+ catch (err) {
329
+ return sendError(DataflowGraphType, errorToVariant(err));
330
+ }
331
+ }
332
+ /**
333
+ * Get task logs.
334
+ */
335
+ export async function getTaskLogs(storage, repoPath, workspace, taskName, stream, offset, limit) {
336
+ try {
337
+ // Find the current execution for this task
338
+ const execution = await executionFindCurrent(storage, repoPath, workspace, taskName);
339
+ if (!execution) {
340
+ return sendError(LogChunkType, errorToVariant(new Error('No executions found for task')));
341
+ }
342
+ // Read logs
343
+ const chunk = await executionReadLog(storage, repoPath, execution.taskHash, execution.inputsHash, stream, { offset, limit });
344
+ return sendSuccess(LogChunkType, {
345
+ data: chunk.data,
346
+ offset: BigInt(chunk.offset),
347
+ size: BigInt(chunk.size),
348
+ totalSize: BigInt(chunk.totalSize),
349
+ complete: chunk.complete,
350
+ });
351
+ }
352
+ catch (err) {
353
+ return sendError(LogChunkType, errorToVariant(err));
354
+ }
355
+ }
356
+ /**
357
+ * Get dataflow execution state (for polling).
358
+ *
359
+ * Returns the current execution state including events for progress tracking.
360
+ * Supports offset/limit for paginating events.
361
+ */
362
+ export function getDataflowExecution(repoPath, workspace, options = {}) {
363
+ const state = getExecutionState(repoPath, workspace, options);
364
+ if (!state) {
365
+ return sendError(DataflowExecutionStateType, variant('internal', {
366
+ message: 'No execution found for this workspace',
367
+ }));
368
+ }
369
+ return sendSuccess(DataflowExecutionStateType, state);
370
+ }
371
+ //# sourceMappingURL=dataflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataflow.js","sourceRoot":"","sources":["../../../src/handlers/dataflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import type { TreePath } from '@elaraai/e3-types';
6
+ import type { StorageBackend } from '@elaraai/e3-core';
7
+ /**
8
+ * List dataset fields at the given path.
9
+ */
10
+ export declare function listDatasets(storage: StorageBackend, repoPath: string, workspace: string, treePath: TreePath): Promise<Response>;
11
+ /**
12
+ * Get dataset value as raw BEAST2 bytes.
13
+ */
14
+ export declare function getDataset(storage: StorageBackend, repoPath: string, workspace: string, treePath: TreePath): Promise<Response>;
15
+ /**
16
+ * Set dataset value from raw BEAST2 bytes.
17
+ */
18
+ export declare function setDataset(storage: StorageBackend, repoPath: string, workspace: string, treePath: TreePath, body: Uint8Array): Promise<Response>;
19
+ /**
20
+ * List datasets recursively (flat list with paths).
21
+ */
22
+ export declare function listDatasetsRecursive(storage: StorageBackend, repoPath: string, workspace: string, treePath: TreePath): Promise<Response>;
23
+ //# sourceMappingURL=datasets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasets.d.ts","sourceRoot":"","sources":["../../../src/handlers/datasets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AASlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKvD;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,QAAQ,CAAC,CAOnB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,QAAQ,CAAC,CAyBnB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,QAAQ,CAAC,CAcnB;AAoCD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,QAAQ,CAAC,CAkBnB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import { NullType, ArrayType, StringType, decodeBeast2, none, toEastTypeValue, isVariant } from '@elaraai/east';
6
+ import { workspaceListTree, workspaceGetDatasetHash, workspaceSetDataset, workspaceGetTree, objectRead, } from '@elaraai/e3-core';
7
+ import { sendSuccess, sendError } from '../beast2.js';
8
+ import { errorToVariant } from '../errors.js';
9
+ import { DatasetListItemType } from '../types.js';
10
+ /**
11
+ * List dataset fields at the given path.
12
+ */
13
+ export async function listDatasets(storage, repoPath, workspace, treePath) {
14
+ try {
15
+ const fields = await workspaceListTree(storage, repoPath, workspace, treePath);
16
+ return sendSuccess(ArrayType(StringType), fields);
17
+ }
18
+ catch (err) {
19
+ return sendError(ArrayType(StringType), errorToVariant(err));
20
+ }
21
+ }
22
+ /**
23
+ * Get dataset value as raw BEAST2 bytes.
24
+ */
25
+ export async function getDataset(storage, repoPath, workspace, treePath) {
26
+ try {
27
+ if (treePath.length === 0) {
28
+ return sendError(NullType, errorToVariant(new Error('Path required for get')));
29
+ }
30
+ const { refType, hash } = await workspaceGetDatasetHash(storage, repoPath, workspace, treePath);
31
+ if (refType === 'unassigned') {
32
+ return sendError(NullType, errorToVariant(new Error('Dataset is unassigned (pending task output)')));
33
+ }
34
+ if (refType === 'null' || !hash) {
35
+ return sendError(NullType, errorToVariant(new Error('Dataset is null')));
36
+ }
37
+ // Return raw BEAST2 bytes directly from object store
38
+ const data = await objectRead(repoPath, hash);
39
+ return new Response(data, {
40
+ status: 200,
41
+ headers: { 'Content-Type': 'application/beast2' },
42
+ });
43
+ }
44
+ catch (err) {
45
+ return sendError(NullType, errorToVariant(err));
46
+ }
47
+ }
48
+ /**
49
+ * Set dataset value from raw BEAST2 bytes.
50
+ */
51
+ export async function setDataset(storage, repoPath, workspace, treePath, body) {
52
+ try {
53
+ if (treePath.length === 0) {
54
+ return sendError(NullType, errorToVariant(new Error('Path required for set')));
55
+ }
56
+ // Body is raw BEAST2 - decode to get type and value
57
+ const { type, value } = decodeBeast2(body);
58
+ await workspaceSetDataset(storage, repoPath, workspace, treePath, value, type);
59
+ return sendSuccess(NullType, null);
60
+ }
61
+ catch (err) {
62
+ return sendError(NullType, errorToVariant(err));
63
+ }
64
+ }
65
+ /**
66
+ * Flatten a tree of nodes into a list of dataset items.
67
+ */
68
+ function flattenTree(nodes, pathPrefix, result) {
69
+ for (const node of nodes) {
70
+ const path = pathPrefix ? `${pathPrefix}.${node.name}` : `.${node.name}`;
71
+ if (node.kind === 'dataset') {
72
+ // Leaf node - add to result
73
+ const datasetType = node.datasetType;
74
+ if (datasetType) {
75
+ // Convert EastType to EastTypeValue if needed
76
+ const typeValue = isVariant(datasetType)
77
+ ? datasetType
78
+ : toEastTypeValue(datasetType);
79
+ result.push({
80
+ path,
81
+ type: typeValue,
82
+ hash: none, // TODO: get hash from tree walk
83
+ size: none, // TODO: get size if needed
84
+ });
85
+ }
86
+ }
87
+ else if (node.kind === 'tree') {
88
+ // Branch node - recurse
89
+ flattenTree(node.children, path, result);
90
+ }
91
+ }
92
+ }
93
+ /**
94
+ * List datasets recursively (flat list with paths).
95
+ */
96
+ export async function listDatasetsRecursive(storage, repoPath, workspace, treePath) {
97
+ try {
98
+ // Get tree with types included
99
+ const nodes = await workspaceGetTree(storage, repoPath, workspace, treePath, {
100
+ includeTypes: true,
101
+ });
102
+ // Build path prefix from treePath
103
+ const pathPrefix = treePath.map(seg => seg.value).join('.');
104
+ // Flatten to list
105
+ const result = [];
106
+ flattenTree(nodes, pathPrefix ? `.${pathPrefix}` : '', result);
107
+ return sendSuccess(ArrayType(DatasetListItemType), result);
108
+ }
109
+ catch (err) {
110
+ return sendError(ArrayType(DatasetListItemType), errorToVariant(err));
111
+ }
112
+ }
113
+ //# sourceMappingURL=datasets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasets.js","sourceRoot":"","sources":["../../../src/handlers/datasets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ export { listRepos } from './repos.js';
6
+ export { getStatus, startGc, getGcStatus, startRepoDelete, getRepoDeleteStatus } from './repository.js';
7
+ export { listPackages, getPackage, importPackage, exportPackage, deletePackage, } from './packages.js';
8
+ export { listWorkspaces, createWorkspace, getWorkspace, getWorkspaceStatus, deleteWorkspace, deployWorkspace, exportWorkspace, } from './workspaces.js';
9
+ export { listDatasets, getDataset, setDataset, } from './datasets.js';
10
+ export { listTasks, getTask, } from './tasks.js';
11
+ export { startDataflow, executeDataflow, getDataflowStatus, getDataflowGraph, getTaskLogs, } from './dataflow.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAExG,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ export { listRepos } from './repos.js';
6
+ export { getStatus, startGc, getGcStatus, startRepoDelete, getRepoDeleteStatus } from './repository.js';
7
+ export { listPackages, getPackage, importPackage, exportPackage, deletePackage, } from './packages.js';
8
+ export { listWorkspaces, createWorkspace, getWorkspace, getWorkspaceStatus, deleteWorkspace, deployWorkspace, exportWorkspace, } from './workspaces.js';
9
+ export { listDatasets, getDataset, setDataset, } from './datasets.js';
10
+ export { listTasks, getTask, } from './tasks.js';
11
+ export { startDataflow, executeDataflow, getDataflowStatus, getDataflowGraph, getTaskLogs, } from './dataflow.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAExG,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,eAAe,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import type { StorageBackend } from '@elaraai/e3-core';
6
+ /**
7
+ * List all packages in the repository.
8
+ */
9
+ export declare function listPackages(storage: StorageBackend, repoPath: string): Promise<Response>;
10
+ /**
11
+ * Get package details.
12
+ */
13
+ export declare function getPackage(storage: StorageBackend, repoPath: string, name: string, version: string): Promise<Response>;
14
+ /**
15
+ * Import a package from a zip archive.
16
+ */
17
+ export declare function importPackage(storage: StorageBackend, repoPath: string, archive: Uint8Array): Promise<Response>;
18
+ /**
19
+ * Export a package as a zip archive.
20
+ */
21
+ export declare function exportPackage(storage: StorageBackend, repoPath: string, name: string, version: string): Promise<Response>;
22
+ /**
23
+ * Delete a package.
24
+ */
25
+ export declare function deletePackage(storage: StorageBackend, repoPath: string, name: string, version: string): Promise<Response>;
26
+ //# sourceMappingURL=packages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packages.d.ts","sourceRoot":"","sources":["../../../src/handlers/packages.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMvD;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,QAAQ,CAAC,CAWnB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,CAAC,CAOnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,QAAQ,CAAC,CAoBnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,CAAC,CAenB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,CAAC,CAOnB"}