pixivflow 2.0.38 → 2.0.40

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 (213) hide show
  1. package/dist/cli/ArgumentParser.d.ts +2 -20
  2. package/dist/cli/ArgumentParser.d.ts.map +1 -1
  3. package/dist/cli/ArgumentParser.js +16 -29
  4. package/dist/cli/ArgumentParser.js.map +1 -1
  5. package/dist/commands/BackupCommand.d.ts +6 -0
  6. package/dist/commands/BackupCommand.d.ts.map +1 -1
  7. package/dist/commands/BackupCommand.js +6 -0
  8. package/dist/commands/BackupCommand.js.map +1 -1
  9. package/dist/commands/Command.d.ts +16 -0
  10. package/dist/commands/Command.d.ts.map +1 -1
  11. package/dist/commands/Command.js +9 -0
  12. package/dist/commands/Command.js.map +1 -1
  13. package/dist/commands/CommandRegistry.d.ts +24 -0
  14. package/dist/commands/CommandRegistry.d.ts.map +1 -1
  15. package/dist/commands/CommandRegistry.js +48 -0
  16. package/dist/commands/CommandRegistry.js.map +1 -1
  17. package/dist/commands/ConfigCommand.d.ts +6 -0
  18. package/dist/commands/ConfigCommand.d.ts.map +1 -1
  19. package/dist/commands/ConfigCommand.js +6 -0
  20. package/dist/commands/ConfigCommand.js.map +1 -1
  21. package/dist/commands/DirsCommand.d.ts +6 -0
  22. package/dist/commands/DirsCommand.d.ts.map +1 -1
  23. package/dist/commands/DirsCommand.js +6 -0
  24. package/dist/commands/DirsCommand.js.map +1 -1
  25. package/dist/commands/DownloadCommand.d.ts +6 -0
  26. package/dist/commands/DownloadCommand.d.ts.map +1 -1
  27. package/dist/commands/DownloadCommand.js +57 -3
  28. package/dist/commands/DownloadCommand.js.map +1 -1
  29. package/dist/commands/HealthCommand.d.ts +7 -0
  30. package/dist/commands/HealthCommand.d.ts.map +1 -1
  31. package/dist/commands/HealthCommand.js +7 -0
  32. package/dist/commands/HealthCommand.js.map +1 -1
  33. package/dist/commands/HelpCommand.d.ts +7 -0
  34. package/dist/commands/HelpCommand.d.ts.map +1 -1
  35. package/dist/commands/HelpCommand.js +22 -29
  36. package/dist/commands/HelpCommand.js.map +1 -1
  37. package/dist/commands/LoginCommand.d.ts +7 -0
  38. package/dist/commands/LoginCommand.d.ts.map +1 -1
  39. package/dist/commands/LoginCommand.js +7 -0
  40. package/dist/commands/LoginCommand.js.map +1 -1
  41. package/dist/commands/LoginHeadlessCommand.d.ts +7 -0
  42. package/dist/commands/LoginHeadlessCommand.d.ts.map +1 -1
  43. package/dist/commands/LoginHeadlessCommand.js +7 -0
  44. package/dist/commands/LoginHeadlessCommand.js.map +1 -1
  45. package/dist/commands/LogsCommand.d.ts +6 -0
  46. package/dist/commands/LogsCommand.d.ts.map +1 -1
  47. package/dist/commands/LogsCommand.js +6 -0
  48. package/dist/commands/LogsCommand.js.map +1 -1
  49. package/dist/commands/MaintainCommand.d.ts +6 -0
  50. package/dist/commands/MaintainCommand.d.ts.map +1 -1
  51. package/dist/commands/MaintainCommand.js +6 -0
  52. package/dist/commands/MaintainCommand.js.map +1 -1
  53. package/dist/commands/MigrateConfigCommand.d.ts +6 -0
  54. package/dist/commands/MigrateConfigCommand.d.ts.map +1 -1
  55. package/dist/commands/MigrateConfigCommand.js +6 -0
  56. package/dist/commands/MigrateConfigCommand.js.map +1 -1
  57. package/dist/commands/MonitorCommand.d.ts +6 -0
  58. package/dist/commands/MonitorCommand.d.ts.map +1 -1
  59. package/dist/commands/MonitorCommand.js +6 -0
  60. package/dist/commands/MonitorCommand.js.map +1 -1
  61. package/dist/commands/NormalizeCommand.d.ts +6 -0
  62. package/dist/commands/NormalizeCommand.d.ts.map +1 -1
  63. package/dist/commands/NormalizeCommand.js +6 -0
  64. package/dist/commands/NormalizeCommand.js.map +1 -1
  65. package/dist/commands/RandomDownloadCommand.d.ts +7 -1
  66. package/dist/commands/RandomDownloadCommand.d.ts.map +1 -1
  67. package/dist/commands/RandomDownloadCommand.js +7 -1
  68. package/dist/commands/RandomDownloadCommand.js.map +1 -1
  69. package/dist/commands/RefreshCommand.d.ts +12 -0
  70. package/dist/commands/RefreshCommand.d.ts.map +1 -1
  71. package/dist/commands/RefreshCommand.js +82 -0
  72. package/dist/commands/RefreshCommand.js.map +1 -1
  73. package/dist/commands/SchedulerCommand.d.ts +6 -0
  74. package/dist/commands/SchedulerCommand.d.ts.map +1 -1
  75. package/dist/commands/SchedulerCommand.js +7 -1
  76. package/dist/commands/SchedulerCommand.js.map +1 -1
  77. package/dist/commands/SetupCommand.d.ts +6 -0
  78. package/dist/commands/SetupCommand.d.ts.map +1 -1
  79. package/dist/commands/SetupCommand.js +6 -0
  80. package/dist/commands/SetupCommand.js.map +1 -1
  81. package/dist/commands/StatusCommand.d.ts +6 -0
  82. package/dist/commands/StatusCommand.d.ts.map +1 -1
  83. package/dist/commands/StatusCommand.js +6 -0
  84. package/dist/commands/StatusCommand.js.map +1 -1
  85. package/dist/commands/VersionCommand.d.ts +21 -0
  86. package/dist/commands/VersionCommand.d.ts.map +1 -0
  87. package/dist/commands/VersionCommand.js +81 -0
  88. package/dist/commands/VersionCommand.js.map +1 -0
  89. package/dist/commands/WebUICommand.d.ts +6 -0
  90. package/dist/commands/WebUICommand.d.ts.map +1 -1
  91. package/dist/commands/WebUICommand.js +6 -0
  92. package/dist/commands/WebUICommand.js.map +1 -1
  93. package/dist/commands/index.d.ts +2 -1
  94. package/dist/commands/index.d.ts.map +1 -1
  95. package/dist/commands/index.js +4 -1
  96. package/dist/commands/index.js.map +1 -1
  97. package/dist/commands/metadata.d.ts +38 -0
  98. package/dist/commands/metadata.d.ts.map +1 -0
  99. package/dist/commands/metadata.js +42 -0
  100. package/dist/commands/metadata.js.map +1 -0
  101. package/dist/commands/suggestions.d.ts +22 -0
  102. package/dist/commands/suggestions.d.ts.map +1 -0
  103. package/dist/commands/suggestions.js +85 -0
  104. package/dist/commands/suggestions.js.map +1 -0
  105. package/dist/config/validation.d.ts.map +1 -1
  106. package/dist/config/validation.js +11 -3
  107. package/dist/config/validation.js.map +1 -1
  108. package/dist/index.js +126 -320
  109. package/dist/index.js.map +1 -1
  110. package/dist/package.json +1 -1
  111. package/dist/pixiv/AuthClient.d.ts.map +1 -1
  112. package/dist/pixiv/AuthClient.js +56 -7
  113. package/dist/pixiv/AuthClient.js.map +1 -1
  114. package/dist/storage/Database.d.ts +22 -0
  115. package/dist/storage/Database.d.ts.map +1 -1
  116. package/dist/storage/Database.js +19 -0
  117. package/dist/storage/Database.js.map +1 -1
  118. package/dist/storage/DatabaseMigration.d.ts.map +1 -1
  119. package/dist/storage/DatabaseMigration.js +29 -0
  120. package/dist/storage/DatabaseMigration.js.map +1 -1
  121. package/dist/storage/repositories/TaskHistoryRepository.d.ts +61 -0
  122. package/dist/storage/repositories/TaskHistoryRepository.d.ts.map +1 -0
  123. package/dist/storage/repositories/TaskHistoryRepository.js +171 -0
  124. package/dist/storage/repositories/TaskHistoryRepository.js.map +1 -0
  125. package/dist/utils/errors.d.ts +14 -0
  126. package/dist/utils/errors.d.ts.map +1 -1
  127. package/dist/utils/errors.js +35 -12
  128. package/dist/utils/errors.js.map +1 -1
  129. package/dist/utils/pixiv-url-parser.d.ts +7 -1
  130. package/dist/utils/pixiv-url-parser.d.ts.map +1 -1
  131. package/dist/utils/pixiv-url-parser.js +75 -8
  132. package/dist/utils/pixiv-url-parser.js.map +1 -1
  133. package/dist/utils/token-manager.d.ts.map +1 -1
  134. package/dist/utils/token-manager.js +73 -5
  135. package/dist/utils/token-manager.js.map +1 -1
  136. package/dist/webui/package.json +1 -1
  137. package/dist/webui/routes/download.d.ts.map +1 -1
  138. package/dist/webui/routes/download.js +2 -0
  139. package/dist/webui/routes/download.js.map +1 -1
  140. package/dist/webui/routes/handlers/download-basic-handlers.d.ts +11 -0
  141. package/dist/webui/routes/handlers/download-basic-handlers.d.ts.map +1 -1
  142. package/dist/webui/routes/handlers/download-basic-handlers.js +199 -8
  143. package/dist/webui/routes/handlers/download-basic-handlers.js.map +1 -1
  144. package/dist/webui/services/DownloadTaskManager.d.ts.map +1 -1
  145. package/dist/webui/services/DownloadTaskManager.js +75 -3
  146. package/dist/webui/services/DownloadTaskManager.js.map +1 -1
  147. package/package.json +1 -1
  148. package/dist/webui/assets/ActionButton-DWq-fh3_.js +0 -2
  149. package/dist/webui/assets/ActionButton-DWq-fh3_.js.map +0 -1
  150. package/dist/webui/assets/CheckCircleOutlined-Can0-7ew.js +0 -2
  151. package/dist/webui/assets/CheckCircleOutlined-Can0-7ew.js.map +0 -1
  152. package/dist/webui/assets/CloseCircleOutlined-DfRmL2eG.js +0 -2
  153. package/dist/webui/assets/CloseCircleOutlined-DfRmL2eG.js.map +0 -1
  154. package/dist/webui/assets/Config-D9TWUGQR.js +0 -16
  155. package/dist/webui/assets/Config-D9TWUGQR.js.map +0 -1
  156. package/dist/webui/assets/Dashboard-CaGAH0y2.js +0 -2
  157. package/dist/webui/assets/Dashboard-CaGAH0y2.js.map +0 -1
  158. package/dist/webui/assets/DeleteOutlined-u-P2SpoK.js +0 -2
  159. package/dist/webui/assets/DeleteOutlined-u-P2SpoK.js.map +0 -1
  160. package/dist/webui/assets/Download-D9E4xrnM.js +0 -2
  161. package/dist/webui/assets/Download-D9E4xrnM.js.map +0 -1
  162. package/dist/webui/assets/Files-CKyc_PdW.js +0 -5
  163. package/dist/webui/assets/Files-CKyc_PdW.js.map +0 -1
  164. package/dist/webui/assets/PictureOutlined-C8Lbucj1.js +0 -2
  165. package/dist/webui/assets/PictureOutlined-C8Lbucj1.js.map +0 -1
  166. package/dist/webui/assets/SortDescendingOutlined-CR-hdhyW.js +0 -2
  167. package/dist/webui/assets/SortDescendingOutlined-CR-hdhyW.js.map +0 -1
  168. package/dist/webui/assets/ThunderboltOutlined-CiiB2de5.js +0 -2
  169. package/dist/webui/assets/ThunderboltOutlined-CiiB2de5.js.map +0 -1
  170. package/dist/webui/assets/UrlDownload-ClkUOXN_.js +0 -3
  171. package/dist/webui/assets/UrlDownload-ClkUOXN_.js.map +0 -1
  172. package/dist/webui/assets/dateUtils-CBk8bEa_.js +0 -2
  173. package/dist/webui/assets/dateUtils-CBk8bEa_.js.map +0 -1
  174. package/dist/webui/assets/errorCodeTranslator-DWsWq6B3.js +0 -3
  175. package/dist/webui/assets/errorCodeTranslator-DWsWq6B3.js.map +0 -1
  176. package/dist/webui/assets/index-BFgUdwJv.js +0 -214
  177. package/dist/webui/assets/index-BFgUdwJv.js.map +0 -1
  178. package/dist/webui/assets/index-CN3FylAF.js +0 -2
  179. package/dist/webui/assets/index-CN3FylAF.js.map +0 -1
  180. package/dist/webui/assets/index-CSoUPZat.js +0 -2
  181. package/dist/webui/assets/index-CSoUPZat.js.map +0 -1
  182. package/dist/webui/assets/index-CiHwNwrk.js +0 -19
  183. package/dist/webui/assets/index-CiHwNwrk.js.map +0 -1
  184. package/dist/webui/assets/index-DHwJxrFi.css +0 -1
  185. package/dist/webui/assets/index-DTU-FGA4.js +0 -2
  186. package/dist/webui/assets/index-DTU-FGA4.js.map +0 -1
  187. package/dist/webui/assets/index-DjpD0HQ5.js +0 -2
  188. package/dist/webui/assets/index-DjpD0HQ5.js.map +0 -1
  189. package/dist/webui/assets/index-Dycn6xoz.js +0 -2
  190. package/dist/webui/assets/index-Dycn6xoz.js.map +0 -1
  191. package/dist/webui/assets/index-G0EJCamt.js +0 -22
  192. package/dist/webui/assets/index-G0EJCamt.js.map +0 -1
  193. package/dist/webui/assets/index-WaraZQH0.js +0 -2
  194. package/dist/webui/assets/index-WaraZQH0.js.map +0 -1
  195. package/dist/webui/assets/index-k2rGFxEM.js +0 -8
  196. package/dist/webui/assets/index-k2rGFxEM.js.map +0 -1
  197. package/dist/webui/assets/index-lwTtspUb.js +0 -14
  198. package/dist/webui/assets/index-lwTtspUb.js.map +0 -1
  199. package/dist/webui/assets/index-pT0W4KjK.js +0 -47
  200. package/dist/webui/assets/index-pT0W4KjK.js.map +0 -1
  201. package/dist/webui/assets/index-wvielV9A.js +0 -2
  202. package/dist/webui/assets/index-wvielV9A.js.map +0 -1
  203. package/dist/webui/assets/row-FRqVdQDX.js +0 -20
  204. package/dist/webui/assets/row-FRqVdQDX.js.map +0 -1
  205. package/dist/webui/assets/useAuth-BMt6dHSB.js +0 -9
  206. package/dist/webui/assets/useAuth-BMt6dHSB.js.map +0 -1
  207. package/dist/webui/assets/useConfig-29Ugtjk4.js +0 -9
  208. package/dist/webui/assets/useConfig-29Ugtjk4.js.map +0 -1
  209. package/dist/webui/assets/useDownload-Dt6lsP8S.js +0 -2
  210. package/dist/webui/assets/useDownload-Dt6lsP8S.js.map +0 -1
  211. package/dist/webui/assets/useErrorHandler-DWHs3RlU.js +0 -84
  212. package/dist/webui/assets/useErrorHandler-DWHs3RlU.js.map +0 -1
  213. package/dist/webui/index.html +0 -15
