@yungho/noclaw-channel 0.1.4 → 0.1.6

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.
@@ -1,65 +1,41 @@
1
1
  /**
2
2
  * WeChat Channel Implementation
3
3
  *
4
- * Uses WeChat's official ClawBot ilink API for safe, official integration
5
- * without risk of account suspension.
4
+ * Uses WeChat's official ClawBot ilink API (same protocol as
5
+ * @tencent-weixin/openclaw-weixin and claude-code-wechat-channel).
6
6
  */
7
7
  import { IChannel, IpcMessage, WechatConfig, ChannelStatus, ChannelCapabilities, MediaObject } from '../types.js';
8
8
  import pino from 'pino';
9
9
  export declare class WechatChannel implements IChannel {
10
10
  private readonly baseUrl;
11
- private readonly defaultBaseUrl;
12
11
  private botToken?;
13
12
  private config;
14
13
  private logger;
15
14
  private status;
16
- private pollingInterval?;
17
- private qrCodePollingInterval?;
18
15
  private messageCallback?;
19
16
  private statusCallbacks;
20
17
  private qrCodeCallbacks;
21
18
  private lastQrCodeUrl?;
22
- private lastUpdateId;
23
- private readonly POLLING_INTERVAL;
24
- private readonly QR_CODE_POLLING_INTERVAL;
25
- private readonly LONG_POLLING_TIMEOUT;
19
+ private getUpdatesBuf;
26
20
  constructor(config: WechatConfig, logger: pino.Logger);
27
21
  connect(): Promise<void>;
28
22
  disconnect(): Promise<void>;
29
- send(text: string, contextToken: string, media?: MediaObject[]): Promise<void>;
23
+ send(text: string, contextToken: string, _media?: MediaObject[]): Promise<void>;
30
24
  onMessage(callback: (msg: IpcMessage) => void): void;
31
25
  getStatus(): ChannelStatus;
32
26
  getCapabilities(): ChannelCapabilities;
33
27
  onStatusChange(callback: (status: ChannelStatus) => void): void;
34
28
  requestQrCode(): void;
35
29
  onQrCode(callback: (qrCodeUrl: string) => void): void;
36
- /**
37
- * Authenticate with WeChat using QR code
38
- */
39
30
  private authenticateWithQrCode;
40
- /**
41
- * Poll for QR code scan status
42
- */
43
31
  private pollQrCodeStatus;
44
- /**
45
- * Start polling for incoming messages
46
- */
32
+ private pollingRunning;
47
33
  private startMessagePolling;
48
- /**
49
- * Stop all polling
50
- */
34
+ private pollLoop;
35
+ private pollOnce;
51
36
  private stopPolling;
52
- /**
53
- * Make HTTP request to WeChat API
54
- */
55
- private makeRequest;
56
- /**
57
- * Update connection status
58
- */
37
+ private apiFetch;
59
38
  private setStatus;
60
- /**
61
- * Notify listeners about QR code
62
- */
63
39
  private notifyQrCode;
64
40
  }
65
41
  //# sourceMappingURL=WechatChannel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WechatChannel.d.ts","sourceRoot":"","sources":["../../src/channels/WechatChannel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClH,OAAO,IAAI,MAAM,MAAM,CAAC;AA8BxB,qBAAa,aAAc,YAAW,QAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,qBAAqB,CAAC,CAAiB;IAC/C,OAAO,CAAC,eAAe,CAAC,CAA4B;IACpD,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAQ;IACjD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAElC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;IAS/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BpF,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAIpD,SAAS,IAAI,aAAa;IAI1B,eAAe,IAAI,mBAAmB;IAUtC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IAI/D,aAAa,IAAI,IAAI;IAQrB,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIrD;;OAEG;YACW,sBAAsB;IAqBpC;;OAEG;YACW,gBAAgB;IAuE9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoD3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;YACW,WAAW;IAgCzB;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;OAEG;IACH,OAAO,CAAC,YAAY;CAGrB"}
