@lucasygu/redbook 0.2.0 → 0.3.1

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.
@@ -0,0 +1,531 @@
1
+ /**
2
+ * Card rendering module — converts markdown to styled PNG image cards for Xiaohongshu.
3
+ *
4
+ * Uses puppeteer-core (optional dependency) to screenshot HTML templates via the user's
5
+ * existing Chrome installation. No XHS API or cookies needed — purely offline rendering.
6
+ */
7
+ import { existsSync, readFileSync, mkdirSync } from "node:fs";
8
+ import { dirname, join, resolve } from "node:path";
9
+ import kleur from "kleur";
10
+ // ─── Color Styles (ported from Auto-Redbook-Skills V2) ─────────────────────
11
+ const COLOR_STYLES = {
12
+ purple: {
13
+ name: "Purple",
14
+ coverGradient: "linear-gradient(135deg, #3450E4 0%, #D266DA 100%)",
15
+ cardBg: "#ffffff",
16
+ cardBorder: "linear-gradient(135deg, #6366f1 0%, #a855f7 100%)",
17
+ titleColor: "#1e1b4b",
18
+ subtitleColor: "#4338ca",
19
+ textColor: "#334155",
20
+ accentColor: "#6366f1",
21
+ mutedColor: "#64748b",
22
+ codeBg: "#f1f5f9",
23
+ codeColor: "#6366f1",
24
+ blockquoteBg: "#eef2ff",
25
+ blockquoteBorder: "#6366f1",
26
+ isDark: false,
27
+ },
28
+ xiaohongshu: {
29
+ name: "Xiaohongshu",
30
+ coverGradient: "linear-gradient(135deg, #FF2442 0%, #FF6B81 100%)",
31
+ cardBg: "#ffffff",
32
+ cardBorder: "linear-gradient(135deg, #FF2442 0%, #FF6B81 100%)",
33
+ titleColor: "#1a1a2e",
34
+ subtitleColor: "#FF2442",
35
+ textColor: "#334155",
36
+ accentColor: "#FF2442",
37
+ mutedColor: "#64748b",
38
+ codeBg: "#fff5f5",
39
+ codeColor: "#FF2442",
40
+ blockquoteBg: "#fff5f5",
41
+ blockquoteBorder: "#FF2442",
42
+ isDark: false,
43
+ },
44
+ mint: {
45
+ name: "Mint",
46
+ coverGradient: "linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)",
47
+ cardBg: "#ffffff",
48
+ cardBorder: "linear-gradient(135deg, #43e97b 0%, #38f9d7 100%)",
49
+ titleColor: "#064e3b",
50
+ subtitleColor: "#059669",
51
+ textColor: "#334155",
52
+ accentColor: "#10b981",
53
+ mutedColor: "#64748b",
54
+ codeBg: "#ecfdf5",
55
+ codeColor: "#059669",
56
+ blockquoteBg: "#ecfdf5",
57
+ blockquoteBorder: "#10b981",
58
+ isDark: false,
59
+ },
60
+ sunset: {
61
+ name: "Sunset",
62
+ coverGradient: "linear-gradient(135deg, #fa709a 0%, #fee140 100%)",
63
+ cardBg: "#ffffff",
64
+ cardBorder: "linear-gradient(135deg, #fa709a 0%, #fee140 100%)",
65
+ titleColor: "#7c2d12",
66
+ subtitleColor: "#ea580c",
67
+ textColor: "#334155",
68
+ accentColor: "#f97316",
69
+ mutedColor: "#64748b",
70
+ codeBg: "#fff7ed",
71
+ codeColor: "#ea580c",
72
+ blockquoteBg: "#fff7ed",
73
+ blockquoteBorder: "#f97316",
74
+ isDark: false,
75
+ },
76
+ ocean: {
77
+ name: "Ocean",
78
+ coverGradient: "linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)",
79
+ cardBg: "#ffffff",
80
+ cardBorder: "linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)",
81
+ titleColor: "#0c4a6e",
82
+ subtitleColor: "#0284c7",
83
+ textColor: "#334155",
84
+ accentColor: "#0ea5e9",
85
+ mutedColor: "#64748b",
86
+ codeBg: "#f0f9ff",
87
+ codeColor: "#0284c7",
88
+ blockquoteBg: "#f0f9ff",
89
+ blockquoteBorder: "#0ea5e9",
90
+ isDark: false,
91
+ },
92
+ elegant: {
93
+ name: "Elegant",
94
+ coverGradient: "linear-gradient(135deg, #e2e8f0 0%, #f8fafc 100%)",
95
+ cardBg: "#ffffff",
96
+ cardBorder: "linear-gradient(135deg, #94a3b8 0%, #cbd5e1 100%)",
97
+ titleColor: "#0f172a",
98
+ subtitleColor: "#334155",
99
+ textColor: "#334155",
100
+ accentColor: "#475569",
101
+ mutedColor: "#64748b",
102
+ codeBg: "#f8fafc",
103
+ codeColor: "#334155",
104
+ blockquoteBg: "#f8fafc",
105
+ blockquoteBorder: "#94a3b8",
106
+ isDark: false,
107
+ },
108
+ dark: {
109
+ name: "Dark",
110
+ coverGradient: "linear-gradient(135deg, #0f172a 0%, #1e293b 100%)",
111
+ cardBg: "#1e293b",
112
+ cardBorder: "linear-gradient(135deg, #e94560 0%, #f97316 100%)",
113
+ titleColor: "#f1f5f9",
114
+ subtitleColor: "#e94560",
115
+ textColor: "#cbd5e1",
116
+ accentColor: "#e94560",
117
+ mutedColor: "#94a3b8",
118
+ codeBg: "#0f172a",
119
+ codeColor: "#fbbf24",
120
+ blockquoteBg: "#0f172a",
121
+ blockquoteBorder: "#e94560",
122
+ isDark: true,
123
+ },
124
+ };
125
+ // ─── Frontmatter Parsing ────────────────────────────────────────────────────
126
+ export function parseCardMarkdown(content) {
127
+ const fmMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);
128
+ if (!fmMatch) {
129
+ return { frontmatter: { title: "Untitled" }, body: content };
130
+ }
131
+ const fmRaw = fmMatch[1];
132
+ const body = content.slice(fmMatch[0].length);
133
+ const fm = {};
134
+ for (const line of fmRaw.split("\n")) {
135
+ const m = line.match(/^(\w+)\s*:\s*(.+)$/);
136
+ if (m)
137
+ fm[m[1]] = m[2].trim().replace(/^["']|["']$/g, "");
138
+ }
139
+ return {
140
+ frontmatter: {
141
+ emoji: fm.emoji,
142
+ title: fm.title ?? "Untitled",
143
+ subtitle: fm.subtitle,
144
+ style: fm.style,
145
+ },
146
+ body,
147
+ };
148
+ }
149
+ // ─── Pagination ─────────────────────────────────────────────────────────────
150
+ export function paginateContent(body, mode) {
151
+ if (mode === "separator") {
152
+ return body
153
+ .split(/\n(?:---+|___+|\*\*\*+)\n/)
154
+ .map((s) => s.trim())
155
+ .filter(Boolean);
156
+ }
157
+ // Auto mode: split on block boundaries using character-count heuristic
158
+ const lines = body.split("\n");
159
+ const blocks = [];
160
+ let currentBlock = "";
161
+ // Group lines into logical blocks (headings, paragraphs, code blocks, lists)
162
+ let inCodeBlock = false;
163
+ for (const line of lines) {
164
+ if (line.startsWith("```")) {
165
+ inCodeBlock = !inCodeBlock;
166
+ currentBlock += line + "\n";
167
+ if (!inCodeBlock) {
168
+ blocks.push(currentBlock.trim());
169
+ currentBlock = "";
170
+ }
171
+ continue;
172
+ }
173
+ if (inCodeBlock) {
174
+ currentBlock += line + "\n";
175
+ continue;
176
+ }
177
+ // Headings start new blocks
178
+ if (line.match(/^#{1,3}\s/) && currentBlock.trim()) {
179
+ blocks.push(currentBlock.trim());
180
+ currentBlock = line + "\n";
181
+ continue;
182
+ }
183
+ // Empty lines separate paragraphs
184
+ if (line.trim() === "" && currentBlock.trim()) {
185
+ blocks.push(currentBlock.trim());
186
+ currentBlock = "";
187
+ continue;
188
+ }
189
+ currentBlock += line + "\n";
190
+ }
191
+ if (currentBlock.trim())
192
+ blocks.push(currentBlock.trim());
193
+ // Estimate height per block and split into pages
194
+ // Target: ~600 Chinese chars or ~1200 Latin chars per card (safe content area)
195
+ const MAX_CHARS_PER_PAGE = 600;
196
+ const pages = [];
197
+ let currentPage = "";
198
+ let currentChars = 0;
199
+ for (const block of blocks) {
200
+ const blockChars = estimateChars(block);
201
+ // If adding this block exceeds limit and page isn't empty, start new page
202
+ if (currentChars + blockChars > MAX_CHARS_PER_PAGE && currentPage.trim()) {
203
+ pages.push(currentPage.trim());
204
+ currentPage = block + "\n\n";
205
+ currentChars = blockChars;
206
+ }
207
+ else {
208
+ currentPage += block + "\n\n";
209
+ currentChars += blockChars;
210
+ }
211
+ }
212
+ if (currentPage.trim())
213
+ pages.push(currentPage.trim());
214
+ return pages.length > 0 ? pages : [body.trim()];
215
+ }
216
+ function estimateChars(block) {
217
+ // Chinese characters count as ~1.5x Latin for height estimation
218
+ let count = 0;
219
+ for (const char of block) {
220
+ if (char.charCodeAt(0) > 0x4e00) {
221
+ count += 1.5;
222
+ }
223
+ else {
224
+ count += 1;
225
+ }
226
+ }
227
+ // Headings take more vertical space
228
+ if (block.match(/^#{1,3}\s/))
229
+ count += 80;
230
+ // Code blocks take more space
231
+ if (block.includes("```"))
232
+ count += 60;
233
+ return Math.ceil(count);
234
+ }
235
+ // ─── HTML Templates ─────────────────────────────────────────────────────────
236
+ function escapeHtml(text) {
237
+ return text
238
+ .replace(/&/g, "&")
239
+ .replace(/</g, "&lt;")
240
+ .replace(/>/g, "&gt;")
241
+ .replace(/"/g, "&quot;");
242
+ }
243
+ function buildCoverHtml(fm, style, width, height) {
244
+ const emojiSize = Math.round(width * 0.13);
245
+ const titleSize = Math.round(width * 0.065);
246
+ const subtitleSize = Math.round(width * 0.035);
247
+ const innerWidth = Math.round(width * 0.88);
248
+ const innerHeight = Math.round(height * 0.88);
249
+ const offset = Math.round(width * 0.06);
250
+ const borderRadius = Math.round(width * 0.03);
251
+ return `<!DOCTYPE html>
252
+ <html><head><meta charset="utf-8">
253
+ <style>
254
+ * { margin: 0; padding: 0; box-sizing: border-box; }
255
+ body {
256
+ width: ${width}px; height: ${height}px;
257
+ background: ${style.coverGradient};
258
+ font-family: -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
259
+ overflow: hidden;
260
+ }
261
+ .cover-outer {
262
+ position: absolute;
263
+ top: ${offset}px; left: ${offset}px;
264
+ width: ${innerWidth}px; height: ${innerHeight}px;
265
+ background: ${style.cardBg};
266
+ border-radius: ${borderRadius}px;
267
+ display: flex; flex-direction: column;
268
+ align-items: center; justify-content: center;
269
+ box-shadow: 0 25px 60px rgba(0,0,0,0.15);
270
+ }
271
+ .emoji { font-size: ${emojiSize}px; margin-bottom: ${Math.round(height * 0.03)}px; }
272
+ .title {
273
+ font-size: ${titleSize}px; font-weight: 800;
274
+ color: ${style.titleColor}; text-align: center;
275
+ max-width: ${Math.round(innerWidth * 0.85)}px;
276
+ line-height: 1.35; padding: 0 ${Math.round(width * 0.05)}px;
277
+ }
278
+ .subtitle {
279
+ font-size: ${subtitleSize}px; font-weight: 400;
280
+ color: ${style.subtitleColor}; text-align: center;
281
+ margin-top: ${Math.round(height * 0.02)}px;
282
+ opacity: 0.85;
283
+ }
284
+ </style></head>
285
+ <body>
286
+ <div class="cover-outer">
287
+ ${fm.emoji ? `<div class="emoji">${fm.emoji}</div>` : ""}
288
+ <div class="title">${escapeHtml(fm.title)}</div>
289
+ ${fm.subtitle ? `<div class="subtitle">${escapeHtml(fm.subtitle)}</div>` : ""}
290
+ </div>
291
+ </body></html>`;
292
+ }
293
+ function buildCardHtml(htmlContent, pageNum, totalPages, style, width, height) {
294
+ const padding = Math.round(width * 0.055);
295
+ const borderRadius = Math.round(width * 0.025);
296
+ const fontSize = Math.round(width * 0.038);
297
+ const h1Size = Math.round(width * 0.055);
298
+ const h2Size = Math.round(width * 0.048);
299
+ const h3Size = Math.round(width * 0.042);
300
+ return `<!DOCTYPE html>
301
+ <html><head><meta charset="utf-8">
302
+ <style>
303
+ * { margin: 0; padding: 0; box-sizing: border-box; }
304
+ body {
305
+ width: ${width}px; height: ${height}px;
306
+ background: ${style.cardBorder};
307
+ font-family: -apple-system, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
308
+ overflow: hidden;
309
+ }
310
+ .card-outer {
311
+ position: absolute;
312
+ top: ${Math.round(width * 0.04)}px;
313
+ left: ${Math.round(width * 0.04)}px;
314
+ right: ${Math.round(width * 0.04)}px;
315
+ bottom: ${Math.round(width * 0.04)}px;
316
+ background: ${style.cardBg};
317
+ border-radius: ${borderRadius}px;
318
+ box-shadow: 0 8px 30px rgba(0,0,0,0.08);
319
+ overflow: hidden;
320
+ }
321
+ .card-content {
322
+ padding: ${padding}px;
323
+ padding-bottom: ${padding + 40}px;
324
+ color: ${style.textColor};
325
+ font-size: ${fontSize}px;
326
+ line-height: 1.75;
327
+ }
328
+ .card-content h1 {
329
+ font-size: ${h1Size}px; font-weight: 700;
330
+ color: ${style.titleColor}; margin: 0 0 ${Math.round(fontSize * 0.8)}px 0;
331
+ line-height: 1.35;
332
+ }
333
+ .card-content h2 {
334
+ font-size: ${h2Size}px; font-weight: 600;
335
+ color: ${style.titleColor}; margin: ${Math.round(fontSize * 1.2)}px 0 ${Math.round(fontSize * 0.6)}px 0;
336
+ line-height: 1.4;
337
+ }
338
+ .card-content h3 {
339
+ font-size: ${h3Size}px; font-weight: 600;
340
+ color: ${style.subtitleColor}; margin: ${Math.round(fontSize * 1)}px 0 ${Math.round(fontSize * 0.5)}px 0;
341
+ line-height: 1.4;
342
+ }
343
+ .card-content p {
344
+ margin: 0 0 ${Math.round(fontSize * 0.7)}px 0;
345
+ }
346
+ .card-content strong { color: ${style.titleColor}; }
347
+ .card-content em { color: ${style.accentColor}; font-style: italic; }
348
+ .card-content a {
349
+ color: ${style.accentColor}; text-decoration: none;
350
+ border-bottom: 2px solid ${style.accentColor};
351
+ }
352
+ .card-content ul, .card-content ol {
353
+ padding-left: ${Math.round(fontSize * 1.4)}px;
354
+ margin: 0 0 ${Math.round(fontSize * 0.7)}px 0;
355
+ }
356
+ .card-content li { margin-bottom: ${Math.round(fontSize * 0.4)}px; }
357
+ .card-content code {
358
+ background: ${style.codeBg}; color: ${style.codeColor};
359
+ padding: 3px 8px; border-radius: 6px;
360
+ font-size: 0.88em; font-family: "SF Mono", "Monaco", "Consolas", monospace;
361
+ }
362
+ .card-content pre {
363
+ background: ${style.isDark ? "#0f172a" : "#1e293b"}; color: #e2e8f0;
364
+ padding: ${Math.round(fontSize * 0.8)}px; border-radius: 12px;
365
+ margin: ${Math.round(fontSize * 0.6)}px 0;
366
+ overflow-x: auto; font-size: 0.85em;
367
+ line-height: 1.6;
368
+ }
369
+ .card-content pre code {
370
+ background: none; color: inherit; padding: 0;
371
+ font-size: inherit;
372
+ }
373
+ .card-content blockquote {
374
+ background: ${style.blockquoteBg};
375
+ border-left: 6px solid ${style.blockquoteBorder};
376
+ padding: ${Math.round(fontSize * 0.6)}px ${Math.round(fontSize * 0.8)}px;
377
+ margin: ${Math.round(fontSize * 0.6)}px 0;
378
+ border-radius: 0 10px 10px 0;
379
+ color: ${style.mutedColor};
380
+ }
381
+ .card-content hr {
382
+ border: none; height: 2px;
383
+ background: ${style.isDark ? "#334155" : "#e2e8f0"};
384
+ margin: ${Math.round(fontSize * 1)}px 0;
385
+ }
386
+ .card-content img {
387
+ max-width: 100%; border-radius: 12px;
388
+ margin: ${Math.round(fontSize * 0.5)}px 0;
389
+ }
390
+ .page-num {
391
+ position: absolute; bottom: ${Math.round(width * 0.03)}px; right: ${Math.round(width * 0.05)}px;
392
+ font-size: ${Math.round(fontSize * 0.7)}px; color: ${style.mutedColor};
393
+ opacity: 0.6;
394
+ }
395
+ </style></head>
396
+ <body>
397
+ <div class="card-outer">
398
+ <div class="card-content">${htmlContent}</div>
399
+ <div class="page-num">${pageNum}/${totalPages}</div>
400
+ </div>
401
+ </body></html>`;
402
+ }
403
+ // ─── Chrome Discovery ───────────────────────────────────────────────────────
404
+ function findChromeExecutable() {
405
+ // Allow override via environment variable
406
+ if (process.env.CHROME_PATH && existsSync(process.env.CHROME_PATH)) {
407
+ return process.env.CHROME_PATH;
408
+ }
409
+ if (process.platform === "darwin") {
410
+ const candidates = [
411
+ "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
412
+ "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
413
+ "/Applications/Chromium.app/Contents/MacOS/Chromium",
414
+ ];
415
+ for (const p of candidates) {
416
+ if (existsSync(p))
417
+ return p;
418
+ }
419
+ }
420
+ throw new Error("Chrome not found. Install Google Chrome or set CHROME_PATH environment variable.\n" +
421
+ "Expected: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome");
422
+ }
423
+ // ─── Lazy Dependency Loading ────────────────────────────────────────────────
424
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
425
+ async function importPuppeteer() {
426
+ try {
427
+ return await import("puppeteer-core");
428
+ }
429
+ catch {
430
+ console.error(kleur.red("Card rendering requires puppeteer-core."));
431
+ console.error(kleur.dim("Install it with:"));
432
+ console.error(kleur.dim(" npm install -g puppeteer-core"));
433
+ process.exit(1);
434
+ }
435
+ }
436
+ async function markdownToHtml(md) {
437
+ try {
438
+ const { marked } = await import("marked");
439
+ return await marked.parse(md);
440
+ }
441
+ catch {
442
+ console.error(kleur.red("Card rendering requires marked."));
443
+ console.error(kleur.dim("Install it with:"));
444
+ console.error(kleur.dim(" npm install -g marked"));
445
+ process.exit(1);
446
+ }
447
+ }
448
+ // ─── Main Render Function ───────────────────────────────────────────────────
449
+ const DEFAULT_OPTIONS = {
450
+ outputDir: ".",
451
+ style: "xiaohongshu",
452
+ pagination: "auto",
453
+ width: 1080,
454
+ height: 1440,
455
+ dpr: 2,
456
+ };
457
+ export async function renderCards(inputPath, options) {
458
+ const absPath = resolve(inputPath);
459
+ if (!existsSync(absPath)) {
460
+ throw new Error(`File not found: ${absPath}`);
461
+ }
462
+ const content = readFileSync(absPath, "utf-8");
463
+ const { frontmatter, body } = parseCardMarkdown(content);
464
+ // Merge options: defaults → CLI opts → frontmatter overrides
465
+ const opts = {
466
+ ...DEFAULT_OPTIONS,
467
+ ...options,
468
+ style: options.style ?? frontmatter.style ?? DEFAULT_OPTIONS.style,
469
+ outputDir: options.outputDir ?? dirname(absPath),
470
+ };
471
+ const style = COLOR_STYLES[opts.style];
472
+ if (!style) {
473
+ const valid = Object.keys(COLOR_STYLES).join(", ");
474
+ throw new Error(`Unknown style "${opts.style}". Valid styles: ${valid}`);
475
+ }
476
+ // Ensure output directory exists
477
+ if (!existsSync(opts.outputDir)) {
478
+ mkdirSync(opts.outputDir, { recursive: true });
479
+ }
480
+ // Paginate content
481
+ const pages = paginateContent(body, opts.pagination);
482
+ // Lazy-load dependencies
483
+ const puppeteer = await importPuppeteer();
484
+ const chromePath = findChromeExecutable();
485
+ console.error(kleur.dim(`Using Chrome: ${chromePath}`));
486
+ console.error(kleur.dim(`Style: ${style.name} | Pages: ${pages.length} | ${opts.width}x${opts.height} @${opts.dpr}x`));
487
+ const launch = puppeteer.default?.launch ?? puppeteer.launch;
488
+ const browser = await launch.call(puppeteer.default ?? puppeteer, {
489
+ executablePath: chromePath,
490
+ headless: true,
491
+ args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu"],
492
+ });
493
+ try {
494
+ const page = await browser.newPage();
495
+ await page.setViewport({
496
+ width: opts.width,
497
+ height: opts.height,
498
+ deviceScaleFactor: opts.dpr,
499
+ });
500
+ // Render cover
501
+ const coverHtml = buildCoverHtml(frontmatter, style, opts.width, opts.height);
502
+ await page.setContent(coverHtml, { waitUntil: "domcontentloaded" });
503
+ const coverPath = join(opts.outputDir, "cover.png");
504
+ await page.screenshot({
505
+ path: coverPath,
506
+ type: "png",
507
+ clip: { x: 0, y: 0, width: opts.width, height: opts.height },
508
+ });
509
+ console.error(kleur.dim(` Rendered: cover.png`));
510
+ // Render content cards
511
+ const cardPaths = [];
512
+ for (let i = 0; i < pages.length; i++) {
513
+ const html = await markdownToHtml(pages[i]);
514
+ const cardHtml = buildCardHtml(html, i + 1, pages.length, style, opts.width, opts.height);
515
+ await page.setContent(cardHtml, { waitUntil: "domcontentloaded" });
516
+ const cardPath = join(opts.outputDir, `card_${i + 1}.png`);
517
+ await page.screenshot({
518
+ path: cardPath,
519
+ type: "png",
520
+ clip: { x: 0, y: 0, width: opts.width, height: opts.height },
521
+ });
522
+ cardPaths.push(cardPath);
523
+ console.error(kleur.dim(` Rendered: card_${i + 1}.png`));
524
+ }
525
+ return { coverPath, cardPaths, totalCards: pages.length };
526
+ }
527
+ finally {
528
+ await browser.close();
529
+ }
530
+ }
531
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/lib/render.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,9 @@ export interface ReplyResult {
28
28
  error?: string;
29
29
  }
30
30
  export type StrategyName = "questions" | "top-engaged" | "all-unanswered";
31
+ declare const MAX_REPLIES_HARD_CAP = 30;
32
+ declare const MIN_DELAY_MS = 180000;
33
+ declare const DEFAULT_DELAY_MS = 300000;
31
34
  export declare function selectCandidates(comments: Array<Record<string, unknown>>, strategy: StrategyName, max: number): ReplyPlan;
32
35
  export declare function expandTemplate(template: string, candidate: ReplyCandidate, context: {
33
36
  noteTitle?: string;
@@ -35,4 +38,5 @@ export declare function expandTemplate(template: string, candidate: ReplyCandida
35
38
  export declare function executeReplies(client: XhsClient, noteId: string, candidates: ReplyCandidate[], template: string, delayMs: number, context: {
36
39
  noteTitle?: string;
37
40
  }): Promise<ReplyResult[]>;
41
+ export { DEFAULT_DELAY_MS, MIN_DELAY_MS, MAX_REPLIES_HARD_CAP };
38
42
  //# sourceMappingURL=reply-strategy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reply-strategy.d.ts","sourceRoot":"","sources":["../../src/lib/reply-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AAIzD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAS1E,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,MAAM,GACV,SAAS,CA+CX;AAID,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,MAAM,CAKR;AAID,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,cAAc,EAAE,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,OAAO,CAAC,WAAW,EAAE,CAAC,CAmCxB"}
1
+ {"version":3,"file":"reply-strategy.d.ts","sourceRoot":"","sources":["../../src/lib/reply-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AAIzD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAM1E,QAAA,MAAM,oBAAoB,KAAK,CAAC;AAChC,QAAA,MAAM,YAAY,SAAU,CAAC;AAC7B,QAAA,MAAM,gBAAgB,SAAU,CAAC;AAKjC,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACxC,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,MAAM,GACV,SAAS,CA+CX;AAID,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,MAAM,CAKR;AAID,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,cAAc,EAAE,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,OAAO,CAAC,WAAW,EAAE,CAAC,CAoCxB;AAqBD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -7,8 +7,12 @@
7
7
  import { QUESTION_PATTERN } from "./analyze.js";
8
8
  import { NeedVerifyError } from "./client.js";
9
9
  // ─── Constants ──────────────────────────────────────────────────────────────
10
- const MAX_REPLIES_HARD_CAP = 50;
11
- const MIN_DELAY_MS = 2000;
10
+ // Based on XHS risk control research: 3+ minute intervals between replies,
11
+ // uniform timing patterns trigger bot detection.
12
+ const MAX_REPLIES_HARD_CAP = 30;
13
+ const MIN_DELAY_MS = 180_000; // 3 minutes — XHS minimum safe interval
14
+ const DEFAULT_DELAY_MS = 300_000; // 5 minutes — recommended safe interval
15
+ const JITTER_FACTOR = 0.3; // ±30% random variation to avoid uniform patterns
12
16
  // ─── Strategy Selection ─────────────────────────────────────────────────────
13
17
  export function selectCandidates(comments, strategy, max) {
14
18
  const cap = Math.min(max, MAX_REPLIES_HARD_CAP);
@@ -85,9 +89,10 @@ export async function executeReplies(client, noteId, candidates, template, delay
85
89
  error: err instanceof Error ? err.message : "Unknown error",
86
90
  });
87
91
  }
88
- // Rate limit between replies (skip after last)
92
+ // Rate limit between replies with jitter (skip after last)
89
93
  if (candidate !== candidates[candidates.length - 1]) {
90
- await sleep(delay);
94
+ const jittered = addJitter(delay, JITTER_FACTOR);
95
+ await sleep(jittered);
91
96
  }
92
97
  }
93
98
  return results;
@@ -106,4 +111,9 @@ function toNum(v) {
106
111
  function sleep(ms) {
107
112
  return new Promise((resolve) => setTimeout(resolve, ms));
108
113
  }
114
+ function addJitter(ms, factor) {
115
+ const offset = ms * factor * (2 * Math.random() - 1); // ±factor
116
+ return Math.max(MIN_DELAY_MS, Math.round(ms + offset));
117
+ }
118
+ export { DEFAULT_DELAY_MS, MIN_DELAY_MS, MAX_REPLIES_HARD_CAP };
109
119
  //# sourceMappingURL=reply-strategy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reply-strategy.js","sourceRoot":"","sources":["../../src/lib/reply-strategy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reply-strategy.js","sourceRoot":"","sources":["../../src/lib/reply-strategy.ts"],"names":[],"mappings":"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"}