pixivflow 2.0.39 → 2.0.41

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 (114) hide show
  1. package/README.md +94 -572
  2. package/dist/cli/ArgumentParser.d.ts +2 -20
  3. package/dist/cli/ArgumentParser.d.ts.map +1 -1
  4. package/dist/cli/ArgumentParser.js +16 -29
  5. package/dist/cli/ArgumentParser.js.map +1 -1
  6. package/dist/commands/BackupCommand.d.ts +6 -0
  7. package/dist/commands/BackupCommand.d.ts.map +1 -1
  8. package/dist/commands/BackupCommand.js +6 -0
  9. package/dist/commands/BackupCommand.js.map +1 -1
  10. package/dist/commands/Command.d.ts +16 -0
  11. package/dist/commands/Command.d.ts.map +1 -1
  12. package/dist/commands/Command.js +9 -0
  13. package/dist/commands/Command.js.map +1 -1
  14. package/dist/commands/CommandRegistry.d.ts +24 -0
  15. package/dist/commands/CommandRegistry.d.ts.map +1 -1
  16. package/dist/commands/CommandRegistry.js +48 -0
  17. package/dist/commands/CommandRegistry.js.map +1 -1
  18. package/dist/commands/ConfigCommand.d.ts +6 -0
  19. package/dist/commands/ConfigCommand.d.ts.map +1 -1
  20. package/dist/commands/ConfigCommand.js +6 -0
  21. package/dist/commands/ConfigCommand.js.map +1 -1
  22. package/dist/commands/DirsCommand.d.ts +6 -0
  23. package/dist/commands/DirsCommand.d.ts.map +1 -1
  24. package/dist/commands/DirsCommand.js +6 -0
  25. package/dist/commands/DirsCommand.js.map +1 -1
  26. package/dist/commands/DownloadCommand.d.ts +6 -0
  27. package/dist/commands/DownloadCommand.d.ts.map +1 -1
  28. package/dist/commands/DownloadCommand.js +7 -1
  29. package/dist/commands/DownloadCommand.js.map +1 -1
  30. package/dist/commands/HealthCommand.d.ts +7 -0
  31. package/dist/commands/HealthCommand.d.ts.map +1 -1
  32. package/dist/commands/HealthCommand.js +7 -0
  33. package/dist/commands/HealthCommand.js.map +1 -1
  34. package/dist/commands/HelpCommand.d.ts +7 -0
  35. package/dist/commands/HelpCommand.d.ts.map +1 -1
  36. package/dist/commands/HelpCommand.js +22 -29
  37. package/dist/commands/HelpCommand.js.map +1 -1
  38. package/dist/commands/LoginCommand.d.ts +7 -0
  39. package/dist/commands/LoginCommand.d.ts.map +1 -1
  40. package/dist/commands/LoginCommand.js +7 -0
  41. package/dist/commands/LoginCommand.js.map +1 -1
  42. package/dist/commands/LoginHeadlessCommand.d.ts +7 -0
  43. package/dist/commands/LoginHeadlessCommand.d.ts.map +1 -1
  44. package/dist/commands/LoginHeadlessCommand.js +7 -0
  45. package/dist/commands/LoginHeadlessCommand.js.map +1 -1
  46. package/dist/commands/LogsCommand.d.ts +6 -0
  47. package/dist/commands/LogsCommand.d.ts.map +1 -1
  48. package/dist/commands/LogsCommand.js +6 -0
  49. package/dist/commands/LogsCommand.js.map +1 -1
  50. package/dist/commands/MaintainCommand.d.ts +6 -0
  51. package/dist/commands/MaintainCommand.d.ts.map +1 -1
  52. package/dist/commands/MaintainCommand.js +6 -0
  53. package/dist/commands/MaintainCommand.js.map +1 -1
  54. package/dist/commands/MigrateConfigCommand.d.ts +6 -0
  55. package/dist/commands/MigrateConfigCommand.d.ts.map +1 -1
  56. package/dist/commands/MigrateConfigCommand.js +6 -0
  57. package/dist/commands/MigrateConfigCommand.js.map +1 -1
  58. package/dist/commands/MonitorCommand.d.ts +6 -0
  59. package/dist/commands/MonitorCommand.d.ts.map +1 -1
  60. package/dist/commands/MonitorCommand.js +6 -0
  61. package/dist/commands/MonitorCommand.js.map +1 -1
  62. package/dist/commands/NormalizeCommand.d.ts +6 -0
  63. package/dist/commands/NormalizeCommand.d.ts.map +1 -1
  64. package/dist/commands/NormalizeCommand.js +6 -0
  65. package/dist/commands/NormalizeCommand.js.map +1 -1
  66. package/dist/commands/RandomDownloadCommand.d.ts +7 -1
  67. package/dist/commands/RandomDownloadCommand.d.ts.map +1 -1
  68. package/dist/commands/RandomDownloadCommand.js +7 -1
  69. package/dist/commands/RandomDownloadCommand.js.map +1 -1
  70. package/dist/commands/RefreshCommand.d.ts +12 -0
  71. package/dist/commands/RefreshCommand.d.ts.map +1 -1
  72. package/dist/commands/RefreshCommand.js +82 -0
  73. package/dist/commands/RefreshCommand.js.map +1 -1
  74. package/dist/commands/SchedulerCommand.d.ts +6 -0
  75. package/dist/commands/SchedulerCommand.d.ts.map +1 -1
  76. package/dist/commands/SchedulerCommand.js +7 -1
  77. package/dist/commands/SchedulerCommand.js.map +1 -1
  78. package/dist/commands/SetupCommand.d.ts +6 -0
  79. package/dist/commands/SetupCommand.d.ts.map +1 -1
  80. package/dist/commands/SetupCommand.js +6 -0
  81. package/dist/commands/SetupCommand.js.map +1 -1
  82. package/dist/commands/StatusCommand.d.ts +6 -0
  83. package/dist/commands/StatusCommand.d.ts.map +1 -1
  84. package/dist/commands/StatusCommand.js +6 -0
  85. package/dist/commands/StatusCommand.js.map +1 -1
  86. package/dist/commands/VersionCommand.d.ts +21 -0
  87. package/dist/commands/VersionCommand.d.ts.map +1 -0
  88. package/dist/commands/VersionCommand.js +81 -0
  89. package/dist/commands/VersionCommand.js.map +1 -0
  90. package/dist/commands/WebUICommand.d.ts +6 -0
  91. package/dist/commands/WebUICommand.d.ts.map +1 -1
  92. package/dist/commands/WebUICommand.js +6 -0
  93. package/dist/commands/WebUICommand.js.map +1 -1
  94. package/dist/commands/index.d.ts +2 -1
  95. package/dist/commands/index.d.ts.map +1 -1
  96. package/dist/commands/index.js +4 -1
  97. package/dist/commands/index.js.map +1 -1
  98. package/dist/commands/metadata.d.ts +38 -0
  99. package/dist/commands/metadata.d.ts.map +1 -0
  100. package/dist/commands/metadata.js +42 -0
  101. package/dist/commands/metadata.js.map +1 -0
  102. package/dist/commands/suggestions.d.ts +22 -0
  103. package/dist/commands/suggestions.d.ts.map +1 -0
  104. package/dist/commands/suggestions.js +85 -0
  105. package/dist/commands/suggestions.js.map +1 -0
  106. package/dist/index.js +126 -343
  107. package/dist/index.js.map +1 -1
  108. package/dist/package.json +1 -1
  109. package/dist/utils/errors.d.ts +14 -0
  110. package/dist/utils/errors.d.ts.map +1 -1
  111. package/dist/utils/errors.js +24 -1
  112. package/dist/utils/errors.js.map +1 -1
  113. package/dist/webui/package.json +1 -1
  114. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,377 +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
