@liangrk/claude-code-wechatbot 0.3.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/setup.js ADDED
@@ -0,0 +1,1208 @@
1
+ #!/usr/bin/env bun
2
+ import { createRequire } from "node:module";
3
+ var __create = Object.create;
4
+ var __getProtoOf = Object.getPrototypeOf;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ function __accessProp(key) {
9
+ return this[key];
10
+ }
11
+ var __toESMCache_node;
12
+ var __toESMCache_esm;
13
+ var __toESM = (mod, isNodeMode, target) => {
14
+ var canCache = mod != null && typeof mod === "object";
15
+ if (canCache) {
16
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
17
+ var cached = cache.get(mod);
18
+ if (cached)
19
+ return cached;
20
+ }
21
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
22
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
23
+ for (let key of __getOwnPropNames(mod))
24
+ if (!__hasOwnProp.call(to, key))
25
+ __defProp(to, key, {
26
+ get: __accessProp.bind(mod, key),
27
+ enumerable: true
28
+ });
29
+ if (canCache)
30
+ cache.set(mod, to);
31
+ return to;
32
+ };
33
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
34
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
35
+
36
+ // node_modules/qrcode-terminal/vendor/QRCode/QRMode.js
37
+ var require_QRMode = __commonJS((exports, module) => {
38
+ module.exports = {
39
+ MODE_NUMBER: 1 << 0,
40
+ MODE_ALPHA_NUM: 1 << 1,
41
+ MODE_8BIT_BYTE: 1 << 2,
42
+ MODE_KANJI: 1 << 3
43
+ };
44
+ });
45
+
46
+ // node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js
47
+ var require_QR8bitByte = __commonJS((exports, module) => {
48
+ var QRMode = require_QRMode();
49
+ function QR8bitByte(data) {
50
+ this.mode = QRMode.MODE_8BIT_BYTE;
51
+ this.data = data;
52
+ }
53
+ QR8bitByte.prototype = {
54
+ getLength: function() {
55
+ return this.data.length;
56
+ },
57
+ write: function(buffer) {
58
+ for (var i = 0;i < this.data.length; i++) {
59
+ buffer.put(this.data.charCodeAt(i), 8);
60
+ }
61
+ }
62
+ };
63
+ module.exports = QR8bitByte;
64
+ });
65
+
66
+ // node_modules/qrcode-terminal/vendor/QRCode/QRMath.js
67
+ var require_QRMath = __commonJS((exports, module) => {
68
+ var QRMath = {
69
+ glog: function(n) {
70
+ if (n < 1) {
71
+ throw new Error("glog(" + n + ")");
72
+ }
73
+ return QRMath.LOG_TABLE[n];
74
+ },
75
+ gexp: function(n) {
76
+ while (n < 0) {
77
+ n += 255;
78
+ }
79
+ while (n >= 256) {
80
+ n -= 255;
81
+ }
82
+ return QRMath.EXP_TABLE[n];
83
+ },
84
+ EXP_TABLE: new Array(256),
85
+ LOG_TABLE: new Array(256)
86
+ };
87
+ for (i = 0;i < 8; i++) {
88
+ QRMath.EXP_TABLE[i] = 1 << i;
89
+ }
90
+ var i;
91
+ for (i = 8;i < 256; i++) {
92
+ QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
93
+ }
94
+ var i;
95
+ for (i = 0;i < 255; i++) {
96
+ QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
97
+ }
98
+ var i;
99
+ module.exports = QRMath;
100
+ });
101
+
102
+ // node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js
103
+ var require_QRPolynomial = __commonJS((exports, module) => {
104
+ var QRMath = require_QRMath();
105
+ function QRPolynomial(num, shift) {
106
+ if (num.length === undefined) {
107
+ throw new Error(num.length + "/" + shift);
108
+ }
109
+ var offset = 0;
110
+ while (offset < num.length && num[offset] === 0) {
111
+ offset++;
112
+ }
113
+ this.num = new Array(num.length - offset + shift);
114
+ for (var i = 0;i < num.length - offset; i++) {
115
+ this.num[i] = num[i + offset];
116
+ }
117
+ }
118
+ QRPolynomial.prototype = {
119
+ get: function(index) {
120
+ return this.num[index];
121
+ },
122
+ getLength: function() {
123
+ return this.num.length;
124
+ },
125
+ multiply: function(e) {
126
+ var num = new Array(this.getLength() + e.getLength() - 1);
127
+ for (var i = 0;i < this.getLength(); i++) {
128
+ for (var j = 0;j < e.getLength(); j++) {
129
+ num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
130
+ }
131
+ }
132
+ return new QRPolynomial(num, 0);
133
+ },
134
+ mod: function(e) {
135
+ if (this.getLength() - e.getLength() < 0) {
136
+ return this;
137
+ }
138
+ var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
139
+ var num = new Array(this.getLength());
140
+ for (var i = 0;i < this.getLength(); i++) {
141
+ num[i] = this.get(i);
142
+ }
143
+ for (var x = 0;x < e.getLength(); x++) {
144
+ num[x] ^= QRMath.gexp(QRMath.glog(e.get(x)) + ratio);
145
+ }
146
+ return new QRPolynomial(num, 0).mod(e);
147
+ }
148
+ };
149
+ module.exports = QRPolynomial;
150
+ });
151
+
152
+ // node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js
153
+ var require_QRMaskPattern = __commonJS((exports, module) => {
154
+ module.exports = {
155
+ PATTERN000: 0,
156
+ PATTERN001: 1,
157
+ PATTERN010: 2,
158
+ PATTERN011: 3,
159
+ PATTERN100: 4,
160
+ PATTERN101: 5,
161
+ PATTERN110: 6,
162
+ PATTERN111: 7
163
+ };
164
+ });
165
+
166
+ // node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js
167
+ var require_QRUtil = __commonJS((exports, module) => {
168
+ var QRMode = require_QRMode();
169
+ var QRPolynomial = require_QRPolynomial();
170
+ var QRMath = require_QRMath();
171
+ var QRMaskPattern = require_QRMaskPattern();
172
+ var QRUtil = {
173
+ PATTERN_POSITION_TABLE: [
174
+ [],
175
+ [6, 18],
176
+ [6, 22],
177
+ [6, 26],
178
+ [6, 30],
179
+ [6, 34],
180
+ [6, 22, 38],
181
+ [6, 24, 42],
182
+ [6, 26, 46],
183
+ [6, 28, 50],
184
+ [6, 30, 54],
185
+ [6, 32, 58],
186
+ [6, 34, 62],
187
+ [6, 26, 46, 66],
188
+ [6, 26, 48, 70],
189
+ [6, 26, 50, 74],
190
+ [6, 30, 54, 78],
191
+ [6, 30, 56, 82],
192
+ [6, 30, 58, 86],
193
+ [6, 34, 62, 90],
194
+ [6, 28, 50, 72, 94],
195
+ [6, 26, 50, 74, 98],
196
+ [6, 30, 54, 78, 102],
197
+ [6, 28, 54, 80, 106],
198
+ [6, 32, 58, 84, 110],
199
+ [6, 30, 58, 86, 114],
200
+ [6, 34, 62, 90, 118],
201
+ [6, 26, 50, 74, 98, 122],
202
+ [6, 30, 54, 78, 102, 126],
203
+ [6, 26, 52, 78, 104, 130],
204
+ [6, 30, 56, 82, 108, 134],
205
+ [6, 34, 60, 86, 112, 138],
206
+ [6, 30, 58, 86, 114, 142],
207
+ [6, 34, 62, 90, 118, 146],
208
+ [6, 30, 54, 78, 102, 126, 150],
209
+ [6, 24, 50, 76, 102, 128, 154],
210
+ [6, 28, 54, 80, 106, 132, 158],
211
+ [6, 32, 58, 84, 110, 136, 162],
212
+ [6, 26, 54, 82, 110, 138, 166],
213
+ [6, 30, 58, 86, 114, 142, 170]
214
+ ],
215
+ G15: 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0,
216
+ G18: 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0,
217
+ G15_MASK: 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1,
218
+ getBCHTypeInfo: function(data) {
219
+ var d = data << 10;
220
+ while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
221
+ d ^= QRUtil.G15 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15);
222
+ }
223
+ return (data << 10 | d) ^ QRUtil.G15_MASK;
224
+ },
225
+ getBCHTypeNumber: function(data) {
226
+ var d = data << 12;
227
+ while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
228
+ d ^= QRUtil.G18 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18);
229
+ }
230
+ return data << 12 | d;
231
+ },
232
+ getBCHDigit: function(data) {
233
+ var digit = 0;
234
+ while (data !== 0) {
235
+ digit++;
236
+ data >>>= 1;
237
+ }
238
+ return digit;
239
+ },
240
+ getPatternPosition: function(typeNumber) {
241
+ return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
242
+ },
243
+ getMask: function(maskPattern, i, j) {
244
+ switch (maskPattern) {
245
+ case QRMaskPattern.PATTERN000:
246
+ return (i + j) % 2 === 0;
247
+ case QRMaskPattern.PATTERN001:
248
+ return i % 2 === 0;
249
+ case QRMaskPattern.PATTERN010:
250
+ return j % 3 === 0;
251
+ case QRMaskPattern.PATTERN011:
252
+ return (i + j) % 3 === 0;
253
+ case QRMaskPattern.PATTERN100:
254
+ return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0;
255
+ case QRMaskPattern.PATTERN101:
256
+ return i * j % 2 + i * j % 3 === 0;
257
+ case QRMaskPattern.PATTERN110:
258
+ return (i * j % 2 + i * j % 3) % 2 === 0;
259
+ case QRMaskPattern.PATTERN111:
260
+ return (i * j % 3 + (i + j) % 2) % 2 === 0;
261
+ default:
262
+ throw new Error("bad maskPattern:" + maskPattern);
263
+ }
264
+ },
265
+ getErrorCorrectPolynomial: function(errorCorrectLength) {
266
+ var a = new QRPolynomial([1], 0);
267
+ for (var i = 0;i < errorCorrectLength; i++) {
268
+ a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
269
+ }
270
+ return a;
271
+ },
272
+ getLengthInBits: function(mode, type) {
273
+ if (1 <= type && type < 10) {
274
+ switch (mode) {
275
+ case QRMode.MODE_NUMBER:
276
+ return 10;
277
+ case QRMode.MODE_ALPHA_NUM:
278
+ return 9;
279
+ case QRMode.MODE_8BIT_BYTE:
280
+ return 8;
281
+ case QRMode.MODE_KANJI:
282
+ return 8;
283
+ default:
284
+ throw new Error("mode:" + mode);
285
+ }
286
+ } else if (type < 27) {
287
+ switch (mode) {
288
+ case QRMode.MODE_NUMBER:
289
+ return 12;
290
+ case QRMode.MODE_ALPHA_NUM:
291
+ return 11;
292
+ case QRMode.MODE_8BIT_BYTE:
293
+ return 16;
294
+ case QRMode.MODE_KANJI:
295
+ return 10;
296
+ default:
297
+ throw new Error("mode:" + mode);
298
+ }
299
+ } else if (type < 41) {
300
+ switch (mode) {
301
+ case QRMode.MODE_NUMBER:
302
+ return 14;
303
+ case QRMode.MODE_ALPHA_NUM:
304
+ return 13;
305
+ case QRMode.MODE_8BIT_BYTE:
306
+ return 16;
307
+ case QRMode.MODE_KANJI:
308
+ return 12;
309
+ default:
310
+ throw new Error("mode:" + mode);
311
+ }
312
+ } else {
313
+ throw new Error("type:" + type);
314
+ }
315
+ },
316
+ getLostPoint: function(qrCode) {
317
+ var moduleCount = qrCode.getModuleCount();
318
+ var lostPoint = 0;
319
+ var row = 0;
320
+ var col = 0;
321
+ for (row = 0;row < moduleCount; row++) {
322
+ for (col = 0;col < moduleCount; col++) {
323
+ var sameCount = 0;
324
+ var dark = qrCode.isDark(row, col);
325
+ for (var r = -1;r <= 1; r++) {
326
+ if (row + r < 0 || moduleCount <= row + r) {
327
+ continue;
328
+ }
329
+ for (var c = -1;c <= 1; c++) {
330
+ if (col + c < 0 || moduleCount <= col + c) {
331
+ continue;
332
+ }
333
+ if (r === 0 && c === 0) {
334
+ continue;
335
+ }
336
+ if (dark === qrCode.isDark(row + r, col + c)) {
337
+ sameCount++;
338
+ }
339
+ }
340
+ }
341
+ if (sameCount > 5) {
342
+ lostPoint += 3 + sameCount - 5;
343
+ }
344
+ }
345
+ }
346
+ for (row = 0;row < moduleCount - 1; row++) {
347
+ for (col = 0;col < moduleCount - 1; col++) {
348
+ var count = 0;
349
+ if (qrCode.isDark(row, col))
350
+ count++;
351
+ if (qrCode.isDark(row + 1, col))
352
+ count++;
353
+ if (qrCode.isDark(row, col + 1))
354
+ count++;
355
+ if (qrCode.isDark(row + 1, col + 1))
356
+ count++;
357
+ if (count === 0 || count === 4) {
358
+ lostPoint += 3;
359
+ }
360
+ }
361
+ }
362
+ for (row = 0;row < moduleCount; row++) {
363
+ for (col = 0;col < moduleCount - 6; col++) {
364
+ if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) {
365
+ lostPoint += 40;
366
+ }
367
+ }
368
+ }
369
+ for (col = 0;col < moduleCount; col++) {
370
+ for (row = 0;row < moduleCount - 6; row++) {
371
+ if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) {
372
+ lostPoint += 40;
373
+ }
374
+ }
375
+ }
376
+ var darkCount = 0;
377
+ for (col = 0;col < moduleCount; col++) {
378
+ for (row = 0;row < moduleCount; row++) {
379
+ if (qrCode.isDark(row, col)) {
380
+ darkCount++;
381
+ }
382
+ }
383
+ }
384
+ var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
385
+ lostPoint += ratio * 10;
386
+ return lostPoint;
387
+ }
388
+ };
389
+ module.exports = QRUtil;
390
+ });
391
+
392
+ // node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js
393
+ var require_QRErrorCorrectLevel = __commonJS((exports, module) => {
394
+ module.exports = {
395
+ L: 1,
396
+ M: 0,
397
+ Q: 3,
398
+ H: 2
399
+ };
400
+ });
401
+
402
+ // node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js
403
+ var require_QRRSBlock = __commonJS((exports, module) => {
404
+ var QRErrorCorrectLevel = require_QRErrorCorrectLevel();
405
+ function QRRSBlock(totalCount, dataCount) {
406
+ this.totalCount = totalCount;
407
+ this.dataCount = dataCount;
408
+ }
409
+ QRRSBlock.RS_BLOCK_TABLE = [
410
+ [1, 26, 19],
411
+ [1, 26, 16],
412
+ [1, 26, 13],
413
+ [1, 26, 9],
414
+ [1, 44, 34],
415
+ [1, 44, 28],
416
+ [1, 44, 22],
417
+ [1, 44, 16],
418
+ [1, 70, 55],
419
+ [1, 70, 44],
420
+ [2, 35, 17],
421
+ [2, 35, 13],
422
+ [1, 100, 80],
423
+ [2, 50, 32],
424
+ [2, 50, 24],
425
+ [4, 25, 9],
426
+ [1, 134, 108],
427
+ [2, 67, 43],
428
+ [2, 33, 15, 2, 34, 16],
429
+ [2, 33, 11, 2, 34, 12],
430
+ [2, 86, 68],
431
+ [4, 43, 27],
432
+ [4, 43, 19],
433
+ [4, 43, 15],
434
+ [2, 98, 78],
435
+ [4, 49, 31],
436
+ [2, 32, 14, 4, 33, 15],
437
+ [4, 39, 13, 1, 40, 14],
438
+ [2, 121, 97],
439
+ [2, 60, 38, 2, 61, 39],
440
+ [4, 40, 18, 2, 41, 19],
441
+ [4, 40, 14, 2, 41, 15],
442
+ [2, 146, 116],
443
+ [3, 58, 36, 2, 59, 37],
444
+ [4, 36, 16, 4, 37, 17],
445
+ [4, 36, 12, 4, 37, 13],
446
+ [2, 86, 68, 2, 87, 69],
447
+ [4, 69, 43, 1, 70, 44],
448
+ [6, 43, 19, 2, 44, 20],
449
+ [6, 43, 15, 2, 44, 16],
450
+ [4, 101, 81],
451
+ [1, 80, 50, 4, 81, 51],
452
+ [4, 50, 22, 4, 51, 23],
453
+ [3, 36, 12, 8, 37, 13],
454
+ [2, 116, 92, 2, 117, 93],
455
+ [6, 58, 36, 2, 59, 37],
456
+ [4, 46, 20, 6, 47, 21],
457
+ [7, 42, 14, 4, 43, 15],
458
+ [4, 133, 107],
459
+ [8, 59, 37, 1, 60, 38],
460
+ [8, 44, 20, 4, 45, 21],
461
+ [12, 33, 11, 4, 34, 12],
462
+ [3, 145, 115, 1, 146, 116],
463
+ [4, 64, 40, 5, 65, 41],
464
+ [11, 36, 16, 5, 37, 17],
465
+ [11, 36, 12, 5, 37, 13],
466
+ [5, 109, 87, 1, 110, 88],
467
+ [5, 65, 41, 5, 66, 42],
468
+ [5, 54, 24, 7, 55, 25],
469
+ [11, 36, 12],
470
+ [5, 122, 98, 1, 123, 99],
471
+ [7, 73, 45, 3, 74, 46],
472
+ [15, 43, 19, 2, 44, 20],
473
+ [3, 45, 15, 13, 46, 16],
474
+ [1, 135, 107, 5, 136, 108],
475
+ [10, 74, 46, 1, 75, 47],
476
+ [1, 50, 22, 15, 51, 23],
477
+ [2, 42, 14, 17, 43, 15],
478
+ [5, 150, 120, 1, 151, 121],
479
+ [9, 69, 43, 4, 70, 44],
480
+ [17, 50, 22, 1, 51, 23],
481
+ [2, 42, 14, 19, 43, 15],
482
+ [3, 141, 113, 4, 142, 114],
483
+ [3, 70, 44, 11, 71, 45],
484
+ [17, 47, 21, 4, 48, 22],
485
+ [9, 39, 13, 16, 40, 14],
486
+ [3, 135, 107, 5, 136, 108],
487
+ [3, 67, 41, 13, 68, 42],
488
+ [15, 54, 24, 5, 55, 25],
489
+ [15, 43, 15, 10, 44, 16],
490
+ [4, 144, 116, 4, 145, 117],
491
+ [17, 68, 42],
492
+ [17, 50, 22, 6, 51, 23],
493
+ [19, 46, 16, 6, 47, 17],
494
+ [2, 139, 111, 7, 140, 112],
495
+ [17, 74, 46],
496
+ [7, 54, 24, 16, 55, 25],
497
+ [34, 37, 13],
498
+ [4, 151, 121, 5, 152, 122],
499
+ [4, 75, 47, 14, 76, 48],
500
+ [11, 54, 24, 14, 55, 25],
501
+ [16, 45, 15, 14, 46, 16],
502
+ [6, 147, 117, 4, 148, 118],
503
+ [6, 73, 45, 14, 74, 46],
504
+ [11, 54, 24, 16, 55, 25],
505
+ [30, 46, 16, 2, 47, 17],
506
+ [8, 132, 106, 4, 133, 107],
507
+ [8, 75, 47, 13, 76, 48],
508
+ [7, 54, 24, 22, 55, 25],
509
+ [22, 45, 15, 13, 46, 16],
510
+ [10, 142, 114, 2, 143, 115],
511
+ [19, 74, 46, 4, 75, 47],
512
+ [28, 50, 22, 6, 51, 23],
513
+ [33, 46, 16, 4, 47, 17],
514
+ [8, 152, 122, 4, 153, 123],
515
+ [22, 73, 45, 3, 74, 46],
516
+ [8, 53, 23, 26, 54, 24],
517
+ [12, 45, 15, 28, 46, 16],
518
+ [3, 147, 117, 10, 148, 118],
519
+ [3, 73, 45, 23, 74, 46],
520
+ [4, 54, 24, 31, 55, 25],
521
+ [11, 45, 15, 31, 46, 16],
522
+ [7, 146, 116, 7, 147, 117],
523
+ [21, 73, 45, 7, 74, 46],
524
+ [1, 53, 23, 37, 54, 24],
525
+ [19, 45, 15, 26, 46, 16],
526
+ [5, 145, 115, 10, 146, 116],
527
+ [19, 75, 47, 10, 76, 48],
528
+ [15, 54, 24, 25, 55, 25],
529
+ [23, 45, 15, 25, 46, 16],
530
+ [13, 145, 115, 3, 146, 116],
531
+ [2, 74, 46, 29, 75, 47],
532
+ [42, 54, 24, 1, 55, 25],
533
+ [23, 45, 15, 28, 46, 16],
534
+ [17, 145, 115],
535
+ [10, 74, 46, 23, 75, 47],
536
+ [10, 54, 24, 35, 55, 25],
537
+ [19, 45, 15, 35, 46, 16],
538
+ [17, 145, 115, 1, 146, 116],
539
+ [14, 74, 46, 21, 75, 47],
540
+ [29, 54, 24, 19, 55, 25],
541
+ [11, 45, 15, 46, 46, 16],
542
+ [13, 145, 115, 6, 146, 116],
543
+ [14, 74, 46, 23, 75, 47],
544
+ [44, 54, 24, 7, 55, 25],
545
+ [59, 46, 16, 1, 47, 17],
546
+ [12, 151, 121, 7, 152, 122],
547
+ [12, 75, 47, 26, 76, 48],
548
+ [39, 54, 24, 14, 55, 25],
549
+ [22, 45, 15, 41, 46, 16],
550
+ [6, 151, 121, 14, 152, 122],
551
+ [6, 75, 47, 34, 76, 48],
552
+ [46, 54, 24, 10, 55, 25],
553
+ [2, 45, 15, 64, 46, 16],
554
+ [17, 152, 122, 4, 153, 123],
555
+ [29, 74, 46, 14, 75, 47],
556
+ [49, 54, 24, 10, 55, 25],
557
+ [24, 45, 15, 46, 46, 16],
558
+ [4, 152, 122, 18, 153, 123],
559
+ [13, 74, 46, 32, 75, 47],
560
+ [48, 54, 24, 14, 55, 25],
561
+ [42, 45, 15, 32, 46, 16],
562
+ [20, 147, 117, 4, 148, 118],
563
+ [40, 75, 47, 7, 76, 48],
564
+ [43, 54, 24, 22, 55, 25],
565
+ [10, 45, 15, 67, 46, 16],
566
+ [19, 148, 118, 6, 149, 119],
567
+ [18, 75, 47, 31, 76, 48],
568
+ [34, 54, 24, 34, 55, 25],
569
+ [20, 45, 15, 61, 46, 16]
570
+ ];
571
+ QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {
572
+ var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
573
+ if (rsBlock === undefined) {
574
+ throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
575
+ }
576
+ var length = rsBlock.length / 3;
577
+ var list = [];
578
+ for (var i = 0;i < length; i++) {
579
+ var count = rsBlock[i * 3 + 0];
580
+ var totalCount = rsBlock[i * 3 + 1];
581
+ var dataCount = rsBlock[i * 3 + 2];
582
+ for (var j = 0;j < count; j++) {
583
+ list.push(new QRRSBlock(totalCount, dataCount));
584
+ }
585
+ }
586
+ return list;
587
+ };
588
+ QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {
589
+ switch (errorCorrectLevel) {
590
+ case QRErrorCorrectLevel.L:
591
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
592
+ case QRErrorCorrectLevel.M:
593
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
594
+ case QRErrorCorrectLevel.Q:
595
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
596
+ case QRErrorCorrectLevel.H:
597
+ return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
598
+ default:
599
+ return;
600
+ }
601
+ };
602
+ module.exports = QRRSBlock;
603
+ });
604
+
605
+ // node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js
606
+ var require_QRBitBuffer = __commonJS((exports, module) => {
607
+ function QRBitBuffer() {
608
+ this.buffer = [];
609
+ this.length = 0;
610
+ }
611
+ QRBitBuffer.prototype = {
612
+ get: function(index) {
613
+ var bufIndex = Math.floor(index / 8);
614
+ return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) == 1;
615
+ },
616
+ put: function(num, length) {
617
+ for (var i = 0;i < length; i++) {
618
+ this.putBit((num >>> length - i - 1 & 1) == 1);
619
+ }
620
+ },
621
+ getLengthInBits: function() {
622
+ return this.length;
623
+ },
624
+ putBit: function(bit) {
625
+ var bufIndex = Math.floor(this.length / 8);
626
+ if (this.buffer.length <= bufIndex) {
627
+ this.buffer.push(0);
628
+ }
629
+ if (bit) {
630
+ this.buffer[bufIndex] |= 128 >>> this.length % 8;
631
+ }
632
+ this.length++;
633
+ }
634
+ };
635
+ module.exports = QRBitBuffer;
636
+ });
637
+
638
+ // node_modules/qrcode-terminal/vendor/QRCode/index.js
639
+ var require_QRCode = __commonJS((exports, module) => {
640
+ var QR8bitByte = require_QR8bitByte();
641
+ var QRUtil = require_QRUtil();
642
+ var QRPolynomial = require_QRPolynomial();
643
+ var QRRSBlock = require_QRRSBlock();
644
+ var QRBitBuffer = require_QRBitBuffer();
645
+ function QRCode(typeNumber, errorCorrectLevel) {
646
+ this.typeNumber = typeNumber;
647
+ this.errorCorrectLevel = errorCorrectLevel;
648
+ this.modules = null;
649
+ this.moduleCount = 0;
650
+ this.dataCache = null;
651
+ this.dataList = [];
652
+ }
653
+ QRCode.prototype = {
654
+ addData: function(data) {
655
+ var newData = new QR8bitByte(data);
656
+ this.dataList.push(newData);
657
+ this.dataCache = null;
658
+ },
659
+ isDark: function(row, col) {
660
+ if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
661
+ throw new Error(row + "," + col);
662
+ }
663
+ return this.modules[row][col];
664
+ },
665
+ getModuleCount: function() {
666
+ return this.moduleCount;
667
+ },
668
+ make: function() {
669
+ if (this.typeNumber < 1) {
670
+ var typeNumber = 1;
671
+ for (typeNumber = 1;typeNumber < 40; typeNumber++) {
672
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);
673
+ var buffer = new QRBitBuffer;
674
+ var totalDataCount = 0;
675
+ for (var i = 0;i < rsBlocks.length; i++) {
676
+ totalDataCount += rsBlocks[i].dataCount;
677
+ }
678
+ for (var x = 0;x < this.dataList.length; x++) {
679
+ var data = this.dataList[x];
680
+ buffer.put(data.mode, 4);
681
+ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
682
+ data.write(buffer);
683
+ }
684
+ if (buffer.getLengthInBits() <= totalDataCount * 8)
685
+ break;
686
+ }
687
+ this.typeNumber = typeNumber;
688
+ }
689
+ this.makeImpl(false, this.getBestMaskPattern());
690
+ },
691
+ makeImpl: function(test, maskPattern) {
692
+ this.moduleCount = this.typeNumber * 4 + 17;
693
+ this.modules = new Array(this.moduleCount);
694
+ for (var row = 0;row < this.moduleCount; row++) {
695
+ this.modules[row] = new Array(this.moduleCount);
696
+ for (var col = 0;col < this.moduleCount; col++) {
697
+ this.modules[row][col] = null;
698
+ }
699
+ }
700
+ this.setupPositionProbePattern(0, 0);
701
+ this.setupPositionProbePattern(this.moduleCount - 7, 0);
702
+ this.setupPositionProbePattern(0, this.moduleCount - 7);
703
+ this.setupPositionAdjustPattern();
704
+ this.setupTimingPattern();
705
+ this.setupTypeInfo(test, maskPattern);
706
+ if (this.typeNumber >= 7) {
707
+ this.setupTypeNumber(test);
708
+ }
709
+ if (this.dataCache === null) {
710
+ this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
711
+ }
712
+ this.mapData(this.dataCache, maskPattern);
713
+ },
714
+ setupPositionProbePattern: function(row, col) {
715
+ for (var r = -1;r <= 7; r++) {
716
+ if (row + r <= -1 || this.moduleCount <= row + r)
717
+ continue;
718
+ for (var c = -1;c <= 7; c++) {
719
+ if (col + c <= -1 || this.moduleCount <= col + c)
720
+ continue;
721
+ if (0 <= r && r <= 6 && (c === 0 || c === 6) || 0 <= c && c <= 6 && (r === 0 || r === 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {
722
+ this.modules[row + r][col + c] = true;
723
+ } else {
724
+ this.modules[row + r][col + c] = false;
725
+ }
726
+ }
727
+ }
728
+ },
729
+ getBestMaskPattern: function() {
730
+ var minLostPoint = 0;
731
+ var pattern = 0;
732
+ for (var i = 0;i < 8; i++) {
733
+ this.makeImpl(true, i);
734
+ var lostPoint = QRUtil.getLostPoint(this);
735
+ if (i === 0 || minLostPoint > lostPoint) {
736
+ minLostPoint = lostPoint;
737
+ pattern = i;
738
+ }
739
+ }
740
+ return pattern;
741
+ },
742
+ createMovieClip: function(target_mc, instance_name, depth) {
743
+ var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
744
+ var cs = 1;
745
+ this.make();
746
+ for (var row = 0;row < this.modules.length; row++) {
747
+ var y = row * cs;
748
+ for (var col = 0;col < this.modules[row].length; col++) {
749
+ var x = col * cs;
750
+ var dark = this.modules[row][col];
751
+ if (dark) {
752
+ qr_mc.beginFill(0, 100);
753
+ qr_mc.moveTo(x, y);
754
+ qr_mc.lineTo(x + cs, y);
755
+ qr_mc.lineTo(x + cs, y + cs);
756
+ qr_mc.lineTo(x, y + cs);
757
+ qr_mc.endFill();
758
+ }
759
+ }
760
+ }
761
+ return qr_mc;
762
+ },
763
+ setupTimingPattern: function() {
764
+ for (var r = 8;r < this.moduleCount - 8; r++) {
765
+ if (this.modules[r][6] !== null) {
766
+ continue;
767
+ }
768
+ this.modules[r][6] = r % 2 === 0;
769
+ }
770
+ for (var c = 8;c < this.moduleCount - 8; c++) {
771
+ if (this.modules[6][c] !== null) {
772
+ continue;
773
+ }
774
+ this.modules[6][c] = c % 2 === 0;
775
+ }
776
+ },
777
+ setupPositionAdjustPattern: function() {
778
+ var pos = QRUtil.getPatternPosition(this.typeNumber);
779
+ for (var i = 0;i < pos.length; i++) {
780
+ for (var j = 0;j < pos.length; j++) {
781
+ var row = pos[i];
782
+ var col = pos[j];
783
+ if (this.modules[row][col] !== null) {
784
+ continue;
785
+ }
786
+ for (var r = -2;r <= 2; r++) {
787
+ for (var c = -2;c <= 2; c++) {
788
+ if (Math.abs(r) === 2 || Math.abs(c) === 2 || r === 0 && c === 0) {
789
+ this.modules[row + r][col + c] = true;
790
+ } else {
791
+ this.modules[row + r][col + c] = false;
792
+ }
793
+ }
794
+ }
795
+ }
796
+ }
797
+ },
798
+ setupTypeNumber: function(test) {
799
+ var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
800
+ var mod;
801
+ for (var i = 0;i < 18; i++) {
802
+ mod = !test && (bits >> i & 1) === 1;
803
+ this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
804
+ }
805
+ for (var x = 0;x < 18; x++) {
806
+ mod = !test && (bits >> x & 1) === 1;
807
+ this.modules[x % 3 + this.moduleCount - 8 - 3][Math.floor(x / 3)] = mod;
808
+ }
809
+ },
810
+ setupTypeInfo: function(test, maskPattern) {
811
+ var data = this.errorCorrectLevel << 3 | maskPattern;
812
+ var bits = QRUtil.getBCHTypeInfo(data);
813
+ var mod;
814
+ for (var v = 0;v < 15; v++) {
815
+ mod = !test && (bits >> v & 1) === 1;
816
+ if (v < 6) {
817
+ this.modules[v][8] = mod;
818
+ } else if (v < 8) {
819
+ this.modules[v + 1][8] = mod;
820
+ } else {
821
+ this.modules[this.moduleCount - 15 + v][8] = mod;
822
+ }
823
+ }
824
+ for (var h = 0;h < 15; h++) {
825
+ mod = !test && (bits >> h & 1) === 1;
826
+ if (h < 8) {
827
+ this.modules[8][this.moduleCount - h - 1] = mod;
828
+ } else if (h < 9) {
829
+ this.modules[8][15 - h - 1 + 1] = mod;
830
+ } else {
831
+ this.modules[8][15 - h - 1] = mod;
832
+ }
833
+ }
834
+ this.modules[this.moduleCount - 8][8] = !test;
835
+ },
836
+ mapData: function(data, maskPattern) {
837
+ var inc = -1;
838
+ var row = this.moduleCount - 1;
839
+ var bitIndex = 7;
840
+ var byteIndex = 0;
841
+ for (var col = this.moduleCount - 1;col > 0; col -= 2) {
842
+ if (col === 6)
843
+ col--;
844
+ while (true) {
845
+ for (var c = 0;c < 2; c++) {
846
+ if (this.modules[row][col - c] === null) {
847
+ var dark = false;
848
+ if (byteIndex < data.length) {
849
+ dark = (data[byteIndex] >>> bitIndex & 1) === 1;
850
+ }
851
+ var mask = QRUtil.getMask(maskPattern, row, col - c);
852
+ if (mask) {
853
+ dark = !dark;
854
+ }
855
+ this.modules[row][col - c] = dark;
856
+ bitIndex--;
857
+ if (bitIndex === -1) {
858
+ byteIndex++;
859
+ bitIndex = 7;
860
+ }
861
+ }
862
+ }
863
+ row += inc;
864
+ if (row < 0 || this.moduleCount <= row) {
865
+ row -= inc;
866
+ inc = -inc;
867
+ break;
868
+ }
869
+ }
870
+ }
871
+ }
872
+ };
873
+ QRCode.PAD0 = 236;
874
+ QRCode.PAD1 = 17;
875
+ QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {
876
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
877
+ var buffer = new QRBitBuffer;
878
+ for (var i = 0;i < dataList.length; i++) {
879
+ var data = dataList[i];
880
+ buffer.put(data.mode, 4);
881
+ buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
882
+ data.write(buffer);
883
+ }
884
+ var totalDataCount = 0;
885
+ for (var x = 0;x < rsBlocks.length; x++) {
886
+ totalDataCount += rsBlocks[x].dataCount;
887
+ }
888
+ if (buffer.getLengthInBits() > totalDataCount * 8) {
889
+ throw new Error("code length overflow. (" + buffer.getLengthInBits() + ">" + totalDataCount * 8 + ")");
890
+ }
891
+ if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
892
+ buffer.put(0, 4);
893
+ }
894
+ while (buffer.getLengthInBits() % 8 !== 0) {
895
+ buffer.putBit(false);
896
+ }
897
+ while (true) {
898
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
899
+ break;
900
+ }
901
+ buffer.put(QRCode.PAD0, 8);
902
+ if (buffer.getLengthInBits() >= totalDataCount * 8) {
903
+ break;
904
+ }
905
+ buffer.put(QRCode.PAD1, 8);
906
+ }
907
+ return QRCode.createBytes(buffer, rsBlocks);
908
+ };
909
+ QRCode.createBytes = function(buffer, rsBlocks) {
910
+ var offset = 0;
911
+ var maxDcCount = 0;
912
+ var maxEcCount = 0;
913
+ var dcdata = new Array(rsBlocks.length);
914
+ var ecdata = new Array(rsBlocks.length);
915
+ for (var r = 0;r < rsBlocks.length; r++) {
916
+ var dcCount = rsBlocks[r].dataCount;
917
+ var ecCount = rsBlocks[r].totalCount - dcCount;
918
+ maxDcCount = Math.max(maxDcCount, dcCount);
919
+ maxEcCount = Math.max(maxEcCount, ecCount);
920
+ dcdata[r] = new Array(dcCount);
921
+ for (var i = 0;i < dcdata[r].length; i++) {
922
+ dcdata[r][i] = 255 & buffer.buffer[i + offset];
923
+ }
924
+ offset += dcCount;
925
+ var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
926
+ var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
927
+ var modPoly = rawPoly.mod(rsPoly);
928
+ ecdata[r] = new Array(rsPoly.getLength() - 1);
929
+ for (var x = 0;x < ecdata[r].length; x++) {
930
+ var modIndex = x + modPoly.getLength() - ecdata[r].length;
931
+ ecdata[r][x] = modIndex >= 0 ? modPoly.get(modIndex) : 0;
932
+ }
933
+ }
934
+ var totalCodeCount = 0;
935
+ for (var y = 0;y < rsBlocks.length; y++) {
936
+ totalCodeCount += rsBlocks[y].totalCount;
937
+ }
938
+ var data = new Array(totalCodeCount);
939
+ var index = 0;
940
+ for (var z = 0;z < maxDcCount; z++) {
941
+ for (var s = 0;s < rsBlocks.length; s++) {
942
+ if (z < dcdata[s].length) {
943
+ data[index++] = dcdata[s][z];
944
+ }
945
+ }
946
+ }
947
+ for (var xx = 0;xx < maxEcCount; xx++) {
948
+ for (var t = 0;t < rsBlocks.length; t++) {
949
+ if (xx < ecdata[t].length) {
950
+ data[index++] = ecdata[t][xx];
951
+ }
952
+ }
953
+ }
954
+ return data;
955
+ };
956
+ module.exports = QRCode;
957
+ });
958
+
959
+ // node_modules/qrcode-terminal/lib/main.js
960
+ var require_main = __commonJS((exports, module) => {
961
+ var QRCode = require_QRCode();
962
+ var QRErrorCorrectLevel = require_QRErrorCorrectLevel();
963
+ var black = "\x1B[40m \x1B[0m";
964
+ var white = "\x1B[47m \x1B[0m";
965
+ var toCell = function(isBlack) {
966
+ return isBlack ? black : white;
967
+ };
968
+ var repeat = function(color) {
969
+ return {
970
+ times: function(count) {
971
+ return new Array(count).join(color);
972
+ }
973
+ };
974
+ };
975
+ var fill = function(length, value) {
976
+ var arr = new Array(length);
977
+ for (var i = 0;i < length; i++) {
978
+ arr[i] = value;
979
+ }
980
+ return arr;
981
+ };
982
+ module.exports = {
983
+ error: QRErrorCorrectLevel.L,
984
+ generate: function(input, opts, cb) {
985
+ if (typeof opts === "function") {
986
+ cb = opts;
987
+ opts = {};
988
+ }
989
+ var qrcode = new QRCode(-1, this.error);
990
+ qrcode.addData(input);
991
+ qrcode.make();
992
+ var output = "";
993
+ if (opts && opts.small) {
994
+ var BLACK = true, WHITE = false;
995
+ var moduleCount = qrcode.getModuleCount();
996
+ var moduleData = qrcode.modules.slice();
997
+ var oddRow = moduleCount % 2 === 1;
998
+ if (oddRow) {
999
+ moduleData.push(fill(moduleCount, WHITE));
1000
+ }
1001
+ var platte = {
1002
+ WHITE_ALL: "█",
1003
+ WHITE_BLACK: "▀",
1004
+ BLACK_WHITE: "▄",
1005
+ BLACK_ALL: " "
1006
+ };
1007
+ var borderTop = repeat(platte.BLACK_WHITE).times(moduleCount + 3);
1008
+ var borderBottom = repeat(platte.WHITE_BLACK).times(moduleCount + 3);
1009
+ output += borderTop + `
1010
+ `;
1011
+ for (var row = 0;row < moduleCount; row += 2) {
1012
+ output += platte.WHITE_ALL;
1013
+ for (var col = 0;col < moduleCount; col++) {
1014
+ if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === WHITE) {
1015
+ output += platte.WHITE_ALL;
1016
+ } else if (moduleData[row][col] === WHITE && moduleData[row + 1][col] === BLACK) {
1017
+ output += platte.WHITE_BLACK;
1018
+ } else if (moduleData[row][col] === BLACK && moduleData[row + 1][col] === WHITE) {
1019
+ output += platte.BLACK_WHITE;
1020
+ } else {
1021
+ output += platte.BLACK_ALL;
1022
+ }
1023
+ }
1024
+ output += platte.WHITE_ALL + `
1025
+ `;
1026
+ }
1027
+ if (!oddRow) {
1028
+ output += borderBottom;
1029
+ }
1030
+ } else {
1031
+ var border = repeat(white).times(qrcode.getModuleCount() + 3);
1032
+ output += border + `
1033
+ `;
1034
+ qrcode.modules.forEach(function(row2) {
1035
+ output += white;
1036
+ output += row2.map(toCell).join("");
1037
+ output += white + `
1038
+ `;
1039
+ });
1040
+ output += border;
1041
+ }
1042
+ if (cb)
1043
+ cb(output);
1044
+ else
1045
+ console.log(output);
1046
+ },
1047
+ setErrorLevel: function(error) {
1048
+ this.error = QRErrorCorrectLevel[error] || this.error;
1049
+ }
1050
+ };
1051
+ });
1052
+
1053
+ // setup.ts
1054
+ import fs2 from "node:fs";
1055
+
1056
+ // shared.ts
1057
+ import fs from "node:fs";
1058
+ import os from "node:os";
1059
+ import path from "node:path";
1060
+ var DEFAULT_BASE_URL = "https://ilinkai.weixin.qq.com";
1061
+ var BOT_TYPE = "3";
1062
+ function getHomeDir() {
1063
+ return os.homedir();
1064
+ }
1065
+ function getCredentialsDir() {
1066
+ return path.join(getHomeDir(), ".claude", "channels", "wechat");
1067
+ }
1068
+ function getCredentialsFile() {
1069
+ return path.join(getCredentialsDir(), "account.json");
1070
+ }
1071
+ function saveCredentials(data) {
1072
+ const dir = getCredentialsDir();
1073
+ const file = getCredentialsFile();
1074
+ fs.mkdirSync(dir, { recursive: true });
1075
+ fs.writeFileSync(file, JSON.stringify(data, null, 2), "utf-8");
1076
+ try {
1077
+ fs.chmodSync(file, 384);
1078
+ } catch {}
1079
+ }
1080
+ async function fetchQRCode(baseUrl) {
1081
+ const base = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
1082
+ const url = new URL(`ilink/bot/get_bot_qrcode?bot_type=${encodeURIComponent(BOT_TYPE)}`, base);
1083
+ const res = await fetch(url.toString());
1084
+ if (!res.ok)
1085
+ throw new Error(`QR fetch failed: ${res.status}`);
1086
+ return await res.json();
1087
+ }
1088
+ async function pollQRStatus(baseUrl, qrcode) {
1089
+ const base = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
1090
+ const url = new URL(`ilink/bot/get_qrcode_status?qrcode=${encodeURIComponent(qrcode)}`, base);
1091
+ const controller = new AbortController;
1092
+ const timer = setTimeout(() => controller.abort(), 35000);
1093
+ try {
1094
+ const res = await fetch(url.toString(), {
1095
+ headers: { "iLink-App-ClientVersion": "1" },
1096
+ signal: controller.signal
1097
+ });
1098
+ clearTimeout(timer);
1099
+ if (!res.ok)
1100
+ throw new Error(`QR status failed: ${res.status}`);
1101
+ return await res.json();
1102
+ } catch (err) {
1103
+ clearTimeout(timer);
1104
+ if (err instanceof Error && err.name === "AbortError") {
1105
+ return { status: "wait" };
1106
+ }
1107
+ throw err;
1108
+ }
1109
+ }
1110
+
1111
+ // setup.ts
1112
+ async function main() {
1113
+ const CREDENTIALS_FILE = getCredentialsFile();
1114
+ if (fs2.existsSync(CREDENTIALS_FILE)) {
1115
+ try {
1116
+ const existing = JSON.parse(fs2.readFileSync(CREDENTIALS_FILE, "utf-8"));
1117
+ console.log(`已有保存的账号: ${existing.accountId}`);
1118
+ console.log(`保存时间: ${existing.savedAt}`);
1119
+ console.log();
1120
+ const readline = await import("node:readline");
1121
+ const rl = readline.createInterface({
1122
+ input: process.stdin,
1123
+ output: process.stdout
1124
+ });
1125
+ const answer = await new Promise((resolve) => {
1126
+ rl.question("是否重新登录?(y/N) ", resolve);
1127
+ });
1128
+ rl.close();
1129
+ if (answer.toLowerCase() !== "y") {
1130
+ console.log("保持现有凭据,退出。");
1131
+ process.exit(0);
1132
+ }
1133
+ } catch (err) {
1134
+ console.error(`读取已有凭据失败: ${String(err)}`);
1135
+ }
1136
+ }
1137
+ console.log(`正在获取微信登录二维码...
1138
+ `);
1139
+ const qrResp = await fetchQRCode(DEFAULT_BASE_URL);
1140
+ try {
1141
+ const qrterm = await Promise.resolve().then(() => __toESM(require_main(), 1));
1142
+ await new Promise((resolve) => {
1143
+ qrterm.default.generate(qrResp.qrcode_img_content, { small: true }, (qr) => {
1144
+ console.log(qr);
1145
+ resolve();
1146
+ });
1147
+ });
1148
+ } catch {
1149
+ console.log(`请在浏览器中打开此链接扫码: ${qrResp.qrcode_img_content}
1150
+ `);
1151
+ }
1152
+ console.log(`请用微信扫描上方二维码...
1153
+ `);
1154
+ const deadline = Date.now() + 480000;
1155
+ let scannedPrinted = false;
1156
+ while (Date.now() < deadline) {
1157
+ const status = await pollQRStatus(DEFAULT_BASE_URL, qrResp.qrcode);
1158
+ switch (status.status) {
1159
+ case "wait":
1160
+ process.stdout.write(".");
1161
+ break;
1162
+ case "scaned":
1163
+ if (!scannedPrinted) {
1164
+ console.log(`
1165
+ \uD83D\uDC40 已扫码,请在微信中确认...`);
1166
+ scannedPrinted = true;
1167
+ }
1168
+ break;
1169
+ case "expired":
1170
+ console.log(`
1171
+ 二维码已过期,请重新运行 setup。`);
1172
+ process.exit(1);
1173
+ break;
1174
+ case "confirmed": {
1175
+ if (!status.ilink_bot_id || !status.bot_token) {
1176
+ console.error(`
1177
+ 登录失败:服务器未返回完整信息。`);
1178
+ process.exit(1);
1179
+ }
1180
+ const account = {
1181
+ token: status.bot_token,
1182
+ baseUrl: status.baseurl || DEFAULT_BASE_URL,
1183
+ accountId: status.ilink_bot_id,
1184
+ userId: status.ilink_user_id,
1185
+ savedAt: new Date().toISOString()
1186
+ };
1187
+ saveCredentials(account);
1188
+ console.log(`
1189
+ ✅ 微信连接成功!`);
1190
+ console.log(` 账号 ID: ${account.accountId}`);
1191
+ console.log(` 用户 ID: ${account.userId}`);
1192
+ console.log(` 凭据保存至: ${getCredentialsFile()}`);
1193
+ console.log();
1194
+ console.log("现在可以启动 Claude Code 通道:");
1195
+ console.log(" claude --dangerously-load-development-channels server:wechat");
1196
+ process.exit(0);
1197
+ }
1198
+ }
1199
+ await new Promise((r) => setTimeout(r, 1000));
1200
+ }
1201
+ console.log(`
1202
+ 登录超时,请重新运行。`);
1203
+ process.exit(1);
1204
+ }
1205
+ main().catch((err) => {
1206
+ console.error(`错误: ${err}`);
1207
+ process.exit(1);
1208
+ });