pixivflow 2.15.0 → 2.16.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 (144) hide show
  1. package/dist/auth/PixivAuth.d.ts +18 -0
  2. package/dist/auth/PixivAuth.d.ts.map +1 -0
  3. package/dist/auth/PixivAuth.js +200 -0
  4. package/dist/auth/PixivAuth.js.map +1 -0
  5. package/dist/commands/DoctorCommand.d.ts.map +1 -1
  6. package/dist/commands/DoctorCommand.js +23 -0
  7. package/dist/commands/DoctorCommand.js.map +1 -1
  8. package/dist/commands/DownloadCommand.js +4 -4
  9. package/dist/commands/DownloadCommand.js.map +1 -1
  10. package/dist/commands/HealthCommand.d.ts.map +1 -1
  11. package/dist/commands/HealthCommand.js +14 -1
  12. package/dist/commands/HealthCommand.js.map +1 -1
  13. package/dist/commands/RandomDownloadCommand.js +4 -4
  14. package/dist/commands/RandomDownloadCommand.js.map +1 -1
  15. package/dist/commands/TagsCommand.js +4 -4
  16. package/dist/commands/TagsCommand.js.map +1 -1
  17. package/dist/commands/TopicCommand.d.ts.map +1 -1
  18. package/dist/commands/TopicCommand.js +4 -4
  19. package/dist/commands/TopicCommand.js.map +1 -1
  20. package/dist/commands/scheduler-runtime.d.ts +2 -2
  21. package/dist/commands/scheduler-runtime.d.ts.map +1 -1
  22. package/dist/commands/scheduler-runtime.js +4 -4
  23. package/dist/commands/scheduler-runtime.js.map +1 -1
  24. package/dist/config/types.d.ts +7 -0
  25. package/dist/config/types.d.ts.map +1 -1
  26. package/dist/download/IllustrationDownloader.d.ts +1 -1
  27. package/dist/download/IllustrationDownloader.d.ts.map +1 -1
  28. package/dist/download/NovelDownloader.d.ts +1 -1
  29. package/dist/download/NovelDownloader.d.ts.map +1 -1
  30. package/dist/download/RankingService.d.ts +1 -1
  31. package/dist/download/RankingService.d.ts.map +1 -1
  32. package/dist/download/handlers/IllustrationTargetHandler.d.ts.map +1 -1
  33. package/dist/download/handlers/IllustrationTargetHandler.js +12 -5
  34. package/dist/download/handlers/IllustrationTargetHandler.js.map +1 -1
  35. package/dist/download/handlers/NovelTargetHandler.d.ts.map +1 -1
  36. package/dist/download/handlers/NovelTargetHandler.js +12 -5
  37. package/dist/download/handlers/NovelTargetHandler.js.map +1 -1
  38. package/dist/download/pipeline/DownloadPipeline.d.ts +1 -1
  39. package/dist/download/pipeline/DownloadPipeline.d.ts.map +1 -1
  40. package/dist/download/plan/DownloadPlanner.d.ts +1 -1
  41. package/dist/download/plan/DownloadPlanner.d.ts.map +1 -1
  42. package/dist/download/recovery/ErrorRecovery.d.ts.map +1 -1
  43. package/dist/download/recovery/ErrorRecovery.js +8 -2
  44. package/dist/download/recovery/ErrorRecovery.js.map +1 -1
  45. package/dist/interfaces/IPixivClient.d.ts +1 -5
  46. package/dist/interfaces/IPixivClient.d.ts.map +1 -1
  47. package/dist/package.json +1 -1
  48. package/dist/pixiv/AuthClient.d.ts +6 -12
  49. package/dist/pixiv/AuthClient.d.ts.map +1 -1
  50. package/dist/pixiv/AuthClient.js +7 -188
  51. package/dist/pixiv/AuthClient.js.map +1 -1
  52. package/dist/pixiv/PixivClient.d.ts +14 -156
  53. package/dist/pixiv/PixivClient.d.ts.map +1 -1
  54. package/dist/pixiv/PixivClient.js +15 -292
  55. package/dist/pixiv/PixivClient.js.map +1 -1
  56. package/dist/pixiv-client/PixivAuthTokenProvider.d.ts +16 -0
  57. package/dist/pixiv-client/PixivAuthTokenProvider.d.ts.map +1 -0
  58. package/dist/pixiv-client/PixivAuthTokenProvider.js +27 -0
  59. package/dist/pixiv-client/PixivAuthTokenProvider.js.map +1 -0
  60. package/dist/pixiv-client/PixivFlowPixivClient.d.ts +77 -0
  61. package/dist/pixiv-client/PixivFlowPixivClient.d.ts.map +1 -0
  62. package/dist/pixiv-client/PixivFlowPixivClient.js +146 -0
  63. package/dist/pixiv-client/PixivFlowPixivClient.js.map +1 -0
  64. package/dist/pixiv-client/TargetSearchRunner.d.ts +29 -0
  65. package/dist/pixiv-client/TargetSearchRunner.d.ts.map +1 -0
  66. package/dist/pixiv-client/TargetSearchRunner.js +182 -0
  67. package/dist/pixiv-client/TargetSearchRunner.js.map +1 -0
  68. package/dist/pixiv-client/createPixivFlowClient.d.ts +11 -0
  69. package/dist/pixiv-client/createPixivFlowClient.d.ts.map +1 -0
  70. package/dist/pixiv-client/createPixivFlowClient.js +29 -0
  71. package/dist/pixiv-client/createPixivFlowClient.js.map +1 -0
  72. package/dist/pixiv-client/query-mapper.d.ts +14 -0
  73. package/dist/pixiv-client/query-mapper.d.ts.map +1 -0
  74. package/dist/pixiv-client/query-mapper.js +63 -0
  75. package/dist/pixiv-client/query-mapper.js.map +1 -0
  76. package/dist/random-download.js +4 -4
  77. package/dist/random-download.js.map +1 -1
  78. package/dist/storage/Database.d.ts +4 -0
  79. package/dist/storage/Database.d.ts.map +1 -1
  80. package/dist/storage/Database.js +7 -0
  81. package/dist/storage/Database.js.map +1 -1
  82. package/dist/storage/DatabaseMigration.d.ts.map +1 -1
  83. package/dist/storage/DatabaseMigration.js +8 -0
  84. package/dist/storage/DatabaseMigration.js.map +1 -1
  85. package/dist/storage/repositories/RateLimitStateRepository.d.ts +17 -0
  86. package/dist/storage/repositories/RateLimitStateRepository.d.ts.map +1 -0
  87. package/dist/storage/repositories/RateLimitStateRepository.js +46 -0
  88. package/dist/storage/repositories/RateLimitStateRepository.js.map +1 -0
  89. package/dist/tags/types.d.ts +1 -1
  90. package/dist/tags/types.d.ts.map +1 -1
  91. package/dist/utils/concurrency.d.ts.map +1 -1
  92. package/dist/utils/concurrency.js +2 -1
  93. package/dist/utils/concurrency.js.map +1 -1
  94. package/dist/utils/errors.d.ts +20 -0
  95. package/dist/utils/errors.d.ts.map +1 -1
  96. package/dist/utils/errors.js +56 -1
  97. package/dist/utils/errors.js.map +1 -1
  98. package/dist/utils/pixiv-sort.d.ts +1 -1
  99. package/dist/utils/pixiv-sort.d.ts.map +1 -1
  100. package/dist/utils/pixiv-utils.d.ts +1 -1
  101. package/dist/utils/pixiv-utils.d.ts.map +1 -1
  102. package/dist/utils/token-maintenance.d.ts +1 -1
  103. package/dist/utils/token-maintenance.d.ts.map +1 -1
  104. package/dist/version.js +1 -1
  105. package/dist/webui/package.json +1 -1
  106. package/dist/webui/services/DownloadTaskManager.js +4 -4
  107. package/dist/webui/services/DownloadTaskManager.js.map +1 -1
  108. package/package.json +11 -4
  109. package/dist/pixiv/IPixivRequestHandler.d.ts +0 -26
  110. package/dist/pixiv/IPixivRequestHandler.d.ts.map +0 -1
  111. package/dist/pixiv/IPixivRequestHandler.js +0 -3
  112. package/dist/pixiv/IPixivRequestHandler.js.map +0 -1
  113. package/dist/pixiv/RateLimitCoordinator.d.ts +0 -30
  114. package/dist/pixiv/RateLimitCoordinator.d.ts.map +0 -1
  115. package/dist/pixiv/RateLimitCoordinator.js +0 -66
  116. package/dist/pixiv/RateLimitCoordinator.js.map +0 -1
  117. package/dist/pixiv/client/IllustService.d.ts +0 -24
  118. package/dist/pixiv/client/IllustService.d.ts.map +0 -1
  119. package/dist/pixiv/client/IllustService.js +0 -70
  120. package/dist/pixiv/client/IllustService.js.map +0 -1
  121. package/dist/pixiv/client/MediaDownloadService.d.ts +0 -11
  122. package/dist/pixiv/client/MediaDownloadService.d.ts.map +0 -1
  123. package/dist/pixiv/client/MediaDownloadService.js +0 -22
  124. package/dist/pixiv/client/MediaDownloadService.js.map +0 -1
  125. package/dist/pixiv/client/NovelService.d.ts +0 -30
  126. package/dist/pixiv/client/NovelService.d.ts.map +0 -1
  127. package/dist/pixiv/client/NovelService.js +0 -203
  128. package/dist/pixiv/client/NovelService.js.map +0 -1
  129. package/dist/pixiv/client/PixivApiCore.d.ts +0 -52
  130. package/dist/pixiv/client/PixivApiCore.d.ts.map +0 -1
  131. package/dist/pixiv/client/PixivApiCore.js +0 -412
  132. package/dist/pixiv/client/PixivApiCore.js.map +0 -1
  133. package/dist/pixiv/client/SearchService.d.ts +0 -21
  134. package/dist/pixiv/client/SearchService.d.ts.map +0 -1
  135. package/dist/pixiv/client/SearchService.js +0 -207
  136. package/dist/pixiv/client/SearchService.js.map +0 -1
  137. package/dist/pixiv/client/search/SearchFilters.d.ts +0 -31
  138. package/dist/pixiv/client/search/SearchFilters.d.ts.map +0 -1
  139. package/dist/pixiv/client/search/SearchFilters.js +0 -102
  140. package/dist/pixiv/client/search/SearchFilters.js.map +0 -1
  141. package/dist/pixiv/types.d.ts +0 -72
  142. package/dist/pixiv/types.d.ts.map +0 -1
  143. package/dist/pixiv/types.js +0 -6
  144. package/dist/pixiv/types.js.map +0 -1