package/dist/index.js CHANGED
@@ -1,354 +1,160 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
3
  Object.defineProperty(exports, "__esModule", { value: true });
37
4
  const config_1 = require("./config");
38
- const DownloadManager_1 = require("./download/DownloadManager");
39
- const FileService_1 = require("./download/FileService");
40
5
  const logger_1 = require("./logger");
41
- const AuthClient_1 = require("./pixiv/AuthClient");
42
- const PixivClient_1 = require("./pixiv/PixivClient");
43
- const Scheduler_1 = require("./scheduler/Scheduler");
44
- const Database_1 = require("./storage/Database");
45
- const token_maintenance_1 = require("./utils/token-maintenance");
46
6
  const CommandRegistry_1 = require("./commands/CommandRegistry");
47
7
  const commands_1 = require("./commands");
48
8
  const ArgumentParser_1 = require("./cli/ArgumentParser");
49
- const config_2 = require("./config");
50
- const login_helper_1 = require("./utils/login-helper");
51
- const defaults_1 = require("./config/defaults");
52
9
  const errors_1 = require("./utils/errors");
53
- const fs = __importStar(require("fs/promises"));
54
- const path = __importStar(require("path"));
55
- // Use ArgumentParser from CLI module
56
- const parseArgs = ArgumentParser_1.ArgumentParser.parse;
57
- /**
58
- * Main entry point for PixivFlow CLI
59
- *
60
- * This file has been refactored to use the new command system.
61
- * All command handlers have been moved to individual command classes in src/commands/.
62
- */
63
10
  /**
64
- * Main bootstrap function
11
+ * Handles fatal errors, prints user-friendly messages, and exits the process.
65
12
  */
