@elizaos/plugin-imessage 2.0.0-beta.1 → 2.0.3-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -18
  3. package/auto-enable.ts +1 -1
  4. package/package.json +21 -4
  5. package/dist/accounts.d.ts +0 -135
  6. package/dist/accounts.d.ts.map +0 -1
  7. package/dist/accounts.js +0 -209
  8. package/dist/accounts.js.map +0 -1
  9. package/dist/api/bluebubbles-routes.d.ts +0 -10
  10. package/dist/api/bluebubbles-routes.d.ts.map +0 -1
  11. package/dist/api/bluebubbles-routes.js +0 -132
  12. package/dist/api/bluebubbles-routes.js.map +0 -1
  13. package/dist/api/imessage-routes.d.ts +0 -80
  14. package/dist/api/imessage-routes.d.ts.map +0 -1
  15. package/dist/api/imessage-routes.js +0 -230
  16. package/dist/api/imessage-routes.js.map +0 -1
  17. package/dist/chatdb-reader.d.ts +0 -240
  18. package/dist/chatdb-reader.d.ts.map +0 -1
  19. package/dist/chatdb-reader.js +0 -647
  20. package/dist/chatdb-reader.js.map +0 -1
  21. package/dist/config.d.ts +0 -60
  22. package/dist/config.d.ts.map +0 -1
  23. package/dist/config.js +0 -8
  24. package/dist/config.js.map +0 -1
  25. package/dist/connector-account-provider.d.ts +0 -18
  26. package/dist/connector-account-provider.d.ts.map +0 -1
  27. package/dist/connector-account-provider.js +0 -83
  28. package/dist/connector-account-provider.js.map +0 -1
  29. package/dist/contacts-reader.d.ts +0 -147
  30. package/dist/contacts-reader.d.ts.map +0 -1
  31. package/dist/contacts-reader.js +0 -481
  32. package/dist/contacts-reader.js.map +0 -1
  33. package/dist/index.d.ts +0 -23
  34. package/dist/index.d.ts.map +0 -1
  35. package/dist/index.js +0 -78
  36. package/dist/index.js.map +0 -1
  37. package/dist/providers/index.d.ts +0 -4
  38. package/dist/providers/index.d.ts.map +0 -1
  39. package/dist/providers/index.js +0 -5
  40. package/dist/providers/index.js.map +0 -1
  41. package/dist/rpc.d.ts +0 -206
  42. package/dist/rpc.d.ts.map +0 -1
  43. package/dist/rpc.js +0 -393
  44. package/dist/rpc.js.map +0 -1
  45. package/dist/service.d.ts +0 -266
  46. package/dist/service.d.ts.map +0 -1
  47. package/dist/service.js +0 -1694
  48. package/dist/service.js.map +0 -1
  49. package/dist/setup-routes.d.ts +0 -38
  50. package/dist/setup-routes.d.ts.map +0 -1
  51. package/dist/setup-routes.js +0 -322
  52. package/dist/setup-routes.js.map +0 -1
  53. package/dist/types.d.ts +0 -192
  54. package/dist/types.d.ts.map +0 -1
  55. package/dist/types.js +0 -138
  56. package/dist/types.js.map +0 -1
