@elaraai/e3-api-server 1.0.84 → 1.0.86

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 (153) hide show
  1. package/README.md +88 -11
  2. package/dist/src/errors.d.ts +15 -0
  3. package/dist/src/errors.d.ts.map +1 -1
  4. package/dist/src/errors.js +22 -1
  5. package/dist/src/errors.js.map +1 -1
  6. package/dist/src/handlers/dataflow.d.ts +89 -18
  7. package/dist/src/handlers/dataflow.d.ts.map +1 -1
  8. package/dist/src/handlers/dataflow.js +198 -123
  9. package/dist/src/handlers/dataflow.js.map +1 -1
  10. package/dist/src/handlers/dataflow.spec.js +257 -7
  11. package/dist/src/handlers/dataflow.spec.js.map +1 -1
  12. package/dist/src/handlers/datasets.d.ts +56 -15
  13. package/dist/src/handlers/datasets.d.ts.map +1 -1
  14. package/dist/src/handlers/datasets.js +200 -122
  15. package/dist/src/handlers/datasets.js.map +1 -1
  16. package/dist/src/handlers/datasets.spec.js +92 -2
  17. package/dist/src/handlers/datasets.spec.js.map +1 -1
  18. package/dist/src/handlers/functions.d.ts +11 -2
  19. package/dist/src/handlers/functions.d.ts.map +1 -1
  20. package/dist/src/handlers/functions.js +50 -20
  21. package/dist/src/handlers/functions.js.map +1 -1
  22. package/dist/src/handlers/functions.spec.js +12 -1
  23. package/dist/src/handlers/functions.spec.js.map +1 -1
  24. package/dist/src/handlers/index.d.ts +2 -2
  25. package/dist/src/handlers/index.d.ts.map +1 -1
  26. package/dist/src/handlers/index.js +2 -2
  27. package/dist/src/handlers/index.js.map +1 -1
  28. package/dist/src/handlers/packages.d.ts +1 -1
  29. package/dist/src/handlers/packages.d.ts.map +1 -1
  30. package/dist/src/handlers/packages.js +1 -1
  31. package/dist/src/handlers/packages.js.map +1 -1
  32. package/dist/src/handlers/records.d.ts +27 -7
  33. package/dist/src/handlers/records.d.ts.map +1 -1
  34. package/dist/src/handlers/records.js +36 -16
  35. package/dist/src/handlers/records.js.map +1 -1
  36. package/dist/src/handlers/records.spec.js +160 -26
  37. package/dist/src/handlers/records.spec.js.map +1 -1
  38. package/dist/src/handlers/repository.d.ts +9 -1
  39. package/dist/src/handlers/repository.d.ts.map +1 -1
  40. package/dist/src/handlers/repository.js +14 -5
  41. package/dist/src/handlers/repository.js.map +1 -1
  42. package/dist/src/handlers/tasks.d.ts +18 -6
  43. package/dist/src/handlers/tasks.d.ts.map +1 -1
  44. package/dist/src/handlers/tasks.js +31 -22
  45. package/dist/src/handlers/tasks.js.map +1 -1
  46. package/dist/src/handlers/tasks.spec.js +61 -12
  47. package/dist/src/handlers/tasks.spec.js.map +1 -1
  48. package/dist/src/handlers/workspaces.d.ts +11 -6
  49. package/dist/src/handlers/workspaces.d.ts.map +1 -1
  50. package/dist/src/handlers/workspaces.js +14 -8
  51. package/dist/src/handlers/workspaces.js.map +1 -1
  52. package/dist/src/handlers/workspaces.spec.js +24 -8
  53. package/dist/src/handlers/workspaces.spec.js.map +1 -1
  54. package/dist/src/identity.d.ts +22 -0
  55. package/dist/src/identity.d.ts.map +1 -0
  56. package/dist/src/identity.js +6 -0
  57. package/dist/src/identity.js.map +1 -0
  58. package/dist/src/index.d.ts +1 -0
  59. package/dist/src/index.d.ts.map +1 -1
  60. package/dist/src/index.js +3 -0
  61. package/dist/src/index.js.map +1 -1
  62. package/dist/src/local-dataflow.d.ts +14 -1
  63. package/dist/src/local-dataflow.d.ts.map +1 -1
  64. package/dist/src/local-dataflow.js +12 -7
  65. package/dist/src/local-dataflow.js.map +1 -1
  66. package/dist/src/middleware/auth.d.ts +1 -11
  67. package/dist/src/middleware/auth.d.ts.map +1 -1
  68. package/dist/src/middleware/auth.js.map +1 -1
  69. package/dist/src/middleware/repository.d.ts +1 -1
  70. package/dist/src/middleware/repository.d.ts.map +1 -1
  71. package/dist/src/middleware/repository.js +4 -10
  72. package/dist/src/middleware/repository.js.map +1 -1
  73. package/dist/src/middleware/repository.spec.js +7 -6
  74. package/dist/src/middleware/repository.spec.js.map +1 -1
  75. package/dist/src/portable.d.ts +47 -0
  76. package/dist/src/portable.d.ts.map +1 -0
  77. package/dist/src/portable.js +79 -0
  78. package/dist/src/portable.js.map +1 -0
  79. package/dist/src/portable.spec.d.ts +6 -0
  80. package/dist/src/portable.spec.d.ts.map +1 -0
  81. package/dist/src/portable.spec.js +325 -0
  82. package/dist/src/portable.spec.js.map +1 -0
  83. package/dist/src/routes/dataset-path.d.ts +28 -0
  84. package/dist/src/routes/dataset-path.d.ts.map +1 -0
  85. package/dist/src/routes/dataset-path.js +52 -0
  86. package/dist/src/routes/dataset-path.js.map +1 -0
  87. package/dist/src/routes/datasets.d.ts +7 -1
  88. package/dist/src/routes/datasets.d.ts.map +1 -1
  89. package/dist/src/routes/datasets.js +5 -11
  90. package/dist/src/routes/datasets.js.map +1 -1
  91. package/dist/src/routes/executions.d.ts +4 -2
  92. package/dist/src/routes/executions.d.ts.map +1 -1
  93. package/dist/src/routes/executions.js +31 -10
  94. package/dist/src/routes/executions.js.map +1 -1
  95. package/dist/src/routes/functions.d.ts +16 -8
  96. package/dist/src/routes/functions.d.ts.map +1 -1
  97. package/dist/src/routes/functions.js +21 -11
  98. package/dist/src/routes/functions.js.map +1 -1
  99. package/dist/src/routes/index.d.ts +4 -3
  100. package/dist/src/routes/index.d.ts.map +1 -1
  101. package/dist/src/routes/index.js +1 -0
  102. package/dist/src/routes/index.js.map +1 -1
  103. package/dist/src/routes/objects.d.ts +4 -2
  104. package/dist/src/routes/objects.d.ts.map +1 -1
  105. package/dist/src/routes/objects.js +5 -8
  106. package/dist/src/routes/objects.js.map +1 -1
  107. package/dist/src/routes/package-transfer.d.ts +1 -1
  108. package/dist/src/routes/package-transfer.d.ts.map +1 -1
  109. package/dist/src/routes/package-transfer.js +19 -22
  110. package/dist/src/routes/package-transfer.js.map +1 -1
  111. package/dist/src/routes/packages.d.ts +1 -1
  112. package/dist/src/routes/packages.d.ts.map +1 -1
  113. package/dist/src/routes/query.d.ts +53 -0
  114. package/dist/src/routes/query.d.ts.map +1 -0
  115. package/dist/src/routes/query.js +86 -0
  116. package/dist/src/routes/query.js.map +1 -0
  117. package/dist/src/routes/query.spec.d.ts +6 -0
  118. package/dist/src/routes/query.spec.d.ts.map +1 -0
  119. package/dist/src/routes/query.spec.js +49 -0
  120. package/dist/src/routes/query.spec.js.map +1 -0
  121. package/dist/src/routes/records.d.ts +32 -3
  122. package/dist/src/routes/records.d.ts.map +1 -1
  123. package/dist/src/routes/records.js +34 -7
  124. package/dist/src/routes/records.js.map +1 -1
  125. package/dist/src/routes/repositories.d.ts +1 -1
  126. package/dist/src/routes/repositories.d.ts.map +1 -1
  127. package/dist/src/routes/repository.d.ts +6 -1
  128. package/dist/src/routes/repository.d.ts.map +1 -1
  129. package/dist/src/routes/repository.js +5 -0
  130. package/dist/src/routes/repository.js.map +1 -1
  131. package/dist/src/routes/repository.spec.d.ts +6 -0
  132. package/dist/src/routes/repository.spec.d.ts.map +1 -0
  133. package/dist/src/routes/repository.spec.js +84 -0
  134. package/dist/src/routes/repository.spec.js.map +1 -0
  135. package/dist/src/routes/tasks.d.ts +1 -1
  136. package/dist/src/routes/tasks.d.ts.map +1 -1
  137. package/dist/src/routes/tasks.js +16 -4
  138. package/dist/src/routes/tasks.js.map +1 -1
  139. package/dist/src/routes/transfer.d.ts +1 -1
  140. package/dist/src/routes/transfer.d.ts.map +1 -1
  141. package/dist/src/routes/transfer.js +7 -27
  142. package/dist/src/routes/transfer.js.map +1 -1
  143. package/dist/src/routes/workspaces.d.ts +1 -1
  144. package/dist/src/routes/workspaces.d.ts.map +1 -1
  145. package/dist/src/routes/workspaces.js +34 -22
  146. package/dist/src/routes/workspaces.js.map +1 -1
  147. package/dist/src/server.js +1 -1
  148. package/dist/src/server.js.map +1 -1
  149. package/dist/src/types.d.ts +63 -5
  150. package/dist/src/types.d.ts.map +1 -1
  151. package/dist/src/types.js +7 -5
  152. package/dist/src/types.js.map +1 -1
  153. package/package.json +8 -4
