WhatsApp: move group policy behind plugin boundary

This commit is contained in:
Gustavo Madeira Santana 2026-03-18 03:37:11 +00:00
parent a4b98f95c2
commit c29458d407
No known key found for this signature in database
5 changed files with 82 additions and 4 deletions

View File

@ -0,0 +1,36 @@
import { describe, expect, it } from "vitest";
import {
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
} from "./group-policy.js";
describe("whatsapp group policy", () => {
it("uses generic channel group policy helpers", () => {
const cfg = {
channels: {
whatsapp: {
groups: {
"1203630@g.us": {
requireMention: false,
tools: { deny: ["exec"] },
},
"*": {
requireMention: true,
tools: { allow: ["message.send"] },
},
},
},
},
// oxlint-disable-next-line typescript/no-explicit-any
} as any;
expect(resolveWhatsAppGroupRequireMention({ cfg, groupId: "1203630@g.us" })).toBe(false);
expect(resolveWhatsAppGroupRequireMention({ cfg, groupId: "other@g.us" })).toBe(true);
expect(resolveWhatsAppGroupToolPolicy({ cfg, groupId: "1203630@g.us" })).toEqual({
deny: ["exec"],
});
expect(resolveWhatsAppGroupToolPolicy({ cfg, groupId: "other@g.us" })).toEqual({
allow: ["message.send"],
});
});
});

View File

@ -0,0 +1,40 @@
import {
resolveChannelGroupRequireMention,
resolveChannelGroupToolsPolicy,
type GroupToolPolicyConfig,
} from "openclaw/plugin-sdk/channel-policy";
import type { OpenClawConfig } from "openclaw/plugin-sdk/whatsapp-core";
type WhatsAppGroupContext = {
cfg: OpenClawConfig;
accountId?: string | null;
groupId?: string | null;
senderId?: string | null;
senderName?: string | null;
senderUsername?: string | null;
senderE164?: string | null;
};
export function resolveWhatsAppGroupRequireMention(params: WhatsAppGroupContext): boolean {
return resolveChannelGroupRequireMention({
cfg: params.cfg,
channel: "whatsapp",
groupId: params.groupId,
accountId: params.accountId,
});
}
export function resolveWhatsAppGroupToolPolicy(
params: WhatsAppGroupContext,
): GroupToolPolicyConfig | undefined {
return resolveChannelGroupToolsPolicy({
cfg: params.cfg,
channel: "whatsapp",
groupId: params.groupId,
accountId: params.accountId,
senderId: params.senderId,
senderName: params.senderName,
senderUsername: params.senderUsername,
senderE164: params.senderE164,
});
}

View File

@ -13,8 +13,6 @@ import {
resolveWhatsAppConfigAllowFrom,
resolveWhatsAppConfigDefaultTo,
resolveWhatsAppGroupIntroHint,
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
WhatsAppConfigSchema,
type ChannelPlugin,
} from "openclaw/plugin-sdk/whatsapp-core";
@ -24,6 +22,10 @@ import {
resolveWhatsAppAccount,
type ResolvedWhatsAppAccount,
} from "./accounts.js";
import {
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
} from "./group-policy.js";
export const WHATSAPP_CHANNEL = "whatsapp" as const;

View File

@ -13,7 +13,7 @@ export {
export {
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
} from "../channels/plugins/group-mentions.js";
} from "../../extensions/whatsapp/src/group-policy.js";
export { resolveWhatsAppGroupIntroHint } from "../channels/plugins/whatsapp-shared.js";
export {
ToolAuthorizationError,

View File

@ -52,7 +52,7 @@ export {
export {
resolveWhatsAppGroupRequireMention,
resolveWhatsAppGroupToolPolicy,
} from "../channels/plugins/group-mentions.js";
} from "../../extensions/whatsapp/src/group-policy.js";
export {
createWhatsAppOutboundBase,
resolveWhatsAppGroupIntroHint,