@elaraai/e3-api-server 0.0.1-alpha.2

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 (55) hide show
  1. package/LICENSE.md +50 -0
  2. package/README.md +156 -0
  3. package/dist/src/beast2.d.ts +20 -0
  4. package/dist/src/beast2.d.ts.map +1 -0
  5. package/dist/src/beast2.js +47 -0
  6. package/dist/src/beast2.js.map +1 -0
  7. package/dist/src/cli.d.ts +7 -0
  8. package/dist/src/cli.d.ts.map +1 -0
  9. package/dist/src/cli.js +34 -0
  10. package/dist/src/cli.js.map +1 -0
  11. package/dist/src/errors.d.ts +10 -0
  12. package/dist/src/errors.d.ts.map +1 -0
  13. package/dist/src/errors.js +73 -0
  14. package/dist/src/errors.js.map +1 -0
  15. package/dist/src/index.d.ts +13 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/src/index.js +13 -0
  18. package/dist/src/index.js.map +1 -0
  19. package/dist/src/routes/datasets.d.ts +7 -0
  20. package/dist/src/routes/datasets.d.ts.map +1 -0
  21. package/dist/src/routes/datasets.js +98 -0
  22. package/dist/src/routes/datasets.js.map +1 -0
  23. package/dist/src/routes/executions.d.ts +7 -0
  24. package/dist/src/routes/executions.d.ts.map +1 -0
  25. package/dist/src/routes/executions.js +303 -0
  26. package/dist/src/routes/executions.js.map +1 -0
  27. package/dist/src/routes/packages.d.ts +7 -0
  28. package/dist/src/routes/packages.d.ts.map +1 -0
  29. package/dist/src/routes/packages.js +124 -0
  30. package/dist/src/routes/packages.js.map +1 -0
  31. package/dist/src/routes/repository.d.ts +7 -0
  32. package/dist/src/routes/repository.d.ts.map +1 -0
  33. package/dist/src/routes/repository.js +67 -0
  34. package/dist/src/routes/repository.js.map +1 -0
  35. package/dist/src/routes/tasks.d.ts +7 -0
  36. package/dist/src/routes/tasks.d.ts.map +1 -0
  37. package/dist/src/routes/tasks.js +58 -0
  38. package/dist/src/routes/tasks.js.map +1 -0
  39. package/dist/src/routes/workspaces.d.ts +7 -0
  40. package/dist/src/routes/workspaces.d.ts.map +1 -0
  41. package/dist/src/routes/workspaces.js +133 -0
  42. package/dist/src/routes/workspaces.js.map +1 -0
  43. package/dist/src/server.d.ts +37 -0
  44. package/dist/src/server.d.ts.map +1 -0
  45. package/dist/src/server.js +83 -0
  46. package/dist/src/server.js.map +1 -0
  47. package/dist/src/types.d.ts +1310 -0
  48. package/dist/src/types.d.ts.map +1 -0
  49. package/dist/src/types.js +471 -0
  50. package/dist/src/types.js.map +1 -0
  51. package/dist/src/utils.d.ts +25 -0
  52. package/dist/src/utils.d.ts.map +1 -0
  53. package/dist/src/utils.js +27 -0
  54. package/dist/src/utils.js.map +1 -0
  55. package/package.json +58 -0
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import * as fs from 'node:fs/promises';
6
+ import * as os from 'node:os';
7
+ import * as path from 'node:path';
8
+ import { Hono } from 'hono';
9
+ import { ArrayType, BlobType, NullType, some, none } from '@elaraai/east';
10
+ import { WorkspaceStateType, parsePackageRef } from '@elaraai/e3-types';
11
+ import { workspaceList, workspaceCreate, workspaceRemove, workspaceGetState, workspaceDeploy, workspaceExport, packageGetLatestVersion, } from '@elaraai/e3-core';
12
+ import { decodeBody, sendSuccess, sendError } from '../beast2.js';
13
+ import { errorToVariant } from '../errors.js';
14
+ import { WorkspaceInfoType, CreateWorkspaceType, DeployRequestType } from '../types.js';
15
+ export function createWorkspaceRoutes(repoPath) {
16
+ const app = new Hono();
17
+ // GET /api/workspaces - List all workspaces
18
+ app.get('/', async (c) => {
19
+ try {
20
+ const workspaces = await workspaceList(repoPath);
21
+ const result = await Promise.all(workspaces.map(async (name) => {
22
+ const state = await workspaceGetState(repoPath, name);
23
+ if (state) {
24
+ return {
25
+ name,
26
+ deployed: true,
27
+ packageName: some(state.packageName),
28
+ packageVersion: some(state.packageVersion),
29
+ };
30
+ }
31
+ else {
32
+ return {
33
+ name,
34
+ deployed: false,
35
+ packageName: none,
36
+ packageVersion: none,
37
+ };
38
+ }
39
+ }));
40
+ return sendSuccess(c, ArrayType(WorkspaceInfoType), result);
41
+ }
42
+ catch (err) {
43
+ return sendError(c, ArrayType(WorkspaceInfoType), errorToVariant(err));
44
+ }
45
+ });
46
+ // POST /api/workspaces - Create a new workspace
47
+ app.post('/', async (c) => {
48
+ try {
49
+ const body = await decodeBody(c, CreateWorkspaceType);
50
+ await workspaceCreate(repoPath, body.name);
51
+ return sendSuccess(c, WorkspaceInfoType, {
52
+ name: body.name,
53
+ deployed: false,
54
+ packageName: none,
55
+ packageVersion: none,
56
+ });
57
+ }
58
+ catch (err) {
59
+ return sendError(c, WorkspaceInfoType, errorToVariant(err));
60
+ }
61
+ });
62
+ // GET /api/workspaces/:name - Get workspace state
63
+ app.get('/:name', async (c) => {
64
+ try {
65
+ const name = c.req.param('name');
66
+ const state = await workspaceGetState(repoPath, name);
67
+ if (!state) {
68
+ // Workspace exists but not deployed - return error
69
+ return sendError(c, WorkspaceStateType, errorToVariant(new Error(`Workspace '${name}' is not deployed`)));
70
+ }
71
+ return sendSuccess(c, WorkspaceStateType, state);
72
+ }
73
+ catch (err) {
74
+ return sendError(c, WorkspaceStateType, errorToVariant(err));
75
+ }
76
+ });
77
+ // DELETE /api/workspaces/:name - Remove a workspace
78
+ app.delete('/:name', async (c) => {
79
+ try {
80
+ const name = c.req.param('name');
81
+ await workspaceRemove(repoPath, name);
82
+ return sendSuccess(c, NullType, null);
83
+ }
84
+ catch (err) {
85
+ return sendError(c, NullType, errorToVariant(err));
86
+ }
87
+ });
88
+ // POST /api/workspaces/:name/deploy - Deploy a package to a workspace
89
+ app.post('/:name/deploy', async (c) => {
90
+ try {
91
+ const name = c.req.param('name');
92
+ if (!name) {
93
+ return sendError(c, NullType, errorToVariant(new Error('Missing workspace name parameter')));
94
+ }
95
+ const body = await decodeBody(c, DeployRequestType);
96
+ const { name: pkgName, version: maybeVersion } = parsePackageRef(body.packageRef);
97
+ const pkgVersion = maybeVersion ?? await packageGetLatestVersion(repoPath, pkgName);
98
+ if (!pkgVersion) {
99
+ return sendError(c, NullType, errorToVariant(new Error(`Package not found: ${pkgName}`)));
100
+ }
101
+ await workspaceDeploy(repoPath, name, pkgName, pkgVersion);
102
+ return sendSuccess(c, NullType, null);
103
+ }
104
+ catch (err) {
105
+ return sendError(c, NullType, errorToVariant(err));
106
+ }
107
+ });
108
+ // GET /api/workspaces/:name/export - Export workspace as a package zip
109
+ app.get('/:name/export', async (c) => {
110
+ try {
111
+ const name = c.req.param('name');
112
+ if (!name) {
113
+ return sendError(c, BlobType, errorToVariant(new Error('Missing workspace name parameter')));
114
+ }
115
+ // Export to temp file
116
+ const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'e3-ws-export-'));
117
+ const tempPath = path.join(tempDir, 'workspace.zip');
118
+ try {
119
+ await workspaceExport(repoPath, name, tempPath);
120
+ const archive = await fs.readFile(tempPath);
121
+ return sendSuccess(c, BlobType, new Uint8Array(archive));
122
+ }
123
+ finally {
124
+ await fs.rm(tempDir, { recursive: true, force: true });
125
+ }
126
+ }
127
+ catch (err) {
128
+ return sendError(c, BlobType, errorToVariant(err));
129
+ }
130
+ });
131
+ return app;
132
+ }
133
+ //# sourceMappingURL=workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/routes/workspaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import { type ServerType } from '@hono/node-server';
6
+ /**
7
+ * Server configuration options.
8
+ */
9
+ export interface ServerConfig {
10
+ /** Path to e3 repository (required) */
11
+ repo: string;
12
+ /** HTTP port (default: 3000) */
13
+ port?: number;
14
+ /** Bind address (default: "localhost") */
15
+ host?: string;
16
+ }
17
+ /**
18
+ * Server instance handle.
19
+ */
20
+ export interface Server {
21
+ /** Start the server */
22
+ start(): Promise<void>;
23
+ /** Stop the server */
24
+ stop(): Promise<void>;
25
+ /** The underlying HTTP server */
26
+ readonly httpServer: ServerType;
27
+ /** The port the server is listening on */
28
+ readonly port: number;
29
+ }
30
+ /**
31
+ * Create an e3 API server.
32
+ *
33
+ * @param config - Server configuration
34
+ * @returns Server instance
35
+ */
36
+ export declare function createServer(config: ServerConfig): Server;
37
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ3D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,uBAAuB;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,sBAAsB;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,iCAAiC;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA2EzD"}
@@ -0,0 +1,83 @@
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 { serve } from '@hono/node-server';
7
+ import { createRepositoryRoutes } from './routes/repository.js';
8
+ import { createPackageRoutes } from './routes/packages.js';
9
+ import { createWorkspaceRoutes } from './routes/workspaces.js';
10
+ import { createDatasetRoutes } from './routes/datasets.js';
11
+ import { createTaskRoutes } from './routes/tasks.js';
12
+ import { createExecutionRoutes } from './routes/executions.js';
13
+ /**
14
+ * Create an e3 API server.
15
+ *
16
+ * @param config - Server configuration
17
+ * @returns Server instance
18
+ */
19
+ export function createServer(config) {
20
+ const { repo: repoPath, port = 3000, host = 'localhost' } = config;
21
+ const app = new Hono();
22
+ // Repository routes: /api/status, /api/gc
23
+ app.route('/api', createRepositoryRoutes(repoPath));
24
+ // Package routes: /api/packages/*
25
+ app.route('/api/packages', createPackageRoutes(repoPath));
26
+ // Workspace routes: /api/workspaces/*
27
+ const workspaceRoutes = createWorkspaceRoutes(repoPath);
28
+ app.route('/api/workspaces', workspaceRoutes);
29
+ // Dataset routes mounted under workspaces: /api/workspaces/:ws/list, /get, /set
30
+ const datasetRoutes = createDatasetRoutes(repoPath);
31
+ app.route('/api/workspaces/:ws', datasetRoutes);
32
+ // Task routes: /api/workspaces/:ws/tasks/*
33
+ const taskRoutes = createTaskRoutes(repoPath);
34
+ app.route('/api/workspaces/:ws/tasks', taskRoutes);
35
+ // Execution routes: /api/workspaces/:ws/start, /status, /graph, /logs/:task
36
+ const executionRoutes = createExecutionRoutes(repoPath);
37
+ app.route('/api/workspaces/:ws', executionRoutes);
38
+ let httpServer = null;
39
+ let actualPort = port;
40
+ const server = {
41
+ async start() {
42
+ return new Promise((resolve) => {
43
+ httpServer = serve({
44
+ fetch: app.fetch,
45
+ port,
46
+ hostname: host,
47
+ }, (info) => {
48
+ actualPort = info.port;
49
+ resolve();
50
+ });
51
+ });
52
+ },
53
+ async stop() {
54
+ return new Promise((resolve, reject) => {
55
+ if (!httpServer) {
56
+ resolve();
57
+ return;
58
+ }
59
+ // Force close all connections immediately
60
+ httpServer.closeAllConnections();
61
+ httpServer.close((err) => {
62
+ if (err) {
63
+ reject(err);
64
+ }
65
+ else {
66
+ resolve();
67
+ }
68
+ });
69
+ });
70
+ },
71
+ get httpServer() {
72
+ if (!httpServer) {
73
+ throw new Error('Server not started');
74
+ }
75
+ return httpServer;
76
+ },
77
+ get port() {
78
+ return actualPort;
79
+ },
80
+ };
81
+ return server;
82
+ }
83
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}