@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
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
import { describe, it, beforeEach } from 'node:test';
|
|
6
6
|
import assert from 'node:assert/strict';
|
|
7
7
|
import { Hono } from 'hono';
|
|
8
|
-
import { IntegerType, encodeBeast2For, decodeBeast2For, toEastTypeValue, variant, some, none, } from '@elaraai/east';
|
|
9
|
-
import { MockTaskRunner } from '@elaraai/e3-core';
|
|
8
|
+
import { East, IntegerType, NullType, StringType, encodeBeast2For, decodeBeast2For, encodeEastIR, toEastTypeValue, variant, some, none, } from '@elaraai/east';
|
|
9
|
+
import { InMemoryTransferBackend, MockTaskRunner } from '@elaraai/e3-core';
|
|
10
10
|
import { InMemoryStorage } from '@elaraai/e3-core/test';
|
|
11
11
|
import { BEAST2_CONTENT_TYPE, FunctionObjectType, PackageObjectType } from '@elaraai/e3-types';
|
|
12
|
-
import { listPackageFunctions, describePackageFunction, callFunctionSync, } from './functions.js';
|
|
13
|
-
import { createOneShotRoutes } from '../routes/functions.js';
|
|
14
|
-
import { ResponseType, FunctionSignatureType, ExecuteResultType, OneShotRequestType, } from '../types.js';
|
|
12
|
+
import { listPackageFunctions, describePackageFunction, callFunctionSync, getSplitCallStatus, } from './functions.js';
|
|
13
|
+
import { createOneShotRoutes, createPackageFunctionRoutes, oneShotAccessByRoles } from '../routes/functions.js';
|
|
14
|
+
import { ResponseType, FunctionSignatureType, ExecuteResultType, FunctionCallRequestType, OneShotRequestType, PackageJobResponseType, SplitCallRequestType, SplitCallStatusType, } from '../types.js';
|
|
15
15
|
import { ArrayType } from '@elaraai/east';
|
|
16
16
|
const REPO = 'test-repo';
|
|
17
17
|
const PKG = 'fn-pkg';
|
|
@@ -85,11 +85,51 @@ describe('function handlers', () => {
|
|
|
85
85
|
const spec = runner.getDetachedCalls()[0];
|
|
86
86
|
assert.deepEqual(spec.runner, variant('east_node', { platforms: ['@elaraai/east-node-std'] }));
|
|
87
87
|
});
|
|
88
|
-
it('a request runner override replaces the stored runner', async () => {
|
|
89
|
-
await callFunctionSync(storage, REPO, runner, PKG, VERSION, 'double', callRequest([encodeInt(5n)], some(variant('east_py', { platforms: ['east-py-std'] }))));
|
|
88
|
+
it('a request runner override replaces the stored runner, under the elevated grant', async () => {
|
|
89
|
+
await callFunctionSync(storage, REPO, runner, PKG, VERSION, 'double', callRequest([encodeInt(5n)], some(variant('east_py', { platforms: ['east-py-std'] }))), false, undefined, 'any');
|
|
90
90
|
const spec = runner.getDetachedCalls()[0];
|
|
91
91
|
assert.deepEqual(spec.runner, variant('east_py', { platforms: ['east-py-std'] }));
|
|
92
92
|
});
|
|
93
|
+
it('runs a call that names no runner for any caller, and one whose runner loads no package the function does not', async () => {
|
|
94
|
+
await callFunctionSync(storage, REPO, runner, PKG, VERSION, 'double', callRequest([encodeInt(5n)]), false, undefined, 'none');
|
|
95
|
+
assert.deepEqual(runner.getDetachedCalls()[0].runner, variant('east_node', { platforms: ['@elaraai/east-node-std'] }), 'the function\'s own runner');
|
|
96
|
+
await callFunctionSync(storage, REPO, runner, PKG, VERSION, 'double', callRequest([encodeInt(5n)], some(variant('east_c', { platforms: [] }))), false, undefined, 'platform_free');
|
|
97
|
+
assert.deepEqual(runner.getDetachedCalls()[1].runner, variant('east_c', { platforms: [] }), 'another stock runtime, given fewer packages');
|
|
98
|
+
});
|
|
99
|
+
it('refuses a caller without the elevated grant a runner that loads a package the function does not, and runs nothing', async () => {
|
|
100
|
+
for (const grant of ['platform_free', 'none']) {
|
|
101
|
+
const response = await callFunctionSync(storage, REPO, runner, PKG, VERSION, 'double', callRequest([encodeInt(5n)], some(variant('east_py', { platforms: ['east-py-std'] }))), false, undefined, grant);
|
|
102
|
+
const result = await decodeResponse(response, ExecuteResultType);
|
|
103
|
+
assert.equal(result.type, 'error', grant);
|
|
104
|
+
assert.deepEqual(result.value, variant('permission_denied', { path: 'runner' }), grant);
|
|
105
|
+
}
|
|
106
|
+
assert.equal(runner.getDetachedCalls().length, 0, 'nothing ran');
|
|
107
|
+
});
|
|
108
|
+
it('refuses a call that names the custom runtime, whatever the caller\'s grant, and runs nothing', async () => {
|
|
109
|
+
for (const grant of ['any', 'platform_free', 'none']) {
|
|
110
|
+
const response = await callFunctionSync(storage, REPO, runner, PKG, VERSION, 'double', callRequest([encodeInt(5n)], some(variant('custom', { command: ['sh', '-c', 'echo ran'] }))), false, undefined, grant);
|
|
111
|
+
const result = await decodeResponse(response, ExecuteResultType);
|
|
112
|
+
assert.equal(result.value.outcome.type, 'invalid', grant);
|
|
113
|
+
assert.match(result.value.outcome.value.diagnostics[0].message, /names the custom runtime/, grant);
|
|
114
|
+
}
|
|
115
|
+
assert.equal(runner.getDetachedCalls().length, 0, 'nothing ran');
|
|
116
|
+
});
|
|
117
|
+
it('holds a runner a call names to the grant its routes\' access gives, and to none without one', async () => {
|
|
118
|
+
const call = async (access) => {
|
|
119
|
+
const app = new Hono();
|
|
120
|
+
app.route('/api/repos/:repo/packages/:pkg/:version/functions', createPackageFunctionRoutes(storage, () => REPO, () => runner, access === undefined ? {} : { access }));
|
|
121
|
+
const response = await app.request(`/api/repos/r/packages/${PKG}/${VERSION}/functions/double`, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
headers: { 'Content-Type': BEAST2_CONTENT_TYPE },
|
|
124
|
+
body: encodeBeast2For(FunctionCallRequestType)(callRequest([encodeInt(5n)], some(variant('east_py', { platforms: ['east-py-std'] })))),
|
|
125
|
+
});
|
|
126
|
+
return decodeResponse(response, ExecuteResultType);
|
|
127
|
+
};
|
|
128
|
+
assert.deepEqual((await call(undefined)).value, variant('permission_denied', { path: 'runner' }), 'no access: no caller adds a package');
|
|
129
|
+
assert.deepEqual((await call(() => 'platform_free')).value, variant('permission_denied', { path: 'runner' }));
|
|
130
|
+
assert.equal((await call(() => 'any')).type, 'success', 'an elevated caller adds one');
|
|
131
|
+
assert.equal(runner.getDetachedCalls().length, 1);
|
|
132
|
+
});
|
|
93
133
|
it('arity mismatch returns invalid without executing', async () => {
|
|
94
134
|
const response = await callFunctionSync(storage, REPO, runner, PKG, VERSION, 'double', callRequest([encodeInt(1n), encodeInt(2n)]));
|
|
95
135
|
const result = await decodeResponse(response, ExecuteResultType);
|
|
@@ -99,16 +139,24 @@ describe('function handlers', () => {
|
|
|
99
139
|
assert.equal(runner.getDetachedCalls().length, 0, 'nothing should have executed');
|
|
100
140
|
});
|
|
101
141
|
});
|
|
102
|
-
describe('one-shot
|
|
103
|
-
const
|
|
104
|
-
|
|
142
|
+
describe('one-shot access', () => {
|
|
143
|
+
const twice = East.function([IntegerType], IntegerType, ($, x) => x.multiply(2n));
|
|
144
|
+
const log = East.platform('e3_test_log', [StringType], NullType);
|
|
145
|
+
const logging = East.function([IntegerType], IntegerType, ($, x) => {
|
|
146
|
+
$(log(East.value('called')));
|
|
147
|
+
return x;
|
|
148
|
+
});
|
|
149
|
+
/** A one-shot request: a platform-free body on a runtime given no package,
|
|
150
|
+
* unless the test says otherwise. */
|
|
151
|
+
const oneShotBody = (body = twice, runner = variant('east_node', { platforms: [] })) => encodeBeast2For(OneShotRequestType)({
|
|
152
|
+
bodyIr: encodeEastIR(body.toIR()),
|
|
105
153
|
args: [],
|
|
106
|
-
runner
|
|
154
|
+
runner,
|
|
107
155
|
limits: none,
|
|
108
156
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
157
|
+
/** The one-shot routes behind `access`, with the identity a host's auth
|
|
158
|
+
* sets, when there is one. */
|
|
159
|
+
const buildApp = (access, runner, roles) => {
|
|
112
160
|
const app = new Hono();
|
|
113
161
|
if (roles !== undefined) {
|
|
114
162
|
app.use('*', async (c, next) => {
|
|
@@ -116,31 +164,107 @@ describe('one-shot role gate', () => {
|
|
|
116
164
|
await next();
|
|
117
165
|
});
|
|
118
166
|
}
|
|
119
|
-
app.route('/api/repos/:repo/workspaces/:ws/one-shot', createOneShotRoutes(
|
|
167
|
+
app.route('/api/repos/:repo/workspaces/:ws/one-shot', createOneShotRoutes(new InMemoryStorage(), () => REPO, new InMemoryTransferBackend({}), () => runner, { access }));
|
|
120
168
|
return app;
|
|
121
169
|
};
|
|
122
|
-
const post = (app) => app.request('/api/repos/r/workspaces/w/one-shot', {
|
|
170
|
+
const post = (app, body = oneShotBody()) => app.request('/api/repos/r/workspaces/w/one-shot', {
|
|
123
171
|
method: 'POST',
|
|
124
172
|
headers: { 'Content-Type': BEAST2_CONTENT_TYPE },
|
|
125
|
-
body
|
|
173
|
+
body,
|
|
126
174
|
});
|
|
127
|
-
it('
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
175
|
+
it('gives an elevated role any one-shot, any other identity a platform-free one, and a request with none nothing', async () => {
|
|
176
|
+
const grantOf = async (roles, elevated) => {
|
|
177
|
+
const app = new Hono();
|
|
178
|
+
if (roles !== undefined) {
|
|
179
|
+
app.use('*', async (c, next) => {
|
|
180
|
+
c.set('identity', { sub: 'user', roles });
|
|
181
|
+
await next();
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const access = elevated === undefined ? oneShotAccessByRoles() : oneShotAccessByRoles(elevated);
|
|
185
|
+
app.get('/', async (c) => c.text(await access(c)));
|
|
186
|
+
return (await app.request('/')).text();
|
|
187
|
+
};
|
|
188
|
+
assert.equal(await grantOf(['admin']), 'any');
|
|
189
|
+
assert.equal(await grantOf(['owner']), 'any');
|
|
190
|
+
assert.equal(await grantOf(['member']), 'platform_free');
|
|
191
|
+
assert.equal(await grantOf([]), 'platform_free');
|
|
192
|
+
assert.equal(await grantOf(undefined), 'none');
|
|
193
|
+
assert.equal(await grantOf(['owner'], ['admin']), 'platform_free', 'a host names the roles it elevates');
|
|
132
194
|
});
|
|
133
|
-
it('
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
195
|
+
it('answers permission_denied for a refused caller, and calls no runner', async () => {
|
|
196
|
+
const refused = [
|
|
197
|
+
['none', oneShotBody()],
|
|
198
|
+
['platform_free', oneShotBody(logging)],
|
|
199
|
+
['platform_free', oneShotBody(twice, variant('east_node', { platforms: ['@elaraai/east-node-std'] }))],
|
|
200
|
+
['platform_free', oneShotBody(twice, variant('custom', { command: ['sh'] }))],
|
|
201
|
+
];
|
|
202
|
+
for (const [grant, body] of refused) {
|
|
203
|
+
const runner = new MockTaskRunner();
|
|
204
|
+
const result = await decodeResponse(await post(buildApp(() => grant, runner), body), ExecuteResultType);
|
|
205
|
+
assert.equal(result.type, 'error');
|
|
206
|
+
assert.deepEqual(result.value, variant('permission_denied', { path: 'one-shot' }));
|
|
207
|
+
assert.equal(runner.getDetachedCalls().length, 0, 'nothing ran');
|
|
208
|
+
}
|
|
138
209
|
});
|
|
139
|
-
it('
|
|
140
|
-
|
|
210
|
+
it('runs a one-shot that uses a platform on a server without auth, as a single-tenant server always has', async () => {
|
|
211
|
+
// Past the grant, the request fails on the workspace, which does not exist.
|
|
212
|
+
const runner = new MockTaskRunner();
|
|
213
|
+
const response = await post(buildApp(() => 'any', runner), oneShotBody(logging, variant('east_node', { platforms: ['@elaraai/east-node-std'] })));
|
|
141
214
|
const result = await decodeResponse(response, ExecuteResultType);
|
|
142
215
|
assert.equal(result.type, 'error');
|
|
143
216
|
assert.notEqual(result.value.type, 'permission_denied');
|
|
144
217
|
});
|
|
218
|
+
it('launches a split call only under a grant that runs it, and polls one only for a caller with a grant', async () => {
|
|
219
|
+
const split = (runner) => encodeBeast2For(SplitCallRequestType)({
|
|
220
|
+
bodyIr: encodeEastIR(twice.toIR()),
|
|
221
|
+
args: [{ arg: variant('value', encodeInt(1n)), partition: some({ by: [] }) }],
|
|
222
|
+
output: variant('array', null),
|
|
223
|
+
then: none,
|
|
224
|
+
runner,
|
|
225
|
+
limits: none,
|
|
226
|
+
});
|
|
227
|
+
const refused = [
|
|
228
|
+
['none', split(variant('east_node', { platforms: [] }))],
|
|
229
|
+
['platform_free', split(variant('east_node', { platforms: ['@elaraai/east-node-std'] }))],
|
|
230
|
+
];
|
|
231
|
+
for (const [grant, body] of refused) {
|
|
232
|
+
const runner = new MockTaskRunner();
|
|
233
|
+
const response = await buildApp(() => grant, runner).request('/api/repos/r/workspaces/w/one-shot/split', {
|
|
234
|
+
method: 'POST',
|
|
235
|
+
headers: { 'Content-Type': BEAST2_CONTENT_TYPE },
|
|
236
|
+
body,
|
|
237
|
+
});
|
|
238
|
+
const result = await decodeResponse(response, PackageJobResponseType);
|
|
239
|
+
assert.equal(result.type, 'error');
|
|
240
|
+
assert.deepEqual(result.value, variant('permission_denied', { path: 'one-shot' }));
|
|
241
|
+
assert.equal(runner.getCalls().length, 0, 'nothing ran');
|
|
242
|
+
}
|
|
243
|
+
const polled = await buildApp(() => 'none', new MockTaskRunner()).request('/api/repos/r/workspaces/w/one-shot/split/job');
|
|
244
|
+
const status = await decodeResponse(polled, SplitCallStatusType);
|
|
245
|
+
assert.deepEqual(status.value, variant('permission_denied', { path: 'one-shot' }));
|
|
246
|
+
});
|
|
247
|
+
it('answers a split call only through the repository and workspace that launched it, and a reader only one a reader could launch', async () => {
|
|
248
|
+
const store = new InMemoryTransferBackend({}).splitCall;
|
|
249
|
+
const plan = { pieces: 3n, over: 0n, bytes: 100n };
|
|
250
|
+
// An explain's job, launched in workspace `w` of repository `r`: one a
|
|
251
|
+
// reader could launch, and one only an elevated grant could.
|
|
252
|
+
for (const [id, platformFree] of [['free', true], ['elevated', false]]) {
|
|
253
|
+
await store.create(id, {
|
|
254
|
+
repo: 'r', workspace: 'w', task: '', inputs: [], objects: [], then: none,
|
|
255
|
+
limits: { timeoutMs: 1000n, maxResultBytes: 1024n, maxLogBytes: 1024n },
|
|
256
|
+
read: [], explain: true, platformFree, status: variant('planned', plan), createdAt: new Date(),
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
const poll = async (repo, ws, id, grant) => decodeResponse(await getSplitCallStatus(new InMemoryStorage(), repo, store, repo, ws, id, grant), SplitCallStatusType);
|
|
260
|
+
for (const [repo, ws] of [['r', 'other'], ['other', 'w']]) {
|
|
261
|
+
const elsewhere = await poll(repo, ws, 'free', 'any');
|
|
262
|
+
assert.deepEqual(elsewhere, variant('error', variant('internal', { message: `workspace '${ws}' has no split call 'free'` })), `${repo}/${ws}`);
|
|
263
|
+
}
|
|
264
|
+
assert.deepEqual(await poll('r', 'w', 'free', 'any'), variant('success', variant('planned', plan)));
|
|
265
|
+
assert.deepEqual(await poll('r', 'w', 'free', 'platform_free'), variant('success', variant('planned', plan)));
|
|
266
|
+
assert.deepEqual(await poll('r', 'w', 'elevated', 'platform_free'), variant('error', variant('permission_denied', { path: 'one-shot' })));
|
|
267
|
+
assert.deepEqual(await poll('r', 'w', 'elevated', 'any'), variant('success', variant('planned', plan)));
|
|
268
|
+
});
|
|
145
269
|
});
|
|
146
270
|
//# sourceMappingURL=functions.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functions.spec.js","sourceRoot":"","sources":["../../../src/handlers/functions.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"functions.spec.js","sourceRoot":"","sources":["../../../src/handlers/functions.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,6 @@ export { listWorkspaces, createWorkspace, getWorkspace, getWorkspaceStatus, dele
|
|
|
8
8
|
export { listDatasets, listDatasetsRecursive, listDatasetsRecursivePaths, listDatasetsWithStatus, getDataset, getDatasetStatus, setDataset, } from './datasets.js';
|
|
9
9
|
export { listTasks, getTask, } from './tasks.js';
|
|
10
10
|
export { startDataflow, getDataflowStatus, getDataflowGraph, getTaskLogs, } from './dataflow.js';
|
|
11
|
-
export { listPackageFunctions, describePackageFunction, callFunctionSync,
|
|
11
|
+
export { listPackageFunctions, describePackageFunction, callFunctionSync, startSplitCall, getSplitCallStatus, type StartSplitCallOptions, } from './functions.js';
|
|
12
12
|
export { describeRecord, callMutationSync, compactRecord, getRecordHistory, } from './records.js';
|
|
13
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,OAAO,EACP,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,OAAO,EACP,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,KAAK,qBAAqB,GAC3B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
|
|
@@ -8,6 +8,6 @@ export { listWorkspaces, createWorkspace, getWorkspace, getWorkspaceStatus, dele
|
|
|
8
8
|
export { listDatasets, listDatasetsRecursive, listDatasetsRecursivePaths, listDatasetsWithStatus, getDataset, getDatasetStatus, setDataset, } from './datasets.js';
|
|
9
9
|
export { listTasks, getTask, } from './tasks.js';
|
|
10
10
|
export { startDataflow, getDataflowStatus, getDataflowGraph, getTaskLogs, } from './dataflow.js';
|
|
11
|
-
export { listPackageFunctions, describePackageFunction, callFunctionSync,
|
|
11
|
+
export { listPackageFunctions, describePackageFunction, callFunctionSync, startSplitCall, getSplitCallStatus, } from './functions.js';
|
|
12
12
|
export { describeRecord, callMutationSync, compactRecord, getRecordHistory, } from './records.js';
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,OAAO,EACP,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,OAAO,EACP,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,SAAS,EACT,OAAO,GACR,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,cAAc,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -13,7 +13,8 @@ export { ApiTypes } from './types.js';
|
|
|
13
13
|
export { resolveBudget, type BudgetSettings } from '@elaraai/e3-core';
|
|
14
14
|
export * from './handlers/index.js';
|
|
15
15
|
export * from './routes/index.js';
|
|
16
|
-
export { createAuthMiddleware, type AuthConfig } from './middleware/auth.js';
|
|
17
|
-
export {
|
|
16
|
+
export { createAuthMiddleware, type AuthConfig, type Identity } from './middleware/auth.js';
|
|
17
|
+
export { generateKeyPair, signJwt, type KeyPair, type JwtPayload } from './auth/keys.js';
|
|
18
|
+
export { createRepositoryGate, createSingleRepositoryGate, type RepositoryGateOptions } from './middleware/repository.js';
|
|
18
19
|
export { sendSuccess, sendError, sendSuccessWithStatus, decodeBeast2, decodeBody } from './beast2.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGtE,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,oBAAoB,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGtE,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,oBAAoB,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAI5F,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGzF,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG1H,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -19,6 +19,9 @@ export * from './handlers/index.js';
|
|
|
19
19
|
export * from './routes/index.js';
|
|
20
20
|
// Export auth middleware
|
|
21
21
|
export { createAuthMiddleware } from './middleware/auth.js';
|
|
22
|
+
// A key pair and the tokens it signs, as the built-in OIDC provider issues
|
|
23
|
+
// them: what a host or a test signs its callers' tokens with
|
|
24
|
+
export { generateKeyPair, signJwt } from './auth/keys.js';
|
|
22
25
|
// The gate every request to one repository passes
|
|
23
26
|
export { createRepositoryGate, createSingleRepositoryGate } from './middleware/repository.js';
|
|
24
27
|
// Export BEAST2 helpers for custom integrations
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAkC,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,+EAA+E;AAC/E,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAuB,MAAM,kBAAkB,CAAC;AAEtE,mCAAmC;AACnC,cAAc,qBAAqB,CAAC;AAEpC,uEAAuE;AACvE,cAAc,mBAAmB,CAAC;AAElC,yBAAyB;AACzB,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAkC,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,+EAA+E;AAC/E,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAuB,MAAM,kBAAkB,CAAC;AAEtE,mCAAmC;AACnC,cAAc,qBAAqB,CAAC;AAEpC,uEAAuE;AACvE,cAAc,mBAAmB,CAAC;AAElC,yBAAyB;AACzB,OAAO,EAAE,oBAAoB,EAAkC,MAAM,sBAAsB,CAAC;AAE5F,2EAA2E;AAC3E,6DAA6D;AAC7D,OAAO,EAAE,eAAe,EAAE,OAAO,EAAiC,MAAM,gBAAgB,CAAC;AAEzF,kDAAkD;AAClD,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAA8B,MAAM,4BAA4B,CAAC;AAE1H,gDAAgD;AAChD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -14,6 +14,34 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import type { MiddlewareHandler } from 'hono';
|
|
16
16
|
import { type StorageBackend } from '@elaraai/e3-core';
|
|
17
|
+
/** How {@link createRepositoryGate} treats a repository that owes store
|
|
18
|
+
* upgrades. */
|
|
19
|
+
export interface RepositoryGateOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Whether a request applies the upgrades a repository owes, at the first
|
|
22
|
+
* that finds the repository still: true unless set, as a local server does.
|
|
23
|
+
*
|
|
24
|
+
* @remarks
|
|
25
|
+
* A host whose requests have a time limit, which a step may outlast, passes
|
|
26
|
+
* `false` and applies them in a job of its own, by an open of the repository
|
|
27
|
+
* there (`repositoryOpen`) — the job {@link onUpgradePending} starts. Until
|
|
28
|
+
* the job has, the gate answers every request to the repository but a
|
|
29
|
+
* running dataflow's cancel and poll with 503 `repository_upgrade_pending`.
|
|
30
|
+
*/
|
|
31
|
+
applyUpgrades?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Called, with `applyUpgrades: false`, for each request to a repository that
|
|
34
|
+
* owes upgrades: the host starts the job that applies them here, or finds it
|
|
35
|
+
* started. It is called for every such request, so starting the job once is
|
|
36
|
+
* the host's to see to. It is awaited, and its failure is the host's to
|
|
37
|
+
* report: the request is answered all the same, and the next one calls it
|
|
38
|
+
* again.
|
|
39
|
+
*
|
|
40
|
+
* @param repo - The repository's name, as the request names it
|
|
41
|
+
* @param upgrades - The steps it owes, in the order they apply
|
|
42
|
+
*/
|
|
43
|
+
onUpgradePending?: (repo: string, upgrades: readonly string[]) => void | Promise<void>;
|
|
44
|
+
}
|
|
17
45
|
/**
|
|
18
46
|
* The gate of a host's repositories: the repository exists, is not being
|
|
19
47
|
* removed, and is opened as every way into a repository opens it — upgraded in
|
|
@@ -22,12 +50,23 @@ import { type StorageBackend } from '@elaraai/e3-core';
|
|
|
22
50
|
* is not opened. It goes through the storage backend's `RepoStore`, so a host
|
|
23
51
|
* mounts it over its own.
|
|
24
52
|
*
|
|
53
|
+
* No request waits on an upgrade. The open refuses at once when the repository
|
|
54
|
+
* owes one and work running in it holds it, and the gate answers 503
|
|
55
|
+
* `repository_upgrade_pending`, naming the steps and the work, with a
|
|
56
|
+
* `Retry-After`; the steps apply at the first request that finds the
|
|
57
|
+
* repository still, or, with `options.applyUpgrades: false`, in the host's
|
|
58
|
+
* job, and the gate answers so until they have. A running dataflow's cancel
|
|
59
|
+
* and poll pass the gate all the same, so the run an upgrade waits for can
|
|
60
|
+
* always be stopped.
|
|
61
|
+
*
|
|
25
62
|
* @param storage - Storage backend, whose `RepoStore` keeps the repositories
|
|
26
63
|
* @param getRepoPath - A repository's identifier from its name, as the stores
|
|
27
64
|
* other than the `RepoStore` take it
|
|
65
|
+
* @param options - Whether a request applies the upgrades a repository owes,
|
|
66
|
+
* and what starts the host's job when not
|
|
28
67
|
* @returns The middleware
|
|
29
68
|
*/
|
|
30
|
-
export declare function createRepositoryGate(storage: StorageBackend, getRepoPath: (repo: string) => string): MiddlewareHandler;
|
|
69
|
+
export declare function createRepositoryGate(storage: StorageBackend, getRepoPath: (repo: string) => string, options?: RepositoryGateOptions): MiddlewareHandler;
|
|
31
70
|
/**
|
|
32
71
|
* The gate of a server of one repository: the repository is `default`, and a
|
|
33
72
|
* request to any other is not found. The server opens its repository as it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/middleware/repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/middleware/repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAiD,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAsBtG;gBACgB;AAChB,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACrC,OAAO,GAAE,qBAA0B,GAClC,iBAAiB,CAgDnB;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,iBAAiB,CAU9D"}
|
|
@@ -2,12 +2,24 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
-
import { repositoryOpen } from '@elaraai/e3-core';
|
|
5
|
+
import { RepositoryUpgradePendingError, repositoryOpen } from '@elaraai/e3-core';
|
|
6
6
|
import { sendJsonError } from '../errors.js';
|
|
7
|
+
/** How long, in seconds, a client is told to wait before it asks again of a
|
|
8
|
+
* repository an upgrade waits on. */
|
|
9
|
+
const UPGRADE_RETRY_AFTER_S = 5;
|
|
7
10
|
/** Whether a request creates or removes a repository. */
|
|
8
11
|
function createsOrRemoves(c) {
|
|
9
12
|
return (c.req.method === 'PUT' || c.req.method === 'DELETE') && /\/repos\/[^/]+$/.test(c.req.path);
|
|
10
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Whether a request stops or polls a workspace's dataflow: what a repository
|
|
16
|
+
* an upgrade waits on still answers, since the run is what the upgrade waits
|
|
17
|
+
* for, and both reach only the run's state and its orchestrator.
|
|
18
|
+
*/
|
|
19
|
+
function stopsOrPollsDataflow(c) {
|
|
20
|
+
const run = /\/repos\/[^/]+\/workspaces\/[^/]+\/dataflow\/(cancel|execution)$/.exec(c.req.path);
|
|
21
|
+
return run !== null && (run[1] === 'cancel' ? c.req.method === 'POST' : c.req.method === 'GET');
|
|
22
|
+
}
|
|
11
23
|
/**
|
|
12
24
|
* The gate of a host's repositories: the repository exists, is not being
|
|
13
25
|
* removed, and is opened as every way into a repository opens it — upgraded in
|
|
@@ -16,12 +28,24 @@ function createsOrRemoves(c) {
|
|
|
16
28
|
* is not opened. It goes through the storage backend's `RepoStore`, so a host
|
|
17
29
|
* mounts it over its own.
|
|
18
30
|
*
|
|
31
|
+
* No request waits on an upgrade. The open refuses at once when the repository
|
|
32
|
+
* owes one and work running in it holds it, and the gate answers 503
|
|
33
|
+
* `repository_upgrade_pending`, naming the steps and the work, with a
|
|
34
|
+
* `Retry-After`; the steps apply at the first request that finds the
|
|
35
|
+
* repository still, or, with `options.applyUpgrades: false`, in the host's
|
|
36
|
+
* job, and the gate answers so until they have. A running dataflow's cancel
|
|
37
|
+
* and poll pass the gate all the same, so the run an upgrade waits for can
|
|
38
|
+
* always be stopped.
|
|
39
|
+
*
|
|
19
40
|
* @param storage - Storage backend, whose `RepoStore` keeps the repositories
|
|
20
41
|
* @param getRepoPath - A repository's identifier from its name, as the stores
|
|
21
42
|
* other than the `RepoStore` take it
|
|
43
|
+
* @param options - Whether a request applies the upgrades a repository owes,
|
|
44
|
+
* and what starts the host's job when not
|
|
22
45
|
* @returns The middleware
|
|
23
46
|
*/
|
|
24
|
-
export function createRepositoryGate(storage, getRepoPath) {
|
|
47
|
+
export function createRepositoryGate(storage, getRepoPath, options = {}) {
|
|
48
|
+
const apply = options.applyUpgrades ?? true;
|
|
25
49
|
return async (c, next) => {
|
|
26
50
|
if (createsOrRemoves(c)) {
|
|
27
51
|
await next();
|
|
@@ -47,10 +71,24 @@ export function createRepositoryGate(storage, getRepoPath) {
|
|
|
47
71
|
}
|
|
48
72
|
else {
|
|
49
73
|
try {
|
|
50
|
-
await repositoryOpen(storage, getRepoPath(repo));
|
|
74
|
+
await repositoryOpen(storage, getRepoPath(repo), { apply, waitMs: 0 });
|
|
51
75
|
}
|
|
52
76
|
catch (err) {
|
|
53
|
-
|
|
77
|
+
if (!(err instanceof RepositoryUpgradePendingError))
|
|
78
|
+
return sendJsonError(err);
|
|
79
|
+
if (err.job && options.onUpgradePending !== undefined) {
|
|
80
|
+
try {
|
|
81
|
+
await options.onUpgradePending(repo, err.upgrades);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// The host's to report; the next request calls it again.
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (!stopsOrPollsDataflow(c)) {
|
|
88
|
+
const refused = sendJsonError(err);
|
|
89
|
+
refused.headers.set('Retry-After', String(UPGRADE_RETRY_AFTER_S));
|
|
90
|
+
return refused;
|
|
91
|
+
}
|
|
54
92
|
}
|
|
55
93
|
}
|
|
56
94
|
await next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/middleware/repository.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,EAAE,cAAc,EAAuB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/middleware/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.spec.d.ts","sourceRoot":"","sources":["../../../src/middleware/repository.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|