Commit graph

50 commits

Author SHA1 Message Date
Your Name
324f4abd4b this was suppsoed to just be the fuckin uhhhh encoding fix for notifs but its bigger than that so idk 2026-08-07 17:46:01 -04:00
Your Name
cda04f48ed Preserve child head content in HTMX embeds 2026-08-06 17:41:16 -04:00
Your Name
c8e50cb629 fix: retain child provenance in htmx page swaps 2026-08-06 17:08:17 -04:00
Your Name
ffba038b35 fix: restore inspector template hot reload 2026-08-06 16:37:42 -04:00
Your Name
cbbb87cd2e fix: uploader fix 2026-08-06 15:43:31 -04:00
Your Name
5299bd34ee feat: add current user to req 2026-08-06 14:36:21 -04:00
Your Name
48ac1249c8 feat: slideout editor new new new! 2026-08-03 01:24:54 -04:00
Your Name
c175a610da fix router stuff 2026-08-03 00:31:30 -04:00
Your Name
5bf756833d chore: incidental working-tree changes (not from the versioning work)
Changes already present in the working tree at the time of the versioning
commit, committed here so nothing is left dangling:

- index.js: template PUT preserves the untouched field (?? existing) and the
  preview handler tolerates a null/empty test_object
- update-deployed.sh: detect and restart a pm2-managed app process, and don't
  hard-fail when no bare Node process is found

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-03 00:27:31 -04:00
Your Name
03a9d2143d Allow fetch in db library vm contexts
Db library scripts are basically a JS module scoped to the db, and
handlers already get fetch — but runLibrary's own vm context only
bound sql/console, so any library calling fetch (e.g. the chat db's
OpenAI call) threw ReferenceError. Since library calls are often
fire-and-forget inside setTimeout (no rejection handler), that
crashed the whole process. Bind fetch in all three places a library
script runs: request-time (runLibrary), the library-editor save eval,
and repl.

Also add `bliss link` to bliss-cli for jumping straight to a
structure/route/template/db's workshop editor URL, including
resolving a db by its require('db')(alias) name.
2026-08-02 23:19:24 -04:00
Your Name
44f345fff0 featchoremiscmiscmisc 2026-08-02 23:00:26 -04:00
Your Name
386e65fa88 refactor: use model.getRoute in the catch-all instead of raw SQL
The app.all("*") dispatcher hand-rolled a SELECT * FROM routes while
every other read goes through the model layer. Use model.getRoute for
consistency; the handler only reads structure_id/id/verb/handler, all
of which it returns.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-02 22:32:30 -04:00
Your Name
e45c890119 refactor: extract formatError/logError from repeated catch blocks
The `e.stack ? \`${e}\n\n${e.stack}\` : \`${e}\`` + createLog(...true)
pattern appeared in four catch blocks. Extract formatError(e) and
logError(structureId, routeId, e) and call them instead. Behavior and
the 500 response body are unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-02 22:31:59 -04:00
Your Name
d34c917ef9 refactor: untangle bootstrapContext into makeConsole/makeLibs/runLibrary
Remove the shared-mutable-state dance where each db library was run in
the handler context via `context.sql = x; run; module.exports = null`.
Split into three single-purpose functions:

- makeConsole(structureId, routeId) — the logs-table-backed console
- runLibrary(sql, source, console) — eval one library in its own context
- makeLibs(structureId, console) — the require() targets map

Libraries are still evaluated eagerly per request (no laziness), and
still see `sql` and `console`, so behavior is preserved. Verified the
prime db library's top-level console.log still fires on a live request.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-02 22:30:34 -04:00
Your Name
d01f1411c5 fix: make the most recently saved route win on path conflicts
The matcher loop kept the last match instead of the first. Since
routes[verb] is ordered by updated_at DESC, that meant the OLDEST
route won when two routes matched the same path. Break on first
match so the most recently saved route wins.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-02 22:28:19 -04:00
Your Name
14f9ec3160 refactor: decompose render pipeline into decorate() + source value
Replace the one branchy bootstrapTemplateWithHTMXetc (six positional
args, five jobs) with small pure functions: headChrome, blissAttrs,
decoratePage, decorateFragment, and a decorate() entry point. The
route/clone/copy provenance triple becomes a single `source` value
({structureId, routeId, copyUrl}) threaded through render — the same
data the inspector roadmap needs.

