The recipes.blue monorepo
recipes.blue
recipes
appview
atproto
1import { StrictMode } from 'react'
2import { createRoot } from 'react-dom/client'
3import { routeTree } from './routeTree.gen';
4import { createRouter, RouterProvider } from '@tanstack/react-router';
5import { QueryClientProvider, QueryClient } from '@tanstack/react-query'
6import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
7import { configureOAuth, defaultIdentityResolver } from '@atcute/oauth-browser-client';
8import './index.css'
9import { ThemeProvider } from './components/theme-provider';
10import { CompositeDidDocumentResolver, PlcDidDocumentResolver, WebDidDocumentResolver, XrpcHandleResolver } from '@atcute/identity-resolver';
11import { SessionProvider, useSession } from './state/auth/session';
12import { ClientProvider, useClient } from './state/auth';
13
14const router = createRouter({
15 routeTree,
16 context: {
17 session: undefined!,
18 client: undefined!,
19 },
20});
21
22declare module '@tanstack/react-router' {
23 interface Register {
24 router: typeof router
25 }
26}
27
28configureOAuth({
29 metadata: {
30 client_id: import.meta.env.VITE_OAUTH_CLIENT_ID,
31 redirect_uri: import.meta.env.VITE_OAUTH_REDIRECT_URI,
32 },
33 identityResolver: defaultIdentityResolver({
34 handleResolver: new XrpcHandleResolver({ serviceUrl: 'https://slingshot.microcosm.blue' }),
35 didDocumentResolver: new CompositeDidDocumentResolver({
36 methods: {
37 plc: new PlcDidDocumentResolver(),
38 web: new WebDidDocumentResolver(),
39 },
40 }),
41 }),
42});
43
44const queryClient = new QueryClient({
45 defaultOptions: {
46 queries: {
47 refetchOnWindowFocus: false,
48 structuralSharing: false,
49 retry: false,
50 }
51 }
52});
53
54const InnerApp = () => {
55 const session = useSession();
56 const client = useClient();
57 return <RouterProvider router={router} context={{ session, client }} />
58};
59
60createRoot(document.getElementById('root')!).render(
61 <StrictMode>
62 <SessionProvider>
63 <ClientProvider>
64 <ThemeProvider defaultTheme="dark" storageKey="recipes-theme">
65 <QueryClientProvider client={queryClient}>
66 <InnerApp />
67 <ReactQueryDevtools initialIsOpen={false} />
68 </QueryClientProvider>
69 </ThemeProvider>
70 </ClientProvider>
71 </SessionProvider>
72 </StrictMode>,
73)