- let config;
130
- try {
131
- config = (0, config_1.loadConfig)(configPath, isLoginCommand || isHelpInvocation || isTokenOptional);
132
- }
133
- catch (error) {
134
- // Handle config loading errors with friendly messages
135
- if (error instanceof errors_1.ConfigError) {
136
- console.error('\n' + error.message + '\n');
137
- logger_1.logger.error('Configuration error', {
138
- error: error.message,
139
- });
140
- process.exit(1);
141
- }
142
- if (error instanceof errors_1.AuthenticationError) {
143
- console.error('\n❌ Authentication Error');
144
- console.error('════════════════════════════════════════════════════════════════');
145
- console.error(error.message);
146
- console.error('');
147
- console.error('💡 Your refresh token has expired or is invalid.');
148
- console.error(' Please login again to get a new refresh token:');
149
- console.error('');
150
- console.error(' • Interactive login: pixivflow login');
151
- console.error(' • Headless login: pixivflow login-headless');
152
- console.error('');
153
- console.error('════════════════════════════════════════════════════════════════\n');
154
- logger_1.logger.error('Authentication failed', {
155
- error: error.message,
156
- });
157
- process.exit(1);
158
- }
159
- // Re-throw other errors
160
- throw error;
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 });
161
30
  }
162
- const context = {
163
- config,
164
- logger: logger_1.logger,
165
- configPath,
166
- };
167
- // Convert parsed args to CommandArgs format
168
- const commandArgs = {
169
- options: parsedArgs.options,
170
- positional: parsedArgs.positional,
171
- };
172
- // Handle help
173
- // Case 1: help command explicitly called (pixivflow help or pixivflow help <command>)
174
- if (commandName === 'help' || commandName === '-h' || commandName === '--help') {
175
- const helpCommand = registry.find('help');
176
- if (helpCommand) {
177
- const result = await helpCommand.execute(context, commandArgs);
178
- process.exit(result.success ? 0 : 1);
179
- }
180
- return;
181
- }
182
- // Case 2: --help or -h option used with a command (pixivflow <command> --help)
183
- if (parsedArgs.options.help || parsedArgs.options.h) {
184
- if (commandName) {
185
- // Show help for specific command
186
- const helpCommand = registry.find('help');
187
- if (helpCommand) {
188
- // Pass the command name as positional argument
189
- const helpArgs = {
190
- options: {},
191
- positional: [commandName],
192
- };
193
- const result = await helpCommand.execute(context, helpArgs);
194
- process.exit(result.success ? 0 : 1);
195
- }
196
- }
197
- else {
198
- // No command specified, show general help
199
- const helpCommand = registry.find('help');
200
- if (helpCommand) {
201
- const result = await helpCommand.execute(context, commandArgs);
202
- process.exit(result.success ? 0 : 1);
203
- }
204
- }
205
- 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
+ });
206
35
  }
