an appview-less Bluesky client using Constellation and PDS Queries reddwarf.app
frontend spa bluesky reddwarf microcosm
at main 2.3 kB view raw
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 [ 17 "authorization_code", 18 "refresh_token", 19 ], 20 response_types: ["code"] as ["code"], 21 token_endpoint_auth_method: "none" as "none", 22 application_type: "web" as "web", 23 dpop_bound_access_tokens: true, 24 }; 25}; 26 27export function generateMetadataPlugin({ 28 prod, 29 dev, 30 prodResolver = "https://bsky.social", 31 devResolver = prodResolver, 32}: { 33 prod: string; 34 dev: string; 35 prodResolver?: string; 36 devResolver?: string; 37}) { 38 return { 39 name: "vite-plugin-generate-metadata", 40 config(_config: any, { mode }: any) { 41 console.log('💡 vite mode =', mode) 42 let appOrigin, resolver; 43 if (mode === "production") { 44 appOrigin = prod; 45 resolver = prodResolver; 46 if (!appOrigin || !appOrigin.startsWith("https://")) { 47 throw new Error( 48 "VITE_APP_ORIGIN environment variable must be set to a valid HTTPS URL for production build." 49 ); 50 } 51 } else { 52 appOrigin = dev; 53 resolver = devResolver; 54 } 55 56 const metadata = generateClientMetadata(appOrigin); 57 const outputPath = path.resolve( 58 process.cwd(), 59 "public", 60 "client-metadata.json" 61 ); 62 63 fs.writeFileSync(outputPath, JSON.stringify(metadata, null, 2)); 64 65 const resolvers = { 66 resolver: resolver, 67 }; 68 const resolverOutPath = path.resolve( 69 process.cwd(), 70 "public", 71 "resolvers.json" 72 ); 73 74 fs.writeFileSync(resolverOutPath, JSON.stringify(resolvers, null, 2)); 75 76 77 // /*mass comment*/ console.log(`✅ Generated client-metadata.json for ${appOrigin}`); 78 }, 79 }; 80}