Commit Graph
31 Commits
Author SHA1 Message Date
snowy-yang 44852864e2 feat(tx): flac24bit 高阶音质候选链——RS01(Hi-Res)/Q000(大师)/AI00(臻品母带) 逐级回退 2026-10-02 19:43:08 +08:00
snowy-yang 3b40ba4c8f feat(kg): 账密登录与 20028 验证码处理——/v9/login_by_pwd、ssa-code 挑战链、行为指纹模拟、dfid 正式注册 2026-10-02 19:43:08 +08:00
snowy-yang e796e622f2 docs(readme): 补齐 qs 平台与双通道后的过期内容
- 平台列表/接口表补 qs(抖音扫码登录、/stream/qs 解密流代理)与取流链说明
- 歌曲 ID 约定补 qs,删掉已失效的 kg 风控告示(2026-10-01 /v5/url 已修复,
  VIP 歌改为需登录的准确表述)
- 外部音源章节说明候选链只覆盖 kw/kg/tx/wy、失败回落 SDK 与酷我兜底
- 已知限制重写:kg 登录取流、kw 严格档位校验与降级链、qs 试听/解密代理
- 项目结构注释补 qs 目录与 auth 续期描述
2026-10-01 22:54:05 +08:00
snowy-yang b3e1cc5f67 feat(url): 取流链兜底——外部音源→SDK 直连→酷我跨平台匹配
/url/:source/:id 顺序尝试:外部音源脚本(SOURCE_ENABLED 启用时)→
SDK 官方直连→都失败时用 findMusic 仅在 kw 内按歌名/歌手/时长匹配
同一首歌后走 kw 通道(匿名可拿无损)。kg 的 hash 自动反查歌曲信息,
其它平台可传 name/singer/interval 查询参数启用兜底;
kw 自身不再二次兜底。响应新增 via 字段标记实际命中通道
(script/平台 id/kw,直接命中不返回),type 改为实际音质(降级链生效);
全部失败返回聚合各阶段错误的 502。findMusic/searchMusic 增加 only 参数。
2026-10-01 22:54:00 +08:00
snowy-yang 0f9cff2a08 feat(qs): 汽水音乐平台接入——匿名搜索/试听、抖音扫码登录、解密流代理
- sdk/qs 平台模块(安卓参数指纹匿名搜索)+ sdk/apis/qs 取流:
  匿名 30s 试听,登录态走签名 track_v2 + spade key AES-CTR 解密
- /login/qs/qr 抖音扫码登录(授权后 sessionid 解锁完整曲目)
- /stream/qs/:id 解密流代理,/url 返回的相对地址按请求 host 补全
- 回归测试覆盖 kw 双通道(VIP 真音频/降级链)与 qs 试听;start.bat 去掉
  SOURCE_ENABLED 直启
2026-10-01 22:43:49 +08:00
snowy-yang aa4f2eec67 feat(kw): 取流双通道重构——mobi.s convert_url_with_sign 主通道
主通道 mobi.s(keluze 指纹,user=0 匿名):VIP/付费歌放行真音频,
晴天 320k mp3/2000k flac 与 N_MINFO 元数据逐字节吻合,hi-res 可用;
档位缺失会静默降级甚至吐 mgg/mflac 加密,必须严格校验
「返回 bitrate==请求档位 且格式为明文」否则沿降级链换档重试。
回退通道 web playUrl(Hm_Iuvt cookie 异或哈希 Secret 签名):匿名恒 128k,
VIP 歌明确拒绝,仅作 mobi 网络故障兜底。旧 antiserver 链移除。
2026-10-01 22:43:43 +08:00
snowy-yang ddc44a276d fix(kg): /v5/url 成功响应按顶层 url/backupUrl 数组解析
网关成功(status:1)时播放地址在顶层 url: string[] 与 backupUrl: string[],
并非旧 data:[{url}] 结构,导致 VIP 登录后所有取流仍报"获取失败";
旧结构保留为兜底。album_audio_id/album_id 加 Number.isFinite 守卫——
/url 路由把 hash 传给 songmid 时 Number(hash)=NaN 会被网关拒答。
实测珊瑚海四档(VIP)全通,320k/flac/hi-res 与曲库大小逐字节吻合。
2026-10-01 22:43:29 +08:00
snowy-yang 0f9989b26f feat(login): kg 扫码/短信验证码登录、QQ 扫码登录
- kg:sdk/auth 新增 qrKey/qrCheck 扫码与 sendCaptcha/cellphoneLogin 短信登录,路由接线
- tx:新增 /login/tx/qr(/check)(移植 sansenjian/qq-music-api):ptlogin 扫码 →
  check_sig 换 p_skey → OAuth authorize 换 code → QQConnectLogin 换凭据;
  状态码对齐 wy(800 过期/801 等待/802 已扫/803 成功),qrsig 失效 403 映射 800;
  成功凭据入库(通常含 openid/refresh_key,可走自动续期)
