gifted-baileys 1.5.4 → 1.5.6

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 (252) hide show
  1. package/LICENSE +1 -1
  2. package/WAProto/WAProto.proto +88 -969
  3. package/WAProto/index.d.ts +1256 -13195
  4. package/WAProto/index.js +74730 -125106
  5. package/package.json +9 -27
  6. package/src/Defaults/baileys-version.json +3 -0
  7. package/{lib → src}/Defaults/index.js +14 -7
  8. package/src/Defaults/index.ts +131 -0
  9. package/src/README.md +1 -0
  10. package/src/Signal/libsignal.js +180 -0
  11. package/src/Signal/libsignal.ts +141 -0
  12. package/src/Socket/Client/abstract-socket-client.ts +19 -0
  13. package/{lib → src}/Socket/Client/index.js +3 -2
  14. package/src/Socket/Client/index.ts +3 -0
  15. package/src/Socket/Client/mobile-socket-client.js +78 -0
  16. package/src/Socket/Client/mobile-socket-client.ts +66 -0
  17. package/src/Socket/Client/web-socket-client.js +75 -0
  18. package/src/Socket/Client/web-socket-client.ts +57 -0
  19. package/{lib → src}/Socket/business.js +33 -28
  20. package/src/Socket/business.ts +281 -0
  21. package/{lib → src}/Socket/chats.js +176 -174
  22. package/src/Socket/chats.ts +1030 -0
  23. package/{lib → src}/Socket/groups.js +68 -80
  24. package/src/Socket/groups.ts +356 -0
  25. package/{lib → src}/Socket/index.js +1 -4
  26. package/src/Socket/index.ts +13 -0
  27. package/{lib → src}/Socket/messages-recv.js +211 -378
  28. package/src/Socket/messages-recv.ts +985 -0
  29. package/{lib → src}/Socket/messages-send.js +177 -452
  30. package/src/Socket/messages-send.ts +871 -0
  31. package/{lib → src}/Socket/newsletter.js +98 -107
  32. package/src/Socket/newsletter.ts +282 -0
  33. package/{lib → src}/Socket/registration.js +48 -56
  34. package/src/Socket/registration.ts +250 -0
  35. package/{lib → src}/Socket/socket.js +77 -77
  36. package/src/Socket/socket.ts +777 -0
  37. package/src/Store/index.ts +3 -0
  38. package/{lib → src}/Store/make-cache-manager-store.js +34 -25
  39. package/src/Store/make-cache-manager-store.ts +100 -0
  40. package/{lib → src}/Store/make-in-memory-store.js +32 -36
  41. package/src/Store/make-in-memory-store.ts +475 -0
  42. package/src/Store/make-ordered-dictionary.ts +86 -0
  43. package/{lib → src}/Store/object-repository.js +1 -1
  44. package/src/Store/object-repository.ts +32 -0
  45. package/src/Tests/test.app-state-sync.js +204 -0
  46. package/src/Tests/test.app-state-sync.ts +207 -0
  47. package/src/Tests/test.event-buffer.js +270 -0
  48. package/src/Tests/test.event-buffer.ts +319 -0
  49. package/src/Tests/test.key-store.js +76 -0
  50. package/src/Tests/test.key-store.ts +92 -0
  51. package/src/Tests/test.libsignal.js +141 -0
  52. package/src/Tests/test.libsignal.ts +186 -0
  53. package/src/Tests/test.media-download.js +93 -0
  54. package/src/Tests/test.media-download.ts +76 -0
  55. package/src/Tests/test.messages.js +33 -0
  56. package/src/Tests/test.messages.ts +37 -0
  57. package/src/Tests/utils.js +34 -0
  58. package/src/Tests/utils.ts +36 -0
  59. package/src/Types/Auth.ts +113 -0
  60. package/src/Types/Call.ts +15 -0
  61. package/src/Types/Chat.ts +106 -0
  62. package/{lib/Types/Contact.d.ts → src/Types/Contact.ts} +9 -8
  63. package/src/Types/Events.ts +93 -0
  64. package/src/Types/GroupMetadata.ts +53 -0
  65. package/src/Types/Label.ts +36 -0
  66. package/{lib/Types/LabelAssociation.d.ts → src/Types/LabelAssociation.ts} +22 -16
  67. package/src/Types/Message.ts +288 -0
  68. package/src/Types/Newsletter.ts +98 -0
  69. package/src/Types/Product.ts +85 -0
  70. package/src/Types/Signal.ts +68 -0
  71. package/{lib/Types/Socket.d.ts → src/Types/Socket.ts} +68 -61
  72. package/src/Types/State.ts +29 -0
  73. package/src/Types/index.ts +59 -0
  74. package/{lib → src}/Utils/auth-utils.js +90 -73
  75. package/src/Utils/auth-utils.ts +222 -0
  76. package/src/Utils/baileys-event-stream.js +92 -0
  77. package/src/Utils/baileys-event-stream.ts +66 -0
  78. package/{lib → src}/Utils/business.js +43 -15
  79. package/src/Utils/business.ts +275 -0
  80. package/{lib → src}/Utils/chat-utils.js +94 -87
  81. package/src/Utils/chat-utils.ts +860 -0
  82. package/{lib → src}/Utils/crypto.js +2 -4
  83. package/src/Utils/crypto.ts +131 -0
  84. package/src/Utils/decode-wa-message.js +211 -0
  85. package/src/Utils/decode-wa-message.ts +228 -0
  86. package/{lib → src}/Utils/event-buffer.js +13 -4
  87. package/src/Utils/event-buffer.ts +613 -0
  88. package/{lib → src}/Utils/generics.js +86 -67
  89. package/src/Utils/generics.ts +434 -0
  90. package/{lib → src}/Utils/history.js +39 -13
  91. package/src/Utils/history.ts +112 -0
  92. package/src/Utils/index.ts +17 -0
  93. package/{lib → src}/Utils/link-preview.js +54 -17
  94. package/src/Utils/link-preview.ts +122 -0
  95. package/src/Utils/logger.ts +3 -0
  96. package/src/Utils/lt-hash.ts +61 -0
  97. package/{lib → src}/Utils/make-mutex.js +13 -4
  98. package/src/Utils/make-mutex.ts +44 -0
  99. package/{lib → src}/Utils/messages-media.js +255 -193
  100. package/src/Utils/messages-media.ts +847 -0
  101. package/{lib → src}/Utils/messages.js +118 -588
  102. package/src/Utils/messages.ts +956 -0
  103. package/src/Utils/noise-handler.ts +197 -0
  104. package/{lib → src}/Utils/process-message.js +30 -27
  105. package/src/Utils/process-message.ts +414 -0
  106. package/{lib → src}/Utils/signal.js +42 -25
  107. package/src/Utils/signal.ts +177 -0
  108. package/{lib → src}/Utils/use-multi-file-auth-state.js +28 -27
  109. package/src/Utils/use-multi-file-auth-state.ts +90 -0
  110. package/{lib → src}/Utils/validate-connection.js +9 -40
  111. package/src/Utils/validate-connection.ts +238 -0
  112. package/src/WABinary/constants.ts +42 -0
  113. package/src/WABinary/decode.ts +265 -0
  114. package/{lib → src}/WABinary/encode.js +10 -16
  115. package/src/WABinary/encode.ts +236 -0
  116. package/src/WABinary/generic-utils.ts +121 -0
  117. package/src/WABinary/index.ts +5 -0
  118. package/src/WABinary/jid-utils.ts +68 -0
  119. package/src/WABinary/types.ts +17 -0
  120. package/src/WAM/BinaryInfo.ts +12 -0
  121. package/src/WAM/constants.ts +15382 -0
  122. package/src/WAM/encode.ts +174 -0
  123. package/src/WAM/index.ts +3 -0
  124. package/{lib → src}/index.js +0 -1
  125. package/src/index.ts +13 -0
  126. package/README.md +0 -1645
  127. package/lib/Defaults/baileys-version.json +0 -3
  128. package/lib/Defaults/index.d.ts +0 -284
  129. package/lib/Signal/libsignal.d.ts +0 -3
  130. package/lib/Signal/libsignal.js +0 -161
  131. package/lib/Socket/Client/abstract-socket-client.d.ts +0 -15
  132. package/lib/Socket/Client/index.d.ts +0 -2
  133. package/lib/Socket/Client/mobile-socket-client.d.ts +0 -12
  134. package/lib/Socket/Client/mobile-socket-client.js +0 -65
  135. package/lib/Socket/Client/types.d.ts +0 -17
  136. package/lib/Socket/Client/types.js +0 -13
  137. package/lib/Socket/Client/websocket.d.ts +0 -12
  138. package/lib/Socket/Client/websocket.js +0 -62
  139. package/lib/Socket/business.d.ts +0 -170
  140. package/lib/Socket/chats.d.ts +0 -81
  141. package/lib/Socket/groups.d.ts +0 -115
  142. package/lib/Socket/index.d.ts +0 -172
  143. package/lib/Socket/messages-recv.d.ts +0 -158
  144. package/lib/Socket/messages-send.d.ts +0 -155
  145. package/lib/Socket/newsletter.d.ts +0 -132
  146. package/lib/Socket/registration.d.ts +0 -264
  147. package/lib/Socket/socket.d.ts +0 -44
  148. package/lib/Socket/usync.d.ts +0 -37
  149. package/lib/Socket/usync.js +0 -70
  150. package/lib/Store/index.d.ts +0 -3
  151. package/lib/Store/make-cache-manager-store.d.ts +0 -14
  152. package/lib/Store/make-in-memory-store.d.ts +0 -118
  153. package/lib/Store/make-ordered-dictionary.d.ts +0 -13
  154. package/lib/Store/object-repository.d.ts +0 -10
  155. package/lib/Types/Auth.d.ts +0 -109
  156. package/lib/Types/Call.d.ts +0 -13
  157. package/lib/Types/Chat.d.ts +0 -107
  158. package/lib/Types/Events.d.ts +0 -172
  159. package/lib/Types/GroupMetadata.d.ts +0 -56
  160. package/lib/Types/Label.d.ts +0 -46
  161. package/lib/Types/Message.d.ts +0 -433
  162. package/lib/Types/Newsletter.d.ts +0 -92
  163. package/lib/Types/Product.d.ts +0 -78
  164. package/lib/Types/Signal.d.ts +0 -57
  165. package/lib/Types/State.d.ts +0 -27
  166. package/lib/Types/USync.d.ts +0 -25
  167. package/lib/Types/USync.js +0 -2
  168. package/lib/Types/index.d.ts +0 -66
  169. package/lib/Utils/auth-utils.d.ts +0 -18
  170. package/lib/Utils/baileys-event-stream.d.ts +0 -16
  171. package/lib/Utils/baileys-event-stream.js +0 -63
  172. package/lib/Utils/business.d.ts +0 -22
  173. package/lib/Utils/chat-utils.d.ts +0 -70
  174. package/lib/Utils/crypto.d.ts +0 -40
  175. package/lib/Utils/decode-wa-message.d.ts +0 -36
  176. package/lib/Utils/decode-wa-message.js +0 -226
  177. package/lib/Utils/event-buffer.d.ts +0 -35
  178. package/lib/Utils/generics.d.ts +0 -88
  179. package/lib/Utils/history.d.ts +0 -19
  180. package/lib/Utils/index.d.ts +0 -17
  181. package/lib/Utils/link-preview.d.ts +0 -21
  182. package/lib/Utils/logger.d.ts +0 -2
  183. package/lib/Utils/lt-hash.d.ts +0 -12
  184. package/lib/Utils/make-mutex.d.ts +0 -7
  185. package/lib/Utils/messages-media.d.ts +0 -113
  186. package/lib/Utils/messages.d.ts +0 -77
  187. package/lib/Utils/noise-handler.d.ts +0 -20
  188. package/lib/Utils/process-message.d.ts +0 -41
  189. package/lib/Utils/signal.d.ts +0 -33
  190. package/lib/Utils/use-multi-file-auth-state.d.ts +0 -12
  191. package/lib/Utils/validate-connection.d.ts +0 -11
  192. package/lib/WABinary/constants.d.ts +0 -27
  193. package/lib/WABinary/decode.d.ts +0 -6
  194. package/lib/WABinary/encode.d.ts +0 -2
  195. package/lib/WABinary/generic-utils.d.ts +0 -14
  196. package/lib/WABinary/index.d.ts +0 -5
  197. package/lib/WABinary/jid-utils.d.ts +0 -31
  198. package/lib/WABinary/types.d.ts +0 -18
  199. package/lib/WAM/BinaryInfo.d.ts +0 -8
  200. package/lib/WAM/constants.d.ts +0 -38
  201. package/lib/WAM/encode.d.ts +0 -2
  202. package/lib/WAM/index.d.ts +0 -3
  203. package/lib/WAUSync/Protocols/USyncContactProtocol.d.ts +0 -9
  204. package/lib/WAUSync/Protocols/USyncContactProtocol.js +0 -32
  205. package/lib/WAUSync/Protocols/USyncDeviceProtocol.d.ts +0 -22
  206. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +0 -57
  207. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.d.ts +0 -12
  208. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +0 -30
  209. package/lib/WAUSync/Protocols/USyncStatusProtocol.d.ts +0 -12
  210. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +0 -42
  211. package/lib/WAUSync/Protocols/index.d.ts +0 -4
  212. package/lib/WAUSync/Protocols/index.js +0 -20
  213. package/lib/WAUSync/USyncQuery.d.ts +0 -26
  214. package/lib/WAUSync/USyncQuery.js +0 -79
  215. package/lib/WAUSync/USyncUser.d.ts +0 -10
  216. package/lib/WAUSync/USyncUser.js +0 -22
  217. package/lib/WAUSync/index.d.ts +0 -3
  218. package/lib/WAUSync/index.js +0 -19
  219. /package/{lib → src}/Defaults/phonenumber-mcc.json +0 -0
  220. /package/{lib → src}/Socket/Client/abstract-socket-client.js +0 -0
  221. /package/{lib → src}/Store/index.js +0 -0
  222. /package/{lib → src}/Store/make-ordered-dictionary.js +0 -0
  223. /package/{lib → src}/Types/Auth.js +0 -0
  224. /package/{lib → src}/Types/Call.js +0 -0
  225. /package/{lib → src}/Types/Chat.js +0 -0
  226. /package/{lib → src}/Types/Contact.js +0 -0
  227. /package/{lib → src}/Types/Events.js +0 -0
  228. /package/{lib → src}/Types/GroupMetadata.js +0 -0
  229. /package/{lib → src}/Types/Label.js +0 -0
  230. /package/{lib → src}/Types/LabelAssociation.js +0 -0
  231. /package/{lib → src}/Types/Message.js +0 -0
  232. /package/{lib → src}/Types/Newsletter.js +0 -0
  233. /package/{lib → src}/Types/Product.js +0 -0
  234. /package/{lib → src}/Types/Signal.js +0 -0
  235. /package/{lib → src}/Types/Socket.js +0 -0
  236. /package/{lib → src}/Types/State.js +0 -0
  237. /package/{lib → src}/Types/index.js +0 -0
  238. /package/{lib → src}/Utils/index.js +0 -0
  239. /package/{lib → src}/Utils/logger.js +0 -0
  240. /package/{lib → src}/Utils/lt-hash.js +0 -0
  241. /package/{lib → src}/Utils/noise-handler.js +0 -0
  242. /package/{lib → src}/WABinary/constants.js +0 -0
  243. /package/{lib → src}/WABinary/decode.js +0 -0
  244. /package/{lib → src}/WABinary/generic-utils.js +0 -0
  245. /package/{lib → src}/WABinary/index.js +0 -0
  246. /package/{lib → src}/WABinary/jid-utils.js +0 -0
  247. /package/{lib → src}/WABinary/types.js +0 -0
  248. /package/{lib → src}/WAM/BinaryInfo.js +0 -0
  249. /package/{lib → src}/WAM/constants.js +0 -0
  250. /package/{lib → src}/WAM/encode.js +0 -0
  251. /package/{lib → src}/WAM/index.js +0 -0
  252. /package/{lib → src}/gifted +0 -0
