web components for a integrable atproto based guestbook
at main 1.5 kB view raw
1import { 2 configureOAuth, 3 defaultIdentityResolver, 4} from '@atcute/oauth-browser-client'; 5import { 6 CompositeDidDocumentResolver, 7 PlcDidDocumentResolver, 8 WebDidDocumentResolver, 9 XrpcHandleResolver, 10} from '@atcute/identity-resolver'; 11 12export interface GuestbookConfig { 13 oauth: { 14 clientId: string; 15 redirectUri: string; 16 scope: string; 17 }; 18 services?: { 19 handleResolver?: string; 20 }; 21} 22 23let configured = false; 24let storedConfig: GuestbookConfig | null = null; 25 26/** 27 * Configure the guestbook components with OAuth settings. 28 * Must be called before using <guestbook-sign>. 29 */ 30export function configureGuestbook(config: GuestbookConfig) { 31 if (configured) { 32 console.warn('Guestbook already configured'); 33 return; 34 } 35 36 storedConfig = config; 37 38 configureOAuth({ 39 metadata: { 40 client_id: config.oauth.clientId, 41 redirect_uri: config.oauth.redirectUri, 42 }, 43 identityResolver: defaultIdentityResolver({ 44 handleResolver: new XrpcHandleResolver({ 45 serviceUrl: config.services?.handleResolver ?? 'https://slingshot.wisp.place' 46 }), 47 didDocumentResolver: new CompositeDidDocumentResolver({ 48 methods: { 49 plc: new PlcDidDocumentResolver(), 50 web: new WebDidDocumentResolver(), 51 }, 52 }), 53 }), 54 }); 55 56 configured = true; 57} 58 59/** 60 * Check if guestbook has been configured 61 */ 62export function isConfigured(): boolean { 63 return configured; 64} 65 66/** 67 * Get the stored config 68 */ 69export function getConfig(): GuestbookConfig | null { 70 return storedConfig; 71} 72