@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.
@@ -0,0 +1,505 @@
1
+ /**
2
+ * Main API signing (XYS_ prefix) for edith.xiaohongshu.com
3
+ *
4
+ * Generates x-s, x-s-common, x-t, x-b3-traceid, x-xray-traceid headers.
5
+ *
6
+ * Algorithm overview:
7
+ * 1. MD5 hash of content string (URI + params/body)
8
+ * 2. Build 124-byte binary payload array
9
+ * 3. XOR with static 124-byte hex key
10
+ * 4. Custom Base64 encode (shuffled alphabet)
11
+ * 5. Wrap in JSON envelope → another custom Base64 → XYS_ prefix
12
+ *
13
+ * Ported from: Cloxl/xhshow (MIT license)
14
+ */
15
+ import crypto from "node:crypto";
16
+ // ─── Constants ──────────────────────────────────────────────────────────────
17
+ const STANDARD_BASE64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
18
+ const CUSTOM_BASE64 = "ZmserbBoHQtNP+wOcza/LpngG8yJq42KWYj0DSfdikx3VT16IlUAFM97hECvuRX5";
19
+ const X3_BASE64 = "MfgqrsbcyzPQRStuvC7mn501HIJBo2DEFTKdeNOwxWXYZap89+/A4UVLhijkl63G";
20
+ const HEX_KEY = "71a302257793271ddd273bcee3e4b98d9d7935e1da33f5765e2ea8afb6dc77a51a499d23b67c20660025860cbf13d4540d92497f58686c574e508f46e1956344f39139bf4faf22a3eef120b79258145b2feb5193b6478669961298e79bedca646e1a693a926154a5a7a1bd1cf0dedb742f917a747a1e388b234f2277";
21
+ const VERSION_BYTES = [119, 104, 96, 41];
22
+ const CHECKSUM_VERSION = 1;
23
+ const CHECKSUM_XOR_KEY = 115;
24
+ const CHECKSUM_FIXED_TAIL = [
25
+ 249, 65, 103, 103, 201, 181, 131, 99, 94, 7, 68, 250, 132, 21,
26
+ ];
27
+ const ENV_FINGERPRINT_XOR_KEY = 41;
28
+ const SDK_VERSION = "4.2.6";
29
+ const APP_ID = "xhs-pc-web";
30
+ const PLATFORM = "Windows";
31
+ const X3_PREFIX = "mns0301_";
32
+ const XYS_PREFIX = "XYS_";
33
+ const B1_SECRET_KEY = "xhswebmplfbt";
34
+ const HEX_CHARS = "abcdef0123456789";
35
+ const XSCOMMON_TEMPLATE = {
36
+ s0: 5,
37
+ s1: "",
38
+ x0: "1",
39
+ x1: SDK_VERSION,
40
+ x2: PLATFORM,
41
+ x3: APP_ID,
42
+ x4: "4.86.0",
43
+ x5: "",
44
+ x6: "",
45
+ x7: "",
46
+ x8: "",
47
+ x9: -596800761,
48
+ x10: 0,
49
+ x11: "normal",
50
+ };
51
+ const SIGNATURE_DATA_TEMPLATE = {
52
+ x0: SDK_VERSION,
53
+ x1: APP_ID,
54
+ x2: PLATFORM,
55
+ x3: "",
56
+ x4: "",
57
+ };
58
+ const USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0";
59
+ // ─── Base64 Encoding ─────────────────────────────────────────────────────────
60
+ function makeTranslateTable(from, to) {
61
+ const table = new Map();
62
+ for (let i = 0; i < from.length; i++) {
63
+ table.set(from.charCodeAt(i), to.charCodeAt(i));
64
+ }
65
+ return table;
66
+ }
67
+ function translateString(s, table) {
68
+ const chars = [];
69
+ for (let i = 0; i < s.length; i++) {
70
+ const code = s.charCodeAt(i);
71
+ const mapped = table.get(code);
72
+ chars.push(String.fromCharCode(mapped ?? code));
73
+ }
74
+ return chars.join("");
75
+ }
76
+ const customEncodeTable = makeTranslateTable(STANDARD_BASE64, CUSTOM_BASE64);
77
+ const x3EncodeTable = makeTranslateTable(STANDARD_BASE64, X3_BASE64);
78
+ function customBase64Encode(data) {
79
+ const buf = typeof data === "string" ? Buffer.from(data, "utf-8") : Buffer.from(data);
80
+ const standard = buf.toString("base64");
81
+ return translateString(standard, customEncodeTable);
82
+ }
83
+ function x3Base64Encode(data) {
84
+ const standard = Buffer.from(data).toString("base64");
85
+ return translateString(standard, x3EncodeTable);
86
+ }
87
+ // ─── Utility Functions ───────────────────────────────────────────────────────
88
+ function randomInt(min, max) {
89
+ return Math.floor(Math.random() * (max - min + 1)) + min;
90
+ }
91
+ function randomUint32() {
92
+ return crypto.randomBytes(4).readUInt32LE(0);
93
+ }
94
+ function intToLeBytes(val, length = 4) {
95
+ const arr = [];
96
+ for (let i = 0; i < length; i++) {
97
+ arr.push(val & 0xff);
98
+ val = val >>> 8;
99
+ }
100
+ return arr;
101
+ }
102
+ function int64ToLeBytes(val) {
103
+ const buf = Buffer.alloc(8);
104
+ buf.writeBigUInt64LE(val);
105
+ return Array.from(buf);
106
+ }
107
+ function hexToBytes(hex) {
108
+ const bytes = new Uint8Array(hex.length / 2);
109
+ for (let i = 0; i < hex.length; i += 2) {
110
+ bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
111
+ }
112
+ return bytes;
113
+ }
114
+ // ─── Environment Fingerprints ────────────────────────────────────────────────
115
+ function envFingerprintA(ts, xorKey) {
116
+ const data = Buffer.alloc(8);
117
+ data.writeBigUInt64LE(ts);
118
+ let sum1 = 0;
119
+ for (let i = 1; i <= 4; i++)
120
+ sum1 += data[i];
121
+ let sum2 = 0;
122
+ for (let i = 5; i <= 7; i++)
123
+ sum2 += data[i];
124
+ const mark = ((sum1 & 0xff) + sum2) & 0xff;
125
+ data[0] = mark;
126
+ for (let i = 0; i < data.length; i++) {
127
+ data[i] ^= xorKey;
128
+ }
129
+ return Array.from(data);
130
+ }
131
+ function envFingerprintB(ts) {
132
+ return int64ToLeBytes(ts);
133
+ }
134
+ // ─── Payload Builder ────────────────────────────────────────────────────────
135
+ function buildPayloadArray(hexParameter, a1Value, contentString, timestamp) {
136
+ const payload = [];
137
+ // Version bytes [0-3]
138
+ payload.push(...VERSION_BYTES);
139
+ // Random seed [4-7]
140
+ const seed = randomUint32();
141
+ const seedBytes = intToLeBytes(seed, 4);
142
+ payload.push(...seedBytes);
143
+ const seedByte0 = seedBytes[0];
144
+ // Timestamp
145
+ const ts = timestamp ?? Date.now() / 1000;
146
+ const tsMs = BigInt(Math.floor(ts * 1000));
147
+ // Environment fingerprint A [8-15]
148
+ payload.push(...envFingerprintA(tsMs, ENV_FINGERPRINT_XOR_KEY));
149
+ // Environment fingerprint B [16-23] (page load time)
150
+ const timeOffset = randomInt(10, 50);
151
+ const pageLoadTs = BigInt(Math.floor((ts - timeOffset) * 1000));
152
+ payload.push(...envFingerprintB(pageLoadTs));
153
+ // Sequence counter [24-27]
154
+ const sequenceValue = randomInt(15, 50);
155
+ payload.push(...intToLeBytes(sequenceValue, 4));
156
+ // Window props length [28-31]
157
+ const windowPropsLength = randomInt(900, 1200);
158
+ payload.push(...intToLeBytes(windowPropsLength, 4));
159
+ // URI content length [32-35]
160
+ payload.push(...intToLeBytes(contentString.length, 4));
161
+ // MD5 XOR segment [36-43]
162
+ const md5Bytes = hexToBytes(hexParameter);
163
+ for (let i = 0; i < 8; i++) {
164
+ payload.push(md5Bytes[i] ^ seedByte0);
165
+ }
166
+ // A1 length marker [44]
167
+ payload.push(52);
168
+ // A1 content [45-96] (52 bytes, padded/truncated)
169
+ const a1Bytes = Buffer.from(a1Value, "utf-8");
170
+ for (let i = 0; i < 52; i++) {
171
+ payload.push(i < a1Bytes.length ? a1Bytes[i] : 0);
172
+ }
173
+ // Source length marker [97]
174
+ payload.push(10);
175
+ // Source content [98-107] ("xhs-pc-web", 10 bytes)
176
+ const sourceBytes = Buffer.from(APP_ID, "utf-8");
177
+ for (let i = 0; i < 10; i++) {
178
+ payload.push(i < sourceBytes.length ? sourceBytes[i] : 0);
179
+ }
180
+ // Fixed byte [108]
181
+ payload.push(1);
182
+ // Checksum block [109-124]
183
+ payload.push(CHECKSUM_VERSION);
184
+ payload.push(seedByte0 ^ CHECKSUM_XOR_KEY);
185
+ payload.push(...CHECKSUM_FIXED_TAIL);
186
+ return payload;
187
+ }
188
+ // ─── XOR Transform ──────────────────────────────────────────────────────────
189
+ function xorTransform(source) {
190
+ const keyBytes = hexToBytes(HEX_KEY);
191
+ const result = new Uint8Array(source.length);
192
+ for (let i = 0; i < source.length; i++) {
193
+ if (i < keyBytes.length) {
194
+ result[i] = (source[i] ^ keyBytes[i]) & 0xff;
195
+ }
196
+ else {
197
+ result[i] = source[i] & 0xff;
198
+ }
199
+ }
200
+ return result;
201
+ }
202
+ // ─── CRC32 (JS-compatible variant) ──────────────────────────────────────────
203
+ const CRC32_POLY = 0xedb88320;
204
+ let crc32Table = null;
205
+ function ensureCrc32Table() {
206
+ if (crc32Table)
207
+ return crc32Table;
208
+ const table = new Uint32Array(256);
209
+ for (let d = 0; d < 256; d++) {
210
+ let r = d;
211
+ for (let j = 0; j < 8; j++) {
212
+ r = r & 1 ? (r >>> 1) ^ CRC32_POLY : r >>> 1;
213
+ }
214
+ table[d] = r;
215
+ }
216
+ crc32Table = table;
217
+ return table;
218
+ }
219
+ function crc32JsInt(data) {
220
+ const table = ensureCrc32Table();
221
+ let c = 0xffffffff;
222
+ // JS mode: charCodeAt & 0xFF for each char
223
+ for (let i = 0; i < data.length; i++) {
224
+ const b = data.charCodeAt(i) & 0xff;
225
+ c = (table[(c & 0xff) ^ b] ^ (c >>> 8)) >>> 0;
226
+ }
227
+ // JS-compatible final XOR: (-1 ^ c ^ 0xEDB88320) >>> 0, then signed
228
+ const u = ((0xffffffff ^ c) ^ CRC32_POLY) >>> 0;
229
+ return u > 0x7fffffff ? u - 0x100000000 : u;
230
+ }
231
+ // ─── RC4 Encryption ─────────────────────────────────────────────────────────
232
+ function rc4Encrypt(key, data) {
233
+ const keyBuf = Buffer.from(key, "utf-8");
234
+ const dataBuf = Buffer.from(data, "utf-8");
235
+ // KSA
236
+ const S = new Uint8Array(256);
237
+ for (let i = 0; i < 256; i++)
238
+ S[i] = i;
239
+ let j = 0;
240
+ for (let i = 0; i < 256; i++) {
241
+ j = (j + S[i] + keyBuf[i % keyBuf.length]) & 0xff;
242
+ [S[i], S[j]] = [S[j], S[i]];
243
+ }
244
+ // PRGA
245
+ const result = Buffer.alloc(dataBuf.length);
246
+ let i2 = 0;
247
+ let j2 = 0;
248
+ for (let k = 0; k < dataBuf.length; k++) {
249
+ i2 = (i2 + 1) & 0xff;
250
+ j2 = (j2 + S[i2]) & 0xff;
251
+ [S[i2], S[j2]] = [S[j2], S[i2]];
252
+ result[k] = dataBuf[k] ^ S[(S[i2] + S[j2]) & 0xff];
253
+ }
254
+ return result;
255
+ }
256
+ // ─── Fingerprint Generation ─────────────────────────────────────────────────
257
+ import { GPU_VENDORS, SCREEN_RESOLUTIONS, FINGERPRINT_DEFAULTS } from "./fingerprint-data.js";
258
+ function weightedChoice(options, weights) {
259
+ const total = weights.reduce((a, b) => a + b, 0);
260
+ let r = Math.random() * total;
261
+ for (let i = 0; i < options.length; i++) {
262
+ r -= weights[i];
263
+ if (r <= 0)
264
+ return options[i];
265
+ }
266
+ return options[options.length - 1];
267
+ }
268
+ function generateFingerprint(cookies, userAgent) {
269
+ const cookieString = Object.entries(cookies)
270
+ .map(([k, v]) => `${k}=${v}`)
271
+ .join("; ");
272
+ const gpuEntry = GPU_VENDORS[Math.floor(Math.random() * GPU_VENDORS.length)];
273
+ const [vendor, renderer] = gpuEntry.split("|");
274
+ const screenRes = weightedChoice(SCREEN_RESOLUTIONS.resolutions, SCREEN_RESOLUTIONS.weights);
275
+ const [widthStr, heightStr] = screenRes.split(";");
276
+ const width = parseInt(widthStr);
277
+ const height = parseInt(heightStr);
278
+ const availWidth = Math.random() > 0.5 ? width - weightedChoice([0, 30, 60, 80], [0.1, 0.4, 0.3, 0.2]) : width;
279
+ const availHeight = Math.random() > 0.5 ? height : height - weightedChoice([30, 60, 80, 100], [0.2, 0.5, 0.2, 0.1]);
280
+ const colorDepth = weightedChoice([16, 24, 30, 32], [0.05, 0.6, 0.05, 0.3]);
281
+ const deviceMemory = weightedChoice([1, 2, 4, 8, 12, 16], [0.1, 0.25, 0.4, 0.2, 0.03, 0.01]);
282
+ const cores = weightedChoice([2, 4, 6, 8, 12, 16, 24, 32], [0.1, 0.4, 0.2, 0.15, 0.08, 0.04, 0.02, 0.01]);
283
+ const webglHash = crypto.createHash("md5").update(crypto.randomBytes(32)).digest("hex");
284
+ const canvasHash = "742cc32c";
285
+ const isIncognito = Math.random() > 0.95 ? "true" : "false";
286
+ const x78y = randomInt(2350, 2450);
287
+ return {
288
+ x1: userAgent,
289
+ x2: "false",
290
+ x3: "zh-CN",
291
+ x4: String(colorDepth),
292
+ x5: String(deviceMemory),
293
+ x6: "24",
294
+ x7: `${vendor},${renderer}`,
295
+ x8: String(cores),
296
+ x9: `${width};${height}`,
297
+ x10: `${availWidth};${availHeight}`,
298
+ x11: "-480",
299
+ x12: "Asia/Shanghai",
300
+ x13: isIncognito,
301
+ x14: isIncognito,
302
+ x15: isIncognito,
303
+ x16: "false",
304
+ x17: "false",
305
+ x18: "un",
306
+ x19: "Win32",
307
+ x20: "",
308
+ x21: FINGERPRINT_DEFAULTS.browserPlugins,
309
+ x22: webglHash,
310
+ x23: "false",
311
+ x24: "false",
312
+ x25: "false",
313
+ x26: "false",
314
+ x27: "false",
315
+ x28: "0,false,false",
316
+ x29: "4,7,8",
317
+ x30: "swf object not loaded",
318
+ x33: "0",
319
+ x34: "0",
320
+ x35: "0",
321
+ x36: String(randomInt(1, 20)),
322
+ x37: "0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|1|0|0|0|0|0",
323
+ x38: "0|0|1|0|1|0|0|0|0|0|1|0|1|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0",
324
+ x39: 0,
325
+ x40: "0",
326
+ x41: "0",
327
+ x42: "3.4.4",
328
+ x43: canvasHash,
329
+ x44: String(Date.now()),
330
+ x45: "__SEC_CAV__1-1-1-1-1|__SEC_WSA__|",
331
+ x46: "false",
332
+ x47: "1|0|0|0|0|0",
333
+ x48: "",
334
+ x49: "{list:[],type:}",
335
+ x50: "",
336
+ x51: "",
337
+ x52: "",
338
+ x55: "380,380,360,400,380,400,420,380,400,400,360,360,440,420",
339
+ x56: `${vendor}|${renderer}|${webglHash}|35`,
340
+ x57: cookieString,
341
+ x58: "180",
342
+ x59: "2",
343
+ x60: "63",
344
+ x61: "1291",
345
+ x62: "2047",
346
+ x63: "0",
347
+ x64: "0",
348
+ x65: "0",
349
+ x66: {
350
+ referer: "",
351
+ location: "https://www.xiaohongshu.com/explore",
352
+ frame: 0,
353
+ },
354
+ x67: "1|0",
355
+ x68: "0",
356
+ x69: "326|1292|30",
357
+ x70: ["location"],
358
+ x71: "true",
359
+ x72: "complete",
360
+ x73: "1191",
361
+ x74: "0|0|0",
362
+ x75: "Google Inc.",
363
+ x76: "true",
364
+ x77: "1|1|1|1|1|1|1|1|1|1",
365
+ x78: {
366
+ x: 0,
367
+ y: x78y,
368
+ left: 0,
369
+ right: 290.828125,
370
+ bottom: x78y + 18,
371
+ height: 18,
372
+ top: x78y,
373
+ width: 290.828125,
374
+ font: FINGERPRINT_DEFAULTS.fonts,
375
+ },
376
+ x82: "_0x17a2|_0x1954",
377
+ x31: "124.04347527516074",
378
+ x79: "144|599565058866",
379
+ x53: crypto.createHash("md5").update(crypto.randomBytes(32)).digest("hex"),
380
+ x54: "10311144241322244122",
381
+ x80: "1|[object FileSystemDirectoryHandle]",
382
+ };
383
+ }
384
+ function generateB1(fp) {
385
+ const b1Fields = {};
386
+ for (const key of [
387
+ "x33", "x34", "x35", "x36", "x37", "x38", "x39",
388
+ "x42", "x43", "x44", "x45", "x46", "x48", "x49",
389
+ "x50", "x51", "x52", "x82",
390
+ ]) {
391
+ b1Fields[key] = fp[key];
392
+ }
393
+ const b1Json = JSON.stringify(b1Fields);
394
+ const ciphertext = rc4Encrypt(B1_SECRET_KEY, b1Json);
395
+ // URL-encode the ciphertext (latin1), then parse byte values
396
+ const latin1 = ciphertext.toString("latin1");
397
+ const encoded = encodeURIComponent(latin1).replace(/[!'()*~._-]/g, (c) => c // keep these chars unencoded like Python's safe param
398
+ );
399
+ // Parse URL-encoded bytes
400
+ const bytes = [];
401
+ const parts = encoded.split("%").slice(1);
402
+ for (const part of parts) {
403
+ bytes.push(parseInt(part.substring(0, 2), 16));
404
+ for (let i = 2; i < part.length; i++) {
405
+ bytes.push(part.charCodeAt(i));
406
+ }
407
+ }
408
+ return customBase64Encode(Buffer.from(bytes));
409
+ }
410
+ // ─── Trace ID Generation ────────────────────────────────────────────────────
411
+ function generateB3TraceId() {
412
+ let id = "";
413
+ for (let i = 0; i < 16; i++) {
414
+ id += HEX_CHARS[Math.floor(Math.random() * 16)];
415
+ }
416
+ return id;
417
+ }
418
+ function generateXrayTraceId(timestamp) {
419
+ const ts = timestamp ?? Date.now();
420
+ const seq = Math.floor(Math.random() * 8388607); // 2^23-1
421
+ const part1 = ((BigInt(ts) << 23n) | BigInt(seq))
422
+ .toString(16)
423
+ .padStart(16, "0");
424
+ let part2 = "";
425
+ for (let i = 0; i < 16; i++) {
426
+ part2 += HEX_CHARS[Math.floor(Math.random() * 16)];
427
+ }
428
+ return part1 + part2;
429
+ }
430
+ // ─── Content String Builder ─────────────────────────────────────────────────
431
+ function buildContentString(method, uri, payload) {
432
+ if (method === "POST") {
433
+ if (!payload)
434
+ return uri;
435
+ return uri + JSON.stringify(payload);
436
+ }
437
+ // GET: URI is already the full path with query params
438
+ return uri;
439
+ }
440
+ function extractUri(url) {
441
+ try {
442
+ const parsed = new URL(url);
443
+ return parsed.pathname;
444
+ }
445
+ catch {
446
+ // Already a URI path
447
+ return url.split("?")[0];
448
+ }
449
+ }
450
+ function buildGetUri(uri, params) {
451
+ if (!params || Object.keys(params).length === 0)
452
+ return uri;
453
+ const parts = [];
454
+ for (const [key, value] of Object.entries(params)) {
455
+ const strVal = Array.isArray(value) ? value.join(",") : String(value);
456
+ const encoded = strVal.replace(/=/g, "%3D");
457
+ parts.push(`${key}=${encoded}`);
458
+ }
459
+ return `${uri}?${parts.join("&")}`;
460
+ }
461
+ /**
462
+ * Generate all signing headers for a main API (edith.xiaohongshu.com) request.
463
+ */
464
+ export function signMainApi(method, uri, cookies, params, payload, timestamp) {
465
+ const a1 = cookies.a1;
466
+ if (!a1)
467
+ throw new Error("Missing 'a1' in cookies");
468
+ const ts = timestamp ?? Date.now() / 1000;
469
+ const tsMs = Math.floor(ts * 1000);
470
+ // Build URI with query params for GET
471
+ const uriPath = extractUri(uri);
472
+ const fullUri = method === "GET" ? buildGetUri(uriPath, params) : uriPath;
473
+ // Build content string for signature
474
+ const contentString = buildContentString(method, fullUri, payload);
475
+ // MD5 hash
476
+ const dValue = crypto
477
+ .createHash("md5")
478
+ .update(contentString, "utf-8")
479
+ .digest("hex");
480
+ // Build payload array and sign
481
+ const payloadArray = buildPayloadArray(dValue, a1, contentString, ts);
482
+ const xorResult = xorTransform(payloadArray);
483
+ const x3Signature = x3Base64Encode(xorResult.slice(0, 124));
484
+ // Build x-s
485
+ const signatureData = { ...SIGNATURE_DATA_TEMPLATE };
486
+ signatureData.x3 = X3_PREFIX + x3Signature;
487
+ const signatureJson = JSON.stringify(signatureData);
488
+ const xs = XYS_PREFIX + customBase64Encode(signatureJson);
489
+ // Build x-s-common
490
+ const fingerprint = generateFingerprint(cookies, USER_AGENT);
491
+ const b1 = generateB1(fingerprint);
492
+ const x9 = crc32JsInt(b1);
493
+ const xsCommonStruct = { ...XSCOMMON_TEMPLATE, x5: a1, x8: b1, x9 };
494
+ const xsCommonJson = JSON.stringify(xsCommonStruct);
495
+ const xsCommon = customBase64Encode(xsCommonJson);
496
+ return {
497
+ "x-s": xs,
498
+ "x-s-common": xsCommon,
499
+ "x-t": String(tsMs),
500
+ "x-b3-traceid": generateB3TraceId(),
501
+ "x-xray-traceid": generateXrayTraceId(tsMs),
502
+ };
503
+ }
504
+ export { USER_AGENT, extractUri, buildGetUri };
505
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../src/lib/signing.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@lucasygu/redbook",
3
+ "version": "0.1.0",
4
+ "description": "CLI tool for Xiaohongshu (Red Note) - read and post via private API",
5
+ "type": "module",
6
+ "main": "./dist/lib/client.js",
7
+ "exports": {
8
+ ".": "./dist/lib/client.js",
9
+ "./cookies": "./dist/lib/cookies.js",
10
+ "./signing": "./dist/lib/signing.js"
11
+ },
12
+ "bin": {
13
+ "redbook": "./dist/cli.js"
14
+ },
15
+ "files": [
16
+ "dist/",
17
+ "LICENSE"
18
+ ],
19
+ "scripts": {
20
+ "build": "tsc && chmod +x dist/cli.js",
21
+ "dev": "tsc --watch",
22
+ "prepublishOnly": "npm run build",
23
+ "start": "node dist/cli.js"
24
+ },
25
+ "engines": {
26
+ "node": ">=22"
27
+ },
28
+ "keywords": [
29
+ "xiaohongshu",
30
+ "redbook",
31
+ "xhs",
32
+ "red-note",
33
+ "cli"
34
+ ],
35
+ "author": "lucasygu",
36
+ "license": "MIT",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "git+https://github.com/lucasygu/redbook.git"
40
+ },
41
+ "bugs": {
42
+ "url": "https://github.com/lucasygu/redbook/issues"
43
+ },
44
+ "dependencies": {
45
+ "@steipete/sweet-cookie": "^0.1.0",
46
+ "commander": "^13.1.0",
47
+ "kleur": "^4.1.5"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.0.0",
51
+ "typescript": "^5.7.0"
52
+ }
53
+ }