refactor(extensions): dedupe channel config, onboarding, and monitors

This commit is contained in:
Peter Steinberger
2026-03-02 08:53:11 +00:00
parent d358b3ac88
commit ad8d766f65
43 changed files with 677 additions and 776 deletions

View File

@@ -45,6 +45,46 @@ const signalMessageActions: ChannelMessageActionAdapter = {
const meta = getChatChannelMeta("signal");
function buildSignalSetupPatch(input: {
signalNumber?: string;
cliPath?: string;
httpUrl?: string;
httpHost?: string;
httpPort?: string;
}) {
return {
...(input.signalNumber ? { account: input.signalNumber } : {}),
...(input.cliPath ? { cliPath: input.cliPath } : {}),
...(input.httpUrl ? { httpUrl: input.httpUrl } : {}),
...(input.httpHost ? { httpHost: input.httpHost } : {}),
...(input.httpPort ? { httpPort: Number(input.httpPort) } : {}),
};
}
type SignalSendFn = ReturnType<typeof getSignalRuntime>["channel"]["signal"]["sendMessageSignal"];
async function sendSignalOutbound(params: {
cfg: Parameters<typeof resolveSignalAccount>[0]["cfg"];
to: string;
text: string;
mediaUrl?: string;
accountId?: string;
deps?: { sendSignal?: SignalSendFn };
}) {
const send = params.deps?.sendSignal ?? getSignalRuntime().channel.signal.sendMessageSignal;
const maxBytes = resolveChannelMediaMaxBytes({
cfg: params.cfg,
resolveChannelLimitMb: ({ cfg, accountId }) =>
cfg.channels?.signal?.accounts?.[accountId]?.mediaMaxMb ?? cfg.channels?.signal?.mediaMaxMb,
accountId: params.accountId,
});
return await send(params.to, params.text, {
...(params.mediaUrl ? { mediaUrl: params.mediaUrl } : {}),
maxBytes,
accountId: params.accountId ?? undefined,
});
}
export const signalPlugin: ChannelPlugin<ResolvedSignalAccount> = {
id: "signal",
meta: {
@@ -190,11 +230,7 @@ export const signalPlugin: ChannelPlugin<ResolvedSignalAccount> = {
signal: {
...next.channels?.signal,
enabled: true,
...(input.signalNumber ? { account: input.signalNumber } : {}),
...(input.cliPath ? { cliPath: input.cliPath } : {}),
...(input.httpUrl ? { httpUrl: input.httpUrl } : {}),
...(input.httpHost ? { httpHost: input.httpHost } : {}),
...(input.httpPort ? { httpPort: Number(input.httpPort) } : {}),
...buildSignalSetupPatch(input),
},
},
};
@@ -211,11 +247,7 @@ export const signalPlugin: ChannelPlugin<ResolvedSignalAccount> = {
[accountId]: {
...next.channels?.signal?.accounts?.[accountId],
enabled: true,
...(input.signalNumber ? { account: input.signalNumber } : {}),
...(input.cliPath ? { cliPath: input.cliPath } : {}),
...(input.httpUrl ? { httpUrl: input.httpUrl } : {}),
...(input.httpHost ? { httpHost: input.httpHost } : {}),
...(input.httpPort ? { httpPort: Number(input.httpPort) } : {}),
...buildSignalSetupPatch(input),
},
},
},
@@ -229,33 +261,23 @@ export const signalPlugin: ChannelPlugin<ResolvedSignalAccount> = {
chunkerMode: "text",
textChunkLimit: 4000,
sendText: async ({ cfg, to, text, accountId, deps }) => {
const send = deps?.sendSignal ?? getSignalRuntime().channel.signal.sendMessageSignal;
const maxBytes = resolveChannelMediaMaxBytes({
const result = await sendSignalOutbound({
cfg,
resolveChannelLimitMb: ({ cfg, accountId }) =>
cfg.channels?.signal?.accounts?.[accountId]?.mediaMaxMb ??
cfg.channels?.signal?.mediaMaxMb,
to,
text,
accountId,
});
const result = await send(to, text, {
maxBytes,
accountId: accountId ?? undefined,
deps,
});
return { channel: "signal", ...result };
},
sendMedia: async ({ cfg, to, text, mediaUrl, accountId, deps }) => {
const send = deps?.sendSignal ?? getSignalRuntime().channel.signal.sendMessageSignal;
const maxBytes = resolveChannelMediaMaxBytes({
const result = await sendSignalOutbound({
cfg,
resolveChannelLimitMb: ({ cfg, accountId }) =>
cfg.channels?.signal?.accounts?.[accountId]?.mediaMaxMb ??
cfg.channels?.signal?.mediaMaxMb,
accountId,
});
const result = await send(to, text, {
to,
text,
mediaUrl,
maxBytes,
accountId: accountId ?? undefined,
accountId,
deps,
});
return { channel: "signal", ...result };
},