@another-trial/whatsapp-web.js 1.34.1 → 1.35.0-alpha.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.
- package/.env.example +2 -2
- package/CODE_OF_CONDUCT.md +133 -133
- package/LICENSE +201 -201
- package/README.md +155 -185
- package/example.js +699 -690
- package/index.d.ts +2248 -2202
- package/index.js +35 -35
- package/package.json +59 -59
- package/shell.js +36 -36
- package/src/Client.js +2447 -2361
- package/src/authStrategies/BaseAuthStrategy.js +26 -26
- package/src/authStrategies/LocalAuth.js +58 -58
- package/src/authStrategies/NoAuth.js +11 -11
- package/src/authStrategies/RemoteAuth.js +210 -210
- package/src/factories/ChatFactory.js +21 -21
- package/src/factories/ContactFactory.js +15 -15
- package/src/structures/Base.js +21 -21
- package/src/structures/Broadcast.js +69 -69
- package/src/structures/BusinessContact.js +20 -20
- package/src/structures/Buttons.js +81 -81
- package/src/structures/Call.js +75 -75
- package/src/structures/Channel.js +382 -382
- package/src/structures/Chat.js +329 -299
- package/src/structures/ClientInfo.js +70 -70
- package/src/structures/Contact.js +208 -208
- package/src/structures/GroupChat.js +485 -485
- package/src/structures/GroupNotification.js +104 -104
- package/src/structures/Label.js +49 -49
- package/src/structures/List.js +79 -79
- package/src/structures/Location.js +61 -61
- package/src/structures/Message.js +780 -747
- package/src/structures/MessageMedia.js +111 -111
- package/src/structures/Order.js +51 -51
- package/src/structures/Payment.js +79 -79
- package/src/structures/Poll.js +44 -44
- package/src/structures/PollVote.js +75 -75
- package/src/structures/PrivateChat.js +12 -12
- package/src/structures/PrivateContact.js +12 -12
- package/src/structures/Product.js +67 -67
- package/src/structures/ProductMetadata.js +24 -24
- package/src/structures/Reaction.js +68 -68
- package/src/structures/ScheduledEvent.js +71 -71
- package/src/structures/index.js +27 -27
- package/src/util/Constants.js +186 -183
- package/src/util/Injected/AuthStore/AuthStore.js +16 -16
- package/src/util/Injected/AuthStore/LegacyAuthStore.js +21 -21
- package/src/util/Injected/LegacyStore.js +145 -145
- package/src/util/Injected/Store.js +257 -233
- package/src/util/Injected/Utils.js +1168 -1169
- package/src/util/InterfaceController.js +126 -126
- package/src/util/Puppeteer.js +23 -23
- package/src/util/Util.js +186 -186
- package/src/webCache/LocalWebCache.js +40 -40
- package/src/webCache/RemoteWebCache.js +39 -39
- package/src/webCache/WebCache.js +13 -13
- package/src/webCache/WebCacheFactory.js +19 -19
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const PrivateContact = require('../structures/PrivateContact');
|
|
4
|
-
const BusinessContact = require('../structures/BusinessContact');
|
|
5
|
-
|
|
6
|
-
class ContactFactory {
|
|
7
|
-
static create(client, data) {
|
|
8
|
-
if(data.isBusiness) {
|
|
9
|
-
return new BusinessContact(client, data);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
return new PrivateContact(client, data);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const PrivateContact = require('../structures/PrivateContact');
|
|
4
|
+
const BusinessContact = require('../structures/BusinessContact');
|
|
5
|
+
|
|
6
|
+
class ContactFactory {
|
|
7
|
+
static create(client, data) {
|
|
8
|
+
if(data.isBusiness) {
|
|
9
|
+
return new BusinessContact(client, data);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return new PrivateContact(client, data);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
16
|
module.exports = ContactFactory;
|
package/src/structures/Base.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Represents a WhatsApp data structure
|
|
5
|
-
*/
|
|
6
|
-
class Base {
|
|
7
|
-
constructor(client) {
|
|
8
|
-
/**
|
|
9
|
-
* The client that instantiated this
|
|
10
|
-
* @readonly
|
|
11
|
-
*/
|
|
12
|
-
Object.defineProperty(this, 'client', { value: client });
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
_clone() {
|
|
16
|
-
return Object.assign(Object.create(this), this);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
_patch(data) { return data; }
|
|
20
|
-
}
|
|
21
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents a WhatsApp data structure
|
|
5
|
+
*/
|
|
6
|
+
class Base {
|
|
7
|
+
constructor(client) {
|
|
8
|
+
/**
|
|
9
|
+
* The client that instantiated this
|
|
10
|
+
* @readonly
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(this, 'client', { value: client });
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
_clone() {
|
|
16
|
+
return Object.assign(Object.create(this), this);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
_patch(data) { return data; }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
22
|
module.exports = Base;
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const Base = require('./Base');
|
|
4
|
-
const Message = require('./Message');
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Represents a Status/Story on WhatsApp
|
|
8
|
-
* @extends {Base}
|
|
9
|
-
*/
|
|
10
|
-
class Broadcast extends Base {
|
|
11
|
-
constructor(client, data) {
|
|
12
|
-
super(client);
|
|
13
|
-
|
|
14
|
-
if (data) this._patch(data);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
_patch(data) {
|
|
18
|
-
/**
|
|
19
|
-
* ID that represents the chat
|
|
20
|
-
* @type {object}
|
|
21
|
-
*/
|
|
22
|
-
this.id = data.id;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Unix timestamp of last status
|
|
26
|
-
* @type {number}
|
|
27
|
-
*/
|
|
28
|
-
this.timestamp = data.t;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Number of available statuses
|
|
32
|
-
* @type {number}
|
|
33
|
-
*/
|
|
34
|
-
this.totalCount = data.totalCount;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Number of not viewed
|
|
38
|
-
* @type {number}
|
|
39
|
-
*/
|
|
40
|
-
this.unreadCount = data.unreadCount;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Messages statuses
|
|
44
|
-
* @type {Message[]}
|
|
45
|
-
*/
|
|
46
|
-
this.msgs = data.msgs?.map(msg => new Message(this.client, msg));
|
|
47
|
-
|
|
48
|
-
return super._patch(data);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Returns the Chat this message was sent in
|
|
53
|
-
* @returns {Promise<Chat>}
|
|
54
|
-
*/
|
|
55
|
-
getChat() {
|
|
56
|
-
return this.client.getChatById(this.id._serialized);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Returns the Contact this message was sent from
|
|
61
|
-
* @returns {Promise<Contact>}
|
|
62
|
-
*/
|
|
63
|
-
getContact() {
|
|
64
|
-
return this.client.getContactById(this.id._serialized);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
module.exports = Broadcast;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Base = require('./Base');
|
|
4
|
+
const Message = require('./Message');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Represents a Status/Story on WhatsApp
|
|
8
|
+
* @extends {Base}
|
|
9
|
+
*/
|
|
10
|
+
class Broadcast extends Base {
|
|
11
|
+
constructor(client, data) {
|
|
12
|
+
super(client);
|
|
13
|
+
|
|
14
|
+
if (data) this._patch(data);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
_patch(data) {
|
|
18
|
+
/**
|
|
19
|
+
* ID that represents the chat
|
|
20
|
+
* @type {object}
|
|
21
|
+
*/
|
|
22
|
+
this.id = data.id;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Unix timestamp of last status
|
|
26
|
+
* @type {number}
|
|
27
|
+
*/
|
|
28
|
+
this.timestamp = data.t;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Number of available statuses
|
|
32
|
+
* @type {number}
|
|
33
|
+
*/
|
|
34
|
+
this.totalCount = data.totalCount;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Number of not viewed
|
|
38
|
+
* @type {number}
|
|
39
|
+
*/
|
|
40
|
+
this.unreadCount = data.unreadCount;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Messages statuses
|
|
44
|
+
* @type {Message[]}
|
|
45
|
+
*/
|
|
46
|
+
this.msgs = data.msgs?.map(msg => new Message(this.client, msg));
|
|
47
|
+
|
|
48
|
+
return super._patch(data);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Returns the Chat this message was sent in
|
|
53
|
+
* @returns {Promise<Chat>}
|
|
54
|
+
*/
|
|
55
|
+
getChat() {
|
|
56
|
+
return this.client.getChatById(this.id._serialized);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Returns the Contact this message was sent from
|
|
61
|
+
* @returns {Promise<Contact>}
|
|
62
|
+
*/
|
|
63
|
+
getContact() {
|
|
64
|
+
return this.client.getContactById(this.id._serialized);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = Broadcast;
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const Contact = require('./Contact');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Represents a Business Contact on WhatsApp
|
|
7
|
-
* @extends {Contact}
|
|
8
|
-
*/
|
|
9
|
-
class BusinessContact extends Contact {
|
|
10
|
-
_patch(data) {
|
|
11
|
-
/**
|
|
12
|
-
* The contact's business profile
|
|
13
|
-
*/
|
|
14
|
-
this.businessProfile = data.businessProfile;
|
|
15
|
-
|
|
16
|
-
return super._patch(data);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Contact = require('./Contact');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Represents a Business Contact on WhatsApp
|
|
7
|
+
* @extends {Contact}
|
|
8
|
+
*/
|
|
9
|
+
class BusinessContact extends Contact {
|
|
10
|
+
_patch(data) {
|
|
11
|
+
/**
|
|
12
|
+
* The contact's business profile
|
|
13
|
+
*/
|
|
14
|
+
this.businessProfile = data.businessProfile;
|
|
15
|
+
|
|
16
|
+
return super._patch(data);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
21
|
module.exports = BusinessContact;
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const MessageMedia = require('./MessageMedia');
|
|
4
|
-
const Util = require('../util/Util');
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Button spec used in Buttons constructor
|
|
8
|
-
* @typedef {Object} ButtonSpec
|
|
9
|
-
* @property {string=} id - Custom ID to set on the button. A random one will be generated if one is not passed.
|
|
10
|
-
* @property {string} body - The text to show on the button.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @typedef {Object} FormattedButtonSpec
|
|
15
|
-
* @property {string} buttonId
|
|
16
|
-
* @property {number} type
|
|
17
|
-
* @property {Object} buttonText
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Message type buttons
|
|
22
|
-
*/
|
|
23
|
-
class Buttons {
|
|
24
|
-
/**
|
|
25
|
-
* @param {string|MessageMedia} body
|
|
26
|
-
* @param {ButtonSpec[]} buttons - See {@link ButtonSpec}
|
|
27
|
-
* @param {string?} title
|
|
28
|
-
* @param {string?} footer
|
|
29
|
-
*/
|
|
30
|
-
constructor(body, buttons, title, footer) {
|
|
31
|
-
/**
|
|
32
|
-
* Message body
|
|
33
|
-
* @type {string|MessageMedia}
|
|
34
|
-
*/
|
|
35
|
-
this.body = body;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* title of message
|
|
39
|
-
* @type {string}
|
|
40
|
-
*/
|
|
41
|
-
this.title = title;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* footer of message
|
|
45
|
-
* @type {string}
|
|
46
|
-
*/
|
|
47
|
-
this.footer = footer;
|
|
48
|
-
|
|
49
|
-
if (body instanceof MessageMedia) {
|
|
50
|
-
this.type = 'media';
|
|
51
|
-
this.title = '';
|
|
52
|
-
}else{
|
|
53
|
-
this.type = 'chat';
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* buttons of message
|
|
58
|
-
* @type {FormattedButtonSpec[]}
|
|
59
|
-
*/
|
|
60
|
-
this.buttons = this._format(buttons);
|
|
61
|
-
if(!this.buttons.length){ throw '[BT01] No buttons';}
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Creates button array from simple array
|
|
67
|
-
* @param {ButtonSpec[]} buttons
|
|
68
|
-
* @returns {FormattedButtonSpec[]}
|
|
69
|
-
* @example
|
|
70
|
-
* Input: [{id:'customId',body:'button1'},{body:'button2'},{body:'button3'},{body:'button4'}]
|
|
71
|
-
* Returns: [{ buttonId:'customId',buttonText:{'displayText':'button1'},type: 1 },{buttonId:'n3XKsL',buttonText:{'displayText':'button2'},type:1},{buttonId:'NDJk0a',buttonText:{'displayText':'button3'},type:1}]
|
|
72
|
-
*/
|
|
73
|
-
_format(buttons){
|
|
74
|
-
buttons = buttons.slice(0,3); // phone users can only see 3 buttons, so lets limit this
|
|
75
|
-
return buttons.map((btn) => {
|
|
76
|
-
return {'buttonId':btn.id ? String(btn.id) : Util.generateHash(6),'buttonText':{'displayText':btn.body},'type':1};
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const MessageMedia = require('./MessageMedia');
|
|
4
|
+
const Util = require('../util/Util');
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Button spec used in Buttons constructor
|
|
8
|
+
* @typedef {Object} ButtonSpec
|
|
9
|
+
* @property {string=} id - Custom ID to set on the button. A random one will be generated if one is not passed.
|
|
10
|
+
* @property {string} body - The text to show on the button.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @typedef {Object} FormattedButtonSpec
|
|
15
|
+
* @property {string} buttonId
|
|
16
|
+
* @property {number} type
|
|
17
|
+
* @property {Object} buttonText
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Message type buttons
|
|
22
|
+
*/
|
|
23
|
+
class Buttons {
|
|
24
|
+
/**
|
|
25
|
+
* @param {string|MessageMedia} body
|
|
26
|
+
* @param {ButtonSpec[]} buttons - See {@link ButtonSpec}
|
|
27
|
+
* @param {string?} title
|
|
28
|
+
* @param {string?} footer
|
|
29
|
+
*/
|
|
30
|
+
constructor(body, buttons, title, footer) {
|
|
31
|
+
/**
|
|
32
|
+
* Message body
|
|
33
|
+
* @type {string|MessageMedia}
|
|
34
|
+
*/
|
|
35
|
+
this.body = body;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* title of message
|
|
39
|
+
* @type {string}
|
|
40
|
+
*/
|
|
41
|
+
this.title = title;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* footer of message
|
|
45
|
+
* @type {string}
|
|
46
|
+
*/
|
|
47
|
+
this.footer = footer;
|
|
48
|
+
|
|
49
|
+
if (body instanceof MessageMedia) {
|
|
50
|
+
this.type = 'media';
|
|
51
|
+
this.title = '';
|
|
52
|
+
}else{
|
|
53
|
+
this.type = 'chat';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* buttons of message
|
|
58
|
+
* @type {FormattedButtonSpec[]}
|
|
59
|
+
*/
|
|
60
|
+
this.buttons = this._format(buttons);
|
|
61
|
+
if(!this.buttons.length){ throw '[BT01] No buttons';}
|
|
62
|
+
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Creates button array from simple array
|
|
67
|
+
* @param {ButtonSpec[]} buttons
|
|
68
|
+
* @returns {FormattedButtonSpec[]}
|
|
69
|
+
* @example
|
|
70
|
+
* Input: [{id:'customId',body:'button1'},{body:'button2'},{body:'button3'},{body:'button4'}]
|
|
71
|
+
* Returns: [{ buttonId:'customId',buttonText:{'displayText':'button1'},type: 1 },{buttonId:'n3XKsL',buttonText:{'displayText':'button2'},type:1},{buttonId:'NDJk0a',buttonText:{'displayText':'button3'},type:1}]
|
|
72
|
+
*/
|
|
73
|
+
_format(buttons){
|
|
74
|
+
buttons = buttons.slice(0,3); // phone users can only see 3 buttons, so lets limit this
|
|
75
|
+
return buttons.map((btn) => {
|
|
76
|
+
return {'buttonId':btn.id ? String(btn.id) : Util.generateHash(6),'buttonText':{'displayText':btn.body},'type':1};
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
82
82
|
module.exports = Buttons;
|
package/src/structures/Call.js
CHANGED
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const Base = require('./Base');
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Represents a Call on WhatsApp
|
|
7
|
-
* @extends {Base}
|
|
8
|
-
*/
|
|
9
|
-
class Call extends Base {
|
|
10
|
-
constructor(client, data) {
|
|
11
|
-
super(client);
|
|
12
|
-
|
|
13
|
-
if (data) this._patch(data);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
_patch(data) {
|
|
17
|
-
/**
|
|
18
|
-
* Call ID
|
|
19
|
-
* @type {string}
|
|
20
|
-
*/
|
|
21
|
-
this.id = data.id;
|
|
22
|
-
/**
|
|
23
|
-
* From
|
|
24
|
-
* @type {string}
|
|
25
|
-
*/
|
|
26
|
-
this.from = data.peerJid;
|
|
27
|
-
/**
|
|
28
|
-
* Unix timestamp for when the call was created
|
|
29
|
-
* @type {number}
|
|
30
|
-
*/
|
|
31
|
-
this.timestamp = data.offerTime;
|
|
32
|
-
/**
|
|
33
|
-
* Is video
|
|
34
|
-
* @type {boolean}
|
|
35
|
-
*/
|
|
36
|
-
this.isVideo = data.isVideo;
|
|
37
|
-
/**
|
|
38
|
-
* Is Group
|
|
39
|
-
* @type {boolean}
|
|
40
|
-
*/
|
|
41
|
-
this.isGroup = data.isGroup;
|
|
42
|
-
/**
|
|
43
|
-
* Indicates if the call was sent by the current user
|
|
44
|
-
* @type {boolean}
|
|
45
|
-
*/
|
|
46
|
-
this.fromMe = data.outgoing;
|
|
47
|
-
/**
|
|
48
|
-
* Indicates if the call can be handled in waweb
|
|
49
|
-
* @type {boolean}
|
|
50
|
-
*/
|
|
51
|
-
this.canHandleLocally = data.canHandleLocally;
|
|
52
|
-
/**
|
|
53
|
-
* Indicates if the call Should be handled in waweb
|
|
54
|
-
* @type {boolean}
|
|
55
|
-
*/
|
|
56
|
-
this.webClientShouldHandle = data.webClientShouldHandle;
|
|
57
|
-
/**
|
|
58
|
-
* Object with participants
|
|
59
|
-
* @type {object}
|
|
60
|
-
*/
|
|
61
|
-
this.participants = data.participants;
|
|
62
|
-
|
|
63
|
-
return super._patch(data);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Reject the call
|
|
68
|
-
*/
|
|
69
|
-
async reject() {
|
|
70
|
-
return this.client.pupPage.evaluate((peerJid, id) => {
|
|
71
|
-
return window.WWebJS.rejectCall(peerJid, id);
|
|
72
|
-
}, this.from, this.id);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Base = require('./Base');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Represents a Call on WhatsApp
|
|
7
|
+
* @extends {Base}
|
|
8
|
+
*/
|
|
9
|
+
class Call extends Base {
|
|
10
|
+
constructor(client, data) {
|
|
11
|
+
super(client);
|
|
12
|
+
|
|
13
|
+
if (data) this._patch(data);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
_patch(data) {
|
|
17
|
+
/**
|
|
18
|
+
* Call ID
|
|
19
|
+
* @type {string}
|
|
20
|
+
*/
|
|
21
|
+
this.id = data.id;
|
|
22
|
+
/**
|
|
23
|
+
* From
|
|
24
|
+
* @type {string}
|
|
25
|
+
*/
|
|
26
|
+
this.from = data.peerJid;
|
|
27
|
+
/**
|
|
28
|
+
* Unix timestamp for when the call was created
|
|
29
|
+
* @type {number}
|
|
30
|
+
*/
|
|
31
|
+
this.timestamp = data.offerTime;
|
|
32
|
+
/**
|
|
33
|
+
* Is video
|
|
34
|
+
* @type {boolean}
|
|
35
|
+
*/
|
|
36
|
+
this.isVideo = data.isVideo;
|
|
37
|
+
/**
|
|
38
|
+
* Is Group
|
|
39
|
+
* @type {boolean}
|
|
40
|
+
*/
|
|
41
|
+
this.isGroup = data.isGroup;
|
|
42
|
+
/**
|
|
43
|
+
* Indicates if the call was sent by the current user
|
|
44
|
+
* @type {boolean}
|
|
45
|
+
*/
|
|
46
|
+
this.fromMe = data.outgoing;
|
|
47
|
+
/**
|
|
48
|
+
* Indicates if the call can be handled in waweb
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
*/
|
|
51
|
+
this.canHandleLocally = data.canHandleLocally;
|
|
52
|
+
/**
|
|
53
|
+
* Indicates if the call Should be handled in waweb
|
|
54
|
+
* @type {boolean}
|
|
55
|
+
*/
|
|
56
|
+
this.webClientShouldHandle = data.webClientShouldHandle;
|
|
57
|
+
/**
|
|
58
|
+
* Object with participants
|
|
59
|
+
* @type {object}
|
|
60
|
+
*/
|
|
61
|
+
this.participants = data.participants;
|
|
62
|
+
|
|
63
|
+
return super._patch(data);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Reject the call
|
|
68
|
+
*/
|
|
69
|
+
async reject() {
|
|
70
|
+
return this.client.pupPage.evaluate((peerJid, id) => {
|
|
71
|
+
return window.WWebJS.rejectCall(peerJid, id);
|
|
72
|
+
}, this.from, this.id);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
76
|
module.exports = Call;
|