@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 3.78 kB
Source Map (JSON)
{"version":3,"file":"iflytek_websocket_stream.cjs","names":["url: string","options: WebSocketStreamOptions"],"sources":["../../src/utils/iflytek_websocket_stream.ts"],"sourcesContent":["export interface WebSocketConnection<\n T extends Uint8Array | string = Uint8Array | string,\n> {\n readable: ReadableStream<T>;\n writable: WritableStream<T>;\n protocol: string;\n extensions: string;\n}\n\nexport interface WebSocketCloseInfo {\n code?: number;\n reason?: string;\n}\n\nexport interface WebSocketStreamOptions {\n protocols?: string[];\n signal?: AbortSignal;\n}\n\n/**\n * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)\n *\n * @see https://web.dev/websocketstream/\n */\nexport abstract class BaseWebSocketStream<\n T extends Uint8Array | string = Uint8Array | string,\n> {\n readonly url: string;\n\n readonly connection: Promise<WebSocketConnection<T>>;\n\n readonly closed: Promise<WebSocketCloseInfo>;\n\n readonly close: (closeInfo?: WebSocketCloseInfo) => void;\n\n constructor(url: string, options: WebSocketStreamOptions = {}) {\n if (options.signal?.aborted) {\n throw new DOMException(\"This operation was aborted\", \"AbortError\");\n }\n\n this.url = url;\n\n const ws = this.openWebSocket(url, options);\n\n const closeWithInfo = ({ code, reason }: WebSocketCloseInfo = {}) =>\n ws.close(code, reason);\n\n this.connection = new Promise((resolve, reject) => {\n ws.onopen = () => {\n resolve({\n readable: new ReadableStream<T>({\n start(controller) {\n ws.onmessage = ({ data }) => controller.enqueue(data);\n ws.onerror = (e) => controller.error(e);\n },\n cancel: closeWithInfo,\n }),\n writable: new WritableStream<T>({\n write(chunk) {\n ws.send(chunk);\n },\n abort() {\n ws.close();\n },\n close: closeWithInfo,\n }),\n protocol: ws.protocol,\n extensions: ws.extensions,\n });\n ws.removeEventListener(\"error\", reject);\n };\n ws.addEventListener(\"error\", reject);\n });\n\n this.closed = new Promise<WebSocketCloseInfo>((resolve, reject) => {\n ws.onclose = ({ code, reason }) => {\n resolve({ code, reason });\n ws.removeEventListener(\"error\", reject);\n };\n ws.addEventListener(\"error\", reject);\n });\n\n if (options.signal) {\n options.signal.onabort = () => ws.close();\n }\n\n this.close = closeWithInfo;\n }\n\n abstract openWebSocket(\n url: string,\n options: WebSocketStreamOptions\n ): WebSocket;\n}\n"],"mappings":";;;;;;;AAwBA,IAAsB,sBAAtB,MAEE;CACA,AAAS;CAET,AAAS;CAET,AAAS;CAET,AAAS;CAET,YAAYA,KAAaC,UAAkC,CAAE,GAAE;AAC7D,MAAI,QAAQ,QAAQ,QAClB,OAAM,IAAI,aAAa,8BAA8B;EAGvD,KAAK,MAAM;EAEX,MAAM,KAAK,KAAK,cAAc,KAAK,QAAQ;EAE3C,MAAM,gBAAgB,CAAC,EAAE,MAAM,QAA4B,GAAG,CAAE,MAC9D,GAAG,MAAM,MAAM,OAAO;EAExB,KAAK,aAAa,IAAI,QAAQ,CAAC,SAAS,WAAW;GACjD,GAAG,SAAS,MAAM;IAChB,QAAQ;KACN,UAAU,IAAI,eAAkB;MAC9B,MAAM,YAAY;OAChB,GAAG,YAAY,CAAC,EAAE,MAAM,KAAK,WAAW,QAAQ,KAAK;OACrD,GAAG,UAAU,CAAC,MAAM,WAAW,MAAM,EAAE;MACxC;MACD,QAAQ;KACT;KACD,UAAU,IAAI,eAAkB;MAC9B,MAAM,OAAO;OACX,GAAG,KAAK,MAAM;MACf;MACD,QAAQ;OACN,GAAG,OAAO;MACX;MACD,OAAO;KACR;KACD,UAAU,GAAG;KACb,YAAY,GAAG;IAChB,EAAC;IACF,GAAG,oBAAoB,SAAS,OAAO;GACxC;GACD,GAAG,iBAAiB,SAAS,OAAO;EACrC;EAED,KAAK,SAAS,IAAI,QAA4B,CAAC,SAAS,WAAW;GACjE,GAAG,UAAU,CAAC,EAAE,MAAM,QAAQ,KAAK;IACjC,QAAQ;KAAE;KAAM;IAAQ,EAAC;IACzB,GAAG,oBAAoB,SAAS,OAAO;GACxC;GACD,GAAG,iBAAiB,SAAS,OAAO;EACrC;AAED,MAAI,QAAQ,QACV,QAAQ,OAAO,UAAU,MAAM,GAAG,OAAO;EAG3C,KAAK,QAAQ;CACd;AAMF"}