@elizaos/plugin-imessage 2.0.0-alpha.3 → 2.0.0-alpha.5

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 (52) hide show
  1. package/dist/accounts.d.ts +135 -0
  2. package/dist/accounts.d.ts.map +1 -0
  3. package/dist/accounts.js +209 -0
  4. package/dist/accounts.js.map +1 -0
  5. package/dist/actions/index.d.ts +5 -0
  6. package/dist/actions/index.d.ts.map +1 -0
  7. package/{src/actions/index.ts → dist/actions/index.js} +1 -1
  8. package/dist/actions/index.js.map +1 -0
  9. package/dist/actions/sendMessage.d.ts +6 -0
  10. package/dist/actions/sendMessage.d.ts.map +1 -0
  11. package/dist/actions/sendMessage.js +161 -0
  12. package/dist/actions/sendMessage.js.map +1 -0
  13. package/dist/config.d.ts +60 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +8 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/index.d.ts +23 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +2 -2
  20. package/dist/index.js.map +1 -0
  21. package/dist/providers/chatContext.d.ts +6 -0
  22. package/dist/providers/chatContext.d.ts.map +1 -0
  23. package/dist/providers/chatContext.js +63 -0
  24. package/dist/providers/chatContext.js.map +1 -0
  25. package/dist/providers/index.d.ts +5 -0
  26. package/dist/providers/index.d.ts.map +1 -0
  27. package/{src/providers/index.ts → dist/providers/index.js} +1 -1
  28. package/dist/providers/index.js.map +1 -0
  29. package/dist/rpc.d.ts +194 -0
  30. package/dist/rpc.d.ts.map +1 -0
  31. package/dist/rpc.js +307 -0
  32. package/dist/rpc.js.map +1 -0
  33. package/dist/service.d.ts +71 -0
  34. package/dist/service.d.ts.map +1 -0
  35. package/dist/service.js +432 -0
  36. package/dist/service.js.map +1 -0
  37. package/dist/types.d.ts +163 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +136 -0
  40. package/dist/types.js.map +1 -0
  41. package/package.json +64 -3
  42. package/__tests__/integration.test.ts +0 -548
  43. package/build.ts +0 -16
  44. package/src/accounts.ts +0 -379
  45. package/src/actions/sendMessage.ts +0 -218
  46. package/src/config.ts +0 -82
  47. package/src/index.ts +0 -113
  48. package/src/providers/chatContext.ts +0 -86
  49. package/src/rpc.ts +0 -485
  50. package/src/service.ts +0 -589
  51. package/src/types.ts +0 -291
  52. package/tsconfig.json +0 -20
@@ -0,0 +1,23 @@
1
+ /**
2
+ * iMessage Plugin for ElizaOS
3
+ *
4
+ * Provides iMessage integration for ElizaOS agents on macOS.
5
+ * Uses AppleScript and/or CLI tools to send and receive messages.
6
+ */
7
+ import type { Plugin } from "@elizaos/core";
8
+ import { sendMessage } from "./actions/index.js";
9
+ import { chatContextProvider } from "./providers/index.js";
10
+ import { IMessageService, parseChatsFromAppleScript, parseMessagesFromAppleScript } from "./service.js";
11
+ export * from "./types.js";
12
+ export { IMessageService, parseMessagesFromAppleScript, parseChatsFromAppleScript, };
13
+ export { sendMessage };
14
+ export { chatContextProvider };
15
+ export { DEFAULT_ACCOUNT_ID, type IMessageAccountConfig, type IMessageGroupConfig, type IMessageMultiAccountConfig, isIMessageMentionRequired, isIMessageUserAllowed, isMultiAccountEnabled, listEnabledIMessageAccounts, listIMessageAccountIds, normalizeAccountId, type ResolvedIMessageAccount, resolveDefaultIMessageAccountId, resolveIMessageAccount, resolveIMessageGroupConfig, } from "./accounts.js";
16
+ export { createIMessageRpcClient, DEFAULT_PROBE_TIMEOUT_MS, DEFAULT_REQUEST_TIMEOUT_MS, getChatInfo, getContactInfo, getMessages, type IMessageAttachment, type IMessageChat, type IMessageContact, type IMessageMessage, IMessageRpcClient, type IMessageRpcClientOptions, type IMessageRpcError, type IMessageRpcNotification, type IMessageRpcResponse, listChats, listContacts, probeIMessageRpc, sendIMessageRpc, } from "./rpc.js";
17
+ /**
18
+ * iMessage plugin for ElizaOS agents.
19
+ */
20
+ declare const imessagePlugin: Plugin;
21
+ export default imessagePlugin;
22
+ export type { IMessageConfig, IMessageReactionNotificationMode, } from "./config.js";
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,4BAA4B,EAC7B,MAAM,cAAc,CAAC;AAGtB,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,yBAAyB,GAC1B,CAAC;AACF,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAG/B,OAAO,EACL,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAC/B,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,+BAA+B,EAC/B,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,WAAW,EACX,cAAc,EACd,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,QAAA,MAAM,cAAc,EAAE,MAmCrB,CAAC;AAEF,eAAe,cAAc,CAAC;AAG9B,YAAY,EACV,cAAc,EACd,gCAAgC,GACjC,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -8,10 +8,10 @@ import { platform } from "node:os";
8
8
  import { logger } from "@elizaos/core";
