mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-30 09:43:39 +00:00
57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
import { doesApprovalRequestMatchChannelAccount } 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 { resolveDiscordAccount } from "./accounts.js";
|
|
import {
|
|
isChannelExecApprovalClientEnabledFromConfig,
|
|
matchesApprovalRequestFilters,
|
|
} from "./approval-runtime.js";
|
|
import { getDiscordExecApprovalApprovers } from "./exec-approvals.js";
|
|
|
|
type ApprovalRequest = ExecApprovalRequest | PluginApprovalRequest;
|
|
|
|
export function shouldHandleDiscordApprovalRequest(params: {
|
|
cfg: OpenClawConfig;
|
|
accountId?: string | null;
|
|
request: ApprovalRequest;
|
|
configOverride?: DiscordExecApprovalConfig | null;
|
|
}): boolean {
|
|
const config =
|
|
params.configOverride ??
|
|
resolveDiscordAccount({ cfg: params.cfg, accountId: params.accountId }).config.execApprovals;
|
|
const approvers = getDiscordExecApprovalApprovers({
|
|
cfg: params.cfg,
|
|
accountId: params.accountId,
|
|
configOverride: params.configOverride,
|
|
});
|
|
if (
|
|
!doesApprovalRequestMatchChannelAccount({
|
|
cfg: params.cfg,
|
|
request: params.request,
|
|
channel: "discord",
|
|
accountId: params.accountId,
|
|
})
|
|
) {
|
|
return false;
|
|
}
|
|
if (
|
|
!isChannelExecApprovalClientEnabledFromConfig({
|
|
enabled: config?.enabled,
|
|
approverCount: approvers.length,
|
|
})
|
|
) {
|
|
return false;
|
|
}
|
|
return matchesApprovalRequestFilters({
|
|
request: params.request.request,
|
|
agentFilter: config?.agentFilter,
|
|
sessionFilter: config?.sessionFilter,
|
|
});
|
|
}
|