Collapse the four copy-pasted render sites (res.render, ws.render,
template preview, scaffold preview) onto renderTemplate + decorate,
and dedupe the per-structure route() closure into makeRoute().

Emitted HTML (head chrome + data-bliss-* attributes) is unchanged;
verified full-page and htmx-fragment output.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-02 22:22:00 -04:00
Your Name
ae51fc763c chore: cleanup of code 2026-08-02 22:14:02 -04:00
HRG @ SCExC
28a441d98a feat: add route helper to handler context 2025-02-12 00:46:39 +09:00
my name
71a902a939 feat: add timeout stuff to handlers 2025-02-04 01:54:56 -05:00
my name
2c494d9c52 feat: add fetch to handlers 2025-02-04 00:23:03 -05:00
Your Name
91c1d30674 fix: try something claude said to see if we can get session in the ws req 2025-02-02 17:55:13 -05:00
Your Name
b8d3dbfa39 fix: catch errors in ws on handlers 2025-02-01 01:14:32 -05:00
Your Name
19a9d63d6c feat: add file lib to routes, abstract out file upload functionality 2025-02-01 01:14:32 -05:00
Your Name
a680ff9120 fix: don't rethrow exception
can't catch it there pal! crashes the server
2025-01-31 01:59:05 -05:00
Your Name
7e0025cfac chore: remove console logs 2025-01-21 18:14:15 -05:00
Your Name
308df5a5e6 feat: add persistent connections to ws 2025-01-21 18:13:31 -05:00
Your Name
a23aee5d21 feat: wip previews for non-get routes 2025-01-21 02:38:24 -05:00
Your Name
ee0b9e597a feat: support inspector on ws swapped elems 2025-01-20 12:53:52 -05:00
Your Name
df42cd8a8b feat: add ability to ws.render from websocket 2025-01-20 11:49:54 -05:00
Your Name
73779a32ad refactor: call ws stuff outside of vm script 2025-01-20 11:04:25 -05:00
HRG @ SCExC
c6fe03db7a feat: add web push 2025-01-12 12:07:08 -05:00
HRG @ SCExC
a7c679e610 fix: return 500 for exceptions 2025-01-12 11:56:17 -05:00
HRG @ SCExC
66911677f0 feat: support async handlers 2025-01-12 11:56:17 -05:00
HRG @ SCExC
9d625b0fd5 fix: updte templte fix, json bodyprser 2025-01-12 11:56:17 -05:00
HRG @ SCExC
bf37f91a34 fix: register templte bug 2025-01-12 11:56:17 -05:00
HRG @ SCExC
38b9c0e538 fix: logs bug where it was repeating due to flaw in most recent id query 2025-01-12 11:56:17 -05:00
HRG @ SCExC
7a5a1a5e9d chore: format 2025-01-12 11:56:15 -05:00
HRG @ SCExC
305bf8b571 feat: add logs 2025-01-09 15:42:51 -05:00
HRG @ SCExC
c40bdcbbed websocket support and route fixes 2024-06-08 18:41:33 -04:00
HRG @ SCExC
897dd38151 add head injection 2024-06-08 15:30:28 -04:00
HRG @ SCExC
d2ad994716 more stuff 2024-06-08 14:07:38 -04:00
HRG @ SCExC
835c5fdd66 add cloning logic 2024-06-08 09:25:42 -04:00
HRG @ SCExC
365b297397 add support for mounting existing dbs by id 2024-06-04 01:21:32 -04:00
HRG @ SCExC
7aac7aabdd add file stuff 2024-06-03 20:24:21 -04:00
HRG @ SCExC
c33a49e817 add templater 2024-06-02 10:25:57 -04:00
HRG @ SCExC
7720135395 nice 2024-06-02 01:41:44 -04:00
HRG @ SCExC
23414c7b66 wow 2024-06-02 00:39:30 -04:00
HRG @ SCExC
e335c65506 hmm 2024-02-24 11:12:14 -05:00
HRG @ SCExC
f370a2fe68 nice 2024-02-04 10:11:47 -05:00
HRG @ SCExC
80c6db1abd hello 2024-02-03 13:22:50 -05:00