Files
doneit-web/.angular/cache/14.2.12/babel-webpack/815e93ff0630db72342645f130d7dd9c.json
T
Eudes Inácio 53b71ea16f its working
2023-06-30 09:54:21 +01:00

1 line
63 KiB
JSON

{"ast":null,"code":"import _asyncToGenerator from \"C:/Users/eudes.inacio/GabineteDigital/gabinete-digital-fo/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { __decorate } from \"tslib\";\nimport { Injectable } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\nimport { deepFind } from 'src/plugin/deep';\nimport { environment } from 'src/environments/environment';\nimport { SessionStore } from 'src/app/store/session.service';\nlet RochetChatConnectorService = class RochetChatConnectorService {\n constructor() {\n var _this = this;\n this.isLogin = false;\n this.loginResponse = {};\n this.wsMsgQueue = {};\n this.wsCallbacks = {};\n this.wsReconnect = 0;\n this.n = 0;\n this.ws = {\n connected: false,\n registerCallback: params => {\n let id = params.requestId || params.key || uuidv4();\n // \n this.wsCallbacks[id] = params;\n this.n++;\n return id;\n },\n connect: () => {\n this.socket = new WebSocket(environment.apiWsChatUrl);\n // bind function\n this.socket.onopen = this.ws.onopen;\n this.socket.onmessage = this.ws.onmessage;\n this.socket.onclose = this.ws.onclose;\n this.socket.onerror = this.ws.onerror;\n },\n onopen: function () {\n var _ref = _asyncToGenerator(function* () {\n _this.ws.connected = true;\n setTimeout(() => {\n _this.ws.wsMsgQueue();\n }, 10);\n if (_this.wsReconnect >= 1) {\n for (const [key, value] of Object.entries(_this.wsCallbacks)) {\n if (value.type == 'reConnect') {\n const dontRepeat = yield value.funx();\n if (dontRepeat) {\n _this.n--;\n delete _this.wsCallbacks[key];\n }\n }\n }\n }\n _this.wsReconnect++;\n });\n return function onopen() {\n return _ref.apply(this, arguments);\n };\n }(),\n wsMsgQueue: () => {\n for (const [key, item] of Object.entries(this.wsMsgQueue)) {\n if (item.loginRequired == true && this.isLogin == true) {\n //\n this.ws.send(item);\n delete this.wsMsgQueue[key];\n } else if (item.loginRequired == false) {\n //\n this.ws.send(item);\n delete this.wsMsgQueue[key];\n }\n }\n },\n send: ({\n message,\n requestId = uuidv4(),\n loginRequired = true\n }) => {\n if (this.ws.connected == false || loginRequired == true && this.isLogin == false) {\n // save data to send when back online\n // \n //\n this.wsMsgQueue[requestId] = {\n message,\n requestId,\n loginRequired\n };\n } else {\n let messageStr = JSON.stringify(message);\n this.socket.send(messageStr);\n }\n return requestId;\n },\n onmessage: function () {\n var _ref2 = _asyncToGenerator(function* (event) {\n const data = JSON.parse(event.data);\n for (const [key, value] of Object.entries(_this.wsCallbacks)) {\n if (value.type == 'Onmessage') {\n const dontRepeat = yield value.funx(data);\n if (dontRepeat) {\n delete _this.wsCallbacks[key];\n _this.n--;\n }\n }\n }\n });\n return function onmessage(_x) {\n return _ref2.apply(this, arguments);\n };\n }(),\n onclose: function () {\n var _ref3 = _asyncToGenerator(function* (event) {\n _this.ws.connected = false;\n _this.isLogin = false;\n _this.connect();\n _this.login();\n for (const [key, value] of Object.entries(_this.wsCallbacks)) {\n if (value.type == 'Offline') {\n const dontRepeat = yield value.funx();\n if (dontRepeat) {\n delete _this.wsCallbacks[key];\n _this.n--;\n }\n }\n }\n });\n return function onclose(_x2) {\n return _ref3.apply(this, arguments);\n };\n }(),\n onerror: event => {},\n disconnect: () => {\n if (this.socket) {\n this.socket.onopen = event => {};\n this.socket.onmessage = event => {};\n this.socket.onclose = event => {};\n this.socket.onerror = event => {};\n this.socket.close();\n }\n }\n };\n }\n connect() {\n // dont connect if is already connected\n if (this.ws.connected == true) {\n return false;\n }\n this.ws.connect();\n const message = {\n msg: \"connect\",\n version: \"1\",\n support: [\"1\"]\n };\n this.ws.send({\n message,\n loginRequired: false,\n requestId: 'connectMessage'\n });\n this.ws.send({\n message: {\n msg: \"pong\"\n },\n loginRequired: false,\n requestId: 'connectPong'\n });\n this.ws.registerCallback({\n type: 'Onmessage',\n key: 'ping-pong',\n funx: message => {\n if (message.msg == \"ping\") {\n this.ws.send({\n message: {\n msg: \"pong\"\n },\n loginRequired: false\n });\n }\n }\n });\n }\n wsSend({\n message,\n requestId = uuidv4(),\n loginRequired = true\n }) {\n this.ws.send({\n message: {\n msg: \"pong\"\n },\n loginRequired: false\n });\n }\n login() {\n // dont login if is already login\n if (this.isLogin == true) {\n return new Promise((resolve, reject) => {\n resolve(this.loginResponse);\n });\n }\n const requestId = uuidv4();\n // \n const message = {\n msg: \"method\",\n method: \"login\",\n id: requestId,\n params: [{\n user: {\n email: SessionStore.user.Email\n },\n password: SessionStore.user.Password\n }]\n };\n this.ws.send({\n message,\n requestId: 'login',\n loginRequired: false\n });\n return new Promise((resolve, reject) => {\n // \n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n // \n if (message.id == requestId) {\n // same request send\n // \n // \n if (message.result) {\n if (message.result.token) {\n this.isLogin = true;\n this.loginResponse = message;\n setTimeout(() => {\n this.ws.wsMsgQueue();\n }, 10);\n resolve(message);\n // \n }\n } else {\n this.isLogin = false;\n // \n reject(message);\n }\n reject(message);\n return true;\n }\n }\n });\n });\n }\n getRooms(roomOlder = 1480377601) {\n //const requestId = uuidv4()\n const requestId = uuidv4();\n const message = {\n \"msg\": \"method\",\n \"method\": \"rooms/get\",\n \"id\": requestId,\n \"params\": [{\n \"$date\": 1480377601\n }]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n readMessage(roomId) {\n //const requestId = uuidv4()\n const requestId = uuidv4();\n const message = {\n \"msg\": \"method\",\n \"method\": \"readMessages\",\n \"params\": [roomId, []],\n \"id\": requestId\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n getUserOfRoom(roomId) {\n //const requestId = uuidv4()\n const requestId = uuidv4();\n const message = {\n \"msg\": \"method\",\n \"method\": \"getUsersOfRoom\",\n \"id\": requestId,\n \"params\": [roomId, false, {\n \"limit\": 100,\n \"skip\": 0\n }]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n logout() {\n this.isLogin = false;\n this.ws.connected = false;\n this.ws.disconnect();\n }\n // send message to room\n send({\n roomId,\n msg,\n attachments = null,\n file = null,\n localReference = null\n }) {\n //const requestId = uuidv4()\n const requestId = uuidv4();\n var message = {\n msg: \"method\",\n method: \"sendMessage\",\n id: requestId,\n params: [{\n rid: roomId,\n localReference: localReference,\n msg: msg,\n attachments,\n file\n }]\n };\n // \n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve({\n message,\n requestId\n });\n return true;\n }\n }\n });\n });\n }\n updateMessage(messageObject) {\n //const requestId = uuidv4()\n const requestId = uuidv4();\n var message = {\n msg: \"method\",\n method: \"updateMessage\",\n id: requestId,\n params: [messageObject]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve({\n message,\n requestId\n });\n return true;\n }\n }\n });\n });\n }\n leaveRoom(roomId) {\n const requestId = uuidv4();\n var message = {\n msg: \"method\",\n method: \"leaveRoom\",\n id: requestId,\n params: [roomId]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n addRoomOwner(roomId, userId) {\n const requestId = uuidv4();\n var message = {\n msg: \"method\",\n method: \"addRoomOwner\",\n id: requestId,\n params: [roomId, userId]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n hidingRoom(roomId) {\n const requestId = uuidv4();\n var message = {\n msg: \"method\",\n method: \"hideRoom\",\n id: requestId,\n params: [roomId]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n // \n return true;\n }\n }\n });\n });\n }\n joinRoom() {}\n deleteMessage(msgId) {\n //const requestId = uuidv4();\n const requestId = uuidv4();\n var message = {\n msg: \"method\",\n method: \"deleteMessage\",\n id: requestId,\n params: [{\n \"_id\": msgId\n }]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n createPrivateRoom(groupName, username, customFields) {\n const requestId = uuidv4();\n var message = {\n msg: \"method\",\n method: \"createPrivateGroup\",\n id: requestId,\n params: [groupName, [username], false, customFields, {\n \"broadcast\": false,\n \"encrypted\": false\n }]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n sendStreamNotifyRoom(roomId, username, event, param) {\n const requestId = uuidv4();\n let message = {\n msg: \"method\",\n method: \"stream-notify-room\",\n id: requestId,\n params: [`${roomId}/${event}`, username, param]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n subStreamNotifyRoom(roomId, event, param) {\n const requestId = uuidv4();\n let message = {\n msg: \"sub\",\n id: requestId,\n name: \"stream-notify-room\",\n params: [`${roomId}/${event}`, param]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n subStreamNotifyUser(param) {\n const requestId = uuidv4();\n let message = {\n msg: \"sub\",\n id: requestId,\n name: \"stream-notify-user\",\n params: [`${SessionStore.user.ChatData.data.userId}/notification`, param]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n subStreamMessageUser(param) {\n const requestId = uuidv4();\n let message = {\n msg: \"sub\",\n id: requestId,\n name: \"stream-notify-user\",\n params: [`${SessionStore.user.ChatData.data.userId}/message`, param]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n receiveStreamNotifyRoom(funx) {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.collection == \"stream-notify-room\" && message.msg == 'changed') {\n funx(message);\n }\n }\n });\n }\n getUserStatus(funx) {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.msg == 'changed' && message.collection == \"stream-notify-logged\") {\n funx(message);\n }\n }\n });\n }\n loadHistory(roomId, limit = 50) {\n const requestId = uuidv4();\n const message = {\n msg: \"method\",\n method: \"loadHistory\",\n id: requestId,\n params: [roomId, null, limit, {\n \"$date\": 1480377601\n }]\n };\n this.ws.send({\n message,\n requestId: 'loadHistory'\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n // \n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n setStatus(status) {\n const requestId = uuidv4();\n const message = {\n msg: \"method\",\n method: `UserPresence:setDefaultStatus`,\n id: requestId,\n params: [status]\n };\n this.ws.send({\n message,\n requestId\n });\n }\n subscribeNotifyRoom(roomId) {\n const requestId = uuidv4();\n var message = {\n \"msg\": \"sub\",\n \"id\": requestId,\n \"name\": \"stream-notify-room\",\n \"params\": [`${roomId}/event`, false]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.msg == 'ready' || deepFind(message, 'subs.0') == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n updateRoomEventss(roomId, collection, funx) {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n //\n if (message.msg == 'changed' && message.collection == collection) {\n if (message.fields.args[0].rid == roomId) {\n funx(message);\n } else if (message.fields.eventName == `${roomId}/deleteMessage`) {\n funx(message);\n }\n }\n }\n });\n }\n streamRoomMessages(roomId) {\n const requestId = \"streamRoomMessages\" + uuidv4();\n const message = {\n \"msg\": \"sub\",\n \"id\": requestId,\n \"name\": \"stream-room-messages\",\n \"params\": [`${roomId}`, false]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId || message?.subs?.[0] == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n streamNotifyLogged() {\n const requestId = uuidv4();\n const message = {\n \"msg\": \"sub\",\n \"id\": requestId,\n \"name\": \"stream-notify-logged\",\n \"params\": [\"user-status\", false]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n streamNotifyRoom(roomId) {\n const requestId = uuidv4();\n let message = {\n \"msg\": \"method\",\n \"method\": \"stream-notify-room\",\n \"id\": requestId,\n \"params\": [`null/typing`, \"paulo.pinto\", true]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n streamNotifyRoomDeleteMessage(roomId) {\n const requestId = uuidv4();\n let message = {\n \"msg\": \"sub\",\n \"id\": requestId,\n \"name\": \"stream-notify-room\",\n \"params\": [`${roomId}/deleteMessage`, true]\n };\n this.ws.send({\n message,\n requestId\n });\n return new Promise((resolve, reject) => {\n this.ws.registerCallback({\n type: 'Onmessage',\n funx: message => {\n if (message.id == requestId) {\n // same request send\n resolve(message);\n return true;\n }\n }\n });\n });\n }\n registerCallback(data) {\n return this.ws.registerCallback(data);\n }\n};\nRochetChatConnectorService.ctorParameters = () => [];\nRochetChatConnectorService = __decorate([Injectable({\n providedIn: 'root'\n})], RochetChatConnectorService);\nexport { RochetChatConnectorService };","map":{"version":3,"mappings":";;AAAA,SAASA,UAAU,QAAQ,eAAe;AAC1C,SAASC,EAAE,IAAIC,MAAM,QAAQ,MAAM;AAEnC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,SAASC,YAAY,QAAQ,+BAA+B;AAMrD,IAAMC,0BAA0B,GAAhC,MAAMA,0BAA0B;EAKrCC;IAAA;IAHA,YAAO,GAAG,KAAK;IACf,kBAAa,GAAG,EAAE;IA0sBV,eAAU,GAAgC,EAAE;IAC5C,gBAAW,GAAwC,EAAE;IACrD,gBAAW,GAAG,CAAC;IAEf,MAAC,GAAG,CAAC;IAEL,OAAE,GAAG;MACXC,SAAS,EAAE,KAAK;MAChBC,gBAAgB,EAAEC,MAAyB,IAAI;QAE7C,IAAIC,EAAE,GAAGD,MAAM,CAACE,SAAS,IAAIF,MAAM,CAACG,GAAG,IAAIX,MAAM,EAAE;QACnD;QACA,IAAI,CAACY,WAAW,CAACH,EAAE,CAAC,GAAGD,MAAM;QAC7B,IAAI,CAACK,CAAC,EAAE;QACR,OAAOJ,EAAE;MACX,CAAC;MACDK,OAAO,EAACA,MAAI;QACV,IAAI,CAACC,MAAM,GAAG,IAAIC,SAAS,CAACd,WAAW,CAACe,YAAY,CAAC;QACrD;QACA,IAAI,CAACF,MAAM,CAACG,MAAM,GAAG,IAAI,CAACC,EAAE,CAACD,MAAM;QACnC,IAAI,CAACH,MAAM,CAACK,SAAS,GAAG,IAAI,CAACD,EAAE,CAACC,SAAS;QACzC,IAAI,CAACL,MAAM,CAACM,OAAO,GAAG,IAAI,CAACF,EAAE,CAACE,OAAO;QACrC,IAAI,CAACN,MAAM,CAACO,OAAO,GAAG,IAAI,CAACH,EAAE,CAACG,OAAO;MACvC,CAAC;MACDJ,MAAM;QAAA,6BAAE,aAAU;UAChBK,KAAI,CAACJ,EAAE,CAACb,SAAS,GAAG,IAAI;UAExBkB,UAAU,CAAC,MAAI;YACbD,KAAI,CAACJ,EAAE,CAACM,UAAU,EAAE;UACtB,CAAC,EAAE,EAAE,CAAC;UAEN,IAAGF,KAAI,CAACG,WAAW,IAAI,CAAC,EAAE;YACxB,KAAK,MAAM,CAACf,GAAG,EAAEgB,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACN,KAAI,CAACX,WAAW,CAAC,EAAE;cAC3D,IAAGe,KAAK,CAACG,IAAI,IAAG,WAAW,EAAE;gBAC3B,MAAMC,UAAU,SAASJ,KAAK,CAACK,IAAI,EAAE;gBAErC,IAAGD,UAAU,EAAE;kBACbR,KAAI,CAACV,CAAC,EAAE;kBACR,OAAOU,KAAI,CAACX,WAAW,CAACD,GAAG,CAAC;;;;;UAQpCY,KAAI,CAACG,WAAW,EAAE;QACpB,CAAC;QAAA;UAAA;QAAA;MAAA;MACDD,UAAU,EAACA,MAAI;QAEb,KAAK,MAAM,CAACd,GAAG,EAAEsB,IAAI,CAAC,IAAIL,MAAM,CAACC,OAAO,CAAC,IAAI,CAACJ,UAAU,CAAC,EAAE;UAEzD,IAAGQ,IAAI,CAACC,aAAa,IAAI,IAAI,IAAI,IAAI,CAACC,OAAO,IAAI,IAAI,EAAE;YACrD;YACA,IAAI,CAAChB,EAAE,CAACiB,IAAI,CAACH,IAAI,CAAC;YAClB,OAAO,IAAI,CAACR,UAAU,CAACd,GAAG,CAAC;WAC5B,MAAM,IAAGsB,IAAI,CAACC,aAAa,IAAI,KAAK,EAAE;YACrC;YACA,IAAI,CAACf,EAAE,CAACiB,IAAI,CAACH,IAAI,CAAC;YAClB,OAAO,IAAI,CAACR,UAAU,CAACd,GAAG,CAAC;;;MAGjC,CAAC;MACDyB,IAAI,EAAEA,CAAC;QAACC,OAAO;QAAE3B,SAAS,GAAGV,MAAM,EAAE;QAAEkC,aAAa,GAAG;MAAI,CAAM,KAAI;QAEnE,IAAI,IAAI,CAACf,EAAE,CAACb,SAAS,IAAI,KAAK,IAAI4B,aAAa,IAAI,IAAI,IAAI,IAAI,CAACC,OAAO,IAAI,KAAK,EAAE;UAAE;UAClF;UACA;UAEA,IAAI,CAACV,UAAU,CAACf,SAAS,CAAC,GAAG;YAAC2B,OAAO;YAAE3B,SAAS;YAAEwB;UAAa,CAAC;SACjE,MAAM;UACL,IAAII,UAAU,GAAGC,IAAI,CAACC,SAAS,CAACH,OAAO,CAAC;UACxC,IAAI,CAACtB,MAAM,CAACqB,IAAI,CAACE,UAAU,CAAC;;QAE9B,OAAO5B,SAAS;MAClB,CAAC;MAEDU,SAAS;QAAA,8BAAE,WAAOqB,KAAU,EAAG;UAC7B,MAAMC,IAAI,GAAGH,IAAI,CAACI,KAAK,CAACF,KAAK,CAACC,IAAI,CAAC;UAEnC,KAAK,MAAM,CAAC/B,GAAG,EAAEgB,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACN,KAAI,CAACX,WAAW,CAAC,EAAE;YAC3D,IAAGe,KAAK,CAACG,IAAI,IAAG,WAAW,EAAE;cAC3B,MAAMC,UAAU,SAASJ,KAAK,CAACK,IAAI,CAACU,IAAI,CAAC;cAEzC,IAAGX,UAAU,EAAE;gBACb,OAAOR,KAAI,CAACX,WAAW,CAACD,GAAG,CAAC;gBAC5BY,KAAI,CAACV,CAAC,EAAE;;;;QAOhB,CAAC;QAAA;UAAA;QAAA;MAAA;MAEDQ,OAAO;QAAA,8BAAE,WAAOoB,KAAU,EAAG;UAC3BlB,KAAI,CAACJ,EAAE,CAACb,SAAS,GAAG,KAAK;UACzBiB,KAAI,CAACY,OAAO,GAAG,KAAK;UAEpBZ,KAAI,CAACT,OAAO,EAAE;UACdS,KAAI,CAACqB,KAAK,EAAE;UAEZ,KAAK,MAAM,CAACjC,GAAG,EAAEgB,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACN,KAAI,CAACX,WAAW,CAAC,EAAE;YAC3D,IAAGe,KAAK,CAACG,IAAI,IAAI,SAAS,EAAE;cAC1B,MAAMC,UAAU,SAASJ,KAAK,CAACK,IAAI,EAAE;cAErC,IAAGD,UAAU,EAAE;gBACb,OAAOR,KAAI,CAACX,WAAW,CAACD,GAAG,CAAC;gBAC5BY,KAAI,CAACV,CAAC,EAAE;;;;QAQhB,CAAC;QAAA;UAAA;QAAA;MAAA;MAEDS,OAAO,EAAGmB,KAAU,IAAI,CAExB,CAAC;MACDI,UAAU,EAACA,MAAK;QACd,IAAG,IAAI,CAAC9B,MAAM,EAAE;UACd,IAAI,CAACA,MAAM,CAACG,MAAM,GAAIuB,KAAU,IAAI,CAAG,CAAC;UACxC,IAAI,CAAC1B,MAAM,CAACK,SAAS,GAAIqB,KAAU,IAAI,CAAG,CAAC;UAC3C,IAAI,CAAC1B,MAAM,CAACM,OAAO,GAAIoB,KAAU,IAAI,CAAG,CAAC;UACzC,IAAI,CAAC1B,MAAM,CAACO,OAAO,GAAImB,KAAU,IAAI,CAAG,CAAC;UACzC,IAAI,CAAC1B,MAAM,CAAC+B,KAAK,EAAE;;MAEvB;KAED;EA10BD;EAEAhC,OAAOA;IACL;IACA,IAAG,IAAI,CAACK,EAAE,CAACb,SAAS,IAAI,IAAI,EAAE;MAC5B,OAAO,KAAK;;IAGd,IAAI,CAACa,EAAE,CAACL,OAAO,EAAE;IAEjB,MAAMuB,OAAO,GAAG;MACdU,GAAG,EAAE,SAAS;MACdC,OAAO,EAAE,GAAG;MACZC,OAAO,EAAE,CAAC,GAAG;KACd;IACD,IAAI,CAAC9B,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAEH,aAAa,EAAE,KAAK;MAAExB,SAAS,EAAE;IAAgB,CAAC,CAAC;IAC1E,IAAI,CAACS,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO,EAAC;QAACU,GAAG,EAAC;MAAM,CAAC;MAAEb,aAAa,EAAE,KAAK;MAAExB,SAAS,EAAE;IAAa,CAAC,CAAC;IAEpF,IAAI,CAACS,EAAE,CAACZ,gBAAgB,CAAC;MACvBuB,IAAI,EAAC,WAAW;MAChBnB,GAAG,EAAC,WAAW;MACdqB,IAAI,EAAEK,OAAY,IAAI;QACrB,IAAGA,OAAO,CAACU,GAAG,IAAI,MAAM,EAAE;UACxB,IAAI,CAAC5B,EAAE,CAACiB,IAAI,CAAC;YAACC,OAAO,EAAC;cAACU,GAAG,EAAC;YAAM,CAAC;YAAEb,aAAa,EAAE;UAAK,CAAC,CAAC;;MAE9D;KACD,CAAC;EAEJ;EAEAgB,MAAMA,CAAC;IAACb,OAAO;IAAE3B,SAAS,GAAGV,MAAM,EAAE;IAAEkC,aAAa,GAAG;EAAI,CAAM;IAC/D,IAAI,CAACf,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO,EAAC;QAACU,GAAG,EAAC;MAAM,CAAC;MAAEb,aAAa,EAAE;IAAK,CAAC,CAAC;EAC5D;EAEAU,KAAKA;IACH;IACA,IAAG,IAAI,CAACT,OAAO,IAAI,IAAI,EAAE;MACvB,OAAO,IAAIgB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAG;QACpCD,OAAO,CAAC,IAAI,CAACE,aAAa,CAAC;MAC7B,CAAC,CAAC;;IAGJ,MAAM5C,SAAS,GAAGV,MAAM,EAAE;IAC1B;IACA,MAAMqC,OAAO,GAAG;MACdU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,OAAO;MACf9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CACN;QACEgD,IAAI,EAAE;UAAEC,KAAK,EAAEtD,YAAY,CAACqD,IAAI,CAACE;QAAK,CAAE;QACxCC,QAAQ,EAAExD,YAAY,CAACqD,IAAI,CAACI;OAC7B;KAEJ;IACD,IAAI,CAACzC,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B,SAAS,EAAE,OAAO;MAAEwB,aAAa,EAAE;IAAK,CAAC,CAAC;IAGjE,OAAO,IAAIiB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC;MACA,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D;UACA,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B;YACA;YACA,IAAG2B,OAAO,CAACwB,MAAM,EAAE;cACjB,IAAGxB,OAAO,CAACwB,MAAM,CAACC,KAAK,EAAE;gBACvB,IAAI,CAAC3B,OAAO,GAAG,IAAI;gBACnB,IAAI,CAACmB,aAAa,GAAGjB,OAAO;gBAE5Bb,UAAU,CAAC,MAAI;kBACb,IAAI,CAACL,EAAE,CAACM,UAAU,EAAE;gBACtB,CAAC,EAAE,EAAE,CAAC;gBAEN2B,OAAO,CAACf,OAAO,CAAC;gBAChB;;aAEH,MAAM;cACL,IAAI,CAACF,OAAO,GAAG,KAAK;cACpB;cACAkB,MAAM,CAAChB,OAAO,CAAC;;YAGjBgB,MAAM,CAAChB,OAAO,CAAC;YAEf,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAEA0B,QAAQA,CAACC,SAAS,GAAG,UAAU;IAG7B;IACA,MAAMtD,SAAS,GAAGV,MAAM,EAAE;IAC1B,MAAMqC,OAAO,GAAG;MACd,KAAK,EAAE,QAAQ;MACf,QAAQ,EAAE,WAAW;MACrB,IAAI,EAAE3B,SAAS;MACf,QAAQ,EAAE,CAAE;QAAE,OAAO,EAAE;MAAU,CAAE;KACpC;IAED,IAAI,CAACS,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAQ,CAACC,OAAO,EAAEC,MAAM,KAAI;MAC5C,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAE;YAAE;YAC5B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEA4B,WAAWA,CAACC,MAAM;IAEhB;IACA,MAAMxD,SAAS,GAAGV,MAAM,EAAE;IAE1B,MAAMqC,OAAO,GAAG;MACd,KAAK,EAAC,QAAQ;MACd,QAAQ,EAAC,cAAc;MACvB,QAAQ,EAAE,CAAC6B,MAAM,EAAE,EAAE,CAAC;MACtB,IAAI,EAAExD;KACP;IAED,IAAI,CAACS,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAQ,CAACC,OAAO,EAAEC,MAAM,KAAI;MAC5C,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAE;YAAE;YAC5B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAEA8B,aAAaA,CAACD,MAAM;IAElB;IACA,MAAMxD,SAAS,GAAGV,MAAM,EAAE;IAE1B,MAAMqC,OAAO,GAAG;MACd,KAAK,EAAE,QAAQ;MACf,QAAQ,EAAE,gBAAgB;MAC1B,IAAI,EAAE3B,SAAS;MACf,QAAQ,EAAE,CACRwD,MAAM,EACN,KAAK,EACL;QACE,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE;OACT;KACJ;IAED,IAAI,CAAC/C,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAQ,CAACC,OAAO,EAAEC,MAAM,KAAI;MAC5C,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAE;YAAE;YAC5B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEA+B,MAAMA;IACJ,IAAI,CAACjC,OAAO,GAAG,KAAK;IACpB,IAAI,CAAChB,EAAE,CAACb,SAAS,GAAG,KAAK;IACzB,IAAI,CAACa,EAAE,CAAC0B,UAAU,EAAE;EACtB;EAEA;EACAT,IAAIA,CAAC;IAAC8B,MAAM;IAAEnB,GAAG;IAAEsB,WAAW,GAAG,IAAI;IAAEC,IAAI,GAAG,IAAI;IAAEC,cAAc,GAAG;EAAI,CAAC;IAExE;IACA,MAAM7D,SAAS,GAAGV,MAAM,EAAE;IAC1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,aAAa;MACrB9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CAAC;QACPgE,GAAG,EAAEN,MAAM;QACXK,cAAc,EAAEA,cAAc;QAC9BxB,GAAG,EAAEA,GAAG;QACRsB,WAAW;QACXC;OACD;KACF;IAED;IAEA,IAAI,CAACnD,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAAC;cAACf,OAAO;cAAE3B;YAAS,CAAC,CAAC;YAC7B,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEA+D,aAAaA,CAACC,aAAa;IAEzB;IACA,MAAMhE,SAAS,GAAGV,MAAM,EAAE;IAC1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,eAAe;MACvB9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CAACkE,aAAa;KACvB;IAED,IAAI,CAACvD,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAAC;cAACf,OAAO;cAAE3B;YAAS,CAAC,CAAC;YAC7B,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAEAiE,SAASA,CAACT,MAAM;IAEd,MAAMxD,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,WAAW;MACnB9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CACN0D,MAAM;KAET;IAED,IAAI,CAAC/C,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEAuC,YAAYA,CAACV,MAAM,EAAEW,MAAM;IAEzB,MAAMnE,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,cAAc;MACtB9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CACN0D,MAAM,EACNW,MAAM;KAET;IAED,IAAI,CAAC1D,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEAyC,UAAUA,CAACZ,MAAM;IAEf,MAAMxD,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,UAAU;MAClB9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CAAC0D,MAAM;KAChB;IAED,IAAI,CAAC/C,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB;YAEA,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEA0C,QAAQA,IAAI;EAEZC,aAAaA,CAACC,KAAK;IACjB;IACA,MAAMvE,SAAS,GAAGV,MAAM,EAAE;IAC1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,eAAe;MACvB9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAC,CAAC;QAAC,KAAK,EAACyE;MAAK,CAAC;KACtB;IAED,IAAI,CAAC9D,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAE,CAACC,OAAO,EAAEC,MAAM,KAAI;MACtC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAI;UAC3D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAE;YAC1B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEA6C,iBAAiBA,CAACC,SAAS,EAAEC,QAAQ,EAAEC,YAAY;IACjD,MAAM3E,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,oBAAoB;MAC5B9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CACN2E,SAAS,EACT,CAACC,QAAQ,CAAC,EACV,KAAK,EACLC,YAAY,EACZ;QACE,WAAW,EAAC,KAAK;QACjB,WAAW,EAAC;OACb;KAEJ;IAED,IAAI,CAAClE,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEAiD,oBAAoBA,CAACpB,MAAe,EAAEkB,QAAQ,EAAE3C,KAAe,EAAE8C,KAAU;IAEzE,MAAM7E,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,oBAAoB;MAC5B9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CACN,GAAG0D,MAAM,IAAIzB,KAAK,EAAE,EACpB2C,QAAQ,EACRG,KAAK;KAER;IAED,IAAI,CAACpE,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAGAmD,mBAAmBA,CAACtB,MAAe,EAAGzB,KAAiD,EAAE8C,KAAU;IAEjG,MAAM7E,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,KAAK;MACVtC,EAAE,EAAEC,SAAS;MACb+E,IAAI,EAAE,oBAAoB;MAC1BjF,MAAM,EAAC,CACL,GAAG0D,MAAM,IAAIzB,KAAK,EAAE,EACpB8C,KAAK;KAER;IAGD,IAAI,CAACpE,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAGAqD,mBAAmBA,CAACH,KAAW;IAE7B,MAAM7E,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,KAAK;MACVtC,EAAE,EAAEC,SAAS;MACb+E,IAAI,EAAE,oBAAoB;MAC1BjF,MAAM,EAAC,CACL,GAAGL,YAAY,CAACqD,IAAI,CAACmC,QAAQ,CAACjD,IAAI,CAACmC,MAAM,eAAe,EACxDU,KAAK;KAER;IAGD,IAAI,CAACpE,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAEAuD,oBAAoBA,CAACL,KAAW;IAE9B,MAAM7E,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZU,GAAG,EAAE,KAAK;MACVtC,EAAE,EAAEC,SAAS;MACb+E,IAAI,EAAE,oBAAoB;MAC1BjF,MAAM,EAAC,CACL,GAAGL,YAAY,CAACqD,IAAI,CAACmC,QAAQ,CAACjD,IAAI,CAACmC,MAAM,UAAU,EACnDU,KAAK;KAER;IAGD,IAAI,CAACpE,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAEAwD,uBAAuBA,CAAC7D,IAAc;IAEpC,IAAI,CAACb,EAAE,CAACZ,gBAAgB,CAAC;MACvBuB,IAAI,EAAC,WAAW;MAChBE,IAAI,EAAEK,OAAO,IAAG;QACd,IAAGA,OAAO,CAACyD,UAAU,IAAI,oBAAoB,IAAIzD,OAAO,CAACU,GAAG,IAAI,SAAS,EAAE;UACzEf,IAAI,CAACK,OAAO,CAAC;;MAEnB;KAAE,CAAC;EACL;EAGA0D,aAAaA,CAAC/D,IAAa;IACzB,IAAI,CAACb,EAAE,CAACZ,gBAAgB,CAAC;MACvBuB,IAAI,EAAC,WAAW;MAChBE,IAAI,EAAEK,OAAO,IAAG;QACd,IAAGA,OAAO,CAACU,GAAG,IAAI,SAAS,IAAIV,OAAO,CAACyD,UAAU,IAAI,sBAAsB,EAAE;UAC3E9D,IAAI,CAACK,OAAO,CAAC;;MAEjB;KACD,CAAC;EACJ;EAGA2D,WAAWA,CAAC9B,MAAM,EAAE+B,QAAgB,EAAE;IAEpC,MAAMvF,SAAS,GAAGV,MAAM,EAAE;IAE1B,MAAMqC,OAAO,GAAG;MACdU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,aAAa;MACrB9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CACN0D,MAAM,EACN,IAAI,EACJ+B,KAAK,EACL;QACE,OAAO,EAAE;OACV;KAEJ;IAED,IAAI,CAAC9E,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B,SAAS,EAAE;IAAa,CAAC,CAAC;IAEjD,OAAO,IAAIyC,OAAO,CAAc,CAACC,OAAO,EAAEC,MAAM,KAAI;MAClD,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D;UACA,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEA6D,SAASA,CAACC,MAA8C;IAEtD,MAAMzF,SAAS,GAAGV,MAAM,EAAE;IAE1B,MAAMqC,OAAO,GAAG;MAEdU,GAAG,EAAE,QAAQ;MACbQ,MAAM,EAAE,+BAA+B;MACvC9C,EAAE,EAAEC,SAAS;MACbF,MAAM,EAAE,CAAE2F,MAAM;KAEjB;IAED,IAAI,CAAChF,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;EAEpC;EAEA0F,mBAAmBA,CAAClC,MAAe;IAEjC,MAAMxD,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZ,KAAK,EAAE,KAAK;MACZ,IAAI,EAAE3B,SAAS;MACf,MAAM,EAAE,oBAAoB;MAC5B,QAAQ,EAAC,CACT,GAAGwD,MAAM,QAAQ,EACf,KAAK;KAER;IAED,IAAI,CAAC/C,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAACU,GAAG,IAAI,OAAO,IAAI9C,QAAQ,CAACoC,OAAO,EAAE,QAAQ,CAAC,IAAI3B,SAAS,EAAE;YAAE;YACvE0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAEAgE,iBAAiBA,CAACnC,MAAM,EAAE4B,UAAiB,EAAE9D,IAAc;IAEzD,IAAI,CAACb,EAAE,CAACZ,gBAAgB,CAAC;MACvBuB,IAAI,EAAC,WAAW;MAChBE,IAAI,EAAEK,OAAO,IAAG;QACd;QAEA,IAAGA,OAAO,CAACU,GAAG,IAAG,SAAS,IAAIV,OAAO,CAACyD,UAAU,IAAIA,UAAU,EAAE;UAC9D,IAAGzD,OAAO,CAACiE,MAAM,CAACC,IAAI,CAAC,CAAC,CAAC,CAAC/B,GAAG,IAAIN,MAAM,EAAE;YACvClC,IAAI,CAACK,OAAO,CAAC;WACd,MACI,IAAGA,OAAO,CAACiE,MAAM,CAACE,SAAS,IAAG,GAAGtC,MAAM,gBAAgB,EAAC;YAC3DlC,IAAI,CAACK,OAAO,CAAC;;;MAGnB;KACD,CAAC;EACJ;EAEAoE,kBAAkBA,CAACvC,MAAe;IAEhC,MAAMxD,SAAS,GAAG,oBAAoB,GAACV,MAAM,EAAE;IAE/C,MAAMqC,OAAO,GAAG;MACd,KAAK,EAAE,KAAK;MACZ,IAAI,EAAE3B,SAAS;MACf,MAAM,EAAE,sBAAsB;MAC9B,QAAQ,EAAC,CACP,GAAGwD,MAAM,EAAE,EACT,KAAK;KAEV;IAED,IAAI,CAAC/C,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAI;UAG3D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,IAAI2B,OAAO,EAAEqE,IAAI,GAAG,CAAC,CAAC,IAAIhG,SAAS,EAAE;YAAE;YAC/D0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEAsE,kBAAkBA;IAEhB,MAAMjG,SAAS,GAAGV,MAAM,EAAE;IAE1B,MAAMqC,OAAO,GAAG;MACd,KAAK,EAAE,KAAK;MACZ,IAAI,EAAE3B,SAAS;MACf,MAAM,EAAE,sBAAsB;MAC9B,QAAQ,EAAC,CACP,aAAa,EACX,KAAK;KAEV;IAED,IAAI,CAACS,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAE;YAAE;YAC5B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EACJ;EAEAuE,gBAAgBA,CAAC1C,MAAe;IAE9B,MAAMxD,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZ,KAAK,EAAE,QAAQ;MACf,QAAQ,EAAE,oBAAoB;MAC9B,IAAI,EAAE3B,SAAS;MACf,QAAQ,EAAE,CACR,aAAa,EACb,aAAa,EACb,IAAI;KAEP;IAED,IAAI,CAACS,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAEAwE,6BAA6BA,CAAC3C,MAAa;IAEzC,MAAMxD,SAAS,GAAGV,MAAM,EAAE;IAE1B,IAAIqC,OAAO,GAAG;MACZ,KAAK,EAAE,KAAK;MACZ,IAAI,EAAE3B,SAAS;MACf,MAAM,EAAE,oBAAoB;MAC5B,QAAQ,EAAE,CACR,GAAGwD,MAAM,gBAAgB,EACzB,IAAI;KAEP;IAED,IAAI,CAAC/C,EAAE,CAACiB,IAAI,CAAC;MAACC,OAAO;MAAE3B;IAAS,CAAC,CAAC;IAElC,OAAO,IAAIyC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAI;MACrC,IAAI,CAAClC,EAAE,CAACZ,gBAAgB,CAAC;QAACuB,IAAI,EAAC,WAAW;QAAEE,IAAI,EAAEK,OAAO,IAAG;UAC1D,IAAGA,OAAO,CAAC5B,EAAE,IAAIC,SAAS,EAAG;YAAE;YAC7B0C,OAAO,CAACf,OAAO,CAAC;YAChB,OAAO,IAAI;;QAEf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC;EAEJ;EAEA9B,gBAAgBA,CAACmC,IAAsB;IACrC,OAAO,IAAI,CAACvB,EAAE,CAACZ,gBAAgB,CAACmC,IAAI,CAAC;EACvC;;;AAzsBWtC,0BAA0B,eAHtCN,UAAU,CAAC;EACVgH,UAAU,EAAE;CACb,CAAC,GACW1G,0BAA0B;SAA1BA,0BAA0B","names":["Injectable","v4","uuidv4","deepFind","environment","SessionStore","RochetChatConnectorService","constructor","connected","registerCallback","params","id","requestId","key","wsCallbacks","n","connect","socket","WebSocket","apiWsChatUrl","onopen","ws","onmessage","onclose","onerror","_this","setTimeout","wsMsgQueue","wsReconnect","value","Object","entries","type","dontRepeat","funx","item","loginRequired","isLogin","send","message","messageStr","JSON","stringify","event","data","parse","login","disconnect","close","msg","version","support","wsSend","Promise","resolve","reject","loginResponse","method","user","email","Email","password","Password","result","token","getRooms","roomOlder","readMessage","roomId","getUserOfRoom","logout","attachments","file","localReference","rid","updateMessage","messageObject","leaveRoom","addRoomOwner","userId","hidingRoom","joinRoom","deleteMessage","msgId","createPrivateRoom","groupName","username","customFields","sendStreamNotifyRoom","param","subStreamNotifyRoom","name","subStreamNotifyUser","ChatData","subStreamMessageUser","receiveStreamNotifyRoom","collection","getUserStatus","loadHistory","limit","setStatus","status","subscribeNotifyRoom","updateRoomEventss","fields","args","eventName","streamRoomMessages","subs","streamNotifyLogged","streamNotifyRoom","streamNotifyRoomDeleteMessage","providedIn"],"sourceRoot":"","sources":["C:\\Users\\eudes.inacio\\GabineteDigital\\gabinete-digital-fo\\src\\app\\services\\chat\\rochet-chat-connector.service.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { v4 as uuidv4 } from 'uuid'\r\nimport { wsCallbacksParams, msgQueue, send } from 'src/app/models/rochet-chat-cliente-service'\r\nimport { deepFind } from 'src/plugin/deep'\r\nimport { environment } from 'src/environments/environment';\r\nimport { SessionStore } from 'src/app/store/session.service';\r\nimport { chatHistory, Rooms } from 'src/app/models/chatMethod';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RochetChatConnectorService {\r\n\r\n isLogin = false;\r\n loginResponse = {}\r\n\r\n constructor() {\r\n }\r\n\r\n connect() {\r\n // dont connect if is already connected\r\n if(this.ws.connected == true) {\r\n return false\r\n }\r\n\r\n this.ws.connect();\r\n\r\n const message = {\r\n msg: \"connect\",\r\n version: \"1\",\r\n support: [\"1\"]\r\n }\r\n this.ws.send({message, loginRequired: false, requestId: 'connectMessage'})\r\n this.ws.send({message:{msg:\"pong\"}, loginRequired: false, requestId: 'connectPong'})\r\n\r\n this.ws.registerCallback({\r\n type:'Onmessage',\r\n key:'ping-pong',\r\n funx:(message: any) => {\r\n if(message.msg == \"ping\") {\r\n this.ws.send({message:{msg:\"pong\"}, loginRequired: false})\r\n }\r\n }\r\n })\r\n\r\n }\r\n\r\n wsSend({message, requestId = uuidv4(), loginRequired = true}:send) {\r\n this.ws.send({message:{msg:\"pong\"}, loginRequired: false})\r\n }\r\n\r\n login() {\r\n // dont login if is already login\r\n if(this.isLogin == true) {\r\n return new Promise((resolve, reject)=>{\r\n resolve(this.loginResponse)\r\n })\r\n }\r\n\r\n const requestId = uuidv4()\r\n // \r\n const message = {\r\n msg: \"method\",\r\n method: \"login\",\r\n id: requestId,\r\n params: [\r\n {\r\n user: { email: SessionStore.user.Email },\r\n password: SessionStore.user.Password\r\n }\r\n ]\r\n }\r\n this.ws.send({message, requestId: 'login', loginRequired: false})\r\n\r\n\r\n return new Promise((resolve, reject) => {\r\n // \r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n // \r\n if(message.id == requestId ) { // same request send\r\n // \r\n // \r\n if(message.result) {\r\n if(message.result.token) {\r\n this.isLogin = true\r\n this.loginResponse = message\r\n\r\n setTimeout(()=>{\r\n this.ws.wsMsgQueue()\r\n }, 10)\r\n\r\n resolve(message)\r\n // \r\n }\r\n } else {\r\n this.isLogin = false\r\n // \r\n reject(message)\r\n }\r\n\r\n reject(message)\r\n\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n getRooms(roomOlder = 1480377601) {\r\n\r\n \r\n //const requestId = uuidv4()\r\n const requestId = uuidv4()\r\n const message = {\r\n \"msg\": \"method\",\r\n \"method\": \"rooms/get\",\r\n \"id\": requestId,\r\n \"params\": [ { \"$date\": 1480377601 } ]\r\n }\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise<Rooms>((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n readMessage(roomId) {\r\n\r\n //const requestId = uuidv4()\r\n const requestId = uuidv4()\r\n\r\n const message = {\r\n \"msg\":\"method\",\r\n \"method\":\"readMessages\",\r\n \"params\": [roomId, []],\r\n \"id\": requestId\r\n }\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise<Rooms>((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n getUserOfRoom(roomId) {\r\n\r\n //const requestId = uuidv4()\r\n const requestId = uuidv4()\r\n\r\n const message = {\r\n \"msg\": \"method\",\r\n \"method\": \"getUsersOfRoom\",\r\n \"id\": requestId,\r\n \"params\": [\r\n roomId,\r\n false,\r\n {\r\n \"limit\": 100,\r\n \"skip\": 0\r\n } ]\r\n }\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise<Rooms>((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n logout() {\r\n this.isLogin = false\r\n this.ws.connected = false\r\n this.ws.disconnect()\r\n }\r\n\r\n // send message to room\r\n send({roomId, msg, attachments = null, file = null, localReference = null}) {\r\n\r\n //const requestId = uuidv4()\r\n const requestId = uuidv4()\r\n var message = {\r\n msg: \"method\",\r\n method: \"sendMessage\",\r\n id: requestId,\r\n params: [{\r\n rid: roomId,\r\n localReference: localReference,\r\n msg: msg,\r\n attachments,\r\n file\r\n }]\r\n }\r\n\r\n // \r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve({message, requestId})\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n updateMessage(messageObject) {\r\n\r\n //const requestId = uuidv4()\r\n const requestId = uuidv4()\r\n var message = {\r\n msg: \"method\",\r\n method: \"updateMessage\",\r\n id: requestId,\r\n params: [messageObject]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve({message, requestId})\r\n return true\r\n }\r\n }})\r\n })\r\n\r\n }\r\n\r\n leaveRoom(roomId) {\r\n\r\n const requestId = uuidv4()\r\n\r\n var message = {\r\n msg: \"method\",\r\n method: \"leaveRoom\",\r\n id: requestId,\r\n params: [\r\n roomId,\r\n ]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n addRoomOwner(roomId, userId) {\r\n\r\n const requestId = uuidv4()\r\n\r\n var message = {\r\n msg: \"method\",\r\n method: \"addRoomOwner\",\r\n id: requestId,\r\n params: [\r\n roomId,\r\n userId\r\n ]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n hidingRoom(roomId) {\r\n\r\n const requestId = uuidv4()\r\n\r\n var message = {\r\n msg: \"method\",\r\n method: \"hideRoom\",\r\n id: requestId,\r\n params: [roomId]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n // \r\n\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n joinRoom() {}\r\n\r\n deleteMessage(msgId) {\r\n //const requestId = uuidv4();\r\n const requestId = uuidv4()\r\n var message = {\r\n msg: \"method\",\r\n method: \"deleteMessage\",\r\n id: requestId,\r\n params:[{\"_id\":msgId}]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise ((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message) =>{\r\n if(message.id == requestId ){\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n createPrivateRoom(groupName, username, customFields) {\r\n const requestId = uuidv4()\r\n\r\n var message = {\r\n msg: \"method\",\r\n method: \"createPrivateGroup\",\r\n id: requestId,\r\n params: [\r\n groupName,\r\n [username],\r\n false,\r\n customFields,\r\n {\r\n \"broadcast\":false,\r\n \"encrypted\":false\r\n }\r\n ]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n sendStreamNotifyRoom(roomId : string, username, event: 'typing', param: any) {\r\n\r\n const requestId = uuidv4()\r\n\r\n let message = {\r\n msg: \"method\",\r\n method: \"stream-notify-room\",\r\n id: requestId,\r\n params: [\r\n `${roomId}/${event}`,\r\n username,\r\n param\r\n ]\r\n };\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n\r\n subStreamNotifyRoom(roomId : string , event: 'typing' | 'deleteMessage' | 'readMessage', param: any) {\r\n\r\n const requestId = uuidv4()\r\n\r\n let message = {\r\n msg: \"sub\",\r\n id: requestId,\r\n name: \"stream-notify-room\",\r\n params:[\r\n `${roomId}/${event}`,\r\n param\r\n ]\r\n }\r\n\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n\r\n subStreamNotifyUser(param?: any) {\r\n\r\n const requestId = uuidv4()\r\n\r\n let message = {\r\n msg: \"sub\",\r\n id: requestId,\r\n name: \"stream-notify-user\",\r\n params:[\r\n `${SessionStore.user.ChatData.data.userId}/notification`,\r\n param\r\n ]\r\n }\r\n\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n subStreamMessageUser(param?: any) {\r\n\r\n const requestId = uuidv4()\r\n\r\n let message = {\r\n msg: \"sub\",\r\n id: requestId,\r\n name: \"stream-notify-user\",\r\n params:[\r\n `${SessionStore.user.ChatData.data.userId}/message`,\r\n param\r\n ]\r\n }\r\n\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n receiveStreamNotifyRoom(funx: Function) {\r\n\r\n this.ws.registerCallback({\r\n type:'Onmessage',\r\n funx:(message)=> {\r\n if(message.collection == \"stream-notify-room\" && message.msg == 'changed') {\r\n funx(message)\r\n }\r\n }})\r\n }\r\n\r\n\r\n getUserStatus(funx:Function){\r\n this.ws.registerCallback({\r\n type:'Onmessage',\r\n funx:(message)=>{\r\n if(message.msg == 'changed' && message.collection == \"stream-notify-logged\") {\r\n funx(message)\r\n }\r\n }\r\n })\r\n }\r\n\r\n\r\n loadHistory(roomId, limit: number = 50) {\r\n\r\n const requestId = uuidv4()\r\n\r\n const message = {\r\n msg: \"method\",\r\n method: \"loadHistory\",\r\n id: requestId,\r\n params: [\r\n roomId,\r\n null,\r\n limit,\r\n {\r\n \"$date\": 1480377601\r\n }\r\n ]\r\n }\r\n\r\n this.ws.send({message, requestId: 'loadHistory'})\r\n\r\n return new Promise<chatHistory>((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n // \r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n setStatus(status: 'online' | 'busy' | 'away' | 'offline') {\r\n\r\n const requestId = uuidv4()\r\n\r\n const message = {\r\n\r\n msg: \"method\",\r\n method: `UserPresence:setDefaultStatus`,\r\n id: requestId,\r\n params: [ status ]\r\n\r\n }\r\n\r\n this.ws.send({message, requestId})\r\n\r\n }\r\n\r\n subscribeNotifyRoom(roomId : string) {\r\n\r\n const requestId = uuidv4()\r\n\r\n var message = {\r\n \"msg\": \"sub\",\r\n \"id\": requestId,\r\n \"name\": \"stream-notify-room\",\r\n \"params\":[\r\n `${roomId}/event`,\r\n false\r\n ]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.msg == 'ready' || deepFind(message, 'subs.0') == requestId) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n updateRoomEventss(roomId, collection:string, funx: Function, ) {\r\n\r\n this.ws.registerCallback({\r\n type:'Onmessage',\r\n funx:(message)=>{\r\n //\r\n\r\n if(message.msg =='changed' && message.collection == collection) {\r\n if(message.fields.args[0].rid == roomId) {\r\n funx(message)\r\n }\r\n else if(message.fields.eventName ==`${roomId}/deleteMessage`){\r\n funx(message)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n streamRoomMessages(roomId : string) {\r\n\r\n const requestId = \"streamRoomMessages\"+uuidv4()\r\n\r\n const message = {\r\n \"msg\": \"sub\",\r\n \"id\": requestId,\r\n \"name\": \"stream-room-messages\",\r\n \"params\":[\r\n `${roomId}`,\r\n false\r\n ]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message) => {\r\n\r\n\r\n if(message.id == requestId || message?.subs?.[0] == requestId) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n streamNotifyLogged() {\r\n\r\n const requestId = uuidv4()\r\n\r\n const message = {\r\n \"msg\": \"sub\",\r\n \"id\": requestId,\r\n \"name\": \"stream-notify-logged\",\r\n \"params\":[\r\n \"user-status\",\r\n false\r\n ]\r\n }\r\n\r\n this.ws.send({message, requestId});\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n }\r\n\r\n streamNotifyRoom(roomId : string) {\r\n\r\n const requestId = uuidv4()\r\n\r\n let message = {\r\n \"msg\": \"method\",\r\n \"method\": \"stream-notify-room\",\r\n \"id\": requestId,\r\n \"params\": [\r\n `null/typing`,\r\n \"paulo.pinto\",\r\n true\r\n ]\r\n };\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n streamNotifyRoomDeleteMessage(roomId:string) {\r\n\r\n const requestId = uuidv4()\r\n\r\n let message = {\r\n \"msg\": \"sub\",\r\n \"id\": requestId,\r\n \"name\": \"stream-notify-room\",\r\n \"params\": [\r\n `${roomId}/deleteMessage`,\r\n true\r\n ]\r\n };\r\n\r\n this.ws.send({message, requestId})\r\n\r\n return new Promise((resolve, reject) => {\r\n this.ws.registerCallback({type:'Onmessage', funx:(message)=>{\r\n if(message.id == requestId ) { // same request send\r\n resolve(message)\r\n return true\r\n }\r\n }})\r\n });\r\n\r\n }\r\n\r\n registerCallback(data:wsCallbacksParams) {\r\n return this.ws.registerCallback(data)\r\n }\r\n\r\n // socket class ==================================================================\r\n private socket!: WebSocket;\r\n private wsMsgQueue : {[key: string]: msgQueue} = {}\r\n private wsCallbacks: {[key: string]: wsCallbacksParams} = {}\r\n private wsReconnect = 0\r\n\r\n private n = 0\r\n\r\n private ws = {\r\n connected: false,\r\n registerCallback:(params: wsCallbacksParams) => {\r\n\r\n let id = params.requestId || params.key || uuidv4()\r\n // \r\n this.wsCallbacks[id] = params\r\n this.n++\r\n return id\r\n },\r\n connect:()=> {\r\n this.socket = new WebSocket(environment.apiWsChatUrl);\r\n // bind function\r\n this.socket.onopen = this.ws.onopen;\r\n this.socket.onmessage = this.ws.onmessage;\r\n this.socket.onclose = this.ws.onclose;\r\n this.socket.onerror = this.ws.onerror;\r\n },\r\n onopen: async ()=> {\r\n this.ws.connected = true\r\n\r\n setTimeout(()=>{\r\n this.ws.wsMsgQueue()\r\n }, 10)\r\n\r\n if(this.wsReconnect >= 1) {\r\n for (const [key, value] of Object.entries(this.wsCallbacks)) {\r\n if(value.type== 'reConnect') {\r\n const dontRepeat = await value.funx()\r\n\r\n if(dontRepeat) {\r\n this.n--\r\n delete this.wsCallbacks[key]\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n this.wsReconnect++;\r\n },\r\n wsMsgQueue:()=> {\r\n\r\n for (const [key, item] of Object.entries(this.wsMsgQueue)) {\r\n\r\n if(item.loginRequired == true && this.isLogin == true) {\r\n //\r\n this.ws.send(item);\r\n delete this.wsMsgQueue[key]\r\n } else if(item.loginRequired == false) {\r\n //\r\n this.ws.send(item);\r\n delete this.wsMsgQueue[key]\r\n }\r\n }\r\n },\r\n send: ({message, requestId = uuidv4(), loginRequired = true}:send) => {\r\n\r\n if (this.ws.connected == false || loginRequired == true && this.isLogin == false) { // save data to send when back online\r\n // \r\n //\r\n\r\n this.wsMsgQueue[requestId] = {message, requestId, loginRequired}\r\n } else {\r\n let messageStr = JSON.stringify(message)\r\n this.socket.send(messageStr)\r\n }\r\n return requestId\r\n },\r\n\r\n onmessage: async (event: any)=> {\r\n const data = JSON.parse(event.data)\r\n\r\n for (const [key, value] of Object.entries(this.wsCallbacks)) {\r\n if(value.type== 'Onmessage') {\r\n const dontRepeat = await value.funx(data)\r\n\r\n if(dontRepeat) {\r\n delete this.wsCallbacks[key]\r\n this.n--\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n },\r\n\r\n onclose: async (event: any)=> {\r\n this.ws.connected = false\r\n this.isLogin = false\r\n\r\n this.connect()\r\n this.login()\r\n\r\n for (const [key, value] of Object.entries(this.wsCallbacks)) {\r\n if(value.type == 'Offline') {\r\n const dontRepeat = await value.funx()\r\n\r\n if(dontRepeat) {\r\n delete this.wsCallbacks[key]\r\n this.n--\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n \r\n },\r\n\r\n onerror: (event: any) => {\r\n \r\n },\r\n disconnect:() => {\r\n if(this.socket) {\r\n this.socket.onopen = (event: any) => {}\r\n this.socket.onmessage = (event: any) => {}\r\n this.socket.onclose = (event: any) => {}\r\n this.socket.onerror = (event: any) => {}\r\n this.socket.close()\r\n }\r\n }\r\n\r\n }\r\n}\r\n"]},"metadata":{},"sourceType":"module"}