bb-fca 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/LICENSE-MIT +21 -0
  2. package/README.md +0 -0
  3. package/dist/core/client.js +50 -0
  4. package/dist/core/client.js.map +1 -0
  5. package/dist/core/models/buildAPI.js +103 -0
  6. package/dist/core/models/buildAPI.js.map +1 -0
  7. package/dist/core/models/loginHelper.js +209 -0
  8. package/dist/core/models/loginHelper.js.map +1 -0
  9. package/dist/core/models/setOptions.js +47 -0
  10. package/dist/core/models/setOptions.js.map +1 -0
  11. package/dist/deltas/apis/create.js +30 -0
  12. package/dist/deltas/apis/create.js.map +1 -0
  13. package/dist/deltas/apis/extra/addExternalModule.js +23 -0
  14. package/dist/deltas/apis/extra/addExternalModule.js.map +1 -0
  15. package/dist/deltas/apis/extra/getAccess.js +110 -0
  16. package/dist/deltas/apis/extra/getAccess.js.map +1 -0
  17. package/dist/deltas/apis/http/httpGet.js +57 -0
  18. package/dist/deltas/apis/http/httpGet.js.map +1 -0
  19. package/dist/deltas/apis/http/httpPost.js +57 -0
  20. package/dist/deltas/apis/http/httpPost.js.map +1 -0
  21. package/dist/deltas/apis/http/httpPostFormData.js +61 -0
  22. package/dist/deltas/apis/http/httpPostFormData.js.map +1 -0
  23. package/dist/deltas/apis/login/GetBotInfo.js +83 -0
  24. package/dist/deltas/apis/login/GetBotInfo.js.map +1 -0
  25. package/dist/deltas/apis/login/getBotInitialData.js +46 -0
  26. package/dist/deltas/apis/login/getBotInitialData.js.map +1 -0
  27. package/dist/deltas/apis/login/logout.js +54 -0
  28. package/dist/deltas/apis/login/logout.js.map +1 -0
  29. package/dist/deltas/apis/messaging/editMessage.js +64 -0
  30. package/dist/deltas/apis/messaging/editMessage.js.map +1 -0
  31. package/dist/deltas/apis/messaging/emoji.js +120 -0
  32. package/dist/deltas/apis/messaging/emoji.js.map +1 -0
  33. package/dist/deltas/apis/messaging/gcmember.js +164 -0
  34. package/dist/deltas/apis/messaging/gcmember.js.map +1 -0
  35. package/dist/deltas/apis/messaging/gcname.js +119 -0
  36. package/dist/deltas/apis/messaging/gcname.js.map +1 -0
  37. package/dist/deltas/apis/messaging/gcrule.js +144 -0
  38. package/dist/deltas/apis/messaging/gcrule.js.map +1 -0
  39. package/dist/deltas/apis/messaging/markAsDelivered.js +44 -0
  40. package/dist/deltas/apis/messaging/markAsDelivered.js.map +1 -0
  41. package/dist/deltas/apis/messaging/markAsRead.js +84 -0
  42. package/dist/deltas/apis/messaging/markAsRead.js.map +1 -0
  43. package/dist/deltas/apis/messaging/markAsReadAll.js +34 -0
  44. package/dist/deltas/apis/messaging/markAsReadAll.js.map +1 -0
  45. package/dist/deltas/apis/messaging/markAsSeen.js +64 -0
  46. package/dist/deltas/apis/messaging/markAsSeen.js.map +1 -0
  47. package/dist/deltas/apis/messaging/nickname.js +129 -0
  48. package/dist/deltas/apis/messaging/nickname.js.map +1 -0
  49. package/dist/deltas/apis/messaging/notes.js +156 -0
  50. package/dist/deltas/apis/messaging/notes.js.map +1 -0
  51. package/dist/deltas/apis/messaging/resolvePhotoUrl.js +55 -0
  52. package/dist/deltas/apis/messaging/resolvePhotoUrl.js.map +1 -0
  53. package/dist/deltas/apis/messaging/sendMessage.js +239 -0
  54. package/dist/deltas/apis/messaging/sendMessage.js.map +1 -0
  55. package/dist/deltas/apis/messaging/sendTypingIndicator.js +41 -0
  56. package/dist/deltas/apis/messaging/sendTypingIndicator.js.map +1 -0
  57. package/dist/deltas/apis/messaging/setMessageReaction.js +30 -0
  58. package/dist/deltas/apis/messaging/setMessageReaction.js.map +1 -0
  59. package/dist/deltas/apis/messaging/shareContact.js +59 -0
  60. package/dist/deltas/apis/messaging/shareContact.js.map +1 -0
  61. package/dist/deltas/apis/messaging/stickers.js +246 -0
  62. package/dist/deltas/apis/messaging/stickers.js.map +1 -0
  63. package/dist/deltas/apis/messaging/theme.js +227 -0
  64. package/dist/deltas/apis/messaging/theme.js.map +1 -0
  65. package/dist/deltas/apis/messaging/unsendMessage.js +19 -0
  66. package/dist/deltas/apis/messaging/unsendMessage.js.map +1 -0
  67. package/dist/deltas/apis/mqtt/deltas/value.js +193 -0
  68. package/dist/deltas/apis/mqtt/deltas/value.js.map +1 -0
  69. package/dist/deltas/apis/mqtt/listenMqtt.js +306 -0
  70. package/dist/deltas/apis/mqtt/listenMqtt.js.map +1 -0
  71. package/dist/deltas/apis/mqtt/listenSpeed.js +166 -0
  72. package/dist/deltas/apis/mqtt/listenSpeed.js.map +1 -0
  73. package/dist/deltas/apis/mqtt/pinMessage.js +166 -0
  74. package/dist/deltas/apis/mqtt/pinMessage.js.map +1 -0
  75. package/dist/deltas/apis/mqtt/realtime.js +160 -0
  76. package/dist/deltas/apis/mqtt/realtime.js.map +1 -0
  77. package/dist/deltas/apis/mqtt/sendMessageMqtt.js +184 -0
  78. package/dist/deltas/apis/mqtt/sendMessageMqtt.js.map +1 -0
  79. package/dist/deltas/apis/mqtt/setMessageReactionMqtt.js +57 -0
  80. package/dist/deltas/apis/mqtt/setMessageReactionMqtt.js.map +1 -0
  81. package/dist/deltas/apis/posting/comment.js +195 -0
  82. package/dist/deltas/apis/posting/comment.js.map +1 -0
  83. package/dist/deltas/apis/posting/follow.js +82 -0
  84. package/dist/deltas/apis/posting/follow.js.map +1 -0
  85. package/dist/deltas/apis/posting/friend.js +253 -0
  86. package/dist/deltas/apis/posting/friend.js.map +1 -0
  87. package/dist/deltas/apis/posting/post.js +551 -0
  88. package/dist/deltas/apis/posting/post.js.map +1 -0
  89. package/dist/deltas/apis/posting/share.js +59 -0
  90. package/dist/deltas/apis/posting/share.js.map +1 -0
  91. package/dist/deltas/apis/posting/story.js +176 -0
  92. package/dist/deltas/apis/posting/story.js.map +1 -0
  93. package/dist/deltas/apis/threads/getThreadHistory.js +233 -0
  94. package/dist/deltas/apis/threads/getThreadHistory.js.map +1 -0
  95. package/dist/deltas/apis/threads/getThreadInfo.js +197 -0
  96. package/dist/deltas/apis/threads/getThreadInfo.js.map +1 -0
  97. package/dist/deltas/apis/threads/getThreadList.js +201 -0
  98. package/dist/deltas/apis/threads/getThreadList.js.map +1 -0
  99. package/dist/deltas/apis/users/getUserInfo.js +254 -0
  100. package/dist/deltas/apis/users/getUserInfo.js.map +1 -0
  101. package/dist/index.d.ts +696 -0
  102. package/dist/types/core/client.d.ts +2 -0
  103. package/dist/types/core/models/buildAPI.d.ts +13 -0
  104. package/dist/types/core/models/loginHelper.d.ts +15 -0
  105. package/dist/types/core/models/setOptions.d.ts +2 -0
  106. package/dist/types/deltas/apis/create.d.ts +23 -0
  107. package/dist/types/deltas/apis/extra/addExternalModule.d.ts +1 -0
  108. package/dist/types/deltas/apis/extra/getAccess.d.ts +1 -0
  109. package/dist/types/deltas/apis/http/httpGet.d.ts +1 -0
  110. package/dist/types/deltas/apis/http/httpPost.d.ts +1 -0
  111. package/dist/types/deltas/apis/http/httpPostFormData.d.ts +1 -0
  112. package/dist/types/deltas/apis/login/GetBotInfo.d.ts +32 -0
  113. package/dist/types/deltas/apis/login/getBotInitialData.d.ts +1 -0
  114. package/dist/types/deltas/apis/login/logout.d.ts +7 -0
  115. package/dist/types/deltas/apis/messaging/editMessage.d.ts +7 -0
  116. package/dist/types/deltas/apis/messaging/emoji.d.ts +1 -0
  117. package/dist/types/deltas/apis/messaging/gcmember.d.ts +1 -0
  118. package/dist/types/deltas/apis/messaging/gcname.d.ts +1 -0
  119. package/dist/types/deltas/apis/messaging/gcrule.d.ts +1 -0
  120. package/dist/types/deltas/apis/messaging/markAsDelivered.d.ts +7 -0
  121. package/dist/types/deltas/apis/messaging/markAsRead.d.ts +6 -0
  122. package/dist/types/deltas/apis/messaging/markAsReadAll.d.ts +7 -0
  123. package/dist/types/deltas/apis/messaging/markAsSeen.d.ts +6 -0
  124. package/dist/types/deltas/apis/messaging/nickname.d.ts +1 -0
  125. package/dist/types/deltas/apis/messaging/notes.d.ts +14 -0
  126. package/dist/types/deltas/apis/messaging/resolvePhotoUrl.d.ts +9 -0
  127. package/dist/types/deltas/apis/messaging/sendMessage.d.ts +1 -0
  128. package/dist/types/deltas/apis/messaging/sendTypingIndicator.d.ts +6 -0
  129. package/dist/types/deltas/apis/messaging/setMessageReaction.d.ts +1 -0
  130. package/dist/types/deltas/apis/messaging/shareContact.d.ts +8 -0
  131. package/dist/types/deltas/apis/messaging/stickers.d.ts +48 -0
  132. package/dist/types/deltas/apis/messaging/theme.d.ts +1 -0
  133. package/dist/types/deltas/apis/messaging/unsendMessage.d.ts +1 -0
  134. package/dist/types/deltas/apis/mqtt/deltas/value.d.ts +2 -0
  135. package/dist/types/deltas/apis/mqtt/listenMqtt.d.ts +20 -0
  136. package/dist/types/deltas/apis/mqtt/listenSpeed.d.ts +21 -0
  137. package/dist/types/deltas/apis/mqtt/pinMessage.d.ts +1 -0
  138. package/dist/types/deltas/apis/mqtt/realtime.d.ts +1 -0
  139. package/dist/types/deltas/apis/mqtt/sendMessageMqtt.d.ts +1 -0
  140. package/dist/types/deltas/apis/mqtt/setMessageReactionMqtt.d.ts +1 -0
  141. package/dist/types/deltas/apis/posting/comment.d.ts +9 -0
  142. package/dist/types/deltas/apis/posting/follow.d.ts +14 -0
  143. package/dist/types/deltas/apis/posting/friend.d.ts +61 -0
  144. package/dist/types/deltas/apis/posting/post.d.ts +20 -0
  145. package/dist/types/deltas/apis/posting/share.d.ts +1 -0
  146. package/dist/types/deltas/apis/posting/story.d.ts +39 -0
  147. package/dist/types/deltas/apis/threads/getThreadHistory.d.ts +7 -0
  148. package/dist/types/deltas/apis/threads/getThreadInfo.d.ts +7 -0
  149. package/dist/types/deltas/apis/threads/getThreadList.d.ts +7 -0
  150. package/dist/types/deltas/apis/users/getUserInfo.d.ts +1 -0
  151. package/dist/types/utils/axios.d.ts +7 -0
  152. package/dist/types/utils/clients.d.ts +4 -0
  153. package/dist/types/utils/constants.d.ts +24 -0
  154. package/dist/types/utils/formatters/data/formatAttachment.d.ts +2 -0
  155. package/dist/types/utils/formatters/data/formatDelta.d.ts +4 -0
  156. package/dist/types/utils/formatters/index.d.ts +17 -0
  157. package/dist/types/utils/formatters/value/formatCookie.d.ts +8 -0
  158. package/dist/types/utils/formatters/value/formatDate.d.ts +6 -0
  159. package/dist/types/utils/formatters/value/formatID.d.ts +7 -0
  160. package/dist/types/utils/headers.d.ts +2 -0
  161. package/dist/types/utils/index.d.ts +75 -0
  162. package/dist/types/utils/user-agents.d.ts +9 -0
  163. package/dist/utils/axios.js +148 -0
  164. package/dist/utils/axios.js.map +1 -0
  165. package/dist/utils/clients.js +120 -0
  166. package/dist/utils/clients.js.map +1 -0
  167. package/dist/utils/constants.js +249 -0
  168. package/dist/utils/constants.js.map +1 -0
  169. package/dist/utils/formatters/data/formatAttachment.js +61 -0
  170. package/dist/utils/formatters/data/formatAttachment.js.map +1 -0
  171. package/dist/utils/formatters/data/formatDelta.js +67 -0
  172. package/dist/utils/formatters/data/formatDelta.js.map +1 -0
  173. package/dist/utils/formatters/index.js +132 -0
  174. package/dist/utils/formatters/index.js.map +1 -0
  175. package/dist/utils/formatters/value/formatCookie.js +13 -0
  176. package/dist/utils/formatters/value/formatCookie.js.map +1 -0
  177. package/dist/utils/formatters/value/formatDate.js +33 -0
  178. package/dist/utils/formatters/value/formatDate.js.map +1 -0
  179. package/dist/utils/formatters/value/formatID.js +17 -0
  180. package/dist/utils/formatters/value/formatID.js.map +1 -0
  181. package/dist/utils/headers.js +61 -0
  182. package/dist/utils/headers.js.map +1 -0
  183. package/dist/utils/index.js +105 -0
  184. package/dist/utils/index.js.map +1 -0
  185. package/dist/utils/user-agents.js +41 -0
  186. package/dist/utils/user-agents.js.map +1 -0
  187. package/examples/post.example.js +149 -0
  188. package/module/index.js +5 -0
  189. package/package.json +56 -0
  190. package/src/core/client.ts +66 -0
  191. package/src/core/models/buildAPI.ts +131 -0
  192. package/src/core/models/loginHelper.ts +226 -0
  193. package/src/core/models/setOptions.ts +48 -0
  194. package/src/deltas/apis/create.ts +28 -0
  195. package/src/deltas/apis/extra/addExternalModule.ts +23 -0
  196. package/src/deltas/apis/extra/getAccess.ts +141 -0
  197. package/src/deltas/apis/http/httpGet.ts +61 -0
  198. package/src/deltas/apis/http/httpPost.ts +61 -0
  199. package/src/deltas/apis/http/httpPostFormData.ts +67 -0
  200. package/src/deltas/apis/login/GetBotInfo.ts +88 -0
  201. package/src/deltas/apis/login/getBotInitialData.ts +42 -0
  202. package/src/deltas/apis/login/logout.ts +62 -0
  203. package/src/deltas/apis/messaging/editMessage.ts +69 -0
  204. package/src/deltas/apis/messaging/emoji.ts +135 -0
  205. package/src/deltas/apis/messaging/gcmember.ts +175 -0
  206. package/src/deltas/apis/messaging/gcname.ts +136 -0
  207. package/src/deltas/apis/messaging/gcrule.ts +152 -0
  208. package/src/deltas/apis/messaging/markAsDelivered.ts +47 -0
  209. package/src/deltas/apis/messaging/markAsRead.ts +94 -0
  210. package/src/deltas/apis/messaging/markAsReadAll.ts +38 -0
  211. package/src/deltas/apis/messaging/markAsSeen.ts +69 -0
  212. package/src/deltas/apis/messaging/nickname.ts +153 -0
  213. package/src/deltas/apis/messaging/notes.ts +165 -0
  214. package/src/deltas/apis/messaging/resolvePhotoUrl.ts +56 -0
  215. package/src/deltas/apis/messaging/sendMessage.ts +286 -0
  216. package/src/deltas/apis/messaging/sendTypingIndicator.ts +48 -0
  217. package/src/deltas/apis/messaging/setMessageReaction.ts +25 -0
  218. package/src/deltas/apis/messaging/shareContact.ts +63 -0
  219. package/src/deltas/apis/messaging/stickers.ts +255 -0
  220. package/src/deltas/apis/messaging/theme.ts +280 -0
  221. package/src/deltas/apis/messaging/unsendMessage.ts +15 -0
  222. package/src/deltas/apis/mqtt/deltas/value.ts +224 -0
  223. package/src/deltas/apis/mqtt/listenMqtt.ts +332 -0
  224. package/src/deltas/apis/mqtt/listenSpeed.ts +179 -0
  225. package/src/deltas/apis/mqtt/pinMessage.ts +135 -0
  226. package/src/deltas/apis/mqtt/realtime.ts +169 -0
  227. package/src/deltas/apis/mqtt/sendMessageMqtt.ts +206 -0
  228. package/src/deltas/apis/mqtt/setMessageReactionMqtt.ts +61 -0
  229. package/src/deltas/apis/posting/comment.ts +205 -0
  230. package/src/deltas/apis/posting/follow.ts +79 -0
  231. package/src/deltas/apis/posting/friend.ts +241 -0
  232. package/src/deltas/apis/posting/post.ts +599 -0
  233. package/src/deltas/apis/posting/share.ts +60 -0
  234. package/src/deltas/apis/posting/story.ts +207 -0
  235. package/src/deltas/apis/threads/getThreadHistory.ts +237 -0
  236. package/src/deltas/apis/threads/getThreadInfo.ts +210 -0
  237. package/src/deltas/apis/threads/getThreadList.ts +224 -0
  238. package/src/deltas/apis/users/getUserInfo.ts +244 -0
  239. package/src/types/index.d.ts +696 -0
  240. package/src/utils/axios.ts +178 -0
  241. package/src/utils/clients.ts +125 -0
  242. package/src/utils/constants.ts +281 -0
  243. package/src/utils/formatters/data/formatAttachment.ts +58 -0
  244. package/src/utils/formatters/data/formatDelta.ts +45 -0
  245. package/src/utils/formatters/index.ts +82 -0
  246. package/src/utils/formatters/value/formatCookie.ts +13 -0
  247. package/src/utils/formatters/value/formatDate.ts +34 -0
  248. package/src/utils/formatters/value/formatID.ts +14 -0
  249. package/src/utils/formatters.old.ts +1049 -0
  250. package/src/utils/headers.ts +65 -0
  251. package/src/utils/index.ts +65 -0
  252. package/src/utils/user-agents.ts +49 -0
  253. package/tsconfig.json +37 -0