@@ -1,9 +1,51 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
2
44
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
45
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
46
  };
5
47
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isWABusinessPlatform = exports.getCodeFromWSError = exports.getCallStatusFromNode = exports.getErrorCodeFromStreamError = exports.getStatusFromReceiptType = exports.generateMdTagPrefix = exports.fetchLatestWaWebVersion = exports.fetchLatestBaileysVersion = exports.printQRIfNecessaryListener = exports.bindWaitForConnectionUpdate = exports.generateMessageID = exports.generateMessageIDV2 = exports.delayCancellable = exports.delay = exports.debouncedTimeout = exports.unixTimestampSeconds = exports.toNumber = exports.encodeBigEndian = exports.generateRegistrationId = exports.encodeWAMessage = exports.unpadRandomMax16 = exports.writeRandomPadMax16 = exports.getKeyAuthor = exports.BufferJSON = exports.getPlatformId = exports.Browsers = void 0;
48
+ exports.isWABusinessPlatform = exports.getCodeFromWSError = exports.getCallStatusFromNode = exports.getErrorCodeFromStreamError = exports.getStatusFromReceiptType = exports.generateMdTagPrefix = exports.fetchLatestWaWebVersion = exports.fetchLatestBaileysVersion = exports.printQRIfNecessaryListener = exports.bindWaitForConnectionUpdate = exports.generateMessageID = exports.generateMessageIDV2 = exports.delayCancellable = exports.delay = exports.debouncedTimeout = exports.unixTimestampSeconds = exports.toNumber = exports.encodeBigEndian = exports.generateRegistrationId = exports.encodeWAMessage = exports.unpadRandomMax16 = exports.writeRandomPadMax16 = exports.getKeyAuthor = exports.BufferJSON = exports.Browsers = void 0;
7
49
  exports.promiseTimeout = promiseTimeout;
