- This is a Go HTTP API backed by PostgreSQL. The executable entrypoint lives under
cmd/fmsg-webapi/, with application packages underinternal/. - Build:
go build ./... - Test:
go test ./... - Always run tests after making code changes to verify nothing is broken.
- This repository is an open-source implementation and not tied to one specific deployment - config should come from the environment
- Check sensitive files are not accidentally committed to git, e.g .env should NEVER be
Keep README.md up to date and concise whenever you:
- Add, remove, or rename a route.
- Change a route's query parameters, request body, or response shape.
- Add or remove environment variables.
- Change build or run instructions.
The API routes table and each route's section must reflect the live code in
cmd/fmsg-webapi/main.go and internal/handlers/.
- Schema source of truth:
https://github.com/markmnl/fmsgd/blob/main/dd.sql - Ensure all SQL in Go source files aligns with that schema.
- When adding recipients via the
add-toroute, insert onemsg_add_to_batchrow (add_to_from= authenticated identity, plustime_added) and insert themsg_add_torows with that batch'sbatch_id, all in the same transaction. - The WebSocket hub (
/fmsg/ws) LISTENs on thenew_msgLISTEN/NOTIFY channel for push delivery.new_msgfires once per recipient (payload<msg id>,<addr>) whenever a message becomes sent/arrived. Do not rename or remove that trigger without updating the hub. Thenew_msg_tochannel is the sender daemon's outbound delivery queue and is not used by this service. - For each
new_msgnotification the hub also dispatches a Web Push (when VAPID is configured) to the recipient'spush_subscriptionrows, so delivery does not depend on a live WebSocket.