pixivflow 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -99,6 +99,7 @@ pixivflow scheduler # 按 cron 配置长期挂机自动收集
99
99
  | [ARCHITECTURE](docs/ARCHITECTURE.md) | 架构与技术实现 |
100
100
  | [RELEASING](docs/RELEASING.md) | npm 发版流程 |
101
101
  | [CHANGELOG](docs/project/CHANGELOG.md) | 版本更新日志 |
102
+ | [ACKNOWLEDGMENTS](docs/ACKNOWLEDGMENTS.md) | 参考与致谢:灵感来源、核心依赖与规范声明 |
102
103
 
103
104
  English version: [README_EN.md](README_EN.md).
104
105
 
@@ -110,6 +111,16 @@ Bug 与功能建议请提交到
110
111
  配置文件中包含认证信息,请勿直接分享)。安全漏洞的处理方式见
111
112
  [SECURITY.md](SECURITY.md)。
112
113
 
114
+ ## 致谢
115
+
116
+ - [gallery-dl](https://github.com/mikf/gallery-dl) —— ugoira 与小说正文的实现参考
117
+ - [pixiv-app-api](https://github.com/akameco/pixiv-app-api) · [pixiv-api](https://github.com/azuline/pixiv-api) —— App API 端点语义
118
+ - [get-pixivpy-token](https://github.com/eggplants/get-pixivpy-token) —— OAuth 登录流程参考
119
+ - [pixiv-token-getter](https://github.com/redtidev1918/pixiv-token-getter) —— 登录库
120
+ - [pixivflow-webui](https://github.com/redtidev1918/pixivflow-webui) —— WebUI 前端
121
+
122
+ 本项目与 Pixiv Inc. 无关联。完整声明见 [docs/ACKNOWLEDGMENTS.md](docs/ACKNOWLEDGMENTS.md)。
123
+
113
124
  ## 许可证
114
125
 
115
126
  [MIT](LICENSE)
package/README_EN.md CHANGED
@@ -103,6 +103,7 @@ Full tutorial site: <https://redtidev1918.github.io/PixivFlow/>
103
103
  | [ARCHITECTURE](docs/ARCHITECTURE.md) | Architecture notes |
104
104
  | [RELEASING](docs/RELEASING.md) | npm release workflow |
105
105
  | [CHANGELOG](docs/project/CHANGELOG.md) | Version history |
106
+ | [ACKNOWLEDGMENTS](docs/ACKNOWLEDGMENTS.md) | Credits and references |
106
107
 
107
108
  Chinese version: [README.md](README.md).
108
109
 
@@ -114,6 +115,16 @@ Bugs and feature requests go to
114
115
  secrets before sharing). Security issues are handled privately — see
115
116
  [SECURITY.md](SECURITY.md).
116
117
 
118
+ ## Acknowledgments
119
+
120
+ - [gallery-dl](https://github.com/mikf/gallery-dl) — reference for ugoira and novel text handling
121
+ - [pixiv-app-api](https://github.com/akameco/pixiv-app-api) · [pixiv-api](https://github.com/azuline/pixiv-api) — App API endpoint semantics
122
+ - [get-pixivpy-token](https://github.com/eggplants/get-pixivpy-token) — OAuth login flow reference
123
+ - [pixiv-token-getter](https://github.com/redtidev1918/pixiv-token-getter) — login library
124
+ - [pixivflow-webui](https://github.com/redtidev1918/pixivflow-webui) — WebUI frontend
125
+
126
+ Not affiliated with Pixiv Inc. Full statement: [docs/ACKNOWLEDGMENTS.md](docs/ACKNOWLEDGMENTS.md).
127
+
117
128
  ## License
118
129
 
119
130
  [MIT](LICENSE)
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "pixivflow",
4
- "version": "2.3.0",
4
+ "version": "2.5.0",
5
5
  "private": true
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "pixivflow-webui-backend",
4
- "version": "2.3.0",
4
+ "version": "2.5.0",
5
5
  "description": "PixivFlow WebUI Backend - CommonJS module"
6
6
  }
@@ -0,0 +1,28 @@
1
+ import type { Request, Response, NextFunction } from 'express';
2
+ export interface BasicAuthOptions {
3
+ username: string;
4
+ password: string;
5
+ /** WWW-Authenticate realm. Default: PixivFlow */
6
+ realm?: string;
7
+ /** Paths that skip authentication. Default: ['/api/health', '/health'] */
8
+ exemptPaths?: string[];
9
+ }
10
+ /**
11
+ * Parse an Authorization: Basic header into credentials.
12
+ * Returns null when the header is absent or malformed.
13
+ */
14
+ export declare function parseBasicAuthHeader(header: unknown): {
15
+ username: string;
16
+ password: string;
17
+ } | null;
18
+ /**
19
+ * Validate a Basic auth header against the configured credentials.
20
+ * Shared by the HTTP middleware and the Socket.IO handshake guard.
21
+ */
22
+ export declare function verifyBasicAuth(authorizationHeader: unknown, username: string, password: string): boolean;
23
+ /**
24
+ * HTTP Basic Auth middleware. Opt-in via WEBUI_USERNAME / WEBUI_PASSWORD env.
25
+ * OPTIONS preflight requests and exempt paths (health checks) pass through.
26
+ */
27
+ export declare function createBasicAuthMiddleware(options: BasicAuthOptions): (req: Request, res: Response, next: NextFunction) => void;
28
+ //# sourceMappingURL=auth-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../../src/webui/server/auth-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG/D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAanG;AASD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,mBAAmB,EAAE,OAAO,EAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAIT;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gBAAgB,GACxB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAmB3D"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseBasicAuthHeader = parseBasicAuthHeader;
4
+ exports.verifyBasicAuth = verifyBasicAuth;
5
+ exports.createBasicAuthMiddleware = createBasicAuthMiddleware;
6
+ const node_crypto_1 = require("node:crypto");
7
+ /**
8
+ * Parse an Authorization: Basic header into credentials.
9
+ * Returns null when the header is absent or malformed.
10
+ */
11
+ function parseBasicAuthHeader(header) {
12
+ if (typeof header !== 'string')
13
+ return null;
14
+ const [scheme, b64] = header.split(' ');
15
+ if (scheme !== 'Basic' || !b64)
16
+ return null;
17
+ let decoded;
18
+ try {
19
+ decoded = Buffer.from(b64, 'base64').toString('utf8');
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ const idx = decoded.indexOf(':');
25
+ if (idx === -1)
26
+ return null;
27
+ return { username: decoded.slice(0, idx), password: decoded.slice(idx + 1) };
28
+ }
29
+ /** Constant-time comparison (lengths normalized via hash to avoid timing leaks). */
30
+ function safeEqual(a, b) {
31
+ const ha = (0, node_crypto_1.createHash)('sha256').update(a).digest();
32
+ const hb = (0, node_crypto_1.createHash)('sha256').update(b).digest();
33
+ return (0, node_crypto_1.timingSafeEqual)(ha, hb);
34
+ }
35
+ /**
36
+ * Validate a Basic auth header against the configured credentials.
37
+ * Shared by the HTTP middleware and the Socket.IO handshake guard.
38
+ */
39
+ function verifyBasicAuth(authorizationHeader, username, password) {
40
+ const creds = parseBasicAuthHeader(authorizationHeader);
41
+ if (!creds)
42
+ return false;
43
+ return safeEqual(creds.username, username) && safeEqual(creds.password, password);
44
+ }
45
+ /**
46
+ * HTTP Basic Auth middleware. Opt-in via WEBUI_USERNAME / WEBUI_PASSWORD env.
47
+ * OPTIONS preflight requests and exempt paths (health checks) pass through.
48
+ */
49
+ function createBasicAuthMiddleware(options) {
50
+ const realm = options.realm ?? 'PixivFlow';
51
+ const exempt = new Set(options.exemptPaths ?? ['/api/health', '/health']);
52
+ return (req, res, next) => {
53
+ if (req.method === 'OPTIONS' || exempt.has(req.path)) {
54
+ next();
55
+ return;
56
+ }
57
+ if (verifyBasicAuth(req.headers.authorization, options.username, options.password)) {
58
+ next();
59
+ return;
60
+ }
61
+ res.setHeader('WWW-Authenticate', `Basic realm="${realm}", charset="UTF-8"`);
62
+ res.status(401).json({
63
+ errorCode: 'UNAUTHORIZED',
64
+ message: 'Authentication required. Set WEBUI_USERNAME / WEBUI_PASSWORD to configure credentials.',
65
+ });
66
+ };
67
+ }
68
+ //# sourceMappingURL=auth-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.js","sourceRoot":"","sources":["../../../src/webui/server/auth-middleware.ts"],"names":[],"mappings":";;AAgBA,oDAaC;AAaD,0CAQC;AAMD,8DAqBC;AA5ED,6CAA0D;AAW1D;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,MAAe;IAClD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AAC/E,CAAC;AAED,oFAAoF;AACpF,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS;IACrC,MAAM,EAAE,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnD,MAAM,EAAE,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnD,OAAO,IAAA,6BAAe,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAC7B,mBAA4B,EAC5B,QAAgB,EAChB,QAAgB;IAEhB,MAAM,KAAK,GAAG,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED;;;GAGG;AACH,SAAgB,yBAAyB,CACvC,OAAyB;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1E,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnF,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QACD,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,gBAAgB,KAAK,oBAAoB,CAAC,CAAC;QAC7E,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,SAAS,EAAE,cAAc;YACzB,OAAO,EAAE,wFAAwF;SAClG,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -5,7 +5,7 @@ export declare function findAvailablePort(startPort: number, host: string, maxAt
5
5
  /**
6
6
  * Log server startup message
7
7
  */
8
- export declare function logServerStart(host: string, port: number): void;
8
+ export declare function logServerStart(host: string, port: number, scheme?: 'http' | 'https'): void;
9
9
  /**
10
10
  * Log server error message
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../../../src/webui/server/server-utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAuCjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAO/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGlD"}
1
+ {"version":3,"file":"server-utils.d.ts","sourceRoot":"","sources":["../../../src/webui/server/server-utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,MAAM,CAAC,CAuCjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,OAAgB,GAAG,IAAI,CAOlG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGlD"}
@@ -43,8 +43,8 @@ async function findAvailablePort(startPort, host, maxAttempts = 10) {
43
43
  /**
44
44
  * Log server startup message
45
45
  */
46
- function logServerStart(host, port) {
47
- const message = `WebUI server started on http://${host}:${port}`;
46
+ function logServerStart(host, port, scheme = 'http') {
47
+ const message = `WebUI server started on ${scheme}://${host}:${port}`;
48
48
  logger_1.logger.info(message);
49
49
  // Also output to stdout for Electron detection
50
50
  console.log(`[WebUI] ${message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"server-utils.js","sourceRoot":"","sources":["../../../src/webui/server/server-utils.ts"],"names":[],"mappings":";;AAKA,8CA2CC;AAKD,wCAOC;AAKD,wCAGC;AApED,yCAAsC;AAEtC;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,IAAY,EACZ,cAAsB,EAAE;IAExB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACzD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YAElC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;gBAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;gBAChD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,yBAAyB;YACzB,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,2BAA2B,SAAS,EAAE,CAC5F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,IAAY;IACvD,MAAM,OAAO,GAAG,kCAAkC,IAAI,IAAI,IAAI,EAAE,CAAC;IACjE,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,+CAA+C;IAC/C,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAC,4CAA4C;AACpF,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,eAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"server-utils.js","sourceRoot":"","sources":["../../../src/webui/server/server-utils.ts"],"names":[],"mappings":";;AAKA,8CA2CC;AAKD,wCAOC;AAKD,wCAGC;AApED,yCAAsC;AAEtC;;GAEG;AACI,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,IAAY,EACZ,cAAsB,EAAE;IAExB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACzD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;YAElC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;gBAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;oBACxB,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;gBAChD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,yBAAyB;YACzB,UAAU,CAAC,GAAG,EAAE;gBACd,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,2BAA2B,SAAS,EAAE,CAC5F,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,IAAY,EAAE,SAA2B,MAAM;IAC1F,MAAM,OAAO,GAAG,2BAA2B,MAAM,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;IACtE,eAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,+CAA+C;IAC/C,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,CAAC,4CAA4C;AACpF,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,eAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -34,6 +34,9 @@ export declare class WebUIServer {
34
34
  private io;
35
35
  private port;
36
36
  private host;
37
+ private basicAuthEnabled;
38
+ private basicAuth?;
39
+ private tlsScheme;
37
40
  getPort(): number;
38
41
  constructor(options?: WebUIServerOptions);
39
42
  start(): Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/webui/server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAgBnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IAEd,OAAO,IAAI,MAAM;gBAIZ,OAAO,GAAE,kBAAuB;IAmC/B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA4C9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,MAAM,IAAI,OAAO;IAIjB,KAAK,IAAI,YAAY;CAG7B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA8CjB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/webui/server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,WAAW,CAAC;AAiBnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE7C,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAC,CAAyC;IAC3D,OAAO,CAAC,SAAS,CAA4B;IAEtC,OAAO,IAAI,MAAM;gBAIZ,OAAO,GAAE,kBAAuB;IAwG/B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA4C9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,MAAM,IAAI,OAAO;IAIjB,KAAK,IAAI,YAAY;CAG7B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA8CjB"}
@@ -33,6 +33,8 @@ exports.WebUIServer = void 0;
33
33
  exports.startWebUI = startWebUI;
34
34
  const express_1 = __importDefault(require("express"));
35
35
  const http_1 = require("http");
36
+ const https_1 = require("https");
37
+ const fs_1 = require("fs");
36
38
  const socket_io_1 = require("socket.io");
37
39
  const path_1 = __importDefault(require("path"));
38
40
  const logger_1 = require("../../logger");
@@ -41,6 +43,7 @@ const config_1 = require("../../config");
41
43
  // WebSocket handlers
42
44
  const LogStream_1 = require("../websocket/LogStream");
43
45
  const DownloadStatus_1 = require("../websocket/DownloadStatus");
46
+ const auth_middleware_1 = require("./auth-middleware");
44
47
  // Server setup modules
45
48
  const server_middleware_1 = require("./server-middleware");
46
49
  const server_routes_1 = require("./server-routes");
@@ -53,24 +56,70 @@ class WebUIServer {
53
56
  io;
54
57
  port;
55
58
  host;
59
+ basicAuthEnabled = false;
60
+ basicAuth;
61
+ tlsScheme = 'http';
56
62
  getPort() {
57
63
  return this.port;
58
64
  }
59
65
  constructor(options = {}) {
60
66
  this.port = options.port || (process.env.PORT ? parseInt(process.env.PORT, 10) : ports_1.PORTS.PROD_API);
61
67
  this.host = options.host || 'localhost';
68
+ // TLS opt-in via WEBUI_TLS_CERT / WEBUI_TLS_KEY (both required)
69
+ const tlsCertPath = process.env.WEBUI_TLS_CERT;
70
+ const tlsKeyPath = process.env.WEBUI_TLS_KEY;
71
+ if (tlsCertPath && tlsKeyPath) {
72
+ options = { ...options, tls: { certPath: tlsCertPath, keyPath: tlsKeyPath } };
73
+ this.tlsScheme = 'https';
74
+ }
62
75
  // Initialize Express app
63
76
  this.app = (0, express_1.default)();
64
77
  // Setup middleware
65
78
  (0, server_middleware_1.setupMiddleware)(this.app, options);
79
+ // Optional HTTP Basic Auth (opt-in via WEBUI_USERNAME + WEBUI_PASSWORD).
80
+ // Covers API routes, static files and Socket.IO handshakes; health checks
81
+ // stay open so container healthchecks keep working.
82
+ const authUser = process.env.WEBUI_USERNAME;
83
+ const authPass = process.env.WEBUI_PASSWORD;
84
+ if (authUser && authPass) {
85
+ this.basicAuthEnabled = true;
86
+ this.basicAuth = { username: authUser, password: authPass };
87
+ logger_1.logger.info('WebUI basic auth enabled');
88
+ this.app.use((0, auth_middleware_1.createBasicAuthMiddleware)({
89
+ username: authUser,
90
+ password: authPass,
91
+ exemptPaths: ['/api/health', '/health'],
92
+ }));
93
+ }
94
+ else {
95
+ logger_1.logger.warn('WebUI authentication is DISABLED (set WEBUI_USERNAME and WEBUI_PASSWORD to enable basic auth)');
96
+ }
66
97
  // Setup API routes
67
98
  (0, server_routes_1.setupRoutes)(this.app);
68
99
  // Setup static file serving
69
100
  (0, server_static_1.setupStaticFiles)(this.app, options.staticPath);
70
101
  // Error handler (must be last)
71
102
  this.app.use(server_middleware_1.errorHandler);
72
- // Create HTTP server
73
- this.server = (0, http_1.createServer)(this.app);
103
+ // Create HTTP or HTTPS server (TLS opt-in via WEBUI_TLS_CERT/KEY)
104
+ if (options.tls) {
105
+ try {
106
+ this.server = (0, https_1.createServer)({
107
+ cert: (0, fs_1.readFileSync)(options.tls.certPath),
108
+ key: (0, fs_1.readFileSync)(options.tls.keyPath),
109
+ }, this.app);
110
+ logger_1.logger.info('WebUI TLS enabled', {
111
+ certPath: options.tls.certPath,
112
+ keyPath: options.tls.keyPath,
113
+ });
114
+ }
115
+ catch (error) {
116
+ (0, server_utils_1.logServerError)(`Failed to load TLS certificate/key: ${error instanceof Error ? error.message : String(error)}`);
117
+ throw error;
118
+ }
119
+ }
120
+ else {
121
+ this.server = (0, http_1.createServer)(this.app);
122
+ }
74
123
  // Initialize Socket.IO
75
124
  this.io = new socket_io_1.Server(this.server, {
76
125
  cors: {
@@ -81,6 +130,18 @@ class WebUIServer {
81
130
  // Setup WebSocket handlers
82
131
  (0, LogStream_1.setupLogStream)(this.io);
83
132
  (0, DownloadStatus_1.setupDownloadStatus)(this.io);
133
+ // Socket.IO handshake guard (mirrors the HTTP basic auth above)
134
+ if (this.basicAuth) {
135
+ const ba = this.basicAuth;
136
+ this.io.use((socket, next) => {
137
+ if ((0, auth_middleware_1.verifyBasicAuth)(socket.handshake.headers.authorization, ba.username, ba.password)) {
138
+ next();
139
+ }
140
+ else {
141
+ next(new Error('WebUI authentication required'));
142
+ }
143
+ });
144
+ }
84
145
  }
85
146
  async start() {
86
147
  return new Promise(async (resolve, reject) => {
@@ -107,7 +168,7 @@ class WebUIServer {
107
168
  }
108
169
  // Try to start on the resolved port
109
170
  this.server.listen(actualPort, this.host, () => {
110
- (0, server_utils_1.logServerStart)(this.host, actualPort);
171
+ (0, server_utils_1.logServerStart)(this.host, actualPort, this.tlsScheme);
111
172
  resolve(actualPort);
112
173
  });
113
174
  this.server.on('error', (err) => {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/webui/server/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/webui/server/server.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;;;;AAoNH,gCAgDC;AAlQD,sDAA2C;AAC3C,+BAAoC;AACpC,iCAA0D;AAC1D,2BAAkC;AAClC,yCAAmD;AACnD,gDAAwB;AACxB,yCAAsC;AACtC,qDAAkD;AAClD,yCAAyD;AAEzD,qBAAqB;AACrB,sDAAwD;AACxD,gEAAkE;AAClE,uDAA+E;AAE/E,uBAAuB;AACvB,2DAAoE;AACpE,mDAA8C;AAC9C,mDAAmD;AACnD,iDAAmF;AACnF,oCAAiC;AAKjC,MAAa,WAAW;IACd,GAAG,CAAU;IACb,MAAM,CAAkC;IACxC,EAAE,CAAe;IACjB,IAAI,CAAS;IACb,IAAI,CAAS;IACb,gBAAgB,GAAG,KAAK,CAAC;IACzB,SAAS,CAA0C;IACnD,SAAS,GAAqB,MAAM,CAAC;IAEtC,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAK,CAAC,QAAQ,CAAC,CAAC;QACjG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QAExC,gEAAgE;QAChE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC7C,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;YAC9B,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC;YAC9E,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QAC3B,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QAErB,mBAAmB;QACnB,IAAA,mCAAe,EAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEnC,yEAAyE;QACzE,0EAA0E;QAC1E,oDAAoD;QACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC5C,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YAC5D,eAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,IAAA,2CAAyB,EAAC;gBACxB,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;aACxC,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,IAAI,CACT,+FAA+F,CAChG,CAAC;QACJ,CAAC;QAED,mBAAmB;QACnB,IAAA,2BAAW,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtB,4BAA4B;QAC5B,IAAA,gCAAgB,EAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QAE/C,+BAA+B;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,gCAAY,CAAC,CAAC;QAE3B,kEAAkE;QAClE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,IAAA,oBAAiB,EAC7B;oBACE,IAAI,EAAE,IAAA,iBAAY,EAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACxC,GAAG,EAAE,IAAA,iBAAY,EAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;iBACvC,EACD,IAAI,CAAC,GAAG,CACT,CAAC;gBACF,eAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBAC/B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;oBAC9B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;iBAC7B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAA,6BAAc,EACZ,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChG,CAAC;gBACF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,IAAA,mBAAY,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,EAAE,GAAG,IAAI,kBAAY,CAAC,IAAI,CAAC,MAAM,EAAE;YACtC,IAAI,EAAE;gBACJ,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,GAAG;gBACjC,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;QAEH,2BAA2B;QAC3B,IAAA,0BAAc,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,IAAA,oCAAmB,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7B,gEAAgE;QAChE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC3B,IACE,IAAA,iCAAe,EACb,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EACtC,EAAE,CAAC,QAAQ,EACX,EAAE,CAAC,QAAQ,CACZ,EACD,CAAC;oBACD,IAAI,EAAE,CAAC;gBACT,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;YAE3B,uEAAuE;YACvE,mDAAmD;YACnD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,EAAE,CAAC;gBACjD,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,MAAM,IAAA,gCAAiB,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAChE,IAAI,SAAS,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC5B,eAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,0BAA0B,SAAS,0BAA0B,EAAE;4BAC1F,aAAa,EAAE,IAAI,CAAC,IAAI;4BACxB,UAAU,EAAE,SAAS;yBACtB,CAAC,CAAC;oBACL,CAAC;oBACD,UAAU,GAAG,SAAS,CAAC;oBACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gBACxB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAA,6BAAc,EAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;YACH,CAAC;YAED,oCAAoC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;gBAC7C,IAAA,6BAAc,EAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtD,OAAO,CAAC,UAAU,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;gBACrD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC9B,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,IAAI,qIAAqI,CAAC;oBACxK,eAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACvB,IAAA,6BAAc,EAAC,QAAQ,CAAC,CAAC;oBACzB,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,IAAA,6BAAc,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;oBACrB,eAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;oBACpC,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;CACF;AApLD,kCAoLC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAC9B,OAA4B;IAE5B,6CAA6C;IAC7C,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAA,sBAAa,GAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QAEtC,gFAAgF;QAChF,IAAI,OAAe,CAAC;QACpB,IACE,MAAM,CAAC,OAAO,EAAE,YAAY;YAC5B,cAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAC5C,CAAC;YACD,MAAM,OAAO,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC1D,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;QACrE,CAAC;QACD,eAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC3D,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;YACtD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,yDAAyD;QACzD,0DAA0D;IAC5D,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAExC,oBAAoB;IACpB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,eAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -7,5 +7,13 @@ export interface WebUIServerOptions {
7
7
  enableCors?: boolean;
8
8
  corsOrigin?: string | string[];
9
9
  staticPath?: string;
10
+ /**
11
+ * Serve HTTPS instead of HTTP. When set, both files must be readable.
12
+ * Opt-in via WEBUI_TLS_CERT / WEBUI_TLS_KEY env.
13
+ */
14
+ tls?: {
15
+ certPath: string;
16
+ keyPath: string;
17
+ };
10
18
  }
11
19
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/webui/server/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/webui/server/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixivflow",
3
- "version": "2.3.0",
3
+ "version": "2.5.0",
4
4
  "description": "🎨 智能的 Pixiv 自动化下载工具 - 支持批量下载插画和小说、定时任务、Docker部署 | Intelligent Pixiv Automation Downloader with batch download, scheduler, and Docker support",
5
5
  "repository": {
6
6
  "type": "git",