import { normalizeE164 } from "openclaw/plugin-sdk/account-resolution"; import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime"; import {
createAllowedChatSenderMatcher,
type ChatSenderAllowParams,
type ParsedChatTarget,
parseChatTargetPrefixesOrThrow,
resolveServicePrefixedChatTarget,
resolveServicePrefixedOrChatAllowTarget,
} from "./target-parsing-helpers.js";
export type IMessageService = "imessage" | "sms" | "auto";
export function normalizeIMessageHandle(raw: string): string { const trimmed = raw.trim(); if (!trimmed) { return"";
} const lowered = normalizeLowercaseStringOrEmpty(trimmed); if (lowered.startsWith("imessage:")) { return normalizeIMessageHandle(trimmed.slice(9));
} if (lowered.startsWith("sms:")) { return normalizeIMessageHandle(trimmed.slice(4));
} if (lowered.startsWith("auto:")) { return normalizeIMessageHandle(trimmed.slice(5));
}
// Normalize chat_id/chat_guid/chat_identifier prefixes case-insensitively for (const prefix of CHAT_ID_PREFIXES) { if (lowered.startsWith(prefix)) { const value = trimmed.slice(prefix.length).trim(); return `chat_id:${value}`;
}
} for (const prefix of CHAT_GUID_PREFIXES) { if (lowered.startsWith(prefix)) { const value = trimmed.slice(prefix.length).trim(); return `chat_guid:${value}`;
}
} for (const prefix of CHAT_IDENTIFIER_PREFIXES) { if (lowered.startsWith(prefix)) { const value = trimmed.slice(prefix.length).trim(); return `chat_identifier:${value}`;
}
}
if (trimmed.includes("@")) { return normalizeLowercaseStringOrEmpty(trimmed);
} const normalized = normalizeE164(trimmed); if (normalized) { return normalized;
} return trimmed.replace(/\s+/g, "");
}
export function parseIMessageTarget(raw: string): IMessageTarget { const trimmed = raw.trim(); if (!trimmed) { thrownew Error("iMessage target is required");
} const lower = normalizeLowercaseStringOrEmpty(trimmed);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.