web components for a integrable atproto based guestbook
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