Files
e2b-dev--e2b/packages/cli/src/commands/sandbox/connect.ts
T
2026-07-13 12:47:58 +08:00

51 lines
1.5 KiB
TypeScript

import * as e2b from 'e2b'
import * as commander from 'commander'
import { spawnConnectedTerminal } from 'src/terminal'
import { asBold, asPrimary } from 'src/utils/format'
import { ensureAPIKey } from '../../api'
import { printDashboardSandboxInspectUrl } from 'src/utils/urls'
export const connectCommand = new commander.Command('connect')
.description('connect terminal to already running sandbox')
.argument('<sandboxID>', `connect to sandbox with ${asBold('<sandboxID>')}`)
.alias('cn')
.action(async (sandboxID: string) => {
try {
const apiKey = ensureAPIKey()
if (!sandboxID) {
console.error('You need to specify sandbox ID')
process.exit(1)
}
await connectToSandbox({ apiKey, sandboxID })
// We explicitly call exit because the sandbox is keeping the program alive.
// We also don't want to call sandbox.close because that would disconnect other users from the edit session.
process.exit(0)
} catch (err: any) {
console.error(err)
process.exit(1)
}
})
async function connectToSandbox({
apiKey,
sandboxID,
}: {
apiKey: string
sandboxID: string
}) {
const sandbox = await e2b.Sandbox.connect(sandboxID, { apiKey })
printDashboardSandboxInspectUrl(sandbox.sandboxId)
console.log(
`Terminal connecting to sandbox ${asPrimary(`${sandbox.sandboxId}`)}`
)
await spawnConnectedTerminal(sandbox)
console.log(
`Closing terminal connection to sandbox ${asPrimary(sandbox.sandboxId)}`
)
}