package/dist/rpc.d.ts DELETED
@@ -1,206 +0,0 @@
1
- /**
2
- * Default probe timeout in milliseconds
3
- */
4
- export declare const DEFAULT_PROBE_TIMEOUT_MS = 5000;
5
- /**
6
- * Default request timeout in milliseconds
7
- */
8
- export declare const DEFAULT_REQUEST_TIMEOUT_MS = 30000;
9
- /**
10
- * iMessage RPC error structure
11
- */
12
- export interface IMessageRpcError {
13
- code?: number;
14
- message?: string;
15
- data?: unknown;
16
- }
17
- /**
18
- * iMessage RPC response structure
19
- */
20
- export interface IMessageRpcResponse<T> {
21
- jsonrpc?: string;
22
- id?: string | number | null;
23
- result?: T;
24
- error?: IMessageRpcError;
25
- method?: string;
26
- params?: unknown;
27
- }
28
- /**
29
- * iMessage RPC notification structure
30
- */
31
- export interface IMessageRpcNotification {
32
- method: string;
33
- params?: unknown;
34
- }
35
- /**
36
- * Options for creating an iMessage RPC client
37
- */
38
- export interface IMessageRpcClientOptions {
39
- cliPath?: string;
40
- dbPath?: string;
41
- onNotification?: (msg: IMessageRpcNotification) => void;
42
- onError?: (error: Error) => void;
43
- onClose?: (code: number | null, signal: NodeJS.Signals | null) => void;
44
- }
45
- /**
46
- * iMessage RPC client for communicating with the imsg CLI tool
47
- */
48
- export declare class IMessageRpcClient {
49
- private readonly cliPath;
50
- private readonly dbPath?;
51
- private readonly onNotification?;
52
- private readonly onError?;
53
- private readonly onClose?;
54
- private readonly pending;
55
- private readonly closedPromise;
56
- private closedResolve;
57
- private child;
58
- private reader;
59
- private nextId;
60
- private started;
61
- constructor(opts?: IMessageRpcClientOptions);
62
- /**
63
- * Starts the RPC client by spawning the CLI process
64
- */
65
- start(): Promise<void>;
66
- /**
67
- * Stops the RPC client
68
- */
69
- stop(): Promise<void>;
70
- /**
71
- * Waits for the RPC client to close
72
- */
73
- waitForClose(): Promise<void>;
74
- /**
75
- * Checks if the client is running
76
- */
77
- isRunning(): boolean;
78
- /**
79
- * Makes an RPC request
80
- */
81
- request<T = unknown>(method: string, params?: Record<string, unknown>, opts?: {
82
- timeoutMs?: number;
83
- }): Promise<T>;
84
- /**
85
- * Handles an incoming line from the RPC process
86
- */
87
- private handleLine;
88
- /**
89
- * Fails all pending requests
90
- */
91
- private failAll;
92
- }
93
- /**
94
- * Creates and starts an iMessage RPC client
95
- */
96
- export declare function createIMessageRpcClient(opts?: IMessageRpcClientOptions): Promise<IMessageRpcClient>;
97
- /**
98
- * iMessage contact information
99
- */
100
- export interface IMessageContact {
101
- id: string;
102
- firstName?: string;
103
- lastName?: string;
104
- displayName?: string;
105
- phones?: string[];
106
- emails?: string[];
107
- }
108
- /**
109
- * iMessage chat information
110
- */
111
- export interface IMessageChat {
112
- id: string;
113
- chatIdentifier: string;
114
- guid?: string;
115
- displayName?: string;
116
- isGroup: boolean;
117
- participants: string[];
118
- service?: string;
119
- lastMessageDate?: number;
120
- }
121
- /**
122
- * iMessage message information
123
- */
124
- export interface IMessageMessage {
125
- id: string;
126
- chatId: string;
127
- guid?: string;
128
- text?: string;
129
- sender: string;
130
- isFromMe: boolean;
131
- date: number;
132
- dateRead?: number;
133
- dateDelivered?: number;
134
- attachments?: IMessageAttachment[];
135
- }
136
- /**
137
- * iMessage attachment information
138
- */
139
- export interface IMessageAttachment {
140
- id: string;
141
- filename?: string;
142
- mimeType?: string;
143
- path?: string;
144
- size?: number;
145
- }
146
- /**
147
- * Probes the iMessage RPC to check connectivity
148
- */
149
- export declare function probeIMessageRpc(params: {
150
- cliPath?: string;
151
- dbPath?: string;
152
- timeoutMs?: number;
153
- }): Promise<{
154
- ok: boolean;
155
- error?: string;
156
- version?: string;
157
- }>;
158
- /**
159
- * Lists all contacts via iMessage RPC
160
- */
161
- export declare function listContacts(_client: IMessageRpcClient): Promise<IMessageContact[]>;
162
- /**
163
- * Lists all chats via iMessage RPC
164
- */
165
- export declare function listChats(client: IMessageRpcClient, params?: {
166
- limit?: number;
167
- }): Promise<IMessageChat[]>;
168
- /**
169
- * Gets recent messages from a chat
170
- */
171
- export declare function getMessages(client: IMessageRpcClient, params: {
172
- chatId: string | number;
173
- limit?: number;
174
- before?: number;
175
- attachments?: boolean;
176
- participants?: string[];
177
- start?: string;
178
- end?: string;
179
- }): Promise<IMessageMessage[]>;
180
- /**
181
- * Sends a message via iMessage RPC
182
- */
183
- export declare function sendIMessageRpc(client: IMessageRpcClient, params: {
184
- to: string;
185
- text: string;
186
- chatId?: string | number;
187
- chatIdentifier?: string;
188
- chatGuid?: string;
189
- attachments?: string[];
190
- service?: "iMessage" | "SMS";
191
- }): Promise<{
192
- ok: boolean;
193
- }>;
194
- /**
195
- * Gets chat info via iMessage RPC
196
- */
197
- export declare function getChatInfo(client: IMessageRpcClient, params: {
198
- chatId: string;
199
- }): Promise<IMessageChat | null>;
200
- /**
201
- * Gets contact info via iMessage RPC
202
- */
203
- export declare function getContactInfo(client: IMessageRpcClient, params: {
204
- identifier: string;
205
- }): Promise<IMessageContact | null>;
206
- //# sourceMappingURL=rpc.d.ts.map
package/dist/rpc.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
package/dist/rpc.js DELETED
@@ -1,393 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { homedir } from "node:os";
3
- import { resolve as resolvePath } from "node:path";
4
- import { createInterface } from "node:readline";
5
- /**
6
- * Default probe timeout in milliseconds
7
- */
8
- export const DEFAULT_PROBE_TIMEOUT_MS = 5000;
9
- /**
10
- * Default request timeout in milliseconds
11
- */
12
- export const DEFAULT_REQUEST_TIMEOUT_MS = 30000;
13
- /**
14
- * Resolves a path with ~ expansion
15
- */
16
- function resolveUserPath(path) {
17
- if (path.startsWith("~/")) {
18
- return resolvePath(homedir(), path.slice(2));
19
- }
20
- return resolvePath(path);
21
- }
22
- /**
23
- * iMessage RPC client for communicating with the imsg CLI tool
24
- */
25
- export class IMessageRpcClient {
26
- cliPath;
27
- dbPath;
28
- onNotification;
29
- onError;
30
- onClose;
31
- pending = new Map();
32
- closedPromise;
33
- closedResolve = null;
34
- child = null;
35
- reader = null;
36
- nextId = 1;
37
- started = false;
38
- constructor(opts = {}) {
39
- this.cliPath = opts.cliPath?.trim() || "imsg";
40
- this.dbPath = opts.dbPath?.trim() ? resolveUserPath(opts.dbPath) : undefined;
41
- this.onNotification = opts.onNotification;
42
- this.onError = opts.onError;
43
- this.onClose = opts.onClose;
44
- this.closedPromise = new Promise((resolve) => {
45
- this.closedResolve = resolve;
46
- });
47
- }
48
- /**
49
- * Starts the RPC client by spawning the CLI process
50
- */
51
- async start() {
52
- if (this.child) {
53
- return;
54
- }
55
- const args = ["rpc"];
56
- if (this.dbPath) {
57
- args.push("--db", this.dbPath);
58
- }
59
- const child = spawn(this.cliPath, args, {
60
- stdio: ["pipe", "pipe", "pipe"],
61
- });
62
- this.child = child;
63
- this.started = true;
64
- this.reader = createInterface({ input: child.stdout });
65
- this.reader.on("line", (line) => {
66
- const trimmed = line.trim();
67
- if (!trimmed) {
68
- return;
69
- }
70
- this.handleLine(trimmed);
71
- });
72
- child.stderr?.on("data", (chunk) => {
73
- const lines = chunk.toString().split(/\r?\n/);
74
- for (const line of lines) {
75
- if (!line.trim()) {
76
- continue;
77
- }
78
- this.onError?.(new Error(`imsg rpc stderr: ${line.trim()}`));
79
- }
80
- });
81
- child.on("error", (err) => {
82
- this.failAll(err instanceof Error ? err : new Error(String(err)));
83
- this.onError?.(err instanceof Error ? err : new Error(String(err)));
84
- this.closedResolve?.();
85
- });
86
- child.on("close", (code, signal) => {
87
- if (code !== 0 && code !== null) {
88
- const reason = signal ? `signal ${signal}` : `code ${code}`;
89
- this.failAll(new Error(`imsg rpc exited (${reason})`));
90
- }
91
- else {
92
- this.failAll(new Error("imsg rpc closed"));
93
- }
94
- this.onClose?.(code, signal);
95
- this.closedResolve?.();
96
- });
97
- }
98
- /**
99
- * Stops the RPC client
100
- */
101
- async stop() {
102
- if (!this.child) {
103
- return;
104
- }
105
- this.reader?.close();
106
- this.reader = null;
107
- this.child.stdin?.end();
108
- const child = this.child;
109
- this.child = null;
110
- await Promise.race([
111
- this.closedPromise,
112
- new Promise((resolve) => {
113
- setTimeout(() => {
114
- if (!child.killed) {
115
- child.kill("SIGTERM");
116
- }
117
- resolve();
118
- }, 500);
119
- }),
120
- ]);
121
- }
122
- /**
123
- * Waits for the RPC client to close
124
- */
125
- async waitForClose() {
126
- await this.closedPromise;
127
- }
128
- /**
129
- * Checks if the client is running
130
- */
131
- isRunning() {
132
- return this.child !== null && this.started;
133
- }
134
- /**
135
- * Makes an RPC request
136
- */
137
- async request(method, params, opts) {
138
- if (!this.child?.stdin) {
139
- throw new Error("imsg rpc not running");
140
- }
141
- const id = this.nextId++;
142
- const payload = {
143
- jsonrpc: "2.0",
144
- id,
145
- method,
146
- params: params ?? {},
147
- };
148
- const line = `${JSON.stringify(payload)}\n`;
149
- const timeoutMs = opts?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
150
- const response = new Promise((resolve, reject) => {
151
- const key = String(id);
152
- const timer = timeoutMs > 0
153
- ? setTimeout(() => {
154
- this.pending.delete(key);
155
- reject(new Error(`imsg rpc timeout (${method})`));
156
- }, timeoutMs)
157
- : undefined;
158
- this.pending.set(key, {
159
- resolve: (value) => resolve(value),
160
- reject,
161
- timer,
162
- });
163
- });
164
- this.child.stdin.write(line);
165
- return await response;
166
- }
167
- /**
168
- * Handles an incoming line from the RPC process
169
- */
170
- handleLine(line) {
171
- let parsed;
172
- try {
173
- parsed = JSON.parse(line);
174
- }
175
- catch (err) {
176
- const detail = err instanceof Error ? err.message : String(err);
177
- this.onError?.(new Error(`imsg rpc: failed to parse ${line}: ${detail}`));
178
- return;
179
- }
180
- // Handle response with ID
181
- if (parsed.id !== undefined && parsed.id !== null) {
182
- const key = String(parsed.id);
183
- const pending = this.pending.get(key);
184
- if (!pending) {
185
- return;
186
- }
187
- if (pending.timer) {
188
- clearTimeout(pending.timer);
189
- }
190
- this.pending.delete(key);
191
- if (parsed.error) {
192
- const baseMessage = parsed.error.message ?? "imsg rpc error";
193
- const details = parsed.error.data;
194
- const code = parsed.error.code;
195
- const suffixes = [];
196
- if (typeof code === "number") {
197
- suffixes.push(`code=${code}`);
198
- }
199
- if (details !== undefined) {
200
- const detailText = typeof details === "string" ? details : JSON.stringify(details, null, 2);
201
- if (detailText) {
202
- suffixes.push(detailText);
203
- }
204
- }
205
- const msg = suffixes.length > 0 ? `${baseMessage}: ${suffixes.join(" ")}` : baseMessage;
206
- pending.reject(new Error(msg));
207
- return;
208
- }
209
- pending.resolve(parsed.result);
210
- return;
211
- }
212
- // Handle notification
213
- if (parsed.method) {
214
- this.onNotification?.({
215
- method: parsed.method,
216
- params: parsed.params,
217
- });
218
- }
219
- }
220
- /**
221
- * Fails all pending requests
222
- */
223
- failAll(err) {
224
- for (const [key, pending] of this.pending.entries()) {
225
- if (pending.timer) {
226
- clearTimeout(pending.timer);
227
- }
228
- pending.reject(err);
229
- this.pending.delete(key);
230
- }
231
- }
232
- }
233
- /**
234
- * Creates and starts an iMessage RPC client
235
- */
236
- export async function createIMessageRpcClient(opts = {}) {
237
- const client = new IMessageRpcClient(opts);
238
- await client.start();
239
- return client;
240
- }
241
- /**
242
- * Probes the iMessage RPC to check connectivity
243
- */
244
- export async function probeIMessageRpc(params) {
245
- const client = new IMessageRpcClient({
246
- cliPath: params.cliPath,
247
- dbPath: params.dbPath,
248
- });
249
- try {
250
- await client.start();
251
- await client.request("chats.list", { limit: 1 }, {
252
- timeoutMs: params.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS,
253
- });
254
- await client.stop();
255
- return { ok: true };
256
- }
257
- catch (err) {
258
- await client.stop().catch(() => { });
259
- return {
260
- ok: false,
261
- error: err instanceof Error ? err.message : String(err),
262
- };
263
- }
264
- }
265
- /**
266
- * Lists all contacts via iMessage RPC
267
- */
268
- export async function listContacts(_client) {
269
- throw new Error("imsg RPC does not expose contacts");
270
- }
271
- /**
272
- * Lists all chats via iMessage RPC
273
- */
274
- export async function listChats(client, params = {}) {
275
- const response = await client.request("chats.list", {
276
- limit: params.limit ?? 20,
277
- });
278
- const chats = Array.isArray(response?.chats) ? response.chats : [];
279
- return chats.map((chat) => {
280
- const participants = Array.isArray(chat.participants)
281
- ? chat.participants.filter((entry) => typeof entry === "string" && entry.trim().length > 0)
282
- : [];
283
- const lastMessageAt = typeof chat.last_message_at === "string" ? Date.parse(chat.last_message_at) : Number.NaN;
284
- return {
285
- id: typeof chat.id === "string" || typeof chat.id === "number" ? String(chat.id) : "",
286
- chatIdentifier: typeof chat.identifier === "string" ? chat.identifier : "",
287
- guid: typeof chat.guid === "string" ? chat.guid : undefined,
288
- displayName: typeof chat.name === "string" && chat.name.trim().length > 0 ? chat.name.trim() : undefined,
289
- isGroup: Boolean(chat.is_group),
290
- participants,
291
- service: typeof chat.service === "string" ? chat.service : undefined,
292
- lastMessageDate: Number.isFinite(lastMessageAt) ? lastMessageAt : undefined,
293
- };
294
- });
295
- }
296
- /**
297
- * Gets recent messages from a chat
298
- */
299
- export async function getMessages(client, params) {
300
- const chatId = typeof params.chatId === "number" ? params.chatId : Number.parseInt(String(params.chatId), 10);
301
- if (!Number.isFinite(chatId)) {
302
- throw new Error("chatId must be numeric for imsg history requests");
303
- }
304
- const response = await client.request("messages.history", {
305
- chat_id: chatId,
306
- limit: params.limit,
307
- attachments: params.attachments,
308
- participants: params.participants,
309
- start: params.start,
310
- end: params.end,
311
- });
312
- const messages = Array.isArray(response?.messages) ? response.messages : [];
313
- return messages.map((message) => {
314
- const createdAt = typeof message.created_at === "string" ? Date.parse(message.created_at) : Number.NaN;
315
- const deliveredAt = typeof message.date_delivered === "string" ? Date.parse(message.date_delivered) : Number.NaN;
316
- const readAt = typeof message.date_read === "string" ? Date.parse(message.date_read) : Number.NaN;
317
- const attachments = Array.isArray(message.attachments)
318
- ? message.attachments.reduce((acc, attachment) => {
319
- if (!attachment || typeof attachment !== "object") {
320
- return acc;
321
- }
322
- const raw = attachment;
323
- acc.push({
324
- id: typeof raw.filename === "string" && raw.filename.trim().length > 0
325
- ? raw.filename.trim()
326
- : typeof raw.original_path === "string"
327
- ? raw.original_path
328
- : "",
329
- filename: typeof raw.filename === "string" ? raw.filename : undefined,
330
- mimeType: typeof raw.mime_type === "string" ? raw.mime_type : undefined,
331
- path: typeof raw.original_path === "string" ? raw.original_path : undefined,
332
- size: typeof raw.total_bytes === "number"
333
- ? raw.total_bytes
334
- : typeof raw.total_bytes === "string"
335
- ? Number.parseInt(raw.total_bytes, 10)
336
- : undefined,
337
- });
338
- return acc;
339
- }, [])
340
- : [];
341
- return {
342
- id: typeof message.id === "string" || typeof message.id === "number" ? String(message.id) : "",
343
- chatId: typeof message.chat_id === "string" || typeof message.chat_id === "number"
344
- ? String(message.chat_id)
345
- : "",
346
- guid: typeof message.guid === "string" ? message.guid : undefined,
347
- text: typeof message.text === "string" ? message.text : "",
348
- sender: typeof message.sender === "string" ? message.sender : "",
349
- isFromMe: Boolean(message.is_from_me),
350
- date: Number.isFinite(createdAt) ? createdAt : 0,
351
- dateRead: Number.isFinite(readAt) ? readAt : undefined,
352
- dateDelivered: Number.isFinite(deliveredAt) ? deliveredAt : undefined,
353
- attachments,
354
- };
355
- });
356
- }
357
- /**
358
- * Sends a message via iMessage RPC
359
- */
360
- export async function sendIMessageRpc(client, params) {
361
- const file = Array.isArray(params.attachments) && params.attachments.length > 0
362
- ? params.attachments[0]
363
- : undefined;
364
- const service = params.service === "iMessage" ? "imessage" : params.service === "SMS" ? "sms" : "auto";
365
- const result = await client.request("send", {
366
- to: params.to,
367
- text: params.text,
368
- file,
369
- service,
370
- chat_id: params.chatId,
371
- chat_identifier: params.chatIdentifier,
372
- chat_guid: params.chatGuid,
373
- });
374
- return { ok: result?.ok !== false };
375
- }
376
- /**
377
- * Gets chat info via iMessage RPC
378
- */
379
- export async function getChatInfo(client, params) {
380
- const chats = await listChats(client, { limit: 100 });
381
- return (chats.find((chat) => chat.id === params.chatId ||
382
- chat.chatIdentifier === params.chatId ||
383
- chat.guid === params.chatId) ?? null);
384
- }
385
- /**
386
- * Gets contact info via iMessage RPC
387
- */
388
- export async function getContactInfo(client, params) {
389
- void client;
390
- void params;
391
- throw new Error("imsg RPC does not expose contacts");
392
- }
393
- //# sourceMappingURL=rpc.js.map
package/dist/rpc.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}