207
- // Case 3: No command specified, show general help
208
- if (!commandName) {
209
- const helpCommand = registry.find('help');
210
- if (helpCommand) {
211
- const result = await helpCommand.execute(context, commandArgs);
212
- 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);
213
49
  }
214
- 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);
215
54
  }
216
- // Find and execute command
217
- const command = registry.find(commandName);
218
- if (command) {
219
- try {
220
- // Validate arguments if command has validation
221
- if (command.validate) {
222
- const validation = command.validate(commandArgs);
223
- if (!validation.valid) {
224
- console.error('[!]: Invalid arguments:');
225
- validation.errors.forEach((error) => {
226
- console.error(` - ${error}`);
227
- });
228
- if (command.getUsage) {
229
- console.error(`\nUsage:\n${command.getUsage()}`);
230
- }
231
- process.exit(1);
232
- }
233
- }
234
- const result = await command.execute(context, commandArgs);
235
- // Handle command result
236
- if (!result.success) {
237
- const errorMessage = result.error?.message || 'Command failed';
238
- if (result.error) {
239
- 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()}`);
240
63
  }
241
64
  process.exit(1);
242
65
  }
243
- else {
244
- // For scheduler and webui commands, don't exit (they run indefinitely)
245
- if (commandName !== 'scheduler' && commandName !== 'webui' && commandName !== 'w') {
246
- process.exit(0);
247
- }
248
- }
249
66
  }
250
- catch (error) {
251
- logger_1.logger.error('Unexpected error during command execution', {
252
- error: error instanceof Error ? error.stack ?? error.message : String(error),
253
- });
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 });
254
70
  process.exit(1);
255
71
  }
256
- 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
+ }
257
79
  }
258
- // Default behavior: run downloader (backward compatibility)
259
- // If no command is provided and scheduler is enabled, start scheduler
260
- // Otherwise, run download once
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);
86
+ }
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}`);
261
95
  try {
262
- const configPathArg = parsedArgs.options.config || undefined;
263
- const resolvedConfigPath = (0, config_1.getConfigPath)(configPathArg);
264
- const resolvedConfig = (0, config_1.loadConfig)(resolvedConfigPath);
265
- const database = new Database_1.Database(resolvedConfig.storage.databasePath);
266
- database.migrate();
267
- const auth = new AuthClient_1.PixivAuth(resolvedConfig.pixiv, resolvedConfig.network, database, resolvedConfigPath);
268
- const pixivClient = new PixivClient_1.PixivClient(auth, resolvedConfig);
269
- const fileService = new FileService_1.FileService(resolvedConfig.storage);
270
- const downloadManager = new DownloadManager_1.DownloadManager(resolvedConfig, pixivClient, database, fileService);
271
- await downloadManager.initialise();
272
- // Start token maintenance service for automatic token refresh
273
- const tokenMaintenance = (0, token_maintenance_1.createTokenMaintenanceService)(auth, resolvedConfig.pixiv, resolvedConfig.network, resolvedConfig);
274
- if (tokenMaintenance) {
275
- 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);
276
100
  }
277
- const runJob = async () => {
278
- try {
279
- // Apply initial delay if configured
280
- if (resolvedConfig.initialDelay && resolvedConfig.initialDelay > 0) {
281
- logger_1.logger.info(`Waiting ${resolvedConfig.initialDelay}ms before starting download...`);
282
- await new Promise(resolve => setTimeout(resolve, resolvedConfig.initialDelay));
283
- }
284
- logger_1.logger.info('='.repeat(60));
285
- logger_1.logger.info('Starting Pixiv download job');
286
- logger_1.logger.info('='.repeat(60));
287
- const startTime = Date.now();
288
- await downloadManager.runAllTargets();
289
- const duration = Math.round((Date.now() - startTime) / 1000);
290
- logger_1.logger.info('='.repeat(60));
291
- logger_1.logger.info(`Pixiv download job finished (took ${duration}s)`);
292
- logger_1.logger.info('='.repeat(60));
293
- }
294
- catch (error) {
295
- // Handle authentication errors during download
296
- if (error instanceof errors_1.AuthenticationError) {
297
- console.error('\n❌ Authentication Error During Download');
298
- console.error('════════════════════════════════════════════════════════════════');
299
- console.error(error.message);
300
- console.error('');
301
- console.error('💡 Your refresh token has expired or is invalid.');
302
- console.error(' Please login again to get a new refresh token:');
303
- console.error('');
304
- console.error(' • Interactive login: pixivflow login');
305
- console.error(' • (If you have source code: npm run login)');
306
- console.error('');
307
- console.error('════════════════════════════════════════════════════════════════\n');
308
- logger_1.logger.error('Authentication failed during download', {
309
- error: error.message,
310
- });
311
- throw error; // Re-throw to be handled by outer catch
312
- }
313
- throw error; // Re-throw other errors
314
- }
315
- };
316
- const runOnce = !!(parsedArgs.options.once || process.argv.includes('--once'));
317
- if (runOnce || !resolvedConfig.scheduler.enabled) {
318
- if (!resolvedConfig.scheduler.enabled && !runOnce) {
319
- logger_1.logger.info('Scheduler disabled, running once and exiting');
320
- }
321
- await runJob();
322
- if (tokenMaintenance) {
323
- tokenMaintenance.stop();
324
- }
325
- database.close();
101
+ if (commandName === 'download') {
326
102
  process.exit(0);
327
103
  }
328
- const scheduler = new Scheduler_1.Scheduler(resolvedConfig.scheduler);
329
- scheduler.start(runJob);
330
- const cleanup = () => {
331
- logger_1.logger.info('Shutting down PixivFlow');
332
- scheduler.stop();
333
- if (tokenMaintenance) {
334
- tokenMaintenance.stop();
335
- }
336
- database.close();
337
- process.exit(0);
338
- };
339
- process.on('SIGINT', cleanup);
340
- process.on('SIGTERM', cleanup);
341
104
  }
342
105
  catch (error) {
343
- // Handle authentication errors with friendly user guidance
344
- if (error instanceof errors_1.AuthenticationError) {
345
- console.error('\n❌ Authentication Error');
346
- console.error('════════════════════════════════════════════════════════════════');
347
- console.error(error.message);
348
- console.error('');
349
- console.error('💡 Your refresh token has expired or is invalid.');
350
- console.error(' Please login again to get a new refresh token:');
351
- console.error('');
352
- console.error(' • Interactive login: pixivflow login');
353
- console.error(' • (If you have source code: npm run login)');
354
- console.error('');
355
- console.error('════════════════════════════════════════════════════════════════\n');
356
- logger_1.logger.error('Authentication failed - refresh token expired or invalid', {
357
- error: error.message,
358
- });
359
- 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;
360
123
  }
361
- if (error instanceof errors_1.ConfigError) {
362
- // The ConfigError message already contains friendly guidance if it's token-related
363
- // Just print the message directly
364
- console.error('\n' + error.message + '\n');
365
- logger_1.logger.error('Configuration error', {
366
- error: error.message,
367
- });
368
- 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;
369
128
  }
370
- logger_1.logger.error('Fatal error while starting PixivFlow', {
371
- error: error instanceof Error ? error.stack ?? error.message : String(error),
372
- });
373
- 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);
374
157
  }
375
158
  }
