snowy-yang
|
cca7e63ec3
|
fix(dev): pnpm dev 容忍 sources/ 缺失——scripts/dev.mjs 仅为存在的目录注册 --watch-path
|
2026-10-02 21:09:20 +08:00 |
|
snowy-yang
|
436b102ae2
|
feat(api): 列表接口分页统一 path 段——boards/song-list/singer songs与albums/album 支持可选 /:page,弃用 ?page=
|
2026-10-02 20:57:31 +08:00 |
|
snowy-yang
|
baa34a501c
|
feat(api): search/find 改 path 风格——/search/:source/:keyword[/:page] 与 /url 同构,find 支持单平台/all
|
2026-10-02 20:51:50 +08:00 |
|
snowy-yang
|
cf0874fc15
|
feat(auth): 流代理升级短时签名 URL——?exp=&sig=(HMAC 派生 10 分钟有效)替代裸 ?key=,秘钥不再落入 URL/日志
|
2026-10-02 20:39:25 +08:00 |
|
snowy-yang
|
415a04dea8
|
feat(auth): 统一 X-Server-Key 全路径鉴权(防扫描探测)+ per-IP 滑动窗口限流
|
2026-10-02 20:31:59 +08:00 |
|
snowy-yang
|
649ebbe12b
|
feat(auth): 调用秘钥鉴权——AUTH_KEY 环境变量启用,Bearer/X-Api-Key/?key= 三种携带方式,流地址自动附带 key
|
2026-10-02 20:15:36 +08:00 |
|
snowy-yang
|
bc1d23cbba
|
fix(test): smoke 默认随机端口自起实例——避免连到 16688 常驻旧实例导致新用例误报
|
2026-10-02 20:08:35 +08:00 |
|
snowy-yang
|
cd5d9b1c91
|
fix(me): 搜索对齐网页版——dramaapi/search 正剧置顶,d:<剧id> 条目自动取首个免费集
|
2026-10-02 20:08:35 +08:00 |
|
snowy-yang
|
1fec828547
|
feat: 平台注册与路由收尾——9 平台(含 xm/me/qt/lr 有声)、复合 id 约定、64k 档位、测试与文档
|
2026-10-02 19:43:21 +08:00 |
|
snowy-yang
|
6fb866e343
|
feat(lr): 懒人听书平台接入——App 通道搜索、web 章节列表、账密登录取流
|
2026-10-02 19:43:21 +08:00 |
|
snowy-yang
|
83d3eb3b49
|
feat(qt): 蜻蜓FM平台接入——audiostream HMAC-MD5 签名直链、SSR 搜索/频道节目列表
|
2026-10-02 19:43:20 +08:00 |
|
snowy-yang
|
020e9bbb2e
|
feat(me): 猫耳FM平台接入——App API HMAC 签名取明文直链、匿名搜索/剧集、token 绑定
|
2026-10-02 19:43:20 +08:00 |
|
snowy-yang
|
5a9915b74c
|
feat(xm): 喜马拉雅平台接入——匿名搜索/专辑/免费曲直链(hdaa xm-sign+AES-ECB 解密)、cookie 绑定解锁付费
|
2026-10-02 19:43:09 +08:00 |
|
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 |
|