| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { spawn } from 'node:child_process'
- import { join } from 'node:path'
- const handoffProbe = `
- const { writeFileSync } = require('node:fs')
- const marker = process.argv[1]
- const helperPid = Number(process.argv[2])
- setTimeout(() => {
- let helperAlive = true
- if (process.platform === 'win32') {
- try {
- process.kill(helperPid, 0)
- } catch {
- helperAlive = false
- }
- }
- if (helperAlive) writeFileSync(marker, '')
- }, 50)
- `
- export default async function open(url) {
- if (process.env.BROWSER_OPEN_TEST_FAILURE !== undefined) {
- throw new Error(process.env.BROWSER_OPEN_TEST_FAILURE)
- }
- const exchange = await fetch(url, { redirect: 'manual' })
- const setCookie = exchange.headers.get('set-cookie')
- const location = exchange.headers.get('location')
- if (exchange.status !== 303 || setCookie === null || location === null) {
- throw new Error(`browser authentication exchange returned HTTP ${exchange.status}`)
- }
- const response = await fetch(new URL(location, url), {
- headers: { cookie: setCookie.split(';', 1)[0] },
- })
- const html = await response.text()
- console.log(`dsh browser-open: ${JSON.stringify({
- url,
- status: response.status,
- bootManifest: html.includes('__DSH_BOOT__'),
- apiKeyPresent: process.env.DEEPSEEK_API_KEY !== undefined,
- dshHomePresent: process.env.DSH_HOME !== undefined,
- })}`)
- // The Windows launcher writes the server-exit marker only while its helper
- // remains alive, so the assembled test detects an early helper exit.
- const launcher = spawn(process.execPath, [
- '--eval', handoffProbe,
- '--', join(process.cwd(), `.dsh-browser-open-${process.ppid}`), String(process.pid),
- ], { stdio: 'ignore' })
- launcher.unref()
- return launcher
- }
|