订阅规则 ql repo 的 whitelist 参数是 "scrip_",只有文件名带该前缀的才会被拉取。
原文件名 qqmusic_checkin.js 不在白名单内,青龙订阅拉不到。
- qqmusic/qqmusic_checkin.js -> qqmusic/scrip_qqmusic_checkin.js(git mv 保留历史)
- test_sign_run.js 的 require 路径同步
- qqmusic/README.md 与根 README.md 更新文件名与白名单约定说明
- 根 README 补 QQ音乐条目(环境变量 SH_QQMUSIC_KEY / cron 1 0,6 * * *)
依赖拉取不受影响:订阅命令的 dependence 参数 sendNotify|common 会额外拉这两个文件,
脚本的 require('../sendNotify') 仍指向青龙内置/仓库根的 sendNotify.js。
验证:node --check 通过 / 签名对拍 6 组向量全 PASS / 空 env 优雅跳过 /
单账号与 & 多账号解析正确 / 整串 cookie 形态解析正确
28 lines
1010 B
JavaScript
28 lines
1010 B
JavaScript
#!/usr/bin/env node
|
||
// 被测模块 vs Python 参考实现的逐字节比对(输入: test_sign_expect.json)
|
||
'use strict'
|
||
const fs = require('fs')
|
||
const path = require('path')
|
||
const { zzc, time33 } = require(path.join(__dirname, 'scrip_qqmusic_checkin.js'))
|
||
|
||
const expect = JSON.parse(fs.readFileSync(path.join(__dirname, 'test_sign_expect.json'), 'utf8'))
|
||
let fails = 0
|
||
|
||
const t33js = time33('Q_H_L_testkey1234567890')
|
||
const t33ok = t33js === expect.time33
|
||
console.log(`time33 py=${expect.time33} js=${t33js} -> ${t33ok ? 'OK' : 'MISMATCH'}`)
|
||
if (!t33ok) fails++
|
||
|
||
for (const c of expect.cases) {
|
||
const got = zzc(c.payload)
|
||
const ok = got === c.zzc
|
||
if (!ok) {
|
||
fails++
|
||
console.log(`zzc MISMATCH payload[:40]=${JSON.stringify(c.payload.slice(0, 40))}\n py=${c.zzc}\n js=${got}`)
|
||
} else {
|
||
console.log(`zzc OK len=${c.len} payload[:28]=${JSON.stringify(c.payload.slice(0, 28))}`)
|
||
}
|
||
}
|
||
console.log('RESULT:', fails === 0 ? 'PASS' : `FAIL(${fails})`)
|
||
process.exit(fails === 0 ? 0 : 1)
|