An easy-to-host PDS on the ATProtocol, iPhone and MacOS. Maintain control of your keys and data, always.

feat(docs): add Bruno API collection for relay endpoints

Adds a Bruno HTTP client collection covering all four relay endpoints
(health, describeServer, claim-codes, create-signing-key) with a local
environment template and a mandatory update rule in CLAUDE.md.

+97
+5
CLAUDE.md
··· 42 42 - `nixosModules.default` - NixOS module exposing `services.ezpds` options (see `nix/CLAUDE.md`) 43 43 - `devShells.<system>.default` - Development shell via devenv 44 44 45 + ## Bruno API Collection 46 + - `bruno/` - Bruno HTTP client collection for all relay endpoints 47 + - Open in Bruno desktop app; select the `local` environment and set `adminToken` to your relay admin token 48 + - **Mandatory:** When adding, removing, or changing any route (path, method, request body, response shape, auth), update the corresponding `.bru` file in `bruno/`. New routes get a new `.bru` file with the next `seq` number. 49 + 45 50 ## Conventions 46 51 - Workspace-level dependency versions in root Cargo.toml; crates use `{ workspace = true }` 47 52 - All crates share version (0.1.0) and edition (2021) via workspace.package
+15
bruno/bruno.json
··· 1 + { 2 + "version": "1", 3 + "name": "ezpds", 4 + "type": "collection", 5 + "ignore": [ 6 + "node_modules", 7 + ".git" 8 + ], 9 + "size": 0.0007619857788085938, 10 + "filesCount": 5, 11 + "presets": { 12 + "requestType": "http", 13 + "requestUrl": "http://localhost:8080" 14 + } 15 + }
+22
bruno/claim_codes.bru
··· 1 + meta { 2 + name: Claim Codes 3 + type: http 4 + seq: 3 5 + } 6 + 7 + post { 8 + url: {{baseUrl}}/v1/accounts/claim-codes 9 + body: json 10 + auth: bearer 11 + } 12 + 13 + auth:bearer { 14 + token: {{adminToken}} 15 + } 16 + 17 + body:json { 18 + { 19 + "count": 1, 20 + "expiresInHours": 24 21 + } 22 + }
bruno/collection.bru

This is a binary file and will not be displayed.

+21
bruno/create_signing_key.bru
··· 1 + meta { 2 + name: Create Signing Key 3 + type: http 4 + seq: 4 5 + } 6 + 7 + post { 8 + url: {{baseUrl}}/v1/relay/keys 9 + body: json 10 + auth: bearer 11 + } 12 + 13 + auth:bearer { 14 + token: {{adminToken}} 15 + } 16 + 17 + body:json { 18 + { 19 + "algorithm": "p256" 20 + } 21 + }
+15
bruno/describe_server.bru
··· 1 + meta { 2 + name: Describe Server 3 + type: http 4 + seq: 2 5 + } 6 + 7 + get { 8 + url: {{baseUrl}}/xrpc/com.atproto.server.describeServer 9 + body: none 10 + auth: none 11 + } 12 + 13 + vars:pre-request { 14 + baseUrl: http://localhost:8080 15 + }
+4
bruno/environments/local.bru
··· 1 + vars { 2 + baseUrl: http://localhost:8080 3 + adminToken: your-admin-token-here 4 + }
+15
bruno/health.bru
··· 1 + meta { 2 + name: Health Check 3 + type: http 4 + seq: 1 5 + } 6 + 7 + get { 8 + url: {{baseUrl}}/xrpc/_health 9 + body: none 10 + auth: none 11 + } 12 + 13 + vars:pre-request { 14 + baseUrl: http://localhost:8080 15 + }