@elaraai/e3-api-server 0.0.2-beta.4 → 0.0.2-beta.40

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 (123) hide show
  1. package/README.md +145 -30
  2. package/dist/src/async-operation-state.d.ts +37 -0
  3. package/dist/src/async-operation-state.d.ts.map +1 -0
  4. package/dist/src/async-operation-state.js +118 -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 +38 -8
  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 +8 -2
  30. package/dist/src/errors.js.map +1 -1
  31. package/dist/src/handlers/dataflow.d.ts +43 -0
  32. package/dist/src/handlers/dataflow.d.ts.map +1 -0
  33. package/dist/src/handlers/dataflow.js +363 -0
  34. package/dist/src/handlers/dataflow.js.map +1 -0
  35. package/dist/src/handlers/datasets.d.ts +38 -0
  36. package/dist/src/handlers/datasets.d.ts.map +1 -0
  37. package/dist/src/handlers/datasets.js +222 -0
  38. package/dist/src/handlers/datasets.js.map +1 -0
  39. package/dist/src/handlers/index.d.ts +11 -0
  40. package/dist/src/handlers/index.d.ts.map +1 -0
  41. package/dist/src/handlers/index.js +11 -0
  42. package/dist/src/handlers/index.js.map +1 -0
  43. package/dist/src/handlers/packages.d.ts +18 -0
  44. package/dist/src/handlers/packages.d.ts.map +1 -0
  45. package/dist/src/handlers/packages.js +51 -0
  46. package/dist/src/handlers/packages.js.map +1 -0
  47. package/dist/src/handlers/repository.d.ts +24 -0
  48. package/dist/src/handlers/repository.d.ts.map +1 -0
  49. package/dist/src/handlers/repository.js +79 -0
  50. package/dist/src/handlers/repository.js.map +1 -0
  51. package/dist/src/handlers/tasks.d.ts +18 -0
  52. package/dist/src/handlers/tasks.d.ts.map +1 -0
  53. package/dist/src/handlers/tasks.js +134 -0
  54. package/dist/src/handlers/tasks.js.map +1 -0
  55. package/dist/src/handlers/workspaces.d.ts +34 -0
  56. package/dist/src/handlers/workspaces.d.ts.map +1 -0
  57. package/dist/src/handlers/workspaces.js +225 -0
  58. package/dist/src/handlers/workspaces.js.map +1 -0
  59. package/dist/src/index.d.ts +3 -0
  60. package/dist/src/index.d.ts.map +1 -1
  61. package/dist/src/index.js +6 -0
  62. package/dist/src/index.js.map +1 -1
  63. package/dist/src/middleware/auth.d.ts +51 -0
  64. package/dist/src/middleware/auth.d.ts.map +1 -0
  65. package/dist/src/middleware/auth.js +158 -0
  66. package/dist/src/middleware/auth.js.map +1 -0
  67. package/dist/src/orchestrator-manager.d.ts +45 -0
  68. package/dist/src/orchestrator-manager.d.ts.map +1 -0
  69. package/dist/src/orchestrator-manager.js +150 -0
  70. package/dist/src/orchestrator-manager.js.map +1 -0
  71. package/dist/src/routes/data.d.ts +21 -0
  72. package/dist/src/routes/data.d.ts.map +1 -0
  73. package/dist/src/routes/data.js +125 -0
  74. package/dist/src/routes/data.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 +59 -83
  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 +54 -287
  82. package/dist/src/routes/executions.js.map +1 -1
  83. package/dist/src/routes/index.d.ts +15 -0
  84. package/dist/src/routes/index.d.ts.map +1 -0
  85. package/dist/src/routes/index.js +15 -0
  86. package/dist/src/routes/index.js.map +1 -0
  87. package/dist/src/routes/objects.d.ts +8 -0
  88. package/dist/src/routes/objects.d.ts.map +1 -0
  89. package/dist/src/routes/objects.js +38 -0
  90. package/dist/src/routes/objects.js.map +1 -0
  91. package/dist/src/routes/package-transfer.d.ts +23 -0
  92. package/dist/src/routes/package-transfer.d.ts.map +1 -0
  93. package/dist/src/routes/package-transfer.js +168 -0
  94. package/dist/src/routes/package-transfer.js.map +1 -0
  95. package/dist/src/routes/packages.d.ts +2 -1
  96. package/dist/src/routes/packages.d.ts.map +1 -1
  97. package/dist/src/routes/packages.js +18 -109
  98. package/dist/src/routes/packages.js.map +1 -1
  99. package/dist/src/routes/repository.d.ts +2 -1
  100. package/dist/src/routes/repository.d.ts.map +1 -1
  101. package/dist/src/routes/repository.js +19 -54
  102. package/dist/src/routes/repository.js.map +1 -1
  103. package/dist/src/routes/tasks.d.ts +2 -1
  104. package/dist/src/routes/tasks.d.ts.map +1 -1
  105. package/dist/src/routes/tasks.js +22 -46
  106. package/dist/src/routes/tasks.js.map +1 -1
  107. package/dist/src/routes/transfer.d.ts +19 -0
  108. package/dist/src/routes/transfer.d.ts.map +1 -0
  109. package/dist/src/routes/transfer.js +124 -0
  110. package/dist/src/routes/transfer.js.map +1 -0
  111. package/dist/src/routes/workspaces.d.ts +2 -1
  112. package/dist/src/routes/workspaces.d.ts.map +1 -1
  113. package/dist/src/routes/workspaces.js +45 -116
  114. package/dist/src/routes/workspaces.js.map +1 -1
  115. package/dist/src/server.d.ts +24 -3
  116. package/dist/src/server.d.ts.map +1 -1
  117. package/dist/src/server.js +266 -19
  118. package/dist/src/server.js.map +1 -1
  119. package/dist/src/types.d.ts +1385 -731
  120. package/dist/src/types.d.ts.map +1 -1
  121. package/dist/src/types.js +238 -2
  122. package/dist/src/types.js.map +1 -1
  123. package/package.json +16 -4
