pixivflow 2.22.1 → 2.24.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.
Files changed (60) hide show
  1. package/dist/commands/SchedulerCommand.js +12 -3
  2. package/dist/commands/scheduler-runtime.d.ts +29 -0
  3. package/dist/commands/scheduler-runtime.js +54 -1
  4. package/dist/download/FileService.d.ts +10 -0
  5. package/dist/download/FileService.js +6 -0
  6. package/dist/download/NovelDownloader.js +56 -0
  7. package/dist/download/exec/DownloadExecutor.js +11 -2
  8. package/dist/download/handlers/IllustrationTargetHandler.js +15 -0
  9. package/dist/download/handlers/NovelTargetHandler.js +12 -2
  10. package/dist/download/novelMarkers.d.ts +54 -0
  11. package/dist/download/novelMarkers.js +122 -0
  12. package/dist/interfaces/IDatabase.d.ts +11 -0
  13. package/dist/interfaces/IFileService.d.ts +4 -0
  14. package/dist/logger.d.ts +24 -0
  15. package/dist/logger.js +88 -11
  16. package/dist/notification/NotificationPolicy.js +18 -5
  17. package/dist/observability/classify.d.ts +7 -0
  18. package/dist/observability/classify.js +51 -0
  19. package/dist/observability/context.d.ts +10 -0
  20. package/dist/observability/context.js +22 -0
  21. package/dist/observability/index.d.ts +7 -0
  22. package/dist/observability/index.js +36 -0
  23. package/dist/observability/types.d.ts +23 -0
  24. package/dist/observability/types.js +3 -0
  25. package/dist/package.json +1 -1
  26. package/dist/scheduler/RecoveryOutcome.d.ts +24 -0
  27. package/dist/scheduler/RecoveryOutcome.js +44 -0
  28. package/dist/scheduler/ScheduleTriggerServer.d.ts +4 -0
  29. package/dist/scheduler/SlotBusinessStatus.d.ts +32 -0
  30. package/dist/scheduler/SlotBusinessStatus.js +43 -0
  31. package/dist/scheduler/SlotCoordinator.d.ts +7 -0
  32. package/dist/scheduler/SlotCoordinator.js +13 -0
  33. package/dist/storage/Database.d.ts +4 -0
  34. package/dist/storage/Database.js +7 -0
  35. package/dist/storage/DatabaseMigration.js +21 -0
  36. package/dist/storage/repositories/SystemErrorRepository.d.ts +19 -0
  37. package/dist/storage/repositories/SystemErrorRepository.js +92 -0
  38. package/dist/version.js +1 -1
  39. package/dist/webui/package.json +1 -1
  40. package/dist/webui/routes/admin-logs.d.ts +3 -0
  41. package/dist/webui/routes/admin-logs.js +9 -0
  42. package/dist/webui/routes/handlers/admin-logs-handlers.d.ts +6 -0
  43. package/dist/webui/routes/handlers/admin-logs-handlers.js +106 -0
  44. package/dist/webui/routes/handlers/system-errors-handlers.d.ts +6 -0
  45. package/dist/webui/routes/handlers/system-errors-handlers.js +59 -0
  46. package/dist/webui/routes/system-errors.d.ts +3 -0
  47. package/dist/webui/routes/system-errors.js +9 -0
  48. package/dist/webui/server/server-routes.js +5 -0
  49. package/node_modules/@redtidev/pixiv-client/dist/app-api/novels.d.ts.map +1 -1
  50. package/node_modules/@redtidev/pixiv-client/dist/app-api/novels.js +18 -2
  51. package/node_modules/@redtidev/pixiv-client/dist/app-api/novels.js.map +1 -1
  52. package/node_modules/@redtidev/pixiv-client/dist/index.d.ts +1 -1
  53. package/node_modules/@redtidev/pixiv-client/dist/index.d.ts.map +1 -1
  54. package/node_modules/@redtidev/pixiv-client/dist/index.js.map +1 -1
  55. package/node_modules/@redtidev/pixiv-client/dist/models/index.d.ts +40 -4
  56. package/node_modules/@redtidev/pixiv-client/dist/models/index.d.ts.map +1 -1
  57. package/node_modules/@redtidev/pixiv-client/src/app-api/novels.ts +28 -2
  58. package/node_modules/@redtidev/pixiv-client/src/index.ts +3 -0
  59. package/node_modules/@redtidev/pixiv-client/src/models/index.ts +34 -4
  60. package/package.json +2 -2
