@positronic/cloudflare 0.0.71 → 0.0.73

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.
@@ -302,6 +302,7 @@ import { setGovernorBinding, rateGoverned } from './governor-client-wrapper.js';
302
302
  import { CloudflareR2Loader } from './r2-loader.js';
303
303
  import { createR2Backend } from './create-r2-store.js';
304
304
  import { createResources } from '@positronic/core';
305
+ import { getOrigin } from './origin.js';
305
306
  var manifest = null;
306
307
  export function setManifest(generatedManifest) {
307
308
  manifest = generatedManifest;
@@ -809,36 +810,53 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
809
810
  * Build the RuntimeEnv for brain execution.
810
811
  * Extracts secrets from Cloudflare env bindings (string values only).
811
812
  */ function buildRuntimeEnv() {
812
- // Extract secrets: filter this.env to only string values
813
- // This automatically excludes infrastructure bindings (R2Bucket, DurableObjectNamespace are objects)
814
- var secrets = {};
815
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
816
- try {
817
- for(var _iterator = Object.entries(this.env)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
818
- var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1];
819
- if (typeof value === 'string') {
820
- secrets[key] = value;
821
- }
822
- }
823
- } catch (err) {
824
- _didIteratorError = true;
825
- _iteratorError = err;
826
- } finally{
827
- try {
828
- if (!_iteratorNormalCompletion && _iterator.return != null) {
829
- _iterator.return();
830
- }
831
- } finally{
832
- if (_didIteratorError) {
833
- throw _iteratorError;
813
+ return _async_to_generator(function() {
814
+ var secrets, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, key, value, origin;
815
+ return _ts_generator(this, function(_state) {
816
+ switch(_state.label){
817
+ case 0:
818
+ // Extract secrets: filter this.env to only string values
819
+ // This automatically excludes infrastructure bindings (R2Bucket, DurableObjectNamespace are objects)
820
+ secrets = {};
821
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
822
+ try {
823
+ for(_iterator = Object.entries(this.env)[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
824
+ _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1];
825
+ if (typeof value === 'string') {
826
+ secrets[key] = value;
827
+ }
828
+ }
829
+ } catch (err) {
830
+ _didIteratorError = true;
831
+ _iteratorError = err;
832
+ } finally{
833
+ try {
834
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
835
+ _iterator.return();
836
+ }
837
+ } finally{
838
+ if (_didIteratorError) {
839
+ throw _iteratorError;
840
+ }
841
+ }
842
+ }
843
+ return [
844
+ 4,
845
+ getOrigin(this.env.RESOURCES_BUCKET)
846
+ ];
847
+ case 1:
848
+ origin = _state.sent();
849
+ return [
850
+ 2,
851
+ {
852
+ origin: origin,
853
+ // Cast to Secrets - the generated secrets.d.ts augments Secrets with specific keys
854
+ secrets: secrets
855
+ }
856
+ ];
834
857
  }
835
- }
836
- }
837
- return {
838
- origin: this.env.WORKER_URL || 'http://localhost:3000',
839
- // Cast to Secrets - the generated secrets.d.ts augments Secrets with specific keys
840
- secrets: secrets
841
- };
858
+ });
859
+ }).call(this);
842
860
  }
843
861
  },
844
862
  {
@@ -1079,8 +1097,12 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1079
1097
  scheduleAdapter = new ScheduleAdapter(this.env.SCHEDULE_DO.get(this.env.SCHEDULE_DO.idFromName('singleton')));
1080
1098
  webhookAdapter = new WebhookAdapter(monitorDOStub);
1081
1099
  this.pageAdapter = new PageAdapter(monitorDOStub, this.env.RESOURCES_BUCKET);
1082
- // Create runtime environment with origin and secrets
1083
- env = this.buildRuntimeEnv();
1100
+ return [
1101
+ 4,
1102
+ this.buildRuntimeEnv()
1103
+ ];
1104
+ case 1:
1105
+ env = _state.sent();
1084
1106
  // Create pages service for brain to use
1085
1107
  pagesService = createPagesService(brainRunId, this.env.RESOURCES_BUCKET, monitorDOStub, env);
1086
1108
  setGovernorBinding(this.env.GOVERNOR_DO);
@@ -1091,7 +1113,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1091
1113
  4,
1092
1114
  this.loadResourcesFromR2()
1093
1115
  ];
