{"version":3,"file":"websocket-transport.mjs","names":[],"sources":["../../../src/client/transport/websocket-transport.ts"],"sourcesContent":["import { Duplex } from \"node:stream\";\n\nimport type { Transport } from \"./transport\";\nimport type { ExpandedWebSocketTransportConfiguration } from \"~/config/expanded\";\n\nexport class WebSocketTransport implements Transport {\n  public readonly stream: Duplex;\n  private readonly config: ExpandedWebSocketTransportConfiguration;\n  private ws: WebSocket | undefined;\n  private sendBuffer: string[] = [];\n  private opened = false;\n\n  public constructor(config: ExpandedWebSocketTransportConfiguration) {\n    this.config = config;\n\n    this.stream = new Duplex({\n      decodeStrings: false,\n      objectMode: true,\n      // eslint-disable-next-line ts/no-empty-function\n      read() {},\n      write: (chunk, _encoding, callback) => {\n        if (this.opened) {\n          this.ws?.send(String(chunk));\n        } else {\n          this.sendBuffer.push(String(chunk));\n        }\n        callback();\n      },\n    });\n  }\n\n  public connect(connectionListener?: () => void): void {\n    this.ws = new WebSocket(this.config.url);\n    this.ws.addEventListener(\"message\", (event: MessageEvent) => {\n      this.stream.push(event.data);\n    });\n\n    this.ws.addEventListener(\"error\", (event: Event) => {\n      const error =\n        event instanceof ErrorEvent\n          ? event.error\n          : new Error(\"WebSocket error\");\n      this.stream.destroy(error);\n    });\n\n    this.ws.addEventListener(\"close\", () => {\n      this.stream.push(null);\n    });\n\n    this.ws.addEventListener(\"open\", () => {\n      this.opened = true;\n      for (const data of this.sendBuffer) {\n        this.ws?.send(data);\n      }\n      this.sendBuffer = [];\n      connectionListener?.();\n    });\n  }\n}\n"],"mappings":";;AAKA,IAAa,qBAAb,MAAqD;CACnD;CACA;CACA;CACA,aAA+B,EAAE;CACjC,SAAiB;CAEjB,YAAmB,QAAiD;AAClE,OAAK,SAAS;AAEd,OAAK,SAAS,IAAI,OAAO;GACvB,eAAe;GACf,YAAY;GAEZ,OAAO;GACP,QAAQ,OAAO,WAAW,aAAa;AACrC,QAAI,KAAK,OACP,MAAK,IAAI,KAAK,OAAO,MAAM,CAAC;QAE5B,MAAK,WAAW,KAAK,OAAO,MAAM,CAAC;AAErC,cAAU;;GAEb,CAAC;;CAGJ,QAAe,oBAAuC;AACpD,OAAK,KAAK,IAAI,UAAU,KAAK,OAAO,IAAI;AACxC,OAAK,GAAG,iBAAiB,YAAY,UAAwB;AAC3D,QAAK,OAAO,KAAK,MAAM,KAAK;IAC5B;AAEF,OAAK,GAAG,iBAAiB,UAAU,UAAiB;GAClD,MAAM,QACJ,iBAAiB,aACb,MAAM,wBACN,IAAI,MAAM,kBAAkB;AAClC,QAAK,OAAO,QAAQ,MAAM;IAC1B;AAEF,OAAK,GAAG,iBAAiB,eAAe;AACtC,QAAK,OAAO,KAAK,KAAK;IACtB;AAEF,OAAK,GAAG,iBAAiB,cAAc;AACrC,QAAK,SAAS;AACd,QAAK,MAAM,QAAQ,KAAK,WACtB,MAAK,IAAI,KAAK,KAAK;AAErB,QAAK,aAAa,EAAE;AACpB,yBAAsB;IACtB"}