2026-10-01 16:35:08 +08:00
snowy-yang 96f6a7fe91 feat(source): 外部音源迁 src/ 并新增 source-simple 进程内直载
- apis/source(.ivm).ts → src/source(.ivm).ts(音源属服务端职责,不入 SDK)
- 新增 src/source-simple.ts:sources/*.mjs 进程内直载(getMusicUrl 极简契约),
  与 *.js 的 IVM 沙箱(globalThis.lx 契约)按扩展名混排候选链,失败降权冷却
- server 挂载决策:SOURCE_ENABLED 非 0/false 启用,/url 取流分流到外部音源;
  音源模式下登录态不参与取流,自动续期不启动(手动 /login/refresh 仍可用)
- 新增 src/env.ts(.env 最先加载)与 test/source-simple-test.ts(并入 pnpm test)
2026-10-01 16:35:08 +08:00
snowy-yang 66d06ef48a refactor(sdk): tipSearch 全删、歌词解码器归位、IPC 桥移除、api-source 层拆除
- 四平台 tipSearch 全部删除(永不做搜索联想),types 同步去掉 tipSearch 字段
- 歌词解码器归位:kg/krcDecode、tx/qrcDecode、kw/lyricDecode(原 common/ 下三处)
- rendererIpc/ipcNames IPC 桥删除,SDK 纯服务端化
- supportQuality 由各平台 apis 内联导出(sdk/index 汇总),kg/kw/tx/wy 改直连 apis/*,api-source 旧层移除
2026-10-01 16:33:53 +08:00
snowy-yang 3c51e4d06a feat(dev): 热重载开发模式(node --watch 限定 src/sdk/sources 目录)
- package.json 新增 dev 脚本;--watch-path 限定监视范围,
  规避 @fastify/swagger-ui 启动时写 node_modules 触发的多余重启
- start.bat 支持 dev 参数(保留 SOURCE_ENABLED 外部音源开关)
- README 快速开始补充 pnpm dev
2026-09-29 20:24:40 +08:00
snowy-yang aca7928019 feat(login): kg/tx 登录态自动续期(移植 lx-music-api-server 方案)
- kg: login_by_token 续期(AES-256-CBC + RSA 裸加密,参考其 refresh/kg.py),新 token 回写 data/auth.json
- tx: 新增 sdk/auth/tx.ts —— cookie 解析、VIP 检测(vip_login_base)、
  music.login.LoginServer 续期(走既有 musicu.fcg 未签名通道,最佳努力)
- 调度:启动 10s 后首刷 + 每 24h 一次(对齐参考项目 86400s + next_run_time=now)
- /login/tx 支持可选 App 抓包凭据(openId/accessToken/refreshToken/refreshKey)
- 新增 POST /login/refresh 手动续期;/login/status 增补 tx 字段与更新时间
- 补充 /login/tx 文档行与 smoke 测试
2026-09-29 20:16:33 +08:00
snowy-yang 9d7cb6f39a fix: /search 的 name 参数示例与描述改为纯歌名(拼入歌手会被翻唱版顶掉原曲) 2026-09-29 20:09:21 +08:00
snowy-yang 354df2e739 refactor: 架构整固——分层单向化、全量 TypeScript、直接运行
- 移除 bd/mg 两平台及磁盘残留产物;清理 api-test 死脚本、musicSdk/message+options 死模块、infSign vendor
- musicSdk/ 改名 sdk/;src/common、src/auth、src/apis 整体移入 sdk/,依赖方向定为 src → sdk 严格单向
- src/ 手写 JS 全量转 .ts,删除 JS 类型垫片 modules.d.ts;源码 import 统一 .ts 后缀
- Node 原生类型剥离直接运行 .ts(engines >=22.18),取消 tsc 发射产物,tsc 仅类型检查(pnpm typecheck)
- 删除 kwdes 备用实现与 src/index.ts 转发垫片;测试移至 test/smoke-test.ts
- common/request.ts 补显式导出类型;修复 set-cookie 单值形态、ApiError 类字段等隐患

验证:tsc 零错误,smoke-test 41/41
2026-09-25 23:06:23 +08:00
snowy-yang c8c939aa32 feat(kg): 取流切换到手机客户端通道(gateway /v5/url,android 签名) 2026-09-18 21:28:43 +08:00
snowy-yang 45f3a4b989 feat(login): 新增网易云扫码/手机号登录与酷狗 token 绑定 2026-09-18 19:15:11 +08:00
snowy-yang fd5e2122d3 chore: 还原被 tmp 下临时依赖安装波及的 pnpm-lock.yaml 2026-09-18 18:45:57 +08:00
snowy-yang 41b5d20b1e feat(wy): 歌手歌曲列表填充专辑封面 2026-09-18 18:45:06 +08:00
snowy-yang 0f2585e5bd feat(album): 新增 QQ 音乐(tx)专辑支持 2026-09-17 06:20:37 +08:00
snowy-yang b06769dbbd fix(album): 修复 kw 专辑接口——上游通道可用,故障为路由误传参数 2026-09-16 22:34:41 +08:00
snowy-yang 23c7ad91e4 feat(api): 新增歌手与专辑接口,修复各平台死代码中的多处隐藏 bug 2026-09-16 22:23:22 +08:00
snowy-yang d142dd6096 refactor: 清理死代码与构建加固 2026-09-16 21:40:28 +08:00
snowy-yang 5dd0468860 refactor!: 移除品牌字样,音源改为 sources/ 目录自动加载,脚本不入库 2026-09-16 21:28:50 +08:00
snowy-yang f548e5990b chore: 切换包管理器为 pnpm 2026-09-16 21:14:33 +08:00
snowy-yang c1c8aa4b94 refactor(routes)!: 移除旧版 query 风格路由 2026-09-16 21:07:01 +08:00
snowy-yang 10de5582c7 fix(docs): 豁免 /docs/json 信封包裹,修复 Swagger UI 无法加载规范 2026-09-16 20:52:38 +08:00
snowy-yang ab90c5b4c4 docs: 移除 lx 音源签名分析与逆向相关表述 2026-09-16 20:29:18 +08:00
snowy-yang 2b4bb16e02 refactor(server): 迁移到 Fastify 5 + 完善文档与路由参数适配 2026-09-09 21:56:06 +08:00
snowy-yang 59b2aae584 feat(server): 标准 HTTP 服务器重构 + FastAPI 风格自动文档 2026-08-29 11:51:07 +08:00
snowy-yang 1dfb7a59ca refactor(sdk): musicSdk 全量迁移至 TypeScript 2026-08-29 00:23:50 +08:00
archive f289df4cd7 存档:TS 重构前基线(lx 聚合源 = isolated-vm 加载器,签名方案已移除) 2026-08-28 23:24:49 +08:00