66
- async function bootstrap() {
67
- // Initialize command registry
68
- const registry = new CommandRegistry_1.CommandRegistry();
69
- (0, commands_1.registerAllCommands)(registry);
70
- // Parse command line arguments
71
- const parsedArgs = parseArgs(process.argv.slice(2));
72
- const commandName = parsedArgs.command;
73
- // Prepare command context
74
- const configPath = (0, config_2.getConfigPath)(parsedArgs.options.config || undefined);
75
- // Special handling for refresh command: update config file with token before loading
76
- // This allows refresh command to work even when config file has placeholder token
77
- if (commandName === 'refresh' || commandName === 'r') {
78
- const refreshToken = parsedArgs.positional[0] || parsedArgs.options.token;
79
- if (refreshToken) {
80
- try {
81
- // Check if config file exists
82
- try {
83
- await fs.access(configPath);
84
- // Config file exists, update it with the token
85
- await (0, login_helper_1.updateConfigWithToken)(configPath, refreshToken);
86
- logger_1.logger.info('Updated config file with refresh token before validation');
87
- }
88
- catch {
89
- // Config file doesn't exist, create it with default structure
90
- const defaultConfig = (0, defaults_1.generateDefaultConfig)();
91
- defaultConfig.pixiv.refreshToken = refreshToken;
92
- // Ensure directory exists
93
- const configDir = path.dirname(configPath);
94
- await fs.mkdir(configDir, { recursive: true });
95
- await fs.writeFile(configPath, JSON.stringify(defaultConfig, null, 2), 'utf-8');
96
- logger_1.logger.info('Created config file with refresh token');
97
- }
98
- }
99
- catch (error) {
100
- // If updating config fails, log warning but continue
101
- // The refresh command will still work with the provided token
102
- logger_1.logger.warn('Failed to update config file with refresh token, continuing anyway', {
103
- error: error instanceof Error ? error.message : String(error),
104
- });
105
- }
106
- }
13
+ function handleFatalError(error) {
14
+ if (error instanceof errors_1.ConfigError) {
15
+ console.error(`\n❌ Configuration Error: ${error.message}\n`);
16
+ logger_1.logger.error('Configuration error', { error: error.message });
107
17
  }
108
- // Skip config validation for login commands - they will create/update the config
109
- const isLoginCommand = commandName === 'login' ||
110
- commandName === 'l' ||
111
- commandName === 'login-interactive' ||
112
- commandName === 'li' ||
113
- commandName === 'login-headless';
114
- // Also skip validation for help-related invocations so help can be shown without config
115
- const isHelpInvocation = commandName === 'help' ||
116
- commandName === '-h' ||
117
- commandName === '--help' ||
118
- !!parsedArgs.options.help ||
119
- !!parsedArgs.options.h ||
120
- !commandName;
121
- // Commands that do not require Pixiv authentication/token
122
- const tokenOptionalCommands = new Set([
123
- 'help', 'h', '--help',
124
- 'config', 'dirs', 'logs', 'setup', 'status', 'health', 'maintain', 'normalize', 'migrate-config', 'backup', 'monitor',
125
- // webui can boot without token; UI can guide login
126
- 'webui', 'w'
127
- ]);
128
- const isTokenOptional = commandName ? tokenOptionalCommands.has(commandName) : true;
129
- const config = (0, config_1.loadConfig)(configPath, isLoginCommand || isHelpInvocation || isTokenOptional);
130
- const context = {
131
- config,
132
- logger: logger_1.logger,
133
- configPath,
134
- };
135
- // Convert parsed args to CommandArgs format
136
- const commandArgs = {
137
- options: parsedArgs.options,
138
- positional: parsedArgs.positional,
139
- };
140
- // Handle help
141
- // Case 1: help command explicitly called (pixivflow help or pixivflow help <command>)
142
- if (commandName === 'help' || commandName === '-h' || commandName === '--help') {
143
- const helpCommand = registry.find('help');
144
- if (helpCommand) {
145
- const result = await helpCommand.execute(context, commandArgs);
146
- process.exit(result.success ? 0 : 1);
147
- }
148
- return;
18
+ else if (error instanceof errors_1.AuthenticationError) {
19
+ console.error('\n❌ Authentication Error');
20
+ console.error('════════════════════════════════════════════════════════════════');
21
+ console.error(error.message);
22
+ console.error('');
23
+ console.error('💡 Your refresh token may have expired or is invalid.');
24
+ console.error(' Please login again to get a new refresh token:');
25
+ console.error('');
26
+ console.error(' • Interactive login: pixivflow login');
27
+ console.error(' • Headless login: pixivflow login-headless');
28
+ console.error('════════════════════════════════════════════════════════════════\n');
29
+ logger_1.logger.error('Authentication failed', { error: error.message });
149
30
  }
150
- // Case 2: --help or -h option used with a command (pixivflow <command> --help)
151
- if (parsedArgs.options.help || parsedArgs.options.h) {
152
- if (commandName) {
153
- // Show help for specific command
154
- const helpCommand = registry.find('help');
155
- if (helpCommand) {
156
- // Pass the command name as positional argument
157
- const helpArgs = {
158
- options: {},
159
- positional: [commandName],
160
- };
161
- const result = await helpCommand.execute(context, helpArgs);
162
- process.exit(result.success ? 0 : 1);
163
- }
164
- }
165
- else {
166
- // No command specified, show general help
167
- const helpCommand = registry.find('help');
168
- if (helpCommand) {
169
- const result = await helpCommand.execute(context, commandArgs);
170
- process.exit(result.success ? 0 : 1);
171
- }
172
- }
173
- return;
31
+ else {
32
+ logger_1.logger.error('Fatal error during application startup', {
33
+ error: error instanceof Error ? error.stack ?? error.message : String(error),
34
+ });
174
35
  }
175
- // Case 3: No command specified, show general help
176
- if (!commandName) {
177
- const helpCommand = registry.find('help');
178
- if (helpCommand) {
179
- const result = await helpCommand.execute(context, commandArgs);
180
- process.exit(result.success ? 0 : 1);
36
+ process.exit(1);
37
+ }
38
+ /**
39
+ * Executes the given command.
40
+ */
41
+ async function executeCommand(registry, commandName, context, args) {
42
+ const command = registry.find(commandName);
43
+ if (!command) {
44
+ console.error(`\n❌ Unknown command: ${commandName}`);
45
+ // Provide command suggestions
46
+ const suggestions = registry.getSuggestions(commandName);
47
+ if (suggestions) {
48
+ console.error(suggestions);
181
49
  }
182
- return;
50
+ console.error('\n💡 Run "pixivflow help" to see all available commands');
51
+ console.error(' Or "pixivflow help <command>" for specific command help\n');
52
+ logger_1.logger.warn(`Command not found: ${commandName}`);
53
+ process.exit(1);
183
54
  }
184
- // Find and execute command
185
- const command = registry.find(commandName);
186
- if (command) {
187
- try {
188
- // Validate arguments if command has validation
189
- if (command.validate) {
190
- const validation = command.validate(commandArgs);
191
- if (!validation.valid) {
192
- console.error('[!]: Invalid arguments:');
193
- validation.errors.forEach((error) => {
194
- console.error(` - ${error}`);
195
- });
196
- if (command.getUsage) {
197
- console.error(`\nUsage:\n${command.getUsage()}`);
198
- }
199
- process.exit(1);
200
- }
201
- }
202
- const result = await command.execute(context, commandArgs);
203
- // Handle command result
204
- if (!result.success) {
205
- const errorMessage = result.error?.message || 'Command failed';
206
- if (result.error) {
207
- logger_1.logger.error('Command execution failed', { error: result.error });
55
+ try {
56
+ if (command.validate) {
57
+ const validation = command.validate(args);
58
+ if (!validation.valid) {
59
+ console.error('[!]: Invalid arguments:');
60
+ validation.errors.forEach((error) => console.error(` - ${error}`));
61
+ if (command.getUsage) {
62
+ console.error(`\nUsage:\n${command.getUsage()}`);
208
63
  }
209
64
  process.exit(1);
210
65
  }
211
- else {
212
- // For scheduler and webui commands, don't exit (they run indefinitely)
213
- if (commandName !== 'scheduler' && commandName !== 'webui' && commandName !== 'w') {
214
- process.exit(0);
215
- }
216
- }
217
66
  }
218
- catch (error) {
219
- logger_1.logger.error('Unexpected error during command execution', {
220
- error: error instanceof Error ? error.stack ?? error.message : String(error),
221
- });
67
+ const result = await command.execute(context, args);
68
+ if (!result.success) {
69
+ logger_1.logger.error('Command execution failed', { command: commandName, error: result.error });
222
70
  process.exit(1);
223
71
  }
224
- return;
72
+ // Decide exit behavior based on command metadata (long running)
73
+ const isLongRunning = typeof command.getMetadata === 'function'
74
+ ? command.getMetadata().longRunning === true
75
+ : false;
76
+ if (!isLongRunning) {
77
+ process.exit(0);
78
+ }
79
+ }
80
+ catch (error) {
81
+ logger_1.logger.error('Unexpected error during command execution', {
82
+ command: commandName,
83
+ error: error instanceof Error ? error.stack ?? error.message : String(error),
84
+ });
85
+ process.exit(1);
225
86
  }
226
- // Default behavior: run downloader (backward compatibility)
227
- // If no command is provided and scheduler is enabled, start scheduler
228
- // Otherwise, run download once
87
+ }
88
+ /**
89
+ * Executes the default behavior (download or scheduler) when no command is specified.
90
+ */
91
+ async function executeDefaultBehavior(context, args) {
92
+ const commandName = context.config.scheduler?.enabled ? 'scheduler' : 'download';
93
+ const command = new (commandName === 'scheduler' ? commands_1.SchedulerCommand : commands_1.DownloadCommand)();
94
+ logger_1.logger.info(`No command specified. Running default: ${commandName}`);
229
95
  try {
230
- const configPathArg = parsedArgs.options.config || undefined;
231
- const resolvedConfigPath = (0, config_1.getConfigPath)(configPathArg);
232
- const resolvedConfig = (0, config_1.loadConfig)(resolvedConfigPath);
233
- const database = new Database_1.Database(resolvedConfig.storage.databasePath);
234
- database.migrate();
235
- const auth = new AuthClient_1.PixivAuth(resolvedConfig.pixiv, resolvedConfig.network, database, resolvedConfigPath);
236
- const pixivClient = new PixivClient_1.PixivClient(auth, resolvedConfig);
237
- const fileService = new FileService_1.FileService(resolvedConfig.storage);
238
- const downloadManager = new DownloadManager_1.DownloadManager(resolvedConfig, pixivClient, database, fileService);
239
- await downloadManager.initialise();
240
- // Start token maintenance service for automatic token refresh
241
- const tokenMaintenance = (0, token_maintenance_1.createTokenMaintenanceService)(auth, resolvedConfig.pixiv, resolvedConfig.network, resolvedConfig);
242
- if (tokenMaintenance) {
243
- tokenMaintenance.start();
96
+ const result = await command.execute(context, args);
97
+ if (!result.success) {
98
+ logger_1.logger.error('Default command execution failed', { command: commandName, error: result.error });
99
+ process.exit(1);
244
100
  }
245
- const runJob = async () => {
246
- try {
247
- // Apply initial delay if configured
248
- if (resolvedConfig.initialDelay && resolvedConfig.initialDelay > 0) {
249
- logger_1.logger.info(`Waiting ${resolvedConfig.initialDelay}ms before starting download...`);
250
- await new Promise(resolve => setTimeout(resolve, resolvedConfig.initialDelay));
251
- }
252
- logger_1.logger.info('='.repeat(60));
253
- logger_1.logger.info('Starting Pixiv download job');
254
- logger_1.logger.info('='.repeat(60));
255
- const startTime = Date.now();
256
- await downloadManager.runAllTargets();
257
- const duration = Math.round((Date.now() - startTime) / 1000);
258
- logger_1.logger.info('='.repeat(60));
259
- logger_1.logger.info(`Pixiv download job finished (took ${duration}s)`);
260
- logger_1.logger.info('='.repeat(60));
261
- }
262
- catch (error) {
263
- // Handle authentication errors during download
264
- if (error instanceof errors_1.AuthenticationError) {
265
- console.error('\n❌ Authentication Error During Download');
266
- console.error('════════════════════════════════════════════════════════════════');
267
- console.error(error.message);
268
- console.error('');
269
- console.error('💡 Your refresh token has expired or is invalid.');
270
- console.error(' Please login again to get a new refresh token:');
271
- console.error('');
272
- console.error(' • Interactive login: pixivflow login');
273
- console.error(' • (If you have source code: npm run login)');
274
- console.error('');
275
- console.error('════════════════════════════════════════════════════════════════\n');
276
- logger_1.logger.error('Authentication failed during download', {
277
- error: error.message,
278
- });
279
- throw error; // Re-throw to be handled by outer catch
280
- }
281
- throw error; // Re-throw other errors
282
- }
283
- };
284
- const runOnce = !!(parsedArgs.options.once || process.argv.includes('--once'));
285
- if (runOnce || !resolvedConfig.scheduler.enabled) {
286
- if (!resolvedConfig.scheduler.enabled && !runOnce) {
287
- logger_1.logger.info('Scheduler disabled, running once and exiting');
288
- }
289
- await runJob();
290
- if (tokenMaintenance) {
291
- tokenMaintenance.stop();
292
- }
293
- database.close();
101
+ if (commandName === 'download') {
294
102
  process.exit(0);
295
103
  }
296
- const scheduler = new Scheduler_1.Scheduler(resolvedConfig.scheduler);
297
- scheduler.start(runJob);
298
- const cleanup = () => {
299
- logger_1.logger.info('Shutting down PixivFlow');
300
- scheduler.stop();
301
- if (tokenMaintenance) {
302
- tokenMaintenance.stop();
303
- }
304
- database.close();
305
- process.exit(0);
306
- };
307
- process.on('SIGINT', cleanup);
308
- process.on('SIGTERM', cleanup);
309
104
  }
310
105
  catch (error) {
311
- // Handle authentication errors with friendly user guidance
312
- if (error instanceof errors_1.AuthenticationError) {
313
- console.error('\n❌ Authentication Error');
314
- console.error('════════════════════════════════════════════════════════════════');
315
- console.error(error.message);
316
- console.error('');
317
- console.error('💡 Your refresh token has expired or is invalid.');
318
- console.error(' Please login again to get a new refresh token:');
319
- console.error('');
320
- console.error(' • Interactive login: pixivflow login');
321
- console.error(' • (If you have source code: npm run login)');
322
- console.error('');
323
- console.error('════════════════════════════════════════════════════════════════\n');
324
- logger_1.logger.error('Authentication failed - refresh token expired or invalid', {
325
- error: error.message,
326
- });
327
- process.exit(1);
106
+ handleFatalError(error);
107
+ }
108
+ }
109
+ /**
110
+ * Main bootstrap function for the CLI.
111
+ */
112
+ async function bootstrap() {
113
+ const registry = new CommandRegistry_1.CommandRegistry();
114
+ (0, commands_1.registerAllCommands)(registry);
115
+ let parsedArgs;
116
+ try {
117
+ parsedArgs = ArgumentParser_1.ArgumentParser.parse(process.argv.slice(2));
118
+ }
119
+ catch (error) {
120
+ if (error instanceof errors_1.VersionRequest) {
121
+ await new commands_1.VersionCommand().execute({}, { options: {}, positional: [] });
122
+ return;
328
123
  }
329
- if (error instanceof errors_1.ConfigError) {
330
- console.error('\nℹ️ Initial setup required');
331
- console.error('════════════════════════════════════════════════════════════════');
332
- console.error(error.message);
333
- console.error('');
334
- console.error('💡 You have not logged in yet or your config is incomplete.');
335
- console.error(' Please run one of the following commands to login and auto-fill your token:');
336
- console.error('');
337
- console.error(' • Interactive login: pixivflow login');
338
- console.error(' • Headless login: pixivflow login-headless');
339
- console.error('');
340
- console.error(' Or manually edit your config file to set pixiv.refreshToken.');
341
- console.error('════════════════════════════════════════════════════════════════\n');
342
- logger_1.logger.error('Configuration error - login/setup required', {
343
- error: error.message,
344
- });
345
- process.exit(1);
124
+ if (error instanceof errors_1.HelpRequest) {
125
+ const helpArgs = { options: {}, positional: [error.command].filter((c) => !!c) };
126
+ await new commands_1.HelpCommand().execute({}, helpArgs);
127
+ return;
346
128
  }
347
- logger_1.logger.error('Fatal error while starting PixivFlow', {
348
- error: error instanceof Error ? error.stack ?? error.message : String(error),
349
- });
350
- process.exit(1);
129
+ throw error;
130
+ }
131
+ const { command: commandName, options, positional } = parsedArgs;
132
+ const commandArgs = { options, positional };
133
+ // --- Pre-execution hooks ---
134
+ const configPath = (0, config_1.getConfigPath)(options.config);
135
+ const command = registry.find(commandName || '');
136
+ if (command && command.name === 'refresh') {
137
+ await commands_1.RefreshCommand.preExecute(commandArgs, configPath);
138
+ }
139
+ // --- Config loading and context creation ---
140
+ let config;
141
+ try {
142
+ const isLoginCommand = ['login', 'l', 'login-interactive', 'li', 'login-headless'].includes(commandName || '');
143
+ const tokenOptionalCommands = new Set(['config', 'dirs', 'logs', 'setup', 'status', 'health', 'maintain', 'normalize', 'migrate-config', 'backup', 'monitor', 'webui', 'w']);
144
+ const isTokenOptional = commandName ? tokenOptionalCommands.has(commandName) : true;
145
+ config = (0, config_1.loadConfig)(configPath, isLoginCommand || isTokenOptional || !commandName);
146
+ }
147
+ catch (error) {
148
+ return handleFatalError(error);
149
+ }
150
+ const context = { config, logger: logger_1.logger, configPath };
151
+ // --- Command execution ---
152
+ if (commandName) {
153
+ await executeCommand(registry, commandName, context, commandArgs);
154
+ }
155
+ else {
156
+ await executeDefaultBehavior(context, commandArgs);
351
157
  }
352
158
  }
353
- bootstrap();
159
+ bootstrap().catch(handleFatalError);
354
160
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "type": "commonjs",
3
3
  "name": "pixivflow",
4
- "version": "2.0.38",
4
+ "version": "2.0.39",
5
5
  "private": true
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AuthClient.d.ts","sourceRoot":"","sources":["../../src/pixiv/AuthClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAoB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAoBjE,qBAAa,SAAS;IAIlB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,UAAU,CAAC,CAAS;gBAGT,WAAW,EAAE,qBAAqB,EAClC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,QAAQ,EACnC,UAAU,CAAC,EAAE,MAAM;IAKR,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;YAUhC,kBAAkB;IAyGhC,OAAO,CAAC,kBAAkB;CAI3B"}
1
+ {"version":3,"file":"AuthClient.d.ts","sourceRoot":"","sources":["../../src/pixiv/AuthClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,EAAoB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAoBjE,qBAAa,SAAS;IAIlB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,UAAU,CAAC,CAAS;gBAGT,WAAW,EAAE,qBAAqB,EAClC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,QAAQ,EACnC,UAAU,CAAC,EAAE,MAAM;IAKR,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;YAUhC,kBAAkB;IA2HhC,OAAO,CAAC,kBAAkB;CAI3B"}
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.PixivAuth = void 0;
4
37
  const node_crypto_1 = require("node:crypto");
@@ -58,7 +91,7 @@ class PixivAuth {
58
91
  if (!response.ok) {
59
92
  // Check for authentication errors (401, 403) which indicate refresh token is invalid/expired
60
93
  if (response.status === 401 || response.status === 403) {
61
- const errorMessage = `Refresh token is invalid or expired (HTTP ${response.status}). Please login again.`;
94
+ const errorMessage = `Pixiv authentication failed (HTTP ${response.status}): Your refresh token is invalid or has expired.`;
62
95
  throw new errors_1.AuthenticationError(errorMessage);
63
96
  }
64
97
  throw new Error(`Failed to refresh token: ${response.status} ${response.statusText}`);
@@ -72,31 +105,47 @@ class PixivAuth {
72
105
  tokenType: data.token_type,
73
106
  };
74
107
  this.database.setToken(TOKEN_CACHE_KEY, stored);
75
- // CRITICAL: Auto-update refresh token in both database and config file
108
+ // CRITICAL: Auto-update refresh token in all storage locations
76
109
  // This ensures the refresh token never expires and is always up-to-date
77
110
  if (data.refresh_token && data.refresh_token !== this.credentials.refreshToken) {
78
- logger_1.logger.info('Received updated refresh token, updating storage and config file');
79
- // Store in database
111
+ logger_1.logger.info('Received updated refresh token, updating all storage locations');
112
+ // Update internal credentials immediately
113
+ this.credentials.refreshToken = data.refresh_token;
114
+ // 1. Store in database (primary storage)
80
115
  this.database.setToken(REFRESH_TOKEN_CACHE_KEY, {
81
116
  accessToken: '',
82
117
  expiresAt,
83
118
  refreshToken: data.refresh_token,
84
119
  tokenType: data.token_type,
85
120
  });
86
- // Auto-update config file to ensure refresh token never expires
121
+ logger_1.logger.debug('✓ Token saved to database');
122
+ // 2. Store in file system (unified storage)
123
+ try {
124
+ const { saveTokenToStorage } = await Promise.resolve().then(() => __importStar(require('../utils/token-manager')));
125
+ const databasePath = this.database ? this.database.databasePath : undefined;
126
+ saveTokenToStorage(data.refresh_token, databasePath);
127
+ logger_1.logger.debug('✓ Token saved to file system');
128
+ }
129
+ catch (error) {
130
+ logger_1.logger.warn('Failed to save token to file system', {
131
+ error: error instanceof Error ? error.message : String(error),
132
+ });
133
+ }
134
+ // 3. Auto-update config file to ensure refresh token never expires
87
135
  // This is the key to "one-time setup, forever working" solution
88
136
  if (this.configPath) {
89
137
  try {
90
138
  await (0, login_helper_1.updateConfigWithToken)(this.configPath, data.refresh_token);
91
- logger_1.logger.info('✓ Config file automatically updated with new refresh token');
139
+ logger_1.logger.debug('✓ Config file automatically updated with new refresh token');
92
140
  }
93
141
  catch (error) {
94
142
  logger_1.logger.warn('Failed to update config file with new refresh token', {
95
143
  error: error instanceof Error ? error.message : String(error),
96
144
  });
97
- // Don't throw - database update succeeded, config update is optional
145
+ // Don't throw - other storage updates succeeded
98
146
  }
99
147
  }
148
+ logger_1.logger.info('✓ Refresh token updated in all storage locations');
100
149
  }
101
150
  logger_1.logger.info('Refreshed Pixiv access token');
102
151
  return stored;