bb-fca 2.0.8 → 2.0.10
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.
- package/dist/core/models/buildAPI.js +3 -3
- package/dist/core/models/buildAPI.js.map +1 -1
- package/dist/core/models/loginHelper.js +29 -28
- package/dist/core/models/loginHelper.js.map +1 -1
- package/dist/deltas/apis/create.js +9 -0
- package/dist/deltas/apis/create.js.map +1 -1
- package/dist/deltas/apis/messaging/editMessage.js +13 -24
- package/dist/deltas/apis/messaging/editMessage.js.map +1 -1
- package/dist/deltas/apis/messaging/emoji.js +34 -88
- package/dist/deltas/apis/messaging/emoji.js.map +1 -1
- package/dist/deltas/apis/messaging/gcmember.js +48 -101
- package/dist/deltas/apis/messaging/gcmember.js.map +1 -1
- package/dist/deltas/apis/messaging/gcname.js +28 -79
- package/dist/deltas/apis/messaging/gcname.js.map +1 -1
- package/dist/deltas/apis/messaging/gcrule.js +47 -105
- package/dist/deltas/apis/messaging/gcrule.js.map +1 -1
- package/dist/deltas/apis/messaging/markAsDelivered.js +10 -12
- package/dist/deltas/apis/messaging/markAsDelivered.js.map +1 -1
- package/dist/deltas/apis/messaging/markAsRead.js +25 -60
- package/dist/deltas/apis/messaging/markAsRead.js.map +1 -1
- package/dist/deltas/apis/messaging/markAsReadAll.js +9 -11
- package/dist/deltas/apis/messaging/markAsReadAll.js.map +1 -1
- package/dist/deltas/apis/messaging/markAsSeen.js +10 -37
- package/dist/deltas/apis/messaging/markAsSeen.js.map +1 -1
- package/dist/deltas/apis/messaging/nickname.js +38 -98
- package/dist/deltas/apis/messaging/nickname.js.map +1 -1
- package/dist/deltas/apis/messaging/notes.js +52 -90
- package/dist/deltas/apis/messaging/notes.js.map +1 -1
- package/dist/deltas/apis/messaging/resolvePhotoUrl.js +17 -42
- package/dist/deltas/apis/messaging/resolvePhotoUrl.js.map +1 -1
- package/dist/deltas/apis/messaging/sendMessage.js +14 -15
- package/dist/deltas/apis/messaging/sendMessage.js.map +1 -1
- package/dist/deltas/apis/messaging/sendTypingIndicator.js +7 -13
- package/dist/deltas/apis/messaging/sendTypingIndicator.js.map +1 -1
- package/dist/deltas/apis/messaging/setMessageReaction.js +24 -14
- package/dist/deltas/apis/messaging/setMessageReaction.js.map +1 -1
- package/dist/deltas/apis/messaging/shareContact.js +14 -12
- package/dist/deltas/apis/messaging/shareContact.js.map +1 -1
- package/dist/deltas/apis/messaging/stickers.js +4 -5
- package/dist/deltas/apis/messaging/stickers.js.map +1 -1
- package/dist/deltas/apis/messaging/theme.js +142 -213
- package/dist/deltas/apis/messaging/theme.js.map +1 -1
- package/dist/deltas/apis/messaging/unsendMessage.js +14 -7
- package/dist/deltas/apis/messaging/unsendMessage.js.map +1 -1
- package/dist/deltas/apis/posting/group.js +22 -129
- package/dist/deltas/apis/posting/group.js.map +1 -1
- package/dist/deltas/apis/posting/post.js +805 -12
- package/dist/deltas/apis/posting/post.js.map +1 -1
- package/dist/index.d.ts +35 -58
- package/dist/types/deltas/apis/create.d.ts +9 -0
- package/dist/types/deltas/apis/messaging/editMessage.d.ts +4 -5
- package/dist/types/deltas/apis/messaging/emoji.d.ts +7 -1
- package/dist/types/deltas/apis/messaging/gcmember.d.ts +7 -1
- package/dist/types/deltas/apis/messaging/gcname.d.ts +9 -1
- package/dist/types/deltas/apis/messaging/gcrule.d.ts +7 -1
- package/dist/types/deltas/apis/messaging/markAsDelivered.d.ts +1 -2
- package/dist/types/deltas/apis/messaging/markAsRead.d.ts +1 -1
- package/dist/types/deltas/apis/messaging/markAsReadAll.d.ts +1 -2
- package/dist/types/deltas/apis/messaging/markAsSeen.d.ts +1 -1
- package/dist/types/deltas/apis/messaging/nickname.d.ts +7 -1
- package/dist/types/deltas/apis/messaging/notes.d.ts +13 -11
- package/dist/types/deltas/apis/messaging/resolvePhotoUrl.d.ts +4 -6
- package/dist/types/deltas/apis/messaging/sendMessage.d.ts +1 -1
- package/dist/types/deltas/apis/messaging/sendTypingIndicator.d.ts +1 -1
- package/dist/types/deltas/apis/messaging/setMessageReaction.d.ts +6 -1
- package/dist/types/deltas/apis/messaging/shareContact.d.ts +1 -2
- package/dist/types/deltas/apis/messaging/stickers.d.ts +1 -1
- package/dist/types/deltas/apis/messaging/theme.d.ts +8 -1
- package/dist/types/deltas/apis/messaging/unsendMessage.d.ts +6 -1
- package/dist/types/deltas/apis/posting/group.d.ts +1 -23
- package/dist/types/deltas/apis/posting/post.d.ts +23 -0
- package/dist/types/utils/constants.d.ts +26 -16
- package/dist/utils/constants.js +42 -29
- package/dist/utils/constants.js.map +1 -1
- package/package.json +1 -1
- package/src/core/models/buildAPI.ts +3 -3
- package/src/core/models/loginHelper.ts +32 -30
- package/src/deltas/apis/create.ts +10 -0
- package/src/deltas/apis/messaging/editMessage.ts +16 -26
- package/src/deltas/apis/messaging/emoji.ts +45 -97
- package/src/deltas/apis/messaging/gcmember.ts +68 -113
- package/src/deltas/apis/messaging/gcname.ts +42 -91
- package/src/deltas/apis/messaging/gcrule.ts +61 -111
- package/src/deltas/apis/messaging/markAsDelivered.ts +19 -14
- package/src/deltas/apis/messaging/markAsRead.ts +45 -72
- package/src/deltas/apis/messaging/markAsReadAll.ts +17 -17
- package/src/deltas/apis/messaging/markAsSeen.ts +17 -41
- package/src/deltas/apis/messaging/nickname.ts +50 -116
- package/src/deltas/apis/messaging/notes.ts +59 -95
- package/src/deltas/apis/messaging/resolvePhotoUrl.ts +27 -50
- package/src/deltas/apis/messaging/sendMessage.ts +28 -26
- package/src/deltas/apis/messaging/sendTypingIndicator.ts +13 -12
- package/src/deltas/apis/messaging/setMessageReaction.ts +45 -20
- package/src/deltas/apis/messaging/shareContact.ts +25 -15
- package/src/deltas/apis/messaging/stickers.ts +4 -4
- package/src/deltas/apis/messaging/theme.ts +172 -259
- package/src/deltas/apis/messaging/unsendMessage.ts +23 -7
- package/src/deltas/apis/posting/group.ts +56 -172
- package/src/deltas/apis/posting/post.ts +932 -33
- package/src/types/index.d.ts +35 -58
- package/src/utils/constants.ts +84 -57
- package/a.html +0 -537
- package/a.json +0 -5915
- package/src/utils/formatters.old.ts +0 -1049
- package/task.txt +0 -24
|
@@ -1,24 +1,34 @@
|
|
|
1
1
|
declare const NUM_TO_MONTH: string[];
|
|
2
2
|
declare const NUM_TO_DAY: string[];
|
|
3
|
-
declare function getRandom(arr:
|
|
4
|
-
declare function padZeros(val:
|
|
5
|
-
declare function generateThreadingID(clientID:
|
|
6
|
-
declare function binaryToDecimal(data:
|
|
3
|
+
declare function getRandom<T>(arr: T[]): T;
|
|
4
|
+
declare function padZeros(val: string | number, len?: number): string;
|
|
5
|
+
declare function generateThreadingID(clientID: string): string;
|
|
6
|
+
declare function binaryToDecimal(data: string): string;
|
|
7
7
|
declare function generateOfflineThreadingID(): string;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Compresses a presence JSON string using PRESENCE_TOKEN_MAP shortcuts.
|
|
10
|
+
* Reduces payload size when communicating with Facebook's EdgeChat API.
|
|
11
|
+
*/
|
|
12
|
+
declare function presenceEncode(str: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Decompresses a presence-encoded string back to its original form.
|
|
15
|
+
*/
|
|
16
|
+
declare function presenceDecode(str: string): string;
|
|
17
|
+
declare function generatePresence(userID: string): string;
|
|
11
18
|
declare function generateAccessiblityCookie(): string;
|
|
12
19
|
declare function getGUID(): string;
|
|
13
|
-
declare function getFrom(str:
|
|
14
|
-
declare function makeParsable(html:
|
|
15
|
-
declare function arrToForm(form:
|
|
16
|
-
|
|
20
|
+
declare function getFrom(str: string, startToken: string, endToken: string): string;
|
|
21
|
+
declare function makeParsable(html: string): string | string[];
|
|
22
|
+
declare function arrToForm(form: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
val: any;
|
|
25
|
+
}>): Record<string, any>;
|
|
26
|
+
declare function arrayToObject<T>(arr: T[], getKey: (v: T) => string, getValue: (v: T) => any): Record<string, any>;
|
|
17
27
|
declare function getSignatureID(): string;
|
|
18
28
|
declare function generateTimestampRelative(): string;
|
|
19
|
-
declare function getType(obj:
|
|
20
|
-
declare function logOptions(bool:
|
|
21
|
-
declare function log(...args:
|
|
22
|
-
declare function error(...args:
|
|
23
|
-
declare function warn(...args:
|
|
29
|
+
declare function getType(obj: unknown): string;
|
|
30
|
+
declare function logOptions(bool: boolean): void;
|
|
31
|
+
declare function log(...args: unknown[]): void;
|
|
32
|
+
declare function error(...args: unknown[]): void;
|
|
33
|
+
declare function warn(...args: unknown[]): void;
|
|
24
34
|
export { NUM_TO_DAY, NUM_TO_MONTH, arrToForm, arrayToObject, binaryToDecimal, error, generateAccessiblityCookie, generateOfflineThreadingID, generatePresence, generateThreadingID, generateTimestampRelative, getFrom, getGUID, getRandom, getSignatureID, getType, log, logOptions, makeParsable, padZeros, presenceDecode, presenceEncode, warn, };
|
package/dist/utils/constants.js
CHANGED
|
@@ -26,9 +26,14 @@ const chalk = require('chalk');
|
|
|
26
26
|
const gradient = require('gradient-string');
|
|
27
27
|
const echaceb = gradient(['#0061ff', '#681297']);
|
|
28
28
|
const ws = echaceb('bb-fca');
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Presence compression token map.
|
|
31
|
+
* Keys are single uppercase letters used as compact tokens;
|
|
32
|
+
* values are the URL-encoded JSON substrings they replace.
|
|
33
|
+
* This map is used by presenceEncode/presenceDecode to compress
|
|
34
|
+
* presence payloads before sending to Facebook's EdgeChat API.
|
|
35
|
+
*/
|
|
36
|
+
const PRESENCE_TOKEN_MAP = {
|
|
32
37
|
_: '%',
|
|
33
38
|
A: '%2',
|
|
34
39
|
B: '000',
|
|
@@ -57,15 +62,21 @@ const j = {
|
|
|
57
62
|
Y: '%2c%22pt%22%3a0%2c%22vis%22%3a1%2c%22bls%22%3a0%2c%22blc%22%3a0%2c%22snd%22%3a1%2c%22ct%22%3a',
|
|
58
63
|
Z: '%2c%22sb%22%3a1%2c%22t%22%3a%5b%5d%2c%22f%22%3anull%2c%22uct%22%3a0%2c%22s%22%3a0%2c%22blo%22%3a0%7d%2c%22bl%22%3a%7b%22ac%22%3a',
|
|
59
64
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
/** Reverse map: encoded substring → token letter. Built from PRESENCE_TOKEN_MAP. */
|
|
66
|
+
const presenceDecodeMap = {};
|
|
67
|
+
/** RegExp that matches any encodedsubstring in PRESENCE_TOKEN_MAP (longest first). */
|
|
68
|
+
let presenceEncodeRegex;
|
|
69
|
+
(function buildPresenceMaps() {
|
|
70
|
+
const encodedValues = [];
|
|
71
|
+
for (const token in PRESENCE_TOKEN_MAP) {
|
|
72
|
+
presenceDecodeMap[PRESENCE_TOKEN_MAP[token]] = token;
|
|
73
|
+
encodedValues.push(PRESENCE_TOKEN_MAP[token]);
|
|
65
74
|
}
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
// Sort longest first so greedy matching works correctly
|
|
76
|
+
encodedValues.reverse();
|
|
77
|
+
presenceEncodeRegex = new RegExp(encodedValues.join('|'), 'g');
|
|
68
78
|
})();
|
|
79
|
+
// ─── Calendar helpers ───────────────────────────────────────────────────────
|
|
69
80
|
const NUM_TO_MONTH = [
|
|
70
81
|
'Jan',
|
|
71
82
|
'Feb',
|
|
@@ -83,20 +94,20 @@ const NUM_TO_MONTH = [
|
|
|
83
94
|
exports.NUM_TO_MONTH = NUM_TO_MONTH;
|
|
84
95
|
const NUM_TO_DAY = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
85
96
|
exports.NUM_TO_DAY = NUM_TO_DAY;
|
|
97
|
+
// ─── Utility functions ───────────────────────────────────────────────────────
|
|
86
98
|
function getRandom(arr) {
|
|
87
99
|
return arr[Math.floor(Math.random() * arr.length)];
|
|
88
100
|
}
|
|
89
101
|
function padZeros(val, len = 2) {
|
|
90
|
-
|
|
91
|
-
while (
|
|
92
|
-
|
|
93
|
-
return
|
|
102
|
+
let s = String(val);
|
|
103
|
+
while (s.length < len)
|
|
104
|
+
s = '0' + s;
|
|
105
|
+
return s;
|
|
94
106
|
}
|
|
95
107
|
function generateThreadingID(clientID) {
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
return '<' + k + ':' + l + '-' + m + '@mail.projektitan.com>';
|
|
108
|
+
const timestamp = Date.now();
|
|
109
|
+
const rand = Math.floor(Math.random() * 4294967295);
|
|
110
|
+
return '<' + timestamp + ':' + rand + '-' + clientID + '@mail.projektitan.com>';
|
|
100
111
|
}
|
|
101
112
|
function binaryToDecimal(data) {
|
|
102
113
|
let ret = '';
|
|
@@ -126,19 +137,26 @@ function generateOfflineThreadingID() {
|
|
|
126
137
|
const msgs = ret.toString(2) + str;
|
|
127
138
|
return binaryToDecimal(msgs);
|
|
128
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Compresses a presence JSON string using PRESENCE_TOKEN_MAP shortcuts.
|
|
142
|
+
* Reduces payload size when communicating with Facebook's EdgeChat API.
|
|
143
|
+
*/
|
|
129
144
|
function presenceEncode(str) {
|
|
130
145
|
return encodeURIComponent(str)
|
|
131
146
|
.replace(/([_A-Z])|%../g, function (m, n) {
|
|
132
147
|
return n ? '%' + n.charCodeAt(0).toString(16) : m;
|
|
133
148
|
})
|
|
134
149
|
.toLowerCase()
|
|
135
|
-
.replace(
|
|
136
|
-
return
|
|
150
|
+
.replace(presenceEncodeRegex, function (m) {
|
|
151
|
+
return presenceDecodeMap[m];
|
|
137
152
|
});
|
|
138
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Decompresses a presence-encoded string back to its original form.
|
|
156
|
+
*/
|
|
139
157
|
function presenceDecode(str) {
|
|
140
158
|
return decodeURIComponent(str.replace(/[_A-Z]/g, function (m) {
|
|
141
|
-
return
|
|
159
|
+
return PRESENCE_TOKEN_MAP[m];
|
|
142
160
|
}));
|
|
143
161
|
}
|
|
144
162
|
function generatePresence(userID) {
|
|
@@ -180,8 +198,7 @@ function getGUID() {
|
|
|
180
198
|
const id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
181
199
|
const r = Math.floor((sectionLength + Math.random() * 16) % 16);
|
|
182
200
|
sectionLength = Math.floor(sectionLength / 16);
|
|
183
|
-
|
|
184
|
-
return _guid;
|
|
201
|
+
return (c == 'x' ? r : (r & 7) | 8).toString(16);
|
|
185
202
|
});
|
|
186
203
|
return id;
|
|
187
204
|
}
|
|
@@ -204,11 +221,7 @@ function makeParsable(html) {
|
|
|
204
221
|
return '[' + maybeMultipleObjects.join('},{') + ']';
|
|
205
222
|
}
|
|
206
223
|
function arrToForm(form) {
|
|
207
|
-
return arrayToObject(form, function (v) {
|
|
208
|
-
return v.name;
|
|
209
|
-
}, function (v) {
|
|
210
|
-
return v.val;
|
|
211
|
-
});
|
|
224
|
+
return arrayToObject(form, function (v) { return v.name; }, function (v) { return v.val; });
|
|
212
225
|
}
|
|
213
226
|
function arrayToObject(arr, getKey, getValue) {
|
|
214
227
|
return arr.reduce(function (acc, val) {
|
|
@@ -226,7 +239,7 @@ function generateTimestampRelative() {
|
|
|
226
239
|
function getType(obj) {
|
|
227
240
|
return Object.prototype.toString.call(obj).slice(8, -1);
|
|
228
241
|
}
|
|
229
|
-
//
|
|
242
|
+
// ─── Logging ─────────────────────────────────────────────────────────────────
|
|
230
243
|
let logging = true;
|
|
231
244
|
function logOptions(bool) {
|
|
232
245
|
logging = bool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.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.
|
|
3
|
+
"version": "2.0.10",
|
|
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",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { getFrom, makeDefaults } from '../../utils';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Builds the core API context and default functions after successful login.
|
|
@@ -63,7 +63,7 @@ async function buildAPI(
|
|
|
63
63
|
const dtsgData = findConfig('DTSGInitialData');
|
|
64
64
|
const dtsg: any = dtsgData
|
|
65
65
|
? dtsgData.token
|
|
66
|
-
:
|
|
66
|
+
: getFrom(html, '"token":"', '"');
|
|
67
67
|
const dtsgResult = {
|
|
68
68
|
fb_dtsg: dtsg,
|
|
69
69
|
jazoest: `2${Array.from(dtsg as string).reduce(
|
|
@@ -123,7 +123,7 @@ async function buildAPI(
|
|
|
123
123
|
firstListen: true,
|
|
124
124
|
...dtsgResult,
|
|
125
125
|
};
|
|
126
|
-
const defaultFuncs =
|
|
126
|
+
const defaultFuncs = makeDefaults(html, userID, ctx);
|
|
127
127
|
|
|
128
128
|
return [ctx, defaultFuncs, {}];
|
|
129
129
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import utils = require('../../utils');
|
|
2
1
|
import axios from 'axios';
|
|
3
2
|
import * as fs from 'fs';
|
|
4
3
|
import * as path from 'path';
|
|
5
4
|
import * as qs from 'querystring';
|
|
5
|
+
import { getJar, getAppState, get, saveCookies, log, error } from '../../utils';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* The main login helper function, orchestrating the login process.
|
|
@@ -31,14 +31,27 @@ async function loginHelper(
|
|
|
31
31
|
let defaultFuncs: any = null;
|
|
32
32
|
let api: any = initialApi;
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Sets an array of "name=value" cookie strings into the CookieJar
|
|
36
|
+
* for the facebook.com domain.
|
|
37
|
+
*/
|
|
38
|
+
function setCookiesIntoJar(jar: any, cookieStrings: string[]): void {
|
|
39
|
+
const domain = '.facebook.com';
|
|
40
|
+
const expires = new Date().getTime() + 1000 * 60 * 60 * 24 * 365;
|
|
41
|
+
cookieStrings.forEach((cookieString) => {
|
|
42
|
+
const str = `${cookieString}; expires=${expires}; domain=${domain}; path=/;`;
|
|
43
|
+
jar.setCookie(str, `https://${domain}`);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
34
47
|
try {
|
|
35
|
-
const jar =
|
|
36
|
-
|
|
48
|
+
const jar = getJar();
|
|
49
|
+
log('Logging in...');
|
|
37
50
|
|
|
38
51
|
const appState = credentials.appState;
|
|
39
52
|
|
|
40
53
|
if (appState) {
|
|
41
|
-
let cookieStrings = [];
|
|
54
|
+
let cookieStrings: string[] = [];
|
|
42
55
|
if (Array.isArray(appState)) {
|
|
43
56
|
cookieStrings = appState.map((c) =>
|
|
44
57
|
[c.name || c.key, c.value].join('='),
|
|
@@ -54,12 +67,7 @@ async function loginHelper(
|
|
|
54
67
|
);
|
|
55
68
|
}
|
|
56
69
|
|
|
57
|
-
cookieStrings
|
|
58
|
-
const domain = '.facebook.com';
|
|
59
|
-
const expires = new Date().getTime() + 1000 * 60 * 60 * 24 * 365;
|
|
60
|
-
const str = `${cookieString}; expires=${expires}; domain=${domain}; path=/;`;
|
|
61
|
-
jar.setCookie(str, `https://${domain}`);
|
|
62
|
-
});
|
|
70
|
+
setCookiesIntoJar(jar, cookieStrings);
|
|
63
71
|
} else if (credentials.email && credentials.password) {
|
|
64
72
|
// Rui
|
|
65
73
|
const url = 'https://api.facebook.com/method/auth.login';
|
|
@@ -80,15 +88,10 @@ async function loginHelper(
|
|
|
80
88
|
if (resp.status !== 200) {
|
|
81
89
|
throw new Error('Wrong password / email');
|
|
82
90
|
}
|
|
83
|
-
|
|
84
|
-
(c) => `${c.name}=${c.value}`,
|
|
91
|
+
const cstrs: string[] = resp.data['session_cookies'].map(
|
|
92
|
+
(c: any) => `${c.name}=${c.value}`,
|
|
85
93
|
);
|
|
86
|
-
cstrs
|
|
87
|
-
const domain = '.facebook.com';
|
|
88
|
-
const expires = new Date().getTime() + 1000 * 60 * 60 * 24 * 365;
|
|
89
|
-
const str = `${cstr}; expires=${expires}; domain=${domain}; path=/;`;
|
|
90
|
-
jar.setCookie(str, `https://${domain}`);
|
|
91
|
-
});
|
|
94
|
+
setCookiesIntoJar(jar, cstrs);
|
|
92
95
|
} catch (e) {
|
|
93
96
|
throw new Error('Wrong password / email');
|
|
94
97
|
}
|
|
@@ -102,20 +105,19 @@ async function loginHelper(
|
|
|
102
105
|
api = {
|
|
103
106
|
setOptions: setOptionsFunc.bind(null, globalOptions),
|
|
104
107
|
getAppState() {
|
|
105
|
-
const
|
|
106
|
-
if (!Array.isArray(
|
|
107
|
-
const
|
|
108
|
+
const state = getAppState(jar);
|
|
109
|
+
if (!Array.isArray(state)) return [];
|
|
110
|
+
const uniqueState = state.filter(
|
|
108
111
|
(item, index, self) =>
|
|
109
112
|
self.findIndex((t) => t.key === item.key) === index,
|
|
110
113
|
);
|
|
111
|
-
return
|
|
114
|
+
return uniqueState.length > 0 ? uniqueState : state;
|
|
112
115
|
},
|
|
113
116
|
};
|
|
114
117
|
}
|
|
115
118
|
|
|
116
|
-
const resp = await
|
|
117
|
-
.
|
|
118
|
-
.then(utils.saveCookies(jar));
|
|
119
|
+
const resp = await get(fbLinkFunc(), jar, null, globalOptions, { noRef: true })
|
|
120
|
+
.then(saveCookies(jar));
|
|
119
121
|
const extractNetData = (html) => {
|
|
120
122
|
const allScriptsData = [];
|
|
121
123
|
const scriptRegex = /<script type="application\/json"[^>]*>(.*?)<\/script>/g;
|
|
@@ -124,7 +126,7 @@ async function loginHelper(
|
|
|
124
126
|
try {
|
|
125
127
|
allScriptsData.push(JSON.parse(match[1]));
|
|
126
128
|
} catch (e) {
|
|
127
|
-
|
|
129
|
+
error(`Failed to parse a JSON blob from HTML`, (e as any).message);
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
132
|
return allScriptsData;
|
|
@@ -173,7 +175,7 @@ async function loginHelper(
|
|
|
173
175
|
? require(fullPath).default(defaultFuncs, api, ctx)
|
|
174
176
|
: require(fullPath)(defaultFuncs, api, ctx);
|
|
175
177
|
} catch (e) {
|
|
176
|
-
|
|
178
|
+
error(
|
|
177
179
|
`Failed to load module ${moduleName} from ${folder}:`,
|
|
178
180
|
e,
|
|
179
181
|
);
|
|
@@ -217,9 +219,9 @@ async function loginHelper(
|
|
|
217
219
|
api.globalOptions = globalOptions;
|
|
218
220
|
|
|
219
221
|
return callback(null, api);
|
|
220
|
-
} catch (
|
|
221
|
-
|
|
222
|
-
return callback(
|
|
222
|
+
} catch (err: any) {
|
|
223
|
+
error('loginHelper', err.error || err);
|
|
224
|
+
return callback(err);
|
|
223
225
|
}
|
|
224
226
|
}
|
|
225
227
|
|
|
@@ -49,5 +49,15 @@ export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
|
49
49
|
* @returns {Promise<object>} Upload result with videoID.
|
|
50
50
|
*/
|
|
51
51
|
uploadVideo: postModule.uploadVideo,
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Reacts to a Facebook post (like, love, haha, wow, sad, angry, care).
|
|
55
|
+
* @param {string} feedbackId - Numeric post ID, "feedbackback:<id>", or base64 feedback ID.
|
|
56
|
+
* @param {string} [reaction="LIKE"] - "LIKE" | "LOVE" | "HAHA" | "WOW" | "SAD" | "ANGRY" | "CARE"
|
|
57
|
+
* or emoji: "👍" | "❤️" | "😂" | "😮" | "😢" | "😡" | "🤗"
|
|
58
|
+
* @param {Function} [callback] - Optional callback function.
|
|
59
|
+
* @returns {Promise<object>} The server response.
|
|
60
|
+
*/
|
|
61
|
+
reactPost: postModule.react,
|
|
52
62
|
};
|
|
53
63
|
}
|
|
@@ -2,27 +2,25 @@
|
|
|
2
2
|
* @author RFS-ADRENO
|
|
3
3
|
* @rewrittenBy Isai Ivanov
|
|
4
4
|
*/
|
|
5
|
-
//fixed march 30
|
|
6
5
|
import utils = require('../../../utils');
|
|
7
6
|
|
|
8
|
-
function canBeCalled(func) {
|
|
9
|
-
try {
|
|
10
|
-
Reflect.apply(func, null, []);
|
|
11
|
-
return true;
|
|
12
|
-
} catch (error) {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
7
|
/**
|
|
18
|
-
*
|
|
19
|
-
* @param {
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {Object} callback - Callback for the function.
|
|
8
|
+
* @param {Object} defaultFuncs
|
|
9
|
+
* @param {Object} api
|
|
10
|
+
* @param {Object} ctx
|
|
22
11
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
12
|
+
export default function editMessage(
|
|
13
|
+
defaultFuncs: any,
|
|
14
|
+
api: any,
|
|
15
|
+
ctx: any,
|
|
16
|
+
): Function {
|
|
17
|
+
/**
|
|
18
|
+
* Edits a message previously sent by the bot via MQTT.
|
|
19
|
+
* @param {string} text - The new text for the message.
|
|
20
|
+
* @param {string} messageID - The ID of the message to edit.
|
|
21
|
+
* @returns {void}
|
|
22
|
+
*/
|
|
23
|
+
return function editMessage(text: string, messageID: string): void {
|
|
26
24
|
if (!ctx.mqttClient) {
|
|
27
25
|
throw new Error('Not connected to MQTT');
|
|
28
26
|
}
|
|
@@ -30,10 +28,7 @@ export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
|
30
28
|
ctx.wsReqNumber += 1;
|
|
31
29
|
ctx.wsTaskNumber += 1;
|
|
32
30
|
|
|
33
|
-
const queryPayload = {
|
|
34
|
-
message_id: messageID,
|
|
35
|
-
text,
|
|
36
|
-
};
|
|
31
|
+
const queryPayload = { message_id: messageID, text };
|
|
37
32
|
|
|
38
33
|
const query = {
|
|
39
34
|
failure_count: null,
|
|
@@ -54,13 +49,8 @@ export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
|
54
49
|
request_id: ctx.wsReqNumber,
|
|
55
50
|
type: 3,
|
|
56
51
|
};
|
|
57
|
-
|
|
58
52
|
context.payload = JSON.stringify(context.payload);
|
|
59
53
|
|
|
60
|
-
// if (canBeCalled(callback)) {
|
|
61
|
-
// ctx.reqCallbacks[ctx.wsReqNumber] = callback;
|
|
62
|
-
// }
|
|
63
|
-
|
|
64
54
|
ctx.mqttClient.publish('/ls_req', JSON.stringify(context), {
|
|
65
55
|
qos: 1,
|
|
66
56
|
retain: false,
|
|
@@ -1,88 +1,40 @@
|
|
|
1
1
|
import utils = require('../../../utils');
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @module emoji
|
|
5
|
+
* @param {Object} defaultFuncs
|
|
6
|
+
* @param {Object} api
|
|
7
|
+
* @param {Object} ctx
|
|
8
|
+
*/
|
|
9
|
+
export default function emoji(
|
|
10
|
+
defaultFuncs: any,
|
|
11
|
+
api: any,
|
|
12
|
+
ctx: any,
|
|
13
|
+
): Function {
|
|
4
14
|
/**
|
|
5
|
-
* Made by Choru Official
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* @
|
|
10
|
-
* @param {string} threadID The ID of the thread where the emoji will be set.
|
|
11
|
-
* @param {Function} [callback] Optional callback function to be invoked upon completion.
|
|
12
|
-
* @param {string} [initiatorID] The ID of the user who initiated the emoji change (e.g., from event.senderID).
|
|
13
|
-
* @returns {Promise<object>} A promise that resolves with a structured event object on success or rejects on error.
|
|
15
|
+
* Made by Choru Official — sets the custom emoji for a thread via MQTT.
|
|
16
|
+
* @param {string} emoji - The emoji character to set (e.g., "👍", "❤️").
|
|
17
|
+
* @param {string} threadID - The ID of the thread.
|
|
18
|
+
* @param {string} [initiatorID] - The ID of the initiating user.
|
|
19
|
+
* @returns {Promise<object>}
|
|
14
20
|
*/
|
|
15
|
-
return function emoji(
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
return async function emoji(
|
|
22
|
+
emojiChar: string,
|
|
23
|
+
threadID: string,
|
|
24
|
+
initiatorID?: string,
|
|
25
|
+
): Promise<any> {
|
|
26
|
+
const _initiatorID = initiatorID || ctx.userID;
|
|
18
27
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
_resolvePromise = resolve;
|
|
23
|
-
_rejectPromise = reject;
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
if (
|
|
27
|
-
utils.getType(callback) === 'Function' ||
|
|
28
|
-
utils.getType(callback) === 'AsyncFunction'
|
|
29
|
-
) {
|
|
30
|
-
_callback = callback;
|
|
31
|
-
_initiatorID = initiatorID;
|
|
32
|
-
} else if (
|
|
33
|
-
utils.getType(threadID) === 'Function' ||
|
|
34
|
-
utils.getType(threadID) === 'AsyncFunction'
|
|
35
|
-
) {
|
|
36
|
-
_callback = threadID;
|
|
37
|
-
threadID = null;
|
|
38
|
-
_initiatorID = callback;
|
|
39
|
-
} else if (utils.getType(callback) === 'string') {
|
|
40
|
-
_initiatorID = callback;
|
|
41
|
-
_callback = undefined;
|
|
42
|
-
} else {
|
|
43
|
-
_callback = undefined;
|
|
44
|
-
_initiatorID = undefined;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (!_callback) {
|
|
48
|
-
_callback = function(__err, __data) {
|
|
49
|
-
if (__err) _rejectPromise(__err);
|
|
50
|
-
else _resolvePromise(__data);
|
|
51
|
-
};
|
|
52
|
-
} else {
|
|
53
|
-
const originalCallback = _callback;
|
|
54
|
-
_callback = function(__err, __data) {
|
|
55
|
-
if (__err) {
|
|
56
|
-
originalCallback(__err);
|
|
57
|
-
_rejectPromise(__err);
|
|
58
|
-
} else {
|
|
59
|
-
originalCallback(null, __data);
|
|
60
|
-
_resolvePromise(__data);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
_initiatorID = _initiatorID || ctx.userID;
|
|
66
|
-
|
|
67
|
-
threadID = threadID || ctx.threadID;
|
|
68
|
-
|
|
69
|
-
if (!threadID) {
|
|
70
|
-
return _callback(new Error('threadID is required to set an emoji.'));
|
|
71
|
-
}
|
|
72
|
-
if (!emoji) {
|
|
73
|
-
return _callback(new Error('An emoji character is required.'));
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (!ctx.mqttClient) {
|
|
77
|
-
return _callback(new Error('Not connected to MQTT'));
|
|
78
|
-
}
|
|
28
|
+
if (!threadID) throw new Error('threadID is required to set an emoji.');
|
|
29
|
+
if (!emojiChar) throw new Error('An emoji character is required.');
|
|
30
|
+
if (!ctx.mqttClient) throw new Error('Not connected to MQTT');
|
|
79
31
|
|
|
80
32
|
ctx.wsReqNumber += 1;
|
|
81
33
|
ctx.wsTaskNumber += 1;
|
|
82
34
|
|
|
83
35
|
const queryPayload = {
|
|
84
36
|
thread_key: threadID.toString(),
|
|
85
|
-
custom_emoji:
|
|
37
|
+
custom_emoji: emojiChar,
|
|
86
38
|
avatar_sticker_instruction_key_id: null,
|
|
87
39
|
sync_group: 1,
|
|
88
40
|
};
|
|
@@ -98,7 +50,7 @@ export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
|
98
50
|
const context: any = {
|
|
99
51
|
app_id: ctx.appID,
|
|
100
52
|
payload: {
|
|
101
|
-
epoch_id: parseInt(utils.generateOfflineThreadingID()),
|
|
53
|
+
epoch_id: Number.parseInt(utils.generateOfflineThreadingID()),
|
|
102
54
|
tasks: [query],
|
|
103
55
|
version_id: '24631415369801570',
|
|
104
56
|
},
|
|
@@ -107,29 +59,25 @@ export default function(defaultFuncs: any, api: any, ctx: any) {
|
|
|
107
59
|
};
|
|
108
60
|
context.payload = JSON.stringify(context.payload);
|
|
109
61
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
new Error(`MQTT publish failed for emoji: ${err.message || err}`)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const emojiChangeEvent = {
|
|
122
|
-
type: 'thread_emoji_update',
|
|
123
|
-
threadID: threadID,
|
|
124
|
-
newEmoji: emoji,
|
|
125
|
-
senderID: _initiatorID,
|
|
126
|
-
BotID: ctx.userID,
|
|
127
|
-
timestamp: Date.now(),
|
|
128
|
-
};
|
|
129
|
-
_callback(null, emojiChangeEvent);
|
|
130
|
-
},
|
|
62
|
+
await new Promise<void>((resolve, reject) =>
|
|
63
|
+
ctx.mqttClient.publish(
|
|
64
|
+
'/ls_req',
|
|
65
|
+
JSON.stringify(context),
|
|
66
|
+
{ qos: 1, retain: false },
|
|
67
|
+
(err) =>
|
|
68
|
+
err
|
|
69
|
+
? reject(new Error(`MQTT publish failed for emoji: ${err.message || err}`))
|
|
70
|
+
: resolve(),
|
|
71
|
+
),
|
|
131
72
|
);
|
|
132
73
|
|
|
133
|
-
return
|
|
74
|
+
return {
|
|
75
|
+
type: 'thread_emoji_update',
|
|
76
|
+
threadID,
|
|
77
|
+
newEmoji: emojiChar,
|
|
78
|
+
senderID: _initiatorID,
|
|
79
|
+
BotID: ctx.userID,
|
|
80
|
+
timestamp: Date.now(),
|
|
81
|
+
};
|
|
134
82
|
};
|
|
135
83
|
}
|