@elaraai/e3-api-server 1.0.79 → 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.
- package/README.md +83 -19
- package/dist/src/beast2.js +1 -1
- package/dist/src/beast2.js.map +1 -1
- package/dist/src/cli.js +13 -0
- package/dist/src/cli.js.map +1 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +8 -1
- package/dist/src/errors.js.map +1 -1
- package/dist/src/handlers/dataflow.d.ts +58 -11
- package/dist/src/handlers/dataflow.d.ts.map +1 -1
- package/dist/src/handlers/dataflow.js +120 -48
- package/dist/src/handlers/dataflow.js.map +1 -1
- package/dist/src/handlers/dataflow.spec.d.ts +6 -0
- package/dist/src/handlers/dataflow.spec.d.ts.map +1 -0
- package/dist/src/handlers/dataflow.spec.js +106 -0
- package/dist/src/handlers/dataflow.spec.js.map +1 -0
- package/dist/src/handlers/datasets.d.ts +60 -34
- package/dist/src/handlers/datasets.d.ts.map +1 -1
- package/dist/src/handlers/datasets.js +452 -306
- package/dist/src/handlers/datasets.js.map +1 -1
- package/dist/src/handlers/datasets.spec.js +338 -119
- package/dist/src/handlers/datasets.spec.js.map +1 -1
- package/dist/src/handlers/functions.d.ts.map +1 -1
- package/dist/src/handlers/functions.js +10 -8
- package/dist/src/handlers/functions.js.map +1 -1
- package/dist/src/handlers/functions.spec.js +2 -2
- package/dist/src/handlers/functions.spec.js.map +1 -1
- package/dist/src/handlers/index.d.ts +2 -2
- package/dist/src/handlers/index.d.ts.map +1 -1
- package/dist/src/handlers/index.js +2 -2
- package/dist/src/handlers/index.js.map +1 -1
- package/dist/src/handlers/records.d.ts.map +1 -1
- package/dist/src/handlers/records.js +15 -12
- package/dist/src/handlers/records.js.map +1 -1
- package/dist/src/handlers/records.spec.js +9 -5
- package/dist/src/handlers/records.spec.js.map +1 -1
- package/dist/src/handlers/repository.d.ts +59 -10
- package/dist/src/handlers/repository.d.ts.map +1 -1
- package/dist/src/handlers/repository.js +147 -40
- package/dist/src/handlers/repository.js.map +1 -1
- package/dist/src/handlers/tasks.d.ts +2 -1
- package/dist/src/handlers/tasks.d.ts.map +1 -1
- package/dist/src/handlers/tasks.js +31 -8
- package/dist/src/handlers/tasks.js.map +1 -1
- package/dist/src/handlers/tasks.spec.d.ts +6 -0
- package/dist/src/handlers/tasks.spec.d.ts.map +1 -0
- package/dist/src/handlers/tasks.spec.js +64 -0
- package/dist/src/handlers/tasks.spec.js.map +1 -0
- package/dist/src/handlers/workspaces.d.ts +44 -6
- package/dist/src/handlers/workspaces.d.ts.map +1 -1
- package/dist/src/handlers/workspaces.js +74 -40
- package/dist/src/handlers/workspaces.js.map +1 -1
- package/dist/src/handlers/workspaces.spec.d.ts +6 -0
- package/dist/src/handlers/workspaces.spec.d.ts.map +1 -0
- package/dist/src/handlers/workspaces.spec.js +164 -0
- package/dist/src/handlers/workspaces.spec.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/local-dataflow.d.ts +14 -0
- package/dist/src/local-dataflow.d.ts.map +1 -0
- package/dist/src/local-dataflow.js +41 -0
- package/dist/src/local-dataflow.js.map +1 -0
- package/dist/src/middleware/repository.d.ts +39 -0
- package/dist/src/middleware/repository.d.ts.map +1 -0
- package/dist/src/middleware/repository.js +77 -0
- package/dist/src/middleware/repository.js.map +1 -0
- package/dist/src/routes/data.d.ts +2 -2
- package/dist/src/routes/data.d.ts.map +1 -1
- package/dist/src/routes/data.js +22 -45
- package/dist/src/routes/data.js.map +1 -1
- package/dist/src/routes/datasets.d.ts +0 -3
- package/dist/src/routes/datasets.d.ts.map +1 -1
- package/dist/src/routes/datasets.js +40 -8
- package/dist/src/routes/datasets.js.map +1 -1
- package/dist/src/routes/executions.d.ts +37 -2
- package/dist/src/routes/executions.d.ts.map +1 -1
- package/dist/src/routes/executions.js +21 -12
- package/dist/src/routes/executions.js.map +1 -1
- package/dist/src/routes/index.d.ts +2 -1
- package/dist/src/routes/index.d.ts.map +1 -1
- package/dist/src/routes/index.js +1 -0
- package/dist/src/routes/index.js.map +1 -1
- package/dist/src/routes/objects.d.ts +16 -2
- package/dist/src/routes/objects.d.ts.map +1 -1
- package/dist/src/routes/objects.js +34 -3
- package/dist/src/routes/objects.js.map +1 -1
- package/dist/src/routes/repositories.d.ts +26 -0
- package/dist/src/routes/repositories.d.ts.map +1 -0
- package/dist/src/routes/repositories.js +58 -0
- package/dist/src/routes/repositories.js.map +1 -0
- package/dist/src/routes/repositories.spec.d.ts +6 -0
- package/dist/src/routes/repositories.spec.d.ts.map +1 -0
- package/dist/src/routes/repositories.spec.js +77 -0
- package/dist/src/routes/repositories.spec.js.map +1 -0
- package/dist/src/routes/repository.d.ts +12 -2
- package/dist/src/routes/repository.d.ts.map +1 -1
- package/dist/src/routes/repository.js +24 -9
- package/dist/src/routes/repository.js.map +1 -1
- package/dist/src/routes/transfer.d.ts +11 -9
- package/dist/src/routes/transfer.d.ts.map +1 -1
- package/dist/src/routes/transfer.js +90 -115
- package/dist/src/routes/transfer.js.map +1 -1
- package/dist/src/routes/workspaces.d.ts +14 -1
- package/dist/src/routes/workspaces.d.ts.map +1 -1
- package/dist/src/routes/workspaces.js +57 -46
- package/dist/src/routes/workspaces.js.map +1 -1
- package/dist/src/server.d.ts +18 -6
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +55 -182
- package/dist/src/server.js.map +1 -1
- package/dist/src/server.spec.d.ts +6 -0
- package/dist/src/server.spec.d.ts.map +1 -0
- package/dist/src/server.spec.js +59 -0
- package/dist/src/server.spec.js.map +1 -0
- package/dist/src/types.d.ts +200 -16
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +5 -2
- package/dist/src/types.js.map +1 -1
- package/package.json +5 -5
- package/dist/src/async-operation-state.d.ts +0 -37
- package/dist/src/async-operation-state.d.ts.map +0 -1
- package/dist/src/async-operation-state.js +0 -118
- package/dist/src/async-operation-state.js.map +0 -1
- package/dist/src/orchestrator-manager.d.ts +0 -45
- package/dist/src/orchestrator-manager.d.ts.map +0 -1
- package/dist/src/orchestrator-manager.js +0 -150
- package/dist/src/orchestrator-manager.js.map +0 -1
package/dist/src/server.js
CHANGED
|
@@ -6,12 +6,12 @@ import * as path from 'node:path';
|
|
|
6
6
|
import { Hono } from 'hono';
|
|
7
7
|
import { cors } from 'hono/cors';
|
|
8
8
|
import { serve } from '@hono/node-server';
|
|
9
|
-
import { LocalStorage, LocalTaskRunner,
|
|
9
|
+
import { Budget, DOOR_FRAME_WORKERS, LocalStorage, LocalTaskRunner, InMemoryTransferBackend, resolveBudget, checkName, repositoryOpen, } from '@elaraai/e3-core';
|
|
10
10
|
import { createAuthMiddleware } from './middleware/auth.js';
|
|
11
|
+
import { createRepositoryGate, createSingleRepositoryGate } from './middleware/repository.js';
|
|
11
12
|
import { createOidcProvider } from './auth/index.js';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { errorToVariant } from './errors.js';
|
|
13
|
+
import { configureFramePool } from '@elaraai/east';
|
|
14
|
+
import { createRepositoriesRoutes, createSingleRepositoryRoutes } from './routes/repositories.js';
|
|
15
15
|
import { createPackageRoutes } from './routes/packages.js';
|
|
16
16
|
import { createWorkspaceRoutes } from './routes/workspaces.js';
|
|
17
17
|
import { createDatasetRoutes } from './routes/datasets.js';
|
|
@@ -24,6 +24,7 @@ import { createPackageTransferRoutes } from './routes/package-transfer.js';
|
|
|
24
24
|
import { createDataEndpoints } from './routes/data.js';
|
|
25
25
|
import { createPackageFunctionRoutes, createWorkspaceFunctionRoutes, createOneShotRoutes } from './routes/functions.js';
|
|
26
26
|
import { createWorkspaceRecordRoutes } from './routes/records.js';
|
|
27
|
+
import { localDataflow } from './local-dataflow.js';
|
|
27
28
|
/**
|
|
28
29
|
* Create an e3 API server.
|
|
29
30
|
*
|
|
@@ -36,9 +37,15 @@ import { createWorkspaceRecordRoutes } from './routes/records.js';
|
|
|
36
37
|
*
|
|
37
38
|
* @param config - Server configuration
|
|
38
39
|
* @returns Server instance
|
|
40
|
+
* @throws {RangeError} When the budget's settings do not resolve
|
|
41
|
+
* @throws {RepoNotFoundError} When the single repository is none
|
|
42
|
+
* @throws {RepoLayoutError} When this e3 cannot open the single repository
|
|
39
43
|
*/
|
|
40
44
|
export async function createServer(config) {
|
|
41
45
|
const { reposDir, singleRepoPath, port = 3000, host = 'localhost', cors: enableCors = false, auth, oidc, pageByteBudget, transferPartBytes, transferCommitWaitMs, } = config;
|
|
46
|
+
const budget = config.budget instanceof Budget ? config.budget : resolveBudget(config.budget);
|
|
47
|
+
// The store door frames on e3's own pool, whose workers take cores too.
|
|
48
|
+
configureFramePool({ workers: Math.min(DOOR_FRAME_WORKERS, budget.cores) });
|
|
42
49
|
// Validate config: exactly one of reposDir or singleRepoPath must be specified
|
|
43
50
|
if (reposDir && singleRepoPath) {
|
|
44
51
|
throw new Error('Cannot specify both reposDir and singleRepoPath');
|
|
@@ -50,6 +57,12 @@ export async function createServer(config) {
|
|
|
50
57
|
// Single storage instance shared across all requests
|
|
51
58
|
// Pass reposDir for multi-repo mode to enable storage.repos.* operations
|
|
52
59
|
const storage = new LocalStorage(isSingleRepoMode ? undefined : reposDir);
|
|
60
|
+
// The one repository is opened before anything is served, as the CLI opens
|
|
61
|
+
// one: refused when this e3 cannot read it, and upgraded in place when an
|
|
62
|
+
// older release wrote it. Several are each opened by every request to them
|
|
63
|
+
// (the middleware below).
|
|
64
|
+
if (isSingleRepoMode)
|
|
65
|
+
await repositoryOpen(storage, singleRepoPath);
|
|
53
66
|
// Helper to compute repo path from repo name
|
|
54
67
|
// In single-repo mode, middleware validates 'default' before routes are called
|
|
55
68
|
const getRepoPath = (repoName) => {
|
|
@@ -57,6 +70,9 @@ export async function createServer(config) {
|
|
|
57
70
|
// Middleware ensures repoName === 'default' before we get here
|
|
58
71
|
return singleRepoPath;
|
|
59
72
|
}
|
|
73
|
+
// A name from the URL becomes a directory under reposDir, never a path out
|
|
74
|
+
// of it.
|
|
75
|
+
checkName('repository', repoName);
|
|
60
76
|
return path.join(reposDir, repoName);
|
|
61
77
|
};
|
|
62
78
|
const app = new Hono();
|
|
@@ -86,11 +102,26 @@ export async function createServer(config) {
|
|
|
86
102
|
// Mount OIDC routes at root (/.well-known/*, /oauth2/*, /device)
|
|
87
103
|
app.route('/', oidcProvider.routes);
|
|
88
104
|
}
|
|
89
|
-
//
|
|
105
|
+
// Per-repo task runner for every route that runs user East: dataflows,
|
|
106
|
+
// function and one-shot calls, record mutations, and a deploy job's
|
|
107
|
+
// migrations and index builds, all on the server's one budget (cached — the
|
|
108
|
+
// runner is stateless apart from its repo anchor and the budget)
|
|
109
|
+
const runners = new Map();
|
|
110
|
+
const getRunner = (repoPath) => {
|
|
111
|
+
let runner = runners.get(repoPath);
|
|
112
|
+
if (!runner) {
|
|
113
|
+
runner = new LocalTaskRunner(repoPath, budget);
|
|
114
|
+
runners.set(repoPath, runner);
|
|
115
|
+
}
|
|
116
|
+
return runner;
|
|
117
|
+
};
|
|
118
|
+
// Transfer backend for presigned URL object transfer, and the jobs that
|
|
119
|
+
// outlast a request, which it runs in this process
|
|
90
120
|
const transferBackend = new InMemoryTransferBackend({
|
|
91
121
|
baseUrl: '',
|
|
92
122
|
storage,
|
|
93
123
|
getRepoPath,
|
|
124
|
+
getRunner,
|
|
94
125
|
...(transferPartBytes !== undefined && { partBytes: transferPartBytes }),
|
|
95
126
|
});
|
|
96
127
|
// Data routes (no auth — capability-URL pattern via UUID)
|
|
@@ -120,193 +151,30 @@ export async function createServer(config) {
|
|
|
120
151
|
});
|
|
121
152
|
app.use('/api/repos/:repo/*', authMiddleware);
|
|
122
153
|
}
|
|
123
|
-
//
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
// cannot know the BEAST2 success type expected by the handler.
|
|
154
|
+
// The repositories the server serves, and the gate every request to one
|
|
155
|
+
// passes, mounted after the auth middleware and ahead of the repository
|
|
156
|
+
// routes
|
|
127
157
|
if (isSingleRepoMode) {
|
|
128
|
-
|
|
129
|
-
app.
|
|
130
|
-
return c.json({
|
|
131
|
-
error: 'method_not_allowed',
|
|
132
|
-
message: 'Repository creation is disabled in single-repo mode'
|
|
133
|
-
}, 405);
|
|
134
|
-
});
|
|
135
|
-
app.delete('/api/repos/:repo', (c) => {
|
|
136
|
-
const repo = c.req.param('repo');
|
|
137
|
-
if (repo === 'default') {
|
|
138
|
-
return c.json({
|
|
139
|
-
error: 'method_not_allowed',
|
|
140
|
-
message: 'Repository deletion is disabled in single-repo mode'
|
|
141
|
-
}, 405);
|
|
142
|
-
}
|
|
143
|
-
return c.json({ error: 'not_found', message: `Repository '${repo}' not found` }, 404);
|
|
144
|
-
});
|
|
145
|
-
// Validate repo name for all sub-routes
|
|
146
|
-
app.use('/api/repos/:repo/*', async (c, next) => {
|
|
147
|
-
const repo = c.req.param('repo');
|
|
148
|
-
if (repo !== 'default') {
|
|
149
|
-
return c.json({ error: 'not_found', message: `Repository '${repo}' not found` }, 404);
|
|
150
|
-
}
|
|
151
|
-
await next();
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
// Validate repository exists and is accessible before processing requests (multi-repo mode only)
|
|
155
|
-
// In single-repo mode, this is handled by the middleware above
|
|
156
|
-
// Skip validation for PUT/DELETE on /api/repos/:repo (repo create/remove)
|
|
157
|
-
// Skip validation for /api/repos/:repo/delete/* (repo deletion status - repo may already be deleted)
|
|
158
|
-
// Uses JSON error responses with HTTP 404 because middleware cannot know
|
|
159
|
-
// the BEAST2 success type expected by the handler.
|
|
160
|
-
if (!isSingleRepoMode) {
|
|
161
|
-
app.use('/api/repos/:repo/*', async (c, next) => {
|
|
162
|
-
// Skip validation for repo create/remove operations at the repo level
|
|
163
|
-
// These operate on repos that may not exist yet (PUT) or are being deleted (DELETE)
|
|
164
|
-
const method = c.req.method;
|
|
165
|
-
const reqPath = c.req.path;
|
|
166
|
-
// Check if this is the base repo path (no subpath after repo name)
|
|
167
|
-
const repoPathMatch = reqPath.match(/^\/api\/repos\/[^/]+$/);
|
|
168
|
-
if (repoPathMatch && (method === 'PUT' || method === 'DELETE')) {
|
|
169
|
-
await next();
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
// Skip validation for delete status endpoint (repo may already be deleted)
|
|
173
|
-
const deleteStatusMatch = reqPath.match(/^\/api\/repos\/[^/]+\/delete\/[^/]+$/);
|
|
174
|
-
if (deleteStatusMatch) {
|
|
175
|
-
await next();
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
const repo = c.req.param('repo');
|
|
179
|
-
// Check repo metadata for status
|
|
180
|
-
const metadata = await storage.repos.getMetadata(repo);
|
|
181
|
-
if (!metadata) {
|
|
182
|
-
return c.json({ error: 'not_found', message: `Repository '${repo}' not found` }, 404);
|
|
183
|
-
}
|
|
184
|
-
// If repo is in 'deleting' state, treat as not found for most operations
|
|
185
|
-
// Exception: status endpoint shows 'deleting' state (but we still check repo exists above)
|
|
186
|
-
const statusMatch = reqPath.match(/^\/api\/repos\/[^/]+\/status$/);
|
|
187
|
-
if (metadata.status === 'deleting' && !statusMatch) {
|
|
188
|
-
return c.json({ error: 'not_found', message: `Repository '${repo}' not found` }, 404);
|
|
189
|
-
}
|
|
190
|
-
// Also validate the repo structure (for backwards compat with repos without metadata)
|
|
191
|
-
const repoPath = getRepoPath(repo);
|
|
192
|
-
try {
|
|
193
|
-
await storage.validateRepository(repoPath);
|
|
194
|
-
}
|
|
195
|
-
catch (err) {
|
|
196
|
-
if (err instanceof RepoNotFoundError) {
|
|
197
|
-
return c.json({ error: 'not_found', message: `Repository '${repo}' not found` }, 404);
|
|
198
|
-
}
|
|
199
|
-
throw err;
|
|
200
|
-
}
|
|
201
|
-
await next();
|
|
202
|
-
});
|
|
158
|
+
app.route('/api/repos', createSingleRepositoryRoutes());
|
|
159
|
+
app.use('/api/repos/:repo/*', createSingleRepositoryGate());
|
|
203
160
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
return sendSuccess(ArrayType(StringType), ['default']);
|
|
208
|
-
}
|
|
209
|
-
try {
|
|
210
|
-
const repos = await storage.repos.list();
|
|
211
|
-
return sendSuccess(ArrayType(StringType), repos);
|
|
212
|
-
}
|
|
213
|
-
catch (err) {
|
|
214
|
-
return sendError(ArrayType(StringType), errorToVariant(err));
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
// PUT /api/repos/:repo - Create a new repository (multi-repo mode only)
|
|
218
|
-
// Note: Single-repo mode handler is registered earlier and takes precedence
|
|
219
|
-
if (!isSingleRepoMode) {
|
|
220
|
-
app.put('/api/repos/:repo', async (c) => {
|
|
221
|
-
const repo = c.req.param('repo');
|
|
222
|
-
try {
|
|
223
|
-
// Check if repo exists and is in 'deleting' state
|
|
224
|
-
const existing = await storage.repos.getMetadata(repo);
|
|
225
|
-
if (existing) {
|
|
226
|
-
if (existing.status === 'deleting') {
|
|
227
|
-
return sendError(StringType, variant('internal', { message: `Repository '${repo}' cleanup in progress, try later` }));
|
|
228
|
-
}
|
|
229
|
-
return sendError(StringType, variant('internal', { message: `Repository '${repo}' already exists` }));
|
|
230
|
-
}
|
|
231
|
-
await storage.repos.create(repo);
|
|
232
|
-
return sendSuccessWithStatus(StringType, repo, 201);
|
|
233
|
-
}
|
|
234
|
-
catch (err) {
|
|
235
|
-
if (err instanceof RepoAlreadyExistsError) {
|
|
236
|
-
return sendError(StringType, variant('internal', { message: `Repository '${repo}' already exists` }));
|
|
237
|
-
}
|
|
238
|
-
return sendError(StringType, errorToVariant(err));
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
// DELETE /api/repos/:repo - Remove a repository (async, multi-repo mode only)
|
|
242
|
-
// Uses the resumable deletion pattern:
|
|
243
|
-
// 1. Mark repo as 'deleting' (atomic tombstone)
|
|
244
|
-
// 2. Delete refs synchronously (fast)
|
|
245
|
-
// 3. Delete objects in batches
|
|
246
|
-
// 4. Remove repo metadata
|
|
247
|
-
// Note: For cloud (e3-aws), step 3 would be async via GC
|
|
248
|
-
app.delete('/api/repos/:repo', async (c) => {
|
|
249
|
-
const repo = c.req.param('repo');
|
|
250
|
-
try {
|
|
251
|
-
// Check if repo exists
|
|
252
|
-
const existing = await storage.repos.getMetadata(repo);
|
|
253
|
-
if (!existing) {
|
|
254
|
-
return sendError(NullType, variant('repository_not_found', { repo }));
|
|
255
|
-
}
|
|
256
|
-
// If already deleting, return success (idempotent)
|
|
257
|
-
if (existing.status === 'deleting') {
|
|
258
|
-
return sendSuccess(NullType, null);
|
|
259
|
-
}
|
|
260
|
-
// 1. Atomically mark as 'deleting'
|
|
261
|
-
await storage.repos.setStatus(repo, 'deleting', 'active');
|
|
262
|
-
// 2. Delete refs synchronously (fast for local storage)
|
|
263
|
-
let cursor;
|
|
264
|
-
do {
|
|
265
|
-
const result = await storage.repos.deleteRefsBatch(repo, cursor);
|
|
266
|
-
cursor = result.status === 'continue' ? result.cursor : undefined;
|
|
267
|
-
} while (cursor);
|
|
268
|
-
// 3. Delete objects in batches (for local storage, this is synchronous)
|
|
269
|
-
cursor = undefined;
|
|
270
|
-
do {
|
|
271
|
-
const result = await storage.repos.deleteObjectsBatch(repo, cursor);
|
|
272
|
-
cursor = result.status === 'continue' ? result.cursor : undefined;
|
|
273
|
-
} while (cursor);
|
|
274
|
-
// 4. Remove repo metadata/directory
|
|
275
|
-
await storage.repos.remove(repo);
|
|
276
|
-
return sendSuccess(NullType, null);
|
|
277
|
-
}
|
|
278
|
-
catch (err) {
|
|
279
|
-
if (err instanceof RepoNotFoundError) {
|
|
280
|
-
return sendError(NullType, variant('repository_not_found', { repo }));
|
|
281
|
-
}
|
|
282
|
-
return sendError(NullType, errorToVariant(err));
|
|
283
|
-
}
|
|
284
|
-
});
|
|
161
|
+
else {
|
|
162
|
+
app.use('/api/repos/:repo/*', createRepositoryGate(storage, getRepoPath));
|
|
163
|
+
app.route('/api/repos', createRepositoriesRoutes(storage));
|
|
285
164
|
}
|
|
286
165
|
// Mount repository-specific routes
|
|
287
166
|
// Each route file creates a sub-app that uses getRepoPath to resolve the repo
|
|
288
167
|
// Repository status and GC: /api/repos/:repo/status, /api/repos/:repo/gc
|
|
289
|
-
app.route('/api/repos/:repo', createRepositoryRoutes(storage, getRepoPath));
|
|
168
|
+
app.route('/api/repos/:repo', createRepositoryRoutes(storage, getRepoPath, transferBackend));
|
|
290
169
|
// Package transfer routes: repo-level import/export + package-level export trigger
|
|
291
170
|
app.route('/api/repos/:repo', pkgTransfer.repoApi);
|
|
292
171
|
app.route('/api/repos/:repo/packages', pkgTransfer.pkgApi);
|
|
293
|
-
// Per-repo task runner for function / one-shot calls (cached — the
|
|
294
|
-
// runner is stateless apart from its repo anchor)
|
|
295
|
-
const runners = new Map();
|
|
296
|
-
const getRunner = (repoPath) => {
|
|
297
|
-
let runner = runners.get(repoPath);
|
|
298
|
-
if (!runner) {
|
|
299
|
-
runner = new LocalTaskRunner(repoPath);
|
|
300
|
-
runners.set(repoPath, runner);
|
|
301
|
-
}
|
|
302
|
-
return runner;
|
|
303
|
-
};
|
|
304
172
|
// Package routes: /api/repos/:repo/packages/*
|
|
305
173
|
app.route('/api/repos/:repo/packages', createPackageRoutes(storage, getRepoPath));
|
|
306
174
|
// Package-scoped function routes: /api/repos/:repo/packages/:pkg/:version/functions/*
|
|
307
175
|
app.route('/api/repos/:repo/packages/:pkg/:version/functions', createPackageFunctionRoutes(storage, getRepoPath, getRunner));
|
|
308
176
|
// Workspace routes: /api/repos/:repo/workspaces/*
|
|
309
|
-
app.route('/api/repos/:repo/workspaces', createWorkspaceRoutes(storage, getRepoPath, transferBackend));
|
|
177
|
+
app.route('/api/repos/:repo/workspaces', createWorkspaceRoutes(storage, getRepoPath, transferBackend, getRunner));
|
|
310
178
|
// Dataset transfer auth routes (init + commit) mount alongside dataset routes
|
|
311
179
|
app.route('/api/repos/:repo/workspaces/:ws/datasets', dsTransfer.api);
|
|
312
180
|
// Dataset routes: /api/repos/:repo/workspaces/:ws/datasets/*
|
|
@@ -321,10 +189,15 @@ export async function createServer(config) {
|
|
|
321
189
|
app.route('/api/repos/:repo/workspaces/:ws/one-shot', createOneShotRoutes(storage, getRepoPath, getRunner));
|
|
322
190
|
// Workspace-scoped record routes: /api/repos/:repo/workspaces/:ws/records/*
|
|
323
191
|
app.route('/api/repos/:repo/workspaces/:ws/records', createWorkspaceRecordRoutes(storage, getRepoPath, getRunner));
|
|
324
|
-
// Execution/Dataflow routes: /api/repos/:repo/workspaces/:ws/dataflow
|
|
325
|
-
|
|
326
|
-
//
|
|
327
|
-
app.route('/api/repos/:repo/
|
|
192
|
+
// Execution/Dataflow routes: /api/repos/:repo/workspaces/:ws/dataflow/*,
|
|
193
|
+
// run, polled and cancelled through each repository's local orchestrator
|
|
194
|
+
// and the state store it writes
|
|
195
|
+
app.route('/api/repos/:repo/workspaces/:ws/dataflow', createExecutionRoutes(storage, getRepoPath, {
|
|
196
|
+
getRunner, ...localDataflow(), width: budget.cores, budget,
|
|
197
|
+
}));
|
|
198
|
+
// Object routes: /api/repos/:repo/objects/:hash — a large object is answered
|
|
199
|
+
// by download URL, as a dataset is
|
|
200
|
+
app.route('/api/repos/:repo/objects', createObjectRoutes(storage, getRepoPath, transferBackend));
|
|
328
201
|
let httpServer = null;
|
|
329
202
|
let actualPort = port;
|
|
330
203
|
const server = {
|
package/dist/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.spec.d.ts","sourceRoot":"","sources":["../../src/server.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* A server opens a repository before it serves it, as the CLI does: the one it
|
|
7
|
+
* serves alone when it starts, and each of several at every request to it. One
|
|
8
|
+
* this e3 cannot open is refused, naming the release that applied the upgrade
|
|
9
|
+
* it does not know.
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
12
|
+
import assert from 'node:assert/strict';
|
|
13
|
+
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
14
|
+
import { tmpdir } from 'node:os';
|
|
15
|
+
import { join } from 'node:path';
|
|
16
|
+
import { decodeBeast2For, encodeBeast2For } from '@elaraai/east';
|
|
17
|
+
import { repoInit } from '@elaraai/e3-core';
|
|
18
|
+
import { E3_RELEASE, RepositoryRecordType } from '@elaraai/e3-types';
|
|
19
|
+
import { createServer } from './server.js';
|
|
20
|
+
/** Records that e3 999.0.0 applied an upgrade to the repository this e3 does not know. */
|
|
21
|
+
function upgradedByNewer(repoPath) {
|
|
22
|
+
const file = join(repoPath, 'repository.beast2');
|
|
23
|
+
const record = decodeBeast2For(RepositoryRecordType)(readFileSync(file));
|
|
24
|
+
writeFileSync(file, encodeBeast2For(RepositoryRecordType)({
|
|
25
|
+
...record, upgrades: [...record.upgrades, { name: 'from-a-newer-e3', release: '999.0.0' }],
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
const refusal = (repoPath) => `the repository at ${repoPath} has had the upgrade "from-a-newer-e3", which e3 999.0.0 applied ` +
|
|
29
|
+
`and this e3, ${E3_RELEASE}, does not know — open it with e3 999.0.0 or a newer one`;
|
|
30
|
+
describe('a server opens the repositories it serves', () => {
|
|
31
|
+
let dir;
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
dir = mkdtempSync(join(tmpdir(), 'e3-server-open-'));
|
|
34
|
+
});
|
|
35
|
+
afterEach(() => {
|
|
36
|
+
rmSync(dir, { recursive: true, force: true });
|
|
37
|
+
});
|
|
38
|
+
it('refuses to serve one repository this e3 cannot open, naming the release that upgraded it', async () => {
|
|
39
|
+
const repoPath = join(dir, 'repo');
|
|
40
|
+
assert.equal(repoInit(repoPath).success, true);
|
|
41
|
+
upgradedByNewer(repoPath);
|
|
42
|
+
await assert.rejects(createServer({ singleRepoPath: repoPath, port: 0 }), { name: 'RepoLayoutError', message: refusal(repoPath) });
|
|
43
|
+
});
|
|
44
|
+
it('refuses each of several repositories this e3 cannot open at a request to it, naming the release that upgraded it', async () => {
|
|
45
|
+
assert.equal(repoInit(join(dir, 'newer')).success, true);
|
|
46
|
+
upgradedByNewer(join(dir, 'newer'));
|
|
47
|
+
const server = await createServer({ reposDir: dir, port: 0, host: '127.0.0.1' });
|
|
48
|
+
await server.start();
|
|
49
|
+
try {
|
|
50
|
+
const response = await fetch(`http://127.0.0.1:${server.port}/api/repos/newer/workspaces`);
|
|
51
|
+
assert.equal(response.status, 500);
|
|
52
|
+
assert.deepEqual(await response.json(), { error: { type: 'internal', message: refusal(join(dir, 'newer')) } });
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
await server.stop();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=server.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.spec.js","sourceRoot":"","sources":["../../src/server.spec.ts"],"names":[],"mappings":"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"}
|