coder-cloud.ts 1.2 KB
Newer Older
A
Anmol Sethi 已提交
1
import { logger } from "@coder/logger"
A
Anmol Sethi 已提交
2 3 4
import { spawn } from "child_process"
import path from "path"
import split2 from "split2"
A
Anmol Sethi 已提交
5 6

const coderCloudAgent = path.resolve(__dirname, "../../lib/coder-cloud-agent")
A
Anmol Sethi 已提交
7

8
function runAgent(...args: string[]): Promise<void> {
9 10
  logger.debug(`running agent with ${args}`)

11
  const agent = spawn(coderCloudAgent, args, {
A
Anmol Sethi 已提交
12 13 14
    stdio: ["inherit", "inherit", "pipe"],
  })

A
Anmol Sethi 已提交
15
  agent.stderr.pipe(split2()).on("data", (line) => {
A
Anmol Sethi 已提交
16 17 18 19 20 21 22
    line = line.replace(/^[0-9-]+ [0-9:]+ [^ ]+\t/, "")
    logger.info(line)
  })

  return new Promise((res, rej) => {
    agent.on("error", rej)

A
Anmol Sethi 已提交
23
    agent.on("close", (code) => {
A
Anmol Sethi 已提交
24 25 26 27 28 29 30 31 32 33
      if (code !== 0) {
        rej({
          message: `coder cloud agent exited with ${code}`,
        })
        return
      }
      res()
    })
  })
}
A
Anmol Sethi 已提交
34

35
export function coderCloudBind(csAddr: string, serverName = ""): Promise<void> {
36 37
  logger.info("Remember --coder-bind is a beta feature and requires being accepted for testing")
  logger.info("See https://github.com/cdr/code-server/discussions/2137")
A
Anmol Sethi 已提交
38 39
  // addr needs to be in host:port format.
  // So we trim the protocol.
40 41
  csAddr = csAddr.replace(/^https?:\/\//, "")
  return runAgent("bind", `--code-server-addr=${csAddr}`, serverName)
A
Anmol Sethi 已提交
42
}