···5555LOCAL_DEV=true
5656```
57575858+### Local Domain XRPC (ServiceAuth via PDS Proxy)
5959+6060+`apps/main-app` exposes domain claim/status XRPC endpoints:
6161+6262+- `place.wisp.v2.domain.claim` (procedure / POST)
6363+- `place.wisp.v2.domain.getStatus` (query / GET)
6464+6565+The server validates **serviceAuth JWTs** (not cookie auth, not direct end-user access JWTs) on `/xrpc/*`.
6666+6767+Set these env vars in your active `.env`:
6868+6969+```env
7070+LOCAL_DEV=true
7171+SERVICE_DID=did:web:regentsmacbookair
7272+SERVICE_IDS="#wisp_xrpc"
7373+SERVICE_ENDPOINT=https://regentsmacbookair
7474+```
7575+7676+Notes:
7777+7878+- `/.well-known/atproto-did` returns `SERVICE_DID`.
7979+- `/.well-known/did.json` publishes the DID doc, including `service` entries from `SERVICE_IDS`.
8080+- `SERVICE_IDS` must be quoted when it starts with `#` (otherwise dotenv treats it as a comment).
8181+- Service identity keys are stored in `service_identity_keys` in Postgres.
8282+ If `SERVICE_PUBLIC_KEY_MULTIBASE` and `SERVICE_PRIVATE_KEY_MULTIBASE` are not set, a keypair is generated once and persisted.
8383+8484+### Local TLS Requirement (No Auto Cert Generation)
8585+8686+Some PDS proxy flows require HTTPS on `:443` for the proxied service endpoint.
8787+Cert generation is intentionally manual so SANs are explicit and correct for your environment.
8888+8989+Example with `mkcert`:
9090+9191+```bash
9292+mkcert -cert-file certs/dev-cert.pem -key-file certs/dev-key.pem regentsmacbookair localhost 100.64.0.2
9393+```
9494+9595+Use SANs that match exactly what your PDS will call (hostname and/or IP).
9696+`apps/main-app` can terminate TLS directly in local dev with:
9797+9898+```env
9999+PORT=443
100100+LOCAL_DEV_TLS=true
101101+LOCAL_TLS_CERT_PATH=./certs/dev-cert.pem
102102+LOCAL_TLS_KEY_PATH=./certs/dev-key.pem
103103+```
104104+5810559106```bash
60107# Hosting service
···11+export * as PlaceWispV2DomainClaim from "./types/place/wisp/v2/domain/claim.js";
22+export * as PlaceWispV2DomainGetStatus from "./types/place/wisp/v2/domain/getStatus.js";
33+export * as PlaceWispV2Domains from "./types/place/wisp/v2/domains.js";