38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { MESSAGE_ACTION_TARGET_MODE } from "./message-action-spec.js";
|
|
|
|
export const CHANNEL_TARGET_DESCRIPTION =
|
|
"Recipient/channel: E.164 for WhatsApp/Signal, Telegram chat id/@username, Discord/Slack channel/user, or iMessage handle/chat_id";
|
|
|
|
export const CHANNEL_TARGETS_DESCRIPTION =
|
|
"Recipient/channel targets (same format as --target); accepts ids or names when the directory is available.";
|
|
|
|
export function applyTargetToParams(params: {
|
|
action: string;
|
|
args: Record<string, unknown>;
|
|
}): void {
|
|
const target = typeof params.args.target === "string" ? params.args.target.trim() : "";
|
|
const hasLegacyTo = typeof params.args.to === "string";
|
|
const hasLegacyChannelId = typeof params.args.channelId === "string";
|
|
const mode =
|
|
MESSAGE_ACTION_TARGET_MODE[params.action as keyof typeof MESSAGE_ACTION_TARGET_MODE] ?? "none";
|
|
|
|
if (mode !== "none") {
|
|
if (hasLegacyTo || hasLegacyChannelId) {
|
|
throw new Error("Use `target` instead of `to`/`channelId`.");
|
|
}
|
|
} else if (hasLegacyTo) {
|
|
throw new Error("Use `target` for actions that accept a destination.");
|
|
}
|
|
|
|
if (!target) return;
|
|
if (mode === "channelId") {
|
|
params.args.channelId = target;
|
|
return;
|
|
}
|
|
if (mode === "to") {
|
|
params.args.to = target;
|
|
return;
|
|
}
|
|
throw new Error(`Action ${params.action} does not accept a target.`);
|
|
}
|