botcast-sdk 1.0.8 → 1.0.10

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/README.md CHANGED
@@ -273,7 +273,7 @@ await client.messages.delete("201012345678", msgKey);
273
273
  await client.messages.markAsRead(msgKey);
274
274
 
275
275
  // 4. Emoji reaction
276
- await client.messages.react("201012345678", msgKey, "👍");
276
+ await client.messages.react("201012345678", msgKey, "STAR");
277
277
 
278
278
  // 5. Pin message
279
279
  await client.messages.pin("201012345678", msgKey, 1, 86400);
@@ -286,7 +286,59 @@ await client.messages.forward("201012345678", {
286
286
 
287
287
  ---
288
288
 
289
- ### 4. Chats, Contacts, and History (`client.chats`)
289
+ ### 4. Real-Time Socket.io Event Gateway (`client.socket`)
290
+
291
+ Stream real-time instance events directly with zero latency over **Socket.io**:
292
+
293
+ ```typescript
294
+ import { BotcastClient } from "botcast-sdk";
295
+
296
+ const client = new BotcastClient({
297
+ baseUrl: "https://botcast.site",
298
+ instanceId: "your_instance_id",
299
+ instanceToken: "your_instance_token",
300
+ autoConnectSocket: true, // or call client.socket.connect() manually
301
+ });
302
+
303
+ // 1. Listen for new incoming/outgoing messages
304
+ client.socket.onMessage((msg) => {
305
+ console.log("Real-time message:", msg);
306
+ });
307
+
308
+ // 2. Listen for delivery status & read receipts
309
+ client.socket.onMessageStatus((status) => {
310
+ console.log("Message status update:", status);
311
+ });
312
+
313
+ // 3. Listen for emoji reactions
314
+ client.socket.onReaction((reaction) => {
315
+ console.log("Reaction event:", reaction);
316
+ });
317
+
318
+ // 4. Listen for deleted/revoked messages
319
+ client.socket.onMessageDeleted((del) => {
320
+ console.log("Message deleted:", del);
321
+ });
322
+
323
+ // 5. Listen for user presence (typing, recording, online state)
324
+ client.socket.onPresence((presence) => {
325
+ console.log("Presence update:", presence);
326
+ });
327
+
328
+ // 6. Listen for instance connection & QR updates
329
+ client.socket.onConnectionUpdate((conn) => {
330
+ console.log("Connection state:", conn.status, conn.qr || conn.pairingCode);
331
+ });
332
+
333
+ // 7. Generic event listener
334
+ client.socket.onEvent((event) => {
335
+ console.log("Instance event received:", event.event, event);
336
+ });
337
+ ```
338
+
339
+ ---
340
+
341
+ ### 5. Chats, Contacts, and History (`client.chats`)
290
342
 
291
343
  ```typescript
292
344
  // 1. List chats / dialogs
@@ -309,7 +361,7 @@ await client.chats.pin("201012345678@s.whatsapp.net");
309
361
 
310
362
  ---
311
363
 
312
- ### 5. Webhook Event Handling
364
+ ### 6. Webhook Event Handling
313
365
 
314
366
  The SDK includes a built-in event dispatcher and middleware for handling inbound webhooks from both WhatsApp and Telegram:
315
367
 
package/dist/client.cjs CHANGED
@@ -8,6 +8,7 @@ const groups_js_1 = require("./modules/groups.js");
8
8
  const profile_js_1 = require("./modules/profile.js");
9
9
  const broadcast_js_1 = require("./modules/broadcast.js");
10
10
  const index_js_1 = require("./webhooks/index.js");
11
+ const index_js_2 = require("./socket/index.js");
11
12
  class BotcastClient {
12
13
  config;
13
14
  /** Instance Lifecycle & Connection Management */
@@ -24,10 +25,13 @@ class BotcastClient {
24
25
  broadcast;
25
26
  /** Webhook Handler & Middleware */
26
27
  webhook;
28
+ /** Real-Time Socket.io Event Gateway Client */
29
+ socket;
27
30
  /**
28
31
  * Initializes a new Botcast API Client.
29
32
  *
30
33
  * @param config Client configuration options
34
+ * @param socketOptions Optional Socket.io client overrides
31
35
  *
32
36
  * @example
33
37
  * ```ts
@@ -39,11 +43,16 @@ class BotcastClient {
39
43
  * instanceToken: 'token_xyz789'
40
44
  * });
41
45
  *
46
+ * // Listen for real-time events via Socket.io
47
+ * botcast.socket.onMessage((msg) => {
48
+ * console.log('Incoming message:', msg);
49
+ * });
50
+ *
42
51
  * // Send a text message
43
52
  * await botcast.messages.sendText('201000000000', 'Hello from Botcast SDK!');
44
53
  * ```
45
54
  */
46
- constructor(config) {
55
+ constructor(config, socketOptions) {
47
56
  if (!config.instanceId) {
48
57
  throw new Error('BotcastClient requires a valid "instanceId"');
49
58
  }
@@ -58,6 +67,7 @@ class BotcastClient {
58
67
  timeout: config.timeout || 30000,
59
68
  maxRetries: config.maxRetries ?? 2,
60
69
  headers: config.headers || {},
70
+ autoConnectSocket: config.autoConnectSocket ?? false,
61
71
  };
62
72
  this.instances = new instances_js_1.InstancesModule(this.config);
63
73
  this.messages = new messages_js_1.MessagesModule(this.config);
@@ -66,6 +76,10 @@ class BotcastClient {
66
76
  this.profile = new profile_js_1.ProfileModule(this.config);
67
77
  this.broadcast = new broadcast_js_1.BroadcastModule(this.config);
68
78
  this.webhook = new index_js_1.BotcastWebhook();
79
+ this.socket = new index_js_2.BotcastSocketClient(this.config, {
80
+ autoConnect: config.autoConnectSocket,
81
+ ...socketOptions,
82
+ });
69
83
  }
70
84
  // =========================================================================
71
85
  // Top-Level Convenience Shortcuts
package/dist/client.d.ts CHANGED
@@ -6,6 +6,7 @@ import { GroupsModule } from './modules/groups.js';
6
6
  import { ProfileModule } from './modules/profile.js';
7
7
  import { BroadcastModule } from './modules/broadcast.js';
8
8
  import { BotcastWebhook } from './webhooks/index.js';
9
+ import { BotcastSocketClient, BotcastSocketOptions } from './socket/index.js';
9
10
  export declare class BotcastClient {
10
11
  private config;
11
12
  /** Instance Lifecycle & Connection Management */
@@ -22,10 +23,13 @@ export declare class BotcastClient {
22
23
  broadcast: BroadcastModule;
23
24
  /** Webhook Handler & Middleware */
24
25
  webhook: BotcastWebhook;
26
+ /** Real-Time Socket.io Event Gateway Client */
27
+ socket: BotcastSocketClient;
25
28
  /**
26
29
  * Initializes a new Botcast API Client.
27
30
  *
28
31
  * @param config Client configuration options
32
+ * @param socketOptions Optional Socket.io client overrides
29
33
  *
30
34
  * @example
31
35
  * ```ts
@@ -37,11 +41,16 @@ export declare class BotcastClient {
37
41
  * instanceToken: 'token_xyz789'
38
42
  * });
