From 8218a94a31183be842da758e17b2ba3d8d820b03 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 14 Feb 2026 14:50:58 +0000 Subject: [PATCH] refactor(signal): share rpc context --- src/signal/rpc-context.ts | 24 ++++++++++++++++++++++++ src/signal/send-reactions.ts | 27 +++------------------------ src/signal/send.ts | 23 +---------------------- 3 files changed, 28 insertions(+), 46 deletions(-) create mode 100644 src/signal/rpc-context.ts diff --git a/src/signal/rpc-context.ts b/src/signal/rpc-context.ts new file mode 100644 index 00000000000..f46ec3b124d --- /dev/null +++ b/src/signal/rpc-context.ts @@ -0,0 +1,24 @@ +import { loadConfig } from "../config/config.js"; +import { resolveSignalAccount } from "./accounts.js"; + +export function resolveSignalRpcContext( + opts: { baseUrl?: string; account?: string; accountId?: string }, + accountInfo?: ReturnType, +) { + const hasBaseUrl = Boolean(opts.baseUrl?.trim()); + const hasAccount = Boolean(opts.account?.trim()); + const resolvedAccount = + accountInfo || + (!hasBaseUrl || !hasAccount + ? resolveSignalAccount({ + cfg: loadConfig(), + accountId: opts.accountId, + }) + : undefined); + const baseUrl = opts.baseUrl?.trim() || resolvedAccount?.baseUrl; + if (!baseUrl) { + throw new Error("Signal base URL is required"); + } + const account = opts.account?.trim() || resolvedAccount?.config.account?.trim(); + return { baseUrl, account }; +} diff --git a/src/signal/send-reactions.ts b/src/signal/send-reactions.ts index 3298329320f..fca6fcf158a 100644 --- a/src/signal/send-reactions.ts +++ b/src/signal/send-reactions.ts @@ -5,6 +5,7 @@ import { loadConfig } from "../config/config.js"; import { resolveSignalAccount } from "./accounts.js"; import { signalRpcRequest } from "./client.js"; +import { resolveSignalRpcContext } from "./rpc-context.js"; export type SignalReactionOpts = { baseUrl?: string; @@ -59,28 +60,6 @@ function resolveTargetAuthorParams(params: { return {}; } -function resolveReactionRpcContext( - opts: SignalReactionOpts, - accountInfo?: ReturnType, -) { - const hasBaseUrl = Boolean(opts.baseUrl?.trim()); - const hasAccount = Boolean(opts.account?.trim()); - const resolvedAccount = - accountInfo || - (!hasBaseUrl || !hasAccount - ? resolveSignalAccount({ - cfg: loadConfig(), - accountId: opts.accountId, - }) - : undefined); - const baseUrl = opts.baseUrl?.trim() || resolvedAccount?.baseUrl; - if (!baseUrl) { - throw new Error("Signal base URL is required"); - } - const account = opts.account?.trim() || resolvedAccount?.config.account?.trim(); - return { baseUrl, account }; -} - /** * Send a Signal reaction to a message * @param recipient - UUID or E.164 phone number of the message author @@ -98,7 +77,7 @@ export async function sendReactionSignal( cfg: loadConfig(), accountId: opts.accountId, }); - const { baseUrl, account } = resolveReactionRpcContext(opts, accountInfo); + const { baseUrl, account } = resolveSignalRpcContext(opts, accountInfo); const normalizedRecipient = normalizeSignalUuid(recipient); const groupId = opts.groupId?.trim(); @@ -164,7 +143,7 @@ export async function removeReactionSignal( cfg: loadConfig(), accountId: opts.accountId, }); - const { baseUrl, account } = resolveReactionRpcContext(opts, accountInfo); + const { baseUrl, account } = resolveSignalRpcContext(opts, accountInfo); const normalizedRecipient = normalizeSignalUuid(recipient); const groupId = opts.groupId?.trim(); diff --git a/src/signal/send.ts b/src/signal/send.ts index 045c572e9f7..d4db79a87ac 100644 --- a/src/signal/send.ts +++ b/src/signal/send.ts @@ -6,6 +6,7 @@ import { loadWebMedia } from "../web/media.js"; import { resolveSignalAccount } from "./accounts.js"; import { signalRpcRequest } from "./client.js"; import { markdownToSignalText, type SignalTextStyleRange } from "./format.js"; +import { resolveSignalRpcContext } from "./rpc-context.js"; export type SignalSendOpts = { baseUrl?: string; @@ -94,28 +95,6 @@ function buildTargetParams( return null; } -function resolveSignalRpcContext( - opts: SignalRpcOpts, - accountInfo?: ReturnType, -) { - const hasBaseUrl = Boolean(opts.baseUrl?.trim()); - const hasAccount = Boolean(opts.account?.trim()); - const resolvedAccount = - accountInfo || - (!hasBaseUrl || !hasAccount - ? resolveSignalAccount({ - cfg: loadConfig(), - accountId: opts.accountId, - }) - : undefined); - const baseUrl = opts.baseUrl?.trim() || resolvedAccount?.baseUrl; - if (!baseUrl) { - throw new Error("Signal base URL is required"); - } - const account = opts.account?.trim() || resolvedAccount?.config.account?.trim(); - return { baseUrl, account }; -} - async function resolveAttachment( mediaUrl: string, maxBytes: number,