@elaraai/e3-api-server 1.0.81 → 1.0.83
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 +75 -8
- package/dist/src/auth/keys.d.ts +3 -0
- package/dist/src/auth/keys.d.ts.map +1 -1
- package/dist/src/auth/keys.js.map +1 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +6 -1
- package/dist/src/errors.js.map +1 -1
- package/dist/src/handlers/dataflow.d.ts +6 -3
- package/dist/src/handlers/dataflow.d.ts.map +1 -1
- package/dist/src/handlers/dataflow.js +8 -8
- package/dist/src/handlers/dataflow.js.map +1 -1
- package/dist/src/handlers/dataflow.spec.js +30 -0
- package/dist/src/handlers/dataflow.spec.js.map +1 -1
- package/dist/src/handlers/functions.d.ts +88 -8
- package/dist/src/handlers/functions.d.ts.map +1 -1
- package/dist/src/handlers/functions.js +204 -145
- package/dist/src/handlers/functions.js.map +1 -1
- package/dist/src/handlers/functions.spec.js +153 -29
- package/dist/src/handlers/functions.spec.js.map +1 -1
- package/dist/src/handlers/index.d.ts +1 -1
- package/dist/src/handlers/index.d.ts.map +1 -1
- package/dist/src/handlers/index.js +1 -1
- package/dist/src/handlers/index.js.map +1 -1
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/middleware/repository.d.ts +40 -1
- package/dist/src/middleware/repository.d.ts.map +1 -1
- package/dist/src/middleware/repository.js +42 -4
- package/dist/src/middleware/repository.js.map +1 -1
- package/dist/src/middleware/repository.spec.d.ts +6 -0
- package/dist/src/middleware/repository.spec.d.ts.map +1 -0
- package/dist/src/middleware/repository.spec.js +118 -0
- package/dist/src/middleware/repository.spec.js.map +1 -0
- package/dist/src/routes/functions.d.ts +94 -13
- package/dist/src/routes/functions.d.ts.map +1 -1
- package/dist/src/routes/functions.js +116 -30
- package/dist/src/routes/functions.js.map +1 -1
- package/dist/src/routes/index.d.ts +1 -1
- package/dist/src/routes/index.d.ts.map +1 -1
- package/dist/src/routes/index.js +1 -1
- package/dist/src/routes/index.js.map +1 -1
- package/dist/src/routes/package-transfer.d.ts +5 -0
- package/dist/src/routes/package-transfer.d.ts.map +1 -1
- package/dist/src/routes/package-transfer.js +19 -6
- package/dist/src/routes/package-transfer.js.map +1 -1
- package/dist/src/routes/transfer.d.ts +9 -6
- package/dist/src/routes/transfer.d.ts.map +1 -1
- package/dist/src/routes/transfer.js +23 -14
- package/dist/src/routes/transfer.js.map +1 -1
- package/dist/src/routes/transfer.spec.d.ts +6 -0
- package/dist/src/routes/transfer.spec.d.ts.map +1 -0
- package/dist/src/routes/transfer.spec.js +91 -0
- package/dist/src/routes/transfer.spec.js.map +1 -0
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +13 -6
- package/dist/src/server.js.map +1 -1
- package/dist/src/types.d.ts +132 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +10 -2
- package/dist/src/types.js.map +1 -1
- package/package.json +7 -4
|
@@ -9,9 +9,19 @@ import { packageResolve, PackageNotFoundError } from '@elaraai/e3-core';
|
|
|
9
9
|
import { PackageTransferInitRequestType, PackageTransferInitResponseType, PackageJobResponseType, PackageImportStatusType, PackageExportStatusType, } from '@elaraai/e3-types';
|
|
10
10
|
import { decodeBody, sendSuccess, sendError } from '../beast2.js';
|
|
11
11
|
import { errorToVariant } from '../errors.js';
|
|
12
|
+
/** How a package job route answers for a job the repository it addresses did
|
|
13
|
+
* not start: as for no job at all, since a job belongs to its repository. */
|
|
14
|
+
function noJob(repo, kind, id) {
|
|
15
|
+
return `repository '${repo}' has no ${kind} job '${id}'`;
|
|
16
|
+
}
|
|
12
17
|
/**
|
|
13
18
|
* Create package transfer routes.
|
|
14
19
|
*
|
|
20
|
+
* A job belongs to the repository that started it: each route that names a job
|
|
21
|
+
* by its id answers only through that repository, and through any other as it
|
|
22
|
+
* answers for a job that does not exist, so a request authorized for one
|
|
23
|
+
* repository never reaches another's.
|
|
24
|
+
*
|
|
15
25
|
* Returns two Hono apps:
|
|
16
26
|
* - `repoApi`: Authenticated routes at repo level — mount at /api/repos/:repo
|
|
17
27
|
* (POST /import, POST /import/:id, GET /import/:id, GET /export/:id)
|
|
@@ -52,10 +62,11 @@ export function createPackageTransferRoutes(storage, getRepoPath, transferBacken
|
|
|
52
62
|
});
|
|
53
63
|
// POST /api/repos/:repo/import/:id — Trigger import processing
|
|
54
64
|
repoApi.post('/import/:id', async (c) => {
|
|
65
|
+
const repo = c.req.param('repo');
|
|
55
66
|
const id = c.req.param('id');
|
|
56
67
|
const record = await transferBackend.packageImport.get(id);
|
|
57
|
-
if (!record) {
|
|
58
|
-
return sendError(PackageJobResponseType, variant('internal', { message: '
|
|
68
|
+
if (!record || record.repo !== repo) {
|
|
69
|
+
return sendError(PackageJobResponseType, variant('internal', { message: noJob(repo, 'import', id) }));
|
|
59
70
|
}
|
|
60
71
|
if (record.status.type === 'completed' || record.status.type === 'failed') {
|
|
61
72
|
return sendSuccess(PackageJobResponseType, { id });
|
|
@@ -70,10 +81,11 @@ export function createPackageTransferRoutes(storage, getRepoPath, transferBacken
|
|
|
70
81
|
});
|
|
71
82
|
// GET /api/repos/:repo/import/:id — Poll import status
|
|
72
83
|
repoApi.get('/import/:id', async (c) => {
|
|
84
|
+
const repo = c.req.param('repo');
|
|
73
85
|
const id = c.req.param('id');
|
|
74
86
|
const record = await transferBackend.packageImport.get(id);
|
|
75
|
-
if (!record) {
|
|
76
|
-
return sendError(PackageImportStatusType, variant('internal', { message: 'import
|
|
87
|
+
if (!record || record.repo !== repo) {
|
|
88
|
+
return sendError(PackageImportStatusType, variant('internal', { message: noJob(repo, 'import', id) }));
|
|
77
89
|
}
|
|
78
90
|
const status = record.status;
|
|
79
91
|
if (status.type === 'processing') {
|
|
@@ -92,10 +104,11 @@ export function createPackageTransferRoutes(storage, getRepoPath, transferBacken
|
|
|
92
104
|
});
|
|
93
105
|
// GET /api/repos/:repo/export/:id — Poll export status
|
|
94
106
|
repoApi.get('/export/:id', async (c) => {
|
|
107
|
+
const repo = c.req.param('repo');
|
|
95
108
|
const id = c.req.param('id');
|
|
96
109
|
const record = await transferBackend.packageExport.get(id);
|
|
97
|
-
if (!record) {
|
|
98
|
-
return sendError(PackageExportStatusType, variant('internal', { message: 'export
|
|
110
|
+
if (!record || record.repo !== repo) {
|
|
111
|
+
return sendError(PackageExportStatusType, variant('internal', { message: noJob(repo, 'export', id) }));
|
|
99
112
|
}
|
|
100
113
|
const status = record.status;
|
|
101
114
|
if (status.type === 'processing') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-transfer.js","sourceRoot":"","sources":["../../../src/routes/package-transfer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAC/B,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"package-transfer.js","sourceRoot":"","sources":["../../../src/routes/package-transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Hono } from 'hono';
|
|
6
6
|
import { type StorageBackend, type TransferBackend } from '@elaraai/e3-core';
|
|
7
|
-
import type { GetRunner } from './functions.js';
|
|
8
7
|
/** Options for {@link createTransferRoutes}. */
|
|
9
8
|
export interface TransferRouteOptions {
|
|
10
9
|
/**
|
|
@@ -33,16 +32,20 @@ export interface TransferRouteOptions {
|
|
|
33
32
|
* whichever instance answers — so verifying a delivery of many gigabytes never
|
|
34
33
|
* holds one request open for as long as its SHA-256 takes.
|
|
35
34
|
*
|
|
36
|
-
* The init
|
|
37
|
-
*
|
|
35
|
+
* The init answers at once. Its dedup adopts only what takes nothing in: the
|
|
36
|
+
* manifest the adoption memo names for the delivery, or an object of a value
|
|
37
|
+
* that is not a collection. A collection the store holds whole, and the memo
|
|
38
|
+
* does not name — its intake still running, or stopped — is uploaded and
|
|
39
|
+
* committed as any other, and the commit takes it in where commits run,
|
|
40
|
+
* resuming from the pieces an earlier intake finished.
|
|
38
41
|
*
|
|
39
42
|
* @param storage - Storage backend
|
|
40
43
|
* @param getRepoPath - The repository a request names, as a path
|
|
41
|
-
* @param transferBackend - The uploads, and where their commits run
|
|
42
|
-
*
|
|
44
|
+
* @param transferBackend - The uploads, and where their commits run: the
|
|
45
|
+
* upload store takes a delivery in, on the runner it was given
|
|
43
46
|
* @param options - How long a commit is waited for before it answers
|
|
44
47
|
*/
|
|
45
|
-
export declare function createTransferRoutes(storage: StorageBackend, getRepoPath: (repo: string) => string, transferBackend: TransferBackend,
|
|
48
|
+
export declare function createTransferRoutes(storage: StorageBackend, getRepoPath: (repo: string) => string, transferBackend: TransferBackend, options?: TransferRouteOptions): {
|
|
46
49
|
api: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
47
50
|
};
|
|
48
51
|
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../../src/routes/transfer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,OAAO,
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../../src/routes/transfer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAU1B,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA2DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACrC,eAAe,EAAE,eAAe,EAChC,OAAO,GAAE,oBAAyB;;EAyLnC"}
|
|
@@ -6,7 +6,7 @@ import { Hono } from 'hono';
|
|
|
6
6
|
import { randomUUID } from 'node:crypto';
|
|
7
7
|
import { none, variant } from '@elaraai/east';
|
|
8
8
|
import { E3_RELEASE, TRANSFER_PROTOCOL_VERSION, transferPartCount, urlPathToTreePath } from '@elaraai/e3-types';
|
|
9
|
-
import {
|
|
9
|
+
import { datasetAdoptKnown, } from '@elaraai/e3-core';
|
|
10
10
|
import { decodeBody, sendSuccess, sendError } from '../beast2.js';
|
|
11
11
|
import { errorToVariant } from '../errors.js';
|
|
12
12
|
import { TransferUploadRequestType, TransferUploadResponseType, TransferPartResponseType, TransferDoneResponseType, } from '../types.js';
|
|
@@ -84,16 +84,20 @@ function sendCommitStatus(transfer, status) {
|
|
|
84
84
|
* whichever instance answers — so verifying a delivery of many gigabytes never
|
|
85
85
|
* holds one request open for as long as its SHA-256 takes.
|
|
86
86
|
*
|
|
87
|
-
* The init
|
|
88
|
-
*
|
|
87
|
+
* The init answers at once. Its dedup adopts only what takes nothing in: the
|
|
88
|
+
* manifest the adoption memo names for the delivery, or an object of a value
|
|
89
|
+
* that is not a collection. A collection the store holds whole, and the memo
|
|
90
|
+
* does not name — its intake still running, or stopped — is uploaded and
|
|
91
|
+
* committed as any other, and the commit takes it in where commits run,
|
|
92
|
+
* resuming from the pieces an earlier intake finished.
|
|
89
93
|
*
|
|
90
94
|
* @param storage - Storage backend
|
|
91
95
|
* @param getRepoPath - The repository a request names, as a path
|
|
92
|
-
* @param transferBackend - The uploads, and where their commits run
|
|
93
|
-
*
|
|
96
|
+
* @param transferBackend - The uploads, and where their commits run: the
|
|
97
|
+
* upload store takes a delivery in, on the runner it was given
|
|
94
98
|
* @param options - How long a commit is waited for before it answers
|
|
95
99
|
*/
|
|
96
|
-
export function createTransferRoutes(storage, getRepoPath, transferBackend,
|
|
100
|
+
export function createTransferRoutes(storage, getRepoPath, transferBackend, options = {}) {
|
|
97
101
|
const api = new Hono();
|
|
98
102
|
const commitWaitMs = options.commitWaitMs ?? DEFAULT_COMMIT_WAIT_MS;
|
|
99
103
|
const uploads = transferBackend.datasetUpload;
|
|
@@ -175,14 +179,19 @@ export function createTransferRoutes(storage, getRepoPath, transferBackend, getR
|
|
|
175
179
|
const repoPath = getRepoPath(repo);
|
|
176
180
|
const pathStr = extractDatasetPath(c, '/upload');
|
|
177
181
|
const { hash, size } = await decodeBody(c, TransferUploadRequestType);
|
|
178
|
-
// Dedup — the store knows these bytes
|
|
179
|
-
// into or as an object
|
|
180
|
-
// for another dataset, of another type, so
|
|
181
|
-
// is the only door that skips the commit.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
182
|
+
// Dedup — the store knows these bytes as the manifest they were split
|
|
183
|
+
// into, or as an object of a value that is no collection, so no upload is
|
|
184
|
+
// needed. It may have stored them for another dataset, of another type, so
|
|
185
|
+
// the pairing is checked here: it is the only door that skips the commit.
|
|
186
|
+
// It takes nothing in, so the init answers at once: a collection the store
|
|
187
|
+
// holds whole is left for the commit.
|
|
188
|
+
try {
|
|
189
|
+
if (await datasetAdoptKnown(storage, repoPath, ws, urlPathToTreePath(pathStr), hash) !== null) {
|
|
190
|
+
return sendSuccess(TransferUploadResponseType, variant('completed', null));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
return sendError(TransferUploadResponseType, errorToVariant(err));
|
|
186
195
|
}
|
|
187
196
|
// The upload's record, and its plan as parts, which the store makes ready
|
|
188
197
|
// to stage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../src/routes/transfer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChH,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../../src/routes/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.spec.d.ts","sourceRoot":"","sources":["../../../src/routes/transfer.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The dataset transfer routes: an init answers at once, and takes nothing in.
|
|
7
|
+
* A collection the store holds whole, which the adoption memo does not name, is
|
|
8
|
+
* taken in by the upload's commit, where commits run.
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it } from 'node:test';
|
|
11
|
+
import assert from 'node:assert/strict';
|
|
12
|
+
import { Hono } from 'hono';
|
|
13
|
+
import { ArrayType, IntegerType, decodeBeast2For, encodeBeast2For, encodeBeast2PagedFor, none, some, toEastTypeValue, variant } from '@elaraai/east';
|
|
14
|
+
import { InMemoryTransferBackend, LocalStorage, MockTaskRunner, datasetWrite, storeDatasetBytes, storeDatasetFile, } from '@elaraai/e3-core';
|
|
15
|
+
import { createTestRepo, removeTestRepo } from '@elaraai/e3-core/test';
|
|
16
|
+
import { BEAST2_CONTENT_TYPE, E3_RELEASE, PackageObjectType, TRANSFER_PROTOCOL_VERSION, WorkspaceRecordType, transferPartCount, } from '@elaraai/e3-types';
|
|
17
|
+
import { createDataEndpoints } from './data.js';
|
|
18
|
+
import { createTransferRoutes } from './transfer.js';
|
|
19
|
+
import { ResponseType, TransferDoneResponseType, TransferPartResponseType, TransferUploadRequestType, TransferUploadResponseType, } from '../types.js';
|
|
20
|
+
const RowsType = ArrayType(IntegerType);
|
|
21
|
+
describe('dataset transfer routes', () => {
|
|
22
|
+
it('answer an init whose bytes the store holds whole as a collection at once, taking nothing in, and take the delivery in at its commit', async (t) => {
|
|
23
|
+
const repo = createTestRepo();
|
|
24
|
+
t.after(() => removeTestRepo(repo));
|
|
25
|
+
const storage = new LocalStorage();
|
|
26
|
+
// A workspace whose one input is a collection.
|
|
27
|
+
const pkg = await storage.objects.write(repo, encodeBeast2For(PackageObjectType)({
|
|
28
|
+
tasks: new Map(),
|
|
29
|
+
data: {
|
|
30
|
+
structure: variant('struct', new Map([['inputs', variant('struct', new Map([
|
|
31
|
+
['rows', variant('value', { type: toEastTypeValue(RowsType), writable: true })],
|
|
32
|
+
]))]])),
|
|
33
|
+
refs: new Map([['inputs/rows', variant('unassigned', null)]]),
|
|
34
|
+
},
|
|
35
|
+
functions: new Map(), records: new Map(), sources: new Map(),
|
|
36
|
+
}));
|
|
37
|
+
await storage.refs.workspaceWrite(repo, 'ws', encodeBeast2For(WorkspaceRecordType)(some({
|
|
38
|
+
packageName: 'rows', packageVersion: '1.0.0', packageHash: pkg, deployedAt: new Date(), currentRunId: none,
|
|
39
|
+
})));
|
|
40
|
+
await storage.datasets.write(repo, 'ws', 'inputs/rows', variant('unassigned', null));
|
|
41
|
+
// The delivery's bytes are in the store whole, as an object, and the memo
|
|
42
|
+
// names nothing for them: as a store that stages an upload as an object
|
|
43
|
+
// leaves them while that object's intake runs, or after it failed.
|
|
44
|
+
const values = Array.from({ length: 5_000 }, (_, i) => BigInt(i));
|
|
45
|
+
const delivery = encodeBeast2PagedFor(RowsType)(values);
|
|
46
|
+
const hash = await storage.objects.write(repo, delivery);
|
|
47
|
+
// A runner's intake, which stores the delivery's rows as the Writer writes
|
|
48
|
+
// them: through the store's door.
|
|
49
|
+
const intakes = [];
|
|
50
|
+
const runner = new MockTaskRunner();
|
|
51
|
+
runner.setIntakeResult(async (store, spec) => {
|
|
52
|
+
intakes.push(spec);
|
|
53
|
+
const stored = 'file' in spec.source
|
|
54
|
+
? await storeDatasetFile(store, repo, spec.source.file)
|
|
55
|
+
: await storeDatasetBytes(store, repo, await store.objects.read(repo, spec.source.object));
|
|
56
|
+
return { hash: stored, runner: 'test' };
|
|
57
|
+
});
|
|
58
|
+
const transferBackend = new InMemoryTransferBackend({ baseUrl: 'http://server', storage, getRepoPath: () => repo, getRunner: () => runner });
|
|
59
|
+
const app = new Hono();
|
|
60
|
+
app.route('/api/uploads', createDataEndpoints(transferBackend, storage, () => repo).uploads);
|
|
61
|
+
app.route('/api/repos/:repo/workspaces/:ws/datasets', createTransferRoutes(storage, () => repo, transferBackend).api);
|
|
62
|
+
const protocol = `protocol=${TRANSFER_PROTOCOL_VERSION}&release=${E3_RELEASE}`;
|
|
63
|
+
const at = '/api/repos/r/workspaces/ws/datasets/inputs/rows/upload';
|
|
64
|
+
const init = await app.request(`${at}?${protocol}`, {
|
|
65
|
+
method: 'POST',
|
|
66
|
+
headers: { 'Content-Type': BEAST2_CONTENT_TYPE },
|
|
67
|
+
body: encodeBeast2For(TransferUploadRequestType)({ hash, size: BigInt(delivery.byteLength) }),
|
|
68
|
+
});
|
|
69
|
+
const planned = decodeBeast2For(ResponseType(TransferUploadResponseType))(new Uint8Array(await init.arrayBuffer()));
|
|
70
|
+
if (planned.type !== 'success' || planned.value.type !== 'upload_parts')
|
|
71
|
+
assert.fail(`the init answered ${JSON.stringify(planned.type)}, not a plan`);
|
|
72
|
+
assert.deepEqual(intakes, [], 'the init took nothing in');
|
|
73
|
+
assert.equal((await storage.datasets.read(repo, 'ws', 'inputs/rows'))?.type, 'unassigned');
|
|
74
|
+
// The client sends its bytes, and commits.
|
|
75
|
+
const { id, partBytes } = planned.value.value;
|
|
76
|
+
for (let part = 1; part <= transferPartCount(BigInt(delivery.byteLength), partBytes); part++) {
|
|
77
|
+
const target = decodeBeast2For(ResponseType(TransferPartResponseType))(new Uint8Array(await (await app.request(`${at}/${id}/parts/${part}`)).arrayBuffer()));
|
|
78
|
+
if (target.type !== 'success')
|
|
79
|
+
assert.fail('no part target');
|
|
80
|
+
const from = Number(partBytes) * (part - 1);
|
|
81
|
+
const sent = await app.request(target.value.url, { method: 'PUT', body: delivery.subarray(from, Math.min(delivery.byteLength, from + Number(partBytes))) });
|
|
82
|
+
assert.equal(sent.status, 200);
|
|
83
|
+
}
|
|
84
|
+
const committed = decodeBeast2For(ResponseType(TransferDoneResponseType))(new Uint8Array(await (await app.request(`${at}/${id}?${protocol}`, { method: 'POST' })).arrayBuffer()));
|
|
85
|
+
assert.deepEqual(committed, variant('success', variant('completed', null)));
|
|
86
|
+
assert.ok(intakes.length > 0, 'the commit took the delivery in');
|
|
87
|
+
const ref = await storage.datasets.read(repo, 'ws', 'inputs/rows');
|
|
88
|
+
assert.ok(ref?.type === 'value' && ref.value.hash === await datasetWrite(storage, repo, values, RowsType), 'as the value path stores its value');
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=transfer.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.spec.js","sourceRoot":"","sources":["../../../src/routes/transfer.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,MAAM,EACP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAA+C,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAyC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiBzF,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,mEAAmE;IACnE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;iFAC6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;0BAEsB;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;mBAGe;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;wEAKoE;IACpE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;CAClC;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;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,MAAM,EACP,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAA+C,MAAM,kBAAkB,CAAC;AACpG,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAyC,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAiBzF,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,mEAAmE;IACnE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;iFAC6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;0BAEsB;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;mBAGe;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;wEAKoE;IACpE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;CAClC;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;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAkPxE"}
|
package/dist/src/server.js
CHANGED
|
@@ -22,7 +22,7 @@ import { createObjectRoutes } from './routes/objects.js';
|
|
|
22
22
|
import { createTransferRoutes } from './routes/transfer.js';
|
|
23
23
|
import { createPackageTransferRoutes } from './routes/package-transfer.js';
|
|
24
24
|
import { createDataEndpoints } from './routes/data.js';
|
|
25
|
-
import { createPackageFunctionRoutes, createWorkspaceFunctionRoutes, createOneShotRoutes } from './routes/functions.js';
|
|
25
|
+
import { createPackageFunctionRoutes, createWorkspaceFunctionRoutes, createOneShotRoutes, oneShotAccessByRoles } from './routes/functions.js';
|
|
26
26
|
import { createWorkspaceRecordRoutes } from './routes/records.js';
|
|
27
27
|
import { localDataflow } from './local-dataflow.js';
|
|
28
28
|
/**
|
|
@@ -129,7 +129,7 @@ export async function createServer(config) {
|
|
|
129
129
|
// Must be mounted BEFORE auth middleware so they bypass JWT validation.
|
|
130
130
|
// In cloud deployments these URLs are S3 presigned URLs that reject auth headers.
|
|
131
131
|
const pkgTransfer = createPackageTransferRoutes(storage, getRepoPath, transferBackend);
|
|
132
|
-
const dsTransfer = createTransferRoutes(storage, getRepoPath, transferBackend,
|
|
132
|
+
const dsTransfer = createTransferRoutes(storage, getRepoPath, transferBackend, {
|
|
133
133
|
...(transferCommitWaitMs !== undefined && { commitWaitMs: transferCommitWaitMs }),
|
|
134
134
|
});
|
|
135
135
|
const dataEndpoints = createDataEndpoints(transferBackend, storage, getRepoPath);
|
|
@@ -172,8 +172,14 @@ export async function createServer(config) {
|
|
|
172
172
|
app.route('/api/repos/:repo/packages', pkgTransfer.pkgApi);
|
|
173
173
|
// Package routes: /api/repos/:repo/packages/*
|
|
174
174
|
app.route('/api/repos/:repo/packages', createPackageRoutes(storage, getRepoPath));
|
|
175
|
+
// Who may run what a caller supplies: with auth, an elevated role runs any
|
|
176
|
+
// one-shot, and gives a function's runner any platform package, and any
|
|
177
|
+
// other caller a platform-free one-shot, and a function on its own runner;
|
|
178
|
+
// without, the server is single-tenant — its author is its operator — and
|
|
179
|
+
// runs any.
|
|
180
|
+
const access = auth || oidcProvider ? oneShotAccessByRoles() : () => 'any';
|
|
175
181
|
// Package-scoped function routes: /api/repos/:repo/packages/:pkg/:version/functions/*
|
|
176
|
-
app.route('/api/repos/:repo/packages/:pkg/:version/functions', createPackageFunctionRoutes(storage, getRepoPath, getRunner));
|
|
182
|
+
app.route('/api/repos/:repo/packages/:pkg/:version/functions', createPackageFunctionRoutes(storage, getRepoPath, getRunner, { access }));
|
|
177
183
|
// Workspace routes: /api/repos/:repo/workspaces/*
|
|
178
184
|
app.route('/api/repos/:repo/workspaces', createWorkspaceRoutes(storage, getRepoPath, transferBackend, getRunner));
|
|
179
185
|
// Dataset transfer auth routes (init + commit) mount alongside dataset routes
|
|
@@ -185,9 +191,10 @@ export async function createServer(config) {
|
|
|
185
191
|
// Task routes: /api/repos/:repo/workspaces/:ws/tasks/*
|
|
186
192
|
app.route('/api/repos/:repo/workspaces/:ws/tasks', createTaskRoutes(storage, getRepoPath));
|
|
187
193
|
// Workspace-scoped function routes: /api/repos/:repo/workspaces/:ws/functions/*
|
|
188
|
-
app.route('/api/repos/:repo/workspaces/:ws/functions', createWorkspaceFunctionRoutes(storage, getRepoPath, getRunner));
|
|
189
|
-
// One-shot routes
|
|
190
|
-
|
|
194
|
+
app.route('/api/repos/:repo/workspaces/:ws/functions', createWorkspaceFunctionRoutes(storage, getRepoPath, getRunner, { access }));
|
|
195
|
+
// One-shot routes: /api/repos/:repo/workspaces/:ws/one-shot/*, and the split
|
|
196
|
+
// calls launched under the same grant, run as jobs on the transfer backend.
|
|
197
|
+
app.route('/api/repos/:repo/workspaces/:ws/one-shot', createOneShotRoutes(storage, getRepoPath, transferBackend, getRunner, { access }));
|
|
191
198
|
// Workspace-scoped record routes: /api/repos/:repo/workspaces/:ws/records/*
|
|
192
199
|
app.route('/api/repos/:repo/workspaces/:ws/records', createWorkspaceRecordRoutes(storage, getRepoPath, getRunner));
|
|
193
200
|
// Execution/Dataflow routes: /api/repos/:repo/workspaces/:ws/dataflow/*,
|
package/dist/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAmB,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,uBAAuB,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,GAC7H,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAmB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,kBAAkB,EAAsC,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|