@cexy/hoonfca 1.0.7 → 2.0.2

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 (191) hide show
  1. package/LICENSE +3 -0
  2. package/README.md +100 -632
  3. package/examples/login-with-cookies.js +102 -0
  4. package/examples/verify.js +70 -0
  5. package/index.js +2 -8
  6. package/package.json +83 -61
  7. package/src/{api/action → apis}/addExternalModule.js +24 -25
  8. package/src/apis/addUserToGroup.js +108 -0
  9. package/src/apis/changeAdminStatus.js +148 -0
  10. package/src/apis/changeArchivedStatus.js +61 -0
  11. package/src/apis/changeAvatar.js +103 -0
  12. package/src/apis/changeBio.js +69 -0
  13. package/src/apis/changeBlockedStatus.js +54 -0
  14. package/src/apis/changeGroupImage.js +136 -0
  15. package/src/apis/changeThreadColor.js +116 -0
  16. package/src/apis/changeThreadEmoji.js +53 -0
  17. package/src/apis/comment.js +207 -0
  18. package/src/apis/createAITheme.js +129 -0
  19. package/src/apis/createNewGroup.js +79 -0
  20. package/src/apis/createPoll.js +73 -0
  21. package/src/apis/deleteMessage.js +44 -0
  22. package/src/apis/deleteThread.js +52 -0
  23. package/src/apis/e2ee.js +17 -0
  24. package/src/apis/editMessage.js +70 -0
  25. package/src/apis/emoji.js +124 -0
  26. package/src/apis/fetchThemeData.js +82 -0
  27. package/src/apis/follow.js +81 -0
  28. package/src/apis/forwardMessage.js +52 -0
  29. package/src/apis/friend.js +243 -0
  30. package/src/apis/gcmember.js +122 -0
  31. package/src/apis/gcname.js +123 -0
  32. package/src/apis/gcrule.js +119 -0
  33. package/src/apis/getAccess.js +111 -0
  34. package/src/apis/getBotInfo.js +88 -0
  35. package/src/apis/getBotInitialData.js +43 -0
  36. package/src/apis/getFriendsList.js +79 -0
  37. package/src/apis/getMessage.js +423 -0
  38. package/src/apis/getTheme.js +95 -0
  39. package/src/apis/getThemeInfo.js +116 -0
  40. package/src/apis/getThreadHistory.js +239 -0
  41. package/src/apis/getThreadInfo.js +267 -0
  42. package/src/apis/getThreadList.js +232 -0
  43. package/src/apis/getThreadPictures.js +58 -0
  44. package/src/apis/getUserID.js +117 -0
  45. package/src/apis/getUserInfo.js +513 -0
  46. package/src/{api/users → apis}/getUserInfoV2.js +146 -134
  47. package/src/apis/handleMessageRequest.js +50 -0
  48. package/src/apis/httpGet.js +63 -0
  49. package/src/apis/httpPost.js +89 -0
  50. package/src/apis/httpPostFormData.js +69 -0
  51. package/src/apis/listenMqtt.js +1236 -0
  52. package/src/apis/listenSpeed.js +179 -0
  53. package/src/apis/logout.js +87 -0
  54. package/src/apis/markAsDelivered.js +47 -0
  55. package/src/{api/messaging → apis}/markAsRead.js +99 -88
  56. package/src/apis/markAsReadAll.js +40 -0
  57. package/src/apis/markAsSeen.js +70 -0
  58. package/src/apis/mqttDeltaValue.js +278 -0
  59. package/src/apis/muteThread.js +45 -0
  60. package/src/apis/nickname.js +132 -0
  61. package/src/apis/notes.js +163 -0
  62. package/src/apis/pinMessage.js +150 -0
  63. package/src/apis/produceMetaTheme.js +180 -0
  64. package/src/apis/realtime.js +182 -0
  65. package/src/apis/removeUserFromGroup.js +117 -0
  66. package/src/apis/resolvePhotoUrl.js +58 -0
  67. package/src/apis/searchForThread.js +154 -0
  68. package/src/apis/sendMessage.js +354 -0
  69. package/src/apis/sendMessageMqtt.js +249 -0
  70. package/src/apis/sendTypingIndicator.js +91 -0
  71. package/src/apis/setMessageReaction.js +27 -0
  72. package/src/apis/setMessageReactionMqtt.js +61 -0
  73. package/src/apis/setThreadTheme.js +260 -0
  74. package/src/apis/setThreadThemeMqtt.js +94 -0
  75. package/src/apis/share.js +107 -0
  76. package/src/apis/shareContact.js +66 -0
  77. package/src/apis/stickers.js +257 -0
  78. package/src/apis/story.js +181 -0
  79. package/src/apis/theme.js +233 -0
  80. package/src/apis/unfriend.js +47 -0
  81. package/src/apis/unsendMessage.js +17 -0
  82. package/src/engine/client.js +92 -0
  83. package/src/engine/models/buildAPI.js +152 -0
  84. package/src/engine/models/loginHelper.js +519 -0
  85. package/src/engine/models/setOptions.js +88 -0
  86. package/src/security/e2ee.js +109 -0
  87. package/src/types/index.d.ts +498 -0
  88. package/src/utils/antiSuspension.js +506 -0
  89. package/src/utils/auth-helpers.js +149 -0
  90. package/src/utils/autoReLogin.js +336 -0
  91. package/src/utils/axios.js +436 -0
  92. package/src/utils/cache.js +54 -0
  93. package/src/utils/clients.js +282 -0
  94. package/src/utils/constants.js +410 -23
  95. package/src/utils/formatters/data/formatAttachment.js +370 -0
  96. package/src/utils/formatters/data/formatDelta.js +109 -0
  97. package/src/utils/formatters/index.js +159 -0
  98. package/src/utils/formatters/value/formatCookie.js +91 -0
  99. package/src/utils/formatters/value/formatDate.js +36 -0
  100. package/src/utils/formatters/value/formatID.js +16 -0
  101. package/src/utils/formatters.js +1373 -0
  102. package/src/utils/headers.js +214 -99
  103. package/src/utils/index.js +153 -0
  104. package/src/utils/monitoring.js +333 -0
  105. package/src/utils/rateLimiter.js +319 -0
  106. package/src/utils/tokenRefresh.js +657 -0
  107. package/src/utils/user-agents.js +238 -0
  108. package/src/utils/validation.js +157 -0
  109. package/CHANGELOG.md +0 -181
  110. package/DOCS.md +0 -2636
  111. package/LICENSE-MIT +0 -21
  112. package/func/checkUpdate.js +0 -233
  113. package/func/logger.js +0 -48
  114. package/index.d.ts +0 -746
  115. package/module/config.js +0 -67
  116. package/module/login.js +0 -154
  117. package/module/loginHelper.js +0 -1034
  118. package/module/options.js +0 -54
  119. package/src/api/action/changeAvatar.js +0 -137
  120. package/src/api/action/changeBio.js +0 -75
  121. package/src/api/action/enableAutoSaveAppState.js +0 -73
  122. package/src/api/action/getCurrentUserID.js +0 -7
  123. package/src/api/action/handleFriendRequest.js +0 -57
  124. package/src/api/action/logout.js +0 -76
  125. package/src/api/action/refreshFb_dtsg.js +0 -48
  126. package/src/api/action/setPostReaction.js +0 -106
  127. package/src/api/action/unfriend.js +0 -54
  128. package/src/api/http/httpGet.js +0 -46
  129. package/src/api/http/httpPost.js +0 -52
  130. package/src/api/http/postFormData.js +0 -47
  131. package/src/api/messaging/addUserToGroup.js +0 -68
  132. package/src/api/messaging/changeAdminStatus.js +0 -122
  133. package/src/api/messaging/changeArchivedStatus.js +0 -55
  134. package/src/api/messaging/changeBlockedStatus.js +0 -48
  135. package/src/api/messaging/changeGroupImage.js +0 -90
  136. package/src/api/messaging/changeNickname.js +0 -70
  137. package/src/api/messaging/changeThreadColor.js +0 -79
  138. package/src/api/messaging/changeThreadEmoji.js +0 -106
  139. package/src/api/messaging/createNewGroup.js +0 -88
  140. package/src/api/messaging/createPoll.js +0 -43
  141. package/src/api/messaging/createThemeAI.js +0 -98
  142. package/src/api/messaging/deleteMessage.js +0 -56
  143. package/src/api/messaging/deleteThread.js +0 -56
  144. package/src/api/messaging/editMessage.js +0 -68
  145. package/src/api/messaging/forwardAttachment.js +0 -51
  146. package/src/api/messaging/getEmojiUrl.js +0 -29
  147. package/src/api/messaging/getFriendsList.js +0 -82
  148. package/src/api/messaging/getMessage.js +0 -829
  149. package/src/api/messaging/getThemePictures.js +0 -62
  150. package/src/api/messaging/handleMessageRequest.js +0 -65
  151. package/src/api/messaging/markAsDelivered.js +0 -57
  152. package/src/api/messaging/markAsReadAll.js +0 -49
  153. package/src/api/messaging/markAsSeen.js +0 -61
  154. package/src/api/messaging/muteThread.js +0 -50
  155. package/src/api/messaging/removeUserFromGroup.js +0 -106
  156. package/src/api/messaging/resolvePhotoUrl.js +0 -43
  157. package/src/api/messaging/scheduler.js +0 -264
  158. package/src/api/messaging/searchForThread.js +0 -52
  159. package/src/api/messaging/sendMessage.js +0 -272
  160. package/src/api/messaging/sendTypingIndicator.js +0 -67
  161. package/src/api/messaging/setMessageReaction.js +0 -76
  162. package/src/api/messaging/setTitle.js +0 -119
  163. package/src/api/messaging/shareContact.js +0 -49
  164. package/src/api/messaging/threadColors.js +0 -128
  165. package/src/api/messaging/unsendMessage.js +0 -81
  166. package/src/api/messaging/uploadAttachment.js +0 -94
  167. package/src/api/socket/core/connectMqtt.js +0 -255
  168. package/src/api/socket/core/emitAuth.js +0 -106
  169. package/src/api/socket/core/getSeqID.js +0 -40
  170. package/src/api/socket/core/getTaskResponseData.js +0 -22
  171. package/src/api/socket/core/markDelivery.js +0 -12
  172. package/src/api/socket/core/parseDelta.js +0 -391
  173. package/src/api/socket/detail/buildStream.js +0 -208
  174. package/src/api/socket/detail/constants.js +0 -24
  175. package/src/api/socket/listenMqtt.js +0 -364
  176. package/src/api/socket/middleware/index.js +0 -216
  177. package/src/api/threads/getThreadHistory.js +0 -664
  178. package/src/api/threads/getThreadInfo.js +0 -438
  179. package/src/api/threads/getThreadList.js +0 -293
  180. package/src/api/threads/getThreadPictures.js +0 -78
  181. package/src/api/users/getUserID.js +0 -65
  182. package/src/api/users/getUserInfo.js +0 -327
  183. package/src/core/sendReqMqtt.js +0 -96
  184. package/src/database/models/index.js +0 -87
  185. package/src/database/models/thread.js +0 -45
  186. package/src/database/models/user.js +0 -46
  187. package/src/database/threadData.js +0 -98
  188. package/src/database/userData.js +0 -89
  189. package/src/utils/client.js +0 -320
  190. package/src/utils/format.js +0 -1115
  191. package/src/utils/request.js +0 -305
