Compare commits

...
13 Commits
Author SHA1 Message Date
MoeFurina fc5a76d5e2 Merge branch 'main' into main 2026-05-29 21:54:27 +08:00
MoeFurina fbc34a1846 Merge branch 'pr/178' 2026-05-29 21:53:29 +08:00
MoeFurina 3ef5ea341b Merge branch 'pr/179' 2026-05-29 21:53:11 +08:00
MoeFurina 4195c41171 bump 4.33.1 2026-05-29 21:49:21 +08:00
MoeFurina 232cc3d916 Squashed commit of the following:
commit 01d391ac91
Author: Sunset Mikoto <26019675+SunsetMkt@users.noreply.github.com>
Date:   Mon May 25 13:05:14 2026 +0800

    Update util/option.js

    Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

commit 85d70ba9dd
Author: Sunset Mikoto <26019675+SunsetMkt@users.noreply.github.com>
Date:   Mon May 25 12:56:34 2026 +0800

    Update util/option.js

    Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

commit 3cfecbcc1f
Author: Sunset Mikoto <26019675+SunsetMkt@users.noreply.github.com>
Date:   Mon May 25 12:51:29 2026 +0800

    Update util/option.js

    Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

commit c6e9746ed6
Author: Sunset Mikoto <26019675+SunsetMkt@users.noreply.github.com>
Date:   Mon May 25 01:47:53 2026 +0000

    fix: 修正为原始逻辑,简化代码

commit d6961ecb4d
Author: Sunset Mikoto <26019675+SunsetMkt@users.noreply.github.com>
Date:   Sun May 24 18:11:35 2026 +0000

    feat: 当ENABLE_RANDOM_CN_IP为true时,除非请求参数randomCNIP显式为false,默认开启randomCNIP
2026-05-29 17:20:07 +08:00
MoeFurina 1b4af30a49 Squashed commit of the following:
commit 02242eecf6
Author: Sunset Mikoto <26019675+SunsetMkt@users.noreply.github.com>
Date:   Sun May 24 18:00:36 2026 +0000

    fix: randomCNIP 不工作
