@dongdev/fca-unofficial 1.0.17 → 1.0.19

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 CHANGED
@@ -20,3 +20,9 @@ Too lazy to write changelog, sorry! (will write changelog in the next release, t
20
20
 
21
21
  ## v1.0.16 - 2025-05-07
22
22
  - Hotfix / auto bump
23
+
24
+ ## v1.0.17 - 2025-05-07
25
+ - Hotfix / auto bump
26
+
27
+ ## v1.0.18 - 2025-05-22
28
+ - Hotfix / auto bump
package/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  const utils = require("./utils");
3
3
  const log = require("npmlog");
4
- const { execSync } = require('child_process');
4
+ const { execSync, exec } = require('child_process');
5
5
  const { promises: fsPromises, readFileSync } = require('fs');
6
6
  const fs = require('fs');
7
7
  const axios = require('axios');
@@ -280,28 +280,38 @@ function loginHelper(appState, email, password, globalOptions, callback, prCallb
280
280
  mainPromise
281
281
  .then(async () => {
282
282
  if (global.fca.config.autoUpdate) {
283
- axios.get('https://raw.githubusercontent.com/DongDev-VN/fca-unofficial/main/package.json').then(async (res) => {
284
- const localbrand = JSON.parse(readFileSync('./node_modules/@dongdev/fca-unofficial/package.json')).version;
285
- if (localbrand != res.data.version) {
286
- logger(`New Version Published: ${JSON.parse(readFileSync('./node_modules/@dongdev/fca-unofficial/package.json')).version} => ${res.data.version}`, 'warn');
287
- logger(`Perform Automatic Update to the Latest Version !`, 'warn');
288
- try {
289
- execSync('npm install @dongdev/fca-unofficial@latest', { stdio: 'inherit' });
290
- logger("Upgrade Version Successfully!", "[ FCA-UNO ] >")
291
- logger('Restarting...', '[ FCA-UNO ] >');
283
+ try {
284
+ exec('npm view @dongdev/fca-unofficial version', async (error, stdout, stderr) => {
285
+ if (error) {
286
+ logger('Error checking version: ' + error, 'error');
287
+ return;
288
+ }
289
+ const npmVersion = stdout.trim();
290
+ const localbrand = JSON.parse(readFileSync('./node_modules/@dongdev/fca-unofficial/package.json')).version;
291
+ if (localbrand !== npmVersion) {
292
+ logger(`New Version Published: ${localbrand} => ${npmVersion}`, 'warn');
293
+ logger(`Perform Automatic Update to the Latest Version !`, 'warn');
294
+ try {
295
+ execSync('npm install @dongdev/fca-unofficial@latest', { stdio: 'inherit' });
296
+ logger("Upgrade Version Successfully!", "[ FCA-UNO ] >")
297
+ logger('Restarting...', '[ FCA-UNO ] >');
298
+ await new Promise(resolve => setTimeout(resolve, 5 * 1000));
299
+ console.clear();
300
+ process.exit(1);
301
+ } catch (err) {
302
+ logger('Error Auto Update ! ' + err, 'error');
303
+ }
304
+ } else {
305
+ logger(`You Are Currently Using Version: ${localbrand} !`, "[ FCA-UNO ] >");
306
+ logger(`Have a good day !`, "[ FCA-UNO ] >")
292
307
  await new Promise(resolve => setTimeout(resolve, 5 * 1000));
293
- console.clear();
294
- process.exit(1);
295
- } catch (err) {
296
- logger('Error Auto Update ! ' + err, 'error');
308
+ callback(null, api);
297
309
  }
298
- } else {
299
- logger(`You Are Currently Using Version: ` + localbrand + ' !', "[ FCA-UNO ] >");
300
- logger(`Have a good day !`, "[ FCA-UNO ] >")
301
- await new Promise(resolve => setTimeout(resolve, 5 * 1000));
302
- callback(null, api);
303
- }
304
- });
310
+ });
311
+ } catch (err) {
312
+ logger('Error checking for updates: ' + err, 'error');
313
+ callback(null, api);
314
+ }
305
315
  }
306
316
  logger('Login successful!', '[ FCA-UNO ] >');
307
317
  callback(null, api);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dongdev/fca-unofficial",
3
- "version": "1.0.17",
3
+ "version": "1.0.19",
4
4
  "description": "A Facebook chat API without XMPP, will not be deprecated after April 30th, 2015.",
5
5
  "main": "index.js",
6
6
  "repository": {
package/src/listenMqtt.js CHANGED
@@ -7,10 +7,11 @@ const HttpsProxyAgent = require("https-proxy-agent");
7
7
  const EventEmitter = require("events");
8
8
  const Duplexify = require("duplexify");
9
9
  const { Transform } = require("stream");
10
- var identity = function () {};
10
+ var identity = function () { };
11
11
  var form = {};
12
- var getSeqID = function () {};
12
+ var getSeqID = function () { };
13
13
  const logger = require("../lib/logger.js");
14
+ let mqttReconnectCount = 0;
14
15
  const topics = [
15
16
  "/ls_req",
16
17
  "/ls_resp",
@@ -228,6 +229,56 @@ function listenMqtt(defaultFuncs, api, ctx, globalCallback) {
228
229
  }
229
230
  });
230
231
  mqttClient.on("connect", function () {
232
+ let StopProcessing = true;
233
+ mqttReconnectCount = 0;
234
+ setInterval(() => {
235
+ console.log('Đang chuẩn bị ngắt kết nối MQTT...');
236
+ StopProcessing = true;
237
+ if (ctx.mqttClient) {
238
+ topics.forEach((topic) => {
239
+ try {
240
+ ctx.mqttClient.unsubscribe(topic);
241
+ } catch (e) { }
242
+ });
243
+ try {
244
+ ctx.mqttClient.publish("/browser_close", "{}");
245
+ } catch (e) { }
246
+ ctx.mqttClient.removeAllListeners();
247
+ console.log('Ngắt Kết Nối MQTT...');
248
+ let connectionClosed = false;
249
+ const afterConnectionClosed = () => {
250
+ if (connectionClosed) return;
251
+ connectionClosed = true;
252
+ ctx.lastSeqId = null;
253
+ ctx.syncToken = undefined;
254
+ ctx.t_mqttCalled = false;
255
+ mqttReconnectCount = 0;
256
+ StopProcessing = false;
257
+ console.log('Đang Kết Nối Lại MQTT...');
258
+ setTimeout(() => {
259
+ getSeqID();
260
+ console.log('Kết Nối Lại MQTT Thành Công');
261
+ }, 1000);
262
+ };
263
+ try {
264
+ ctx.mqttClient.end(false, afterConnectionClosed);
265
+ setTimeout(() => {
266
+ if (!connectionClosed) {
267
+ console.warn('Đóng kết nối MQTT bằng timeout');
268
+ ctx.mqttClient = undefined;
269
+ afterConnectionClosed();
270
+ }
271
+ }, 5000);
272
+ } catch (e) {
273
+ console.error('Lỗi khi đóng kết nối MQTT:', e);
274
+ ctx.mqttClient = undefined;
275
+ afterConnectionClosed();
276
+ }
277
+ } else {
278
+ getSeqID();
279
+ console.log('Kết Nối Lại MQTT Thành Công');
280
+ }
281
+ }, 60 * 60 * 1000);
231
282
  if (process.env.OnStatus === undefined) {
232
283
  logger("fca-unoffcial premium", "info");
233
284
  process.env.OnStatus = true;
@@ -271,9 +322,9 @@ function listenMqtt(defaultFuncs, api, ctx, globalCallback) {
271
322
  clearTimeout(rTimeout);
272
323
  ctx.globalOptions.emitReady
273
324
  ? globalCallback({
274
- type: "ready",
275
- error: null,
276
- })
325
+ type: "ready",
326
+ error: null,
327
+ })
277
328
  : "";
278
329
  delete ctx.tmsWait;
279
330
  };
@@ -358,11 +409,10 @@ function listenMqtt(defaultFuncs, api, ctx, globalCallback) {
358
409
  if (taskRespData == null) {
359
410
  taskCallback("error", null);
360
411
  } else {
361
- taskCallback(null, {
412
+ taskCallback(null, Object.assign({
362
413
  type: taskType,
363
- reqID: reqID,
364
- ...taskRespData,
365
- });
414
+ reqID: reqID
415
+ }, taskRespData));
366
416
  }
367
417
  }
368
418
  }
@@ -372,8 +422,8 @@ function listenMqtt(defaultFuncs, api, ctx, globalCallback) {
372
422
  return;
373
423
  }
374
424
  });
375
- mqttClient.on("close", function () {});
376
- mqttClient.on("disconnect", () => {});
425
+ mqttClient.on("close", function () { });
426
+ mqttClient.on("disconnect", () => { });
377
427
  }
378
428
  function getTaskResponseData(taskType, payload) {
379
429
  try {
@@ -476,10 +526,10 @@ function parseDelta(defaultFuncs, api, ctx, globalCallback, { delta }) {
476
526
  delta.deltaMessageReply.message === undefined
477
527
  ? []
478
528
  : delta.deltaMessageReply.message.data === undefined
479
- ? []
480
- : delta.deltaMessageReply.message.data.prng === undefined
481
- ? []
482
- : JSON.parse(delta.deltaMessageReply.message.data.prng);
529
+ ? []
530
+ : delta.deltaMessageReply.message.data.prng === undefined
531
+ ? []
532
+ : JSON.parse(delta.deltaMessageReply.message.data.prng);
483
533
 
484
534
  const m_id = mdata.map((u) => u.i);
485
535
  const m_offset = mdata.map((u) => u.o);
@@ -495,9 +545,9 @@ function parseDelta(defaultFuncs, api, ctx, globalCallback, { delta }) {
495
545
  threadID: (delta.deltaMessageReply.message.messageMetadata.threadKey
496
546
  .threadFbId
497
547
  ? delta.deltaMessageReply.message.messageMetadata.threadKey
498
- .threadFbId
548
+ .threadFbId
499
549
  : delta.deltaMessageReply.message.messageMetadata.threadKey
500
- .otherUserFbId
550
+ .otherUserFbId
501
551
  ).toString(),
502
552
  messageID:
503
553
  delta.deltaMessageReply.message.messageMetadata.messageId,
@@ -540,13 +590,13 @@ function parseDelta(defaultFuncs, api, ctx, globalCallback, { delta }) {
540
590
  delta.deltaMessageReply.repliedToMessage === undefined
541
591
  ? []
542
592
  : delta.deltaMessageReply.repliedToMessage.data === undefined
543
- ? []
544
- : delta.deltaMessageReply.repliedToMessage.data.prng ===
545
- undefined
546
- ? []
547
- : JSON.parse(
548
- delta.deltaMessageReply.repliedToMessage.data.prng
549
- );
593
+ ? []
594
+ : delta.deltaMessageReply.repliedToMessage.data.prng ===
595
+ undefined
596
+ ? []
597
+ : JSON.parse(
598
+ delta.deltaMessageReply.repliedToMessage.data.prng
599
+ );
550
600
  const m_id = mdata.map((u) => u.i);
551
601
  const m_offset = mdata.map((u) => u.o);
552
602
  const m_length = mdata.map((u) => u.l);
@@ -560,9 +610,9 @@ function parseDelta(defaultFuncs, api, ctx, globalCallback, { delta }) {
560
610
  threadID: (delta.deltaMessageReply.repliedToMessage
561
611
  .messageMetadata.threadKey.threadFbId
562
612
  ? delta.deltaMessageReply.repliedToMessage.messageMetadata
563
- .threadKey.threadFbId
613
+ .threadKey.threadFbId
564
614
  : delta.deltaMessageReply.repliedToMessage.messageMetadata
565
- .threadKey.otherUserFbId
615
+ .threadKey.otherUserFbId
566
616
  ).toString(),
567
617
  messageID:
568
618
  delta.deltaMessageReply.repliedToMessage.messageMetadata
@@ -782,37 +832,37 @@ function parseDelta(defaultFuncs, api, ctx, globalCallback, { delta }) {
782
832
  case "ThreadImageMessage":
783
833
  (!ctx.globalOptions.selfListen &&
784
834
  fetchData.message_sender.id.toString() === ctx.userID) ||
785
- !ctx.loggedIn
835
+ !ctx.loggedIn
786
836
  ? undefined
787
837
  : (function () {
788
- globalCallback(null, {
789
- type: "event",
790
- threadID: utils.formatID(tid.toString()),
791
- logMessageType: "log:thread-image",
792
- logMessageData: {
793
- image: {
794
- attachmentID:
795
- fetchData.image_with_metadata &&
796
- fetchData.image_with_metadata
797
- .legacy_attachment_id,
798
- width:
799
- fetchData.image_with_metadata &&
800
- fetchData.image_with_metadata
801
- .original_dimensions.x,
802
- height:
803
- fetchData.image_with_metadata &&
804
- fetchData.image_with_metadata
805
- .original_dimensions.y,
806
- url:
807
- fetchData.image_with_metadata &&
808
- fetchData.image_with_metadata.preview.uri,
809
- },
838
+ globalCallback(null, {
839
+ type: "event",
840
+ threadID: utils.formatID(tid.toString()),
841
+ logMessageType: "log:thread-image",
842
+ logMessageData: {
843
+ image: {
844
+ attachmentID:
845
+ fetchData.image_with_metadata &&
846
+ fetchData.image_with_metadata
847
+ .legacy_attachment_id,
848
+ width:
849
+ fetchData.image_with_metadata &&
850
+ fetchData.image_with_metadata
851
+ .original_dimensions.x,
852
+ height:
853
+ fetchData.image_with_metadata &&
854
+ fetchData.image_with_metadata
855
+ .original_dimensions.y,
856
+ url:
857
+ fetchData.image_with_metadata &&
858
+ fetchData.image_with_metadata.preview.uri,
810
859
  },
811
- logMessageBody: fetchData.snippet,
812
- timestamp: fetchData.timestamp_precise,
813
- author: fetchData.message_sender.id,
814
- });
815
- })();
860
+ },
861
+ logMessageBody: fetchData.snippet,
862
+ timestamp: fetchData.timestamp_precise,
863
+ author: fetchData.message_sender.id,
864
+ });
865
+ })();
816
866
  break;
817
867
  case "UserMessage": {
818
868
  const event = {
@@ -981,7 +1031,7 @@ module.exports = function (defaultFuncs, api, ctx) {
981
1031
  return function (callback) {
982
1032
  class MessageEmitter extends EventEmitter {
983
1033
  stopListening(callback) {
984
- callback = callback || (() => {});
1034
+ callback = callback || (() => { });
985
1035
  globalCallback = identity;
986
1036
  if (ctx.mqttClient) {
987
1037
  ctx.mqttClient.unsubscribe("/webrtc");