@lucasygu/redbook 0.1.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.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * redbook CLI — Xiaohongshu (Red Note) from the command line
4
+ *
5
+ * Usage:
6
+ * redbook whoami --cookie-source chrome
7
+ * redbook search "Claude Code" --cookie-source chrome --json
8
+ * redbook read <url> --cookie-source chrome --json
9
+ * redbook comments <url> --cookie-source chrome --json
10
+ * redbook user <user-id> --cookie-source chrome --json
11
+ * redbook user-posts <user-id> --cookie-source chrome --json
12
+ * redbook feed --cookie-source chrome --json
13
+ * redbook post --title "..." --body "..." --images img1.jpg --cookie-source chrome
14
+ * redbook topics "keyword" --cookie-source chrome
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG"}
package/dist/cli.js ADDED
@@ -0,0 +1,377 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * redbook CLI — Xiaohongshu (Red Note) from the command line
4
+ *
5
+ * Usage:
6
+ * redbook whoami --cookie-source chrome
7
+ * redbook search "Claude Code" --cookie-source chrome --json
8
+ * redbook read <url> --cookie-source chrome --json
9
+ * redbook comments <url> --cookie-source chrome --json
10
+ * redbook user <user-id> --cookie-source chrome --json
11
+ * redbook user-posts <user-id> --cookie-source chrome --json
12
+ * redbook feed --cookie-source chrome --json
13
+ * redbook post --title "..." --body "..." --images img1.jpg --cookie-source chrome
14
+ * redbook topics "keyword" --cookie-source chrome
15
+ */
16
+ import { Command } from "commander";
17
+ import kleur from "kleur";
18
+ import { extractCookies } from "./lib/cookies.js";
19
+ import { XhsClient, XhsApiError } from "./lib/client.js";
20
+ const program = new Command();
21
+ program
22
+ .name("redbook")
23
+ .description("CLI tool for Xiaohongshu (Red Note)")
24
+ .version("0.1.0");
25
+ // Global option for cookie source
26
+ function addCookieOption(cmd) {
27
+ return cmd.option("--cookie-source <browser>", "Browser to read cookies from (chrome, safari, firefox)", "chrome");
28
+ }
29
+ function addJsonOption(cmd) {
30
+ return cmd.option("--json", "Output as JSON");
31
+ }
32
+ async function getClient(cookieSource) {
33
+ const cookies = await extractCookies(cookieSource);
34
+ return new XhsClient(cookies);
35
+ }
36
+ function output(data, json) {
37
+ if (json) {
38
+ console.log(JSON.stringify(data, null, 2));
39
+ }
40
+ else {
41
+ console.log(data);
42
+ }
43
+ }
44
+ function handleError(err) {
45
+ if (err instanceof XhsApiError) {
46
+ console.error(kleur.red(`Error: ${err.message}`));
47
+ if (err.code)
48
+ console.error(kleur.dim(`Code: ${err.code}`));
49
+ }
50
+ else if (err instanceof Error) {
51
+ console.error(kleur.red(`Error: ${err.message}`));
52
+ }
53
+ else {
54
+ console.error(kleur.red("Unknown error"));
55
+ }
56
+ process.exit(1);
57
+ }
58
+ // ─── whoami ─────────────────────────────────────────────────────────────────
59
+ const whoamiCmd = program.command("whoami").description("Check connection and show current user info");
60
+ addCookieOption(whoamiCmd);
61
+ addJsonOption(whoamiCmd);
62
+ whoamiCmd.action(async (opts) => {
63
+ try {
64
+ const client = await getClient(opts.cookieSource);
65
+ const info = await client.getSelfInfo();
66
+ if (opts.json) {
67
+ output(info, true);
68
+ }
69
+ else {
70
+ const user = info;
71
+ console.log(kleur.green("Connected to Xiaohongshu"));
72
+ console.log(` User: ${kleur.bold(String(user.nickname ?? user.nick_name ?? "unknown"))}`);
73
+ console.log(` ID: ${user.user_id ?? "unknown"}`);
74
+ if (user.red_id)
75
+ console.log(` RedID: ${user.red_id}`);
76
+ }
77
+ }
78
+ catch (err) {
79
+ handleError(err);
80
+ }
81
+ });
82
+ // ─── search ─────────────────────────────────────────────────────────────────
83
+ const searchCmd = program
84
+ .command("search <keyword>")
85
+ .description("Search notes by keyword")
86
+ .option("--page <n>", "Page number", "1")
87
+ .option("--sort <type>", "Sort: general, popular, latest", "general")
88
+ .option("--type <type>", "Note type: all, video, image", "all");
89
+ addCookieOption(searchCmd);
90
+ addJsonOption(searchCmd);
91
+ searchCmd.action(async (keyword, opts) => {
92
+ try {
93
+ const client = await getClient(opts.cookieSource);
94
+ const sortMap = {
95
+ general: "general",
96
+ popular: "popularity_descending",
97
+ latest: "time_descending",
98
+ };
99
+ const typeMap = { all: 0, video: 1, image: 2 };
100
+ const result = await client.searchNotes(keyword, parseInt(opts.page), 20, sortMap[opts.sort] ?? "general", typeMap[opts.type] ?? 0);
101
+ if (opts.json) {
102
+ output(result, true);
103
+ }
104
+ else {
105
+ const data = result;
106
+ if (data.items) {
107
+ for (const item of data.items) {
108
+ const card = item.note_card;
109
+ if (!card)
110
+ continue;
111
+ console.log(`${kleur.bold(card.title ?? "(no title)")} — ${kleur.dim(`@${card.user?.nickname ?? "?"}`)}` +
112
+ ` ${kleur.cyan(card.note_id ?? "")}`);
113
+ if (card.interact_info) {
114
+ const info = card.interact_info;
115
+ console.log(` ${kleur.dim(`♥ ${info.liked_count ?? 0} 💬 ${info.comment_count ?? 0} ⭐ ${info.collected_count ?? 0}`)}`);
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+ catch (err) {
122
+ handleError(err);
123
+ }
124
+ });
125
+ // ─── read ───────────────────────────────────────────────────────────────────
126
+ const readCmd = program
127
+ .command("read <url>")
128
+ .description("Read a note by URL (tries HTML fallback first)")
129
+ .option("--api", "Force API mode (requires xsec_token in URL)");
130
+ addCookieOption(readCmd);
131
+ addJsonOption(readCmd);
132
+ readCmd.action(async (url, opts) => {
133
+ try {
134
+ const client = await getClient(opts.cookieSource);
135
+ const { noteId, xsecToken } = parseNoteUrl(url);
136
+ let result;
137
+ if (opts.api || xsecToken) {
138
+ try {
139
+ const feedResult = (await client.getNoteById(noteId, xsecToken ?? ""));
140
+ result = feedResult?.items?.[0]?.note_card ?? feedResult;
141
+ }
142
+ catch {
143
+ // Fall back to HTML
144
+ result = await client.getNoteFromHtml(noteId, xsecToken ?? "");
145
+ }
146
+ }
147
+ else {
148
+ result = await client.getNoteFromHtml(noteId, xsecToken ?? "");
149
+ }
150
+ if (opts.json) {
151
+ output(result, true);
152
+ }
153
+ else {
154
+ const note = result;
155
+ console.log(kleur.bold(String(note.title ?? "(no title)")));
156
+ console.log(kleur.dim(`by @${note.user?.nickname ?? "unknown"}`));
157
+ console.log();
158
+ console.log(String(note.desc ?? ""));
159
+ if (note.interact_info) {
160
+ const info = note.interact_info;
161
+ console.log();
162
+ console.log(`♥ ${info.liked_count ?? 0} 💬 ${info.comment_count ?? 0} ⭐ ${info.collected_count ?? 0} 📤 ${info.share_count ?? 0}`);
163
+ }
164
+ }
165
+ }
166
+ catch (err) {
167
+ handleError(err);
168
+ }
169
+ });
170
+ // ─── comments ───────────────────────────────────────────────────────────────
171
+ const commentsCmd = program
172
+ .command("comments <url>")
173
+ .description("Get comments on a note")
174
+ .option("--all", "Fetch all pages of comments");
175
+ addCookieOption(commentsCmd);
176
+ addJsonOption(commentsCmd);
177
+ commentsCmd.action(async (url, opts) => {
178
+ try {
179
+ const client = await getClient(opts.cookieSource);
180
+ const { noteId, xsecToken } = parseNoteUrl(url);
181
+ const allComments = [];
182
+ let cursor = "";
183
+ let hasMore = true;
184
+ while (hasMore) {
185
+ const res = (await client.getComments(noteId, cursor, xsecToken ?? ""));
186
+ if (res.comments)
187
+ allComments.push(...res.comments);
188
+ hasMore = opts.all ? (res.has_more ?? false) : false;
189
+ cursor = res.cursor ?? "";
190
+ }
191
+ if (opts.json) {
192
+ output(allComments, true);
193
+ }
194
+ else {
195
+ for (const comment of allComments) {
196
+ const c = comment;
197
+ const user = c.user_info;
198
+ console.log(`${kleur.bold(`@${user?.nickname ?? "?"}`)} — ${String(c.content ?? "")}`);
199
+ if (c.like_count)
200
+ console.log(kleur.dim(` ♥ ${c.like_count}`));
201
+ }
202
+ console.log(kleur.dim(`\n${allComments.length} comments`));
203
+ }
204
+ }
205
+ catch (err) {
206
+ handleError(err);
207
+ }
208
+ });
209
+ // ─── user ───────────────────────────────────────────────────────────────────
210
+ const userCmd = program
211
+ .command("user <userId>")
212
+ .description("Get user profile info");
213
+ addCookieOption(userCmd);
214
+ addJsonOption(userCmd);
215
+ userCmd.action(async (userId, opts) => {
216
+ try {
217
+ const client = await getClient(opts.cookieSource);
218
+ const info = await client.getUserInfo(userId);
219
+ output(info, opts.json ?? false);
220
+ }
221
+ catch (err) {
222
+ handleError(err);
223
+ }
224
+ });
225
+ // ─── user-posts ─────────────────────────────────────────────────────────────
226
+ const userPostsCmd = program
227
+ .command("user-posts <userId>")
228
+ .description("List a user's posted notes");
229
+ addCookieOption(userPostsCmd);
230
+ addJsonOption(userPostsCmd);
231
+ userPostsCmd.action(async (userId, opts) => {
232
+ try {
233
+ const client = await getClient(opts.cookieSource);
234
+ const result = await client.getUserNotes(userId);
235
+ if (opts.json) {
236
+ output(result, true);
237
+ }
238
+ else {
239
+ const data = result;
240
+ if (data.notes) {
241
+ for (const note of data.notes) {
242
+ console.log(`${kleur.bold(note.display_title ?? "(no title)")} ${kleur.dim(note.note_id ?? "")} [${note.type ?? "?"}]`);
243
+ }
244
+ console.log(kleur.dim(`\n${data.notes.length} notes`));
245
+ }
246
+ }
247
+ }
248
+ catch (err) {
249
+ handleError(err);
250
+ }
251
+ });
252
+ // ─── feed ───────────────────────────────────────────────────────────────────
253
+ const feedCmd = program
254
+ .command("feed")
255
+ .description("Get homepage feed")
256
+ .option("--category <cat>", "Feed category", "homefeed_recommend");
257
+ addCookieOption(feedCmd);
258
+ addJsonOption(feedCmd);
259
+ feedCmd.action(async (opts) => {
260
+ try {
261
+ const client = await getClient(opts.cookieSource);
262
+ const result = await client.getHomeFeed(opts.category);
263
+ output(result, opts.json ?? false);
264
+ }
265
+ catch (err) {
266
+ handleError(err);
267
+ }
268
+ });
269
+ // ─── post ───────────────────────────────────────────────────────────────────
270
+ const postCmd = program
271
+ .command("post")
272
+ .description("Publish an image note")
273
+ .requiredOption("--title <title>", "Note title")
274
+ .requiredOption("--body <body>", "Note body text")
275
+ .option("--images <paths...>", "Image file paths")
276
+ .option("--topic <keyword>", "Topic/hashtag keyword to search and attach")
277
+ .option("--private", "Publish as private note");
278
+ addCookieOption(postCmd);
279
+ addJsonOption(postCmd);
280
+ postCmd.action(async (opts) => {
281
+ try {
282
+ const client = await getClient(opts.cookieSource);
283
+ const imageFiles = opts.images ?? [];
284
+ if (imageFiles.length === 0) {
285
+ console.error(kleur.red("At least one image is required. Use --images <path>"));
286
+ process.exit(1);
287
+ }
288
+ // Upload images
289
+ console.log(kleur.dim("Uploading images..."));
290
+ const fileIds = [];
291
+ for (const filePath of imageFiles) {
292
+ const { fileId, token } = await client.getUploadPermit("image");
293
+ const ext = filePath.toLowerCase().split(".").pop();
294
+ const contentType = ext === "png" ? "image/png" : ext === "webp" ? "image/webp" : "image/jpeg";
295
+ await client.uploadFile(fileId, token, filePath, contentType);
296
+ fileIds.push(fileId);
297
+ console.log(kleur.dim(` Uploaded: ${filePath} → ${fileId}`));
298
+ }
299
+ // Search for topic if specified
300
+ let topics = [];
301
+ if (opts.topic) {
302
+ const topicResult = (await client.searchTopics(opts.topic));
303
+ if (topicResult.length > 0) {
304
+ topics = [topicResult[0]];
305
+ console.log(kleur.dim(` Topic: #${topicResult[0].name}`));
306
+ }
307
+ }
308
+ // Create the note
309
+ console.log(kleur.dim("Publishing note..."));
310
+ const result = await client.createImageNote(opts.title, opts.body, fileIds, {
311
+ topics,
312
+ isPrivate: opts.private ?? false,
313
+ });
314
+ if (opts.json) {
315
+ output(result, true);
316
+ }
317
+ else {
318
+ console.log(kleur.green("Note published!"));
319
+ const r = result;
320
+ if (r.note_id) {
321
+ console.log(` URL: https://www.xiaohongshu.com/explore/${r.note_id}`);
322
+ }
323
+ }
324
+ }
325
+ catch (err) {
326
+ handleError(err);
327
+ }
328
+ });
329
+ // ─── topics ─────────────────────────────────────────────────────────────────
330
+ const topicsCmd = program
331
+ .command("topics <keyword>")
332
+ .description("Search for topics/hashtags to use in posts");
333
+ addCookieOption(topicsCmd);
334
+ addJsonOption(topicsCmd);
335
+ topicsCmd.action(async (keyword, opts) => {
336
+ try {
337
+ const client = await getClient(opts.cookieSource);
338
+ const result = await client.searchTopics(keyword);
339
+ if (opts.json) {
340
+ output(result, true);
341
+ }
342
+ else {
343
+ const data = result;
344
+ const topics = data.topic_info_dtos ?? (Array.isArray(result) ? result : []);
345
+ for (const topic of topics) {
346
+ console.log(`#${kleur.bold(topic.name ?? "?")} ${kleur.dim(`id:${topic.id ?? "?"}`)} ${kleur.dim(`views:${topic.view_num ?? "?"}`)}`);
347
+ }
348
+ }
349
+ }
350
+ catch (err) {
351
+ handleError(err);
352
+ }
353
+ });
354
+ // ─── Helpers ────────────────────────────────────────────────────────────────
355
+ function parseNoteUrl(url) {
356
+ // Handle full URLs like https://www.xiaohongshu.com/explore/abc123?xsec_token=xxx
357
+ // or https://www.xiaohongshu.com/discovery/item/abc123
358
+ // or just a note ID
359
+ let noteId;
360
+ let xsecToken = null;
361
+ if (url.includes("xiaohongshu.com")) {
362
+ const urlObj = new URL(url);
363
+ const pathParts = urlObj.pathname.split("/").filter(Boolean);
364
+ noteId = pathParts[pathParts.length - 1];
365
+ xsecToken = urlObj.searchParams.get("xsec_token");
366
+ }
367
+ else if (url.includes("xhslink.com")) {
368
+ // Short link — just use it as-is, would need redirect following
369
+ noteId = url;
370
+ }
371
+ else {
372
+ noteId = url;
373
+ }
374
+ return { noteId, xsecToken };
375
+ }
376
+ program.parse();
377
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * XHS API Client
3
+ *
4
+ * Handles all HTTP requests to edith.xiaohongshu.com and creator.xiaohongshu.com
5
+ * with proper signing, headers, and error handling.
6
+ */
7
+ import { type XhsCookies } from "./cookies.js";
8
+ export declare class XhsApiError extends Error {
9
+ code?: number | string | undefined;
10
+ response?: unknown | undefined;
11
+ constructor(message: string, code?: number | string | undefined, response?: unknown | undefined);
12
+ }
13
+ export declare class NeedVerifyError extends XhsApiError {
14
+ verifyType: string;
15
+ verifyUuid: string;
16
+ constructor(verifyType: string, verifyUuid: string);
17
+ }
18
+ export declare class XhsClient {
19
+ private cookies;
20
+ constructor(cookies: XhsCookies);
21
+ private baseHeaders;
22
+ private mainApiGet;
23
+ private mainApiPost;
24
+ private creatorHost;
25
+ private creatorGet;
26
+ private creatorPost;
27
+ private handleResponse;
28
+ getSelfInfo(): Promise<unknown>;
29
+ getUserInfo(userId: string): Promise<unknown>;
30
+ getUserNotes(userId: string, cursor?: string): Promise<unknown>;
31
+ searchNotes(keyword: string, page?: number, pageSize?: number, sort?: "general" | "popularity_descending" | "time_descending", noteType?: 0 | 1 | 2): Promise<unknown>;
32
+ getNoteById(noteId: string, xsecToken: string, xsecSource?: string): Promise<unknown>;
33
+ getHomeFeed(category?: string): Promise<unknown>;
34
+ getComments(noteId: string, cursor?: string, xsecToken?: string): Promise<unknown>;
35
+ getSubComments(noteId: string, rootCommentId: string, num?: number, cursor?: string): Promise<unknown>;
36
+ postComment(noteId: string, content: string): Promise<unknown>;
37
+ getNoteFromHtml(noteId: string, xsecToken: string): Promise<unknown>;
38
+ getUploadPermit(fileType: "image" | "video", count?: number): Promise<{
39
+ fileId: string;
40
+ token: string;
41
+ }>;
42
+ uploadFile(fileId: string, token: string, filePath: string, contentType?: string): Promise<void>;
43
+ createImageNote(title: string, desc: string, imageFileIds: string[], options?: {
44
+ topics?: Array<{
45
+ id: string;
46
+ name: string;
47
+ type: string;
48
+ }>;
49
+ ats?: Array<{
50
+ userId: string;
51
+ nickname: string;
52
+ }>;
53
+ postTime?: string;
54
+ isPrivate?: boolean;
55
+ }): Promise<unknown>;
56
+ searchTopics(keyword: string): Promise<unknown>;
57
+ searchUsers(keyword: string): Promise<unknown>;
58
+ getCreatorNoteList(tab?: number, page?: number): Promise<unknown>;
59
+ }
60
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}