2026-05-29 17:19:41 +08:00
Sunset Mikotoandgemini-code-assist[bot] 01d391ac91 Update util/option.js
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-25 13:05:14 +08:00
Sunset Mikotoandgemini-code-assist[bot] 85d70ba9dd Update util/option.js
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-25 12:56:34 +08:00
Sunset Mikotoandgemini-code-assist[bot] 3cfecbcc1f Update util/option.js
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-05-25 12:51:29 +08:00
Sunset Mikoto c6e9746ed6 fix: 修正为原始逻辑,简化代码 2026-05-25 01:47:53 +00:00
Sunset Mikoto d6961ecb4d feat: 当ENABLE_RANDOM_CN_IP为true时,除非请求参数randomCNIP显式为false,默认开启randomCNIP 2026-05-24 18:11:35 +00:00
Sunset Mikoto 02242eecf6 fix: randomCNIP 不工作 2026-05-24 18:00:36 +00:00
MoeFurina 269456def3 fix: 去除对github registry 的支持 2026-05-22 20:45:00 +08:00
10 changed files with 156 additions and 211 deletions
+3
View File
@@ -8,6 +8,9 @@ ENABLE_PROXY = false
## 代理配置
PROXY_URL = "https://your-proxy-url.com/?proxy="
### 随机IP设置
## 启用随机中国IP(默认关闭);启用后,所有请求默认使用随机中国IP,除非请求参数randomCNIP显式关闭
ENABLE_RANDOM_CN_IP = false
### UnblockNeteaseMusic 设置项
## 启用全局解灰, 无论是否调用参数都会使用解灰(不推荐开启)
-54
View File
@@ -1,54 +0,0 @@
name: Publish Docker image
on:
release:
types: [published]
workflow_dispatch:
permissions:
contents: read
packages: write
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
# 读取 package.json 的版本号
- name: Read package version
id: pkg
run: echo "VERSION=$(jq -r .version package.json)" >> $GITHUB_ENV
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v7
with:
context: .
push: true
tags: |
moefurina/ncm-api:latest
moefurina/ncm-api:${{ env.VERSION }}
ghcr.io/neteasecloudmusicapienhanced/ncm-api:latest
ghcr.io/neteasecloudmusicapienhanced/ncm-api:${{ env.VERSION }}
platforms: linux/amd64,linux/arm64/v8
-109
View File
@@ -1,109 +0,0 @@
name: Build and Create PR
on:
workflow_dispatch: # 手动触发
push:
branches: [main]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
include:
- os: ubuntu-latest
platform: linux
target: node18-linux-x64
output: precompiled/app
- os: windows-latest
platform: win
target: node18-win-x64
output: precompiled/app.exe
- os: macos-latest
platform: macos
target: node18-macos-x64
output: precompiled/app
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '18'
- name: Install dependencies
run: |
npm install -g pnpm
pnpm install
- name: Build for ${{ matrix.platform }}
run: |
npm run pkg${{ matrix.platform }}
env:
PKG_TARGET: ${{ matrix.target }}
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: app-${{ matrix.platform }}
path: ${{ matrix.output }}
if-no-files-found: error
create-pr:
needs: build
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' # 只在手动触发时创建PR
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Download all artifacts
uses: actions/download-artifact@v8
with:
path: precompiled
- name: Display structure of downloaded files
run: ls -R
- name: Setup Node.js
uses: actions/setup-node@v6
- name: Create new branch and commit
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
BRANCH_NAME="auto-build-$(date +%Y%m%d-%H%M%S)"
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV
git checkout -b $BRANCH_NAME
# 复制并整理下载的文件
mkdir -p precompiled
cp app-win/* precompiled/ || true
cp app-linux/* precompiled/ || true
cp app-macos/* precompiled/ || true
# 提交更改
git add precompiled/
git commit -m "Auto-build: Add compiled binaries for win, linux, macos" || exit 0
# 推送到远程仓库
git push origin $BRANCH_NAME
- name: Create Pull Request
uses: actions/github-script@v8
with:
script: |
const { data: pullRequest } = await github.rest.pulls.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: 'Auto-build: Add compiled binaries for win, linux, macos',
head: '${{ env.BRANCH_NAME }}',
base: 'main',
body: 'This PR contains newly built binaries for Windows, Linux, and macOS platforms.'
});
console.log(`Created PR #${pullRequest.number}: ${pullRequest.html_url}`);
+53
View File
@@ -0,0 +1,53 @@
name: Build Artifacts
on:
workflow_dispatch: # 手动触发
push:
branches: [main]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
include:
- os: ubuntu-latest
platform: linux
target: node18-linux-x64
output: precompiled/app
- os: windows-latest
platform: win
target: node18-win-x64
output: precompiled/app.exe
- os: macos-latest
platform: macos
target: node18-macos-x64
output: precompiled/app
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '18'
- name: Install dependencies
run: |
npm install -g pnpm
pnpm install
- name: Build for ${{ matrix.platform }}
run: |
npm run pkg${{ matrix.platform }}
env:
PKG_TARGET: ${{ matrix.target }}
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: app-${{ matrix.platform }}
path: ${{ matrix.output }}
if-no-files-found: error
-38
View File
@@ -1,38 +0,0 @@
# .github/workflows/release.yml
name: Release
on:
release:
types: [published]
workflow_dispatch:
jobs:
release:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
packages: write
steps:
- uses: actions/checkout@v6
# 发布到 NPM Registry
- name: Setup Node.js for NPM
uses: actions/setup-node@v6
with:
node-version: 24
registry-url: 'https://registry.npmjs.org'
- run: npm install
- name: Publish to NPM
run: npm publish --access public
# 发布到 GitHub Packages
- name: Setup Node.js for GitHub Packages
uses: actions/setup-node@v6
with:
node-version: 24
registry-url: 'https://npm.pkg.github.com'
- name: Publish to GitHub Packages
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ github.token }}
@@ -103,7 +103,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 18
node-version: 24
cache: pnpm
@@ -230,4 +230,87 @@ jobs:
body_path: release-notes.md
files: final-artifacts/*
draft: false
prerelease: false
prerelease: false
publish-docker:
name: Publish Docker Image
needs: detect
if: |
needs.detect.outputs.should_release == 'true' &&
needs.detect.outputs.tag_exists != 'true'
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Read package version
id: pkg
run: echo "VERSION=$(jq -r .version package.json)" >> $GITHUB_ENV
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v7
with:
context: .
push: true
tags: |
moefurina/ncm-api:latest
moefurina/ncm-api:${{ env.VERSION }}
ghcr.io/neteasecloudmusicapienhanced/ncm-api:latest
ghcr.io/neteasecloudmusicapienhanced/ncm-api:${{ env.VERSION }}
platforms: linux/amd64,linux/arm64/v8
publish-npm:
name: Publish to npm
needs: detect
if: |
needs.detect.outputs.should_release == 'true' &&
needs.detect.outputs.tag_exists != 'true'
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
with:
version: 9
- uses: actions/setup-node@v6
with:
node-version: 24
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm publish --access public
+1
View File
@@ -131,6 +131,7 @@ $ sudo docker run -d -p 3000:3000 ncm-api
| **CORS_ALLOW_ORIGIN** | `*` | 允许跨域请求的域名。可填写单个源,或使用逗号分隔多个源(例如 `https://a.com,https://b.com`)。 |
| **ENABLE_PROXY** | `false` | 是否启用反向代理功能。 |
| **PROXY_URL** | `https://your-proxy-url.com/?proxy=` | 代理服务地址。仅当 `ENABLE_PROXY=true` 时生效。 |
| **ENABLE_RANDOM_CN_IP** | `false` | 是否默认启用随机中国IP。启用后,所有请求默认使用随机中国IP,除非请求参数 `randomCNIP` 显式关闭。 |
| **ENABLE_GENERAL_UNBLOCK** | `true` | 是否启用全局解灰(推荐开启)。开启后所有歌曲都尝试自动解锁。 |
| **ENABLE_FLAC** | `true` | 是否启用无损音质(FLAC)。 |
| **SELECT_MAX_BR** | `false` | 启用无损音质时,是否选择最高码率音质。 |
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@neteasecloudmusicapienhanced/api",
"version": "4.33.0",
"version": "4.33.1",
"description": "全网最全的网易云音乐API接口 || A revival project for NeteaseCloudMusicApi Node.js Services (Half Refactor & Enhanced) || 网易云音乐 API 备份 + 增强 || 本项目自原版v4.28.0版本后开始自行维护",
"scripts": {
"dev": "nodemon app.js",
+12 -6
View File
@@ -303,8 +303,13 @@ async function constructServer(moduleDefs) {
// 参数注入客户端IP
const obj = [...params]
const options = obj[2] || {}
if (!options.randomCNIP) {
let ip = req.ip
let ip = ''
if (options.randomCNIP) {
ip = global.cnIp
// logger.info('Using random Chinese IP for request:', ip)
} else {
ip = req.ip
if (ip.substring(0, 7) == '::ffff:') {
ip = ip.substring(7)
@@ -313,10 +318,11 @@ async function constructServer(moduleDefs) {
ip = global.cnIp
}
// logger.info('Requested from ip:', ip)
obj[2] = {
...options,
ip,
}
}
obj[2] = {
...options,
ip,
}
return request(...obj)
+1 -1
View File
@@ -5,7 +5,7 @@ const createOption = (query, crypto = '') => {
ua: query.ua || '',
proxy: query.proxy,
realIP: query.realIP,
randomCNIP: query.randomCNIP || false,
randomCNIP: process.env.ENABLE_RANDOM_CN_IP === 'true' ? !['false', false].includes(query.randomCNIP) : ['true', true].includes(query.randomCNIP),
e_r: query.e_r || undefined,
domain: query.domain || '',
checkToken: query.checkToken || false,