alicezetion 1.6.3 → 1.6.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"nonce":4987624820685372758,"last_updated":{"seconds":1693616316,"nanos":814839000}}
1
+ {"nonce":2713507693407859680,"last_updated":{"seconds":1693627168,"nanos":391066000}}
package/index.js CHANGED
@@ -4,17 +4,12 @@ var utils = require("./utils");
4
4
  var cheerio = require("cheerio");
5
5
  var log = require("npmlog");
6
6
 
7
- var checkVerified = null;
8
-
9
7
  var defaultLogRecordSize = 100;
10
8
  log.maxRecordSize = defaultLogRecordSize;
11
9
 
12
10
  function setOptions(globalOptions, options) {
13
- Object.keys(options).map(function (key) {
11
+ Object.keys(options).map(function(key) {
14
12
  switch (key) {
15
- case 'online':
16
- globalOptions.online = Boolean(options.online);
17
- break;
18
13
  case 'logLevel':
19
14
  log.level = options.logLevel;
20
15
  globalOptions.logLevel = options.logLevel;
@@ -24,46 +19,28 @@ function setOptions(globalOptions, options) {
24
19
  globalOptions.logRecordSize = options.logRecordSize;
25
20
  break;
26
21
  case 'selfListen':
27
- globalOptions.selfListen = Boolean(options.selfListen);
22
+ globalOptions.selfListen = options.selfListen;
28
23
  break;
29
24
  case 'listenEvents':
30
- globalOptions.listenEvents = Boolean(options.listenEvents);
25
+ globalOptions.listenEvents = options.listenEvents;
31
26
  break;
32
27
  case 'pageID':
33
28
  globalOptions.pageID = options.pageID.toString();
34
29
  break;
35
30
  case 'updatePresence':
36
- globalOptions.updatePresence = Boolean(options.updatePresence);
31
+ globalOptions.updatePresence = options.updatePresence;
37
32
  break;
38
33
  case 'forceLogin':
39
- globalOptions.forceLogin = Boolean(options.forceLogin);
34
+ globalOptions.forceLogin = options.forceLogin;
40
35
  break;
41
36
  case 'userAgent':
42
37
  globalOptions.userAgent = options.userAgent;
43
38
  break;
44
39
  case 'autoMarkDelivery':
45
- globalOptions.autoMarkDelivery = Boolean(options.autoMarkDelivery);
40
+ globalOptions.autoMarkDelivery = options.autoMarkDelivery;
46
41
  break;
47
42
  case 'autoMarkRead':
48
- globalOptions.autoMarkRead = Boolean(options.autoMarkRead);
49
- break;
50
- case 'listenTyping':
51
- globalOptions.listenTyping = Boolean(options.listenTyping);
52
- break;
53
- case 'proxy':
54
- if (typeof options.proxy != "string") {
55
- delete globalOptions.proxy;
56
- utils.setProxy();
57
- } else {
58
- globalOptions.proxy = options.proxy;
59
- utils.setProxy(globalOptions.proxy);
60
- }
61
- break;
62
- case 'autoReconnect':
63
- globalOptions.autoReconnect = Boolean(options.autoReconnect);
64
- break;
65
- case 'emitReady':
66
- globalOptions.emitReady = Boolean(options.emitReady);
43
+ globalOptions.autoMarkRead = options.autoMarkRead;
67
44
  break;
68
45
  default:
69
46
  log.warn("setOptions", "Unrecognized option given to setOptions: " + key);
@@ -73,61 +50,18 @@ function setOptions(globalOptions, options) {
73
50
  }
74
51
 
75
52
  function buildAPI(globalOptions, html, jar) {
76
- var maybeCookie = jar.getCookies("https://www.facebook.com").filter(function (val) {
53
+ var maybeCookie = jar.getCookies("https://www.facebook.com").filter(function(val) {
77
54
  return val.cookieString().split("=")[0] === "c_user";
78
55
  });
79
56
 
80
- if (maybeCookie.length === 0) {
81
- throw { error: "Error retrieving userID. This can be caused by a lot of things, including getting blocked by Facebook for logging in from an unknown location. Try logging in with a browser to verify." };
82
- }
83
-
84
- if (html.indexOf("/checkpoint/block/?next") > -1) {
85
- log.warn("login", "Checkpoint detected. Please log in with a browser to verify.");
57
+ if(maybeCookie.length === 0) {
58
+ throw {error: "Error retrieving userID. This can be caused by a lot of things, including getting blocked by Facebook for logging in from an unknown location. Try logging in with a browser to verify."};
86
59
  }
87
60
 
88
61
  var userID = maybeCookie[0].cookieString().split("=")[1].toString();
89
- log.info("login", `Logged in as ${userID}`);
90
-
91
- try {
92
- clearInterval(checkVerified);
93
- } catch (_) { }
94
-
62
+ //log.info("login", "Logged in");
95
63
  var clientID = (Math.random() * 2147483648 | 0).toString(16);
96
64
 
97
-
98
- let oldFBMQTTMatch = html.match(/irisSeqID:"(.+?)",appID:219994525426954,endpoint:"(.+?)"/);
99
- let mqttEndpoint = null;
100
- let region = null;
101
- let irisSeqID = null;
102
- var noMqttData = null;
103
-
104
- if (oldFBMQTTMatch) {
105
- irisSeqID = oldFBMQTTMatch[1];
106
- mqttEndpoint = oldFBMQTTMatch[2];
107
- region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
108
- log.info("login", `Got this account's message region: ${region}`);
109
- } else {
110
- let newFBMQTTMatch = html.match(/{"app_id":"219994525426954","endpoint":"(.+?)","iris_seq_id":"(.+?)"}/);
111
- if (newFBMQTTMatch) {
112
- irisSeqID = newFBMQTTMatch[2];
113
- mqttEndpoint = newFBMQTTMatch[1].replace(/\\\//g, "/");
114
- region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
115
- log.info("login", `Got this account's message region: ${region}`);
116
- } else {
117
- let legacyFBMQTTMatch = html.match(/(\["MqttWebConfig",\[\],{fbid:")(.+?)(",appID:219994525426954,endpoint:")(.+?)(",pollingEndpoint:")(.+?)(3790])/);
118
- if (legacyFBMQTTMatch) {
119
- mqttEndpoint = legacyFBMQTTMatch[4];
120
- region = new URL(mqttEndpoint).searchParams.get("region").toUpperCase();
121
- log.warn("login", `Cannot get sequence ID with new RegExp. Fallback to old RegExp (without seqID)...`);
122
- log.info("login", `Got this account's message region: ${region}`);
123
- log.info("login", `[Unused] Polling endpoint: ${legacyFBMQTTMatch[6]}`);
124
- } else {
125
- log.warn("login", "Cannot get MQTT region & sequence ID.");
126
- noMqttData = html;
127
- }
128
- }
129
- }
130
-
131
65
  // All data available to api functions
132
66
  var ctx = {
133
67
  userID: userID,
@@ -138,36 +72,26 @@ function buildAPI(globalOptions, html, jar) {
138
72
  access_token: 'NONE',
139
73
  clientMutationId: 0,
140
74
  mqttClient: undefined,
141
- lastSeqId: irisSeqID,
142
- syncToken: undefined,
143
- mqttEndpoint,
144
- region,
145
- firstListen: true
75
+ lastSeqId: 0,
76
+ syncToken: undefined
146
77
  };
147
78
 
148
79
  var api = {
149
80
  setOptions: setOptions.bind(null, globalOptions),
150
81
  getAppState: function getAppState() {
151
82
  return utils.getAppState(jar);
152
- }
83
+ },
153
84
  };
154
85
 
155
- if (noMqttData) {
156
- api["htmlData"] = noMqttData;
157
- }
158
-
159
86
  const apiFuncNames = [
160
- 'addExternalModule',
161
87
  'addUserToGroup',
162
88
  'changeAdminStatus',
163
89
  'changeArchivedStatus',
164
- 'changeBio',
165
90
  'changeBlockedStatus',
166
91
  'changeGroupImage',
167
92
  'changeNickname',
168
93
  'changeThreadColor',
169
94
  'changeThreadEmoji',
170
- 'createNewGroup',
171
95
  'createPoll',
172
96
  'deleteMessage',
173
97
  'deleteThread',
@@ -187,54 +111,46 @@ function buildAPI(globalOptions, html, jar) {
187
111
  'markAsDelivered',
188
112
  'markAsRead',
189
113
  'markAsReadAll',
190
- 'markAsSeen',
191
114
  'muteThread',
192
115
  'removeUserFromGroup',
193
116
  'resolvePhotoUrl',
194
- 'searchForThread',
195
117
  'chat',
118
+ 'sendMessage',
196
119
  'sendTypingIndicator',
197
120
  'setMessageReaction',
198
121
  'setTitle',
199
122
  'threadColors',
200
123
  'unsendMessage',
201
124
 
202
- // HTTP
203
- 'httpGet',
204
- 'httpPost',
205
-
206
125
  // Deprecated features
207
126
  "getThreadListDeprecated",
208
127
  'getThreadHistoryDeprecated',
209
128
  'getThreadInfoDeprecated',
129
+ 'listen'
210
130
  ];
211
131
 
212
132
  var defaultFuncs = utils.makeDefaults(html, userID, ctx);
213
133
 
214
134
  // Load all api functions in a loop
215
- apiFuncNames.map(function (v) {
135
+ apiFuncNames.map(function(v) {
216
136
  api[v] = require('./leiamnash/' + v)(defaultFuncs, api, ctx);
217
137
  });
218
138
 
219
- //Removing original `listen` that uses pull.
220
- //Map it to listenMqtt instead for backward compatibly.
221
- api.listen = api.listenMqtt;
222
-
223
139
  return [ctx, defaultFuncs, api];
224
140
  }
225
141
 
226
- function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
227
- return function (res) {
142
+ function makeLogin(jar, email, password, loginOptions, callback) {
143
+ return function(res) {
228
144
  var html = res.body;
229
145
  var $ = cheerio.load(html);
230
146
  var arr = [];
231
147
 
232
148
  // This will be empty, but just to be sure we leave it
233
- $("#login_form input").map(function (i, v) {
234
- arr.push({ val: $(v).val(), name: $(v).attr("name") });
149
+ $("#login_form input").map(function(i, v){
150
+ arr.push({val: $(v).val(), name: $(v).attr("name")});
235
151
  });
236
152
 
237
- arr = arr.filter(function (v) {
153
+ arr = arr.filter(function(v) {
238
154
  return v.val && v.val.length;
239
155
  });
240
156
 
@@ -260,20 +176,20 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
260
176
  //
261
177
  // ---------- Very Hacky Part Starts -----------------
262
178
  var willBeCookies = html.split("\"_js_");
263
- willBeCookies.slice(1).map(function (val) {
179
+ willBeCookies.slice(1).map(function(val) {
264
180
  var cookieData = JSON.parse("[\"" + utils.getFrom(val, "", "]") + "]");
265
181
  jar.setCookie(utils.formatCookie(cookieData, "facebook"), "https://www.facebook.com");
266
182
  });
267
183
  // ---------- Very Hacky Part Ends -----------------
268
184
 
269
- log.info("login", "Logging in...");
185
+ //log.info("login", "Logging in...");
270
186
  return utils
271
- .post("https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110", jar, form, loginOptions)
187
+ .post("https://www.facebook.com/login.php?login_attempt=1&lwv=110", jar, form, loginOptions)
272
188
  .then(utils.saveCookies(jar))
273
- .then(function (res) {
189
+ .then(function(res) {
274
190
  var headers = res.headers;
275
191
  if (!headers.location) {
276
- throw { error: "Wrong username/password." };
192
+ throw {error: "Wrong username/password."};
277
193
  }
278
194
 
279
195
  // This means the account has login approvals turned on.
@@ -284,150 +200,57 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
284
200
  return utils
285
201
  .get(headers.location, jar, null, loginOptions)
286
202
  .then(utils.saveCookies(jar))
287
- .then(function (res) {
203
+ .then(function(res) {
288
204
  var html = res.body;
289
205
  // Make the form in advance which will contain the fb_dtsg and nh
290
206
  var $ = cheerio.load(html);
291
207
  var arr = [];
292
- $("form input").map(function (i, v) {
293
- arr.push({ val: $(v).val(), name: $(v).attr("name") });
208
+ $("form input").map(function(i, v){
209
+ arr.push({val: $(v).val(), name: $(v).attr("name")});
294
210
  });
295
211
 
296
- arr = arr.filter(function (v) {
212
+ arr = arr.filter(function(v) {
297
213
  return v.val && v.val.length;
298
214
  });
299
215
 
300
216
  var form = utils.arrToForm(arr);
301
217
  if (html.indexOf("checkpoint/?next") > -1) {
302
- setTimeout(() => {
303
- checkVerified = setInterval((_form) => {
304
- /* utils
305
- .post("https://www.facebook.com/login/approvals/approved_machine_check/", jar, form, loginOptions, null, {
306
- "Referer": "https://www.facebook.com/checkpoint/?next"
307
- })
308
- .then(utils.saveCookies(jar))
309
- .then(res => {
310
- try {
311
- JSON.parse(res.body.replace(/for\s*\(\s*;\s*;\s*\)\s*;\s*()/, ""));
312
- } catch (ex) {
313
- clearInterval(checkVerified);
314
- log.info("login", "Verified from browser. Logging in...");
315
- return loginHelper(utils.getAppState(jar), email, password, loginOptions, callback);
316
- }
317
- })
318
- .catch(ex => {
319
- log.error("login", ex);
320
- }); */
321
- }, 5000, {
322
- fb_dtsg: form.fb_dtsg,
323
- jazoest: form.jazoest,
324
- dpr: 1
325
- });
326
- }, 2500);
327
218
  throw {
328
219
  error: 'login-approval',
329
- continue: function submit2FA(code) {
220
+ continue: function(code) {
330
221
  form.approvals_code = code;
331
- form['submit[Continue]'] = $("#checkpointSubmitButton").html(); //'Continue';
332
- var prResolve = null;
333
- var prReject = null;
334
- var rtPromise = new Promise(function (resolve, reject) {
335
- prResolve = resolve;
336
- prReject = reject;
337
- });
338
- if (typeof code == "string") {
339
- utils
340
- .post(nextURL, jar, form, loginOptions)
341
- .then(utils.saveCookies(jar))
342
- .then(function (res) {
343
- var $ = cheerio.load(res.body);
344
- var error = $("#approvals_code").parent().attr("data-xui-error");
345
- if (error) {
346
- throw {
347
- error: 'login-approval',
348
- errordesc: "Invalid 2FA code.",
349
- lerror: error,
350
- continue: submit2FA
351
- };
352
- }
353
- })
354
- .then(function () {
355
- // Use the same form (safe I hope)
356
- delete form.no_fido;
357
- delete form.approvals_code;
358
- form.name_action_selected = 'dont_save'; //'save_device';
359
-
360
- return utils
361
- .post(nextURL, jar, form, loginOptions)
362
- .then(utils.saveCookies(jar));
363
- })
364
- .then(function (res) {
365
- var headers = res.headers;
366
- if (!headers.location && res.body.indexOf('Review Recent Login') > -1) {
367
- throw { error: "Something went wrong with login approvals." };
368
- }
369
-
370
- var appState = utils.getAppState(jar);
371
-
372
- if (callback === prCallback) {
373
- callback = function (err, api) {
374
- if (err) {
375
- return prReject(err);
376
- }
377
- return prResolve(api);
378
- };
379
- }
380
-
381
- // Simply call loginHelper because all it needs is the jar
382
- // and will then complete the login process
383
- return loginHelper(appState, email, password, loginOptions, callback);
384
- })
385
- .catch(function (err) {
386
- // Check if using Promise instead of callback
387
- if (callback === prCallback) {
388
- prReject(err);
389
- } else {
390
- callback(err);
391
- }
392
- });
393
- } else {
394
- utils
395
- .post("https://www.facebook.com/checkpoint/?next=https%3A%2F%2Fwww.facebook.com%2Fhome.php", jar, form, loginOptions, null, {
396
- "Referer": "https://www.facebook.com/checkpoint/?next"
397
- })
398
- .then(utils.saveCookies(jar))
399
- .then(res => {
400
- try {
401
- JSON.parse(res.body.replace(/for\s*\(\s*;\s*;\s*\)\s*;\s*/, ""));
402
- } catch (ex) {
403
- clearInterval(checkVerified);
404
- log.info("login", "Verified from browser. Logging in...");
405
- if (callback === prCallback) {
406
- callback = function (err, api) {
407
- if (err) {
408
- return prReject(err);
409
- }
410
- return prResolve(api);
411
- };
412
- }
413
- return loginHelper(utils.getAppState(jar), email, password, loginOptions, callback);
414
- }
415
- })
416
- .catch(ex => {
417
- log.error("login", ex);
418
- if (callback === prCallback) {
419
- prReject(ex);
420
- } else {
421
- callback(ex);
422
- }
423
- });
424
- }
425
- return rtPromise;
222
+ form['submit[Continue]'] = 'Continue';
223
+ return utils
224
+ .post(nextURL, jar, form, loginOptions)
225
+ .then(utils.saveCookies(jar))
226
+ .then(function() {
227
+ // Use the same form (safe I hope)
228
+ form.name_action_selected = 'save_device';
229
+
230
+ return utils
231
+ .post(nextURL, jar, form, loginOptions)
232
+ .then(utils.saveCookies(jar));
233
+ })
234
+ .then(function(res) {
235
+ var headers = res.headers;
236
+ if (!headers.location && res.body.indexOf('Review Recent Login') > -1) {
237
+ throw {error: "Something went wrong with login approvals."};
238
+ }
239
+
240
+ var appState = utils.getAppState(jar);
241
+
242
+ // Simply call loginHelper because all it needs is the jar
243
+ // and will then complete the login process
244
+ return loginHelper(appState, email, password, loginOptions, callback);
245
+ })
246
+ .catch(function(err) {
247
+ callback(err);
248
+ });
426
249
  }
427
250
  };
428
251
  } else {
429
252
  if (!loginOptions.forceLogin) {
430
- throw { error: "Couldn't login. Facebook might have blocked this account. Please login with a browser or enable the option 'forceLogin' and try again." };
253
+ throw {error: "Couldn't login. Facebook might have blocked this account. Please login with a browser or enable the option 'forceLogin' and try again."};
431
254
  }
432
255
  if (html.indexOf("Suspicious Login Attempt") > -1) {
433
256
  form['submit[This was me]'] = "This was me";
@@ -438,7 +261,7 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
438
261
  return utils
439
262
  .post(nextURL, jar, form, loginOptions)
440
263
  .then(utils.saveCookies(jar))
441
- .then(function () {
264
+ .then(function() {
442
265
  // Use the same form (safe I hope)
443
266
  form.name_action_selected = 'save_device';
444
267
 
@@ -446,11 +269,11 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
446
269
  .post(nextURL, jar, form, loginOptions)
447
270
  .then(utils.saveCookies(jar));
448
271
  })
449
- .then(function (res) {
272
+ .then(function(res) {
450
273
  var headers = res.headers;
451
274
 
452
275
  if (!headers.location && res.body.indexOf('Review Recent Login') > -1) {
453
- throw { error: "Something went wrong with review recent login." };
276
+ throw {error: "Something went wrong with review recent login."};
454
277
  }
455
278
 
456
279
  var appState = utils.getAppState(jar);
@@ -459,7 +282,7 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
459
282
  // and will then complete the login process
460
283
  return loginHelper(appState, email, password, loginOptions, callback);
461
284
  })
462
- .catch(function (e) {
285
+ .catch(function(e) {
463
286
  callback(e);
464
287
  });
465
288
  }
@@ -474,30 +297,30 @@ function makeLogin(jar, email, password, loginOptions, callback, prCallback) {
474
297
  }
475
298
 
476
299
  // Helps the login
477
- function loginHelper(appState, email, password, globalOptions, callback, prCallback) {
300
+ function loginHelper(appState, email, password, globalOptions, callback) {
478
301
  var mainPromise = null;
479
302
  var jar = utils.getJar();
480
303
 
481
304
  // If we're given an appState we loop through it and save each cookie
482
305
  // back into the jar.
483
- if (appState) {
484
- appState.map(function (c) {
306
+ if(appState) {
307
+ appState.map(function(c) {
485
308
  var str = c.key + "=" + c.value + "; expires=" + c.expires + "; domain=" + c.domain + "; path=" + c.path + ";";
486
309
  jar.setCookie(str, "http://" + c.domain);
487
310
  });
488
311
 
489
312
  // Load the main page.
490
313
  mainPromise = utils
491
- .get('https://www.facebook.com/', jar, null, globalOptions, { noRef: true })
314
+ .get('https://www.facebook.com/', jar, null, globalOptions)
492
315
  .then(utils.saveCookies(jar));
493
316
  } else {
494
317
  // Open the main page, then we login with the given credentials and finally
495
318
  // load the main page again (it'll give us some IDs that we need)
496
319
  mainPromise = utils
497
- .get("https://www.facebook.com/", null, null, globalOptions, { noRef: true })
320
+ .get("https://www.facebook.com/", null, null, globalOptions)
498
321
  .then(utils.saveCookies(jar))
499
- .then(makeLogin(jar, email, password, globalOptions, callback, prCallback))
500
- .then(function () {
322
+ .then(makeLogin(jar, email, password, globalOptions, callback))
323
+ .then(function() {
501
324
  return utils
502
325
  .get('https://www.facebook.com/', jar, null, globalOptions)
503
326
  .then(utils.saveCookies(jar));
@@ -505,11 +328,11 @@ function loginHelper(appState, email, password, globalOptions, callback, prCallb
505
328
  }
506
329
 
507
330
  var ctx = null;
508
- var _defaultFuncs = null;
331
+ var defaultFuncs = null;
509
332
  var api = null;
510
333
 
511
334
  mainPromise = mainPromise
512
- .then(function (res) {
335
+ .then(function(res) {
513
336
  // Hacky check for the redirection that happens on some ISPs, which doesn't return statusCode 3xx
514
337
  var reg = /<meta http-equiv="refresh" content="0;url=([^"]+)[^>]+>/;
515
338
  var redirect = reg.exec(res.body);
@@ -520,23 +343,41 @@ function loginHelper(appState, email, password, globalOptions, callback, prCallb
520
343
  }
521
344
  return res;
522
345
  })
523
- .then(function (res) {
346
+ .then(function(res) {
524
347
  var html = res.body;
525
348
  var stuff = buildAPI(globalOptions, html, jar);
526
349
  ctx = stuff[0];
527
- _defaultFuncs = stuff[1];
350
+ defaultFuncs = stuff[1];
528
351
  api = stuff[2];
529
352
  return res;
353
+ })
354
+ .then(function() {
355
+ var form = {
356
+ reason: 6
357
+ };
358
+ // log.info("login", 'Request to reconnect');
359
+ return defaultFuncs
360
+ .get("https://www.facebook.com/ajax/presence/reconnect.php", ctx.jar, form)
361
+ .then(utils.saveCookies(ctx.jar));
362
+ })
363
+ .then(function() {
364
+ var presence = utils.generatePresence(ctx.userID);
365
+ ctx.jar.setCookie("presence=" + presence + "; path=/; domain=.facebook.com; secure", "https://www.facebook.com");
366
+ ctx.jar.setCookie("presence=" + presence + "; path=/; domain=.messenger.com; secure", "https://www.messenger.com");
367
+ ctx.jar.setCookie("locale=en_US; path=/; domain=.facebook.com; secure", "https://www.facebook.com");
368
+ ctx.jar.setCookie("locale=en_US; path=/; domain=.messenger.com; secure", "https://www.messenger.com");
369
+ ctx.jar.setCookie("a11y=" + utils.generateAccessiblityCookie() + "; path=/; domain=.facebook.com; secure", "https://www.facebook.com");
370
+ return true;
530
371
  });
531
372
 
532
373
  // given a pageID we log in as a page
533
374
  if (globalOptions.pageID) {
534
375
  mainPromise = mainPromise
535
- .then(function () {
376
+ .then(function() {
536
377
  return utils
537
378
  .get('https://www.facebook.com/' + ctx.globalOptions.pageID + '/messages/?section=messages&subsection=inbox', ctx.jar, null, globalOptions);
538
379
  })
539
- .then(function (resData) {
380
+ .then(function(resData) {
540
381
  var url = utils.getFrom(resData.body, 'window.location.replace("https:\\/\\/www.facebook.com\\', '");').split('\\').join('');
541
382
  url = url.substring(0, url.length - 1);
542
383
 
@@ -547,18 +388,18 @@ function loginHelper(appState, email, password, globalOptions, callback, prCallb
547
388
 
548
389
  // At the end we call the callback or catch an exception
549
390
  mainPromise
550
- .then(function () {
551
- log.info("login", 'Done logging in.');
391
+ .then(function() {
392
+ // log.info("login", 'Done logging in.');
552
393
  return callback(null, api);
553
394
  })
554
- .catch(function (e) {
395
+ .catch(function(e) {
555
396
  log.error("login", e.error || e);
556
397
  callback(e);
557
398
  });
558
399
  }
559
400
 
560
401
  function login(loginData, options, callback) {
561
- if (utils.getType(options) === 'Function' || utils.getType(options) === 'AsyncFunction') {
402
+ if(utils.getType(options) === 'Function' || utils.getType(options) === 'AsyncFunction') {
562
403
  callback = options;
563
404
  options = {};
564
405
  }
@@ -566,38 +407,17 @@ function login(loginData, options, callback) {
566
407
  var globalOptions = {
567
408
  selfListen: false,
568
409
  listenEvents: false,
569
- listenTyping: false,
570
410
  updatePresence: false,
571
- forceLogin: false,
411
+ forceLogin: true,
572
412
  autoMarkDelivery: true,
573
413
  autoMarkRead: false,
574
- autoReconnect: true,
575
414
  logRecordSize: defaultLogRecordSize,
576
- online: true,
577
- emitReady: false,
578
- userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/8.0.3 Safari/600.3.18"
415
+ userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1 [FBAN/FBIOS;FBAV/68.0.0.49.70;FBBV/41924288;FBRV/0;FBDV/iPhone9,4;FBMD/iPhone;FBSN/iOS;FBSV/9.3.5;FBSS/2;FBCR/carrier;FBID/phone;FBLC/en_US;FBOP/5]"
579
416
  };
580
417
 
581
418
  setOptions(globalOptions, options);
582
419
 
583
- var prCallback = null;
584
- if (utils.getType(callback) !== "Function" && utils.getType(callback) !== "AsyncFunction") {
585
- var rejectFunc = null;
586
- var resolveFunc = null;
587
- var returnPromise = new Promise(function (resolve, reject) {
588
- resolveFunc = resolve;
589
- rejectFunc = reject;
590
- });
591
- prCallback = function (error, api) {
592
- if (error) {
593
- return rejectFunc(error);
594
- }
595
- return resolveFunc(api);
596
- };
597
- callback = prCallback;
598
- }
599
- loginHelper(loginData.appState, loginData.email, loginData.password, globalOptions, callback, prCallback);
600
- return returnPromise;
420
+ loginHelper(loginData.appState, loginData.email, loginData.password, globalOptions, callback);
601
421
  }
602
422
 
603
- module.exports = login;
423
+ module.exports = login;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alicezetion",
3
- "version": "1.6.3",
3
+ "version": "1.6.4",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "lint": "./node_modules/.bin/eslint **.js",