UNPKG

@qrvey/websocket-client

Version:

![install size](https://packagephobia.com/badge?p=@qrvey/websocket-client)

1 lines 4.58 kB
{"version":3,"sources":["../../src/lib/client.ts"],"names":["SOCKET_STATUS"],"mappings":";AAAA,SAAS,UAAkB;AAEpB,IAAK,gBAAL,kBAAKA,mBAAL;AACH,EAAAA,eAAA,eAAY;AACZ,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,eAAY;AACZ,EAAAA,eAAA,kBAAe;AACf,EAAAA,eAAA,eAAY;AALJ,SAAAA;AAAA,GAAA;AAQL,IAAM,kBAAN,MAAsB;AAAA,EAIzB,YACI,MAOA;AAAA,IACI;AAAA,IACA,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,EACrB,IAII,CAAC,GACP;AA/BN;AAgCQ,UAAM,aACF,qCACA,QAAQ,IAAI,mBADZ,YAEA,QAAQ,IAAI,WAFZ,YAGA;AAEJ,SAAK,SAAS,GAAG,WAAW;AAAA,MACxB;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,QACH;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,QAAI,sBAAsB;AACtB,YAAM,eAAe;AACrB,WAAK,qBAAqB,YAAY,MAAM;AACxC,aAAK,QAAQ;AAAA,UACT,WAAW;AAAA,UACX,MAAM,CAAC;AAAA,QACX,CAAC;AAAA,MACL,GAAG,YAAY;AAAA,IACnB;AAAA,EACJ;AAAA,EAEO,QAAQ;AAAA,IACX;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACf,GAIS;AACL,SAAK,OAAO,KAAK,WAAW,EAAE,UAAU,KAAK,CAAC;AAAA,EAClD;AAAA,EAEO,qBAAqB;AAAA,IACxB;AAAA,IACA;AAAA,IACA,WAAW;AAAA,EACf,GAIS;AACL,SAAK,OAAO,KAAK,WAAW,EAAE,UAAU,KAAK,GAAG,MAAM;AAClD,WAAK,OAAO,WAAW;AAAA,IAC3B,CAAC;AAAA,EACL;AAAA,EAEO,UACH,WACA,UACI;AACJ,SAAK,OAAO,GAAG,WAAW,QAAQ;AAClC,WAAO;AAAA,EACX;AAAA,EAEO,QAAQ,UAAkC;AAC7C,SAAK,OAAO,GAAG,iBAAiB,CAAC,UAAU;AACvC,aAAO,SAAS,KAAK;AAAA,IACzB,CAAC;AAAA,EACL;AAAA,EAEO,SAAwB;AAC3B,QAAI,KAAK,OAAO;AAAc,aAAO;AACrC,QAAI,KAAK,OAAO;AAAW,aAAO;AAClC,QAAI,KAAK,OAAO;AAAW,aAAO;AAClC,QAAI,KAAK,OAAO;AAAQ,aAAO;AAC/B,WAAO;AAAA,EACX;AAAA,EAEO,UAAgB;AACnB,SAAK,OAAO,QAAQ;AAAA,EACxB;AAAA,EAEO,aAAmB;AACtB,SAAK,OAAO,WAAW;AACvB,QAAI,KAAK,oBAAoB;AACzB,oBAAc,KAAK,kBAAkB;AAAA,IACzC;AAAA,EACJ;AACJ","sourcesContent":["import { io, Socket } from 'socket.io-client';\n\nexport enum SOCKET_STATUS {\n CONNECTED = 'CONNECTED',\n ACTIVE = 'ACTIVE',\n RECOVERED = 'RECOVERED',\n DISCONNECTED = 'DISCONNECTED',\n UNDEFINED = 'UNDEFINED',\n}\n\nexport class WebSocketClient {\n private socket: Socket;\n private intervalPingPongId;\n\n constructor(\n auth: {\n userId?: string;\n clientId?: string;\n token?: string;\n apiKey?: string;\n },\n // Options\n {\n domain,\n isAutoPingPongEnable = true,\n ignoreClientId = false,\n }: {\n domain?: string;\n isAutoPingPongEnable?: boolean;\n ignoreClientId?: boolean;\n } = {},\n ) {\n const serverUrl: string =\n domain ??\n process.env.PRIVATE_DOMAIN ??\n process.env.DOMAIN ??\n 'http://localhost:3000/';\n\n this.socket = io(serverUrl, {\n auth,\n path: '/websocket',\n query: {\n ignoreClientId,\n },\n });\n\n if (isAutoPingPongEnable) {\n const intervalTime = 60000; // 60000 ms = 1 minute;\n this.intervalPingPongId = setInterval(() => {\n this.publish({\n eventName: 'ping',\n data: {},\n });\n }, intervalTime);\n }\n }\n\n public publish({\n eventName,\n data,\n isPublic = false,\n }: {\n eventName: string;\n data: Record<string, any>;\n isPublic?: boolean;\n }): void {\n this.socket.emit(eventName, { isPublic, data });\n }\n\n public publishAndDisconnect({\n eventName,\n data,\n isPublic = false,\n }: {\n eventName: string;\n data: Record<string, any>;\n isPublic?: boolean;\n }): void {\n this.socket.emit(eventName, { isPublic, data }, () => {\n this.socket.disconnect();\n });\n }\n\n public subscribe(\n eventName: string,\n callback: (message: any) => void,\n ): this {\n this.socket.on(eventName, callback);\n return this;\n }\n\n public onError(callback: (message: any) => void) {\n this.socket.on('connect_error', (error) => {\n return callback(error);\n });\n }\n\n public status(): SOCKET_STATUS {\n if (this.socket.disconnected) return SOCKET_STATUS.DISCONNECTED;\n if (this.socket.connected) return SOCKET_STATUS.CONNECTED;\n if (this.socket.recovered) return SOCKET_STATUS.RECOVERED;\n if (this.socket.active) return SOCKET_STATUS.ACTIVE;\n return SOCKET_STATUS.UNDEFINED;\n }\n\n public connect(): void {\n this.socket.connect();\n }\n\n public disconnect(): void {\n this.socket.disconnect();\n if (this.intervalPingPongId) {\n clearInterval(this.intervalPingPongId);\n }\n }\n}\n"]}