76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
import { createRouter as createTanstackRouter } from '@tanstack/react-router'
|
|
import { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query'
|
|
import * as TanstackQuery from './integrations/tanstack-query/root-provider'
|
|
import { createConnectTransport } from '@connectrpc/connect-web'
|
|
import { TransportProvider } from '@connectrpc/connect-query'
|
|
|
|
// Import the generated route tree
|
|
import { routeTree } from './routeTree.gen'
|
|
import { Interceptor } from '@connectrpc/connect'
|
|
import { getOidc } from './lib/oidc'
|
|
import { getRuntimeRPCURI } from './routes'
|
|
import NotFound from './components/404'
|
|
|
|
const logingIC: Interceptor = (next) => (req) => {
|
|
console.log(
|
|
`[ConnectRPC] ${new Date().toLocaleDateString()} - ${req.service}`,
|
|
)
|
|
return next(req)
|
|
}
|
|
|
|
const auth: Interceptor = (next) => async (req) => {
|
|
const oidc = await getOidc()
|
|
if (oidc && oidc.getAccessToken)
|
|
req.header.set('Authentication', 'Bearer ' + (await oidc.getAccessToken()))
|
|
|
|
return await next(req)
|
|
}
|
|
|
|
const transport = async () =>{
|
|
const baseUrl = await getRuntimeRPCURI();
|
|
console.log("BASE_URL", baseUrl)
|
|
return createConnectTransport({
|
|
baseUrl: baseUrl!,
|
|
interceptors: [logingIC, auth],
|
|
})
|
|
}
|
|
|
|
// Create a new router instance
|
|
export const getRouter = async () => {
|
|
const rqContext = TanstackQuery.getContext()
|
|
|
|
const finalTransport = await transport()
|
|
|
|
const router = createTanstackRouter({
|
|
routeTree,
|
|
context: { ...rqContext, transport: finalTransport },
|
|
defaultPreload: 'intent',
|
|
Wrap: (props: { children: React.ReactNode }) => {
|
|
return (
|
|
<TransportProvider transport={finalTransport}>
|
|
<TanstackQuery.Provider {...rqContext}>
|
|
{props.children}
|
|
</TanstackQuery.Provider>
|
|
</TransportProvider>
|
|
)
|
|
},
|
|
defaultErrorComponent: ({ error }) => {
|
|
return <div>ERROR {error.message}</div>
|
|
},
|
|
defaultNotFoundComponent: () => {
|
|
return <NotFound />
|
|
},
|
|
})
|
|
|
|
setupRouterSsrQueryIntegration({ router, queryClient: rqContext.queryClient })
|
|
|
|
return router
|
|
}
|
|
|
|
// Register the router instance for type safety
|
|
declare module '@tanstack/react-router' {
|
|
interface Register {
|
|
router: ReturnType<typeof getRouter>
|
|
}
|
|
}
|