Files
catbus/scripts/fetch-jd-models.mjs
cv-cat dc078b248b catbus:一个命令操作小红书、抖音、TikTok、B 站、快手、微博、闲鱼、淘宝、京东、X
10 个平台的 web 端全部用 TypeScript 移植自 cv-cat 的开源项目,请求与上游逐字节对拍。
统一的命令语法与 JSON 输出、按 平台 × 端 × 账号 隔离的登录态、给 AI Agent 用的技能与 llms.txt。
2026-10-06 19:24:55 +08:00

46 lines
2.0 KiB
JavaScript

// 把京东验证码模型放到 packages/assets-jd/models/:优先从本地 references/JdApis 的 UPSTREAM commit 取,
// 没有 references 时(CI)从 GitHub 下载。两种来源都校验 sha256。
import { execFileSync } from 'node:child_process'
import { createHash } from 'node:crypto'
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'
import { fileURLToPath } from 'node:url'
const root = new URL('../', import.meta.url)
const upstream = readFileSync(new URL('src/platforms/jd/UPSTREAM', root), 'utf8')
const commit = /^commit: (\w+)$/m.exec(upstream)[1]
const repo = /^repo: (\S+)$/m.exec(upstream)[1]
const reference = new URL('references/JdApis/', root)
const outDir = new URL('packages/assets-jd/models/', root)
const MODELS = {
'orientation_model_v2_0.9882.onnx': 'cffe911c1dff47fbfbbd90110aaab9c07134645c460d35b3ae8832079bea91ba',
'u2netp.onnx': '309c8469258dda742793dce0ebea8e6dd393174f89934733ecc8b14c76f4ddd8',
}
const sha256 = (buf) => createHash('sha256').update(buf).digest('hex')
mkdirSync(outDir, { recursive: true })
for (const [file, hash] of Object.entries(MODELS)) {
const dest = new URL(file, outDir)
if (existsSync(dest) && sha256(readFileSync(dest)) === hash) {
console.error(`[fetch-jd-models] ${file} 已就位`)
continue
}
const path = `static/jcap/run/models/${file}`
let data
if (existsSync(new URL('.git', reference))) {
console.error(`[fetch-jd-models] 从 references/JdApis@${commit.slice(0, 7)} 复制 ${file}`)
data = execFileSync('git', ['-C', fileURLToPath(reference), 'show', `${commit}:${path}`], {
maxBuffer: 256 * 1024 * 1024,
})
} else {
const url = `${repo.replace('github.com', 'raw.githubusercontent.com')}/${commit}/${path}`
console.error(`[fetch-jd-models] 下载 ${url}`)
const res = await fetch(url)
if (!res.ok) throw new Error(`下载失败:HTTP ${res.status} ${url}`)
data = Buffer.from(await res.arrayBuffer())
}
if (sha256(data) !== hash) throw new Error(`${file} 的 sha256 不匹配`)
writeFileSync(dest, data)
}