mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-18 21:40:53 +00:00
* refactor: make OutboundSendDeps dynamic with channel-ID keys
Replace hardcoded per-channel send fields (sendTelegram, sendDiscord,
etc.) with a dynamic index-signature type keyed by channel ID. This
unblocks moving channel implementations to extensions without breaking
the outbound dispatch contract.
- OutboundSendDeps and CliDeps are now { [channelId: string]: unknown }
- Each outbound adapter resolves its send fn via bracket access with cast
- Lazy-loading preserved via createLazySender with module cache
- Delete 6 deps-send-*.runtime.ts one-liner re-export files
- Harden guardrail scan against deleted-but-tracked files
* fix: preserve outbound send-deps compatibility
* style: fix formatting issues (import order, extra bracket, trailing whitespace)
* fix: resolve type errors from dynamic OutboundSendDeps in tests and extension
* fix: remove unused OutboundSendDeps import from deliver.test-helpers
50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import type { OutboundSendDeps } from "../infra/outbound/deliver.js";
|
|
|
|
/**
|
|
* CLI-internal send function sources, keyed by channel ID.
|
|
* Each value is a lazily-loaded send function for that channel.
|
|
*/
|
|
export type CliOutboundSendSource = { [channelId: string]: unknown };
|
|
|
|
const LEGACY_SOURCE_TO_CHANNEL = {
|
|
sendMessageWhatsApp: "whatsapp",
|
|
sendMessageTelegram: "telegram",
|
|
sendMessageDiscord: "discord",
|
|
sendMessageSlack: "slack",
|
|
sendMessageSignal: "signal",
|
|
sendMessageIMessage: "imessage",
|
|
} as const;
|
|
|
|
const CHANNEL_TO_LEGACY_DEP_KEY = {
|
|
whatsapp: "sendWhatsApp",
|
|
telegram: "sendTelegram",
|
|
discord: "sendDiscord",
|
|
slack: "sendSlack",
|
|
signal: "sendSignal",
|
|
imessage: "sendIMessage",
|
|
} as const;
|
|
|
|
/**
|
|
* Pass CLI send sources through as-is — both CliOutboundSendSource and
|
|
* OutboundSendDeps are now channel-ID-keyed records.
|
|
*/
|
|
export function createOutboundSendDepsFromCliSource(deps: CliOutboundSendSource): OutboundSendDeps {
|
|
const outbound: OutboundSendDeps = { ...deps };
|
|
|
|
for (const [legacySourceKey, channelId] of Object.entries(LEGACY_SOURCE_TO_CHANNEL)) {
|
|
const sourceValue = deps[legacySourceKey];
|
|
if (sourceValue !== undefined && outbound[channelId] === undefined) {
|
|
outbound[channelId] = sourceValue;
|
|
}
|
|
}
|
|
|
|
for (const [channelId, legacyDepKey] of Object.entries(CHANNEL_TO_LEGACY_DEP_KEY)) {
|
|
const sourceValue = outbound[channelId];
|
|
if (sourceValue !== undefined && outbound[legacyDepKey] === undefined) {
|
|
outbound[legacyDepKey] = sourceValue;
|
|
}
|
|
}
|
|
|
|
return outbound;
|
|
}
|