@positronic/cloudflare 0.0.64 → 0.0.65

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.
@@ -294,6 +294,7 @@ import { DurableObject } from 'cloudflare:workers';
294
294
  import { CloudflareSignalProvider } from './signal-provider.js';
295
295
  import { BrainRunSQLiteAdapter } from './sqlite-adapter.js';
296
296
  import { WebhookAdapter } from './webhook-adapter.js';
297
+ import { TimeoutAdapter } from './timeout-adapter.js';
297
298
  import { PageAdapter } from './page-adapter.js';
298
299
  import { EventLoader } from './event-loader.js';
299
300
  import { createPagesService } from './pages-service.js';
@@ -504,6 +505,8 @@ var ScheduleAdapter = /*#__PURE__*/ function() {
504
505
  }();
505
506
  // SQL to initialize the signals table
506
507
  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";
508
+ // SQL to initialize the wait timeout table
509
+ var waitTimeoutTableSQL = "\nCREATE TABLE IF NOT EXISTS wait_timeout (\n brain_run_id TEXT PRIMARY KEY,\n timeout_at INTEGER NOT NULL\n);\n";
507
510
  export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
508
511
  "use strict";
509
512
  _inherits(BrainRunnerDO, DurableObject);
@@ -513,7 +516,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
513
516
  _this = _call_super(this, BrainRunnerDO, [
514
517
  state,
515
518
  env
516
- ]), _define_property(_this, "sql", void 0), _define_property(_this, "brainRunId", void 0), _define_property(_this, "eventStreamAdapter", new EventStreamAdapter()), _define_property(_this, "abortController", null), _define_property(_this, "pageAdapter", null), _define_property(_this, "signalsTableInitialized", false);
519
+ ]), _define_property(_this, "sql", void 0), _define_property(_this, "brainRunId", void 0), _define_property(_this, "eventStreamAdapter", new EventStreamAdapter()), _define_property(_this, "abortController", null), _define_property(_this, "pageAdapter", null), _define_property(_this, "signalsTableInitialized", false), _define_property(_this, "waitTimeoutTableInitialized", false);
517
520
  _this.sql = state.storage.sql;
518
521
  _this.brainRunId = state.id.toString();
519
522
  _this.env = env;
@@ -529,6 +532,41 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
529
532
  }
530
533
  }
531
534
  },
