Files
recflare/apps/studio/README.md
T
Crasho 26270e9c25 [studio] beta studio (#114)
* rrs stuff

* studio service yay

* rrs whitelist

* moree studiooooooo fellowwww

* rec room studio room loading yay

* fixes yay

* fix 2 because idk  yayuh

* Update cdn.app.ts

* ccontent length fix?

* Preserve content-length and upgrade metadata

Return a real zero-filled byte array for CDN HEAD responses so the runtime preserves Content-Length while still sending no payload. In notify, re-create the Request with its original headers, set OWNER_HEADER from the validated token, and forward that Request to hub.fetch to avoid losing WebSocket upgrade metadata (which could trigger 500s in Durable Objects). These changes ensure the editor's size checks and WebSocket upgrades remain reliable.

* fix x524234

* shirt thing?

* [auth] remove grant table as we already have audit_log for now

* rename table to generic device_grant

* cleanup/lint

---------

Co-authored-by: Devin Zuczek <devin.zuczek@gmail.com>
2026-10-05 14:39:22 -04:00

2.5 KiB

studio

The RecFlare Studio host (https://studio.<domain>).

Device login stays on Auth, GET /account/me stays on Accounts, and the approval page is WWW /device. This worker answers the editor's build list, stores a locally built Windows and Android bundle pair, and answers the co-owner presence list. It does not serve the bundle bytes. A stored build is loaded from Rooms (CurrentSave.UnitySubAssets, and GET /rooms/{roomId}/subrooms/{subRoomId}/unityasset) and from the CDN at GET /unityasset/{filename}.

Method Path Purpose
GET /cloud-builds/for-room Cloud builds for that room and subroom, newest first (results, totalResults). Query: roomId, subRoomId, skip, take. A bad query is an empty page.
POST /cloud-builds/from-editor Multipart Windows bundle (windows) and Android bundle (android), optional windowsStripped and androidStripped. Stores a finished cloud build on the subroom's latest save and sets BecameRRStudioRoomAt the first time. Bearer required, and the token must include betastudio. Caller must be the creator or a co-owner.
GET /collaboration/owners-in-room Account ids of the room's co-owners (creator, or a Creator/CoOwner role) whose live presence is in that roomId and subRoomId. Body: { success: true, error: null, value: number[] }. Bearer required.

Development

Run in dev mode

pnpm dev

Run tests

pnpm test

Deploy

pnpm turbo deploy