@elizaos/plugin-whatsapp 2.0.0-alpha.9 → 2.0.3-beta.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 (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/auto-enable.ts +21 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/accounts.d.ts +205 -0
  6. package/dist/accounts.d.ts.map +1 -0
  7. package/dist/api/whatsapp-routes.d.ts +53 -0
  8. package/dist/api/whatsapp-routes.d.ts.map +1 -0
  9. package/dist/baileys/auth.d.ts +10 -0
  10. package/dist/baileys/auth.d.ts.map +1 -0
  11. package/dist/baileys/connection.d.ts +19 -0
  12. package/dist/baileys/connection.d.ts.map +1 -0
  13. package/dist/baileys/message-adapter.d.ts +14 -0
  14. package/dist/baileys/message-adapter.d.ts.map +1 -0
  15. package/dist/baileys/qr-code.d.ts +6 -0
  16. package/dist/baileys/qr-code.d.ts.map +1 -0
  17. package/dist/client.d.ts +99 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/clients/baileys-client.d.ts +18 -0
  20. package/dist/clients/baileys-client.d.ts.map +1 -0
  21. package/dist/clients/factory.d.ts +6 -0
  22. package/dist/clients/factory.d.ts.map +1 -0
  23. package/dist/clients/interface.d.ts +10 -0
  24. package/dist/clients/interface.d.ts.map +1 -0
  25. package/dist/config.d.ts +135 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/connector-account-provider.d.ts +19 -0
  28. package/dist/connector-account-provider.d.ts.map +1 -0
  29. package/dist/index.d.ts +14 -2
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +2526 -854
  32. package/dist/index.js.map +23 -19
  33. package/dist/media.d.ts +2 -0
  34. package/dist/media.d.ts.map +1 -0
  35. package/dist/normalize.d.ts +69 -0
  36. package/dist/normalize.d.ts.map +1 -0
  37. package/dist/pairing-service.d.ts +41 -0
  38. package/dist/pairing-service.d.ts.map +1 -0
  39. package/dist/qrcode-terminal-types.d.ts +6 -0
  40. package/dist/qrcode-terminal-types.d.ts.map +1 -0
  41. package/dist/runtime-service.d.ts +125 -0
  42. package/dist/runtime-service.d.ts.map +1 -0
  43. package/dist/services/whatsapp-pairing.d.ts +41 -0
  44. package/dist/services/whatsapp-pairing.d.ts.map +1 -0
  45. package/dist/setup-routes.d.ts +26 -0
  46. package/dist/setup-routes.d.ts.map +1 -0
  47. package/dist/types.d.ts +370 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/utils/config-detector.d.ts +3 -0
  50. package/dist/utils/config-detector.d.ts.map +1 -0
  51. package/dist/webhook-auth.d.ts +11 -0
  52. package/dist/webhook-auth.d.ts.map +1 -0
  53. package/dist/workflow-credential-provider.d.ts +21 -0
  54. package/dist/workflow-credential-provider.d.ts.map +1 -0
  55. package/package.json +162 -131
  56. package/registry-entry.json +128 -0
@@ -0,0 +1,2 @@
1
+ export declare function assertValidWhatsAppMediaLink(link: unknown, kind: string): string;
2
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAMA,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBhF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * WhatsApp text chunk limit
3
+ */
4
+ export declare const WHATSAPP_TEXT_CHUNK_LIMIT = 4096;
5
+ /**
6
+ * Normalizes a phone number to E.164 format
7
+ */
8
+ export declare function normalizeE164(input: string): string;
9
+ /**
10
+ * Checks if a value is a WhatsApp group JID (e.g., "123456789-987654321@g.us")
11
+ */
12
+ export declare function isWhatsAppGroupJid(value: string): boolean;
13
+ /**
14
+ * Checks if a value looks like a WhatsApp user target
15
+ * (e.g., "41796666864:0@s.whatsapp.net" or "123@lid")
16
+ */
17
+ export declare function isWhatsAppUserTarget(value: string): boolean;
18
+ /**
19
+ * Normalizes a WhatsApp target (phone number, user JID, or group JID)
20
+ * Returns null if the target is invalid
21
+ */
22
+ export declare function normalizeWhatsAppTarget(value: string): string | null;
23
+ /**
24
+ * Formats a WhatsApp ID for display
25
+ */
26
+ export declare function formatWhatsAppId(id: string): string;
27
+ /**
28
+ * Checks if a WhatsApp ID is a group
29
+ */
30
+ export declare function isWhatsAppGroup(id: string): boolean;
31
+ /**
32
+ * Gets the chat type from a WhatsApp ID
33
+ */
34
+ export declare function getWhatsAppChatType(id: string): "group" | "user";
35
+ /**
36
+ * Builds a WhatsApp JID from a phone number
37
+ */
38
+ export declare function buildWhatsAppUserJid(phoneNumber: string): string;
39
+ /**
40
+ * Options for text chunking
41
+ */
42
+ export interface ChunkWhatsAppTextOpts {
43
+ limit?: number;
44
+ }
45
+ /**
46
+ * Chunks text for WhatsApp messages
47
+ */
48
+ export declare function chunkWhatsAppText(text: string, opts?: ChunkWhatsAppTextOpts): string[];
49
+ /**
50
+ * Truncates text to a maximum length with ellipsis
51
+ */
52
+ export declare function truncateText(text: string, maxLength: number): string;
53
+ /**
54
+ * Resolves the system location string for logging
55
+ */
56
+ export declare function resolveWhatsAppSystemLocation(params: {
57
+ chatType: "group" | "user";
58
+ chatId: string;
59
+ chatName?: string;
60
+ }): string;
61
+ /**
62
+ * Validates a WhatsApp phone number
63
+ */
64
+ export declare function isValidWhatsAppNumber(value: string): boolean;
65
+ /**
66
+ * Formats a phone number for WhatsApp display
67
+ */
68
+ export declare function formatWhatsAppPhoneNumber(phoneNumber: string): string;
69
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,yBAAyB,OAAO,CAAC;AA0B9C;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyBnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAWzD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG3D;AAmBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA+BpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2DD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,qBAA0B,GAAG,MAAM,EAAE,CAwB1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQpE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE;IACpD,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,MAAM,CAIT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAW5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAcrE"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * WhatsApp pairing service — manages Baileys sessions for QR code authentication.
3
+ *
4
+ * This service is separate from the main WhatsApp plugin because the plugin
5
+ * initializes during runtime startup (too late for interactive QR flow).
6
+ * Once pairing succeeds, the auth state is persisted to disk so the plugin
7
+ * can reconnect automatically on subsequent startups.
8
+ */
9
+ /** Validate accountId to prevent path traversal. Only allows alphanumeric, dash, underscore. */
10
+ export declare function sanitizeAccountId(raw: string): string;
11
+ export type WhatsAppPairingStatus = "idle" | "initializing" | "waiting_for_qr" | "connected" | "disconnected" | "timeout" | "error";
12
+ export interface WhatsAppPairingEvent {
13
+ type: "whatsapp-qr" | "whatsapp-status";
14
+ accountId: string;
15
+ qrDataUrl?: string;
16
+ expiresInMs?: number;
17
+ status?: WhatsAppPairingStatus;
18
+ phoneNumber?: string;
19
+ error?: string;
20
+ }
21
+ export interface WhatsAppPairingOptions {
22
+ authDir: string;
23
+ accountId: string;
24
+ onEvent: (event: WhatsAppPairingEvent) => void;
25
+ }
26
+ export declare class WhatsAppPairingSession {
27
+ private socket;
28
+ private status;
29
+ private options;
30
+ private qrAttempts;
31
+ private readonly MAX_QR_ATTEMPTS;
32
+ private restartTimer;
33
+ constructor(options: WhatsAppPairingOptions);
34
+ start(): Promise<void>;
35
+ stop(): void;
36
+ getStatus(): WhatsAppPairingStatus;
37
+ private setStatus;
38
+ }
39
+ export declare function whatsappAuthExists(workspaceDir: string, accountId?: string): boolean;
40
+ export declare function whatsappLogout(workspaceDir: string, accountId?: string): Promise<void>;
41
+ //# sourceMappingURL=pairing-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing-service.d.ts","sourceRoot":"","sources":["../src/pairing-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,cAAc,GACd,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,GAAG,iBAAiB,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAChD;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA6E;IAC3F,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAK;IACrC,OAAO,CAAC,YAAY,CAA8C;gBAEtD,OAAO,EAAE,sBAAsB;IAIrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuG5B,IAAI,IAAI,IAAI;IAaZ,SAAS,IAAI,qBAAqB;IAIlC,OAAO,CAAC,SAAS;CAQlB;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAY,GAAG,OAAO,CAGvF;AAED,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D/F"}
@@ -0,0 +1,6 @@
1
+ declare module "qrcode-terminal" {
2
+ function generate(input: string, options?: {
3
+ small?: boolean;
4
+ }, callback?: (qrcode: string) => void): void;
5
+ }
6
+ //# sourceMappingURL=qrcode-terminal-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrcode-terminal-types.d.ts","sourceRoot":"","sources":["../src/qrcode-terminal-types.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,SAAgB,QAAQ,CACtB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAC7B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAClC,IAAI,CAAC;CACT"}
@@ -0,0 +1,125 @@
1
+ import { type IAgentRuntime, type Media, type Memory, Service, type UUID } from "@elizaos/core";
2
+ import type { WhatsAppMessageResponse, WhatsAppWebhookEvent } from "./types";
3
+ type RuntimeServiceConfig = {
4
+ accountId: string;
5
+ name?: string;
6
+ transport: "baileys";
7
+ authDir: string;
8
+ dmPolicy?: "open" | "allowlist" | "pairing" | "disabled";
9
+ groupPolicy?: "open" | "allowlist" | "disabled";
10
+ allowFrom?: string[];
11
+ groupAllowFrom?: string[];
12
+ } | {
13
+ accountId: string;
14
+ name?: string;
15
+ transport: "cloudapi";
16
+ accessToken: string;
17
+ phoneNumberId: string;
18
+ businessAccountId?: string;
19
+ webhookVerifyToken?: string;
20
+ apiVersion?: string;
21
+ dmPolicy?: "open" | "allowlist" | "pairing" | "disabled";
22
+ groupPolicy?: "open" | "allowlist" | "disabled";
23
+ allowFrom?: string[];
24
+ groupAllowFrom?: string[];
25
+ };
26
+ type RuntimeSendHandler = Parameters<IAgentRuntime["registerSendHandler"]>[1];
27
+ type ConnectorTargetInfo = Parameters<RuntimeSendHandler>[1];
28
+ type MessageConnectorRegistration = Parameters<IAgentRuntime["registerMessageConnector"]>[0];
29
+ type MessageConnectorQueryContext = Parameters<NonNullable<MessageConnectorRegistration["resolveTargets"]>>[1];
30
+ type ConnectorFetchMessagesParams = {
31
+ target?: ConnectorTargetInfo;
32
+ limit?: number;
33
+ before?: string;
34
+ after?: string;
35
+ channelId?: string;
36
+ roomId?: UUID;
37
+ };
38
+ type ConnectorSearchMessagesParams = ConnectorFetchMessagesParams & {
39
+ query?: string;
40
+ };
41
+ type ConnectorReactionParams = {
42
+ target?: ConnectorTargetInfo;
43
+ channelId?: string;
44
+ roomId?: UUID;
45
+ messageId?: string;
46
+ emoji?: string;
47
+ remove?: boolean;
48
+ };
49
+ type ConnectorUserLookupParams = {
50
+ userId?: string;
51
+ username?: string;
52
+ handle?: string;
53
+ query?: string;
54
+ };
55
+ type KnownWhatsAppTarget = {
56
+ accountId: string;
57
+ chatId: string;
58
+ senderId: string;
59
+ label: string;
60
+ isGroup: boolean;
61
+ lastMessageAt: number;
62
+ roomId?: UUID;
63
+ };
64
+ export declare class WhatsAppConnectorService extends Service {
65
+ static serviceType: string;
66
+ protected runtime: IAgentRuntime;
67
+ capabilityDescription: string;
68
+ connected: boolean;
69
+ phoneNumber: string | null;
70
+ private defaultAccountId;
71
+ private clients;
72
+ private configs;
73
+ private phoneNumbers;
74
+ private client;
75
+ config: RuntimeServiceConfig | undefined;
76
+ private knownTargets;
77
+ constructor(runtime?: IAgentRuntime);
78
+ resolveAccountId(accountId?: string | null): string;
79
+ private getClientForAccount;
80
+ private getConfigForAccount;
81
+ private getConnectorAccountIds;
82
+ private targetKey;
83
+ private roomIdFor;
84
+ private entityIdFor;
85
+ private worldIdFor;
86
+ private metadataMatchesAccount;
87
+ static start(runtime: IAgentRuntime): Promise<WhatsAppConnectorService>;
88
+ static registerSendHandlers(runtime: IAgentRuntime, service: WhatsAppConnectorService): void;
89
+ initialize(): Promise<void>;
90
+ stop(): Promise<void>;
91
+ handleWebhook(event: WhatsAppWebhookEvent): Promise<void>;
92
+ verifyWebhook(mode: string, token: string, challenge: string, accountId?: string): string | null;
93
+ private resolveWebhookAccountId;
94
+ private bindClientEvents;
95
+ private handleNormalizedMessage;
96
+ private handleIncomingWebhookMessage;
97
+ private processIncomingMessage;
98
+ private sendTextMessage;
99
+ sendMessage(message: {
100
+ accountId?: string;
101
+ type: "text";
102
+ to: string;
103
+ content: string;
104
+ replyToMessageId?: string;
105
+ }): Promise<WhatsAppMessageResponse>;
106
+ /** Coarse content type → WhatsApp media message kind. */
107
+ private whatsappMediaType;
108
+ /**
109
+ * Send an agent attachment as a native WhatsApp media message (#8876). Works
110
+ * across both transports: the Cloud-API client and the Baileys client each
111
+ * build their own payload from the shared `WhatsAppMessage` media type, both
112
+ * keyed on a media URL (`link`).
113
+ */
114
+ sendMediaMessage(accountId: string | null | undefined, to: string, media: Media): Promise<void>;
115
+ fetchConnectorMessages(context: MessageConnectorQueryContext, params: ConnectorFetchMessagesParams): Promise<Memory[]>;
116
+ searchConnectorMessages(context: MessageConnectorQueryContext, params: ConnectorSearchMessagesParams): Promise<Memory[]>;
117
+ reactConnectorMessage(runtime: IAgentRuntime, params: ConnectorReactionParams): Promise<void>;
118
+ getConnectorUser(_runtime: IAgentRuntime, params: ConnectorUserLookupParams): Promise<unknown>;
119
+ listKnownTargets(accountId?: string | null): KnownWhatsAppTarget[];
120
+ getKnownTarget(chatId: string, accountId?: string | null): KnownWhatsAppTarget | null;
121
+ findKnownChatByParticipant(participant: string, accountId?: string | null): KnownWhatsAppTarget | null;
122
+ private rememberTarget;
123
+ }
124
+ export {};
125
+ //# sourceMappingURL=runtime-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-service.d.ts","sourceRoot":"","sources":["../src/runtime-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * WhatsApp pairing service — manages Baileys sessions for QR code authentication.
3
+ *
4
+ * This service is separate from `@elizaos/plugin-whatsapp` because the plugin
5
+ * initializes during runtime startup (too late for interactive QR flow).
6
+ * Once pairing succeeds, the auth state is persisted to disk so the plugin
7
+ * can reconnect automatically on subsequent startups.
8
+ */
9
+ /** Validate accountId to prevent path traversal. Only allows alphanumeric, dash, underscore. */
10
+ export declare function sanitizeAccountId(raw: string): string;
11
+ export type WhatsAppPairingStatus = "idle" | "initializing" | "waiting_for_qr" | "connected" | "disconnected" | "timeout" | "error";
12
+ export interface WhatsAppPairingEvent {
13
+ type: "whatsapp-qr" | "whatsapp-status";
14
+ accountId: string;
15
+ qrDataUrl?: string;
16
+ expiresInMs?: number;
17
+ status?: WhatsAppPairingStatus;
18
+ phoneNumber?: string;
19
+ error?: string;
20
+ }
21
+ export interface WhatsAppPairingOptions {
22
+ authDir: string;
23
+ accountId: string;
24
+ onEvent: (event: WhatsAppPairingEvent) => void;
25
+ }
26
+ export declare class WhatsAppPairingSession {
27
+ private socket;
28
+ private status;
29
+ private options;
30
+ private qrAttempts;
31
+ private readonly MAX_QR_ATTEMPTS;
32
+ private restartTimer;
33
+ constructor(options: WhatsAppPairingOptions);
34
+ start(): Promise<void>;
35
+ stop(): void;
36
+ getStatus(): WhatsAppPairingStatus;
37
+ private setStatus;
38
+ }
39
+ export declare function whatsappAuthExists(workspaceDir: string, accountId?: string): boolean;
40
+ export declare function whatsappLogout(workspaceDir: string, accountId?: string): Promise<void>;
41
+ //# sourceMappingURL=whatsapp-pairing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-pairing.d.ts","sourceRoot":"","sources":["../../src/services/whatsapp-pairing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,cAAc,GACd,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,GAAG,iBAAiB,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAChD;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA6E;IAC3F,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAK;IACrC,OAAO,CAAC,YAAY,CAA8C;gBAEtD,OAAO,EAAE,sBAAsB;IAIrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuG5B,IAAI,IAAI,IAAI;IAaZ,SAAS,IAAI,qBAAqB;IAIlC,OAAO,CAAC,SAAS;CAQlB;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAY,GAAG,OAAO,CAGvF;AAED,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D/F"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * WhatsApp setup HTTP routes.
3
+ *
4
+ * Provides QR-code pairing, status, disconnect, and webhook endpoints:
5
+ *
6
+ * GET /api/whatsapp/webhook Meta webhook verification
7
+ * POST /api/whatsapp/webhook Meta webhook event delivery
8
+ * POST /api/whatsapp/pair Start QR pairing session
9
+ * GET /api/whatsapp/status Check connection / pairing status
10
+ * POST /api/whatsapp/pair/stop Stop active pairing session
11
+ * POST /api/whatsapp/disconnect Logout + remove auth state
12
+ *
13
+ * These routes are registered with `rawPath: true` so they mount at their
14
+ * legacy paths without the plugin-name prefix.
15
+ */
16
+ import type { Route } from "@elizaos/core";
17
+ /**
18
+ * Plugin routes for WhatsApp setup and webhooks.
19
+ * Registered with `rawPath: true` to preserve legacy `/api/whatsapp/*` paths.
20
+ */
21
+ export declare const whatsappSetupRoutes: Route[];
22
+ /**
23
+ * Stop all active pairing sessions. Called during shutdown cleanup.
24
+ */
25
+ export declare function stopAllPairingSessions(): void;
26
+ //# sourceMappingURL=setup-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-routes.d.ts","sourceRoot":"","sources":["../src/setup-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAiB,KAAK,EAA+B,MAAM,eAAe,CAAC;AAiZvF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,EAyCtC,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAS7C"}