@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
|
|
5
|
-
*
|
|
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
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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
|
|
5
|
-
*
|
|
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
|
-
|
|
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 ||
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
|
154
|
-
|
|
175
|
+
const res = await fetch(url, {
|
|
176
|
+
headers: { 'iLink-App-ClientVersion': '1' },
|
|
177
|
+
signal: controller.signal,
|
|
155
178
|
});
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
|
|
191
|
-
|
|
192
|
-
reject(error);
|
|
213
|
+
case 'expired':
|
|
214
|
+
throw new Error('QR code expired');
|
|
193
215
|
}
|
|
194
|
-
|
|
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
|
-
|
|
199
|
-
*/
|
|
227
|
+
// ── Message Polling ──────────────────────────────────────────────────────────
|
|
228
|
+
pollingRunning = false;
|
|
200
229
|
startMessagePolling() {
|
|
201
|
-
this.stopPolling();
|
|
202
|
-
this.
|
|
203
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
const
|
|
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
|
|
307
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
262
308
|
try {
|
|
263
|
-
const
|
|
264
|
-
|
|
309
|
+
const res = await fetch(url, {
|
|
310
|
+
method: 'POST',
|
|
311
|
+
headers,
|
|
312
|
+
body,
|
|
265
313
|
signal: controller.signal,
|
|
266
314
|
});
|
|
267
|
-
clearTimeout(
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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 (
|
|
275
|
-
clearTimeout(
|
|
276
|
-
if (
|
|
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
|
|
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":"AAAA;;;;;GAKG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,kFAAkF;AAElF,MAAM,eAAe,GAAG,OAAO,CAAC;AAChC,MAAM,gBAAgB,GAAG,+BAA+B,CAAC;AACzD,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AA2ClC,kFAAkF;AAElF,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,IAAa;IACjD,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,mBAAmB,EAAE,iBAAiB;QACtC,cAAc,EAAE,eAAe,EAAE;KAClC,CAAC;IACF,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAkB;IAChD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,kBAAkB,IAAI,CAAC,GAAG,EAAE,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,kFAAkF;AAElF,MAAM,OAAO,aAAa;IACP,OAAO,CAAS;IACzB,QAAQ,CAAU;IAClB,MAAM,CAAe;IACrB,MAAM,CAAc;IACpB,MAAM,GAAkB,cAAc,CAAC;IACvC,eAAe,CAA6B;IAC5C,eAAe,GAAyC,IAAI,GAAG,EAAE,CAAC;IAClE,eAAe,GAAqC,IAAI,GAAG,EAAE,CAAC;IAC9D,aAAa,CAAU;IACvB,aAAa,GAAG,EAAE,CAAC;IAE3B,YAAY,MAAoB,EAAE,MAAmB;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAE7B,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,6BAA6B,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,YAAoB,EAAE,MAAsB;QACnE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,GAAG,EAAE;gBACH,YAAY,EAAE,EAAE;gBAChB,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,gBAAgB,EAAE;gBAC7B,YAAY,EAAE,CAAC,EAAE,eAAe;gBAChC,aAAa,EAAE,CAAC,EAAE,mBAAmB;gBACrC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;gBACzD,aAAa,EAAE,YAAY;aAC5B;YACD,SAAS,EAAE,EAAE,eAAe,EAAE,eAAe,EAAE;SAChD,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,kCAAkC,CAAC,CAAC;YACpF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAmC;QAC3C,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;IAClC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,eAAe;QACb,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,QAAyC;QACtD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,aAAa;QACX,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,uBAAuB,CAAC,CACjE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,QAAqC;QAC5C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,gFAAgF;IAExE,KAAK,CAAC,sBAAsB;QAClC,sDAAsD;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;QAC5E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,qCAAqC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAE5G,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAmB,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAElE,8BAA8B;QAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAEnE,+BAA+B;QAC/B,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,MAAc;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,YAAY;QAEnD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,sCAAsC,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACzG,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;gBAEvE,IAAI,UAA4B,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;wBAC3B,OAAO,EAAE,EAAE,yBAAyB,EAAE,GAAG,EAAE;wBAC3C,MAAM,EAAE,UAAU,CAAC,MAAM;qBAC1B,CAAC,CAAC;oBACH,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,CAAC,GAAG,CAAC,EAAE;wBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;oBAChE,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;gBACtD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;wBACtD,2BAA2B;wBAC3B,SAAS;oBACX,CAAC;oBACD,MAAM,GAAG,CAAC;gBACZ,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;gBAEzE,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC;oBAC1B,KAAK,MAAM;wBACT,MAAM;oBAER,KAAK,QAAQ;wBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;wBAC9D,MAAM;oBAER,KAAK,WAAW,CAAC,CAAC,CAAC;wBACjB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;4BAC1B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;wBAC/D,CAAC;wBACD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;wBACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;wBAErC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;4BACtB,IAAY,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;wBAC7C,CAAC;wBAED,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;wBAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;wBACrD,OAAO;oBACT,CAAC;oBAED,KAAK,SAAS;wBACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACvC,CAAC;gBAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,iBAAiB;oBAAE,MAAM,KAAK,CAAC;gBAC/E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAC;gBAClE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,gFAAgF;IAExE,cAAc,GAAG,KAAK,CAAC;IAEvB,mBAAmB;QACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,eAAe,EAAE,IAAI,CAAC,aAAa;gBACnC,SAAS,EAAE,EAAE,eAAe,EAAE,eAAe,EAAE;aAChD,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC;YACpF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;YAE/C,uBAAuB;YACvB,MAAM,OAAO,GACX,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBAC1C,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;YAErD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAC7D,2BAA2B,CAC5B,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,qBAAqB;YACrB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC;YAC5C,CAAC;YAED,mBAAmB;YACnB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,+BAA+B,CAAC,CAAC;gBAEvF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,GAAG,CAAC,YAAY,KAAK,aAAa;wBAAE,SAAS;oBAEjD,MAAM,IAAI,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;oBACzC,IAAI,CAAC,IAAI;wBAAE,SAAS;oBAEpB,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,IAAI,SAAS,CAAC;oBAE/C,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAClD,yBAAyB,CAC1B,CAAC;oBAEF,IAAI,CAAC,eAAe,EAAE,CAAC;wBACrB,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,QAAQ;wBAClB,OAAO,EAAE,IAAI;wBACb,YAAY,EAAE,GAAG,CAAC,aAAa;wBAC/B,MAAM,EAAE,QAAQ;wBAChB,QAAQ,EAAE;4BACR,SAAS,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE;4BAC3C,QAAQ,EAAE,QAAQ;4BAClB,MAAM,EAAE,QAAQ;yBACjB;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;gBAClE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,4BAA4B,CAAC,CAAC;YAChE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,gFAAgF;IAExE,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,IAAY,EAAE,SAAiB;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC;QAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAElD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI;gBACJ,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;YAEpB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;YAC5D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,gFAAgF;IAExE,SAAS,CAAC,MAAqB;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,YAAY,CAAC,SAAiB;QACpC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAClE,CAAC;CACF"}
|