openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
44 lines (43 loc) • 1.85 kB
JavaScript
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js";
//#region src/plugin-sdk/approval-auth-helpers.ts
const IMPLICIT_SAME_CHAT_APPROVAL_AUTHORIZATION = Symbol("openclaw.implicitSameChatApprovalAuthorization");
/**
* Marks an authorization result as the implicit same-chat fallback used when a
* channel has no configured approver allowlist.
*/
function markImplicitSameChatApprovalAuthorization(result) {
Object.defineProperty(result, IMPLICIT_SAME_CHAT_APPROVAL_AUTHORIZATION, {
value: true,
enumerable: false
});
return result;
}
/**
* Checks whether an authorization result came from the implicit same-chat
* fallback instead of an explicitly configured approver allowlist.
*/
function isImplicitSameChatApprovalAuthorization(result) {
return Boolean(result && result[IMPLICIT_SAME_CHAT_APPROVAL_AUTHORIZATION]);
}
/**
* Builds the approval authorization adapter shared by channels that resolve
* approvers from account-scoped config.
*/
function createResolvedApproverActionAuthAdapter(params) {
const normalizeSenderId = params.normalizeSenderId ?? normalizeOptionalString;
return { authorizeActorAction({ cfg, accountId, senderId, approvalKind }) {
const approvers = params.resolveApprovers({
cfg,
accountId
});
if (approvers.length === 0) return markImplicitSameChatApprovalAuthorization({ authorized: true });
const normalizedSenderId = senderId ? normalizeSenderId(senderId) : void 0;
if (normalizedSenderId && approvers.includes(normalizedSenderId)) return { authorized: true };
return {
authorized: false,
reason: `❌ You are not authorized to approve ${approvalKind} requests on ${params.channelLabel}.`
};
} };
}
//#endregion
export { isImplicitSameChatApprovalAuthorization as n, markImplicitSameChatApprovalAuthorization as r, createResolvedApproverActionAuthAdapter as t };