The recipes.blue monorepo recipes.blue
recipes appview atproto
at main 73 lines 2.3 kB view raw
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)