@positronic/cloudflare 0.0.56 → 0.0.58

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 (41) hide show
  1. package/dist/src/api/auth-middleware.js +475 -0
  2. package/dist/src/api/brains.js +160 -0
  3. package/dist/src/api/index.js +39 -1
  4. package/dist/src/api/secrets.js +31 -1
  5. package/dist/src/api/users.js +582 -0
  6. package/dist/src/api/webhooks/coordination.js +43 -8
  7. package/dist/src/api/webhooks/index.js +2 -2
  8. package/dist/src/api/webhooks/system.js +2 -2
  9. package/dist/src/auth-do.js +455 -0
  10. package/dist/src/brain-runner-do.js +255 -97
  11. package/dist/src/event-loader.js +301 -0
  12. package/dist/src/index.js +1 -0
  13. package/dist/src/monitor-do.js +39 -19
  14. package/dist/src/signal-provider.js +179 -0
  15. package/dist/src/sqlite-adapter.js +200 -13
  16. package/dist/types/api/auth-middleware.d.ts +19 -0
  17. package/dist/types/api/auth-middleware.d.ts.map +1 -0
  18. package/dist/types/api/brains.d.ts.map +1 -1
  19. package/dist/types/api/index.d.ts.map +1 -1
  20. package/dist/types/api/secrets.d.ts.map +1 -1
  21. package/dist/types/api/types.d.ts +3 -0
  22. package/dist/types/api/types.d.ts.map +1 -1
  23. package/dist/types/api/users.d.ts +7 -0
  24. package/dist/types/api/users.d.ts.map +1 -0
  25. package/dist/types/api/webhooks/coordination.d.ts +7 -3
  26. package/dist/types/api/webhooks/coordination.d.ts.map +1 -1
  27. package/dist/types/auth-do.d.ts +37 -0
  28. package/dist/types/auth-do.d.ts.map +1 -0
  29. package/dist/types/brain-runner-do.d.ts +29 -2
  30. package/dist/types/brain-runner-do.d.ts.map +1 -1
  31. package/dist/types/event-loader.d.ts +25 -0
  32. package/dist/types/event-loader.d.ts.map +1 -0
  33. package/dist/types/index.d.ts +1 -0
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/monitor-do.d.ts +1 -0
  36. package/dist/types/monitor-do.d.ts.map +1 -1
  37. package/dist/types/signal-provider.d.ts +11 -0
  38. package/dist/types/signal-provider.d.ts.map +1 -0
  39. package/dist/types/sqlite-adapter.d.ts +6 -3
  40. package/dist/types/sqlite-adapter.d.ts.map +1 -1
  41. package/package.json +5 -4
