@tencent-weixin/openclaw-weixin 2.3.1 → 2.4.1

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.
Files changed (72) hide show
  1. package/dist/index.js +20 -0
  2. package/dist/index.js.map +1 -0
  3. package/dist/src/api/api.js +375 -0
  4. package/dist/src/api/api.js.map +1 -0
  5. package/dist/src/api/config-cache.js +64 -0
  6. package/dist/src/api/config-cache.js.map +1 -0
  7. package/dist/src/api/session-guard.js +49 -0
  8. package/dist/src/api/session-guard.js.map +1 -0
  9. package/dist/src/api/types.js +35 -0
  10. package/dist/src/api/types.js.map +1 -0
  11. package/dist/src/auth/accounts.js +326 -0
  12. package/dist/src/auth/accounts.js.map +1 -0
  13. package/dist/src/auth/login-qr.js +332 -0
  14. package/dist/src/auth/login-qr.js.map +1 -0
  15. package/dist/src/auth/pairing.js +104 -0
  16. package/dist/src/auth/pairing.js.map +1 -0
  17. package/dist/src/cdn/aes-ecb.js +19 -0
  18. package/dist/src/cdn/aes-ecb.js.map +1 -0
  19. package/dist/src/cdn/cdn-upload.js +73 -0
  20. package/dist/src/cdn/cdn-upload.js.map +1 -0
  21. package/dist/src/cdn/cdn-url.js +14 -0
  22. package/dist/src/cdn/cdn-url.js.map +1 -0
  23. package/dist/src/cdn/pic-decrypt.js +89 -0
  24. package/dist/src/cdn/pic-decrypt.js.map +1 -0
  25. package/dist/src/cdn/upload.js +106 -0
  26. package/dist/src/cdn/upload.js.map +1 -0
  27. package/dist/src/channel.js +449 -0
  28. package/dist/src/channel.js.map +1 -0
  29. package/dist/src/compat.js +67 -0
  30. package/dist/src/compat.js.map +1 -0
  31. package/dist/src/config/config-schema.js +19 -0
  32. package/dist/src/config/config-schema.js.map +1 -0
  33. package/dist/src/media/media-download.js +95 -0
  34. package/dist/src/media/media-download.js.map +1 -0
  35. package/dist/src/media/mime.js +73 -0
  36. package/dist/src/media/mime.js.map +1 -0
  37. package/dist/src/media/silk-transcode.js +64 -0
  38. package/dist/src/media/silk-transcode.js.map +1 -0
  39. package/dist/src/messaging/debug-mode.js +63 -0
  40. package/dist/src/messaging/debug-mode.js.map +1 -0
  41. package/dist/src/messaging/error-notice.js +24 -0
  42. package/dist/src/messaging/error-notice.js.map +1 -0
  43. package/dist/src/messaging/inbound.js +201 -0
  44. package/dist/src/messaging/inbound.js.map +1 -0
  45. package/dist/src/messaging/markdown-filter.js +368 -0
  46. package/dist/src/messaging/markdown-filter.js.map +1 -0
  47. package/dist/src/messaging/outbound-hooks.js +56 -0
  48. package/dist/src/messaging/outbound-hooks.js.map +1 -0
  49. package/dist/src/messaging/process-message.js +381 -0
  50. package/dist/src/messaging/process-message.js.map +1 -0
  51. package/dist/src/messaging/send-media.js +54 -0
  52. package/dist/src/messaging/send-media.js.map +1 -0
  53. package/dist/src/messaging/send.js +182 -0
  54. package/dist/src/messaging/send.js.map +1 -0
  55. package/dist/src/messaging/slash-commands.js +70 -0
  56. package/dist/src/messaging/slash-commands.js.map +1 -0
  57. package/dist/src/monitor/monitor.js +150 -0
  58. package/dist/src/monitor/monitor.js.map +1 -0
  59. package/dist/src/runtime.js +54 -0
  60. package/dist/src/runtime.js.map +1 -0
  61. package/dist/src/storage/state-dir.js +9 -0
  62. package/dist/src/storage/state-dir.js.map +1 -0
  63. package/dist/src/storage/sync-buf.js +64 -0
  64. package/dist/src/storage/sync-buf.js.map +1 -0
  65. package/dist/src/util/logger.js +120 -0
  66. package/dist/src/util/logger.js.map +1 -0
  67. package/dist/src/util/random.js +16 -0
  68. package/dist/src/util/random.js.map +1 -0
  69. package/dist/src/util/redact.js +54 -0
  70. package/dist/src/util/redact.js.map +1 -0
  71. package/openclaw.plugin.json +11 -1
  72. package/package.json +9 -2
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Streaming markdown filter — character-level state machine that strips
3
+ * unsupported markdown syntax on-the-fly.
4
+ *
5
+ * Outputs as much filtered text as possible on each `feed()` call, only
6
+ * holding back the minimum characters needed for pattern disambiguation
7
+ * (e.g. a trailing `*` that might become `***`).
8
+ *
9
+ * Constructs passed through (not filtered):
10
+ * - Code fences (```)
11
+ * - Inline code (`)
12
+ * - Tables (|...|)
13
+ * - Horizontal rules (---, ***, ___)
14
+ * - Bold (**)
15
+ * - Italic/bold-italic wrapping non-CJK content
16
+ *
17
+ * Constructs filtered (markers stripped, content kept):
18
+ * - Italic/bold-italic wrapping CJK content
19
+ * - Headings H5/H6 (#####, ######)
20
+ * - Images (![alt](url)) — removed entirely
21
+ *
22
+ * States:
23
+ * - **sol** (start-of-line): checks for line-start patterns (```, >, #####, indent)
24
+ * - **body**: scans for inline patterns (![, ~~, ***) and outputs safe chars
25
+ * - **fence**: inside a fenced code block, passes through until closing ```
26
+ * - **inline**: accumulating content inside an inline marker pair
27
+ */
28
+ export class StreamingMarkdownFilter {
29
+ buf = "";
30
+ fence = false;
31
+ sol = true;
32
+ inl = null;
33
+ feed(delta) {
34
+ this.buf += delta;
35
+ return this.pump(false);
36
+ }
37
+ flush() {
38
+ return this.pump(true);
39
+ }
40
+ pump(eof) {
41
+ let out = "";
42
+ while (this.buf) {
43
+ const sLen = this.buf.length;
44
+ const sSol = this.sol;
45
+ const sFence = this.fence;
46
+ const sInl = this.inl;
47
+ if (this.fence)
48
+ out += this.pumpFence(eof);
49
+ else if (this.inl)
50
+ out += this.pumpInline(eof);
51
+ else if (this.sol)
52
+ out += this.pumpSOL(eof);
53
+ else
54
+ out += this.pumpBody(eof);
55
+ if (this.buf.length === sLen && this.sol === sSol &&
56
+ this.fence === sFence && this.inl === sInl)
57
+ break;
58
+ }
59
+ if (eof && this.inl) {
60
+ const markers = { image: "![", bold3: "***", italic: "*", ubold3: "___", uitalic: "_" };
61
+ out += (markers[this.inl.type] ?? "") + this.inl.acc;
62
+ this.inl = null;
63
+ }
64
+ return out;
65
+ }
66
+ /** Inside a code fence: pass content and markers through verbatim. */
67
+ pumpFence(eof) {
68
+ if (this.sol) {
69
+ if (this.buf.length < 3 && !eof)
70
+ return "";
71
+ if (this.buf.startsWith("```")) {
72
+ const nl = this.buf.indexOf("\n", 3);
73
+ if (nl !== -1) {
74
+ this.fence = false;
75
+ const line = this.buf.slice(0, nl + 1);
76
+ this.buf = this.buf.slice(nl + 1);
77
+ this.sol = true;
78
+ return line;
79
+ }
80
+ if (eof) {
81
+ this.fence = false;
82
+ const line = this.buf;
83
+ this.buf = "";
84
+ return line;
85
+ }
86
+ return "";
87
+ }
88
+ this.sol = false;
89
+ }
90
+ const nl = this.buf.indexOf("\n");
91
+ if (nl !== -1) {
92
+ const chunk = this.buf.slice(0, nl + 1);
93
+ this.buf = this.buf.slice(nl + 1);
94
+ this.sol = true;
95
+ return chunk;
96
+ }
97
+ const chunk = this.buf;
98
+ this.buf = "";
99
+ return chunk;
100
+ }
101
+ /** At start of line: detect and consume line-start patterns, then transition to body. */
102
+ pumpSOL(eof) {
103
+ const b = this.buf;
104
+ if (b[0] === "\n") {
105
+ this.buf = b.slice(1);
106
+ return "\n";
107
+ }
108
+ if (b[0] === "`") {
109
+ if (b.length < 3 && !eof)
110
+ return "";
111
+ if (b.startsWith("```")) {
112
+ const nl = b.indexOf("\n", 3);
113
+ if (nl !== -1) {
114
+ this.fence = true;
115
+ const line = b.slice(0, nl + 1);
116
+ this.buf = b.slice(nl + 1);
117
+ this.sol = true;
118
+ return line;
119
+ }
120
+ if (eof) {
121
+ this.buf = "";
122
+ return b;
123
+ }
124
+ return "";
125
+ }
126
+ this.sol = false;
127
+ return "";
128
+ }
129
+ if (b[0] === ">") {
130
+ this.sol = false;
131
+ return "";
132
+ }
133
+ if (b[0] === "#") {
134
+ let n = 0;
135
+ while (n < b.length && b[n] === "#")
136
+ n++;
137
+ if (n === b.length && !eof)
138
+ return "";
139
+ if (n >= 5 && n <= 6 && n < b.length && b[n] === " ") {
140
+ this.buf = b.slice(n + 1);
141
+ this.sol = false;
142
+ return "";
143
+ }
144
+ this.sol = false;
145
+ return "";
146
+ }
147
+ if (b[0] === " " || b[0] === "\t") {
148
+ if (b.search(/[^ \t]/) === -1 && !eof)
149
+ return "";
150
+ this.sol = false;
151
+ return "";
152
+ }
153
+ if (b[0] === "-" || b[0] === "*" || b[0] === "_") {
154
+ const ch = b[0];
155
+ let j = 0;
156
+ while (j < b.length && (b[j] === ch || b[j] === " "))
157
+ j++;
158
+ if (j === b.length && !eof)
159
+ return "";
160
+ if (j === b.length || b[j] === "\n") {
161
+ let count = 0;
162
+ for (let k = 0; k < j; k++)
163
+ if (b[k] === ch)
164
+ count++;
165
+ if (count >= 3) {
166
+ if (j < b.length) {
167
+ this.buf = b.slice(j + 1);
168
+ this.sol = true;
169
+ return b.slice(0, j + 1);
170
+ }
171
+ this.buf = "";
172
+ return b;
173
+ }
174
+ }
175
+ this.sol = false;
176
+ return "";
177
+ }
178
+ this.sol = false;
179
+ return "";
180
+ }
181
+ /** Scan line body for inline pattern triggers; output safe chars eagerly. */
182
+ pumpBody(eof) {
183
+ let out = "";
184
+ let i = 0;
185
+ while (i < this.buf.length) {
186
+ const c = this.buf[i];
187
+ if (c === "\n") {
188
+ out += this.buf.slice(0, i + 1);
189
+ this.buf = this.buf.slice(i + 1);
190
+ this.sol = true;
191
+ return out;
192
+ }
193
+ if (c === "!" && i + 1 < this.buf.length && this.buf[i + 1] === "[") {
194
+ out += this.buf.slice(0, i);
195
+ this.buf = this.buf.slice(i + 2);
196
+ this.inl = { type: "image", acc: "" };
197
+ return out;
198
+ }
199
+ if (c === "~") {
200
+ i++;
201
+ continue;
202
+ }
203
+ if (c === "*") {
204
+ if (i + 2 < this.buf.length && this.buf[i + 1] === "*" && this.buf[i + 2] === "*") {
205
+ out += this.buf.slice(0, i);
206
+ this.buf = this.buf.slice(i + 3);
207
+ this.inl = { type: "bold3", acc: "" };
208
+ return out;
209
+ }
210
+ if (i + 1 < this.buf.length && this.buf[i + 1] === "*") {
211
+ i += 2;
212
+ continue;
213
+ }
214
+ if (i + 1 < this.buf.length && this.buf[i + 1] !== " " && this.buf[i + 1] !== "\n") {
215
+ out += this.buf.slice(0, i);
216
+ this.buf = this.buf.slice(i + 1);
217
+ this.inl = { type: "italic", acc: "" };
218
+ return out;
219
+ }
220
+ i++;
221
+ continue;
222
+ }
223
+ if (c === "_") {
224
+ if (i + 2 < this.buf.length && this.buf[i + 1] === "_" && this.buf[i + 2] === "_") {
225
+ out += this.buf.slice(0, i);
226
+ this.buf = this.buf.slice(i + 3);
227
+ this.inl = { type: "ubold3", acc: "" };
228
+ return out;
229
+ }
230
+ if (i + 1 < this.buf.length && this.buf[i + 1] === "_") {
231
+ i += 2;
232
+ continue;
233
+ }
234
+ if (i + 1 < this.buf.length && this.buf[i + 1] !== " " && this.buf[i + 1] !== "\n") {
235
+ out += this.buf.slice(0, i);
236
+ this.buf = this.buf.slice(i + 1);
237
+ this.inl = { type: "uitalic", acc: "" };
238
+ return out;
239
+ }
240
+ i++;
241
+ continue;
242
+ }
243
+ i++;
244
+ }
245
+ let hold = 0;
246
+ if (!eof) {
247
+ if (this.buf.endsWith("**"))
248
+ hold = 2;
249
+ else if (this.buf.endsWith("__"))
250
+ hold = 2;
251
+ else if (this.buf.endsWith("*"))
252
+ hold = 1;
253
+ else if (this.buf.endsWith("_"))
254
+ hold = 1;
255
+ else if (this.buf.endsWith("!"))
256
+ hold = 1;
257
+ }
258
+ out += this.buf.slice(0, this.buf.length - hold);
259
+ this.buf = hold > 0 ? this.buf.slice(-hold) : "";
260
+ return out;
261
+ }
262
+ /** Accumulate inline content until closing marker is found. */
263
+ pumpInline(_eof) {
264
+ if (!this.inl)
265
+ return "";
266
+ this.inl.acc += this.buf;
267
+ this.buf = "";
268
+ switch (this.inl.type) {
269
+ case "bold3": {
270
+ const idx = this.inl.acc.indexOf("***");
271
+ if (idx !== -1) {
272
+ const content = this.inl.acc.slice(0, idx);
273
+ this.buf = this.inl.acc.slice(idx + 3);
274
+ this.inl = null;
275
+ if (StreamingMarkdownFilter.containsCJK(content))
276
+ return content;
277
+ return `***${content}***`;
278
+ }
279
+ return "";
280
+ }
281
+ case "ubold3": {
282
+ const idx = this.inl.acc.indexOf("___");
283
+ if (idx !== -1) {
284
+ const content = this.inl.acc.slice(0, idx);
285
+ this.buf = this.inl.acc.slice(idx + 3);
286
+ this.inl = null;
287
+ if (StreamingMarkdownFilter.containsCJK(content))
288
+ return content;
289
+ return `___${content}___`;
290
+ }
291
+ return "";
292
+ }
293
+ case "italic": {
294
+ for (let j = 0; j < this.inl.acc.length; j++) {
295
+ if (this.inl.acc[j] === "\n") {
296
+ const r = "*" + this.inl.acc.slice(0, j + 1);
297
+ this.buf = this.inl.acc.slice(j + 1);
298
+ this.inl = null;
299
+ this.sol = true;
300
+ return r;
301
+ }
302
+ if (this.inl.acc[j] === "*") {
303
+ if (j + 1 < this.inl.acc.length && this.inl.acc[j + 1] === "*") {
304
+ j++;
305
+ continue;
306
+ }
307
+ const content = this.inl.acc.slice(0, j);
308
+ this.buf = this.inl.acc.slice(j + 1);
309
+ this.inl = null;
310
+ if (StreamingMarkdownFilter.containsCJK(content))
311
+ return content;
312
+ return `*${content}*`;
313
+ }
314
+ }
315
+ return "";
316
+ }
317
+ case "uitalic": {
318
+ for (let j = 0; j < this.inl.acc.length; j++) {
319
+ if (this.inl.acc[j] === "\n") {
320
+ const r = "_" + this.inl.acc.slice(0, j + 1);
321
+ this.buf = this.inl.acc.slice(j + 1);
322
+ this.inl = null;
323
+ this.sol = true;
324
+ return r;
325
+ }
326
+ if (this.inl.acc[j] === "_") {
327
+ if (j + 1 < this.inl.acc.length && this.inl.acc[j + 1] === "_") {
328
+ j++;
329
+ continue;
330
+ }
331
+ const content = this.inl.acc.slice(0, j);
332
+ this.buf = this.inl.acc.slice(j + 1);
333
+ this.inl = null;
334
+ if (StreamingMarkdownFilter.containsCJK(content))
335
+ return content;
336
+ return `_${content}_`;
337
+ }
338
+ }
339
+ return "";
340
+ }
341
+ case "image": {
342
+ const cb = this.inl.acc.indexOf("]");
343
+ if (cb === -1)
344
+ return "";
345
+ if (cb + 1 >= this.inl.acc.length)
346
+ return "";
347
+ if (this.inl.acc[cb + 1] !== "(") {
348
+ const r = "![" + this.inl.acc.slice(0, cb + 1);
349
+ this.buf = this.inl.acc.slice(cb + 1);
350
+ this.inl = null;
351
+ return r;
352
+ }
353
+ const cp = this.inl.acc.indexOf(")", cb + 2);
354
+ if (cp !== -1) {
355
+ this.buf = this.inl.acc.slice(cp + 1);
356
+ this.inl = null;
357
+ return "";
358
+ }
359
+ return "";
360
+ }
361
+ }
362
+ return "";
363
+ }
364
+ static containsCJK(text) {
365
+ return /[\u2E80-\u9FFF\uAC00-\uD7AF\uF900-\uFAFF]/.test(text);
366
+ }
367
+ }
368
+ //# sourceMappingURL=markdown-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-filter.js","sourceRoot":"","sources":["../../../src/messaging/markdown-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,uBAAuB;IAC1B,GAAG,GAAG,EAAE,CAAC;IACT,KAAK,GAAG,KAAK,CAAC;IACd,GAAG,GAAG,IAAI,CAAC;IACX,GAAG,GAAsF,IAAI,CAAC;IAEtG,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,IAAI,CAAC,GAAY;QACvB,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;YAEtB,IAAI,IAAI,CAAC,KAAK;gBAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBACtC,IAAI,IAAI,CAAC,GAAG;gBAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBAC1C,IAAI,IAAI,CAAC,GAAG;gBAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;gBACvC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAE/B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;gBAC7C,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;gBAAE,MAAM;QACxD,CAAC;QAED,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACpB,MAAM,OAAO,GAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAChH,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACrD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,sEAAsE;IAC9D,SAAS,CAAC,GAAY;QAC5B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YAC3C,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACrC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;oBACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;oBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAClC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;oBAChB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;oBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;oBACtB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;oBACd,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yFAAyF;IACjF,OAAO,CAAC,GAAY;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QAEnB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC9B,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;oBACd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;oBAClB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;oBAChB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;oBACd,OAAO,CAAC,CAAC;gBACX,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrD,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;gBACjB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YACjD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;gBAAE,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;wBAAE,KAAK,EAAE,CAAC;gBACrD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;oBACf,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;wBACjB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAChB,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC3B,CAAC;oBACD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;oBACd,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,6EAA6E;IACrE,QAAQ,CAAC,GAAY;QAC3B,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACf,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;gBAChB,OAAO,GAAG,CAAC;YACb,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;gBACtC,OAAO,GAAG,CAAC;YACb,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAClF,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;oBACtC,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACvD,CAAC,IAAI,CAAC,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACnF,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;oBACvC,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAClF,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;oBACvC,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACvD,CAAC,IAAI,CAAC,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACnF,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;oBACxC,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;QAED,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,IAAI,GAAG,CAAC,CAAC;iBACjC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,IAAI,GAAG,CAAC,CAAC;iBACtC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,IAAI,GAAG,CAAC,CAAC;iBACrC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,IAAI,GAAG,CAAC,CAAC;iBACrC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,IAAI,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,+DAA+D;IACvD,UAAU,CAAC,IAAa;QAC9B,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QAEd,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBAC3C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;oBAChB,IAAI,uBAAuB,CAAC,WAAW,CAAC,OAAO,CAAC;wBAAE,OAAO,OAAO,CAAC;oBACjE,OAAO,MAAM,OAAO,KAAK,CAAC;gBAC5B,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;oBACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBAC3C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBACvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;oBAChB,IAAI,uBAAuB,CAAC,WAAW,CAAC,OAAO,CAAC;wBAAE,OAAO,OAAO,CAAC;oBACjE,OAAO,MAAM,OAAO,KAAK,CAAC;gBAC5B,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC7B,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC7C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACrC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAChB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAChB,OAAO,CAAC,CAAC;oBACX,CAAC;oBACD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;4BAC/D,CAAC,EAAE,CAAC;4BACJ,SAAS;wBACX,CAAC;wBACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACrC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAChB,IAAI,uBAAuB,CAAC,WAAW,CAAC,OAAO,CAAC;4BAAE,OAAO,OAAO,CAAC;wBACjE,OAAO,IAAI,OAAO,GAAG,CAAC;oBACxB,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC7B,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC7C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACrC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAChB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAChB,OAAO,CAAC,CAAC;oBACX,CAAC;oBACD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;wBAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;4BAC/D,CAAC,EAAE,CAAC;4BACJ,SAAS;wBACX,CAAC;wBACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACrC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;wBAChB,IAAI,uBAAuB,CAAC,WAAW,CAAC,OAAO,CAAC;4BAAE,OAAO,OAAO,CAAC;wBACjE,OAAO,IAAI,OAAO,GAAG,CAAC;oBACxB,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAAE,OAAO,EAAE,CAAC;gBACzB,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM;oBAAE,OAAO,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACjC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC/C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;oBAChB,OAAO,CAAC,CAAC;gBACX,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC7C,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;oBACd,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACtC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;oBAChB,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,IAAY;QACrC,OAAO,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;CACF"}
@@ -0,0 +1,56 @@
1
+ import { fireAndForgetHook, buildCanonicalSentMessageHookContext, toPluginMessageContext, toPluginMessageSentEvent, } from "openclaw/plugin-sdk/hook-runtime";
2
+ import { getGlobalHookRunner } from "openclaw/plugin-sdk/plugin-runtime";
3
+ import { logger } from "../util/logger.js";
4
+ const CHANNEL_ID = "openclaw-weixin";
5
+ /**
6
+ * Run message_sending hook before sending.
7
+ * Returns the (possibly modified) text content plus a cancelled flag.
8
+ * Hook errors are caught and logged — sending proceeds regardless.
9
+ */
10
+ export async function applyWeixinMessageSendingHook(params) {
11
+ const hookRunner = getGlobalHookRunner();
12
+ if (!hookRunner?.hasHooks("message_sending")) {
13
+ return { cancelled: false, text: params.text };
14
+ }
15
+ try {
16
+ const hookResult = await hookRunner.runMessageSending({
17
+ to: params.to,
18
+ content: params.text,
19
+ metadata: {
20
+ channel: CHANNEL_ID,
21
+ accountId: params.accountId,
22
+ ...(params.mediaUrl ? { mediaUrls: [params.mediaUrl] } : {}),
23
+ },
24
+ }, { channelId: CHANNEL_ID, accountId: params.accountId });
25
+ if (hookResult?.cancel) {
26
+ return { cancelled: true, text: params.text };
27
+ }
28
+ return {
29
+ cancelled: false,
30
+ text: hookResult?.content ?? params.text,
31
+ };
32
+ }
33
+ catch (err) {
34
+ logger.warn(`message_sending hook error, proceeding with send: ${String(err)}`);
35
+ return { cancelled: false, text: params.text };
36
+ }
37
+ }
38
+ /**
39
+ * Fire message_sent hook (fire-and-forget) after a send attempt.
40
+ */
41
+ export function emitWeixinMessageSent(params) {
42
+ const hookRunner = getGlobalHookRunner();
43
+ if (!hookRunner?.hasHooks("message_sent"))
44
+ return;
45
+ const canonical = buildCanonicalSentMessageHookContext({
46
+ to: params.to,
47
+ content: params.content,
48
+ success: params.success,
49
+ error: params.error,
50
+ channelId: CHANNEL_ID,
51
+ accountId: params.accountId,
52
+ conversationId: params.to,
53
+ });
54
+ fireAndForgetHook(Promise.resolve(hookRunner.runMessageSent(toPluginMessageSentEvent(canonical), toPluginMessageContext(canonical))), "weixin: message_sent plugin hook failed");
55
+ }
56
+ //# sourceMappingURL=outbound-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound-hooks.js","sourceRoot":"","sources":["../../../src/messaging/outbound-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,oCAAoC,EACpC,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,MAKnD;IACC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,iBAAiB,CACnD;YACE,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,QAAQ,EAAE;gBACR,OAAO,EAAE,UAAU;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D;SACF,EACD,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CACvD,CAAC;QACF,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,UAAU,EAAE,OAAO,IAAI,MAAM,CAAC,IAAI;SACzC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,qDAAqD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAMrC;IACC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO;IAClD,MAAM,SAAS,GAAG,oCAAoC,CAAC;QACrD,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,cAAc,EAAE,MAAM,CAAC,EAAE;KAC1B,CAAC,CAAC;IACH,iBAAiB,CACf,OAAO,CAAC,OAAO,CACb,UAAW,CAAC,cAAc,CACxB,wBAAwB,CAAC,SAAS,CAAC,EACnC,sBAAsB,CAAC,SAAS,CAAC,CAClC,CACF,EACD,yCAAyC,CAC1C,CAAC;AACJ,CAAC"}