@yaoqi10012/wechat-kf 0.3.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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/dist/accounts.d.ts +38 -0
  3. package/dist/accounts.js +247 -0
  4. package/dist/accounts.js.map +1 -0
  5. package/dist/api.d.ts +58 -0
  6. package/dist/api.js +200 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/bot.d.ts +37 -0
  9. package/dist/bot.js +672 -0
  10. package/dist/bot.js.map +1 -0
  11. package/dist/channel.d.ts +14 -0
  12. package/dist/channel.js +320 -0
  13. package/dist/channel.js.map +1 -0
  14. package/dist/config-schema.d.ts +56 -0
  15. package/dist/config-schema.js +39 -0
  16. package/dist/config-schema.js.map +1 -0
  17. package/dist/constants.d.ts +41 -0
  18. package/dist/constants.js +51 -0
  19. package/dist/constants.js.map +1 -0
  20. package/dist/crypto.d.ts +18 -0
  21. package/dist/crypto.js +81 -0
  22. package/dist/crypto.js.map +1 -0
  23. package/dist/fs-utils.d.ts +7 -0
  24. package/dist/fs-utils.js +13 -0
  25. package/dist/fs-utils.js.map +1 -0
  26. package/dist/monitor.d.ts +31 -0
  27. package/dist/monitor.js +80 -0
  28. package/dist/monitor.js.map +1 -0
  29. package/dist/outbound.d.ts +32 -0
  30. package/dist/outbound.js +411 -0
  31. package/dist/outbound.js.map +1 -0
  32. package/dist/reply-dispatcher.d.ts +36 -0
  33. package/dist/reply-dispatcher.js +216 -0
  34. package/dist/reply-dispatcher.js.map +1 -0
  35. package/dist/runtime.d.ts +12 -0
  36. package/dist/runtime.js +23 -0
  37. package/dist/runtime.js.map +1 -0
  38. package/dist/send-utils.d.ts +52 -0
  39. package/dist/send-utils.js +217 -0
  40. package/dist/send-utils.js.map +1 -0
  41. package/dist/token.d.ts +8 -0
  42. package/dist/token.js +61 -0
  43. package/dist/token.js.map +1 -0
  44. package/dist/types.d.ts +236 -0
  45. package/dist/types.js +3 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/unicode-format.d.ts +26 -0
  48. package/dist/unicode-format.js +157 -0
  49. package/dist/unicode-format.js.map +1 -0
  50. package/dist/webhook.d.ts +22 -0
  51. package/dist/webhook.js +148 -0
  52. package/dist/webhook.js.map +1 -0
  53. package/dist/wechat-kf-directives.d.ts +157 -0
  54. package/dist/wechat-kf-directives.js +576 -0
  55. package/dist/wechat-kf-directives.js.map +1 -0
  56. package/openclaw.plugin.json +31 -0
  57. package/package.json +92 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * WeChat KF ChannelPlugin implementation
