stfca 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/LICENSE-MIT +4 -0
  2. package/README.md +325 -0
  3. package/index.d.ts +615 -0
  4. package/index.js +1 -0
  5. package/module/config.js +33 -0
  6. package/module/login.js +48 -0
  7. package/module/loginHelper.js +722 -0
  8. package/module/options.js +44 -0
  9. package/package.json +69 -0
  10. package/src/api/action/addExternalModule.js +25 -0
  11. package/src/api/action/changeAvatar.js +137 -0
  12. package/src/api/action/changeBio.js +75 -0
  13. package/src/api/action/getCurrentUserID.js +7 -0
  14. package/src/api/action/handleFriendRequest.js +57 -0
  15. package/src/api/action/logout.js +76 -0
  16. package/src/api/action/refreshFb_dtsg.js +71 -0
  17. package/src/api/action/setPostReaction.js +106 -0
  18. package/src/api/action/unfriend.js +54 -0
  19. package/src/api/http/httpGet.js +46 -0
  20. package/src/api/http/httpPost.js +52 -0
  21. package/src/api/http/postFormData.js +47 -0
  22. package/src/api/messaging/addUserToGroup.js +68 -0
  23. package/src/api/messaging/changeAdminStatus.js +122 -0
  24. package/src/api/messaging/changeArchivedStatus.js +55 -0
  25. package/src/api/messaging/changeBlockedStatus.js +48 -0
  26. package/src/api/messaging/changeGroupImage.js +90 -0
  27. package/src/api/messaging/changeNickname.js +70 -0
  28. package/src/api/messaging/changeThreadColor.js +79 -0
  29. package/src/api/messaging/changeThreadEmoji.js +106 -0
  30. package/src/api/messaging/createNewGroup.js +88 -0
  31. package/src/api/messaging/createPoll.js +43 -0
  32. package/src/api/messaging/deleteMessage.js +56 -0
  33. package/src/api/messaging/deleteThread.js +56 -0
  34. package/src/api/messaging/editMessage.js +68 -0
  35. package/src/api/messaging/forwardAttachment.js +51 -0
  36. package/src/api/messaging/getEmojiUrl.js +29 -0
  37. package/src/api/messaging/getFriendsList.js +82 -0
  38. package/src/api/messaging/getMessage.js +829 -0
  39. package/src/api/messaging/handleMessageRequest.js +65 -0
  40. package/src/api/messaging/markAsDelivered.js +57 -0
  41. package/src/api/messaging/markAsRead.js +88 -0
  42. package/src/api/messaging/markAsReadAll.js +49 -0
  43. package/src/api/messaging/markAsSeen.js +61 -0
  44. package/src/api/messaging/muteThread.js +50 -0
  45. package/src/api/messaging/removeUserFromGroup.js +105 -0
  46. package/src/api/messaging/resolvePhotoUrl.js +43 -0
  47. package/src/api/messaging/searchForThread.js +52 -0
  48. package/src/api/messaging/sendMessage.js +379 -0
  49. package/src/api/messaging/sendMessageMqtt.js +323 -0
  50. package/src/api/messaging/sendTypingIndicator.js +67 -0
  51. package/src/api/messaging/setMessageReaction.js +75 -0
  52. package/src/api/messaging/setTitle.js +119 -0
  53. package/src/api/messaging/shareContact.js +49 -0
  54. package/src/api/messaging/threadColors.js +128 -0
  55. package/src/api/messaging/unsendMessage.js +81 -0
  56. package/src/api/messaging/uploadAttachment.js +95 -0
  57. package/src/api/socket/core/connectMqtt.js +179 -0
  58. package/src/api/socket/core/getSeqID.js +25 -0
  59. package/src/api/socket/core/getTaskResponseData.js +22 -0
  60. package/src/api/socket/core/markDelivery.js +12 -0
  61. package/src/api/socket/core/parseDelta.js +351 -0
  62. package/src/api/socket/detail/buildStream.js +208 -0
  63. package/src/api/socket/detail/constants.js +24 -0
  64. package/src/api/socket/listenMqtt.js +133 -0
  65. package/src/api/threads/getThreadHistory.js +664 -0
  66. package/src/api/threads/getThreadInfo.js +358 -0
  67. package/src/api/threads/getThreadList.js +248 -0
  68. package/src/api/threads/getThreadPictures.js +78 -0
  69. package/src/api/users/getUserID.js +65 -0
  70. package/src/api/users/getUserInfo.js +319 -0
  71. package/src/api/users/getUserInfoV2.js +133 -0
  72. package/src/core/sendReqMqtt.js +63 -0
  73. package/src/database/models/index.js +49 -0
  74. package/src/database/models/thread.js +31 -0
  75. package/src/database/models/user.js +32 -0
  76. package/src/database/threadData.js +98 -0
  77. package/src/database/userData.js +89 -0
  78. package/src/utils/client.js +214 -0
  79. package/src/utils/constants.js +23 -0
  80. package/src/utils/format.js +1111 -0
  81. package/src/utils/headers.js +41 -0
  82. package/src/utils/request.js +215 -0