@@ -0,0 +1,280 @@
1
+ import utils = require('../../../utils');
2
+
3
+ export default function(defaultFuncs: any, api: any, ctx: any) {
4
+ /**
5
+ * Made by Choru Official
6
+ * Mqtt & Graph
7
+ * Manages or sets the custom theme for a Facebook thread.
8
+ * If only a theme name/keyword is provided, it attempts to find and set the matching theme.
9
+ * If "list" is provided as the themeName, it lists available themes.
10
+ *
11
+ * @param {string} themeName The name or partial name of the theme (case-insensitive), or "list" to list themes.
12
+ * @param {string} threadID The ID of the thread.
13
+ * @param {Function} [callback] Optional callback function.
14
+ * @param {string} [initiatorID] The ID of the user who initiated the theme change (e.g., from event.senderID).
15
+ * @returns {Promise<void|Array<object>|object>} A promise that resolves on success (for setting theme, with a detailed event object), or with an array of themes (for listing), or rejects on error.
16
+ */
17
+ return async function theme(themeName, threadID, callback, initiatorID) {
18
+ let _callback;
19
+ let _initiatorID;
20
+
21
+ let _resolveFunc;
22
+ let _rejectFunc;
23
+ const finalReturnPromise = new Promise<any>((resolve, reject) => {
24
+ _resolveFunc = resolve;
25
+ _rejectFunc = reject;
26
+ });
27
+
28
+ if (
29
+ utils.getType(callback) === 'Function' ||
30
+ utils.getType(callback) === 'AsyncFunction'
31
+ ) {
32
+ _callback = callback;
33
+ _initiatorID = initiatorID;
34
+ } else if (
35
+ utils.getType(threadID) === 'Function' ||
36
+ utils.getType(threadID) === 'AsyncFunction'
37
+ ) {
38
+ _callback = threadID;
39
+ threadID = null;
40
+ _initiatorID = callback;
41
+ } else if (utils.getType(callback) === 'string') {
42
+ _initiatorID = callback;
43
+ _callback = undefined;
44
+ } else {
45
+ _callback = undefined;
46
+ _initiatorID = undefined;
47
+ }
48
+
49
+ if (!_callback) {
50
+ _callback = function(_err, _data) {
51
+ if (_err) _rejectFunc(_err);
52
+ else _resolveFunc(_data);
53
+ };
54
+ }
55
+
56
+ _initiatorID = _initiatorID || ctx.userID;
57
+
58
+ threadID = threadID || ctx.threadID;
59
+
60
+ if (!threadID) {
61
+ return _callback(new Error('threadID is required to manage themes.'));
62
+ }
63
+ if (!themeName) {
64
+ return _callback(new Error("themeName (or 'list') is required."));
65
+ }
66
+
67
+ if (!ctx.mqttClient) {
68
+ return _callback(new Error('Not connected to MQTT'));
69
+ }
70
+
71
+ const fetchThemes = async () => {
72
+ const form = {
73
+ fb_api_caller_class: 'RelayModern',
74
+ fb_api_req_friendly_name: 'MWPThreadThemeQuery_AllThemesQuery',
75
+ variables: JSON.stringify({ version: 'default' }),
76
+ server_timestamps: true,
77
+ doc_id: '24474714052117636',
78
+ };
79
+
80
+ try {
81
+ const resData = await defaultFuncs
82
+ .post('https://www.facebook.com/api/graphql/', ctx.jar, form, null, {
83
+ 'x-fb-friendly-name': 'MWPThreadThemeQuery_AllThemesQuery',
84
+ 'x-fb-lsd': ctx.lsd,
85
+ referer: `https://www.facebook.com/messages/t/${threadID}`,
86
+ })
87
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
88
+
89
+ if (resData.errors) {
90
+ throw new Error(JSON.stringify(resData.errors));
91
+ }
92
+ if (!resData.data || !resData.data.messenger_thread_themes) {
93
+ throw new Error('Could not retrieve thread themes from response.');
94
+ }
95
+ return resData.data.messenger_thread_themes
96
+ .map((themeData) => {
97
+ if (!themeData || !themeData.id) return null;
98
+
99
+ return {
100
+ id: themeData.id,
101
+ name: themeData.accessibility_label,
102
+ description: themeData.description,
103
+ appColorMode: themeData.app_color_mode,
104
+ composerBackgroundColor: themeData.composer_background_color,
105
+ backgroundGradientColors: themeData.background_gradient_colors,
106
+ titleBarButtonTintColor: themeData.title_bar_button_tint_color,
107
+ inboundMessageGradientColors:
108
+ themeData.inbound_message_gradient_colors,
109
+ titleBarTextColor: themeData.title_bar_text_color,
110
+ composerTintColor: themeData.composer_tint_color,
111
+ titleBarAttributionColor: themeData.title_bar_attribution_color,
112
+ composerInputBackgroundColor:
113
+ themeData.composer_input_background_color,
114
+ hotLikeColor: themeData.hot_like_color,
115
+ backgroundImage: themeData.background_asset?.image?.uri,
116
+ messageTextColor: themeData.message_text_color,
117
+ inboundMessageTextColor: themeData.inbound_message_text_color,
118
+ primaryButtonBackgroundColor:
119
+ themeData.primary_button_background_color,
120
+ titleBarBackgroundColor: themeData.title_bar_background_color,
121
+ tertiaryTextColor: themeData.tertiary_text_color,
122
+ reactionPillBackgroundColor:
123
+ themeData.reaction_pill_background_color,
124
+ secondaryTextColor: themeData.secondary_text_color,
125
+ fallbackColor: themeData.fallback_color,
126
+ gradientColors: themeData.gradient_colors,
127
+ normalThemeId: themeData.normal_theme_id,
128
+ iconAsset: themeData.icon_asset?.image?.uri,
129
+ };
130
+ })
131
+ .filter(Boolean);
132
+ } catch (fetchErr) {
133
+ throw new Error(
134
+ `Failed to fetch theme list: ${fetchErr.message || fetchErr}`,
135
+ );
136
+ }
137
+ };
138
+
139
+ const setThreadTheme = async (
140
+ themeIDToSet,
141
+ actualThemeName,
142
+ initiatorID,
143
+ ) => {
144
+ let currentEpochId = parseInt(utils.generateOfflineThreadingID());
145
+
146
+ const createAndPublish = (label, queueName, payload) => {
147
+ currentEpochId = parseInt(utils.generateOfflineThreadingID());
148
+ ctx.wsReqNumber += 1;
149
+ ctx.wsTaskNumber += 1;
150
+
151
+ const request_id = ctx.wsReqNumber;
152
+
153
+ const queryPayload = {
154
+ thread_key: threadID.toString(),
155
+ theme_fbid: themeIDToSet.toString(),
156
+ sync_group: 1,
157
+ ...payload,
158
+ };
159
+
160
+ const query = {
161
+ failure_count: null,
162
+ label: label,
163
+ payload: JSON.stringify(queryPayload),
164
+ queue_name: queueName,
165
+ task_id: ctx.wsTaskNumber,
166
+ };
167
+
168
+ const context: any = {
169
+ app_id: ctx.appID,
170
+ payload: {
171
+ epoch_id: currentEpochId,
172
+ tasks: [query],
173
+ version_id: '24631415369801570',
174
+ },
175
+ request_id: request_id,
176
+ type: 3,
177
+ };
178
+ context.payload = JSON.stringify(context.payload);
179
+
180
+ return new Promise<void>((res, rej) => {
181
+ ctx.mqttClient.publish(
182
+ '/ls_req',
183
+ JSON.stringify(context),
184
+ { qos: 1, retain: false },
185
+ (err) => {
186
+ if (err) {
187
+ return rej(
188
+ new Error(
189
+ `MQTT publish failed for request ${request_id}: ${err.message}`,
190
+ ),
191
+ );
192
+ }
193
+ res();
194
+ },
195
+ );
196
+ });
197
+ };
198
+
199
+ try {
200
+ await Promise.all([
201
+ createAndPublish('1013', `ai_generated_theme`, {}),
202
+ createAndPublish('1037', `msgr_custom_thread_theme`, {}),
203
+ createAndPublish('1028', `thread_theme_writer`, {}),
204
+ createAndPublish('43', `thread_theme`, {
205
+ source: null,
206
+ payload: null,
207
+ }),
208
+ ]);
209
+
210
+ return {
211
+ type: 'thread_theme_update',
212
+ threadID: threadID,
213
+ themeID: themeIDToSet,
214
+ themeName: actualThemeName,
215
+ senderID: initiatorID,
216
+ BotID: ctx.userID,
217
+ timestamp: Date.now(),
218
+ };
219
+ } catch (publishErr) {
220
+ throw new Error(
221
+ `Failed to publish theme change MQTT messages: ${publishErr.message ||
222
+ publishErr}`,
223
+ );
224
+ }
225
+ };
226
+
227
+ try {
228
+ if (themeName.toLowerCase() === 'list') {
229
+ const themes = await fetchThemes();
230
+ _callback(null, themes);
231
+ } else {
232
+ const themes = await fetchThemes();
233
+ const normalizedThemeName = themeName.toLowerCase();
234
+
235
+ let matchedTheme = null;
236
+
237
+ if (!isNaN(normalizedThemeName)) {
238
+ matchedTheme = themes.find((t) => t.id === normalizedThemeName);
239
+ }
240
+ if (!matchedTheme) {
241
+ matchedTheme = themes.find(
242
+ (t) => t.name.toLowerCase() === normalizedThemeName,
243
+ );
244
+ }
245
+
246
+ if (!matchedTheme) {
247
+ matchedTheme = themes.find((t) =>
248
+ t.name.toLowerCase().includes(normalizedThemeName),
249
+ );
250
+ }
251
+
252
+ if (!matchedTheme) {
253
+ throw new Error(
254
+ `Theme "${themeName}" not found. Try '/theme list' for available themes.`,
255
+ );
256
+ }
257
+
258
+ const themeEventObject = await setThreadTheme(
259
+ matchedTheme.id,
260
+ matchedTheme.name,
261
+ _initiatorID,
262
+ );
263
+
264
+ _callback(null, themeEventObject);
265
+ }
266
+ } catch (err) {
267
+ const finalError =
268
+ err instanceof Error
269
+ ? err
270
+ : new Error(
271
+ err.message ||
272
+ err.error ||
273
+ 'An unknown error occurred during theme operation.',
274
+ );
275
+ _callback(finalError);
276
+ }
277
+
278
+ return finalReturnPromise;
279
+ };
280
+ }
@@ -0,0 +1,15 @@
1
+ import utils = require("../../../utils");
2
+ // @NethWs3Dev
3
+
4
+ export default function(defaultFuncs: any, api: any, ctx: any) {
5
+ return async (messageID) => {
6
+ const defData = await defaultFuncs.post("https://www.facebook.com/messaging/unsend_message/", ctx.jar, {
7
+ message_id: messageID
8
+ })
9
+ const resData = await utils.parseAndCheckLogin(ctx, defaultFuncs)(defData);
10
+ if (resData.error) {
11
+ throw new Error(resData);
12
+ }
13
+ return resData;
14
+ };
15
+ };
@@ -0,0 +1,224 @@
1
+ import utils = require('../../../../utils'); // Changed from @utils to relative path
2
+
3
+ function parseDelta(defaultFuncs, api, ctx, globalCallback, v) {
4
+ if (v.delta.class == 'NewMessage') {
5
+ if (ctx.globalOptions.pageID && ctx.globalOptions.pageID != v.queue) return;
6
+ (function resolveAttachmentUrl(i) {
7
+ if (v.delta.attachments && i == v.delta.attachments.length) {
8
+ var fmtMsg;
9
+ try {
10
+ fmtMsg = utils.formatDeltaMessage(v);
11
+ } catch (err) {
12
+ return globalCallback({
13
+ error: 'Problem parsing message object. Please open an issue at .',
14
+ detail: err,
15
+ res: v,
16
+ type: 'parse_error',
17
+ });
18
+ }
19
+ if (fmtMsg) {
20
+ if (ctx.globalOptions.autoMarkDelivery)
21
+ api.markAsDelivered(fmtMsg.threadID, fmtMsg.messageID);
22
+ }
23
+
24
+ if (!ctx.globalOptions.selfListen && fmtMsg.senderID === ctx.userID) {
25
+ return;
26
+ } else {
27
+ return globalCallback(null, fmtMsg);
28
+ }
29
+ } else {
30
+ if (
31
+ v.delta.attachments &&
32
+ v.delta.attachments[i].mercury.attach_type == 'photo'
33
+ ) {
34
+ api.resolvePhotoUrl(v.delta.attachments[i].fbid, (err, url) => {
35
+ if (!err) v.delta.attachments[i].mercury.metadata.url = url;
36
+ return resolveAttachmentUrl(i + 1);
37
+ });
38
+ } else return resolveAttachmentUrl(i + 1);
39
+
40
+ return resolveAttachmentUrl(i + 1);
41
+ }
42
+ })(0);
43
+ }
44
+
45
+ if (v.delta.class == 'ClientPayload') {
46
+ var clientPayload = utils.decodeClientPayload(v.delta.payload);
47
+ if (clientPayload && clientPayload.deltas) {
48
+ for (var i in clientPayload.deltas) {
49
+ var delta = clientPayload.deltas[i];
50
+ // console.log(delta);
51
+ if (delta.deltaMessageReaction && !!ctx.globalOptions.listenEvents) {
52
+ globalCallback(null, {
53
+ type: 'message_reaction',
54
+ threadID: (
55
+ delta.deltaMessageReaction.threadKey.threadFbId ||
56
+ delta.deltaMessageReaction.threadKey.otherUserFbId
57
+ ).toString(),
58
+ messageID: delta.deltaMessageReaction.messageId,
59
+ reaction: delta.deltaMessageReaction.reaction,
60
+ senderID: delta.deltaMessageReaction.senderId.toString(),
61
+ userID: delta.deltaMessageReaction.userId.toString(),
62
+ });
63
+ } else if (
64
+ delta.deltaRecallMessageData &&
65
+ !!ctx.globalOptions.listenEvents
66
+ ) {
67
+ globalCallback(null, {
68
+ type: 'message_unsend',
69
+ threadID: (
70
+ delta.deltaRecallMessageData.threadKey.threadFbId ||
71
+ delta.deltaRecallMessageData.threadKey.otherUserFbId
72
+ ).toString(),
73
+ messageID: delta.deltaRecallMessageData.messageID,
74
+ senderID: delta.deltaRecallMessageData.senderID.toString(),
75
+ deletionTimestamp: delta.deltaRecallMessageData.deletionTimestamp,
76
+ timestamp: delta.deltaRecallMessageData.timestamp,
77
+ });
78
+ } else if (delta.deltaMessageReply) {
79
+ var mdata = delta.deltaMessageReply.message?.data?.prng
80
+ ? JSON.parse(delta.deltaMessageReply.message.data.prng)
81
+ : [];
82
+ var mentions = {};
83
+ if (mdata) {
84
+ mdata.forEach(
85
+ (m) =>
86
+ (mentions[m.i] = (
87
+ delta.deltaMessageReply.message.body || ''
88
+ ).substring(m.o, m.o + m.l)),
89
+ );
90
+ }
91
+
92
+ var callbackToReturn: any = {
93
+ type: 'message_reply',
94
+ threadID: (
95
+ delta.deltaMessageReply.message.messageMetadata.threadKey
96
+ .threadFbId ||
97
+ delta.deltaMessageReply.message.messageMetadata.threadKey
98
+ .otherUserFbId
99
+ ).toString(),
100
+ messageID:
101
+ delta.deltaMessageReply.message.messageMetadata.messageId,
102
+ senderID: delta.deltaMessageReply.message.messageMetadata.actorFbId.toString(),
103
+ attachments: delta.deltaMessageReply.message.attachments.map(
104
+ (att) => {
105
+ try {
106
+ var mercury = JSON.parse(att.mercuryJSON);
107
+ Object.assign(att, mercury);
108
+ return utils._formatAttachment(att);
109
+ } catch (ex) {
110
+ return { ...att, error: ex, type: 'unknown' };
111
+ }
112
+ },
113
+ ),
114
+ body: delta.deltaMessageReply.message.body || '',
115
+ isGroup: !!delta.deltaMessageReply.message.messageMetadata.threadKey
116
+ .threadFbId,
117
+ mentions: mentions,
118
+ timestamp:
119
+ delta.deltaMessageReply.message.messageMetadata.timestamp,
120
+ participantIDs: (
121
+ delta.deltaMessageReply.message.participants || []
122
+ ).map((e) => e.toString()),
123
+ };
124
+
125
+ if (delta.deltaMessageReply.repliedToMessage) {
126
+ var rmentions = {};
127
+ var rmdata = delta.deltaMessageReply.repliedToMessage?.data?.prng
128
+ ? JSON.parse(delta.deltaMessageReply.repliedToMessage.data.prng)
129
+ : [];
130
+ if (rmdata) {
131
+ rmdata.forEach(
132
+ (m) =>
133
+ (rmentions[m.i] = (
134
+ delta.deltaMessageReply.repliedToMessage.body || ''
135
+ ).substring(m.o, m.o + m.l)),
136
+ );
137
+ }
138
+
139
+ callbackToReturn.messageReply = {
140
+ threadID: (
141
+ delta.deltaMessageReply.repliedToMessage.messageMetadata
142
+ .threadKey.threadFbId ||
143
+ delta.deltaMessageReply.repliedToMessage.messageMetadata
144
+ .threadKey.otherUserFbId
145
+ ).toString(),
146
+ messageID:
147
+ delta.deltaMessageReply.repliedToMessage.messageMetadata
148
+ .messageId,
149
+ senderID: delta.deltaMessageReply.repliedToMessage.messageMetadata.actorFbId.toString(),
150
+ attachments: delta.deltaMessageReply.repliedToMessage.attachments.map(
151
+ (att) => {
152
+ try {
153
+ var mercury = JSON.parse(att.mercuryJSON);
154
+ Object.assign(att, mercury);
155
+ return utils._formatAttachment(att);
156
+ } catch (ex) {
157
+ return { ...att, error: ex, type: 'unknown' };
158
+ }
159
+ },
160
+ ),
161
+ body: delta.deltaMessageReply.repliedToMessage.body || '',
162
+ isGroup: !!delta.deltaMessageReply.repliedToMessage
163
+ .messageMetadata.threadKey.threadFbId,
164
+ mentions: rmentions,
165
+ timestamp:
166
+ delta.deltaMessageReply.repliedToMessage.messageMetadata
167
+ .timestamp,
168
+ participantIDs: (
169
+ delta.deltaMessageReply.repliedToMessage.participants || []
170
+ ).map((e) => e.toString()),
171
+ };
172
+ }
173
+ if (ctx.globalOptions.autoMarkDelivery)
174
+ api.markAsDelivered(
175
+ callbackToReturn.threadID,
176
+ callbackToReturn.messageID,
177
+ );
178
+ if (
179
+ !ctx.globalOptions.selfListen &&
180
+ callbackToReturn.senderID === ctx.userID
181
+ )
182
+ return;
183
+ return globalCallback(null, callbackToReturn);
184
+ }
185
+ }
186
+ return;
187
+ }
188
+ }
189
+
190
+ if (v.delta.class !== 'NewMessage' && !ctx.globalOptions.listenEvents) return;
191
+ switch (v.delta.class) {
192
+ case 'ReadReceipt':
193
+ var fmtMsg;
194
+ try {
195
+ fmtMsg = utils.formatDeltaReadReceipt(v.delta);
196
+ } catch (err) {
197
+ return globalCallback({
198
+ error: 'Problem parsing read receipt',
199
+ detail: err,
200
+ res: v.delta,
201
+ type: 'parse_error',
202
+ });
203
+ }
204
+ return globalCallback(null, fmtMsg);
205
+ case 'AdminTextMessage':
206
+ case 'ThreadName':
207
+ case 'ParticipantsAddedToGroupThread':
208
+ case 'ParticipantLeftGroupThread':
209
+ var fmtEvent;
210
+ try {
211
+ fmtEvent = utils.formatDeltaEvent(v.delta);
212
+ } catch (err) {
213
+ return globalCallback({
214
+ error: 'Problem parsing event',
215
+ detail: err,
216
+ res: v.delta,
217
+ type: 'parse_error',
218
+ });
219
+ }
220
+ return globalCallback(null, fmtEvent);
221
+ }
222
+ }
223
+
224
+ export { parseDelta };