1094
- case 1:
1116
+ case 2:
1095
1117
  r2Resources = _state.sent();
1096
1118
  // Create an enhanced runner with resources if available
1097
1119
  runnerWithResources = brainRunner;
@@ -1271,8 +1293,12 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1271
1293
  scheduleAdapter = new ScheduleAdapter(this.env.SCHEDULE_DO.get(this.env.SCHEDULE_DO.idFromName('singleton')));
1272
1294
  webhookAdapter = new WebhookAdapter(monitorDOStub);
1273
1295
  this.pageAdapter = new PageAdapter(monitorDOStub, this.env.RESOURCES_BUCKET);
1274
- // Create runtime environment with origin and secrets
1275
- env = this.buildRuntimeEnv();
1296
+ return [
1297
+ 4,
1298
+ this.buildRuntimeEnv()
1299
+ ];
1300
+ case 5:
1301
+ env = _state.sent();
1276
1302
  // Create pages service for brain to use
1277
1303
  pagesService = createPagesService(brainRunId, this.env.RESOURCES_BUCKET, monitorDOStub, env);
1278
1304
  setGovernorBinding(this.env.GOVERNOR_DO);
@@ -1283,7 +1309,7 @@ export var BrainRunnerDO = /*#__PURE__*/ function(DurableObject) {
1283
1309
  4,
1284
1310
  this.loadResourcesFromR2()
1285
1311
  ];
1286
- case 5:
1312
+ case 6:
1287
1313
  r2Resources = _state.sent();
1288
1314
  runnerWithResources = brainRunner;
1289
1315
  if (r2Resources) {
@@ -836,6 +836,15 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
836
836
  this.buildAndUploadBundle(projectRoot)
837
837
  ];
838
838
  case 5:
839
+ _state.sent();
840
+ // Write origin URL to local R2 for dev server
841
+ return [
842
+ 4,
843
+ this.writeOriginToR2(projectRoot, 'http://localhost:8787', {
844
+ local: true
845
+ })
846
+ ];
847
+ case 6:
839
848
  _state.sent();