39
43
  *
44
+ * // Listen for real-time events via Socket.io
45
+ * botcast.socket.onMessage((msg) => {
46
+ * console.log('Incoming message:', msg);
47
+ * });
48
+ *
40
49
  * // Send a text message
41
50
  * await botcast.messages.sendText('201000000000', 'Hello from Botcast SDK!');
42
51
  * ```
43
52
  */
44
- constructor(config: BotcastClientConfig);
53
+ constructor(config: BotcastClientConfig, socketOptions?: BotcastSocketOptions);
45
54
  /**
46
55
  * Shortcut to send a text message.
47
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgC;IAE9C,iDAAiD;IAC1C,SAAS,EAAE,eAAe,CAAC;IAElC,6EAA6E;IACtE,QAAQ,EAAE,cAAc,CAAC;IAEhC,0DAA0D;IACnD,KAAK,EAAE,WAAW,CAAC;IAE1B,iDAAiD;IAC1C,MAAM,EAAE,YAAY,CAAC;IAE5B,0DAA0D;IACnD,OAAO,EAAE,aAAa,CAAC;IAE9B,gDAAgD;IACzC,SAAS,EAAE,eAAe,CAAC;IAElC,mCAAmC;IAC5B,OAAO,EAAE,cAAc,CAAC;IAE/B;;;;;;;;;;;;;;;;;;OAkBG;gBACS,MAAM,EAAE,mBAAmB;IA+BvC;;OAEG;IACU,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAIrD;;OAEG;IACU,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;;;IAI7G;;OAEG;IACU,SAAS;IAItB;;OAEG;IACU,KAAK;IAIlB;;;;OAIG;IACU,YAAY,CAAC,WAAW,EAAE,MAAM;IAI7C;;;;OAIG;IACU,WAAW,CAAC,WAAW,EAAE,MAAM;CAG7C"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgC;IAE9C,iDAAiD;IAC1C,SAAS,EAAE,eAAe,CAAC;IAElC,6EAA6E;IACtE,QAAQ,EAAE,cAAc,CAAC;IAEhC,0DAA0D;IACnD,KAAK,EAAE,WAAW,CAAC;IAE1B,iDAAiD;IAC1C,MAAM,EAAE,YAAY,CAAC;IAE5B,0DAA0D;IACnD,OAAO,EAAE,aAAa,CAAC;IAE9B,gDAAgD;IACzC,SAAS,EAAE,eAAe,CAAC;IAElC,mCAAmC;IAC5B,OAAO,EAAE,cAAc,CAAC;IAE/B,+CAA+C;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAEnC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;gBACS,MAAM,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE,oBAAoB;IAoC7E;;OAEG;IACU,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAIrD;;OAEG;IACU,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;;;IAI7G;;OAEG;IACU,SAAS;IAItB;;OAEG;IACU,KAAK;IAIlB;;;;OAIG;IACU,YAAY,CAAC,WAAW,EAAE,MAAM;IAI7C;;;;OAIG;IACU,WAAW,CAAC,WAAW,EAAE,MAAM;CAG7C"}
package/dist/client.js CHANGED
@@ -5,6 +5,7 @@ import { GroupsModule } from './modules/groups.js';
5
5
  import { ProfileModule } from './modules/profile.js';
6
6
  import { BroadcastModule } from './modules/broadcast.js';
7
7
  import { BotcastWebhook } from './webhooks/index.js';
8
+ import { BotcastSocketClient } from './socket/index.js';
8
9
  export class BotcastClient {
9
10
  config;
10
11
  /** Instance Lifecycle & Connection Management */
@@ -21,10 +22,13 @@ export class BotcastClient {
21
22
  broadcast;
22
23
  /** Webhook Handler & Middleware */
23
24
  webhook;
25
+ /** Real-Time Socket.io Event Gateway Client */
26
+ socket;
24
27
  /**
25
28
  * Initializes a new Botcast API Client.
26
29
  *
27
30
  * @param config Client configuration options
31
+ * @param socketOptions Optional Socket.io client overrides
28
32
  *
29
33
  * @example
30
34
  * ```ts
