
// Only use this client for auth.login, auth.logout, and auth.tokenRefresh calls
export const trpcAuthProxyClient = createTRPCProxyClient<AppRouter>({
links: [
httpLink({
url: apiUrl
})
]
});import PQueue from 'p-queue';
import { TRPCLink } from '@trpc/client';
import { observable } from '@trpc/server/observable';
import type { AppRouter } from 'server/routers/_app';
import { trpcAuthProxyClient } from './trpc'
const queue = new PQueue({ concurrency: 1 });
const tokenRefreshLink: TRPCLink<AppRouter> = () => {
return ({ next, op }) => {
return observable((observer) => {
void queue.add(async () => {
//** Your custom refresh implementation here **
if (tokenNeedsRefreshing()) {
await trpcAuthProxyClient.auth.tokenRefresh.mutate();
}
//**
next(op).subscribe({
next(value) {
observer.next(value);
},
error(error) {
observer.error(error);
},
complete() {
observer.complete();
}
});
});
});
};
};
// create trpc client(s) ...