diff --git a/src/infra/approval-request-account-binding.ts b/src/infra/approval-request-account-binding.ts index 4d616e6818c..8a4f1ebde1a 100644 --- a/src/infra/approval-request-account-binding.ts +++ b/src/infra/approval-request-account-binding.ts @@ -80,7 +80,13 @@ export function resolveApprovalRequestChannelAccountId(params: { if (!expectedChannel) { return null; } - return resolveApprovalRequestAccountId(params); + const turnSourceChannel = normalizeOptionalChannel(params.request.request.turnSourceChannel); + if (!turnSourceChannel || turnSourceChannel === expectedChannel) { + return resolveApprovalRequestAccountId(params); + } + + const sessionBinding = resolvePersistedApprovalRequestSessionBinding(params); + return sessionBinding?.channel === expectedChannel ? (sessionBinding.accountId ?? null) : null; } export function doesApprovalRequestMatchChannelAccount(params: { diff --git a/src/infra/exec-approval-session-target.ts b/src/infra/exec-approval-session-target.ts index b450d1f39a8..27f9811da01 100644 --- a/src/infra/exec-approval-session-target.ts +++ b/src/infra/exec-approval-session-target.ts @@ -8,6 +8,12 @@ import type { ExecApprovalRequest } from "./exec-approvals.js"; import { resolveSessionDeliveryTarget } from "./outbound/targets.js"; import type { PluginApprovalRequest } from "./plugin-approvals.js"; +export { + doesApprovalRequestMatchChannelAccount, + resolveApprovalRequestAccountId, + resolveApprovalRequestChannelAccountId, +} from "./approval-request-account-binding.js"; + export type ExecApprovalSessionTarget = { channel?: string; to: string;