@@ -1,1115 +0,0 @@
1
- "use strict";
2
- var url = require("url");
3
- const querystring = require("querystring");
4
-
5
- function getType(obj) {
6
- return Object.prototype.toString.call(obj).slice(8, -1);
7
- }
8
-
9
- function generateOfflineThreadingID() {
10
- var ret = Date.now();
11
- var value = Math.floor(Math.random() * 4294967295);
12
- var str = ("0000000000000000000000" + value.toString(2)).slice(-22);
13
- var msgs = ret.toString(2) + str;
14
- return binaryToDecimal(msgs);
15
- }
16
- var h;
17
- var i = {};
18
- var j = {
19
- _: "%",
20
- A: "%2",
21
- B: "000",
22
- C: "%7d",
23
- D: "%7b%22",
24
- E: "%2c%22",
25
- F: "%22%3a",
26
- G: "%2c%22ut%22%3a1",
27
- H: "%2c%22bls%22%3a",
28
- I: "%2c%22n%22%3a%22%",
29
- J: "%22%3a%7b%22i%22%3a0%7d",
30
- K: "%2c%22pt%22%3a0%2c%22vis%22%3a",
31
- L: "%2c%22ch%22%3a%7b%22h%22%3a%22",
32
- M: "%7b%22v%22%3a2%2c%22time%22%3a1",
33
- N: ".channel%22%2c%22sub%22%3a%5b",
34
- O: "%2c%22sb%22%3a1%2c%22t%22%3a%5b",
35
- P: "%2c%22ud%22%3a100%2c%22lc%22%3a0",
36
- Q: "%5d%2c%22f%22%3anull%2c%22uct%22%3a",
37
- R: ".channel%22%2c%22sub%22%3a%5b1%5d",
38
- S: "%22%2c%22m%22%3a0%7d%2c%7b%22i%22%3a",
39
- T: "%2c%22blc%22%3a1%2c%22snd%22%3a1%2c%22ct%22%3a",
40
- U: "%2c%22blc%22%3a0%2c%22snd%22%3a1%2c%22ct%22%3a",
41
- V: "%2c%22blc%22%3a0%2c%22snd%22%3a0%2c%22ct%22%3a",
42
- W: "%2c%22s%22%3a0%2c%22blo%22%3a0%7d%2c%22bl%22%3a%7b%22ac%22%3a",
43
- X: "%2c%22ri%22%3a0%7d%2c%22state%22%3a%7b%22p%22%3a0%2c%22ut%22%3a1",
44
- Y:
45
- "%2c%22pt%22%3a0%2c%22vis%22%3a1%2c%22bls%22%3a0%2c%22blc%22%3a0%2c%22snd%22%3a1%2c%22ct%22%3a",
46
- Z:
47
- "%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"
48
- };
49
- (function () {
50
- var l = [];
51
- for (var m in j) {
52
- i[j[m]] = m;
53
- l.push(j[m]);
54
- }
55
- l.reverse();
56
- h = new RegExp(l.join("|"), "g");
57
- })();
58
-
59
- function getAdminTextMessageType(m) {
60
- switch (m.type) {
61
- case "joinable_group_link_mode_change":
62
- return "log:link-status";
63
- case "magic_words":
64
- return "log:magic-words";
65
- case "change_thread_theme":
66
- return "log:thread-color";
67
- case "change_thread_icon":
68
- case "change_thread_quick_reaction":
69
- return "log:thread-icon";
70
- case "change_thread_nickname":
71
- return "log:user-nickname";
72
- case "change_thread_admins":
73
- return "log:thread-admins";
74
- case "group_poll":
75
- return "log:thread-poll";
76
- case "change_thread_approval_mode":
77
- return "log:thread-approval-mode";
78
- case "messenger_call_log":
79
- case "participant_joined_group_call":
80
- return "log:thread-call";
81
- case "pin_messages_v2":
82
- return "log:thread-pinned";
83
- case "unpin_messages_v2":
84
- return "log:unpin-message";
85
- default:
86
- return m.type;
87
- }
88
- }
89
-
90
- function formatDeltaEvent(m) {
91
- var logMessageType;
92
- var logMessageData;
93
- switch (m.class) {
94
- case "AdminTextMessage":
95
- logMessageType = getAdminTextMessageType(m);
96
- logMessageData = m.untypedData;
97
- break;
98
- case "ThreadName":
99
- logMessageType = "log:thread-name";
100
- logMessageData = { name: m.name };
101
- break;
102
- case "ParticipantsAddedToGroupThread":
103
- logMessageType = "log:subscribe";
104
- logMessageData = { addedParticipants: m.addedParticipants };
105
- break;
106
- case "ParticipantLeftGroupThread":
107
- logMessageType = "log:unsubscribe";
108
- logMessageData = { leftParticipantFbId: m.leftParticipantFbId };
109
- break;
110
- case "UserLocation": {
111
- logMessageType = "log:user-location";
112
- logMessageData = {
113
- Image:
114
- m.attachments[0].mercury.extensible_attachment.story_attachment.media
115
- .image,
116
- Location:
117
- m.attachments[0].mercury.extensible_attachment.story_attachment.target
118
- .location_title,
119
- coordinates:
120
- m.attachments[0].mercury.extensible_attachment.story_attachment.target
121
- .coordinate,
122
- url: m.attachments[0].mercury.extensible_attachment.story_attachment.url
123
- };
124
- }
125
- case "ApprovalQueue":
126
- logMessageType = "log:approval-queue";
127
- logMessageData = {
128
- approvalQueue: {
129
- action: m.action,
130
- recipientFbId: m.recipientFbId,
131
- requestSource: m.requestSource,
132
- ...m.messageMetadata
133
- }
134
- };
135
- }
136
- return {
137
- type: "event",
138
- threadID: formatID(
139
- (
140
- m.messageMetadata.threadKey.threadFbId ||
141
- m.messageMetadata.threadKey.otherUserFbId
142
- ).toString()
143
- ),
144
- logMessageType: logMessageType,
145
- logMessageData: logMessageData,
146
- logMessageBody: m.messageMetadata.adminText,
147
- author: m.messageMetadata.actorFbId,
148
- participantIDs: (m?.participants || []).map(e => e.toString())
149
- };
150
- }
151
-
152
-
153
- function _formatAttachment(attachment1, attachment2) {
154
- attachment2 = attachment2 || { id: "", image_data: {} };
155
- attachment1 = attachment1.mercury ? attachment1.mercury : attachment1;
156
- var blob = attachment1.blob_attachment;
157
- var type =
158
- blob && blob.__typename ? blob.__typename : attachment1.attach_type;
159
- if (!type && attachment1.sticker_attachment) {
160
- type = "StickerAttachment";
161
- blob = attachment1.sticker_attachment;
162
- } else if (!type && attachment1.extensible_attachment) {
163
- if (
164
- attachment1.extensible_attachment.story_attachment &&
165
- attachment1.extensible_attachment.story_attachment.target &&
166
- attachment1.extensible_attachment.story_attachment.target.__typename &&
167
- attachment1.extensible_attachment.story_attachment.target.__typename ===
168
- "MessageLocation"
169
- )
170
- type = "MessageLocation";
171
- else type = "ExtensibleAttachment";
172
-
173
- blob = attachment1.extensible_attachment;
174
- }
175
- switch (type) {
176
- case "sticker":
177
- return {
178
- type: "sticker",
179
- ID: attachment1.metadata.stickerID.toString(),
180
- url: attachment1.url,
181
-
182
- packID: attachment1.metadata.packID.toString(),
183
- spriteUrl: attachment1.metadata.spriteURI,
184
- spriteUrl2x: attachment1.metadata.spriteURI2x,
185
- width: attachment1.metadata.width,
186
- height: attachment1.metadata.height,
187
-
188
- caption: attachment2.caption,
189
- description: attachment2.description,
190
-
191
- frameCount: attachment1.metadata.frameCount,
192
- frameRate: attachment1.metadata.frameRate,
193
- framesPerRow: attachment1.metadata.framesPerRow,
194
- framesPerCol: attachment1.metadata.framesPerCol,
195
-
196
- stickerID: attachment1.metadata.stickerID.toString(), // @Legacy
197
- spriteURI: attachment1.metadata.spriteURI, // @Legacy
198
- spriteURI2x: attachment1.metadata.spriteURI2x // @Legacy
199
- };
200
- case "file":
201
- return {
202
- type: "file",
203
- filename: attachment1.name,
204
- ID: attachment2.id.toString(),
205
- url: attachment1.url,
206
-
207
- isMalicious: attachment2.is_malicious,
208
- contentType: attachment2.mime_type,
209
-
210
- name: attachment1.name, // @Legacy
211
- mimeType: attachment2.mime_type, // @Legacy
212
- fileSize: attachment2.file_size // @Legacy
213
- };
214
- case "photo":
215
- return {
216
- type: "photo",
217
- ID: attachment1.metadata.fbid.toString(),
218
- filename: attachment1.fileName,
219
- thumbnailUrl: attachment1.thumbnail_url,
220
-
221
- previewUrl: attachment1.preview_url,
222
- previewWidth: attachment1.preview_width,
223
- previewHeight: attachment1.preview_height,
224
-
225
- largePreviewUrl: attachment1.large_preview_url,
226
- largePreviewWidth: attachment1.large_preview_width,
227
- largePreviewHeight: attachment1.large_preview_height,
228
-
229
- url: attachment1.metadata.url, // @Legacy
230
- width: attachment1.metadata.dimensions.split(",")[0], // @Legacy
231
- height: attachment1.metadata.dimensions.split(",")[1], // @Legacy
232
- name: attachment1.fileName // @Legacy
233
- };
234
- case "animated_image":
235
- return {
236
- type: "animated_image",
237
- ID: attachment2.id.toString(),
238
- filename: attachment2.filename,
239
-
240
- previewUrl: attachment1.preview_url,
241
- previewWidth: attachment1.preview_width,
242
- previewHeight: attachment1.preview_height,
243
-
244
- url: attachment2.image_data.url,
245
- width: attachment2.image_data.width,
246
- height: attachment2.image_data.height,
247
-
248
- name: attachment1.name, // @Legacy
249
- facebookUrl: attachment1.url, // @Legacy
250
- thumbnailUrl: attachment1.thumbnail_url, // @Legacy
251
- mimeType: attachment2.mime_type, // @Legacy
252
- rawGifImage: attachment2.image_data.raw_gif_image, // @Legacy
253
- rawWebpImage: attachment2.image_data.raw_webp_image, // @Legacy
254
- animatedGifUrl: attachment2.image_data.animated_gif_url, // @Legacy
255
- animatedGifPreviewUrl: attachment2.image_data.animated_gif_preview_url, // @Legacy
256
- animatedWebpUrl: attachment2.image_data.animated_webp_url, // @Legacy
257
- animatedWebpPreviewUrl: attachment2.image_data.animated_webp_preview_url // @Legacy
258
- };
259
- case "share":
260
- return {
261
- type: "share",
262
- ID: attachment1.share.share_id.toString(),
263
- url: attachment2.href,
264
-
265
- title: attachment1.share.title,
266
- description: attachment1.share.description,
267
- source: attachment1.share.source,
268
-
269
- image: attachment1.share.media.image,
270
- width: attachment1.share.media.image_size.width,
271
- height: attachment1.share.media.image_size.height,
272
- playable: attachment1.share.media.playable,
273
- duration: attachment1.share.media.duration,
274
-
275
- subattachments: attachment1.share.subattachments,
276
- properties: {},
277
-
278
- animatedImageSize: attachment1.share.media.animated_image_size, // @Legacy
279
- facebookUrl: attachment1.share.uri, // @Legacy
280
- target: attachment1.share.target, // @Legacy
281
- styleList: attachment1.share.style_list // @Legacy
282
- };
283
- case "video":
284
- return {
285
- type: "video",
286
- ID: attachment1.metadata.fbid.toString(),
287
- filename: attachment1.name,
288
-
289
- previewUrl: attachment1.preview_url,
290
- previewWidth: attachment1.preview_width,
291
- previewHeight: attachment1.preview_height,
292
-
293
- url: attachment1.url,
294
- width: attachment1.metadata.dimensions.width,
295
- height: attachment1.metadata.dimensions.height,
296
-
297
- duration: attachment1.metadata.duration,
298
- videoType: "unknown",
299
-
300
- thumbnailUrl: attachment1.thumbnail_url // @Legacy
301
- };
302
- case "error":
303
- return {
304
- type: "error",
305
- attachment1: attachment1,
306
- attachment2: attachment2
307
- };
308
- case "MessageImage":
309
- return {
310
- type: "photo",
311
- ID: blob.legacy_attachment_id,
312
- filename: blob.filename,
313
- thumbnailUrl: blob.thumbnail.uri,
314
-
315
- previewUrl: blob.preview.uri,
316
- previewWidth: blob.preview.width,
317
- previewHeight: blob.preview.height,
318
-
319
- largePreviewUrl: blob.large_preview.uri,
320
- largePreviewWidth: blob.large_preview.width,
321
- largePreviewHeight: blob.large_preview.height,
322
-
323
- url: blob.large_preview.uri, // @Legacy
324
- width: blob.original_dimensions.x, // @Legacy
325
- height: blob.original_dimensions.y, // @Legacy
326
- name: blob.filename // @Legacy
327
- };
328
- case "MessageAnimatedImage":
329
- return {
330
- type: "animated_image",
331
- ID: blob.legacy_attachment_id,
332
- filename: blob.filename,
333
-
334
- previewUrl: blob.preview_image.uri,
335
- previewWidth: blob.preview_image.width,
336
- previewHeight: blob.preview_image.height,
337
-
338
- url: blob.animated_image.uri,
339
- width: blob.animated_image.width,
340
- height: blob.animated_image.height,
341
-
342
- thumbnailUrl: blob.preview_image.uri, // @Legacy
343
- name: blob.filename, // @Legacy
344
- facebookUrl: blob.animated_image.uri, // @Legacy
345
- rawGifImage: blob.animated_image.uri, // @Legacy
346
- animatedGifUrl: blob.animated_image.uri, // @Legacy
347
- animatedGifPreviewUrl: blob.preview_image.uri, // @Legacy
348
- animatedWebpUrl: blob.animated_image.uri, // @Legacy
349
- animatedWebpPreviewUrl: blob.preview_image.uri // @Legacy
350
- };
351
- case "MessageVideo":
352
- return {
353
- type: "video",
354
- filename: blob.filename,
355
- ID: blob.legacy_attachment_id,
356
-
357
- previewUrl: blob.large_image.uri,
358
- previewWidth: blob.large_image.width,
359
- previewHeight: blob.large_image.height,
360
-
361
- url: blob.playable_url,
362
- width: blob.original_dimensions.x,
363
- height: blob.original_dimensions.y,
364
-
365
- duration: blob.playable_duration_in_ms,
366
- videoType: blob.video_type.toLowerCase(),
367
-
368
- thumbnailUrl: blob.large_image.uri // @Legacy
369
- };
370
- case "MessageAudio":
371
- return {
372
- type: "audio",
373
- filename: blob.filename,
374
- ID: blob.url_shimhash,
375
-
376
- audioType: blob.audio_type,
377
- duration: blob.playable_duration_in_ms,
378
- url: blob.playable_url,
379
-
380
- isVoiceMail: blob.is_voicemail
381
- };
382
- case "StickerAttachment":
383
- return {
384
- type: "sticker",
385
- ID: blob.id,
386
- url: blob.url,
387
-
388
- packID: blob.pack ? blob.pack.id : null,
389
- spriteUrl: blob.sprite_image,
390
- spriteUrl2x: blob.sprite_image_2x,
391
- width: blob.width,
392
- height: blob.height,
393
-
394
- caption: blob.label,
395
- description: blob.label,
396
-
397
- frameCount: blob.frame_count,
398
- frameRate: blob.frame_rate,
399
- framesPerRow: blob.frames_per_row,
400
- framesPerCol: blob.frames_per_column,
401
-
402
- stickerID: blob.id, // @Legacy
403
- spriteURI: blob.sprite_image, // @Legacy
404
- spriteURI2x: blob.sprite_image_2x // @Legacy
405
- };
406
- case "MessageLocation":
407
- var urlAttach = blob.story_attachment.url;
408
- var mediaAttach = blob.story_attachment.media;
409
-
410
- var u = querystring.parse(url.parse(urlAttach).query).u;
411
- var where1 = querystring.parse(url.parse(u).query).where1;
412
- var address = where1.split(", ");
413
-
414
- var latitude;
415
- var longitude;
416
-
417
- try {
418
- latitude = Number.parseFloat(address[0]);
419
- longitude = Number.parseFloat(address[1]);
420
- } catch (err) {
421
- /* empty */
422
- }
423
-
424
- var imageUrl;
425
- var width;
426
- var height;
427
-
428
- if (mediaAttach && mediaAttach.image) {
429
- imageUrl = mediaAttach.image.uri;
430
- width = mediaAttach.image.width;
431
- height = mediaAttach.image.height;
432
- }
433
-
434
- return {
435
- type: "location",
436
- ID: blob.legacy_attachment_id,
437
- latitude: latitude,
438
- longitude: longitude,
439
- image: imageUrl,
440
- width: width,
441
- height: height,
442
- url: u || urlAttach,
443
- address: where1,
444
-
445
- facebookUrl: blob.story_attachment.url, // @Legacy
446
- target: blob.story_attachment.target, // @Legacy
447
- styleList: blob.story_attachment.style_list // @Legacy
448
- };
449
- case "ExtensibleAttachment":
450
- return {
451
- type: "share",
452
- ID: blob.legacy_attachment_id,
453
- url: blob.story_attachment.url,
454
-
455
- title: blob.story_attachment.title_with_entities.text,
456
- description:
457
- blob.story_attachment.description &&
458
- blob.story_attachment.description.text,
459
- source: blob.story_attachment.source
460
- ? blob.story_attachment.source.text
461
- : null,
462
-
463
- image:
464
- blob.story_attachment.media &&
465
- blob.story_attachment.media.image &&
466
- blob.story_attachment.media.image.uri,
467
- width:
468
- blob.story_attachment.media &&
469
- blob.story_attachment.media.image &&
470
- blob.story_attachment.media.image.width,
471
- height:
472
- blob.story_attachment.media &&
473
- blob.story_attachment.media.image &&
474
- blob.story_attachment.media.image.height,
475
- playable:
476
- blob.story_attachment.media &&
477
- blob.story_attachment.media.is_playable,
478
- duration:
479
- blob.story_attachment.media &&
480
- blob.story_attachment.media.playable_duration_in_ms,
481
- playableUrl:
482
- blob.story_attachment.media == null
483
- ? null
484
- : blob.story_attachment.media.playable_url,
485
-
486
- subattachments: blob.story_attachment.subattachments,
487
- properties: blob.story_attachment.properties.reduce(function (
488
- /** @type {{ [x: string]: any; }} */ obj,
489
- /** @type {{ key: string | number; value: { text: any; }; }} */ cur
490
- ) {
491
- obj[cur.key] = cur.value.text;
492
- return obj;
493
- },
494
- {}),
495
-
496
- facebookUrl: blob.story_attachment.url, // @Legacy
497
- target: blob.story_attachment.target, // @Legacy
498
- styleList: blob.story_attachment.style_list // @Legacy
499
- };
500
- case "MessageFile":
501
- return {
502
- type: "file",
503
- filename: blob.filename,
504
- ID: blob.message_file_fbid,
505
-
506
- url: blob.url,
507
- isMalicious: blob.is_malicious,
508
- contentType: blob.content_type,
509
-
510
- name: blob.filename,
511
- mimeType: "",
512
- fileSize: -1
513
- };
514
- default:
515
- throw new Error(
516
- "unrecognized attach_file of type " +
517
- type +
518
- "`" +
519
- JSON.stringify(attachment1, null, 4) +
520
- " attachment2: " +
521
- JSON.stringify(attachment2, null, 4) +
522
- "`"
523
- );
524
- }
525
- }
526
-
527
- function formatAttachment(attachments, attachmentIds, attachmentMap, shareMap) {
528
- attachmentMap = shareMap || attachmentMap;
529
- return attachments
530
- ? attachments.map(function (i) {
531
- if (
532
- !attachmentMap ||
533
- !attachmentIds ||
534
- !attachmentMap[attachmentIds[i]]
535
- ) {
536
- return _formatAttachment(val);
537
- }
538
- return _formatAttachment(val, attachmentMap[attachmentIds[i]]);
539
- })
540
- : [];
541
- }
542
-
543
- function formatDeltaMessage(m) {
544
- var md = m.messageMetadata;
545
- var mdata =
546
- m.data === undefined
547
- ? []
548
- : m.data.prng === undefined
549
- ? []
550
- : JSON.parse(m.data.prng);
551
- var m_id = mdata.map((/** @type {{ i: any; }} */ u) => u.i);
552
- var m_offset = mdata.map((/** @type {{ o: any; }} */ u) => u.o);
553
- var m_length = mdata.map((/** @type {{ l: any; }} */ u) => u.l);
554
- var mentions = {};
555
- var body = m.body || "";
556
- var args = body == "" ? [] : body.trim().split(/\s+/);
557
- for (var i = 0; i < m_id.length; i++)
558
- mentions[m_id[i]] = m.body.substring(
559
- m_offset[i],
560
- m_offset[i] + m_length[i]
561
- );
562
- return {
563
- type: "message",
564
- senderID: formatID(md.actorFbId.toString()),
565
- threadID: formatID(
566
- (md.threadKey.threadFbId || md.threadKey.otherUserFbId).toString()
567
- ),
568
- messageID: md.messageId,
569
- args: args,
570
- body: body,
571
- attachments: (m.attachments || []).map((/** @type {any} */ v) =>
572
- _formatAttachment(v)
573
- ),
574
- mentions: mentions,
575
- timestamp: md.timestamp,
576
- isGroup: !!md.threadKey.threadFbId,
577
- participantIDs: (m.participants || []).map((/** @type {any} */ p) => formatID(p.toString())),
578
- isUnread: md.isUnread !== undefined ? md.isUnread : false
579
- };
580
- }
581
-
582
- function formatID(id) {
583
- if (id != undefined && id != null) return id.replace(/(fb)?id[:.]/, "");
584
- else return id;
585
- }
586
-
587
- function formatMessage(m) {
588
- var originalMessage = m.message ? m.message : m;
589
- var body = originalMessage.body || "";
590
- var args = body == "" ? [] : body.trim().split(/\s+/);
591
- var obj = {
592
- type: "message",
593
- senderName: originalMessage.sender_name,
594
- senderID: formatID(originalMessage.sender_fbid.toString()),
595
- participantNames: originalMessage.group_thread_info
596
- ? originalMessage.group_thread_info.participant_names
597
- : [originalMessage.sender_name.split(" ")[0]],
598
- participantIDs: originalMessage.group_thread_info
599
- ? originalMessage.group_thread_info.participant_ids.map(function (v) {
600
- return formatID(v.toString());
601
- })
602
- : [formatID(originalMessage.sender_fbid)],
603
- body: body,
604
- args: args,
605
- threadID: formatID(
606
- (
607
- originalMessage.thread_fbid || originalMessage.other_user_fbid
608
- ).toString()
609
- ),
610
- threadName: originalMessage.group_thread_info
611
- ? originalMessage.group_thread_info.name
612
- : originalMessage.sender_name,
613
- location: originalMessage.coordinates ? originalMessage.coordinates : null,
614
- messageID: originalMessage.mid
615
- ? originalMessage.mid.toString()
616
- : originalMessage.message_id,
617
- attachments: formatAttachment(
618
- originalMessage.attachments,
619
- originalMessage.attachmentIds,
620
- originalMessage.attachment_map,
621
- originalMessage.share_map
622
- ),
623
- timestamp: originalMessage.timestamp,
624
- timestampAbsolute: originalMessage.timestamp_absolute,
625
- timestampRelative: originalMessage.timestamp_relative,
626
- timestampDatetime: originalMessage.timestamp_datetime,
627
- tags: originalMessage.tags,
628
- reactions: originalMessage.reactions ? originalMessage.reactions : [],
629
- isUnread: originalMessage.is_unread
630
- };
631
- if (m.type === "pages_messaging")
632
- obj.pageID = m.realtime_viewer_fbid.toString();
633
- obj.isGroup = obj.participantIDs.length > 2;
634
- return obj;
635
- }
636
-
637
- function formatEvent(m) {
638
- var originalMessage = m.message ? m.message : m;
639
- var logMessageType = originalMessage.log_message_type;
640
- var logMessageData;
641
- if (logMessageType === "log:generic-admin-text") {
642
- logMessageData = originalMessage.log_message_data.untypedData;
643
- logMessageType = getAdminTextMessageType(
644
- originalMessage.log_message_data.message_type
645
- );
646
- } else logMessageData = originalMessage.log_message_data;
647
- return Object.assign(formatMessage(originalMessage), {
648
- type: "event",
649
- logMessageType: logMessageType,
650
- logMessageData: logMessageData,
651
- logMessageBody: originalMessage.log_message_body
652
- });
653
- }
654
-
655
- function formatHistoryMessage(m) {
656
- switch (m.action_type) {
657
- case "ma-type:log-message":
658
- return formatEvent(m);
659
- default:
660
- return formatMessage(m);
661
- }
662
- }
663
-
664
- function formatDeltaReadReceipt(delta) {
665
- return {
666
- reader: (delta.threadKey.otherUserFbId || delta.actorFbId).toString(),
667
- time: delta.actionTimestampMs,
668
- threadID: formatID(
669
- (delta.threadKey.otherUserFbId || delta.threadKey.threadFbId).toString()
670
- ),
671
- type: "read_receipt"
672
- };
673
- }
674
-
675
- function decodeClientPayload(payload) {
676
- function Utf8ArrayToStr(array) {
677
- var out, i, len, c;
678
- var char2, char3;
679
- out = "";
680
- len = array.length;
681
- i = 0;
682
- while (i < len) {
683
- c = array[i++];
684
- switch (c >> 4) {
685
- case 0:
686
- case 1:
687
- case 2:
688
- case 3:
689
- case 4:
690
- case 5:
691
- case 6:
692
- case 7:
693
- out += String.fromCharCode(c);
694
- break;
695
- case 12:
696
- case 13:
697
- char2 = array[i++];
698
- out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f));
699
- break;
700
- case 14:
701
- char2 = array[i++];
702
- char3 = array[i++];
703
- out += String.fromCharCode(
704
- ((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0)
705
- );
706
- break;
707
- }
708
- }
709
- return out;
710
- }
711
- return JSON.parse(Utf8ArrayToStr(payload));
712
- }
713
-
714
- function formatTyp(event) {
715
- return {
716
- isTyping: !!event.st,
717
- from: event.from.toString(),
718
- threadID: formatID(
719
- (event.to || event.thread_fbid || event.from).toString()
720
- ),
721
- fromMobile: event.hasOwnProperty("from_mobile") ? event.from_mobile : true,
722
- userID: (event.realtime_viewer_fbid || event.from).toString(),
723
- type: "typ"
724
- };
725
- }
726
-
727
-
728
- function formatThread(data) {
729
- return {
730
- threadID: formatID(data.thread_fbid.toString()),
731
- participants: data.participants.map(formatID),
732
- participantIDs: data.participants.map(formatID),
733
- name: data.name,
734
- nicknames: data.custom_nickname,
735
- snippet: data.snippet,
736
- snippetAttachments: data.snippet_attachments,
737
- snippetSender: formatID((data.snippet_sender || "").toString()),
738
- unreadCount: data.unread_count,
739
- messageCount: data.message_count,
740
- imageSrc: data.image_src,
741
- timestamp: data.timestamp,
742
- muteUntil: data.mute_until,
743
- isCanonicalUser: data.is_canonical_user,
744
- isCanonical: data.is_canonical,
745
- isSubscribed: data.is_subscribed,
746
- folder: data.folder,
747
- isArchived: data.is_archived,
748
- recipientsLoadable: data.recipients_loadable,
749
- hasEmailParticipant: data.has_email_participant,
750
- readOnly: data.read_only,
751
- canReply: data.can_reply,
752
- cannotReplyReason: data.cannot_reply_reason,
753
- lastMessageTimestamp: data.last_message_timestamp,
754
- lastReadTimestamp: data.last_read_timestamp,
755
- lastMessageType: data.last_message_type,
756
- emoji: data.custom_like_icon,
757
- color: data.custom_color,
758
- adminIDs: data.admin_ids,
759
- threadType: data.thread_type
760
- };
761
- }
762
-
763
- function generateThreadingID(clientID) {
764
- var k = Date.now();
765
- var l = Math.floor(Math.random() * 4294967295);
766
- var m = clientID;
767
- return "<" + k + ":" + l + "-" + m + "@mail.projektitan.com>";
768
- }
769
-
770
- function padZeros(val, len) {
771
- val = String(val);
772
- len = len || 2;
773
- while (val.length < len) val = "0" + val;
774
- return val;
775
- }
776
-
777
- function binaryToDecimal(data) {
778
- var ret = "";
779
- while (data !== "0") {
780
- var end = 0;
781
- var fullName = "";
782
- var i = 0;
783
- for (; i < data.length; i++) {
784
- end = 2 * end + parseInt(data[i], 10);
785
- if (end >= 10) {
786
- fullName += "1";
787
- end -= 10;
788
- } else fullName += "0";
789
- }
790
- ret = end.toString() + ret;
791
- data = fullName.slice(fullName.indexOf("1"));
792
- }
793
- return ret;
794
- }
795
-
796
- function presenceEncode(str) {
797
- return encodeURIComponent(str)
798
- .replace(/([_A-Z])|%../g, function (m, n) {
799
- return n ? "%" + n.charCodeAt(0).toString(16) : m;
800
- })
801
- .toLowerCase()
802
- .replace(h, function (m) {
803
- return i[m];
804
- });
805
- }
806
-
807
- function presenceDecode(str) {
808
- return decodeURIComponent(
809
- str.replace(/[_A-Z]/g, function (/** @type {string | number} */ m) {
810
- return j[m];
811
- })
812
- );
813
- }
814
-
815
- function generatePresence(userID) {
816
- var time = Date.now();
817
- return (
818
- "E" +
819
- presenceEncode(
820
- JSON.stringify({
821
- v: 3,
822
- time: parseInt(time / 1000, 10),
823
- user: userID,
824
- state: {
825
- ut: 0,
826
- t2: [],
827
- lm2: null,
828
- uct2: time,
829
- tr: null,
830
- tw: Math.floor(Math.random() * 4294967295) + 1,
831
- at: time
832
- },
833
- ch: {
834
- ["p_" + userID]: 0
835
- }
836
- })
837
- )
838
- );
839
- }
840
-
841
- function generateAccessiblityCookie() {
842
- var time = Date.now();
843
- return encodeURIComponent(
844
- JSON.stringify({
845
- sr: 0,
846
- "sr-ts": time,
847
- jk: 0,
848
- "jk-ts": time,
849
- kb: 0,
850
- "kb-ts": time,
851
- hcm: 0,
852
- "hcm-ts": time
853
- })
854
- );
855
- }
856
-
857
- function getGUID() {
858
- var sectionLength = Date.now();
859
- var id = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
860
- var r = Math.floor((sectionLength + Math.random() * 16) % 16);
861
- sectionLength = Math.floor(sectionLength / 16);
862
- var _guid = (c == "x" ? r : (r & 7) | 8).toString(16);
863
- return _guid;
864
- });
865
- return id;
866
- }
867
-
868
- function formatDeltaReadReceipt(delta) {
869
- return {
870
- reader: (delta.threadKey.otherUserFbId || delta.actorFbId).toString(),
871
- time: delta.actionTimestampMs,
872
- threadID: formatID(
873
- (delta.threadKey.otherUserFbId || delta.threadKey.threadFbId).toString()
874
- ),
875
- type: "read_receipt"
876
- };
877
- }
878
-
879
- function formatReadReceipt(event) {
880
- return {
881
- reader: event.reader.toString(),
882
- time: event.time,
883
- threadID: formatID((event.thread_fbid || event.reader).toString()),
884
- type: "read_receipt"
885
- };
886
- }
887
-
888
- function formatRead(event) {
889
- return {
890
- threadID: formatID(
891
- (
892
- (event.chat_ids && event.chat_ids[0]) ||
893
- (event.thread_fbids && event.thread_fbids[0])
894
- ).toString()
895
- ),
896
- time: event.timestamp,
897
- type: "read"
898
- };
899
- }
900
-
901
- function arrToForm(form) {
902
- return arrayToObject(
903
- form,
904
- function (v) {
905
- return v.name;
906
- },
907
- function (v) {
908
- return v.val;
909
- }
910
- );
911
- }
912
-
913
- function arrayToObject(arr, getKey, getValue) {
914
- return arr.reduce(function (acc, val) {
915
- acc[getKey(val)] = getValue(val);
916
- return acc;
917
- }, {});
918
- }
919
-
920
- function getSignatureID() {
921
- return Math.floor(Math.random() * 2147483648).toString(16);
922
- }
923
-
924
- function generateTimestampRelative() {
925
- var d = new Date();
926
- return d.getHours() + ":" + padZeros(d.getMinutes());
927
- }
928
-
929
- var NUM_TO_MONTH = [
930
- "Jan",
931
- "Feb",
932
- "Mar",
933
- "Apr",
934
- "May",
935
- "Jun",
936
- "Jul",
937
- "Aug",
938
- "Sep",
939
- "Oct",
940
- "Nov",
941
- "Dec"
942
- ];
943
- var NUM_TO_DAY = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
944
-
945
- function formatDate(date) {
946
- var d = date.getUTCDate();
947
- d = d >= 10 ? d : "0" + d;
948
- var h = date.getUTCHours();
949
- h = h >= 10 ? h : "0" + h;
950
- var m = date.getUTCMinutes();
951
- m = m >= 10 ? m : "0" + m;
952
- var s = date.getUTCSeconds();
953
- s = s >= 10 ? s : "0" + s;
954
- return (
955
- NUM_TO_DAY[date.getUTCDay()] +
956
- ", " +
957
- d +
958
- " " +
959
- NUM_TO_MONTH[date.getUTCMonth()] +
960
- " " +
961
- date.getUTCFullYear() +
962
- " " +
963
- h +
964
- ":" +
965
- m +
966
- ":" +
967
- s +
968
- " GMT"
969
- );
970
- }
971
-
972
- function formatCookie(arr, url) {
973
- return (
974
- arr[0] + "=" + arr[1] + "; Path=" + arr[3] + "; Domain=" + url + ".com"
975
- );
976
- }
977
-
978
- function formatProxyPresence(presence, userID) {
979
- if (presence.lat === undefined || presence.p === undefined) return null;
980
- return {
981
- type: "presence",
982
- timestamp: presence.lat * 1000,
983
- userID: userID || "",
984
- statuses: presence.p
985
- };
986
- }
987
-
988
- function formatPresence(presence, userID) {
989
- return {
990
- type: "presence",
991
- timestamp: presence.la * 1000,
992
- userID: userID || "",
993
- statuses: presence.a
994
- };
995
- }
996
-
997
- function getData_Path(Obj, Arr, Stt) {
998
- if (Arr.length === 0 && Obj != undefined) {
999
- return Obj;
1000
- } else if (Obj == undefined) {
1001
- return Stt;
1002
- }
1003
- const head = Arr[0];
1004
- if (head == undefined) {
1005
- return Stt;
1006
- }
1007
- const tail = Arr.slice(1);
1008
- return getData_Path(Obj[head], tail, Stt++);
1009
- }
1010
-
1011
- function setData_Path(obj, path, value) {
1012
- if (!path.length) {
1013
- return obj;
1014
- }
1015
- const currentKey = path[0];
1016
- let currentObj = obj[currentKey];
1017
-
1018
- if (!currentObj) {
1019
- obj[currentKey] = value;
1020
- currentObj = obj[currentKey];
1021
- }
1022
- path.shift();
1023
- if (!path.length) {
1024
- currentObj = value;
1025
- } else {
1026
- currentObj = setData_Path(currentObj, path, value);
1027
- }
1028
-
1029
- return obj;
1030
- }
1031
-
1032
- function getPaths(obj, parentPath = []) {
1033
- let paths = [];
1034
- for (let prop in obj) {
1035
- if (typeof obj[prop] === "object") {
1036
- paths = paths.concat(getPaths(obj[prop], [...parentPath, prop]));
1037
- } else {
1038
- paths.push([...parentPath, prop]);
1039
- }
1040
- }
1041
- return paths;
1042
- }
1043
-
1044
- function cleanHTML(text) {
1045
- text = text.replace(
1046
- /(<br>)|(<\/?i>)|(<\/?em>)|(<\/?b>)|(!?~)|(&amp;)|(&#039;)|(&lt;)|(&gt;)|(&quot;)/g,
1047
- match => {
1048
- switch (match) {
1049
- case "<br>":
1050
- return "\n";
1051
- case "<i>":
1052
- case "<em>":
1053
- case "</i>":
1054
- case "</em>":
1055
- return "*";
1056
- case "<b>":
1057
- case "</b>":
1058
- return "**";
1059
- case "~!":
1060
- case "!~":
1061
- return "||";
1062
- case "&amp;":
1063
- return "&";
1064
- case "&#039;":
1065
- return "'";
1066
- case "&lt;":
1067
- return "<";
1068
- case "&gt;":
1069
- return ">";
1070
- case "&quot;":
1071
- return '"';
1072
- }
1073
- }
1074
- );
1075
- return text;
1076
- }
1077
-
1078
- function getCurrentTimestamp() {
1079
- const date = new Date();
1080
- const unixTime = date.getTime();
1081
- return unixTime;
1082
- }
1083
-
1084
- module.exports = {
1085
- getType,
1086
- generateOfflineThreadingID,
1087
- getAdminTextMessageType,
1088
- formatDeltaEvent,
1089
- formatHistoryMessage,
1090
- formatMessage,
1091
- _formatAttachment,
1092
- formatDeltaEvent,
1093
- formatDeltaMessage,
1094
- formatDeltaReadReceipt,
1095
- getType,
1096
- formatID,
1097
- decodeClientPayload,
1098
- formatTyp,
1099
- formatThread,
1100
- generateThreadingID,
1101
- formatRead,
1102
- formatTyp,
1103
- getGUID,
1104
- getPaths,
1105
- cleanHTML,
1106
- generateTimestampRelative,
1107
- formatDate,
1108
- formatCookie,
1109
- formatProxyPresence,
1110
- formatPresence,
1111
- getData_Path,
1112
- setData_Path,
1113
- getSignatureID,
1114
- getCurrentTimestamp
1115
- };