@@ -0,0 +1,325 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * The portable entry (`@elaraai/e3-api-server/portable`): the route factories,
7
+ * the handlers and the repository gate, with nothing of Node.
8
+ *
9
+ * Every module the entry reaches imports only another of them, East, e3's
10
+ * types, e3-core's portable entry and Hono, and names none of Node's globals:
11
+ * the walk e3-core holds its own portable entry to. What the entry exports is
12
+ * the root entry's own, but for the local server, its byte endpoints and auth.
13
+ * And an app mounted from it alone, over e3-core's portable pieces and with an
14
+ * access of its own, answers the dataset, page, dataflow and one-shot routes.
15
+ */
16
+ import { describe, it } from 'node:test';
17
+ import assert from 'node:assert/strict';
18
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
19
+ import { join } from 'node:path';
20
+ import { fileURLToPath } from 'node:url';
21
+ import ts from 'typescript';
22
+ import { Hono } from 'hono';
23
+ import { ArrayType, DictType, East, IntegerType, NullType, SortedMap, StringType, compareFor, decodeBeast2For, encodeBeast2For, encodeEastIR, equalFor, none, printFor, toEastTypeValue, variant, } from '@elaraai/east';
24
+ import { MockTaskRunner } from '@elaraai/e3-core';
25
+ import { InMemoryStateStore, InvalidNameError, LocalOrchestrator, RepoNotFoundError, RepositoryUpgradePendingError, workspaceCreate, workspaceDeploy, } from '@elaraai/e3-core/portable';
26
+ import { InMemoryStorage, PORTABLE_PACKAGES, encodeInSegmentsOf, portableWalker, storeSegmentsOf } from '@elaraai/e3-core/test';
27
+ import { BEAST2_CONTENT_TYPE, PackageObjectType, TASK_OBJECT_KIND, TaskObjectType, dataflowForce, } from '@elaraai/e3-types';
28
+ import * as portable from './portable.js';
29
+ import * as root from './index.js';
30
+ import { DataflowExecutionStateType, DataflowRequestType, ErrorType, ExecuteResultType, OneShotRequestType, ResponseType, } from './types.js';
31
+ /** e3-api-server's sources: the spec runs from `dist/src`. */
32
+ const SRC = fileURLToPath(new URL('../../src/', import.meta.url));
33
+ /** The packages a module of the entry may import: those a module of e3-core's
34
+ * portable entry may, that entry itself, and Hono, which needs no more than
35
+ * the web's own Request and Response. */
36
+ const PACKAGES = new Set([...PORTABLE_PACKAGES, '@elaraai/e3-core/portable', 'hono']);
37
+ /** The walk the entry is held to: e3-core's, over these packages. */
38
+ const portableGraph = portableWalker(ts, PACKAGES);
39
+ /**
40
+ * Reads a source module by its path under `src`, or gives `null` for none.
41
+ *
42
+ * @param planted - Rewrites a module's text, as a change to it would, by its
43
+ * path
44
+ */
45
+ function sources(planted = {}) {
46
+ return (file) => {
47
+ const path = join(SRC, file);
48
+ if (!existsSync(path))
49
+ return null;
50
+ const text = readFileSync(path, 'utf8');
51
+ const plant = planted[file];
52
+ return plant === undefined ? text : plant(text);
53
+ };
54
+ }
55
+ /** The modules of a source directory, but its specs. */
56
+ function modulesOf(dir) {
57
+ return readdirSync(join(SRC, dir))
58
+ .filter((file) => file.endsWith('.ts') && !file.endsWith('.spec.ts') && !file.endsWith('.d.ts'))
59
+ .map((file) => `${dir}/${file}`);
60
+ }
61
+ /** The root entry's exports the portable entry leaves out, and why: each needs
62
+ * Node, or is auth. */
63
+ const ROOT_ONLY = {
64
+ createServer: 'the local server: local storage, runner processes and an HTTP listener',
65
+ resolveBudget: 'a budget of this machine\'s cores and memory',
66
+ createDataEndpoints: 'the local server\'s byte endpoints, which stage uploads and downloads as files in the repository',
67
+ createAuthMiddleware: 'auth: it verifies tokens with node:crypto',
68
+ generateKeyPair: 'auth: the keys the built-in OIDC provider signs with',
69
+ signJwt: 'auth: a token signed with node:crypto',
70
+ };
71
+ describe('the portable entry', () => {
72
+ it('reaches nothing but its own modules, East, e3\'s types, e3-core\'s portable entry and Hono, and names none of Node\'s globals', () => {
73
+ const { modules, faults } = portableGraph('portable.ts', sources());
74
+ assert.deepEqual(faults, [], 'these reach beyond the portable modules: move what needs Node to a module of the root entry');
75
+ const routes = modulesOf('routes').filter((file) => file !== 'routes/data.ts' && file !== 'routes/index.ts');
76
+ for (const carried of [...routes, ...modulesOf('handlers'), 'middleware/repository.ts', 'identity.ts', 'errors.ts', 'beast2.ts', 'types.ts']) {
77
+ assert.ok(modules.includes(carried), `the walk reached ${carried}`);
78
+ }
79
+ for (const left of ['routes/data.ts', 'middleware/auth.ts', 'auth/index.ts', 'auth/keys.ts', 'auth/device.ts', 'server.ts', 'local-dataflow.ts', 'index.ts']) {
80
+ assert.ok(!modules.includes(left), `the walk left ${left} to the root entry`);
81
+ }
82
+ });
83
+ it('fails a planted Node import however far from the entry, a use of Buffer, and e3-core\'s root entry, even for a type', () => {
84
+ const cases = [
85
+ ['a Node builtin, in a handler', { 'handlers/datasets.ts': (text) => `import { randomUUID } from 'node:crypto';\n${text}` },
86
+ ['handlers/datasets.ts:1 imports node:crypto']],
87
+ ['Buffer, in a route', { 'routes/objects.ts': (text) => `export const planted = (text: string) => Buffer.from(text);\n${text}` },
88
+ ['routes/objects.ts:1 uses Buffer']],
89
+ ['e3-core\'s root entry, for a type', { 'routes/executions.ts': (text) => `import type { Budget } from '@elaraai/e3-core';\n${text}` },
90
+ ['routes/executions.ts:1 imports @elaraai/e3-core']],
91
+ ];
92
+ for (const [what, planted, faults] of cases) {
93
+ assert.deepEqual(portableGraph('portable.ts', sources(planted)).faults, faults, what);
94
+ }
95
+ // A route that names a type of the auth middleware reaches all of auth's
96
+ // Node: why the identity a host's auth sets is declared apart from it.
97
+ const auth = portableGraph('middleware/auth.ts', sources()).faults;
98
+ assert.ok(auth.some((fault) => /^middleware\/auth\.ts:\d+ imports node:crypto$/.test(fault)), auth.join('\n'));
99
+ assert.deepEqual(portableGraph('portable.ts', sources({ 'routes/records.ts': (text) => `import type { AuthConfig } from '../middleware/auth.js';\n${text}` })).faults, auth);
100
+ });
101
+ it('exports the root entry\'s own functions and objects, but for the local server, its byte endpoints and auth', () => {
102
+ const rooted = root;
103
+ const portables = portable;
104
+ for (const [name, value] of Object.entries(portables)) {
105
+ assert.ok(name in rooted, `${name} is the root entry's too`);
106
+ assert.equal(rooted[name], value, `${name} is the root entry's own`);
107
+ }
108
+ for (const name of Object.keys(rooted)) {
109
+ assert.ok(name in portables || name in ROOT_ONLY, `${name} is the root entry's alone: export it from the portable entry, or say in ROOT_ONLY why it needs Node`);
110
+ }
111
+ for (const name of Object.keys(ROOT_ONLY)) {
112
+ assert.ok(name in rooted && !(name in portables), `${name} is the root entry's alone`);
113
+ }
114
+ });
115
+ it('is the package\'s `./portable` export', () => {
116
+ assert.equal(import.meta.resolve('@elaraai/e3-api-server/portable'), new URL('./portable.js', import.meta.url).href);
117
+ });
118
+ it('answers an e3-core error as every route answers it, for a host\'s own routes: its ErrorType, its status, its JSON, and an owed upgrade as the gate does', async () => {
119
+ const invalid = new InvalidNameError('workspace', 'a/b', 'holds "/", which a file name cannot');
120
+ const variantOf = portable.errorToVariant(invalid);
121
+ const expected = variant('invalid_name', { kind: 'workspace', name: 'a/b', message: invalid.message });
122
+ assert.ok(equalFor(ErrorType)(variantOf, expected), printFor(ErrorType)(variantOf));
123
+ assert.equal(portable.errorToHttpStatus(invalid), 400);
124
+ const missing = portable.sendJsonError(new RepoNotFoundError('gone'));
125
+ assert.equal(missing.status, 404);
126
+ assert.deepEqual(await missing.json(), { error: { type: 'repository_not_found', message: 'Repository \'gone\' not found' } });
127
+ const owed = new RepositoryUpgradePendingError('owing', ['host-layout-2'], null, true);
128
+ const pending = portable.sendUpgradePending(owed);
129
+ assert.equal(pending.status, 503);
130
+ assert.equal(pending.headers.get('Retry-After'), '5');
131
+ assert.deepEqual(await pending.json(), { error: { type: 'repository_upgrade_pending', message: owed.message } });
132
+ });
133
+ });
134
+ describe('an app mounted from the portable entry alone', () => {
135
+ const REPO = 'shop';
136
+ const WS = 'main';
137
+ const RowsType = DictType(StringType, IntegerType);
138
+ const rowsPath = [variant('field', 'inputs'), variant('field', 'rows')];
139
+ const countPath = [variant('field', 'tasks'), variant('field', 'count'), variant('field', 'output')];
140
+ const rows = new SortedMap(Array.from({ length: 1000 }, (_, i) => [`k${String(i).padStart(4, '0')}`, BigInt(i)]), compareFor(StringType));
141
+ const freeRunner = variant('east_node', { platforms: [], decode: variant('lazy', null) });
142
+ /** A deployed workspace: `.inputs.rows`, 1000 rows in segments of 100,
143
+ * `.inputs.limit`, and a task `count` over the rows. */
144
+ async function deployed(storage) {
145
+ await storage.repos.create(REPO);
146
+ const rowsHash = await storeSegmentsOf(storage, REPO, encodeInSegmentsOf(RowsType, 100)(rows));
147
+ const limitHash = await storage.objects.write(REPO, encodeBeast2For(IntegerType)(100n));
148
+ // A stand-in program: the mock runner never reads it.
149
+ const program = await storage.objects.write(REPO, new Uint8Array([0]));
150
+ const countTask = await storage.objects.write(REPO, encodeBeast2For(TaskObjectType)({
151
+ kind: TASK_OBJECT_KIND,
152
+ body: variant('east', { program }),
153
+ runner: freeRunner,
154
+ inputs: [{ path: rowsPath, partition: none }],
155
+ output: { path: countPath, kind: variant('value', null) },
156
+ role: variant('data', null),
157
+ environment: none,
158
+ }));
159
+ const structure = variant('struct', new Map([
160
+ ['inputs', variant('struct', new Map([
161
+ ['limit', variant('value', { type: toEastTypeValue(IntegerType), writable: true })],
162
+ ['rows', variant('value', { type: toEastTypeValue(RowsType), writable: true })],
163
+ ]))],
164
+ ['tasks', variant('struct', new Map([
165
+ ['count', variant('struct', new Map([
166
+ ['output', variant('value', { type: toEastTypeValue(IntegerType), writable: false })],
167
+ ]))],
168
+ ]))],
169
+ ]));
170
+ const pkg = await storage.objects.write(REPO, encodeBeast2For(PackageObjectType)({
171
+ tasks: new Map([['count', countTask]]),
172
+ data: {
173
+ structure,
174
+ refs: new Map([
175
+ ['inputs/limit', variant('value', { hash: limitHash, versions: new Map() })],
176
+ ['inputs/rows', variant('value', { hash: rowsHash, versions: new Map() })],
177
+ ]),
178
+ },
179
+ functions: new Map(),
180
+ records: new Map(),
181
+ sources: new Map(),
182
+ }));
183
+ await storage.refs.packageWrite(REPO, 'shop', '1.0.0', pkg);
184
+ await workspaceCreate(storage, REPO, WS);
185
+ await workspaceDeploy(storage, REPO, WS, 'shop', '1.0.0');
186
+ return { rowsHash, countTask };
187
+ }
188
+ /** A host's transfer backend that none of these requests reaches: reaching
189
+ * any of its stores fails the request. */
190
+ const unreached = new Proxy({}, {
191
+ get: (_backend, store) => {
192
+ throw new Error(`the request reached the transfer backend's ${String(store)}`);
193
+ },
194
+ });
195
+ /**
196
+ * The host: the repositories and their gate, datasets, the dataflow and
197
+ * one-shot, every factory from the portable entry, over an in-memory store,
198
+ * a mock runner, and e3-core's portable orchestrator and state store. Its
199
+ * access is its own: an `X-Caller` of `operator` runs any one-shot, a
200
+ * `reader` a platform-free one, and anyone else none.
201
+ */
202
+ async function host() {
203
+ const storage = new InMemoryStorage();
204
+ const { rowsHash, countTask } = await deployed(storage);
205
+ const runner = new MockTaskRunner();
206
+ const stateStore = new InMemoryStateStore();
207
+ const orchestrator = new LocalOrchestrator(stateStore);
208
+ const getRepoPath = (repo) => repo;
209
+ const access = (c) => {
210
+ const caller = c.req.header('X-Caller');
211
+ return caller === 'operator' ? 'any' : caller === 'reader' ? 'platform_free' : 'none';
212
+ };
213
+ const app = new Hono();
214
+ app.use('/api/repos/:repo/*', portable.createRepositoryGate(storage, getRepoPath));
215
+ app.route('/api/repos', portable.createRepositoriesRoutes(storage));
216
+ app.route('/api/repos/:repo/workspaces/:ws/datasets', portable.createDatasetRoutes(storage, getRepoPath));
217
+ app.route('/api/repos/:repo/workspaces/:ws/dataflow', portable.createExecutionRoutes(storage, getRepoPath, {
218
+ getRunner: () => runner,
219
+ getOrchestrator: () => orchestrator,
220
+ getStateStore: () => stateStore,
221
+ }));
222
+ app.route('/api/repos/:repo/workspaces/:ws/one-shot', portable.createOneShotRoutes(storage, getRepoPath, unreached, () => runner, { access }));
223
+ return { app, storage, runner, rowsHash, countTask };
224
+ }
225
+ const bytes = async (response) => new Uint8Array(await response.arrayBuffer());
226
+ const datasets = `/api/repos/${REPO}/workspaces/${WS}/datasets`;
227
+ it('lists the repositories its store keeps, and its gate refuses one it does not', async () => {
228
+ const { app } = await host();
229
+ const listed = decodeBeast2For(ResponseType(ArrayType(StringType)))(await bytes(await app.request('/api/repos')));
230
+ assert.deepEqual(listed, variant('success', [REPO]));
231
+ const elsewhere = await app.request(`/api/repos/elsewhere/workspaces/${WS}/datasets/inputs/rows`);
232
+ assert.equal(elsewhere.status, 404);
233
+ assert.deepEqual(await elsewhere.json(), { error: 'not_found', message: 'Repository \'elsewhere\' not found' });
234
+ });
235
+ it('reads a dataset whole, a page of it and a key in it, and writes one', async () => {
236
+ const { app, rowsHash } = await host();
237
+ const whole = await app.request(`${datasets}/inputs/rows`);
238
+ assert.equal(whole.status, 200);
239
+ assert.ok(equalFor(RowsType)(decodeBeast2For(RowsType)(await bytes(whole)), rows), 'the rows, whole');
240
+ const page = await app.request(`${datasets}/inputs/rows?page=true&offset=150&limit=100`);
241
+ assert.equal(page.status, 200);
242
+ assert.deepEqual(['X-Content-SHA256', 'X-Total-Elements', 'X-Segment-Count', 'X-Page-Offset', 'X-Page-Count'].map((header) => page.headers.get(header)), [rowsHash, '1000', '10', '150', '100']);
243
+ const expected = new SortedMap([...rows].slice(150, 250), compareFor(StringType));
244
+ assert.ok(equalFor(RowsType)(decodeBeast2For(RowsType)(await bytes(page)), expected), 'rows 150 to 249');
245
+ const found = await app.request(`${datasets}/inputs/rows?find=true&key=${encodeURIComponent('"k0420"')}`);
246
+ assert.equal(found.status, 200);
247
+ assert.deepEqual(await found.json(), { found: true, row: 420, count: 1 });
248
+ const written = await app.request(`${datasets}/inputs/limit`, { method: 'PUT', body: encodeBeast2For(IntegerType)(500n) });
249
+ assert.deepEqual(decodeBeast2For(ResponseType(NullType))(await bytes(written)), variant('success', null));
250
+ assert.equal(decodeBeast2For(IntegerType)(await bytes(await app.request(`${datasets}/inputs/limit`))), 500n);
251
+ });
252
+ it('runs the dataflow through the orchestrator and state store the host gives, and serves what the run wrote', async () => {
253
+ const { app, storage, runner, rowsHash, countTask } = await host();
254
+ const read = [];
255
+ runner.setResult(countTask, async (inputs) => {
256
+ read.push(inputs);
257
+ return { state: 'success', cached: false, outputHash: await storage.objects.write(REPO, encodeBeast2For(IntegerType)(1000n)) };
258
+ });
259
+ const started = await app.request(`/api/repos/${REPO}/workspaces/${WS}/dataflow`, {
260
+ method: 'POST',
261
+ headers: { 'Content-Type': BEAST2_CONTENT_TYPE },
262
+ body: encodeBeast2For(DataflowRequestType)({ force: dataflowForce(false), filter: none }),
263
+ });
264
+ assert.equal(started.status, 202);
265
+ assert.deepEqual(decodeBeast2For(ResponseType(NullType))(await bytes(started)), variant('success', null));
266
+ // A client polls the run's state, as the state store keeps it, until the
267
+ // run has ended.
268
+ const decodeState = decodeBeast2For(ResponseType(DataflowExecutionStateType));
269
+ let state;
270
+ for (;;) {
271
+ const answer = decodeState(await bytes(await app.request(`/api/repos/${REPO}/workspaces/${WS}/dataflow/execution`)));
272
+ if (answer.type !== 'success')
273
+ assert.fail(`the poll was refused: ${answer.value.type}`);
274
+ state = answer.value;
275
+ if (state.status.type !== 'running')
276
+ break;
277
+ await new Promise((resolve) => setTimeout(resolve, 5));
278
+ }
279
+ assert.equal(state.status.type, 'completed');
280
+ if (state.summary.type !== 'some')
281
+ assert.fail('a run that has ended has a summary');
282
+ assert.deepEqual([state.summary.value.executed, state.summary.value.failed], [1n, 0n]);
283
+ assert.deepEqual(read, [[rowsHash]], 'the task read the workspace\'s rows');
284
+ assert.equal(decodeBeast2For(IntegerType)(await bytes(await app.request(`${datasets}/tasks/count/output`))), 1000n);
285
+ });
286
+ it('runs a one-shot over the workspace\'s datasets under the grant the host\'s own access gives each caller', async () => {
287
+ const { app, runner, rowsHash } = await host();
288
+ const counted = encodeBeast2For(IntegerType)(1000n);
289
+ runner.setDetachedResult({ kind: 'success', value: counted, stdout: '', stderr: '', stdoutTruncated: false, stderrTruncated: false });
290
+ const count = East.function([RowsType], IntegerType, ($, given) => given.size());
291
+ const log = East.platform('e3_test_log', [StringType], NullType);
292
+ const logged = East.function([RowsType], IntegerType, ($, given) => {
293
+ $(log('counted'));
294
+ return given.size();
295
+ });
296
+ const ResultType = ResponseType(ExecuteResultType);
297
+ const decodeResult = decodeBeast2For(ResultType);
298
+ const oneShot = async (caller, body) => decodeResult(await bytes(await app.request(`/api/repos/${REPO}/workspaces/${WS}/one-shot`, {
299
+ method: 'POST',
300
+ headers: { 'Content-Type': BEAST2_CONTENT_TYPE, ...(caller !== null && { 'X-Caller': caller }) },
301
+ body: encodeBeast2For(OneShotRequestType)({
302
+ bodyIr: encodeEastIR(body.toIR()),
303
+ args: [variant('dataset', rowsPath)],
304
+ runner: freeRunner,
305
+ limits: none,
306
+ }),
307
+ })));
308
+ const ran = variant('success', {
309
+ outcome: variant('success', { value: counted }),
310
+ stdout: '',
311
+ stderr: '',
312
+ stdoutTruncated: false,
313
+ stderrTruncated: false,
314
+ inputs: [{ path: rowsPath, hash: rowsHash }],
315
+ });
316
+ const refused = variant('error', variant('permission_denied', { path: 'one-shot' }));
317
+ const answers = (answer, expected, what) => assert.ok(equalFor(ResultType)(answer, expected), `${what}, and the answer is ${printFor(ResultType)(answer)}`);
318
+ answers(await oneShot('operator', logged), ran, 'an operator runs a body that calls a platform function');
319
+ answers(await oneShot('reader', count), ran, 'a reader runs a platform-free body');
320
+ answers(await oneShot('reader', logged), refused, 'a reader runs no body that calls a platform function');
321
+ answers(await oneShot(null, count), refused, 'a caller the host does not know runs nothing');
322
+ assert.deepEqual(runner.getDetachedCalls().map((call) => call.args), [[{ dataset: rowsHash }], [{ dataset: rowsHash }]], 'the two calls that ran read the rows the workspace holds');
323
+ });
324
+ });
325
+ //# sourceMappingURL=portable.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable.spec.js","sourceRoot":"","sources":["../../src/portable.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EACrH,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,GACjE,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,eAAe,EAAE,eAAe,GAE5I,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAChI,OAAO,EACL,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,aAAa,GACxF,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,IAAI,MAAM,YAAY,CAAC;AACnC,OAAO,EACL,0BAA0B,EAAE,mBAAmB,EAAE,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,GAChH,MAAM,YAAY,CAAC;AAEpB,8DAA8D;AAC9D,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAElE;;0CAE0C;AAC1C,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,CAAC,CAAC,CAAC;AAE3G,qEAAqE;AACrE,MAAM,aAAa,GAAG,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,SAAS,OAAO,CAAC,UAAoD,EAAE;IACrE,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAC/F,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;wBACwB;AACxB,MAAM,SAAS,GAA2B;IACxC,YAAY,EAAE,wEAAwE;IACtF,aAAa,EAAE,8CAA8C;IAC7D,mBAAmB,EAAE,kGAAkG;IACvH,oBAAoB,EAAE,2CAA2C;IACjE,eAAe,EAAE,sDAAsD;IACvE,OAAO,EAAE,uCAAuC;CACjD,CAAC;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,+HAA+H,EAAE,GAAG,EAAE;QACvI,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,6FAA6F,CAAC,CAAC;QAE5H,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,KAAK,iBAAiB,CAAC,CAAC;QAC7G,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,0BAA0B,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;YAC7I,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,CAAC,EAAE,CAAC;YAC7J,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,IAAI,oBAAoB,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qHAAqH,EAAE,GAAG,EAAE;QAC7H,MAAM,KAAK,GAA0F;YACnG,CAAC,8BAA8B,EAAE,EAAE,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,8CAA8C,IAAI,EAAE,EAAE;gBACzH,CAAC,4CAA4C,CAAC,CAAC;YACjD,CAAC,oBAAoB,EAAE,EAAE,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gEAAgE,IAAI,EAAE,EAAE;gBAC9H,CAAC,iCAAiC,CAAC,CAAC;YACtC,CAAC,mCAAmC,EAAE,EAAE,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,oDAAoD,IAAI,EAAE,EAAE;gBACpI,CAAC,iDAAiD,CAAC,CAAC;SACvD,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YAC5C,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;QAED,yEAAyE;QACzE,uEAAuE;QACvE,MAAM,IAAI,GAAG,aAAa,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACnE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gDAAgD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/G,MAAM,CAAC,SAAS,CACd,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,6DAA6D,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EACpJ,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4GAA4G,EAAE,GAAG,EAAE;QACpH,MAAM,MAAM,GAAG,IAA+B,CAAC;QAC/C,MAAM,SAAS,GAAG,QAAmC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI,0BAA0B,CAAC,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,0BAA0B,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,EAC9C,GAAG,IAAI,sGAAsG,CAAC,CAAC;QACnH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,GAAG,IAAI,4BAA4B,CAAC,CAAC;QACzF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iCAAiC,CAAC,EAAE,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACvH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yJAAyJ,EAAE,KAAK,IAAI,EAAE;QACvK,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,qCAAqC,CAAC,CAAC;QAChG,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACvG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QACtE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,+BAA+B,EAAE,EAAE,CAAC,CAAC;QAE9H,MAAM,IAAI,GAAG,IAAI,6BAA6B,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,GAAG,MAAM,CAAC;IAClB,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAa,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAClF,MAAM,SAAS,GAAa,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,IAAI,SAAS,CACxB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAqB,CAAC,EACzG,UAAU,CAAC,UAAU,CAAC,CACvB,CAAC;IACF,MAAM,UAAU,GAAgB,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEvG;6DACyD;IACzD,KAAK,UAAU,QAAQ,CAAC,OAAwB;QAC9C,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/F,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACxF,sDAAsD;QACtD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,cAAc,CAAC,CAAC;YAClF,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC;YAClC,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAC7C,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACzD,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;YAC3B,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC,CAAC;QACJ,MAAM,SAAS,GAAc,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAoB;YACxE,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAoB;oBACtD,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnF,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;iBAChF,CAAC,CAAC,CAAC;YACJ,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAoB;oBACrD,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAoB;4BACrD,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;yBACtF,CAAC,CAAC,CAAC;iBACL,CAAC,CAAC,CAAC;SACL,CAAC,CAAC,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;YAC/E,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;YACtC,IAAI,EAAE;gBACJ,SAAS;gBACT,IAAI,EAAE,IAAI,GAAG,CAAC;oBACZ,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC5E,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;iBAC3E,CAAC;aACH;YACD,SAAS,EAAE,IAAI,GAAG,EAAE;YACpB,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,OAAO,EAAE,IAAI,GAAG,EAAE;SACnB,CAAC,CAAC,CAAC;QACJ,MAAM,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5D,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAED;+CAC2C;IAC3C,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,EAAqB,EAAE;QACjD,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,8CAA8C,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;KACF,CAAC,CAAC;IAEH;;;;;;OAMG;IACH,KAAK,UAAU,IAAI;QACjB,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC;QACnD,MAAM,MAAM,GAA2B,CAAC,CAAC,EAAE,EAAE;YAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;QACxF,CAAC,CAAC;QAEF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACnF,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;QACpE,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QAC1G,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,QAAQ,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE;YACzG,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM;YACvB,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY;YACnC,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU;SAChC,CAAC,CAAC,CAAC;QACJ,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/I,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,EAAE,QAAkB,EAAuB,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9G,MAAM,QAAQ,GAAG,cAAc,IAAI,eAAe,EAAE,WAAW,CAAC;IAEhE,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,mCAAmC,EAAE,uBAAuB,CAAC,CAAC;QAClG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAEvC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,cAAc,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAEtG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,6CAA6C,CAAC,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,SAAS,CACd,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EACtI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CACvC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;QAClF,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAEzG,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,8BAA8B,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3H,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1G,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0GAA0G,EAAE,KAAK,IAAI,EAAE;QACxH,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QACnE,MAAM,IAAI,GAAe,EAAE,CAAC;QAC5B,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACjI,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,eAAe,EAAE,WAAW,EAAE;YAChF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE;YAChD,IAAI,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAC1F,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QAE1G,yEAAyE;QACzE,iBAAiB;QACjB,MAAM,WAAW,GAAG,eAAe,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC9E,IAAI,KAA6B,CAAC;QAClC,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACrH,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACzF,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YACrB,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;gBAAE,MAAM;YAC3C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACrF,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAEvF,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC;QAC5E,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,qBAAqB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yGAAyG,EAAE,KAAK,IAAI,EAAE;QACvH,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QAEtI,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YACjE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YAClB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,KAAK,EAAE,MAAqB,EAAE,IAAkB,EAAE,EAAE,CAClE,YAAY,CAAC,MAAM,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,eAAe,EAAE,WAAW,EAAE;YACzF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE;YAChG,IAAI,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;gBACxC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACpC,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,IAAI;aACb,CAAC;SACH,CAAC,CAAC,CAAC,CAAC;QACP,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE;YAC7B,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YAC/C,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,eAAe,EAAE,KAAK;YACtB,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC7C,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,CAAC,MAAsC,EAAE,QAAwC,EAAE,IAAY,EAAQ,EAAE,CACvH,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,IAAI,uBAAuB,QAAQ,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAElH,OAAO,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,wDAAwD,CAAC,CAAC;QAC1G,OAAO,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,oCAAoC,CAAC,CAAC;QACnF,OAAO,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,sDAAsD,CAAC,CAAC;QAC1G,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,8CAA8C,CAAC,CAAC;QAC7F,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EACrH,0DAA0D,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ import type { Context } from 'hono';
6
+ /**
7
+ * The dataset path a request to `/api/repos/:repo/workspaces/:ws/datasets/…`
8
+ * names, as its client encoded it, with `suffix` — `/upload`, `/upload/<id>` —
9
+ * and a trailing slash cut off: what `urlPathToTreePath` decodes, a segment at
10
+ * a time. The dataset routes and the transfer routes read it here alone, so
11
+ * they agree on it, and an upload's later requests are checked against the
12
+ * path its init stored.
13
+ *
14
+ * @remarks
15
+ * It is cut from the URL the client sent, every escape kept. Hono's
16
+ * `c.req.path` is decoded (`decodeURI`), so a workspace named `my ws`,
17
+ * `café` or `q[1]` — names a workspace may have — no longer matched a prefix
18
+ * built from its name, and every one of its datasets read as the root. The
19
+ * route's leading segments are compared decoded, so a client that escapes a
20
+ * name otherwise than `encodeURIComponent` does names the same dataset.
21
+ *
22
+ * @param c - The request's context
23
+ * @param suffix - What the route puts after the dataset's path, if anything
24
+ * @returns The dataset's path, still percent-encoded; empty when the request
25
+ * names the root, or is not under the route
26
+ */
27
+ export declare function datasetPathOf(c: Context, suffix?: string): string;
28
+ //# sourceMappingURL=dataset-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-path.d.ts","sourceRoot":"","sources":["../../../src/routes/dataset-path.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAYpC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,SAAK,GAAG,MAAM,CAW7D"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /** A path segment as the client sent it, decoded, compared with `expected`;
6
+ * a segment that does not decode matches nothing. */
7
+ function decodesTo(segment, expected) {
8
+ try {
9
+ return decodeURIComponent(segment) === expected;
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
15
+ /**
16
+ * The dataset path a request to `/api/repos/:repo/workspaces/:ws/datasets/…`
17
+ * names, as its client encoded it, with `suffix` — `/upload`, `/upload/<id>` —
18
+ * and a trailing slash cut off: what `urlPathToTreePath` decodes, a segment at
19
+ * a time. The dataset routes and the transfer routes read it here alone, so
20
+ * they agree on it, and an upload's later requests are checked against the
21
+ * path its init stored.
22
+ *
23
+ * @remarks
24
+ * It is cut from the URL the client sent, every escape kept. Hono's
25
+ * `c.req.path` is decoded (`decodeURI`), so a workspace named `my ws`,
26
+ * `café` or `q[1]` — names a workspace may have — no longer matched a prefix
27
+ * built from its name, and every one of its datasets read as the root. The
28
+ * route's leading segments are compared decoded, so a client that escapes a
29
+ * name otherwise than `encodeURIComponent` does names the same dataset.
30
+ *
31
+ * @param c - The request's context
32
+ * @param suffix - What the route puts after the dataset's path, if anything
33
+ * @returns The dataset's path, still percent-encoded; empty when the request
34
+ * names the root, or is not under the route
35
+ */
36
+ export function datasetPathOf(c, suffix = '') {
37
+ const repo = c.req.param('repo');
38
+ const ws = c.req.param('ws');
39
+ if (repo === undefined || ws === undefined)
40
+ return '';
41
+ const head = ['', 'api', 'repos', repo, 'workspaces', ws, 'datasets'];
42
+ const segments = new URL(c.req.url).pathname.split('/');
43
+ if (segments.length < head.length || !head.every((part, i) => decodesTo(segments[i], part)))
44
+ return '';
45
+ let path = segments.slice(head.length).join('/');
46
+ if (suffix !== '' && path.endsWith(suffix))
47
+ path = path.slice(0, -suffix.length);
48
+ if (path.endsWith('/'))
49
+ path = path.slice(0, -1);
50
+ return path;
51
+ }
52
+ //# sourceMappingURL=dataset-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-path.js","sourceRoot":"","sources":["../../../src/routes/dataset-path.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;sDACsD;AACtD,SAAS,SAAS,CAAC,OAAe,EAAE,QAAgB;IAClD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,aAAa,CAAC,CAAU,EAAE,MAAM,GAAG,EAAE;IACnD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACxG,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjF,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -3,13 +3,19 @@
3
3
  * Licensed under BSL 1.1. See LICENSE for details.
4
4
  */
5
5
  import { Hono } from 'hono';
6
- import type { StorageBackend, TransferBackend } from '@elaraai/e3-core';
6
+ import type { StorageBackend, TransferBackend } from '@elaraai/e3-core/portable';
7
+ import { type PinnedCache } from '../handlers/datasets.js';
7
8
  /** Options for {@link createDatasetRoutes}. */
8
9
  export interface DatasetRouteOptions {
9
10
  /** Byte budget clamping each page's share of the source blob. Defaults to
10
11
  * 4 MiB; deployments with tighter response limits (e.g. Lambda proxy's
11
12
  * 6 MB, base64-inflated) pass a smaller budget. */
12
13
  pageByteBudget?: number;
14
+ /** Who may keep a hash-pinned page or key search, which never changes:
15
+ * `private`, the caller's own cache alone (the default), or `public`, any
16
+ * cache between it and the server as well, for a host whose data any
17
+ * caller may read. */
18
+ cache?: PinnedCache;
13
19
  }
14
20
  export declare function createDatasetRoutes(storage: StorageBackend, getRepoPath: (repo: string) => string, transferBackend?: TransferBackend, options?: DatasetRouteOptions): Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
15
21
  //# sourceMappingURL=datasets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"datasets.d.ts","sourceRoot":"","sources":["../../../src/routes/datasets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAaxE,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IAClC;;wDAEoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AASD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACrC,eAAe,CAAC,EAAE,eAAe,EACjC,OAAO,CAAC,EAAE,mBAAmB,8EA6G9B"}
1
+ {"version":3,"file":"datasets.d.ts","sourceRoot":"","sources":["../../../src/routes/datasets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAUL,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAGjC,+CAA+C;AAC/C,MAAM,WAAW,mBAAmB;IAClC;;wDAEoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;2BAGuB;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AASD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACrC,eAAe,CAAC,EAAE,eAAe,EACjC,OAAO,CAAC,EAAE,mBAAmB,8EAoG9B"}
@@ -5,6 +5,7 @@
5
5
  import { Hono } from 'hono';
6
6
  import { urlPathToTreePath } from '@elaraai/e3-types';
7
7
  import { listDatasets, listDatasetsRecursive, listDatasetsRecursivePaths, listDatasetsWithStatus, findDatasetKey, getDataset, getDatasetPage, getDatasetStatus, setDataset, } from '../handlers/datasets.js';
8
+ import { datasetPathOf } from './dataset-path.js';
8
9
  /** Parses an integer query param; `undefined` when absent, `NaN` when
9
10
  * malformed (the handler rejects NaN with a 400). */
10
11
  function intParam(value) {
@@ -38,11 +39,7 @@ export function createDatasetRoutes(storage, getRepoPath, transferBackend, optio
38
39
  const repo = c.req.param('repo');
39
40
  const repoPath = getRepoPath(repo);
40
41
  const ws = c.req.param('ws');
41
- // Extract the wildcard path (c.req.path is percent-encoded)
42
- const fullPath = c.req.path;
43
- const datasetsPrefix = `/api/repos/${encodeURIComponent(repo)}/workspaces/${encodeURIComponent(ws)}/datasets/`;
44
- const pathStr = fullPath.startsWith(datasetsPrefix) ? fullPath.slice(datasetsPrefix.length) : '';
45
- const treePath = urlPathToTreePath(pathStr);
42
+ const treePath = urlPathToTreePath(datasetPathOf(c));
46
43
  const list = c.req.query('list') === 'true';
47
44
  const recursive = c.req.query('recursive') === 'true';
48
45
  const status = c.req.query('status') === 'true';
@@ -79,7 +76,7 @@ export function createDatasetRoutes(storage, getRepoPath, transferBackend, optio
79
76
  ...(to !== undefined && to.length > 0 && { to }),
80
77
  ...(index !== undefined && index !== '' && { index }),
81
78
  ...(hash !== undefined && hash !== '' && { hash }),
82
- });
79
+ }, { ...(options?.cache !== undefined && { cache: options.cache }) });
83
80
  }
84
81
  if (page) {
85
82
  const hash = c.req.query('hash');
@@ -93,6 +90,7 @@ export function createDatasetRoutes(storage, getRepoPath, transferBackend, optio
93
90
  };
94
91
  return getDatasetPage(storage, repoPath, ws, treePath, window, {
95
92
  ...(options?.pageByteBudget !== undefined && { byteBudget: options.pageByteBudget }),
93
+ ...(options?.cache !== undefined && { cache: options.cache }),
96
94
  });
97
95
  }
98
96
  // `segments=true`: a collection held as a segment manifest is answered
@@ -104,11 +102,7 @@ export function createDatasetRoutes(storage, getRepoPath, transferBackend, optio
104
102
  const repo = c.req.param('repo');
105
103
  const repoPath = getRepoPath(repo);
106
104
  const ws = c.req.param('ws');
107
- // Extract the wildcard path (c.req.path is percent-encoded)
108
- const fullPath = c.req.path;
109
- const datasetsPrefix = `/api/repos/${encodeURIComponent(repo)}/workspaces/${encodeURIComponent(ws)}/datasets/`;
110
- const pathStr = fullPath.startsWith(datasetsPrefix) ? fullPath.slice(datasetsPrefix.length) : '';
111
- const treePath = urlPathToTreePath(pathStr);
105
+ const treePath = urlPathToTreePath(datasetPathOf(c));
112
106
  // Body is raw BEAST2, read as it arrives.
113
107
  return setDataset(storage, repoPath, ws, treePath, bodyChunks(c.req.raw.body));
114
108
  });