8
50
  exports.bindWaitForEvent = bindWaitForEvent;
9
51
  exports.trimUndefined = trimUndefined;
@@ -16,37 +58,20 @@ const WAProto_1 = require("../../WAProto");
16
58
  const baileys_version_json_1 = require("../Defaults/baileys-version.json");
17
59
  const Types_1 = require("../Types");
18
60
  const WABinary_1 = require("../WABinary");
19
- const COMPANION_PLATFORM_MAP = {
20
- 'Chrome': '49',
21
- 'Edge': '50',
22
- 'Firefox': '51',
23
- 'Opera': '53',
24
- 'Safari': '54'
25
- };
26
61
  const PLATFORM_MAP = {
27
62
  'aix': 'AIX',
28
63
  'darwin': 'Mac OS',
29
64
  'win32': 'Windows',
30
- 'android': 'Android',
31
- 'freebsd': 'FreeBSD',
32
- 'openbsd': 'OpenBSD',
33
- 'sunos': 'Solaris'
65
+ 'android': 'Android'
34
66
  };
35
67
  exports.Browsers = {
36
- ubuntu: (browser) => ['Ubuntu', browser, '22.04.4'],
37
- macOS: (browser) => ['Mac OS', browser, '14.4.1'],
38
- baileys: (browser) => ['Baileys', browser, '6.5.0'],
39
- windows: (browser) => ['Windows', browser, '10.0.22631'],
40
- iOS: (browser) => ['iOS', browser, '18.2'],
41
- linux: (browser) => ['Linux', browser, '6.12.6'],
68
+ ubuntu: browser => ['Ubuntu', browser, '20.0.04'],
69
+ macOS: browser => ['Mac OS', browser, '10.15.7'],
70
+ baileys: browser => ['Baileys', browser, '4.0.0'],
71
+ windows: browser => ['Windows', browser, '10.0.22621'],
42
72
  /** The appropriate browser based on your OS & release */
43
- appropriate: (browser) => [PLATFORM_MAP[(0, os_1.platform)()] || 'Ubuntu', browser, (0, os_1.release)()]
44
- };
45
- const getPlatformId = (browser) => {
46
- const platformType = WAProto_1.proto.DeviceProps.PlatformType[browser.toUpperCase()];
47
- return platformType ? platformType.toString().charCodeAt(0).toString() : '49'; //chrome
73
+ appropriate: browser => [PLATFORM_MAP[(0, os_1.platform)()] || 'Ubuntu', browser, (0, os_1.release)()]
48
74
  };
