trevstack/client/src/lib/transport.ts
2025-04-16 00:58:44 -04:00

28 lines
925 B
TypeScript

import { createConnectTransport } from '@connectrpc/connect-web';
import { Code, ConnectError, createClient, type Interceptor } from '@connectrpc/connect';
import { AuthService } from '$lib/connect/user/v1/auth_pb';
import { UserService } from '$lib/connect/user/v1/user_pb';
import { ItemService } from '$lib/connect/item/v1/item_pb';
import { goto } from '$app/navigation';
const redirector: Interceptor = (next) => async (req) => {
try {
return await next(req);
} catch (e) {
const error = ConnectError.from(e);
if (error.code === Code.Unauthenticated) {
await goto('/auth');
}
throw e;
}
};
const transport = createConnectTransport({
baseUrl: `${window.location.origin}/grpc`,
interceptors: [redirector]
});
export const AuthClient = createClient(AuthService, transport);
export const UserClient = createClient(UserService, transport);
export const ItemClient = createClient(ItemService, transport);