## Cloudflare Publish Worker (Skeleton) This worker accepts publish payloads and stores transit blobs in R2 while keeping metadata in a Durable Object backed by SQLite. ### Bindings - `PUBLISH_META_DO`: Durable Object namespace - `PUBLISH_R2`: R2 bucket - `R2_ACCOUNT_ID`: Cloudflare account id for signing - `R2_BUCKET`: R2 bucket name for signing - `R2_ACCESS_KEY_ID`: R2 access key for signing - `R2_SECRET_ACCESS_KEY`: R2 secret key for signing - `COGNITO_JWKS_URL`: JWKS URL for Cognito user pool - `COGNITO_ISSUER`: Cognito issuer URL - `COGNITO_CLIENT_ID`: Cognito client ID - `DEV_SKIP_AUTH`: set to `true` to bypass JWT verification in local dev ### Routes - `GET /p/:graph-uuid/:page-uuid` - Returns server-rendered HTML for the page - `POST /pages` - Requires `Authorization: Bearer ` - Requires `x-publish-meta` header (JSON) - Body is transit payload (stored in R2 as-is) - `GET /pages/:graph-uuid/:page-uuid` - Returns metadata for the page - `GET /pages/:graph-uuid/:page-uuid/transit` - Returns JSON with a signed R2 URL and `etag` - `DELETE /pages/:graph-uuid/:page-uuid` - Deletes a published page - `DELETE /pages/:graph-uuid` - Deletes all pages for a graph - `GET /pages` - Lists metadata entries (from the index DO) ### Notes - This is a starter implementation. Integrate with your deployment tooling (wrangler, etc.) as needed. - For local testing, run `wrangler dev` and use `deps/publish/worker/scripts/dev_test.sh`. - If you switch schema versions, clear local DO state with `deps/publish/worker/scripts/clear_dev_state.sh`. - Build the worker bundle with `clojure -M:cljs release publish-worker` before running the worker. - For dev, you can run `clojure -M:cljs watch publish-worker` in one terminal.