{"version":3,"file":"utils/socket.mjs","sources":["../../src/utils/socket.ts"],"sourcesContent":["/* rslint-disable no-restricted-globals */\nimport { io, Socket } from 'socket.io-client';\n\nconst map = new Map<string, Socket>();\nconst socketProtocol = location.protocol.includes('https') ? 'wss' : 'ws';\nconst defaultSocketUrl =\n  process.env.NODE_ENV === 'development'\n    ? `${socketProtocol}://${location.hostname}:${process.env.LOCAL_CLI_PORT}`\n    : `${socketProtocol}://${location.host}`;\n\nconst ipv4Pattern =\n  /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n\nfunction redactSocketToken(socketUrl: string) {\n  return socketUrl.replace(/([?&]token=)[^&]+/, '$1<redacted>');\n}\n\nfunction ensureSocket(socketUrl: string = defaultSocketUrl) {\n  if (!map.has(socketUrl)) {\n    const socket = io(socketUrl, {});\n    socket.on('connect', () => {\n      console.log(`Socket Connect ${redactSocketToken(socketUrl)}`);\n    });\n    map.set(socketUrl, socket);\n  }\n  return map.get(socketUrl)!;\n}\n\nexport function getSocket(socketPort?: string, socketUrl?: string): Socket {\n  const resolvedSocketUrl =\n    socketUrl ||\n    formatURL({\n      port: socketPort,\n      hostname: location.hostname,\n      protocol: location.protocol,\n    });\n  const socket = ensureSocket(\n    socketPort || socketUrl ? resolvedSocketUrl : defaultSocketUrl,\n  );\n  return socket;\n}\n\nexport function formatURL({\n  port,\n  protocol,\n  hostname,\n}: {\n  port?: string;\n  protocol: string;\n  hostname: string;\n}) {\n  if (typeof URL !== 'undefined') {\n    const url = new URL('http://localhost');\n    url.port = String(port);\n    url.hostname = hostname;\n    url.protocol = location.protocol.includes('https') ? 'wss' : 'ws';\n    return ipv4Pattern.test(hostname) || hostname.includes('localhost')\n      ? url.toString()\n      : `${protocol}//${hostname}`;\n  }\n\n  // compatible with IE11\n  const colon = protocol.indexOf(':') === -1 ? ':' : '';\n  return `${protocol}${colon}//${hostname}:${port}`;\n}\n"],"names":["map","Map","socketProtocol","location","defaultSocketUrl","process","ipv4Pattern","redactSocketToken","socketUrl","ensureSocket","socket","io","console","getSocket","socketPort","resolvedSocketUrl","formatURL","port","protocol","hostname","URL","url","String","colon"],"mappings":";AAGA,MAAMA,MAAM,IAAIC;AAChB,MAAMC,iBAAiBC,SAAS,QAAQ,CAAC,QAAQ,CAAC,WAAW,QAAQ;AACrE,MAAMC,mBACJC,AAAyB,kBAAzBA,QAAQ,GAAG,CAAC,QAAQ,GAChB,GAAGH,eAAe,GAAG,EAAEC,SAAS,QAAQ,CAAC,CAAC,EAAEE,QAAQ,GAAG,CAAC,cAAc,EAAE,GACxE,GAAGH,eAAe,GAAG,EAAEC,SAAS,IAAI,EAAE;AAE5C,MAAMG,cACJ;AAEF,SAASC,kBAAkBC,SAAiB;IAC1C,OAAOA,UAAU,OAAO,CAAC,qBAAqB;AAChD;AAEA,SAASC,aAAaD,YAAoBJ,gBAAgB;IACxD,IAAI,CAACJ,IAAI,GAAG,CAACQ,YAAY;QACvB,MAAME,SAASC,GAAGH,WAAW,CAAC;QAC9BE,OAAO,EAAE,CAAC,WAAW;YACnBE,QAAQ,GAAG,CAAC,CAAC,eAAe,EAAEL,kBAAkBC,YAAY;QAC9D;QACAR,IAAI,GAAG,CAACQ,WAAWE;IACrB;IACA,OAAOV,IAAI,GAAG,CAACQ;AACjB;AAEO,SAASK,UAAUC,UAAmB,EAAEN,SAAkB;IAC/D,MAAMO,oBACJP,aACAQ,UAAU;QACR,MAAMF;QACN,UAAUX,SAAS,QAAQ;QAC3B,UAAUA,SAAS,QAAQ;IAC7B;IACF,MAAMO,SAASD,aACbK,cAAcN,YAAYO,oBAAoBX;IAEhD,OAAOM;AACT;AAEO,SAASM,UAAU,EACxBC,IAAI,EACJC,QAAQ,EACRC,QAAQ,EAKT;IACC,IAAI,AAAe,MAAf,OAAOC,KAAqB;QAC9B,MAAMC,MAAM,IAAID,IAAI;QACpBC,IAAI,IAAI,GAAGC,OAAOL;QAClBI,IAAI,QAAQ,GAAGF;QACfE,IAAI,QAAQ,GAAGlB,SAAS,QAAQ,CAAC,QAAQ,CAAC,WAAW,QAAQ;QAC7D,OAAOG,YAAY,IAAI,CAACa,aAAaA,SAAS,QAAQ,CAAC,eACnDE,IAAI,QAAQ,KACZ,GAAGH,SAAS,EAAE,EAAEC,UAAU;IAChC;IAGA,MAAMI,QAAQL,AAA0B,OAA1BA,SAAS,OAAO,CAAC,OAAc,MAAM;IACnD,OAAO,GAAGA,WAAWK,MAAM,EAAE,EAAEJ,SAAS,CAAC,EAAEF,MAAM;AACnD"}