@@ -36,11 +40,16 @@ export class BotcastClient {
36
40
  * instanceToken: 'token_xyz789'
37
41
  * });
38
42
  *
43
+ * // Listen for real-time events via Socket.io
44
+ * botcast.socket.onMessage((msg) => {
45
+ * console.log('Incoming message:', msg);
46
+ * });
47
+ *
39
48
  * // Send a text message
40
49
  * await botcast.messages.sendText('201000000000', 'Hello from Botcast SDK!');
41
50
  * ```
42
51
  */
43
- constructor(config) {
52
+ constructor(config, socketOptions) {
44
53
  if (!config.instanceId) {
45
54
  throw new Error('BotcastClient requires a valid "instanceId"');
46
55
  }
@@ -55,6 +64,7 @@ export class BotcastClient {
55
64
  timeout: config.timeout || 30000,
56
65
  maxRetries: config.maxRetries ?? 2,
57
66
  headers: config.headers || {},
67
+ autoConnectSocket: config.autoConnectSocket ?? false,
58
68
  };
59
69
  this.instances = new InstancesModule(this.config);
60
70
  this.messages = new MessagesModule(this.config);
@@ -63,6 +73,10 @@ export class BotcastClient {
63
73
  this.profile = new ProfileModule(this.config);
64
74
  this.broadcast = new BroadcastModule(this.config);
65
75
  this.webhook = new BotcastWebhook();
76
+ this.socket = new BotcastSocketClient(this.config, {
77
+ autoConnect: config.autoConnectSocket,
78
+ ...socketOptions,
79
+ });
66
80
  }
67
81
  // =========================================================================
68
82
  // Top-Level Convenience Shortcuts
package/dist/index.cjs CHANGED
@@ -14,13 +14,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.BotcastWebhook = exports.BotcastAdminClient = exports.BotcastClient = void 0;
17
+ exports.BotcastSocketClient = exports.BotcastWebhook = exports.BotcastAdminClient = exports.BotcastClient = void 0;
18
18
  var client_js_1 = require("./client.js");
19
19
  Object.defineProperty(exports, "BotcastClient", { enumerable: true, get: function () { return client_js_1.BotcastClient; } });
20
20
  var admin_js_1 = require("./admin.js");
21
21
  Object.defineProperty(exports, "BotcastAdminClient", { enumerable: true, get: function () { return admin_js_1.BotcastAdminClient; } });
22
22
  var index_js_1 = require("./webhooks/index.js");
23
23
  Object.defineProperty(exports, "BotcastWebhook", { enumerable: true, get: function () { return index_js_1.BotcastWebhook; } });
24
+ var index_js_2 = require("./socket/index.js");
25
+ Object.defineProperty(exports, "BotcastSocketClient", { enumerable: true, get: function () { return index_js_2.BotcastSocketClient; } });
24
26
  __exportStar(require("./errors.js"), exports);
25
27
  __exportStar(require("./types/index.js"), exports);
26
28
  // Default export
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { BotcastClient } from './client.js';
2
2
  export { BotcastAdminClient, BotcastAdminConfig, CreateAdminInstanceOptions, AdminInstanceRecord } from './admin.js';
3
3
  export { BotcastWebhook } from './webhooks/index.js';
4
+ export { BotcastSocketClient, BotcastSocketOptions } from './socket/index.js';
4
5
  export * from './errors.js';
5
6
  export * from './types/index.js';
6
7
  import { BotcastClient } from './client.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACrH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACrH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,eAAe,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export { BotcastClient } from './client.js';
2
2
  export { BotcastAdminClient } from './admin.js';
3
3
  export { BotcastWebhook } from './webhooks/index.js';
4
+ export { BotcastSocketClient } from './socket/index.js';
4
5
  export * from './errors.js';
5
6
  export * from './types/index.js';
6
7
  // Default export
@@ -13,6 +13,23 @@ class MessagesModule extends base_js_1.BaseModule {
13
13
  body: payload,
14
14
  });
15
15
  }
16
+ /**
17
+ * Sends modern WhatsApp interactive native flow buttons (Quick Reply, CTA URL, Call, Copy Code).
18
+ *
19
+ * @param recipient Target phone number or JID
20
+ * @param buttonsOptions Buttons configuration (body, title, footer, buttons array)
21
+ */
22
+ async sendButtons(recipient, buttonsOptions) {
23
+ return this.request({
24
+ method: 'POST',
25
+ path: this.buildPath('buttons'),
26
+ body: {
27
+ recipient,
28
+ type: 'buttons',
29
+ ...buttonsOptions,
30
+ },
31
+ });
32
+ }
16
33
  /**
17
34
  * Sends a plain text message.
18
35
  *
@@ -1,10 +1,17 @@
1
1
  import { BaseModule } from './base.js';
2
- import { SendMessageResponse, SendOTPOptions, MessageKey, BaseMessageOptions } from '../types/index.js';
2
+ import { SendMessageResponse, SendOTPOptions, SendButtonsOptions, MessageKey, BaseMessageOptions } from '../types/index.js';
3
3
  export declare class MessagesModule extends BaseModule {
4
4
  /**
5
5
  * Sends a raw message payload to the Botcast gateway.
6
6
  */
7
7
  send(payload: Record<string, any>): Promise<SendMessageResponse>;
8
+ /**
9
+ * Sends modern WhatsApp interactive native flow buttons (Quick Reply, CTA URL, Call, Copy Code).
10
+ *
11
+ * @param recipient Target phone number or JID
12
+ * @param buttonsOptions Buttons configuration (body, title, footer, buttons array)
13
+ */
14
+ sendButtons(recipient: string, buttonsOptions: SendButtonsOptions): Promise<SendMessageResponse>;
8
15
  /**
9
16
  * Sends a plain text message.
10
17
  *
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/modules/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,mBAAmB,EAMnB,cAAc,EACd,UAAU,EACV,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,cAAe,SAAQ,UAAU;IAC5C;;OAEG;IACU,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQ7E;;;;;;OAMG;IACU,QAAQ,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B;;;;;OAKG;IACU,OAAO,CAClB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,mBAAmB,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAkBtD;;OAEG;IACU,SAAS,CACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAChE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B;;OAEG;IACU,SAAS,CACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAChE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B;;OAEG;IACU,SAAS,CACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EACjE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B;;OAEG;IACU,SAAS,CACpB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAC9C,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAU/B;;OAEG;IACU,YAAY,CACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EACpG,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B;;OAEG;IACU,WAAW,CACtB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAChD,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B;;OAEG;IACU,YAAY,CACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAClF,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B;;OAEG;IACU,WAAW,CACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,EAC/I,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAoB/B;;OAEG;IACU,QAAQ,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,EAClE,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,mBAAmB,CAAC;IAS/B;;OAEG;IACU,OAAO,CAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAQ/D;;OAEG;IACU,IAAI,CACf,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAQ/D;;OAEG;IACU,MAAM,CACjB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,UAAU,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAQ/D;;OAEG;IACU,UAAU,CACrB,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,GAC9B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAS/D;;OAEG;IACU,KAAK,CAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAQ/D;;;;;;;OAOG;IACU,GAAG,CACd,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,UAAU,EACf,IAAI,GAAE,CAAC,GAAG,CAAK,EACf,QAAQ,GAAE,MAAc,GACvB,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;CAOhE"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/modules/messages.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,23 @@ export class MessagesModule extends BaseModule {
10
10
  body: payload,
11
11
  });
12
12
  }
13
+ /**
14
+ * Sends modern WhatsApp interactive native flow buttons (Quick Reply, CTA URL, Call, Copy Code).
15
+ *
16
+ * @param recipient Target phone number or JID
17
+ * @param buttonsOptions Buttons configuration (body, title, footer, buttons array)
18
+ */
19
+ async sendButtons(recipient, buttonsOptions) {
20
+ return this.request({
21
+ method: 'POST',
22
+ path: this.buildPath('buttons'),
23
+ body: {
24
+ recipient,
25
+ type: 'buttons',
26
+ ...buttonsOptions,
27
+ },
28
+ });
29
+ }
13
30
  /**
14
31
  * Sends a plain text message.
15
32
  *
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BotcastSocketClient = void 0;
4
+ const socket_io_client_1 = require("socket.io-client");
5
+ /**
6
+ * BotcastSocketClient
7
+ * Real-time event streaming client powered by Socket.io.
8
+ * Provides authenticated multi-tenant real-time subscriptions to WhatsApp and Telegram instance events.
9
+ */
10
+ class BotcastSocketClient {
11
+ socket = null;
12
+ config;
13
+ socketOptions;
14
+ constructor(config, options = {}) {
15
+ this.config = config;
16
+ this.socketOptions = options;
17
+ if (options.autoConnect) {
18
+ this.connect();
19
+ }
20
+ }
21
+ /**
22
+ * Establish the real-time Socket.io connection to the Botcast Gateway.
23
+ */
24
+ connect() {
25
+ if (this.socket && this.socket.connected) {
26
+ return this.socket;
27
+ }
28
+ const { baseUrl, instanceId, instanceToken } = this.config;
29
+ const cleanBaseUrl = baseUrl.replace(/\/+$/, '');
30
+ this.socket = (0, socket_io_client_1.io)(cleanBaseUrl, {
31
+ path: '/socket.io',
32
+ transports: ['websocket', 'polling'],
33
+ autoConnect: true,
34
+ reconnection: true,
35
+ reconnectionAttempts: Infinity,
36
+ reconnectionDelay: 1000,
37
+ reconnectionDelayMax: 5000,
38
+ auth: {
39
+ instanceId,
40
+ token: instanceToken,
41
+ },
42
+ query: {
43
+ instanceId,
44
+ token: instanceToken,
45
+ },
46
+ extraHeaders: {
47
+ 'x-instance-id': instanceId,
48
+ 'x-instance-token': instanceToken,
49
+ },
50
+ ...this.socketOptions,
51
+ });
52
+ return this.socket;
53
+ }
54
+ /**
55
+ * Disconnect the active Socket.io connection.
56
+ */
57
+ disconnect() {
58
+ if (this.socket) {
59
+ this.socket.disconnect();
60
+ }
61
+ return this;
62
+ }
63
+ /**
64
+ * Check whether the socket is currently connected.
65
+ */
66
+ isConnected() {
67
+ return Boolean(this.socket && this.socket.connected);
68
+ }
69
+ /**
70
+ * Retrieve the underlying Socket.io-client Socket instance.
71
+ */
72
+ getRawSocket() {
73
+ return this.socket;
74
+ }
75
+ /**
76
+ * Register a typed event listener for instance events.
77
+ *
78
+ * @param event The event name
79
+ * @param handler The event callback function
80
+ */
81
+ on(event, handler) {
82
+ const s = this.ensureSocket();
83
+ s.on(event, handler);
84
+ return this;
85
+ }
86
+ /**
87
+ * Register a one-time event listener.
88
+ */
89
+ once(event, handler) {
90
+ const s = this.ensureSocket();
91
+ s.once(event, handler);
92
+ return this;
93
+ }
94
+ /**
95
+ * Remove an event listener.
96
+ */
97
+ off(event, handler) {
98
+ if (this.socket) {
99
+ if (handler) {
100
+ this.socket.off(event, handler);
101
+ }
102
+ else {
103
+ this.socket.off(event);
104
+ }
105
+ }
106
+ return this;
107
+ }
108
+ /**
109
+ * Register a wildcard listener for all incoming events.
110
+ */
111
+ onAny(handler) {
112
+ const s = this.ensureSocket();
113
+ s.onAny(handler);
114
+ return this;
115
+ }
116
+ /**
117
+ * Remove a wildcard listener.
118
+ */
119
+ offAny(handler) {
120
+ if (this.socket) {
121
+ this.socket.offAny(handler);
122
+ }
123
+ return this;
124
+ }
125
+ // =========================================================================
126
+ // High-Level Convenience Event Listeners
127
+ // =========================================================================
128
+ /**
129
+ * Listen for incoming and outgoing messages (messages.upsert or chat_message).
130
+ */
131
+ onMessage(handler) {
132
+ this.on('messages.upsert', handler);
133
+ this.on('chat_message', handler);
134
+ return this;
135
+ }
136
+ /**
137
+ * Listen for message delivery status updates (sent, delivered, read receipts).
138
+ */
139
+ onMessageStatus(handler) {
140
+ return this.on('message_status', handler);
141
+ }
142
+ /**
143
+ * Listen for message reactions (emoji added/removed).
144
+ */
145
+ onReaction(handler) {
146
+ return this.on('message_reaction', handler);
147
+ }
148
+ /**
149
+ * Listen for message revocations/deletions.
150
+ */
151
+ onMessageDeleted(handler) {
152
+ return this.on('message_deleted', handler);
153
+ }
154
+ /**
155
+ * Listen for user presence changes (composing, recording, online, offline).
156
+ */
157
+ onPresence(handler) {
158
+ this.on('presence.update', handler);
159
+ this.on('presence_update', handler);
160
+ return this;
161
+ }
162
+ /**
163
+ * Listen for instance connection changes, QR code generation, and pairing codes.
164
+ */
165
+ onConnectionUpdate(handler) {
166
+ this.on('connection.update', handler);
167
+ this.on('instance_update', handler);
168
+ return this;
169
+ }
170
+ /**
171
+ * Listen for WhatsApp group participant changes (add, remove, promote, demote).
172
+ */
173
+ onGroupParticipants(handler) {
174
+ return this.on('group-participants.update', handler);
175
+ }
176
+ /**
177
+ * Listen for incoming WhatsApp calls.
178
+ */
179
+ onCall(handler) {
180
+ return this.on('call', handler);
181
+ }
182
+ /**
183
+ * Listen for generic instance event stream.
184
+ */
185
+ onEvent(handler) {
186
+ return this.on('instance_event', handler);
187
+ }
188
+ // =========================================================================
189
+ // Telegram-Specific Event Listeners
190
+ // =========================================================================
191
+ /**
192
+ * Listen for Telegram new messages.
193
+ */
194
+ onTelegramMessage(handler) {
195
+ return this.on('telegram.message', handler);
196
+ }
197
+ /**
198
+ * Listen for Telegram message edits.
199
+ */
200
+ onTelegramMessageEdited(handler) {
201
+ return this.on('telegram.message_edited', handler);
202
+ }
203
+ /**
204
+ * Listen for Telegram message deletions.
205
+ */
206
+ onTelegramMessageDeleted(handler) {
207
+ return this.on('telegram.message_deleted', handler);
208
+ }
209
+ /**
210
+ * Listen for Telegram message read receipts.
211
+ */
212
+ onTelegramMessageRead(handler) {
213
+ return this.on('telegram.message_read', handler);
214
+ }
215
+ /**
216
+ * Listen for Telegram user updates (presence, typing, online status).
217
+ */
218
+ onTelegramUserUpdate(handler) {
219
+ return this.on('telegram.user_update', handler);
220
+ }
221
+ /**
222
+ * Listen for Telegram chat actions (user joined, user left, etc.).
223
+ */
224
+ onTelegramChatAction(handler) {
225
+ return this.on('telegram.chat_action', handler);
226
+ }
227
+ /**
228
+ * Listen for Telegram inline & callback button queries.
229
+ */
230
+ onTelegramCallbackQuery(handler) {
231
+ return this.on('telegram.callback_query', handler);
232
+ }
233
+ ensureSocket() {
234
+ if (!this.socket) {
235
+ this.connect();
236
+ }
237
+ return this.socket;
238
+ }
239
+ }
240
+ exports.BotcastSocketClient = BotcastSocketClient;