@dongdev/fca-unofficial 3.0.21 → 3.0.23
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/CHANGELOG.md +6 -0
- package/module/loginHelper.js +15 -1
- package/package.json +1 -1
- package/src/api/socket/core/parseDelta.js +3 -17
- package/src/utils/format.js +48 -16
package/CHANGELOG.md
CHANGED
package/module/loginHelper.js
CHANGED
|
@@ -1005,7 +1005,21 @@ function loginHelper(appState, Cookie, email, password, globalOptions, callback)
|
|
|
1005
1005
|
skipped++;
|
|
1006
1006
|
return;
|
|
1007
1007
|
}
|
|
1008
|
-
|
|
1008
|
+
let mod;
|
|
1009
|
+
try {
|
|
1010
|
+
mod = require(p);
|
|
1011
|
+
} catch (e) {
|
|
1012
|
+
logger(`Failed to require API module ${p}: ${e && e.message ? e.message : String(e)}`, "warn");
|
|
1013
|
+
skipped++;
|
|
1014
|
+
return;
|
|
1015
|
+
}
|
|
1016
|
+
const factory = typeof mod === "function" ? mod : (mod && typeof mod.default === "function" ? mod.default : null);
|
|
1017
|
+
if (!factory) {
|
|
1018
|
+
logger(`API module ${p} does not export a function, skipping`, "warn");
|
|
1019
|
+
skipped++;
|
|
1020
|
+
return;
|
|
1021
|
+
}
|
|
1022
|
+
api[key] = factory(defaultFuncs, api, ctxMain);
|
|
1009
1023
|
loaded++;
|
|
1010
1024
|
});
|
|
1011
1025
|
});
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const { formatDeltaEvent, formatMessage, _formatAttachment, formatDeltaMessage, formatDeltaReadReceipt, formatID, getType, decodeClientPayload } = require("../../../utils/format");
|
|
2
|
+
const { formatDeltaEvent, formatMessage, _formatAttachment, formatDeltaMessage, formatDeltaReadReceipt, formatID, getType, decodeClientPayload, getMentionsFromDeltaMessage } = require("../../../utils/format");
|
|
3
3
|
const logger = require("../../../../func/logger");
|
|
4
4
|
module.exports = function createParseDelta(deps) {
|
|
5
5
|
const { markDelivery, parseAndCheckLogin } = deps;
|
|
@@ -67,14 +67,7 @@ module.exports = function createParseDelta(deps) {
|
|
|
67
67
|
logger("parseDelta: deltaMessageReply.message or messageMetadata is missing", "warn");
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
70
|
-
const
|
|
71
|
-
const m_id = mdata.map(u => u.i);
|
|
72
|
-
const m_offset = mdata.map(u => u.o);
|
|
73
|
-
const m_length = mdata.map(u => u.l);
|
|
74
|
-
const mentions = {};
|
|
75
|
-
for (let i = 0; i < m_id.length; i++) {
|
|
76
|
-
mentions[m_id[i]] = (msg.body || "").substring(m_offset[i], m_offset[i] + m_length[i]);
|
|
77
|
-
}
|
|
70
|
+
const mentions = getMentionsFromDeltaMessage(msg);
|
|
78
71
|
const msgMetadata = msg.messageMetadata;
|
|
79
72
|
const threadKey = msgMetadata.threadKey || {};
|
|
80
73
|
callbackToReturn = {
|
|
@@ -111,14 +104,7 @@ module.exports = function createParseDelta(deps) {
|
|
|
111
104
|
if (d.deltaMessageReply.repliedToMessage) {
|
|
112
105
|
try {
|
|
113
106
|
const repliedTo = d.deltaMessageReply.repliedToMessage;
|
|
114
|
-
const
|
|
115
|
-
const m_id2 = mdata2.map(u => u.i);
|
|
116
|
-
const m_offset2 = mdata2.map(u => u.o);
|
|
117
|
-
const m_length2 = mdata2.map(u => u.l);
|
|
118
|
-
const rmentions = {};
|
|
119
|
-
for (let i = 0; i < m_id2.length; i++) {
|
|
120
|
-
rmentions[m_id2[i]] = (repliedTo.body || "").substring(m_offset2[i], m_offset2[i] + m_length2[i]);
|
|
121
|
-
}
|
|
107
|
+
const rmentions = getMentionsFromDeltaMessage(repliedTo);
|
|
122
108
|
const msgMetadata = repliedTo.messageMetadata;
|
|
123
109
|
if (msgMetadata && msgMetadata.threadKey) {
|
|
124
110
|
callbackToReturn.messageReply = {
|
package/src/utils/format.js
CHANGED
|
@@ -540,25 +540,56 @@ function formatAttachment(attachments, attachmentIds, attachmentMap, shareMap) {
|
|
|
540
540
|
: [];
|
|
541
541
|
}
|
|
542
542
|
|
|
543
|
+
/**
|
|
544
|
+
* Extract mentions from message - supports legacy (data.prng) and new format (messageMetadata.data.data.Gb.asMap.data).
|
|
545
|
+
* @param {Object} m - Raw message object (NewMessage delta)
|
|
546
|
+
* @returns {Object} mentions - Map of userID -> mention text
|
|
547
|
+
*/
|
|
548
|
+
function getMentionsFromDeltaMessage(m) {
|
|
549
|
+
var body = m.body || "";
|
|
550
|
+
var mentions = {};
|
|
551
|
+
var mdata = [];
|
|
552
|
+
if (m.data && m.data.prng) {
|
|
553
|
+
try {
|
|
554
|
+
mdata = JSON.parse(m.data.prng);
|
|
555
|
+
} catch (e) {
|
|
556
|
+
mdata = [];
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
if (mdata.length > 0) {
|
|
560
|
+
for (var i = 0; i < mdata.length; i++) {
|
|
561
|
+
var id = mdata[i].i;
|
|
562
|
+
var o = parseInt(mdata[i].o, 10) || 0;
|
|
563
|
+
var l = parseInt(mdata[i].l, 10) || 0;
|
|
564
|
+
mentions[String(id)] = body.substring(o, o + l);
|
|
565
|
+
}
|
|
566
|
+
return mentions;
|
|
567
|
+
}
|
|
568
|
+
var md = m.messageMetadata;
|
|
569
|
+
if (md && md.data && md.data.data && md.data.data.Gb && md.data.data.Gb.asMap && md.data.data.Gb.asMap.data) {
|
|
570
|
+
var gbData = md.data.data.Gb.asMap.data;
|
|
571
|
+
for (var key in gbData) {
|
|
572
|
+
if (!Object.prototype.hasOwnProperty.call(gbData, key)) continue;
|
|
573
|
+
var entry = gbData[key];
|
|
574
|
+
if (entry && entry.asMap && entry.asMap.data) {
|
|
575
|
+
var d = entry.asMap.data;
|
|
576
|
+
var id = d.id && d.id.asLong ? String(d.id.asLong) : null;
|
|
577
|
+
var offset = parseInt((d.offset && d.offset.asLong) ? d.offset.asLong : 0, 10);
|
|
578
|
+
var len = parseInt((d.length && d.length.asLong) ? d.length.asLong : 0, 10);
|
|
579
|
+
if (id != null) {
|
|
580
|
+
mentions[id] = body.substring(offset, offset + len);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
return mentions;
|
|
586
|
+
}
|
|
587
|
+
|
|
543
588
|
function formatDeltaMessage(m) {
|
|
544
589
|
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
590
|
var body = m.body || "";
|
|
556
|
-
var
|
|
557
|
-
|
|
558
|
-
mentions[m_id[i]] = m.body.substring(
|
|
559
|
-
m_offset[i],
|
|
560
|
-
m_offset[i] + m_length[i]
|
|
561
|
-
);
|
|
591
|
+
var mentions = getMentionsFromDeltaMessage(m);
|
|
592
|
+
var args = body === "" ? [] : body.trim().split(/\s+/);
|
|
562
593
|
return {
|
|
563
594
|
type: "message",
|
|
564
595
|
senderID: formatID(md.actorFbId.toString()),
|
|
@@ -1091,6 +1122,7 @@ module.exports = {
|
|
|
1091
1122
|
_formatAttachment,
|
|
1092
1123
|
formatDeltaEvent,
|
|
1093
1124
|
formatDeltaMessage,
|
|
1125
|
+
getMentionsFromDeltaMessage,
|
|
1094
1126
|
formatDeltaReadReceipt,
|
|
1095
1127
|
getType,
|
|
1096
1128
|
formatID,
|