const ensureProcessLives: TRPCLink<AppRouter> = () => {
return ({ next, op }) => {
return observable((observer) => {
const keepAliveTimeout = setTimeout(() => {}, 2147483647);
return next(op).subscribe({
next(value) {
observer.next(value);
},
error(err) {
observer.error(err);
clearTimeout(keepAliveTimeout);
},
complete() {
observer.complete();
clearTimeout(keepAliveTimeout);
},
});
});
};
};
const wsClient = createWSClient({
WebSocket: WS as unknown as typeof WebSocket,
url: `ws://localhost:3001`,
onOpen: () => {
this.socket = wsClient['activeConnection'].ws._socket;
this.socket?.unref();
},
connectionParams: { id: this.id }
});
this.trpc = createTRPCClient<AppRouter>({
links: [
ensureProcessLives,
wsLink<AppRouter>({ client: wsClient })
],
});
const ensureProcessLives: TRPCLink<AppRouter> = () => {
return ({ next, op }) => {
return observable((observer) => {
const keepAliveTimeout = setTimeout(() => {}, 2147483647);
return next(op).subscribe({
next(value) {
observer.next(value);
},
error(err) {
observer.error(err);
clearTimeout(keepAliveTimeout);
},
complete() {
observer.complete();
clearTimeout(keepAliveTimeout);
},
});
});
};
};
const wsClient = createWSClient({
WebSocket: WS as unknown as typeof WebSocket,
url: `ws://localhost:3001`,
onOpen: () => {
this.socket = wsClient['activeConnection'].ws._socket;
this.socket?.unref();
},
connectionParams: { id: this.id }
});
this.trpc = createTRPCClient<AppRouter>({
links: [
ensureProcessLives,
wsLink<AppRouter>({ client: wsClient })
],
});