Skip to content

Commit ead48fe

Browse files
author
Taois
committed
feat: 解决致命bug& 同步秋秋代码
下一步将增加文件头去判断searchable等属性。优化启动加载速度
1 parent 7a064a9 commit ead48fe

File tree

19 files changed

+893
-131
lines changed

19 files changed

+893
-131
lines changed

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ nodejs作为服务端的drpy实现。全面升级异步写法
44
~~积极开发中,每日一更~~,当前进度 `55%`
55
找工作中,随缘更新
66

7-
* [本地配置接口-动态本地](/config?pwd=)
8-
* [本地配置接口-动态外网/局域网](/config/1?pwd=)
7+
* [本地配置接口-动态本地](/config?pwd=$pwd)
8+
* [本地配置接口-动态外网/局域网](/config/1?pwd=$pwd)
99
* [其他配置接口-订阅过滤](/docs/sub.md)
1010
* [代码加解密工具](/admin/encoder)
1111
* [V我50支付凭证生成器](/authcoder?len=10&number=1)
@@ -19,6 +19,10 @@ nodejs作为服务端的drpy实现。全面升级异步写法
1919

2020
## 更新记录
2121

22+
### 20250727
23+
24+
更新至V1.2.1
25+
2226
### 20250726
2327

2428
更新至V1.2.0
@@ -65,6 +69,8 @@ todo:
6569
## 问题说明
6670

6771
1. windows上直接运行index.js可能会发现运行过程中的日志打印出中文乱码。建议通过yarn dev运行或者在package.json里点击dev脚本运行
72+
2. `pinyin` 库依赖的 `nodejieba` 跑路了现在无法完成安装
73+
3. `new Promise` 里发生的错误无法被外部try catch 导致程序崩溃,如 `番薯动漫.js` 里的写法
6874

6975
## 安装说明
7076

controllers/config.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
8080
//以上为自定义APP[模板]配置自动添加代码
8181

8282
let link_jar = '';
83+
let enableRuleName = ENV.get('enable_rule_name', '0') === '1';
8384
// console.log('hide_adult:', ENV.get('hide_adult'));
8485
if (ENV.get('hide_adult') === '1') {
8586
valid_files = valid_files.filter(it => !(new RegExp('\\[[密]\\]|密+')).test(it));
@@ -104,7 +105,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
104105
} catch (e) {
105106
throw new Error(`Error parsing rule object for file: ${file}, ${e.message}`);
106107
}
107-
ruleObject.title = ruleObject.title || baseName;
108+
ruleObject.title = enableRuleName ? ruleObject.title || baseName : baseName;
108109

109110
let fileSites = [];
110111
if (baseName === 'push_agent') {
@@ -188,7 +189,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
188189
} catch (e) {
189190
throw new Error(`Error parsing rule object for file: ${file}, ${e.message}`);
190191
}
191-
ruleObject.title = ruleObject.title || baseName;
192+
ruleObject.title = enableRuleName ? ruleObject.title || baseName : baseName;
192193

