refactor(cli): share outbound send dependency mapping

This commit is contained in:
Peter Steinberger
2026-02-21 20:22:35 +00:00
parent 84686db850
commit a1ccd03da0
4 changed files with 59 additions and 26 deletions

View File

@@ -5,6 +5,7 @@ import type { OutboundSendDeps } from "../infra/outbound/deliver.js";
import type { sendMessageSignal } from "../signal/send.js";
import type { sendMessageSlack } from "../slack/send.js";
import type { sendMessageTelegram } from "../telegram/send.js";
import { createOutboundSendDepsFromCliSource } from "./outbound-send-mapping.js";
export type CliDeps = {
sendMessageWhatsApp: typeof sendMessageWhatsApp;
@@ -44,16 +45,8 @@ export function createDefaultDeps(): CliDeps {
};
}
// Provider docking: extend this mapping when adding new outbound send deps.
export function createOutboundSendDeps(deps: CliDeps): OutboundSendDeps {
return {
sendWhatsApp: deps.sendMessageWhatsApp,
sendTelegram: deps.sendMessageTelegram,
sendDiscord: deps.sendMessageDiscord,
sendSlack: deps.sendMessageSlack,
sendSignal: deps.sendMessageSignal,
sendIMessage: deps.sendMessageIMessage,
};
return createOutboundSendDepsFromCliSource(deps);
}
export { logWebSelfId } from "../web/auth-store.js";

View File

@@ -1,22 +1,11 @@
import type { OutboundSendDeps } from "../infra/outbound/deliver.js";
import {
createOutboundSendDepsFromCliSource,
type CliOutboundSendSource,
} from "./outbound-send-mapping.js";
export type CliDeps = {
sendMessageWhatsApp: NonNullable<OutboundSendDeps["sendWhatsApp"]>;
sendMessageTelegram: NonNullable<OutboundSendDeps["sendTelegram"]>;
sendMessageDiscord: NonNullable<OutboundSendDeps["sendDiscord"]>;
sendMessageSlack: NonNullable<OutboundSendDeps["sendSlack"]>;
sendMessageSignal: NonNullable<OutboundSendDeps["sendSignal"]>;
sendMessageIMessage: NonNullable<OutboundSendDeps["sendIMessage"]>;
};
export type CliDeps = Required<CliOutboundSendSource>;
// Provider docking: extend this mapping when adding new outbound send deps.
export function createOutboundSendDeps(deps: CliDeps): OutboundSendDeps {
return {
sendWhatsApp: deps.sendMessageWhatsApp,
sendTelegram: deps.sendMessageTelegram,
sendDiscord: deps.sendMessageDiscord,
sendSlack: deps.sendMessageSlack,
sendSignal: deps.sendMessageSignal,
sendIMessage: deps.sendMessageIMessage,
};
return createOutboundSendDepsFromCliSource(deps);
}

View File

@@ -0,0 +1,29 @@
import { describe, expect, it, vi } from "vitest";
import {
createOutboundSendDepsFromCliSource,
type CliOutboundSendSource,
} from "./outbound-send-mapping.js";
describe("createOutboundSendDepsFromCliSource", () => {
it("maps CLI send deps to outbound send deps", () => {
const deps: CliOutboundSendSource = {
sendMessageWhatsApp: vi.fn() as CliOutboundSendSource["sendMessageWhatsApp"],
sendMessageTelegram: vi.fn() as CliOutboundSendSource["sendMessageTelegram"],
sendMessageDiscord: vi.fn() as CliOutboundSendSource["sendMessageDiscord"],
sendMessageSlack: vi.fn() as CliOutboundSendSource["sendMessageSlack"],
sendMessageSignal: vi.fn() as CliOutboundSendSource["sendMessageSignal"],
sendMessageIMessage: vi.fn() as CliOutboundSendSource["sendMessageIMessage"],
};
const outbound = createOutboundSendDepsFromCliSource(deps);
expect(outbound).toEqual({
sendWhatsApp: deps.sendMessageWhatsApp,
sendTelegram: deps.sendMessageTelegram,
sendDiscord: deps.sendMessageDiscord,
sendSlack: deps.sendMessageSlack,
sendSignal: deps.sendMessageSignal,
sendIMessage: deps.sendMessageIMessage,
});
});
});

View File

@@ -0,0 +1,22 @@
import type { OutboundSendDeps } from "../infra/outbound/deliver.js";
export type CliOutboundSendSource = {
sendMessageWhatsApp: OutboundSendDeps["sendWhatsApp"];
sendMessageTelegram: OutboundSendDeps["sendTelegram"];
sendMessageDiscord: OutboundSendDeps["sendDiscord"];
sendMessageSlack: OutboundSendDeps["sendSlack"];
sendMessageSignal: OutboundSendDeps["sendSignal"];
sendMessageIMessage: OutboundSendDeps["sendIMessage"];
};
// Provider docking: extend this mapping when adding new outbound send deps.
export function createOutboundSendDepsFromCliSource(deps: CliOutboundSendSource): OutboundSendDeps {
return {
sendWhatsApp: deps.sendMessageWhatsApp,
sendTelegram: deps.sendMessageTelegram,
sendDiscord: deps.sendMessageDiscord,
sendSlack: deps.sendMessageSlack,
sendSignal: deps.sendMessageSignal,
sendIMessage: deps.sendMessageIMessage,
};
}