alicezetion 1.9.7 → 1.9.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (292) hide show
  1. package/.cache/replit/modules/nodejs-20.res +1 -0
  2. package/.cache/replit/modules/replit.res +1 -0
  3. package/.cache/typescript/5.4/node_modules/.package-lock.json +137 -0
  4. package/.cache/typescript/5.4/node_modules/@types/bluebird/LICENSE +21 -0
  5. package/.cache/typescript/5.4/node_modules/@types/bluebird/README.md +15 -0
  6. package/.cache/typescript/5.4/node_modules/@types/bluebird/index.d.ts +1365 -0
  7. package/.cache/typescript/5.4/node_modules/@types/bluebird/package.json +25 -0
  8. package/.cache/typescript/5.4/node_modules/@types/caseless/LICENSE +21 -0
  9. package/.cache/typescript/5.4/node_modules/@types/caseless/README.md +48 -0
  10. package/.cache/typescript/5.4/node_modules/@types/caseless/index.d.ts +29 -0
  11. package/.cache/typescript/5.4/node_modules/@types/caseless/package.json +35 -0
  12. package/.cache/typescript/5.4/node_modules/@types/cheerio/LICENSE +21 -0
  13. package/.cache/typescript/5.4/node_modules/@types/cheerio/README.md +15 -0
  14. package/.cache/typescript/5.4/node_modules/@types/cheerio/index.d.ts +318 -0
  15. package/.cache/typescript/5.4/node_modules/@types/cheerio/package.json +71 -0
  16. package/.cache/typescript/5.4/node_modules/@types/node/LICENSE +21 -0
  17. package/.cache/typescript/5.4/node_modules/@types/node/README.md +15 -0
  18. package/.cache/typescript/5.4/node_modules/@types/node/assert/strict.d.ts +8 -0
  19. package/.cache/typescript/5.4/node_modules/@types/node/assert.d.ts +1040 -0
  20. package/.cache/typescript/5.4/node_modules/@types/node/async_hooks.d.ts +541 -0
  21. package/.cache/typescript/5.4/node_modules/@types/node/buffer.d.ts +2363 -0
  22. package/.cache/typescript/5.4/node_modules/@types/node/child_process.d.ts +1544 -0
  23. package/.cache/typescript/5.4/node_modules/@types/node/cluster.d.ts +578 -0
  24. package/.cache/typescript/5.4/node_modules/@types/node/console.d.ts +452 -0
  25. package/.cache/typescript/5.4/node_modules/@types/node/constants.d.ts +19 -0
  26. package/.cache/typescript/5.4/node_modules/@types/node/crypto.d.ts +4523 -0
  27. package/.cache/typescript/5.4/node_modules/@types/node/dgram.d.ts +596 -0
  28. package/.cache/typescript/5.4/node_modules/@types/node/diagnostics_channel.d.ts +554 -0
  29. package/.cache/typescript/5.4/node_modules/@types/node/dns/promises.d.ts +476 -0
  30. package/.cache/typescript/5.4/node_modules/@types/node/dns.d.ts +864 -0
  31. package/.cache/typescript/5.4/node_modules/@types/node/dom-events.d.ts +124 -0
  32. package/.cache/typescript/5.4/node_modules/@types/node/domain.d.ts +170 -0
  33. package/.cache/typescript/5.4/node_modules/@types/node/events.d.ts +931 -0
  34. package/.cache/typescript/5.4/node_modules/@types/node/fs/promises.d.ts +1245 -0
  35. package/.cache/typescript/5.4/node_modules/@types/node/fs.d.ts +4317 -0
  36. package/.cache/typescript/5.4/node_modules/@types/node/globals.d.ts +412 -0
  37. package/.cache/typescript/5.4/node_modules/@types/node/globals.global.d.ts +1 -0
  38. package/.cache/typescript/5.4/node_modules/@types/node/http.d.ts +1908 -0
  39. package/.cache/typescript/5.4/node_modules/@types/node/http2.d.ts +2418 -0
  40. package/.cache/typescript/5.4/node_modules/@types/node/https.d.ts +550 -0
  41. package/.cache/typescript/5.4/node_modules/@types/node/index.d.ts +89 -0
  42. package/.cache/typescript/5.4/node_modules/@types/node/inspector.d.ts +2746 -0
  43. package/.cache/typescript/5.4/node_modules/@types/node/module.d.ts +315 -0
  44. package/.cache/typescript/5.4/node_modules/@types/node/net.d.ts +999 -0
  45. package/.cache/typescript/5.4/node_modules/@types/node/os.d.ts +495 -0
  46. package/.cache/typescript/5.4/node_modules/@types/node/package.json +217 -0
  47. package/.cache/typescript/5.4/node_modules/@types/node/path.d.ts +191 -0
  48. package/.cache/typescript/5.4/node_modules/@types/node/perf_hooks.d.ts +905 -0
  49. package/.cache/typescript/5.4/node_modules/@types/node/process.d.ts +1754 -0
  50. package/.cache/typescript/5.4/node_modules/@types/node/punycode.d.ts +117 -0
  51. package/.cache/typescript/5.4/node_modules/@types/node/querystring.d.ts +153 -0
  52. package/.cache/typescript/5.4/node_modules/@types/node/readline/promises.d.ts +150 -0
  53. package/.cache/typescript/5.4/node_modules/@types/node/readline.d.ts +540 -0
  54. package/.cache/typescript/5.4/node_modules/@types/node/repl.d.ts +430 -0
  55. package/.cache/typescript/5.4/node_modules/@types/node/sea.d.ts +153 -0
  56. package/.cache/typescript/5.4/node_modules/@types/node/stream/consumers.d.ts +12 -0
  57. package/.cache/typescript/5.4/node_modules/@types/node/stream/promises.d.ts +83 -0
  58. package/.cache/typescript/5.4/node_modules/@types/node/stream/web.d.ts +367 -0
  59. package/.cache/typescript/5.4/node_modules/@types/node/stream.d.ts +1707 -0
  60. package/.cache/typescript/5.4/node_modules/@types/node/string_decoder.d.ts +67 -0
  61. package/.cache/typescript/5.4/node_modules/@types/node/test.d.ts +1718 -0
  62. package/.cache/typescript/5.4/node_modules/@types/node/timers/promises.d.ts +97 -0
  63. package/.cache/typescript/5.4/node_modules/@types/node/timers.d.ts +240 -0
  64. package/.cache/typescript/5.4/node_modules/@types/node/tls.d.ts +1217 -0
  65. package/.cache/typescript/5.4/node_modules/@types/node/trace_events.d.ts +197 -0
  66. package/.cache/typescript/5.4/node_modules/@types/node/tty.d.ts +208 -0
  67. package/.cache/typescript/5.4/node_modules/@types/node/url.d.ts +952 -0
  68. package/.cache/typescript/5.4/node_modules/@types/node/util.d.ts +2292 -0
  69. package/.cache/typescript/5.4/node_modules/@types/node/v8.d.ts +808 -0
  70. package/.cache/typescript/5.4/node_modules/@types/node/vm.d.ts +924 -0
  71. package/.cache/typescript/5.4/node_modules/@types/node/wasi.d.ts +181 -0
  72. package/.cache/typescript/5.4/node_modules/@types/node/worker_threads.d.ts +694 -0
  73. package/.cache/typescript/5.4/node_modules/@types/node/zlib.d.ts +530 -0
  74. package/.cache/typescript/5.4/node_modules/@types/npmlog/LICENSE +21 -0
  75. package/.cache/typescript/5.4/node_modules/@types/npmlog/README.md +15 -0
  76. package/.cache/typescript/5.4/node_modules/@types/npmlog/index.d.ts +84 -0
  77. package/.cache/typescript/5.4/node_modules/@types/npmlog/package.json +32 -0
  78. package/.cache/typescript/5.4/node_modules/@types/request/LICENSE +21 -0
  79. package/.cache/typescript/5.4/node_modules/@types/request/README.md +15 -0
  80. package/.cache/typescript/5.4/node_modules/@types/request/index.d.ts +395 -0
  81. package/.cache/typescript/5.4/node_modules/@types/request/package.json +70 -0
  82. package/.cache/typescript/5.4/node_modules/@types/tough-cookie/LICENSE +21 -0
  83. package/.cache/typescript/5.4/node_modules/@types/tough-cookie/README.md +15 -0
  84. package/.cache/typescript/5.4/node_modules/@types/tough-cookie/index.d.ts +321 -0
  85. package/.cache/typescript/5.4/node_modules/@types/tough-cookie/package.json +35 -0
  86. package/.cache/typescript/5.4/node_modules/asynckit/LICENSE +21 -0
  87. package/.cache/typescript/5.4/node_modules/asynckit/README.md +233 -0
  88. package/.cache/typescript/5.4/node_modules/asynckit/bench.js +76 -0
  89. package/.cache/typescript/5.4/node_modules/asynckit/index.js +6 -0
  90. package/.cache/typescript/5.4/node_modules/asynckit/lib/abort.js +29 -0
  91. package/.cache/typescript/5.4/node_modules/asynckit/lib/async.js +34 -0
  92. package/.cache/typescript/5.4/node_modules/asynckit/lib/defer.js +26 -0
  93. package/.cache/typescript/5.4/node_modules/asynckit/lib/iterate.js +75 -0
  94. package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_asynckit.js +91 -0
  95. package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_parallel.js +25 -0
  96. package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_serial.js +25 -0
  97. package/.cache/typescript/5.4/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
  98. package/.cache/typescript/5.4/node_modules/asynckit/lib/state.js +37 -0
  99. package/.cache/typescript/5.4/node_modules/asynckit/lib/streamify.js +141 -0
  100. package/.cache/typescript/5.4/node_modules/asynckit/lib/terminator.js +29 -0
  101. package/.cache/typescript/5.4/node_modules/asynckit/package.json +63 -0
  102. package/.cache/typescript/5.4/node_modules/asynckit/parallel.js +43 -0
  103. package/.cache/typescript/5.4/node_modules/asynckit/serial.js +17 -0
  104. package/.cache/typescript/5.4/node_modules/asynckit/serialOrdered.js +75 -0
  105. package/.cache/typescript/5.4/node_modules/asynckit/stream.js +21 -0
  106. package/.cache/typescript/5.4/node_modules/combined-stream/License +19 -0
  107. package/.cache/typescript/5.4/node_modules/combined-stream/Readme.md +138 -0
  108. package/.cache/typescript/5.4/node_modules/combined-stream/lib/combined_stream.js +208 -0
  109. package/.cache/typescript/5.4/node_modules/combined-stream/package.json +25 -0
  110. package/.cache/typescript/5.4/node_modules/combined-stream/yarn.lock +17 -0
  111. package/.cache/typescript/5.4/node_modules/delayed-stream/License +19 -0
  112. package/.cache/typescript/5.4/node_modules/delayed-stream/Makefile +7 -0
  113. package/.cache/typescript/5.4/node_modules/delayed-stream/Readme.md +141 -0
  114. package/.cache/typescript/5.4/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
  115. package/.cache/typescript/5.4/node_modules/delayed-stream/package.json +27 -0
  116. package/.cache/typescript/5.4/node_modules/form-data/License +19 -0
  117. package/.cache/typescript/5.4/node_modules/form-data/README.md +350 -0
  118. package/.cache/typescript/5.4/node_modules/form-data/README.md.bak +350 -0
  119. package/.cache/typescript/5.4/node_modules/form-data/index.d.ts +51 -0
  120. package/.cache/typescript/5.4/node_modules/form-data/lib/browser.js +2 -0
  121. package/.cache/typescript/5.4/node_modules/form-data/lib/form_data.js +483 -0
  122. package/.cache/typescript/5.4/node_modules/form-data/lib/populate.js +10 -0
  123. package/.cache/typescript/5.4/node_modules/form-data/package.json +68 -0
  124. package/.cache/typescript/5.4/node_modules/mime-db/HISTORY.md +507 -0
  125. package/.cache/typescript/5.4/node_modules/mime-db/LICENSE +23 -0
  126. package/.cache/typescript/5.4/node_modules/mime-db/README.md +100 -0
  127. package/.cache/typescript/5.4/node_modules/mime-db/db.json +8519 -0
  128. package/.cache/typescript/5.4/node_modules/mime-db/index.js +12 -0
  129. package/.cache/typescript/5.4/node_modules/mime-db/package.json +60 -0
  130. package/.cache/typescript/5.4/node_modules/mime-types/HISTORY.md +397 -0
  131. package/.cache/typescript/5.4/node_modules/mime-types/LICENSE +23 -0
  132. package/.cache/typescript/5.4/node_modules/mime-types/README.md +113 -0
  133. package/.cache/typescript/5.4/node_modules/mime-types/index.js +188 -0
  134. package/.cache/typescript/5.4/node_modules/mime-types/package.json +44 -0
  135. package/.cache/typescript/5.4/node_modules/types-registry/README.md +2 -0
  136. package/.cache/typescript/5.4/node_modules/types-registry/index.json +1 -0
  137. package/.cache/typescript/5.4/node_modules/types-registry/package.json +20 -0
  138. package/.cache/typescript/5.4/node_modules/undici-types/README.md +6 -0
  139. package/.cache/typescript/5.4/node_modules/undici-types/agent.d.ts +31 -0
  140. package/.cache/typescript/5.4/node_modules/undici-types/api.d.ts +43 -0
  141. package/.cache/typescript/5.4/node_modules/undici-types/balanced-pool.d.ts +18 -0
  142. package/.cache/typescript/5.4/node_modules/undici-types/cache.d.ts +36 -0
  143. package/.cache/typescript/5.4/node_modules/undici-types/client.d.ts +97 -0
  144. package/.cache/typescript/5.4/node_modules/undici-types/connector.d.ts +34 -0
  145. package/.cache/typescript/5.4/node_modules/undici-types/content-type.d.ts +21 -0
  146. package/.cache/typescript/5.4/node_modules/undici-types/cookies.d.ts +28 -0
  147. package/.cache/typescript/5.4/node_modules/undici-types/diagnostics-channel.d.ts +67 -0
  148. package/.cache/typescript/5.4/node_modules/undici-types/dispatcher.d.ts +241 -0
  149. package/.cache/typescript/5.4/node_modules/undici-types/errors.d.ts +128 -0
  150. package/.cache/typescript/5.4/node_modules/undici-types/fetch.d.ts +209 -0
  151. package/.cache/typescript/5.4/node_modules/undici-types/file.d.ts +39 -0
  152. package/.cache/typescript/5.4/node_modules/undici-types/filereader.d.ts +54 -0
  153. package/.cache/typescript/5.4/node_modules/undici-types/formdata.d.ts +108 -0
  154. package/.cache/typescript/5.4/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  155. package/.cache/typescript/5.4/node_modules/undici-types/global-origin.d.ts +7 -0
  156. package/.cache/typescript/5.4/node_modules/undici-types/handlers.d.ts +9 -0
  157. package/.cache/typescript/5.4/node_modules/undici-types/header.d.ts +4 -0
  158. package/.cache/typescript/5.4/node_modules/undici-types/index.d.ts +63 -0
  159. package/.cache/typescript/5.4/node_modules/undici-types/interceptors.d.ts +5 -0
  160. package/.cache/typescript/5.4/node_modules/undici-types/mock-agent.d.ts +50 -0
  161. package/.cache/typescript/5.4/node_modules/undici-types/mock-client.d.ts +25 -0
  162. package/.cache/typescript/5.4/node_modules/undici-types/mock-errors.d.ts +12 -0
  163. package/.cache/typescript/5.4/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  164. package/.cache/typescript/5.4/node_modules/undici-types/mock-pool.d.ts +25 -0
  165. package/.cache/typescript/5.4/node_modules/undici-types/package.json +55 -0
  166. package/.cache/typescript/5.4/node_modules/undici-types/patch.d.ts +71 -0
  167. package/.cache/typescript/5.4/node_modules/undici-types/pool-stats.d.ts +19 -0
  168. package/.cache/typescript/5.4/node_modules/undici-types/pool.d.ts +28 -0
  169. package/.cache/typescript/5.4/node_modules/undici-types/proxy-agent.d.ts +30 -0
  170. package/.cache/typescript/5.4/node_modules/undici-types/readable.d.ts +61 -0
  171. package/.cache/typescript/5.4/node_modules/undici-types/webidl.d.ts +220 -0
  172. package/.cache/typescript/5.4/node_modules/undici-types/websocket.d.ts +131 -0
  173. package/.cache/typescript/5.4/package-lock.json +149 -0
  174. package/.cache/typescript/5.4/package.json +1 -0
  175. package/index.js +291 -71
  176. package/leiamnash/addExternalModule.js +15 -0
  177. package/leiamnash/addUserToGroup.js +77 -0
  178. package/leiamnash/changeAdminStatus.js +47 -0
  179. package/leiamnash/changeArchivedStatus.js +41 -0
  180. package/{src → leiamnash}/changeAvatar.js +3 -2
  181. package/leiamnash/changeBio.js +64 -0
  182. package/leiamnash/changeBlockedStatus.js +36 -0
  183. package/leiamnash/changeGroupImage.js +105 -0
  184. package/leiamnash/changeNickname.js +43 -0
  185. package/leiamnash/changeThreadColor.js +61 -0
  186. package/leiamnash/changeThreadEmoji.js +41 -0
  187. package/{src → leiamnash}/chat.js +4 -29
  188. package/leiamnash/createNewGroup.js +70 -0
  189. package/leiamnash/createPoll.js +59 -0
  190. package/leiamnash/deleteMessage.js +44 -0
  191. package/leiamnash/deleteThread.js +42 -0
  192. package/leiamnash/editMessage.js +62 -0
  193. package/leiamnash/forwardAttachment.js +47 -0
  194. package/leiamnash/forwardMessage.js +0 -0
  195. package/leiamnash/getCurrentUserID.js +7 -0
  196. package/leiamnash/getEmojiUrl.js +27 -0
  197. package/leiamnash/getFriendsList.js +73 -0
  198. package/leiamnash/getInfoVideo.js +134 -0
  199. package/leiamnash/getThreadHistory.js +537 -0
  200. package/leiamnash/getThreadHistoryDeprecated.js +71 -0
  201. package/leiamnash/getThreadInfo.js +171 -0
  202. package/leiamnash/getThreadInfoDeprecated.js +56 -0
  203. package/leiamnash/getThreadList.js +213 -0
  204. package/leiamnash/getThreadListDeprecated.js +46 -0
  205. package/leiamnash/getThreadPictures.js +59 -0
  206. package/leiamnash/getUserID.js +61 -0
  207. package/leiamnash/getUserInfo.js +66 -0
  208. package/leiamnash/handleFriendRequest.js +46 -0
  209. package/leiamnash/handleMessageRequest.js +47 -0
  210. package/leiamnash/httpGet.js +47 -0
  211. package/leiamnash/httpPost.js +47 -0
  212. package/leiamnash/httpPostFormData.js +42 -0
  213. package/leiamnash/listenMqtt.js +843 -0
  214. package/leiamnash/logout.js +68 -0
  215. package/leiamnash/markAsDelivered.js +47 -0
  216. package/leiamnash/markAsRead.js +70 -0
  217. package/leiamnash/markAsReadAll.js +40 -0
  218. package/leiamnash/markAsSeen.js +48 -0
  219. package/leiamnash/muteThread.js +45 -0
  220. package/leiamnash/pinMessage.js +58 -0
  221. package/leiamnash/react.js +109 -0
  222. package/{src → leiamnash}/refreshFb_dtsg.js +1 -1
  223. package/leiamnash/removeUserFromGroup.js +45 -0
  224. package/leiamnash/resolvePhotoUrl.js +36 -0
  225. package/leiamnash/searchForThread.js +42 -0
  226. package/leiamnash/seen.js +40 -0
  227. package/leiamnash/sendMessage.js +315 -0
  228. package/leiamnash/sendTypingIndicator.js +70 -0
  229. package/leiamnash/setMessageReaction.js +103 -0
  230. package/leiamnash/setPostReaction.js +63 -0
  231. package/leiamnash/setTitle.js +70 -0
  232. package/leiamnash/threadColors.js +41 -0
  233. package/leiamnash/token.js +112 -0
  234. package/leiamnash/unfriend.js +42 -0
  235. package/leiamnash/unsendMessage.js +39 -0
  236. package/{src → leiamnash}/uploadAttachment.js +2 -1
  237. package/package.json +3 -2
  238. package/utils.js +1345 -1382
  239. package/.cache/replit/modules/nodejs-20:v32-20240401-269b323.res +0 -1
  240. package/.cache/replit/modules/replit:v8-20240329-787bc7d.res +0 -1
  241. package/.replit +0 -1
  242. package/src/addExternalModule.js +0 -19
  243. package/src/addUserToGroup.js +0 -113
  244. package/src/changeAdminStatus.js +0 -79
  245. package/src/changeArchivedStatus.js +0 -55
  246. package/src/changeBio.js +0 -77
  247. package/src/changeBlockedStatus.js +0 -47
  248. package/src/changeGroupImage.js +0 -132
  249. package/src/changeNickname.js +0 -59
  250. package/src/changeThreadColor.js +0 -65
  251. package/src/changeThreadEmoji.js +0 -55
  252. package/src/createNewGroup.js +0 -86
  253. package/src/createPoll.js +0 -71
  254. package/src/deleteMessage.js +0 -56
  255. package/src/deleteThread.js +0 -56
  256. package/src/edit.js +0 -66
  257. package/src/forwardAttachment.js +0 -60
  258. package/src/getCurrentUserID.js +0 -7
  259. package/src/getEmojiUrl.js +0 -29
  260. package/src/getFriendsList.js +0 -83
  261. package/src/getThreadHistory.js +0 -666
  262. package/src/getThreadInfo.js +0 -232
  263. package/src/getThreadList.js +0 -241
  264. package/src/getThreadPictures.js +0 -79
  265. package/src/getUserID.js +0 -66
  266. package/src/getUserInfo.js +0 -74
  267. package/src/handleFriendRequest.js +0 -61
  268. package/src/handleMessageRequest.js +0 -65
  269. package/src/httpGet.js +0 -57
  270. package/src/httpPost.js +0 -57
  271. package/src/httpPostFormData.js +0 -63
  272. package/src/listenMqtt.js +0 -854
  273. package/src/logout.js +0 -75
  274. package/src/markAsDelivered.js +0 -58
  275. package/src/markAsRead.js +0 -80
  276. package/src/markAsReadAll.js +0 -50
  277. package/src/markAsSeen.js +0 -59
  278. package/src/muteThread.js +0 -52
  279. package/src/react.js +0 -121
  280. package/src/removeUserFromGroup.js +0 -79
  281. package/src/resolvePhotoUrl.js +0 -45
  282. package/src/searchForThread.js +0 -53
  283. package/src/seen.js +0 -50
  284. package/src/sendMessage.js +0 -477
  285. package/src/sendTypingIndicator.js +0 -103
  286. package/src/setMessageReaction.js +0 -121
  287. package/src/setPostReaction.js +0 -109
  288. package/src/setTitle.js +0 -86
  289. package/src/threadColors.js +0 -131
  290. package/src/unfriend.js +0 -52
  291. package/src/unsendMessage.js +0 -49
  292. /package/{src → leiamnash}/getMessage.js +0 -0
