@positronic/cloudflare 0.0.24 → 0.0.25
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.js +21 -16
- package/dist/src/pages-service.js +74 -50
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/pages-service.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/src/api.js
CHANGED
|
@@ -1660,6 +1660,14 @@ app.post('/webhooks/:slug', function(context) {
|
|
|
1660
1660
|
});
|
|
1661
1661
|
})();
|
|
1662
1662
|
});
|
|
1663
|
+
/**
|
|
1664
|
+
* Generates a unique slug for pages that don't provide one.
|
|
1665
|
+
* Uses brainRunId prefix + random suffix for uniqueness.
|
|
1666
|
+
*/ function generateUniqueSlug(brainRunId) {
|
|
1667
|
+
var shortId = brainRunId.slice(0, 8);
|
|
1668
|
+
var random = Math.random().toString(36).substring(2, 10);
|
|
1669
|
+
return "page-".concat(shortId, "-").concat(random);
|
|
1670
|
+
}
|
|
1663
1671
|
// Create a new page
|
|
1664
1672
|
app.post('/pages', function(context) {
|
|
1665
1673
|
return _async_to_generator(function() {
|
|
@@ -1680,14 +1688,6 @@ app.post('/pages', function(context) {
|
|
|
1680
1688
|
case 1:
|
|
1681
1689
|
body = _state.sent();
|
|
1682
1690
|
slug = body.slug, html = body.html, brainRunId = body.brainRunId, _body_persist = body.persist, persist = _body_persist === void 0 ? false : _body_persist, ttl = body.ttl;
|
|
1683
|
-
if (!slug) {
|
|
1684
|
-
return [
|
|
1685
|
-
2,
|
|
1686
|
-
context.json({
|
|
1687
|
-
error: 'Missing required field "slug"'
|
|
1688
|
-
}, 400)
|
|
1689
|
-
];
|
|
1690
|
-
}
|
|
1691
1691
|
if (!html) {
|
|
1692
1692
|
return [
|
|
1693
1693
|
2,
|
|
@@ -1704,14 +1704,19 @@ app.post('/pages', function(context) {
|
|
|
1704
1704
|
}, 400)
|
|
1705
1705
|
];
|
|
1706
1706
|
}
|
|
1707
|
-
//
|
|
1708
|
-
if (
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1707
|
+
// Generate slug if not provided
|
|
1708
|
+
if (!slug) {
|
|
1709
|
+
slug = generateUniqueSlug(brainRunId);
|
|
1710
|
+
} else {
|
|
1711
|
+
// Validate slug format (alphanumeric, hyphens, underscores only)
|
|
1712
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(slug)) {
|
|
1713
|
+
return [
|
|
1714
|
+
2,
|
|
1715
|
+
context.json({
|
|
1716
|
+
error: 'Slug must contain only alphanumeric characters, hyphens, and underscores'
|
|
1717
|
+
}, 400)
|
|
1718
|
+
];
|
|
1719
|
+
}
|
|
1715
1720
|
}
|
|
1716
1721
|
bucket = context.env.RESOURCES_BUCKET;
|
|
1717
1722
|
key = "pages/".concat(slug, ".html");
|
|
@@ -170,6 +170,14 @@ function _ts_generator(thisArg, body) {
|
|
|
170
170
|
};
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Generates a unique slug for pages that don't provide one.
|
|
175
|
+
* Uses brainRunId prefix + random suffix for uniqueness.
|
|
176
|
+
*/ function generateUniqueSlug(brainRunId) {
|
|
177
|
+
var shortId = brainRunId.slice(0, 8);
|
|
178
|
+
var random = Math.random().toString(36).substring(2, 10);
|
|
179
|
+
return "page-".concat(shortId, "-").concat(random);
|
|
180
|
+
}
|
|
173
181
|
/**
|
|
174
182
|
* Creates a PagesService implementation that works directly with R2 and MonitorDO.
|
|
175
183
|
*
|
|
@@ -178,60 +186,76 @@ function _ts_generator(thisArg, body) {
|
|
|
178
186
|
* @param monitorStub - The MonitorDO stub for page registration
|
|
179
187
|
* @param baseUrl - The base URL for page URLs (e.g., "https://myapp.workers.dev")
|
|
180
188
|
*/ export function createPagesService(brainRunId, bucket, monitorStub, baseUrl) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
monitorStub.registerPage(slug, brainRunId, persist)
|
|
214
|
-
];
|
|
215
|
-
case 2:
|
|
216
|
-
_state.sent();
|
|
217
|
-
url = "".concat(baseUrl, "/pages/").concat(slug);
|
|
218
|
-
return [
|
|
219
|
-
2,
|
|
220
|
-
_object_spread_props(_object_spread({
|
|
189
|
+
// Implementation function that handles both overloads
|
|
190
|
+
function createPage(slugOrHtml, htmlOrOptions, maybeOptions) {
|
|
191
|
+
return _async_to_generator(function() {
|
|
192
|
+
var slug, html, options, key, createdAt, _options_persist, persist, url;
|
|
193
|
+
return _ts_generator(this, function(_state) {
|
|
194
|
+
switch(_state.label){
|
|
195
|
+
case 0:
|
|
196
|
+
// Detect which overload was used:
|
|
197
|
+
// - create(html, options?) - htmlOrOptions is undefined or PageCreateOptions
|
|
198
|
+
// - create(slug, html, options?) - htmlOrOptions is string (the html)
|
|
199
|
+
if (typeof htmlOrOptions === 'string') {
|
|
200
|
+
// Called as create(slug, html, options?)
|
|
201
|
+
slug = slugOrHtml;
|
|
202
|
+
html = htmlOrOptions;
|
|
203
|
+
options = maybeOptions;
|
|
204
|
+
} else {
|
|
205
|
+
// Called as create(html, options?)
|
|
206
|
+
slug = generateUniqueSlug(brainRunId);
|
|
207
|
+
html = slugOrHtml;
|
|
208
|
+
options = htmlOrOptions;
|
|
209
|
+
}
|
|
210
|
+
key = "pages/".concat(slug, ".html");
|
|
211
|
+
createdAt = new Date().toISOString();
|
|
212
|
+
persist = (_options_persist = options === null || options === void 0 ? void 0 : options.persist) !== null && _options_persist !== void 0 ? _options_persist : false;
|
|
213
|
+
// Store HTML with metadata in R2
|
|
214
|
+
return [
|
|
215
|
+
4,
|
|
216
|
+
bucket.put(key, html, {
|
|
217
|
+
httpMetadata: {
|
|
218
|
+
contentType: 'text/html; charset=utf-8'
|
|
219
|
+
},
|
|
220
|
+
customMetadata: _object_spread({
|
|
221
221
|
slug: slug,
|
|
222
|
-
url: url,
|
|
223
222
|
brainRunId: brainRunId,
|
|
224
|
-
persist: persist
|
|
225
|
-
}, (options === null || options === void 0 ? void 0 : options.ttl) !== undefined && {
|
|
226
|
-
ttl: options.ttl
|
|
227
|
-
}), {
|
|
223
|
+
persist: persist ? 'true' : 'false',
|
|
228
224
|
createdAt: createdAt
|
|
225
|
+
}, (options === null || options === void 0 ? void 0 : options.ttl) !== undefined && {
|
|
226
|
+
ttl: String(options.ttl)
|
|
229
227
|
})
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
228
|
+
})
|
|
229
|
+
];
|
|
230
|
+
case 1:
|
|
231
|
+
_state.sent();
|
|
232
|
+
// Register the page with MonitorDO for cleanup tracking
|
|
233
|
+
return [
|
|
234
|
+
4,
|
|
235
|
+
monitorStub.registerPage(slug, brainRunId, persist)
|
|
236
|
+
];
|
|
237
|
+
case 2:
|
|
238
|
+
_state.sent();
|
|
239
|
+
url = "".concat(baseUrl, "/pages/").concat(slug);
|
|
240
|
+
return [
|
|
241
|
+
2,
|
|
242
|
+
_object_spread_props(_object_spread({
|
|
243
|
+
slug: slug,
|
|
244
|
+
url: url,
|
|
245
|
+
brainRunId: brainRunId,
|
|
246
|
+
persist: persist
|
|
247
|
+
}, (options === null || options === void 0 ? void 0 : options.ttl) !== undefined && {
|
|
248
|
+
ttl: options.ttl
|
|
249
|
+
}), {
|
|
250
|
+
createdAt: createdAt
|
|
251
|
+
})
|
|
252
|
+
];
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
})();
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
create: createPage,
|
|
235
259
|
get: function get(slug) {
|
|
236
260
|
return _async_to_generator(function() {
|
|
237
261
|
var key, r2Object;
|
package/dist/types/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAI1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,2BAA2B,CAAC;AAGpE,KAAK,QAAQ,GAAG;IACd,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;CACzB,CAAC;AAmBF,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAI1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,2BAA2B,CAAC;AAGpE,KAAK,QAAQ,GAAG;IACd,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;CACzB,CAAC;AAmBF,QAAA,MAAM,GAAG;cAAwB,QAAQ;yCAAK,CAAC;AAgkC/C,eAAe,GAAG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages-service.d.ts","sourceRoot":"","sources":["../../src/pages-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"pages-service.d.ts","sourceRoot":"","sources":["../../src/pages-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2B,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAYjD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,QAAQ,EAChB,WAAW,EAAE,iBAAiB,CAAC,SAAS,CAAC,EACzC,OAAO,EAAE,MAAM,GACd,YAAY,CA+Hd"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@positronic/cloudflare",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.25",
|
|
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.
|
|
35
|
-
"@positronic/spec": "^0.0.
|
|
36
|
-
"@positronic/template-new-project": "^0.0.
|
|
34
|
+
"@positronic/core": "^0.0.25",
|
|
35
|
+
"@positronic/spec": "^0.0.25",
|
|
36
|
+
"@positronic/template-new-project": "^0.0.25",
|
|
37
37
|
"aws4fetch": "^1.0.18",
|
|
38
38
|
"caz": "^2.0.0",
|
|
39
39
|
"cron-schedule": "^5.0.4",
|