@@ -1,3 +1,32 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ } catch (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+ if (info.done) {
10
+ resolve(value);
11
+ } else {
12
+ Promise.resolve(value).then(_next, _throw);
13
+ }
14
+ }
15
+ function _async_to_generator(fn) {
16
+ return function() {
17
+ var self = this, args = arguments;
18
+ return new Promise(function(resolve, reject) {
19
+ var gen = fn.apply(self, args);
20
+ function _next(value) {
21
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
+ }
23
+ function _throw(err) {
24
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
+ }
26
+ _next(undefined);
27
+ });
28
+ };
29
+ }
1
30
  function _class_call_check(instance, Constructor) {
2
31
  if (!(instance instanceof Constructor)) {
3
32
  throw new TypeError("Cannot call a class as a function");
@@ -30,16 +59,116 @@ function _define_property(obj, key, value) {
30
59
  }
31
60
  return obj;
32
61
  }
33
- // Define the new schema with a single events table
34
- var initSQL = "\nCREATE TABLE IF NOT EXISTS brain_events (\n event_id INTEGER PRIMARY KEY AUTOINCREMENT,\n event_type TEXT NOT NULL,\n serialized_event TEXT NOT NULL CHECK(json_valid(serialized_event)),\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n";
62
+ function _ts_generator(thisArg, body) {
63
+ var f, y, t, _ = {
64
+ label: 0,
65
+ sent: function() {
66
+ if (t[0] & 1) throw t[1];
67
+ return t[1];
68
+ },
69
+ trys: [],
70
+ ops: []
71
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
72
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
73
+ return this;
74
+ }), g;
75
+ function verb(n) {
76
+ return function(v) {
77
+ return step([
78
+ n,
79
+ v
80
+ ]);
81
+ };
82
+ }
83
+ function step(op) {
84
+ if (f) throw new TypeError("Generator is already executing.");
85
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
86
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
87
+ if (y = 0, t) op = [
88
+ op[0] & 2,
89
+ t.value
90
+ ];
91
+ switch(op[0]){
92
+ case 0:
93
+ case 1:
94
+ t = op;
95
+ break;
96
+ case 4:
97
+ _.label++;
98
+ return {
99
+ value: op[1],
100
+ done: false
101
+ };
102
+ case 5:
103
+ _.label++;
104
+ y = op[1];
105
+ op = [
106
+ 0
107
+ ];
108
+ continue;
109
+ case 7:
110
+ op = _.ops.pop();
111
+ _.trys.pop();
112
+ continue;
113
+ default:
114
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
115
+ _ = 0;
116
+ continue;
117
+ }
118
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
119
+ _.label = op[1];
120
+ break;
121
+ }
122
+ if (op[0] === 6 && _.label < t[1]) {
123
+ _.label = t[1];
124
+ t = op;
125
+ break;
126
+ }
127
+ if (t && _.label < t[2]) {
128
+ _.label = t[2];
129
+ _.ops.push(op);
130
+ break;
131
+ }
132
+ if (t[2]) _.ops.pop();
133
+ _.trys.pop();
134
+ continue;
135
+ }
136
+ op = body.call(thisArg, _);
137
+ } catch (e) {
138
+ op = [
139
+ 6,
140
+ e
141
+ ];
142
+ y = 0;
143
+ } finally{
144
+ f = t = 0;
145
+ }
146
+ if (op[0] & 5) throw op[1];
147
+ return {
148
+ value: op[0] ? op[1] : void 0,
149
+ done: true
150
+ };
151
+ }
152
+ }
153
+ // R2 overflow stores large events (>1MB) in R2 instead of SQLite.
154
+ // This feature is manually tested because vitest-pool-workers has limitations
155
+ // with large data and isolated storage cleanup.
156
+ // See: https://developers.cloudflare.com/workers/testing/vitest-integration/known-issues/#isolated-storage
157
+ // Size threshold for R2 overflow (1MB)
158
+ export var R2_OVERFLOW_THRESHOLD = 1024 * 1024;
159
+ // Define the schema with r2_key column for overflow support
160
+ var initSQL = "\nCREATE TABLE IF NOT EXISTS brain_events (\n event_id INTEGER PRIMARY KEY AUTOINCREMENT,\n event_type TEXT NOT NULL,\n serialized_event TEXT CHECK(serialized_event IS NULL OR json_valid(serialized_event)),\n r2_key TEXT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n";
35
161
  export var BrainRunSQLiteAdapter = /*#__PURE__*/ function() {
36
162
  "use strict";
37
- function BrainRunSQLiteAdapter(sql) {
163
+ function BrainRunSQLiteAdapter(sql, bucket, brainRunId) {
38
164
  _class_call_check(this, BrainRunSQLiteAdapter);
39
165
  _define_property(this, "sql", void 0);
40
- _define_property(this, "schemaInitialized", false) // Track schema initialization
41
- ;
166
+ _define_property(this, "bucket", void 0);
167
+ _define_property(this, "brainRunId", void 0);
168
+ _define_property(this, "schemaInitialized", false);
42
169
  this.sql = sql;
170
+ this.bucket = bucket;
171
+ this.brainRunId = brainRunId;
43
172
  }
44
173
  _create_class(BrainRunSQLiteAdapter, [
45
174
  {
@@ -54,14 +183,72 @@ export var BrainRunSQLiteAdapter = /*#__PURE__*/ function() {
54
183
  {
55
184
  key: "dispatch",
56
185
  value: function dispatch(event) {
57
- try {
58
- this.initializeSchema();
59
- var insertSql = "\n INSERT INTO brain_events (\n event_type,\n serialized_event\n ) VALUES (?, ?);";
60
- this.sql.exec(insertSql, event.type, JSON.stringify(event));
61
- } catch (e) {
62
- console.error('[SQL_ADAPTER] Error handling brain event:', e, 'Event data:', JSON.stringify(event));
63
- throw e;
64
- }
186
+ return _async_to_generator(function() {
187
+ var serialized, serializedSize, insertSql, result, eventId, r2Key, insertSql1, e;
188
+ return _ts_generator(this, function(_state) {
189
+ switch(_state.label){
190
+ case 0:
191
+ _state.trys.push([
192
+ 0,
193
+ 4,
194
+ ,
195
+ 5
196
+ ]);
197
+ this.initializeSchema();
198
+ serialized = JSON.stringify(event);
199
+ serializedSize = new TextEncoder().encode(serialized).length;
200
+ if (!(serializedSize > R2_OVERFLOW_THRESHOLD)) return [
201
+ 3,
202
+ 2
203
+ ];
204
+ // Store in R2, keep reference in SQLite
205
+ // First insert to get event_id, then construct R2 key
206
+ insertSql = "\n INSERT INTO brain_events (\n event_type,\n serialized_event,\n r2_key\n ) VALUES (?, NULL, 'pending');";
207
+ this.sql.exec(insertSql, event.type);
208
+ // Get the last inserted event_id
209
+ result = this.sql.exec("SELECT last_insert_rowid() as event_id").toArray();
210
+ eventId = result[0].event_id;
211
+ // Construct R2 key
212
+ r2Key = "events/".concat(this.brainRunId, "/").concat(eventId, ".json");
213
+ // Store in R2
214
+ return [
215
+ 4,
216
+ this.bucket.put(r2Key, serialized, {
217
+ customMetadata: {
218
+ eventType: event.type,
219
+ brainRunId: this.brainRunId
220
+ }
221
+ })
222
+ ];
223
+ case 1:
224
+ _state.sent();
225
+ // Update SQLite with the actual R2 key
226
+ this.sql.exec("UPDATE brain_events SET r2_key = ? WHERE event_id = ?", r2Key, eventId);
227
+ return [
228
+ 3,
229
+ 3
230
+ ];
231
+ case 2:
232
+ // Store inline in SQLite
233
+ insertSql1 = "\n INSERT INTO brain_events (\n event_type,\n serialized_event,\n r2_key\n ) VALUES (?, ?, NULL);";
234
+ this.sql.exec(insertSql1, event.type, serialized);
235
+ _state.label = 3;
236
+ case 3:
237
+ return [
238
+ 3,
239
+ 5
240
+ ];
241
+ case 4:
242
+ e = _state.sent();
243
+ console.error('[SQL_ADAPTER] Error handling brain event:', e, 'Event data:', JSON.stringify(event));
244
+ throw e;
245
+ case 5:
246
+ return [
247
+ 2
248
+ ];
249
+ }
250
+ });
251
+ }).call(this);
65
252
  }
66
253
  }
67
254
  ]);
@@ -0,0 +1,19 @@
1
+ import type { MiddlewareHandler } from 'hono';
2
+ import type { Bindings } from './types.js';
3
+ export interface AuthContext {
4
+ userId: string | null;
5
+ isRoot: boolean;
6
+ }
7
+ declare module 'hono' {
8
+ interface ContextVariableMap {
9
+ auth: AuthContext;
10
+ }
11
+ }
12
+ /**
13
+ * Authentication middleware for the Positronic API
14
+ * Verifies HTTP message signatures (RFC 9421) using @misskey-dev/node-http-message-signatures for parsing
15
+ */
16
+ export declare function authMiddleware(): MiddlewareHandler<{
17
+ Bindings: Bindings;
18
+ }>;
19
+ //# sourceMappingURL=auth-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../../src/api/auth-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAO3C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAGD,OAAO,QAAQ,MAAM,CAAC;IACpB,UAAU,kBAAkB;QAC1B,IAAI,EAAE,WAAW,CAAC;KACnB;CACF;AAsGD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,iBAAiB,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAoG1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"brains.d.ts","sourceRoot":"","sources":["../../../src/api/brains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAK1C,OAAO,KAAK,EAAE,QAAQ,EAAiD,MAAM,YAAY,CAAC;AAE1F,QAAA,MAAM,MAAM;cAAwB,QAAQ;yCAAK,CAAC;AAwelD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"brains.d.ts","sourceRoot":"","sources":["../../../src/api/brains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAM1C,OAAO,KAAK,EAAE,QAAQ,EAAiD,MAAM,YAAY,CAAC;AAE1F,QAAA,MAAM,MAAM;cAAwB,QAAQ;yCAAK,CAAC;AAsjBlD,eAAe,MAAM,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AAe/C,eAAe,GAAG,CAAC;AAGnB,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAU3C,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AAwC/C,eAAe,GAAG,CAAC;AAGnB,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../src/api/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiD3C,QAAA,MAAM,OAAO;cAAwB,QAAQ;yCAAK,CAAC;AA2QnD,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../../src/api/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAiD3C,QAAA,MAAM,OAAO;cAAwB,QAAQ;yCAAK,CAAC;AA0SnD,eAAe,OAAO,CAAC"}
@@ -2,11 +2,13 @@ import type { Hono } from 'hono';
2
2
  import type { BrainRunnerDO } from '../brain-runner-do.js';
3
3
  import type { MonitorDO } from '../monitor-do.js';
4
4
  import type { ScheduleDO } from '../schedule-do.js';
5
+ import type { AuthDO } from '../auth-do.js';
5
6
  import type { R2Bucket } from '@cloudflare/workers-types';
6
7
  export type Bindings = {
7
8
  BRAIN_RUNNER_DO: DurableObjectNamespace<BrainRunnerDO>;
8
9
  MONITOR_DO: DurableObjectNamespace<MonitorDO>;
9
10
  SCHEDULE_DO: DurableObjectNamespace<ScheduleDO>;
11
+ AUTH_DO: DurableObjectNamespace<AuthDO>;
10
12
  RESOURCES_BUCKET: R2Bucket;
11
13
  NODE_ENV?: string;
12
14
  R2_ACCESS_KEY_ID?: string;
@@ -17,6 +19,7 @@ export type Bindings = {
17
19
  CLOUDFLARE_ACCOUNT_ID?: string;
18
20
  CF_SCRIPT_NAME?: string;
19
21
  WORKER_URL?: string;
22
+ ROOT_PUBLIC_KEY?: string;
20
23
  };
21
24
  export type HonoApp = Hono<{
22
25
  Bindings: Bindings;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,MAAM,QAAQ,GAAG;IACrB,eAAe,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvD,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAEnD,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,MAAM,QAAQ,GAAG;IACrB,eAAe,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACvD,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACxC,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAEnD,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Hono } from 'hono';
2
+ import type { Bindings } from './types.js';
3
+ declare const app: Hono<{
4
+ Bindings: Bindings;
5
+ }, import("hono/types").BlankSchema, "/">;
6
+ export default app;
7
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/api/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AA4N/C,eAAe,GAAG,CAAC"}
@@ -12,15 +12,19 @@ export type WebhookHandlerResult = {
12
12
  response: Record<string, unknown>;
13
13
  };
14
14
  /**
15
- * Find a brain waiting for a webhook and resume it if found.
15
+ * Find a brain waiting for a webhook, queue the WEBHOOK_RESPONSE signal, and wake it up.
16
16
  * Returns a JSON response object suitable for returning from a webhook endpoint.
17
+ *
18
+ * This is the signal-based approach: webhook response data flows through the signal queue
19
+ * rather than being passed directly to the resume method.
17
20
  */
18
- export declare function findAndResumeBrain(context: Context, slug: string, identifier: string, response: Record<string, unknown>): Promise<{
21
+ export declare function queueWebhookAndWakeUp(context: Context, slug: string, identifier: string, response: Record<string, unknown>): Promise<{
19
22
  received: boolean;
20
- action: 'resumed' | 'not_found' | 'queued';
23
+ action: 'resumed' | 'not_found' | 'queued' | 'ignored';
21
24
  identifier: string;
22
25
  brainRunId?: string;
23
26
  message?: string;
27
+ reason?: string;
24
28
  }>;
25
29
  /**
26
30
  * Parse form data into a plain object, handling array fields.
@@ -1 +1 @@
1
- {"version":3,"file":"coordination.d.ts","sourceRoot":"","sources":["../../../../src/api/webhooks/coordination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEhF;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CA4BD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzE"}
1
+ {"version":3,"file":"coordination.d.ts","sourceRoot":"","sources":["../../../../src/api/webhooks/coordination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEhF;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CA6CD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBzE"}
@@ -0,0 +1,37 @@
1
+ import { DurableObject } from 'cloudflare:workers';
2
+ export interface AuthEnv {
3
+ ROOT_PUBLIC_KEY?: string;
4
+ NODE_ENV?: string;
5
+ }
6
+ export interface User {
7
+ id: string;
8
+ name: string;
9
+ createdAt: number;
10
+ }
11
+ export interface UserKey {
12
+ fingerprint: string;
13
+ userId: string;
14
+ jwk: string;
15
+ label: string;
16
+ addedAt: number;
17
+ }
18
+ export declare class AuthDO extends DurableObject<AuthEnv> {
19
+ private readonly storage;
20
+ constructor(state: DurableObjectState, env: AuthEnv);
21
+ createUser(name: string): Promise<User>;
22
+ getUser(userId: string): Promise<User | null>;
23
+ getUserByName(name: string): Promise<User | null>;
24
+ listUsers(): Promise<{
25
+ users: User[];
26
+ count: number;
27
+ }>;
28
+ deleteUser(userId: string): Promise<boolean>;
29
+ addKey(userId: string, fingerprint: string, jwk: string, label?: string): Promise<UserKey>;
30
+ listKeys(userId: string): Promise<{
31
+ keys: UserKey[];
32
+ count: number;
33
+ }>;
34
+ removeKey(userId: string, fingerprint: string): Promise<boolean>;
35
+ getKeyByFingerprint(fingerprint: string): Promise<UserKey | null>;
36
+ }
37
+ //# sourceMappingURL=auth-do.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-do.d.ts","sourceRoot":"","sources":["../../src/auth-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,WAAW,OAAO;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,MAAO,SAAQ,aAAa,CAAC,OAAO,CAAC;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;gBAEzB,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO;IA0B7C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAiB7C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAiBjD,SAAS,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAgBtD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa5C,MAAM,CACV,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,OAAO,CAAC;IAqBb,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAqBrE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBhE,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CAqBxE"}
@@ -1,4 +1,4 @@
1
- import { BrainRunner } from '@positronic/core';
1
+ import { BrainRunner, type BrainSignal } from '@positronic/core';
2
2
  import { DurableObject } from 'cloudflare:workers';
3
3
  import type { MonitorDO } from './monitor-do.js';
4
4
  import type { ScheduleDO } from './schedule-do.js';
@@ -21,7 +21,29 @@ export declare class BrainRunnerDO extends DurableObject<Env> {
21
21
  private brainRunId;
22
22
  private eventStreamAdapter;
23
23
  private abortController;
24
+ private pageAdapter;
25
+ private signalsTableInitialized;
24
26
  constructor(state: DurableObjectState, env: Env);
27
+ private initializeSignalsTable;
28
+ /**
29
+ * Queue a signal for this brain run.
30
+ * Returns the queued signal with timestamp.
31
+ * For WEBHOOK_RESPONSE signals, the response object is JSON-stringified and stored in content.
32
+ */
33
+ queueSignal(signal: {
34
+ type: string;
35
+ content?: string;
36
+ response?: Record<string, unknown>;
37
+ }): Promise<{
38
+ type: string;
39
+ queuedAt: number;
40
+ }>;
41
+ /**
42
+ * Get and consume (delete) pending signals.
43
+ * Signals are returned in priority order: KILL > PAUSE > WEBHOOK_RESPONSE > RESUME > USER_MESSAGE
44
+ * @param filter 'CONTROL' returns only KILL/PAUSE, 'WEBHOOK' returns only WEBHOOK_RESPONSE, 'ALL' includes all signal types
45
+ */
46
+ getAndConsumeSignals(filter: 'CONTROL' | 'WEBHOOK' | 'ALL'): BrainSignal[];
25
47
  private loadResourcesFromR2;
26
48
  /**
27
49
  * Build the RuntimeEnv for brain execution.
@@ -42,7 +64,12 @@ export declare class BrainRunnerDO extends DurableObject<Env> {
42
64
  message: string;
43
65
  }>;
44
66
  start(brainTitle: string, brainRunId: string, initialData?: Record<string, any>): Promise<void>;
45
- resume(brainRunId: string, webhookResponse: Record<string, any>): Promise<void>;
67
+ /**
68
+ * Wake up (resume) a brain from a previous execution point.
69
+ * Webhook response data comes from signals, not as a parameter.
70
+ * This method reconstructs state and calls BrainRunner.resume().
71
+ */
72
+ wakeUp(brainRunId: string): Promise<void>;
46
73
  fetch(request: Request): Promise<Response>;
47
74
  }
48
75
  //# sourceMappingURL=brain-runner-do.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"brain-runner-do.d.ts","sourceRoot":"","sources":["../../src/brain-runner-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyI,MAAM,kBAAkB,CAAC;AACtL,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,wBAAgB,WAAW,CAAC,iBAAiB,EAAE,kBAAkB,QAEhE;AAED,wBAAgB,WAAW,IAAI,kBAAkB,GAAG,IAAI,CAEvD;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,QAEjD;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAE/D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAExD;AAED,MAAM,WAAW,GAAG;IAClB,eAAe,EAAE,sBAAsB,CAAC;IACxC,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwDD,qBAAa,aAAc,SAAQ,aAAa,CAAC,GAAG,CAAC;IACnD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,eAAe,CAAgC;gBAE3C,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;YAOjC,mBAAmB;IAqEjC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;;OAQG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAuE9F,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAuG7B,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmJhC,KAAK,CAAC,OAAO,EAAE,OAAO;CA4E7B"}
1
+ {"version":3,"file":"brain-runner-do.d.ts","sourceRoot":"","sources":["../../src/brain-runner-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiG,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAChK,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AASnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,wBAAgB,WAAW,CAAC,iBAAiB,EAAE,kBAAkB,QAEhE;AAED,wBAAgB,WAAW,IAAI,kBAAkB,GAAG,IAAI,CAEvD;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,QAEjD;AAGD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAE/D;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAExD;AAED,MAAM,WAAW,GAAG;IAClB,eAAe,EAAE,sBAAsB,CAAC;IACxC,UAAU,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9C,WAAW,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAChD,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAkED,qBAAa,aAAc,SAAQ,aAAa,CAAC,GAAG,CAAC;IACnD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,uBAAuB,CAAS;gBAE5B,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;IAO/C,OAAO,CAAC,sBAAsB;IAO9B;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAmB9I;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,WAAW,EAAE;YA+C5D,mBAAmB;IAqEjC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;;OAQG;IACG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA0E9F,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA6GnC;;;;OAIG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM;IA8HzB,KAAK,CAAC,OAAO,EAAE,OAAO;CAkE7B"}
@@ -0,0 +1,25 @@
1
+ import type { BrainEvent } from '@positronic/core';
2
+ import type { SqlStorage, R2Bucket } from '@cloudflare/workers-types';
3
+ /**
4
+ * Helper class to load events from SQLite, transparently fetching from R2 when needed.
5
+ * Events may be stored inline in SQLite (serialized_event) or overflow to R2 (r2_key).
6
+ */
7
+ export declare class EventLoader {
8
+ private sql;
9
+ private bucket;
10
+ constructor(sql: SqlStorage, bucket: R2Bucket);
11
+ /**
12
+ * Load all events in order, hydrating from R2 where necessary.
13
+ */
14
+ loadAllEvents(): Promise<BrainEvent[]>;
15
+ /**
16
+ * Load a single event by type, optionally ordering to get first/last.
17
+ * Returns null if no event of the given type exists.
18
+ */
19
+ loadEventByType(eventType: string, order?: 'ASC' | 'DESC'): Promise<BrainEvent | null>;
20
+ /**
21
+ * Hydrate event rows, fetching from R2 in parallel where needed.
22
+ */
23
+ private hydrateEvents;
24
+ }
25
+ //# sourceMappingURL=event-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-loader.d.ts","sourceRoot":"","sources":["../../src/event-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAUtE;;;GAGG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,MAAM;gBADN,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,QAAQ;IAG1B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAY5C;;;OAGG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,KAAK,GAAG,MAAe,GAC7B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAoB7B;;OAEG;YACW,aAAa;CAsC5B"}
@@ -1,6 +1,7 @@
1
1
  export { BrainRunnerDO, setBrainRunner, setManifest, setWebhookManifest, } from './brain-runner-do.js';
2
2
  export { MonitorDO } from './monitor-do.js';
3
3
  export { ScheduleDO } from './schedule-do.js';
4
+ export { AuthDO } from './auth-do.js';
4
5
  export { PositronicManifest, type BrainMetadata } from './manifest.js';
5
6
  export { default as api } from './api/index.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,gBAAgB,CAAC"}
@@ -5,6 +5,7 @@ export interface Env {
5
5
  export declare class MonitorDO extends DurableObject<Env> {
6
6
  private readonly storage;
7
7
  private eventStreamHandler;
8
+ private machines;
8
9
  constructor(state: DurableObjectState, env: Env);
9
10
  handleBrainEvent(event: BrainEvent<any>): void;
10
11
  private broadcastRunningBrains;
@@ -1 +1 @@
1
- {"version":3,"file":"monitor-do.d.ts","sourceRoot":"","sources":["../../src/monitor-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,GAAG;CAEnB;AAED,qBAAa,SAAU,SAAQ,aAAa,CAAC,GAAG,CAAC;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,kBAAkB,CAA4B;gBAE1C,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;IAkE/C,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC;YAqFzB,sBAAsB;IA0B9B,KAAK,CAAC,OAAO,EAAE,OAAO;IAiE5B,YAAY,CAAC,UAAU,EAAE,MAAM;IAa/B;;;OAGG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM;IAqCzB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IA6B9C,UAAU,CAAC,UAAU,EAAE,MAAM;IAyB7B;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAapE;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBjE;;;OAGG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM;IAU5C;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAgB/D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM;IAU3B;;;OAGG;IACH,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAezD;;;OAGG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM;CAU1C"}
1
+ {"version":3,"file":"monitor-do.d.ts","sourceRoot":"","sources":["../../src/monitor-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAQnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,GAAG;CAEnB;AAED,qBAAa,SAAU,SAAQ,aAAa,CAAC,GAAG,CAAC;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,kBAAkB,CAA4B;IAEtD,OAAO,CAAC,QAAQ,CAAwC;gBAE5C,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;IAkE/C,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC;YAmHzB,sBAAsB;IA4B9B,KAAK,CAAC,OAAO,EAAE,OAAO;IAmE5B,YAAY,CAAC,UAAU,EAAE,MAAM;IAa/B;;;OAGG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM;IAqCzB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW;IA6B9C,UAAU,CAAC,UAAU,EAAE,MAAM;IA2B7B;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAapE;;;OAGG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiBjE;;;OAGG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM;IAU5C;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAgB/D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM;IAU3B;;;OAGG;IACH,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAezD;;;OAGG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM;CAU1C"}
@@ -0,0 +1,11 @@
1
+ import type { SignalProvider, BrainSignal } from '@positronic/core';
2
+ /**
3
+ * Cloudflare-specific SignalProvider implementation.
4
+ * Reads signals from the BrainRunnerDO's SQLite storage.
5
+ */
6
+ export declare class CloudflareSignalProvider implements SignalProvider {
7
+ private getAndConsumeSignals;
8
+ constructor(getAndConsumeSignals: (filter: 'CONTROL' | 'WEBHOOK' | 'ALL') => BrainSignal[]);
9
+ getSignals(filter: 'CONTROL' | 'WEBHOOK' | 'ALL'): Promise<BrainSignal[]>;
10
+ }
11
+ //# sourceMappingURL=signal-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-provider.d.ts","sourceRoot":"","sources":["../../src/signal-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;;GAGG;AACH,qBAAa,wBAAyB,YAAW,cAAc;IAE3D,OAAO,CAAC,oBAAoB;gBAApB,oBAAoB,EAAE,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,KAAK,KAAK,WAAW,EAAE;IAGlF,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAGhF"}
@@ -1,10 +1,13 @@
1
1
  import type { Adapter, BrainEvent } from '@positronic/core';
2
- import type { SqlStorage } from '@cloudflare/workers-types';
2
+ import type { SqlStorage, R2Bucket } from '@cloudflare/workers-types';
3
+ export declare const R2_OVERFLOW_THRESHOLD: number;
3
4
  export declare class BrainRunSQLiteAdapter implements Adapter {
4
5
  private sql;
6
+ private bucket;
7
+ private brainRunId;
5
8
  private schemaInitialized;
6
- constructor(sql: SqlStorage);
9
+ constructor(sql: SqlStorage, bucket: R2Bucket, brainRunId: string);
7
10
  private initializeSchema;
8
- dispatch(event: BrainEvent): void;
11
+ dispatch(event: BrainEvent): Promise<void>;
9
12
  }
10
13
  //# sourceMappingURL=sqlite-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/sqlite-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAY5D,qBAAa,qBAAsB,YAAW,OAAO;IACnD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,GAAG,EAAE,UAAU;IAI3B,OAAO,CAAC,gBAAgB;IAOjB,QAAQ,CAAC,KAAK,EAAE,UAAU;CAqBlC"}
1
+ {"version":3,"file":"sqlite-adapter.d.ts","sourceRoot":"","sources":["../../src/sqlite-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAQtE,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAajD,qBAAa,qBAAsB,YAAW,OAAO;IACnD,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM;IAMjE,OAAO,CAAC,gBAAgB;IAOX,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CA+DxD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@positronic/cloudflare",
3
- "version": "0.0.56",
3
+ "version": "0.0.58",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -31,9 +31,10 @@
31
31
  "clean": "rm -rf tsconfig.tsbuildinfo dist"
32
32
  },
33
33
  "dependencies": {
34
- "@positronic/core": "^0.0.56",
35
- "@positronic/spec": "^0.0.56",
36
- "@positronic/template-new-project": "^0.0.56",
34
+ "@misskey-dev/node-http-message-signatures": "^0.0.10",
35
+ "@positronic/core": "^0.0.58",
36
+ "@positronic/spec": "^0.0.58",
37
+ "@positronic/template-new-project": "^0.0.58",
37
38
  "aws4fetch": "^1.0.18",
38
39
  "caz": "^2.0.0",
39
40
  "cron-schedule": "^5.0.4",