@@ -1,295 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PixivClient = void 0;
4
- const undici_1 = require("undici");
5
- const logger_1 = require("../logger");
6
- const date_utils_1 = require("../utils/date-utils");
7
- const pixiv_utils_1 = require("../utils/pixiv-utils");
8
- const PixivApiCore_1 = require("./client/PixivApiCore");
9
- const RateLimitCoordinator_1 = require("./RateLimitCoordinator");
10
- const IllustService_1 = require("./client/IllustService");
11
- const NovelService_1 = require("./client/NovelService");
12
- const MediaDownloadService_1 = require("./client/MediaDownloadService");
13
- const SearchService_1 = require("./client/SearchService");
14
- class PixivClient {
15
- auth;
16
- config;
17
- baseUrl = 'https://app-api.pixiv.net/';
18
- proxyAgent;
19
- apiCore;
20
- rateLimiter;
21
- illustService;
22
- novelService;
23
- mediaService;
24
- searchService;
25
- constructor(auth, config) {
26
- this.auth = auth;
27
- this.config = config;
28
- // Setup proxy agent if configured
29
- // Note: This proxyAgent is currently unused as all requests go through PixivApiCore
30
- // Keeping it for potential future use or backward compatibility
31
- const proxy = this.config.network?.proxy;
32
- if (proxy?.enabled && proxy.host && proxy.port) {
33
- // Normalize protocol to lowercase for consistent comparison
34
- const protocol = (proxy.protocol || 'http').toLowerCase();
35
- const auth = proxy.username && proxy.password
36
- ? `${proxy.username}:${proxy.password}@`
37
- : '';
38
- const proxyUrl = `${protocol}://${auth}${proxy.host}:${proxy.port}`;
39
- // Only create ProxyAgent for HTTP/HTTPS protocols (SOCKS is handled by PixivApiCore)
40
- if (protocol === 'http' || protocol === 'https') {
41
- this.proxyAgent = new undici_1.ProxyAgent(proxyUrl);
42
- logger_1.logger.info('Proxy enabled', {
43
- protocol,
44
- host: proxy.host,
45
- port: proxy.port
46
- });
47
- }
48
- else if (protocol === 'socks4' || protocol === 'socks5' || protocol === 'socks') {
49
- // SOCKS proxy will be handled by PixivApiCore using socks-proxy-agent
50
- logger_1.logger.info('SOCKS proxy configured (will be handled by PixivApiCore)', {
51
- protocol,
52
- host: proxy.host,
53
- port: proxy.port,
54
- });
55
- }
56
- else {
57
- logger_1.logger.warn('Unknown proxy protocol, skipping ProxyAgent creation', {
58
- protocol,
59
- host: proxy.host,
60
- port: proxy.port,
61
- });
62
- }
63
- }
64
- // Initialize PixivApiCore for HTTP concerns (retry/timeout/rate-limit/proxy)
65
- const network = this.config.network ?? {};
66
- const proxyUrlStr = (() => {
67
- const p = this.config.network?.proxy;
68
- if (p?.enabled && p.host && p.port) {
69
- // Normalize protocol to lowercase for consistent comparison
70
- const protocol = (p.protocol || 'http').toLowerCase();
71
- const auth = p.username && p.password ? `${p.username}:${p.password}@` : '';
72
- return `${protocol}://${auth}${p.host}:${p.port}`;
73
- }
74
- return undefined;
75
- })();
76
- // ONE global gate: a 429 anywhere parks the whole Pixiv client, avoiding
77
- // inner*outer request amplification. Default request retry is small (the
78
- // outbox/scheduler own durable retry across runs).
79
- // Default pacing is 0: the gate's job is the shared 429 cooldown, not an
80
- // artificial per-request delay. Operators can opt into pacing explicitly.
81
- const pace = network.requestPacingMs ?? 0;
82
- this.rateLimiter = new RateLimitCoordinator_1.RateLimitCoordinator(pace);
83
- this.apiCore = new PixivApiCore_1.PixivApiCore({
84
- baseUrl: 'https://app-api.pixiv.net',
85
- userAgent: this.config.pixiv.userAgent,
86
- defaultTimeoutMs: network.timeoutMs ?? 30_000,
87
- maxRetries: network.retries ?? 2,
88
- proxyUrl: proxyUrlStr,
89
- getAccessToken: () => this.auth.getAccessToken(),
90
- rateLimiter: this.rateLimiter,
91
- });
92
- // Initialize domain services
93
- this.illustService = new IllustService_1.IllustService(this.apiCore);
94
- this.novelService = new NovelService_1.NovelService(this.apiCore);
95
- this.mediaService = new MediaDownloadService_1.MediaDownloadService(this.apiCore);
96
- this.searchService = new SearchService_1.SearchService(this.apiCore);
97
- }
98
- /** Process-wide Pixiv rate-limit gate (used by doctor/health). */
99
- getRateLimiter() {
100
- return this.rateLimiter;
101
- }
102
- /**
103
- * Safely parse date string to timestamp
104
- * Returns 0 for invalid dates to ensure consistent sorting
105
- * @deprecated Use parsePixivDate from pixiv-utils instead
106
- */
107
- parseDate(dateString) {
108
- return (0, pixiv_utils_1.parsePixivDate)(dateString);
109
- }
110
- /**
111
- * Parse date range from target config
112
- * Returns { startDate, endDate } as Date objects, or null if invalid
113
- * Validates that startDate <= endDate
114
- */
115
- parseDateRange(target) {
116
- return (0, date_utils_1.parseDateRange)(target.startDate, target.endDate);
117
- }
118
- /**
119
- * Check if item date is within the specified range
120
- * Handles invalid dates gracefully
121
- */
122
- isDateInRange(itemDate, startDate, endDate) {
123
- return (0, date_utils_1.isDateInRange)(itemDate, startDate, endDate);
124
- }
125
- /**
126
- * Search illustrations using target config
127
- * Implements IPixivClient interface
128
- */
129
- async searchIllustrations(target) {
130
- const requestDelay = this.config.download?.requestDelay ?? 3000;
131
- return this.searchService.searchIllustrations(target, requestDelay);
132
- }
133
- async getTagAutocomplete(seed) {
134
- return this.searchService.getTagAutocomplete(seed);
135
- }
136
- async searchIllustrationsForTags(seed, limit, options = {}) {
137
- return this.searchIllustrations({
138
- type: 'illustration',
139
- tag: seed,
140
- searchTarget: 'partial_match_for_tags',
141
- sort: 'date_desc',
142
- limit,
143
- startDate: options.startDate,
144
- endDate: options.endDate,
145
- r18: options.includeR18,
146
- });
147
- }
148
- async searchNovelsForTags(seed, limit, options = {}) {
149
- return this.searchNovels({
150
- type: 'novel',
151
- tag: seed,
152
- searchTarget: 'partial_match_for_tags',
153
- sort: 'date_desc',
154
- limit,
155
- startDate: options.startDate,
156
- endDate: options.endDate,
157
- r18: options.includeR18,
158
- });
159
- }
160
- /**
161
- * Get current user information
162
- * Implements IPixivClient interface
163
- */
164
- async getUser() {
165
- const url = this.createRequestUrl('v1/user/profile', {});
166
- logger_1.logger.debug('Fetching user profile');
167
- try {
168
- const response = await this.request(url, { method: 'GET' });
169
- return response.user_profile.user;
170
- }
171
- catch (error) {
172
- logger_1.logger.error('Failed to get user profile', { error: error instanceof Error ? error.message : String(error) });
173
- throw error;
174
- }
175
- }
176
- /**
177
- * Get illustration details by ID
178
- * Implements IPixivClient interface
179
- */
180
- async getIllustration(id) {
181
- return this.illustService.getIllustration(id);
182
- }
183
- /**
184
- * Get novel details by ID
185
- * Implements IPixivClient interface
186
- */
187
- async getNovel(id) {
188
- return this.getNovelDetail(id);
189
- }
190
- /**
191
- * Get user illustrations
192
- * Implements IPixivClient interface
193
- */
194
- async getUserIllustrations(userId, options) {
195
- return this.illustService.getUserIllustrations(userId, options);
196
- }
197
- /**
198
- * Get user novels
199
- * Implements IPixivClient interface
200
- */
201
- async getUserNovels(userId, options) {
202
- return this.novelService.getUserNovels(userId, options);
203
- }
204
- /**
205
- * Search illustrations for a single tag (internal method)
206
- */
207
- // Search implementation moved to SearchService
208
- /**
209
- * Search novels using target config
210
- * Implements IPixivClient interface
211
- */
212
- async searchNovels(target) {
213
- const requestDelay = this.config.download?.requestDelay ?? 3000;
214
- return this.searchService.searchNovels(target, requestDelay);
215
- }
216
- /**
217
- * Search novels for a single tag (internal method)
218
- */
219
- // Search implementation moved to SearchService
220
- /**
221
- * Get ranking illustrations
222
- * @param mode Ranking mode (day, week, month, etc.)
223
- * @param date Date in YYYY-MM-DD format (optional, defaults to today)
224
- * @param limit Maximum number of results
225
- */
226
- async getRankingIllustrations(mode = 'day', date, limit) {
227
- return this.illustService.getRankingIllustrations(mode, date, limit);
228
- }
229
- /**
230
- * Get ranking novels
231
- * @param mode Ranking mode (day, week, month, etc.)
232
- * @param date Date in YYYY-MM-DD format (optional, defaults to today)
233
- * @param limit Maximum number of results
234
- */
235
- async getRankingNovels(mode = 'day', date, limit) {
236
- return this.novelService.getRankingNovels(mode, date, limit);
237
- }
238
- /**
239
- * Get illustration detail with tags for filtering
240
- */
241
- async getIllustDetailWithTags(illustId) {
242
- return this.illustService.getIllustDetailWithTags(illustId);
243
- }
244
- /**
245
- * Get novel detail with tags for filtering
246
- */
247
- async getNovelDetailWithTags(novelId) {
248
- return this.novelService.getNovelDetailWithTags(novelId);
249
- }
250
- async getIllustDetail(illustId) {
251
- return this.illustService.getIllustration(illustId);
252
- }
253
- async getNovelDetail(novelId) {
254
- return this.novelService.getNovelDetail(novelId);
255
- }
256
- /**
257
- * Get novel text content
258
- * Implements IPixivClient interface
259
- */
260
- async getNovelText(novelId) {
261
- return this.novelService.getNovelText(novelId, { userAgent: this.config.pixiv.userAgent });
262
- }
263
- async ugoiraMetadata(illustId) {
264
- const res = await this.apiCore.request(`/v1/ugoira/metadata?illust_id=${encodeURIComponent(String(illustId))}`, { method: 'GET' });
265
- return res.ugoira_metadata;
266
- }
267
- /**
268
- * Get all novels in a series
269
- */
270
- async getNovelSeries(seriesId) {
271
- return this.novelService.getNovelSeries(seriesId);
272
- }
273
- async downloadImage(originalUrl) {
274
- return this.mediaService.downloadImage(originalUrl, this.config.pixiv.userAgent);
275
- }
276
- // fetchBinary is removed; MediaDownloadService handles binary downloads
277
- createRequestUrl(path, params) {
278
- const url = new URL(path, this.baseUrl);
279
- Object.entries(params).forEach(([key, value]) => url.searchParams.append(key, value));
280
- return url.toString();
281
- }
282
- async request(url, init) {
283
- // Preserve existing headers (App-OS info) while delegating to ApiCore
284
- const headers = {
285
- 'App-OS': 'ios',
286
- 'App-OS-Version': '14.6',
287
- 'App-Version': '7.13.3',
288
- Referer: 'https://app-api.pixiv.net/',
289
- ...init.headers,
290
- };
291
- return this.apiCore.request(url, { ...init, headers });
292
- }
293
- }
294
- exports.PixivClient = PixivClient;
3
+ exports.createPixivFlowClient = exports.PixivClient = void 0;
4
+ /**
5
+ * @deprecated Import from `../pixiv-client/PixivFlowPixivClient` (product) or
6
+ * from `@redtidev/pixiv-client` (the independent kit). This module is a
7
+ * thin backward-compatibility shim for code that still imports the old path.
8
+ *
9
+ * The reusable Pixiv protocol/client code now lives in the
10
+ * `packages/pixiv-client` workspace package (@redtidev/pixiv-client). The
11
+ * class below is the PixivFlow-specific compatibility adapter (TargetConfig
12
+ * queries, product defaults) composed on top of it.
13
+ */
14
+ var PixivFlowPixivClient_1 = require("../pixiv-client/PixivFlowPixivClient");
15
+ Object.defineProperty(exports, "PixivClient", { enumerable: true, get: function () { return PixivFlowPixivClient_1.PixivFlowPixivClient; } });
16
+ var createPixivFlowClient_1 = require("../pixiv-client/createPixivFlowClient");
17
+ Object.defineProperty(exports, "createPixivFlowClient", { enumerable: true, get: function () { return createPixivFlowClient_1.createPixivFlowClient; } });
295
18
  //# sourceMappingURL=PixivClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PixivClient.js","sourceRoot":"","sources":["../../src/pixiv/PixivClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PixivClient.js","sourceRoot":"","sources":["../../src/pixiv/PixivClient.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACH,6EAA2F;AAAlF,mHAAA,oBAAoB,OAAe;AAC5C,+EAA8E;AAArE,8HAAA,qBAAqB,OAAA"}
