bb-fca 2.0.11 → 2.0.12

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.
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = sendPageMessage;
4
+ const utils = require("../../../utils");
5
+ // @NethWs3Dev
6
+ const allowedProperties = {
7
+ attachment: true,
8
+ url: true,
9
+ sticker: true,
10
+ emoji: true,
11
+ emojiSize: true,
12
+ body: true,
13
+ mentions: true,
14
+ location: true,
15
+ };
16
+ function sendPageMessage(defaultFuncs, api, ctx) {
17
+ async function uploadAttachment(attachments) {
18
+ const uploads = [];
19
+ for (let i = 0; i < attachments.length; i++) {
20
+ if (!utils.isReadableStream(attachments[i])) {
21
+ throw new Error('Attachment should be a readable stream and not ' +
22
+ utils.getType(attachments[i]) +
23
+ '.');
24
+ }
25
+ const oksir = await defaultFuncs
26
+ .postFormData('https://upload.facebook.com/ajax/mercury/upload.php', ctx.jar, {
27
+ upload_1024: attachments[i],
28
+ voice_clip: 'true',
29
+ }, {})
30
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
31
+ if (oksir.error) {
32
+ throw new Error(oksir.error);
33
+ }
34
+ uploads.push(oksir.payload.metadata[0]);
35
+ }
36
+ return uploads;
37
+ }
38
+ async function getUrl(url) {
39
+ const resData = await defaultFuncs
40
+ .post('https://www.facebook.com/message_share_attachment/fromURI/', ctx.jar, {
41
+ image_height: 960,
42
+ image_width: 960,
43
+ uri: url,
44
+ })
45
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
46
+ if (!resData || resData.error || !resData.payload) {
47
+ throw new Error(resData);
48
+ }
49
+ return resData.payload;
50
+ }
51
+ async function sendContent(form, threadID) {
52
+ const resData = await defaultFuncs
53
+ .post('https://www.facebook.com/messaging/send/', ctx.jar, form)
54
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
55
+ if (!resData) {
56
+ throw new Error('Send page message failed.');
57
+ }
58
+ if (resData.error) {
59
+ if (resData.error === 1545012) {
60
+ utils.warn('sendMessage', "Got error 1545012. This might mean that you're not part of the conversation " +
61
+ threadID);
62
+ }
63
+ throw new Error(JSON.stringify(resData));
64
+ }
65
+ // Facebook frequently changes this payload response format. Try to parse actions if available
66
+ if (resData.payload && resData.payload.actions) {
67
+ const messageInfo = resData.payload.actions.reduce((p, v) => {
68
+ return {
69
+ threadID: v.thread_fbid,
70
+ messageID: v.message_id,
71
+ timestamp: v.timestamp,
72
+ };
73
+ }, null);
74
+ return messageInfo;
75
+ }
76
+ return resData;
77
+ }
78
+ return async function sendPageMessageImpl(msg, receiverID, senderID, replyToMessage) {
79
+ const msgType = utils.getType(msg);
80
+ const receiverIDType = utils.getType(receiverID);
81
+ const senderIDType = utils.getType(senderID);
82
+ const messageIDType = utils.getType(replyToMessage);
83
+ if (senderIDType !== 'String' && senderIDType !== 'Number') {
84
+ throw new Error('senderID (Page ID) must be of type string or number.');
85
+ }
86
+ const pageID = String(senderID);
87
+ const threadID = String(receiverID);
88
+ if (msgType !== 'String' && msgType !== 'Object')
89
+ throw new Error('Message should be of type string or object and not ' + msgType + '.');
90
+ // Usually Page sends message to exactly 1 user (the customer)
91
+ if (receiverIDType !== 'Number' && receiverIDType !== 'String')
92
+ throw new Error('receiverID should be of type number, string and not ' +
93
+ receiverIDType +
94
+ '.');
95
+ if (replyToMessage && messageIDType !== 'String')
96
+ throw new Error('MessageID should be of type string and not ' + messageIDType + '.');
97
+ if (msgType === 'String') {
98
+ msg = { body: msg };
99
+ }
100
+ const disallowedProperties = Object.keys(msg).filter((prop) => !allowedProperties[prop]);
101
+ if (disallowedProperties.length > 0) {
102
+ throw new Error('Disallowed props: `' + disallowedProperties.join(', ') + '`');
103
+ }
104
+ const messageAndOTID = utils.generateOfflineThreadingID();
105
+ // Construct payload specifically based on Unified Inbox schema
106
+ const form = {
107
+ av: pageID,
108
+ client: 'mercury',
109
+ action_type: 'ma-type:user-generated-message',
110
+ ...(msg.body && { body: msg.body }),
111
+ ephemeral_ttl_mode: '0',
112
+ has_attachment: !!(msg.attachment || msg.url || msg.sticker),
113
+ message_id: messageAndOTID,
114
+ offline_threading_id: messageAndOTID,
115
+ other_user_fbid: threadID,
116
+ source: 'source:page_unified_inbox',
117
+ 'specific_to_list[0]': 'fbid:' + threadID,
118
+ 'specific_to_list[1]': 'fbid:' + pageID,
119
+ timestamp: Date.now(),
120
+ request_user_id: pageID,
121
+ // Default function post/method wraps _user, _a, fb_dtsg inherently if the environment config is valid.
122
+ ...(replyToMessage && {
123
+ replied_to_message_id: replyToMessage,
124
+ }),
125
+ };
126
+ if (msg.location) {
127
+ if (!msg.location.latitude || !msg.location.longitude)
128
+ throw new Error('location property needs both latitude and longitude');
129
+ form['location_attachment[coordinates][latitude]'] =
130
+ msg.location.latitude;
131
+ form['location_attachment[coordinates][longitude]'] =
132
+ msg.location.longitude;
133
+ form['location_attachment[is_current_location]'] = !!msg.location.current;
134
+ }
135
+ if (msg.sticker) {
136
+ form['sticker_id'] = msg.sticker;
137
+ }
138
+ if (msg.attachment) {
139
+ form.image_ids = [];
140
+ form.gif_ids = [];
141
+ form.file_ids = [];
142
+ form.video_ids = [];
143
+ form.audio_ids = [];
144
+ if (utils.getType(msg.attachment) !== 'Array') {
145
+ msg.attachment = [msg.attachment];
146
+ }
147
+ const files = await uploadAttachment(msg.attachment);
148
+ files.forEach((file) => {
149
+ const type = Object.keys(file)[0];
150
+ form['' + type + 's'].push(file[type]);
151
+ });
152
+ }
153
+ if (msg.url) {
154
+ form['shareable_attachment[share_type]'] = '100';
155
+ const params = await getUrl(msg.url);
156
+ form['shareable_attachment[share_params]'] = params;
157
+ }
158
+ if (msg.emoji) {
159
+ if (!msg.emojiSize) {
160
+ msg.emojiSize = 'medium';
161
+ }
162
+ if (msg.emojiSize !== 'small' &&
163
+ msg.emojiSize !== 'medium' &&
164
+ msg.emojiSize !== 'large') {
165
+ throw new Error('emojiSize property is invalid');
166
+ }
167
+ if (!form.body) {
168
+ throw new Error('body is not empty');
169
+ }
170
+ form.body = msg.emoji;
171
+ form['tags[0]'] = 'hot_emoji_size:' + msg.emojiSize;
172
+ }
173
+ if (msg.mentions) {
174
+ for (let i = 0; i < msg.mentions.length; i++) {
175
+ const mention = msg.mentions[i];
176
+ const tag = mention.tag;
177
+ if (typeof tag !== 'string') {
178
+ throw new Error('Mention tags must be strings.');
179
+ }
180
+ const offset = msg.body.indexOf(tag, mention.fromIndex || 0);
181
+ if (offset < 0)
182
+ utils.warn('handleMention', 'Mention for "' + tag + '" not found in message string.');
183
+ if (!mention.id)
184
+ utils.warn('handleMention', 'Mention id should be non-null.');
185
+ const id = mention.id || 0;
186
+ const emptyChar = '\u200E';
187
+ form['body'] = emptyChar + msg.body;
188
+ form['profile_xmd[' + i + '][offset]'] = offset + 1;
189
+ form['profile_xmd[' + i + '][length]'] = tag.length;
190
+ form['profile_xmd[' + i + '][id]'] = id;
191
+ form['profile_xmd[' + i + '][type]'] = 'p';
192
+ }
193
+ }
194
+ return await sendContent(form, threadID);
195
+ };
196
+ }
197
+ //# sourceMappingURL=sendPageMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendPageMessage.js","sourceRoot":"","sources":["../../../../src/deltas/apis/messaging/sendPageMessage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+ // @ChoruOfficial
2
+ 'use strict';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.default = default_1;
5
+ const utils = require("../../../utils");
6
+ /**
7
+ * Formats an event reminder object from a GraphQL response.
8
+ * @param {Object} reminder The raw event reminder object.
9
+ * @returns {Object} A formatted event reminder object.
10
+ */
11
+ function formatEventReminders(reminder) {
12
+ return {
13
+ reminderID: reminder.id,
14
+ eventCreatorID: reminder.lightweight_event_creator.id,
15
+ time: reminder.time,
16
+ eventType: reminder.lightweight_event_type.toLowerCase(),
17
+ locationName: reminder.location_name,
18
+ locationCoordinates: reminder.location_coordinates,
19
+ locationPage: reminder.location_page,
20
+ eventStatus: reminder.lightweight_event_status.toLowerCase(),
21
+ note: reminder.note,
22
+ repeatMode: reminder.repeat_mode.toLowerCase(),
23
+ eventTitle: reminder.event_title,
24
+ triggerMessage: reminder.trigger_message,
25
+ secondsToNotifyBefore: reminder.seconds_to_notify_before,
26
+ allowsRsvp: reminder.allows_rsvp,
27
+ relatedEvent: reminder.related_event,
28
+ members: reminder.event_reminder_members.edges.map(function (member) {
29
+ return {
30
+ memberID: member.node.id,
31
+ state: member.guest_list_state.toLowerCase(),
32
+ };
33
+ }),
34
+ };
35
+ }
36
+ /**
37
+ * Formats a thread object from a GraphQL response.
38
+ * @param {Object} messageThread The raw message_thread object from GraphQL.
39
+ * @returns {Object | null} A formatted thread object or null if data is invalid.
40
+ */
41
+ function formatThreadGraphQLResponse(messageThread) {
42
+ if (!messageThread) {
43
+ console.log('[getPageThreadList] messageThread is undefined!');
44
+ return null;
45
+ }
46
+ if (!messageThread.thread_key) {
47
+ console.log('[getPageThreadList] thread_key missing for thread:', messageThread.id);
48
+ return null;
49
+ }
50
+ const threadID = messageThread.thread_key.thread_fbid
51
+ ? messageThread.thread_key.thread_fbid
52
+ : messageThread.thread_key.other_user_id;
53
+ const lastM = messageThread.last_message;
54
+ const snippetID = lastM?.nodes?.[0]?.message_sender?.messaging_actor?.id || null;
55
+ const snippetText = lastM?.nodes?.[0]?.snippet || null;
56
+ const lastR = messageThread.last_read_receipt;
57
+ const lastReadTimestamp = lastR?.nodes?.[0]?.timestamp_precise || null;
58
+ return {
59
+ threadID: threadID,
60
+ threadName: messageThread.name,
61
+ participantIDs: messageThread.all_participants?.edges?.map((d) => d?.node?.messaging_actor?.id) || [],
62
+ userInfo: messageThread.all_participants?.edges?.map((d) => ({
63
+ id: d?.node?.messaging_actor?.id,
64
+ name: d?.node?.messaging_actor?.name,
65
+ firstName: d?.node?.messaging_actor?.short_name,
66
+ vanity: d?.node?.messaging_actor?.username,
67
+ url: d?.node?.messaging_actor?.url,
68
+ thumbSrc: d?.node?.messaging_actor?.big_image_src?.uri,
69
+ profileUrl: d?.node?.messaging_actor?.big_image_src?.uri,
70
+ gender: d?.node?.messaging_actor?.gender,
71
+ type: d?.node?.messaging_actor?.__typename,
72
+ isFriend: d?.node?.messaging_actor?.is_viewer_friend,
73
+ isBirthday: !!d?.node?.messaging_actor?.is_birthday,
74
+ })) || [],
75
+ unreadCount: messageThread.unread_count,
76
+ messageCount: messageThread.messages_count,
77
+ timestamp: messageThread.updated_time_precise,
78
+ muteUntil: messageThread.mute_until,
79
+ isGroup: messageThread.thread_type == 'GROUP',
80
+ isSubscribed: messageThread.is_viewer_subscribed,
81
+ isArchived: messageThread.has_viewer_archived,
82
+ folder: messageThread.folder,
83
+ cannotReplyReason: messageThread.cannot_reply_reason,
84
+ eventReminders: messageThread.event_reminders?.nodes
85
+ ? messageThread.event_reminders.nodes.map(formatEventReminders)
86
+ : null,
87
+ emoji: messageThread.customization_info?.emoji || null,
88
+ color: messageThread.customization_info?.outgoing_bubble_color
89
+ ? messageThread.customization_info.outgoing_bubble_color.slice(2)
90
+ : null,
91
+ threadTheme: messageThread.thread_theme,
92
+ nicknames: messageThread.customization_info?.participant_customizations
93
+ ? messageThread.customization_info.participant_customizations.reduce((res, val) => {
94
+ if (val.nickname)
95
+ res[val.participant_id] = val.nickname;
96
+ return res;
97
+ }, {})
98
+ : {},
99
+ adminIDs: messageThread.thread_admins?.map((a) => a.id) || [],
100
+ approvalMode: Boolean(messageThread.approval_mode),
101
+ approvalQueue: messageThread.group_approval_queue?.nodes?.map((a) => ({
102
+ inviterID: a.inviter.id,
103
+ requesterID: a.requester.id,
104
+ timestamp: a.request_timestamp,
105
+ request_source: a.request_source,
106
+ })) || [],
107
+ reactionsMuteMode: messageThread.reactions_mute_mode?.toLowerCase() || null,
108
+ mentionsMuteMode: messageThread.mentions_mute_mode?.toLowerCase() || null,
109
+ isPinProtected: messageThread.is_pin_protected,
110
+ relatedPageThread: messageThread.related_page_thread,
111
+ name: messageThread.name,
112
+ snippet: snippetText,
113
+ snippetSender: snippetID,
114
+ snippetAttachments: [],
115
+ serverTimestamp: messageThread.updated_time_precise,
116
+ imageSrc: messageThread.image?.uri || null,
117
+ isCanonicalUser: messageThread.is_canonical_neo_user,
118
+ isCanonical: messageThread.thread_type != 'GROUP',
119
+ recipientsLoadable: true,
120
+ hasEmailParticipant: false,
121
+ readOnly: false,
122
+ canReply: messageThread.cannot_reply_reason == null,
123
+ lastMessageTimestamp: messageThread.last_message?.timestamp_precise || null,
124
+ lastMessageType: 'message',
125
+ lastReadTimestamp: lastReadTimestamp,
126
+ threadType: messageThread.thread_type == 'GROUP' ? 2 : 1,
127
+ inviteLink: {
128
+ enable: messageThread.joinable_mode?.mode == 1,
129
+ link: messageThread.joinable_mode?.link || null,
130
+ },
131
+ };
132
+ }
133
+ /**
134
+ * @param {Object} defaultFuncs
135
+ * @param {Object} api
136
+ * @param {Object} ctx
137
+ * @returns {function(pageID: string, limit: number, tags: string[]): Promise<Array<Object>>}
138
+ */
139
+ function default_1(defaultFuncs, api, ctx) {
140
+ /**
141
+ * Retrieves a list of current message threads for a managed Page.
142
+ * @param {string} pageID - The ID of the page.
143
+ * @param {number} limit - The number of threads to retrieve.
144
+ * @param {string[]} tags - An array of tags to filter threads by (e.g., ["INBOX", "ARCHIVED"]).
145
+ * @returns {Promise<Object[]>} A promise that resolves with an array of formatted thread objects.
146
+ */
147
+ return async function getPageThreadList(pageID, limit = 20, tags = ['INBOX']) {
148
+ if (!pageID) {
149
+ throw new Error('getPageThreadList: pageID is required.');
150
+ }
151
+ if (utils.getType(limit) !== 'Number' ||
152
+ !Number.isInteger(limit) ||
153
+ limit <= 0) {
154
+ throw new Error('getPageThreadList: limit must be a positive integer.');
155
+ }
156
+ if (utils.getType(tags) === 'String') {
157
+ tags = [tags];
158
+ }
159
+ if (utils.getType(tags) !== 'Array') {
160
+ throw new Error('getPageThreadList: tags must be an array.');
161
+ }
162
+ const variables = {
163
+ limit: limit,
164
+ tags: tags,
165
+ isWorkUser: false,
166
+ includeDeliveryReceipts: true,
167
+ includeSeqID: false,
168
+ is_work_teamwork_not_putting_muted_in_unreads: false,
169
+ };
170
+ const form = {
171
+ av: pageID,
172
+ __user: ctx.userID,
173
+ __a: 1,
174
+ fb_dtsg: ctx.fb_dtsg,
175
+ jazoest: ctx.jazoest,
176
+ fb_api_caller_class: 'RelayModern',
177
+ fb_api_req_friendly_name: 'MessengerGraphQLThreadlistFetcher',
178
+ variables: JSON.stringify(variables),
179
+ doc_id: '3566388080113165',
180
+ };
181
+ try {
182
+ const resp = await utils
183
+ .post('https://www.facebook.com/api/graphql/', ctx.jar, form, ctx.globalOptions, ctx)
184
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
185
+ if (resp.errors) {
186
+ throw new Error(JSON.stringify(resp.errors));
187
+ }
188
+ let nodes = resp?.data?.viewer?.message_threads?.nodes || [];
189
+ const formatted = nodes
190
+ .map((node, index) => {
191
+ try {
192
+ return formatThreadGraphQLResponse(node);
193
+ }
194
+ catch (e) {
195
+ return null;
196
+ }
197
+ })
198
+ .filter(Boolean);
199
+ return formatted;
200
+ }
201
+ catch (err) {
202
+ utils.error('getPageThreadList', err);
203
+ throw err;
204
+ }
205
+ };
206
+ }
207
+ //# sourceMappingURL=getPageThreadList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPageThreadList.js","sourceRoot":"","sources":["../../../../src/deltas/apis/threads/getPageThreadList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = default_1;
7
+ // @ChoruOfficial
8
+ const utils = require("../../../utils");
9
+ const deepdash_1 = __importDefault(require("deepdash"));
10
+ const lodash_1 = __importDefault(require("lodash"));
11
+ (0, deepdash_1.default)(lodash_1.default);
12
+ function default_1(defaultFuncs, api, ctx) {
13
+ return function getManagedPages(callback) {
14
+ let cb;
15
+ const returnPromise = new Promise((resolve, reject) => {
16
+ cb = (err, resData) => {
17
+ if (callback)
18
+ callback(err, resData);
19
+ if (err)
20
+ return reject(err);
21
+ resolve(resData);
22
+ };
23
+ });
24
+ const fetchPages = async () => {
25
+ try {
26
+ const url = `https://www.facebook.com/pages/?category=your_pages&ref=bookmarks`;
27
+ const allJsonData = await utils.json(url, ctx.jar, null, ctx.globalOptions, ctx);
28
+ if (!allJsonData || allJsonData.length === 0) {
29
+ throw new Error(`Could not find JSON data for managed pages.`);
30
+ }
31
+ const results = [];
32
+ const deepFind = (obj) => {
33
+ if (obj && typeof obj === 'object') {
34
+ if (!Array.isArray(obj)) {
35
+ if (obj.profile_switcher_eligible_profiles &&
36
+ Array.isArray(obj.profile_switcher_eligible_profiles.nodes)) {
37
+ obj.profile_switcher_eligible_profiles.nodes.forEach((node) => {
38
+ const prof = node.profile;
39
+ if (prof && prof.id && prof.name) {
40
+ if (!results.find((r) => r.id === prof.id)) {
41
+ results.push(prof);
42
+ }
43
+ }
44
+ });
45
+ }
46
+ if (obj.first_profiles &&
47
+ Array.isArray(obj.first_profiles.nodes)) {
48
+ obj.first_profiles.nodes.forEach((node) => {
49
+ const prof = node.profile;
50
+ if (prof && prof.id && prof.name) {
51
+ if (!results.find((r) => r.id === prof.id)) {
52
+ results.push(prof);
53
+ }
54
+ }
55
+ });
56
+ }
57
+ Object.values(obj).forEach(deepFind);
58
+ }
59
+ else {
60
+ obj.forEach(deepFind);
61
+ }
62
+ }
63
+ };
64
+ deepFind(allJsonData);
65
+ // Return cleaned up objects
66
+ const cleanResults = results.map((prof) => ({
67
+ id: prof.id,
68
+ name: prof.name,
69
+ profilePicUrl: prof.profile_picture?.uri || null,
70
+ isProfilePlus: !!prof.is_profile_plus,
71
+ delegatePageId: prof.delegate_page_id || null,
72
+ }));
73
+ return cb(null, cleanResults);
74
+ }
75
+ catch (err) {
76
+ utils.error('getManagedPages', err);
77
+ return cb(err);
78
+ }
79
+ };
80
+ fetchPages();
81
+ return returnPromise;
82
+ };
83
+ }
84
+ //# sourceMappingURL=getManagedPages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getManagedPages.js","sourceRoot":"","sources":["../../../../src/deltas/apis/users/getManagedPages.ts"],"names":[],"mappings":";;;;;AAMA,4BAuFC;AA7FD,iBAAiB;AACjB,wCAAyC;AACzC,wDAAgC;AAChC,oDAAuB;AACvB,IAAA,kBAAQ,EAAC,gBAAC,CAAC,CAAC;AAEZ,mBAAwB,YAAiB,EAAE,GAAQ,EAAE,GAAQ;IAC3D,OAAO,SAAS,eAAe,CAAC,QAAyC;QACvE,IAAI,EAAO,CAAC;QACZ,MAAM,aAAa,GAAG,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,EAAE,GAAG,CAAC,GAAQ,EAAE,OAAY,EAAE,EAAE;gBAC9B,IAAI,QAAQ;oBAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACrC,IAAI,GAAG;oBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,mEAAmE,CAAC;gBAChF,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,IAAI,CAClC,GAAG,EACH,GAAG,CAAC,GAAG,EACP,IAAI,EACJ,GAAG,CAAC,aAAa,EACjB,GAAG,CACJ,CAAC;gBAEF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACjE,CAAC;gBAED,MAAM,OAAO,GAAU,EAAE,CAAC;gBAE1B,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,EAAE;oBAC5B,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;wBACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;4BACxB,IACE,GAAG,CAAC,kCAAkC;gCACtC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,KAAK,CAAC,EAC3D,CAAC;gCACD,GAAG,CAAC,kCAAkC,CAAC,KAAK,CAAC,OAAO,CAClD,CAAC,IAAS,EAAE,EAAE;oCACZ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;oCAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wCACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;4CAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wCACrB,CAAC;oCACH,CAAC;gCACH,CAAC,CACF,CAAC;4BACJ,CAAC;4BACD,IACE,GAAG,CAAC,cAAc;gCAClB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EACvC,CAAC;gCACD,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;oCAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;oCAC1B,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wCACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;4CAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wCACrB,CAAC;oCACH,CAAC;gCACH,CAAC,CAAC,CAAC;4BACL,CAAC;4BACD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACvC,CAAC;6BAAM,CAAC;4BACN,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACxB,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBAEF,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAEtB,4BAA4B;gBAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC1C,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,aAAa,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,IAAI;oBAChD,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe;oBACrC,cAAc,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI;iBAC9C,CAAC,CAAC,CAAC;gBAEJ,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;gBACpC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,UAAU,EAAE,CAAC;QACb,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -567,6 +567,14 @@ export interface API {
567
567
  callback?: Callback<ThreadInfo[]>,
