🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@openclaw-china/channels

Package Overview
Dependencies
Maintainers
2
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@openclaw-china/channels - npm Package Compare versions

Comparing version
2026.3.18
to
2026.3.19
+10
-2
dist/index.d.ts

@@ -7,2 +7,3 @@ export { DEFAULT_ACCOUNT_ID as DINGTALK_DEFAULT_ACCOUNT_ID, DingtalkConfig, DingtalkSendResult, ResolvedDingtalkAccount, dingtalkPlugin, getDingtalkRuntime, sendMessageDingtalk, setDingtalkRuntime } from '@openclaw-china/dingtalk';

export { DEFAULT_ACCOUNT_ID as QQBOT_DEFAULT_ACCOUNT_ID, QQBotConfig, QQBotSendResult, ResolvedQQBotAccount, getQQBotRuntime, qqbotPlugin, setQQBotRuntime } from '@openclaw-china/qqbot';
export { ResolvedWechatMpAccount, DEFAULT_ACCOUNT_ID as WECHAT_MP_DEFAULT_ACCOUNT_ID, WechatMpAccountConfig, WechatMpConfig, WechatMpDmPolicy, WechatMpMessageMode, WechatMpReplyMode, getWechatMpRuntime, sendWechatMpActiveText, setWechatMpRuntime, wechatMpPlugin } from '@openclaw-china/wechat-mp';

@@ -44,2 +45,8 @@ /**

}
interface WechatMpRouteConfig extends ChannelConfig {
webhookPath?: string;
accounts?: Record<string, {
webhookPath?: string;
}>;
}
/**

@@ -56,2 +63,3 @@ * Moltbot 配置接口(符合官方约定)

"wecom-kf"?: WecomKfRouteConfig;
"wechat-mp"?: WechatMpRouteConfig;
qqbot?: ChannelConfig;

@@ -92,3 +100,3 @@ qq?: ChannelConfig;

*/
declare const SUPPORTED_CHANNELS: readonly ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "qqbot"];
declare const SUPPORTED_CHANNELS: readonly ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "wechat-mp", "qqbot"];
type SupportedChannel = (typeof SUPPORTED_CHANNELS)[number];