@@ -0,0 +1,829 @@
1
+ "use strict";
2
+
3
+ const log = require("npmlog");
4
+ const { _formatAttachment } = require("../../utils/format");
5
+ const { parseAndCheckLogin } = require("../../utils/client");
6
+ function formatMessage(threadID, data) {
7
+ switch (data.__typename) {
8
+ case "ThreadNameMessage":
9
+ return {
10
+ type: "event",
11
+ threadID: threadID,
12
+ messageID: data.message_id,
13
+ logMessageType: "log:thread-name",
14
+ logMessageData: {
15
+ name: data.thread_name
16
+ },
17
+ logMessageBody: data.snippet,
18
+ timestamp: data.timestamp_precise,
19
+ author: data.message_sender.id
20
+ };
21
+ case "ThreadImageMessage":
22
+ const metadata = data.image_with_metadata;
23
+ return {
24
+ type: "event",
25
+ threadID: threadID,
26
+ messageID: data.message_id,
27
+ logMessageType: "log:thread-image",
28
+ logMessageData: metadata
29
+ ? {
30
+ attachmentID: metadata.legacy_attachment_id,
31
+ width: metadata.original_dimensions.x,
32
+ height: metadata.original_dimensions.y,
33
+ url: metadata.preview.uri
34
+ }
35
+ : {
36
+ attachmentID: null,
37
+ width: null,
38
+ height: null,
39
+ url: null
40
+ },
41
+ logMessageBody: data.snippet,
42
+ timestamp: data.timestamp_precise,
43
+ author: data.message_sender.id
44
+ };
45
+ case "GenericAdminTextMessage":
46
+ switch (data.extensible_message_admin_text_type) {
47
+ case "CHANGE_THREAD_THEME":
48
+ return {
49
+ type: "event",
50
+ threadID: threadID,
51
+ messageID: data.message_id,
52
+ logMessageType: "log:thread-color",
53
+ logMessageData: colors.find(
54
+ color =>
55
+ color.theme_color ===
56
+ data.extensible_message_admin_text.theme_color
57
+ ) || {
58
+ theme_color: data.extensible_message_admin_text.theme_color,
59
+ theme_id: null,
60
+ theme_emoji: null,
61
+ gradient: null,
62
+ should_show_icon: null,
63
+ theme_name_with_subtitle: null
64
+ },
65
+ logMessageBody: data.snippet,
66
+ timestamp: data.timestamp_precise,
67
+ author: data.message_sender.id
68
+ };
69
+ case "CHANGE_THREAD_ICON":
70
+ const thread_icon = data.extensible_message_admin_text.thread_icon;
71
+ return {
72
+ type: "event",
73
+ threadID: threadID,
74
+ messageID: data.message_id,
75
+ logMessageType: "log:thread-icon",
76
+ logMessageData: {
77
+ thread_icon_url: `https://static.xx.fbcdn.net/images/emoji.php/v9/t3c/1/16/${thread_icon
78
+ .codePointAt(0)
79
+ .toString(16)}.png`,
80
+ thread_icon: thread_icon
81
+ },
82
+ logMessageBody: data.snippet,
83
+ timestamp: data.timestamp_precise,
84
+ author: data.message_sender.id
85
+ };
86
+ case "CHANGE_THREAD_NICKNAME":
87
+ return {
88
+ type: "event",
89
+ threadID: threadID,
90
+ messageID: data.message_id,
91
+ logMessageType: "log:user-nickname",
92
+ logMessageData: {
93
+ nickname: data.extensible_message_admin_text.nickname,
94
+ participant_id: data.extensible_message_admin_text.participant_id
95
+ },
96
+ logMessageBody: data.snippet,
97
+ timestamp: data.timestamp_precise,
98
+ author: data.message_sender.id
99
+ };
100
+ case "GROUP_POLL":
101
+ const question = data.extensible_message_admin_text.question;
102
+ return {
103
+ type: "event",
104
+ threadID: threadID,
105
+ messageID: data.message_id,
106
+ logMessageType: "log:thread-poll",
107
+ logMessageData: {
108
+ question_json: JSON.stringify({
109
+ id: question.id,
110
+ text: question.text,
111
+ total_count: data.extensible_message_admin_text.total_count,
112
+ viewer_has_voted: question.viewer_has_voted,
113
+ question_type: "",
114
+ creator_id: data.message_sender.id,
115
+ options: question.options.nodes.map(option => ({
116
+ id: option.id,
117
+ text: option.text,
118
+ total_count: option.voters.nodes.length,
119
+ viewer_has_voted: option.viewer_has_voted,
120
+ voters: option.voters.nodes.map(voter => voter.id)
121
+ }))
122
+ }),
123
+ event_type: data.extensible_message_admin_text.event_type.toLowerCase(),
124
+ question_id: question.id
125
+ },
126
+ logMessageBody: data.snippet,
127
+ timestamp: data.timestamp_precise,
128
+ author: data.message_sender.id
129
+ };
130
+ default:
131
+ throw new Error(
132
+ `Unknown admin text type: "${data.extensible_message_admin_text_type}", if this happens to you let me know when it happens. Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.`
133
+ );
134
+ }
135
+ case "UserMessage":
136
+ return {
137
+ senderID: data.message_sender.id,
138
+ body: data.message.text,
139
+ threadID: threadID,
140
+ messageID: data.message_id,
141
+ reactions: data.message_reactions.map(r => ({
142
+ [r.user.id]: r.reaction
143
+ })),
144
+ attachments:
145
+ data.blob_attachments && data.blob_attachments.length > 0
146
+ ? data.blob_attachments.length.map(att => {
147
+ let x;
148
+ try {
149
+ x = _formatAttachment(att);
150
+ } catch (ex) {
151
+ x = att;
152
+ x.error = ex;
153
+ x.type = "unknown";
154
+ }
155
+ return x;
156
+ })
157
+ : data.extensible_attachment &&
158
+ Object.keys(data.extensible_attachment).length > 0
159
+ ? [
160
+ {
161
+ type: "share",
162
+ ID: data.extensible_attachment.legacy_attachment_id,
163
+ url: data.extensible_attachment.story_attachment.url,
164
+
165
+ title:
166
+ data.extensible_attachment.story_attachment
167
+ .title_with_entities.text,
168
+ description:
169
+ data.extensible_attachment.story_attachment.description
170
+ .text,
171
+ source: data.extensible_attachment.story_attachment.source,
172
+
173
+ image: (
174
+ (data.extensible_attachment.story_attachment.media || {})
175
+ .image || {}
176
+ ).uri,
177
+ width: (
178
+ (data.extensible_attachment.story_attachment.media || {})
179
+ .image || {}
180
+ ).width,
181
+ height: (
182
+ (data.extensible_attachment.story_attachment.media || {})
183
+ .image || {}
184
+ ).height,
185
+ playable:
186
+ (data.extensible_attachment.story_attachment.media || {})
187
+ .is_playable || false,
188
+ duration:
189
+ (data.extensible_attachment.story_attachment.media || {})
190
+ .playable_duration_in_ms || 0,
191
+
192
+ subattachments: data.extensible_attachment.subattachments,
193
+ properties:
194
+ data.extensible_attachment.story_attachment.properties
195
+ }
196
+ ]
197
+ : [],
198
+ mentions: data.message.ranges.map(mention => ({
199
+ [mention.entity.id]: data.message.text.substring(
200
+ mention.offset,
201
+ mention.offset + mention.length
202
+ )
203
+ })),
204
+ timestamp: data.timestamp_precise
205
+ };
206
+ default:
207
+ throw new Error(
208
+ `Unknown message type: "${data.__typename}", if this happens to you let me know when it happens. Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.`
209
+ );
210
+ // If this happens to you let me know when it happens
211
+ // Please open an issue at https://github.com/ntkhang03/fb-chat-api/issues.
212
+ // return Object.assign({ type: "unknown", data });
213
+ }
214
+ }
215
+
216
+ function parseDelta(threadID, delta) {
217
+ if (delta.replied_to_message) {
218
+ return Object.assign(
219
+ {
220
+ type: "message_reply"
221
+ },
222
+ formatMessage(threadID, delta),
223
+ {
224
+ messageReply: formatMessage(threadID, delta.replied_to_message.message)
225
+ }
226
+ );
227
+ } else {
228
+ return formatMessage(threadID, delta);
229
+ }
230
+ }
231
+
232
+ module.exports = function(defaultFuncs, api, ctx) {
233
+ return function getMessage(threadID, messageID, callback) {
234
+ let resolveFunc = function() {};
235
+ let rejectFunc = function() {};
236
+ const returnPromise = new Promise(function(resolve, reject) {
237
+ resolveFunc = resolve;
238
+ rejectFunc = reject;
239
+ });
240
+
241
+ if (!callback) {
242
+ callback = function(err, info) {
243
+ if (err) return rejectFunc(err);
244
+ resolveFunc(info);
245
+ };
246
+ }
247
+
248
+ if (!threadID || !messageID) {
249
+ return callback({ error: "getMessage: need threadID and messageID" });
250
+ }
251
+
252
+ const form = {
253
+ av: ctx.globalOptions.pageID,
254
+ queries: JSON.stringify({
255
+ o0: {
256
+ //This doc_id is valid as of ? (prob January 18, 2020)
257
+ doc_id: "1768656253222505",
258
+ query_params: {
259
+ thread_and_message_id: {
260
+ thread_id: threadID,
261
+ message_id: messageID
262
+ }
263
+ }
264
+ }
265
+ })
266
+ };
267
+
268
+ defaultFuncs
269
+ .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
270
+ .then(parseAndCheckLogin(ctx, defaultFuncs))
271
+ .then(resData => {
272
+ if (resData[resData.length - 1].error_results > 0) {
273
+ throw resData[0].o0.errors;
274
+ }
275
+
276
+ if (resData[resData.length - 1].successful_results === 0) {
277
+ throw {
278
+ error: "getMessage: there was no successful_results",
279
+ res: resData
280
+ };
281
+ }
282
+
283
+ const fetchData = resData[0].o0.data.message;
284
+ if (fetchData) {
285
+ callback(null, parseDelta(threadID, fetchData));
286
+ } else {
287
+ throw fetchData;
288
+ }
289
+ })
290
+ .catch(err => {
291
+ log.error("getMessage", err);
292
+ callback(err);
293
+ });
294
+
295
+ return returnPromise;
296
+ };
297
+ };
298
+
299
+ const colors = [
300
+ {
301
+ theme_color: "FF000000",
302
+ theme_id: "788274591712841",
303
+ theme_emoji: "🖤",
304
+ gradient: '["FFF0F0F0"]',
305
+ should_show_icon: "",
306
+ theme_name_with_subtitle: "Monochrome"
307
+ },
308
+ {
309
+ theme_color: "FFFF5CA1",
310
+ theme_id: "169463077092846",
311
+ theme_emoji: null,
312
+ gradient: null,
313
+ should_show_icon: "1",
314
+ theme_name_with_subtitle: "Hot Pink"
315
+ },
316
+ {
317
+ theme_color: "FF2825B5",
318
+ theme_id: "271607034185782",
319
+ theme_emoji: null,
320
+ gradient: '["FF5E007E","FF331290","FF2825B5"]',
321
+ should_show_icon: "1",
322
+ theme_name_with_subtitle: "Shadow"
323
+ },
324
+ {
325
+ theme_color: "FFD9A900",
326
+ theme_id: "2533652183614000",
327
+ theme_emoji: null,
328
+ gradient: '["FF550029","FFAA3232","FFD9A900"]',
329
+ should_show_icon: "1",
330
+ theme_name_with_subtitle: "Maple"
331
+ },
332
+ {
333
+ theme_color: "FFFB45DE",
334
+ theme_id: "2873642949430623",
335
+ theme_emoji: null,
336
+ gradient: null,
337
+ should_show_icon: "1",
338
+ theme_name_with_subtitle: "Tulip"
339
+ },
340
+ {
341
+ theme_color: "FF5E007E",
342
+ theme_id: "193497045377796",
343
+ theme_emoji: null,
344
+ gradient: null,
345
+ should_show_icon: "1",
346
+ theme_name_with_subtitle: "Grape"
347
+ },
348
+ {
349
+ theme_color: "FF7AA286",
350
+ theme_id: "1455149831518874",
351
+ theme_emoji: "🌑",
352
+ gradient: '["FF25C0E1","FFCE832A"]',
353
+ should_show_icon: "",
354
+ theme_name_with_subtitle: "Dune"
355
+ },
356
+ {
357
+ theme_color: "FFFAAF00",
358
+ theme_id: "672058580051520",
359
+ theme_emoji: null,
360
+ gradient: null,
361
+ should_show_icon: "1",
362
+ theme_name_with_subtitle: "Honey"
363
+ },
364
+ {
365
+ theme_color: "FF0084FF",
366
+ theme_id: "196241301102133",
367
+ theme_emoji: null,
368
+ gradient: null,
369
+ should_show_icon: "1",
370
+ theme_name_with_subtitle: "Default Blue"
371
+ },
372
+ {
373
+ theme_color: "FFFFC300",
374
+ theme_id: "174636906462322",
375
+ theme_emoji: null,
376
+ gradient: null,
377
+ should_show_icon: "1",
378
+ theme_name_with_subtitle: "Yellow"
379
+ },
380
+ {
381
+ theme_color: "FF44BEC7",
382
+ theme_id: "1928399724138152",
383
+ theme_emoji: null,
384
+ gradient: null,
385
+ should_show_icon: "1",
386
+ theme_name_with_subtitle: "Teal Blue"
387
+ },
388
+ {
389
+ theme_color: "FF7646FF",
390
+ theme_id: "234137870477637",
391
+ theme_emoji: null,
392
+ gradient: null,
393
+ should_show_icon: "1",
394
+ theme_name_with_subtitle: "Bright Purple"
395
+ },
396
+ {
397
+ theme_color: "FFF25C54",
398
+ theme_id: "3022526817824329",
399
+ theme_emoji: null,
400
+ gradient: null,
401
+ should_show_icon: "1",
402
+ theme_name_with_subtitle: "Peach"
403
+ },
404
+ {
405
+ theme_color: "FFF01D6A",
406
+ theme_id: "724096885023603",
407
+ theme_emoji: null,
408
+ gradient: '["FF005FFF","FF9200FF","FFFF2E19"]',
409
+ should_show_icon: "1",
410
+ theme_name_with_subtitle: "Berry"
411
+ },
412
+ {
413
+ theme_color: "FFFF7CA8",
414
+ theme_id: "624266884847972",
415
+ theme_emoji: null,
416
+ gradient: '["FFFF8FB2","FFA797FF","FF00E5FF"]',
417
+ should_show_icon: "1",
418
+ theme_name_with_subtitle: "Candy"
419
+ },
420
+ {
421
+ theme_color: "FF6E5B04",
422
+ theme_id: "365557122117011",
423
+ theme_emoji: "💛",
424
+ gradient: '["FFED9F9A","FFED9F9A","FFED9F9A"]',
425
+ should_show_icon: "",
426
+ theme_name_with_subtitle: "Support"
427
+ },
428
+ {
429
+ theme_color: "FF0052CD",
430
+ theme_id: "230032715012014",
431
+ theme_emoji: "âœŒī¸",
432
+ gradient: '["FF0052CD","FF00A1E6","FF0052CD"]',
433
+ should_show_icon: "",
434
+ theme_name_with_subtitle: "Tie-Dye"
435
+ },
436
+ {
437
+ theme_color: "FF601DDD",
438
+ theme_id: "1060619084701625",
439
+ theme_emoji: "â˜ī¸",
440
+ gradient: '["FFCA34FF","FF302CFF","FFBA009C"]',
441
+ should_show_icon: "",
442
+ theme_name_with_subtitle: "Lo-Fi"
443
+ },
444
+ {
445
+ theme_color: "FF0099FF",
446
+ theme_id: "3273938616164733",
447
+ theme_emoji: null,
448
+ gradient: null,
449
+ should_show_icon: "1",
450
+ theme_name_with_subtitle: "Classic"
451
+ },
452
+ {
453
+ theme_color: "FF1ADB5B",
454
+ theme_id: "370940413392601",
455
+ theme_emoji: null,
456
+ gradient: '["FFFFD200","FF6EDF00","FF00DFBB"]',
457
+ should_show_icon: "1",
458
+ theme_name_with_subtitle: "Citrus"
459
+ },
460
+ {
461
+ theme_color: "FFD696BB",
462
+ theme_id: "2058653964378557",
463
+ theme_emoji: null,
464
+ gradient: null,
465
+ should_show_icon: "1",
466
+ theme_name_with_subtitle: "Lavender Purple"
467
+ },
468
+ {
469
+ theme_color: "FFC03232",
470
+ theme_id: "1059859811490132",
471
+ theme_emoji: "🙃",
472
+ gradient: '["FFDB4040","FFA32424"]',
473
+ should_show_icon: "",
474
+ theme_name_with_subtitle: "Stranger Things"
475
+ },
476
+ {
477
+ theme_color: "FFFA3C4C",
478
+ theme_id: "2129984390566328",
479
+ theme_emoji: null,
480
+ gradient: null,
481
+ should_show_icon: "1",
482
+ theme_name_with_subtitle: "Red"
483
+ },
484
+ {
485
+ theme_color: "FF13CF13",
486
+ theme_id: "2136751179887052",
487
+ theme_emoji: null,
488
+ gradient: null,
489
+ should_show_icon: "1",
490
+ theme_name_with_subtitle: "Green"
491
+ },
492
+ {
493
+ theme_color: "FFFF7E29",
494
+ theme_id: "175615189761153",
495
+ theme_emoji: null,
496
+ gradient: null,
497
+ should_show_icon: "1",
498
+ theme_name_with_subtitle: "Orange"
499
+ },
500
+ {
501
+ theme_color: "FFE68585",
502
+ theme_id: "980963458735625",
503
+ theme_emoji: null,
504
+ gradient: null,
505
+ should_show_icon: "1",
506
+ theme_name_with_subtitle: "Coral Pink"
507
+ },
508
+ {
509
+ theme_color: "FF20CEF5",
510
+ theme_id: "2442142322678320",
511
+ theme_emoji: null,
512
+ gradient: null,
513
+ should_show_icon: "1",
514
+ theme_name_with_subtitle: "Aqua Blue"
515
+ },
516
+ {
517
+ theme_color: "FF0EDCDE",
518
+ theme_id: "417639218648241",
519
+ theme_emoji: null,
520
+ gradient: '["FF19C9FF","FF00E6D2","FF0EE6B7"]',
521
+ should_show_icon: "1",
522
+ theme_name_with_subtitle: "Aqua"
523
+ },
524
+ {
525
+ theme_color: "FFFF9C19",
526
+ theme_id: "930060997172551",
527
+ theme_emoji: null,
528
+ gradient: '["FFFFDC2D","FFFF9616","FFFF4F00"]',
529
+ should_show_icon: "1",
530
+ theme_name_with_subtitle: "Mango"
531
+ },
532
+ {
533
+ theme_color: "FFF01D6A",
534
+ theme_id: "164535220883264",
535
+ theme_emoji: null,
536
+ gradient: '["FF005FFF","FF9200FF","FFFF2E19"]',
537
+ should_show_icon: "1",
538
+ theme_name_with_subtitle: "Berry"
539
+ },
540
+ {
541
+ theme_color: "FFFF7CA8",
542
+ theme_id: "205488546921017",
543
+ theme_emoji: null,
544
+ gradient: '["FFFF8FB2","FFA797FF","FF00E5FF"]',
545
+ should_show_icon: "1",
546
+ theme_name_with_subtitle: "Candy"
547
+ },
548
+ {
549
+ theme_color: "FFFF6F07",
550
+ theme_id: "1833559466821043",
551
+ theme_emoji: "🌎",
552
+ gradient: '["FFFF6F07"]',
553
+ should_show_icon: "",
554
+ theme_name_with_subtitle: "Earth"
555
+ },
556
+ {
557
+ theme_color: "FF0B0085",
558
+ theme_id: "339021464972092",
559
+ theme_emoji: "🔈",
560
+ gradient: '["FF2FA9E4","FF648FEB","FF9B73F2"]',
561
+ should_show_icon: "",
562
+ theme_name_with_subtitle: "Music"
563
+ },
564
+ {
565
+ theme_color: "FF8A39EF",
566
+ theme_id: "1652456634878319",
567
+ theme_emoji: "đŸŗī¸â€đŸŒˆ",
568
+ gradient:
569
+ '["FFFF0018","FFFF0417","FFFF310E","FFFF5D06","FFFF7A01","FFFF8701","FFFFB001","FFD9C507","FF79C718","FF01C92D","FF01BE69","FF01B3AA","FF0BA1DF","FF3F77E6","FF724CEC","FF8A39EF","FF8A39EF"]',
570
+ should_show_icon: "",
571
+ theme_name_with_subtitle: "Pride"
572
+ },
573
+ {
574
+ theme_color: "FF004D7C",
575
+ theme_id: "538280997628317",
576
+ theme_emoji: "🌀",
577
+ gradient: '["FF931410","FF931410","FF931410"]',
578
+ should_show_icon: "",
579
+ theme_name_with_subtitle: "Doctor Strange"
580
+ },
581
+ {
582
+ theme_color: "FF4F4DFF",
583
+ theme_id: "3190514984517598",
584
+ theme_emoji: "🌤",
585
+ gradient: '["FF0080FF","FF9F1AFF"]',
586
+ should_show_icon: "",
587
+ theme_name_with_subtitle: "Sky"
588
+ },
589
+ {
590
+ theme_color: "FFE84B28",
591
+ theme_id: "357833546030778",
592
+ theme_emoji: "đŸ¯",
593
+ gradient: '["FFF69500","FFDA0050"]',
594
+ should_show_icon: "1",
595
+ theme_name_with_subtitle: "Lunar New Year"
596
+ },
597
+ {
598
+ theme_color: "FFB24B77",
599
+ theme_id: "627144732056021",
600
+ theme_emoji: "đŸĨŗ",
601
+ gradient: '["FFF1614E","FF660F84"]',
602
+ should_show_icon: "",
603
+ theme_name_with_subtitle: "Celebration!"
604
+ },
605
+ {
606
+ theme_color: "FF66A9FF",
607
+ theme_id: "390127158985345",
608
+ theme_emoji: "đŸĨļ",
609
+ gradient: '["FF8CB3FF","FF409FFF"]',
610
+ should_show_icon: "",
611
+ theme_name_with_subtitle: "Chill"
612
+ },
613
+ {
614
+ theme_color: "FF5797FC",
615
+ theme_id: "275041734441112",
616
+ theme_emoji: "😌",
617
+ gradient: '["FF4AC9E4","FF5890FF","FF8C91FF"]',
618
+ should_show_icon: "",
619
+ theme_name_with_subtitle: "Care"
620
+ },
621
+ {
622
+ theme_color: "FFFF595C",
623
+ theme_id: "3082966625307060",
624
+ theme_emoji: "đŸ’Ģ",
625
+ gradient: '["FFFF239A","FFFF8C21"]',
626
+ should_show_icon: "",
627
+ theme_name_with_subtitle: "Astrology"
628
+ },
629
+ {
630
+ theme_color: "FF0171FF",
631
+ theme_id: "184305226956268",
632
+ theme_emoji: "â˜ī¸",
633
+ gradient: '["FF0026ee","FF00b2ff"]',
634
+ should_show_icon: "",
635
+ theme_name_with_subtitle: "J Balvin"
636
+ },
637
+ {
638
+ theme_color: "FFA033FF",
639
+ theme_id: "621630955405500",
640
+ theme_emoji: "🎉",
641
+ gradient: '["FFFF7061","FFFF5280","FFA033FF","FF0099FF"]',
642
+ should_show_icon: "",
643
+ theme_name_with_subtitle: "Birthday"
644
+ },
645
+ {
646
+ theme_color: "FF006528",
647
+ theme_id: "539927563794799",
648
+ theme_emoji: "🍄",
649
+ gradient: '["FF00d52f","FF006528"]',
650
+ should_show_icon: "",
651
+ theme_name_with_subtitle: "Cottagecore"
652
+ },
653
+ {
654
+ theme_color: "FF4D3EC2",
655
+ theme_id: "736591620215564",
656
+ theme_emoji: null,
657
+ gradient: null,
658
+ should_show_icon: "1",
659
+ theme_name_with_subtitle: "Ocean"
660
+ },
661
+ {
662
+ theme_color: "FF4e4bf5",
663
+ theme_id: "3259963564026002",
664
+ theme_emoji: null,
665
+ gradient: '["FFAA00FF","FF0080FF"]',
666
+ should_show_icon: "1",
667
+ theme_name_with_subtitle: "Default"
668
+ },
669
+ {
670
+ theme_color: "FF3A12FF",
671
+ theme_id: "582065306070020",
672
+ theme_emoji: null,
673
+ gradient: '["FFFAAF00","FFFF2E2E","FF3A12FF"]',
674
+ should_show_icon: "1",
675
+ theme_name_with_subtitle: "Rocket"
676
+ },
677
+ {
678
+ theme_color: "FF3A1D8A",
679
+ theme_id: "273728810607574",
680
+ theme_emoji: null,
681
+ gradient: '["FFFB45DE","FF841DD5","FF3A1D8A"]',
682
+ should_show_icon: "1",
683
+ theme_name_with_subtitle: "Unicorn"
684
+ },
685
+ {
686
+ theme_color: "FF9FD52D",
687
+ theme_id: "262191918210707",
688
+ theme_emoji: null,
689
+ gradient: '["FF2A7FE3","FF00BF91","FF9FD52D"]',
690
+ should_show_icon: "1",
691
+ theme_name_with_subtitle: "Tropical"
692
+ },
693
+ {
694
+ theme_color: "FFF7B267",
695
+ theme_id: "909695489504566",
696
+ theme_emoji: null,
697
+ gradient: '["FFF25C54","FFF4845F","FFF7B267"]',
698
+ should_show_icon: "1",
699
+ theme_name_with_subtitle: "Sushi"
700
+ },
701
+ {
702
+ theme_color: "FF1ADB5B",
703
+ theme_id: "557344741607350",
704
+ theme_emoji: null,
705
+ gradient: '["FFFFD200","FF6EDF00","FF00DFBB"]',
706
+ should_show_icon: "1",
707
+ theme_name_with_subtitle: "Citrus"
708
+ },
709
+ {
710
+ theme_color: "FF4D3EC2",
711
+ theme_id: "280333826736184",
712
+ theme_emoji: null,
713
+ gradient: '["FFFF625B","FFC532AD","FF4D3EC2"]',
714
+ should_show_icon: "1",
715
+ theme_name_with_subtitle: "Lollipop"
716
+ },
717
+ {
718
+ theme_color: "FFFF311E",
719
+ theme_id: "1257453361255152",
720
+ theme_emoji: null,
721
+ gradient: null,
722
+ should_show_icon: "1",
723
+ theme_name_with_subtitle: "Rose"
724
+ },
725
+ {
726
+ theme_color: "FFA797FF",
727
+ theme_id: "571193503540759",
728
+ theme_emoji: null,
729
+ gradient: null,
730
+ should_show_icon: "1",
731
+ theme_name_with_subtitle: "Lavender"
732
+ },
733
+ {
734
+ theme_color: "FF6EDF00",
735
+ theme_id: "3151463484918004",
736
+ theme_emoji: null,
737
+ gradient: null,
738
+ should_show_icon: "1",
739
+ theme_name_with_subtitle: "Kiwi"
740
+ },
741
+ {
742
+ theme_color: "FF9D59D2",
743
+ theme_id: "737761000603635",
744
+ theme_emoji: "💛",
745
+ gradient: '["FFFFD600","FFFCB37B","FF9D59D2","FF282828"]',
746
+ should_show_icon: "",
747
+ theme_name_with_subtitle: "Non-Binary"
748
+ },
749
+ {
750
+ theme_color: "FF57C39C",
751
+ theme_id: "1288506208402340",
752
+ theme_emoji: "💐",
753
+ gradient: '["FF57C39C","FF57C39C","FF57C39C"]',
754
+ should_show_icon: "",
755
+ theme_name_with_subtitle: "Mother's Day"
756
+ },
757
+ {
758
+ theme_color: "FFF65900",
759
+ theme_id: "121771470870245",
760
+ theme_emoji: "đŸ’Ĩ",
761
+ gradient: '["FFFF8328","FFFF7014","FFFF5C00"]',
762
+ should_show_icon: "",
763
+ theme_name_with_subtitle: "APAHM"
764
+ },
765
+ {
766
+ theme_color: "FF978E21",
767
+ theme_id: "810978360551741",
768
+ theme_emoji: "đŸĒē",
769
+ gradient: '["FF978E21","FF978E21","FF978E21"]',
770
+ should_show_icon: "",
771
+ theme_name_with_subtitle: "Parenthood"
772
+ },
773
+ {
774
+ theme_color: "FFDD8800",
775
+ theme_id: "1438011086532622",
776
+ theme_emoji: "✨",
777
+ gradient: '["FFEDAB00","FFCD6300"]',
778
+ should_show_icon: "",
779
+ theme_name_with_subtitle: "Star Wars"
780
+ },
781
+ {
782
+ theme_color: "FF7D09B9",
783
+ theme_id: "101275642962533",
784
+ theme_emoji: "🚀",
785
+ gradient: '["FF5C22D6","FF8F1EB5","FFC31B92"]',
786
+ should_show_icon: "",
787
+ theme_name_with_subtitle: "Guardians of the Galaxy"
788
+ },
789
+ {
790
+ theme_color: "FF61C500",
791
+ theme_id: "158263147151440",
792
+ theme_emoji: "🐝",
793
+ gradient: '["FF61C500","FF61C500","FF61C500"]',
794
+ should_show_icon: "",
795
+ theme_name_with_subtitle: "Bloom"
796
+ },
797
+ {
798
+ theme_color: "FF826044",
799
+ theme_id: "195296273246380",
800
+ theme_emoji: "🧋",
801
+ gradient: '["FF886546","FFA27F57","FFC6A26E"]',
802
+ should_show_icon: "",
803
+ theme_name_with_subtitle: "Bubble Tea"
804
+ },
805
+ {
806
+ theme_color: "FFB02501",
807
+ theme_id: "6026716157422736",
808
+ theme_emoji: "â›šī¸",
809
+ gradient: '["FFAC2503","FFB02501","FFB42400"]',
810
+ should_show_icon: "",
811
+ theme_name_with_subtitle: "Basketball"
812
+ },
813
+ {
814
+ theme_color: "FF574DC1",
815
+ theme_id: "693996545771691",
816
+ theme_emoji: "🖤",
817
+ gradient: '["FF4533FF","FF574AE0","FF6C64BE"]',
818
+ should_show_icon: "",
819
+ theme_name_with_subtitle: "Elephants&Flowers"
820
+ },
821
+ {
822
+ theme_color: "FFA8B8DA",
823
+ theme_id: "504518465021637",
824
+ theme_emoji: "đŸŗī¸â€âš§ī¸",
825
+ gradient: '["FF55D0FF","FF7597D7","FFFF9FB3","FFFF9FB3"]',
826
+ should_show_icon: "",
827
+ theme_name_with_subtitle: "Transgender"
828
+ }
829
+ ];