{"version":3,"file":"build-logs.mjs","sources":["../../src/services/build-logs.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport { CLIContext, type CloudCliConfig } from '../types';\n\nconst buildLogsServiceFactory = ({ logger }: CLIContext) => {\n  return async (url: string, token: string, cliConfig: CloudCliConfig) => {\n    const CONN_TIMEOUT = Number(cliConfig.buildLogsConnectionTimeout);\n    const MAX_RETRIES = Number(cliConfig.buildLogsMaxRetries);\n\n    return new Promise((resolve, reject) => {\n      let timeoutId: NodeJS.Timeout | null = null;\n      let retries = 0;\n\n      const connect = (url: string) => {\n        const logsSpinner = logger.spinner('Connecting to the server to get build logs\\n').start();\n        logsSpinner.indent = 1;\n        const es = new EventSource(`${url}`, {\n          headers: {\n            Authorization: `Bearer ${token}`,\n          },\n        });\n\n        const clearExistingTimeout = () => {\n          if (timeoutId) {\n            clearTimeout(timeoutId);\n          }\n        };\n\n        const resetTimeout = () => {\n          clearExistingTimeout();\n          timeoutId = setTimeout(() => {\n            if (logsSpinner.isSpinning) {\n              logsSpinner.fail(\n                'We were unable to connect to the server to get build logs at this time. This could be due to a temporary issue.'\n              );\n            }\n            es.close();\n            reject(new Error('Connection timed out'));\n          }, CONN_TIMEOUT);\n        };\n\n        es.onopen = resetTimeout;\n\n        es.addEventListener('finished', (event) => {\n          const data = JSON.parse(event.data);\n          logger.log(data.msg);\n          es.close();\n          clearExistingTimeout();\n          resolve(null);\n        });\n\n        es.addEventListener('log', (event) => {\n          if (logsSpinner.isSpinning) {\n            logsSpinner.succeed();\n          }\n          resetTimeout();\n          const data = JSON.parse(event.data);\n          logger.log(data.msg);\n        });\n\n        es.onerror = async () => {\n          retries += 1;\n          if (retries > MAX_RETRIES) {\n            logsSpinner.fail(\n              'We were unable to connect to the server to get build logs at this time.'\n            );\n            es.close();\n            clearExistingTimeout(); // Important to clear the event loop from remaining timeout - avoid to wait for nothing while the timeout is running\n            reject(new Error('Max retries reached'));\n          }\n        };\n      };\n\n      connect(url);\n    });\n  };\n};\n\nexport { buildLogsServiceFactory };\n"],"names":["buildLogsServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","buildLogsConnectionTimeout","MAX_RETRIES","buildLogsMaxRetries","Promise","resolve","reject","timeoutId","retries","connect","logsSpinner","spinner","start","indent","es","EventSource","headers","Authorization","clearExistingTimeout","clearTimeout","resetTimeout","setTimeout","isSpinning","fail","close","Error","onopen","addEventListener","event","data","JSON","parse","log","msg","succeed","onerror"],"mappings":"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"}