@mono-agent/whatsapp-adapter 0.1.0

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.
package/dist/config.js ADDED
@@ -0,0 +1,117 @@
1
+ import { defineFieldGroup, layerJsonOntoEnv, readBoolean, readChoice, readCsv, readJsonSection, readSettingsJson, } from "@mono-agent/settings";
2
+ const WHATSAPP_GROUP_MODES = ["mention", "any"];
3
+ export class WhatsAppAdapterConfigError extends Error {
4
+ code;
5
+ details;
6
+ constructor(code, message, details = {}) {
7
+ super(message);
8
+ this.name = "WhatsAppAdapterConfigError";
9
+ this.code = code;
10
+ this.details = { ...details, code };
11
+ }
12
+ }
13
+ const invalidConfig = (message, details) => new WhatsAppAdapterConfigError("invalid_config", message, details);
14
+ const missingRequiredConfig = (message, details) => new WhatsAppAdapterConfigError("missing_required_config", message, details);
15
+ export const whatsappFieldGroup = defineFieldGroup({
16
+ id: "whatsapp",
17
+ label: "WhatsApp",
18
+ description: "Optional WhatsApp adapter allowlist and group trigger configuration.",
19
+ fields: [
20
+ {
21
+ id: "whatsapp.allowedChatJids",
22
+ label: "Allowed chat JIDs",
23
+ description: "Comma-separated list of chat JIDs the adapter will respond to.",
24
+ kind: "csv",
25
+ placeholder: "123@s.whatsapp.net, 456@g.us",
26
+ path: ["whatsapp", "allowedChatJids"],
27
+ },
28
+ {
29
+ id: "whatsapp.allowAllChats",
30
+ label: "Allow all chats",
31
+ description: "Explicitly permit every chat. Leave off when using an allowlist.",
32
+ kind: "switch",
33
+ path: ["whatsapp", "allowAllChats"],
34
+ },
35
+ {
36
+ id: "whatsapp.groupMode",
37
+ label: "Group mode",
38
+ description: "Whether group messages require a configured bot mention or any group text may trigger.",
39
+ kind: "select",
40
+ options: [
41
+ { value: "mention", label: "mention" },
42
+ { value: "any", label: "any" },
43
+ ],
44
+ path: ["whatsapp", "groupMode"],
45
+ },
46
+ {
47
+ id: "whatsapp.botJids",
48
+ label: "Bot JIDs",
49
+ description: "Comma-separated JIDs that count as bot mentions in groups.",
50
+ kind: "csv",
51
+ placeholder: "123@s.whatsapp.net",
52
+ path: ["whatsapp", "botJids"],
53
+ },
54
+ {
55
+ id: "whatsapp.mentionTextAliases",
56
+ label: "Mention aliases",
57
+ description: "Comma-separated mention text aliases to strip from triggered messages.",
58
+ kind: "csv",
59
+ placeholder: "@agent, Assistant",
60
+ path: ["whatsapp", "mentionTextAliases"],
61
+ },
62
+ {
63
+ id: "whatsapp.stripMentionText",
64
+ label: "Strip mention text",
65
+ description: "Remove configured mention aliases before sending text to the responder.",
66
+ kind: "switch",
67
+ path: ["whatsapp", "stripMentionText"],
68
+ },
69
+ ],
70
+ });
71
+ export async function loadWhatsAppAdapterConfig(input) {
72
+ const json = input.json ?? (input.jsonPath === undefined ? {} : (await readSettingsJson(input.jsonPath)).json);
73
+ const env = layerWhatsAppJsonOntoEnv(json, input.env);
74
+ const allowedChatJids = readCsv(env.MONO_AGENT_WHATSAPP_ALLOWED_CHAT_JIDS);
75
+ const allowAllChats = readBoolean(env.MONO_AGENT_WHATSAPP_ALLOW_ALL_CHATS, "MONO_AGENT_WHATSAPP_ALLOW_ALL_CHATS", false, invalidConfig);
76
+ const groupMode = readChoice(env.MONO_AGENT_WHATSAPP_GROUP_MODE, "MONO_AGENT_WHATSAPP_GROUP_MODE", WHATSAPP_GROUP_MODES, "mention", invalidConfig);
77
+ const botJids = readCsv(env.MONO_AGENT_WHATSAPP_BOT_JIDS);
78
+ const mentionTextAliases = readCsv(env.MONO_AGENT_WHATSAPP_MENTION_TEXT_ALIASES);
79
+ const stripMentionText = readBoolean(env.MONO_AGENT_WHATSAPP_STRIP_MENTION_TEXT, "MONO_AGENT_WHATSAPP_STRIP_MENTION_TEXT", mentionTextAliases.length > 0, invalidConfig);
80
+ if (!allowAllChats && allowedChatJids.length === 0) {
81
+ throw missingRequiredConfig("WhatsApp adapter requires MONO_AGENT_WHATSAPP_ALLOWED_CHAT_JIDS or MONO_AGENT_WHATSAPP_ALLOW_ALL_CHATS=true.", { env: "MONO_AGENT_WHATSAPP_ALLOWED_CHAT_JIDS" });
82
+ }
83
+ return {
84
+ allowedChatJids,
85
+ allowAllChats,
86
+ trigger: {
87
+ groupMode,
88
+ botJids,
89
+ mentionTextAliases,
90
+ stripMentionText,
91
+ },
92
+ };
93
+ }
94
+ export function redactWhatsAppAdapterConfig(config) {
95
+ return {
96
+ allowedChatJids: { count: config.allowedChatJids.length },
97
+ allowAllChats: config.allowAllChats,
98
+ trigger: {
99
+ groupMode: config.trigger.groupMode,
100
+ botJids: { count: config.trigger.botJids.length },
101
+ mentionTextAliases: { count: config.trigger.mentionTextAliases.length },
102
+ stripMentionText: config.trigger.stripMentionText,
103
+ },
104
+ };
105
+ }
106
+ function layerWhatsAppJsonOntoEnv(json, env) {
107
+ const section = readJsonSection(json, "whatsapp");
108
+ return layerJsonOntoEnv(env, [
109
+ { env: "MONO_AGENT_WHATSAPP_ALLOWED_CHAT_JIDS", value: section.allowedChatJids, kind: "csv" },
110
+ { env: "MONO_AGENT_WHATSAPP_ALLOW_ALL_CHATS", value: section.allowAllChats, kind: "boolean" },
111
+ { env: "MONO_AGENT_WHATSAPP_GROUP_MODE", value: section.groupMode },
112
+ { env: "MONO_AGENT_WHATSAPP_BOT_JIDS", value: section.botJids, kind: "csv" },
113
+ { env: "MONO_AGENT_WHATSAPP_MENTION_TEXT_ALIASES", value: section.mentionTextAliases, kind: "csv" },
114
+ { env: "MONO_AGENT_WHATSAPP_STRIP_MENTION_TEXT", value: section.stripMentionText, kind: "boolean" },
115
+ ]);
116
+ }
117
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { WhatsAppAdapter, WhatsAppMessageHandlingResult } from "./adapter.js";
2
+ import type { WhatsAppSocketLike } from "./types.js";
3
+ export interface WhatsAppEventRunnerOptions {
4
+ socket: WhatsAppSocketLike;
5
+ adapter: WhatsAppAdapter;
6
+ processHistory?: boolean;
7
+ saveCreds?: () => Promise<void> | void;
8
+ onQr?: (qr: string) => void | Promise<void>;
9
+ onConnectionUpdate?: (update: WhatsAppConnectionUpdate) => void | Promise<void>;
10
+ onMessageResult?: (result: WhatsAppMessageHandlingResult) => void | Promise<void>;
11
+ logger?: WhatsAppEventRunnerLogger;
12
+ }
13
+ export interface WhatsAppEventRunnerStartOptions {
14
+ signal?: AbortSignal;
15
+ }
16
+ export interface WhatsAppConnectionUpdate {
17
+ connection?: string;
18
+ receivedPendingNotifications?: boolean;
19
+ isNewLogin?: boolean;
20
+ isOnline?: boolean;
21
+ hasQr: boolean;
22
+ }
23
+ export interface WhatsAppEventRunnerLogger {
24
+ debug?(message: string, metadata?: Record<string, unknown>): void;
25
+ info?(message: string, metadata?: Record<string, unknown>): void;
26
+ warn?(message: string, metadata?: Record<string, unknown>): void;
27
+ error?(message: string, metadata?: Record<string, unknown>): void;
28
+ }
29
+ export declare class WhatsAppEventRunner {
30
+ private readonly socket;
31
+ private readonly adapter;
32
+ private readonly processHistory;
33
+ private readonly saveCreds;
34
+ private readonly onQr;
35
+ private readonly onConnectionUpdate;
36
+ private readonly onMessageResult;
37
+ private readonly logger;
38
+ private started;
39
+ private processing;
40
+ private cleanup;
41
+ private readonly handleMessagesUpsert;
42
+ private readonly handleCredsUpdate;
43
+ private readonly handleConnectionUpdate;
44
+ private readonly handleAbort;
45
+ constructor(options: WhatsAppEventRunnerOptions);
46
+ start(options?: WhatsAppEventRunnerStartOptions): void;
47
+ stop(): void;
48
+ idle(): Promise<void>;
49
+ private processMessagesUpsert;
50
+ private emitMessageResult;
51
+ }
52
+ //# sourceMappingURL=event-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-runner.d.ts","sourceRoot":"","sources":["../src/event-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,KAAK,EAAsB,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,6BAA6B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,CAAC,EAAE,yBAAyB,CAAC;CACpC;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACnE;AAOD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;IACrE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqD;IAC1E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAErB;IACd,OAAO,CAAC,QAAQ,CAAC,eAAe,CAElB;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAE/D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,OAAO,CAAsB;IAErC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CASnC;IAEF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAWhC;IAEF,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CA0BrC;IAEF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAE1B;gBAEU,OAAO,EAAE,0BAA0B;IAW/C,KAAK,CAAC,OAAO,GAAE,+BAAoC,GAAG,IAAI;IA0B1D,IAAI,IAAI,IAAI;IAUN,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAIb,qBAAqB;YAsBrB,iBAAiB;CAKhC"}
@@ -0,0 +1,174 @@
1
+ export class WhatsAppEventRunner {
2
+ socket;
3
+ adapter;
4
+ processHistory;
5
+ saveCreds;
6
+ onQr;
7
+ onConnectionUpdate;
8
+ onMessageResult;
9
+ logger;
10
+ started = false;
11
+ processing = Promise.resolve();
12
+ cleanup = [];
13
+ handleMessagesUpsert = (payload) => {
14
+ this.processing = this.processing.then(async () => {
15
+ await this.processMessagesUpsert(payload);
16
+ });
17
+ this.processing = this.processing.catch((error) => {
18
+ this.logger?.error?.("WhatsApp messages.upsert processing failed.", {
19
+ error: error instanceof Error ? error.message : String(error),
20
+ });
21
+ });
22
+ };
23
+ handleCredsUpdate = () => {
24
+ if (this.saveCreds === undefined) {
25
+ return;
26
+ }
27
+ Promise.resolve()
28
+ .then(async () => this.saveCreds?.())
29
+ .catch((error) => {
30
+ this.logger?.error?.("WhatsApp creds.update save failed.", {
31
+ error: error instanceof Error ? error.message : String(error),
32
+ });
33
+ });
34
+ };
35
+ handleConnectionUpdate = (payload) => {
36
+ const update = normalizeConnectionUpdate(payload);
37
+ this.logger?.info?.("WhatsApp connection update.", {
38
+ connection: update.connection,
39
+ receivedPendingNotifications: update.receivedPendingNotifications,
40
+ isNewLogin: update.isNewLogin,
41
+ isOnline: update.isOnline,
42
+ hasQr: update.hasQr,
43
+ });
44
+ const qr = qrFromConnectionUpdate(payload);
45
+ if (qr !== undefined && this.onQr !== undefined) {
46
+ Promise.resolve(this.onQr(qr)).catch((error) => {
47
+ this.logger?.error?.("WhatsApp QR callback failed.", {
48
+ error: error instanceof Error ? error.message : String(error),
49
+ });
50
+ });
51
+ }
52
+ if (this.onConnectionUpdate !== undefined) {
53
+ Promise.resolve(this.onConnectionUpdate(update)).catch((error) => {
54
+ this.logger?.error?.("WhatsApp connection update callback failed.", {
55
+ error: error instanceof Error ? error.message : String(error),
56
+ });
57
+ });
58
+ }
59
+ };
60
+ handleAbort = () => {
61
+ this.stop();
62
+ };
63
+ constructor(options) {
64
+ this.socket = options.socket;
65
+ this.adapter = options.adapter;
66
+ this.processHistory = options.processHistory === true;
67
+ this.saveCreds = options.saveCreds;
68
+ this.onQr = options.onQr;
69
+ this.onConnectionUpdate = options.onConnectionUpdate;
70
+ this.onMessageResult = options.onMessageResult;
71
+ this.logger = options.logger;
72
+ }
73
+ start(options = {}) {
74
+ if (this.started) {
75
+ return;
76
+ }
77
+ if (options.signal?.aborted === true) {
78
+ return;
79
+ }
80
+ const ev = this.socket.ev;
81
+ if (ev === undefined) {
82
+ throw new TypeError("WhatsAppEventRunner requires a socket with an event emitter.");
83
+ }
84
+ this.started = true;
85
+ ev.on("messages.upsert", this.handleMessagesUpsert);
86
+ ev.on("creds.update", this.handleCredsUpdate);
87
+ ev.on("connection.update", this.handleConnectionUpdate);
88
+ this.cleanup.push(() => removeListener(ev, "messages.upsert", this.handleMessagesUpsert));
89
+ this.cleanup.push(() => removeListener(ev, "creds.update", this.handleCredsUpdate));
90
+ this.cleanup.push(() => removeListener(ev, "connection.update", this.handleConnectionUpdate));
91
+ if (options.signal !== undefined) {
92
+ options.signal.addEventListener("abort", this.handleAbort, { once: true });
93
+ this.cleanup.push(() => options.signal?.removeEventListener("abort", this.handleAbort));
94
+ }
95
+ }
96
+ stop() {
97
+ if (!this.started) {
98
+ return;
99
+ }
100
+ for (const cleanup of this.cleanup.splice(0)) {
101
+ cleanup();
102
+ }
103
+ this.started = false;
104
+ }
105
+ async idle() {
106
+ await this.processing;
107
+ }
108
+ async processMessagesUpsert(payload) {
109
+ if (!isMessagesUpsertLike(payload)) {
110
+ await this.emitMessageResult({ kind: "ignored", reason: "non_message_update" });
111
+ return;
112
+ }
113
+ if (payload.type !== "notify" && !this.processHistory) {
114
+ await this.emitMessageResult({ kind: "ignored", reason: "history_sync_ignored" });
115
+ return;
116
+ }
117
+ for (const message of payload.messages ?? []) {
118
+ try {
119
+ const result = await this.adapter.handleMessage(message);
120
+ await this.emitMessageResult(result);
121
+ }
122
+ catch (error) {
123
+ const result = { kind: "error", error };
124
+ await this.emitMessageResult(result);
125
+ }
126
+ }
127
+ }
128
+ async emitMessageResult(result) {
129
+ if (this.onMessageResult !== undefined) {
130
+ await this.onMessageResult(result);
131
+ }
132
+ }
133
+ }
134
+ function isMessagesUpsertLike(value) {
135
+ if (!isRecord(value)) {
136
+ return false;
137
+ }
138
+ const messages = value.messages;
139
+ return messages === undefined || Array.isArray(messages);
140
+ }
141
+ function normalizeConnectionUpdate(payload) {
142
+ const record = isRecord(payload) ? payload : {};
143
+ const update = { hasQr: typeof record.qr === "string" };
144
+ if (typeof record.connection === "string") {
145
+ update.connection = record.connection;
146
+ }
147
+ if (typeof record.receivedPendingNotifications === "boolean") {
148
+ update.receivedPendingNotifications = record.receivedPendingNotifications;
149
+ }
150
+ if (typeof record.isNewLogin === "boolean") {
151
+ update.isNewLogin = record.isNewLogin;
152
+ }
153
+ if (typeof record.isOnline === "boolean") {
154
+ update.isOnline = record.isOnline;
155
+ }
156
+ return update;
157
+ }
158
+ function qrFromConnectionUpdate(payload) {
159
+ if (!isRecord(payload) || typeof payload.qr !== "string") {
160
+ return undefined;
161
+ }
162
+ return payload.qr;
163
+ }
164
+ function removeListener(ev, event, listener) {
165
+ if (typeof ev.off === "function") {
166
+ ev.off(event, listener);
167
+ return;
168
+ }
169
+ ev.removeListener?.(event, listener);
170
+ }
171
+ function isRecord(value) {
172
+ return typeof value === "object" && value !== null;
173
+ }
174
+ //# sourceMappingURL=event-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-runner.js","sourceRoot":"","sources":["../src/event-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type { AgentRequest, AgentResponder, AgentResponse, WhatsAppAdapterIgnoredReason, WhatsAppAdapterLogger, WhatsAppAdapterMessages, WhatsAppAdapterOptions, WhatsAppAdapterStreamOptions, WhatsAppGroupTriggerMode, WhatsAppMessageHandlingResult, WhatsAppRequestMetadata, WhatsAppTriggerKind, WhatsAppTriggerOptions, } from "./adapter.js";
2
+ export { WhatsAppAdapter } from "./adapter.js";
3
+ export type { WhatsAppMessageIgnoredReason, WhatsAppMessageNormalizationResult, } from "./message-normalizer.js";
4
+ export { isGroupJid, normalizeWhatsAppMessage } from "./message-normalizer.js";
5
+ export type { AgentMessageStream } from "@mono-agent/agent-contracts";
6
+ export type { WhatsAppMessageStreamLogger, WhatsAppMessageStreamOptions, } from "./message-stream.js";
7
+ export { WhatsAppMessageStream } from "./message-stream.js";
8
+ export { loadWhatsAppAdapterConfig, redactWhatsAppAdapterConfig, WhatsAppAdapterConfigError, whatsappFieldGroup, } from "./config.js";
9
+ export type { LoadWhatsAppAdapterConfigInput, RedactedWhatsAppAdapterConfig, WhatsAppAdapterConfig, WhatsAppAdapterConfigErrorCode, WhatsAppAdapterConfigErrorDetails, } from "./config.js";
10
+ export type { LongLike, WhatsAppChatKind, WhatsAppContextInfoLike, WhatsAppEventEmitterLike, WhatsAppJid, WhatsAppMessageContentLike, WhatsAppMessageKeyLike, WhatsAppRawMessage, WhatsAppSendMessageContent, WhatsAppSendMessageOptions, WhatsAppSentMessage, WhatsAppSocketLike, WhatsAppTextMessage, } from "./types.js";
11
+ export type { BaileysWhatsAppSocket, BaileysWhatsAppSocketOptions, } from "./baileys-socket.js";
12
+ export { createBaileysWhatsAppSocket } from "./baileys-socket.js";
13
+ export type { WhatsAppConnectionUpdate, WhatsAppEventRunnerLogger, WhatsAppEventRunnerOptions, WhatsAppEventRunnerStartOptions, } from "./event-runner.js";
14
+ export { WhatsAppEventRunner } from "./event-runner.js";
15
+ export { startWhatsAppAdapter } from "./start.js";
16
+ export type { StartWhatsAppAdapterOptions, WhatsAppAdapterStartLogger, WhatsAppAdapterStartResult, WhatsAppSocketFactory, } from "./start.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,4BAA4B,EAC5B,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,YAAY,EACV,4BAA4B,EAC5B,kCAAkC,GACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAE/E,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,8BAA8B,EAC9B,6BAA6B,EAC7B,qBAAqB,EACrB,8BAA8B,EAC9B,iCAAiC,GAClC,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,WAAW,EACX,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,YAAY,EACV,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,GAChC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { WhatsAppAdapter } from "./adapter.js";
2
+ export { isGroupJid, normalizeWhatsAppMessage } from "./message-normalizer.js";
3
+ export { WhatsAppMessageStream } from "./message-stream.js";
4
+ export { loadWhatsAppAdapterConfig, redactWhatsAppAdapterConfig, WhatsAppAdapterConfigError, whatsappFieldGroup, } from "./config.js";
5
+ export { createBaileysWhatsAppSocket } from "./baileys-socket.js";
6
+ export { WhatsAppEventRunner } from "./event-runner.js";
7
+ export { startWhatsAppAdapter } from "./start.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAM/C,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAO/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,aAAa,CAAC;AA6BrB,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAQlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { WhatsAppJid, WhatsAppRawMessage, WhatsAppTextMessage } from "./types.js";
2
+ export type WhatsAppMessageIgnoredReason = "from_self" | "missing_remote_jid" | "status_broadcast_ignored" | "broadcast_ignored" | "unsupported_message" | "empty_text";
3
+ export type WhatsAppMessageNormalizationResult = {
4
+ kind: "message";
5
+ message: WhatsAppTextMessage;
6
+ } | {
7
+ kind: "ignored";
8
+ reason: WhatsAppMessageIgnoredReason;
9
+ chatJid?: WhatsAppJid;
10
+ messageId?: string;
11
+ };
12
+ export declare function normalizeWhatsAppMessage(raw: WhatsAppRawMessage): WhatsAppMessageNormalizationResult;
13
+ export declare function isGroupJid(jid: WhatsAppJid): boolean;
14
+ //# sourceMappingURL=message-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-normalizer.d.ts","sourceRoot":"","sources":["../src/message-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,4BAA4B,GACpC,WAAW,GACX,oBAAoB,GACpB,0BAA0B,GAC1B,mBAAmB,GACnB,qBAAqB,GACrB,YAAY,CAAC;AAEjB,MAAM,MAAM,kCAAkC,GAC1C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,mBAAmB,CAAA;CAAE,GACjD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,4BAA4B,CAAC;IACrC,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,kBAAkB,GACtB,kCAAkC,CA8DpC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAEpD"}
@@ -0,0 +1,145 @@
1
+ export function normalizeWhatsAppMessage(raw) {
2
+ const key = raw.key ?? undefined;
3
+ const remoteJid = cleanJid(key?.remoteJid ?? undefined);
4
+ const messageId = cleanString(key?.id ?? undefined);
5
+ if (key?.fromMe === true) {
6
+ return ignored("from_self", remoteJid, messageId);
7
+ }
8
+ if (remoteJid === undefined) {
9
+ return ignored("missing_remote_jid", undefined, messageId);
10
+ }
11
+ if (isStatusJid(remoteJid)) {
12
+ return ignored("status_broadcast_ignored", remoteJid, messageId);
13
+ }
14
+ if (isBroadcastJid(remoteJid)) {
15
+ return ignored("broadcast_ignored", remoteJid, messageId);
16
+ }
17
+ const textResult = extractText(raw);
18
+ if (textResult.kind === "unsupported") {
19
+ return ignored("unsupported_message", remoteJid, messageId);
20
+ }
21
+ const text = textResult.text.trim();
22
+ if (text.length === 0) {
23
+ return ignored("empty_text", remoteJid, messageId);
24
+ }
25
+ const chatKind = isGroupJid(remoteJid) ? "group" : "direct";
26
+ const participantJid = chatKind === "group"
27
+ ? cleanJid(key?.participant ?? raw.participant ?? undefined)
28
+ : undefined;
29
+ const senderJid = chatKind === "group" ? participantJid : remoteJid;
30
+ const message = {
31
+ remoteJid,
32
+ chatJid: remoteJid,
33
+ chatKind,
34
+ text,
35
+ mentionedJids: textResult.mentionedJids,
36
+ raw,
37
+ };
38
+ if (senderJid !== undefined) {
39
+ message.senderJid = senderJid;
40
+ }
41
+ if (participantJid !== undefined) {
42
+ message.participantJid = participantJid;
43
+ }
44
+ if (messageId !== undefined) {
45
+ message.messageId = messageId;
46
+ }
47
+ const timestamp = normalizeTimestamp(raw.messageTimestamp);
48
+ if (timestamp !== undefined) {
49
+ message.timestamp = timestamp;
50
+ }
51
+ const pushName = cleanString(raw.pushName ?? undefined);
52
+ if (pushName !== undefined) {
53
+ message.pushName = pushName;
54
+ }
55
+ return { kind: "message", message };
56
+ }
57
+ export function isGroupJid(jid) {
58
+ return jid.endsWith("@g.us");
59
+ }
60
+ function ignored(reason, chatJid, messageId) {
61
+ const result = {
62
+ kind: "ignored",
63
+ reason,
64
+ };
65
+ if (chatJid !== undefined) {
66
+ result.chatJid = chatJid;
67
+ }
68
+ if (messageId !== undefined) {
69
+ result.messageId = messageId;
70
+ }
71
+ return result;
72
+ }
73
+ function extractText(raw) {
74
+ const content = raw.message ?? undefined;
75
+ if (content === undefined || content === null) {
76
+ return { kind: "unsupported" };
77
+ }
78
+ if (typeof content.conversation === "string") {
79
+ return { kind: "text", text: content.conversation, mentionedJids: [] };
80
+ }
81
+ const extendedText = content.extendedTextMessage ?? undefined;
82
+ if (extendedText !== undefined && extendedText !== null) {
83
+ const mentionedJids = normalizeMentionedJids(extendedText.contextInfo?.mentionedJid ?? undefined);
84
+ if (typeof extendedText.text === "string") {
85
+ return { kind: "text", text: extendedText.text, mentionedJids };
86
+ }
87
+ }
88
+ return { kind: "unsupported" };
89
+ }
90
+ function normalizeMentionedJids(mentionedJids) {
91
+ if (!Array.isArray(mentionedJids)) {
92
+ return [];
93
+ }
94
+ const normalized = [];
95
+ const seen = new Set();
96
+ for (const jid of mentionedJids) {
97
+ const clean = cleanJid(jid);
98
+ if (clean !== undefined && !seen.has(clean)) {
99
+ normalized.push(clean);
100
+ seen.add(clean);
101
+ }
102
+ }
103
+ return normalized;
104
+ }
105
+ function cleanJid(jid) {
106
+ if (typeof jid !== "string") {
107
+ return undefined;
108
+ }
109
+ const trimmed = jid.trim();
110
+ return trimmed.length > 0 ? trimmed : undefined;
111
+ }
112
+ function cleanString(value) {
113
+ if (typeof value !== "string") {
114
+ return undefined;
115
+ }
116
+ const trimmed = value.trim();
117
+ return trimmed.length > 0 ? trimmed : undefined;
118
+ }
119
+ function isStatusJid(jid) {
120
+ return jid === "status@broadcast";
121
+ }
122
+ function isBroadcastJid(jid) {
123
+ return jid.endsWith("@broadcast") && !isStatusJid(jid);
124
+ }
125
+ function normalizeTimestamp(value) {
126
+ if (typeof value === "number" && Number.isFinite(value)) {
127
+ return value;
128
+ }
129
+ if (typeof value === "string") {
130
+ const parsed = Number(value);
131
+ return Number.isFinite(parsed) ? parsed : undefined;
132
+ }
133
+ if (typeof value === "object" && value !== null) {
134
+ if (typeof value.toNumber === "function") {
135
+ const parsed = value.toNumber();
136
+ return Number.isFinite(parsed) ? parsed : undefined;
137
+ }
138
+ if (typeof value.toString === "function") {
139
+ const parsed = Number(value.toString());
140
+ return Number.isFinite(parsed) ? parsed : undefined;
141
+ }
142
+ }
143
+ return undefined;
144
+ }
145
+ //# sourceMappingURL=message-normalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-normalizer.js","sourceRoot":"","sources":["../src/message-normalizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { type AgentMessageStream } from "@mono-agent/agent-contracts";
2
+ import type { WhatsAppJid, WhatsAppRawMessage, WhatsAppSocketLike } from "./types.js";
3
+ export interface WhatsAppMessageStreamOptions {
4
+ socket: WhatsAppSocketLike;
5
+ chatJid: WhatsAppJid;
6
+ initialStatusText?: string;
7
+ sendInitialStatus?: boolean;
8
+ maxMessageChars?: number;
9
+ quotedMessage?: WhatsAppRawMessage;
10
+ logger?: WhatsAppMessageStreamLogger;
11
+ }
12
+ export interface WhatsAppMessageStreamLogger {
13
+ debug?(message: string, metadata?: Record<string, unknown>): void;
14
+ warn?(message: string, metadata?: Record<string, unknown>): void;
15
+ error?(message: string, metadata?: Record<string, unknown>): void;
16
+ }
17
+ export declare class WhatsAppMessageStream implements AgentMessageStream {
18
+ private readonly socket;
19
+ private readonly chatJid;
20
+ private readonly initialStatusText;
21
+ private readonly sendInitialStatus;
22
+ private readonly maxMessageChars;
23
+ private readonly quotedMessage;
24
+ private readonly logger;
25
+ private currentText;
26
+ private statusSent;
27
+ private finished;
28
+ constructor(options: WhatsAppMessageStreamOptions);
29
+ status(text: string): Promise<void>;
30
+ append(delta: string): Promise<void>;
31
+ replace(text: string): Promise<void>;
32
+ finish(finalText?: string): Promise<void>;
33
+ private sendText;
34
+ private assertOpen;
35
+ }
36
+ export declare function splitWhatsAppText(text: string, maxChars: number): string[];
37
+ //# sourceMappingURL=message-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-stream.d.ts","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,MAAM,CAAC,EAAE,2BAA2B,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACnE;AAID,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,4BAA4B;IAgB3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAgBjC,QAAQ;IAatB,OAAO,CAAC,UAAU;CAKnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAK1E"}