export const customLink: TRPCLink<AppRouter> = () => {
// here we just got initialized in the app - this happens once per app
// useful for storing cache for instance
return ({ next, op }) => {
// this is when passing the result to the next link
// each link needs to return an observable which propagates results
return observable(observer => {
const unsubscribe = next(op).subscribe({
next(value) {
// @ts-ignore TODO: fix the typing on these 2 values
if (value.context?.response?.status === 401) {
core.logged_in.set(false);
core.account.set(null);
core.tickets.reset();
core.account.reset();
core.linkingArgs.reset();
core.notifications.reset();
}
},
error(err) {
// @ts-ignore
if (err?.meta?.response?.status === 401) {
core.logged_in.set(false);
core.account.set(null);
core.tickets.reset();
core.account.reset();
core.linkingArgs.reset();
core.notifications.reset();
}
observer.error(err);
},
complete() {
observer.complete();
},
});
return unsubscribe;
});
};
};
export const client = createTRPCProxyClient<AppRouter>({
links: [
customLink,
httpBatchLink({
url: `${core.API_HOST._value}/trpc`,
// You can pass any HTTP headers you wish here
fetch(url: any, options: any) {
return fetch(url, {
...options,
credentials: 'include',
});
},
}),
],
});