fix(hooks): decouple message:sent internal hook from mirror param

(cherry picked from commit 1afd7030f8)
This commit is contained in:
Marcus Castro
2026-02-23 23:17:36 -03:00
committed by Peter Steinberger
parent c7bf0dacb8
commit 01c1f68ab3
2 changed files with 33 additions and 2 deletions

View File

@@ -478,7 +478,7 @@ describe("deliverOutboundPayloads", () => {
expect(internalHookMocks.triggerInternalHook).toHaveBeenCalledTimes(1);
});
it("does not emit internal message:sent hook when mirror sessionKey is missing", async () => {
it("does not emit internal message:sent hook when neither mirror nor sessionKey is provided", async () => {
const sendWhatsApp = vi.fn().mockResolvedValue({ messageId: "w1", toJid: "jid" });
await deliverOutboundPayloads({
@@ -493,6 +493,35 @@ describe("deliverOutboundPayloads", () => {
expect(internalHookMocks.triggerInternalHook).not.toHaveBeenCalled();
});
it("emits internal message:sent hook when sessionKey is provided without mirror", async () => {
const sendWhatsApp = vi.fn().mockResolvedValue({ messageId: "w1", toJid: "jid" });
await deliverOutboundPayloads({
cfg: whatsappChunkConfig,
channel: "whatsapp",
to: "+1555",
payloads: [{ text: "hello" }],
deps: { sendWhatsApp },
sessionKey: "agent:main:main",
});
expect(internalHookMocks.createInternalHookEvent).toHaveBeenCalledTimes(1);
expect(internalHookMocks.createInternalHookEvent).toHaveBeenCalledWith(
"message",
"sent",
"agent:main:main",
expect.objectContaining({
to: "+1555",
content: "hello",
success: true,
channelId: "whatsapp",
conversationId: "+1555",
messageId: "w1",
}),
);
expect(internalHookMocks.triggerInternalHook).toHaveBeenCalledTimes(1);
});
it("calls failDelivery instead of ackDelivery on bestEffort partial failure", async () => {
const sendWhatsApp = vi
.fn()

View File

@@ -216,6 +216,8 @@ type DeliverOutboundPayloadsCoreParams = {
mediaUrls?: string[];
};
silent?: boolean;
/** Session key for internal hook dispatch (when `mirror` is not needed). */
sessionKey?: string;
};
type DeliverOutboundPayloadsParams = DeliverOutboundPayloadsCoreParams & {
@@ -444,7 +446,7 @@ async function deliverOutboundPayloadsCore(
return normalized ? [normalized] : [];
});
const hookRunner = getGlobalHookRunner();
const sessionKeyForInternalHooks = params.mirror?.sessionKey;
const sessionKeyForInternalHooks = params.mirror?.sessionKey ?? params.sessionKey;
for (const payload of normalizedPayloads) {
const payloadSummary: NormalizedOutboundPayload = {
text: payload.text ?? "",