fca-priyansh 19.0.0 → 20.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.
- package/.gitlab-ci.yml +22 -0
- package/CountTime.json +1 -0
- package/Extra/Balancer.js +49 -49
- package/Extra/BroadcastSystem.js +1 -0
- package/Extra/Bypass/956/index.js +233 -233
- package/Extra/Bypass/test/aaaa.json +169 -169
- package/Extra/Bypass/test/index.js +187 -187
- package/Extra/Database/index.js +468 -468
- package/Extra/ExtraAddons.js +82 -82
- package/Extra/ExtraFindUID.js +61 -61
- package/Extra/ExtraGetThread.js +365 -365
- package/Extra/ExtraScreenShot.js +430 -430
- package/Extra/ExtraUptimeRobot.js +142 -38
- package/Extra/Html/Classic/script.js +118 -118
- package/Extra/Html/Classic/style.css +7 -7
- package/Extra/Security/Base/Step_1.js +5 -5
- package/Extra/Security/Base/Step_2.js +22 -22
- package/Extra/Security/Base/Step_3.js +22 -22
- package/Extra/Security/Base/index.js +190 -190
- package/Extra/Security/Index.js +4 -4
- package/Extra/Security/Step_1.js +5 -5
- package/Extra/Security/Step_2.js +22 -22
- package/Extra/Security/Step_3.js +22 -22
- package/Extra/Src/Change_Environment.js +24 -24
- package/Extra/Src/Check_Update.js +66 -66
- package/Extra/Src/History.js +114 -114
- package/Extra/Src/Instant_Update.js +64 -64
- package/Extra/Src/Last-Run.js +64 -64
- package/Extra/Src/Premium.js +81 -81
- package/Extra/Src/Websocket.js +212 -212
- package/Extra/Src/uuid.js +137 -137
- package/Func/AcceptAgreement.js +31 -31
- package/Func/ClearCache.js +64 -64
- package/Func/ReportV1.js +54 -54
- package/LICENSE +21 -21
- package/Language/index.json +228 -228
- package/Main.js +1 -1290
- package/README.md +198 -198
- package/broadcast.js +1 -44
- package/errorHandler.js +151 -0
- package/index.js +1 -448
- package/logger.js +69 -66
- package/package.json +99 -98
- package/src/Dev_Horizon_Data.js +124 -124
- package/src/Dev_getThreadInfoOLD.js +421 -421
- package/src/Dev_shareTest2.js +68 -68
- package/src/Dev_shareTest3.js +71 -71
- package/src/Premium.js +24 -24
- package/src/Screenshot.js +82 -82
- package/src/addExternalModule.js +16 -16
- package/src/addUserToGroup.js +79 -79
- package/src/changeAdminStatus.js +79 -79
- package/src/changeArchivedStatus.js +41 -41
- package/src/changeAvt.js +84 -84
- package/src/changeBio.js +65 -65
- package/src/changeBlockedStatus.js +36 -36
- package/src/changeGroupImage.js +106 -106
- package/src/changeNickname.js +45 -45
- package/src/changeThreadColor.js +62 -62
- package/src/changeThreadEmoji.js +42 -42
- package/src/changeThreadTheme.js +263 -0
- package/src/comment.js +244 -0
- package/src/createNewGroup.js +70 -70
- package/src/createPoll.js +60 -60
- package/src/deleteMessage.js +45 -45
- package/src/deleteThread.js +43 -43
- package/src/editMessage.js +71 -53
- package/src/follow.js +119 -0
- package/src/forwardAttachment.js +48 -48
- package/src/friend.js +383 -0
- package/src/getAccessToken.js +27 -27
- package/src/getCurrentUserID.js +7 -7
- package/src/getEmojiUrl.js +27 -27
- package/src/getFriendsList.js +73 -73
- package/src/getMessage.js +102 -102
- package/src/getPendingFriendRequests.js +45 -0
- package/src/getThreadHistory.js +537 -537
- package/src/getThreadInfo.js +424 -423
- package/src/getThreadInfoOLD.js +421 -421
- package/src/getThreadList.js +213 -213
- package/src/getThreadMain.js +219 -219
- package/src/getThreadPictures.js +59 -59
- package/src/getUID.js +58 -58
- package/src/getUserID.js +62 -62
- package/src/getUserInfo.js +112 -112
- package/src/getUserInfoMain.js +64 -64
- package/src/getUserInfoV2.js +31 -31
- package/src/getUserInfoV3.js +62 -62
- package/src/getUserInfoV4.js +54 -54
- package/src/getUserInfoV5.js +60 -60
- package/src/handleFriendRequest.js +46 -46
- package/src/handleMessageRequest.js +49 -49
- package/src/httpGet.js +49 -49
- package/src/httpPost.js +48 -48
- package/src/httpPostFormData.js +40 -40
- package/src/listenMqtt.js +1 -956
- package/src/listenMqttV1.js +832 -846
- package/src/logout.js +68 -68
- package/src/markAsDelivered.js +48 -48
- package/src/markAsRead.js +70 -70
- package/src/markAsReadAll.js +42 -42
- package/src/markAsSeen.js +51 -51
- package/src/muteThread.js +47 -47
- package/src/notes.js +279 -0
- package/src/removeUserFromGroup.js +49 -49
- package/src/resolvePhotoUrl.js +37 -37
- package/src/searchForThread.js +43 -43
- package/src/sendMention.js +325 -0
- package/src/sendMessage.js +1 -386
- package/src/sendMqttMessage.js +70 -70
- package/src/sendTypingIndicator.js +79 -80
- package/src/setMessageReaction.js +109 -109
- package/src/setPostReaction.js +101 -101
- package/src/setTitle.js +74 -74
- package/src/share.js +98 -0
- package/src/shareContact.js +55 -55
- package/src/shareLink.js +58 -58
- package/src/stickers.js +525 -0
- package/src/story.js +267 -0
- package/src/threadColors.js +38 -38
- package/src/unfriend.js +43 -43
- package/src/unsendMessage.js +47 -47
- package/src/unsendMqttMessage.js +65 -65
- package/test/data/shareAttach.js +146 -146
- package/test/data/test.txt +7 -7
- package/test/example-config.json +18 -18
- package/test/test-page.js +140 -140
- package/test/test.js +385 -385
- package/test/testv2.js +2 -2
- package/userAgentManager.js +129 -0
- package/utils.js +1 -3077
- package/.github/workflows/publish.yml +0 -20
- package/Extra/Src/Release_Memory.js +0 -160
- package/Extra/Src/test.js +0 -28
- package/SECURITY.md +0 -17
package/src/stickers.js
ADDED
|
@@ -0,0 +1,525 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var utils = require("../utils");
|
|
4
|
+
var log = require("npmlog");
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Sticker API Module
|
|
8
|
+
* Provides access to Facebook's GraphQL-based sticker endpoints
|
|
9
|
+
* Made by @ChoruOfficial - Ported to fca-updated format
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Format the sticker pack list (store or tray)
|
|
14
|
+
* @param {object} data - Raw GraphQL response
|
|
15
|
+
* @returns {{ packs: Array<{id: string, name: string, thumbnail: string}>, page_info: object, store_id?: string }}
|
|
16
|
+
*/
|
|
17
|
+
function formatPackList(data) {
|
|
18
|
+
var trayPacks = data?.data?.picker_plugins?.sticker_picker?.sticker_store?.tray_packs?.edges;
|
|
19
|
+
var storePacks = data?.data?.viewer?.sticker_store?.available_packs?.edges;
|
|
20
|
+
|
|
21
|
+
var packData = storePacks || trayPacks;
|
|
22
|
+
if (!packData || !packData.edges) {
|
|
23
|
+
return { packs: [], page_info: { has_next_page: false } };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
var formattedPacks = packData.edges.map(function(edge) {
|
|
27
|
+
if (!edge.node) return null;
|
|
28
|
+
return {
|
|
29
|
+
id: edge.node.id,
|
|
30
|
+
name: edge.node.name,
|
|
31
|
+
thumbnail: edge.node.thumbnail_image?.uri
|
|
32
|
+
};
|
|
33
|
+
}).filter(Boolean);
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
packs: formattedPacks,
|
|
37
|
+
page_info: packData.page_info,
|
|
38
|
+
store_id: data?.data?.viewer?.sticker_store?.id
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Format search result stickers
|
|
44
|
+
* @param {object} data - Raw GraphQL response
|
|
45
|
+
* @returns {Array<Object>}
|
|
46
|
+
*/
|
|
47
|
+
function formatStickerSearchResults(data) {
|
|
48
|
+
var stickers = data?.data?.sticker_search?.sticker_results?.edges;
|
|
49
|
+
if (!stickers) return [];
|
|
50
|
+
|
|
51
|
+
return stickers.map(function(edge) {
|
|
52
|
+
if (!edge.node) return null;
|
|
53
|
+
return {
|
|
54
|
+
type: "sticker",
|
|
55
|
+
ID: edge.node.id,
|
|
56
|
+
url: edge.node.image?.uri,
|
|
57
|
+
animatedUrl: edge.node.animated_image?.uri,
|
|
58
|
+
packID: edge.node.pack?.id,
|
|
59
|
+
label: edge.node.label || edge.node.accessibility_label,
|
|
60
|
+
stickerID: edge.node.id
|
|
61
|
+
};
|
|
62
|
+
}).filter(Boolean);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Format sticker pack content
|
|
67
|
+
* @param {object} data - Raw GraphQL response
|
|
68
|
+
* @returns {Array<Object>}
|
|
69
|
+
*/
|
|
70
|
+
function formatStickerPackResults(data) {
|
|
71
|
+
var stickers = data?.data?.sticker_pack?.stickers?.edges;
|
|
72
|
+
if (!stickers) return [];
|
|
73
|
+
|
|
74
|
+
return stickers.map(function(edge) {
|
|
75
|
+
if (!edge.node) return null;
|
|
76
|
+
return {
|
|
77
|
+
type: "sticker",
|
|
78
|
+
ID: edge.node.id,
|
|
79
|
+
url: edge.node.image?.uri,
|
|
80
|
+
animatedUrl: edge.node.animated_image?.uri,
|
|
81
|
+
packID: edge.node.pack?.id,
|
|
82
|
+
label: edge.node.label || edge.node.accessibility_label,
|
|
83
|
+
stickerID: edge.node.id
|
|
84
|
+
};
|
|
85
|
+
}).filter(Boolean);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Format AI-generated stickers
|
|
90
|
+
* @param {object} data - Raw GraphQL response
|
|
91
|
+
* @returns {Array<Object>}
|
|
92
|
+
*/
|
|
93
|
+
function formatAiStickers(data) {
|
|
94
|
+
var stickers = data?.data?.xfb_trending_generated_ai_stickers?.nodes;
|
|
95
|
+
if (!stickers) return [];
|
|
96
|
+
|
|
97
|
+
return stickers.map(function(node) {
|
|
98
|
+
return {
|
|
99
|
+
type: "sticker",
|
|
100
|
+
ID: node.id,
|
|
101
|
+
url: node.url,
|
|
102
|
+
label: node.label,
|
|
103
|
+
stickerID: node.id
|
|
104
|
+
};
|
|
105
|
+
}).filter(Boolean);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
module.exports = function(defaultFuncs, api, ctx) {
|
|
109
|
+
/**
|
|
110
|
+
* Make a GraphQL request and handle login and error checking
|
|
111
|
+
* @param {object} form - Form data for the request
|
|
112
|
+
* @returns {Promise<object>}
|
|
113
|
+
*/
|
|
114
|
+
function makeRequest(form) {
|
|
115
|
+
return defaultFuncs
|
|
116
|
+
.post("https://www.facebook.com/api/graphql/", ctx.jar, form)
|
|
117
|
+
.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
|
|
118
|
+
.then(function(resData) {
|
|
119
|
+
if (!resData) {
|
|
120
|
+
throw new Error("GraphQL request returned no data.");
|
|
121
|
+
}
|
|
122
|
+
if (resData.errors) {
|
|
123
|
+
log.error("StickerAPI GraphQL Error", resData.errors[0].message);
|
|
124
|
+
throw resData.errors[0];
|
|
125
|
+
}
|
|
126
|
+
return resData;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
/**
|
|
132
|
+
* Search for stickers by keyword
|
|
133
|
+
* @param {string} query - Search term
|
|
134
|
+
* @param {function} callback - Optional callback(err, result)
|
|
135
|
+
* @returns {Promise<Array<Object>>}
|
|
136
|
+
*/
|
|
137
|
+
search: function(query, callback) {
|
|
138
|
+
var resolveFunc = function() {};
|
|
139
|
+
var rejectFunc = function() {};
|
|
140
|
+
var returnPromise = new Promise(function(resolve, reject) {
|
|
141
|
+
resolveFunc = resolve;
|
|
142
|
+
rejectFunc = reject;
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
if (!callback) {
|
|
146
|
+
callback = function(err, data) {
|
|
147
|
+
if (err) return rejectFunc(err);
|
|
148
|
+
resolveFunc(data);
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (!query) {
|
|
153
|
+
return callback({ error: "Search query is required." });
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
var form = {
|
|
157
|
+
fb_api_caller_class: 'RelayModern',
|
|
158
|
+
fb_api_req_friendly_name: 'CometStickerPickerSearchResultsRootQuery',
|
|
159
|
+
variables: JSON.stringify({
|
|
160
|
+
scale: 3,
|
|
161
|
+
search_query: query,
|
|
162
|
+
sticker_height: 128,
|
|
163
|
+
sticker_width: 128,
|
|
164
|
+
stickerInterface: "MESSAGES"
|
|
165
|
+
}),
|
|
166
|
+
doc_id: '24004987559125954'
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
makeRequest(form)
|
|
170
|
+
.then(function(res) {
|
|
171
|
+
var results = formatStickerSearchResults(res);
|
|
172
|
+
log.info("stickers.search", "Found " + results.length + " stickers for query: " + query);
|
|
173
|
+
callback(null, results);
|
|
174
|
+
})
|
|
175
|
+
.catch(function(err) {
|
|
176
|
+
log.error("stickers.search", err);
|
|
177
|
+
callback(err);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
return returnPromise;
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* List user's sticker packs
|
|
185
|
+
* @param {function} callback - Optional callback(err, result)
|
|
186
|
+
* @returns {Promise<Array<Object>>}
|
|
187
|
+
*/
|
|
188
|
+
listPacks: function(callback) {
|
|
189
|
+
var resolveFunc = function() {};
|
|
190
|
+
var rejectFunc = function() {};
|
|
191
|
+
var returnPromise = new Promise(function(resolve, reject) {
|
|
192
|
+
resolveFunc = resolve;
|
|
193
|
+
rejectFunc = reject;
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
if (!callback) {
|
|
197
|
+
callback = function(err, data) {
|
|
198
|
+
if (err) return rejectFunc(err);
|
|
199
|
+
resolveFunc(data);
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
var form = {
|
|
204
|
+
fb_api_caller_class: 'RelayModern',
|
|
205
|
+
fb_api_req_friendly_name: 'CometStickerPickerCardQuery',
|
|
206
|
+
variables: JSON.stringify({ scale: 3, stickerInterface: "MESSAGES" }),
|
|
207
|
+
doc_id: '10095807770482952'
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
makeRequest(form)
|
|
211
|
+
.then(function(res) {
|
|
212
|
+
var packs = formatPackList(res).packs;
|
|
213
|
+
log.info("stickers.listPacks", "Found " + packs.length + " user sticker packs");
|
|
214
|
+
callback(null, packs);
|
|
215
|
+
})
|
|
216
|
+
.catch(function(err) {
|
|
217
|
+
log.error("stickers.listPacks", err);
|
|
218
|
+
callback(err);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
return returnPromise;
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Get all available sticker packs from the store (with pagination)
|
|
226
|
+
* @param {function} callback - Optional callback(err, result)
|
|
227
|
+
* @returns {Promise<Array<Object>>}
|
|
228
|
+
*/
|
|
229
|
+
getStorePacks: function(callback) {
|
|
230
|
+
var resolveFunc = function() {};
|
|
231
|
+
var rejectFunc = function() {};
|
|
232
|
+
var returnPromise = new Promise(function(resolve, reject) {
|
|
233
|
+
resolveFunc = resolve;
|
|
234
|
+
rejectFunc = reject;
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
if (!callback) {
|
|
238
|
+
callback = function(err, data) {
|
|
239
|
+
if (err) return rejectFunc(err);
|
|
240
|
+
resolveFunc(data);
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
log.info("stickers.getStorePacks", "Starting to fetch all sticker packs from store...");
|
|
245
|
+
var allPacks = [];
|
|
246
|
+
|
|
247
|
+
var initialForm = {
|
|
248
|
+
fb_api_caller_class: 'RelayModern',
|
|
249
|
+
fb_api_req_friendly_name: 'CometStickersStoreDialogQuery',
|
|
250
|
+
variables: JSON.stringify({}),
|
|
251
|
+
doc_id: '29237828849196584'
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
makeRequest(initialForm)
|
|
255
|
+
.then(function(res) {
|
|
256
|
+
var result = formatPackList(res);
|
|
257
|
+
var packs = result.packs;
|
|
258
|
+
var page_info = result.page_info;
|
|
259
|
+
var store_id = result.store_id;
|
|
260
|
+
|
|
261
|
+
allPacks = allPacks.concat(packs);
|
|
262
|
+
log.info("stickers.getStorePacks", "Fetched first page with " + packs.length + " packs.");
|
|
263
|
+
|
|
264
|
+
// Handle pagination
|
|
265
|
+
function fetchNextPage() {
|
|
266
|
+
if (!page_info || !page_info.has_next_page) {
|
|
267
|
+
log.info("stickers.getStorePacks", "Finished fetching. Total unique packs found: " + allPacks.length);
|
|
268
|
+
return callback(null, allPacks);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
log.info("stickers.getStorePacks", "Fetching next page with cursor: " + page_info.end_cursor);
|
|
272
|
+
|
|
273
|
+
var paginatedForm = {
|
|
274
|
+
fb_api_caller_class: 'RelayModern',
|
|
275
|
+
fb_api_req_friendly_name: 'CometStickersStorePackListPaginationQuery',
|
|
276
|
+
variables: JSON.stringify({
|
|
277
|
+
count: 20,
|
|
278
|
+
cursor: page_info.end_cursor,
|
|
279
|
+
id: store_id
|
|
280
|
+
}),
|
|
281
|
+
doc_id: '9898634630218439'
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
makeRequest(paginatedForm)
|
|
285
|
+
.then(function(nextRes) {
|
|
286
|
+
var paginatedResult = formatPackList(nextRes);
|
|
287
|
+
allPacks = allPacks.concat(paginatedResult.packs);
|
|
288
|
+
page_info = paginatedResult.page_info;
|
|
289
|
+
log.info("stickers.getStorePacks", "Fetched " + paginatedResult.packs.length + " more packs. Total now: " + allPacks.length);
|
|
290
|
+
fetchNextPage();
|
|
291
|
+
})
|
|
292
|
+
.catch(function(err) {
|
|
293
|
+
log.error("stickers.getStorePacks", err);
|
|
294
|
+
callback(err);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
fetchNextPage();
|
|
299
|
+
})
|
|
300
|
+
.catch(function(err) {
|
|
301
|
+
log.error("stickers.getStorePacks", err);
|
|
302
|
+
callback(err);
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
return returnPromise;
|
|
306
|
+
},
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Merge user's and store sticker packs into one list
|
|
310
|
+
* @param {function} callback - Optional callback(err, result)
|
|
311
|
+
* @returns {Promise<Array<Object>>}
|
|
312
|
+
*/
|
|
313
|
+
listAllPacks: function(callback) {
|
|
314
|
+
var resolveFunc = function() {};
|
|
315
|
+
var rejectFunc = function() {};
|
|
316
|
+
var returnPromise = new Promise(function(resolve, reject) {
|
|
317
|
+
resolveFunc = resolve;
|
|
318
|
+
rejectFunc = reject;
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
if (!callback) {
|
|
322
|
+
callback = function(err, data) {
|
|
323
|
+
if (err) return rejectFunc(err);
|
|
324
|
+
resolveFunc(data);
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
var self = this;
|
|
329
|
+
|
|
330
|
+
Promise.all([
|
|
331
|
+
new Promise(function(resolve, reject) {
|
|
332
|
+
self.listPacks(function(err, data) {
|
|
333
|
+
if (err) return reject(err);
|
|
334
|
+
resolve(data);
|
|
335
|
+
});
|
|
336
|
+
}),
|
|
337
|
+
new Promise(function(resolve, reject) {
|
|
338
|
+
self.getStorePacks(function(err, data) {
|
|
339
|
+
if (err) return reject(err);
|
|
340
|
+
resolve(data);
|
|
341
|
+
});
|
|
342
|
+
})
|
|
343
|
+
])
|
|
344
|
+
.then(function(results) {
|
|
345
|
+
var myPacks = results[0];
|
|
346
|
+
var storePacks = results[1];
|
|
347
|
+
|
|
348
|
+
var allPacksMap = {};
|
|
349
|
+
myPacks.forEach(function(pack) {
|
|
350
|
+
allPacksMap[pack.id] = pack;
|
|
351
|
+
});
|
|
352
|
+
storePacks.forEach(function(pack) {
|
|
353
|
+
allPacksMap[pack.id] = pack;
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
var allPacks = Object.keys(allPacksMap).map(function(key) {
|
|
357
|
+
return allPacksMap[key];
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
log.info("stickers.listAllPacks", "Total unique packs: " + allPacks.length);
|
|
361
|
+
callback(null, allPacks);
|
|
362
|
+
})
|
|
363
|
+
.catch(function(err) {
|
|
364
|
+
log.error("stickers.listAllPacks", err);
|
|
365
|
+
callback(err);
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
return returnPromise;
|
|
369
|
+
},
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Add a sticker pack by ID
|
|
373
|
+
* @param {string} packID - The ID of the sticker pack
|
|
374
|
+
* @param {function} callback - Optional callback(err, result)
|
|
375
|
+
* @returns {Promise<Object>}
|
|
376
|
+
*/
|
|
377
|
+
addPack: function(packID, callback) {
|
|
378
|
+
var resolveFunc = function() {};
|
|
379
|
+
var rejectFunc = function() {};
|
|
380
|
+
var returnPromise = new Promise(function(resolve, reject) {
|
|
381
|
+
resolveFunc = resolve;
|
|
382
|
+
rejectFunc = reject;
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
if (!callback) {
|
|
386
|
+
callback = function(err, data) {
|
|
387
|
+
if (err) return rejectFunc(err);
|
|
388
|
+
resolveFunc(data);
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (!packID) {
|
|
393
|
+
return callback({ error: "Pack ID is required." });
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
var form = {
|
|
397
|
+
fb_api_caller_class: 'RelayModern',
|
|
398
|
+
fb_api_req_friendly_name: 'CometStickersStorePackMutationAddMutation',
|
|
399
|
+
variables: JSON.stringify({
|
|
400
|
+
input: {
|
|
401
|
+
pack_id: packID,
|
|
402
|
+
actor_id: ctx.userID,
|
|
403
|
+
client_mutation_id: Math.round(Math.random() * 10).toString()
|
|
404
|
+
}
|
|
405
|
+
}),
|
|
406
|
+
doc_id: '9877489362345320'
|
|
407
|
+
};
|
|
408
|
+
|
|
409
|
+
makeRequest(form)
|
|
410
|
+
.then(function(res) {
|
|
411
|
+
var pack = res.data.sticker_pack_add.sticker_pack;
|
|
412
|
+
log.info("stickers.addPack", "Successfully added sticker pack: " + packID);
|
|
413
|
+
callback(null, pack);
|
|
414
|
+
})
|
|
415
|
+
.catch(function(err) {
|
|
416
|
+
log.error("stickers.addPack", err);
|
|
417
|
+
callback(err);
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
return returnPromise;
|
|
421
|
+
},
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* Get all stickers in a pack
|
|
425
|
+
* @param {string} packID - Sticker pack ID
|
|
426
|
+
* @param {function} callback - Optional callback(err, result)
|
|
427
|
+
* @returns {Promise<Array<Object>>}
|
|
428
|
+
*/
|
|
429
|
+
getStickersInPack: function(packID, callback) {
|
|
430
|
+
var resolveFunc = function() {};
|
|
431
|
+
var rejectFunc = function() {};
|
|
432
|
+
var returnPromise = new Promise(function(resolve, reject) {
|
|
433
|
+
resolveFunc = resolve;
|
|
434
|
+
rejectFunc = reject;
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
if (!callback) {
|
|
438
|
+
callback = function(err, data) {
|
|
439
|
+
if (err) return rejectFunc(err);
|
|
440
|
+
resolveFunc(data);
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
if (!packID) {
|
|
445
|
+
return callback({ error: "Pack ID is required." });
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
var form = {
|
|
449
|
+
fb_api_caller_class: 'RelayModern',
|
|
450
|
+
fb_api_req_friendly_name: 'CometStickerPickerPackContentRootQuery',
|
|
451
|
+
variables: JSON.stringify({
|
|
452
|
+
packID: packID,
|
|
453
|
+
stickerWidth: 128,
|
|
454
|
+
stickerHeight: 128,
|
|
455
|
+
scale: 3
|
|
456
|
+
}),
|
|
457
|
+
doc_id: '23982341384707469'
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
makeRequest(form)
|
|
461
|
+
.then(function(res) {
|
|
462
|
+
var stickers = formatStickerPackResults(res);
|
|
463
|
+
log.info("stickers.getStickersInPack", "Found " + stickers.length + " stickers in pack: " + packID);
|
|
464
|
+
callback(null, stickers);
|
|
465
|
+
})
|
|
466
|
+
.catch(function(err) {
|
|
467
|
+
log.error("stickers.getStickersInPack", err);
|
|
468
|
+
callback(err);
|
|
469
|
+
});
|
|
470
|
+
|
|
471
|
+
return returnPromise;
|
|
472
|
+
},
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Get trending AI-generated stickers
|
|
476
|
+
* @param {Object} options - Options object { limit: number }
|
|
477
|
+
* @param {function} callback - Optional callback(err, result)
|
|
478
|
+
* @returns {Promise<Array<Object>>}
|
|
479
|
+
*/
|
|
480
|
+
getAiStickers: function(options, callback) {
|
|
481
|
+
var resolveFunc = function() {};
|
|
482
|
+
var rejectFunc = function() {};
|
|
483
|
+
var returnPromise = new Promise(function(resolve, reject) {
|
|
484
|
+
resolveFunc = resolve;
|
|
485
|
+
rejectFunc = reject;
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
// Handle optional parameters
|
|
489
|
+
if (typeof options === 'function') {
|
|
490
|
+
callback = options;
|
|
491
|
+
options = {};
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
options = options || {};
|
|
495
|
+
var limit = options.limit || 10;
|
|
496
|
+
|
|
497
|
+
if (!callback) {
|
|
498
|
+
callback = function(err, data) {
|
|
499
|
+
if (err) return rejectFunc(err);
|
|
500
|
+
resolveFunc(data);
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
var form = {
|
|
505
|
+
fb_api_caller_class: 'RelayModern',
|
|
506
|
+
fb_api_req_friendly_name: 'CometStickerPickerStickerGeneratedCardQuery',
|
|
507
|
+
variables: JSON.stringify({ limit: limit }),
|
|
508
|
+
doc_id: '24151467751156443'
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
makeRequest(form)
|
|
512
|
+
.then(function(res) {
|
|
513
|
+
var stickers = formatAiStickers(res);
|
|
514
|
+
log.info("stickers.getAiStickers", "Found " + stickers.length + " AI stickers");
|
|
515
|
+
callback(null, stickers);
|
|
516
|
+
})
|
|
517
|
+
.catch(function(err) {
|
|
518
|
+
log.error("stickers.getAiStickers", err);
|
|
519
|
+
callback(err);
|
|
520
|
+
});
|
|
521
|
+
|
|
522
|
+
return returnPromise;
|
|
523
|
+
}
|
|
524
|
+
};
|
|
525
|
+
};
|