mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-05 18:33:39 +00:00
* fix(imessage): recognize bare hex group chat identifiers as chat targets A 32-char hex iMessage group chat identifier (as returned by `imsg` for group chats) with no explicit `chat_identifier:` prefix fell through to E.164 phone-number normalization. normalizeE164 strips non-digit characters and prepends `+`, turning `7d5297154d5f436d83dbbdf03fcc8fdd` into `+75297154543683038` -- a bogus phone number. Cron/announce delivery then reported `delivered: true` while silently sending to a nonexistent recipient. Detect bare 32-char hex strings in both the send-path target parser (extensions/imessage/src/targets.ts) and the outbound delivery-target normalizer (extensions/imessage/src/normalize.ts) and route them as chat_identifier targets, consistent with how an explicit `chat_identifier:<id>` prefix already resolves. Fixes #89235. * refactor(imessage): centralize bare chat identifiers * refactor(imessage): centralize bare chat identifiers --------- Co-authored-by: Peter Steinberger <peter@steipete.me> Co-authored-by: Peter Steinberger <steipete@gmail.com>
37 lines
1.7 KiB
TypeScript
37 lines
1.7 KiB
TypeScript
// Imessage tests cover normalize plugin behavior.
|
|
import { describe, expect, it } from "vitest";
|
|
import { looksLikeIMessageTargetId, normalizeIMessageMessagingTarget } from "./normalize.js";
|
|
|
|
describe("normalizeIMessageMessagingTarget", () => {
|
|
it("normalizes blank inputs to undefined", () => {
|
|
expect(normalizeIMessageMessagingTarget(" ")).toBeUndefined();
|
|
});
|
|
|
|
it("preserves service prefixes for handles", () => {
|
|
expect(normalizeIMessageMessagingTarget("sms:+1 (555) 222-3333")).toBe("sms:+15552223333");
|
|
});
|
|
|
|
it("drops service prefixes for chat targets", () => {
|
|
expect(normalizeIMessageMessagingTarget("sms:chat_id:123")).toBe("chat_id:123");
|
|
expect(normalizeIMessageMessagingTarget("imessage:CHAT_GUID:abc")).toBe("chat_guid:abc");
|
|
expect(normalizeIMessageMessagingTarget("auto:ChatIdentifier:foo")).toBe("chatidentifier:foo");
|
|
});
|
|
|
|
it("treats a bare 32-char hex group chat identifier as a chat_identifier, not a phone number", () => {
|
|
const hex = "7d5297154d5f436d83dbbdf03fcc8fdd";
|
|
expect(normalizeIMessageMessagingTarget(hex)).toBe(`chat_identifier:${hex}`);
|
|
expect(normalizeIMessageMessagingTarget(hex.toUpperCase())).toBe(`chat_identifier:${hex}`);
|
|
});
|
|
});
|
|
|
|
describe("looksLikeIMessageTargetId", () => {
|
|
it("detects common iMessage target forms", () => {
|
|
expect(looksLikeIMessageTargetId("sms:+15555550123")).toBe(true);
|
|
expect(looksLikeIMessageTargetId("chat_id:123")).toBe(true);
|
|
expect(looksLikeIMessageTargetId("user@example.com")).toBe(true);
|
|
expect(looksLikeIMessageTargetId("+15555550123")).toBe(true);
|
|
expect(looksLikeIMessageTargetId("")).toBe(false);
|
|
expect(looksLikeIMessageTargetId("7d5297154d5f436d83dbbdf03fcc8fdd")).toBe(true);
|
|
});
|
|
});
|