535
+ {
536
+ key: "initializeWaitTimeoutTable",
537
+ value: function initializeWaitTimeoutTable() {
538
+ if (!this.waitTimeoutTableInitialized) {
539
+ this.sql.exec(waitTimeoutTableSQL);
540
+ this.waitTimeoutTableInitialized = true;
541
+ }
542
+ }
543
+ },
544
+ {
545
+ key: "storeWaitTimeout",
546
+ value: function storeWaitTimeout(brainRunId, timeoutAt) {
547
+ this.initializeWaitTimeoutTable();
548
+ this.sql.exec("INSERT OR REPLACE INTO wait_timeout (brain_run_id, timeout_at) VALUES (?, ?)", brainRunId, timeoutAt);
549
+ }
550
+ },
551
+ {
552
+ key: "clearWaitTimeout",
553
+ value: function clearWaitTimeout(brainRunId) {
554
+ this.initializeWaitTimeoutTable();
555
+ this.sql.exec("DELETE FROM wait_timeout WHERE brain_run_id = ?", brainRunId);
556
+ }
557
+ },
558
+ {
559
+ key: "getWaitTimeout",
560
+ value: function getWaitTimeout() {
561
+ this.initializeWaitTimeoutTable();
562
+ var results = this.sql.exec("SELECT brain_run_id, timeout_at FROM wait_timeout LIMIT 1").toArray();
563
+ if (results.length === 0) return null;
564
+ return {
565
+ brainRunId: results[0].brain_run_id,
566
+ timeoutAt: results[0].timeout_at
567
+ };
568
+ }
569
+ },
532
570
  {
533
571
  key: "queueSignal",
534
572
  value: /**
@@ -928,14 +966,31 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
928
966
  key: "alarm",
929
967
  value: function alarm() {
930
968
  return _async_to_generator(function() {
969
+ var timeout;
931
970
  return _ts_generator(this, function(_state) {
932
971
  switch(_state.label){
933
972
  case 0:
973
+ timeout = this.getWaitTimeout();
974
+ if (!(timeout && Date.now() >= timeout.timeoutAt)) return [
975
+ 3,
976
+ 2
977
+ ];
978
+ this.clearWaitTimeout(timeout.brainRunId);
934
979
  return [
935
980
  4,
936
- this.wakeUp(this.brainRunId)
981
+ this.queueSignal({
982
+ type: 'KILL'
983
+ })
937
984
  ];
938
985
  case 1:
986
+ _state.sent();
987
+ _state.label = 2;
988
+ case 2:
989
+ return [
990
+ 4,
991
+ this.wakeUp(this.brainRunId)
992
+ ];
993
+ case 3:
939
994
  _state.sent();
940
995
  return [
941
996
  2
@@ -949,7 +1004,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
949
1004
  key: "start",
950
1005
  value: function start(brainTitle, brainRunId, initialData) {
951
1006
  return _async_to_generator(function() {
952
- var _this, sql, resolution, brainToRun, sqliteAdapter, eventStreamAdapter, monitorDOStub, monitorAdapter, scheduleAdapter, webhookAdapter, env, pagesService, r2Resources, runnerWithResources, signalProvider, options, initialState, batchChunkAdapter;
1007
+ var _this, sql, resolution, brainToRun, sqliteAdapter, eventStreamAdapter, monitorDOStub, monitorAdapter, scheduleAdapter, webhookAdapter, env, pagesService, r2Resources, runnerWithResources, signalProvider, options, initialState, batchChunkAdapter, timeoutAdapter;
953
1008
  return _ts_generator(this, function(_state) {
954
1009
  switch(_state.label){
955
1010
  case 0:
@@ -1016,6 +1071,11 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1016
1071
  }, function(time) {
1017
1072
  return _this.ctx.storage.setAlarm(time);
1018
1073
  });
1074
+ timeoutAdapter = new TimeoutAdapter(function(brainRunId, timeoutAt) {
1075
+ return _this.storeWaitTimeout(brainRunId, timeoutAt);
1076
+ }, function(time) {
1077
+ return _this.ctx.storage.setAlarm(time);
1078
+ });
1019
1079
  runnerWithResources.withAdapters([
1020
1080
  sqliteAdapter,
1021
1081
  eventStreamAdapter,
@@ -1023,7 +1083,8 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1023
1083
  scheduleAdapter,
1024
1084
  webhookAdapter,
1025
1085
  this.pageAdapter,
1026
- batchChunkAdapter
1086
+ batchChunkAdapter,
1087
+ timeoutAdapter
1027
1088
  ]).run(brainToRun, _object_spread_props(_object_spread({
1028
1089
  initialState: initialState,
1029
1090
  brainRunId: brainRunId
@@ -1054,12 +1115,29 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1054
1115
  * This method reconstructs state and calls BrainRunner.resume().
1055
1116
  */ function wakeUp(brainRunId) {
1056
1117
  return _async_to_generator(function() {
1057
- var _this, sql, eventLoader, startEvent, brainTitle, initialState, originalBrainRunId, resolution, brainToRun, allEvents, machine, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, event, sqliteAdapter, eventStreamAdapter, monitorDOStub, monitorAdapter, scheduleAdapter, webhookAdapter, env, pagesService, r2Resources, runnerWithResources, signalProvider, batchChunkAdapter;
1118
+ var _this, sql, pendingTimeout, eventLoader, startEvent, brainTitle, initialState, originalBrainRunId, resolution, brainToRun, allEvents, machine, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, event, sqliteAdapter, eventStreamAdapter, monitorDOStub, monitorAdapter, scheduleAdapter, webhookAdapter, env, pagesService, r2Resources, runnerWithResources, signalProvider, batchChunkAdapter, timeoutAdapter;
1058
1119
  return _ts_generator(this, function(_state) {
1059
1120
  switch(_state.label){
1060
1121
  case 0:
1061
1122
  _this = this;
1062
1123
  sql = this.sql;
1124
+ // Clear any pending timeout and cancel the alarm to prevent spurious alarm
1125
+ // fires after explicit resume. Safe because wakeUp() is only called when a
1126
+ // brain is suspended (waiting/paused), never during active batch execution.
1127
+ pendingTimeout = this.getWaitTimeout();
1128
+ if (!pendingTimeout) return [
1129
+ 3,
1130
+ 2
1131
+ ];
1132
+ this.clearWaitTimeout(pendingTimeout.brainRunId);
1133
+ return [
1134
+ 4,
1135
+ this.ctx.storage.deleteAlarm()
1136
+ ];
1137
+ case 1:
1138
+ _state.sent();
1139
+ _state.label = 2;
1140
+ case 2:
1063
1141
  if (!manifest) {
1064
1142
  throw new Error('Runtime manifest not initialized');
1065
1143
  }
@@ -1069,7 +1147,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1069
1147
  4,
1070
1148
  eventLoader.loadEventByType(BRAIN_EVENTS.START, 'ASC')
1071
1149
  ];
1072
- case 1:
1150
+ case 3:
1073
1151
  startEvent = _state.sent();
1074
1152
  if (!startEvent) {
1075
1153
  throw new Error("No START event found for brain run ".concat(brainRunId));
@@ -1102,7 +1180,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1102
1180
  4,
1103
1181
  eventLoader.loadAllEvents()
1104
1182
  ];
1105
- case 2:
1183
+ case 4:
1106
1184
  allEvents = _state.sent();
1107
1185
  // Create state machine and feed all historical events to reconstruct execution state
1108
1186
  machine = createBrainExecutionMachine({
@@ -1146,7 +1224,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1146
1224
  4,
1147
1225
  this.loadResourcesFromR2()
1148
1226
  ];
1149
- case 3:
1227
+ case 5:
1150
1228
  r2Resources = _state.sent();
1151
1229
  runnerWithResources = brainRunner;
1152
1230
  if (r2Resources) {
@@ -1167,6 +1245,11 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1167
1245
  }, function(time) {
1168
1246
  return _this.ctx.storage.setAlarm(time);
1169
1247
  });
1248
+ timeoutAdapter = new TimeoutAdapter(function(brainRunId, timeoutAt) {
1249
+ return _this.storeWaitTimeout(brainRunId, timeoutAt);
1250
+ }, function(time) {
1251
+ return _this.ctx.storage.setAlarm(time);
1252
+ });
1170
1253
  runnerWithResources.withAdapters([
1171
1254
  sqliteAdapter,
1172
1255
  eventStreamAdapter,
@@ -1174,7 +1257,8 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1174
1257
  scheduleAdapter,
1175
1258
  webhookAdapter,
1176
1259
  this.pageAdapter,
1177
- batchChunkAdapter
1260
+ batchChunkAdapter,
1261
+ timeoutAdapter
1178
1262
  ]).resume(brainToRun, {
1179
1263
  machine: machine,
1180
1264
  brainRunId: originalBrainRunId,
@@ -0,0 +1,205 @@
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
+ }
30
+ function _class_call_check(instance, Constructor) {
31
+ if (!(instance instanceof Constructor)) {
32
+ throw new TypeError("Cannot call a class as a function");
33
+ }
34
+ }
35
+ function _defineProperties(target, props) {
36
+ for(var i = 0; i < props.length; i++){
37
+ var descriptor = props[i];
38
+ descriptor.enumerable = descriptor.enumerable || false;
39
+ descriptor.configurable = true;
40
+ if ("value" in descriptor) descriptor.writable = true;
41
+ Object.defineProperty(target, descriptor.key, descriptor);
42
+ }
43
+ }
44
+ function _create_class(Constructor, protoProps, staticProps) {
45
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
46
+ if (staticProps) _defineProperties(Constructor, staticProps);
47
+ return Constructor;
48
+ }
49
+ function _define_property(obj, key, value) {
50
+ if (key in obj) {
51
+ Object.defineProperty(obj, key, {
52
+ value: value,
53
+ enumerable: true,
54
+ configurable: true,
55
+ writable: true
56
+ });
57
+ } else {
58
+ obj[key] = value;
59
+ }
60
+ return obj;
61
+ }
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
+ import { BRAIN_EVENTS } from '@positronic/core';
154
+ /**
155
+ * Adapter that handles WEBHOOK events with a timeout by storing the
156
+ * timeout and scheduling a DO alarm. When the alarm fires and the
157
+ * brain is still waiting, it queues a KILL signal to cancel the brain.
158
+ */ export var TimeoutAdapter = /*#__PURE__*/ function() {
159
+ "use strict";
160
+ function TimeoutAdapter(storeTimeout, setAlarm) {
161
+ _class_call_check(this, TimeoutAdapter);
162
+ _define_property(this, "storeTimeout", void 0);
163
+ _define_property(this, "setAlarm", void 0);
164
+ this.storeTimeout = storeTimeout;
165
+ this.setAlarm = setAlarm;
166
+ }
167
+ _create_class(TimeoutAdapter, [
168
+ {
169
+ key: "dispatch",
170
+ value: function dispatch(event) {
171
+ return _async_to_generator(function() {
172
+ var timeout, timeoutAt;
173
+ return _ts_generator(this, function(_state) {
174
+ switch(_state.label){
175
+ case 0:
176
+ if (event.type !== BRAIN_EVENTS.WEBHOOK) {
177
+ return [
178
+ 2
179
+ ];
180
+ }
181
+ timeout = event.timeout;
182
+ if (timeout === undefined) {
183
+ return [
184
+ 2
185
+ ];
186
+ }
187
+ timeoutAt = Date.now() + timeout;
188
+ this.storeTimeout(event.brainRunId, timeoutAt);
189
+ return [
190
+ 4,
191
+ this.setAlarm(timeoutAt)
192
+ ];
193
+ case 1:
194
+ _state.sent();
195
+ return [
196
+ 2
197
+ ];
198
+ }
199
+ });
200
+ }).call(this);
201
+ }
202
+ }
203
+ ]);
204
+ return TimeoutAdapter;
205
+ }();
@@ -23,8 +23,16 @@ export declare class BrainRunnerDO extends DurableObject<Env> {
23
23
  private abortController;
24
24
  private pageAdapter;
25
25
  private signalsTableInitialized;
26
+ private waitTimeoutTableInitialized;
26
27
  constructor(state: DurableObjectState, env: Env);
27
28
  private initializeSignalsTable;
29
+ private initializeWaitTimeoutTable;
30
+ storeWaitTimeout(brainRunId: string, timeoutAt: number): void;
31
+ clearWaitTimeout(brainRunId: string): void;
32
+ getWaitTimeout(): {
33
+ brainRunId: string;
34
+ timeoutAt: number;
35
+ } | null;
28
36
  /**
29
37
  * Queue a signal for this brain run.
30
38
  * Returns the queued signal with timestamp.
@@ -1 +1 @@
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;AA8FD,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;IAIL,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmHnC;;;;OAIG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM;IA0IzB,KAAK,CAAC,OAAO,EAAE,OAAO;CAkE7B"}
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;AAUnD,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;AAsGD,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;IACxC,OAAO,CAAC,2BAA2B,CAAS;gBAEhC,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;IAO/C,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,0BAA0B;IAOlC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAStD,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAQnC,cAAc,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAWlE;;;;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;IASL,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAyHnC;;;;OAIG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM;IAyJzB,KAAK,CAAC,OAAO,EAAE,OAAO;CAkE7B"}
@@ -0,0 +1,13 @@
1
+ import type { Adapter, BrainEvent } from '@positronic/core';
2
+ /**
3
+ * Adapter that handles WEBHOOK events with a timeout by storing the
4
+ * timeout and scheduling a DO alarm. When the alarm fires and the
5
+ * brain is still waiting, it queues a KILL signal to cancel the brain.
6
+ */
7
+ export declare class TimeoutAdapter implements Adapter {
8
+ private storeTimeout;
9
+ private setAlarm;
10
+ constructor(storeTimeout: (brainRunId: string, timeoutAt: number) => void, setAlarm: (time: number) => Promise<void>);
11
+ dispatch(event: BrainEvent): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=timeout-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout-adapter.d.ts","sourceRoot":"","sources":["../../src/timeout-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG5D;;;;GAIG;AACH,qBAAa,cAAe,YAAW,OAAO;IAE1C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ;gBADR,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,EAC7D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;IAG7C,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAcjD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@positronic/cloudflare",
3
- "version": "0.0.64",
3
+ "version": "0.0.65",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -31,9 +31,9 @@
31
31
  "clean": "rm -rf tsconfig.tsbuildinfo dist"
32
32
  },
33
33
  "dependencies": {
34
- "@positronic/core": "^0.0.64",
35
- "@positronic/spec": "^0.0.64",
36
- "@positronic/template-new-project": "^0.0.64",
34
+ "@positronic/core": "^0.0.65",
35
+ "@positronic/spec": "^0.0.65",
36
+ "@positronic/template-new-project": "^0.0.65",
37
37
  "aws4fetch": "^1.0.18",
38
38
  "caz": "^2.0.0",
39
39
  "cron-schedule": "^5.0.4",