{
  "version": 3,
  "sources": ["../../../../src/methods/initApp/websocket/initializeWebsocketConnection.ts"],
  "sourcesContent": ["import { io } from 'socket.io-client';\nimport { getWebsocketUrl } from 'apiCalls/websocket/getWebsocketUrl';\nimport {\n  WebsocketConnectionStatusEnum,\n  websocketConnection\n} from 'constants/websocket.constants';\nimport {\n  setWebsocketBatchEvent,\n  setWebsocketEvent\n} from 'store/actions/account/accountActions';\nimport { setWebsocketStatus } from 'store/actions/config/configActions';\nimport { networkSelector } from 'store/selectors/networkSelectors';\nimport { getStore } from 'store/store';\nimport { BatchTransactionsWSResponseType } from 'types/websocket.types';\n\nconst TIMEOUT = 3_000;\nconst RECONNECTION_ATTEMPTS = 3;\nconst RETRY_INTERVAL = 500;\nconst MESSAGE_DELAY = 500;\nconst BATCH_UPDATED_EVENT = 'batchUpdated';\nconst CONNECT = 'connect';\nconst CONNECT_ERROR = 'connect_error';\nconst DISCONNECT = 'disconnect';\n\ntype TimeoutType = ReturnType<typeof setTimeout> | null;\n\nexport async function initializeWebsocketConnection(address: string) {\n  const { apiAddress, websocketUrl: customWebsocketUrl } = networkSelector(\n    getStore().getState()\n  );\n\n  if (!address) {\n    throw new Error('Websocket could not be initialized: address missing');\n  }\n\n  let messageTimeout: TimeoutType = null;\n  let batchTimeout: TimeoutType = null;\n\n  // Update socket status in store for status subscription\n  const updateSocketStatus = (status: WebsocketConnectionStatusEnum) => {\n    websocketConnection.status = status;\n    setWebsocketStatus(status);\n  };\n\n  const handleMessageReceived = (message: string) => {\n    if (messageTimeout) {\n      clearTimeout(messageTimeout);\n    }\n    messageTimeout = setTimeout(() => {\n      setWebsocketEvent(message);\n    }, MESSAGE_DELAY);\n  };\n\n  const handleBatchUpdate = (data: BatchTransactionsWSResponseType) => {\n    if (batchTimeout) {\n      clearTimeout(batchTimeout);\n    }\n    batchTimeout = setTimeout(() => {\n      setWebsocketBatchEvent(data);\n    }, MESSAGE_DELAY);\n  };\n\n  const closeConnection = () => {\n    const instance = websocketConnection.instance;\n    if (instance) {\n      instance.off(CONNECT_ERROR);\n      instance.off(CONNECT);\n      instance.off(BATCH_UPDATED_EVENT);\n      instance.off(DISCONNECT);\n      instance.close();\n      console.log('Websocket disconnected.');\n    }\n\n    updateSocketStatus(WebsocketConnectionStatusEnum.NOT_INITIALIZED);\n    websocketConnection.instance = null;\n\n    if (messageTimeout) {\n      clearTimeout(messageTimeout);\n    }\n\n    if (batchTimeout) {\n      clearTimeout(batchTimeout);\n    }\n  };\n\n  const initializeConnection = async () => {\n    updateSocketStatus(WebsocketConnectionStatusEnum.PENDING);\n\n    let websocketUrl = '';\n    try {\n      websocketUrl = customWebsocketUrl ?? (await getWebsocketUrl(apiAddress));\n    } catch (error) {\n      console.error('Failed to get websocket url:', error);\n      updateSocketStatus(WebsocketConnectionStatusEnum.NOT_INITIALIZED);\n      throw error;\n    }\n\n    if (!websocketUrl) {\n      updateSocketStatus(WebsocketConnectionStatusEnum.NOT_INITIALIZED);\n      return;\n    }\n\n    websocketConnection.instance = io(websocketUrl, {\n      forceNew: true,\n      reconnection: true,\n      reconnectionAttempts: RECONNECTION_ATTEMPTS,\n      reconnectionDelay: RETRY_INTERVAL,\n      timeout: TIMEOUT,\n      query: { address },\n      transports: ['websocket']\n    });\n\n    websocketConnection.instance.onAny(handleMessageReceived);\n\n    websocketConnection.instance.on(BATCH_UPDATED_EVENT, handleBatchUpdate);\n\n    websocketConnection.instance.on(CONNECT, () => {\n      console.log('Websocket connected.');\n      updateSocketStatus(WebsocketConnectionStatusEnum.COMPLETED);\n    });\n\n    websocketConnection.instance.on(CONNECT_ERROR, (error) => {\n      console.warn('Websocket connect error: ', error.message);\n    });\n\n    websocketConnection.instance.on(DISCONNECT, (reason) => {\n      console.warn('Websocket disconnected: ', reason);\n      updateSocketStatus(WebsocketConnectionStatusEnum.PENDING);\n    });\n  };\n\n  if (\n    websocketConnection.status ===\n      WebsocketConnectionStatusEnum.NOT_INITIALIZED &&\n    !websocketConnection.instance?.active\n  ) {\n    await initializeConnection();\n  }\n\n  return {\n    closeConnection\n  };\n}\n"],
  "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmB,4BACnBC,EAAgC,8CAChCC,EAGO,yCACPC,EAGO,gDACPC,EAAmC,8CACnCC,EAAgC,4CAChCC,EAAyB,uBAGzB,MAAMC,EAAU,IACVC,EAAwB,EACxBC,EAAiB,IACjBC,EAAgB,IAChBC,EAAsB,eACtBC,EAAU,UACVC,EAAgB,gBAChBC,EAAa,aAInB,eAAsBhB,EAA8BiB,EAAiB,CACnE,KAAM,CAAE,WAAAC,EAAY,aAAcC,CAAmB,KAAI,sBACvD,YAAS,EAAE,SAAS,CACtB,EAEA,GAAI,CAACF,EACH,MAAM,IAAI,MAAM,qDAAqD,EAGvE,IAAIG,EAA8B,KAC9BC,EAA4B,KAGhC,MAAMC,EAAsBC,GAA0C,CACpE,sBAAoB,OAASA,KAC7B,sBAAmBA,CAAM,CAC3B,EAEMC,EAAyBC,GAAoB,CAC7CL,GACF,aAAaA,CAAc,EAE7BA,EAAiB,WAAW,IAAM,IAChC,qBAAkBK,CAAO,CAC3B,EAAGb,CAAa,CAClB,EAEMc,EAAqBC,GAA0C,CAC/DN,GACF,aAAaA,CAAY,EAE3BA,EAAe,WAAW,IAAM,IAC9B,0BAAuBM,CAAI,CAC7B,EAAGf,CAAa,CAClB,EAEMgB,EAAkB,IAAM,CAC5B,MAAMC,EAAW,sBAAoB,SACjCA,IACFA,EAAS,IAAId,CAAa,EAC1Bc,EAAS,IAAIf,CAAO,EACpBe,EAAS,IAAIhB,CAAmB,EAChCgB,EAAS,IAAIb,CAAU,EACvBa,EAAS,MAAM,EACf,QAAQ,IAAI,yBAAyB,GAGvCP,EAAmB,gCAA8B,eAAe,EAChE,sBAAoB,SAAW,KAE3BF,GACF,aAAaA,CAAc,EAGzBC,GACF,aAAaA,CAAY,CAE7B,EAEMS,EAAuB,SAAY,CACvCR,EAAmB,gCAA8B,OAAO,EAExD,IAAIS,EAAe,GACnB,GAAI,CACFA,EAAeZ,GAAuB,QAAM,mBAAgBD,CAAU,CACxE,OAASc,EAAO,CACd,cAAQ,MAAM,+BAAgCA,CAAK,EACnDV,EAAmB,gCAA8B,eAAe,EAC1DU,CACR,CAEA,GAAI,CAACD,EAAc,CACjBT,EAAmB,gCAA8B,eAAe,EAChE,MACF,CAEA,sBAAoB,YAAW,MAAGS,EAAc,CAC9C,SAAU,GACV,aAAc,GACd,qBAAsBrB,EACtB,kBAAmBC,EACnB,QAASF,EACT,MAAO,CAAE,QAAAQ,CAAQ,EACjB,WAAY,CAAC,WAAW,CAC1B,CAAC,EAED,sBAAoB,SAAS,MAAMO,CAAqB,EAExD,sBAAoB,SAAS,GAAGX,EAAqBa,CAAiB,EAEtE,sBAAoB,SAAS,GAAGZ,EAAS,IAAM,CAC7C,QAAQ,IAAI,sBAAsB,EAClCQ,EAAmB,gCAA8B,SAAS,CAC5D,CAAC,EAED,sBAAoB,SAAS,GAAGP,EAAgBiB,GAAU,CACxD,QAAQ,KAAK,4BAA6BA,EAAM,OAAO,CACzD,CAAC,EAED,sBAAoB,SAAS,GAAGhB,EAAaiB,GAAW,CACtD,QAAQ,KAAK,2BAA4BA,CAAM,EAC/CX,EAAmB,gCAA8B,OAAO,CAC1D,CAAC,CACH,EAEA,OACE,sBAAoB,SAClB,gCAA8B,iBAChC,CAAC,sBAAoB,UAAU,QAE/B,MAAMQ,EAAqB,EAGtB,CACL,gBAAAF,CACF,CACF",
  "names": ["initializeWebsocketConnection_exports", "__export", "initializeWebsocketConnection", "__toCommonJS", "import_socket", "import_getWebsocketUrl", "import_websocket", "import_accountActions", "import_configActions", "import_networkSelectors", "import_store", "TIMEOUT", "RECONNECTION_ATTEMPTS", "RETRY_INTERVAL", "MESSAGE_DELAY", "BATCH_UPDATED_EVENT", "CONNECT", "CONNECT_ERROR", "DISCONNECT", "address", "apiAddress", "customWebsocketUrl", "messageTimeout", "batchTimeout", "updateSocketStatus", "status", "handleMessageReceived", "message", "handleBatchUpdate", "data", "closeConnection", "instance", "initializeConnection", "websocketUrl", "error", "reason"]
}
