import { normalizeIMessageHandle } from "../../extensions/imessage/api.js"; import { imessageOutbound } from "../../test/channel-outbounds.js"; import type { ChannelOutboundAdapter, ChannelPlugin } from "../channels/plugins/types.js"; import { collectStatusIssuesFromLastError } from "../plugin-sdk/status-helpers.js"; export const createIMessageTestPlugin = (params?: { outbound?: ChannelOutboundAdapter; }): ChannelPlugin => ({ id: "imessage", meta: { id: "imessage", label: "iMessage", selectionLabel: "iMessage (imsg)", docsPath: "/channels/imessage", blurb: "iMessage test stub.", aliases: ["imsg"], }, capabilities: { chatTypes: ["direct", "group"], media: true }, config: { listAccountIds: () => [], resolveAccount: () => ({}), }, status: { collectStatusIssues: (accounts) => collectStatusIssuesFromLastError("imessage", accounts), }, outbound: params?.outbound ?? imessageOutbound, messaging: { targetResolver: { looksLikeId: (raw) => { const trimmed = raw.trim(); if (!trimmed) { return false; } if (/^(imessage:|sms:|auto:|chat_id:|chat_guid:|chat_identifier:)/i.test(trimmed)) { return true; } if (trimmed.includes("@")) { return true; } return /^\+?\d{3,}$/.test(trimmed); }, hint: "", }, normalizeTarget: (raw) => normalizeIMessageHandle(raw), }, });