193194
let fileSites = [];
194195
if (baseName === 'push_agent') {
@@ -259,7 +260,7 @@ async function generateSiteJSON(options, requestHost, sub, pwd) {
259260
quickSearch: 1, // 固定值
260261
};
261262
const fileContent = await readFile(path.join(pyDir, file), 'utf-8');
262-
ruleObject.title = extractNameFromCode(fileContent) || baseName;
263+
ruleObject.title = enableRuleName ? extractNameFromCode(fileContent) || baseName : baseName;
263264

264265
let fileSites = [];
265266
if (baseName === 'push_agent') {

controllers/root.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export default (fastify, options, done) => {
3232
const markdownContent = readFileSync(readmePath, 'utf-8');
3333

3434
// 将 Markdown 转换为 HTML
35-
const htmlContent = marked.parse(markdownContent);
35+
const htmlContent = marked.parse(markdownContent).replaceAll('$pwd', process.env.API_PWD || '');
3636
const indexHtml = `
3737
<!DOCTYPE html>
3838
<html lang="en">

docs/images/action.jpg

1.96 MB
Loading

docs/ruleAttr.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,5 @@ var rule = {
8888
* 2:确定和取消
8989
* 3.确定、取消、重置
9090
* 4.确定、取消、重置、预览
91+
92+
<img alt="详情见图" src="./images/action.jpg" width="100%"/>

docs/updateRecord.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# drpyS更新记录
22

3+
### 20250727
4+
5+
更新至V1.2.1
6+
7+
1. 移除过时的pinyin库(`pinyin` 库依赖的 `nodejieba` 跑路了)
8+
2. 同步 `秋秋` 提供的代码,主要涉及新增了 `node-forge` 库,优化了几个网盘工具类
9+
3. ds写源文档增加了对 `action` 交互动作的详细图片说明
10+
4. 首页配置接口链接增加动态密码注入,设置密码的场景不需要手动改?pwd=
11+
5. 配置文件生成的名称提供了选项,默认改回按文件名(可选按源里设置的名称)
12+
6. 通过全局监听器解决了由于部分源 如 `番薯动漫` 内的异步错误导致的进程崩溃问题
13+
314
### 20250726
415

516
更新至V1.2.0

index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,14 @@ registerRoutes(fastify, {
101101
subFilePath: path.join(__dirname, 'public/sub/sub.json'),
102102
});
103103

104+
process.on('unhandledRejection', (err) => {
105+
fastify.log.error(`未处理的Promise拒绝:${err.message}`);
106+
console.log(`发生了致命的错误,已阻止进程崩溃。${err.stack}`);
107+
// 根据情况决定是否退出进程
108+
// 清理后退出进程(避免程序处于未知状态)
109+
// process.exit(1);
110+
});
111+
104112
// 启动服务
105113
const start = async () => {
106114
try {

libs/drpyS.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {base64Decode, base64Encode, md5, rc4, rc4_decode, rc4Decrypt, rc4Encrypt
2828
import {getContentType, getMimeType} from "../utils/mime-type.js";
2929
import {getParsesDict} from "../utils/file.js";
3030
import {getFirstLetter} from "../utils/pinyin-tool.js";
31+
import {reqs} from "../utils/req.js";
3132
import "../utils/random-http-ua.js";
3233
import template from '../libs_drpy/template.js'
3334
import batchExecute from '../libs_drpy/batchExecute.js';
@@ -43,12 +44,15 @@ import '../libs_drpy/jinja.js'
4344
import '../libs_drpy/drpyCustom.js'
4445
import {rootRequire, initializeGlobalDollar} from "../libs_drpy/moduleLoader.js";
4546
// import '../libs_drpy/crypto-js-wasm.js'
47+
import forge from "node-forge";
4648

4749
const __dirname = path.dirname(fileURLToPath(import.meta.url));
4850
const _data_path = path.join(__dirname, '../data');
4951
const _config_path = path.join(__dirname, '../config');
5052
const _lib_path = path.join(__dirname, '../spider/js');
5153

54+
globalThis.reqs = reqs;
55+
globalThis.forge = forge
5256
globalThis.misc = misc;
5357
globalThis.utils = utils;
5458
globalThis.COOKIE = COOKIE;
@@ -170,6 +174,7 @@ try {
170174

171175
let simplecc = null;
172176
try {
177+
// 尝试动态导入模块puppeteerHelper
173178
const simWasm = await import('simplecc-wasm'); // 使用动态 import
174179
simplecc = simWasm.simplecc;
175180
console.log('simplecc imported successfully');
@@ -221,7 +226,10 @@ export async function getSandbox(env = {}) {
221226
getProxyUrl,
222227
hostUrl,
223228
fServer,
224-
getContentType, getMimeType, getParsesDict, getFirstLetter
229+
getContentType,
230+
getMimeType,
231+
getParsesDict,
232+
getFirstLetter
225233
};
226234
const drpySanbox = {
227235
jsp,
@@ -294,6 +302,7 @@ export async function getSandbox(env = {}) {
294302
parseQueryString,
295303
encodeIfContainsSpecialChars,
296304
objectToQueryString,
305+
forge
297306
};
298307

299308
const libsSanbox = {
@@ -1022,6 +1031,23 @@ async function cateParse(rule, tid, pg, filter, extend) {
10221031
} else if (pg > 1 && url.includes('[') && url.includes(']')) {
10231032
url = url.split('[')[0];
10241033
}
1034+
if (rule.filter_def && typeof (rule.filter_def) === 'object') {
1035+
try {
1036+
if (Object.keys(rule.filter_def).length > 0 && rule.filter_def.hasOwnProperty(tid)) {
1037+
let self_fl_def = rule.filter_def[tid];
1038+
if (self_fl_def && typeof (self_fl_def) === 'object') {
1039+
let k = [Object.keys(self_fl_def)][0]
1040+
k.forEach(k => {
1041+
if (!extend.hasOwnProperty(k)) {
1042+
extend[k] = self_fl_def[k];
1043+
}
1044+
})
1045+
}
1046+
}
1047+
} catch (e) {
1048+
log(`合并不同分类对应的默认筛选出错:${e.message}`);
1049+
}
1050+
}
10251051
if (rule.filter_url) {
10261052
if (!/fyfilter/.test(url)) {
10271053
if (!url.endsWith('&') && !rule.filter_url.startsWith('&')) {

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "drpy-node",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"main": "index.js",
55
"type": "module",
66
"scripts": {
@@ -41,9 +41,10 @@
4141
"lru-cache": "^9.1.2",
4242
"mime-types": "^2.1.35",
4343
"minizlib": "^3.0.1",
44+
"node-forge": "^1.3.1",
4445
"node-sqlite3-wasm": "^0.8.35",
4546
"p-queue": "^8.0.1",
46-
"pinyin": "2.10.2",
47+
"pinyin": "^4.0.0",
4748
"qs": "^6.13.1",
4849
"queue": "^7.0.0",
4950
"rotating-file-stream": "^3.2.5",

public/index.html

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<h1 id="drpysdrpy-node">drpyS(drpy-node)</h1>
1111
<p>nodejs作为服务端的drpy实现。全面升级异步写法<br><del>积极开发中,每日一更</del>,当前进度 <code>55%</code><br>找工作中,随缘更新</p>
1212
<ul>
13-
<li><a href="/config?pwd=">本地配置接口-动态本地</a></li>
14-
<li><a href="/config/1?pwd=">本地配置接口-动态外网/局域网</a></li>
13+
<li><a href="/config?pwd=dzyyds">本地配置接口-动态本地</a></li>
14+
<li><a href="/config/1?pwd=dzyyds">本地配置接口-动态外网/局域网</a></li>
1515
<li><a href="/docs/sub.md">其他配置接口-订阅过滤</a></li>
1616
<li><a href="/admin/encoder">代码加解密工具</a></li>
1717
<li><a href="/authcoder?len=10&amp;number=1">V我50支付凭证生成器</a></li>
@@ -24,8 +24,13 @@ <h1 id="drpysdrpy-node">drpyS(drpy-node)</h1>
2424
<li><a href="/cat/index.html">在线猫ds源主页</a></li>
2525
</ul>
2626
<h2 id="更新记录">更新记录</h2>
27+
<h3 id="20250727">20250727</h3>
28+
<p>更新至V1.2.1</p>
2729
<h3 id="20250726">20250726</h3>
2830
<p>更新至V1.2.0</p>
31+
<ol>
32+
<li>支持挂载py源</li>
33+
</ol>
2934
<h3 id="20250310">20250310</h3>
3035
<p>更新至V1.1.23</p>
3136
<p><a href="docs/updateRecord.md">点此查看完整更新记录</a></p>
@@ -59,6 +64,7 @@ <h2 id="参考资料">参考资料</h2>
5964
<h2 id="问题说明">问题说明</h2>
6065
<ol>
6166
<li>windows上直接运行index.js可能会发现运行过程中的日志打印出中文乱码。建议通过yarn dev运行或者在package.json里点击dev脚本运行</li>
67+
<li><code>pinyin</code> 库依赖的 <code>nodejieba</code> 跑路了现在无法完成安装</li>
6268
</ol>
6369
<h2 id="安装说明">安装说明</h2>
6470
<p>1.zy安装方案</p>

0 commit comments

Comments
 (0)