@@ -141,2 +149,2 @@ /**

export { type ChannelConfig, type MoltbotConfig, type MoltbotPluginApi, SUPPORTED_CHANNELS, type SupportedChannel, type WecomAppRouteConfig, type WecomKfRouteConfig, type WecomRouteConfig, channelsPlugin as default, registerChannelsByConfig };
export { type ChannelConfig, type MoltbotConfig, type MoltbotPluginApi, SUPPORTED_CHANNELS, type SupportedChannel, type WechatMpRouteConfig, type WecomAppRouteConfig, type WecomKfRouteConfig, type WecomRouteConfig, channelsPlugin as default, registerChannelsByConfig };

@@ -13,6 +13,8 @@ import dingtalkEntry from '@openclaw-china/dingtalk';

export { DEFAULT_ACCOUNT_ID as QQBOT_DEFAULT_ACCOUNT_ID, getQQBotRuntime, qqbotPlugin, setQQBotRuntime } from '@openclaw-china/qqbot';
import wechatMpEntry from '@openclaw-china/wechat-mp';
export { DEFAULT_ACCOUNT_ID as WECHAT_MP_DEFAULT_ACCOUNT_ID, getWechatMpRuntime, sendWechatMpActiveText, setWechatMpRuntime, wechatMpPlugin } from '@openclaw-china/wechat-mp';
import { registerChinaSetupCli, showChinaInstallHint } from '@openclaw-china/shared';
// src/index.ts
var SUPPORTED_CHANNELS = ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "qqbot"];
var SUPPORTED_CHANNELS = ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "wechat-mp", "qqbot"];
var channelPlugins = {

@@ -44,2 +46,7 @@ dingtalk: {

},
"wechat-mp": {
register: (api) => {
wechatMpEntry.register(api);
}
},
qqbot: {

@@ -69,3 +76,3 @@ register: (api) => {

name: "Moltbot China Channels",
description: "\u7EDF\u4E00\u6E20\u9053\u5305\uFF0C\u652F\u6301\u9489\u9489\u3001\u98DE\u4E66\u3001\u4F01\u4E1A\u5FAE\u4FE1\u3001QQ Bot",
description: "\u7EDF\u4E00\u6E20\u9053\u5305\uFF0C\u652F\u6301\u9489\u9489\u3001\u98DE\u4E66\u3001\u4F01\u4E1A\u5FAE\u4FE1\u3001\u5FAE\u4FE1\u516C\u4F17\u53F7\u3001QQ Bot",
configSchema: {

@@ -72,0 +79,0 @@ type: "object",

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAwNO,IAAM,qBAAqB,CAAC,UAAA,EAAY,gBAAgB,OAAA,EAAS,WAAA,EAAa,YAAY,OAAO;AAKxG,IAAM,cAAA,GAA0F;AAAA,EAC9F,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,WAAA,CAAY,SAAS,GAAG,CAAA;AAAA,IAC1B;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,YAAA,CAAa,SAAS,GAAG,CAAA;AAAA,IAC3B;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,IACzB;AAAA;AAEJ,CAAA;AAwBO,SAAS,wBAAA,CACd,KACA,GAAA,EACM;AAEN,EAAA,MAAM,MAAA,GAAS,OAAO,GAAA,CAAI,MAAA;AAC1B,EAAA,MAAM,iBAAiB,MAAA,EAAQ,QAAA;AAE/B,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,aAAa,kBAAA,EAAoB;AAE1C,IAAA,MAAM,aAAA,GAAgB,eAAe,SAAS,CAAA;AAG9C,IAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,eAAe,SAAS,CAAA;AACvC,IAAA,MAAA,CAAO,SAAS,GAAG,CAAA;AAAA,EACrB;AACF;AAQA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAA,EAAI,UAAA;AAAA,EACJ,IAAA,EAAM,wBAAA;AAAA,EACN,WAAA,EAAa,0HAAA;AAAA,EAEb,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,QAAA;AAAA,IACN,oBAAA,EAAsB,KAAA;AAAA,IACtB,YAAY;AAAC,GACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,GAAA,EAAuB;AAC9B,IAAA,qBAAA,CAAsB,GAAA,EAAK,EAAE,QAAA,EAAU,kBAAA,EAAoB,CAAA;AAC3D,IAAA,oBAAA,CAAqB,GAAG,CAAA;AACxB,IAAA,wBAAA,CAAyB,GAAG,CAAA;AAAA,EAC9B;AACF,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"index.js","sourcesContent":["/**\r\n * @openclaw-china/channels\r\n * 统一渠道包入口\r\n *\r\n * 导出所有渠道插件,提供统一注册函数\r\n *\r\n * Requirements: Unified Package Entry, Unified Distribution\r\n */\r\n\r\n// 导出 DingTalk 插件\r\nimport {\r\n dingtalkPlugin,\r\n DEFAULT_ACCOUNT_ID as DINGTALK_DEFAULT_ACCOUNT_ID,\r\n sendMessageDingtalk,\r\n setDingtalkRuntime,\r\n getDingtalkRuntime,\r\n} from \"@openclaw-china/dingtalk\";\r\nimport dingtalkEntry from \"@openclaw-china/dingtalk\";\r\nimport {\r\n feishuPlugin,\r\n DEFAULT_ACCOUNT_ID as FEISHU_DEFAULT_ACCOUNT_ID,\r\n sendMessageFeishu,\r\n setFeishuRuntime,\r\n getFeishuRuntime,\r\n} from \"@openclaw-china/feishu-china\";\r\nimport feishuEntry from \"@openclaw-china/feishu-china\";\r\nimport {\r\n wecomPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_DEFAULT_ACCOUNT_ID,\r\n setWecomRuntime,\r\n getWecomRuntime,\r\n} from \"@openclaw-china/wecom\";\r\nimport wecomEntry from \"@openclaw-china/wecom\";\r\nimport {\r\n wecomAppPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_APP_DEFAULT_ACCOUNT_ID,\r\n setWecomAppRuntime,\r\n getWecomAppRuntime,\r\n sendWecomAppMessage,\r\n getAccessToken,\r\n sendWecomAppMarkdownMessage,\r\n stripMarkdown,\r\n clearAccessTokenCache,\r\n clearAllAccessTokenCache,\r\n downloadAndSendImage,\r\n sendWecomAppImageMessage,\r\n} from \"@openclaw-china/wecom-app\";\r\nimport wecomAppEntry from \"@openclaw-china/wecom-app\";\r\nimport {\r\n wecomKfPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_KF_DEFAULT_ACCOUNT_ID,\r\n setWecomKfRuntime,\r\n getWecomKfRuntime,\r\n} from \"@openclaw-china/wecom-kf\";\r\nimport wecomKfEntry from \"@openclaw-china/wecom-kf\";\r\nimport {\r\n qqbotPlugin,\r\n DEFAULT_ACCOUNT_ID as QQBOT_DEFAULT_ACCOUNT_ID,\r\n setQQBotRuntime,\r\n getQQBotRuntime,\r\n} from \"@openclaw-china/qqbot\";\r\nimport qqbotEntry from \"@openclaw-china/qqbot\";\r\nimport { registerChinaSetupCli, showChinaInstallHint } from \"@openclaw-china/shared\";\r\n\r\nexport {\r\n dingtalkPlugin,\r\n DINGTALK_DEFAULT_ACCOUNT_ID,\r\n sendMessageDingtalk,\r\n setDingtalkRuntime,\r\n getDingtalkRuntime,\r\n feishuPlugin,\r\n FEISHU_DEFAULT_ACCOUNT_ID,\r\n sendMessageFeishu,\r\n setFeishuRuntime,\r\n getFeishuRuntime,\r\n wecomPlugin,\r\n WECOM_DEFAULT_ACCOUNT_ID,\r\n setWecomRuntime,\r\n getWecomRuntime,\r\n wecomAppPlugin,\r\n WECOM_APP_DEFAULT_ACCOUNT_ID,\r\n setWecomAppRuntime,\r\n getWecomAppRuntime,\r\n sendWecomAppMessage,\r\n getAccessToken,\r\n sendWecomAppMarkdownMessage,\r\n stripMarkdown,\r\n clearAccessTokenCache,\r\n clearAllAccessTokenCache,\r\n downloadAndSendImage,\r\n sendWecomAppImageMessage,\r\n wecomKfPlugin,\r\n WECOM_KF_DEFAULT_ACCOUNT_ID,\r\n setWecomKfRuntime,\r\n getWecomKfRuntime,\r\n qqbotPlugin,\r\n QQBOT_DEFAULT_ACCOUNT_ID,\r\n setQQBotRuntime,\r\n getQQBotRuntime,\r\n};\r\n\r\nexport type {\r\n DingtalkConfig,\r\n ResolvedDingtalkAccount,\r\n DingtalkSendResult,\r\n} from \"@openclaw-china/dingtalk\";\r\nexport type {\r\n FeishuConfig,\r\n ResolvedFeishuAccount,\r\n FeishuSendResult,\r\n} from \"@openclaw-china/feishu-china\";\r\nexport type { WecomConfig, ResolvedWecomAccount, WecomInboundMessage } from \"@openclaw-china/wecom\";\r\nexport type {\r\n WecomAppConfig,\r\n ResolvedWecomAppAccount,\r\n WecomAppInboundMessage,\r\n WecomAppDmPolicy,\r\n WecomAppSendTarget,\r\n AccessTokenCacheEntry,\r\n} from \"@openclaw-china/wecom-app\";\r\nexport type {\r\n WecomKfConfig,\r\n WecomKfAccountConfig,\r\n ResolvedWecomKfAccount,\r\n WecomKfDmPolicy,\r\n SyncMsgItem as WecomKfSyncMsgItem,\r\n SyncMsgResponse as WecomKfSyncMsgResponse,\r\n} from \"@openclaw-china/wecom-kf\";\r\nexport type { QQBotConfig, ResolvedQQBotAccount, QQBotSendResult } from \"@openclaw-china/qqbot\";\r\n\r\n// TODO: 后续添加其他渠道\r\n// export { qqPlugin } from \"@openclaw-china/qq\";\r\n\r\n/**\r\n * 渠道配置接口\r\n */\r\nexport interface ChannelConfig {\r\n /** 是否启用该渠道 */\r\n enabled?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface WecomRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\nexport interface WecomAppRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\nexport interface WecomKfRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\n/**\r\n * Moltbot 配置接口(符合官方约定)\r\n * 配置路径: channels.<id>.enabled\r\n */\r\nexport interface MoltbotConfig {\r\n channels?: {\r\n dingtalk?: ChannelConfig;\r\n \"feishu-china\"?: ChannelConfig;\r\n wecom?: WecomRouteConfig;\r\n \"wecom-app\"?: WecomAppRouteConfig;\r\n \"wecom-kf\"?: WecomKfRouteConfig;\r\n qqbot?: ChannelConfig;\r\n qq?: ChannelConfig;\r\n [key: string]: ChannelConfig | undefined;\r\n };\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Moltbot 插件 API 接口\r\n */\r\nexport interface MoltbotPluginApi {\r\n registerChannel: (opts: { plugin: unknown }) => void;\r\n registerCli?: (\r\n registrar: (ctx: { program: unknown; config?: MoltbotConfig }) => void | Promise<void>,\r\n opts?: { commands?: string[] }\r\n ) => void;\r\n logger?: {\r\n info?: (message: string) => void;\r\n warn?: (message: string) => void;\r\n error?: (message: string) => void;\r\n };\r\n runtime?: {\r\n config?: {\r\n writeConfigFile?: (cfg: unknown) => Promise<void>;\r\n };\r\n };\r\n config?: MoltbotConfig;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * 支持的渠道列表\r\n */\r\nexport const SUPPORTED_CHANNELS = [\"dingtalk\", \"feishu-china\", \"wecom\", \"wecom-app\", \"wecom-kf\", \"qqbot\"] as const;\r\n// TODO: 鍚庣画娣诲姞 \"qq\"\r\n\r\nexport type SupportedChannel = (typeof SUPPORTED_CHANNELS)[number];\r\n\r\nconst channelPlugins: Record<SupportedChannel, { register: (api: MoltbotPluginApi) => void }> = {\r\n dingtalk: {\r\n register: (api: MoltbotPluginApi) => {\r\n dingtalkEntry.register(api);\r\n },\r\n },\r\n \"feishu-china\": {\r\n register: (api: MoltbotPluginApi) => {\r\n feishuEntry.register(api);\r\n },\r\n },\r\n wecom: {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomEntry.register(api);\r\n },\r\n },\r\n \"wecom-app\": {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomAppEntry.register(api);\r\n },\r\n },\r\n \"wecom-kf\": {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomKfEntry.register(api);\r\n },\r\n },\r\n qqbot: {\r\n register: (api: MoltbotPluginApi) => {\r\n qqbotEntry.register(api);\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * 根据 Moltbot 配置注册启用的渠道\r\n *\r\n * 符合 Moltbot 官方约定:从 cfg.channels.<id>.enabled 读取配置\r\n *\r\n * @param api Moltbot 鎻掍欢 API\r\n * @param cfg Moltbot 配置(可选,默认从 api.config 读取)\r\n *\r\n * @example\r\n * ```ts\r\n * // moltbot.json 配置\r\n * {\r\n * \"channels\": {\r\n * \"dingtalk\": {\r\n * \"enabled\": true,\r\n * \"clientId\": \"...\",\r\n * \"clientSecret\": \"...\"\r\n * }\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function registerChannelsByConfig(\r\n api: MoltbotPluginApi,\r\n cfg?: MoltbotConfig\r\n): void {\r\n // 从 api.config 或传入的 cfg 获取配置\r\n const config = cfg ?? api.config;\r\n const channelsConfig = config?.channels;\r\n\r\n if (!channelsConfig) {\r\n return;\r\n }\r\n\r\n for (const channelId of SUPPORTED_CHANNELS) {\r\n // 符合官方约定:从 channels.<id>.enabled 读取\r\n const channelConfig = channelsConfig[channelId];\r\n\r\n // 跳过未启用的渠道\r\n if (!channelConfig?.enabled) {\r\n continue;\r\n }\r\n\r\n const plugin = channelPlugins[channelId];\r\n plugin.register(api);\r\n }\r\n}\r\n\r\n/**\r\n * 统一渠道插件定义\r\n *\r\n * 包含所有支持的渠道,通过配置启用\r\n * 配置路径符合 Moltbot 官方约定: channels.<id>\r\n */\r\nconst channelsPlugin = {\r\n id: \"channels\",\r\n name: \"Moltbot China Channels\",\r\n description: \"统一渠道包,支持钉钉、飞书、企业微信、QQ Bot\",\r\n\r\n configSchema: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {},\r\n },\r\n\r\n /**\r\n * 注册所有启用的渠道\r\n *\r\n * 从 api.config.channels.<id>.enabled 读取配置\r\n */\r\n register(api: MoltbotPluginApi) {\r\n registerChinaSetupCli(api, { channels: SUPPORTED_CHANNELS });\r\n showChinaInstallHint(api);\r\n registerChannelsByConfig(api);\r\n },\r\n};\r\n\r\nexport default channelsPlugin;\r\n"]}
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAwPO,IAAM,kBAAA,GAAqB,CAAC,UAAA,EAAY,cAAA,EAAgB,SAAS,WAAA,EAAa,UAAA,EAAY,aAAa,OAAO;AAKrH,IAAM,cAAA,GAA0F;AAAA,EAC9F,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,WAAA,CAAY,SAAS,GAAG,CAAA;AAAA,IAC1B;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,YAAA,CAAa,SAAS,GAAG,CAAA;AAAA,IAC3B;AAAA,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,IACzB;AAAA;AAEJ,CAAA;AAwBO,SAAS,wBAAA,CACd,KACA,GAAA,EACM;AAEN,EAAA,MAAM,MAAA,GAAS,OAAO,GAAA,CAAI,MAAA;AAC1B,EAAA,MAAM,iBAAiB,MAAA,EAAQ,QAAA;AAE/B,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,aAAa,kBAAA,EAAoB;AAE1C,IAAA,MAAM,aAAA,GAAgB,eAAe,SAAS,CAAA;AAG9C,IAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,eAAe,SAAS,CAAA;AACvC,IAAA,MAAA,CAAO,SAAS,GAAG,CAAA;AAAA,EACrB;AACF;AAQA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAA,EAAI,UAAA;AAAA,EACJ,IAAA,EAAM,wBAAA;AAAA,EACN,WAAA,EAAa,8JAAA;AAAA,EAEb,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,QAAA;AAAA,IACN,oBAAA,EAAsB,KAAA;AAAA,IACtB,YAAY;AAAC,GACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,GAAA,EAAuB;AAC9B,IAAA,qBAAA,CAAsB,GAAA,EAAK,EAAE,QAAA,EAAU,kBAAA,EAAoB,CAAA;AAC3D,IAAA,oBAAA,CAAqB,GAAG,CAAA;AACxB,IAAA,wBAAA,CAAyB,GAAG,CAAA;AAAA,EAC9B;AACF,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"index.js","sourcesContent":["/**\r\n * @openclaw-china/channels\r\n * 统一渠道包入口\r\n *\r\n * 导出所有渠道插件,提供统一注册函数\r\n *\r\n * Requirements: Unified Package Entry, Unified Distribution\r\n */\r\n\r\n// 导出 DingTalk 插件\r\nimport {\r\n dingtalkPlugin,\r\n DEFAULT_ACCOUNT_ID as DINGTALK_DEFAULT_ACCOUNT_ID,\r\n sendMessageDingtalk,\r\n setDingtalkRuntime,\r\n getDingtalkRuntime,\r\n} from \"@openclaw-china/dingtalk\";\r\nimport dingtalkEntry from \"@openclaw-china/dingtalk\";\r\nimport {\r\n feishuPlugin,\r\n DEFAULT_ACCOUNT_ID as FEISHU_DEFAULT_ACCOUNT_ID,\r\n sendMessageFeishu,\r\n setFeishuRuntime,\r\n getFeishuRuntime,\r\n} from \"@openclaw-china/feishu-china\";\r\nimport feishuEntry from \"@openclaw-china/feishu-china\";\r\nimport {\r\n wecomPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_DEFAULT_ACCOUNT_ID,\r\n setWecomRuntime,\r\n getWecomRuntime,\r\n} from \"@openclaw-china/wecom\";\r\nimport wecomEntry from \"@openclaw-china/wecom\";\r\nimport {\r\n wecomAppPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_APP_DEFAULT_ACCOUNT_ID,\r\n setWecomAppRuntime,\r\n getWecomAppRuntime,\r\n sendWecomAppMessage,\r\n getAccessToken,\r\n sendWecomAppMarkdownMessage,\r\n stripMarkdown,\r\n clearAccessTokenCache,\r\n clearAllAccessTokenCache,\r\n downloadAndSendImage,\r\n sendWecomAppImageMessage,\r\n} from \"@openclaw-china/wecom-app\";\r\nimport wecomAppEntry from \"@openclaw-china/wecom-app\";\r\nimport {\r\n wecomKfPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_KF_DEFAULT_ACCOUNT_ID,\r\n setWecomKfRuntime,\r\n getWecomKfRuntime,\r\n} from \"@openclaw-china/wecom-kf\";\r\nimport wecomKfEntry from \"@openclaw-china/wecom-kf\";\r\nimport {\r\n qqbotPlugin,\r\n DEFAULT_ACCOUNT_ID as QQBOT_DEFAULT_ACCOUNT_ID,\r\n setQQBotRuntime,\r\n getQQBotRuntime,\r\n} from \"@openclaw-china/qqbot\";\r\nimport qqbotEntry from \"@openclaw-china/qqbot\";\r\nimport {\r\n wechatMpPlugin,\r\n DEFAULT_ACCOUNT_ID as WECHAT_MP_DEFAULT_ACCOUNT_ID,\r\n setWechatMpRuntime,\r\n getWechatMpRuntime,\r\n sendWechatMpActiveText,\r\n} from \"@openclaw-china/wechat-mp\";\r\nimport wechatMpEntry from \"@openclaw-china/wechat-mp\";\r\nimport { registerChinaSetupCli, showChinaInstallHint } from \"@openclaw-china/shared\";\r\n\r\nexport {\r\n dingtalkPlugin,\r\n DINGTALK_DEFAULT_ACCOUNT_ID,\r\n sendMessageDingtalk,\r\n setDingtalkRuntime,\r\n getDingtalkRuntime,\r\n feishuPlugin,\r\n FEISHU_DEFAULT_ACCOUNT_ID,\r\n sendMessageFeishu,\r\n setFeishuRuntime,\r\n getFeishuRuntime,\r\n wecomPlugin,\r\n WECOM_DEFAULT_ACCOUNT_ID,\r\n setWecomRuntime,\r\n getWecomRuntime,\r\n wecomAppPlugin,\r\n WECOM_APP_DEFAULT_ACCOUNT_ID,\r\n setWecomAppRuntime,\r\n getWecomAppRuntime,\r\n sendWecomAppMessage,\r\n getAccessToken,\r\n sendWecomAppMarkdownMessage,\r\n stripMarkdown,\r\n clearAccessTokenCache,\r\n clearAllAccessTokenCache,\r\n downloadAndSendImage,\r\n sendWecomAppImageMessage,\r\n wecomKfPlugin,\r\n WECOM_KF_DEFAULT_ACCOUNT_ID,\r\n setWecomKfRuntime,\r\n getWecomKfRuntime,\r\n qqbotPlugin,\r\n QQBOT_DEFAULT_ACCOUNT_ID,\r\n setQQBotRuntime,\r\n getQQBotRuntime,\r\n wechatMpPlugin,\r\n WECHAT_MP_DEFAULT_ACCOUNT_ID,\r\n setWechatMpRuntime,\r\n getWechatMpRuntime,\r\n sendWechatMpActiveText,\r\n};\r\n\r\nexport type {\r\n DingtalkConfig,\r\n ResolvedDingtalkAccount,\r\n DingtalkSendResult,\r\n} from \"@openclaw-china/dingtalk\";\r\nexport type {\r\n FeishuConfig,\r\n ResolvedFeishuAccount,\r\n FeishuSendResult,\r\n} from \"@openclaw-china/feishu-china\";\r\nexport type { WecomConfig, ResolvedWecomAccount, WecomInboundMessage } from \"@openclaw-china/wecom\";\r\nexport type {\r\n WecomAppConfig,\r\n ResolvedWecomAppAccount,\r\n WecomAppInboundMessage,\r\n WecomAppDmPolicy,\r\n WecomAppSendTarget,\r\n AccessTokenCacheEntry,\r\n} from \"@openclaw-china/wecom-app\";\r\nexport type {\r\n WecomKfConfig,\r\n WecomKfAccountConfig,\r\n ResolvedWecomKfAccount,\r\n WecomKfDmPolicy,\r\n SyncMsgItem as WecomKfSyncMsgItem,\r\n SyncMsgResponse as WecomKfSyncMsgResponse,\r\n} from \"@openclaw-china/wecom-kf\";\r\nexport type { QQBotConfig, ResolvedQQBotAccount, QQBotSendResult } from \"@openclaw-china/qqbot\";\r\nexport type {\r\n WechatMpConfig,\r\n WechatMpAccountConfig,\r\n ResolvedWechatMpAccount,\r\n WechatMpDmPolicy,\r\n WechatMpMessageMode,\r\n WechatMpReplyMode,\r\n} from \"@openclaw-china/wechat-mp\";\r\n\r\n// TODO: 后续添加其他渠道\r\n// export { qqPlugin } from \"@openclaw-china/qq\";\r\n\r\n/**\r\n * 渠道配置接口\r\n */\r\nexport interface ChannelConfig {\r\n /** 是否启用该渠道 */\r\n enabled?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface WecomRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\nexport interface WecomAppRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\nexport interface WecomKfRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\nexport interface WechatMpRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\n/**\r\n * Moltbot 配置接口(符合官方约定)\r\n * 配置路径: channels.<id>.enabled\r\n */\r\nexport interface MoltbotConfig {\r\n channels?: {\r\n dingtalk?: ChannelConfig;\r\n \"feishu-china\"?: ChannelConfig;\r\n wecom?: WecomRouteConfig;\r\n \"wecom-app\"?: WecomAppRouteConfig;\r\n \"wecom-kf\"?: WecomKfRouteConfig;\r\n \"wechat-mp\"?: WechatMpRouteConfig;\r\n qqbot?: ChannelConfig;\r\n qq?: ChannelConfig;\r\n [key: string]: ChannelConfig | undefined;\r\n };\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Moltbot 插件 API 接口\r\n */\r\nexport interface MoltbotPluginApi {\r\n registerChannel: (opts: { plugin: unknown }) => void;\r\n registerCli?: (\r\n registrar: (ctx: { program: unknown; config?: MoltbotConfig }) => void | Promise<void>,\r\n opts?: { commands?: string[] }\r\n ) => void;\r\n logger?: {\r\n info?: (message: string) => void;\r\n warn?: (message: string) => void;\r\n error?: (message: string) => void;\r\n };\r\n runtime?: {\r\n config?: {\r\n writeConfigFile?: (cfg: unknown) => Promise<void>;\r\n };\r\n };\r\n config?: MoltbotConfig;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * 支持的渠道列表\r\n */\r\nexport const SUPPORTED_CHANNELS = [\"dingtalk\", \"feishu-china\", \"wecom\", \"wecom-app\", \"wecom-kf\", \"wechat-mp\", \"qqbot\"] as const;\r\n// TODO: 鍚庣画娣诲姞 \"qq\"\r\n\r\nexport type SupportedChannel = (typeof SUPPORTED_CHANNELS)[number];\r\n\r\nconst channelPlugins: Record<SupportedChannel, { register: (api: MoltbotPluginApi) => void }> = {\r\n dingtalk: {\r\n register: (api: MoltbotPluginApi) => {\r\n dingtalkEntry.register(api);\r\n },\r\n },\r\n \"feishu-china\": {\r\n register: (api: MoltbotPluginApi) => {\r\n feishuEntry.register(api);\r\n },\r\n },\r\n wecom: {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomEntry.register(api);\r\n },\r\n },\r\n \"wecom-app\": {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomAppEntry.register(api);\r\n },\r\n },\r\n \"wecom-kf\": {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomKfEntry.register(api);\r\n },\r\n },\r\n \"wechat-mp\": {\r\n register: (api: MoltbotPluginApi) => {\r\n wechatMpEntry.register(api);\r\n },\r\n },\r\n qqbot: {\r\n register: (api: MoltbotPluginApi) => {\r\n qqbotEntry.register(api);\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * 根据 Moltbot 配置注册启用的渠道\r\n *\r\n * 符合 Moltbot 官方约定:从 cfg.channels.<id>.enabled 读取配置\r\n *\r\n * @param api Moltbot 鎻掍欢 API\r\n * @param cfg Moltbot 配置(可选,默认从 api.config 读取)\r\n *\r\n * @example\r\n * ```ts\r\n * // moltbot.json 配置\r\n * {\r\n * \"channels\": {\r\n * \"dingtalk\": {\r\n * \"enabled\": true,\r\n * \"clientId\": \"...\",\r\n * \"clientSecret\": \"...\"\r\n * }\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function registerChannelsByConfig(\r\n api: MoltbotPluginApi,\r\n cfg?: MoltbotConfig\r\n): void {\r\n // 从 api.config 或传入的 cfg 获取配置\r\n const config = cfg ?? api.config;\r\n const channelsConfig = config?.channels;\r\n\r\n if (!channelsConfig) {\r\n return;\r\n }\r\n\r\n for (const channelId of SUPPORTED_CHANNELS) {\r\n // 符合官方约定:从 channels.<id>.enabled 读取\r\n const channelConfig = channelsConfig[channelId];\r\n\r\n // 跳过未启用的渠道\r\n if (!channelConfig?.enabled) {\r\n continue;\r\n }\r\n\r\n const plugin = channelPlugins[channelId];\r\n plugin.register(api);\r\n }\r\n}\r\n\r\n/**\r\n * 统一渠道插件定义\r\n *\r\n * 包含所有支持的渠道,通过配置启用\r\n * 配置路径符合 Moltbot 官方约定: channels.<id>\r\n */\r\nconst channelsPlugin = {\r\n id: \"channels\",\r\n name: \"Moltbot China Channels\",\r\n description: \"统一渠道包,支持钉钉、飞书、企业微信、微信公众号、QQ Bot\",\r\n\r\n configSchema: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {},\r\n },\r\n\r\n /**\r\n * 注册所有启用的渠道\r\n *\r\n * 从 api.config.channels.<id>.enabled 读取配置\r\n */\r\n register(api: MoltbotPluginApi) {\r\n registerChinaSetupCli(api, { channels: SUPPORTED_CHANNELS });\r\n showChinaInstallHint(api);\r\n registerChannelsByConfig(api);\r\n },\r\n};\r\n\r\nexport default channelsPlugin;\r\n"]}
{
"id": "channels",
"name": "Moltbot China Channels",
"description": "统一渠道包,支持钉钉、飞书、企业微信智能机器人、企业微信自建应用、微信客服、QQ Bot",
"description": "统一渠道包,支持钉钉、飞书、企业微信智能机器人、企业微信自建应用、微信客服、微信公众号、QQ Bot",
"version": "0.1.0",
"channels": ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "qqbot"],
"channels": ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "wechat-mp", "qqbot"],
"configSchema": {

@@ -8,0 +8,0 @@ "type": "object",

{
"name": "@openclaw-china/channels",
"version": "2026.3.18",
"version": "2026.3.19",
"type": "module",

@@ -58,9 +58,10 @@ "description": "Unified package for all Moltbot China channel plugins",

"@clack/prompts": "^1.0.0",
"@openclaw-china/dingtalk": "2026.3.18",
"@openclaw-china/feishu-china": "2026.3.18",
"@openclaw-china/qqbot": "2026.3.18",
"@openclaw-china/shared": "2026.3.18",
"@openclaw-china/wecom": "2026.3.18",
"@openclaw-china/wecom-app": "2026.3.18",
"@openclaw-china/wecom-kf": "2026.3.18"
"@openclaw-china/dingtalk": "2026.3.19",
"@openclaw-china/feishu-china": "2026.3.19",
"@openclaw-china/qqbot": "2026.3.19",
"@openclaw-china/wechat-mp": "2026.3.19",
"@openclaw-china/shared": "2026.3.19",
"@openclaw-china/wecom": "2026.3.19",
"@openclaw-china/wecom-app": "2026.3.19",
"@openclaw-china/wecom-kf": "2026.3.19"
},

@@ -67,0 +68,0 @@ "devDependencies": {