whatsapp-cloud-bot 1.0.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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +561 -0
  3. package/dist/cjs/Dispatcher.js +153 -0
  4. package/dist/cjs/Dispatcher.js.map +1 -0
  5. package/dist/cjs/Handlers.js +206 -0
  6. package/dist/cjs/Handlers.js.map +1 -0
  7. package/dist/cjs/Markup.js +181 -0
  8. package/dist/cjs/Markup.js.map +1 -0
  9. package/dist/cjs/Message.js +204 -0
  10. package/dist/cjs/Message.js.map +1 -0
  11. package/dist/cjs/Update.js +28 -0
  12. package/dist/cjs/Update.js.map +1 -0
  13. package/dist/cjs/UserContext.js +70 -0
  14. package/dist/cjs/UserContext.js.map +1 -0
  15. package/dist/cjs/WhatsApp.js +125 -0
  16. package/dist/cjs/WhatsApp.js.map +1 -0
  17. package/dist/cjs/index.js +52 -0
  18. package/dist/cjs/index.js.map +1 -0
  19. package/dist/cjs/types/index.js +3 -0
  20. package/dist/cjs/types/index.js.map +1 -0
  21. package/dist/cjs/utils/helpers.js +69 -0
  22. package/dist/cjs/utils/helpers.js.map +1 -0
  23. package/dist/esm/Dispatcher.js +149 -0
  24. package/dist/esm/Dispatcher.js.map +1 -0
  25. package/dist/esm/Handlers.js +191 -0
  26. package/dist/esm/Handlers.js.map +1 -0
  27. package/dist/esm/Markup.js +171 -0
  28. package/dist/esm/Markup.js.map +1 -0
  29. package/dist/esm/Message.js +189 -0
  30. package/dist/esm/Message.js.map +1 -0
  31. package/dist/esm/Update.js +24 -0
  32. package/dist/esm/Update.js.map +1 -0
  33. package/dist/esm/UserContext.js +64 -0
  34. package/dist/esm/UserContext.js.map +1 -0
  35. package/dist/esm/WhatsApp.js +121 -0
  36. package/dist/esm/WhatsApp.js.map +1 -0
  37. package/dist/esm/index.js +10 -0
  38. package/dist/esm/index.js.map +1 -0
  39. package/dist/esm/types/index.js +2 -0
  40. package/dist/esm/types/index.js.map +1 -0
  41. package/dist/esm/utils/helpers.js +62 -0
  42. package/dist/esm/utils/helpers.js.map +1 -0
  43. package/dist/types/Dispatcher.d.ts +25 -0
  44. package/dist/types/Dispatcher.d.ts.map +1 -0
  45. package/dist/types/Handlers.d.ts +61 -0
  46. package/dist/types/Handlers.d.ts.map +1 -0
  47. package/dist/types/Markup.d.ts +50 -0
  48. package/dist/types/Markup.d.ts.map +1 -0
  49. package/dist/types/Message.d.ts +22 -0
  50. package/dist/types/Message.d.ts.map +1 -0
  51. package/dist/types/Update.d.ts +32 -0
  52. package/dist/types/Update.d.ts.map +1 -0
  53. package/dist/types/UserContext.d.ts +16 -0
  54. package/dist/types/UserContext.d.ts.map +1 -0
  55. package/dist/types/WhatsApp.d.ts +49 -0
  56. package/dist/types/WhatsApp.d.ts.map +1 -0
  57. package/dist/types/index.d.ts +11 -0
  58. package/dist/types/index.d.ts.map +1 -0
  59. package/dist/types/types/index.d.ts +194 -0
  60. package/dist/types/types/index.d.ts.map +1 -0
  61. package/dist/types/utils/helpers.d.ts +6 -0
  62. package/dist/types/utils/helpers.d.ts.map +1 -0
  63. package/package.json +81 -0
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Dispatcher = void 0;
4
+ const Update_1 = require("./Update");
5
+ const UserContext_1 = require("./UserContext");
6
+ const Handlers_1 = require("./Handlers");
7
+ const helpers_1 = require("./utils/helpers");
8
+ class AsyncQueue {
9
+ constructor() {
10
+ this.queue = [];
11
+ this.processing = false;
12
+ }
13
+ async enqueue(item, processor) {
14
+ this.queue.push(item);
15
+ if (!this.processing) {
16
+ await this.processQueue(processor);
17
+ }
18
+ }
19
+ async processQueue(processor) {
20
+ this.processing = true;
21
+ while (this.queue.length > 0) {
22
+ const item = this.queue.shift();
23
+ if (item) {
24
+ await processor(item);
25
+ }
26
+ }
27
+ this.processing = false;
28
+ }
29
+ get size() {
30
+ return this.queue.length;
31
+ }
32
+ get isProcessing() {
33
+ return this.processing;
34
+ }
35
+ }
36
+ class Dispatcher {
37
+ constructor(bot, markAsRead = true) {
38
+ this.registeredHandlers = [];
39
+ this.nextStepHandlers = new Map();
40
+ this.bot = bot;
41
+ this.queue = new AsyncQueue();
42
+ this.markAsRead = markAsRead;
43
+ }
44
+ async processUpdate(update) {
45
+ await this.queue.enqueue(update, this.processQueueItem.bind(this));
46
+ }
47
+ async processQueueItem(webhookPayload) {
48
+ if (!(0, helpers_1.keysExist)(webhookPayload, 'entry', 0, 'changes', 0, 'value')) {
49
+ return;
50
+ }
51
+ const value = webhookPayload.entry[0].changes[0].value;
52
+ if (!(0, helpers_1.keysExist)(value, 'metadata', 'phone_number_id')) {
53
+ return;
54
+ }
55
+ if (String(value.metadata.phone_number_id) !== String(this.bot.id)) {
56
+ return;
57
+ }
58
+ if (!(0, helpers_1.keysExist)(value, 'messages')) {
59
+ return;
60
+ }
61
+ const message = value.messages[0];
62
+ if (this.markAsRead) {
63
+ await this.bot.markAsRead(message).catch(() => {
64
+ });
65
+ }
66
+ const update = new Update_1.Update(this.bot, value);
67
+ const handlers = this.getHandlersForUpdate(update);
68
+ for (const handler of handlers) {
69
+ const messageText = handler.extractData(message).messageText;
70
+ const shouldRun = await this.checkAndRunHandler(handler, value, messageText);
71
+ if (shouldRun) {
72
+ const nextStepConfig = this.nextStepHandlers.get(update.userPhoneNumber);
73
+ if (nextStepConfig &&
74
+ (nextStepConfig.handler === handler ||
75
+ nextStepConfig.fallbackHandler === handler)) {
76
+ this.nextStepHandlers.delete(update.userPhoneNumber);
77
+ }
78
+ return;
79
+ }
80
+ }
81
+ }
82
+ getHandlersForUpdate(update) {
83
+ const persistentHandlers = this.registeredHandlers.filter((h) => h.persistent);
84
+ const nextStepConfig = this.nextStepHandlers.get(update.userPhoneNumber);
85
+ if (nextStepConfig) {
86
+ const handlers = [];
87
+ if (nextStepConfig.fallbackHandler) {
88
+ handlers.push(nextStepConfig.fallbackHandler);
89
+ }
90
+ handlers.push(nextStepConfig.handler);
91
+ return [...persistentHandlers, ...handlers];
92
+ }
93
+ return [...persistentHandlers, ...this.registeredHandlers];
94
+ }
95
+ async checkAndRunHandler(handler, value, messageText) {
96
+ const message = value.messages?.[0];
97
+ if (!message)
98
+ return false;
99
+ if (handler.name !== message.type) {
100
+ return false;
101
+ }
102
+ if (!handler.filterCheck(messageText)) {
103
+ return false;
104
+ }
105
+ const update = new Update_1.Update(this.bot, value);
106
+ const extractedData = handler.extractData(message);
107
+ update.messageText = extractedData.messageText;
108
+ Object.assign(update, extractedData);
109
+ if (handler.context) {
110
+ const context = new UserContext_1.UserContext(update.userPhoneNumber);
111
+ await handler.run(update, context);
112
+ }
113
+ else {
114
+ await handler.run(update);
115
+ }
116
+ return true;
117
+ }
118
+ registerHandler(handler) {
119
+ this.registeredHandlers.push(handler);
120
+ return this.registeredHandlers.length - 1;
121
+ }
122
+ setNextStep(update, handler, fallbackFunction, fallbackRegex = /^(end|stop|cancel)$/i) {
123
+ const config = {
124
+ handler: handler,
125
+ };
126
+ if (fallbackFunction) {
127
+ const regex = typeof fallbackRegex === 'string'
128
+ ? new RegExp(fallbackRegex)
129
+ : fallbackRegex;
130
+ config.fallbackHandler = new Handlers_1.MessageHandler(fallbackFunction, {
131
+ regex,
132
+ });
133
+ }
134
+ this.nextStepHandlers.set(update.userPhoneNumber, config);
135
+ }
136
+ clearNextStep(phoneNumber) {
137
+ this.nextStepHandlers.delete(phoneNumber);
138
+ }
139
+ getHandlers() {
140
+ return [...this.registeredHandlers];
141
+ }
142
+ clearHandlers() {
143
+ this.registeredHandlers = [];
144
+ }
145
+ getQueueStatus() {
146
+ return {
147
+ size: this.queue.size,
148
+ isProcessing: this.queue.isProcessing,
149
+ };
150
+ }
151
+ }
152
+ exports.Dispatcher = Dispatcher;
153
+ //# sourceMappingURL=Dispatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dispatcher.js","sourceRoot":"","sources":["../../src/Dispatcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnsupportedHandler = exports.UnknownHandler = exports.LocationHandler = exports.StickerHandler = exports.DocumentHandler = exports.VideoHandler = exports.AudioHandler = exports.ImageHandler = exports.MediaHandler = exports.InteractiveQueryHandler = exports.MessageHandler = exports.UpdateHandler = void 0;
4
+ class UpdateHandler {
5
+ constructor(name, action, options = {}) {
6
+ this.name = name;
7
+ this.action = action;
8
+ this.context = options.context !== false;
9
+ this.persistent = options.persistent || false;
10
+ if (options.regex) {
11
+ this.regex =
12
+ typeof options.regex === 'string'
13
+ ? new RegExp(options.regex)
14
+ : options.regex;
15
+ }
16
+ if (options.filter) {
17
+ this.filter = options.filter;
18
+ }
19
+ }
20
+ filterCheck(text) {
21
+ if (this.regex) {
22
+ return this.regex.test(text);
23
+ }
24
+ if (this.filter) {
25
+ return this.filter(text);
26
+ }
27
+ return true;
28
+ }
29
+ async run(update, context) {
30
+ if (this.context && context) {
31
+ await this.action(update, context);
32
+ }
33
+ else {
34
+ await this.action(update);
35
+ }
36
+ }
37
+ }
38
+ exports.UpdateHandler = UpdateHandler;
39
+ class MessageHandler extends UpdateHandler {
40
+ constructor(action, options = {}) {
41
+ super('text', action, options);
42
+ }
43
+ extractData(message) {
44
+ return {
45
+ messageText: message.text?.body || '',
46
+ };
47
+ }
48
+ }
49
+ exports.MessageHandler = MessageHandler;
50
+ class InteractiveQueryHandler extends UpdateHandler {
51
+ constructor(action, options = {}) {
52
+ super('interactive', action, options);
53
+ this.handleButton = options.handleButton !== false;
54
+ this.handleList = options.handleList !== false;
55
+ }
56
+ extractData(message) {
57
+ const data = {
58
+ messageText: '',
59
+ };
60
+ if (!message.interactive) {
61
+ return data;
62
+ }
63
+ if (message.interactive.type === 'button_reply' &&
64
+ this.handleButton &&
65
+ message.interactive.button_reply) {
66
+ data.messageText = message.interactive.button_reply.id;
67
+ data.buttonReply = message.interactive.button_reply;
68
+ }
69
+ else if (message.interactive.type === 'list_reply' &&
70
+ this.handleList &&
71
+ message.interactive.list_reply) {
72
+ data.messageText = message.interactive.list_reply.id;
73
+ data.listReply = message.interactive.list_reply;
74
+ }
75
+ return data;
76
+ }
77
+ }
78
+ exports.InteractiveQueryHandler = InteractiveQueryHandler;
79
+ class MediaHandler extends UpdateHandler {
80
+ constructor(name, action, options = {}) {
81
+ super(name, action, options);
82
+ }
83
+ }
84
+ exports.MediaHandler = MediaHandler;
85
+ class ImageHandler extends MediaHandler {
86
+ constructor(action, options = {}) {
87
+ super('image', action, options);
88
+ }
89
+ extractData(message) {
90
+ const imageData = message.image;
91
+ return {
92
+ messageText: imageData?.caption || '',
93
+ mediaMimeType: imageData?.mime_type,
94
+ mediaFileId: imageData?.id,
95
+ mediaHash: imageData?.sha256,
96
+ };
97
+ }
98
+ }
99
+ exports.ImageHandler = ImageHandler;
100
+ class AudioHandler extends MediaHandler {
101
+ constructor(action, options = {}) {
102
+ super('audio', action, options);
103
+ }
104
+ extractData(message) {
105
+ const audioData = message.audio;
106
+ return {
107
+ messageText: '',
108
+ mediaMimeType: audioData?.mime_type,
109
+ mediaFileId: audioData?.id,
110
+ mediaHash: audioData?.sha256,
111
+ mediaVoice: audioData?.voice,
112
+ };
113
+ }
114
+ }
115
+ exports.AudioHandler = AudioHandler;
116
+ class VideoHandler extends MediaHandler {
117
+ constructor(action, options = {}) {
118
+ super('video', action, options);
119
+ }
120
+ extractData(message) {
121
+ const videoData = message.video;
122
+ return {
123
+ messageText: videoData?.caption || '',
124
+ mediaMimeType: videoData?.mime_type,
125
+ mediaFileId: videoData?.id,
126
+ mediaHash: videoData?.sha256,
127
+ };
128
+ }
129
+ }
130
+ exports.VideoHandler = VideoHandler;
131
+ class DocumentHandler extends MediaHandler {
132
+ constructor(action, options = {}) {
133
+ super('document', action, options);
134
+ }
135
+ extractData(message) {
136
+ const docData = message.document;
137
+ return {
138
+ messageText: docData?.caption || '',
139
+ mediaMimeType: docData?.mime_type,
140
+ mediaFileId: docData?.id,
141
+ mediaHash: docData?.sha256,
142
+ };
143
+ }
144
+ }
145
+ exports.DocumentHandler = DocumentHandler;
146
+ class StickerHandler extends MediaHandler {
147
+ constructor(action, options = {}) {
148
+ super('sticker', action, options);
149
+ }
150
+ extractData(message) {
151
+ const stickerData = message.sticker;
152
+ return {
153
+ messageText: '',
154
+ mediaMimeType: stickerData?.mime_type,
155
+ mediaFileId: stickerData?.id,
156
+ mediaHash: stickerData?.sha256,
157
+ };
158
+ }
159
+ }
160
+ exports.StickerHandler = StickerHandler;
161
+ class LocationHandler extends UpdateHandler {
162
+ constructor(action, options = {}) {
163
+ super('location', action, options);
164
+ }
165
+ extractData(message) {
166
+ const locData = message.location;
167
+ const locName = locData?.name || '';
168
+ const locAddress = locData?.address || '';
169
+ const latitude = locData?.latitude;
170
+ const longitude = locData?.longitude;
171
+ const messageText = locName || locAddress
172
+ ? `${locName}\n${locAddress}`.trim()
173
+ : `lat: ${latitude}, long: ${longitude}`;
174
+ return {
175
+ messageText,
176
+ locAddress,
177
+ locName,
178
+ locLatitude: latitude,
179
+ locLongitude: longitude,
180
+ };
181
+ }
182
+ }
183
+ exports.LocationHandler = LocationHandler;
184
+ class UnknownHandler extends UpdateHandler {
185
+ constructor(action, options = {}) {
186
+ super('unknown', action, options);
187
+ }
188
+ extractData(_message) {
189
+ return {
190
+ messageText: '',
191
+ };
192
+ }
193
+ }
194
+ exports.UnknownHandler = UnknownHandler;
195
+ class UnsupportedHandler extends UpdateHandler {
196
+ constructor(action, options = {}) {
197
+ super('unsupported', action, options);
198
+ }
199
+ extractData(_message) {
200
+ return {
201
+ messageText: '',
202
+ };
203
+ }
204
+ }
205
+ exports.UnsupportedHandler = UnsupportedHandler;
206
+ //# sourceMappingURL=Handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Handlers.js","sourceRoot":"","sources":["../../src/Handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InlineLocationRequest = exports.InlineList = exports.ListSection = exports.ListItem = exports.InlineKeyboard = exports.InlineButton = exports.BaseReplyMarkup = void 0;
4
+ class BaseReplyMarkup {
5
+ constructor(type, markup) {
6
+ this.type = type;
7
+ this.markup = markup;
8
+ }
9
+ }
10
+ exports.BaseReplyMarkup = BaseReplyMarkup;
11
+ class InlineButton {
12
+ constructor(text, buttonId) {
13
+ if (text.length > 20) {
14
+ throw new Error('Button text must be 20 characters or less');
15
+ }
16
+ this.button = {
17
+ type: 'reply',
18
+ reply: {
19
+ id: buttonId || text,
20
+ title: text,
21
+ },
22
+ };
23
+ }
24
+ }
25
+ exports.InlineButton = InlineButton;
26
+ class InlineKeyboard extends BaseReplyMarkup {
27
+ constructor(buttons) {
28
+ const inlineButtons = InlineKeyboard.setButtons(buttons);
29
+ InlineKeyboard.validateButtons(inlineButtons);
30
+ const markup = {
31
+ buttons: inlineButtons.map((btn) => btn.button),
32
+ };
33
+ super('button', markup);
34
+ }
35
+ static setButtons(buttons) {
36
+ if (!Array.isArray(buttons)) {
37
+ throw new Error('Buttons must be an array');
38
+ }
39
+ return buttons.map((btn) => {
40
+ if (typeof btn === 'string') {
41
+ return new InlineButton(btn);
42
+ }
43
+ else if (btn instanceof InlineButton) {
44
+ return btn;
45
+ }
46
+ else {
47
+ throw new Error('Button elements must be strings or InlineButton instances');
48
+ }
49
+ });
50
+ }
51
+ static validateButtons(buttons) {
52
+ if (buttons.length < 1 || buttons.length > 3) {
53
+ throw new Error(`InlineKeyboard must have 1-3 buttons, got ${buttons.length}`);
54
+ }
55
+ const ids = new Set();
56
+ const titles = new Set();
57
+ for (const button of buttons) {
58
+ const id = button.button.reply.id;
59
+ const title = button.button.reply.title;
60
+ if (ids.has(id) || titles.has(title)) {
61
+ throw new Error('Button IDs and titles must be unique');
62
+ }
63
+ ids.add(id);
64
+ titles.add(title);
65
+ }
66
+ }
67
+ }
68
+ exports.InlineKeyboard = InlineKeyboard;
69
+ class ListItem {
70
+ constructor(title, id, description) {
71
+ if (title.length > 24) {
72
+ throw new Error('List item title must be 24 characters or less');
73
+ }
74
+ if (description && description.length > 72) {
75
+ throw new Error('List item description must be 72 characters or less');
76
+ }
77
+ this.item = {
78
+ id: id || title,
79
+ title: title,
80
+ };
81
+ if (description) {
82
+ this.item.description = description;
83
+ }
84
+ }
85
+ }
86
+ exports.ListItem = ListItem;
87
+ class ListSection {
88
+ constructor(title, items) {
89
+ if (title.length > 24) {
90
+ throw new Error('Section title must be 24 characters or less');
91
+ }
92
+ const listItems = ListSection.setItems(items);
93
+ ListSection.validateItems(listItems);
94
+ this.section = {
95
+ title: title,
96
+ rows: listItems.map((item) => item.item),
97
+ };
98
+ }
99
+ static setItems(items) {
100
+ if (!Array.isArray(items)) {
101
+ throw new Error('Items must be an array');
102
+ }
103
+ return items.map((item) => {
104
+ if (typeof item === 'string') {
105
+ return new ListItem(item);
106
+ }
107
+ else if (item instanceof ListItem) {
108
+ return item;
109
+ }
110
+ else {
111
+ throw new Error('Items must be strings or ListItem instances');
112
+ }
113
+ });
114
+ }
115
+ static validateItems(items) {
116
+ if (items.length < 1 || items.length > 10) {
117
+ throw new Error(`Section must have 1-10 items, got ${items.length}`);
118
+ }
119
+ }
120
+ }
121
+ exports.ListSection = ListSection;
122
+ class InlineList extends BaseReplyMarkup {
123
+ constructor(buttonText, listItems) {
124
+ if (buttonText.length > 20) {
125
+ throw new Error('List button text must be 20 characters or less');
126
+ }
127
+ InlineList.validateList(listItems);
128
+ let sections;
129
+ if (listItems.length > 0 && listItems[0] instanceof ListSection) {
130
+ sections = listItems.map((section) => section.section);
131
+ }
132
+ else {
133
+ sections = [
134
+ {
135
+ rows: listItems.map((item) => item.item),
136
+ },
137
+ ];
138
+ }
139
+ const markup = {
140
+ button: buttonText,
141
+ sections: sections,
142
+ };
143
+ super('list', markup);
144
+ }
145
+ static validateList(items) {
146
+ if (!Array.isArray(items)) {
147
+ throw new Error('List items must be an array');
148
+ }
149
+ if (items.length === 0) {
150
+ throw new Error('List must have at least one item or section');
151
+ }
152
+ const isAllListItems = items.every((item) => item instanceof ListItem);
153
+ const isAllSections = items.every((item) => item instanceof ListSection);
154
+ if (!isAllListItems && !isAllSections) {
155
+ throw new Error('List items must be all ListItem or all ListSection instances');
156
+ }
157
+ let totalItems = 0;
158
+ if (isAllSections) {
159
+ for (const section of items) {
160
+ totalItems += section.section.rows.length;
161
+ }
162
+ }
163
+ else {
164
+ totalItems = items.length;
165
+ }
166
+ if (totalItems > 10) {
167
+ throw new Error(`List can have maximum 10 items, got ${totalItems}`);
168
+ }
169
+ }
170
+ }
171
+ exports.InlineList = InlineList;
172
+ class InlineLocationRequest extends BaseReplyMarkup {
173
+ constructor() {
174
+ const markup = {
175
+ name: 'send_location',
176
+ };
177
+ super('location_request_message', markup);
178
+ }
179
+ }
180
+ exports.InlineLocationRequest = InlineLocationRequest;
181
+ //# sourceMappingURL=Markup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markup.js","sourceRoot":"","sources":["../../src/Markup.ts"],"names":[],"mappings":"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"}