9
9
  import { sendMessage } from "./actions/index.js";
10
10
  import { chatContextProvider } from "./providers/index.js";
11
- import { IMessageService } from "./service.js";
11
+ import { IMessageService, parseChatsFromAppleScript, parseMessagesFromAppleScript, } from "./service.js";
12
12
  // Re-export types and service
13
13
  export * from "./types.js";
14
- export { IMessageService };
14
+ export { IMessageService, parseMessagesFromAppleScript, parseChatsFromAppleScript, };
15
15
  export { sendMessage };
16
16
  export { chatContextProvider };
17
17
  // Account management exports
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,8BAA8B;AAC9B,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,yBAAyB,GAC1B,CAAC;AACF,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,CAAC;AAE/B,6BAA6B;AAC7B,OAAO,EACL,kBAAkB,EAIlB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAElB,+BAA+B,EAC/B,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAEvB,qBAAqB;AACrB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,WAAW,EACX,cAAc,EACd,WAAW,EAKX,iBAAiB,EAKjB,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,cAAc,GAAW;IAC7B,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,iDAAiD;IAE9D,QAAQ,EAAE,CAAC,eAAe,CAAC;IAC3B,OAAO,EAAE,CAAC,WAAW,CAAC;IACtB,SAAS,EAAE,CAAC,mBAAmB,CAAC;IAChC,KAAK,EAAE,EAAE;IAET,IAAI,EAAE,KAAK,EACT,MAA8B,EAC9B,QAAuB,EACR,EAAE;QACjB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAE/C,MAAM,OAAO,GAAG,QAAQ,EAAE,KAAK,QAAQ,CAAC;QAExC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,iBAAiB,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,CACT,iBAAiB,MAAM,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,gBAAgB,EAAE,CACjG,CAAC;QACF,MAAM,CAAC,IAAI,CACT,kBAAkB,MAAM,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,SAAS,EAAE,CAC7F,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CACT,2FAA2F,CAC5F,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Chat context provider for the iMessage plugin.
3
+ */
4
+ import type { Provider } from "@elizaos/core";
5
+ export declare const chatContextProvider: Provider;
6
+ //# sourceMappingURL=chatContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatContext.d.ts","sourceRoot":"","sources":["../../src/providers/chatContext.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAGV,QAAQ,EAGT,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,mBAAmB,EAAE,QAuEjC,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Chat context provider for the iMessage plugin.
3
+ */
4
+ import { IMESSAGE_SERVICE_NAME } from "../types.js";
5
+ export const chatContextProvider = {
6
+ name: "imessageChatContext",
7
+ description: "Provides information about the current iMessage chat context",
8
+ get: async (runtime, message, state) => {
9
+ // Only provide context for iMessage messages
10
+ if (message.content.source !== "imessage") {
11
+ return {
12
+ data: {},
13
+ values: {},
14
+ text: "",
15
+ };
16
+ }
17
+ const imessageService = runtime.getService(IMESSAGE_SERVICE_NAME);
18
+ if (!imessageService || !imessageService.isConnected()) {
19
+ return {
20
+ data: { connected: false },
21
+ values: { connected: false },
22
+ text: "",
23
+ };
24
+ }
25
+ const agentName = state?.agentName || "The agent";
26
+ const stateData = (state?.data || {});
27
+ const handle = stateData.handle;
28
+ const chatId = stateData.chatId;
29
+ const chatType = stateData.chatType;
30
+ const displayName = stateData.displayName;
31
+ let chatDescription = "";
32
+ if (chatType === "group") {
33
+ chatDescription = displayName
34
+ ? `group chat "${displayName}"`
35
+ : "a group chat";
36
+ }
37
+ else {
38
+ chatDescription = handle
39
+ ? `direct message with ${handle}`
40
+ : "a direct message";
41
+ }
42
+ const responseText = `${agentName} is chatting via iMessage in ${chatDescription}. ` +
43
+ "iMessage supports text messages and attachments.";
44
+ return {
45
+ data: {
46
+ handle,
47
+ chatId,
48
+ chatType: chatType || "direct",
49
+ displayName,
50
+ connected: true,
51
+ platform: "imessage",
52
+ },
53
+ values: {
54
+ handle,
55
+ chatId,
56
+ chatType: chatType || "direct",
57
+ displayName,
58
+ },
59
+ text: responseText,
60
+ };
61
+ },
62
+ };
63
+ //# sourceMappingURL=chatContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatContext.js","sourceRoot":"","sources":["../../src/providers/chatContext.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,CAAC,MAAM,mBAAmB,GAAa;IAC3C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,8DAA8D;IAE3E,GAAG,EAAE,KAAK,EACR,OAAsB,EACtB,OAAe,EACf,KAAY,EACa,EAAE;QAC3B,6CAA6C;QAC7C,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1C,OAAO;gBACL,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,IAAI,EAAE,EAAE;aACT,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CACxC,qBAAqB,CACtB,CAAC;QAEF,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC;YACvD,OAAO;gBACL,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;gBAC1B,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;gBAC5B,IAAI,EAAE,EAAE;aACT,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,WAAW,CAAC;QAClD,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAA4B,CAAC;QAEjE,MAAM,MAAM,GAAG,SAAS,CAAC,MAA4B,CAAC;QACtD,MAAM,MAAM,GAAG,SAAS,CAAC,MAA4B,CAAC;QACtD,MAAM,QAAQ,GAAG,SAAS,CAAC,QAA8B,CAAC;QAC1D,MAAM,WAAW,GAAG,SAAS,CAAC,WAAiC,CAAC;QAEhE,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,eAAe,GAAG,WAAW;gBAC3B,CAAC,CAAC,eAAe,WAAW,GAAG;gBAC/B,CAAC,CAAC,cAAc,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,MAAM;gBACtB,CAAC,CAAC,uBAAuB,MAAM,EAAE;gBACjC,CAAC,CAAC,kBAAkB,CAAC;QACzB,CAAC;QAED,MAAM,YAAY,GAChB,GAAG,SAAS,gCAAgC,eAAe,IAAI;YAC/D,kDAAkD,CAAC;QAErD,OAAO;YACL,IAAI,EAAE;gBACJ,MAAM;gBACN,MAAM;gBACN,QAAQ,EAAE,QAAQ,IAAI,QAAQ;gBAC9B,WAAW;gBACX,SAAS,EAAE,IAAI;gBACf,QAAQ,EAAE,UAAU;aACrB;YACD,MAAM,EAAE;gBACN,MAAM;gBACN,MAAM;gBACN,QAAQ,EAAE,QAAQ,IAAI,QAAQ;gBAC9B,WAAW;aACZ;YACD,IAAI,EAAE,YAAY;SACnB,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * iMessage plugin providers.
3
+ */
4
+ export { chatContextProvider } from "./chatContext.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * iMessage plugin providers.
3
3
  */
