···11-/**
22- * AUTHENTICATION ROUTES
33- *
44- * Handles OAuth authentication flow for Bluesky/ATProto accounts
55- * All routes are on the editor.wisp.place subdomain
66- *
77- * Routes:
88- * POST /api/auth/signin - Initiate OAuth sign-in flow
99- * GET /api/auth/callback - OAuth callback handler (redirect from PDS)
1010- * GET /api/auth/status - Check current authentication status
1111- * POST /api/auth/logout - Sign out and clear session
1212- */
1313-1414-/**
1515- * CUSTOM DOMAIN ROUTES
1616- *
1717- * Handles custom domain (BYOD - Bring Your Own Domain) management
1818- * Users can claim custom domains with DNS verification (TXT + CNAME)
1919- * and map them to their sites
2020- *
2121- * Routes:
2222- * GET /api/check-domain - Fast verification check for routing (public)
2323- * GET /api/custom-domains - List user's custom domains
2424- * POST /api/custom-domains/check - Check domain availability and DNS config
2525- * POST /api/custom-domains/claim - Claim a custom domain
2626- * PUT /api/custom-domains/:id/site - Update site mapping
2727- * DELETE /api/custom-domains/:id - Remove a custom domain
2828- * POST /api/custom-domains/:id/verify - Manually trigger verification
2929- */
3030-3131-/**
3232- * WISP SITE MANAGEMENT ROUTES
3333- *
3434- * API endpoints for managing user's Wisp sites stored in ATProto repos
3535- * Handles reading site metadata, fetching content, updating sites, and uploads
3636- * All routes are on the editor.wisp.place subdomain
3737- *
3838- * Routes:
3939- * GET /wisp/sites - List all sites for authenticated user
4040- * POST /wisp/upload-files - Upload and deploy files as a site
4141- */
+5
src/index.ts
···147147 }
148148 }
149149 })
150150+ .get('/.well-known/atproto-did', ({ set }) => {
151151+ // Return plain text DID for AT Protocol domain verification
152152+ set.headers['Content-Type'] = 'text/plain'
153153+ return 'did:plc:7puq73yz2hkvbcpdhnsze2qw'
154154+ })
150155 .use(cors({
151156 origin: config.domain,
152157 credentials: true,