@@ -3,300 +3,67 @@
3
3
  * Licensed under BSL 1.1. See LICENSE for details.
4
4
  */
5
5
  import { Hono } from 'hono';
6
- import { NullType, some, none, variant } from '@elaraai/east';
7
- import { dataflowStart, dataflowExecute, dataflowGetGraph, workspaceStatus, workspaceGetTaskHash, workspaceGetTask, workspaceGetDatasetHash, executionListForTask, executionReadLog, inputsHash, acquireWorkspaceLock, } from '@elaraai/e3-core';
8
- import { decodeBody, sendSuccess, sendError } from '../beast2.js';
9
- import { errorToVariant } from '../errors.js';
10
- import { DataflowRequestType, WorkspaceStatusResultType, DataflowGraphType, LogChunkType, DataflowResultType, } from '../types.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
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
- export function createExecutionRoutes(repoPath) {
6
+ import { startDataflow, getDataflowStatus, getDataflowGraph, getTaskLogs, getDataflowExecution, cancelDataflow, } from '../handlers/dataflow.js';
7
+ import { decodeBody } from '../beast2.js';
8
+ import { DataflowRequestType } from '../types.js';
9
+ export function createExecutionRoutes(storage, getRepoPath) {
161
10
  const app = new Hono();
162
- // POST /api/workspaces/:ws/start - Start dataflow execution (non-blocking)
163
- app.post('/start', async (c) => {
164
- const workspace = c.req.param('ws');
165
- if (!workspace) {
166
- return sendError(c, NullType, errorToVariant(new Error('Missing workspace parameter')));
167
- }
168
- try {
169
- const body = await decodeBody(c, DataflowRequestType);
170
- // Acquire lock first - this will throw WorkspaceLockError if already locked
171
- const lock = await acquireWorkspaceLock(repoPath, workspace);
172
- // Spawn dataflow execution in background
173
- const concurrency = body.concurrency.type === 'some' ? Number(body.concurrency.value) : 4;
174
- const filter = body.filter.type === 'some' ? body.filter.value : undefined;
175
- // Start execution without awaiting - it runs in background
176
- dataflowStart(repoPath, workspace, {
177
- concurrency,
178
- force: body.force,
179
- filter,
180
- lock,
181
- }).catch((err) => {
182
- // Log error but don't throw - execution is in background
183
- console.error(`Dataflow execution error for workspace ${workspace}:`, err);
184
- });
185
- // Return immediately with 202 Accepted
186
- c.status(202);
187
- return sendSuccess(c, NullType, null);
188
- }
189
- catch (err) {
190
- return sendError(c, NullType, errorToVariant(err));
191
- }
192
- });
193
- // POST /api/workspaces/:ws/execute - Execute dataflow (blocking)
194
- app.post('/execute', async (c) => {
195
- const workspace = c.req.param('ws');
196
- if (!workspace) {
197
- return sendError(c, DataflowResultType, errorToVariant(new Error('Missing workspace parameter')));
198
- }
199
- try {
200
- const body = await decodeBody(c, DataflowRequestType);
201
- const concurrency = body.concurrency.type === 'some' ? Number(body.concurrency.value) : 4;
202
- const filter = body.filter.type === 'some' ? body.filter.value : undefined;
203
- const result = await dataflowExecute(repoPath, workspace, {
204
- concurrency,
205
- force: body.force,
206
- filter,
207
- });
208
- return sendSuccess(c, DataflowResultType, convertDataflowResult(result));
209
- }
210
- catch (err) {
211
- return sendError(c, DataflowResultType, errorToVariant(err));
212
- }
11
+ // POST /api/repos/:repo/workspaces/:ws/dataflow - Start dataflow execution (non-blocking)
12
+ app.post('/', async (c) => {
13
+ const repo = c.req.param('repo');
14
+ const repoPath = getRepoPath(repo);
15
+ const ws = c.req.param('ws');
16
+ const body = await decodeBody(c, DataflowRequestType);
17
+ const concurrency = body.concurrency.type === 'some' ? Number(body.concurrency.value) : 4;
18
+ const filter = body.filter.type === 'some' ? body.filter.value : undefined;
19
+ return startDataflow(storage, repoPath, ws, {
20
+ concurrency,
21
+ force: body.force,
22
+ filter,
23
+ });
213
24
  });
214
- // GET /api/workspaces/:ws/status - Get workspace status (for polling)
215
- app.get('/status', async (c) => {
216
- const workspace = c.req.param('ws');
217
- if (!workspace) {
218
- return sendError(c, WorkspaceStatusResultType, errorToVariant(new Error('Missing workspace parameter')));
219
- }
220
- try {
221
- const result = await workspaceStatus(repoPath, workspace);
222
- return sendSuccess(c, WorkspaceStatusResultType, convertWorkspaceStatus(result));
223
- }
224
- catch (err) {
225
- return sendError(c, WorkspaceStatusResultType, errorToVariant(err));
226
- }
25
+ // GET /api/repos/:repo/workspaces/:ws/dataflow - Get workspace status (for polling)
26
+ app.get('/', async (c) => {
27
+ const repo = c.req.param('repo');
28
+ const repoPath = getRepoPath(repo);
29
+ const ws = c.req.param('ws');
30
+ return getDataflowStatus(storage, repoPath, ws);
227
31
  });
228
- // GET /api/workspaces/:ws/graph - Get dependency graph
32
+ // GET /api/repos/:repo/workspaces/:ws/dataflow/graph - Get dependency graph
229
33
  app.get('/graph', async (c) => {
230
- const workspace = c.req.param('ws');
231
- if (!workspace) {
232
- return sendError(c, DataflowGraphType, errorToVariant(new Error('Missing workspace parameter')));
233
- }
234
- try {
235
- const graph = await dataflowGetGraph(repoPath, workspace);
236
- return sendSuccess(c, DataflowGraphType, {
237
- tasks: graph.tasks.map((t) => ({
238
- name: t.name,
239
- hash: t.hash,
240
- inputs: t.inputs,
241
- output: t.output,
242
- dependsOn: t.dependsOn,
243
- })),
244
- });
245
- }
246
- catch (err) {
247
- return sendError(c, DataflowGraphType, errorToVariant(err));
248
- }
34
+ const repo = c.req.param('repo');
35
+ const repoPath = getRepoPath(repo);
36
+ const ws = c.req.param('ws');
37
+ return getDataflowGraph(storage, repoPath, ws);
249
38
  });
250
- // GET /api/workspaces/:ws/logs/:task - Get task logs
39
+ // GET /api/repos/:repo/workspaces/:ws/dataflow/logs/:task - Get task logs
251
40
  app.get('/logs/:task', async (c) => {
252
- const workspace = c.req.param('ws');
41
+ const repo = c.req.param('repo');
42
+ const repoPath = getRepoPath(repo);
43
+ const ws = c.req.param('ws');
253
44
  const taskName = c.req.param('task');
254
- if (!workspace) {
255
- return sendError(c, LogChunkType, errorToVariant(new Error('Missing workspace parameter')));
256
- }
257
- if (!taskName) {
258
- return sendError(c, LogChunkType, errorToVariant(new Error('Missing task parameter')));
259
- }
260
- try {
261
- // Get query params
262
- const stream = c.req.query('stream') || 'stdout';
263
- const offset = parseInt(c.req.query('offset') || '0', 10);
264
- const limit = parseInt(c.req.query('limit') || '65536', 10);
265
- // Get task hash and current input hashes
266
- const taskHash = await workspaceGetTaskHash(repoPath, workspace, taskName);
267
- const task = await workspaceGetTask(repoPath, workspace, taskName);
268
- // Get current input hashes
269
- const currentInputHashes = [];
270
- for (const inputPath of task.inputs) {
271
- const { refType, hash } = await workspaceGetDatasetHash(repoPath, workspace, inputPath);
272
- if (refType !== 'value' || hash === null) {
273
- return sendError(c, LogChunkType, errorToVariant(new Error('Task inputs not assigned')));
274
- }
275
- currentInputHashes.push(hash);
276
- }
277
- const inHash = inputsHash(currentInputHashes);
278
- // Check if execution exists, fall back to most recent
279
- const executions = await executionListForTask(repoPath, taskHash);
280
- let execInHash = inHash;
281
- if (!executions.includes(inHash) && executions.length > 0) {
282
- execInHash = executions[0];
283
- }
284
- else if (executions.length === 0) {
285
- return sendError(c, LogChunkType, errorToVariant(new Error('No executions found for task')));
286
- }
287
- // Read logs
288
- const chunk = await executionReadLog(repoPath, taskHash, execInHash, stream, { offset, limit });
289
- return sendSuccess(c, LogChunkType, {
290
- data: chunk.data,
291
- offset: BigInt(chunk.offset),
292
- size: BigInt(chunk.size),
293
- totalSize: BigInt(chunk.totalSize),
294
- complete: chunk.complete,
295
- });
296
- }
297
- catch (err) {
298
- return sendError(c, LogChunkType, errorToVariant(err));
299
- }
45
+ // Get query params
46
+ const stream = c.req.query('stream') || 'stdout';
47
+ const offset = parseInt(c.req.query('offset') || '0', 10);
48
+ const limit = parseInt(c.req.query('limit') || '65536', 10);
49
+ return getTaskLogs(storage, repoPath, ws, taskName, stream, offset, limit);
50
+ });
51
+ // GET /api/repos/:repo/workspaces/:ws/dataflow/execution - Get execution state (for polling)
52
+ app.get('/execution', (c) => {
53
+ const repo = c.req.param('repo');
54
+ const repoPath = getRepoPath(repo);
55
+ const ws = c.req.param('ws');
56
+ // Get query params for pagination
57
+ const offset = c.req.query('offset') ? parseInt(c.req.query('offset'), 10) : undefined;
58
+ const limit = c.req.query('limit') ? parseInt(c.req.query('limit'), 10) : undefined;
59
+ return getDataflowExecution(repoPath, ws, { offset, limit });
60
+ });
61
+ // POST /api/repos/:repo/workspaces/:ws/dataflow/cancel - Cancel running execution
62
+ app.post('/cancel', async (c) => {
63
+ const repo = c.req.param('repo');
64
+ const repoPath = getRepoPath(repo);
65
+ const ws = c.req.param('ws');
66
+ return cancelDataflow(repoPath, ws);
300
67
  });
301
68
  return app;
302
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"executions.js","sourceRoot":"","sources":["../../../src/routes/executions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executions.js","sourceRoot":"","sources":["../../../src/routes/executions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ export { createRepositoryRoutes } from './repository.js';
6
+ export { createPackageRoutes } from './packages.js';
7
+ export { createWorkspaceRoutes } from './workspaces.js';
8
+ export { createDatasetRoutes } from './datasets.js';
9
+ export { createTaskRoutes } from './tasks.js';
10
+ export { createExecutionRoutes } from './executions.js';
11
+ export { createObjectRoutes } from './objects.js';
12
+ export { createTransferRoutes } from './transfer.js';
13
+ export { createPackageTransferRoutes } from './package-transfer.js';
14
+ export { createDataEndpoints } from './data.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ export { createRepositoryRoutes } from './repository.js';
6
+ export { createPackageRoutes } from './packages.js';
7
+ export { createWorkspaceRoutes } from './workspaces.js';
8
+ export { createDatasetRoutes } from './datasets.js';
9
+ export { createTaskRoutes } from './tasks.js';
10
+ export { createExecutionRoutes } from './executions.js';
11
+ export { createObjectRoutes } from './objects.js';
12
+ export { createTransferRoutes } from './transfer.js';
13
+ export { createPackageTransferRoutes } from './package-transfer.js';
14
+ export { createDataEndpoints } from './data.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import { Hono } from 'hono';
6
+ import { type StorageBackend } from '@elaraai/e3-core';
7
+ export declare function createObjectRoutes(storage: StorageBackend, getRepoPath: (repo: string) => string): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
8
+ //# sourceMappingURL=objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../src/routes/objects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAA4C,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGjG,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,8EAgCtC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import { Hono } from 'hono';
6
+ import { NullType, variant } from '@elaraai/east';
7
+ import { BEAST2_CONTENT_TYPE, ObjectNotFoundError } from '@elaraai/e3-core';
8
+ import { sendError } from '../beast2.js';
9
+ export function createObjectRoutes(storage, getRepoPath) {
10
+ const app = new Hono();
11
+ // GET /api/repos/:repo/objects/:hash — Read object by hash
12
+ app.get('/:hash', async (c) => {
13
+ const repo = c.req.param('repo');
14
+ const repoPath = getRepoPath(repo);
15
+ const hash = c.req.param('hash');
16
+ if (!/^[a-f0-9]{64}$/.test(hash)) {
17
+ return sendError(NullType, variant('internal', { message: `invalid hash format: ${hash}` }));
18
+ }
19
+ try {
20
+ const data = await storage.objects.read(repoPath, hash);
21
+ return new Response(data, {
22
+ headers: {
23
+ 'Content-Type': BEAST2_CONTENT_TYPE,
24
+ 'Content-Length': String(data.byteLength),
25
+ 'X-Content-SHA256': hash,
26
+ },
27
+ });
28
+ }
29
+ catch (err) {
30
+ if (err instanceof ObjectNotFoundError) {
31
+ return sendError(NullType, variant('object_not_found', { hash }));
32
+ }
33
+ throw err;
34
+ }
35
+ });
36
+ return app;
37
+ }
38
+ //# sourceMappingURL=objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/routes/objects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAuB,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,kBAAkB,CAChC,OAAuB,EACvB,WAAqC;IAErC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,2DAA2D;IAC3D,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC;QAElC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,wBAAwB,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACxD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACxB,OAAO,EAAE;oBACP,cAAc,EAAE,mBAAmB;oBACnC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACzC,kBAAkB,EAAE,IAAI;iBACzB;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;gBACvC,OAAO,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -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 { Hono } from 'hono';
6
+ import type { StorageBackend, TransferBackend } from '@elaraai/e3-core';
7
+ /**
8
+ * Create package transfer routes.
9
+ *
10
+ * Returns two Hono apps:
11
+ * - `repoApi`: Authenticated routes at repo level — mount at /api/repos/:repo
12
+ * (POST /import, POST /import/:id, GET /import/:id, GET /export/:id)
13
+ * - `pkgApi`: Authenticated routes at package level — mount at /api/repos/:repo/packages
14
+ * (POST /:name/:version/export)
15
+ *
16
+ * Unauthenticated data routes (upload/download bytes) are handled by the
17
+ * generic data endpoints in `data.ts`.
18
+ */
19
+ export declare function createPackageTransferRoutes(storage: StorageBackend, getRepoPath: (repo: string) => string, transferBackend: TransferBackend): {
20
+ repoApi: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
21
+ pkgApi: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
22
+ };
23
+ //# sourceMappingURL=package-transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-transfer.d.ts","sourceRoot":"","sources":["../../../src/routes/package-transfer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAW5B,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAaxE;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACrC,eAAe,EAAE,eAAe;;;EAwKjC"}