mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-26 12:26:38 -06:00
9935ca3b30
Native approval delivery and resolution now stay bound to the originating or explicitly targeted channel account. Unbound requests fail closed across multiple eligible accounts; trusted reviewer-less SDK callers remain compatible. Co-authored-by: Ayaan Zaidi <hi@obviy.us>
63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
// Discord plugin module implements approval shared behavior.
|
|
import { doesApprovalRequestSelectChannelAccount } from "openclaw/plugin-sdk/approval-native-runtime";
|
|
import type {
|
|
ExecApprovalRequest,
|
|
PluginApprovalRequest,
|
|
} from "openclaw/plugin-sdk/approval-runtime";
|
|
import type {
|
|
DiscordExecApprovalConfig,
|
|
OpenClawConfig,
|
|
} from "openclaw/plugin-sdk/config-contracts";
|
|
import { resolveDefaultDiscordAccountId, resolveDiscordAccount } from "./accounts.js";
|
|
import {
|
|
isChannelExecApprovalClientEnabledFromConfig,
|
|
matchesApprovalRequestFilters,
|
|
} from "./approval-runtime.js";
|
|
import { getDiscordExecApprovalApprovers } from "./exec-approvals.js";
|
|
|
|
type ApprovalRequest = ExecApprovalRequest | PluginApprovalRequest;
|
|
|
|
function isDiscordApprovalAccountEligible(params: {
|
|
cfg: OpenClawConfig;
|
|
accountId?: string | null;
|
|
request: ApprovalRequest;
|
|
configOverride?: DiscordExecApprovalConfig | null;
|
|
}): boolean {
|
|
const account = resolveDiscordAccount(params);
|
|
const config = params.configOverride ?? account.config.execApprovals;
|
|
return (
|
|
account.enabled &&
|
|
isChannelExecApprovalClientEnabledFromConfig({
|
|
enabled: config?.enabled,
|
|
approverCount: getDiscordExecApprovalApprovers(params).length,
|
|
}) &&
|
|
matchesApprovalRequestFilters({
|
|
request: params.request.request,
|
|
agentFilter: config?.agentFilter,
|
|
sessionFilter: config?.sessionFilter,
|
|
})
|
|
);
|
|
}
|
|
|
|
export function shouldHandleDiscordApprovalRequest(params: {
|
|
cfg: OpenClawConfig;
|
|
accountId?: string | null;
|
|
request: ApprovalRequest;
|
|
configOverride?: DiscordExecApprovalConfig | null;
|
|
}): boolean {
|
|
const accountId = params.accountId ?? resolveDefaultDiscordAccountId(params.cfg);
|
|
if (
|
|
!doesApprovalRequestSelectChannelAccount({
|
|
...params,
|
|
channel: "discord",
|
|
defaultAccountId: resolveDefaultDiscordAccountId(params.cfg),
|
|
eligibleAccountIds: isDiscordApprovalAccountEligible({ ...params, accountId })
|
|
? [accountId]
|
|
: [],
|
|
})
|
|
) {
|
|
return false;
|
|
}
|
|
return isDiscordApprovalAccountEligible(params);
|
|
}
|