49
- exports.getPlatformId = getPlatformId;
50
75
  exports.BufferJSON = {
51
76
  replacer: (k, value) => {
52
77
  if (Buffer.isBuffer(value) || value instanceof Uint8Array || (value === null || value === void 0 ? void 0 : value.type) === 'Buffer') {
@@ -146,26 +171,28 @@ const delayCancellable = (ms) => {
146
171
  return { delay, cancel };
147
172
  };
148
173
  exports.delayCancellable = delayCancellable;
149
- async function promiseTimeout(ms, promise) {
150
- if (!ms) {
151
- return new Promise(promise);
152
- }
153
- const stack = new Error().stack;
154
- // Create a promise that rejects in <ms> milliseconds
155
- const { delay, cancel } = (0, exports.delayCancellable)(ms);
156
- const p = new Promise((resolve, reject) => {
157
- delay
158
- .then(() => reject(new boom_1.Boom('Timed Out', {
159
- statusCode: Types_1.DisconnectReason.timedOut,
160
- data: {
161
- stack
162
- }
163
- })))
164
- .catch(err => reject(err));
165
- promise(resolve, reject);
166
- })
167
- .finally(cancel);
168
- return p;
174
+ function promiseTimeout(ms, promise) {
175
+ return __awaiter(this, void 0, void 0, function* () {
176
+ if (!ms) {
177
+ return new Promise(promise);
178
+ }
179
+ const stack = new Error().stack;
180
+ // Create a promise that rejects in <ms> milliseconds
181
+ const { delay, cancel } = (0, exports.delayCancellable)(ms);
182
+ const p = new Promise((resolve, reject) => {
183
+ delay
184
+ .then(() => reject(new boom_1.Boom('Timed Out', {
185
+ statusCode: Types_1.DisconnectReason.timedOut,
186
+ data: {
187
+ stack
188
+ }
189
+ })))
190
+ .catch(err => reject(err));
191
+ promise(resolve, reject);
192
+ })
193
+ .finally(cancel);
194
+ return p;
195
+ });
169
196
  }
170
197
  const generateMessageIDV2 = (userId) => {
171
198
  const data = Buffer.alloc(8 + 20 + 16);
@@ -180,17 +207,17 @@ const generateMessageIDV2 = (userId) => {
180
207
  const random = (0, crypto_1.randomBytes)(16);
181
208
  random.copy(data, 28);
182
209
  const hash = (0, crypto_1.createHash)('sha256').update(data).digest();
183
- return 'FTG-' + hash.toString('hex').toUpperCase().substring(0, 18);
210
+ return 'ASS' + hash.toString('hex').toUpperCase().substring(0, 18);
184
211
  };
185
212
  exports.generateMessageIDV2 = generateMessageIDV2;
186
213
  // generate a random ID to attach to a message
187
- const generateMessageID = () => 'FTG-' + (0, crypto_1.randomBytes)(6).toString('hex').toUpperCase();
214
+ const generateMessageID = () => 'SSA' + (0, crypto_1.randomBytes)(6).toString('hex').toUpperCase();
188
215
  exports.generateMessageID = generateMessageID;
189
216
  function bindWaitForEvent(ev, event) {
190
- return async (check, timeoutMs) => {
217
+ return (check, timeoutMs) => __awaiter(this, void 0, void 0, function* () {
191
218
  let listener;
192
219
  let closeListener;
193
- await (promiseTimeout(timeoutMs, (resolve, reject) => {
220
+ yield (promiseTimeout(timeoutMs, (resolve, reject) => {
194
221
  closeListener = ({ connection, lastDisconnect }) => {
195
222
  if (connection === 'close') {
196
223
  reject((lastDisconnect === null || lastDisconnect === void 0 ? void 0 : lastDisconnect.error)
@@ -209,34 +236,30 @@ function bindWaitForEvent(ev, event) {
209
236
  ev.off(event, listener);
210
237
  ev.off('connection.update', closeListener);
211
238
  }));
212
- };
239
+ });
213
240
  }
214
241
  const bindWaitForConnectionUpdate = (ev) => bindWaitForEvent(ev, 'connection.update');
215
242
  exports.bindWaitForConnectionUpdate = bindWaitForConnectionUpdate;
216
243
  const printQRIfNecessaryListener = (ev, logger) => {
217
- ev.on('connection.update', async ({ qr }) => {
244
+ ev.on('connection.update', (_a) => __awaiter(void 0, [_a], void 0, function* ({ qr }) {
218
245
  if (qr) {
219
- const QR = await import('qrcode-terminal')
220
- .then(m => m.default || m)
246
+ const QR = yield Promise.resolve().then(() => __importStar(require('qrcode-terminal'))).then(m => m.default || m)
221
247
  .catch(() => {
222
248
  logger.error('QR code terminal not added as dependency');
223
249
  });
224
250
  QR === null || QR === void 0 ? void 0 : QR.generate(qr, { small: true });
225
251
  }
226
- });
252
+ }));
227
253
  };
228
254
  exports.printQRIfNecessaryListener = printQRIfNecessaryListener;
229
255
  /**
230
256
  * utility that fetches latest baileys version from the master branch.
231
257
  * Use to ensure your WA connection is always on the latest version
232
258
  */
233
- const fetchLatestBaileysVersion = async (options = {}) => {
259
+ const fetchLatestBaileysVersion = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (options = {}) {
234
260
  const URL = 'https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/baileys-version.json';
235
261
  try {
236
- const result = await axios_1.default.get(URL, {
237
- ...options,
238
- responseType: 'json'
239
- });
262
+ const result = yield axios_1.default.get(URL, Object.assign(Object.assign({}, options), { responseType: 'json' }));
240
263
  return {
241
264
  version: result.data.version,
242
265
  isLatest: true
@@ -249,18 +272,15 @@ const fetchLatestBaileysVersion = async (options = {}) => {
249
272
  error
250
273
  };
251
274
  }
252
- };
275
+ });
253
276
  exports.fetchLatestBaileysVersion = fetchLatestBaileysVersion;
254
277
  /**
255
278
  * A utility that fetches the latest web version of whatsapp.
256
279
  * Use to ensure your WA connection is always on the latest version
257
280
  */
258
- const fetchLatestWaWebVersion = async (options) => {
281
+ const fetchLatestWaWebVersion = (options) => __awaiter(void 0, void 0, void 0, function* () {
259
282
  try {
260
- const result = await axios_1.default.get('https://web.whatsapp.com/check-update?version=1&platform=web', {
261
- ...options,
262
- responseType: 'json'
263
- });
283
+ const result = yield axios_1.default.get('https://web.whatsapp.com/check-update?version=1&platform=web', Object.assign(Object.assign({}, options), { responseType: 'json' }));
264
284
  const version = result.data.currentVersion.split('.');
265
285
  return {
266
286
  version: [+version[0], +version[1], +version[2]],
@@ -274,7 +294,7 @@ const fetchLatestWaWebVersion = async (options) => {
274
294
  error
275
295
  };
276
296
  }
277
- };
297
+ });
278
298
  exports.fetchLatestWaWebVersion = fetchLatestWaWebVersion;
279
299
  /** unique message tag prefix for MD clients */
280
300
  const generateMdTagPrefix = () => {
@@ -331,8 +351,7 @@ const getCallStatusFromNode = ({ tag, attrs }) => {
331
351
  status = 'timeout';
332
352
  }
333
353
  else {
334
- //fired when accepted/rejected/timeout/caller hangs up
335
- status = 'terminate';
354
+ status = 'reject';
336
355
  }
337
356
  break;
338
357
  case 'reject':
@@ -0,0 +1,434 @@
1
+ import { Boom } from '@hapi/boom'
2
+ import axios, { AxiosRequestConfig } from 'axios'
3
+ import { randomBytes, createHash } from 'crypto'
4
+ import { platform, release } from 'os'
5
+ import { Logger } from 'pino'
6
+ import { proto } from '../../WAProto'
7
+ import { version as baileysVersion } from '../Defaults/baileys-version.json'
8
+ import { BaileysEventEmitter, BaileysEventMap, DisconnectReason, WACallUpdateType, WAVersion } from '../Types'
9
+ import { BinaryNode, getAllBinaryNodeChildren, jidDecode } from '../WABinary'
10
+
11
+ const PLATFORM_MAP = {
12
+ 'aix': 'AIX',
13
+ 'darwin': 'Mac OS',
14
+ 'win32': 'Windows',
15
+ 'android': 'Android'
16
+ }
17
+
18
+ export const Browsers = {
19
+ ubuntu: browser => ['Ubuntu', browser, '20.0.04'] as [string, string, string],
20
+ macOS: browser => ['Mac OS', browser, '10.15.7'] as [string, string, string],
21
+ baileys: browser => ['Baileys', browser, '4.0.0'] as [string, string, string],
22
+ windows: browser => ['Windows', browser, '10.0.22621'] as [string, string, string],
23
+ /** The appropriate browser based on your OS & release */
24
+ appropriate: browser => [ PLATFORM_MAP[platform()] || 'Ubuntu', browser, release() ] as [string, string, string]
25
+ }
26
+
27
+ export const BufferJSON = {
28
+ replacer: (k, value: any) => {
29
+ if(Buffer.isBuffer(value) || value instanceof Uint8Array || value?.type === 'Buffer') {
30
+ return { type: 'Buffer', data: Buffer.from(value?.data || value).toString('base64') }
31
+ }
32
+
33
+ return value
34
+ },
35
+ reviver: (_, value: any) => {
36
+ if(typeof value === 'object' && !!value && (value.buffer === true || value.type === 'Buffer')) {
37
+ const val = value.data || value.value
38
+ return typeof val === 'string' ? Buffer.from(val, 'base64') : Buffer.from(val || [])
39
+ }
40
+
41
+ return value
42
+ }
43
+ }
44
+
45
+ export const getKeyAuthor = (
46
+ key: proto.IMessageKey | undefined | null,
47
+ meId: string = 'me'
48
+ ) => (
49
+ (key?.fromMe ? meId : key?.participant || key?.remoteJid) || ''
50
+ )
51
+
52
+ export const writeRandomPadMax16 = (msg: Uint8Array) => {
53
+ const pad = randomBytes(1)
54
+ pad[0] &= 0xf
55
+ if(!pad[0]) {
56
+ pad[0] = 0xf
57
+ }
58
+
59
+ return Buffer.concat([msg, Buffer.alloc(pad[0], pad[0])])
60
+ }
61
+
62
+ export const unpadRandomMax16 = (e: Uint8Array | Buffer) => {
63
+ const t = new Uint8Array(e)
64
+ if(0 === t.length) {
65
+ throw new Error('unpadPkcs7 given empty bytes')
66
+ }
67
+
68
+ var r = t[t.length - 1]
69
+ if(r > t.length) {
70
+ throw new Error(`unpad given ${t.length} bytes, but pad is ${r}`)
71
+ }
72
+
73
+ return new Uint8Array(t.buffer, t.byteOffset, t.length - r)
74
+ }
75
+
76
+ export const encodeWAMessage = (message: proto.IMessage) => (
77
+ writeRandomPadMax16(
78
+ proto.Message.encode(message).finish()
79
+ )
80
+ )
81
+
82
+ export const generateRegistrationId = (): number => {
83
+ return Uint16Array.from(randomBytes(2))[0] & 16383
84
+ }
85
+
86
+ export const encodeBigEndian = (e: number, t = 4) => {
87
+ let r = e
88
+ const a = new Uint8Array(t)
89
+ for(let i = t - 1; i >= 0; i--) {
90
+ a[i] = 255 & r
91
+ r >>>= 8
92
+ }
93
+
94
+ return a
95
+ }
96
+
97
+ export const toNumber = (t: Long | number | null | undefined): number => ((typeof t === 'object' && t) ? ('toNumber' in t ? t.toNumber() : (t as any).low) : t)
98
+
99
+ /** unix timestamp of a date in seconds */
100
+ export const unixTimestampSeconds = (date: Date = new Date()) => Math.floor(date.getTime() / 1000)
101
+
102
+ export type DebouncedTimeout = ReturnType<typeof debouncedTimeout>
103
+
104
+ export const debouncedTimeout = (intervalMs: number = 1000, task?: () => void) => {
105
+ let timeout: NodeJS.Timeout | undefined
106
+ return {
107
+ start: (newIntervalMs?: number, newTask?: () => void) => {
108
+ task = newTask || task
109
+ intervalMs = newIntervalMs || intervalMs
110
+ timeout && clearTimeout(timeout)
111
+ timeout = setTimeout(() => task?.(), intervalMs)
112
+ },
113
+ cancel: () => {
114
+ timeout && clearTimeout(timeout)
115
+ timeout = undefined
116
+ },
117
+ setTask: (newTask: () => void) => task = newTask,
118
+ setInterval: (newInterval: number) => intervalMs = newInterval
119
+ }
120
+ }
121
+
122
+ export const delay = (ms: number) => delayCancellable (ms).delay
123
+
124
+ export const delayCancellable = (ms: number) => {
125
+ const stack = new Error().stack
126
+ let timeout: NodeJS.Timeout
127
+ let reject: (error) => void
128
+ const delay: Promise<void> = new Promise((resolve, _reject) => {
129
+ timeout = setTimeout(resolve, ms)
130
+ reject = _reject
131
+ })
132
+ const cancel = () => {
133
+ clearTimeout (timeout)
134
+ reject(
135
+ new Boom('Cancelled', {
136
+ statusCode: 500,
137
+ data: {
138
+ stack
139
+ }
140
+ })
141
+ )
142
+ }
143
+
144
+ return { delay, cancel }
145
+ }
146
+
147
+ export async function promiseTimeout<T>(ms: number | undefined, promise: (resolve: (v: T) => void, reject: (error) => void) => void) {
148
+ if(!ms) {
149
+ return new Promise(promise)
150
+ }
151
+
152
+ const stack = new Error().stack
153
+ // Create a promise that rejects in <ms> milliseconds
154
+ const { delay, cancel } = delayCancellable (ms)
155
+ const p = new Promise((resolve, reject) => {
156
+ delay
157
+ .then(() => reject(
158
+ new Boom('Timed Out', {
159
+ statusCode: DisconnectReason.timedOut,
160
+ data: {
161
+ stack
162
+ }
163
+ })
164
+ ))
165
+ .catch (err => reject(err))
166
+
167
+ promise (resolve, reject)
168
+ })
169
+ .finally (cancel)
170
+ return p as Promise<T>
171
+ }
172
+
173
+ export const generateMessageIDV2 = (userId?: string): string => {
174
+ const data = Buffer.alloc(8 + 20 + 16)
175
+ data.writeBigUInt64BE(BigInt(Math.floor(Date.now() / 1000)))
176
+
177
+ if(userId) {
178
+ const id = jidDecode(userId)
179
+ if(id?.user) {
180
+ data.write(id.user, 8)
181
+ data.write('@c.us', 8 + id.user.length)
182
+ }
183
+ }
184
+
185
+ const random = randomBytes(16)
186
+ random.copy(data, 28)
187
+
188
+ const hash = createHash('sha256').update(data).digest()
189
+ return 'ASS' + hash.toString('hex').toUpperCase().substring(0, 18)
190
+ }
191
+
192
+ // generate a random ID to attach to a message
193
+ export const generateMessageID = () => 'SSA' + randomBytes(6).toString('hex').toUpperCase()
194
+
195
+ export function bindWaitForEvent<T extends keyof BaileysEventMap>(ev: BaileysEventEmitter, event: T) {
196
+ return async(check: (u: BaileysEventMap[T]) => boolean | undefined, timeoutMs?: number) => {
197
+ let listener: (item: BaileysEventMap[T]) => void
198
+ let closeListener: any
199
+ await (
200
+ promiseTimeout<void>(
201
+ timeoutMs,
202
+ (resolve, reject) => {
203
+ closeListener = ({ connection, lastDisconnect }) => {
204
+ if(connection === 'close') {
205
+ reject(
206
+ lastDisconnect?.error
207
+ || new Boom('Connection Closed', { statusCode: DisconnectReason.connectionClosed })
208
+ )
209
+ }
210
+ }
211
+
212
+ ev.on('connection.update', closeListener)
213
+ listener = (update) => {
214
+ if(check(update)) {
215
+ resolve()
216
+ }
217
+ }
218
+
219
+ ev.on(event, listener)
220
+ }
221
+ )
222
+ .finally(() => {
223
+ ev.off(event, listener)
224
+ ev.off('connection.update', closeListener)
225
+ })
226
+ )
227
+ }
228
+ }
229
+
230
+ export const bindWaitForConnectionUpdate = (ev: BaileysEventEmitter) => bindWaitForEvent(ev, 'connection.update')
231
+
232
+ export const printQRIfNecessaryListener = (ev: BaileysEventEmitter, logger: Logger) => {
233
+ ev.on('connection.update', async({ qr }) => {
234
+ if(qr) {
235
+ const QR = await import('qrcode-terminal')
236
+ .then(m => m.default || m)
237
+ .catch(() => {
238
+ logger.error('QR code terminal not added as dependency')
239
+ })
240
+ QR?.generate(qr, { small: true })
241
+ }
242
+ })
243
+ }
244
+
245
+ /**
246
+ * utility that fetches latest baileys version from the master branch.
247
+ * Use to ensure your WA connection is always on the latest version
248
+ */
249
+ export const fetchLatestBaileysVersion = async(options: AxiosRequestConfig<any> = { }) => {
250
+ const URL = 'https://raw.githubusercontent.com/WhiskeySockets/Baileys/master/src/Defaults/baileys-version.json'
251
+ try {
252
+ const result = await axios.get<{ version: WAVersion }>(
253
+ URL,
254
+ {
255
+ ...options,
256
+ responseType: 'json'
257
+ }
258
+ )
259
+ return {
260
+ version: result.data.version,
261
+ isLatest: true
262
+ }
263
+ } catch(error) {
264
+ return {
265
+ version: baileysVersion as WAVersion,
266
+ isLatest: false,
267
+ error
268
+ }
269
+ }
270
+ }
271
+
272
+ /**
273
+ * A utility that fetches the latest web version of whatsapp.
274
+ * Use to ensure your WA connection is always on the latest version
275
+ */
276
+ export const fetchLatestWaWebVersion = async(options: AxiosRequestConfig<any>) => {
277
+ try {
278
+ const result = await axios.get(
279
+ 'https://web.whatsapp.com/check-update?version=1&platform=web',
280
+ {
281
+ ...options,
282
+ responseType: 'json'
283
+ }
284
+ )
285
+ const version = result.data.currentVersion.split('.')
286
+ return {
287
+ version: [+version[0], +version[1], +version[2]] as WAVersion,
288
+ isLatest: true
289
+ }
290
+ } catch(error) {
291
+ return {
292
+ version: baileysVersion as WAVersion,
293
+ isLatest: false,
294
+ error
295
+ }
296
+ }
297
+ }
298
+
299
+ /** unique message tag prefix for MD clients */
300
+ export const generateMdTagPrefix = () => {
301
+ const bytes = randomBytes(4)
302
+ return `${bytes.readUInt16BE()}.${bytes.readUInt16BE(2)}-`
303
+ }
304
+
305
+ const STATUS_MAP: { [_: string]: proto.WebMessageInfo.Status } = {
306
+ 'played': proto.WebMessageInfo.Status.PLAYED,
307
+ 'read': proto.WebMessageInfo.Status.READ,
308
+ 'read-self': proto.WebMessageInfo.Status.READ
309
+ }
310
+ /**
311
+ * Given a type of receipt, returns what the new status of the message should be
312
+ * @param type type from receipt
313
+ */
314
+ export const getStatusFromReceiptType = (type: string | undefined) => {
315
+ const status = STATUS_MAP[type!]
316
+ if(typeof type === 'undefined') {
317
+ return proto.WebMessageInfo.Status.DELIVERY_ACK
318
+ }
319
+
320
+ return status
321
+ }
322
+
323
+ const CODE_MAP: { [_: string]: DisconnectReason } = {
324
+ conflict: DisconnectReason.connectionReplaced
325
+ }
326
+
327
+ /**
328
+ * Stream errors generally provide a reason, map that to a baileys DisconnectReason
329
+ * @param reason the string reason given, eg. "conflict"
330
+ */
331
+ export const getErrorCodeFromStreamError = (node: BinaryNode) => {
332
+ const [reasonNode] = getAllBinaryNodeChildren(node)
333
+ let reason = reasonNode?.tag || 'unknown'
334
+ const statusCode = +(node.attrs.code || CODE_MAP[reason] || DisconnectReason.badSession)
335
+
336
+ if(statusCode === DisconnectReason.restartRequired) {
337
+ reason = 'restart required'
338
+ }
339
+
340
+ return {
341
+ reason,
342
+ statusCode
343
+ }
344
+ }
345
+
346
+ export const getCallStatusFromNode = ({ tag, attrs }: BinaryNode) => {
347
+ let status: WACallUpdateType
348
+ switch (tag) {
349
+ case 'offer':
350
+ case 'offer_notice':
351
+ status = 'offer'
352
+ break
353
+ case 'terminate':
354
+ if(attrs.reason === 'timeout') {
355
+ status = 'timeout'
356
+ } else {
357
+ status = 'reject'
358
+ }
359
+
360
+ break
361
+ case 'reject':
362
+ status = 'reject'
363
+ break
364
+ case 'accept':
365
+ status = 'accept'
366
+ break
367
+ default:
368
+ status = 'ringing'
369
+ break
370
+ }
371
+
372
+ return status
373
+ }
374
+
375
+ const UNEXPECTED_SERVER_CODE_TEXT = 'Unexpected server response: '
376
+
377
+ export const getCodeFromWSError = (error: Error) => {
378
+ let statusCode = 500
379
+ if(error?.message?.includes(UNEXPECTED_SERVER_CODE_TEXT)) {
380
+ const code = +error?.message.slice(UNEXPECTED_SERVER_CODE_TEXT.length)
381
+ if(!Number.isNaN(code) && code >= 400) {
382
+ statusCode = code
383
+ }
384
+ } else if(
385
+ (error as any)?.code?.startsWith('E')
386
+ || error?.message?.includes('timed out')
387
+ ) { // handle ETIMEOUT, ENOTFOUND etc
388
+ statusCode = 408
389
+ }
390
+
391
+ return statusCode
392
+ }
393
+
394
+ /**
395
+ * Is the given platform WA business
396
+ * @param platform AuthenticationCreds.platform
397
+ */
398
+ export const isWABusinessPlatform = (platform: string) => {
399
+ return platform === 'smbi' || platform === 'smba'
400
+ }
401
+
402
+ export function trimUndefined(obj: any) {
403
+ for(const key in obj) {
404
+ if(typeof obj[key] === 'undefined') {
405
+ delete obj[key]
406
+ }
407
+ }
408
+
409
+ return obj
410
+ }
411
+
412
+ const CROCKFORD_CHARACTERS = '123456789ABCDEFGHJKLMNPQRSTVWXYZ'
413
+
414
+ export function bytesToCrockford(buffer: Buffer): string {
415
+ let value = 0
416
+ let bitCount = 0
417
+ const crockford: string[] = []
418
+
419
+ for(let i = 0; i < buffer.length; i++) {
420
+ value = (value << 8) | (buffer[i] & 0xff)
421
+ bitCount += 8
422
+
423
+ while(bitCount >= 5) {
424
+ crockford.push(CROCKFORD_CHARACTERS.charAt((value >>> (bitCount - 5)) & 31))
425
+ bitCount -= 5
426
+ }
427
+ }
428
+
429
+ if(bitCount > 0) {
430
+ crockford.push(CROCKFORD_CHARACTERS.charAt((value << (5 - bitCount)) & 31))
431
+ }
432
+
433
+ return crockford.join('')
434
+ }