{"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"]}