import { createResolvedApproverActionAuthAdapter, resolveApprovalApprovers, } from "openclaw/plugin-sdk/approval-runtime"; import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime"; import { resolveSlackAccount } from "./accounts.js"; import { normalizeSlackApproverId } from "./exec-approvals.js"; export function getSlackApprovalApprovers(params: { cfg: OpenClawConfig; accountId?: string | null; }): string[] { const account = resolveSlackAccount(params).config; return resolveApprovalApprovers({ allowFrom: account.allowFrom, extraAllowFrom: account.dm?.allowFrom, defaultTo: account.defaultTo, normalizeApprover: normalizeSlackApproverId, normalizeDefaultTo: normalizeSlackApproverId, }); } export function isSlackApprovalAuthorizedSender(params: { cfg: OpenClawConfig; accountId?: string | null; senderId?: string | null; }): boolean { const senderId = params.senderId ? normalizeSlackApproverId(params.senderId) : undefined; if (!senderId) { return false; } return getSlackApprovalApprovers(params).includes(senderId); } export const slackApprovalAuth = createResolvedApproverActionAuthAdapter({ channelLabel: "Slack", resolveApprovers: ({ cfg, accountId }) => getSlackApprovalApprovers({ cfg, accountId }), normalizeSenderId: (value) => normalizeSlackApproverId(value), });