568
568
  ): Promise<ThreadInfo[]>;
569
569
 
570
+ /** Get a list of threads for a managed Page. */
571
+ getPageThreadList(
572
+ pageID: string,
573
+ limit?: number,
574
+ tags?: string[],
575
+ callback?: Callback<ThreadInfo[]>,
576
+ ): Promise<ThreadInfo[]>;
577
+
570
578
  /** Get message history for a thread. */
571
579
  getThreadHistory(
572
580
  threadID: ThreadID,
@@ -0,0 +1 @@
1
+ export default function sendPageMessage(defaultFuncs: any, api: any, ctx: any): Function;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @param {Object} defaultFuncs
3
+ * @param {Object} api
4
+ * @param {Object} ctx
5
+ * @returns {function(pageID: string, limit: number, tags: string[]): Promise<Array<Object>>}
6
+ */
7
+ export default function (defaultFuncs: any, api: any, ctx: any): (pageID: string, limit?: number, tags?: string[]) => Promise<any>;
@@ -0,0 +1 @@
1
+ export default function (defaultFuncs: any, api: any, ctx: any): (callback?: (err: any, data?: any) => void) => Promise<any>;
@@ -22,7 +22,8 @@ function parseAndCheckLogin(ctx, http, retryCount = 0) {
22
22
  const retryTime = Math.floor(Math.random() * 5000);
23
23
  const url = data.request.uri.protocol + "//" + data.request.uri.hostname + data.request.uri.pathname;
24
24
  await delay(retryTime);
25
- if (data.request.headers["content-type"].split(";")[0] === "multipart/form-data") {
25
+ const contentType = data.request.headers && data.request.headers["content-type"];
26
+ if (contentType && contentType.split(";")[0] === "multipart/form-data") {
26
27
  const newData = await http.postFormData(url, ctx.jar, data.request.formData, data.request.qs, ctx.globalOptions, ctx);
27
28
  return await parseAndCheckLogin(ctx, http, retryCount)(newData);
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/utils/clients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/utils/clients.ts"],"names":[],"mappings":"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"}
@@ -32,14 +32,14 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ const cheerio = __importStar(require("cheerio"));
36
+ const util = __importStar(require("util"));
35
37
  const network = __importStar(require("./axios"));
36
- const headers = __importStar(require("./headers"));
37
38
  const clients = __importStar(require("./clients"));
38
39
  const constants = __importStar(require("./constants"));
39
40
  const formatters = __importStar(require("./formatters"));
41
+ const headers = __importStar(require("./headers"));
40
42
  const userAgents = __importStar(require("./user-agents"));
41
- const cheerio = __importStar(require("cheerio"));
42
- const util = __importStar(require("util"));
43
43
  async function json(url, jar, qs, options, ctx, customHeader) {
44
44
  try {
45
45
  const res = await network.get(url, jar, qs, options, ctx, customHeader);
@@ -77,7 +77,7 @@ function makeDefaults(html, userID, ctx) {
77
77
  if (!obj)
78
78
  return newObj;
79
79
  for (const prop in obj) {
80
- if (obj.hasOwnProperty(prop) && !newObj[prop]) {
80
+ if (obj.hasOwnProperty(prop)) {
81
81
  newObj[prop] = obj[prop];
82
82
  }
83
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bb-fca",
3
- "version": "2.0.11",
3
+ "version": "2.0.12",
4
4
  "description": "BB-FCA is a powerful and user-friendly Facebook Chat API wrapper for Node.js, designed to simplify the process of creating chatbots and automating interactions on Facebook Messenger. With BB-FCA, developers can easily send messages, manage conversations, and interact with the Facebook Messenger platform using a simple and intuitive API.",
5
5
  "main": "dist/core/client.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,246 @@
1
+ import utils = require('../../../utils');
2
+ // @NethWs3Dev
3
+
4
+ const allowedProperties = {
5
+ attachment: true,
6
+ url: true,
7
+ sticker: true,
8
+ emoji: true,
9
+ emojiSize: true,
10
+ body: true,
11
+ mentions: true,
12
+ location: true,
13
+ };
14
+
15
+ export default function sendPageMessage(
16
+ defaultFuncs: any,
17
+ api: any,
18
+ ctx: any,
19
+ ): Function {
20
+ async function uploadAttachment(attachments: any[]): Promise<any[]> {
21
+ const uploads: any[] = [];
22
+ for (let i = 0; i < attachments.length; i++) {
23
+ if (!utils.isReadableStream(attachments[i])) {
24
+ throw new Error(
25
+ 'Attachment should be a readable stream and not ' +
26
+ utils.getType(attachments[i]) +
27
+ '.',
28
+ );
29
+ }
30
+ const oksir = await defaultFuncs
31
+ .postFormData(
32
+ 'https://upload.facebook.com/ajax/mercury/upload.php',
33
+ ctx.jar,
34
+ {
35
+ upload_1024: attachments[i],
36
+ voice_clip: 'true',
37
+ },
38
+ {},
39
+ )
40
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
41
+ if (oksir.error) {
42
+ throw new Error(oksir.error);
43
+ }
44
+ uploads.push(oksir.payload.metadata[0]);
45
+ }
46
+ return uploads;
47
+ }
48
+
49
+ async function getUrl(url: string): Promise<any> {
50
+ const resData = await defaultFuncs
51
+ .post(
52
+ 'https://www.facebook.com/message_share_attachment/fromURI/',
53
+ ctx.jar,
54
+ {
55
+ image_height: 960,
56
+ image_width: 960,
57
+ uri: url,
58
+ },
59
+ )
60
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
61
+ if (!resData || resData.error || !resData.payload) {
62
+ throw new Error(resData);
63
+ }
64
+ return resData.payload;
65
+ }
66
+
67
+ async function sendContent(
68
+ form: Record<string, any>,
69
+ threadID: any,
70
+ ): Promise<any> {
71
+ const resData = await defaultFuncs
72
+ .post('https://www.facebook.com/messaging/send/', ctx.jar, form)
73
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
74
+
75
+ if (!resData) {
76
+ throw new Error('Send page message failed.');
77
+ }
78
+ if (resData.error) {
79
+ if (resData.error === 1545012) {
80
+ utils.warn(
81
+ 'sendMessage',
82
+ "Got error 1545012. This might mean that you're not part of the conversation " +
83
+ threadID,
84
+ );
85
+ }
86
+ throw new Error(JSON.stringify(resData));
87
+ }
88
+
89
+ // Facebook frequently changes this payload response format. Try to parse actions if available
90
+ if (resData.payload && resData.payload.actions) {
91
+ const messageInfo = resData.payload.actions.reduce((p: any, v: any) => {
92
+ return {
93
+ threadID: v.thread_fbid,
94
+ messageID: v.message_id,
95
+ timestamp: v.timestamp,
96
+ };
97
+ }, null);
98
+ return messageInfo;
99
+ }
100
+ return resData;
101
+ }
102
+
103
+ return async function sendPageMessageImpl(
104
+ msg: any,
105
+ receiverID: string | number,
106
+ senderID: string | number,
107
+ replyToMessage?: string,
108
+ ): Promise<any> {
109
+ const msgType = utils.getType(msg);
110
+ const receiverIDType = utils.getType(receiverID);
111
+ const senderIDType = utils.getType(senderID);
112
+ const messageIDType = utils.getType(replyToMessage);
113
+
114
+ if (senderIDType !== 'String' && senderIDType !== 'Number') {
115
+ throw new Error('senderID (Page ID) must be of type string or number.');
116
+ }
117
+ const pageID = String(senderID);
118
+ const threadID = String(receiverID);
119
+
120
+ if (msgType !== 'String' && msgType !== 'Object')
121
+ throw new Error(
122
+ 'Message should be of type string or object and not ' + msgType + '.',
123
+ );
124
+ // Usually Page sends message to exactly 1 user (the customer)
125
+ if (receiverIDType !== 'Number' && receiverIDType !== 'String')
126
+ throw new Error(
127
+ 'receiverID should be of type number, string and not ' +
128
+ receiverIDType +
129
+ '.',
130
+ );
131
+ if (replyToMessage && messageIDType !== 'String')
132
+ throw new Error(
133
+ 'MessageID should be of type string and not ' + messageIDType + '.',
134
+ );
135
+ if (msgType === 'String') {
136
+ msg = { body: msg };
137
+ }
138
+ const disallowedProperties = Object.keys(msg).filter(
139
+ (prop) => !(allowedProperties as any)[prop],
140
+ );
141
+ if (disallowedProperties.length > 0) {
142
+ throw new Error(
143
+ 'Disallowed props: `' + disallowedProperties.join(', ') + '`',
144
+ );
145
+ }
146
+
147
+ const messageAndOTID = utils.generateOfflineThreadingID();
148
+
149
+ // Construct payload specifically based on Unified Inbox schema
150
+ const form: Record<string, any> = {
151
+ av: pageID,
152
+ client: 'mercury',
153
+ action_type: 'ma-type:user-generated-message',
154
+ ...(msg.body && { body: msg.body }),
155
+ ephemeral_ttl_mode: '0',
156
+ has_attachment: !!(msg.attachment || msg.url || msg.sticker),
157
+ message_id: messageAndOTID,
158
+ offline_threading_id: messageAndOTID,
159
+ other_user_fbid: threadID,
160
+ source: 'source:page_unified_inbox',
161
+ 'specific_to_list[0]': 'fbid:' + threadID,
162
+ 'specific_to_list[1]': 'fbid:' + pageID,
163
+ timestamp: Date.now(),
164
+ request_user_id: pageID,
165
+ // Default function post/method wraps _user, _a, fb_dtsg inherently if the environment config is valid.
166
+ ...(replyToMessage && {
167
+ replied_to_message_id: replyToMessage,
168
+ }),
169
+ };
170
+
171
+ if (msg.location) {
172
+ if (!msg.location.latitude || !msg.location.longitude)
173
+ throw new Error('location property needs both latitude and longitude');
174
+ form['location_attachment[coordinates][latitude]'] =
175
+ msg.location.latitude;
176
+ form['location_attachment[coordinates][longitude]'] =
177
+ msg.location.longitude;
178
+ form['location_attachment[is_current_location]'] = !!msg.location.current;
179
+ }
180
+ if (msg.sticker) {
181
+ form['sticker_id'] = msg.sticker;
182
+ }
183
+ if (msg.attachment) {
184
+ form.image_ids = [];
185
+ form.gif_ids = [];
186
+ form.file_ids = [];
187
+ form.video_ids = [];
188
+ form.audio_ids = [];
189
+ if (utils.getType(msg.attachment) !== 'Array') {
190
+ msg.attachment = [msg.attachment];
191
+ }
192
+ const files = await uploadAttachment(msg.attachment);
193
+ files.forEach((file) => {
194
+ const type = Object.keys(file)[0];
195
+ form['' + type + 's'].push(file[type]);
196
+ });
197
+ }
198
+ if (msg.url) {
199
+ form['shareable_attachment[share_type]'] = '100';
200
+ const params = await getUrl(msg.url);
201
+ form['shareable_attachment[share_params]'] = params;
202
+ }
203
+ if (msg.emoji) {
204
+ if (!msg.emojiSize) {
205
+ msg.emojiSize = 'medium';
206
+ }
207
+ if (
208
+ msg.emojiSize !== 'small' &&
209
+ msg.emojiSize !== 'medium' &&
210
+ msg.emojiSize !== 'large'
211
+ ) {
212
+ throw new Error('emojiSize property is invalid');
213
+ }
214
+ if (!form.body) {
215
+ throw new Error('body is not empty');
216
+ }
217
+ form.body = msg.emoji;
218
+ form['tags[0]'] = 'hot_emoji_size:' + msg.emojiSize;
219
+ }
220
+ if (msg.mentions) {
221
+ for (let i = 0; i < msg.mentions.length; i++) {
222
+ const mention = msg.mentions[i];
223
+ const tag = mention.tag;
224
+ if (typeof tag !== 'string') {
225
+ throw new Error('Mention tags must be strings.');
226
+ }
227
+ const offset = msg.body.indexOf(tag, mention.fromIndex || 0);
228
+ if (offset < 0)
229
+ utils.warn(
230
+ 'handleMention',
231
+ 'Mention for "' + tag + '" not found in message string.',
232
+ );
233
+ if (!mention.id)
234
+ utils.warn('handleMention', 'Mention id should be non-null.');
235
+ const id = mention.id || 0;
236
+ const emptyChar = '\u200E';
237
+ form['body'] = emptyChar + msg.body;
238
+ form['profile_xmd[' + i + '][offset]'] = offset + 1;
239
+ form['profile_xmd[' + i + '][length]'] = tag.length;
240
+ form['profile_xmd[' + i + '][id]'] = id;
241
+ form['profile_xmd[' + i + '][type]'] = 'p';
242
+ }
243
+ }
244
+ return await sendContent(form, threadID);
245
+ };
246
+ }
@@ -0,0 +1,239 @@
1
+ // @ChoruOfficial
2
+ 'use strict';
3
+
4
+ import utils = require('../../../utils');
5
+
6
+ /**
7
+ * Formats an event reminder object from a GraphQL response.
8
+ * @param {Object} reminder The raw event reminder object.
9
+ * @returns {Object} A formatted event reminder object.
10
+ */
11
+ function formatEventReminders(reminder) {
12
+ return {
13
+ reminderID: reminder.id,
14
+ eventCreatorID: reminder.lightweight_event_creator.id,
15
+ time: reminder.time,
16
+ eventType: reminder.lightweight_event_type.toLowerCase(),
17
+ locationName: reminder.location_name,
18
+ locationCoordinates: reminder.location_coordinates,
19
+ locationPage: reminder.location_page,
20
+ eventStatus: reminder.lightweight_event_status.toLowerCase(),
21
+ note: reminder.note,
22
+ repeatMode: reminder.repeat_mode.toLowerCase(),
23
+ eventTitle: reminder.event_title,
24
+ triggerMessage: reminder.trigger_message,
25
+ secondsToNotifyBefore: reminder.seconds_to_notify_before,
26
+ allowsRsvp: reminder.allows_rsvp,
27
+ relatedEvent: reminder.related_event,
28
+ members: reminder.event_reminder_members.edges.map(function(member) {
29
+ return {
30
+ memberID: member.node.id,
31
+ state: member.guest_list_state.toLowerCase(),
32
+ };
33
+ }),
34
+ };
35
+ }
36
+
37
+ /**
38
+ * Formats a thread object from a GraphQL response.
39
+ * @param {Object} messageThread The raw message_thread object from GraphQL.
40
+ * @returns {Object | null} A formatted thread object or null if data is invalid.
41
+ */
42
+ function formatThreadGraphQLResponse(messageThread) {
43
+ if (!messageThread) {
44
+ console.log('[getPageThreadList] messageThread is undefined!');
45
+ return null;
46
+ }
47
+ if (!messageThread.thread_key) {
48
+ console.log(
49
+ '[getPageThreadList] thread_key missing for thread:',
50
+ messageThread.id,
51
+ );
52
+ return null;
53
+ }
54
+
55
+ const threadID = messageThread.thread_key.thread_fbid
56
+ ? messageThread.thread_key.thread_fbid
57
+ : messageThread.thread_key.other_user_id;
58
+
59
+ const lastM = messageThread.last_message;
60
+ const snippetID =
61
+ lastM?.nodes?.[0]?.message_sender?.messaging_actor?.id || null;
62
+ const snippetText = lastM?.nodes?.[0]?.snippet || null;
63
+ const lastR = messageThread.last_read_receipt;
64
+ const lastReadTimestamp = lastR?.nodes?.[0]?.timestamp_precise || null;
65
+
66
+ return {
67
+ threadID: threadID,
68
+ threadName: messageThread.name,
69
+ participantIDs:
70
+ messageThread.all_participants?.edges?.map(
71
+ (d) => d?.node?.messaging_actor?.id,
72
+ ) || [],
73
+ userInfo:
74
+ messageThread.all_participants?.edges?.map((d) => ({
75
+ id: d?.node?.messaging_actor?.id,
76
+ name: d?.node?.messaging_actor?.name,
77
+ firstName: d?.node?.messaging_actor?.short_name,
78
+ vanity: d?.node?.messaging_actor?.username,
79
+ url: d?.node?.messaging_actor?.url,
80
+ thumbSrc: d?.node?.messaging_actor?.big_image_src?.uri,
81
+ profileUrl: d?.node?.messaging_actor?.big_image_src?.uri,
82
+ gender: d?.node?.messaging_actor?.gender,
83
+ type: d?.node?.messaging_actor?.__typename,
84
+ isFriend: d?.node?.messaging_actor?.is_viewer_friend,
85
+ isBirthday: !!d?.node?.messaging_actor?.is_birthday,
86
+ })) || [],
87
+ unreadCount: messageThread.unread_count,
88
+ messageCount: messageThread.messages_count,
89
+ timestamp: messageThread.updated_time_precise,
90
+ muteUntil: messageThread.mute_until,
91
+ isGroup: messageThread.thread_type == 'GROUP',
92
+ isSubscribed: messageThread.is_viewer_subscribed,
93
+ isArchived: messageThread.has_viewer_archived,
94
+ folder: messageThread.folder,
95
+ cannotReplyReason: messageThread.cannot_reply_reason,
96
+ eventReminders: messageThread.event_reminders?.nodes
97
+ ? messageThread.event_reminders.nodes.map(formatEventReminders)
98
+ : null,
99
+ emoji: messageThread.customization_info?.emoji || null,
100
+ color: messageThread.customization_info?.outgoing_bubble_color
101
+ ? messageThread.customization_info.outgoing_bubble_color.slice(2)
102
+ : null,
103
+ threadTheme: messageThread.thread_theme,
104
+ nicknames: messageThread.customization_info?.participant_customizations
105
+ ? messageThread.customization_info.participant_customizations.reduce(
106
+ (res, val) => {
107
+ if (val.nickname) res[val.participant_id] = val.nickname;
108
+ return res;
109
+ },
110
+ {},
111
+ )
112
+ : {},
113
+ adminIDs: messageThread.thread_admins?.map((a) => a.id) || [],
114
+ approvalMode: Boolean(messageThread.approval_mode),
115
+ approvalQueue:
116
+ messageThread.group_approval_queue?.nodes?.map((a) => ({
117
+ inviterID: a.inviter.id,
118
+ requesterID: a.requester.id,
119
+ timestamp: a.request_timestamp,
120
+ request_source: a.request_source,
121
+ })) || [],
122
+ reactionsMuteMode: messageThread.reactions_mute_mode?.toLowerCase() || null,
123
+ mentionsMuteMode: messageThread.mentions_mute_mode?.toLowerCase() || null,
124
+ isPinProtected: messageThread.is_pin_protected,
125
+ relatedPageThread: messageThread.related_page_thread,
126
+ name: messageThread.name,
127
+ snippet: snippetText,
128
+ snippetSender: snippetID,
129
+ snippetAttachments: [],
130
+ serverTimestamp: messageThread.updated_time_precise,
131
+ imageSrc: messageThread.image?.uri || null,
132
+ isCanonicalUser: messageThread.is_canonical_neo_user,
133
+ isCanonical: messageThread.thread_type != 'GROUP',
134
+ recipientsLoadable: true,
135
+ hasEmailParticipant: false,
136
+ readOnly: false,
137
+ canReply: messageThread.cannot_reply_reason == null,
138
+ lastMessageTimestamp: messageThread.last_message?.timestamp_precise || null,
139
+ lastMessageType: 'message',
140
+ lastReadTimestamp: lastReadTimestamp,
141
+ threadType: messageThread.thread_type == 'GROUP' ? 2 : 1,
142
+ inviteLink: {
143
+ enable: messageThread.joinable_mode?.mode == 1,
144
+ link: messageThread.joinable_mode?.link || null,
145
+ },
146
+ };
147
+ }
148
+
149
+ /**
150
+ * @param {Object} defaultFuncs
151
+ * @param {Object} api
152
+ * @param {Object} ctx
153
+ * @returns {function(pageID: string, limit: number, tags: string[]): Promise<Array<Object>>}
154
+ */
155
+ export default function(defaultFuncs: any, api: any, ctx: any) {
156
+ /**
157
+ * Retrieves a list of current message threads for a managed Page.
158
+ * @param {string} pageID - The ID of the page.
159
+ * @param {number} limit - The number of threads to retrieve.
160
+ * @param {string[]} tags - An array of tags to filter threads by (e.g., ["INBOX", "ARCHIVED"]).
161
+ * @returns {Promise<Object[]>} A promise that resolves with an array of formatted thread objects.
162
+ */
163
+ return async function getPageThreadList(
164
+ pageID: string,
165
+ limit: number = 20,
166
+ tags: string[] = ['INBOX'],
167
+ ) {
168
+ if (!pageID) {
169
+ throw new Error('getPageThreadList: pageID is required.');
170
+ }
171
+ if (
172
+ utils.getType(limit) !== 'Number' ||
173
+ !Number.isInteger(limit) ||
174
+ limit <= 0
175
+ ) {
176
+ throw new Error('getPageThreadList: limit must be a positive integer.');
177
+ }
178
+ if (utils.getType(tags) === 'String') {
179
+ tags = [tags] as any;
180
+ }
181
+ if (utils.getType(tags) !== 'Array') {
182
+ throw new Error('getPageThreadList: tags must be an array.');
183
+ }
184
+
185
+ const variables = {
186
+ limit: limit,
187
+ tags: tags,
188
+ isWorkUser: false,
189
+ includeDeliveryReceipts: true,
190
+ includeSeqID: false,
191
+ is_work_teamwork_not_putting_muted_in_unreads: false,
192
+ };
193
+
194
+ const form = {
195
+ av: pageID,
196
+ __user: ctx.userID,
197
+ __a: 1,
198
+ fb_dtsg: ctx.fb_dtsg,
199
+ jazoest: ctx.jazoest,
200
+ fb_api_caller_class: 'RelayModern',
201
+ fb_api_req_friendly_name: 'MessengerGraphQLThreadlistFetcher',
202
+ variables: JSON.stringify(variables),
203
+ doc_id: '3566388080113165',
204
+ };
205
+
206
+ try {
207
+ const resp = await utils
208
+ .post(
209
+ 'https://www.facebook.com/api/graphql/',
210
+ ctx.jar,
211
+ form,
212
+ ctx.globalOptions,
213
+ ctx,
214
+ )
215
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs));
216
+
217
+ if (resp.errors) {
218
+ throw new Error(JSON.stringify(resp.errors));
219
+ }
220
+
221
+ let nodes = resp?.data?.viewer?.message_threads?.nodes || [];
222
+
223
+ const formatted = nodes
224
+ .map((node, index) => {
225
+ try {
226
+ return formatThreadGraphQLResponse(node);
227
+ } catch (e) {
228
+ return null;
229
+ }
230
+ })
231
+ .filter(Boolean);
232
+
233
+ return formatted;
234
+ } catch (err) {
235
+ utils.error('getPageThreadList', err);
236
+ throw err;
237
+ }
238
+ };
239
+ }
@@ -0,0 +1,94 @@
1
+ // @ChoruOfficial
2
+ import utils = require('../../../utils');
3
+ import deepdash from 'deepdash';
4
+ import _ from 'lodash';
5
+ deepdash(_);
6
+
7
+ export default function(defaultFuncs: any, api: any, ctx: any) {
8
+ return function getManagedPages(callback?: (err: any, data?: any) => void) {
9
+ let cb: any;
10
+ const returnPromise = new Promise<any>((resolve, reject) => {
11
+ cb = (err: any, resData: any) => {
12
+ if (callback) callback(err, resData);
13
+ if (err) return reject(err);
14
+ resolve(resData);
15
+ };
16
+ });
17
+
18
+ const fetchPages = async () => {
19
+ try {
20
+ const url = `https://www.facebook.com/pages/?category=your_pages&ref=bookmarks`;
21
+ const allJsonData = await utils.json(
22
+ url,
23
+ ctx.jar,
24
+ null,
25
+ ctx.globalOptions,
26
+ ctx,
27
+ );
28
+
29
+ if (!allJsonData || allJsonData.length === 0) {
30
+ throw new Error(`Could not find JSON data for managed pages.`);
31
+ }
32
+
33
+ const results: any[] = [];
34
+
35
+ const deepFind = (obj: any) => {
36
+ if (obj && typeof obj === 'object') {
37
+ if (!Array.isArray(obj)) {
38
+ if (
39
+ obj.profile_switcher_eligible_profiles &&
40
+ Array.isArray(obj.profile_switcher_eligible_profiles.nodes)
41
+ ) {
42
+ obj.profile_switcher_eligible_profiles.nodes.forEach(
43
+ (node: any) => {
44
+ const prof = node.profile;
45
+ if (prof && prof.id && prof.name) {
46
+ if (!results.find((r) => r.id === prof.id)) {
47
+ results.push(prof);
48
+ }
49
+ }
50
+ },
51
+ );
52
+ }
53
+ if (
54
+ obj.first_profiles &&
55
+ Array.isArray(obj.first_profiles.nodes)
56
+ ) {
57
+ obj.first_profiles.nodes.forEach((node: any) => {
58
+ const prof = node.profile;
59
+ if (prof && prof.id && prof.name) {
60
+ if (!results.find((r) => r.id === prof.id)) {
61
+ results.push(prof);
62
+ }
63
+ }
64
+ });
65
+ }
66
+ Object.values(obj).forEach(deepFind);
67
+ } else {
68
+ obj.forEach(deepFind);
69
+ }
70
+ }
71
+ };
72
+
73
+ deepFind(allJsonData);
74
+
75
+ // Return cleaned up objects
76
+ const cleanResults = results.map((prof) => ({
77
+ id: prof.id,
78
+ name: prof.name,
79
+ profilePicUrl: prof.profile_picture?.uri || null,
80
+ isProfilePlus: !!prof.is_profile_plus,
81
+ delegatePageId: prof.delegate_page_id || null,
82
+ }));
83
+
84
+ return cb(null, cleanResults);
85
+ } catch (err) {
86
+ utils.error('getManagedPages', err);
87
+ return cb(err);
88
+ }
89
+ };
90
+
91
+ fetchPages();
92
+ return returnPromise;
93
+ };
94
+ }
@@ -567,6 +567,14 @@ export interface API {
567
567
  callback?: Callback<ThreadInfo[]>,
568
568
  ): Promise<ThreadInfo[]>;
569
569
 
570
+ /** Get a list of threads for a managed Page. */
571
+ getPageThreadList(
572
+ pageID: string,
573
+ limit?: number,
574
+ tags?: string[],
575
+ callback?: Callback<ThreadInfo[]>,
576
+ ): Promise<ThreadInfo[]>;
577
+
570
578
  /** Get message history for a thread. */
571
579
  getThreadHistory(
572
580
  threadID: ThreadID,
@@ -22,7 +22,8 @@ export function parseAndCheckLogin(ctx: any, http: any, retryCount: number = 0):
22
22
 
23
23
  await delay(retryTime);
24
24
 
25
- if (data.request.headers["content-type"].split(";")[0] === "multipart/form-data") {
25
+ const contentType = data.request.headers && data.request.headers["content-type"];
26
+ if (contentType && contentType.split(";")[0] === "multipart/form-data") {
26
27
  const newData = await http.postFormData(url, ctx.jar, data.request.formData, data.request.qs, ctx.globalOptions, ctx);
27
28
  return await parseAndCheckLogin(ctx, http, retryCount)(newData);
28
29
  } else {
@@ -1,11 +1,11 @@
1
+ import * as cheerio from "cheerio";
2
+ import * as util from "util";
1
3
  import * as network from "./axios";
2
- import * as headers from "./headers";
3
4
  import * as clients from "./clients";
4
5
  import * as constants from "./constants";
5
6
  import * as formatters from "./formatters";
7
+ import * as headers from "./headers";
6
8
  import * as userAgents from "./user-agents";
7
- import * as cheerio from "cheerio";
8
- import * as util from "util";
9
9
 
10
10
  async function json(url: string, jar: any, qs?: any, options?: any, ctx?: any, customHeader?: any): Promise<any[]> {
11
11
  try {
@@ -39,7 +39,7 @@ function makeDefaults(html: string, userID: string | number, ctx: any): any {
39
39
  function mergeWithDefaults(obj?: any): any {
40
40
  const newObj: any = { av: userID, __user: userID, __req: (reqCounter++).toString(36), __rev: revision, __a: 1, ...(ctx && { fb_dtsg: ctx.fb_dtsg, jazoest: ctx.jazoest }) };
41
41
  if (!obj) return newObj;
42
- for (const prop in obj) { if (obj.hasOwnProperty(prop) && !newObj[prop]) { newObj[prop] = obj[prop]; } }
42
+ for (const prop in obj) { if (obj.hasOwnProperty(prop)) { newObj[prop] = obj[prop]; } }
43
43
  return newObj;
44
44
  }
45
45
  return {