@positronic/cloudflare 0.0.73 → 0.0.74
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/dist/src/api/auth-middleware.js +2 -2
- package/dist/src/api/brains.js +28 -28
- package/dist/src/api/index.js +26 -1
- package/dist/src/api/store.js +30 -30
- package/dist/src/api/users.js +34 -34
- package/dist/src/auth-do.js +21 -53
- package/dist/src/brain-runner-do.js +7 -7
- package/dist/src/create-r2-store.js +2 -2
- package/dist/src/monitor-do.js +15 -15
- package/dist/src/schedule-do.js +24 -24
- package/dist/types/api/auth-middleware.d.ts +1 -1
- package/dist/types/api/auth-middleware.d.ts.map +1 -1
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/auth-do.d.ts +6 -8
- package/dist/types/auth-do.d.ts.map +1 -1
- package/dist/types/brain-runner-do.d.ts +1 -1
- package/dist/types/brain-runner-do.d.ts.map +1 -1
- package/dist/types/create-r2-store.d.ts +1 -1
- package/dist/types/monitor-do.d.ts +7 -7
- package/dist/types/monitor-do.d.ts.map +1 -1
- package/dist/types/schedule-do.d.ts +7 -7
- package/dist/types/schedule-do.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/src/api/users.js
CHANGED
|
@@ -177,7 +177,7 @@ app.post('/', function(c) {
|
|
|
177
177
|
authDo = c.env.AUTH_DO.get(authDoId);
|
|
178
178
|
return [
|
|
179
179
|
4,
|
|
180
|
-
authDo.
|
|
180
|
+
authDo.getUser(body.name)
|
|
181
181
|
];
|
|
182
182
|
case 2:
|
|
183
183
|
existing = _state.sent();
|
|
@@ -258,10 +258,10 @@ app.get('/', function(c) {
|
|
|
258
258
|
});
|
|
259
259
|
})();
|
|
260
260
|
});
|
|
261
|
-
// GET /users/:
|
|
262
|
-
app.get('/:
|
|
261
|
+
// GET /users/:name - Get a specific user
|
|
262
|
+
app.get('/:name', function(c) {
|
|
263
263
|
return _async_to_generator(function() {
|
|
264
|
-
var
|
|
264
|
+
var name, authDoId, authDo, user, error;
|
|
265
265
|
return _ts_generator(this, function(_state) {
|
|
266
266
|
switch(_state.label){
|
|
267
267
|
case 0:
|
|
@@ -271,12 +271,12 @@ app.get('/:id', function(c) {
|
|
|
271
271
|
,
|
|
272
272
|
3
|
|
273
273
|
]);
|
|
274
|
-
|
|
274
|
+
name = c.req.param('name');
|
|
275
275
|
authDoId = c.env.AUTH_DO.idFromName('auth');
|
|
276
276
|
authDo = c.env.AUTH_DO.get(authDoId);
|
|
277
277
|
return [
|
|
278
278
|
4,
|
|
279
|
-
authDo.getUser(
|
|
279
|
+
authDo.getUser(name)
|
|
280
280
|
];
|
|
281
281
|
case 1:
|
|
282
282
|
user = _state.sent();
|
|
@@ -284,7 +284,7 @@ app.get('/:id', function(c) {
|
|
|
284
284
|
return [
|
|
285
285
|
2,
|
|
286
286
|
c.json({
|
|
287
|
-
error: "User '".concat(
|
|
287
|
+
error: "User '".concat(name, "' not found")
|
|
288
288
|
}, 404)
|
|
289
289
|
];
|
|
290
290
|
}
|
|
@@ -309,10 +309,10 @@ app.get('/:id', function(c) {
|
|
|
309
309
|
});
|
|
310
310
|
})();
|
|
311
311
|
});
|
|
312
|
-
// DELETE /users/:
|
|
313
|
-
app.delete('/:
|
|
312
|
+
// DELETE /users/:name - Delete a user
|
|
313
|
+
app.delete('/:name', function(c) {
|
|
314
314
|
return _async_to_generator(function() {
|
|
315
|
-
var
|
|
315
|
+
var name, authDoId, authDo, deleted, error;
|
|
316
316
|
return _ts_generator(this, function(_state) {
|
|
317
317
|
switch(_state.label){
|
|
318
318
|
case 0:
|
|
@@ -322,12 +322,12 @@ app.delete('/:id', function(c) {
|
|
|
322
322
|
,
|
|
323
323
|
3
|
|
324
324
|
]);
|
|
325
|
-
|
|
325
|
+
name = c.req.param('name');
|
|
326
326
|
authDoId = c.env.AUTH_DO.idFromName('auth');
|
|
327
327
|
authDo = c.env.AUTH_DO.get(authDoId);
|
|
328
328
|
return [
|
|
329
329
|
4,
|
|
330
|
-
authDo.deleteUser(
|
|
330
|
+
authDo.deleteUser(name)
|
|
331
331
|
];
|
|
332
332
|
case 1:
|
|
333
333
|
deleted = _state.sent();
|
|
@@ -335,7 +335,7 @@ app.delete('/:id', function(c) {
|
|
|
335
335
|
return [
|
|
336
336
|
2,
|
|
337
337
|
c.json({
|
|
338
|
-
error: "User '".concat(
|
|
338
|
+
error: "User '".concat(name, "' not found")
|
|
339
339
|
}, 404)
|
|
340
340
|
];
|
|
341
341
|
}
|
|
@@ -360,10 +360,10 @@ app.delete('/:id', function(c) {
|
|
|
360
360
|
});
|
|
361
361
|
})();
|
|
362
362
|
});
|
|
363
|
-
// POST /users/:
|
|
364
|
-
app.post('/:
|
|
363
|
+
// POST /users/:name/keys - Add a key to a user
|
|
364
|
+
app.post('/:name/keys', function(c) {
|
|
365
365
|
return _async_to_generator(function() {
|
|
366
|
-
var
|
|
366
|
+
var name, body, authDoId, authDo, user, existingKey, key, error;
|
|
367
367
|
return _ts_generator(this, function(_state) {
|
|
368
368
|
switch(_state.label){
|
|
369
369
|
case 0:
|
|
@@ -373,7 +373,7 @@ app.post('/:id/keys', function(c) {
|
|
|
373
373
|
,
|
|
374
374
|
6
|
|
375
375
|
]);
|
|
376
|
-
|
|
376
|
+
name = c.req.param('name');
|
|
377
377
|
return [
|
|
378
378
|
4,
|
|
379
379
|
c.req.json()
|
|
@@ -400,7 +400,7 @@ app.post('/:id/keys', function(c) {
|
|
|
400
400
|
authDo = c.env.AUTH_DO.get(authDoId);
|
|
401
401
|
return [
|
|
402
402
|
4,
|
|
403
|
-
authDo.getUser(
|
|
403
|
+
authDo.getUser(name)
|
|
404
404
|
];
|
|
405
405
|
case 2:
|
|
406
406
|
user = _state.sent();
|
|
@@ -408,7 +408,7 @@ app.post('/:id/keys', function(c) {
|
|
|
408
408
|
return [
|
|
409
409
|
2,
|
|
410
410
|
c.json({
|
|
411
|
-
error: "User '".concat(
|
|
411
|
+
error: "User '".concat(name, "' not found")
|
|
412
412
|
}, 404)
|
|
413
413
|
];
|
|
414
414
|
}
|
|
@@ -428,7 +428,7 @@ app.post('/:id/keys', function(c) {
|
|
|
428
428
|
}
|
|
429
429
|
return [
|
|
430
430
|
4,
|
|
431
|
-
authDo.addKey(
|
|
431
|
+
authDo.addKey(name, body.fingerprint, JSON.stringify(body.jwk), body.label || '')
|
|
432
432
|
];
|
|
433
433
|
case 4:
|
|
434
434
|
key = _state.sent();
|
|
@@ -437,7 +437,7 @@ app.post('/:id/keys', function(c) {
|
|
|
437
437
|
2,
|
|
438
438
|
c.json({
|
|
439
439
|
fingerprint: key.fingerprint,
|
|
440
|
-
|
|
440
|
+
userName: key.userName,
|
|
441
441
|
label: key.label,
|
|
442
442
|
addedAt: key.addedAt
|
|
443
443
|
}, 201)
|
|
@@ -459,10 +459,10 @@ app.post('/:id/keys', function(c) {
|
|
|
459
459
|
});
|
|
460
460
|
})();
|
|
461
461
|
});
|
|
462
|
-
// GET /users/:
|
|
463
|
-
app.get('/:
|
|
462
|
+
// GET /users/:name/keys - List keys for a user
|
|
463
|
+
app.get('/:name/keys', function(c) {
|
|
464
464
|
return _async_to_generator(function() {
|
|
465
|
-
var
|
|
465
|
+
var name, authDoId, authDo, user, result, error;
|
|
466
466
|
return _ts_generator(this, function(_state) {
|
|
467
467
|
switch(_state.label){
|
|
468
468
|
case 0:
|
|
@@ -472,12 +472,12 @@ app.get('/:id/keys', function(c) {
|
|
|
472
472
|
,
|
|
473
473
|
4
|
|
474
474
|
]);
|
|
475
|
-
|
|
475
|
+
name = c.req.param('name');
|
|
476
476
|
authDoId = c.env.AUTH_DO.idFromName('auth');
|
|
477
477
|
authDo = c.env.AUTH_DO.get(authDoId);
|
|
478
478
|
return [
|
|
479
479
|
4,
|
|
480
|
-
authDo.getUser(
|
|
480
|
+
authDo.getUser(name)
|
|
481
481
|
];
|
|
482
482
|
case 1:
|
|
483
483
|
user = _state.sent();
|
|
@@ -485,13 +485,13 @@ app.get('/:id/keys', function(c) {
|
|
|
485
485
|
return [
|
|
486
486
|
2,
|
|
487
487
|
c.json({
|
|
488
|
-
error: "User '".concat(
|
|
488
|
+
error: "User '".concat(name, "' not found")
|
|
489
489
|
}, 404)
|
|
490
490
|
];
|
|
491
491
|
}
|
|
492
492
|
return [
|
|
493
493
|
4,
|
|
494
|
-
authDo.listKeys(
|
|
494
|
+
authDo.listKeys(name)
|
|
495
495
|
];
|
|
496
496
|
case 2:
|
|
497
497
|
result = _state.sent();
|
|
@@ -502,7 +502,7 @@ app.get('/:id/keys', function(c) {
|
|
|
502
502
|
keys: result.keys.map(function(key) {
|
|
503
503
|
return {
|
|
504
504
|
fingerprint: key.fingerprint,
|
|
505
|
-
|
|
505
|
+
userName: key.userName,
|
|
506
506
|
label: key.label,
|
|
507
507
|
addedAt: key.addedAt
|
|
508
508
|
};
|
|
@@ -527,10 +527,10 @@ app.get('/:id/keys', function(c) {
|
|
|
527
527
|
});
|
|
528
528
|
})();
|
|
529
529
|
});
|
|
530
|
-
// DELETE /users/:
|
|
531
|
-
app.delete('/:
|
|
530
|
+
// DELETE /users/:name/keys/:fingerprint - Remove a key from a user
|
|
531
|
+
app.delete('/:name/keys/:fingerprint', function(c) {
|
|
532
532
|
return _async_to_generator(function() {
|
|
533
|
-
var
|
|
533
|
+
var name, fingerprint, authDoId, authDo, deleted, error;
|
|
534
534
|
return _ts_generator(this, function(_state) {
|
|
535
535
|
switch(_state.label){
|
|
536
536
|
case 0:
|
|
@@ -540,13 +540,13 @@ app.delete('/:id/keys/:fingerprint', function(c) {
|
|
|
540
540
|
,
|
|
541
541
|
3
|
|
542
542
|
]);
|
|
543
|
-
|
|
543
|
+
name = c.req.param('name');
|
|
544
544
|
fingerprint = decodeURIComponent(c.req.param('fingerprint'));
|
|
545
545
|
authDoId = c.env.AUTH_DO.idFromName('auth');
|
|
546
546
|
authDo = c.env.AUTH_DO.get(authDoId);
|
|
547
547
|
return [
|
|
548
548
|
4,
|
|
549
|
-
authDo.removeKey(
|
|
549
|
+
authDo.removeKey(name, fingerprint)
|
|
550
550
|
];
|
|
551
551
|
case 1:
|
|
552
552
|
deleted = _state.sent();
|
package/dist/src/auth-do.js
CHANGED
|
@@ -205,7 +205,6 @@ function _ts_generator(thisArg, body) {
|
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
import { DurableObject } from 'cloudflare:workers';
|
|
208
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
209
208
|
export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
210
209
|
"use strict";
|
|
211
210
|
_inherits(AuthDO, DurableObject);
|
|
@@ -217,8 +216,7 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
217
216
|
env
|
|
218
217
|
]), _define_property(_this, "storage", void 0);
|
|
219
218
|
_this.storage = state.storage.sql;
|
|
220
|
-
|
|
221
|
-
_this.storage.exec("\n CREATE TABLE IF NOT EXISTS users (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n created_at INTEGER NOT NULL\n );\n\n CREATE TABLE IF NOT EXISTS keys (\n fingerprint TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n jwk TEXT NOT NULL,\n label TEXT DEFAULT '',\n added_at INTEGER NOT NULL,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n );\n\n CREATE INDEX IF NOT EXISTS idx_keys_user\n ON keys(user_id);\n ");
|
|
219
|
+
_this.storage.exec("\n CREATE TABLE IF NOT EXISTS users (\n name TEXT PRIMARY KEY,\n created_at INTEGER NOT NULL\n );\n\n CREATE TABLE IF NOT EXISTS keys (\n fingerprint TEXT PRIMARY KEY,\n user_name TEXT NOT NULL,\n jwk TEXT NOT NULL,\n label TEXT DEFAULT '',\n added_at INTEGER NOT NULL,\n FOREIGN KEY (user_name) REFERENCES users(name) ON DELETE CASCADE\n );\n\n CREATE INDEX IF NOT EXISTS idx_keys_user\n ON keys(user_name);\n ");
|
|
222
220
|
return _this;
|
|
223
221
|
}
|
|
224
222
|
_create_class(AuthDO, [
|
|
@@ -226,15 +224,13 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
226
224
|
key: "createUser",
|
|
227
225
|
value: function createUser(name) {
|
|
228
226
|
return _async_to_generator(function() {
|
|
229
|
-
var
|
|
227
|
+
var createdAt;
|
|
230
228
|
return _ts_generator(this, function(_state) {
|
|
231
|
-
id = uuidv4();
|
|
232
229
|
createdAt = Date.now();
|
|
233
|
-
this.storage.exec("INSERT INTO users (
|
|
230
|
+
this.storage.exec("INSERT INTO users (name, created_at) VALUES (?, ?)", name, createdAt);
|
|
234
231
|
return [
|
|
235
232
|
2,
|
|
236
233
|
{
|
|
237
|
-
id: id,
|
|
238
234
|
name: name,
|
|
239
235
|
createdAt: createdAt
|
|
240
236
|
}
|
|
@@ -245,11 +241,11 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
245
241
|
},
|
|
246
242
|
{
|
|
247
243
|
key: "getUser",
|
|
248
|
-
value: function getUser(
|
|
244
|
+
value: function getUser(name) {
|
|
249
245
|
return _async_to_generator(function() {
|
|
250
246
|
var results, row;
|
|
251
247
|
return _ts_generator(this, function(_state) {
|
|
252
|
-
results = this.storage.exec("SELECT
|
|
248
|
+
results = this.storage.exec("SELECT name, created_at FROM users WHERE name = ?", name).toArray();
|
|
253
249
|
if (results.length === 0) {
|
|
254
250
|
return [
|
|
255
251
|
2,
|
|
@@ -260,33 +256,6 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
260
256
|
return [
|
|
261
257
|
2,
|
|
262
258
|
{
|
|
263
|
-
id: row.id,
|
|
264
|
-
name: row.name,
|
|
265
|
-
createdAt: row.created_at
|
|
266
|
-
}
|
|
267
|
-
];
|
|
268
|
-
});
|
|
269
|
-
}).call(this);
|
|
270
|
-
}
|
|
271
|
-
},
|
|
272
|
-
{
|
|
273
|
-
key: "getUserByName",
|
|
274
|
-
value: function getUserByName(name) {
|
|
275
|
-
return _async_to_generator(function() {
|
|
276
|
-
var results, row;
|
|
277
|
-
return _ts_generator(this, function(_state) {
|
|
278
|
-
results = this.storage.exec("SELECT id, name, created_at FROM users WHERE name = ?", name).toArray();
|
|
279
|
-
if (results.length === 0) {
|
|
280
|
-
return [
|
|
281
|
-
2,
|
|
282
|
-
null
|
|
283
|
-
];
|
|
284
|
-
}
|
|
285
|
-
row = results[0];
|
|
286
|
-
return [
|
|
287
|
-
2,
|
|
288
|
-
{
|
|
289
|
-
id: row.id,
|
|
290
259
|
name: row.name,
|
|
291
260
|
createdAt: row.created_at
|
|
292
261
|
}
|
|
@@ -301,9 +270,8 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
301
270
|
return _async_to_generator(function() {
|
|
302
271
|
var users;
|
|
303
272
|
return _ts_generator(this, function(_state) {
|
|
304
|
-
users = this.storage.exec("SELECT
|
|
273
|
+
users = this.storage.exec("SELECT name, created_at FROM users ORDER BY created_at DESC").toArray().map(function(row) {
|
|
305
274
|
return {
|
|
306
|
-
id: row.id,
|
|
307
275
|
name: row.name,
|
|
308
276
|
createdAt: row.created_at
|
|
309
277
|
};
|
|
@@ -321,7 +289,7 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
321
289
|
},
|
|
322
290
|
{
|
|
323
291
|
key: "deleteUser",
|
|
324
|
-
value: function deleteUser(
|
|
292
|
+
value: function deleteUser(name) {
|
|
325
293
|
return _async_to_generator(function() {
|
|
326
294
|
var existing;
|
|
327
295
|
return _ts_generator(this, function(_state) {
|
|
@@ -329,7 +297,7 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
329
297
|
case 0:
|
|
330
298
|
return [
|
|
331
299
|
4,
|
|
332
|
-
this.getUser(
|
|
300
|
+
this.getUser(name)
|
|
333
301
|
];
|
|
334
302
|
case 1:
|
|
335
303
|
existing = _state.sent();
|
|
@@ -340,8 +308,8 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
340
308
|
];
|
|
341
309
|
}
|
|
342
310
|
// Delete associated keys first (due to foreign key)
|
|
343
|
-
this.storage.exec("DELETE FROM keys WHERE
|
|
344
|
-
this.storage.exec("DELETE FROM users WHERE
|
|
311
|
+
this.storage.exec("DELETE FROM keys WHERE user_name = ?", name);
|
|
312
|
+
this.storage.exec("DELETE FROM users WHERE name = ?", name);
|
|
345
313
|
return [
|
|
346
314
|
2,
|
|
347
315
|
true
|
|
@@ -353,18 +321,18 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
353
321
|
},
|
|
354
322
|
{
|
|
355
323
|
key: "addKey",
|
|
356
|
-
value: function addKey(
|
|
324
|
+
value: function addKey(userName, fingerprint, jwk) {
|
|
357
325
|
var label = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : '';
|
|
358
326
|
return _async_to_generator(function() {
|
|
359
327
|
var addedAt;
|
|
360
328
|
return _ts_generator(this, function(_state) {
|
|
361
329
|
addedAt = Date.now();
|
|
362
|
-
this.storage.exec("INSERT INTO keys (fingerprint,
|
|
330
|
+
this.storage.exec("INSERT INTO keys (fingerprint, user_name, jwk, label, added_at) VALUES (?, ?, ?, ?, ?)", fingerprint, userName, jwk, label, addedAt);
|
|
363
331
|
return [
|
|
364
332
|
2,
|
|
365
333
|
{
|
|
366
334
|
fingerprint: fingerprint,
|
|
367
|
-
|
|
335
|
+
userName: userName,
|
|
368
336
|
jwk: jwk,
|
|
369
337
|
label: label,
|
|
370
338
|
addedAt: addedAt
|
|
@@ -376,14 +344,14 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
376
344
|
},
|
|
377
345
|
{
|
|
378
346
|
key: "listKeys",
|
|
379
|
-
value: function listKeys(
|
|
347
|
+
value: function listKeys(userName) {
|
|
380
348
|
return _async_to_generator(function() {
|
|
381
349
|
var keys;
|
|
382
350
|
return _ts_generator(this, function(_state) {
|
|
383
|
-
keys = this.storage.exec("SELECT fingerprint,
|
|
351
|
+
keys = this.storage.exec("SELECT fingerprint, user_name, jwk, label, added_at FROM keys WHERE user_name = ? ORDER BY added_at DESC", userName).toArray().map(function(row) {
|
|
384
352
|
return {
|
|
385
353
|
fingerprint: row.fingerprint,
|
|
386
|
-
|
|
354
|
+
userName: row.user_name,
|
|
387
355
|
jwk: row.jwk,
|
|
388
356
|
label: row.label,
|
|
389
357
|
addedAt: row.added_at
|
|
@@ -402,18 +370,18 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
402
370
|
},
|
|
403
371
|
{
|
|
404
372
|
key: "removeKey",
|
|
405
|
-
value: function removeKey(
|
|
373
|
+
value: function removeKey(userName, fingerprint) {
|
|
406
374
|
return _async_to_generator(function() {
|
|
407
375
|
var existing;
|
|
408
376
|
return _ts_generator(this, function(_state) {
|
|
409
|
-
existing = this.storage.exec("SELECT fingerprint FROM keys WHERE fingerprint = ? AND
|
|
377
|
+
existing = this.storage.exec("SELECT fingerprint FROM keys WHERE fingerprint = ? AND user_name = ?", fingerprint, userName).toArray();
|
|
410
378
|
if (existing.length === 0) {
|
|
411
379
|
return [
|
|
412
380
|
2,
|
|
413
381
|
false
|
|
414
382
|
];
|
|
415
383
|
}
|
|
416
|
-
this.storage.exec("DELETE FROM keys WHERE fingerprint = ? AND
|
|
384
|
+
this.storage.exec("DELETE FROM keys WHERE fingerprint = ? AND user_name = ?", fingerprint, userName);
|
|
417
385
|
return [
|
|
418
386
|
2,
|
|
419
387
|
true
|
|
@@ -428,7 +396,7 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
428
396
|
return _async_to_generator(function() {
|
|
429
397
|
var results, row;
|
|
430
398
|
return _ts_generator(this, function(_state) {
|
|
431
|
-
results = this.storage.exec("SELECT fingerprint,
|
|
399
|
+
results = this.storage.exec("SELECT fingerprint, user_name, jwk, label, added_at FROM keys WHERE fingerprint = ?", fingerprint).toArray();
|
|
432
400
|
if (results.length === 0) {
|
|
433
401
|
return [
|
|
434
402
|
2,
|
|
@@ -440,7 +408,7 @@ export var AuthDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
440
408
|
2,
|
|
441
409
|
{
|
|
442
410
|
fingerprint: row.fingerprint,
|
|
443
|
-
|
|
411
|
+
userName: row.user_name,
|
|
444
412
|
jwk: row.jwk,
|
|
445
413
|
label: row.label,
|
|
446
414
|
addedAt: row.added_at
|
|
@@ -507,7 +507,7 @@ var ScheduleAdapter = /*#__PURE__*/ function() {
|
|
|
507
507
|
return BatchChunkAdapter;
|
|
508
508
|
}();
|
|
509
509
|
// SQL to initialize the run owner table (stores who started this brain run)
|
|
510
|
-
var runOwnerTableSQL = "\nCREATE TABLE IF NOT EXISTS run_owner (\n
|
|
510
|
+
var runOwnerTableSQL = "\nCREATE TABLE IF NOT EXISTS run_owner (\n user_name TEXT NOT NULL\n);\n";
|
|
511
511
|
// SQL to initialize the signals table
|
|
512
512
|
var signalsTableSQL = "\nCREATE TABLE IF NOT EXISTS brain_signals (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n signal_type TEXT NOT NULL,\n content TEXT,\n queued_at INTEGER NOT NULL\n);\n";
|
|
513
513
|
// SQL to initialize the wait timeout table
|
|
@@ -539,17 +539,17 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
539
539
|
},
|
|
540
540
|
{
|
|
541
541
|
key: "storeRunOwner",
|
|
542
|
-
value: function storeRunOwner(
|
|
542
|
+
value: function storeRunOwner(userName) {
|
|
543
543
|
this.initializeRunOwnerTable();
|
|
544
|
-
this.sql.exec("INSERT INTO run_owner (
|
|
544
|
+
this.sql.exec("INSERT INTO run_owner (user_name) VALUES (?)", userName);
|
|
545
545
|
}
|
|
546
546
|
},
|
|
547
547
|
{
|
|
548
548
|
key: "getRunOwner",
|
|
549
549
|
value: function getRunOwner() {
|
|
550
550
|
this.initializeRunOwnerTable();
|
|
551
|
-
var results = this.sql.exec("SELECT
|
|
552
|
-
return results.length > 0 ? results[0].
|
|
551
|
+
var results = this.sql.exec("SELECT user_name FROM run_owner LIMIT 1").toArray();
|
|
552
|
+
return results.length > 0 ? results[0].user_name : null;
|
|
553
553
|
}
|
|
554
554
|
},
|
|
555
555
|
{
|
|
@@ -1134,7 +1134,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
1134
1134
|
options = initialData === null || initialData === void 0 ? void 0 : initialData.options;
|
|
1135
1135
|
initialState = initialData && !initialData.options ? initialData : {};
|
|
1136
1136
|
// Persist run owner durably (immutable, not derived from events)
|
|
1137
|
-
this.storeRunOwner(currentUser.
|
|
1137
|
+
this.storeRunOwner(currentUser.name);
|
|
1138
1138
|
// Create abort controller for this run
|
|
1139
1139
|
this.abortController = new AbortController();
|
|
1140
1140
|
batchChunkAdapter = new BatchChunkAdapter(function(signal) {
|
|
@@ -1232,7 +1232,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
1232
1232
|
throw new Error("No run owner found for brain run ".concat(brainRunId));
|
|
1233
1233
|
}
|
|
1234
1234
|
currentUser = {
|
|
1235
|
-
|
|
1235
|
+
name: ownerId
|
|
1236
1236
|
};
|
|
1237
1237
|
// Use the brainRunId from the START event, not the parameter.
|
|
1238
1238
|
// alarm() passes state.id.toString() (the DO hex ID), but the brain was
|
|
@@ -178,7 +178,7 @@ function _ts_generator(thisArg, body) {
|
|
|
178
178
|
*
|
|
179
179
|
* Key resolution:
|
|
180
180
|
* shared: store/{brainTitle}/{key}.json
|
|
181
|
-
* per-user: store/{brainTitle}/user/{
|
|
181
|
+
* per-user: store/{brainTitle}/user/{userName}/{key}.json
|
|
182
182
|
*
|
|
183
183
|
* The factory receives the store schema, brain title, and currentUser,
|
|
184
184
|
* and returns a typed Store<any> with full key resolution built in.
|
|
@@ -190,7 +190,7 @@ function _ts_generator(thisArg, body) {
|
|
|
190
190
|
if (!currentUser) {
|
|
191
191
|
throw new Error('Store key "'.concat(key, '" is per-user but no currentUser was provided. ') + "Per-user store keys require a currentUser in run params.");
|
|
192
192
|
}
|
|
193
|
-
return "store/".concat(brainTitle, "/user/").concat(currentUser.
|
|
193
|
+
return "store/".concat(brainTitle, "/user/").concat(currentUser.name, "/").concat(key);
|
|
194
194
|
}
|
|
195
195
|
return "store/".concat(brainTitle, "/").concat(key);
|
|
196
196
|
};
|
package/dist/src/monitor-do.js
CHANGED
|
@@ -265,9 +265,9 @@ export var MonitorDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
265
265
|
} catch (e) {
|
|
266
266
|
// Column already exists
|
|
267
267
|
}
|
|
268
|
-
// Migration: add
|
|
268
|
+
// Migration: add user_name column to brain_runs for ownership tracking
|
|
269
269
|
try {
|
|
270
|
-
_this.storage.exec("ALTER TABLE brain_runs ADD COLUMN
|
|
270
|
+
_this.storage.exec("ALTER TABLE brain_runs ADD COLUMN user_name TEXT");
|
|
271
271
|
} catch (e) {
|
|
272
272
|
// Column already exists
|
|
273
273
|
}
|
|
@@ -316,9 +316,9 @@ export var MonitorDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
316
316
|
} else {
|
|
317
317
|
// All other events have brainTitle/brainDescription (BrainBaseEvent types)
|
|
318
318
|
var brainEvent = event;
|
|
319
|
-
// Extract
|
|
320
|
-
var
|
|
321
|
-
this.storage.exec("\n INSERT INTO brain_runs (\n run_id, brain_title, brain_description, type, status,\n options, error, created_at, started_at, completed_at,
|
|
319
|
+
// Extract user_name from START event (set once, never updated)
|
|
320
|
+
var userName = event.type === BRAIN_EVENTS.START ? event.currentUser.name : null;
|
|
321
|
+
this.storage.exec("\n INSERT INTO brain_runs (\n run_id, brain_title, brain_description, type, status,\n options, error, created_at, started_at, completed_at, user_name\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(run_id) DO UPDATE SET\n type = excluded.type,\n status = excluded.status,\n error = excluded.error,\n completed_at = excluded.completed_at\n ", brainRunId, brainEvent.brainTitle, brainEvent.brainDescription || null, event.type, status, JSON.stringify(event.options || {}), error, currentTime, startTime, completeTime, userName);
|
|
322
322
|
}
|
|
323
323
|
// Clean up registrations and in-memory state when brain terminates
|
|
324
324
|
if (isTerminalStatus) {
|
|
@@ -453,12 +453,12 @@ export var MonitorDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
453
453
|
{
|
|
454
454
|
/**
|
|
455
455
|
* Get detailed information about a specific brain run
|
|
456
|
-
* Returns null if run not found or not owned by
|
|
457
|
-
* Pass null for
|
|
456
|
+
* Returns null if run not found or not owned by userName
|
|
457
|
+
* Pass null for userName to skip ownership check (root access)
|
|
458
458
|
*/ key: "getRun",
|
|
459
459
|
value: function getRun(brainRunId) {
|
|
460
|
-
var
|
|
461
|
-
var results = this.storage.exec("\n SELECT\n run_id as brainRunId,\n brain_title as brainTitle,\n brain_description as brainDescription,\n type,\n status,\n options,\n error,\n created_at as createdAt,\n started_at as startedAt,\n completed_at as completedAt,\n
|
|
460
|
+
var userName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
461
|
+
var results = this.storage.exec("\n SELECT\n run_id as brainRunId,\n brain_title as brainTitle,\n brain_description as brainDescription,\n type,\n status,\n options,\n error,\n created_at as createdAt,\n started_at as startedAt,\n completed_at as completedAt,\n user_name as userName\n FROM brain_runs\n WHERE run_id = ?\n AND (? IS NULL OR user_name = ?)\n ", brainRunId, userName, userName).toArray();
|
|
462
462
|
if (results.length === 0) {
|
|
463
463
|
return null;
|
|
464
464
|
}
|
|
@@ -473,21 +473,21 @@ export var MonitorDO = /*#__PURE__*/ function(DurableObject) {
|
|
|
473
473
|
{
|
|
474
474
|
/**
|
|
475
475
|
* Get run history for a brain.
|
|
476
|
-
* Pass null for
|
|
476
|
+
* Pass null for userName to skip ownership filter (root access).
|
|
477
477
|
*/ key: "history",
|
|
478
478
|
value: function history(brainTitle) {
|
|
479
|
-
var limit = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 10,
|
|
480
|
-
return this.storage.exec("\n SELECT\n run_id as brainRunId,\n brain_title as brainTitle,\n brain_description as brainDescription,\n type,\n status,\n options,\n error,\n created_at as createdAt,\n started_at as startedAt,\n completed_at as completedAt,\n
|
|
479
|
+
var limit = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 10, userName = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : null;
|
|
480
|
+
return this.storage.exec("\n SELECT\n run_id as brainRunId,\n brain_title as brainTitle,\n brain_description as brainDescription,\n type,\n status,\n options,\n error,\n created_at as createdAt,\n started_at as startedAt,\n completed_at as completedAt,\n user_name as userName\n FROM brain_runs\n WHERE brain_title = ?\n AND (? IS NULL OR user_name = ?)\n ORDER BY created_at DESC\n LIMIT ?\n ", brainTitle, userName, userName, limit).toArray();
|
|
481
481
|
}
|
|
482
482
|
},
|
|
483
483
|
{
|
|
484
484
|
/**
|
|
485
485
|
* Get active brain runs for a specific brain (running, paused, or waiting).
|
|
486
|
-
* Pass null for
|
|
486
|
+
* Pass null for userName to skip ownership filter (root access).
|
|
487
487
|
*/ key: "activeRuns",
|
|
488
488
|
value: function activeRuns(brainTitle) {
|
|
489
|
-
var
|
|
490
|
-
return this.storage.exec("\n SELECT\n run_id as brainRunId,\n brain_title as brainTitle,\n brain_description as brainDescription,\n type,\n status,\n options,\n error,\n created_at as createdAt,\n started_at as startedAt,\n completed_at as completedAt,\n
|
|
489
|
+
var userName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
490
|
+
return this.storage.exec("\n SELECT\n run_id as brainRunId,\n brain_title as brainTitle,\n brain_description as brainDescription,\n type,\n status,\n options,\n error,\n created_at as createdAt,\n started_at as startedAt,\n completed_at as completedAt,\n user_name as userName\n FROM brain_runs\n WHERE brain_title = ? AND status IN (?, ?, ?)\n AND (? IS NULL OR user_name = ?)\n ORDER BY created_at DESC\n ", brainTitle, STATUS.RUNNING, STATUS.PAUSED, STATUS.WAITING, userName, userName).toArray();
|
|
491
491
|
}
|
|
492
492
|
},
|
|
493
493
|
{
|