@@ -1 +1 @@
1
- {"version":3,"file":"datasets.js","sourceRoot":"","sources":["../../../src/routes/datasets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datasets.js","sourceRoot":"","sources":["../../../src/routes/datasets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,cAAc,EACd,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,GAEX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAelD;sDACsD;AACtD,SAAS,QAAQ,CAAC,KAAyB;IACzC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,WAAqC,EACrC,eAAiC,EACjC,OAA6B;IAE7B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,kEAAkE;IAClE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;QAE9B,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;QAC5C,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC;QACtD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;QAEhD,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,IAAI,IAAI,SAAS,IAAI,MAAM;YAAE,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,IAAI,IAAI,SAAS;YAAY,OAAO,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9F,IAAI,IAAI,IAAI,MAAM;YAAe,OAAO,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE1F,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;QAC5C,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC;QACtD,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;QAChD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;QAE5C,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,IAAI,IAAI,SAAS,IAAI,MAAM;YAAE,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC/F,IAAI,IAAI,IAAI,SAAS;YAAY,OAAO,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpG,IAAI,IAAI,IAAI,MAAM;YAAe,OAAO,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAChG,IAAI,IAAI;YAAyB,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QACtF,IAAI,MAAM;YAAuB,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1F,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,wEAAwE;YACxE,yCAAyC;YACzC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;gBACrD,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC;gBACjC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,CAAC;gBACvC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBAC5D,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBACtD,GAAG,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;gBAChD,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACrD,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;aACnD,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG;gBACb,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAE,EAAE,CAAC;gBAClG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAE,EAAE,CAAC;gBAC/F,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAE,EAAE,CAAC;gBACrG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAE,EAAE,CAAC;gBAC1G,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBACrD,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;aACnD,CAAC;YACF,OAAO,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;gBAC7D,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;gBACpF,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;QAED,uEAAuE;QACvE,sEAAsE;QACtE,OAAO,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,CAAC;IAC3H,CAAC,CAAC,CAAC;IAEH,qEAAqE;IACrE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAErD,0CAA0C;QAC1C,OAAO,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,KAAK,SAAS,CAAC,CAAC,UAAU,CAAC,IAAuC;IAChE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,GAAG,IAAI,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,IAAI;YAAE,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAyC,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -3,8 +3,10 @@
3
3
  * Licensed under BSL 1.1. See LICENSE for details.
4
4
  */
5
5
  import { Hono } from 'hono';
6
- import type { Budget, DataflowOrchestrator, ExecutionStateStore, StorageBackend } from '@elaraai/e3-core';
6
+ import type { DataflowOrchestrator, ExecutionStateStore, StorageBackend } from '@elaraai/e3-core/portable';
7
+ import { type RunnerBudget } from '../handlers/dataflow.js';
7
8
  import type { GetRunner } from './functions.js';
9
+ export type { RunnerBudget };
8
10
  /**
9
11
  * The seams the dataflow routes go through, which the host that mounts them
10
12
  * gives: what runs a repository's dataflows, and where their runs are kept.
@@ -26,7 +28,7 @@ export interface DataflowSeams {
26
28
  width?: number;
27
29
  /** The budget the runner holds, which the poll and the budget route serve;
28
30
  * absent for a host whose runners hold none */
29
- budget?: Budget;
31
+ budget?: RunnerBudget;
30
32
  }
31
33
  /**
32
34
  * The routes of a workspace's dataflow: start, poll, cancel, its graph, its
@@ -1 +1 @@
1
- {"version":3,"file":"executions.d.ts","sourceRoot":"","sources":["../../../src/routes/executions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAY1G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;sEACkE;IAClE,SAAS,EAAE,SAAS,CAAC;IACrB,2EAA2E;IAC3E,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,oBAAoB,CAAC;IAC5D;uDACmD;IACnD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACzD;8BAC0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;oDACgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACrC,KAAK,EAAE,aAAa,8EA+ErB"}
1
+ {"version":3,"file":"executions.d.ts","sourceRoot":"","sources":["../../../src/routes/executions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3G,OAAO,EAQL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B;sEACkE;IAClE,SAAS,EAAE,SAAS,CAAC;IACrB,2EAA2E;IAC3E,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,oBAAoB,CAAC;IAC5D;uDACmD;IACnD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,mBAAmB,CAAC;IACzD;8BAC0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;oDACgD;IAChD,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACrC,KAAK,EAAE,aAAa,8EAiGrB"}