| import { imessageOutbound } from "../channels/plugins/outbound/imessage.js"; |
| import type { |
| ChannelCapabilities, |
| ChannelId, |
| ChannelOutboundAdapter, |
| ChannelPlugin, |
| } from "../channels/plugins/types.js"; |
| import type { PluginRegistry } from "../plugins/registry.js"; |
| import { normalizeIMessageHandle } from "../imessage/targets.js"; |
|
|
| export const createTestRegistry = (channels: PluginRegistry["channels"] = []): PluginRegistry => ({ |
| plugins: [], |
| tools: [], |
| hooks: [], |
| typedHooks: [], |
| channels, |
| providers: [], |
| gatewayHandlers: {}, |
| httpHandlers: [], |
| httpRoutes: [], |
| cliRegistrars: [], |
| services: [], |
| commands: [], |
| diagnostics: [], |
| }); |
|
|
| 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) => |
| accounts.flatMap((account) => { |
| const lastError = typeof account.lastError === "string" ? account.lastError.trim() : ""; |
| if (!lastError) { |
| return []; |
| } |
| return [ |
| { |
| channel: "imessage", |
| accountId: account.accountId, |
| kind: "runtime", |
| message: `Channel error: ${lastError}`, |
| }, |
| ]; |
| }), |
| }, |
| 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: "<handle|chat_id:ID>", |
| }, |
| normalizeTarget: (raw) => normalizeIMessageHandle(raw), |
| }, |
| }); |
|
|
| export const createOutboundTestPlugin = (params: { |
| id: ChannelId; |
| outbound: ChannelOutboundAdapter; |
| label?: string; |
| docsPath?: string; |
| capabilities?: ChannelCapabilities; |
| }): ChannelPlugin => ({ |
| id: params.id, |
| meta: { |
| id: params.id, |
| label: params.label ?? String(params.id), |
| selectionLabel: params.label ?? String(params.id), |
| docsPath: params.docsPath ?? `/channels/${params.id}`, |
| blurb: "test stub.", |
| }, |
| capabilities: params.capabilities ?? { chatTypes: ["direct"] }, |
| config: { |
| listAccountIds: () => [], |
| resolveAccount: () => ({}), |
| }, |
| outbound: params.outbound, |
| }); |
|
|