376
- bootstrap();
159
+ bootstrap().catch(handleFatalError);
377
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.39",
4
+ "version": "2.0.41",
5
5
  "private": true
6
6
  }
@@ -31,6 +31,20 @@ export declare class DownloadError extends PixivFlowError {
31
31
  export declare class DatabaseError extends PixivFlowError {
32
32
  constructor(message: string, cause?: Error);
33
33
  }
34
+ /**
35
+ * A special error-like class to signal a version request.
36
+ * This is used for early exit without a full error stack.
37
+ */
38
+ export declare class VersionRequest extends Error {
39
+ constructor();
40
+ }
41
+ /**
42
+ * A special error-like class to signal a help request.
43
+ */
44
+ export declare class HelpRequest extends Error {
45
+ readonly command?: string | undefined;
46
+ constructor(command?: string | undefined);
47
+ }
34
48
  /**
35
49
  * Check if an error is a 404 (not found) error
36
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Provides consistent error types and handling patterns across the application
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ErrorRecoveryStrategy = exports.DatabaseError = exports.DownloadError = exports.NetworkError = exports.AuthenticationError = exports.ConfigError = exports.PixivFlowError = void 0;
7
+ exports.ErrorRecoveryStrategy = exports.HelpRequest = exports.VersionRequest = exports.DatabaseError = exports.DownloadError = exports.NetworkError = exports.AuthenticationError = exports.ConfigError = exports.PixivFlowError = void 0;
8
8
  exports.is404Error = is404Error;
9
9
  exports.isSkipableError = isSkipableError;
10
10
  exports.getErrorMessage = getErrorMessage;
@@ -75,6 +75,29 @@ class DatabaseError extends PixivFlowError {
75
75
  }
76
76
  }
77
77
  exports.DatabaseError = DatabaseError;
78
+ /**
79
+ * A special error-like class to signal a version request.
80
+ * This is used for early exit without a full error stack.
81
+ */
82
+ class VersionRequest extends Error {
83
+ constructor() {
84
+ super('Version requested');
85
+ this.name = 'VersionRequest';
86
+ }
87
+ }
88
+ exports.VersionRequest = VersionRequest;
89
+ /**
90
+ * A special error-like class to signal a help request.
91
+ */
92
+ class HelpRequest extends Error {
93
+ command;
94
+ constructor(command) {
95
+ super('Help requested');
96
+ this.command = command;
97
+ this.name = 'HelpRequest';
98
+ }
99
+ }
100
+ exports.HelpRequest = HelpRequest;
78
101
  /**
79
102
  * Check if an error is a 404 (not found) error
80
103
  */