@@ -0,0 +1,16 @@
1
+ import type { AccessTokenProvider, RefreshableAccessTokenProvider } from '@redtidev/pixiv-client';
2
+ import type { PixivAuth } from '../auth/PixivAuth';
3
+ /**
4
+ * Adapter that exposes PixivFlow's OAuth/refresh-token machinery to the kit
5
+ * through its tiny AccessTokenProvider port. The kit never learns about
6
+ * config files, SQLite, puppeteer or the python login helper.
7
+ */
8
+ export declare class PixivAuthTokenProvider implements RefreshableAccessTokenProvider {
9
+ private readonly auth;
10
+ constructor(auth: PixivAuth);
11
+ getAccessToken(): Promise<string>;
12
+ refreshAccessToken(): Promise<string>;
13
+ }
14
+ /** Type guard helper for wiring sites. */
15
+ export declare function asTokenProvider(auth: PixivAuth): AccessTokenProvider;
16
+ //# sourceMappingURL=PixivAuthTokenProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PixivAuthTokenProvider.d.ts","sourceRoot":"","sources":["../../src/pixiv-client/PixivAuthTokenProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,8BAA8B;IAC/D,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,SAAS;IAE5C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAIjC,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;CAGtC;AAED,0CAA0C;AAC1C,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB,CAEpE"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PixivAuthTokenProvider = void 0;
4
+ exports.asTokenProvider = asTokenProvider;
5
+ /**
6
+ * Adapter that exposes PixivFlow's OAuth/refresh-token machinery to the kit
7
+ * through its tiny AccessTokenProvider port. The kit never learns about
8
+ * config files, SQLite, puppeteer or the python login helper.
9
+ */
10
+ class PixivAuthTokenProvider {
11
+ auth;
12
+ constructor(auth) {
13
+ this.auth = auth;
14
+ }
15
+ getAccessToken() {
16
+ return this.auth.getAccessToken();
17
+ }
18
+ refreshAccessToken() {
19
+ return this.auth.refreshAccessTokenForClient();
20
+ }
21
+ }
22
+ exports.PixivAuthTokenProvider = PixivAuthTokenProvider;
23
+ /** Type guard helper for wiring sites. */
24
+ function asTokenProvider(auth) {
25
+ return new PixivAuthTokenProvider(auth);
26
+ }
27
+ //# sourceMappingURL=PixivAuthTokenProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PixivAuthTokenProvider.js","sourceRoot":"","sources":["../../src/pixiv-client/PixivAuthTokenProvider.ts"],"names":[],"mappings":";;;AAqBA,0CAEC;AApBD;;;;GAIG;AACH,MAAa,sBAAsB;IACJ;IAA7B,YAA6B,IAAe;QAAf,SAAI,GAAJ,IAAI,CAAW;IAAG,CAAC;IAEhD,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;IACjD,CAAC;CACF;AAVD,wDAUC;AAED,0CAA0C;AAC1C,SAAgB,eAAe,CAAC,IAAe;IAC7C,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { PixivClient as KitPixivClient, RateLimitGate, type AccessTokenProvider, type KitLogger, type PixivIllust, type PixivNovel, type PixivNovelTextResponse, type PixivTag, type RateLimitStateStore } from '@redtidev/pixiv-client';
2
+ import type { StandaloneConfig, TargetConfig } from '../config';
3
+ import type { IPixivClient } from '../interfaces/IPixivClient';
4
+ export interface PixivFlowPixivClientOptions {
5
+ auth: AccessTokenProvider;
6
+ config: StandaloneConfig;
7
+ logger?: KitLogger;
8
+ /**
9
+ * Persistent gate state (SQLite). When omitted the kit keeps state in
10
+ * memory (process-local). PixivFlow wires an SQLite adapter so a deploy
11
+ * restart does not forget an active Pixiv cooldown.
12
+ */
13
+ rateLimitStateStore?: RateLimitStateStore;
14
+ /** Logical scope inside the state store (e.g. account/refresh-token id). */
15
+ rateLimitScope?: string;
16
+ }
17
+ /**
18
+ * Compatibility adapter: the PixivFlow-specific class that the whole product
19
+ * already depends on ({@link IPixivClient}), now implemented entirely by
20
+ * composing the independent kit.
21
+ *
22
+ * Responsibilities kept HERE (product): TargetConfig queries, tag search
23
+ * options, inter-page requestDelay, UA selection, ranking date.
24
+ * Responsibilities delegated to the kit: HTTP, auth headers, retries,
25
+ * pacing, 429 cooldown, circuit breaker, coalescing, proxy, typed errors.
26
+ */
27
+ export declare class PixivFlowPixivClient implements IPixivClient {
28
+ private readonly kit;
29
+ private readonly searchRunner;
30
+ private readonly config;
31
+ constructor(options: PixivFlowPixivClientOptions);
32
+ /** The underlying independent kit client (advanced/embedding use). */
33
+ getKit(): KitPixivClient;
34
+ /** Shared 429 gate, exposed for doctor/health/monitor. */
35
+ getRateLimiter(): RateLimitGate;
36
+ getRateLimitStatus(): Promise<import("@redtidev/pixiv-client").RateLimitStatus>;
37
+ searchIllustrations(target: TargetConfig): Promise<PixivIllust[]>;
38
+ searchNovels(target: TargetConfig): Promise<PixivNovel[]>;
39
+ getTagAutocomplete(seed: string): Promise<PixivTag[]>;
40
+ searchIllustrationsForTags(seed: string, limit: number, options?: {
41
+ startDate?: string;
42
+ endDate?: string;
43
+ includeR18?: boolean;
44
+ }): Promise<PixivIllust[]>;
45
+ searchNovelsForTags(seed: string, limit: number, options?: {
46
+ startDate?: string;
47
+ endDate?: string;
48
+ includeR18?: boolean;
49
+ }): Promise<PixivNovel[]>;
50
+ getIllustration(id: number): Promise<PixivIllust>;
51
+ getNovel(id: number): Promise<PixivNovel>;
52
+ getUserIllustrations(userId: string, options?: {
53
+ limit?: number;
54
+ offset?: number;
55
+ }): Promise<PixivIllust[]>;
56
+ getUserNovels(userId: string, options?: {
57
+ limit?: number;
58
+ offset?: number;
59
+ }): Promise<PixivNovel[]>;
60
+ getRankingIllustrations(mode?: string, date?: string, limit?: number): Promise<PixivIllust[]>;
61
+ getRankingNovels(mode?: string, date?: string, limit?: number): Promise<PixivNovel[]>;
62
+ getIllustDetailWithTags(illustId: number): Promise<{
63
+ illust: PixivIllust;
64
+ tags: PixivTag[];
65
+ }>;
66
+ getNovelDetailWithTags(novelId: number): Promise<{
67
+ novel: PixivNovel;
68
+ tags: PixivTag[];
69
+ }>;
70
+ getIllustDetail(illustId: number): Promise<PixivIllust>;
71
+ getNovelDetail(novelId: number): Promise<PixivNovel>;
72
+ getNovelText(novelId: number): Promise<PixivNovelTextResponse>;
73
+ ugoiraMetadata(illustId: number): Promise<import("@redtidev/pixiv-client").UgoiraMetadata>;
74
+ getNovelSeries(seriesId: number): Promise<PixivNovel[]>;
75
+ downloadImage(originalUrl: string): Promise<ArrayBuffer>;
76
+ }
77
+ //# sourceMappingURL=PixivFlowPixivClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PixivFlowPixivClient.d.ts","sourceRoot":"","sources":["../../src/pixiv-client/PixivFlowPixivClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PixivFlowPixivClient = void 0;
4
+ const pixiv_client_1 = require("@redtidev/pixiv-client");
5
+ const query_mapper_1 = require("./query-mapper");
6
+ const TargetSearchRunner_1 = require("./TargetSearchRunner");
7
+ /**
8
+ * Compatibility adapter: the PixivFlow-specific class that the whole product
9
+ * already depends on ({@link IPixivClient}), now implemented entirely by
10
+ * composing the independent kit.
11
+ *
12
+ * Responsibilities kept HERE (product): TargetConfig queries, tag search
13
+ * options, inter-page requestDelay, UA selection, ranking date.
14
+ * Responsibilities delegated to the kit: HTTP, auth headers, retries,
15
+ * pacing, 429 cooldown, circuit breaker, coalescing, proxy, typed errors.
16
+ */
17
+ class PixivFlowPixivClient {
18
+ kit;
19
+ searchRunner;
20
+ config;
21
+ constructor(options) {
22
+ this.config = options.config;
23
+ const network = options.config.network ?? {};
24
+ const proxy = options.config.network?.proxy;
25
+ const proxyOptions = proxy?.enabled && proxy.host && proxy.port
26
+ ? {
27
+ protocol: (proxy.protocol ?? 'http').toLowerCase(),
28
+ host: proxy.host,
29
+ port: proxy.port,
30
+ username: proxy.username,
31
+ password: proxy.password,
32
+ }
33
+ : undefined;
34
+ // Backward-compatible operator override. New safe DEFAULT (1000ms pacing,
35
+ // 60s initial cooldown) applies unless the deployment sets
36
+ // network.requestPacingMs explicitly (including 0 to opt out of pacing).
37
+ const networkExtra = network;
38
+ const pacingConfigured = Object.prototype.hasOwnProperty.call(network, 'requestPacingMs');
39
+ this.kit = new pixiv_client_1.PixivClient({
40
+ auth: options.auth,
41
+ baseUrl: 'https://app-api.pixiv.net',
42
+ userAgent: options.config.pixiv.userAgent,
43
+ timeoutMs: network.timeoutMs ?? 30_000,
44
+ retries: network.retries ?? 2,
45
+ proxy: proxyOptions,
46
+ rateLimit: {
47
+ ...(pacingConfigured ? { minIntervalMs: networkExtra.requestPacingMs } : {}),
48
+ stateStore: options.rateLimitStateStore,
49
+ scope: options.rateLimitScope,
50
+ },
51
+ logger: options.logger,
52
+ });
53
+ this.searchRunner = new TargetSearchRunner_1.TargetSearchRunner(this.kit);
54
+ }
55
+ /** The underlying independent kit client (advanced/embedding use). */
56
+ getKit() {
57
+ return this.kit;
58
+ }
59
+ /** Shared 429 gate, exposed for doctor/health/monitor. */
60
+ getRateLimiter() {
61
+ return this.kit.getRateLimitGate();
62
+ }
63
+ getRateLimitStatus() {
64
+ return this.kit.getRateLimitStatus();
65
+ }
66
+ // -- IPixivClient surface ---------------------------------------------------
67
+ searchIllustrations(target) {
68
+ const requestDelay = this.config.download?.requestDelay ?? 500;
69
+ return this.searchRunner.searchIllustrations(target, requestDelay);
70
+ }
71
+ searchNovels(target) {
72
+ const requestDelay = this.config.download?.requestDelay ?? 500;
73
+ return this.searchRunner.searchNovels(target, requestDelay);
74
+ }
75
+ getTagAutocomplete(seed) {
76
+ return this.kit.tags.autocomplete(seed);
77
+ }
78
+ searchIllustrationsForTags(seed, limit, options = {}) {
79
+ return this.searchIllustrations({
80
+ type: 'illustration',
81
+ tag: seed,
82
+ searchTarget: 'partial_match_for_tags',
83
+ sort: 'date_desc',
84
+ limit,
85
+ startDate: options.startDate,
86
+ endDate: options.endDate,
87
+ r18: options.includeR18,
88
+ });
89
+ }
90
+ searchNovelsForTags(seed, limit, options = {}) {
91
+ return this.searchNovels({
92
+ type: 'novel',
93
+ tag: seed,
94
+ searchTarget: 'partial_match_for_tags',
95
+ sort: 'date_desc',
96
+ limit,
97
+ startDate: options.startDate,
98
+ endDate: options.endDate,
99
+ r18: options.includeR18,
100
+ });
101
+ }
102
+ getIllustration(id) {
103
+ return this.kit.illustrations.get(id);
104
+ }
105
+ getNovel(id) {
106
+ return this.kit.novels.detailCompatible(id);
107
+ }
108
+ getUserIllustrations(userId, options) {
109
+ return this.kit.illustrations.listByUser(userId, options);
110
+ }
111
+ getUserNovels(userId, options) {
112
+ return this.kit.novels.listByUser(userId, options);
113
+ }
114
+ getRankingIllustrations(mode = 'day', date, limit) {
115
+ return this.kit.illustrations.ranking((0, query_mapper_1.asIllustRankingMode)(mode), { date, limit });
116
+ }
117
+ getRankingNovels(mode = 'day', date, limit) {
118
+ return this.kit.novels.ranking((0, query_mapper_1.asNovelRankingMode)(mode), { date, limit });
119
+ }
120
+ getIllustDetailWithTags(illustId) {
121
+ return this.kit.illustrations.detailWithTags(illustId);
122
+ }
123
+ getNovelDetailWithTags(novelId) {
124
+ return this.kit.novels.detailWithTags(novelId);
125
+ }
126
+ getIllustDetail(illustId) {
127
+ return this.kit.illustrations.detail(illustId);
128
+ }
129
+ getNovelDetail(novelId) {
130
+ return this.kit.novels.detailCompatible(novelId);
131
+ }
132
+ getNovelText(novelId) {
133
+ return this.kit.novels.text(novelId, { browserUserAgent: this.config.pixiv.userAgent });
134
+ }
135
+ ugoiraMetadata(illustId) {
136
+ return this.kit.illustrations.ugoiraMetadata(illustId);
137
+ }
138
+ getNovelSeries(seriesId) {
139
+ return this.kit.novels.listSeries(seriesId);
140
+ }
141
+ downloadImage(originalUrl) {
142
+ return this.kit.media.fetch(originalUrl, { referer: 'https://app-api.pixiv.net/' });
143
+ }
144
+ }
145
+ exports.PixivFlowPixivClient = PixivFlowPixivClient;
146
+ //# sourceMappingURL=PixivFlowPixivClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PixivFlowPixivClient.js","sourceRoot":"","sources":["../../src/pixiv-client/PixivFlowPixivClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { PixivClient as KitPixivClient, PixivIllust, PixivNovel } from '@redtidev/pixiv-client';
2
+ import type { TargetConfig } from '../config';
3
+ /**
4
+ * Host-side replacement for the old in-kit SearchService: drives the kit's
5
+ * per-page API with PixivFlow-specific date-aware pagination, early stop,
6
+ * tag-OR merging, over-fetch and final sorting. Nothing here belongs in the
7
+ * reusable kit (all of it is TargetConfig/product behavior).
8
+ */
9
+ export declare class TargetSearchRunner {
10
+ private readonly kit;
11
+ constructor(kit: KitPixivClient);
12
+ searchIllustrations(target: TargetConfig, requestDelayMs: number): Promise<PixivIllust[]>;
13
+ searchNovels(target: TargetConfig, requestDelayMs: number): Promise<PixivNovel[]>;
14
+ private mergeTagUnion;
15
+ private searchSingleIllust;
16
+ private searchSingleNovel;
17
+ /**
18
+ * Date-aware pagination. Mirrors the legacy SearchService semantics:
19
+ * - parse/validate the configured date range;
20
+ * - over-fetch when a limit + date filter would otherwise truncate too early;
21
+ * - stop paging once date_desc/date_asc walks past the range boundary;
22
+ * - post-filter popular_desc results by the date range;
23
+ * - final stable sort + target.limit slice.
24
+ */
25
+ private searchWithPagination;
26
+ private filterItemByDate;
27
+ private calculateFetchLimit;
28
+ }
29
+ //# sourceMappingURL=TargetSearchRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TargetSearchRunner.d.ts","sourceRoot":"","sources":["../../src/pixiv-client/TargetSearchRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,IAAI,cAAc,EAC7B,WAAW,EACX,UAAU,EAGX,MAAM,wBAAwB,CAAC;AAMhC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAG9C;;;;;GAKG;AACH,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,cAAc;IAE1C,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IASzF,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YASzE,aAAa;YA0Bb,kBAAkB;YAclB,iBAAiB;IAc/B;;;;;;;OAOG;YACW,oBAAoB;IAsFlC,OAAO,CAAC,gBAAgB;IAsCxB,OAAO,CAAC,mBAAmB;CAW5B"}