28 lines
925 B
TypeScript
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);
|