// 下载 GitHub CLI (gh) 最新 Windows x64 便携版 zip。 // 用法: node dl-gh.mjs [输出目录] → 打印 { tag, file, bytes } // 沙箱内 curl/winget 的 HTTPS 被禁,但 node fetch 可用,故用 node 下载。 import fs from 'node:fs' import path from 'node:path' const outDir = path.resolve(process.argv[2] || '.') fs.mkdirSync(outDir, { recursive: true }) const relUrl = 'https://api.github.com/repos/cli/cli/releases/latest' const rel = await (await fetch(relUrl, { headers: { 'User-Agent': 'dsh-enhancements' }, signal: AbortSignal.timeout(30000) })).json() if (!rel.tag_name) throw new Error('bad release response: ' + JSON.stringify(rel).slice(0, 200)) const asset = rel.assets.find((a) => a.name.endsWith('windows_amd64.zip')) if (!asset) throw new Error('no windows_amd64.zip asset in ' + rel.tag_name) const out = path.join(outDir, asset.name) const res = await fetch(asset.browser_download_url, { signal: AbortSignal.timeout(300000) }) if (!res.ok) throw new Error('download failed: HTTP ' + res.status) const buf = Buffer.from(await res.arrayBuffer()) fs.writeFileSync(out, buf) console.log(JSON.stringify({ tag: rel.tag_name, file: out, bytes: buf.length }))