package/src/listenMqtt.js DELETED
@@ -1,854 +0,0 @@
1
- /* eslint-disable no-redeclare */
2
- "use strict";
3
- const utils = require("../utils");
4
- const log = require("npmlog");
5
- const mqtt = require('mqtt');
6
- const websocket = require('websocket-stream');
7
- const HttpsProxyAgent = require('https-proxy-agent');
8
- const EventEmitter = require('events');
9
-
10
- const identity = function () { };
11
-
12
- const topics = [
13
- "/legacy_web",
14
- "/webrtc",
15
- "/rtc_multi",
16
- "/onevc",
17
- "/br_sr", //Notification
18
- //Need to publish /br_sr right after this
19
- "/sr_res",
20
- "/t_ms",
21
- "/thread_typing",
22
- "/orca_typing_notifications",
23
- "/notify_disconnect",
24
- //Need to publish /messenger_sync_create_queue right after this
25
- "/orca_presence",
26
- //Will receive /sr_res right here.
27
-
28
- "/legacy_web_mtouch"
29
- // "/inbox",
30
- // "/mercury",
31
- // "/messaging_events",
32
- // "/orca_message_notifications",
33
- // "/pp",
34
- // "/webrtc_response",
35
- ];
36
-
37
- function listenMqtt(defaultFuncs, api, ctx, globalCallback) {
38
- //Don't really know what this does but I think it's for the active state?
39
- //TODO: Move to ctx when implemented
40
- const chatOn = ctx.globalOptions.online;
41
- const foreground = false;
42
-
43
- const sessionID = Math.floor(Math.random() * 9007199254740991) + 1;
44
- const username = {
45
- u: ctx.i_userID || ctx.userID,
46
- s: sessionID,
47
- chat_on: chatOn,
48
- fg: foreground,
49
- d: utils.getGUID(),
50
- ct: "websocket",
51
- //App id from facebook
52
- aid: "219994525426954",
53
- mqtt_sid: "",
54
- cp: 3,
55
- ecp: 10,
56
- st: [],
57
- pm: [],
58
- dc: "",
59
- no_auto_fg: true,
60
- gas: null,
61
- pack: [],
62
- a: ctx.globalOptions.userAgent,
63
- aids: null
64
- };
65
- const cookies = ctx.jar.getCookies("https://www.facebook.com").join("; ");
66
-
67
- let host;
68
- if (ctx.mqttEndpoint) {
69
- host = `${ctx.mqttEndpoint}&sid=${sessionID}`;
70
- } else if (ctx.region) {
71
- host = `wss://edge-chat.facebook.com/chat?region=${ctx.region.toLocaleLowerCase()}&sid=${sessionID}`;
72
- } else {
73
- host = `wss://edge-chat.facebook.com/chat?sid=${sessionID}`;
74
- }
75
-
76
- const options = {
77
- clientId: "mqttwsclient",
78
- protocolId: 'MQIsdp',
79
- protocolVersion: 3,
80
- username: JSON.stringify(username),
81
- clean: true,
82
- wsOptions: {
83
- headers: {
84
- 'Cookie': cookies,
85
- 'Origin': 'https://www.facebook.com',
86
- 'User-Agent': ctx.globalOptions.userAgent,
87
- 'Referer': 'https://www.facebook.com/',
88
- 'Host': new URL(host).hostname //'edge-chat.facebook.com'
89
- },
90
- origin: 'https://www.facebook.com',
91
- protocolVersion: 13
92
- },
93
- keepalive: 10,
94
- reschedulePings: false
95
- };
96
-
97
- if (typeof ctx.globalOptions.proxy != "undefined") {
98
- const agent = new HttpsProxyAgent(ctx.globalOptions.proxy);
99
- options.wsOptions.agent = agent;
100
- }
101
-
102
- ctx.mqttClient = new mqtt.Client(_ => websocket(host, options.wsOptions), options);
103
-
104
- const mqttClient = ctx.mqttClient;
105
-
106
- mqttClient.on('error', function (err) {
107
- log.error("listenMqtt", err);
108
- mqttClient.end();
109
- if (ctx.globalOptions.autoReconnect) {
110
- listenMqtt(defaultFuncs, api, ctx, globalCallback);
111
- } else {
112
- utils.checkLiveCookie(ctx, defaultFuncs)
113
- .then(res => {
114
- globalCallback({
115
- type: "stop_listen",
116
- error: "Connection refused: Server unavailable"
117
- }, null);
118
- })
119
- .catch(err => {
120
- globalCallback({
121
- type: "account_inactive",
122
- error: "Maybe your account is blocked by facebook, please login and check at https://facebook.com"
123
- }, null);
124
- });
125
- }
126
- });
127
-
128
- mqttClient.on('close', function () {
129
-
130
- });
131
-
132
- mqttClient.on('connect', function () {
133
- topics.forEach(function (topicsub) {
134
- mqttClient.subscribe(topicsub);
135
- });
136
-
137
- let topic;
138
- const queue = {
139
- sync_api_version: 10,
140
- max_deltas_able_to_process: 1000,
141
- delta_batch_size: 500,
142
- encoding: "JSON",
143
- entity_fbid: ctx.i_userID || ctx.userID
144
- };
145
-
146
- if (ctx.syncToken) {
147
- topic = "/messenger_sync_get_diffs";
148
- queue.last_seq_id = ctx.lastSeqId;
149
- queue.sync_token = ctx.syncToken;
150
- } else {
151
- topic = "/messenger_sync_create_queue";
152
- queue.initial_titan_sequence_id = ctx.lastSeqId;
153
- queue.device_params = null;
154
- }
155
-
156
- mqttClient.publish(topic, JSON.stringify(queue), { qos: 1, retain: false });
157
- // set status online
158
- // fix by NTKhang
159
- mqttClient.publish("/foreground_state", JSON.stringify({ foreground: chatOn }), { qos: 1 });
160
- mqttClient.publish("/set_client_settings", JSON.stringify({ make_user_available_when_in_foreground: true }), { qos: 1 });
161
-
162
- const rTimeout = setTimeout(function () {
163
- mqttClient.end();
164
- listenMqtt(defaultFuncs, api, ctx, globalCallback);
165
- }, 5000);
166
-
167
- ctx.tmsWait = function () {
168
- clearTimeout(rTimeout);
169
- ctx.globalOptions.emitReady ? globalCallback({
170
- type: "ready",
171
- error: null
172
- }) : "";
173
- delete ctx.tmsWait;
174
- };
175
-
176
- });
177
-
178
- mqttClient.on('message', function (topic, message, _packet) {
179
- let jsonMessage = Buffer.isBuffer(message) ? Buffer.from(message).toString() : message;
180
- try {
181
- jsonMessage = JSON.parse(jsonMessage);
182
- }
183
- catch (e) {
184
- jsonMessage = {};
185
- }
186
-
187
- if (jsonMessage.type === "jewel_requests_add") {
188
- globalCallback(null, {
189
- type: "friend_request_received",
190
- actorFbId: jsonMessage.from.toString(),
191
- timestamp: Date.now().toString()
192
- });
193
- }
194
- else if (jsonMessage.type === "jewel_requests_remove_old") {
195
- globalCallback(null, {
196
- type: "friend_request_cancel",
197
- actorFbId: jsonMessage.from.toString(),
198
- timestamp: Date.now().toString()
199
- });
200
- }
201
- else if (topic === "/t_ms") {
202
- if (ctx.tmsWait && typeof ctx.tmsWait == "function") {
203
- ctx.tmsWait();
204
- }
205
-
206
- if (jsonMessage.firstDeltaSeqId && jsonMessage.syncToken) {
207
- ctx.lastSeqId = jsonMessage.firstDeltaSeqId;
208
- ctx.syncToken = jsonMessage.syncToken;
209
- }
210
-
211
- if (jsonMessage.lastIssuedSeqId) {
212
- ctx.lastSeqId = parseInt(jsonMessage.lastIssuedSeqId);
213
- }
214
-
215
- //If it contains more than 1 delta
216
- for (const i in jsonMessage.deltas) {
217
- const delta = jsonMessage.deltas[i];
218
- parseDelta(defaultFuncs, api, ctx, globalCallback, { "delta": delta });
219
- }
220
- } else if (topic === "/thread_typing" || topic === "/orca_typing_notifications") {
221
- const typ = {
222
- type: "typ",
223
- isTyping: !!jsonMessage.state,
224
- from: jsonMessage.sender_fbid.toString(),
225
- threadID: utils.formatID((jsonMessage.thread || jsonMessage.sender_fbid).toString())
226
- };
227
- (function () { globalCallback(null, typ); })();
228
- } else if (topic === "/orca_presence") {
229
- if (!ctx.globalOptions.updatePresence) {
230
- for (const i in jsonMessage.list) {
231
- const data = jsonMessage.list[i];
232
- const userID = data["u"];
233
-
234
- const presence = {
235
- type: "presence",
236
- userID: userID.toString(),
237
- //Convert to ms
238
- timestamp: data["l"] * 1000,
239
- statuses: data["p"]
240
- };
241
- (function () { globalCallback(null, presence); })();
242
- }
243
- }
244
- }
245
-
246
- });
247
- mqttClient.on('close', function () {
248
- globalCallback("Connection closed.");
249
- });
250
- }
251
-
252
- function parseDelta(defaultFuncs, api, ctx, globalCallback, v) {
253
- if (v.delta.class == "NewMessage") {
254
- //Not tested for pages
255
- if (ctx.globalOptions.pageID &&
256
- ctx.globalOptions.pageID != v.queue
257
- )
258
- return;
259
-
260
- (function resolveAttachmentUrl(i) {
261
- if (i == (v.delta.attachments || []).length) {
262
- let fmtMsg;
263
- try {
264
- fmtMsg = utils.formatDeltaMessage(v);
265
- } catch (err) {
266
- return globalCallback({
267
- error: "Problem parsing message object. Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.",
268
- detail: err,
269
- res: v,
270
- type: "parse_error"
271
- });
272
- }
273
- if (fmtMsg) {
274
- if (ctx.globalOptions.autoMarkDelivery) {
275
- markDelivery(ctx, api, fmtMsg.threadID, fmtMsg.messageID);
276
- }
277
- }
278
- return !ctx.globalOptions.selfListen &&
279
- (fmtMsg.senderID === ctx.i_userID || fmtMsg.senderID === ctx.userID) ?
280
- undefined :
281
- (function () { globalCallback(null, fmtMsg); })();
282
- } else {
283
- if (v.delta.attachments[i].mercury.attach_type == "photo") {
284
- api.resolvePhotoUrl(
285
- v.delta.attachments[i].fbid,
286
- (err, url) => {
287
- if (!err)
288
- v.delta.attachments[
289
- i
290
- ].mercury.metadata.url = url;
291
- return resolveAttachmentUrl(i + 1);
292
- }
293
- );
294
- } else {
295
- return resolveAttachmentUrl(i + 1);
296
- }
297
- }
298
- })(0);
299
- }
300
-
301
- if (v.delta.class == "ClientPayload") {
302
- const clientPayload = utils.decodeClientPayload(
303
- v.delta.payload
304
- );
305
-
306
- if (clientPayload && clientPayload.deltas) {
307
- for (const i in clientPayload.deltas) {
308
- const delta = clientPayload.deltas[i];
309
- if (delta.deltaMessageReaction && !!ctx.globalOptions.listenEvents) {
310
- (function () {
311
- globalCallback(null, {
312
- type: "message_reaction",
313
- threadID: (delta.deltaMessageReaction.threadKey
314
- .threadFbId ?
315
- delta.deltaMessageReaction.threadKey.threadFbId : delta.deltaMessageReaction.threadKey
316
- .otherUserFbId).toString(),
317
- messageID: delta.deltaMessageReaction.messageId,
318
- reaction: delta.deltaMessageReaction.reaction,
319
- senderID: delta.deltaMessageReaction.senderId == 0 ? delta.deltaMessageReaction.userId.toString() : delta.deltaMessageReaction.senderId.toString(),
320
- userID: (delta.deltaMessageReaction.userId || delta.deltaMessageReaction.senderId).toString()
321
- });
322
- })();
323
- } else if (delta.deltaRecallMessageData && !!ctx.globalOptions.listenEvents) {
324
- (function () {
325
- globalCallback(null, {
326
- type: "message_unsend",
327
- threadID: (delta.deltaRecallMessageData.threadKey.threadFbId ?
328
- delta.deltaRecallMessageData.threadKey.threadFbId : delta.deltaRecallMessageData.threadKey
329
- .otherUserFbId).toString(),
330
- messageID: delta.deltaRecallMessageData.messageID,
331
- senderID: delta.deltaRecallMessageData.senderID.toString(),
332
- deletionTimestamp: delta.deltaRecallMessageData.deletionTimestamp,
333
- timestamp: delta.deltaRecallMessageData.timestamp
334
- });
335
- })();
336
- } else if (delta.deltaRemoveMessage && !!ctx.globalOptions.listenEvents) {
337
- (function () {
338
- globalCallback(null, {
339
- type: "message_self_delete",
340
- threadID: (delta.deltaRemoveMessage.threadKey.threadFbId ?
341
- delta.deltaRemoveMessage.threadKey.threadFbId : delta.deltaRemoveMessage.threadKey
342
- .otherUserFbId).toString(),
343
- messageID: delta.deltaRemoveMessage.messageIds.length == 1 ? delta.deltaRemoveMessage.messageIds[0] : delta.deltaRemoveMessage.messageIds,
344
- senderID: api.getCurrentUserID(),
345
- deletionTimestamp: delta.deltaRemoveMessage.deletionTimestamp,
346
- timestamp: delta.deltaRemoveMessage.timestamp
347
- });
348
- })();
349
- }
350
- else if (delta.deltaMessageReply) {
351
- //Mention block - #1
352
- let mdata =
353
- delta.deltaMessageReply.message === undefined ? [] :
354
- delta.deltaMessageReply.message.data === undefined ? [] :
355
- delta.deltaMessageReply.message.data.prng === undefined ? [] :
356
- JSON.parse(delta.deltaMessageReply.message.data.prng);
357
- let m_id = mdata.map(u => u.i);
358
- let m_offset = mdata.map(u => u.o);
359
- let m_length = mdata.map(u => u.l);
360
-
361
- const mentions = {};
362
-
363
- for (let i = 0; i < m_id.length; i++) {
364
- mentions[m_id[i]] = (delta.deltaMessageReply.message.body || "").substring(
365
- m_offset[i],
366
- m_offset[i] + m_length[i]
367
- );
368
- }
369
- //Mention block - 1#
370
- const callbackToReturn = {
371
- type: "message_reply",
372
- threadID: (delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId ?
373
- delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId : delta.deltaMessageReply.message.messageMetadata.threadKey
374
- .otherUserFbId).toString(),
375
- messageID: delta.deltaMessageReply.message.messageMetadata.messageId,
376
- senderID: delta.deltaMessageReply.message.messageMetadata.actorFbId.toString(),
377
- attachments: (delta.deltaMessageReply.message.attachments || []).map(function (att) {
378
- const mercury = JSON.parse(att.mercuryJSON);
379
- Object.assign(att, mercury);
380
- return att;
381
- }).map(att => {
382
- let x;
383
- try {
384
- x = utils._formatAttachment(att);
385
- } catch (ex) {
386
- x = att;
387
- x.error = ex;
388
- x.type = "unknown";
389
- }
390
- return x;
391
- }),
392
- body: delta.deltaMessageReply.message.body || "",
393
- isGroup: !!delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId,
394
- mentions: mentions,
395
- timestamp: delta.deltaMessageReply.message.messageMetadata.timestamp,
396
- participantIDs: (delta.deltaMessageReply.message.messageMetadata.cid.canonicalParticipantFbids || delta.deltaMessageReply.message.participants || []).map(e => e.toString())
397
- };
398
-
399
- if (delta.deltaMessageReply.repliedToMessage) {
400
- //Mention block - #2
401
- mdata =
402
- delta.deltaMessageReply.repliedToMessage === undefined ? [] :
403
- delta.deltaMessageReply.repliedToMessage.data === undefined ? [] :
404
- delta.deltaMessageReply.repliedToMessage.data.prng === undefined ? [] :
405
- JSON.parse(delta.deltaMessageReply.repliedToMessage.data.prng);
406
- m_id = mdata.map(u => u.i);
407
- m_offset = mdata.map(u => u.o);
408
- m_length = mdata.map(u => u.l);
409
-
410
- const rmentions = {};
411
-
412
- for (let i = 0; i < m_id.length; i++) {
413
- rmentions[m_id[i]] = (delta.deltaMessageReply.repliedToMessage.body || "").substring(
414
- m_offset[i],
415
- m_offset[i] + m_length[i]
416
- );
417
- }
418
- //Mention block - 2#
419
- callbackToReturn.messageReply = {
420
- threadID: (delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId ?
421
- delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId : delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey
422
- .otherUserFbId).toString(),
423
- messageID: delta.deltaMessageReply.repliedToMessage.messageMetadata.messageId,
424
- senderID: delta.deltaMessageReply.repliedToMessage.messageMetadata.actorFbId.toString(),
425
- attachments: delta.deltaMessageReply.repliedToMessage.attachments.map(function (att) {
426
- const mercury = JSON.parse(att.mercuryJSON);
427
- Object.assign(att, mercury);
428
- return att;
429
- }).map(att => {
430
- let x;
431
- try {
432
- x = utils._formatAttachment(att);
433
- } catch (ex) {
434
- x = att;
435
- x.error = ex;
436
- x.type = "unknown";
437
- }
438
- return x;
439
- }),
440
- body: delta.deltaMessageReply.repliedToMessage.body || "",
441
- isGroup: !!delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId,
442
- mentions: rmentions,
443
- timestamp: delta.deltaMessageReply.repliedToMessage.messageMetadata.timestamp
444
- };
445
- } else if (delta.deltaMessageReply.replyToMessageId) {
446
- return defaultFuncs
447
- .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, {
448
- "av": ctx.globalOptions.pageID,
449
- "queries": JSON.stringify({
450
- "o0": {
451
- //Using the same doc_id as forcedFetch
452
- "doc_id": "2848441488556444",
453
- "query_params": {
454
- "thread_and_message_id": {
455
- "thread_id": callbackToReturn.threadID,
456
- "message_id": delta.deltaMessageReply.replyToMessageId.id
457
- }
458
- }
459
- }
460
- })
461
- })
462
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
463
- .then((resData) => {
464
- if (resData[resData.length - 1].error_results > 0) {
465
- throw resData[0].o0.errors;
466
- }
467
-
468
- if (resData[resData.length - 1].successful_results === 0) {
469
- throw { error: "forcedFetch: there was no successful_results", res: resData };
470
- }
471
-
472
- const fetchData = resData[0].o0.data.message;
473
-
474
- const mobj = {};
475
- for (const n in fetchData.message.ranges) {
476
- mobj[fetchData.message.ranges[n].entity.id] = (fetchData.message.text || "").substr(fetchData.message.ranges[n].offset, fetchData.message.ranges[n].length);
477
- }
478
-
479
- callbackToReturn.messageReply = {
480
- threadID: callbackToReturn.threadID,
481
- messageID: fetchData.message_id,
482
- senderID: fetchData.message_sender.id.toString(),
483
- attachments: fetchData.message.blob_attachment.map(att => {
484
- let x;
485
- try {
486
- x = utils._formatAttachment({
487
- blob_attachment: att
488
- });
489
- } catch (ex) {
490
- x = att;
491
- x.error = ex;
492
- x.type = "unknown";
493
- }
494
- return x;
495
- }),
496
- body: fetchData.message.text || "",
497
- isGroup: callbackToReturn.isGroup,
498
- mentions: mobj,
499
- timestamp: parseInt(fetchData.timestamp_precise)
500
- };
501
- })
502
- .catch((err) => {
503
- log.error("forcedFetch", err);
504
- })
505
- .finally(function () {
506
- if (ctx.globalOptions.autoMarkDelivery) {
507
- markDelivery(ctx, api, callbackToReturn.threadID, callbackToReturn.messageID);
508
- }
509
- !ctx.globalOptions.selfListen &&
510
- (callbackToReturn.senderID === ctx.i_userID || callbackToReturn.senderID === ctx.userID) ?
511
- undefined :
512
- (function () { globalCallback(null, callbackToReturn); })();
513
- });
514
- } else {
515
- callbackToReturn.delta = delta;
516
- }
517
-
518
- if (ctx.globalOptions.autoMarkDelivery) {
519
- markDelivery(ctx, api, callbackToReturn.threadID, callbackToReturn.messageID);
520
- }
521
-
522
- return !ctx.globalOptions.selfListen &&
523
- (callbackToReturn.senderID === ctx.i_userID || callbackToReturn.senderID === ctx.userID) ?
524
- undefined :
525
- (function () { globalCallback(null, callbackToReturn); })();
526
- }
527
- }
528
- return;
529
- }
530
- }
531
-
532
- if (v.delta.class !== "NewMessage" &&
533
- !ctx.globalOptions.listenEvents
534
- )
535
- return;
536
-
537
- switch (v.delta.class) {
538
- case "ReadReceipt":
539
- var fmtMsg;
540
- try {
541
- fmtMsg = utils.formatDeltaReadReceipt(v.delta);
542
- }
543
- catch (err) {
544
- return globalCallback({
545
- error: "Problem parsing message object. Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.",
546
- detail: err,
547
- res: v.delta,
548
- type: "parse_error"
549
- });
550
- }
551
- return (function () { globalCallback(null, fmtMsg); })();
552
- case "AdminTextMessage":
553
- switch (v.delta.type) {
554
- case "change_thread_theme":
555
- case "change_thread_nickname":
556
- case "change_thread_icon":
557
- case "change_thread_admins":
558
- case "group_poll":
559
- case "joinable_group_link_mode_change":
560
- case "magic_words":
561
- case "change_thread_approval_mode":
562
- case "messenger_call_log":
563
- case "participant_joined_group_call":
564
- var fmtMsg;
565
- try {
566
- fmtMsg = utils.formatDeltaEvent(v.delta);
567
- }
568
- catch (err) {
569
- return globalCallback({
570
- error: "Problem parsing message object. Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.",
571
- detail: err,
572
- res: v.delta,
573
- type: "parse_error"
574
- });
575
- }
576
- return (function () { globalCallback(null, fmtMsg); })();
577
- default:
578
- return;
579
- }
580
- //For group images
581
- case "ForcedFetch":
582
- if (!v.delta.threadKey) return;
583
- var mid = v.delta.messageId;
584
- var tid = v.delta.threadKey.threadFbId;
585
- if (mid && tid) {
586
- const form = {
587
- "av": ctx.globalOptions.pageID,
588
- "queries": JSON.stringify({
589
- "o0": {
590
- //This doc_id is valid as of March 25, 2020
591
- "doc_id": "2848441488556444",
592
- "query_params": {
593
- "thread_and_message_id": {
594
- "thread_id": tid.toString(),
595
- "message_id": mid
596
- }
597
- }
598
- }
599
- })
600
- };
601
-
602
- defaultFuncs
603
- .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
604
- .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
605
- .then((resData) => {
606
- if (resData[resData.length - 1].error_results > 0) {
607
- throw resData[0].o0.errors;
608
- }
609
-
610
- if (resData[resData.length - 1].successful_results === 0) {
611
- throw { error: "forcedFetch: there was no successful_results", res: resData };
612
- }
613
-
614
- const fetchData = resData[0].o0.data.message;
615
-
616
- if (utils.getType(fetchData) == "Object") {
617
- log.info("forcedFetch", fetchData);
618
- switch (fetchData.__typename) {
619
- case "ThreadImageMessage":
620
- (!ctx.globalOptions.selfListenEvent && (fetchData.message_sender.id.toString() === ctx.i_userID || fetchData.message_sender.id.toString() === ctx.userID)) || !ctx.loggedIn ?
621
- undefined :
622
- (function () {
623
- globalCallback(null, {
624
- type: "event",
625
- threadID: utils.formatID(tid.toString()),
626
- messageID: fetchData.message_id,
627
- logMessageType: "log:thread-image",
628
- logMessageData: {
629
- attachmentID: fetchData.image_with_metadata && fetchData.image_with_metadata.legacy_attachment_id,
630
- width: fetchData.image_with_metadata && fetchData.image_with_metadata.original_dimensions.x,
631
- height: fetchData.image_with_metadata && fetchData.image_with_metadata.original_dimensions.y,
632
- url: fetchData.image_with_metadata && fetchData.image_with_metadata.preview.uri
633
- },
634
- logMessageBody: fetchData.snippet,
635
- timestamp: fetchData.timestamp_precise,
636
- author: fetchData.message_sender.id
637
- });
638
- })();
639
- break;
640
- case "UserMessage":
641
- log.info("ff-Return", {
642
- type: "message",
643
- senderID: utils.formatID(fetchData.message_sender.id),
644
- body: fetchData.message.text || "",
645
- threadID: utils.formatID(tid.toString()),
646
- messageID: fetchData.message_id,
647
- attachments: [{
648
- type: "share",
649
- ID: fetchData.extensible_attachment.legacy_attachment_id,
650
- url: fetchData.extensible_attachment.story_attachment.url,
651
-
652
- title: fetchData.extensible_attachment.story_attachment.title_with_entities.text,
653
- description: fetchData.extensible_attachment.story_attachment.description.text,
654
- source: fetchData.extensible_attachment.story_attachment.source,
655
-
656
- image: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).uri,
657
- width: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).width,
658
- height: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).height,
659
- playable: (fetchData.extensible_attachment.story_attachment.media || {}).is_playable || false,
660
- duration: (fetchData.extensible_attachment.story_attachment.media || {}).playable_duration_in_ms || 0,
661
-
662
- subattachments: fetchData.extensible_attachment.subattachments,
663
- properties: fetchData.extensible_attachment.story_attachment.properties
664
- }],
665
- mentions: {},
666
- timestamp: parseInt(fetchData.timestamp_precise),
667
- participantIDs: (fetchData.participants || (fetchData.messageMetadata ? fetchData.messageMetadata.cid ? fetchData.messageMetadata.cid.canonicalParticipantFbids : fetchData.messageMetadata.participantIds : []) || []),
668
- isGroup: (fetchData.message_sender.id != tid.toString())
669
- });
670
- globalCallback(null, {
671
- type: "message",
672
- senderID: utils.formatID(fetchData.message_sender.id),
673
- body: fetchData.message.text || "",
674
- threadID: utils.formatID(tid.toString()),
675
- messageID: fetchData.message_id,
676
- attachments: [{
677
- type: "share",
678
- ID: fetchData.extensible_attachment.legacy_attachment_id,
679
- url: fetchData.extensible_attachment.story_attachment.url,
680
-
681
- title: fetchData.extensible_attachment.story_attachment.title_with_entities.text,
682
- description: fetchData.extensible_attachment.story_attachment.description.text,
683
- source: fetchData.extensible_attachment.story_attachment.source,
684
-
685
- image: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).uri,
686
- width: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).width,
687
- height: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).height,
688
- playable: (fetchData.extensible_attachment.story_attachment.media || {}).is_playable || false,
689
- duration: (fetchData.extensible_attachment.story_attachment.media || {}).playable_duration_in_ms || 0,
690
-
691
- subattachments: fetchData.extensible_attachment.subattachments,
692
- properties: fetchData.extensible_attachment.story_attachment.properties
693
- }],
694
- mentions: {},
695
- timestamp: parseInt(fetchData.timestamp_precise),
696
- participantIDs: (fetchData.participants || (fetchData.messageMetadata ? fetchData.messageMetadata.cid ? fetchData.messageMetadata.cid.canonicalParticipantFbids : fetchData.messageMetadata.participantIds : []) || []),
697
- isGroup: (fetchData.message_sender.id != tid.toString())
698
- });
699
- }
700
- } else {
701
- log.error("forcedFetch", fetchData);
702
- }
703
- })
704
- .catch((err) => {
705
- log.error("forcedFetch", err);
706
- });
707
- }
708
- break;
709
- case "ThreadName":
710
- case "ParticipantsAddedToGroupThread":
711
- case "ParticipantLeftGroupThread":
712
- case "ApprovalQueue":
713
- var formattedEvent;
714
- try {
715
- formattedEvent = utils.formatDeltaEvent(v.delta);
716
- } catch (err) {
717
- return globalCallback({
718
- error: "Problem parsing message object. Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.",
719
- detail: err,
720
- res: v.delta,
721
- type: "parse_error"
722
- });
723
- }
724
- return (!ctx.globalOptions.selfListenEvent && (formattedEvent.author.toString() === ctx.i_userID || formattedEvent.author.toString() === ctx.userID)) || !ctx.loggedIn ?
725
- undefined :
726
- (function () { globalCallback(null, formattedEvent); })();
727
- }
728
- }
729
-
730
- function markDelivery(ctx, api, threadID, messageID) {
731
- if (threadID && messageID) {
732
- api.markAsDelivered(threadID, messageID, (err) => {
733
- if (err) {
734
- log.error("markAsDelivered", err);
735
- } else {
736
- if (ctx.globalOptions.autoMarkRead) {
737
- api.markAsRead(threadID, (err) => {
738
- if (err) {
739
- log.error("markAsDelivered", err);
740
- }
741
- });
742
- }
743
- }
744
- });
745
- }
746
- }
747
-
748
- function getSeqId(defaultFuncs, api, ctx, globalCallback) {
749
- const jar = ctx.jar;
750
- utils
751
- .get('https://www.facebook.com/', jar, null, ctx.globalOptions, { noRef: true })
752
- .then(utils.saveCookies(jar))
753
- .then(function (resData) {
754
- const html = resData.body;
755
- const oldFBMQTTMatch = html.match(/irisSeqID:"(.+?)",appID:219994525426954,endpoint:"(.+?)"/);
756
- let mqttEndpoint = null;
757
- let region = null;
758
- let irisSeqID = null;
759
- let noMqttData = null;
760
-
761
- if (oldFBMQTTMatch) {
762
- irisSeqID = oldFBMQTTMatch[1];
763
- mqttEndpoint = oldFBMQTTMatch[2];
764
- region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
765
- log.info("login", `Got this account's message region: ${region}`);
766
- } else {
767
- const newFBMQTTMatch = html.match(/{"app_id":"219994525426954","endpoint":"(.+?)","iris_seq_id":"(.+?)"}/);
768
- if (newFBMQTTMatch) {
769
- irisSeqID = newFBMQTTMatch[2];
770
- mqttEndpoint = newFBMQTTMatch[1].replace(/\\\//g, "/");
771
- region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
772
- log.info("login", `Got this account's message region: ${region}`);
773
- } else {
774
- const legacyFBMQTTMatch = html.match(/(\["MqttWebConfig",\[\],{fbid:")(.+?)(",appID:219994525426954,endpoint:")(.+?)(",pollingEndpoint:")(.+?)(3790])/);
775
- if (legacyFBMQTTMatch) {
776
- mqttEndpoint = legacyFBMQTTMatch[4];
777
- region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
778
- log.warn("login", `Cannot get sequence ID with new RegExp. Fallback to old RegExp (without seqID)...`);
779
- log.info("login", `Got this account's message region: ${region}`);
780
- log.info("login", `[Unused] Polling endpoint: ${legacyFBMQTTMatch[6]}`);
781
- } else {
782
- log.warn("login", "Cannot get MQTT region & sequence ID.");
783
- noMqttData = html;
784
- }
785
- }
786
- }
787
-
788
- ctx.lastSeqId = irisSeqID;
789
- ctx.mqttEndpoint = mqttEndpoint;
790
- ctx.region = region;
791
- if (noMqttData) {
792
- api["htmlData"] = noMqttData;
793
- }
794
-
795
- listenMqtt(defaultFuncs, api, ctx, globalCallback);
796
- })
797
- .catch(function (err) {
798
- log.error("getSeqId", err);
799
- });
800
- }
801
-
802
- module.exports = function (defaultFuncs, api, ctx) {
803
- let globalCallback = identity;
804
-
805
- return function (callback) {
806
- class MessageEmitter extends EventEmitter {
807
- stopListening(callback) {
808
-
809
- callback = callback || (() => { });
810
- globalCallback = identity;
811
- if (ctx.mqttClient) {
812
- ctx.mqttClient.unsubscribe("/webrtc");
813
- ctx.mqttClient.unsubscribe("/rtc_multi");
814
- ctx.mqttClient.unsubscribe("/onevc");
815
- ctx.mqttClient.publish("/browser_close", "{}");
816
- ctx.mqttClient.end(false, function (...data) {
817
- callback(data);
818
- ctx.mqttClient = undefined;
819
- });
820
- }
821
- }
822
-
823
- async stopListeningAsync() {
824
- return new Promise((resolve) => {
825
- this.stopListening(resolve);
826
- });
827
- }
828
- }
829
-
830
- const msgEmitter = new MessageEmitter();
831
- globalCallback = (callback || function (error, message) {
832
- if (error) {
833
- return msgEmitter.emit("error", error);
834
- }
835
- msgEmitter.emit("message", message);
836
- });
837
-
838
- // Reset some stuff
839
- if (!ctx.firstListen)
840
- ctx.lastSeqId = null;
841
- ctx.syncToken = undefined;
842
- ctx.t_mqttCalled = false;
843
-
844
- if (!ctx.firstListen || !ctx.lastSeqId) {
845
- getSeqId(defaultFuncs, api, ctx, globalCallback);
846
- } else {
847
- listenMqtt(defaultFuncs, api, ctx, globalCallback);
848
- }
849
-
850
- api.stopListening = msgEmitter.stopListening;
851
- api.stopListeningAsync = msgEmitter.stopListeningAsync;
852
- return msgEmitter;
853
- };
854
- };