an appview-less Bluesky client using Constellation and PDS Queries
reddwarf.app
frontend
spa
bluesky
reddwarf
microcosm
1import fs from 'fs';
2import path from 'path';
3//import { generateClientMetadata } from './src/helpers/oauthClient'
4export const generateClientMetadata = (appOrigin: string) => {
5 const callbackPath = '/callback';
6
7 return {
8 "client_id": `${appOrigin}/client-metadata.json`,
9 "client_name": "ForumTest",
10 "client_uri": appOrigin,
11 "logo_uri": `${appOrigin}/logo192.png`,
12 "tos_uri": `${appOrigin}/terms-of-service`,
13 "policy_uri": `${appOrigin}/privacy-policy`,
14 "redirect_uris": [`${appOrigin}${callbackPath}`] as [string, ...string[]],
15 "scope": "atproto transition:generic",
16 "grant_types": ["authorization_code", "refresh_token"] as ["authorization_code", "refresh_token"],
17 "response_types": ["code"] as ["code"],
18 "token_endpoint_auth_method": "none" as "none",
19 "application_type": "web" as "web",
20 "dpop_bound_access_tokens": true
21 };
22}
23
24
25export function generateMetadataPlugin({prod, dev}:{prod: string, dev: string}) {
26 return {
27 name: 'vite-plugin-generate-metadata',
28 config(_config: any, { mode }: any) {
29 let appOrigin;
30 if (mode === 'production') {
31 appOrigin = prod
32 if (!appOrigin || !appOrigin.startsWith('https://')) {
33 throw new Error('VITE_APP_ORIGIN environment variable must be set to a valid HTTPS URL for production build.');
34 }
35 } else {
36 appOrigin = dev;
37 }
38
39
40 const metadata = generateClientMetadata(appOrigin);
41 const outputPath = path.resolve(process.cwd(), 'public', 'client-metadata.json');
42
43 fs.writeFileSync(outputPath, JSON.stringify(metadata, null, 2));
44
45 // /*mass comment*/ console.log(`✅ Generated client-metadata.json for ${appOrigin}`);
46 },
47 };
48}