@oxidezap/baileyrs 0.0.7

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 (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +490 -0
  3. package/WAProto/index.d.ts +13875 -0
  4. package/WAProto/index.js +175 -0
  5. package/lib/Defaults/index.d.ts +9 -0
  6. package/lib/Defaults/index.d.ts.map +1 -0
  7. package/lib/Defaults/index.js +32 -0
  8. package/lib/Defaults/index.js.map +1 -0
  9. package/lib/Socket/blocking.d.ts +6 -0
  10. package/lib/Socket/blocking.d.ts.map +1 -0
  11. package/lib/Socket/blocking.js +9 -0
  12. package/lib/Socket/blocking.js.map +1 -0
  13. package/lib/Socket/chat-actions.d.ts +32 -0
  14. package/lib/Socket/chat-actions.d.ts.map +1 -0
  15. package/lib/Socket/chat-actions.js +78 -0
  16. package/lib/Socket/chat-actions.js.map +1 -0
  17. package/lib/Socket/contacts.d.ts +10 -0
  18. package/lib/Socket/contacts.d.ts.map +1 -0
  19. package/lib/Socket/contacts.js +21 -0
  20. package/lib/Socket/contacts.js.map +1 -0
  21. package/lib/Socket/events.d.ts +10 -0
  22. package/lib/Socket/events.d.ts.map +1 -0
  23. package/lib/Socket/events.js +293 -0
  24. package/lib/Socket/events.js.map +1 -0
  25. package/lib/Socket/groups.d.ts +28 -0
  26. package/lib/Socket/groups.d.ts.map +1 -0
  27. package/lib/Socket/groups.js +90 -0
  28. package/lib/Socket/groups.js.map +1 -0
  29. package/lib/Socket/index.d.ts +202 -0
  30. package/lib/Socket/index.d.ts.map +1 -0
  31. package/lib/Socket/index.js +378 -0
  32. package/lib/Socket/index.js.map +1 -0
  33. package/lib/Socket/messages.d.ts +42 -0
  34. package/lib/Socket/messages.d.ts.map +1 -0
  35. package/lib/Socket/messages.js +172 -0
  36. package/lib/Socket/messages.js.map +1 -0
  37. package/lib/Socket/newsletter.d.ts +9 -0
  38. package/lib/Socket/newsletter.d.ts.map +1 -0
  39. package/lib/Socket/newsletter.js +18 -0
  40. package/lib/Socket/newsletter.js.map +1 -0
  41. package/lib/Socket/presence.d.ts +7 -0
  42. package/lib/Socket/presence.d.ts.map +1 -0
  43. package/lib/Socket/presence.js +12 -0
  44. package/lib/Socket/presence.js.map +1 -0
  45. package/lib/Socket/profile.d.ts +14 -0
  46. package/lib/Socket/profile.d.ts.map +1 -0
  47. package/lib/Socket/profile.js +36 -0
  48. package/lib/Socket/profile.js.map +1 -0
  49. package/lib/Socket/transport.d.ts +12 -0
  50. package/lib/Socket/transport.d.ts.map +1 -0
  51. package/lib/Socket/transport.js +90 -0
  52. package/lib/Socket/transport.js.map +1 -0
  53. package/lib/Socket/types.d.ts +30 -0
  54. package/lib/Socket/types.d.ts.map +1 -0
  55. package/lib/Socket/types.js +3 -0
  56. package/lib/Socket/types.js.map +1 -0
  57. package/lib/Types/Auth.d.ts +144 -0
  58. package/lib/Types/Auth.d.ts.map +1 -0
  59. package/lib/Types/Auth.js +2 -0
  60. package/lib/Types/Auth.js.map +1 -0
  61. package/lib/Types/BinaryNode.d.ts +15 -0
  62. package/lib/Types/BinaryNode.d.ts.map +1 -0
  63. package/lib/Types/BinaryNode.js +2 -0
  64. package/lib/Types/BinaryNode.js.map +1 -0
  65. package/lib/Types/Bussines.d.ts +25 -0
  66. package/lib/Types/Bussines.d.ts.map +1 -0
  67. package/lib/Types/Bussines.js +2 -0
  68. package/lib/Types/Bussines.js.map +1 -0
  69. package/lib/Types/Call.d.ts +15 -0
  70. package/lib/Types/Call.d.ts.map +1 -0
  71. package/lib/Types/Call.js +2 -0
  72. package/lib/Types/Call.js.map +1 -0
  73. package/lib/Types/Chat.d.ts +123 -0
  74. package/lib/Types/Chat.d.ts.map +1 -0
  75. package/lib/Types/Chat.js +8 -0
  76. package/lib/Types/Chat.js.map +1 -0
  77. package/lib/Types/Contact.d.ts +24 -0
  78. package/lib/Types/Contact.d.ts.map +1 -0
  79. package/lib/Types/Contact.js +2 -0
  80. package/lib/Types/Contact.js.map +1 -0
  81. package/lib/Types/Events.d.ts +238 -0
  82. package/lib/Types/Events.d.ts.map +1 -0
  83. package/lib/Types/Events.js +2 -0
  84. package/lib/Types/Events.js.map +1 -0
  85. package/lib/Types/GroupMetadata.d.ts +67 -0
  86. package/lib/Types/GroupMetadata.d.ts.map +1 -0
  87. package/lib/Types/GroupMetadata.js +2 -0
  88. package/lib/Types/GroupMetadata.js.map +1 -0
  89. package/lib/Types/Label.d.ts +47 -0
  90. package/lib/Types/Label.d.ts.map +1 -0
  91. package/lib/Types/Label.js +25 -0
  92. package/lib/Types/Label.js.map +1 -0
  93. package/lib/Types/LabelAssociation.d.ts +30 -0
  94. package/lib/Types/LabelAssociation.d.ts.map +1 -0
  95. package/lib/Types/LabelAssociation.js +7 -0
  96. package/lib/Types/LabelAssociation.js.map +1 -0
  97. package/lib/Types/Message.d.ts +298 -0
  98. package/lib/Types/Message.d.ts.map +1 -0
  99. package/lib/Types/Message.js +12 -0
  100. package/lib/Types/Message.js.map +1 -0
  101. package/lib/Types/Newsletter.d.ts +98 -0
  102. package/lib/Types/Newsletter.d.ts.map +1 -0
  103. package/lib/Types/Newsletter.js +31 -0
  104. package/lib/Types/Newsletter.js.map +1 -0
  105. package/lib/Types/Socket.d.ts +54 -0
  106. package/lib/Types/Socket.d.ts.map +1 -0
  107. package/lib/Types/Socket.js +2 -0
  108. package/lib/Types/Socket.js.map +1 -0
  109. package/lib/Types/State.d.ts +29 -0
  110. package/lib/Types/State.d.ts.map +1 -0
  111. package/lib/Types/State.js +2 -0
  112. package/lib/Types/State.js.map +1 -0
  113. package/lib/Types/index.d.ts +60 -0
  114. package/lib/Types/index.d.ts.map +1 -0
  115. package/lib/Types/index.js +25 -0
  116. package/lib/Types/index.js.map +1 -0
  117. package/lib/Utils/browser-utils.d.ts +3 -0
  118. package/lib/Utils/browser-utils.d.ts.map +1 -0
  119. package/lib/Utils/browser-utils.js +22 -0
  120. package/lib/Utils/browser-utils.js.map +1 -0
  121. package/lib/Utils/event-buffer.d.ts +7 -0
  122. package/lib/Utils/event-buffer.d.ts.map +1 -0
  123. package/lib/Utils/event-buffer.js +42 -0
  124. package/lib/Utils/event-buffer.js.map +1 -0
  125. package/lib/Utils/generics.d.ts +13 -0
  126. package/lib/Utils/generics.d.ts.map +1 -0
  127. package/lib/Utils/generics.js +40 -0
  128. package/lib/Utils/generics.js.map +1 -0
  129. package/lib/Utils/index.d.ts +10 -0
  130. package/lib/Utils/index.d.ts.map +1 -0
  131. package/lib/Utils/index.js +10 -0
  132. package/lib/Utils/index.js.map +1 -0
  133. package/lib/Utils/logger.d.ts +13 -0
  134. package/lib/Utils/logger.d.ts.map +1 -0
  135. package/lib/Utils/logger.js +3 -0
  136. package/lib/Utils/logger.js.map +1 -0
  137. package/lib/Utils/messages-media.d.ts +51 -0
  138. package/lib/Utils/messages-media.d.ts.map +1 -0
  139. package/lib/Utils/messages-media.js +223 -0
  140. package/lib/Utils/messages-media.js.map +1 -0
  141. package/lib/Utils/messages.d.ts +88 -0
  142. package/lib/Utils/messages.d.ts.map +1 -0
  143. package/lib/Utils/messages.js +730 -0
  144. package/lib/Utils/messages.js.map +1 -0
  145. package/lib/Utils/use-bridge-store.d.ts +13 -0
  146. package/lib/Utils/use-bridge-store.d.ts.map +1 -0
  147. package/lib/Utils/use-bridge-store.js +124 -0
  148. package/lib/Utils/use-bridge-store.js.map +1 -0
  149. package/lib/Utils/use-memory-store.d.ts +9 -0
  150. package/lib/Utils/use-memory-store.d.ts.map +1 -0
  151. package/lib/Utils/use-memory-store.js +23 -0
  152. package/lib/Utils/use-memory-store.js.map +1 -0
  153. package/lib/Utils/use-multi-file-auth-state.d.ts +13 -0
  154. package/lib/Utils/use-multi-file-auth-state.d.ts.map +1 -0
  155. package/lib/Utils/use-multi-file-auth-state.js +26 -0
  156. package/lib/Utils/use-multi-file-auth-state.js.map +1 -0
  157. package/lib/Utils/wrap-legacy-store.d.ts +36 -0
  158. package/lib/Utils/wrap-legacy-store.d.ts.map +1 -0
  159. package/lib/Utils/wrap-legacy-store.js +708 -0
  160. package/lib/Utils/wrap-legacy-store.js.map +1 -0
  161. package/lib/WABinary/index.d.ts +2 -0
  162. package/lib/WABinary/index.d.ts.map +1 -0
  163. package/lib/WABinary/index.js +2 -0
  164. package/lib/WABinary/index.js.map +1 -0
  165. package/lib/WABinary/jid-utils.d.ts +20 -0
  166. package/lib/WABinary/jid-utils.d.ts.map +1 -0
  167. package/lib/WABinary/jid-utils.js +51 -0
  168. package/lib/WABinary/jid-utils.js.map +1 -0
  169. package/lib/index.d.ts +10 -0
  170. package/lib/index.d.ts.map +1 -0
  171. package/lib/index.js +9 -0
  172. package/lib/index.js.map +1 -0
  173. package/package.json +98 -0
@@ -0,0 +1,25 @@
1
+ export * from './Auth.js';
2
+ export * from './BinaryNode.js';
3
+ export * from './GroupMetadata.js';
4
+ export * from './Chat.js';
5
+ export * from './Contact.js';
6
+ export * from './State.js';
7
+ export * from './Message.js';
8
+ export * from './Socket.js';
9
+ export * from './Events.js';
10
+ export * from './Call.js';
11
+ export * from './Newsletter.js';
12
+ export var DisconnectReason;
13
+ (function (DisconnectReason) {
14
+ DisconnectReason[DisconnectReason["connectionClosed"] = 428] = "connectionClosed";
15
+ DisconnectReason[DisconnectReason["connectionLost"] = 499] = "connectionLost";
16
+ DisconnectReason[DisconnectReason["connectionReplaced"] = 440] = "connectionReplaced";
17
+ DisconnectReason[DisconnectReason["timedOut"] = 408] = "timedOut";
18
+ DisconnectReason[DisconnectReason["loggedOut"] = 401] = "loggedOut";
19
+ DisconnectReason[DisconnectReason["badSession"] = 500] = "badSession";
20
+ DisconnectReason[DisconnectReason["restartRequired"] = 515] = "restartRequired";
21
+ DisconnectReason[DisconnectReason["multideviceMismatch"] = 411] = "multideviceMismatch";
22
+ DisconnectReason[DisconnectReason["forbidden"] = 403] = "forbidden";
23
+ DisconnectReason[DisconnectReason["unavailableService"] = 503] = "unavailableService";
24
+ })(DisconnectReason || (DisconnectReason = {}));
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Types/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAe5B,MAAM,CAAN,IAAY,gBAWX;AAXD,WAAY,gBAAgB;IAC3B,iFAAsB,CAAA;IACtB,6EAAoB,CAAA;IACpB,qFAAwB,CAAA;IACxB,iEAAc,CAAA;IACd,mEAAe,CAAA;IACf,qEAAgB,CAAA;IAChB,+EAAqB,CAAA;IACrB,uFAAyB,CAAA;IACzB,mEAAe,CAAA;IACf,qFAAwB,CAAA;AACzB,CAAC,EAXW,gBAAgB,KAAhB,gBAAgB,QAW3B"}
@@ -0,0 +1,3 @@
1
+ import type { BrowsersMap } from '../Types/index.js';
2
+ export declare const Browsers: BrowsersMap;
3
+ //# sourceMappingURL=browser-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-utils.d.ts","sourceRoot":"","sources":["../../src/Utils/browser-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAgBjD,eAAO,MAAM,QAAQ,EAAE,WAMtB,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { platform, release } from 'node:os';
2
+ const PLATFORM_MAP = {
3
+ aix: 'AIX',
4
+ darwin: 'Mac OS',
5
+ win32: 'Windows',
6
+ android: 'Android',
7
+ freebsd: 'FreeBSD',
8
+ openbsd: 'OpenBSD',
9
+ sunos: 'Solaris',
10
+ linux: undefined,
11
+ haiku: undefined,
12
+ cygwin: undefined,
13
+ netbsd: undefined
14
+ };
15
+ export const Browsers = {
16
+ ubuntu: browser => ['Ubuntu', browser, '22.04.4'],
17
+ macOS: browser => ['Mac OS', browser, '14.4.1'],
18
+ baileys: browser => ['Baileys', browser, '6.5.0'],
19
+ windows: browser => ['Windows', browser, '10.0.22631'],
20
+ appropriate: browser => [PLATFORM_MAP[platform()] || 'Ubuntu', browser, release()]
21
+ };
22
+ //# sourceMappingURL=browser-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-utils.js","sourceRoot":"","sources":["../../src/Utils/browser-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAG3C,MAAM,YAAY,GAAG;IACpB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;CACjB,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAgB;IACpC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;IACjD,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC;IAC/C,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC;IACtD,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;CAClF,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { BaileysEventEmitter } from '../Types/index.js';
2
+ /**
3
+ * Simple event emitter with `process()` support for Baileys events.
4
+ * The bridge handles event ordering internally — no buffering needed.
5
+ */
6
+ export declare const makeEventBuffer: () => BaileysEventEmitter;
7
+ //# sourceMappingURL=event-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-buffer.d.ts","sourceRoot":"","sources":["../../src/Utils/event-buffer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAmB,MAAM,gBAAgB,CAAA;AAE1E;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAO,mBAuClC,CAAA"}
@@ -0,0 +1,42 @@
1
+ import EventEmitter from 'node:events';
2
+ /**
3
+ * Simple event emitter with `process()` support for Baileys events.
4
+ * The bridge handles event ordering internally — no buffering needed.
5
+ */
6
+ export const makeEventBuffer = () => {
7
+ const ev = new EventEmitter();
8
+ ev.setMaxListeners(100);
9
+ const emitter = ev;
10
+ emitter.process = handler => {
11
+ const EVENTS = [
12
+ 'connection.update',
13
+ 'creds.update',
14
+ 'messaging-history.set',
15
+ 'chats.upsert',
16
+ 'chats.update',
17
+ 'chats.delete',
18
+ 'contacts.upsert',
19
+ 'contacts.update',
20
+ 'messages.upsert',
21
+ 'messages.update',
22
+ 'messages.delete',
23
+ 'messages.reaction',
24
+ 'message-receipt.update',
25
+ 'groups.upsert',
26
+ 'groups.update',
27
+ 'group-participants.update',
28
+ 'blocklist.set',
29
+ 'blocklist.update',
30
+ 'presence.update',
31
+ 'labels.edit',
32
+ 'labels.association'
33
+ ];
34
+ for (const event of EVENTS) {
35
+ ev.on(event, (data) => {
36
+ void handler({ [event]: data });
37
+ });
38
+ }
39
+ };
40
+ return emitter;
41
+ };
42
+ //# sourceMappingURL=event-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-buffer.js","sourceRoot":"","sources":["../../src/Utils/event-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,aAAa,CAAA;AAGtC;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAwB,EAAE;IACxD,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAA;IAC7B,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IAEvB,MAAM,OAAO,GAAG,EAAoC,CAAA;IAEpD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE;QAC3B,MAAM,MAAM,GAA8B;YACzC,mBAAmB;YACnB,cAAc;YACd,uBAAuB;YACvB,cAAc;YACd,cAAc;YACd,cAAc;YACd,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,iBAAiB;YACjB,mBAAmB;YACnB,wBAAwB;YACxB,eAAe;YACf,eAAe;YACf,2BAA2B;YAC3B,eAAe;YACf,kBAAkB;YAClB,iBAAiB;YACjB,aAAa;YACb,oBAAoB;SACpB,CAAA;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAa,EAAE,EAAE;gBAC9B,KAAK,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAA8B,CAAC,CAAA;YAC5D,CAAC,CAAC,CAAA;QACH,CAAC;IACF,CAAC,CAAA;IAED,OAAO,OAAO,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { WAVersion } from '../Types/index.js';
2
+ /** unix timestamp of a date in seconds */
3
+ export declare const unixTimestampSeconds: (date?: Date) => number;
4
+ export declare const fetchLatestWaWebVersion: (options?: RequestInit) => Promise<{
5
+ version: WAVersion;
6
+ isLatest: boolean;
7
+ error?: undefined;
8
+ } | {
9
+ version: WAVersion;
10
+ isLatest: boolean;
11
+ error: unknown;
12
+ }>;
13
+ //# sourceMappingURL=generics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generics.d.ts","sourceRoot":"","sources":["../../src/Utils/generics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB,GAAI,OAAM,IAAiB,WAAsC,CAAA;AAElG,eAAO,MAAM,uBAAuB,GAAU,UAAS,WAAgB;aAiCnC,SAAS;;;;;;;EAM5C,CAAA"}
@@ -0,0 +1,40 @@
1
+ import { Boom } from '@hapi/boom';
2
+ import { DEFAULT_CONNECTION_CONFIG } from '../Defaults/index.js';
3
+ const baileysVersion = DEFAULT_CONNECTION_CONFIG.version;
4
+ /** unix timestamp of a date in seconds */
5
+ export const unixTimestampSeconds = (date = new Date()) => Math.floor(date.getTime() / 1000);
6
+ export const fetchLatestWaWebVersion = async (options = {}) => {
7
+ try {
8
+ const defaultHeaders = {
9
+ 'sec-fetch-site': 'none',
10
+ 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
11
+ };
12
+ const headers = { ...defaultHeaders, ...options.headers };
13
+ const response = await fetch('https://web.whatsapp.com/sw.js', {
14
+ ...options,
15
+ method: 'GET',
16
+ headers
17
+ });
18
+ if (!response.ok) {
19
+ throw new Boom(`Failed to fetch sw.js: ${response.statusText}`, { statusCode: response.status });
20
+ }
21
+ const data = await response.text();
22
+ const regex = /\\?"client_revision\\?":\s*(\d+)/;
23
+ const match = data.match(regex);
24
+ if (!match?.[1]) {
25
+ return {
26
+ version: baileysVersion,
27
+ isLatest: false,
28
+ error: { message: 'Could not find client revision in the fetched content' }
29
+ };
30
+ }
31
+ return {
32
+ version: [2, 3000, +match[1]],
33
+ isLatest: true
34
+ };
35
+ }
36
+ catch (error) {
37
+ return { version: baileysVersion, isLatest: false, error };
38
+ }
39
+ };
40
+ //# sourceMappingURL=generics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/Utils/generics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,MAAM,cAAc,GAAG,yBAAyB,CAAC,OAAO,CAAA;AAGxD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAa,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;AAElG,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,UAAuB,EAAE,EAAE,EAAE;IAC1E,IAAI,CAAC;QACJ,MAAM,cAAc,GAAG;YACtB,gBAAgB,EAAE,MAAM;YACxB,YAAY,EACX,uGAAuG;SACxG,CAAA;QAED,MAAM,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAEzD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,EAAE;YAC9D,GAAG,OAAO;YACV,MAAM,EAAE,KAAK;YACb,OAAO;SACP,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,IAAI,CAAC,0BAA0B,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QACjG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,MAAM,KAAK,GAAG,kCAAkC,CAAA;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAE/B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO;gBACN,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,EAAE,OAAO,EAAE,uDAAuD,EAAE;aAC3E,CAAA;QACF,CAAC;QAED,OAAO;YACN,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAc;YAC1C,QAAQ,EAAE,IAAI;SACd,CAAA;IACF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IAC3D,CAAC;AACF,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ export * from './generics.js';
2
+ export * from './messages.js';
3
+ export * from './messages-media.js';
4
+ export * from './use-multi-file-auth-state.js';
5
+ export * from './event-buffer.js';
6
+ export * from './browser-utils.js';
7
+ export * from './use-bridge-store.js';
8
+ export * from './use-memory-store.js';
9
+ export * from './wrap-legacy-store.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,10 @@
1
+ export * from './generics.js';
2
+ export * from './messages.js';
3
+ export * from './messages-media.js';
4
+ export * from './use-multi-file-auth-state.js';
5
+ export * from './event-buffer.js';
6
+ export * from './browser-utils.js';
7
+ export * from './use-bridge-store.js';
8
+ export * from './use-memory-store.js';
9
+ export * from './wrap-legacy-store.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,13 @@
1
+ import P from 'pino';
2
+ export interface ILogger {
3
+ level: string;
4
+ child(obj: Record<string, unknown>): ILogger;
5
+ trace(obj: unknown, msg?: string): void;
6
+ debug(obj: unknown, msg?: string): void;
7
+ info(obj: unknown, msg?: string): void;
8
+ warn(obj: unknown, msg?: string): void;
9
+ error(obj: unknown, msg?: string): void;
10
+ }
11
+ declare const _default: P.Logger<never, boolean>;
12
+ export default _default;
13
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/Utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAA;AAEpB,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAA;IAC5C,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvC;;AAED,wBAAyE"}
@@ -0,0 +1,3 @@
1
+ import P from 'pino';
2
+ export default P({ timestamp: () => `,"time":"${new Date().toJSON()}"` });
3
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/Utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,MAAM,CAAA;AAYpB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import { Readable } from 'node:stream';
3
+ import type { WAMediaUpload } from '../Types/index.js';
4
+ import type { ILogger } from './logger.js';
5
+ export declare const extractImageThumb: (bufferOrFilePath: Readable | Buffer | string, width?: number) => Promise<{
6
+ buffer: any;
7
+ original: {
8
+ width: any;
9
+ height: any;
10
+ };
11
+ }>;
12
+ /** gets the SHA256 of the given media message */
13
+ export declare function getAudioDuration(buffer: Buffer | string | Readable): Promise<number | undefined>;
14
+ /**
15
+ referenced from and modifying https://github.com/wppconnect-team/wa-js/blob/main/src/chat/functions/prepareAudioWaveform.ts
16
+ */
17
+ export declare function getAudioWaveform(buffer: Buffer | string | Readable, logger?: ILogger): Promise<Uint8Array<ArrayBuffer> | undefined>;
18
+ export declare const toReadable: (buffer: Buffer) => Readable;
19
+ export declare const toBuffer: (stream: Readable) => Promise<Buffer<ArrayBuffer>>;
20
+ export declare const getStream: (item: WAMediaUpload, opts?: RequestInit & {
21
+ maxContentLength?: number;
22
+ }) => Promise<{
23
+ readonly stream: Readable;
24
+ readonly type: "buffer";
25
+ } | {
26
+ readonly stream: Readable;
27
+ readonly type: "readable";
28
+ } | {
29
+ readonly stream: Readable;
30
+ readonly type: "remote";
31
+ } | {
32
+ readonly stream: import("fs").ReadStream;
33
+ readonly type: "file";
34
+ }>;
35
+ /** generates a thumbnail for a given media, if required */
36
+ export declare function generateThumbnail(bufferOrPath: Buffer | string, mediaType: 'video' | 'image', options: {
37
+ logger?: ILogger;
38
+ }): Promise<{
39
+ thumbnail: string | undefined;
40
+ originalImageDimensions: {
41
+ width: number;
42
+ height: number;
43
+ } | undefined;
44
+ }>;
45
+ export declare const getHttpStream: (url: string | URL, options?: RequestInit & {
46
+ isStream?: true;
47
+ }) => Promise<Readable>;
48
+ export type MediaDownloadOptions = {
49
+ options?: RequestInit;
50
+ };
51
+ //# sourceMappingURL=messages-media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages-media.d.ts","sourceRoot":"","sources":["../../src/Utils/messages-media.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAKpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AA0CvC,eAAO,MAAM,iBAAiB,GAAU,kBAAkB,QAAQ,GAAG,MAAM,GAAG,MAAM,EAAE,cAAU;;;;;;EA2C/F,CAAA;AAED,iDAAiD;AACjD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,+BAexE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,gDAyC1F;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,aAKxC,CAAA;AAED,eAAO,MAAM,QAAQ,GAAU,QAAQ,QAAQ,iCAQ9C,CAAA;AAED,eAAO,MAAM,SAAS,GAAU,MAAM,aAAa,EAAE,OAAO,WAAW,GAAG;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;EAqBtG,CAAA;AAED,2DAA2D;AAC3D,wBAAsB,iBAAiB,CACtC,YAAY,EAAE,MAAM,GAAG,MAAM,EAC7B,SAAS,EAAE,OAAO,GAAG,OAAO,EAC5B,OAAO,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;;;eAGqC,MAAM;gBAAU,MAAM;;GA8C5D;AAED,eAAO,MAAM,aAAa,GAAU,KAAK,MAAM,GAAG,GAAG,EAAE,UAAS,WAAW,GAAG;IAAE,QAAQ,CAAC,EAAE,IAAI,CAAA;CAAO,sBAYrG,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAClC,OAAO,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA"}
@@ -0,0 +1,223 @@
1
+ import { Boom } from '@hapi/boom';
2
+ import { Buffer } from 'node:buffer';
3
+ import { execFile } from 'node:child_process';
4
+ import { createReadStream, promises as fs } from 'node:fs';
5
+ import { tmpdir } from 'node:os';
6
+ import { join } from 'node:path';
7
+ import { Readable } from 'node:stream';
8
+ const randomId = () => globalThis.crypto.randomUUID();
9
+ const getTmpFilesDirectory = () => tmpdir();
10
+ const getImageProcessingLibrary = async () => {
11
+ //@ts-ignore
12
+ const [jimp, sharp] = await Promise.all([import('jimp').catch(() => { }), import('sharp').catch(() => { })]);
13
+ if (sharp) {
14
+ return { sharp };
15
+ }
16
+ if (jimp) {
17
+ return { jimp };
18
+ }
19
+ throw new Boom('No image processing library available');
20
+ };
21
+ /** Extracts video thumb using FFMPEG */
22
+ const extractVideoThumb = async (path, destPath, time, size) => new Promise((resolve, reject) => {
23
+ execFile('ffmpeg', ['-ss', time, '-i', path, '-y', '-vf', `scale=${size.width}:-1`, '-vframes', '1', '-f', 'image2', destPath], err => {
24
+ if (err) {
25
+ reject(err);
26
+ }
27
+ else {
28
+ resolve();
29
+ }
30
+ });
31
+ });
32
+ export const extractImageThumb = async (bufferOrFilePath, width = 32) => {
33
+ // TODO: Move entirely to sharp, removing jimp as it supports readable streams
34
+ // This will have positive speed and performance impacts as well as minimizing RAM usage.
35
+ if (bufferOrFilePath instanceof Readable) {
36
+ bufferOrFilePath = await toBuffer(bufferOrFilePath);
37
+ }
38
+ const lib = await getImageProcessingLibrary();
39
+ if ('sharp' in lib && typeof lib.sharp?.default === 'function') {
40
+ const img = lib.sharp.default(bufferOrFilePath);
41
+ const dimensions = await img.metadata();
42
+ const buffer = await img.resize(width).jpeg({ quality: 50 }).toBuffer();
43
+ return {
44
+ buffer,
45
+ original: {
46
+ width: dimensions.width,
47
+ height: dimensions.height
48
+ }
49
+ };
50
+ }
51
+ else if ('jimp' in lib && typeof lib.jimp?.Jimp === 'object') {
52
+ const JimpClass = lib.jimp.Jimp;
53
+ const jimp = await JimpClass.read(bufferOrFilePath);
54
+ const dimensions = {
55
+ width: jimp.width,
56
+ height: jimp.height
57
+ };
58
+ const buffer = await jimp
59
+ .resize({ w: width, mode: lib.jimp.ResizeStrategy.BILINEAR })
60
+ .getBuffer('image/jpeg', { quality: 50 });
61
+ return {
62
+ buffer,
63
+ original: dimensions
64
+ };
65
+ }
66
+ else {
67
+ throw new Boom('No image processing library available');
68
+ }
69
+ };
70
+ /** gets the SHA256 of the given media message */
71
+ export async function getAudioDuration(buffer) {
72
+ const musicMetadata = await import('music-metadata');
73
+ let metadata;
74
+ const options = {
75
+ duration: true
76
+ };
77
+ if (Buffer.isBuffer(buffer)) {
78
+ metadata = await musicMetadata.parseBuffer(buffer, undefined, options);
79
+ }
80
+ else if (typeof buffer === 'string') {
81
+ metadata = await musicMetadata.parseFile(buffer, options);
82
+ }
83
+ else {
84
+ metadata = await musicMetadata.parseStream(buffer, undefined, options);
85
+ }
86
+ return metadata.format.duration;
87
+ }
88
+ /**
89
+ referenced from and modifying https://github.com/wppconnect-team/wa-js/blob/main/src/chat/functions/prepareAudioWaveform.ts
90
+ */
91
+ export async function getAudioWaveform(buffer, logger) {
92
+ try {
93
+ // @ts-ignore
94
+ const { default: decoder } = await import('audio-decode');
95
+ let audioData;
96
+ if (Buffer.isBuffer(buffer)) {
97
+ audioData = buffer;
98
+ }
99
+ else if (typeof buffer === 'string') {
100
+ const rStream = createReadStream(buffer);
101
+ audioData = await toBuffer(rStream);
102
+ }
103
+ else {
104
+ audioData = await toBuffer(buffer);
105
+ }
106
+ const audioBuffer = await decoder(audioData);
107
+ const rawData = audioBuffer.getChannelData(0); // We only need to work with one channel of data
108
+ const samples = 64; // Number of samples we want to have in our final data set
109
+ const blockSize = Math.floor(rawData.length / samples); // the number of samples in each subdivision
110
+ const filteredData = [];
111
+ for (let i = 0; i < samples; i++) {
112
+ const blockStart = blockSize * i; // the location of the first sample in the block
113
+ let sum = 0;
114
+ for (let j = 0; j < blockSize; j++) {
115
+ sum = sum + Math.abs(rawData[blockStart + j]); // find the sum of all the samples in the block
116
+ }
117
+ filteredData.push(sum / blockSize); // divide the sum by the block size to get the average
118
+ }
119
+ // This guarantees that the largest data point will be set to 1, and the rest of the data will scale proportionally.
120
+ const multiplier = Math.pow(Math.max(...filteredData), -1);
121
+ const normalizedData = filteredData.map(n => n * multiplier);
122
+ // Generate waveform like WhatsApp
123
+ const waveform = new Uint8Array(normalizedData.map(n => Math.floor(100 * n)));
124
+ return waveform;
125
+ }
126
+ catch (e) {
127
+ logger?.debug('Failed to generate waveform: ' + e);
128
+ }
129
+ }
130
+ export const toReadable = (buffer) => {
131
+ const readable = new Readable({ read: () => { } });
132
+ readable.push(buffer);
133
+ readable.push(null);
134
+ return readable;
135
+ };
136
+ export const toBuffer = async (stream) => {
137
+ const chunks = [];
138
+ for await (const chunk of stream) {
139
+ chunks.push(chunk);
140
+ }
141
+ stream.destroy();
142
+ return Buffer.concat(chunks);
143
+ };
144
+ export const getStream = async (item, opts) => {
145
+ if (Buffer.isBuffer(item)) {
146
+ return { stream: toReadable(item), type: 'buffer' };
147
+ }
148
+ if ('stream' in item) {
149
+ return { stream: item.stream, type: 'readable' };
150
+ }
151
+ const urlStr = item.url.toString();
152
+ if (urlStr.startsWith('data:')) {
153
+ const buffer = Buffer.from(urlStr.split(',')[1], 'base64');
154
+ return { stream: toReadable(buffer), type: 'buffer' };
155
+ }
156
+ if (urlStr.startsWith('http://') || urlStr.startsWith('https://')) {
157
+ return { stream: await getHttpStream(item.url, opts), type: 'remote' };
158
+ }
159
+ return { stream: createReadStream(item.url), type: 'file' };
160
+ };
161
+ /** generates a thumbnail for a given media, if required */
162
+ export async function generateThumbnail(bufferOrPath, mediaType, options) {
163
+ let thumbnail;
164
+ let originalImageDimensions;
165
+ if (mediaType === 'image') {
166
+ const { buffer, original } = await extractImageThumb(bufferOrPath);
167
+ thumbnail = buffer.toString('base64');
168
+ if (original.width && original.height) {
169
+ originalImageDimensions = {
170
+ width: original.width,
171
+ height: original.height
172
+ };
173
+ }
174
+ }
175
+ else if (mediaType === 'video') {
176
+ // Video thumbnails need ffmpeg + file on disk
177
+ let filePath;
178
+ let needsCleanup = false;
179
+ if (Buffer.isBuffer(bufferOrPath)) {
180
+ filePath = join(getTmpFilesDirectory(), 'vid-' + randomId());
181
+ await fs.writeFile(filePath, bufferOrPath);
182
+ needsCleanup = true;
183
+ }
184
+ else {
185
+ filePath = bufferOrPath;
186
+ }
187
+ const imgFilename = join(getTmpFilesDirectory(), randomId() + '.jpg');
188
+ try {
189
+ await extractVideoThumb(filePath, imgFilename, '00:00:00', { width: 32, height: 32 });
190
+ const buff = await fs.readFile(imgFilename);
191
+ thumbnail = buff.toString('base64');
192
+ await fs.unlink(imgFilename);
193
+ }
194
+ catch (err) {
195
+ options.logger?.debug('could not generate video thumb: ' + err);
196
+ }
197
+ if (needsCleanup) {
198
+ try {
199
+ await fs.unlink(filePath);
200
+ }
201
+ catch {
202
+ /* ignore */
203
+ }
204
+ }
205
+ }
206
+ return {
207
+ thumbnail,
208
+ originalImageDimensions
209
+ };
210
+ }
211
+ export const getHttpStream = async (url, options = {}) => {
212
+ const response = await fetch(url.toString(), {
213
+ dispatcher: options.dispatcher,
214
+ method: 'GET',
215
+ headers: options.headers
216
+ });
217
+ if (!response.ok) {
218
+ throw new Boom(`Failed to fetch stream from ${url}`, { statusCode: response.status, data: { url } });
219
+ }
220
+ // @ts-ignore Node18+ Readable.fromWeb exists
221
+ return response.body instanceof Readable ? response.body : Readable.fromWeb(response.body);
222
+ };
223
+ //# sourceMappingURL=messages-media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages-media.js","sourceRoot":"","sources":["../../src/Utils/messages-media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { Buffer } from 'node:buffer';
2
+ import { Readable } from 'node:stream';
3
+ import type { WasmWhatsAppClient } from 'whatsapp-rust-bridge';
4
+ import { proto } from '../../WAProto/index.js';
5
+ import type { AnyMediaMessageContent, AnyMessageContent, MessageContentGenerationOptions, MessageGenerationOptions, MessageGenerationOptionsFromContent, WAMessage, WAMessageContent } from '../Types/index.js';
6
+ import type { ILogger } from './logger.js';
7
+ import { type MediaDownloadOptions } from './messages-media.js';
8
+ type ExtractByKey<T, K extends PropertyKey> = T extends Record<K, unknown> ? T : never;
9
+ /**
10
+ * Uses a regex to test whether the string contains a URL, and returns the URL if it does.
11
+ * @param text eg. hello https://google.com
12
+ * @returns the URL, eg. https://google.com
13
+ */
14
+ export declare const extractUrlFromText: (text: string) => string | undefined;
15
+ export declare const generateLinkPreviewIfRequired: (text: string, getUrlInfo: MessageGenerationOptions["getUrlInfo"], logger: MessageGenerationOptions["logger"]) => Promise<import("../index.js").WAUrlInfo | undefined>;
16
+ export declare const prepareWAMessageMedia: (message: AnyMediaMessageContent, options: MessageContentGenerationOptions) => Promise<proto.Message>;
17
+ export declare const prepareDisappearingMessageSettingContent: (ephemeralExpiration?: number) => proto.Message;
18
+ /**
19
+ * Generate forwarded message content like WA does
20
+ * @param message the message to forward
21
+ * @param options.forceForward will show the message as forwarded even if it is from you
22
+ */
23
+ export declare const generateForwardMessageContent: (message: WAMessage, forceForward?: boolean) => proto.IMessage;
24
+ export declare const hasNonNullishProperty: <K extends PropertyKey>(message: AnyMessageContent, key: K) => message is ExtractByKey<AnyMessageContent, K>;
25
+ export declare const generateWAMessageContent: (message: AnyMessageContent, options: MessageContentGenerationOptions) => Promise<proto.Message>;
26
+ export declare const generateWAMessageFromContent: (jid: string, message: WAMessageContent, options: MessageGenerationOptionsFromContent) => WAMessage;
27
+ export declare const generateWAMessage: (jid: string, content: AnyMessageContent, options: MessageGenerationOptions) => Promise<WAMessage>;
28
+ /** Get the key to access the true type of content */
29
+ export declare const getContentType: (content: proto.IMessage | undefined) => keyof proto.IMessage | undefined;
30
+ /**
31
+ * Normalizes ephemeral, view once messages to regular message content
32
+ * Eg. image messages in ephemeral messages, in view once messages etc.
33
+ * @param content
34
+ * @returns
35
+ */
36
+ export declare const normalizeMessageContent: (content: WAMessageContent | null | undefined) => WAMessageContent | undefined;
37
+ /**
38
+ * Extract the true message content from a message
39
+ * Eg. extracts the inner message from a disappearing message/view once message
40
+ */
41
+ export declare const extractMessageContent: (content: WAMessageContent | undefined | null) => WAMessageContent | undefined;
42
+ export type DownloadMediaMessageContext = {
43
+ reuploadRequest: (msg: WAMessage) => Promise<WAMessage>;
44
+ logger: ILogger;
45
+ /** Bridge client for media download — handles CDN failover, auth refresh,
46
+ * HMAC-SHA256 verification, and AES-256-CBC decryption internally. */
47
+ waClient: Pick<WasmWhatsAppClient, 'downloadMedia' | 'downloadMediaStream'>;
48
+ };
49
+ /**
50
+ * Downloads the given message. Throws an error if it's not a media message.
51
+ *
52
+ * Uses the Rust bridge for download — provides CDN failover, automatic auth
53
+ * refresh on 401/404, HMAC-SHA256 integrity verification, and AES-256-CBC
54
+ * decryption. Requires `ctx.waClient` (the bridge client).
55
+ */
56
+ export declare const downloadMediaMessage: <Type extends "buffer" | "stream">(message: WAMessage, type: Type, options: MediaDownloadOptions, ctx: DownloadMediaMessageContext) => Promise<Type extends "buffer" ? Buffer<ArrayBufferLike> : Readable>;
57
+ type VoteAggregation = {
58
+ name: string;
59
+ voters: string[];
60
+ };
61
+ /**
62
+ * Aggregate votes from a poll message.
63
+ *
64
+ * Takes a poll creation message and its accumulated poll updates (from
65
+ * `messages.update` events) and returns the vote tally per option.
66
+ *
67
+ * `pollUpdates` should contain pre-decrypted votes where `vote.selectedOptions`
68
+ * are the SHA-256 hashes of the voted option names.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * sock.ev.on('messages.update', event => {
73
+ * for (const { key, update } of event) {
74
+ * if (update.pollUpdates) {
75
+ * const pollMsg = await getMessageFromStore(key)
76
+ * const votes = getAggregateVotesInPollMessage({
77
+ * message: pollMsg.message,
78
+ * pollUpdates: pollMsg.pollUpdates
79
+ * })
80
+ * console.log(votes) // [{ name: 'Yes', voters: ['jid1'] }, ...]
81
+ * }
82
+ * }
83
+ * })
84
+ * ```
85
+ */
86
+ export declare function getAggregateVotesInPollMessage({ message, pollUpdates }: Pick<WAMessage, 'pollUpdates' | 'message'>, meId?: string): VoteAggregation[];
87
+ export {};
88
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/Utils/messages.ts"],"names":[],"mappings":"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"}