mirror of
https://github.com/GiriNeko/YesPlayMusic.git
synced 2025-12-16 05:08:04 +00:00
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import log from '@/desktop/main/log'
|
|
import { CacheAPIs } from '@/shared/CacheAPIs'
|
|
import { pathCase, snakeCase } from 'change-case'
|
|
import { FastifyInstance, FastifyRequest, FastifyReply } from 'fastify'
|
|
import NeteaseCloudMusicApi from 'NeteaseCloudMusicApi'
|
|
import cache from '../../../cache'
|
|
|
|
async function netease(fastify: FastifyInstance) {
|
|
const getHandler = (name: string, neteaseApi: (params: any) => any) => {
|
|
return async (
|
|
req: FastifyRequest<{ Querystring: { [key: string]: string } }>,
|
|
reply: FastifyReply
|
|
) => {
|
|
console.log(req.routerPath)
|
|
// Get track details from cache
|
|
if (name === CacheAPIs.Track) {
|
|
const cacheData = await cache.get(name, req.query as any)
|
|
if (cacheData) {
|
|
return cacheData
|
|
}
|
|
}
|
|
|
|
// Request netease api
|
|
try {
|
|
const result = await neteaseApi({
|
|
...req.query,
|
|
cookie: req.cookies,
|
|
})
|
|
|
|
cache.set(name as CacheAPIs, result.body, req.query)
|
|
|
|
return reply.send(result.body)
|
|
} catch (error: any) {
|
|
if ([400, 301].includes(error.status)) {
|
|
return reply.status(error.status).send(error.body)
|
|
}
|
|
return reply.status(500)
|
|
}
|
|
}
|
|
}
|
|
|
|
// 循环注册NeteaseCloudMusicApi所有接口
|
|
Object.entries(NeteaseCloudMusicApi).forEach(([nameInSnakeCase, neteaseApi]: [string, any]) => {
|
|
// 例外
|
|
if (
|
|
['serveNcmApi', 'getModulesDefinitions', snakeCase(CacheAPIs.SongUrl)].includes(
|
|
nameInSnakeCase
|
|
)
|
|
) {
|
|
return
|
|
}
|
|
|
|
const name = pathCase(nameInSnakeCase)
|
|
const handler = getHandler(name, neteaseApi)
|
|
|
|
fastify.get(`/netease/${name}`, handler)
|
|
fastify.post(`/netease/${name}`, handler)
|
|
})
|
|
|
|
fastify.get('/netease', () => 'NeteaseCloudMusicApi')
|
|
}
|
|
|
|
export default netease
|