3
+ *
4
+ * Dynamically discovers kfids from webhook callbacks.
5
+ * Each kfid = one accountId = one independent session.
6
+ *
7
+ * Architecture:
8
+ * - "default" account: enterprise-level shared infra (loads kfIds, validates token, sets shared context)
9
+ * - Per-kfId accounts: wait for shared context, then start 30s polling loop
10
+ * - Webhook handler: registered on framework's shared gateway server (no self-managed HTTP server)
11
+ */
12
+ import type { ChannelPlugin } from "openclaw/plugin-sdk";
13
+ import type { ResolvedWechatKfAccount } from "./types.js";
14
+ export declare const wechatKfPlugin: ChannelPlugin<ResolvedWechatKfAccount>;
@@ -0,0 +1,320 @@
1
+ /**
2
+ * WeChat KF ChannelPlugin implementation
3
+ *
4
+ * Dynamically discovers kfids from webhook callbacks.
5
+ * Each kfid = one accountId = one independent session.
6
+ *
7
+ * Architecture:
8
+ * - "default" account: enterprise-level shared infra (loads kfIds, validates token, sets shared context)
9
+ * - Per-kfId accounts: wait for shared context, then start 30s polling loop
10
+ * - Webhook handler: registered on framework's shared gateway server (no self-managed HTTP server)
11
+ */
12
+ import { formatPairingApproveHint, PAIRING_APPROVED_MESSAGE } from "openclaw/plugin-sdk";
13
+ import { deleteKfId, disableKfId, enableKfId, getChannelConfig, listAccountIds, loadKfIds, resolveAccount, } from "./accounts.js";
14
+ import { sendTextMessage } from "./api.js";
15
+ import { handleWebhookEvent } from "./bot.js";
16
+ import { wechatKfConfigSchema } from "./config-schema.js";
17
+ import { CHANNEL_ID, CONFIG_KEY, DEFAULT_WEBHOOK_PATH, defaultStateDir, formatError, logTag } from "./constants.js";
18
+ import { clearSharedContext, getPairingKfId, getSharedContext, setSharedContext, waitForSharedContext, } from "./monitor.js";
19
+ import { wechatKfOutbound } from "./outbound.js";
20
+ import { getRuntime } from "./runtime.js";
21
+ import { getAccessToken } from "./token.js";
22
+ const meta = {
23
+ id: CHANNEL_ID,
24
+ label: "WeChat KF",
25
+ selectionLabel: "WeChat Customer Service (微信客服)",
26
+ docsPath: `/channels/${CHANNEL_ID}`,
27
+ docsLabel: CHANNEL_ID,
28
+ blurb: "WeCom Customer Service (企业微信客服) API channel — let WeChat users chat with your agent.",
29
+ aliases: ["wxkf"],
30
+ order: 80,
31
+ };
32
+ export const wechatKfPlugin = {
33
+ id: CHANNEL_ID,
34
+ meta: { ...meta },
35
+ capabilities: {
36
+ chatTypes: ["direct"],
37
+ media: true,
38
+ reactions: false,
39
+ threads: false,
40
+ polls: false,
41
+ nativeCommands: false,
42
+ blockStreaming: false,
43
+ },
44
+ agentPrompt: {
45
+ messageToolHints: () => [
46
+ "- WeChat KF is direct-message only (1:1). Omit `target` to reply to current conversation.",
47
+ "- Markdown (bold, italic, headings, lists, code blocks) is auto-converted to Unicode-styled plain text.",
48
+ "- Long replies are auto-chunked at ~2000 bytes (UTF-8); write naturally without manually splitting.",
49
+ "- WeChat content security may block messages that combine numbered lists (1. 2. 3.) with security/credential topics (passwords, API keys, secrets). Use bullet points or conversational prose for such topics.",
50
+ "- Outbound media: can send image (jpg/png/gif/bmp), video (mp4), and file attachments.",
51
+ "- Voice messages require AMR format (\u22642MB, \u226460s). Other audio formats (mp3, wav, ogg) are sent as file attachments, not playable voice.",
52
+ "- When generating or saving files for sending, prefer the agent workspace directory over /tmp.",
53
+ "- Users may send: text, images, voice, video, files, locations, links, mini-programs, menu selections, forwarded chat history, \u89c6\u9891\u53f7 content, business cards, \u89c6\u9891\u53f7\u5546\u54c1, \u89c6\u9891\u53f7\u8ba2\u5355, or \u7b14\u8bb0.",
54
+ "",
55
+ "### WeChat Rich Messages",
56
+ "Embed directives in your reply to send rich messages (one per message). Text around the directive is sent as separate text messages.",
57
+ "Thumbnail fields: pass an image URL or file path (auto-uploaded to WeChat), or a media_id from a prior message (used as-is).",
58
+ "",
59
+ "**Link Card**: `[[wechat_link: Title | Description | https://url | thumbnail]]`",
60
+ " title + url required; desc + thumbnail optional. Thumbnail needed for rich card; without one, sent as plain text.",
61
+ "",
62
+ "**Location**: `[[wechat_location: Place Name | Address | latitude | longitude]]`",
63
+ " name + coordinates required; address optional (omit for 3-field format: `name | lat | lng`).",
64
+ "",
65
+ "**Mini Program**: `[[wechat_miniprogram: appid | Title | pages/path | thumbnail]]`",
66
+ " appid + title + pagepath required; thumbnail recommended. Without one, falls back to plain text.",
67
+ "",
68
+ "**Menu**: `[[wechat_menu: Question text | Option1, Option2, Option3 | Footer text]]`",
69
+ " Presents clickable options to the user. Options required (comma-separated); header and footer both optional.",
70
+ " Advanced item types: `view(url, label)` = URL link, `mini(appid, pagepath, label)` = mini program,",
71
+ " `text(content)` = plain text row, `click(id, label)` = click with explicit ID.",
72
+ "",
73
+ "**Business Card**: `[[wechat_business_card: USERID]]`",
74
+ " Sends a WeCom member's contact card. Requires \u300c\u5ba2\u6237\u8054\u7cfb\u300d permission. Customer must have actively messaged within 48h (menu clicks don't count). Max 1 card per 48h window.",
75
+ "",
76
+ "**Acquisition Link (\u83b7\u5ba2\u94fe\u63a5)**: `[[wechat_ca_link: https://work.weixin.qq.com/ca/...]]`",
77
+ " Sends a \u83b7\u5ba2\u94fe\u63a5 as a rich card. The URL must be a valid acquisition link.",
78
+ "",
79
+ '**Raw Message (experimental)**: `[[wechat_raw: {"msgtype":"xxx", "xxx": {...}}]]`',
80
+ " Sends an arbitrary message via the WeChat KF API. The JSON must include a `msgtype` field plus the type-specific payload.",
81
+ " Use this to echo back or test undocumented message types. Check the raw JSON shown for unknown inbound types.",
82
+ ],
83
+ },
84
+ reload: { configPrefixes: [CONFIG_KEY] },
85
+ configSchema: { schema: wechatKfConfigSchema },
86
+ config: {
87
+ listAccountIds: (cfg) => listAccountIds(cfg),
88
+ resolveAccount: (cfg, accountId) => resolveAccount(cfg, accountId ?? undefined),
89
+ defaultAccountId: (cfg) => listAccountIds(cfg)[0] ?? "default",
90
+ setAccountEnabled: ({ cfg, accountId, enabled }) => {
91
+ if (enabled) {
92
+ void enableKfId(accountId);
93
+ }
94
+ else {
95
+ void disableKfId(accountId);
96
+ }
97
+ return cfg;
98
+ },
99
+ deleteAccount: ({ cfg, accountId }) => {
100
+ void deleteKfId(accountId);
101
+ return cfg;
102
+ },
103
+ isConfigured: (account, _cfg) => account.configured,
104
+ describeAccount: (account, _cfg) => ({
105
+ accountId: account.accountId,
106
+ enabled: account.enabled,
107
+ configured: account.configured,
108
+ }),
109
+ resolveAllowFrom: ({ cfg }) => {
110
+ const config = getChannelConfig(cfg);
111
+ return (config.allowFrom ?? []).map(String);
112
+ },
113
+ formatAllowFrom: ({ allowFrom, }) => allowFrom.map((e) => String(e).trim()).filter(Boolean),
114
+ },
115
+ security: {
116
+ resolveDmPolicy: ({ cfg, }) => {
117
+ const config = getChannelConfig(cfg);
118
+ const policy = config.dmPolicy ?? "open";
119
+ return {
120
+ policy,
121
+ allowFrom: config.allowFrom ?? [],
122
+ allowFromPath: `${CONFIG_KEY}.allowFrom`,
123
+ approveHint: formatPairingApproveHint(CHANNEL_ID),
124
+ normalizeEntry: (raw) => raw.replace(/^user:/i, "").trim(),
125
+ };
126
+ },
127
+ collectWarnings: ({ cfg, }) => {
128
+ const config = getChannelConfig(cfg);
129
+ const policy = config.dmPolicy ?? "open";
130
+ if (policy === "open") {
131
+ return ['- WeChat KF: dmPolicy="open" — any WeChat user can chat with the agent.'];
132
+ }
133
+ return [];
134
+ },
135
+ },
136
+ pairing: {
137
+ idLabel: "wechatKfExternalUserId",
138
+ normalizeAllowEntry: (entry) => entry.replace(/^(wechat-kf|user):/i, "").trim(),
139
+ notifyApproval: async ({ id }) => {
140
+ const shared = getSharedContext();
141
+ if (!shared)
142
+ return;
143
+ const { corpId, appSecret } = shared;
144
+ if (!corpId || !appSecret)
145
+ return;
146
+ const kfId = getPairingKfId(id) ?? listAccountIds(shared.botCtx.cfg).find((a) => a !== "default");
147
+ if (!kfId)
148
+ return;
149
+ await sendTextMessage(corpId, appSecret, id, kfId, PAIRING_APPROVED_MESSAGE);
150
+ },
151
+ },
152
+ setup: {
153
+ resolveAccountId: ({ accountId }) => accountId ?? "default",
154
+ applyAccountConfig: ({ cfg, accountId: _accountId, input: _input, }) => {
155
+ const config = getChannelConfig(cfg);
156
+ return {
157
+ ...cfg,
158
+ channels: { ...(cfg.channels ?? {}), [CHANNEL_ID]: { ...config, enabled: true } },
159
+ };
160
+ },
161
+ },
162
+ outbound: wechatKfOutbound,
163
+ status: {
164
+ defaultRuntime: {
165
+ accountId: "default",
166
+ running: false,
167
+ lastStartAt: null,
168
+ lastStopAt: null,
169
+ lastError: null,
170
+ },
171
+ buildChannelSummary: ({ snapshot, }) => ({
172
+ configured: snapshot.configured ?? false,
173
+ running: snapshot.running ?? false,
174
+ lastStartAt: snapshot.lastStartAt ?? null,
175
+ lastError: snapshot.lastError ?? null,
176
+ }),
177
+ buildAccountSnapshot: ({ account, runtime, }) => ({
178
+ accountId: account.accountId,
179
+ enabled: account.enabled,
180
+ configured: account.configured,
181
+ running: runtime?.running ?? false,
182
+ lastStartAt: runtime?.lastStartAt ?? null,
183
+ lastError: runtime?.lastError ?? null,
184
+ }),
185
+ },
186
+ gateway: {
187
+ startAccount: async (ctx) => {
188
+ const config = getChannelConfig(ctx.cfg);
189
+ const pluginRuntime = getRuntime();
190
+ const stateDir = pluginRuntime.state?.resolveStateDir?.() ?? defaultStateDir();
191
+ if (ctx.accountId === "default") {
192
+ // ── "default" account: enterprise-level shared infrastructure ──
193
+ try {
194
+ const { corpId, appSecret, token, encodingAESKey } = config;
195
+ const webhookPath = config.webhookPath ?? DEFAULT_WEBHOOK_PATH;
196
+ if (!corpId || !appSecret || !token || !encodingAESKey) {
197
+ throw new Error(`${logTag()} missing required config fields (corpId, appSecret, token, encodingAESKey)`);
198
+ }
199
+ // Load previously discovered kfids
200
+ await loadKfIds(stateDir);
201
+ // Validate access token on startup (best-effort)
202
+ try {
203
+ await getAccessToken(corpId, appSecret);
204
+ ctx.log?.info(`${logTag()} access_token validated`);
205
+ }
206
+ catch (err) {
207
+ ctx.log?.warn(`${logTag()} access_token validation failed (will retry on first message): ${err}`);
208
+ }
209
+ const botCtx = { cfg: ctx.cfg, runtime: ctx.runtime, stateDir, log: ctx.log };
210
+ setSharedContext({
211
+ callbackToken: token,
212
+ encodingAESKey,
213
+ corpId,
214
+ appSecret,
215
+ webhookPath,
216
+ botCtx,
217
+ });
218
+ ctx.setStatus({ accountId: ctx.accountId, running: true, lastStartAt: Date.now() });
219
+ ctx.log?.info(`${logTag()} shared context ready (webhook path: ${webhookPath})`);
220
+ // Block until abort — framework expects long-lived promise
221
+ await new Promise((resolve) => {
222
+ if (ctx.abortSignal.aborted) {
223
+ resolve();
224
+ return;
225
+ }
226
+ ctx.abortSignal.addEventListener("abort", () => resolve(), { once: true });
227
+ });
228
+ // Shutdown
229
+ clearSharedContext();
230
+ ctx.setStatus({
231
+ accountId: ctx.accountId,
232
+ running: false,
233
+ lastStopAt: Date.now(),
234
+ });
235
+ ctx.log?.info(`${logTag()} shared context cleared, default account stopped`);
236
+ }
237
+ catch (err) {
238
+ clearSharedContext();
239
+ ctx.setStatus({
240
+ accountId: ctx.accountId,
241
+ running: false,
242
+ lastError: formatError(err),
243
+ lastStopAt: Date.now(),
244
+ });
245
+ ctx.log?.error(`${logTag()} default account failed: ${formatError(err)}`);
246
+ throw err;
247
+ }
248
+ }
249
+ else {
250
+ // ── Per-kfId account: polling loop ──
251
+ let pollTimer = null;
252
+ try {
253
+ // Wait for the "default" account to set shared context
254
+ const shared = await waitForSharedContext(ctx.abortSignal);
255
+ ctx.setStatus({ accountId: ctx.accountId, running: true, lastStartAt: Date.now() });
256
+ ctx.log?.info(`${logTag(ctx.accountId)} polling started`);
257
+ // Start 30s polling loop
258
+ const POLL_INTERVAL_MS = 30_000;
259
+ let polling = false;
260
+ pollTimer = setInterval(async () => {
261
+ if (ctx.abortSignal.aborted)
262
+ return;
263
+ if (polling)
264
+ return;
265
+ polling = true;
266
+ try {
267
+ ctx.log?.debug?.(`${logTag(ctx.accountId)} polling sync_msg...`);
268
+ await handleWebhookEvent(shared.botCtx, ctx.accountId, "");
269
+ }
270
+ catch (err) {
271
+ ctx.log?.error(`${logTag(ctx.accountId)} poll error: ${formatError(err)}`);
272
+ }
273
+ finally {
274
+ polling = false;
275
+ }
276
+ }, POLL_INTERVAL_MS);
277
+ // Block until abort
278
+ await new Promise((resolve) => {
279
+ if (ctx.abortSignal.aborted) {
280
+ resolve();
281
+ return;
282
+ }
283
+ ctx.abortSignal.addEventListener("abort", () => resolve(), { once: true });
284
+ });
285
+ // Cleanup
286
+ if (pollTimer) {
287
+ clearInterval(pollTimer);
288
+ pollTimer = null;
289
+ }
290
+ ctx.setStatus({
291
+ accountId: ctx.accountId,
292
+ running: false,
293
+ lastStopAt: Date.now(),
294
+ });
295
+ ctx.log?.info(`${logTag(ctx.accountId)} polling stopped`);
296
+ }
297
+ catch (err) {
298
+ if (pollTimer) {
299
+ clearInterval(pollTimer);
300
+ pollTimer = null;
301
+ }
302
+ ctx.setStatus({
303
+ accountId: ctx.accountId,
304
+ running: false,
305
+ lastError: formatError(err),
306
+ lastStopAt: Date.now(),
307
+ });
308
+ // AbortError is expected when the signal fires before shared context is ready
309
+ if (err instanceof DOMException && err.name === "AbortError") {
310
+ ctx.log?.info(`${logTag(ctx.accountId)} aborted before shared context ready`);
311
+ return;
312
+ }
313
+ ctx.log?.error(`${logTag(ctx.accountId)} startAccount failed: ${formatError(err)}`);
314
+ throw err;
315
+ }
316
+ }
317
+ },
318
+ },
319
+ };
320
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * JSON Schema for wechat-kf channel config
3
+ *
4
+ * Authoritative source: openclaw.plugin.json → configSchema.
5
+ * This runtime copy must stay in sync with the manifest.
6
+ *
7
+ * Flat enterprise-level credentials. No per-account config needed —
8
+ * kfids are discovered dynamically from webhook callbacks.
9
+ */
10
+ export declare const wechatKfConfigSchema: {
11
+ type: "object";
12
+ properties: {
13
+ enabled: {
14
+ type: "boolean";
15
+ };
16
+ corpId: {
17
+ type: "string";
18
+ description: string;
19
+ };
20
+ appSecret: {
21
+ type: "string";
22
+ description: string;
23
+ };
24
+ token: {
25
+ type: "string";
26
+ description: string;
27
+ };
28
+ encodingAESKey: {
29
+ type: "string";
30
+ description: string;
31
+ minLength: number;
32
+ maxLength: number;
33
+ };
34
+ webhookPath: {
35
+ type: "string";
36
+ default: string;
37
+ };
38
+ dmPolicy: {
39
+ type: "string";
40
+ enum: readonly ["open", "pairing", "allowlist", "disabled"];
41
+ default: string;
42
+ };
43
+ allowFrom: {
44
+ type: "array";
45
+ items: {
46
+ type: "string";
47
+ };
48
+ };
49
+ debounceMs: {
50
+ type: "number";
51
+ description: string;
52
+ minimum: number;
53
+ maximum: number;
54
+ };
55
+ };
56
+ };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * JSON Schema for wechat-kf channel config
3
+ *
4
+ * Authoritative source: openclaw.plugin.json → configSchema.
5
+ * This runtime copy must stay in sync with the manifest.
6
+ *
7
+ * Flat enterprise-level credentials. No per-account config needed —
8
+ * kfids are discovered dynamically from webhook callbacks.
9
+ */
10
+ import { DEFAULT_WEBHOOK_PATH } from "./constants.js";
11
+ export const wechatKfConfigSchema = {
12
+ type: "object",
13
+ properties: {
14
+ enabled: { type: "boolean" },
15
+ corpId: { type: "string", description: "WeCom Corp ID (企业ID)" },
16
+ appSecret: { type: "string", description: "Self-built app secret (应用密钥)" },
17
+ token: { type: "string", description: "Webhook callback token" },
18
+ encodingAESKey: {
19
+ type: "string",
20
+ description: "43-character base64 AES key",
21
+ minLength: 43,
22
+ maxLength: 43,
23
+ },
24
+ webhookPath: { type: "string", default: DEFAULT_WEBHOOK_PATH },
25
+ dmPolicy: {
26
+ type: "string",
27
+ enum: ["open", "pairing", "allowlist", "disabled"],
28
+ default: "open",
29
+ },
30
+ allowFrom: { type: "array", items: { type: "string" } },
31
+ debounceMs: {
32
+ type: "number",
33
+ description: "Inbound message debounce window in milliseconds (0 = disabled)",
34
+ minimum: 0,
35
+ maximum: 10000,
36
+ },
37
+ },
38
+ };
39
+ //# sourceMappingURL=config-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../src/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,QAAiB;IACvB,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE;QACrC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACxE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,8BAA8B,EAAE;QACnF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,WAAW,EAAE,wBAAwB,EAAE;QACzE,cAAc,EAAE;YACd,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,6BAA6B;YAC1C,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;SACd;QACD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,OAAO,EAAE,oBAAoB,EAAE;QACvE,QAAQ,EAAE;YACR,IAAI,EAAE,QAAiB;YACvB,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAU;YAC3D,OAAO,EAAE,MAAM;SAChB;QACD,SAAS,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,EAAE;QACzE,UAAU,EAAE;YACV,IAAI,EAAE,QAAiB;YACvB,WAAW,EAAE,gEAAgE;YAC7E,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,KAAK;SACf;KACF;CACF,CAAC"}
@@ -0,0 +1,41 @@
1
+ /** Channel identifier — single source of truth for the plugin ID string. */
2
+ export declare const CHANNEL_ID: "wechat-kf";
3
+ /** Default webhook path registered on the framework's shared gateway. */
4
+ export declare const DEFAULT_WEBHOOK_PATH: string;
5
+ /** Config key prefix for this channel in OpenClaw config. */
6
+ export declare const CONFIG_KEY: string;
7
+ /** Build a log-tag prefix: `[wechat-kf]` or `[wechat-kf:kfId]`. */
8
+ export declare function logTag(kfId?: string): string;
9
+ /** Default state directory for cursor and kfid persistence. */
10
+ export declare function defaultStateDir(): string;
11
+ /** Cursor file name for a given kfId. */
12
+ export declare function cursorFileName(kfId: string): string;
13
+ /** Persisted file name for discovered kfids. */
14
+ export declare const KFIDS_FILE: string;
15
+ /** Persisted file name for disabled kfids. */
16
+ export declare const DISABLED_KFIDS_FILE: string;
17
+ /** WeChat KF text message byte limit (API enforces 2048 UTF-8 bytes) */
18
+ export declare const WECHAT_TEXT_CHUNK_LIMIT = 2048;
19
+ /** Safety margin subtracted from WECHAT_TEXT_CHUNK_LIMIT for chunking */
20
+ export declare const WECHAT_TEXT_CHUNK_BYTE_SAFETY_MARGIN = 48;
21
+ /** Timeout for token fetch requests (ms) */
22
+ export declare const TOKEN_FETCH_TIMEOUT_MS = 15000;
23
+ /** Timeout for API POST requests (ms) */
24
+ export declare const API_POST_TIMEOUT_MS = 30000;
25
+ /** Timeout for media download/upload requests (ms) */
26
+ export declare const MEDIA_TIMEOUT_MS = 60000;
27
+ /** WeChat errcode values that indicate an expired or invalid access token */
28
+ export declare const TOKEN_EXPIRED_CODES: Set<number>;
29
+ /**
30
+ * WeChat KF errcode indicating the 48-hour / 5-message session limit has
31
+ * been exceeded. When a customer service session is inactive for 48 hours,
32
+ * or the agent has already sent 5 messages without a customer reply, the
33
+ * API returns this error.
34
+ */
35
+ export declare const WECHAT_MSG_LIMIT_ERRCODE = 95026;
36
+ /** Timeout for downloading media from external HTTP URLs (ms) */
37
+ export declare const MEDIA_DOWNLOAD_TIMEOUT_MS = 60000;
38
+ /** Max age (seconds) for inbound messages. Messages older than this are skipped. */
39
+ export declare const MAX_MESSAGE_AGE_S = 300;
40
+ /** Format an unknown caught value for log messages (no stack traces). */
41
+ export declare function formatError(err: unknown): string;
@@ -0,0 +1,51 @@
1
+ import { homedir } from "node:os";
2
+ /** Channel identifier — single source of truth for the plugin ID string. */
3
+ export const CHANNEL_ID = "wechat-kf";
4
+ /** Default webhook path registered on the framework's shared gateway. */
5
+ export const DEFAULT_WEBHOOK_PATH = `/${CHANNEL_ID}`;
6
+ /** Config key prefix for this channel in OpenClaw config. */
7
+ export const CONFIG_KEY = `channels.${CHANNEL_ID}`;
8
+ /** Build a log-tag prefix: `[wechat-kf]` or `[wechat-kf:kfId]`. */
9
+ export function logTag(kfId) {
10
+ return kfId ? `[${CHANNEL_ID}:${kfId}]` : `[${CHANNEL_ID}]`;
11
+ }
12
+ /** Default state directory for cursor and kfid persistence. */
13
+ export function defaultStateDir() {
14
+ return `${homedir()}/.openclaw/state/${CHANNEL_ID}`;
15
+ }
16
+ /** Cursor file name for a given kfId. */
17
+ export function cursorFileName(kfId) {
18
+ return `${CHANNEL_ID}-cursor-${kfId}.txt`;
19
+ }
20
+ /** Persisted file name for discovered kfids. */
21
+ export const KFIDS_FILE = `${CHANNEL_ID}-kfids.json`;
22
+ /** Persisted file name for disabled kfids. */
23
+ export const DISABLED_KFIDS_FILE = `${CHANNEL_ID}-disabled-kfids.json`;
24
+ /** WeChat KF text message byte limit (API enforces 2048 UTF-8 bytes) */
25
+ export const WECHAT_TEXT_CHUNK_LIMIT = 2048;
26
+ /** Safety margin subtracted from WECHAT_TEXT_CHUNK_LIMIT for chunking */
27
+ export const WECHAT_TEXT_CHUNK_BYTE_SAFETY_MARGIN = 48;
28
+ /** Timeout for token fetch requests (ms) */
29
+ export const TOKEN_FETCH_TIMEOUT_MS = 15_000;
30
+ /** Timeout for API POST requests (ms) */
31
+ export const API_POST_TIMEOUT_MS = 30_000;
32
+ /** Timeout for media download/upload requests (ms) */
33
+ export const MEDIA_TIMEOUT_MS = 60_000;
34
+ /** WeChat errcode values that indicate an expired or invalid access token */
35
+ export const TOKEN_EXPIRED_CODES = new Set([40014, 42001, 40001]);
36
+ /**
37
+ * WeChat KF errcode indicating the 48-hour / 5-message session limit has
38
+ * been exceeded. When a customer service session is inactive for 48 hours,
39
+ * or the agent has already sent 5 messages without a customer reply, the
40
+ * API returns this error.
41
+ */
42
+ export const WECHAT_MSG_LIMIT_ERRCODE = 95026;
43
+ /** Timeout for downloading media from external HTTP URLs (ms) */
44
+ export const MEDIA_DOWNLOAD_TIMEOUT_MS = 60_000;
45
+ /** Max age (seconds) for inbound messages. Messages older than this are skipped. */
46
+ export const MAX_MESSAGE_AGE_S = 300; // 5 minutes
47
+ /** Format an unknown caught value for log messages (no stack traces). */
48
+ export function formatError(err) {
49
+ return err instanceof Error ? err.message : String(err);
50
+ }
51
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG,WAAoB,CAAC;AAE/C,yEAAyE;AACzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,UAAU,EAAE,CAAC;AAErD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,UAAU,EAAE,CAAC;AAEnD,mEAAmE;AACnE,MAAM,UAAU,MAAM,CAAC,IAAa;IAClC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC;AAC9D,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,eAAe;IAC7B,OAAO,GAAG,OAAO,EAAE,oBAAoB,UAAU,EAAE,CAAC;AACtD,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,GAAG,UAAU,WAAW,IAAI,MAAM,CAAC;AAC5C,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,UAAU,aAAa,CAAC;AAErD,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,UAAU,sBAAsB,CAAC;AAEvE,wEAAwE;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,yEAAyE;AACzE,MAAM,CAAC,MAAM,oCAAoC,GAAG,EAAE,CAAC;AAEvD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAE7C,yCAAyC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAE1C,sDAAsD;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,iEAAiE;AACjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC,CAAC,YAAY;AAElD,yEAAyE;AACzE,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * WeCom message encryption/decryption
3
+ *
4
+ * - Signature: SHA1(sort([token, timestamp, nonce, encrypt]))
5
+ * - Encryption: AES-256-CBC, key = Base64Decode(EncodingAESKey + "="), iv = key[0:16]
6
+ * - Plaintext format: random(16B) + msg_len(4B network order) + msg + receiveid
7
+ */
8
+ export declare function deriveAesKey(encodingAESKey: string): Buffer;
9
+ /** SHA1 signature verification */
10
+ export declare function computeSignature(token: string, timestamp: string, nonce: string, encrypt: string): string;
11
+ export declare function verifySignature(token: string, timestamp: string, nonce: string, encrypt: string, expectedSignature: string): boolean;
12
+ /** Decrypt an encrypted message from WeChat callback */
13
+ export declare function decrypt(encodingAESKey: string, encrypted: string): {
14
+ message: string;
15
+ receiverId: string;
16
+ };
17
+ /** Encrypt a message for WeChat callback response */
18
+ export declare function encrypt(encodingAESKey: string, message: string, receiverId: string): string;