1
+ {"version":3,"file":"WechatChannel.d.ts","sourceRoot":"","sources":["../../src/channels/WechatChannel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAClH,OAAO,IAAI,MAAM,MAAM,CAAC;AA8FxB,qBAAa,aAAc,YAAW,QAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,eAAe,CAAC,CAA4B;IACpD,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,eAAe,CAA+C;IACtE,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAM;gBAEf,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM;IAO/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BrF,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI;IAIpD,SAAS,IAAI,aAAa;IAI1B,eAAe,IAAI,mBAAmB;IAUtC,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IAI/D,aAAa,IAAI,IAAI;IAUrB,QAAQ,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;YAMvC,sBAAsB;YAqBtB,gBAAgB;IAwE9B,OAAO,CAAC,cAAc,CAAS;IAE/B,OAAO,CAAC,mBAAmB;YAOb,QAAQ;YAMR,QAAQ;IAyEtB,OAAO,CAAC,WAAW;YAML,QAAQ;IA+BtB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,YAAY;CAGrB"}
@@ -1,32 +1,67 @@
1
1
  /**
2
2
  * WeChat Channel Implementation
3
3
  *
4
- * Uses WeChat's official ClawBot ilink API for safe, official integration
5
- * without risk of account suspension.
4
+ * Uses WeChat's official ClawBot ilink API (same protocol as
5
+ * @tencent-weixin/openclaw-weixin and claude-code-wechat-channel).
6
6
  */
7
+ import crypto from 'node:crypto';
7
8
  import QRCode from 'qrcode-terminal';
9
+ // ── Constants ──────────────────────────────────────────────────────────────────
10
+ const CHANNEL_VERSION = '0.2.0';
11
+ const DEFAULT_BASE_URL = 'https://ilinkai.weixin.qq.com';
12
+ const BOT_TYPE = '3';
13
+ const MSG_TYPE_USER = 1;
14
+ const MSG_ITEM_TEXT = 1;
15
+ const LONG_POLL_TIMEOUT_MS = 35_000;
16
+ const QR_POLL_TIMEOUT_MS = 35_000;
17
+ // ── Helpers ────────────────────────────────────────────────────────────────────
18
+ function randomWechatUin() {
19
+ const uint32 = crypto.randomBytes(4).readUInt32BE(0);
20
+ return Buffer.from(String(uint32), 'utf-8').toString('base64');
21
+ }
22
+ function buildHeaders(token, body) {
23
+ const headers = {
24
+ 'Content-Type': 'application/json',
25
+ 'AuthorizationType': 'ilink_bot_token',
26
+ 'X-WECHAT-UIN': randomWechatUin(),
27
+ };
28
+ if (body) {
29
+ headers['Content-Length'] = String(Buffer.byteLength(body, 'utf-8'));
30
+ }
31
+ if (token?.trim()) {
32
+ headers['Authorization'] = `Bearer ${token.trim()}`;
33
+ }
34
+ return headers;
35
+ }
36
+ function extractTextFromMessage(msg) {
37
+ if (!msg.item_list?.length)
38
+ return null;
39
+ for (const item of msg.item_list) {
40
+ if (item.type === MSG_ITEM_TEXT && item.text_item?.text) {
41
+ return item.text_item.text;
42
+ }
43
+ }
44
+ return null;
45
+ }
46
+ function generateClientId() {
47
+ return `noclaw-channel:${Date.now()}-${crypto.randomBytes(4).toString('hex')}`;
48
+ }
49
+ // ── WechatChannel ──────────────────────────────────────────────────────────────
8
50
  export class WechatChannel {
9
51
  baseUrl;
10
- defaultBaseUrl = 'https://ilinkai.weixin.qq.com/ilink/bot';
11
52
  botToken;
12
53
  config;
13
54
  logger;
14
55
  status = 'disconnected';
15
- pollingInterval;
16
- qrCodePollingInterval;
17
56
  messageCallback;
18
57
  statusCallbacks = new Set();
19
58
  qrCodeCallbacks = new Set();
20
59
  lastQrCodeUrl;
21
- lastUpdateId = 0;
22
- POLLING_INTERVAL = 2000; // 2 seconds
23
- QR_CODE_POLLING_INTERVAL = 2000; // 2 seconds
24
- LONG_POLLING_TIMEOUT = 30000; // 30 seconds
60
+ getUpdatesBuf = '';
25
61
  constructor(config, logger) {
26
62
  this.config = config;
27
- this.baseUrl = config.baseUrl || this.defaultBaseUrl;
63
+ this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;
28
64
  this.logger = logger.child({ channel: 'wechat' });
29
- // Restore bot token from config if available
30
65
  this.botToken = config.botToken;
31
66
  }
32
67
  async connect() {
@@ -37,13 +72,11 @@ export class WechatChannel {
37
72
  this.setStatus('connecting');
38
73
  try {
39
74
  if (this.botToken) {
40
- // Already have a token, just start polling for messages
41
75
  this.startMessagePolling();
42
76
  this.setStatus('connected');
43
77
  this.logger.info('Connected to WeChat using existing token');
44
78
  return;
45
79
  }
46
- // Need to authenticate with QR code
47
80
  await this.authenticateWithQrCode();
48
81
  }
49
82
  catch (error) {
@@ -57,31 +90,28 @@ export class WechatChannel {
57
90
  this.setStatus('disconnected');
58
91
  this.logger.info('Disconnected from WeChat');
59
92
  }
60
- async send(text, contextToken, media) {
93
+ async send(text, contextToken, _media) {
61
94
  if (!this.botToken) {
62
95
  throw new Error('Not authenticated. Please connect first.');
63
96
  }
97
+ const body = JSON.stringify({
98
+ msg: {
99
+ from_user_id: '',
100
+ to_user_id: '',
101
+ client_id: generateClientId(),
102
+ message_type: 2, // MSG_TYPE_BOT
103
+ message_state: 2, // MSG_STATE_FINISH
104
+ item_list: [{ type: MSG_ITEM_TEXT, text_item: { text } }],
105
+ context_token: contextToken,
106
+ },
107
+ base_info: { channel_version: CHANNEL_VERSION },
108
+ });
64
109
  try {
65
- const response = await this.makeRequest('/sendmessage', {
66
- method: 'POST',
67
- headers: {
68
- 'Content-Type': 'application/json',
69
- Authorization: `Bearer ${this.botToken}`
70
- },
71
- body: JSON.stringify({
72
- bot_token: this.botToken,
73
- context_token: contextToken,
74
- message: text,
75
- ...(media && media.length > 0 && { media }),
76
- }),
77
- });
78
- if (!response.success) {
79
- throw new Error(response.message || 'Failed to send message');
80
- }
110
+ await this.apiFetch('ilink/bot/sendmessage', body, 15_000);
81
111
  this.logger.debug({ contextToken, textLength: text.length }, 'Message sent to WeChat');
82
112
  }
83
113
  catch (error) {
84
- this.logger.error({ error, contextToken }, 'Failed to send message to WeChat');
114
+ this.logger.error({ err: error, contextToken }, 'Failed to send message to WeChat');
85
115
  throw error;
86
116
  }
87
117
  }
@@ -94,7 +124,7 @@ export class WechatChannel {
94
124
  getCapabilities() {
95
125
  return {
96
126
  textMessaging: true,
97
- mediaSharing: true, // WeChat supports media, but implementation may vary
127
+ mediaSharing: true,
98
128
  permissionRelay: true,
99
129
  richFormatting: true,
100
130
  webhooks: false,
@@ -114,181 +144,193 @@ export class WechatChannel {
114
144
  onQrCode(callback) {
115
145
  this.qrCodeCallbacks.add(callback);
116
146
  }
117
- /**
118
- * Authenticate with WeChat using QR code
119
- */
147
+ // ── QR Authentication ────────────────────────────────────────────────────────
120
148
  async authenticateWithQrCode() {
121
- try {
122
- // Step 1: Get QR code
123
- const qrResponse = await this.makeRequest('/get_bot_qrcode?bot_type=3', { method: 'GET' });
124
- this.logger.info({ qrCodeId: qrResponse.qrcode }, 'QR code obtained');
125
- // Step 2: Display QR code in terminal
126
- this.lastQrCodeUrl = qrResponse.qrcode_img_content;
127
- console.log('\n📱 Please scan QR code below to login:\n');
128
- QRCode.generate(qrResponse.qrcode_img_content, { small: true });
129
- console.log(`\nOr copy this link: ${qrResponse.qrcode_img_content}\n`);
130
- // Step 3: Poll for scan status
131
- await this.pollQrCodeStatus(qrResponse.qrcode);
132
- }
133
- catch (error) {
134
- this.logger.error({ err: error }, 'Failed to authenticate with QR code');
135
- throw error;
136
- }
149
+ // Step 1: Get QR code (GET with bot_type query param)
150
+ const base = this.baseUrl.endsWith('/') ? this.baseUrl : `${this.baseUrl}/`;
151
+ const qrUrl = new URL(`ilink/bot/get_bot_qrcode?bot_type=${encodeURIComponent(BOT_TYPE)}`, base).toString();
152
+ const qrRes = await fetch(qrUrl);
153
+ if (!qrRes.ok)
154
+ throw new Error(`QR fetch failed: ${qrRes.status}`);
155
+ const qrResp = (await qrRes.json());
156
+ this.logger.info({ qrCodeId: qrResp.qrcode }, 'QR code obtained');
157
+ // Step 2: Display in terminal
158
+ this.lastQrCodeUrl = qrResp.qrcode_img_content;
159
+ console.log('\n📱 Please scan QR code below to login:\n');
160
+ QRCode.generate(qrResp.qrcode_img_content, { small: true });
161
+ console.log(`\nOr copy this link: ${qrResp.qrcode_img_content}\n`);
162
+ // Step 3: Poll for scan status
163
+ await this.pollQrCodeStatus(qrResp.qrcode);
137
164
  }
138
- /**
139
- * Poll for QR code scan status
140
- */
141
- async pollQrCodeStatus(qrCodeId) {
142
- let attempts = 0;
143
- const maxAttempts = 300; // 10 minutes at 2-second intervals
144
- return new Promise((resolve, reject) => {
145
- this.qrCodePollingInterval = setInterval(async () => {
146
- attempts++;
147
- if (attempts > maxAttempts) {
148
- clearInterval(this.qrCodePollingInterval);
149
- reject(new Error('QR code scan timeout'));
150
- return;
151
- }
165
+ async pollQrCodeStatus(qrcode) {
166
+ const base = this.baseUrl.endsWith('/') ? this.baseUrl : `${this.baseUrl}/`;
167
+ const deadline = Date.now() + 480_000; // 8 minutes
168
+ while (Date.now() < deadline) {
169
+ try {
170
+ const url = new URL(`ilink/bot/get_qrcode_status?qrcode=${encodeURIComponent(qrcode)}`, base).toString();
171
+ const controller = new AbortController();
172
+ const timer = setTimeout(() => controller.abort(), QR_POLL_TIMEOUT_MS);
173
+ let statusResp;
152
174
  try {
153
- const response = await this.makeRequest(`/get_qrcode_status?qrcode=${qrCodeId}`, {
154
- method: 'GET',
175
+ const res = await fetch(url, {
176
+ headers: { 'iLink-App-ClientVersion': '1' },
177
+ signal: controller.signal,
155
178
  });
156
- this.logger.debug({ status: response.status, attempts }, 'QR code status check');
157
- switch (response.status) {
158
- case 'scanned':
159
- this.logger.info('QR code scanned, waiting for confirmation');
160
- break;
161
- case 'success':
162
- clearInterval(this.qrCodePollingInterval);
163
- this.botToken = response.bot_token;
164
- // Save bot token to config
165
- this.config.botToken = this.botToken;
166
- this.setStatus('connected');
167
- this.startMessagePolling();
168
- this.logger.info('Successfully connected to WeChat');
169
- resolve();
170
- break;
171
- case 'expired':
172
- clearInterval(this.qrCodePollingInterval);
173
- reject(new Error('QR code expired'));
174
- break;
175
- case 'error':
176
- clearInterval(this.qrCodePollingInterval);
177
- reject(new Error(response.message || 'QR code error'));
178
- break;
179
- case 'pending':
180
- // Keep polling
181
- break;
179
+ clearTimeout(timer);
180
+ if (!res.ok)
181
+ throw new Error(`QR status failed: ${res.status}`);
182
+ statusResp = (await res.json());
183
+ }
184
+ catch (err) {
185
+ clearTimeout(timer);
186
+ if (err instanceof Error && err.name === 'AbortError') {
187
+ // Long-poll timeout, retry
188
+ continue;
182
189
  }
190
+ throw err;
183
191
  }
184
- catch (error) {
185
- // Long-polling timeout is expected, just retry
186
- if (error instanceof Error && error.message === 'Request timeout') {
187
- this.logger.debug('QR code status long-poll timeout, retrying...');
192
+ this.logger.debug({ status: statusResp.status }, 'QR code status check');
193
+ switch (statusResp.status) {
194
+ case 'wait':
195
+ break;
196
+ case 'scaned':
197
+ this.logger.info('QR code scanned, waiting for confirmation');
198
+ break;
199
+ case 'confirmed': {
200
+ if (!statusResp.bot_token) {
201
+ throw new Error('Login confirmed but no bot_token returned');
202
+ }
203
+ this.botToken = statusResp.bot_token;
204
+ this.config.botToken = this.botToken;
205
+ if (statusResp.baseurl) {
206
+ this.baseUrl = statusResp.baseurl;
207
+ }
208
+ this.setStatus('connected');
209
+ this.startMessagePolling();
210
+ this.logger.info('Successfully connected to WeChat');
188
211
  return;
189
212
  }
190
- this.logger.error({ err: error }, 'Error polling QR code status');
191
- clearInterval(this.qrCodePollingInterval);
192
- reject(error);
213
+ case 'expired':
214
+ throw new Error('QR code expired');
193
215
  }
194
- }, this.QR_CODE_POLLING_INTERVAL);
195
- });
216
+ await new Promise(r => setTimeout(r, 1000));
217
+ }
218
+ catch (error) {
219
+ if (error instanceof Error && error.message === 'QR code expired')
220
+ throw error;
221
+ this.logger.error({ err: error }, 'Error polling QR code status');
222
+ await new Promise(r => setTimeout(r, 2000));
223
+ }
224
+ }
225
+ throw new Error('QR code scan timeout');
196
226
  }
197
- /**
198
- * Start polling for incoming messages
199
- */
227
+ // ── Message Polling ──────────────────────────────────────────────────────────
228
+ pollingRunning = false;
200
229
  startMessagePolling() {
201
- this.stopPolling(); // Clear any existing polling
202
- this.pollingInterval = setInterval(async () => {
203
- if (!this.botToken) {
230
+ this.stopPolling();
231
+ this.pollingRunning = true;
232
+ this.logger.info('Starting message polling...');
233
+ this.pollLoop();
234
+ }
235
+ async pollLoop() {
236
+ while (this.pollingRunning) {
237
+ await this.pollOnce();
238
+ }
239
+ }
240
+ async pollOnce() {
241
+ if (!this.botToken)
242
+ return;
243
+ try {
244
+ const body = JSON.stringify({
245
+ get_updates_buf: this.getUpdatesBuf,
246
+ base_info: { channel_version: CHANNEL_VERSION },
247
+ });
248
+ const raw = await this.apiFetch('ilink/bot/getupdates', body, LONG_POLL_TIMEOUT_MS);
249
+ const resp = JSON.parse(raw);
250
+ // Check for API errors
251
+ const isError = (resp.ret !== undefined && resp.ret !== 0) ||
252
+ (resp.errcode !== undefined && resp.errcode !== 0);
253
+ if (isError) {
254
+ this.logger.error({ ret: resp.ret, errcode: resp.errcode, errmsg: resp.errmsg }, 'getUpdates returned error');
255
+ await new Promise(r => setTimeout(r, 2000));
204
256
  return;
205
257
  }
206
- try {
207
- const response = await this.makeRequest(`/getupdates?bot_token=${this.botToken}&last_update_id=${this.lastUpdateId}`, {
208
- method: 'GET',
209
- headers: {
210
- Authorization: `Bearer ${this.botToken}`
211
- }
212
- });
213
- if (response.messages && response.messages.length > 0) {
214
- this.logger.debug({ messageCount: response.messages.length }, 'Received messages from WeChat');
215
- for (const msg of response.messages) {
216
- // Update last update ID
217
- this.lastUpdateId = parseInt(msg.message_id);
218
- // Emit message to callback
219
- this.messageCallback?.({
220
- type: 'MSG_IN',
258
+ // Update sync buffer
259
+ if (resp.get_updates_buf) {
260
+ this.getUpdatesBuf = resp.get_updates_buf;
261
+ }
262
+ // Process messages
263
+ if (resp.msgs && resp.msgs.length > 0) {
264
+ this.logger.debug({ messageCount: resp.msgs.length }, 'Received messages from WeChat');
265
+ for (const msg of resp.msgs) {
266
+ if (msg.message_type !== MSG_TYPE_USER)
267
+ continue;
268
+ const text = extractTextFromMessage(msg);
269
+ if (!text)
270
+ continue;
271
+ const senderId = msg.from_user_id || 'unknown';
272
+ this.logger.info({ from: senderId, textPreview: text.slice(0, 60) }, 'Received WeChat message');
273
+ this.messageCallback?.({
274
+ type: 'MSG_IN',
275
+ platform: 'wechat',
276
+ content: text,
277
+ contextToken: msg.context_token,
278
+ userId: senderId,
279
+ metadata: {
280
+ timestamp: msg.create_time_ms || Date.now(),
221
281
  platform: 'wechat',
222
- content: msg.message,
223
- contextToken: msg.context_token,
224
- userId: msg.user_id,
225
- metadata: {
226
- timestamp: msg.timestamp,
227
- platform: 'wechat',
228
- userId: msg.user_id,
229
- messageId: msg.message_id,
230
- },
231
- });
232
- }
282
+ userId: senderId,
283
+ },
284
+ });
233
285
  }
234
286
  }
235
- catch (error) {
236
- this.logger.error({ err: error }, 'Error polling for messages');
237
- // Don't stop polling on error, just log it
287
+ }
288
+ catch (error) {
289
+ // Long-poll timeout is expected, just continue
290
+ if (error instanceof Error && error.message === 'Request timeout') {
291
+ this.logger.debug('Long-poll timeout, reconnecting...');
292
+ return;
238
293
  }
239
- }, this.POLLING_INTERVAL);
294
+ this.logger.error({ err: error }, 'Error polling for messages');
295
+ await new Promise(r => setTimeout(r, 2000));
296
+ }
240
297
  }
241
- /**
242
- * Stop all polling
243
- */
244
298
  stopPolling() {
245
- if (this.pollingInterval) {
246
- clearInterval(this.pollingInterval);
247
- this.pollingInterval = undefined;
248
- }
249
- if (this.qrCodePollingInterval) {
250
- clearInterval(this.qrCodePollingInterval);
251
- this.qrCodePollingInterval = undefined;
252
- }
299
+ this.pollingRunning = false;
253
300
  }
254
- /**
255
- * Make HTTP request to WeChat API
256
- */
257
- async makeRequest(endpoint, options) {
258
- const url = `${this.baseUrl}${endpoint}`;
259
- // Add timeout for long polling
301
+ // ── HTTP Helper ──────────────────────────────────────────────────────────────
302
+ async apiFetch(endpoint, body, timeoutMs) {
303
+ const base = this.baseUrl.endsWith('/') ? this.baseUrl : `${this.baseUrl}/`;
304
+ const url = new URL(endpoint, base).toString();
305
+ const headers = buildHeaders(this.botToken, body);
260
306
  const controller = new AbortController();
261
- const timeoutId = setTimeout(() => controller.abort(), this.LONG_POLLING_TIMEOUT);
307
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
262
308
  try {
263
- const response = await fetch(url, {
264
- ...options,
309
+ const res = await fetch(url, {
310
+ method: 'POST',
311
+ headers,
312
+ body,
265
313
  signal: controller.signal,
266
314
  });
267
- clearTimeout(timeoutId);
268
- if (!response.ok) {
269
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
270
- }
271
- const data = await response.json();
272
- return data;
315
+ clearTimeout(timer);
316
+ const text = await res.text();
317
+ if (!res.ok)
318
+ throw new Error(`HTTP ${res.status}: ${text}`);
319
+ return text;
273
320
  }
274
- catch (error) {
275
- clearTimeout(timeoutId);
276
- if (error instanceof Error && error.name === 'AbortError') {
321
+ catch (err) {
322
+ clearTimeout(timer);
323
+ if (err instanceof Error && err.name === 'AbortError') {
277
324
  throw new Error('Request timeout');
278
325
  }
279
- throw error;
326
+ throw err;
280
327
  }
281
328
  }
282
- /**
283
- * Update connection status
284
- */
329
+ // ── Status Helpers ───────────────────────────────────────────────────────────
285
330
  setStatus(status) {
286
331
  this.status = status;
287
332
  this.statusCallbacks.forEach((callback) => callback(status));
288
333
  }
289
- /**
290
- * Notify listeners about QR code
291
- */
292
334
  notifyQrCode(qrCodeUrl) {
293
335
  this.qrCodeCallbacks.forEach((callback) => callback(qrCodeUrl));
294
336
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WechatChannel.js","sourceRoot":"","sources":["../../src/channels/WechatChannel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WechatChannel.js","sourceRoot":"","sources":["../../src/channels/WechatChannel.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yungho/noclaw-channel",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "NoClaw Channel Server - WebSocket IPC bridge for external chat platforms",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",