@@ -222,6 +222,27 @@ class DatabaseMigration {
222
222
  state TEXT NOT NULL,
223
223
  updated_at INTEGER NOT NULL
224
224
  )`,
225
+ // Durable error event ledger for observability (structured error
226
+ // taxonomy; populated by download/system handlers and shown in the
227
+ // admin API). Append-only until an operator marks a row resolved.
228
+ `CREATE TABLE IF NOT EXISTS system_errors (
229
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
230
+ service TEXT NOT NULL DEFAULT 'pixivflow',
231
+ component TEXT,
232
+ bot_id TEXT,
233
+ schedule_id TEXT,
234
+ slot_id TEXT,
235
+ pixiv_id TEXT,
236
+ stage TEXT,
237
+ error_type TEXT NOT NULL,
238
+ message TEXT,
239
+ http_status INTEGER,
240
+ retryable INTEGER NOT NULL DEFAULT 0,
241
+ trace_id TEXT,
242
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
243
+ resolved_at DATETIME
244
+ )`,
245
+ `CREATE INDEX IF NOT EXISTS idx_system_errors_bot_created ON system_errors(bot_id, created_at)`,
225
246
  ];
226
247
  // Phase 1: create tables (idempotent). Must run before any PRAGMA-based
227
248
  // column check, otherwise a fresh DB would report the table as missing and
@@ -0,0 +1,19 @@
1
+ import { BaseRepository } from './BaseRepository';
2
+ import { SystemErrorInput, SystemErrorRow } from '../../observability/types';
3
+ export declare class SystemErrorRepository extends BaseRepository {
4
+ record(input: SystemErrorInput): void;
5
+ list(opts?: {
6
+ limit?: number;
7
+ errorType?: string;
8
+ botId?: string;
9
+ stage?: string;
10
+ resolved?: boolean;
11
+ from?: string;
12
+ to?: string;
13
+ }): SystemErrorRow[];
14
+ markResolved(id: number): {
15
+ changes: number;
16
+ };
17
+ countSince(botId: string | null, hours: number): number;
18
+ }
19
+ //# sourceMappingURL=SystemErrorRepository.d.ts.map
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SystemErrorRepository = void 0;
4
+ const BaseRepository_1 = require("./BaseRepository");
5
+ class SystemErrorRepository extends BaseRepository_1.BaseRepository {
6
+ record(input) {
7
+ this.db
8
+ .prepare(`INSERT INTO system_errors
9
+ (service, component, bot_id, schedule_id, slot_id, pixiv_id, stage, error_type, message, http_status, retryable, trace_id)
10
+ VALUES
11
+ (@service, @component, @botId, @scheduleId, @slotId, @pixivId, @stage, @errorType, @message, @httpStatus, @retryable, @traceId)`)
12
+ .run({
13
+ service: input.service ?? 'pixivflow',
14
+ component: input.component ?? null,
15
+ botId: input.bot_id ?? null,
16
+ scheduleId: input.schedule_id ?? null,
17
+ slotId: input.slot_id ?? null,
18
+ pixivId: input.pixiv_id ?? null,
19
+ stage: input.stage ?? null,
20
+ errorType: input.error_type ?? 'INTERNAL_ERROR',
21
+ message: input.message.slice(0, 5000),
22
+ httpStatus: input.http_status ?? null,
23
+ retryable: input.retryable ? 1 : 0,
24
+ traceId: input.trace_id ?? null,
25
+ });
26
+ }
27
+ list(opts = {}) {
28
+ const where = [];
29
+ const params = [];
30
+ if (opts.errorType) {
31
+ where.push('error_type = ?');
32
+ params.push(opts.errorType);
33
+ }
34
+ if (opts.botId) {
35
+ where.push('bot_id = ?');
36
+ params.push(opts.botId);
37
+ }
38
+ if (opts.stage) {
39
+ where.push('stage = ?');
40
+ params.push(opts.stage);
41
+ }
42
+ if (typeof opts.resolved === 'boolean') {
43
+ where.push(opts.resolved ? 'resolved_at IS NOT NULL' : 'resolved_at IS NULL');
44
+ }
45
+ if (opts.from) {
46
+ where.push('created_at >= ?');
47
+ params.push(opts.from);
48
+ }
49
+ if (opts.to) {
50
+ where.push('created_at <= ?');
51
+ params.push(opts.to);
52
+ }
53
+ const limit = Math.max(1, Math.min(Number(opts.limit) || 50, 500));
54
+ const sql = `SELECT * FROM system_errors${where.length ? ' WHERE ' + where.join(' AND ') : ''} ORDER BY id DESC LIMIT ${limit}`;
55
+ return this.db.prepare(sql).all(...params).map(toRow);
56
+ }
57
+ markResolved(id) {
58
+ const info = this.db.prepare(`UPDATE system_errors SET resolved_at = CURRENT_TIMESTAMP WHERE id = ? AND resolved_at IS NULL`).run(id);
59
+ return { changes: Number(info.changes ?? 0) };
60
+ }
61
+ countSince(botId, hours) {
62
+ const cutoffMs = Date.now() - hours * 60 * 60 * 1000;
63
+ const cutoff = new Date(cutoffMs).toISOString().replace('T', ' ').slice(0, 19);
64
+ if (botId) {
65
+ const row = this.db.prepare(`SELECT COUNT(*) AS n FROM system_errors WHERE bot_id = ? AND created_at >= ?`).get(botId, cutoff);
66
+ return Number(row.n ?? 0);
67
+ }
68
+ const row = this.db.prepare(`SELECT COUNT(*) AS n FROM system_errors WHERE created_at >= ?`).get(cutoff);
69
+ return Number(row.n ?? 0);
70
+ }
71
+ }
72
+ exports.SystemErrorRepository = SystemErrorRepository;
73
+ function toRow(r) {
74
+ return {
75
+ id: Number(r.id),
76
+ service: r.service,
77
+ component: r.component ?? undefined,
78
+ bot_id: r.bot_id ?? undefined,
79
+ schedule_id: r.schedule_id ?? undefined,
80
+ slot_id: r.slot_id ?? undefined,
81
+ pixiv_id: r.pixiv_id ?? undefined,
82
+ stage: r.stage ?? undefined,
83
+ error_type: r.error_type,
84
+ message: r.message,
85
+ http_status: r.http_status ?? null,
86
+ retryable: Boolean(r.retryable),
87
+ trace_id: r.trace_id ?? undefined,
88
+ created_at: r.created_at,
89
+ resolved_at: r.resolved_at,
90
+ };
91
+ }
92
+ //# sourceMappingURL=SystemErrorRepository.js.map
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BUILD = void 0;
4
4
  // GENERATED by scripts/write-version.js — do not edit manually.
5
- exports.BUILD = { version: '2.22.1', commit: 'd7d248938926' };
5
+ exports.BUILD = { version: '2.24.0', commit: '8c7fa0a4b74b' };
6
6
  //# sourceMappingURL=version.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "pixivflow-webui-backend",
4
- "version": "2.22.1",
4
+ "version": "2.24.0",
5
5
  "description": "PixivFlow WebUI Backend - CommonJS module"
6
6
  }
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=admin-logs.d.ts.map
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const express_1 = require("express");
4
+ const admin_logs_handlers_1 = require("./handlers/admin-logs-handlers");
5
+ const router = (0, express_1.Router)();
6
+ router.get('/', admin_logs_handlers_1.getAdminLogs);
7
+ router.get('/download', admin_logs_handlers_1.downloadLogs);
8
+ exports.default = router;
9
+ //# sourceMappingURL=admin-logs.js.map
@@ -0,0 +1,6 @@
1
+ import { Request, Response } from 'express';
2
+ /** GET /admin/logs — list log files (size + mtime) in the data dir. */
3
+ export declare function getAdminLogs(_req: Request, res: Response): Promise<void>;
4
+ /** GET /admin/logs/download[?service=&bot_id=&level=&stage=&from=&to=&file=] */
5
+ export declare function downloadLogs(req: Request, res: Response): Promise<void>;
6
+ //# sourceMappingURL=admin-logs-handlers.d.ts.map
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAdminLogs = getAdminLogs;
4
+ exports.downloadLogs = downloadLogs;
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const node_zlib_1 = require("node:zlib");
8
+ const logger_1 = require("../../../logger");
9
+ const config_1 = require("../../../config");
10
+ function logDir() {
11
+ const config = (0, config_1.loadConfig)((0, config_1.getConfigPath)());
12
+ if (config.storage?.databasePath && config.storage.databasePath.startsWith('/')) {
13
+ return (0, path_1.dirname)(config.storage.databasePath);
14
+ }
15
+ const candidate = (0, path_1.join)(process.cwd(), 'data');
16
+ return (0, fs_1.existsSync)(candidate) ? candidate : (0, path_1.dirname)((0, path_1.join)(process.cwd(), 'data', 'pixiv-downloader.log'));
17
+ }
18
+ function parseOrRaw(line) {
19
+ try {
20
+ return { parsed: JSON.parse(line), raw: line };
21
+ }
22
+ catch {
23
+ return { raw: line };
24
+ }
25
+ }
26
+ function matchesFilter(line, q) {
27
+ const { parsed, raw } = parseOrRaw(line);
28
+ const val = (key) => (parsed ? parsed[key] : undefined);
29
+ const timestamp = parsed?.timestamp ?? raw.match(/\[([\d\-T:.]+Z)\]/)?.[1] ?? '';
30
+ if (q.service && !(val('service') === q.service || raw.includes(q.service)))
31
+ return false;
32
+ if (q.bot_id && !(val('bot_id') === q.bot_id || raw.includes(q.bot_id)))
33
+ return false;
34
+ if (q.stage && !(val('stage') === q.stage || raw.includes(q.stage)))
35
+ return false;
36
+ if (q.level) {
37
+ const lvl = val('level');
38
+ if (lvl) {
39
+ if (String(lvl).toLowerCase() !== q.level.toLowerCase())
40
+ return false;
41
+ }
42
+ else if (!raw.includes(`[${q.level.toUpperCase()}]`))
43
+ return false;
44
+ }
45
+ if (q.from && timestamp && timestamp < q.from)
46
+ return false;
47
+ if (q.to && timestamp && timestamp > q.to)
48
+ return false;
49
+ return true;
50
+ }
51
+ function fileInfo(full) {
52
+ const st = (0, fs_1.statSync)(full);
53
+ return { name: full.split('/').pop(), size: st.size, updated: st.mtime.toISOString() };
54
+ }
55
+ /** GET /admin/logs — list log files (size + mtime) in the data dir. */
56
+ async function getAdminLogs(_req, res) {
57
+ try {
58
+ const dir = logDir();
59
+ let names = [];
60
+ try {
61
+ names = (0, fs_1.readdirSync)(dir);
62
+ }
63
+ catch {
64
+ names = [];
65
+ }
66
+ const files = names
67
+ .filter((n) => /^pixiv-downloader.*\.(log|gz)$/.test(n))
68
+ .map((n) => fileInfo((0, path_1.join)(dir, n)))
69
+ .sort((a, b) => b.updated.localeCompare(a.updated));
70
+ res.json({ files });
71
+ }
72
+ catch (error) {
73
+ logger_1.logger.error('admin logs list failed', { error: error instanceof Error ? error.message : String(error) });
74
+ res.status(500).json({ error: 'list failed' });
75
+ }
76
+ }
77
+ /** GET /admin/logs/download[?service=&bot_id=&level=&stage=&from=&to=&file=] */
78
+ async function downloadLogs(req, res) {
79
+ try {
80
+ const requested = String(req.query.file ?? '');
81
+ const file = requested && !requested.includes('/') && !requested.includes('..') ? requested : 'pixiv-downloader.log';
82
+ const full = (0, path_1.join)(logDir(), file);
83
+ if (!(0, fs_1.existsSync)(full)) {
84
+ res.status(404).json({ error: `log file not found: ${file}` });
85
+ return;
86
+ }
87
+ const lines = (0, fs_1.readFileSync)(full, 'utf-8').split('\n').filter((l) => l.trim());
88
+ const filtered = lines.filter((l) => matchesFilter(l, {
89
+ service: req.query.service ? String(req.query.service) : undefined,
90
+ bot_id: req.query.bot_id ? String(req.query.bot_id) : undefined,
91
+ level: req.query.level ? String(req.query.level) : undefined,
92
+ stage: req.query.stage ? String(req.query.stage) : undefined,
93
+ from: req.query.from ? String(req.query.from) : undefined,
94
+ to: req.query.to ? String(req.query.to) : undefined,
95
+ }));
96
+ const gz = (0, node_zlib_1.gzipSync)(filtered.join('\n') + (filtered.length ? '\n' : ''));
97
+ res.setHeader('Content-Type', 'application/gzip');
98
+ res.setHeader('Content-Disposition', `attachment; filename="${file}.filtered.gz"`);
99
+ res.send(gz);
100
+ }
101
+ catch (error) {
102
+ logger_1.logger.error('admin logs download failed', { error: error instanceof Error ? error.message : String(error) });
103
+ res.status(500).json({ error: 'download failed' });
104
+ }
105
+ }
106
+ //# sourceMappingURL=admin-logs-handlers.js.map
@@ -0,0 +1,6 @@
1
+ import { Request, Response } from 'express';
2
+ /** GET /admin/system-errors?limit=&error_type=&bot_id=&stage=&resolved=&from=&to= */
3
+ export declare function listSystemErrors(req: Request, res: Response): Promise<void>;
4
+ /** POST /admin/system-errors/:id/resolve */
5
+ export declare function resolveSystemError(req: Request, res: Response): Promise<void>;
6
+ //# sourceMappingURL=system-errors-handlers.d.ts.map
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listSystemErrors = listSystemErrors;
4
+ exports.resolveSystemError = resolveSystemError;
5
+ const Database_1 = require("../../../storage/Database");
6
+ const config_1 = require("../../../config");
7
+ const logger_1 = require("../../../logger");
8
+ function db() {
9
+ const config = (0, config_1.loadConfig)((0, config_1.getConfigPath)());
10
+ const database = new Database_1.Database(config.storage.databasePath);
11
+ database.migrate();
12
+ return database;
13
+ }
14
+ /** GET /admin/system-errors?limit=&error_type=&bot_id=&stage=&resolved=&from=&to= */
15
+ async function listSystemErrors(req, res) {
16
+ let database = null;
17
+ try {
18
+ database = db();
19
+ const rows = database.systemErrors.list({
20
+ limit: Number(req.query.limit ?? 50),
21
+ errorType: req.query.error_type ? String(req.query.error_type) : undefined,
22
+ botId: req.query.bot_id ? String(req.query.bot_id) : undefined,
23
+ stage: req.query.stage ? String(req.query.stage) : undefined,
24
+ resolved: req.query.resolved === 'true' ? true : req.query.resolved === 'false' ? false : undefined,
25
+ from: req.query.from ? String(req.query.from) : undefined,
26
+ to: req.query.to ? String(req.query.to) : undefined,
27
+ });
28
+ res.json({ data: rows });
29
+ }
30
+ catch (error) {
31
+ logger_1.logger.error('list system errors failed', { error: error instanceof Error ? error.message : String(error) });
32
+ res.status(500).json({ error: 'list failed' });
33
+ }
34
+ finally {
35
+ database?.close();
36
+ }
37
+ }
38
+ /** POST /admin/system-errors/:id/resolve */
39
+ async function resolveSystemError(req, res) {
40
+ let database = null;
41
+ try {
42
+ const id = Number(req.params.id);
43
+ if (!Number.isFinite(id)) {
44
+ res.status(400).json({ error: 'invalid id' });
45
+ return;
46
+ }
47
+ database = db();
48
+ const result = database.systemErrors.markResolved(id);
49
+ res.json({ success: result.changes > 0, changes: result.changes });
50
+ }
51
+ catch (error) {
52
+ logger_1.logger.error('resolve system error failed', { error: error instanceof Error ? error.message : String(error) });
53
+ res.status(500).json({ error: 'resolve failed' });
54
+ }
55
+ finally {
56
+ database?.close();
57
+ }
58
+ }
59
+ //# sourceMappingURL=system-errors-handlers.js.map
@@ -0,0 +1,3 @@
1
+ declare const router: import("express-serve-static-core").Router;
2
+ export default router;
3
+ //# sourceMappingURL=system-errors.d.ts.map
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const express_1 = require("express");
4
+ const system_errors_handlers_1 = require("./handlers/system-errors-handlers");
5
+ const router = (0, express_1.Router)();
6
+ router.get('/', system_errors_handlers_1.listSystemErrors);
7
+ router.post('/:id/resolve', system_errors_handlers_1.resolveSystemError);
8
+ exports.default = router;
9
+ //# sourceMappingURL=system-errors.js.map
@@ -10,6 +10,8 @@ const config_1 = __importDefault(require("../routes/config"));
10
10
  const download_1 = __importDefault(require("../routes/download"));
11
11
  const stats_1 = __importDefault(require("../routes/stats"));
12
12
  const logs_1 = __importDefault(require("../routes/logs"));
13
+ const admin_logs_1 = __importDefault(require("../routes/admin-logs"));
14
+ const system_errors_1 = __importDefault(require("../routes/system-errors"));
13
15
  const files_1 = __importDefault(require("../routes/files"));
14
16
  /**
15
17
  * Setup API routes for Express app
@@ -29,6 +31,9 @@ function setupRoutes(app) {
29
31
  app.use('/api/download', download_1.default);
30
32
  app.use('/api/stats', stats_1.default);
31
33
  app.use('/api/logs', logs_1.default);
34
+ // Admin observability API (protected by WebUI basic auth when enabled).
35
+ app.use('/admin/logs', admin_logs_1.default);
36
+ app.use('/admin/system-errors', system_errors_1.default);
32
37
  app.use('/api/files', files_1.default);
33
38
  }
34
39
  //# sourceMappingURL=server-routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"novels.d.ts","sourceRoot":"","sources":["../../src/app-api/novels.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAa,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAKvH,iFAAiF;AACjF,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD,kCAAkC;IAC5B,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAQnE;;;OAGG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;IAiBxG,gEAAgE;IAC1D,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAavE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAgBxH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAajF,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAgBnI,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAapF,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAuBzG,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAanE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA6B/E;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA8D/H,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;CAGlB"}
1
+ {"version":3,"file":"novels.d.ts","sourceRoot":"","sources":["../../src/app-api/novels.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAa,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAiBvH,iFAAiF;AACjF,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAEjD,kCAAkC;IAC5B,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAI1D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAQnE;;;OAGG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;IAiBxG,gEAAgE;IAC1D,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAavE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAgBxH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAajF,WAAW,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAgBnI,OAAO,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAapF,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAuBzG,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAanE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA6B/E;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA4E/H,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;CAGlB"}
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NovelsApi = void 0;
4
4
  const errors_1 = require("../errors/errors");
5
5
  const BROWSER_UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36';
6
+ function isRecord(v) {
7
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
8
+ }
6
9
  /** Novel endpoints of the Pixiv public App API (+ required webview fallback). */
7
10
  class NovelsApi {
8
11
  transport;
@@ -186,8 +189,21 @@ class NovelsApi {
186
189
  if (end !== -1) {
187
190
  const parsed = JSON.parse(html.slice(from, end));
188
191
  const text = this.nonEmptyText(parsed?.text);
189
- if (text)
190
- return { novel_text: text };
192
+ if (text) {
193
+ return {
194
+ novel_text: text,
195
+ coverUrl: typeof parsed.coverUrl === 'string' ? parsed.coverUrl : undefined,
196
+ seriesNavigation: isRecord(parsed.seriesNavigation)
197
+ ? parsed.seriesNavigation
198
+ : undefined,
199
+ images: isRecord(parsed.images)
200
+ ? parsed.images
201
+ : undefined,
202
+ illusts: isRecord(parsed.illusts)
203
+ ? parsed.illusts
204
+ : undefined,
205
+ };
206
+ }
191
207
  }
192
208
  }
193
209
  failures.push('webview returned no non-empty novel text');
@@ -1 +1 @@
1
- {"version":3,"file":"novels.js","sourceRoot":"","sources":["../../src/app-api/novels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novels.js","sourceRoot":"","sources":["../../src/app-api/novels.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export type { TransportConfig } from './transport/transport';
16
16
  export { paginate, firstPage } from './pagination';
17
17
  export { IllustrationsApi, NovelsApi, TagsApi, MediaApi, UsersApi, } from './app-api/exports';
18
18
  export type { IllustSearchOptions, NovelSearchOptions, RankingOptions, UserWorksOptions, IllustRankingMode, NovelRankingMode, SearchSort, SearchTarget, OnePageResult, } from './app-api/options';
19
- export type { PixivUser, PixivTag, PixivIllust, PixivIllustPage, PixivNovel, PixivNovelTextResponse, UgoiraFrame, UgoiraMetadata, Paginated, PixivListResponse, } from './models';
19
+ export type { PixivUser, PixivTag, PixivIllust, PixivIllustPage, PixivNovel, PixivNovelTextResponse, PixivNovelUploadedImage, PixivNovelIllustRef, NovelSeriesNavItem, UgoiraFrame, UgoiraMetadata, Paginated, PixivListResponse, } from './models';
20
20
  export type { PixivClientOptions, ProxyOptions, RateLimitOptions, RateLimitState, RateLimitStateStore, RateLimitStatus, RequestOptions, PaginationOptions, KitEvent, KitEventListener, FetchLike, ResponseLike, } from './types';
21
21
  export { silentLogger } from './logger';
22
22
  export type { KitLogger } from './logger';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,cAAc,EACd,SAAS,EACT,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAExF,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,SAAS,EACT,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,mCAA0D;AAAjD,qGAAA,WAAW,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAGvC,sCAAkE;AAAzD,4GAAA,mBAAmB,OAAA;AAAE,sGAAA,aAAa,OAAA;AAG3C,4DAKoC;AAJlC,8GAAA,aAAa,OAAA;AACb,0HAAA,yBAAyB,OAAA;AACzB,mHAAA,kBAAkB,OAAA;AAClB,gHAAA,eAAe,OAAA;AAEjB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAElB,2CAAmD;AAA1C,sGAAA,QAAQ,OAAA;AAAE,uGAAA,SAAS,OAAA;AAE5B,6CAM2B;AALzB,2GAAA,gBAAgB,OAAA;AAChB,oGAAA,SAAS,OAAA;AACT,kGAAA,OAAO,OAAA;AACP,mGAAA,QAAQ,OAAA;AACR,mGAAA,QAAQ,OAAA;AA0CV,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AAGrB,0CAcyB;AAbvB,oGAAA,UAAU,OAAA;AACV,wGAAA,cAAc,OAAA;AACd,2GAAA,iBAAiB,OAAA;AACjB,2GAAA,iBAAiB,OAAA;AACjB,6GAAA,mBAAmB,OAAA;AACnB,kHAAA,wBAAwB,OAAA;AACxB,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAClB,0GAAA,gBAAgB,OAAA;AAChB,+GAAA,qBAAqB,OAAA;AACrB,yGAAA,eAAe,OAAA;AACf,uGAAA,aAAa,OAAA;AACb,sGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,mCAA0D;AAAjD,qGAAA,WAAW,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAGvC,sCAAkE;AAAzD,4GAAA,mBAAmB,OAAA;AAAE,sGAAA,aAAa,OAAA;AAG3C,4DAKoC;AAJlC,8GAAA,aAAa,OAAA;AACb,0HAAA,yBAAyB,OAAA;AACzB,mHAAA,kBAAkB,OAAA;AAClB,gHAAA,eAAe,OAAA;AAEjB,mDAAkD;AAAzC,sGAAA,SAAS,OAAA;AAElB,2CAAmD;AAA1C,sGAAA,QAAQ,OAAA;AAAE,uGAAA,SAAS,OAAA;AAE5B,6CAM2B;AALzB,2GAAA,gBAAgB,OAAA;AAChB,oGAAA,SAAS,OAAA;AACT,kGAAA,OAAO,OAAA;AACP,mGAAA,QAAQ,OAAA;AACR,mGAAA,QAAQ,OAAA;AA6CV,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AAGrB,0CAcyB;AAbvB,oGAAA,UAAU,OAAA;AACV,wGAAA,cAAc,OAAA;AACd,2GAAA,iBAAiB,OAAA;AACjB,2GAAA,iBAAiB,OAAA;AACjB,6GAAA,mBAAmB,OAAA;AACnB,kHAAA,wBAAwB,OAAA;AACxB,6GAAA,mBAAmB,OAAA;AACnB,4GAAA,kBAAkB,OAAA;AAClB,0GAAA,gBAAgB,OAAA;AAChB,+GAAA,qBAAqB,OAAA;AACrB,yGAAA,eAAe,OAAA;AACf,uGAAA,aAAa,OAAA;AACb,sGAAA,YAAY,OAAA"}
@@ -80,12 +80,48 @@ export interface PixivNovel {
80
80
  }
81
81
  export interface PixivNovelTextResponse {
82
82
  novel_text: string;
83
- /**
84
- * Marker/next-url style fields are endpoint-specific; the webview fallback
85
- * parses only the text. Hosts should not rely on other fields.
86
- */
83
+ /** Cover thumbnail URL (webview v2 novel: block). */
84
+ coverUrl?: string;
85
+ /** Previous/next series navigation (webview v2 novel: block). */
86
+ seriesNavigation?: {
87
+ nextNovel?: NovelSeriesNavItem;
88
+ prevNovel?: NovelSeriesNavItem;
89
+ };
90
+ /** Uploaded inline images, keyed by `[uploadedimage:KEY]` marker id. */
91
+ images?: Record<string, PixivNovelUploadedImage>;
92
+ /** Referenced published illusts, keyed by `[pixivimage:KEY]` marker id; null = deleted/no permission. */
93
+ illusts?: Record<string, PixivNovelIllustRef | null>;
94
+ /** Other endpoint-specific fields (v1/webaudio fallbacks); hosts must not depend on them. */
87
95
  [key: string]: unknown;
88
96
  }
97
+ /** Author-uploaded inline image in the webview v2 novel: block. */
98
+ export interface PixivNovelUploadedImage {
99
+ novelImageId?: string;
100
+ urls: {
101
+ the128X128?: string;
102
+ the240Mw?: string;
103
+ the480Mw?: string;
104
+ the1200X1200?: string;
105
+ original?: string;
106
+ [k: string]: string | undefined;
107
+ };
108
+ }
109
+ /** Referenced published illust (webview v2 novel: block). */
110
+ export interface PixivNovelIllustRef {
111
+ illust: {
112
+ images: {
113
+ small?: string;
114
+ medium?: string;
115
+ original?: string;
116
+ };
117
+ };
118
+ }
119
+ export interface NovelSeriesNavItem {
120
+ id: number;
121
+ viewable: boolean;
122
+ title?: string;
123
+ coverUrl?: string;
124
+ }
89
125
  export interface UgoiraFrame {
90
126
  file: string;
91
127
  delay: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,18 @@ import type { NovelRankingMode, NovelSearchOptions, OnePageResult, RankingOption
6
6
  const BROWSER_UA =
7
7
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126 Safari/537.36';
8
8
 
9
+ type WebviewNovelJson = {
10
+ text?: unknown;
11
+ coverUrl?: unknown;
12
+ seriesNavigation?: unknown;
13
+ images?: unknown;
14
+ illusts?: unknown;
15
+ };
16
+
17
+ function isRecord(v: unknown): v is Record<string, unknown> {
18
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
19
+ }
20
+
9
21
  /** Novel endpoints of the Pixiv public App API (+ required webview fallback). */
10
22
  export class NovelsApi {
11
23
  constructor(private readonly transport: Transport) {}
@@ -201,9 +213,23 @@ export class NovelsApi {
201
213
  const from = start + marker.length;
202
214
  const end = html.indexOf(',\n', from);
203
215
  if (end !== -1) {
204
- const parsed = JSON.parse(html.slice(from, end)) as { text?: unknown };
216
+ const parsed = JSON.parse(html.slice(from, end)) as WebviewNovelJson;
205
217
  const text = this.nonEmptyText(parsed?.text);
206
- if (text) return { novel_text: text };
218
+ if (text) {
219
+ return {
220
+ novel_text: text,
221
+ coverUrl: typeof parsed.coverUrl === 'string' ? parsed.coverUrl : undefined,
222
+ seriesNavigation: isRecord(parsed.seriesNavigation)
223
+ ? parsed.seriesNavigation as PixivNovelTextResponse['seriesNavigation']
224
+ : undefined,
225
+ images: isRecord(parsed.images)
226
+ ? parsed.images as PixivNovelTextResponse['images']
227
+ : undefined,
228
+ illusts: isRecord(parsed.illusts)
229
+ ? parsed.illusts as PixivNovelTextResponse['illusts']
230
+ : undefined,
231
+ };
232
+ }
207
233
  }
208
234
  }
209
235
  failures.push('webview returned no non-empty novel text');
@@ -50,6 +50,9 @@ export type {
50
50
  PixivIllustPage,
51
51
  PixivNovel,
52
52
  PixivNovelTextResponse,
53
+ PixivNovelUploadedImage,
54
+ PixivNovelIllustRef,
55
+ NovelSeriesNavItem,
53
56
  UgoiraFrame,
54
57
  UgoiraMetadata,
55
58
  Paginated,