4
-
5
4
  export { chatContextProvider } from "./chatContext.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/rpc.d.ts ADDED
@@ -0,0 +1,194 @@
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
+ displayName?: string;
115
+ isGroup: boolean;
116
+ participants: string[];
117
+ lastMessageDate?: number;
118
+ }
119
+ /**
120
+ * iMessage message information
121
+ */
122
+ export interface IMessageMessage {
123
+ id: string;
124
+ chatId: string;
125
+ text?: string;
126
+ sender: string;
127
+ isFromMe: boolean;
128
+ date: number;
129
+ dateRead?: number;
130
+ dateDelivered?: number;
131
+ attachments?: IMessageAttachment[];
132
+ }
133
+ /**
134
+ * iMessage attachment information
135
+ */
136
+ export interface IMessageAttachment {
137
+ id: string;
138
+ filename?: string;
139
+ mimeType?: string;
140
+ path?: string;
141
+ size?: number;
142
+ }
143
+ /**
144
+ * Probes the iMessage RPC to check connectivity
145
+ */
146
+ export declare function probeIMessageRpc(params: {
147
+ cliPath?: string;
148
+ dbPath?: string;
149
+ timeoutMs?: number;
150
+ }): Promise<{
151
+ ok: boolean;
152
+ error?: string;
153
+ version?: string;
154
+ }>;
155
+ /**
156
+ * Lists all contacts via iMessage RPC
157
+ */
158
+ export declare function listContacts(client: IMessageRpcClient): Promise<IMessageContact[]>;
159
+ /**
160
+ * Lists all chats via iMessage RPC
161
+ */
162
+ export declare function listChats(client: IMessageRpcClient): Promise<IMessageChat[]>;
163
+ /**
164
+ * Gets recent messages from a chat
165
+ */
166
+ export declare function getMessages(client: IMessageRpcClient, params: {
167
+ chatId: string;
168
+ limit?: number;
169
+ before?: number;
170
+ }): Promise<IMessageMessage[]>;
171
+ /**
172
+ * Sends a message via iMessage RPC
173
+ */
174
+ export declare function sendIMessageRpc(client: IMessageRpcClient, params: {
175
+ to: string;
176
+ text: string;
177
+ attachments?: string[];
178
+ service?: "iMessage" | "SMS";
179
+ }): Promise<{
180
+ messageId: string;
181
+ }>;
182
+ /**
183
+ * Gets chat info via iMessage RPC
184
+ */
185
+ export declare function getChatInfo(client: IMessageRpcClient, params: {
186
+ chatId: string;
187
+ }): Promise<IMessageChat | null>;
188
+ /**
189
+ * Gets contact info via iMessage RPC
190
+ */
191
+ export declare function getContactInfo(client: IMessageRpcClient, params: {
192
+ identifier: string;
193
+ }): Promise<IMessageContact | null>;
194
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}
package/dist/rpc.js ADDED
@@ -0,0 +1,307 @@
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()
41
+ ? resolveUserPath(opts.dbPath)
42
+ : undefined;
43
+ this.onNotification = opts.onNotification;
44
+ this.onError = opts.onError;
45
+ this.onClose = opts.onClose;
46
+ this.closedPromise = new Promise((resolve) => {
47
+ this.closedResolve = resolve;
48
+ });
49
+ }
50
+ /**
51
+ * Starts the RPC client by spawning the CLI process
52
+ */
53
+ async start() {
54
+ if (this.child) {
55
+ return;
56
+ }
57
+ const args = ["rpc"];
58
+ if (this.dbPath) {
59
+ args.push("--db", this.dbPath);
60
+ }
61
+ const child = spawn(this.cliPath, args, {
62
+ stdio: ["pipe", "pipe", "pipe"],
63
+ });
64
+ this.child = child;
65
+ this.started = true;
66
+ this.reader = createInterface({ input: child.stdout });
67
+ this.reader.on("line", (line) => {
68
+ const trimmed = line.trim();
69
+ if (!trimmed) {
70
+ return;
71
+ }
72
+ this.handleLine(trimmed);
73
+ });
74
+ child.stderr?.on("data", (chunk) => {
75
+ const lines = chunk.toString().split(/\r?\n/);
76
+ for (const line of lines) {
77
+ if (!line.trim()) {
78
+ continue;
79
+ }
80
+ this.onError?.(new Error(`imsg rpc stderr: ${line.trim()}`));
81
+ }
82
+ });
83
+ child.on("error", (err) => {
84
+ this.failAll(err instanceof Error ? err : new Error(String(err)));
85
+ this.onError?.(err instanceof Error ? err : new Error(String(err)));
86
+ this.closedResolve?.();
87
+ });
88
+ child.on("close", (code, signal) => {
89
+ if (code !== 0 && code !== null) {
90
+ const reason = signal ? `signal ${signal}` : `code ${code}`;
91
+ this.failAll(new Error(`imsg rpc exited (${reason})`));
92
+ }
93
+ else {
94
+ this.failAll(new Error("imsg rpc closed"));
95
+ }
96
+ this.onClose?.(code, signal);
97
+ this.closedResolve?.();
98
+ });
99
+ }
100
+ /**
101
+ * Stops the RPC client
102
+ */
103
+ async stop() {
104
+ if (!this.child) {
105
+ return;
106
+ }
107
+ this.reader?.close();
108
+ this.reader = null;
109
+ this.child.stdin?.end();
110
+ const child = this.child;
111
+ this.child = null;
112
+ await Promise.race([
113
+ this.closedPromise,
114
+ new Promise((resolve) => {
115
+ setTimeout(() => {
116
+ if (!child.killed) {
117
+ child.kill("SIGTERM");
118
+ }
119
+ resolve();
120
+ }, 500);
121
+ }),
122
+ ]);
123
+ }
124
+ /**
125
+ * Waits for the RPC client to close
126
+ */
127
+ async waitForClose() {
128
+ await this.closedPromise;
129
+ }
130
+ /**
131
+ * Checks if the client is running
132
+ */
133
+ isRunning() {
134
+ return this.child !== null && this.started;
135
+ }
136
+ /**
137
+ * Makes an RPC request
138
+ */
139
+ async request(method, params, opts) {
140
+ if (!this.child || !this.child.stdin) {
141
+ throw new Error("imsg rpc not running");
142
+ }
143
+ const id = this.nextId++;
144
+ const payload = {
145
+ jsonrpc: "2.0",
146
+ id,
147
+ method,
148
+ params: params ?? {},
149
+ };
150
+ const line = `${JSON.stringify(payload)}\n`;
151
+ const timeoutMs = opts?.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
152
+ const response = new Promise((resolve, reject) => {
153
+ const key = String(id);
154
+ const timer = timeoutMs > 0
155
+ ? setTimeout(() => {
156
+ this.pending.delete(key);
157
+ reject(new Error(`imsg rpc timeout (${method})`));
158
+ }, timeoutMs)
159
+ : undefined;
160
+ this.pending.set(key, {
161
+ resolve: (value) => resolve(value),
162
+ reject,
163
+ timer,
164
+ });
165
+ });
166
+ this.child.stdin.write(line);
167
+ return await response;
168
+ }
169
+ /**
170
+ * Handles an incoming line from the RPC process
171
+ */
172
+ handleLine(line) {
173
+ let parsed;
174
+ try {
175
+ parsed = JSON.parse(line);
176
+ }
177
+ catch (err) {
178
+ const detail = err instanceof Error ? err.message : String(err);
179
+ this.onError?.(new Error(`imsg rpc: failed to parse ${line}: ${detail}`));
180
+ return;
181
+ }
182
+ // Handle response with ID
183
+ if (parsed.id !== undefined && parsed.id !== null) {
184
+ const key = String(parsed.id);
185
+ const pending = this.pending.get(key);
186
+ if (!pending) {
187
+ return;
188
+ }
189
+ if (pending.timer) {
190
+ clearTimeout(pending.timer);
191
+ }
192
+ this.pending.delete(key);
193
+ if (parsed.error) {
194
+ const baseMessage = parsed.error.message ?? "imsg rpc error";
195
+ const details = parsed.error.data;
196
+ const code = parsed.error.code;
197
+ const suffixes = [];
198
+ if (typeof code === "number") {
199
+ suffixes.push(`code=${code}`);
200
+ }
201
+ if (details !== undefined) {
202
+ const detailText = typeof details === "string"
203
+ ? details
204
+ : JSON.stringify(details, null, 2);
205
+ if (detailText) {
206
+ suffixes.push(detailText);
207
+ }
208
+ }
209
+ const msg = suffixes.length > 0
210
+ ? `${baseMessage}: ${suffixes.join(" ")}`
211
+ : baseMessage;
212
+ pending.reject(new Error(msg));
213
+ return;
214
+ }
215
+ pending.resolve(parsed.result);
216
+ return;
217
+ }
218
+ // Handle notification
219
+ if (parsed.method) {
220
+ this.onNotification?.({
221
+ method: parsed.method,
222
+ params: parsed.params,
223
+ });
224
+ }
225
+ }
226
+ /**
227
+ * Fails all pending requests
228
+ */
229
+ failAll(err) {
230
+ for (const [key, pending] of this.pending.entries()) {
231
+ if (pending.timer) {
232
+ clearTimeout(pending.timer);
233
+ }
234
+ pending.reject(err);
235
+ this.pending.delete(key);
236
+ }
237
+ }
238
+ }
239
+ /**
240
+ * Creates and starts an iMessage RPC client
241
+ */
242
+ export async function createIMessageRpcClient(opts = {}) {
243
+ const client = new IMessageRpcClient(opts);
244
+ await client.start();
245
+ return client;
246
+ }
247
+ /**
248
+ * Probes the iMessage RPC to check connectivity
249
+ */
250
+ export async function probeIMessageRpc(params) {
251
+ const client = new IMessageRpcClient({
252
+ cliPath: params.cliPath,
253
+ dbPath: params.dbPath,
254
+ });
255
+ try {
256
+ await client.start();
257
+ const result = await client.request("ping", undefined, {
258
+ timeoutMs: params.timeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS,
259
+ });
260
+ await client.stop();
261
+ return { ok: true, version: result?.version };
262
+ }
263
+ catch (err) {
264
+ await client.stop().catch(() => { });
265
+ return {
266
+ ok: false,
267
+ error: err instanceof Error ? err.message : String(err),
268
+ };
269
+ }
270
+ }
271
+ /**
272
+ * Lists all contacts via iMessage RPC
273
+ */
274
+ export async function listContacts(client) {
275
+ return client.request("listContacts");
276
+ }
277
+ /**
278
+ * Lists all chats via iMessage RPC
279
+ */
280
+ export async function listChats(client) {
281
+ return client.request("listChats");
282
+ }
283
+ /**
284
+ * Gets recent messages from a chat
285
+ */
286
+ export async function getMessages(client, params) {
287
+ return client.request("getMessages", params);
288
+ }
289
+ /**
290
+ * Sends a message via iMessage RPC
291
+ */
292
+ export async function sendIMessageRpc(client, params) {
293
+ return client.request("send", params);
294
+ }
295
+ /**
296
+ * Gets chat info via iMessage RPC
297
+ */
298
+ export async function getChatInfo(client, params) {
299
+ return client.request("getChatInfo", params);
300
+ }
301
+ /**
302
+ * Gets contact info via iMessage RPC
303
+ */
304
+ export async function getContactInfo(client, params) {
305
+ return client.request("getContactInfo", params);
306
+ }
307
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"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"}