840
849
  return [
841
850
  2
@@ -1160,7 +1169,7 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1160
1169
  * Uses esbuild to bundle components/bundle.ts and uploads to R2 for serving.
1161
1170
  */ function buildAndUploadBundle(_0) {
1162
1171
  return _async_to_generator(function(projectRoot) {
1163
- var options, serverDir, bundleEntryPath, distDir, bundleOutputPath, componentsDir, hasComponents, hasBundleEntry, _wranglerConfig_r2_buckets_, _wranglerConfig_r2_buckets, bundleContent, wranglerConfigPath, wranglerConfig, bucketName, r2Key, r2Path, tempBundlePath, localFlag, target, error;
1172
+ var options, serverDir, bundleEntryPath, distDir, bundleOutputPath, componentsDir, hasComponents, hasBundleEntry, _wranglerConfig_r2_buckets_, _wranglerConfig_r2_buckets, bundleContent, wranglerConfigPath, wranglerConfig, bucketName, r2Key, r2Path, tempBundlePath, locationFlag, target, error;
1164
1173
  var _arguments = arguments;
1165
1174
  return _ts_generator(this, function(_state) {
1166
1175
  switch(_state.label){
@@ -1263,8 +1272,8 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1263
1272
  8,
1264
1273
  10
1265
1274
  ]);
1266
- localFlag = options.local ? ' --local' : '';
1267
- execSync('npx wrangler r2 object put "'.concat(r2Path, '" --file="').concat(tempBundlePath, '"').concat(localFlag), {
1275
+ locationFlag = options.local ? ' --local' : ' --remote';
1276
+ execSync('npx wrangler r2 object put "'.concat(r2Path, '" --file="').concat(tempBundlePath, '"').concat(locationFlag), {
1268
1277
  cwd: serverDir,
1269
1278
  stdio: 'pipe'
1270
1279
  });
@@ -1307,6 +1316,79 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1307
1316
  }).apply(this, arguments);
1308
1317
  }
1309
1318
  },
1319
+ {
1320
+ key: "writeOriginToR2",
1321
+ value: /**
1322
+ * Write the origin URL to R2 at __config/origin.
1323
+ * Used by brain-runner-do and pages API to construct public URLs.
1324
+ */ function writeOriginToR2(_0, _1) {
1325
+ return _async_to_generator(function(projectRoot, origin) {
1326
+ var options, _wranglerConfig_r2_buckets_, _wranglerConfig_r2_buckets, serverDir, wranglerConfigPath, wranglerConfig, bucketName, r2Path, tempFilePath, locationFlag;
1327
+ var _arguments = arguments;
1328
+ return _ts_generator(this, function(_state) {
1329
+ switch(_state.label){
1330
+ case 0:
1331
+ options = _arguments.length > 2 && _arguments[2] !== void 0 ? _arguments[2] : {
1332
+ local: true
1333
+ };
1334
+ serverDir = path.join(projectRoot, '.positronic');
1335
+ wranglerConfigPath = path.join(serverDir, 'wrangler.jsonc');
1336
+ if (!fs.existsSync(wranglerConfigPath)) {
1337
+ return [
1338
+ 2
1339
+ ];
1340
+ }
1341
+ wranglerConfig = JSON.parse(fs.readFileSync(wranglerConfigPath, 'utf-8'));
1342
+ bucketName = (_wranglerConfig_r2_buckets = wranglerConfig.r2_buckets) === null || _wranglerConfig_r2_buckets === void 0 ? void 0 : (_wranglerConfig_r2_buckets_ = _wranglerConfig_r2_buckets[0]) === null || _wranglerConfig_r2_buckets_ === void 0 ? void 0 : _wranglerConfig_r2_buckets_.bucket_name;
1343
+ if (!bucketName) {
1344
+ return [
1345
+ 2
1346
+ ];
1347
+ }
1348
+ r2Path = "".concat(bucketName, "/__config/origin");
1349
+ tempFilePath = path.join(os.tmpdir(), "positronic-origin-".concat(Date.now(), ".txt"));
1350
+ return [
1351
+ 4,
1352
+ fsPromises.writeFile(tempFilePath, origin)
1353
+ ];
1354
+ case 1:
1355
+ _state.sent();
1356
+ _state.label = 2;
1357
+ case 2:
1358
+ _state.trys.push([
1359
+ 2,
1360
+ ,
1361
+ 3,
1362
+ 5
1363
+ ]);
1364
+ locationFlag = options.local ? ' --local' : ' --remote';
1365
+ execSync('npx wrangler r2 object put "'.concat(r2Path, '" --file="').concat(tempFilePath, '"').concat(locationFlag), {
1366
+ cwd: serverDir,
1367
+ stdio: 'pipe'
1368
+ });
1369
+ return [
1370
+ 3,
1371
+ 5
1372
+ ];
1373
+ case 3:
1374
+ return [
1375
+ 4,
1376
+ fsPromises.unlink(tempFilePath).catch(function() {})
1377
+ ];
1378
+ case 4:
1379
+ _state.sent();
1380
+ return [
1381
+ 7
1382
+ ];
1383
+ case 5:
1384
+ return [
1385
+ 2
1386
+ ];
1387
+ }
1388
+ });
1389
+ }).apply(this, arguments);
1390
+ }
1391
+ },
1310
1392
  {
1311
1393
  key: "start",
1312
1394
  value: function start(port) {
@@ -1588,6 +1670,7 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1588
1670
  var // Capture and forward stdout
1589
1671
  _wranglerProcess_stdout, // Capture and forward stderr
1590
1672
  _wranglerProcess_stderr;
1673
+ var stdoutAccumulator = '';
1591
1674
  var wranglerProcess = spawn('npx', [
1592
1675
  'wrangler',
1593
1676
  'deploy',
@@ -1607,6 +1690,7 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1607
1690
  });
1608
1691
  (_wranglerProcess_stdout = wranglerProcess.stdout) === null || _wranglerProcess_stdout === void 0 ? void 0 : _wranglerProcess_stdout.on('data', function(data) {
1609
1692
  var message = data.toString();
1693
+ stdoutAccumulator += message;
1610
1694
  _this.logCallbacks.forEach(function(cb) {
1611
1695
  return cb(message);
1612
1696
  });
@@ -1635,17 +1719,21 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1635
1719
  });
1636
1720
  wranglerProcess.on('exit', function(code) {
1637
1721
  return _async_to_generator(function() {
1638
- var successMessage, secretsError;
1722
+ var urlMatch, originError, successMessage, secretsError;
1639
1723
  return _ts_generator(this, function(_state) {
1640
1724
  switch(_state.label){
1641
1725
  case 0:
1642
1726
  if (!(code === 0)) return [
1643
1727
  3,
1644
- 5
1728
+ 9
1645
1729
  ];
1646
1730
  console.log('✅ Deployment complete!');
1647
- // Set up secrets for the secrets management API
1648
- console.log('🔐 Configuring secrets management...');
1731
+ // Parse worker URL from wrangler output and write origin to production R2
1732
+ urlMatch = stdoutAccumulator.match(/https:\/\/[^\s]+\.workers\.dev/);
1733
+ if (!urlMatch) return [
1734
+ 3,
1735
+ 4
1736
+ ];
1649
1737
  _state.label = 1;
1650
1738
  case 1:
1651
1739
  _state.trys.push([
@@ -1656,9 +1744,40 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1656
1744
  ]);
1657
1745
  return [
1658
1746
  4,
1659
- this.setupSecretsManagement(bucketName)
1747
+ this.writeOriginToR2(projectRoot, urlMatch[0], {
1748
+ local: false
1749
+ })
1660
1750
  ];
1661
1751
  case 2:
1752
+ _state.sent();
1753
+ console.log("\uD83C\uDF10 Origin URL written to R2: ".concat(urlMatch[0]));
1754
+ return [
1755
+ 3,
1756
+ 4
1757
+ ];
1758
+ case 3:
1759
+ originError = _state.sent();
1760
+ console.warn('⚠️ Warning: Could not write origin URL to R2:', originError);
1761
+ return [
1762
+ 3,
1763
+ 4
1764
+ ];
1765
+ case 4:
1766
+ // Set up secrets for the secrets management API
1767
+ console.log('🔐 Configuring secrets management...');
1768
+ _state.label = 5;
1769
+ case 5:
1770
+ _state.trys.push([
1771
+ 5,
1772
+ 7,
1773
+ ,
1774
+ 8
1775
+ ]);
1776
+ return [
1777
+ 4,
1778
+ this.setupSecretsManagement(bucketName)
1779
+ ];
1780
+ case 6:
1662
1781
  _state.sent();
1663
1782
  successMessage = '✅ Deployment and secrets configuration complete!\n';
1664
1783
  this.logCallbacks.forEach(function(cb) {
@@ -1668,9 +1787,9 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1668
1787
  resolve();
1669
1788
  return [
1670
1789
  3,
1671
- 4
1790
+ 8
1672
1791
  ];
1673
- case 3:
1792
+ case 7:
1674
1793
  secretsError = _state.sent();
1675
1794
  // Warn but don't fail deployment if secrets setup fails
1676
1795
  console.warn('⚠️ Warning: Could not configure secrets management:', secretsError);
@@ -1681,17 +1800,17 @@ export var CloudflareDevServer = /*#__PURE__*/ function() {
1681
1800
  resolve();
1682
1801
  return [
1683
1802
  3,
1684
- 4
1803
+ 8
1685
1804
  ];
1686
- case 4:
1805
+ case 8:
1687
1806
  return [
1688
1807
  3,
1689
- 6
1808
+ 10
1690
1809
  ];
1691
- case 5:
1810
+ case 9:
1692
1811
  reject(new Error("Wrangler deploy exited with code ".concat(code)));
1693
- _state.label = 6;
1694
- case 6:
1812
+ _state.label = 10;
1813
+ case 10:
1695
1814
  return [
1696
1815
  2
1697
1816
  ];
@@ -0,0 +1,158 @@
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 _ts_generator(thisArg, body) {
31
+ var f, y, t, _ = {
32
+ label: 0,
33
+ sent: function() {
34
+ if (t[0] & 1) throw t[1];
35
+ return t[1];
36
+ },
37
+ trys: [],
38
+ ops: []
39
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
40
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
41
+ return this;
42
+ }), g;
43
+ function verb(n) {
44
+ return function(v) {
45
+ return step([
46
+ n,
47
+ v
48
+ ]);
49
+ };
50
+ }
51
+ function step(op) {
52
+ if (f) throw new TypeError("Generator is already executing.");
53
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
54
+ 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;
55
+ if (y = 0, t) op = [
56
+ op[0] & 2,
57
+ t.value
58
+ ];
59
+ switch(op[0]){
60
+ case 0:
61
+ case 1:
62
+ t = op;
63
+ break;
64
+ case 4:
65
+ _.label++;
66
+ return {
67
+ value: op[1],
68
+ done: false
69
+ };
70
+ case 5:
71
+ _.label++;
72
+ y = op[1];
73
+ op = [
74
+ 0
75
+ ];
76
+ continue;
77
+ case 7:
78
+ op = _.ops.pop();
79
+ _.trys.pop();
80
+ continue;
81
+ default:
82
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
83
+ _ = 0;
84
+ continue;
85
+ }
86
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
87
+ _.label = op[1];
88
+ break;
89
+ }
90
+ if (op[0] === 6 && _.label < t[1]) {
91
+ _.label = t[1];
92
+ t = op;
93
+ break;
94
+ }
95
+ if (t && _.label < t[2]) {
96
+ _.label = t[2];
97
+ _.ops.push(op);
98
+ break;
99
+ }
100
+ if (t[2]) _.ops.pop();
101
+ _.trys.pop();
102
+ continue;
103
+ }
104
+ op = body.call(thisArg, _);
105
+ } catch (e) {
106
+ op = [
107
+ 6,
108
+ e
109
+ ];
110
+ y = 0;
111
+ } finally{
112
+ f = t = 0;
113
+ }
114
+ if (op[0] & 5) throw op[1];
115
+ return {
116
+ value: op[0] ? op[1] : void 0,
117
+ done: true
118
+ };
119
+ }
120
+ }
121
+ var ORIGIN_KEY = '__config/origin';
122
+ /**
123
+ * Read the origin URL from R2 config.
124
+ * Falls back to http://localhost:8787 if not found (dev safety).
125
+ */ export function getOrigin(bucket) {
126
+ return _async_to_generator(function() {
127
+ var obj;
128
+ return _ts_generator(this, function(_state) {
129
+ switch(_state.label){
130
+ case 0:
131
+ return [
132
+ 4,
133
+ bucket.get(ORIGIN_KEY)
134
+ ];
135
+ case 1:
136
+ obj = _state.sent();
137
+ if (!obj) return [
138
+ 3,
139
+ 3
140
+ ];
141
+ return [
142
+ 4,
143
+ obj.text()
144
+ ];
145
+ case 2:
146
+ return [
147
+ 2,
148
+ _state.sent().trim()
149
+ ];
150
+ case 3:
151
+ return [
152
+ 2,
153
+ 'http://localhost:8787'
154
+ ];
155
+ }
156
+ });
157
+ })();
158
+ }
@@ -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;AAU3C,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AAiE/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;AAW3C,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AAkE/C,eAAe,GAAG,CAAC;AAGnB,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../src/api/pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAwB3C,QAAA,MAAM,KAAK;cAAwB,QAAQ;yCAAK,CAAC;AA0RjD,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../src/api/pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAa3C,QAAA,MAAM,KAAK;cAAwB,QAAQ;yCAAK,CAAC;AA6RjD,eAAe,KAAK,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Hono } from 'hono';
2
+ import type { Bindings } from './types.js';
3
+ declare const store: Hono<{
4
+ Bindings: Bindings;
5
+ }, import("hono/types").BlankSchema, "/">;
6
+ export default store;
7
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/api/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAE1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,QAAA,MAAM,KAAK;cAAwB,QAAQ;yCAAK,CAAC;AA+RjD,eAAe,KAAK,CAAC"}
@@ -18,7 +18,6 @@ export type Bindings = {
18
18
  CLOUDFLARE_API_TOKEN?: string;
19
19
  CLOUDFLARE_ACCOUNT_ID?: string;
20
20
  CF_SCRIPT_NAME?: string;
21
- WORKER_URL?: string;
22
21
  ROOT_PUBLIC_KEY?: string;
23
22
  };
24
23
  export type HonoApp = Hono<{
@@ -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,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"}
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,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"}
@@ -16,7 +16,6 @@ export interface Env {
16
16
  SCHEDULE_DO: DurableObjectNamespace<ScheduleDO>;
17
17
  GOVERNOR_DO: DurableObjectNamespace<GovernorDO>;
18
18
  RESOURCES_BUCKET: R2Bucket;
19
- WORKER_URL?: string;
20
19
  }
21
20
  export declare class BrainRunnerDO extends DurableObject<Env> {
22
21
  private sql;
@@ -1 +1 @@
1
- {"version":3,"file":"brain-runner-do.d.ts","sourceRoot":"","sources":["../../src/brain-runner-do.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brain-runner-do.d.ts","sourceRoot":"","sources":["../../src/brain-runner-do.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,11 @@ export declare class CloudflareDevServer implements PositronicDevServer {
40
40
  * Uses esbuild to bundle components/bundle.ts and uploads to R2 for serving.
41
41
  */
42
42
  private buildAndUploadBundle;
43
+ /**
44
+ * Write the origin URL to R2 at __config/origin.
45
+ * Used by brain-runner-do and pages API to construct public URLs.
46
+ */
47
+ private writeOriginToR2;
43
48
  start(port?: number): Promise<ServerHandle>;
44
49
  watch(filePath: string, event: 'add' | 'change' | 'unlink'): Promise<void>;
45
50
  private ensureR2BucketExists;
@@ -1 +1 @@
1
- {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/dev-server.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0K1E,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAmBnD;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAanD;AA6ED,qBAAa,mBAAoB,YAAW,mBAAmB;IAyB1C,cAAc,EAAE,MAAM;IAjBzC;;;;;;;;;;;OAWG;IAEH,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,gBAAgB,CAAwC;gBAE7C,cAAc,EAAE,MAAM;IAEnC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAoB7B,qBAAqB;YA4DrB,wBAAwB;YAkCxB,yBAAyB;YASzB,2BAA2B;IAuBzC,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,wBAAwB;YASlB,0BAA0B;IA4BxC,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,gBAAgB;IA4BxB;;;OAGG;YACW,oBAAoB;IAqF5B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAqD3C,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GACjC,OAAO,CAAC,IAAI,CAAC;YAmBF,oBAAoB;IA0D5B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA4G7B;;;OAGG;YACW,sBAAsB;IAepC;;OAEG;YACW,eAAe;IA6B7B,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIhD,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIlD,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9C,WAAW,IAAI,OAAO,CAC1B,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC,CAC5D;IAwCK,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CrD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA0DnD"}
1
+ {"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../../src/dev-server.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0K1E,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAmBnD;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAanD;AA6ED,qBAAa,mBAAoB,YAAW,mBAAmB;IAyB1C,cAAc,EAAE,MAAM;IAjBzC;;;;;;;;;;;OAWG;IAEH,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,gBAAgB,CAAwC;gBAE7C,cAAc,EAAE,MAAM;IAEnC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAuB7B,qBAAqB;YA4DrB,wBAAwB;YAkCxB,yBAAyB;YASzB,2BAA2B;IAuBzC,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,wBAAwB;YASlB,0BAA0B;IA4BxC,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,gBAAgB;IA4BxB;;;OAGG;YACW,oBAAoB;IAqFlC;;;OAGG;YACW,eAAe;IAkCvB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAqD3C,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GACjC,OAAO,CAAC,IAAI,CAAC;YAmBF,oBAAoB;IA0D5B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAyH7B;;;OAGG;YACW,sBAAsB;IAepC;;OAEG;YACW,eAAe;IA6B7B,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIhD,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIlD,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9C,WAAW,IAAI,OAAO,CAC1B,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC,CAC5D;IAwCK,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CrD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA0DnD"}
@@ -0,0 +1,7 @@
1
+ import type { R2Bucket } from '@cloudflare/workers-types';
2
+ /**
3
+ * Read the origin URL from R2 config.
4
+ * Falls back to http://localhost:8787 if not found (dev safety).
5
+ */
6
+ export declare function getOrigin(bucket: R2Bucket): Promise<string>;
7
+ //# sourceMappingURL=origin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"origin.d.ts","sourceRoot":"","sources":["../../src/origin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAI1D;;;GAGG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAMjE"}