Julius MarmingeT3 Code Mobile [WIP] (#2013)b3e8c035 months agoHistory
63 lines · 1.8 KB · TypeScript
RawDownload
import {  WsTransport as BaseWsTransport,  type WsProtocolLifecycleHandlers,  type WsRpcProtocolSocketUrlProvider,  type WsTransportOptions,} from "@t3tools/client-runtime";import { createWsRpcProtocolLayer as createSharedWsRpcProtocolLayer } from "@t3tools/client-runtime"; import { ClientTracingLive } from "../observability/clientTracing";import {  acknowledgeRpcRequest,  clearAllTrackedRpcRequests,  trackRpcRequestSent,} from "./requestLatencyState";import {  recordWsConnectionAttempt,  recordWsConnectionClosed,  recordWsConnectionErrored,  recordWsConnectionOpened,} from "./wsConnectionState"; function createWsRpcProtocolLayer(  url: WsRpcProtocolSocketUrlProvider,  handlers?: WsProtocolLifecycleHandlers,) {  return createSharedWsRpcProtocolLayer(url, handlers, {    telemetryLifecycle: {      onAttempt: recordWsConnectionAttempt,      onOpen: recordWsConnectionOpened,      onError: (message) => {        clearAllTrackedRpcRequests();        recordWsConnectionErrored(message);      },      onClose: (details, context) => {        clearAllTrackedRpcRequests();        if (context.intentional) {          return;        }        recordWsConnectionClosed(details);      },    },    requestTelemetry: {      onRequestSent: trackRpcRequestSent,      onRequestAcknowledged: acknowledgeRpcRequest,      onClearTrackedRequests: clearAllTrackedRpcRequests,    },  });} const webWsTransportOptions = {  tracingLayer: ClientTracingLive,  createProtocolLayer: createWsRpcProtocolLayer,  onBeforeReconnect: () => clearAllTrackedRpcRequests(),} satisfies WsTransportOptions; export class WsTransport extends BaseWsTransport {  constructor(    url: WsRpcProtocolSocketUrlProvider,    lifecycleHandlers?: WsProtocolLifecycleHandlers,  ) {    super(url, lifecycleHandlers, webWsTransportOptions);  }}