@elaraai/e3-api-server 1.0.79 → 1.0.81
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 +100 -20
- 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 +63 -6
- package/dist/src/handlers/workspaces.d.ts.map +1 -1
- package/dist/src/handlers/workspaces.js +104 -42
- 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 +214 -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 +22 -10
- package/dist/src/routes/transfer.d.ts.map +1 -1
- package/dist/src/routes/transfer.js +104 -118
- 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 +64 -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 +57 -183
- 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 +306 -17
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +7 -3
- 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
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
-
import type
|
|
5
|
+
import { type WorkspaceDeployRequest } from '@elaraai/e3-types';
|
|
6
|
+
import type { StorageBackend, TaskRunner, WorkspaceDeployStore } from '@elaraai/e3-core';
|
|
6
7
|
/**
|
|
7
8
|
* List all workspaces in the repository.
|
|
8
9
|
*/
|
|
@@ -13,22 +14,78 @@ export declare function listWorkspaces(storage: StorageBackend, repoPath: string
|
|
|
13
14
|
export declare function createWorkspace(storage: StorageBackend, repoPath: string, name: string): Promise<Response>;
|
|
14
15
|
/**
|
|
15
16
|
* Get workspace state.
|
|
17
|
+
*
|
|
18
|
+
* @param storage - Storage backend
|
|
19
|
+
* @param repoPath - Repository identifier
|
|
20
|
+
* @param name - Workspace name
|
|
21
|
+
* @returns The response: the deployed state; `workspace_not_deployed` for a
|
|
22
|
+
* workspace nothing is deployed to yet, as while its first deploy runs; or
|
|
23
|
+
* `workspace_not_found`
|
|
16
24
|
*/
|
|
17
25
|
export declare function getWorkspace(storage: StorageBackend, repoPath: string, name: string): Promise<Response>;
|
|
26
|
+
/**
|
|
27
|
+
* What holds a workspace exclusively, and how far that operation says it has
|
|
28
|
+
* got: a deploy taking its file sources in and deploying its records, while a
|
|
29
|
+
* workspace deployed for the first time has no status to show.
|
|
30
|
+
*
|
|
31
|
+
* @param storage - Storage backend
|
|
32
|
+
* @param repoPath - Repository identifier
|
|
33
|
+
* @param name - Workspace name
|
|
34
|
+
* @returns The response: the lock's status, `none` when nothing holds the
|
|
35
|
+
* workspace exclusively, or the error
|
|
36
|
+
*/
|
|
37
|
+
export declare function getWorkspaceLockStatus(storage: StorageBackend, repoPath: string, name: string): Promise<Response>;
|
|
18
38
|
/**
|
|
19
39
|
* Get comprehensive workspace status.
|
|
40
|
+
*
|
|
41
|
+
* @param storage - Storage backend
|
|
42
|
+
* @param runner - The runner the repository's tasks run on, which says
|
|
43
|
+
* whether an execution recorded running can still finish
|
|
44
|
+
* @param repoPath - Repository identifier
|
|
45
|
+
* @param name - Workspace name
|
|
46
|
+
* @returns The response: the status, or the error
|
|
20
47
|
*/
|
|
21
|
-
export declare function getWorkspaceStatus(storage: StorageBackend, repoPath: string, name: string): Promise<Response>;
|
|
48
|
+
export declare function getWorkspaceStatus(storage: StorageBackend, runner: TaskRunner, repoPath: string, name: string): Promise<Response>;
|
|
22
49
|
/**
|
|
23
50
|
* Delete a workspace.
|
|
24
51
|
*/
|
|
25
52
|
export declare function deleteWorkspace(storage: StorageBackend, repoPath: string, name: string): Promise<Response>;
|
|
26
53
|
/**
|
|
27
|
-
*
|
|
54
|
+
* Start deploying a package to a workspace, as a job the client polls.
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* A deploy that migrates a record, or builds an index over one, takes as long
|
|
58
|
+
* as the record is large, which outlasts a request. So the deploy runs as a
|
|
59
|
+
* job, in the compute the store dispatches it to: a local server's own
|
|
60
|
+
* process, or a cloud's. The package is resolved first, so a deploy of one the
|
|
61
|
+
* repository does not hold is refused at once, as `package_not_found`, and the
|
|
62
|
+
* job deploys exactly the version resolved.
|
|
63
|
+
*
|
|
64
|
+
* The job never opens a path-initialised input's file: its path is on the
|
|
65
|
+
* machine that exported the package. Each such input is left unassigned, and
|
|
66
|
+
* `e3 workspace deploy <url>` completes it over the dataset transfer protocol
|
|
67
|
+
* once the job has finished.
|
|
68
|
+
*
|
|
69
|
+
* @param storage - Storage backend
|
|
70
|
+
* @param repoPath - Repository identifier
|
|
71
|
+
* @param repo - The repository's name, which the job is filed under
|
|
72
|
+
* @param workspace - Workspace name
|
|
73
|
+
* @param request - The package, and what the deploy does with a record it
|
|
74
|
+
* cannot keep as it is
|
|
75
|
+
* @param deployStore - Where the job is filed, and dispatched from
|
|
76
|
+
* @returns The response: the job's id, or the error
|
|
28
77
|
*/
|
|
29
|
-
export declare function
|
|
78
|
+
export declare function startWorkspaceDeploy(storage: StorageBackend, repoPath: string, repo: string, workspace: string, request: WorkspaceDeployRequest, deployStore: WorkspaceDeployStore): Promise<Response>;
|
|
30
79
|
/**
|
|
31
|
-
*
|
|
80
|
+
* A deploy job's status: still running, what the deploy did, or why it did
|
|
81
|
+
* not.
|
|
82
|
+
*
|
|
83
|
+
* @param deployStore - Where the job is filed
|
|
84
|
+
* @param repo - The repository's name
|
|
85
|
+
* @param workspace - Workspace name
|
|
86
|
+
* @param id - The job's id
|
|
87
|
+
* @returns The response: the status, or the error when this workspace started
|
|
88
|
+
* no such job
|
|
32
89
|
*/
|
|
33
|
-
export declare function
|
|
90
|
+
export declare function getWorkspaceDeployStatus(deployStore: WorkspaceDeployStore, repo: string, workspace: string, id: string): Promise<Response>;
|
|
34
91
|
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/handlers/workspaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/handlers/workspaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACmF,KAAK,sBAAsB,EACpH,MAAM,mBAAmB,CAAC;AAc3B,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAKzF;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,QAAQ,CAAC,CA2BnB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,CAAC,CAYnB;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,CAAC,CAWnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,CAAC,CAOnB;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,CAAC,CAmDnB;AA8CD;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,CAAC,CAOnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,oBAAoB,GAChC,OAAO,CAAC,QAAQ,CAAC,CAwBnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,QAAQ,CAAC,CAYnB"}
|
|
@@ -2,16 +2,14 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import * as path from 'node:path';
|
|
8
|
-
import { BlobType, NullType, some, none, variant } from '@elaraai/east';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
import { NullType, OptionType, some, none, variant } from '@elaraai/east';
|
|
9
7
|
import { ArrayType } from '@elaraai/east';
|
|
10
|
-
import { WorkspaceStateType, parsePackageRef } from '@elaraai/e3-types';
|
|
11
|
-
import { workspaceList, workspaceCreate, workspaceRemove, workspaceGetState,
|
|
8
|
+
import { PackageJobResponseType, WorkspaceDeployStatusType, WorkspaceStateType, parsePackageRef, } from '@elaraai/e3-types';
|
|
9
|
+
import { workspaceList, workspaceCreate, workspaceRemove, workspaceGetState, workspaceLockStatus, workspaceStatus, packageGetLatestVersion, packageResolve, PackageNotFoundError, WorkspaceNotDeployedError, WorkspaceNotFoundError, } from '@elaraai/e3-core';
|
|
12
10
|
import { sendSuccess, sendError } from '../beast2.js';
|
|
13
11
|
import { errorToVariant } from '../errors.js';
|
|
14
|
-
import { WorkspaceInfoType, WorkspaceStatusResultType } from '../types.js';
|
|
12
|
+
import { LockStatusType, WorkspaceInfoType, WorkspaceStatusResultType } from '../types.js';
|
|
15
13
|
/**
|
|
16
14
|
* List all workspaces in the repository.
|
|
17
15
|
*/
|
|
@@ -62,12 +60,20 @@ export async function createWorkspace(storage, repoPath, name) {
|
|
|
62
60
|
}
|
|
63
61
|
/**
|
|
64
62
|
* Get workspace state.
|
|
63
|
+
*
|
|
64
|
+
* @param storage - Storage backend
|
|
65
|
+
* @param repoPath - Repository identifier
|
|
66
|
+
* @param name - Workspace name
|
|
67
|
+
* @returns The response: the deployed state; `workspace_not_deployed` for a
|
|
68
|
+
* workspace nothing is deployed to yet, as while its first deploy runs; or
|
|
69
|
+
* `workspace_not_found`
|
|
65
70
|
*/
|
|
66
71
|
export async function getWorkspace(storage, repoPath, name) {
|
|
67
72
|
try {
|
|
68
73
|
const state = await workspaceGetState(storage, repoPath, name);
|
|
69
74
|
if (!state) {
|
|
70
|
-
|
|
75
|
+
const exists = (await workspaceList(storage, repoPath)).includes(name);
|
|
76
|
+
throw exists ? new WorkspaceNotDeployedError(name) : new WorkspaceNotFoundError(name);
|
|
71
77
|
}
|
|
72
78
|
return sendSuccess(WorkspaceStateType, state);
|
|
73
79
|
}
|
|
@@ -75,12 +81,39 @@ export async function getWorkspace(storage, repoPath, name) {
|
|
|
75
81
|
return sendError(WorkspaceStateType, errorToVariant(err));
|
|
76
82
|
}
|
|
77
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* What holds a workspace exclusively, and how far that operation says it has
|
|
86
|
+
* got: a deploy taking its file sources in and deploying its records, while a
|
|
87
|
+
* workspace deployed for the first time has no status to show.
|
|
88
|
+
*
|
|
89
|
+
* @param storage - Storage backend
|
|
90
|
+
* @param repoPath - Repository identifier
|
|
91
|
+
* @param name - Workspace name
|
|
92
|
+
* @returns The response: the lock's status, `none` when nothing holds the
|
|
93
|
+
* workspace exclusively, or the error
|
|
94
|
+
*/
|
|
95
|
+
export async function getWorkspaceLockStatus(storage, repoPath, name) {
|
|
96
|
+
try {
|
|
97
|
+
const status = await workspaceLockStatus(storage, repoPath, name);
|
|
98
|
+
return sendSuccess(OptionType(LockStatusType), status === null ? none : some(status));
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
return sendError(OptionType(LockStatusType), errorToVariant(err));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
78
104
|
/**
|
|
79
105
|
* Get comprehensive workspace status.
|
|
106
|
+
*
|
|
107
|
+
* @param storage - Storage backend
|
|
108
|
+
* @param runner - The runner the repository's tasks run on, which says
|
|
109
|
+
* whether an execution recorded running can still finish
|
|
110
|
+
* @param repoPath - Repository identifier
|
|
111
|
+
* @param name - Workspace name
|
|
112
|
+
* @returns The response: the status, or the error
|
|
80
113
|
*/
|
|
81
|
-
export async function getWorkspaceStatus(storage, repoPath, name) {
|
|
114
|
+
export async function getWorkspaceStatus(storage, runner, repoPath, name) {
|
|
82
115
|
try {
|
|
83
|
-
const status = await workspaceStatus(storage, repoPath, name);
|
|
116
|
+
const status = await workspaceStatus(storage, runner, repoPath, name);
|
|
84
117
|
// Convert numbers to bigints for BEAST2 serialization
|
|
85
118
|
const result = {
|
|
86
119
|
workspace: status.workspace,
|
|
@@ -104,6 +137,7 @@ export async function getWorkspaceStatus(storage, repoPath, name) {
|
|
|
104
137
|
inputs: t.inputs,
|
|
105
138
|
output: t.output,
|
|
106
139
|
dependsOn: t.dependsOn,
|
|
140
|
+
peakBytes: t.peakBytes === null ? none : some(BigInt(t.peakBytes)),
|
|
107
141
|
})),
|
|
108
142
|
summary: {
|
|
109
143
|
datasets: {
|
|
@@ -185,51 +219,79 @@ export async function deleteWorkspace(storage, repoPath, name) {
|
|
|
185
219
|
}
|
|
186
220
|
}
|
|
187
221
|
/**
|
|
188
|
-
*
|
|
222
|
+
* Start deploying a package to a workspace, as a job the client polls.
|
|
223
|
+
*
|
|
224
|
+
* @remarks
|
|
225
|
+
* A deploy that migrates a record, or builds an index over one, takes as long
|
|
226
|
+
* as the record is large, which outlasts a request. So the deploy runs as a
|
|
227
|
+
* job, in the compute the store dispatches it to: a local server's own
|
|
228
|
+
* process, or a cloud's. The package is resolved first, so a deploy of one the
|
|
229
|
+
* repository does not hold is refused at once, as `package_not_found`, and the
|
|
230
|
+
* job deploys exactly the version resolved.
|
|
231
|
+
*
|
|
232
|
+
* The job never opens a path-initialised input's file: its path is on the
|
|
233
|
+
* machine that exported the package. Each such input is left unassigned, and
|
|
234
|
+
* `e3 workspace deploy <url>` completes it over the dataset transfer protocol
|
|
235
|
+
* once the job has finished.
|
|
236
|
+
*
|
|
237
|
+
* @param storage - Storage backend
|
|
238
|
+
* @param repoPath - Repository identifier
|
|
239
|
+
* @param repo - The repository's name, which the job is filed under
|
|
240
|
+
* @param workspace - Workspace name
|
|
241
|
+
* @param request - The package, and what the deploy does with a record it
|
|
242
|
+
* cannot keep as it is
|
|
243
|
+
* @param deployStore - Where the job is filed, and dispatched from
|
|
244
|
+
* @returns The response: the job's id, or the error
|
|
189
245
|
*/
|
|
190
|
-
export async function
|
|
246
|
+
export async function startWorkspaceDeploy(storage, repoPath, repo, workspace, request, deployStore) {
|
|
191
247
|
try {
|
|
192
|
-
const { name
|
|
193
|
-
const
|
|
194
|
-
if (
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
248
|
+
const { name, version: maybeVersion } = parsePackageRef(request.packageRef);
|
|
249
|
+
const version = maybeVersion ?? await packageGetLatestVersion(storage, repoPath, name);
|
|
250
|
+
if (version === undefined)
|
|
251
|
+
throw new PackageNotFoundError(name);
|
|
252
|
+
await packageResolve(storage, repoPath, name, version);
|
|
253
|
+
const id = randomUUID();
|
|
254
|
+
await deployStore.create(id, {
|
|
255
|
+
repo,
|
|
256
|
+
workspace,
|
|
257
|
+
packageName: name,
|
|
258
|
+
packageVersion: version,
|
|
259
|
+
schema: request.schema,
|
|
260
|
+
allowDropRecords: request.allowDropRecords,
|
|
261
|
+
plan: request.plan,
|
|
262
|
+
status: variant('processing', variant('pending', null)),
|
|
263
|
+
createdAt: new Date(),
|
|
207
264
|
});
|
|
208
|
-
|
|
265
|
+
await deployStore.execute(id, repo);
|
|
266
|
+
return sendSuccess(PackageJobResponseType, { id });
|
|
209
267
|
}
|
|
210
268
|
catch (err) {
|
|
211
|
-
return sendError(
|
|
269
|
+
return sendError(PackageJobResponseType, errorToVariant(err));
|
|
212
270
|
}
|
|
213
271
|
}
|
|
214
272
|
/**
|
|
215
|
-
*
|
|
273
|
+
* A deploy job's status: still running, what the deploy did, or why it did
|
|
274
|
+
* not.
|
|
275
|
+
*
|
|
276
|
+
* @param deployStore - Where the job is filed
|
|
277
|
+
* @param repo - The repository's name
|
|
278
|
+
* @param workspace - Workspace name
|
|
279
|
+
* @param id - The job's id
|
|
280
|
+
* @returns The response: the status, or the error when this workspace started
|
|
281
|
+
* no such job
|
|
216
282
|
*/
|
|
217
|
-
export async function
|
|
283
|
+
export async function getWorkspaceDeployStatus(deployStore, repo, workspace, id) {
|
|
218
284
|
try {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
const archive = await fs.readFile(tempPath);
|
|
225
|
-
return sendSuccess(BlobType, new Uint8Array(archive));
|
|
226
|
-
}
|
|
227
|
-
finally {
|
|
228
|
-
await fs.rm(tempDir, { recursive: true, force: true });
|
|
285
|
+
const job = await deployStore.get(id);
|
|
286
|
+
if (job === null || job.repo !== repo || job.workspace !== workspace) {
|
|
287
|
+
return sendError(WorkspaceDeployStatusType, variant('internal', {
|
|
288
|
+
message: `workspace '${workspace}' has no deploy job '${id}'`,
|
|
289
|
+
}));
|
|
229
290
|
}
|
|
291
|
+
return sendSuccess(WorkspaceDeployStatusType, job.status);
|
|
230
292
|
}
|
|
231
293
|
catch (err) {
|
|
232
|
-
return sendError(
|
|
294
|
+
return sendError(WorkspaceDeployStatusType, errorToVariant(err));
|
|
233
295
|
}
|
|
234
296
|
}
|
|
235
297
|
//# sourceMappingURL=workspaces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/handlers/workspaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/handlers/workspaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.spec.d.ts","sourceRoot":"","sources":["../../../src/handlers/workspaces.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Deploy route tests: a deploy runs as a job the client polls, on the runner
|
|
7
|
+
* the job's store was given — an embedder mounts these routes with a store and
|
|
8
|
+
* a runner of its own — and without one, a deploy that owes an index build
|
|
9
|
+
* fails before it writes anything. While it runs, the job and the workspace's
|
|
10
|
+
* lock say how far it has got.
|
|
11
|
+
*/
|
|
12
|
+
import { describe, it, beforeEach } from 'node:test';
|
|
13
|
+
import assert from 'node:assert/strict';
|
|
14
|
+
import { Hono } from 'hono';
|
|
15
|
+
import { DictType, NullType, OptionType, StringType, StructType, encodeBeast2For, decodeBeast2For, toEastTypeValue, variant, none, some, } from '@elaraai/east';
|
|
16
|
+
import { InMemoryTransferBackend, MockTaskRunner, readRecordState, storeDatasetBytes, workspaceCreate, workspaceGetState, } from '@elaraai/e3-core';
|
|
17
|
+
import { InMemoryStorage } from '@elaraai/e3-core/test';
|
|
18
|
+
import { BEAST2_CONTENT_TYPE, PackageJobResponseType, PackageObjectType, RecordObjectType, RecordIndexObjectType, WorkspaceDeployRequestType, WorkspaceDeployStatusType, } from '@elaraai/e3-types';
|
|
19
|
+
import { createWorkspaceRoutes } from '../routes/workspaces.js';
|
|
20
|
+
import { LockStatusType, ResponseType } from '../types.js';
|
|
21
|
+
const REPO = 'test-repo';
|
|
22
|
+
const WS = 'main';
|
|
23
|
+
const PlansType = DictType(StringType, StringType);
|
|
24
|
+
const decodeStarted = decodeBeast2For(ResponseType(PackageJobResponseType));
|
|
25
|
+
const decodeStatus = decodeBeast2For(ResponseType(WorkspaceDeployStatusType));
|
|
26
|
+
const decodeLock = decodeBeast2For(ResponseType(OptionType(LockStatusType)));
|
|
27
|
+
/**
|
|
28
|
+
* Seed `planrecords@1.0.0` — an empty `plans` record declaring one index — and
|
|
29
|
+
* an empty workspace to deploy it to.
|
|
30
|
+
*
|
|
31
|
+
* @returns An empty stored index collection: what a build of that index writes
|
|
32
|
+
*/
|
|
33
|
+
async function seedIndexedPackage(storage) {
|
|
34
|
+
await storage.repos.create(REPO);
|
|
35
|
+
const state = await storeDatasetBytes(storage, REPO, encodeBeast2For(PlansType)(new Map()));
|
|
36
|
+
const ir = await storage.objects.write(REPO, new Uint8Array([0])); // stand-in IR: the mock runner never reads it
|
|
37
|
+
const index = await storage.objects.write(REPO, encodeBeast2For(RecordIndexObjectType)({
|
|
38
|
+
keyIr: ir,
|
|
39
|
+
multi: false,
|
|
40
|
+
valueIr: none,
|
|
41
|
+
keyType: toEastTypeValue(StringType),
|
|
42
|
+
valueType: toEastTypeValue(NullType),
|
|
43
|
+
buildIr: ir,
|
|
44
|
+
runner: variant('east_node', { platforms: [] }),
|
|
45
|
+
}));
|
|
46
|
+
const record = await storage.objects.write(REPO, encodeBeast2For(RecordObjectType)({
|
|
47
|
+
path: 'records/plans', mutations: new Map(), indexes: new Map([['by_value', index]]), migrations: [],
|
|
48
|
+
}));
|
|
49
|
+
const structure = variant('struct', new Map([
|
|
50
|
+
['records', variant('struct', new Map([
|
|
51
|
+
['plans', variant('value', { type: toEastTypeValue(PlansType), writable: false })],
|
|
52
|
+
]))],
|
|
53
|
+
]));
|
|
54
|
+
const pkg = await storage.objects.write(REPO, encodeBeast2For(PackageObjectType)({
|
|
55
|
+
tasks: new Map(),
|
|
56
|
+
data: { structure, refs: new Map([['records/plans', variant('value', { hash: state, versions: new Map() })]]) },
|
|
57
|
+
functions: new Map(),
|
|
58
|
+
records: new Map([['plans', record]]),
|
|
59
|
+
sources: new Map(),
|
|
60
|
+
}));
|
|
61
|
+
await storage.refs.packageWrite(REPO, 'planrecords', '1.0.0', pkg);
|
|
62
|
+
await workspaceCreate(storage, REPO, WS);
|
|
63
|
+
return storeDatasetBytes(storage, REPO, encodeBeast2For(DictType(StructType({ ik: StringType, k: StringType }), NullType))(new Map()));
|
|
64
|
+
}
|
|
65
|
+
/** The workspace routes, whose deploy jobs run on `getRunner`'s runner. */
|
|
66
|
+
function routes(storage, getRunner) {
|
|
67
|
+
const app = new Hono();
|
|
68
|
+
app.route('/api/repos/:repo/workspaces', createWorkspaceRoutes(storage, () => REPO, new InMemoryTransferBackend({
|
|
69
|
+
storage,
|
|
70
|
+
getRepoPath: () => REPO,
|
|
71
|
+
...(getRunner !== undefined && { getRunner }),
|
|
72
|
+
}), getRunner ?? (() => new MockTaskRunner())));
|
|
73
|
+
return app;
|
|
74
|
+
}
|
|
75
|
+
/** Start a deploy of `packageRef`: the job's id, or why the server started none. */
|
|
76
|
+
async function start(app, packageRef = 'planrecords@1.0.0') {
|
|
77
|
+
const response = await app.request(`/api/repos/r/workspaces/${WS}/deploy`, {
|
|
78
|
+
method: 'POST',
|
|
79
|
+
headers: { 'Content-Type': BEAST2_CONTENT_TYPE },
|
|
80
|
+
body: encodeBeast2For(WorkspaceDeployRequestType)({
|
|
81
|
+
packageRef, schema: variant('migrate', null), allowDropRecords: false, plan: false,
|
|
82
|
+
}),
|
|
83
|
+
});
|
|
84
|
+
return decodeStarted(new Uint8Array(await response.arrayBuffer()));
|
|
85
|
+
}
|
|
86
|
+
/** A deploy job's status. */
|
|
87
|
+
async function poll(app, id) {
|
|
88
|
+
const response = await app.request(`/api/repos/r/workspaces/${WS}/deploy/${id}`);
|
|
89
|
+
const answer = decodeStatus(new Uint8Array(await response.arrayBuffer()));
|
|
90
|
+
if (answer.type !== 'success')
|
|
91
|
+
assert.fail(`the poll was refused: ${answer.value.type}`);
|
|
92
|
+
return answer.value;
|
|
93
|
+
}
|
|
94
|
+
/** What holds the workspace, and how far it says it has got; null when nothing does. */
|
|
95
|
+
async function lockStatus(app) {
|
|
96
|
+
const response = await app.request(`/api/repos/r/workspaces/${WS}/lock`);
|
|
97
|
+
const answer = decodeLock(new Uint8Array(await response.arrayBuffer()));
|
|
98
|
+
if (answer.type !== 'success')
|
|
99
|
+
assert.fail(`the lock was refused: ${answer.value.type}`);
|
|
100
|
+
return answer.value.type === 'some' ? answer.value.value : null;
|
|
101
|
+
}
|
|
102
|
+
/** A deploy job's status once it has finished. */
|
|
103
|
+
async function finished(app, id) {
|
|
104
|
+
for (;;) {
|
|
105
|
+
const status = await poll(app, id);
|
|
106
|
+
if (status.type !== 'processing')
|
|
107
|
+
return status;
|
|
108
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
describe('deploy route', () => {
|
|
112
|
+
let storage;
|
|
113
|
+
let emptyIndex;
|
|
114
|
+
beforeEach(async () => {
|
|
115
|
+
storage = new InMemoryStorage();
|
|
116
|
+
emptyIndex = await seedIndexedPackage(storage);
|
|
117
|
+
});
|
|
118
|
+
it("runs a deploy as a job, which builds a record's indexes on the runner its store was given", async () => {
|
|
119
|
+
const runner = new MockTaskRunner();
|
|
120
|
+
runner.setDefaultResult({ state: 'success', cached: false, outputHash: emptyIndex });
|
|
121
|
+
const app = routes(storage, () => runner);
|
|
122
|
+
const started = await start(app);
|
|
123
|
+
if (started.type !== 'success')
|
|
124
|
+
assert.fail(`the deploy was refused: ${started.value.type}`);
|
|
125
|
+
const status = await finished(app, started.value.id);
|
|
126
|
+
if (status.type !== 'completed')
|
|
127
|
+
assert.fail(`the deploy did not complete: ${status.type}`);
|
|
128
|
+
assert.deepEqual(status.value.records.map((plan) => [plan.record, plan.action.type]), [['records/plans', 'mint']]);
|
|
129
|
+
assert.deepEqual(status.value.indexes.map((plan) => [plan.record, plan.index, plan.action.type]), [['records/plans', 'by_value', 'build']]);
|
|
130
|
+
assert.ok(runner.getCalls().length > 0, 'the index was built on the runner the store was given');
|
|
131
|
+
const ref = await storage.datasets.read(REPO, WS, 'records/plans');
|
|
132
|
+
assert.ok(ref && ref.type === 'value');
|
|
133
|
+
assert.deepEqual([...(await readRecordState(storage, REPO, ref.value.hash)).indexes.keys()], ['by_value']);
|
|
134
|
+
});
|
|
135
|
+
it('answers before the deploy has finished, and the job reports it once it has', async () => {
|
|
136
|
+
// A build that holds until released: a deploy over a large record, which
|
|
137
|
+
// outlasts the request that starts it.
|
|
138
|
+
let release;
|
|
139
|
+
const released = new Promise((resolve) => { release = resolve; });
|
|
140
|
+
const runner = {
|
|
141
|
+
execute: async () => {
|
|
142
|
+
await released;
|
|
143
|
+
return { state: 'success', cached: false, executionId: 'held', outputHash: emptyIndex };
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
const app = routes(storage, () => runner);
|
|
147
|
+
const started = await start(app);
|
|
148
|
+
if (started.type !== 'success')
|
|
149
|
+
assert.fail(`the deploy was refused: ${started.value.type}`);
|
|
150
|
+
assert.equal((await poll(app, started.value.id)).type, 'processing');
|
|
151
|
+
assert.equal(await workspaceGetState(storage, REPO, WS), null, 'nothing is deployed while the job runs');
|
|
152
|
+
release();
|
|
153
|
+
assert.equal((await finished(app, started.value.id)).type, 'completed');
|
|
154
|
+
assert.equal((await workspaceGetState(storage, REPO, WS))?.packageName, 'planrecords');
|
|
155
|
+
});
|
|
156
|
+
it('says how far it has got while it runs, in the job and through the workspace lock', async () => {
|
|
157
|
+
// A build that holds until released, and says when it has started.
|
|
158
|
+
let release;
|
|
159
|
+
const released = new Promise((resolve) => { release = resolve; });
|
|
160
|
+
let begin;
|
|
161
|
+
const building = new Promise((resolve) => { begin = resolve; });
|
|
162
|
+
const runner = {
|
|
163
|
+
execute: async () => {
|
|
164
|
+
begin();
|
|
165
|
+
await released;
|
|
166
|
+
return { state: 'success', cached: false, executionId: 'held', outputHash: emptyIndex };
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
const app = routes(storage, () => runner);
|
|
170
|
+
const started = await start(app);
|
|
171
|
+
if (started.type !== 'success')
|
|
172
|
+
assert.fail(`the deploy was refused: ${started.value.type}`);
|
|
173
|
+
await building;
|
|
174
|
+
// The deploy is building the record's index: the job says so.
|
|
175
|
+
const status = await poll(app, started.value.id);
|
|
176
|
+
if (status.type !== 'processing' || status.value.type !== 'deploying' || status.value.value.type !== 'some') {
|
|
177
|
+
assert.fail(`the job says nothing of how far it has got: ${status.type}`);
|
|
178
|
+
}
|
|
179
|
+
const progress = status.value.value.value;
|
|
180
|
+
assert.deepEqual(progress.package, { name: 'planrecords', version: '1.0.0' });
|
|
181
|
+
assert.deepEqual(progress.files, [], 'a server leaves a file source to the client, so it takes in none');
|
|
182
|
+
assert.deepEqual(progress.records, [{
|
|
183
|
+
plan: { record: 'records/plans', action: variant('mint', null) },
|
|
184
|
+
indexes: ['by_value'],
|
|
185
|
+
step: variant('indexing', { index: 'by_value', build: 1n, builds: 1n }),
|
|
186
|
+
}]);
|
|
187
|
+
// So does its lock, for a watcher that knows no job: a first deploy has no
|
|
188
|
+
// status to read.
|
|
189
|
+
const lock = await lockStatus(app);
|
|
190
|
+
assert.equal(lock?.state.operation.type, 'deployment');
|
|
191
|
+
assert.deepEqual(lock?.progress, some(variant('deployment', progress)));
|
|
192
|
+
release();
|
|
193
|
+
assert.equal((await finished(app, started.value.id)).type, 'completed');
|
|
194
|
+
assert.equal(await lockStatus(app), null, 'nothing holds the workspace once the deploy has finished');
|
|
195
|
+
});
|
|
196
|
+
it('without a runner, fails a deploy that owes an index build, and writes nothing', async () => {
|
|
197
|
+
const app = routes(storage);
|
|
198
|
+
const started = await start(app);
|
|
199
|
+
if (started.type !== 'success')
|
|
200
|
+
assert.fail(`the deploy was refused: ${started.value.type}`);
|
|
201
|
+
const status = await finished(app, started.value.id);
|
|
202
|
+
if (status.type !== 'failed')
|
|
203
|
+
assert.fail(`the deploy did not fail: ${status.type}`);
|
|
204
|
+
assert.match(status.value.message, /given no task runner/);
|
|
205
|
+
assert.equal(await workspaceGetState(storage, REPO, WS), null, 'the workspace is still undeployed');
|
|
206
|
+
assert.deepEqual(await storage.datasets.list(REPO, WS), [], 'no ref was written');
|
|
207
|
+
});
|
|
208
|
+
it('refuses a package the repository does not hold at once, starting no job', async () => {
|
|
209
|
+
const started = await start(routes(storage), 'planrecords@9.9.9');
|
|
210
|
+
assert.equal(started.type, 'error');
|
|
211
|
+
assert.equal(started.value.type, 'package_not_found');
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
//# sourceMappingURL=workspaces.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.spec.js","sourceRoot":"","sources":["../../../src/handlers/workspaces.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export { createServer, type ServerConfig, type Server } from './server.js';
|
|
12
12
|
export { ApiTypes } from './types.js';
|
|
13
|
+
export { resolveBudget, type BudgetSettings } from '@elaraai/e3-core';
|
|
13
14
|
export * from './handlers/index.js';
|
|
15
|
+
export * from './routes/index.js';
|
|
14
16
|
export { createAuthMiddleware, type AuthConfig } from './middleware/auth.js';
|
|
17
|
+
export { createRepositoryGate, createSingleRepositoryGate } from './middleware/repository.js';
|
|
15
18
|
export { sendSuccess, sendError, sendSuccessWithStatus, decodeBeast2, decodeBody } from './beast2.js';
|
|
16
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGtE,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,oBAAoB,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAG7E,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAG9F,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|