mirror of
https://github.com/cheveguerra/whatsapp-web.js.git
synced 2026-04-18 03:29:14 +00:00
Compare commits
270 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f23ab82565 | ||
|
|
f44555713d | ||
|
|
9f15499592 | ||
|
|
ac7df25075 | ||
|
|
812ff0ddfc | ||
|
|
780005a81a | ||
|
|
c44af204a1 | ||
|
|
dc16bbbdac | ||
|
|
4846625119 | ||
|
|
ea6c130edd | ||
|
|
1854656648 | ||
|
|
109fbce8db | ||
|
|
6f2ad1773e | ||
|
|
313bd085b3 | ||
|
|
1294170a25 | ||
|
|
617e0b89d5 | ||
|
|
842a342f72 | ||
|
|
e8d4874b26 | ||
|
|
f1607752dd | ||
|
|
97283c84c7 | ||
|
|
23cea1bac0 | ||
|
|
c208c8936a | ||
|
|
6cead95f3c | ||
|
|
70f2391d51 | ||
|
|
698305f668 | ||
|
|
1e3374f0cd | ||
|
|
e1917494bf | ||
|
|
d2479f397e | ||
|
|
a525e2330a | ||
|
|
bd192993b7 | ||
|
|
bd0e27a0d0 | ||
|
|
7dd8688f04 | ||
|
|
23d5147a14 | ||
|
|
8655badc0f | ||
|
|
a7b77e15ed | ||
|
|
288a572af6 | ||
|
|
6fe1017bd3 | ||
|
|
a15f1b8428 | ||
|
|
dc91562f3c | ||
|
|
db55d869f8 | ||
|
|
d9f9c28276 | ||
|
|
a60f5ebf40 | ||
|
|
e8bae22b03 | ||
|
|
82120f0446 | ||
|
|
6f7c5c2dd9 | ||
|
|
9981723505 | ||
|
|
7bb7f13f07 | ||
|
|
7d672078cd | ||
|
|
088ec32b7b | ||
|
|
ef3eadc6e5 | ||
|
|
ab87fecfd9 | ||
|
|
36aa37f1ac | ||
|
|
45972fb47e | ||
|
|
55f75b8f69 | ||
|
|
b1e0fce504 | ||
|
|
62623347e8 | ||
|
|
705d4d31fd | ||
|
|
bd4df4cf75 | ||
|
|
7fe3574730 | ||
|
|
09a81d0e1e | ||
|
|
c09a22c533 | ||
|
|
bb09bb74e7 | ||
|
|
694a52bf26 | ||
|
|
c459eca799 | ||
|
|
b74246d69a | ||
|
|
ab7ee0eb4f | ||
|
|
537e843a49 | ||
|
|
76f7a6e279 | ||
|
|
f2ec77f969 | ||
|
|
fd368361df | ||
|
|
bd553f75d3 | ||
|
|
c5c705a553 | ||
|
|
6e047cb9be | ||
|
|
56343497e9 | ||
|
|
6a4fca0a77 | ||
|
|
e91077a615 | ||
|
|
0e5bd9f38e | ||
|
|
75d3c635f0 | ||
|
|
8497a3d7e5 | ||
|
|
e7025ceca1 | ||
|
|
b8b41920e3 | ||
|
|
73e4b3b6e0 | ||
|
|
af431df1c9 | ||
|
|
61c0a6be56 | ||
|
|
a0b18fb685 | ||
|
|
98ff761cfb | ||
|
|
c0ef9223ed | ||
|
|
294e5027b0 | ||
|
|
ebc56bc280 | ||
|
|
b16e1cdf83 | ||
|
|
a24294ec61 | ||
|
|
374983b9a6 | ||
|
|
5e2e9dd139 | ||
|
|
3a2acf71c2 | ||
|
|
f32f3c71ba | ||
|
|
017dd4b783 | ||
|
|
fa9f6610d7 | ||
|
|
e9104b390d | ||
|
|
a23c285f3c | ||
|
|
281aec40ad | ||
|
|
2e4890d113 | ||
|
|
0bd8eb9d96 | ||
|
|
2718c1328c | ||
|
|
24f8b4622b | ||
|
|
9ab9c48f7b | ||
|
|
b96607338a | ||
|
|
ea2cc81d47 | ||
|
|
56644f4f03 | ||
|
|
fcb78a1cd4 | ||
|
|
f88bd274be | ||
|
|
c45fae5c15 | ||
|
|
1b75d0d243 | ||
|
|
cc78e9863d | ||
|
|
fc205ff530 | ||
|
|
6ab98a5365 | ||
|
|
3c24df085a | ||
|
|
979e97ea42 | ||
|
|
1f4328c7a3 | ||
|
|
6691d25282 | ||
|
|
12d9735b73 | ||
|
|
ab5167c4ad | ||
|
|
52c8336236 | ||
|
|
9fe91692cf | ||
|
|
f6de161c7d | ||
|
|
0d55d40885 | ||
|
|
8ef37b68ae | ||
|
|
bd5cfdc936 | ||
|
|
f0e49efcf9 | ||
|
|
5d83b45ed4 | ||
|
|
e29354fca3 | ||
|
|
66283da903 | ||
|
|
d7f7889b0f | ||
|
|
11955e9f03 | ||
|
|
444abc2c76 | ||
|
|
20f3bc7a8b | ||
|
|
93c8a2b05e | ||
|
|
70ca073f38 | ||
|
|
7e36cceaf0 | ||
|
|
303ea3ab6b | ||
|
|
4aae8b0f32 | ||
|
|
64803c2ba6 | ||
|
|
aa9e19a19e | ||
|
|
7631400de1 | ||
|
|
d7478de68a | ||
|
|
a9b2a1aab8 | ||
|
|
3b4632201d | ||
|
|
2200390d4c | ||
|
|
b1f7ff01bc | ||
|
|
21d565154a | ||
|
|
09cbee0e65 | ||
|
|
fa9f5aba38 | ||
|
|
c859ac39ce | ||
|
|
221d29736a | ||
|
|
078933f061 | ||
|
|
f149516d0d | ||
|
|
2f1c894a34 | ||
|
|
32e47d818a | ||
|
|
20aee44c3b | ||
|
|
bb2ef88e0a | ||
|
|
6878598a5d | ||
|
|
4e6a00dffe | ||
|
|
b93c7b4b76 | ||
|
|
a37ff69692 | ||
|
|
3705d1fea9 | ||
|
|
7950aae5d1 | ||
|
|
bdff59fb44 | ||
|
|
d05803074a | ||
|
|
d86c39de3c | ||
|
|
46ba9c5e9a | ||
|
|
d7a493e68a | ||
|
|
da95d927b9 | ||
|
|
92bc5e62ab | ||
|
|
73a3e28a4b | ||
|
|
4f376fc2fa | ||
|
|
a20c8ef8f8 | ||
|
|
2052e0479d | ||
|
|
c55db82f73 | ||
|
|
4e837b00f9 | ||
|
|
89a06b15a8 | ||
|
|
55247576da | ||
|
|
8a1f6f0648 | ||
|
|
254ca884aa | ||
|
|
3958105926 | ||
|
|
818bf48e5d | ||
|
|
d71544566c | ||
|
|
187aa50131 | ||
|
|
e11e00d938 | ||
|
|
d9dd89ccaf | ||
|
|
3aa0e4f7b3 | ||
|
|
d82cf448d9 | ||
|
|
3f576c990c | ||
|
|
d44a525b02 | ||
|
|
d8217029ba | ||
|
|
2a7337b142 | ||
|
|
1fcfaa0362 | ||
|
|
c434e04e41 | ||
|
|
97a1d399ee | ||
|
|
dbf9bf2158 | ||
|
|
353af130d0 | ||
|
|
06107af67d | ||
|
|
4338664590 | ||
|
|
95facee885 | ||
|
|
1f38b762ed | ||
|
|
b60029ed09 | ||
|
|
ab415ff9be | ||
|
|
7beeff4901 | ||
|
|
022c87f3c7 | ||
|
|
e527fe74fd | ||
|
|
7597608f9d | ||
|
|
be018e651d | ||
|
|
64189d2d67 | ||
|
|
38e31a07cf | ||
|
|
40cec51956 | ||
|
|
d9ccb6f276 | ||
|
|
628b6e4d49 | ||
|
|
8e56aef3ce | ||
|
|
cd774bef17 | ||
|
|
9c2592e164 | ||
|
|
ae6d61bda9 | ||
|
|
98acd2312d | ||
|
|
62c7c15f44 | ||
|
|
e12c53f6ce | ||
|
|
811008da4b | ||
|
|
863284c9d1 | ||
|
|
ec95483518 | ||
|
|
ff2eb95751 | ||
|
|
1b5e9d2392 | ||
|
|
340e9764fe | ||
|
|
084525ddfa | ||
|
|
3398501ee6 | ||
|
|
cdede835af | ||
|
|
449d0f01d8 | ||
|
|
4ed9312eb7 | ||
|
|
76deaad2fd | ||
|
|
284903dce4 | ||
|
|
a03cc41d22 | ||
|
|
04d2308bbc | ||
|
|
dc9b7e5f3d | ||
|
|
cc7a729223 | ||
|
|
2ec46f674a | ||
|
|
22993fc23d | ||
|
|
cd52075447 | ||
|
|
54a07fa22f | ||
|
|
1d49f74ab4 | ||
|
|
ea4dfb17f3 | ||
|
|
efa6cf98d2 | ||
|
|
9d715735ed | ||
|
|
4afff38713 | ||
|
|
b13dea0339 | ||
|
|
0ef6061d7e | ||
|
|
0465507009 | ||
|
|
2fd96e76b9 | ||
|
|
caab11cfe4 | ||
|
|
ebba1b9ab9 | ||
|
|
cdc00e934d | ||
|
|
795570a697 | ||
|
|
0465742ffb | ||
|
|
38976558f5 | ||
|
|
b895437458 | ||
|
|
0a061f982c | ||
|
|
63d11d3f84 | ||
|
|
5177a257cf | ||
|
|
f506c171c1 | ||
|
|
64e2cc48fc | ||
|
|
6c66ab2bef | ||
|
|
efc7018f9a | ||
|
|
5991b28b88 | ||
|
|
2894832b00 | ||
|
|
6cece4a006 | ||
|
|
f1e2f32988 |
3
.env.example
Normal file
3
.env.example
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
WWEBJS_TEST_REMOTE_ID=XXXXXXXXXX@c.us
|
||||||
|
WWEBJS_TEST_CLIENT_ID=authenticated
|
||||||
|
WWEBJS_TEST_MD=1
|
||||||
@@ -5,14 +5,16 @@
|
|||||||
"es6": true,
|
"es6": true,
|
||||||
"node": true
|
"node": true
|
||||||
},
|
},
|
||||||
"extends": "eslint:recommended",
|
"extends": ["eslint:recommended", "plugin:mocha/recommended"],
|
||||||
"globals": {
|
"globals": {
|
||||||
"Atomics": "readonly",
|
"Atomics": "readonly",
|
||||||
"SharedArrayBuffer": "readonly"
|
"SharedArrayBuffer": "readonly"
|
||||||
},
|
},
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": 2018
|
"ecmaVersion": 2020
|
||||||
},
|
},
|
||||||
|
"plugins": ["mocha"],
|
||||||
|
"ignorePatterns": ["docs"],
|
||||||
"rules": {
|
"rules": {
|
||||||
"indent": [
|
"indent": [
|
||||||
"error",
|
"error",
|
||||||
|
|||||||
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
github: [pedroslopez, PurpShell]
|
||||||
|
ko_fi: pedroslopez
|
||||||
|
custom: ["paypal.me/psla", "buymeacoff.ee/pedroslopez"]
|
||||||
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
38
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,38 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Is something not working as intended? Report it here.
|
|
||||||
title: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Bug description
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
### Reproduction steps
|
|
||||||
Steps to reproduce the behavior:
|
|
||||||
1.
|
|
||||||
2.
|
|
||||||
3.
|
|
||||||
...
|
|
||||||
|
|
||||||
### Expected behavior
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
### Relevant code
|
|
||||||
If applicable, add code snippets to help explain your problem.
|
|
||||||
|
|
||||||
### Environment (please complete the following information):
|
|
||||||
**WhatsApp**
|
|
||||||
- Account type [Standard / Business]:
|
|
||||||
- Device OS [iOS / Android]:
|
|
||||||
- WhatsApp Web version [run `await client.getWWebVersion()`]:
|
|
||||||
|
|
||||||
**Library**
|
|
||||||
- Browser [Chrome / Chromium]:
|
|
||||||
- NodeJS version (`node -v`):
|
|
||||||
- npm or yarn version (`npm -v`):
|
|
||||||
- whatsapp-web.js version:
|
|
||||||
|
|
||||||
### Additional context
|
|
||||||
Add any other context about the problem here.
|
|
||||||
105
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
105
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
name: '🐛 Bug report'
|
||||||
|
description: Create a report to help us improve
|
||||||
|
labels: bug
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thank you for reporting an issue :pray:.
|
||||||
|
|
||||||
|
This issue tracker is for reporting bugs found in [`whatsapp-web.js`](https://github.com/pedroslopez/whatsapp-web.js).
|
||||||
|
|
||||||
|
If you have a question about how to achieve something and are struggling, please post a question in our [Discord server](https://discord.gg/wyKybbF) instead.
|
||||||
|
|
||||||
|
Before submitting a new bug/issue, please check the links below to see if there is a solution or question posted there already:
|
||||||
|
- `whatsapp-web.js` [Issues tab](https://github.com/pedroslopez/whatsapp-web.js/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc)
|
||||||
|
- `whatsapp-web.js` [closed Issues tab](https://github.com/pedroslopez/whatsapp-web.js/issues?q=is%3Aissue+sort%3Aupdated-desc+is%3Aclosed)
|
||||||
|
|
||||||
|
The more information you fill in, the better the community can help you.
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
description: Please search to see if an issue already exists for the bug you encountered.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing issues
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Describe the bug
|
||||||
|
description: Provide a clear and concise description of the challenge you are running into.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: expected
|
||||||
|
attributes:
|
||||||
|
label: Expected behavior
|
||||||
|
description: Provide a clear and concise description of what you expected to happen.
|
||||||
|
placeholder: |
|
||||||
|
As a user, I expected ___ behavior but I am seeing ___
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: steps
|
||||||
|
attributes:
|
||||||
|
label: Steps to Reproduce the Bug or Issue
|
||||||
|
description: Describe the steps we have to take to reproduce the behavior.
|
||||||
|
placeholder: |
|
||||||
|
1. Do X
|
||||||
|
2. Do Y
|
||||||
|
3. Do Z
|
||||||
|
4. See error
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: relevant_code
|
||||||
|
attributes:
|
||||||
|
label: Relevant Code
|
||||||
|
description: If applicable, add code snippets to help explain your problem.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
- type: dropdown
|
||||||
|
id: browser_type
|
||||||
|
attributes:
|
||||||
|
label: Browser Type
|
||||||
|
description: What web browser are you using?
|
||||||
|
options:
|
||||||
|
- Chromium
|
||||||
|
- Google Chrome
|
||||||
|
- Other (please write in Additional Context)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: whatsapp_type
|
||||||
|
attributes:
|
||||||
|
label: WhatsApp Account Type
|
||||||
|
options:
|
||||||
|
- Standard
|
||||||
|
- WhatsApp Business
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: multidevice
|
||||||
|
attributes:
|
||||||
|
label: Does your WhatsApp account have multidevice enabled?
|
||||||
|
options:
|
||||||
|
- Yes, I am using Multi Device
|
||||||
|
- No, I am not using Multi Device
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Environment
|
||||||
|
description: |
|
||||||
|
- OS: [e.g. Mac, Windows, Linux, Docker + Ubuntu 18, etc]
|
||||||
|
- Phone OS: [e.g. Android, iOS]
|
||||||
|
- whatsapp-web.js version [e.g. 1.2.3]
|
||||||
|
- WhatsApp Web version [run `await client.getWWebVersion()`]:
|
||||||
|
- Node.js Version [e.g. 1.2.3]
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: additional
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Add any other context about the problem here.
|
||||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: enhancement
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
42
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
42
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
name: 🚀 Feature request
|
||||||
|
description: Suggest an idea for this project
|
||||||
|
labels: enhancement
|
||||||
|
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue for this?
|
||||||
|
description: Please search to see if an issue related to this feature request already exists.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing issues
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Is your feature request related to a problem? Please describe.
|
||||||
|
description: A concise description of the problem you are facing or the motivetion behind this feature request.
|
||||||
|
placeholder: I faced a problem due to ...
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the solution you'd like.
|
||||||
|
description: A concise description of the solution for the issue.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe an alternate solution.
|
||||||
|
description: Is there any other approach to solve the problem?
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: |
|
||||||
|
Links? Screenshots? References? Anything that will give us more context about what you would like to see!
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "npm"
|
||||||
|
directory: "/"
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
||||||
41
.github/pull_request_template.md
vendored
Normal file
41
.github/pull_request_template.md
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# PR Details
|
||||||
|
|
||||||
|
<!--- Provide a general summary of your changes in the Title above -->
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!--- Describe your changes in detail -->
|
||||||
|
|
||||||
|
## Related Issue
|
||||||
|
|
||||||
|
<!--- Optional --->
|
||||||
|
<!--- If there is an issue link it here: -->
|
||||||
|
|
||||||
|
## Motivation and Context
|
||||||
|
|
||||||
|
<!--- Optional --->
|
||||||
|
<!--- Why is this change required? What problem does it solve? -->
|
||||||
|
|
||||||
|
## How Has This Been Tested
|
||||||
|
|
||||||
|
<!--- Please describe in detail how you tested your changes. -->
|
||||||
|
<!--- Include details of your testing environment, and the tests you ran to -->
|
||||||
|
|
||||||
|
## Types of changes
|
||||||
|
|
||||||
|
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
|
||||||
|
|
||||||
|
- [ ] Dependency change
|
||||||
|
- [ ] Bug fix (non-breaking change which fixes an issue)
|
||||||
|
- [ ] New feature (non-breaking change which adds functionality)
|
||||||
|
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
|
||||||
|
|
||||||
|
- [ ] My code follows the code style of this project.
|
||||||
|
- [ ] I have updated the documentation accordingly (index.d.ts).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
20
.github/workflows/lint.yml
vendored
20
.github/workflows/lint.yml
vendored
@@ -6,19 +6,15 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
eslint:
|
eslint:
|
||||||
name: eslint
|
name: ESLint
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v2
|
||||||
- name: install node v12
|
- name: Install node v14
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: 12
|
node-version: '14'
|
||||||
- name: npm install
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm install
|
||||||
- name: eslint
|
- name: Run ESLint
|
||||||
uses: icrawl/action-eslint@v1
|
run: ./node_modules/.bin/eslint .
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
job-name: eslint
|
|
||||||
|
|||||||
32
.github/workflows/release.yml
vendored
Normal file
32
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
name: release
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
release_type:
|
||||||
|
description: "`alpha`, `alpha-minor`, `alpha-major` release?"
|
||||||
|
required: true
|
||||||
|
default: "alpha"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: ${{ github.repository == 'pedroslopez/whatsapp-web.js' }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.RELEASE_GITHUB_TOKEN }}
|
||||||
|
- run: git config --global user.email "hello@wwebjs.dev"
|
||||||
|
- run: git config --global user.name "WWebJS Bot"
|
||||||
|
- name: Bump version and publish to NPM
|
||||||
|
id: publish
|
||||||
|
run: ./tools/publish ${{ github.event.inputs.release_type }}
|
||||||
|
env:
|
||||||
|
NPM_TOKEN: ${{ secrets.RELEASE_NPM_TOKEN }}
|
||||||
|
- name: Create GitHub Release
|
||||||
|
id: create_release
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
prerelease: ${{ steps.publish.outputs.PRERELEASE }}
|
||||||
|
generateReleaseNotes: true
|
||||||
|
tag: v${{ steps.publish.outputs.NEW_VERSION }}
|
||||||
39
.github/workflows/update.yml
vendored
Normal file
39
.github/workflows/update.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
name: Update
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0/15 * * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: ./tools/version-checker
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Install node v16
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: '16'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm install
|
||||||
|
- name: Run Updater
|
||||||
|
run: ./update-version
|
||||||
|
- name: Store WA Version
|
||||||
|
run: echo WA_VERSION=`cat ./.version` >> $GITHUB_ENV
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@v3
|
||||||
|
with:
|
||||||
|
branch: auto-wa-web-update/patch
|
||||||
|
delete-branch: true
|
||||||
|
commit-message: Update supported WhatsApp Web version to v${{ env.WA_VERSION }}
|
||||||
|
title: Update WhatsApp Web Version (${{ env.WA_VERSION }})
|
||||||
|
body: |
|
||||||
|
A new version of WhatsApp Web has been detected!
|
||||||
|
|
||||||
|
Tests should be run against this new version before merging.
|
||||||
|
labels: WhatsApp Change
|
||||||
|
reviewers: pedroslopez
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -64,8 +64,10 @@ typings/
|
|||||||
# next.js build output
|
# next.js build output
|
||||||
.next
|
.next
|
||||||
|
|
||||||
# macOS Thumbnails
|
# macOS
|
||||||
._*
|
._*
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
# Test sessions
|
# Test sessions
|
||||||
*session.json
|
*session.json
|
||||||
|
.wwebjs_auth/
|
||||||
@@ -12,3 +12,8 @@ yarn-debug.log*
|
|||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
|
||||||
*session.json
|
*session.json
|
||||||
|
.wwebjs_auth/
|
||||||
|
|
||||||
|
.env
|
||||||
|
tools/
|
||||||
|
tests/
|
||||||
|
|||||||
133
CODE_OF_CONDUCT.md
Normal file
133
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, religion, or sexual identity
|
||||||
|
and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the
|
||||||
|
overall community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or
|
||||||
|
advances of any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email
|
||||||
|
address, without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official e-mail address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
[pedroslopez@me.com](mailto:pedroslopez@me.com).
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series
|
||||||
|
of actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or
|
||||||
|
permanent ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within
|
||||||
|
the community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.0, available at
|
||||||
|
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
|
||||||
|
at [https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
|
||||||
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
||||||
35
README.md
35
README.md
@@ -1,4 +1,4 @@
|
|||||||
[](https://www.npmjs.com/package/whatsapp-web.js) [](https://depfu.com/github/pedroslopez/whatsapp-web.js?project_id=9765)  [](https://discord.gg/H7DqQs4)
|
[](https://www.npmjs.com/package/whatsapp-web.js) [](https://depfu.com/github/pedroslopez/whatsapp-web.js?project_id=9765)  [](https://discord.gg/H7DqQs4)
|
||||||
|
|
||||||
# whatsapp-web.js
|
# whatsapp-web.js
|
||||||
A WhatsApp API client that connects through the WhatsApp Web browser app
|
A WhatsApp API client that connects through the WhatsApp Web browser app
|
||||||
@@ -7,16 +7,24 @@ It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocke
|
|||||||
|
|
||||||
**NOTE:** I can't guarantee you will not be blocked by using this method, although it has worked for me. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe.
|
**NOTE:** I can't guarantee you will not be blocked by using this method, although it has worked for me. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe.
|
||||||
|
|
||||||
|
## Quick Links
|
||||||
|
|
||||||
|
* [Guide / Getting Started](https://wwebjs.dev/guide) _(work in progress)_
|
||||||
|
* [Reference documentation](https://docs.wwebjs.dev/)
|
||||||
|
* [GitHub](https://github.com/pedroslopez/whatsapp-web.js)
|
||||||
|
* [npm](https://npmjs.org/package/whatsapp-web.js)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
The module is now available on npm! `npm i whatsapp-web.js`
|
The module is now available on npm! `npm i whatsapp-web.js`
|
||||||
|
|
||||||
Please note that Node v10.18.1+ is required due to Puppeteer.
|
Please note that Node v12+ is required.
|
||||||
|
|
||||||
## Example usage
|
## Example usage
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const { Client } = require('whatsapp-web.js');
|
const { Client } = require('whatsapp-web.js');
|
||||||
|
|
||||||
const client = new Client();
|
const client = new Client();
|
||||||
|
|
||||||
client.on('qr', (qr) => {
|
client.on('qr', (qr) => {
|
||||||
@@ -39,18 +47,24 @@ client.initialize();
|
|||||||
|
|
||||||
Take a look at [example.js](https://github.com/pedroslopez/whatsapp-web.js/blob/master/example.js) for another example with more use cases.
|
Take a look at [example.js](https://github.com/pedroslopez/whatsapp-web.js/blob/master/example.js) for another example with more use cases.
|
||||||
|
|
||||||
|
For more information on saving and restoring sessions, check out the available [Authentication Strategies](https://wwebjs.dev/guide/authentication.html).
|
||||||
|
|
||||||
|
|
||||||
## Supported features
|
## Supported features
|
||||||
|
|
||||||
| Feature | Status |
|
| Feature | Status |
|
||||||
| ------------- | ------------- |
|
| ------------- | ------------- |
|
||||||
|
| Multi Device | ✅ |
|
||||||
| Send messages | ✅ |
|
| Send messages | ✅ |
|
||||||
| Receive messages | ✅ |
|
| Receive messages | ✅ |
|
||||||
| Send media (images/audio/documents) | ✅ |
|
| Send media (images/audio/documents) | ✅ |
|
||||||
| Send media (video) | ✅ [(requires google chrome)](https://waguide.pedroslopez.me/features/handling-attachments#caveat-for-sending-videos-and-gifs) |
|
| Send media (video) | ✅ [(requires google chrome)](https://wwebjs.dev/guide/handling-attachments.html#caveat-for-sending-videos-and-gifs) |
|
||||||
| Send stickers | ✅ |
|
| Send stickers | ✅ |
|
||||||
| Receive media (images/audio/video/documents) | ✅ |
|
| Receive media (images/audio/video/documents) | ✅ |
|
||||||
| Send contact cards | ✅ |
|
| Send contact cards | ✅ |
|
||||||
| Send location | ✅ |
|
| Send location | ✅ |
|
||||||
|
| Send buttons | ✅ |
|
||||||
|
| Send lists | ✅ (business accounts not supported) |
|
||||||
| Receive location | ✅ |
|
| Receive location | ✅ |
|
||||||
| Message replies | ✅ |
|
| Message replies | ✅ |
|
||||||
| Join groups by invite | ✅ |
|
| Join groups by invite | ✅ |
|
||||||
@@ -66,24 +80,21 @@ Take a look at [example.js](https://github.com/pedroslopez/whatsapp-web.js/blob/
|
|||||||
| Get contact info | ✅ |
|
| Get contact info | ✅ |
|
||||||
| Get profile pictures | ✅ |
|
| Get profile pictures | ✅ |
|
||||||
| Set user status message | ✅ |
|
| Set user status message | ✅ |
|
||||||
|
| React to messages | ✅ |
|
||||||
|
|
||||||
Something missing? Make an issue and let us know!
|
Something missing? Make an issue and let us know!
|
||||||
|
|
||||||
## Links
|
|
||||||
|
|
||||||
* [Reference](https://pedroslopez.me/whatsapp-web.js)
|
|
||||||
* [Guide](https://waguide.pedroslopez.me/) _(work in progress)_
|
|
||||||
* [GitHub](https://github.com/pedroslopez/whatsapp-web.js)
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Pull requests are welcome! If you see something you'd like to add, please do. For drastic changes, please open an issue first.
|
Pull requests are welcome! If you see something you'd like to add, please do. For drastic changes, please open an issue first.
|
||||||
|
|
||||||
## Donating
|
## Supporting the project
|
||||||
|
|
||||||
You can support the maintainer of this project through the link below
|
You can support the maintainer of this project through the links below
|
||||||
|
|
||||||
[](https://www.paypal.me/psla/)
|
- [Support via GitHub Sponsors](https://github.com/sponsors/pedroslopez)
|
||||||
|
- [Support via PayPal](https://www.paypal.me/psla/)
|
||||||
|
- [Sign up for DigitalOcean](https://m.do.co/c/73f906a36ed4) and get $200 in credit when you sign up (Referral)
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: Base</title>
|
<title>whatsapp-web.js 1.19.5 » Class: Base</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
65
docs/BaseAuthStrategy.html
Normal file
65
docs/BaseAuthStrategy.html
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: BaseAuthStrategy</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">BaseAuthStrategy</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="authStrategies_BaseAuthStrategy.js.html#source-line-6">authStrategies/<wbr>BaseAuthStrategy.<wbr>js:6</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Base class which all authentication strategies extend</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="BaseAuthStrategy">new <span class="symbol-name">BaseAuthStrategy</span><span class="signature"><span class="signature-params">()</span></span></h2>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: BusinessContact</title>
|
<title>whatsapp-web.js 1.19.5 » Class: BusinessContact</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -104,20 +104,29 @@
|
|||||||
<dt><a href="BusinessContact.html#getAbout">getAbout()</a></dt>
|
<dt><a href="BusinessContact.html#getAbout">getAbout()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
<div class="summary-column">
|
|
||||||
<dl class="dl-summary-callout">
|
|
||||||
<dt><a href="BusinessContact.html#getChat">getChat()</a></dt>
|
<dt><a href="BusinessContact.html#getChat">getChat()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="BusinessContact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="BusinessContact.html#getCommonGroups">getCommonGroups()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="BusinessContact.html#getCountryCode">getCountryCode()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="BusinessContact.html#getFormattedNumber">getFormattedNumber()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="BusinessContact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="BusinessContact.html#unblock">unblock()</a></dt>
|
<dt><a href="BusinessContact.html#unblock">unblock()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -263,6 +272,33 @@
|
|||||||
<dd></dd>
|
<dd></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getCommonGroups"><span class="symbol-name">getCommonGroups</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing Array of WAWebJS.ChatId</span></span></h3>
|
||||||
|
<p>Gets the Contact's common groups with you. Returns empty array if you don't have any common group.</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Inherited from</dt>
|
||||||
|
<dd><a href="Contact.html#getCommonGroups">Contact#getCommonGroups</a></dd>
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd></dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getCountryCode"><span class="symbol-name">getCountryCode</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
|
<p>Returns the contact's countrycode, (1541859685@c.us) => (1)</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Inherited from</dt>
|
||||||
|
<dd><a href="Contact.html#getCountryCode">Contact#getCountryCode</a></dd>
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd></dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getFormattedNumber"><span class="symbol-name">getFormattedNumber</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
|
<p>Returns the contact's formatted phone number, (12345678901@c.us) => (+1 (234) 5678-901)</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Inherited from</dt>
|
||||||
|
<dd><a href="Contact.html#getFormattedNumber">Contact#getFormattedNumber</a></dd>
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd></dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="getProfilePicUrl"><span class="symbol-name">getProfilePicUrl</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
<h3 id="getProfilePicUrl"><span class="symbol-name">getProfilePicUrl</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
@@ -290,7 +326,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
249
docs/Buttons.html
Normal file
249
docs/Buttons.html
Normal file
@@ -0,0 +1,249 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: Buttons</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">Buttons</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="structures_Buttons.js.html#source-line-23">structures/<wbr>Buttons.<wbr>js:23</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Message type buttons</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Properties</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Buttons.html#body">body</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Buttons.html#buttons">buttons</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Buttons.html#footer">footer</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Buttons.html#title">title</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Method</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Buttons.html#_format">_format(buttons)</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="Buttons">new <span class="symbol-name">Buttons</span><span class="signature"><span class="signature-params">(body, buttons, title, footer)</span></span></h2>
|
||||||
|
<section>
|
||||||
|
<h3>Parameters</h3>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>body</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>buttons</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>See <a href="global.html#ButtonSpec"><code>ButtonSpec</code></a></p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>title</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Value can be null.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>footer</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Value can be null.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Properties</h2>
|
||||||
|
<section>
|
||||||
|
<h3 id="body"><span class="symbol-name">body</span><small class="property-type">
|
||||||
|
(string or <a href="MessageMedia.html">MessageMedia</a>)</small></h3>
|
||||||
|
<p>Message body</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="buttons"><span class="symbol-name">buttons</span><small class="property-type">
|
||||||
|
Array of <a href="global.html#FormattedButtonSpec">FormattedButtonSpec</a></small></h3>
|
||||||
|
<p>buttons of message</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="footer"><span class="symbol-name">footer</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>footer of message</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="title"><span class="symbol-name">title</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>title of message</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<h2>Method</h2>
|
||||||
|
<section>
|
||||||
|
<h3 id="_format"><span class="symbol-name">_format</span><span class="signature"><span class="signature-params">(buttons)</span> → <span class="signature-returns"> Array of <a href="global.html#FormattedButtonSpec">FormattedButtonSpec</a></span></span></h3>
|
||||||
|
<p>Creates button array from simple array</p>
|
||||||
|
<section>
|
||||||
|
<h4>
|
||||||
|
Example
|
||||||
|
</h4>
|
||||||
|
<div>
|
||||||
|
<pre class="prettyprint"><code>Input: [{id:'customId',body:'button1'},{body:'button2'},{body:'button3'},{body:'button4'}]
|
||||||
|
Returns: [{ buttonId:'customId',buttonText:{'displayText':'button1'},type: 1 },{buttonId:'n3XKsL',buttonText:{'displayText':'button2'},type:1},{buttonId:'NDJk0a',buttonText:{'displayText':'button3'},type:1}]</code></pre>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h4>Parameter</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>buttons</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Array of <a href="global.html#ButtonSpec">ButtonSpec</a></p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Array of <a href="global.html#FormattedButtonSpec">FormattedButtonSpec</a></code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
1
docs/CNAME
Normal file
1
docs/CNAME
Normal file
@@ -0,0 +1 @@
|
|||||||
|
docs.wwebjs.dev
|
||||||
183
docs/Call.html
Normal file
183
docs/Call.html
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: Call</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">Call</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="structures_Call.js.html#source-line-9">structures/<wbr>Call.<wbr>js:9</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Represents a Call on WhatsApp</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Properties</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Call.html#canHandleLocally">canHandleLocally</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Call.html#from">from</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Call.html#fromMe">fromMe</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Call.html#id">id</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Call.html#isGroup">isGroup</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Call.html#isVideo">isVideo</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Call.html#participants">participants</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Call.html#timestamp">timestamp</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Call.html#webClientShouldHandle">webClientShouldHandle</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Method</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Call.html#reject">reject()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="Call">new <span class="symbol-name">Call</span><span class="signature"><span class="signature-params">()</span></span></h2>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Extends</dt>
|
||||||
|
<dd><a href="Base.html">Base</a></dd>
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Properties</h2>
|
||||||
|
<section>
|
||||||
|
<h3 id="canHandleLocally"><span class="symbol-name">canHandleLocally</span><small class="property-type">
|
||||||
|
boolean</small></h3>
|
||||||
|
<p>Indicates if the call can be handled in waweb</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="from"><span class="symbol-name">from</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>From</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="fromMe"><span class="symbol-name">fromMe</span><small class="property-type">
|
||||||
|
boolean</small></h3>
|
||||||
|
<p>Indicates if the call was sent by the current user</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="id"><span class="symbol-name">id</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Call ID</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="isGroup"><span class="symbol-name">isGroup</span><small class="property-type">
|
||||||
|
boolean</small></h3>
|
||||||
|
<p>Is Group</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="isVideo"><span class="symbol-name">isVideo</span><small class="property-type">
|
||||||
|
boolean</small></h3>
|
||||||
|
<p>Is video</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="participants"><span class="symbol-name">participants</span><small class="property-type">
|
||||||
|
object</small></h3>
|
||||||
|
<p>Object with participants</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="timestamp"><span class="symbol-name">timestamp</span><small class="property-type">
|
||||||
|
number</small></h3>
|
||||||
|
<p>Unix timestamp for when the call was created</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="webClientShouldHandle"><span class="symbol-name">webClientShouldHandle</span><small class="property-type">
|
||||||
|
boolean</small></h3>
|
||||||
|
<p>Indicates if the call Should be handled in waweb</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<h2>Method</h2>
|
||||||
|
<section>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="reject"><span class="symbol-name">reject</span><span class="signature"><span class="signature-params">()</span></span></h3>
|
||||||
|
<p>Reject the call</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: Chat</title>
|
<title>whatsapp-web.js 1.19.5 » Class: Chat</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -176,7 +176,7 @@
|
|||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
<h3 id="isMuted"><span class="symbol-name">isMuted</span><small class="property-type">
|
<h3 id="isMuted"><span class="symbol-name">isMuted</span><small class="property-type">
|
||||||
number</small></h3>
|
boolean</small></h3>
|
||||||
<p>Indicates if the chat is muted or not</p>
|
<p>Indicates if the chat is muted or not</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
@@ -271,7 +271,7 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Options for searching messages. Right now only limit is supported.</p>
|
<p>Options for searching messages. Right now only limit and fromMe is supported.</p>
|
||||||
<p>Values in <code>searchOptions</code> have the following properties:</p>
|
<p>Values in <code>searchOptions</code> have the following properties:</p>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -294,8 +294,21 @@
|
|||||||
<p>Yes</p>
|
<p>Yes</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>The amount of messages to return. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.</p>
|
<p>The amount of messages to return. If no limit is specified, the available messages will be returned. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.</p>
|
||||||
<p>Defaults to <code>50</code>.</p>
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>fromMe</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Boolean</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Return only messages from the bot number or vise versa. To get all messages, leave the option undefined.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -336,7 +349,7 @@
|
|||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="mute"><span class="symbol-name">mute</span><span class="signature"><span class="signature-params">(unmuteDate)</span></span></h3>
|
<h3 id="mute"><span class="symbol-name">mute</span><span class="signature"><span class="signature-params">(unmuteDate)</span></span></h3>
|
||||||
<p>Mutes this chat until a specified date</p>
|
<p>Mutes this chat forever, unless a date is specified</p>
|
||||||
<section>
|
<section>
|
||||||
<h4>Parameter</h4>
|
<h4>Parameter</h4>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
@@ -360,7 +373,8 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Date at which the Chat will be unmuted</p>
|
<p>Date at which the Chat will be unmuted, leave as is to mute forever</p>
|
||||||
|
<p>Value can be null.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -483,7 +497,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
873
docs/Client.html
873
docs/Client.html
File diff suppressed because it is too large
Load Diff
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: Client.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: Client.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -34,7 +34,6 @@
|
|||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const puppeteer = require('puppeteer');
|
const puppeteer = require('puppeteer');
|
||||||
const moduleRaid = require('@pedroslopez/moduleraid/moduleraid');
|
const moduleRaid = require('@pedroslopez/moduleraid/moduleraid');
|
||||||
const jsQR = require('jsqr');
|
|
||||||
|
|
||||||
const Util = require('./util/Util');
|
const Util = require('./util/Util');
|
||||||
const InterfaceController = require('./util/InterfaceController');
|
const InterfaceController = require('./util/InterfaceController');
|
||||||
@@ -42,25 +41,25 @@ const { WhatsWebURL, DefaultOptions, Events, WAState } = require('./ut
|
|||||||
const { ExposeStore, LoadUtils } = require('./util/Injected');
|
const { ExposeStore, LoadUtils } = require('./util/Injected');
|
||||||
const ChatFactory = require('./factories/ChatFactory');
|
const ChatFactory = require('./factories/ChatFactory');
|
||||||
const ContactFactory = require('./factories/ContactFactory');
|
const ContactFactory = require('./factories/ContactFactory');
|
||||||
const { ClientInfo, Message, MessageMedia, Contact, Location, GroupNotification , Label } = require('./structures');
|
const { ClientInfo, Message, MessageMedia, Contact, Location, GroupNotification, Label, Call, Buttons, List, Reaction } = require('./structures');
|
||||||
|
const LegacySessionAuth = require('./authStrategies/LegacySessionAuth');
|
||||||
|
const NoAuth = require('./authStrategies/NoAuth');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starting point for interacting with the WhatsApp Web API
|
* Starting point for interacting with the WhatsApp Web API
|
||||||
* @extends {EventEmitter}
|
* @extends {EventEmitter}
|
||||||
* @param {object} options - Client options
|
* @param {object} options - Client options
|
||||||
|
* @param {AuthStrategy} options.authStrategy - Determines how to save and restore sessions. Will use LegacySessionAuth if options.session is set. Otherwise, NoAuth will be used.
|
||||||
* @param {number} options.authTimeoutMs - Timeout for authentication selector in puppeteer
|
* @param {number} options.authTimeoutMs - Timeout for authentication selector in puppeteer
|
||||||
* @param {object} options.puppeteer - Puppeteer launch options. View docs here: https://github.com/puppeteer/puppeteer/
|
* @param {object} options.puppeteer - Puppeteer launch options. View docs here: https://github.com/puppeteer/puppeteer/
|
||||||
* @param {number} options.qrRefreshIntervalMs - Refresh interval for qr code (how much time to wait before checking if the qr code has changed)
|
* @param {number} options.qrMaxRetries - How many times should the qrcode be refreshed before giving up
|
||||||
* @param {number} options.qrTimeoutMs - Timeout for qr code selector in puppeteer
|
* @param {string} options.restartOnAuthFail - @deprecated This option should be set directly on the LegacySessionAuth.
|
||||||
* @param {string} options.restartOnAuthFail - Restart client with a new session (i.e. use null 'session' var) if authentication fails
|
* @param {object} options.session - @deprecated Only here for backwards-compatibility. You should move to using LocalAuth, or set the authStrategy to LegacySessionAuth explicitly.
|
||||||
* @param {object} options.session - Whatsapp session to restore. If not set, will start a new session
|
|
||||||
* @param {string} options.session.WABrowserId
|
|
||||||
* @param {string} options.session.WASecretBundle
|
|
||||||
* @param {string} options.session.WAToken1
|
|
||||||
* @param {string} options.session.WAToken2
|
|
||||||
* @param {number} options.takeoverOnConflict - If another whatsapp web session is detected (another browser), take over the session in the current browser
|
* @param {number} options.takeoverOnConflict - If another whatsapp web session is detected (another browser), take over the session in the current browser
|
||||||
* @param {number} options.takeoverTimeoutMs - How much time to wait before taking over the session
|
* @param {number} options.takeoverTimeoutMs - How much time to wait before taking over the session
|
||||||
* @param {string} options.userAgent - User agent to use in puppeteer
|
* @param {string} options.userAgent - User agent to use in puppeteer
|
||||||
* @param {string} options.ffmpegPath - Ffmpeg path to use when formating videos to webp while sending stickers
|
* @param {string} options.ffmpegPath - Ffmpeg path to use when formating videos to webp while sending stickers
|
||||||
|
* @param {boolean} options.bypassCSP - Sets bypassing of page's Content-Security-Policy.
|
||||||
*
|
*
|
||||||
* @fires Client#qr
|
* @fires Client#qr
|
||||||
* @fires Client#authenticated
|
* @fires Client#authenticated
|
||||||
@@ -77,7 +76,6 @@ const { ClientInfo, Message, MessageMedia, Contact, Location, GroupNotification
|
|||||||
* @fires Client#group_update
|
* @fires Client#group_update
|
||||||
* @fires Client#disconnected
|
* @fires Client#disconnected
|
||||||
* @fires Client#change_state
|
* @fires Client#change_state
|
||||||
* @fires Client#change_battery
|
|
||||||
*/
|
*/
|
||||||
class Client extends EventEmitter {
|
class Client extends EventEmitter {
|
||||||
constructor(options = {}) {
|
constructor(options = {}) {
|
||||||
@@ -85,6 +83,27 @@ class Client extends EventEmitter {
|
|||||||
|
|
||||||
this.options = Util.mergeDefault(DefaultOptions, options);
|
this.options = Util.mergeDefault(DefaultOptions, options);
|
||||||
|
|
||||||
|
if(!this.options.authStrategy) {
|
||||||
|
if(Object.prototype.hasOwnProperty.call(this.options, 'session')) {
|
||||||
|
process.emitWarning(
|
||||||
|
'options.session is deprecated and will be removed in a future release due to incompatibility with multi-device. ' +
|
||||||
|
'Use the LocalAuth authStrategy, don\'t pass in a session as an option, or suppress this warning by using the LegacySessionAuth strategy explicitly (see https://wwebjs.dev/guide/authentication.html#legacysessionauth-strategy).',
|
||||||
|
'DeprecationWarning'
|
||||||
|
);
|
||||||
|
|
||||||
|
this.authStrategy = new LegacySessionAuth({
|
||||||
|
session: this.options.session,
|
||||||
|
restartOnAuthFail: this.options.restartOnAuthFail
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.authStrategy = new NoAuth();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.authStrategy = this.options.authStrategy;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.authStrategy.setup(this);
|
||||||
|
|
||||||
this.pupBrowser = null;
|
this.pupBrowser = null;
|
||||||
this.pupPage = null;
|
this.pupPage = null;
|
||||||
|
|
||||||
@@ -95,115 +114,207 @@ class Client extends EventEmitter {
|
|||||||
* Sets up events and requirements, kicks off authentication request
|
* Sets up events and requirements, kicks off authentication request
|
||||||
*/
|
*/
|
||||||
async initialize() {
|
async initialize() {
|
||||||
const browser = await puppeteer.launch(this.options.puppeteer);
|
let [browser, page] = [null, null];
|
||||||
const page = (await browser.pages())[0];
|
|
||||||
page.setUserAgent(this.options.userAgent);
|
await this.authStrategy.beforeBrowserInitialized();
|
||||||
|
|
||||||
|
const puppeteerOpts = this.options.puppeteer;
|
||||||
|
if (puppeteerOpts &amp;&amp; puppeteerOpts.browserWSEndpoint) {
|
||||||
|
browser = await puppeteer.connect(puppeteerOpts);
|
||||||
|
page = await browser.newPage();
|
||||||
|
} else {
|
||||||
|
const browserArgs = [...(puppeteerOpts.args || [])];
|
||||||
|
if(!browserArgs.find(arg => arg.includes('--user-agent'))) {
|
||||||
|
browserArgs.push(`--user-agent=${this.options.userAgent}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
browser = await puppeteer.launch({...puppeteerOpts, args: browserArgs});
|
||||||
|
page = (await browser.pages())[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
await page.setUserAgent(this.options.userAgent);
|
||||||
|
if (this.options.bypassCSP) await page.setBypassCSP(true);
|
||||||
|
|
||||||
this.pupBrowser = browser;
|
this.pupBrowser = browser;
|
||||||
this.pupPage = page;
|
this.pupPage = page;
|
||||||
|
|
||||||
if (this.options.session) {
|
await this.authStrategy.afterBrowserInitialized();
|
||||||
await page.evaluateOnNewDocument(
|
|
||||||
session => {
|
|
||||||
localStorage.clear();
|
|
||||||
localStorage.setItem('WABrowserId', session.WABrowserId);
|
|
||||||
localStorage.setItem('WASecretBundle', session.WASecretBundle);
|
|
||||||
localStorage.setItem('WAToken1', session.WAToken1);
|
|
||||||
localStorage.setItem('WAToken2', session.WAToken2);
|
|
||||||
}, this.options.session);
|
|
||||||
}
|
|
||||||
|
|
||||||
await page.goto(WhatsWebURL, {
|
await page.goto(WhatsWebURL, {
|
||||||
waitUntil: 'load',
|
waitUntil: 'load',
|
||||||
timeout: 0,
|
timeout: 0,
|
||||||
|
referer: 'https://whatsapp.com/'
|
||||||
});
|
});
|
||||||
|
|
||||||
const KEEP_PHONE_CONNECTED_IMG_SELECTOR = '[data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]';
|
await page.evaluate(`function getElementByXpath(path) {
|
||||||
|
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
|
||||||
|
}`);
|
||||||
|
|
||||||
if (this.options.session) {
|
let lastPercent = null,
|
||||||
// Check if session restore was successfull
|
lastPercentMessage = null;
|
||||||
try {
|
|
||||||
await page.waitForSelector(KEEP_PHONE_CONNECTED_IMG_SELECTOR, { timeout: this.options.authTimeoutMs });
|
await page.exposeFunction('loadingScreen', async (percent, message) => {
|
||||||
} catch (err) {
|
if (lastPercent !== percent || lastPercentMessage !== message) {
|
||||||
if (err.name === 'TimeoutError') {
|
this.emit(Events.LOADING_SCREEN, percent, message);
|
||||||
/**
|
lastPercent = percent;
|
||||||
* Emitted when there has been an error while trying to restore an existing session
|
lastPercentMessage = message;
|
||||||
* @event Client#auth_failure
|
}
|
||||||
* @param {string} message
|
});
|
||||||
*/
|
|
||||||
this.emit(Events.AUTHENTICATION_FAILURE, 'Unable to log in. Are the session details valid?');
|
await page.evaluate(
|
||||||
browser.close();
|
async function (selectors) {
|
||||||
if (this.options.restartOnAuthFail) {
|
var observer = new MutationObserver(function () {
|
||||||
// session restore failed so try again but without session to force new authentication
|
let progressBar = window.getElementByXpath(
|
||||||
this.options.session = null;
|
selectors.PROGRESS
|
||||||
this.initialize();
|
);
|
||||||
|
let progressMessage = window.getElementByXpath(
|
||||||
|
selectors.PROGRESS_MESSAGE
|
||||||
|
);
|
||||||
|
|
||||||
|
if (progressBar) {
|
||||||
|
window.loadingScreen(
|
||||||
|
progressBar.value,
|
||||||
|
progressMessage.innerText
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return;
|
});
|
||||||
}
|
|
||||||
|
|
||||||
throw err;
|
observer.observe(document, {
|
||||||
|
attributes: true,
|
||||||
|
childList: true,
|
||||||
|
characterData: true,
|
||||||
|
subtree: true,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{
|
||||||
|
PROGRESS: '//*[@id=\'app\']/div/div/div[2]/progress',
|
||||||
|
PROGRESS_MESSAGE: '//*[@id=\'app\']/div/div/div[3]',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const INTRO_IMG_SELECTOR = '[data-testid="intro-md-beta-logo-dark"], [data-testid="intro-md-beta-logo-light"], [data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]';
|
||||||
|
const INTRO_QRCODE_SELECTOR = 'div[data-ref] canvas';
|
||||||
|
|
||||||
|
// Checks which selector appears first
|
||||||
|
const needAuthentication = await Promise.race([
|
||||||
|
new Promise(resolve => {
|
||||||
|
page.waitForSelector(INTRO_IMG_SELECTOR, { timeout: this.options.authTimeoutMs })
|
||||||
|
.then(() => resolve(false))
|
||||||
|
.catch((err) => resolve(err));
|
||||||
|
}),
|
||||||
|
new Promise(resolve => {
|
||||||
|
page.waitForSelector(INTRO_QRCODE_SELECTOR, { timeout: this.options.authTimeoutMs })
|
||||||
|
.then(() => resolve(true))
|
||||||
|
.catch((err) => resolve(err));
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Checks if an error occurred on the first found selector. The second will be discarded and ignored by .race;
|
||||||
|
if (needAuthentication instanceof Error) throw needAuthentication;
|
||||||
|
|
||||||
|
// Scan-qrcode selector was found. Needs authentication
|
||||||
|
if (needAuthentication) {
|
||||||
|
const { failed, failureEventPayload, restart } = await this.authStrategy.onAuthenticationNeeded();
|
||||||
|
if(failed) {
|
||||||
|
/**
|
||||||
|
* Emitted when there has been an error while trying to restore an existing session
|
||||||
|
* @event Client#auth_failure
|
||||||
|
* @param {string} message
|
||||||
|
*/
|
||||||
|
this.emit(Events.AUTHENTICATION_FAILURE, failureEventPayload);
|
||||||
|
await this.destroy();
|
||||||
|
if (restart) {
|
||||||
|
// session restore failed so try again but without session to force new authentication
|
||||||
|
return this.initialize();
|
||||||
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
const QR_CONTAINER = 'div[data-ref]';
|
||||||
const getQrCode = async () => {
|
const QR_RETRY_BUTTON = 'div[data-ref] > span > button';
|
||||||
// Check if retry button is present
|
let qrRetries = 0;
|
||||||
var QR_RETRY_SELECTOR = 'div[data-ref] > span > div';
|
await page.exposeFunction('qrChanged', async (qr) => {
|
||||||
var qrRetry = await page.$(QR_RETRY_SELECTOR);
|
|
||||||
if (qrRetry) {
|
|
||||||
await qrRetry.click();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wait for QR Code
|
|
||||||
|
|
||||||
const QR_CANVAS_SELECTOR = 'canvas';
|
|
||||||
await page.waitForSelector(QR_CANVAS_SELECTOR, { timeout: this.options.qrTimeoutMs });
|
|
||||||
const qrImgData = await page.$eval(QR_CANVAS_SELECTOR, canvas => [].slice.call(canvas.getContext('2d').getImageData(0, 0, 264, 264).data));
|
|
||||||
const qr = jsQR(qrImgData, 264, 264).data;
|
|
||||||
/**
|
/**
|
||||||
* Emitted when the QR code is received
|
* Emitted when a QR code is received
|
||||||
* @event Client#qr
|
* @event Client#qr
|
||||||
* @param {string} qr QR Code
|
* @param {string} qr QR Code
|
||||||
*/
|
*/
|
||||||
this.emit(Events.QR_RECEIVED, qr);
|
this.emit(Events.QR_RECEIVED, qr);
|
||||||
};
|
if (this.options.qrMaxRetries > 0) {
|
||||||
getQrCode();
|
qrRetries++;
|
||||||
this._qrRefreshInterval = setInterval(getQrCode, this.options.qrRefreshIntervalMs);
|
if (qrRetries > this.options.qrMaxRetries) {
|
||||||
|
this.emit(Events.DISCONNECTED, 'Max qrcode retries reached');
|
||||||
|
await this.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.evaluate(function (selectors) {
|
||||||
|
const qr_container = document.querySelector(selectors.QR_CONTAINER);
|
||||||
|
window.qrChanged(qr_container.dataset.ref);
|
||||||
|
|
||||||
|
const obs = new MutationObserver((muts) => {
|
||||||
|
muts.forEach(mut => {
|
||||||
|
// Listens to qr token change
|
||||||
|
if (mut.type === 'attributes' &amp;&amp; mut.attributeName === 'data-ref') {
|
||||||
|
window.qrChanged(mut.target.dataset.ref);
|
||||||
|
} else
|
||||||
|
// Listens to retry button, when found, click it
|
||||||
|
if (mut.type === 'childList') {
|
||||||
|
const retry_button = document.querySelector(selectors.QR_RETRY_BUTTON);
|
||||||
|
if (retry_button) retry_button.click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
obs.observe(qr_container.parentElement, {
|
||||||
|
subtree: true,
|
||||||
|
childList: true,
|
||||||
|
attributes: true,
|
||||||
|
attributeFilter: ['data-ref'],
|
||||||
|
});
|
||||||
|
}, {
|
||||||
|
QR_CONTAINER,
|
||||||
|
QR_RETRY_BUTTON
|
||||||
|
});
|
||||||
|
|
||||||
// Wait for code scan
|
// Wait for code scan
|
||||||
await page.waitForSelector(KEEP_PHONE_CONNECTED_IMG_SELECTOR, { timeout: 0 });
|
try {
|
||||||
clearInterval(this._qrRefreshInterval);
|
await page.waitForSelector(INTRO_IMG_SELECTOR, { timeout: 0 });
|
||||||
this._qrRefreshInterval = undefined;
|
} catch(error) {
|
||||||
|
if (
|
||||||
|
error.name === 'ProtocolError' &amp;&amp;
|
||||||
|
error.message &amp;&amp;
|
||||||
|
error.message.match(/Target closed/)
|
||||||
|
) {
|
||||||
|
// something has called .destroy() while waiting
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await page.evaluate(ExposeStore, moduleRaid.toString());
|
await page.evaluate(ExposeStore, moduleRaid.toString());
|
||||||
|
const authEventPayload = await this.authStrategy.getAuthEventPayload();
|
||||||
// Get session tokens
|
|
||||||
const localStorage = JSON.parse(await page.evaluate(() => {
|
|
||||||
return JSON.stringify(window.localStorage);
|
|
||||||
}));
|
|
||||||
|
|
||||||
const session = {
|
|
||||||
WABrowserId: localStorage.WABrowserId,
|
|
||||||
WASecretBundle: localStorage.WASecretBundle,
|
|
||||||
WAToken1: localStorage.WAToken1,
|
|
||||||
WAToken2: localStorage.WAToken2
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emitted when authentication is successful
|
* Emitted when authentication is successful
|
||||||
* @event Client#authenticated
|
* @event Client#authenticated
|
||||||
* @param {object} session Object containing session information. Can be used to restore the session.
|
|
||||||
* @param {string} session.WABrowserId
|
|
||||||
* @param {string} session.WASecretBundle
|
|
||||||
* @param {string} session.WAToken1
|
|
||||||
* @param {string} session.WAToken2
|
|
||||||
*/
|
*/
|
||||||
this.emit(Events.AUTHENTICATED, session);
|
this.emit(Events.AUTHENTICATED, authEventPayload);
|
||||||
|
|
||||||
// Check window.Store Injection
|
// Check window.Store Injection
|
||||||
await page.waitForFunction('window.Store != undefined');
|
await page.waitForFunction('window.Store != undefined');
|
||||||
|
|
||||||
|
await page.evaluate(async () => {
|
||||||
|
// safely unregister service workers
|
||||||
|
const registrations = await navigator.serviceWorker.getRegistrations();
|
||||||
|
for (let registration of registrations) {
|
||||||
|
registration.unregister();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
//Load util functions (serializers, helper functions)
|
//Load util functions (serializers, helper functions)
|
||||||
await page.evaluate(LoadUtils);
|
await page.evaluate(LoadUtils);
|
||||||
|
|
||||||
@@ -213,7 +324,7 @@ class Client extends EventEmitter {
|
|||||||
* @type {ClientInfo}
|
* @type {ClientInfo}
|
||||||
*/
|
*/
|
||||||
this.info = new ClientInfo(this, await page.evaluate(() => {
|
this.info = new ClientInfo(this, await page.evaluate(() => {
|
||||||
return window.Store.Conn.serialize();
|
return { ...window.Store.Conn.serialize(), wid: window.Store.User.getMeUser() };
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Add InterfaceController
|
// Add InterfaceController
|
||||||
@@ -221,8 +332,6 @@ class Client extends EventEmitter {
|
|||||||
|
|
||||||
// Register events
|
// Register events
|
||||||
await page.exposeFunction('onAddMessageEvent', msg => {
|
await page.exposeFunction('onAddMessageEvent', msg => {
|
||||||
if (!msg.isNewMsg) return;
|
|
||||||
|
|
||||||
if (msg.type === 'gp2') {
|
if (msg.type === 'gp2') {
|
||||||
const notification = new GroupNotification(this, msg);
|
const notification = new GroupNotification(this, msg);
|
||||||
if (msg.subtype === 'add' || msg.subtype === 'invite') {
|
if (msg.subtype === 'add' || msg.subtype === 'invite') {
|
||||||
@@ -341,7 +450,7 @@ class Client extends EventEmitter {
|
|||||||
this.emit(Events.MEDIA_UPLOADED, message);
|
this.emit(Events.MEDIA_UPLOADED, message);
|
||||||
});
|
});
|
||||||
|
|
||||||
await page.exposeFunction('onAppStateChangedEvent', (state) => {
|
await page.exposeFunction('onAppStateChangedEvent', async (state) => {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emitted when the connection state changes
|
* Emitted when the connection state changes
|
||||||
@@ -366,8 +475,9 @@ class Client extends EventEmitter {
|
|||||||
/**
|
/**
|
||||||
* Emitted when the client has been disconnected
|
* Emitted when the client has been disconnected
|
||||||
* @event Client#disconnected
|
* @event Client#disconnected
|
||||||
* @param {WAState} reason state that caused the disconnect
|
* @param {WAState|"NAVIGATION"} reason reason that caused the disconnect
|
||||||
*/
|
*/
|
||||||
|
await this.authStrategy.disconnect();
|
||||||
this.emit(Events.DISCONNECTED, state);
|
this.emit(Events.DISCONNECTED, state);
|
||||||
this.destroy();
|
this.destroy();
|
||||||
}
|
}
|
||||||
@@ -379,24 +489,90 @@ class Client extends EventEmitter {
|
|||||||
if (battery === undefined) return;
|
if (battery === undefined) return;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emitted when the battery percentage for the attached device changes
|
* Emitted when the battery percentage for the attached device changes. Will not be sent if using multi-device.
|
||||||
* @event Client#change_battery
|
* @event Client#change_battery
|
||||||
* @param {object} batteryInfo
|
* @param {object} batteryInfo
|
||||||
* @param {number} batteryInfo.battery - The current battery percentage
|
* @param {number} batteryInfo.battery - The current battery percentage
|
||||||
* @param {boolean} batteryInfo.plugged - Indicates if the phone is plugged in (true) or not (false)
|
* @param {boolean} batteryInfo.plugged - Indicates if the phone is plugged in (true) or not (false)
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
this.emit(Events.BATTERY_CHANGED, { battery, plugged });
|
this.emit(Events.BATTERY_CHANGED, { battery, plugged });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await page.exposeFunction('onIncomingCall', (call) => {
|
||||||
|
/**
|
||||||
|
* Emitted when a call is received
|
||||||
|
* @event Client#incoming_call
|
||||||
|
* @param {object} call
|
||||||
|
* @param {number} call.id - Call id
|
||||||
|
* @param {string} call.peerJid - Who called
|
||||||
|
* @param {boolean} call.isVideo - if is video
|
||||||
|
* @param {boolean} call.isGroup - if is group
|
||||||
|
* @param {boolean} call.canHandleLocally - if we can handle in waweb
|
||||||
|
* @param {boolean} call.outgoing - if is outgoing
|
||||||
|
* @param {boolean} call.webClientShouldHandle - If Waweb should handle
|
||||||
|
* @param {object} call.participants - Participants
|
||||||
|
*/
|
||||||
|
const cll = new Call(this, call);
|
||||||
|
this.emit(Events.INCOMING_CALL, cll);
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.exposeFunction('onReaction', (reactions) => {
|
||||||
|
for (const reaction of reactions) {
|
||||||
|
/**
|
||||||
|
* Emitted when a reaction is sent, received, updated or removed
|
||||||
|
* @event Client#message_reaction
|
||||||
|
* @param {object} reaction
|
||||||
|
* @param {object} reaction.id - Reaction id
|
||||||
|
* @param {number} reaction.orphan - Orphan
|
||||||
|
* @param {?string} reaction.orphanReason - Orphan reason
|
||||||
|
* @param {number} reaction.timestamp - Timestamp
|
||||||
|
* @param {string} reaction.reaction - Reaction
|
||||||
|
* @param {boolean} reaction.read - Read
|
||||||
|
* @param {object} reaction.msgId - Parent message id
|
||||||
|
* @param {string} reaction.senderId - Sender id
|
||||||
|
* @param {?number} reaction.ack - Ack
|
||||||
|
*/
|
||||||
|
|
||||||
|
this.emit(Events.MESSAGE_REACTION, new Reaction(this, reaction));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
await page.evaluate(() => {
|
await page.evaluate(() => {
|
||||||
window.Store.Msg.on('add', (msg) => { if (msg.isNewMsg) window.onAddMessageEvent(window.WWebJS.getMessageModel(msg)); });
|
|
||||||
window.Store.Msg.on('change', (msg) => { window.onChangeMessageEvent(window.WWebJS.getMessageModel(msg)); });
|
window.Store.Msg.on('change', (msg) => { window.onChangeMessageEvent(window.WWebJS.getMessageModel(msg)); });
|
||||||
window.Store.Msg.on('change:type', (msg) => { window.onChangeMessageTypeEvent(window.WWebJS.getMessageModel(msg)); });
|
window.Store.Msg.on('change:type', (msg) => { window.onChangeMessageTypeEvent(window.WWebJS.getMessageModel(msg)); });
|
||||||
window.Store.Msg.on('change:ack', (msg,ack) => { window.onMessageAckEvent(window.WWebJS.getMessageModel(msg), ack); });
|
window.Store.Msg.on('change:ack', (msg, ack) => { window.onMessageAckEvent(window.WWebJS.getMessageModel(msg), ack); });
|
||||||
window.Store.Msg.on('change:isUnsentMedia', (msg, unsent) => { if (msg.id.fromMe &amp;&amp; !unsent) window.onMessageMediaUploadedEvent(window.WWebJS.getMessageModel(msg)); });
|
window.Store.Msg.on('change:isUnsentMedia', (msg, unsent) => { if (msg.id.fromMe &amp;&amp; !unsent) window.onMessageMediaUploadedEvent(window.WWebJS.getMessageModel(msg)); });
|
||||||
window.Store.Msg.on('remove', (msg) => { if (msg.isNewMsg) window.onRemoveMessageEvent(window.WWebJS.getMessageModel(msg)); });
|
window.Store.Msg.on('remove', (msg) => { if (msg.isNewMsg) window.onRemoveMessageEvent(window.WWebJS.getMessageModel(msg)); });
|
||||||
window.Store.AppState.on('change:state', (_AppState, state) => { window.onAppStateChangedEvent(state); });
|
window.Store.AppState.on('change:state', (_AppState, state) => { window.onAppStateChangedEvent(state); });
|
||||||
window.Store.Conn.on('change:battery', (state) => { window.onBatteryStateChangedEvent(state); });
|
window.Store.Conn.on('change:battery', (state) => { window.onBatteryStateChangedEvent(state); });
|
||||||
|
window.Store.Call.on('add', (call) => { window.onIncomingCall(call); });
|
||||||
|
window.Store.Msg.on('add', (msg) => {
|
||||||
|
if (msg.isNewMsg) {
|
||||||
|
if(msg.type === 'ciphertext') {
|
||||||
|
// defer message event until ciphertext is resolved (type changed)
|
||||||
|
msg.once('change:type', (_msg) => window.onAddMessageEvent(window.WWebJS.getMessageModel(_msg)));
|
||||||
|
} else {
|
||||||
|
window.onAddMessageEvent(window.WWebJS.getMessageModel(msg));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
{
|
||||||
|
const module = window.Store.createOrUpdateReactionsModule;
|
||||||
|
const ogMethod = module.createOrUpdateReactions;
|
||||||
|
module.createOrUpdateReactions = ((...args) => {
|
||||||
|
window.onReaction(args[0].map(reaction => {
|
||||||
|
const msgKey = window.Store.MsgKey.fromString(reaction.msgKey);
|
||||||
|
const parentMsgKey = window.Store.MsgKey.fromString(reaction.parentMsgKey);
|
||||||
|
const timestamp = reaction.timestamp / 1000;
|
||||||
|
|
||||||
|
return {...reaction, msgKey, parentMsgKey, timestamp };
|
||||||
|
}));
|
||||||
|
|
||||||
|
return ogMethod(...args);
|
||||||
|
}).bind(module);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -404,25 +580,36 @@ class Client extends EventEmitter {
|
|||||||
* @event Client#ready
|
* @event Client#ready
|
||||||
*/
|
*/
|
||||||
this.emit(Events.READY);
|
this.emit(Events.READY);
|
||||||
|
this.authStrategy.afterAuthReady();
|
||||||
|
|
||||||
|
// Disconnect when navigating away when in PAIRING state (detect logout)
|
||||||
|
this.pupPage.on('framenavigated', async () => {
|
||||||
|
const appState = await this.getState();
|
||||||
|
if(!appState || appState === WAState.PAIRING) {
|
||||||
|
await this.authStrategy.disconnect();
|
||||||
|
this.emit(Events.DISCONNECTED, 'NAVIGATION');
|
||||||
|
await this.destroy();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes the client
|
* Closes the client
|
||||||
*/
|
*/
|
||||||
async destroy() {
|
async destroy() {
|
||||||
if (this._qrRefreshInterval) {
|
|
||||||
clearInterval(this._qrRefreshInterval);
|
|
||||||
}
|
|
||||||
await this.pupBrowser.close();
|
await this.pupBrowser.close();
|
||||||
|
await this.authStrategy.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs out the client, closing the current session
|
* Logs out the client, closing the current session
|
||||||
*/
|
*/
|
||||||
async logout() {
|
async logout() {
|
||||||
return await this.pupPage.evaluate(() => {
|
await this.pupPage.evaluate(() => {
|
||||||
return window.Store.AppState.logout();
|
return window.Store.AppState.logout();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await this.authStrategy.logout();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -452,8 +639,9 @@ class Client extends EventEmitter {
|
|||||||
/**
|
/**
|
||||||
* Message options.
|
* Message options.
|
||||||
* @typedef {Object} MessageSendOptions
|
* @typedef {Object} MessageSendOptions
|
||||||
* @property {boolean} [linkPreview=true] - Show links preview
|
* @property {boolean} [linkPreview=true] - Show links preview. Has no effect on multi-device accounts.
|
||||||
* @property {boolean} [sendAudioAsVoice=false] - Send audio as voice message
|
* @property {boolean} [sendAudioAsVoice=false] - Send audio as voice message
|
||||||
|
* @property {boolean} [sendVideoAsGif=false] - Send video as gif
|
||||||
* @property {boolean} [sendMediaAsSticker=false] - Send media as a sticker
|
* @property {boolean} [sendMediaAsSticker=false] - Send media as a sticker
|
||||||
* @property {boolean} [sendMediaAsDocument=false] - Send media as a document
|
* @property {boolean} [sendMediaAsDocument=false] - Send media as a document
|
||||||
* @property {boolean} [parseVCards=true] - Automatically parse vCards and send them as contacts
|
* @property {boolean} [parseVCards=true] - Automatically parse vCards and send them as contacts
|
||||||
@@ -461,13 +649,16 @@ class Client extends EventEmitter {
|
|||||||
* @property {string} [quotedMessageId] - Id of the message that is being quoted (or replied to)
|
* @property {string} [quotedMessageId] - Id of the message that is being quoted (or replied to)
|
||||||
* @property {Contact[]} [mentions] - Contacts that are being mentioned in the message
|
* @property {Contact[]} [mentions] - Contacts that are being mentioned in the message
|
||||||
* @property {boolean} [sendSeen=true] - Mark the conversation as seen after sending the message
|
* @property {boolean} [sendSeen=true] - Mark the conversation as seen after sending the message
|
||||||
|
* @property {string} [stickerAuthor=undefined] - Sets the author of the sticker, (if sendMediaAsSticker is true).
|
||||||
|
* @property {string} [stickerName=undefined] - Sets the name of the sticker, (if sendMediaAsSticker is true).
|
||||||
|
* @property {string[]} [stickerCategories=undefined] - Sets the categories of the sticker, (if sendMediaAsSticker is true). Provide emoji char array, can be null.
|
||||||
* @property {MessageMedia} [media] - Media to be sent
|
* @property {MessageMedia} [media] - Media to be sent
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a message to a specific chatId
|
* Send a message to a specific chatId
|
||||||
* @param {string} chatId
|
* @param {string} chatId
|
||||||
* @param {string|MessageMedia|Location|Contact|Array&lt;Contact>} content
|
* @param {string|MessageMedia|Location|Contact|Array&lt;Contact>|Buttons|List} content
|
||||||
* @param {MessageSendOptions} [options] - Options used when sending the message
|
* @param {MessageSendOptions} [options] - Options used when sending the message
|
||||||
*
|
*
|
||||||
* @returns {Promise&lt;Message>} Message that was just sent
|
* @returns {Promise&lt;Message>} Message that was just sent
|
||||||
@@ -476,12 +667,14 @@ class Client extends EventEmitter {
|
|||||||
let internalOptions = {
|
let internalOptions = {
|
||||||
linkPreview: options.linkPreview === false ? undefined : true,
|
linkPreview: options.linkPreview === false ? undefined : true,
|
||||||
sendAudioAsVoice: options.sendAudioAsVoice,
|
sendAudioAsVoice: options.sendAudioAsVoice,
|
||||||
|
sendVideoAsGif: options.sendVideoAsGif,
|
||||||
sendMediaAsSticker: options.sendMediaAsSticker,
|
sendMediaAsSticker: options.sendMediaAsSticker,
|
||||||
sendMediaAsDocument: options.sendMediaAsDocument,
|
sendMediaAsDocument: options.sendMediaAsDocument,
|
||||||
caption: options.caption,
|
caption: options.caption,
|
||||||
quotedMessageId: options.quotedMessageId,
|
quotedMessageId: options.quotedMessageId,
|
||||||
parseVCards: options.parseVCards === false ? false : true,
|
parseVCards: options.parseVCards === false ? false : true,
|
||||||
mentionedJidList: Array.isArray(options.mentions) ? options.mentions.map(contact => contact.id._serialized) : []
|
mentionedJidList: Array.isArray(options.mentions) ? options.mentions.map(contact => contact.id._serialized) : [],
|
||||||
|
extraOptions: options.extra
|
||||||
};
|
};
|
||||||
|
|
||||||
const sendSeen = typeof options.sendSeen === 'undefined' ? true : options.sendSeen;
|
const sendSeen = typeof options.sendSeen === 'undefined' ? true : options.sendSeen;
|
||||||
@@ -496,22 +689,36 @@ class Client extends EventEmitter {
|
|||||||
} else if (content instanceof Location) {
|
} else if (content instanceof Location) {
|
||||||
internalOptions.location = content;
|
internalOptions.location = content;
|
||||||
content = '';
|
content = '';
|
||||||
} else if(content instanceof Contact) {
|
} else if (content instanceof Contact) {
|
||||||
internalOptions.contactCard = content.id._serialized;
|
internalOptions.contactCard = content.id._serialized;
|
||||||
content = '';
|
content = '';
|
||||||
} else if(Array.isArray(content) &amp;&amp; content.length > 0 &amp;&amp; content[0] instanceof Contact) {
|
} else if (Array.isArray(content) &amp;&amp; content.length > 0 &amp;&amp; content[0] instanceof Contact) {
|
||||||
internalOptions.contactCardList = content.map(contact => contact.id._serialized);
|
internalOptions.contactCardList = content.map(contact => contact.id._serialized);
|
||||||
content = '';
|
content = '';
|
||||||
|
} else if (content instanceof Buttons) {
|
||||||
|
if (content.type !== 'chat') { internalOptions.attachment = content.body; }
|
||||||
|
internalOptions.buttons = content;
|
||||||
|
content = '';
|
||||||
|
} else if (content instanceof List) {
|
||||||
|
internalOptions.list = content;
|
||||||
|
content = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (internalOptions.sendMediaAsSticker &amp;&amp; internalOptions.attachment) {
|
if (internalOptions.sendMediaAsSticker &amp;&amp; internalOptions.attachment) {
|
||||||
internalOptions.attachment = await Util.formatToWebpSticker(internalOptions.attachment);
|
internalOptions.attachment = await Util.formatToWebpSticker(
|
||||||
|
internalOptions.attachment, {
|
||||||
|
name: options.stickerName,
|
||||||
|
author: options.stickerAuthor,
|
||||||
|
categories: options.stickerCategories
|
||||||
|
}, this.pupPage
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const newMessage = await this.pupPage.evaluate(async (chatId, message, options, sendSeen) => {
|
const newMessage = await this.pupPage.evaluate(async (chatId, message, options, sendSeen) => {
|
||||||
const chatWid = window.Store.WidFactory.createWid(chatId);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
const chat = await window.Store.Chat.find(chatWid);
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
|
||||||
|
|
||||||
if (sendSeen) {
|
if (sendSeen) {
|
||||||
window.WWebJS.sendSeen(chatId);
|
window.WWebJS.sendSeen(chatId);
|
||||||
}
|
}
|
||||||
@@ -523,6 +730,24 @@ class Client extends EventEmitter {
|
|||||||
return new Message(this, newMessage);
|
return new Message(this, newMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches for messages
|
||||||
|
* @param {string} query
|
||||||
|
* @param {Object} [options]
|
||||||
|
* @param {number} [options.page]
|
||||||
|
* @param {number} [options.limit]
|
||||||
|
* @param {string} [options.chatId]
|
||||||
|
* @returns {Promise&lt;Message[]>}
|
||||||
|
*/
|
||||||
|
async searchMessages(query, options = {}) {
|
||||||
|
const messages = await this.pupPage.evaluate(async (query, page, count, remote) => {
|
||||||
|
const { messages } = await window.Store.Msg.search(query, page, count, remote);
|
||||||
|
return messages.map(msg => window.WWebJS.getMessageModel(msg));
|
||||||
|
}, query, options.page, options.limit, options.chatId);
|
||||||
|
|
||||||
|
return messages.map(msg => new Message(this, msg));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all current chat instances
|
* Get all current chat instances
|
||||||
* @returns {Promise&lt;Array&lt;Chat>>}
|
* @returns {Promise&lt;Array&lt;Chat>>}
|
||||||
@@ -580,7 +805,7 @@ class Client extends EventEmitter {
|
|||||||
*/
|
*/
|
||||||
async getInviteInfo(inviteCode) {
|
async getInviteInfo(inviteCode) {
|
||||||
return await this.pupPage.evaluate(inviteCode => {
|
return await this.pupPage.evaluate(inviteCode => {
|
||||||
return window.Store.Wap.groupInviteInfo(inviteCode);
|
return window.Store.InviteInfo.queryGroupInvite(inviteCode);
|
||||||
}, inviteCode);
|
}, inviteCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -590,11 +815,25 @@ class Client extends EventEmitter {
|
|||||||
* @returns {Promise&lt;string>} Id of the joined Chat
|
* @returns {Promise&lt;string>} Id of the joined Chat
|
||||||
*/
|
*/
|
||||||
async acceptInvite(inviteCode) {
|
async acceptInvite(inviteCode) {
|
||||||
const chatId = await this.pupPage.evaluate(async inviteCode => {
|
const res = await this.pupPage.evaluate(async inviteCode => {
|
||||||
return await window.Store.Invite.sendJoinGroupViaInvite(inviteCode);
|
return await window.Store.Invite.joinGroupViaInvite(inviteCode);
|
||||||
}, inviteCode);
|
}, inviteCode);
|
||||||
|
|
||||||
return chatId._serialized;
|
return res.gid._serialized;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accepts a private invitation to join a group
|
||||||
|
* @param {object} inviteInfo Invite V4 Info
|
||||||
|
* @returns {Promise&lt;Object>}
|
||||||
|
*/
|
||||||
|
async acceptGroupV4Invite(inviteInfo) {
|
||||||
|
if (!inviteInfo.inviteCode) throw 'Invalid invite code, try passing the message.inviteV4 object';
|
||||||
|
if (inviteInfo.inviteCodeExp == 0) throw 'Expired invite code';
|
||||||
|
return this.pupPage.evaluate(async inviteInfo => {
|
||||||
|
let { groupId, fromId, inviteCode, inviteCodeExp } = inviteInfo;
|
||||||
|
return await window.Store.JoinInviteV4.sendJoinGroupViaInviteV4(inviteCode, String(inviteCodeExp), groupId, fromId);
|
||||||
|
}, inviteInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -603,7 +842,7 @@ class Client extends EventEmitter {
|
|||||||
*/
|
*/
|
||||||
async setStatus(status) {
|
async setStatus(status) {
|
||||||
await this.pupPage.evaluate(async status => {
|
await this.pupPage.evaluate(async status => {
|
||||||
return await window.Store.Wap.sendSetStatus(status);
|
return await window.Store.StatusUtils.setMyStatus(status);
|
||||||
}, status);
|
}, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -611,11 +850,22 @@ class Client extends EventEmitter {
|
|||||||
* Sets the current user's display name.
|
* Sets the current user's display name.
|
||||||
* This is the name shown to WhatsApp users that have not added you as a contact beside your number in groups and in your profile.
|
* This is the name shown to WhatsApp users that have not added you as a contact beside your number in groups and in your profile.
|
||||||
* @param {string} displayName New display name
|
* @param {string} displayName New display name
|
||||||
|
* @returns {Promise&lt;Boolean>}
|
||||||
*/
|
*/
|
||||||
async setDisplayName(displayName) {
|
async setDisplayName(displayName) {
|
||||||
await this.pupPage.evaluate(async displayName => {
|
const couldSet = await this.pupPage.evaluate(async displayName => {
|
||||||
return await window.Store.Wap.setPushname(displayName);
|
if(!window.Store.Conn.canSetMyPushname()) return false;
|
||||||
|
|
||||||
|
if(window.Store.MDBackend) {
|
||||||
|
// TODO
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
const res = await window.Store.Wap.setPushname(displayName);
|
||||||
|
return !res.status || res.status === 200;
|
||||||
|
}
|
||||||
}, displayName);
|
}, displayName);
|
||||||
|
|
||||||
|
return couldSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -624,6 +874,7 @@ class Client extends EventEmitter {
|
|||||||
*/
|
*/
|
||||||
async getState() {
|
async getState() {
|
||||||
return await this.pupPage.evaluate(() => {
|
return await this.pupPage.evaluate(() => {
|
||||||
|
if(!window.Store) return null;
|
||||||
return window.Store.AppState.state;
|
return window.Store.AppState.state;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -633,7 +884,16 @@ class Client extends EventEmitter {
|
|||||||
*/
|
*/
|
||||||
async sendPresenceAvailable() {
|
async sendPresenceAvailable() {
|
||||||
return await this.pupPage.evaluate(() => {
|
return await this.pupPage.evaluate(() => {
|
||||||
return window.Store.Wap.sendPresenceAvailable();
|
return window.Store.PresenceUtils.sendPresenceAvailable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Marks the client as unavailable
|
||||||
|
*/
|
||||||
|
async sendPresenceUnavailable() {
|
||||||
|
return await this.pupPage.evaluate(() => {
|
||||||
|
return window.Store.PresenceUtils.sendPresenceUnavailable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -645,7 +905,7 @@ class Client extends EventEmitter {
|
|||||||
return await this.pupPage.evaluate(async chatId => {
|
return await this.pupPage.evaluate(async chatId => {
|
||||||
let chat = await window.Store.Chat.get(chatId);
|
let chat = await window.Store.Chat.get(chatId);
|
||||||
await window.Store.Cmd.archiveChat(chat, true);
|
await window.Store.Cmd.archiveChat(chat, true);
|
||||||
return chat.archive;
|
return true;
|
||||||
}, chatId);
|
}, chatId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -657,7 +917,7 @@ class Client extends EventEmitter {
|
|||||||
return await this.pupPage.evaluate(async chatId => {
|
return await this.pupPage.evaluate(async chatId => {
|
||||||
let chat = await window.Store.Chat.get(chatId);
|
let chat = await window.Store.Chat.get(chatId);
|
||||||
await window.Store.Cmd.archiveChat(chat, false);
|
await window.Store.Cmd.archiveChat(chat, false);
|
||||||
return chat.archive;
|
return false;
|
||||||
}, chatId);
|
}, chatId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -672,8 +932,9 @@ class Client extends EventEmitter {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
const MAX_PIN_COUNT = 3;
|
const MAX_PIN_COUNT = 3;
|
||||||
if (window.Store.Chat.models.length > MAX_PIN_COUNT) {
|
const chatModels = window.Store.Chat.getModelsArray();
|
||||||
let maxPinned = window.Store.Chat.models[MAX_PIN_COUNT - 1].pin;
|
if (chatModels.length > MAX_PIN_COUNT) {
|
||||||
|
let maxPinned = chatModels[MAX_PIN_COUNT - 1].pin;
|
||||||
if (maxPinned) {
|
if (maxPinned) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -699,15 +960,16 @@ class Client extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mutes the Chat until a specified date
|
* Mutes this chat forever, unless a date is specified
|
||||||
* @param {string} chatId ID of the chat that will be muted
|
* @param {string} chatId ID of the chat that will be muted
|
||||||
* @param {Date} unmuteDate Date when the chat will be unmuted
|
* @param {?Date} unmuteDate Date when the chat will be unmuted, leave as is to mute forever
|
||||||
*/
|
*/
|
||||||
async muteChat(chatId, unmuteDate) {
|
async muteChat(chatId, unmuteDate) {
|
||||||
|
unmuteDate = unmuteDate ? unmuteDate.getTime() / 1000 : -1;
|
||||||
await this.pupPage.evaluate(async (chatId, timestamp) => {
|
await this.pupPage.evaluate(async (chatId, timestamp) => {
|
||||||
let chat = await window.Store.Chat.get(chatId);
|
let chat = await window.Store.Chat.get(chatId);
|
||||||
await chat.mute.mute(timestamp, !0);
|
await chat.mute.mute({expiration: timestamp, sendDevice:!0});
|
||||||
}, chatId, unmuteDate.getTime() / 1000);
|
}, chatId, unmuteDate || -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -738,13 +1000,49 @@ class Client extends EventEmitter {
|
|||||||
* @returns {Promise&lt;string>}
|
* @returns {Promise&lt;string>}
|
||||||
*/
|
*/
|
||||||
async getProfilePicUrl(contactId) {
|
async getProfilePicUrl(contactId) {
|
||||||
const profilePic = await this.pupPage.evaluate((contactId) => {
|
const profilePic = await this.pupPage.evaluate(async contactId => {
|
||||||
return window.Store.Wap.profilePicFind(contactId);
|
try {
|
||||||
|
const chatWid = window.Store.WidFactory.createWid(contactId);
|
||||||
|
return await window.Store.ProfilePic.profilePicFind(chatWid);
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return undefined;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, contactId);
|
}, contactId);
|
||||||
|
|
||||||
return profilePic ? profilePic.eurl : undefined;
|
return profilePic ? profilePic.eurl : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Contact's common groups with you. Returns empty array if you don't have any common group.
|
||||||
|
* @param {string} contactId the whatsapp user's ID (_serialized format)
|
||||||
|
* @returns {Promise&lt;WAWebJS.ChatId[]>}
|
||||||
|
*/
|
||||||
|
async getCommonGroups(contactId) {
|
||||||
|
const commonGroups = await this.pupPage.evaluate(async (contactId) => {
|
||||||
|
let contact = window.Store.Contact.get(contactId);
|
||||||
|
if (!contact) {
|
||||||
|
const wid = window.Store.WidFactory.createUserWid(contactId);
|
||||||
|
const chatConstructor = window.Store.Contact.getModelsArray().find(c=>!c.isGroup).constructor;
|
||||||
|
contact = new chatConstructor({id: wid});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (contact.commonGroups) {
|
||||||
|
return contact.commonGroups.serialize();
|
||||||
|
}
|
||||||
|
const status = await window.Store.findCommonGroups(contact);
|
||||||
|
if (status) {
|
||||||
|
return contact.commonGroups.serialize();
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}, contactId);
|
||||||
|
const chats = [];
|
||||||
|
for (const group of commonGroups) {
|
||||||
|
chats.push(group.id);
|
||||||
|
}
|
||||||
|
return chats;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Force reset of connection state for the client
|
* Force reset of connection state for the client
|
||||||
*/
|
*/
|
||||||
@@ -760,10 +1058,7 @@ class Client extends EventEmitter {
|
|||||||
* @returns {Promise&lt;Boolean>}
|
* @returns {Promise&lt;Boolean>}
|
||||||
*/
|
*/
|
||||||
async isRegisteredUser(id) {
|
async isRegisteredUser(id) {
|
||||||
return await this.pupPage.evaluate(async (id) => {
|
return Boolean(await this.getNumberId(id));
|
||||||
let result = await window.Store.Wap.queryExist(id);
|
|
||||||
return result.jid !== undefined;
|
|
||||||
}, id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -773,17 +1068,43 @@ class Client extends EventEmitter {
|
|||||||
* @returns {Promise&lt;Object|null>}
|
* @returns {Promise&lt;Object|null>}
|
||||||
*/
|
*/
|
||||||
async getNumberId(number) {
|
async getNumberId(number) {
|
||||||
if(!number.endsWith('@c.us')) {
|
if (!number.endsWith('@c.us')) {
|
||||||
number += '@c.us';
|
number += '@c.us';
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
return await this.pupPage.evaluate(async number => {
|
||||||
return await this.pupPage.evaluate(async numberId => {
|
const wid = window.Store.WidFactory.createWid(number);
|
||||||
return window.WWebJS.getNumberId(numberId);
|
const result = await window.Store.QueryExist(wid);
|
||||||
}, number);
|
if (!result || result.wid === undefined) return null;
|
||||||
} catch(_) {
|
return result.wid;
|
||||||
return null;
|
}, number);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the formatted number of a WhatsApp ID.
|
||||||
|
* @param {string} number Number or ID
|
||||||
|
* @returns {Promise&lt;string>}
|
||||||
|
*/
|
||||||
|
async getFormattedNumber(number) {
|
||||||
|
if (!number.endsWith('@s.whatsapp.net')) number = number.replace('c.us', 's.whatsapp.net');
|
||||||
|
if (!number.includes('@s.whatsapp.net')) number = `${number}@s.whatsapp.net`;
|
||||||
|
|
||||||
|
return await this.pupPage.evaluate(async numberId => {
|
||||||
|
return window.Store.NumberInfo.formattedPhoneNumber(numberId);
|
||||||
|
}, number);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the country code of a WhatsApp ID.
|
||||||
|
* @param {string} number Number or ID
|
||||||
|
* @returns {Promise&lt;string>}
|
||||||
|
*/
|
||||||
|
async getCountryCode(number) {
|
||||||
|
number = number.replace(' ', '').replace('+', '').replace('@c.us', '');
|
||||||
|
|
||||||
|
return await this.pupPage.evaluate(async numberId => {
|
||||||
|
return window.Store.NumberInfo.findCC(numberId);
|
||||||
|
}, number);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -804,23 +1125,18 @@ class Client extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const createRes = await this.pupPage.evaluate(async (name, participantIds) => {
|
const createRes = await this.pupPage.evaluate(async (name, participantIds) => {
|
||||||
const res = await window.Store.Wap.createGroup(name, participantIds);
|
const participantWIDs = participantIds.map(p => window.Store.WidFactory.createWid(p));
|
||||||
console.log(res);
|
return await window.Store.GroupUtils.createGroup(name, participantWIDs, 0);
|
||||||
if (!res.status === 200) {
|
|
||||||
throw 'An error occurred while creating the group!';
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}, name, participants);
|
}, name, participants);
|
||||||
|
|
||||||
const missingParticipants = createRes.participants.reduce(((missing, c) => {
|
const missingParticipants = createRes.participants.reduce(((missing, c) => {
|
||||||
const id = Object.keys(c)[0];
|
const id = c.wid._serialized;
|
||||||
const statusCode = c[id].code;
|
const statusCode = c.error ? c.error.toString() : '200';
|
||||||
if (statusCode != 200) return Object.assign(missing, { [id]: statusCode });
|
if (statusCode != 200) return Object.assign(missing, { [id]: statusCode });
|
||||||
return missing;
|
return missing;
|
||||||
}), {});
|
}), {});
|
||||||
|
|
||||||
return { gid: createRes.gid, missingParticipants };
|
return { gid: createRes.wid, missingParticipants };
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -832,7 +1148,7 @@ class Client extends EventEmitter {
|
|||||||
return window.WWebJS.getLabels();
|
return window.WWebJS.getLabels();
|
||||||
});
|
});
|
||||||
|
|
||||||
return labels.map(data => new Label(this , data));
|
return labels.map(data => new Label(this, data));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -853,7 +1169,7 @@ class Client extends EventEmitter {
|
|||||||
* @param {string} chatId
|
* @param {string} chatId
|
||||||
* @returns {Promise&lt;Array&lt;Label>>}
|
* @returns {Promise&lt;Array&lt;Label>>}
|
||||||
*/
|
*/
|
||||||
async getChatLabels(chatId){
|
async getChatLabels(chatId) {
|
||||||
const labels = await this.pupPage.evaluate(async (chatId) => {
|
const labels = await this.pupPage.evaluate(async (chatId) => {
|
||||||
return window.WWebJS.getChatLabels(chatId);
|
return window.WWebJS.getChatLabels(chatId);
|
||||||
}, chatId);
|
}, chatId);
|
||||||
@@ -866,20 +1182,33 @@ class Client extends EventEmitter {
|
|||||||
* @param {string} labelId
|
* @param {string} labelId
|
||||||
* @returns {Promise&lt;Array&lt;Chat>>}
|
* @returns {Promise&lt;Array&lt;Chat>>}
|
||||||
*/
|
*/
|
||||||
async getChatsByLabelId(labelId){
|
async getChatsByLabelId(labelId) {
|
||||||
const chatIds = await this.pupPage.evaluate(async (labelId) => {
|
const chatIds = await this.pupPage.evaluate(async (labelId) => {
|
||||||
const label = window.Store.Label.get(labelId);
|
const label = window.Store.Label.get(labelId);
|
||||||
const labelItems = label.labelItemCollection.models;
|
const labelItems = label.labelItemCollection.getModelsArray();
|
||||||
return labelItems.reduce((result, item) => {
|
return labelItems.reduce((result, item) => {
|
||||||
if(item.parentType === 'Chat'){
|
if (item.parentType === 'Chat') {
|
||||||
result.push(item.parentId);
|
result.push(item.parentId);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
},[]);
|
}, []);
|
||||||
}, labelId);
|
}, labelId);
|
||||||
|
|
||||||
return Promise.all(chatIds.map(id => this.getChatById(id)));
|
return Promise.all(chatIds.map(id => this.getChatById(id)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets all blocked contacts by host account
|
||||||
|
* @returns {Promise&lt;Array&lt;Contact>>}
|
||||||
|
*/
|
||||||
|
async getBlockedContacts() {
|
||||||
|
const blockedContacts = await this.pupPage.evaluate(() => {
|
||||||
|
let chatIds = window.Store.Blocklist.getModelsArray().map(a => a.id._serialized);
|
||||||
|
return Promise.all(chatIds.map(id => window.WWebJS.getContact(id)));
|
||||||
|
});
|
||||||
|
|
||||||
|
return blockedContacts.map(contact => ContactFactory.create(this.client, contact));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Client;
|
module.exports = Client;
|
||||||
@@ -893,7 +1222,7 @@ module.exports = Client;
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: ClientInfo</title>
|
<title>whatsapp-web.js 1.19.5 » Class: ClientInfo</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
</dl>
|
</dl>
|
||||||
<h3 id="phone"><span class="symbol-name">phone</span><small class="property-type">
|
<h3 id="phone"><span class="symbol-name">phone</span><small class="property-type">
|
||||||
object</small></h3>
|
object</small></h3>
|
||||||
<p>Information about the phone this client is connected to</p>
|
<p>Information about the phone this client is connected to. Not available in multi-device.</p>
|
||||||
<section>
|
<section>
|
||||||
<h4>Properties</h4>
|
<h4>Properties</h4>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
@@ -188,10 +188,12 @@
|
|||||||
</table>
|
</table>
|
||||||
</section>
|
</section>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
|
<dt>Deprecated</dt>
|
||||||
|
<dd></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<h3 id="platform"><span class="symbol-name">platform</span><small class="property-type">
|
<h3 id="platform"><span class="symbol-name">platform</span><small class="property-type">
|
||||||
string</small></h3>
|
string</small></h3>
|
||||||
<p>Platform the phone is running on</p>
|
<p>Platform WhatsApp is running on</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
<h3 id="pushname"><span class="symbol-name">pushname</span><small class="property-type">
|
<h3 id="pushname"><span class="symbol-name">pushname</span><small class="property-type">
|
||||||
@@ -211,6 +213,8 @@
|
|||||||
<h3 id="getBatteryStatus"><span class="symbol-name">getBatteryStatus</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> (object, number, or boolean)</span></span></h3>
|
<h3 id="getBatteryStatus"><span class="symbol-name">getBatteryStatus</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> (object, number, or boolean)</span></span></h3>
|
||||||
<p>Get current battery percentage and charging status for the attached device</p>
|
<p>Get current battery percentage and charging status for the attached device</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
|
<dt>Deprecated</dt>
|
||||||
|
<dd></dd>
|
||||||
<dt>Returns</dt>
|
<dt>Returns</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<p><code>object</code>
|
<p><code>object</code>
|
||||||
@@ -238,7 +242,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: Contact</title>
|
<title>whatsapp-web.js 1.19.5 » Class: Contact</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -101,20 +101,29 @@
|
|||||||
<dt><a href="Contact.html#getAbout">getAbout()</a></dt>
|
<dt><a href="Contact.html#getAbout">getAbout()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
<div class="summary-column">
|
|
||||||
<dl class="dl-summary-callout">
|
|
||||||
<dt><a href="Contact.html#getChat">getChat()</a></dt>
|
<dt><a href="Contact.html#getChat">getChat()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="Contact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Contact.html#getCommonGroups">getCommonGroups()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Contact.html#getCountryCode">getCountryCode()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Contact.html#getFormattedNumber">getFormattedNumber()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Contact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Contact.html#unblock">unblock()</a></dt>
|
<dt><a href="Contact.html#unblock">unblock()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -230,6 +239,33 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getCommonGroups"><span class="symbol-name">getCommonGroups</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing Array of WAWebJS.ChatId</span></span></h3>
|
||||||
|
<p>Gets the Contact's common groups with you. Returns empty array if you don't have any common group.</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise containing Array of WAWebJS.ChatId</code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getCountryCode"><span class="symbol-name">getCountryCode</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
|
<p>Returns the contact's countrycode, (1541859685@c.us) => (1)</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise containing string</code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getFormattedNumber"><span class="symbol-name">getFormattedNumber</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
|
<p>Returns the contact's formatted phone number, (12345678901@c.us) => (+1 (234) 5678-901)</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise containing string</code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="getProfilePicUrl"><span class="symbol-name">getProfilePicUrl</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
<h3 id="getProfilePicUrl"><span class="symbol-name">getProfilePicUrl</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
@@ -257,7 +293,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: GroupChat</title>
|
<title>whatsapp-web.js 1.19.5 » Class: GroupChat</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -436,7 +436,7 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Options for searching messages. Right now only limit is supported.</p>
|
<p>Options for searching messages. Right now only limit and fromMe is supported.</p>
|
||||||
<p>Values in <code>searchOptions</code> have the following properties:</p>
|
<p>Values in <code>searchOptions</code> have the following properties:</p>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -459,8 +459,21 @@
|
|||||||
<p>Yes</p>
|
<p>Yes</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>The amount of messages to return. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.</p>
|
<p>The amount of messages to return. If no limit is specified, the available messages will be returned. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.</p>
|
||||||
<p>Defaults to <code>50</code>.</p>
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>fromMe</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Return only messages from the bot number or vise versa. To get all messages, leave the option undefined.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -523,7 +536,7 @@
|
|||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="mute"><span class="symbol-name">mute</span><span class="signature"><span class="signature-params">(unmuteDate)</span></span></h3>
|
<h3 id="mute"><span class="symbol-name">mute</span><span class="signature"><span class="signature-params">(unmuteDate)</span></span></h3>
|
||||||
<p>Mutes this chat until a specified date</p>
|
<p>Mutes this chat forever, unless a date is specified</p>
|
||||||
<section>
|
<section>
|
||||||
<h4>Parameter</h4>
|
<h4>Parameter</h4>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
@@ -547,7 +560,8 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Date at which the Chat will be unmuted</p>
|
<p>Date at which the Chat will be unmuted, leave as is to mute forever</p>
|
||||||
|
<p>Value can be null.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -645,12 +659,14 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="revokeInvite"><span class="symbol-name">revokeInvite</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise</span></span></h3>
|
<h3 id="revokeInvite"><span class="symbol-name">revokeInvite</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
<p>Invalidates the current group invite code and generates a new one</p>
|
<p>Invalidates the current group invite code and generates a new one</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
<dt>Returns</dt>
|
<dt>Returns</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<p><code>Promise</code> </p>
|
<p><code>Promise containing string</code>
|
||||||
|
<p>New invite code</p>
|
||||||
|
</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
@@ -731,7 +747,7 @@
|
|||||||
<dd><a href="Chat.html#sendStateTyping">Chat#sendStateTyping</a></dd>
|
<dd><a href="Chat.html#sendStateTyping">Chat#sendStateTyping</a></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="setDescription"><span class="symbol-name">setDescription</span><span class="signature"><span class="signature-params">(description)</span> → <span class="signature-returns"> Promise</span></span></h3>
|
<h3 id="setDescription"><span class="symbol-name">setDescription</span><span class="signature"><span class="signature-params">(description)</span> → <span class="signature-returns"> Promise containing boolean</span></span></h3>
|
||||||
<p>Updates the group description</p>
|
<p>Updates the group description</p>
|
||||||
<section>
|
<section>
|
||||||
<h4>Parameter</h4>
|
<h4>Parameter</h4>
|
||||||
@@ -764,7 +780,9 @@
|
|||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
<dt>Returns</dt>
|
<dt>Returns</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<p><code>Promise</code> </p>
|
<p><code>Promise containing boolean</code>
|
||||||
|
<p>Returns true if the description was properly updated. This can return false if the user does not have the necessary permissions.</p>
|
||||||
|
</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
@@ -850,7 +868,7 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="setSubject"><span class="symbol-name">setSubject</span><span class="signature"><span class="signature-params">(subject)</span> → <span class="signature-returns"> Promise</span></span></h3>
|
<h3 id="setSubject"><span class="symbol-name">setSubject</span><span class="signature"><span class="signature-params">(subject)</span> → <span class="signature-returns"> Promise containing boolean</span></span></h3>
|
||||||
<p>Updates the group subject</p>
|
<p>Updates the group subject</p>
|
||||||
<section>
|
<section>
|
||||||
<h4>Parameter</h4>
|
<h4>Parameter</h4>
|
||||||
@@ -883,7 +901,9 @@
|
|||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
<dt>Returns</dt>
|
<dt>Returns</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<p><code>Promise</code> </p>
|
<p><code>Promise containing boolean</code>
|
||||||
|
<p>Returns true if the subject was properly updated. This can return false if the user does not have the necessary permissions.</p>
|
||||||
|
</p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
@@ -921,7 +941,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: GroupNotification</title>
|
<title>whatsapp-web.js 1.19.5 » Class: GroupNotification</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -233,7 +233,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: InterfaceController</title>
|
<title>whatsapp-web.js 1.19.5 » Class: InterfaceController</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -39,16 +39,28 @@
|
|||||||
<div class="summary-content">
|
<div class="summary-content">
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="InterfaceController.html#checkFeatureStatus">checkFeatureStatus(feature)</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="InterfaceController.html#closeRightDrawer">closeRightDrawer()</a></dt>
|
<dt><a href="InterfaceController.html#closeRightDrawer">closeRightDrawer()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="InterfaceController.html#openChatDrawer">openChatDrawer(chatId)</a></dt>
|
<dt><a href="InterfaceController.html#disableFeatures">disableFeatures(features)</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="InterfaceController.html#enableFeatures">enableFeatures(features)</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="InterfaceController.html#getFeatures">getFeatures()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="InterfaceController.html#openChatDrawer">openChatDrawer(chatId)</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="InterfaceController.html#openChatSearch">openChatSearch(chatId)</a></dt>
|
<dt><a href="InterfaceController.html#openChatSearch">openChatSearch(chatId)</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -78,12 +90,119 @@
|
|||||||
<section>
|
<section>
|
||||||
<h2>Methods</h2>
|
<h2>Methods</h2>
|
||||||
<section>
|
<section>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="checkFeatureStatus"><span class="symbol-name">checkFeatureStatus</span><span class="signature"><span class="signature-params">(feature)</span></span></h3>
|
||||||
|
<p>Check if Feature is enabled</p>
|
||||||
|
<section>
|
||||||
|
<h4>Parameter</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>feature</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>status to check</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="closeRightDrawer"><span class="symbol-name">closeRightDrawer</span><span class="signature"><span class="signature-params">()</span></span></h3>
|
<h3 id="closeRightDrawer"><span class="symbol-name">closeRightDrawer</span><span class="signature"><span class="signature-params">()</span></span></h3>
|
||||||
<p>Closes the Right Drawer</p>
|
<p>Closes the Right Drawer</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="disableFeatures"><span class="symbol-name">disableFeatures</span><span class="signature"><span class="signature-params">(features)</span></span></h3>
|
||||||
|
<p>Disable Features</p>
|
||||||
|
<section>
|
||||||
|
<h4>Parameter</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>features</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Array of string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>to be disabled</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="enableFeatures"><span class="symbol-name">enableFeatures</span><span class="signature"><span class="signature-params">(features)</span></span></h3>
|
||||||
|
<p>Enable Features</p>
|
||||||
|
<section>
|
||||||
|
<h4>Parameter</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>features</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Array of string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>to be enabled</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getFeatures"><span class="symbol-name">getFeatures</span><span class="signature"><span class="signature-params">()</span></span></h3>
|
||||||
|
<p>Get all Features</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="openChatDrawer"><span class="symbol-name">openChatDrawer</span><span class="signature"><span class="signature-params">(chatId)</span></span></h3>
|
<h3 id="openChatDrawer"><span class="symbol-name">openChatDrawer</span><span class="signature"><span class="signature-params">(chatId)</span></span></h3>
|
||||||
<p>Opens the Chat Drawer</p>
|
<p>Opens the Chat Drawer</p>
|
||||||
<section>
|
<section>
|
||||||
@@ -263,7 +382,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: Label</title>
|
<title>whatsapp-web.js 1.19.5 » Class: Label</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -163,7 +163,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
188
docs/LegacySessionAuth.html
Normal file
188
docs/LegacySessionAuth.html
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: LegacySessionAuth</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">LegacySessionAuth</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="authStrategies_LegacySessionAuth.js.html#source-line-16">authStrategies/<wbr>LegacySessionAuth.<wbr>js:16</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Legacy session auth strategy
|
||||||
|
Not compatible with multi-device accounts.</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="LegacySessionAuth">new <span class="symbol-name">LegacySessionAuth</span><span class="signature"><span class="signature-params">(options)</span></span></h2>
|
||||||
|
<section>
|
||||||
|
<h3>Parameters</h3>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>options</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>options</p>
|
||||||
|
<p>Values in <code>options</code> have the following properties:</p>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>restartOnAuthFail</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Restart client with a new session (i.e. use null 'session' var) if authentication fails</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>session</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Whatsapp session to restore. If not set, will start a new session</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>session.WABrowserId</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>session.WASecretBundle</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>session.WAToken1</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>session.WAToken2</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
271
docs/List.html
Normal file
271
docs/List.html
Normal file
@@ -0,0 +1,271 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: List</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">List</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="structures_List.js.html#source-line-8">structures/<wbr>List.<wbr>js:8</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Message type List</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Properties</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="List.html#buttonText">buttonText</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="List.html#description">description</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="List.html#footer">footer</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="List.html#sections">sections</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="List.html#title">title</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Method</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="List.html#_format">_format(sections)</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="List">new <span class="symbol-name">List</span><span class="signature"><span class="signature-params">(body, buttonText, sections, title, footer)</span></span></h2>
|
||||||
|
<section>
|
||||||
|
<h3>Parameters</h3>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>body</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>buttonText</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>sections</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>title</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Value can be null.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>footer</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Value can be null.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Properties</h2>
|
||||||
|
<section>
|
||||||
|
<h3 id="buttonText"><span class="symbol-name">buttonText</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>List button text</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="description"><span class="symbol-name">description</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Message body</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="footer"><span class="symbol-name">footer</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>footer of message</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="sections"><span class="symbol-name">sections</span><small class="property-type">
|
||||||
|
Array of any</small></h3>
|
||||||
|
<p>sections of message</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="title"><span class="symbol-name">title</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>title of message</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<h2>Method</h2>
|
||||||
|
<section>
|
||||||
|
<h3 id="_format"><span class="symbol-name">_format</span><span class="signature"><span class="signature-params">(sections)</span> → <span class="signature-returns"> Array of any</span></span></h3>
|
||||||
|
<p>Creates section array from simple array</p>
|
||||||
|
<section>
|
||||||
|
<h4>
|
||||||
|
Example
|
||||||
|
</h4>
|
||||||
|
<div>
|
||||||
|
<pre class="prettyprint"><code>Input: [{title:'sectionTitle',rows:[{id:'customId', title:'ListItem2', description: 'desc'},{title:'ListItem2'}]}}]
|
||||||
|
Returns: [{'title':'sectionTitle','rows':[{'rowId':'customId','title':'ListItem1','description':'desc'},{'rowId':'oGSRoD','title':'ListItem2','description':''}]}]</code></pre>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h4>Parameter</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>sections</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Array of any</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Array of any</code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
135
docs/LocalAuth.html
Normal file
135
docs/LocalAuth.html
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: LocalAuth</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">LocalAuth</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="authStrategies_LocalAuth.js.html#source-line-13">authStrategies/<wbr>LocalAuth.<wbr>js:13</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Local directory-based authentication</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="LocalAuth">new <span class="symbol-name">LocalAuth</span><span class="signature"><span class="signature-params">(options)</span></span></h2>
|
||||||
|
<section>
|
||||||
|
<h3>Parameters</h3>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>options</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>options</p>
|
||||||
|
<p>Values in <code>options</code> have the following properties:</p>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>clientId</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>dataPath</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Change the default path for saving session files, default is: "./.wwebjs_auth/"</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: Location</title>
|
<title>whatsapp-web.js 1.19.5 » Class: Location</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -149,7 +149,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: Message</title>
|
<title>whatsapp-web.js 1.19.5 » Class: Message</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<header class="page-header">
|
<header class="page-header">
|
||||||
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
<h1><small></small><span class="symbol-name">Message</span></h1>
|
<h1><small></small><span class="symbol-name">Message</span></h1>
|
||||||
<p class="source-link">Source: <a href="structures_Message.js.html#source-line-12">structures/<wbr>Message.<wbr>js:12</a></p>
|
<p class="source-link">Source: <a href="structures_Message.js.html#source-line-14">structures/<wbr>Message.<wbr>js:14</a></p>
|
||||||
<div class="symbol-classdesc">
|
<div class="symbol-classdesc">
|
||||||
<p>Represents a Message on WhatsApp</p>
|
<p>Represents a Message on WhatsApp</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -51,6 +51,15 @@
|
|||||||
<dt><a href="Message.html#broadcast">broadcast</a></dt>
|
<dt><a href="Message.html#broadcast">broadcast</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="Message.html#deviceType">deviceType</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Message.html#duration">duration</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Message.html#forwardingScore">forwardingScore</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Message.html#from">from</a></dt>
|
<dt><a href="Message.html#from">from</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -70,9 +79,18 @@
|
|||||||
<dt><a href="Message.html#id">id</a></dt>
|
<dt><a href="Message.html#id">id</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="Message.html#inviteV4">inviteV4</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Message.html#isEphemeral">isEphemeral</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Message.html#isForwarded">isForwarded</a></dt>
|
<dt><a href="Message.html#isForwarded">isForwarded</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="Message.html#isGif">isGif</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Message.html#isStarred">isStarred</a></dt>
|
<dt><a href="Message.html#isStarred">isStarred</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -95,12 +113,21 @@
|
|||||||
<dt><a href="Message.html#mentionedIds">mentionedIds</a></dt>
|
<dt><a href="Message.html#mentionedIds">mentionedIds</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="Message.html#orderId">orderId</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Message.html#rawData">rawData</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Message.html#timestamp">timestamp</a></dt>
|
<dt><a href="Message.html#timestamp">timestamp</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="Message.html#to">to</a></dt>
|
<dt><a href="Message.html#to">to</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="Message.html#token">token</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Message.html#type">type</a></dt>
|
<dt><a href="Message.html#type">type</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -116,6 +143,9 @@
|
|||||||
<div class="summary-content">
|
<div class="summary-content">
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Message.html#acceptGroupV4Invite">acceptGroupV4Invite()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Message.html#delete">delete(everyone)</a></dt>
|
<dt><a href="Message.html#delete">delete(everyone)</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -128,26 +158,38 @@
|
|||||||
<dt><a href="Message.html#getChat">getChat()</a></dt>
|
<dt><a href="Message.html#getChat">getChat()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="Message.html#getContact">getContact()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
<dt><a href="Message.html#getContact">getContact()</a></dt>
|
|
||||||
<dd>
|
|
||||||
</dd>
|
|
||||||
<dt><a href="Message.html#getInfo">getInfo()</a></dt>
|
<dt><a href="Message.html#getInfo">getInfo()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="Message.html#getMentions">getMentions()</a></dt>
|
<dt><a href="Message.html#getMentions">getMentions()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="Message.html#getOrder">getOrder()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Message.html#getPayment">getPayment()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Message.html#getQuotedMessage">getQuotedMessage()</a></dt>
|
<dt><a href="Message.html#getQuotedMessage">getQuotedMessage()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
|
<dt><a href="Message.html#react">react(reaction)</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Message.html#reload">reload()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="Message.html#reply">reply(content[, chatId][, options])</a></dt>
|
<dt><a href="Message.html#reply">reply(content[, chatId][, options])</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -192,6 +234,22 @@
|
|||||||
<p>Indicates if the message was a broadcast</p>
|
<p>Indicates if the message was a broadcast</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
|
<h3 id="deviceType"><span class="symbol-name">deviceType</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>String that represents from which device type the message was sent</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="duration"><span class="symbol-name">duration</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Indicates the duration of the message in seconds</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="forwardingScore"><span class="symbol-name">forwardingScore</span><small class="property-type">
|
||||||
|
number</small></h3>
|
||||||
|
<p>Indicates how many times the message was forwarded.</p>
|
||||||
|
<p>The maximum value is 127.</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
<h3 id="from"><span class="symbol-name">from</span><small class="property-type">
|
<h3 id="from"><span class="symbol-name">from</span><small class="property-type">
|
||||||
string</small></h3>
|
string</small></h3>
|
||||||
<p>ID for the Chat that this message was sent to, except if the message was sent by the current user.</p>
|
<p>ID for the Chat that this message was sent to, except if the message was sent by the current user.</p>
|
||||||
@@ -217,11 +275,26 @@
|
|||||||
<p>ID that represents the message</p>
|
<p>ID that represents the message</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
|
<h3 id="inviteV4"><span class="symbol-name">inviteV4</span><small class="property-type">
|
||||||
|
object</small></h3>
|
||||||
|
<p>Group Invite Data</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="isEphemeral"><span class="symbol-name">isEphemeral</span><small class="property-type">
|
||||||
|
boolean</small></h3>
|
||||||
|
<p>Indicates if the message will disappear after it expires</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
<h3 id="isForwarded"><span class="symbol-name">isForwarded</span><small class="property-type">
|
<h3 id="isForwarded"><span class="symbol-name">isForwarded</span><small class="property-type">
|
||||||
boolean</small></h3>
|
boolean</small></h3>
|
||||||
<p>Indicates if the message was forwarded</p>
|
<p>Indicates if the message was forwarded</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
|
<h3 id="isGif"><span class="symbol-name">isGif</span><small class="property-type">
|
||||||
|
boolean</small></h3>
|
||||||
|
<p>Indicates whether the message is a Gif</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
<h3 id="isStarred"><span class="symbol-name">isStarred</span><small class="property-type">
|
<h3 id="isStarred"><span class="symbol-name">isStarred</span><small class="property-type">
|
||||||
boolean</small></h3>
|
boolean</small></h3>
|
||||||
<p>Indicates if the message was starred</p>
|
<p>Indicates if the message was starred</p>
|
||||||
@@ -233,7 +306,7 @@
|
|||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
<h3 id="links"><span class="symbol-name">links</span><small class="property-type">
|
<h3 id="links"><span class="symbol-name">links</span><small class="property-type">
|
||||||
Array of string</small></h3>
|
Array of {link: string, isSuspicious: boolean}</small></h3>
|
||||||
<p>Links included in the message.</p>
|
<p>Links included in the message.</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
@@ -252,6 +325,16 @@
|
|||||||
<p>Indicates the mentions in the message body.</p>
|
<p>Indicates the mentions in the message body.</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
|
<h3 id="orderId"><span class="symbol-name">orderId</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Order ID for message type ORDER</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="rawData"><span class="symbol-name">rawData</span><small class="property-type">
|
||||||
|
Object</small></h3>
|
||||||
|
<p>Returns message in a raw format</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
<h3 id="timestamp"><span class="symbol-name">timestamp</span><small class="property-type">
|
<h3 id="timestamp"><span class="symbol-name">timestamp</span><small class="property-type">
|
||||||
number</small></h3>
|
number</small></h3>
|
||||||
<p>Unix timestamp for when the message was created</p>
|
<p>Unix timestamp for when the message was created</p>
|
||||||
@@ -264,6 +347,11 @@
|
|||||||
If the message is sent by another user, it will be the ID for the current user.</p>
|
If the message is sent by another user, it will be the ID for the current user.</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
|
<h3 id="token"><span class="symbol-name">token</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Order Token for message type ORDER</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
<h3 id="type"><span class="symbol-name">type</span><small class="property-type">
|
<h3 id="type"><span class="symbol-name">type</span><small class="property-type">
|
||||||
<a href="global.html#MessageTypes">MessageTypes</a></small></h3>
|
<a href="global.html#MessageTypes">MessageTypes</a></small></h3>
|
||||||
<p>Message type</p>
|
<p>Message type</p>
|
||||||
@@ -277,6 +365,15 @@
|
|||||||
</section>
|
</section>
|
||||||
<h2>Methods</h2>
|
<h2>Methods</h2>
|
||||||
<section>
|
<section>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="acceptGroupV4Invite"><span class="symbol-name">acceptGroupV4Invite</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing Object</span></span></h3>
|
||||||
|
<p>Accept Group V4 Invite</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise containing Object</code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="delete"><span class="symbol-name">delete</span><span class="signature"><span class="signature-params">(everyone)</span></span></h3>
|
<h3 id="delete"><span class="symbol-name">delete</span><span class="signature"><span class="signature-params">(everyone)</span></span></h3>
|
||||||
<p>Deletes a message from the chat</p>
|
<p>Deletes a message from the chat</p>
|
||||||
@@ -303,7 +400,7 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>If true and the message is sent by the current user, will delete it for everyone in the chat.</p>
|
<p>If true and the message is sent by the current user or the user is an admin, will delete it for everyone in the chat.</p>
|
||||||
<p>Value can be null.</p>
|
<p>Value can be null.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -323,7 +420,7 @@
|
|||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="forward"><span class="symbol-name">forward</span><span class="signature"><span class="signature-params">(chat)</span> → <span class="signature-returns"> Promise</span></span></h3>
|
<h3 id="forward"><span class="symbol-name">forward</span><span class="signature"><span class="signature-params">(chat)</span> → <span class="signature-returns"> Promise</span></span></h3>
|
||||||
<p>Forwards this message to another chat</p>
|
<p>Forwards this message to another chat (that you chatted before, otherwise it will fail)</p>
|
||||||
<section>
|
<section>
|
||||||
<h4>Parameter</h4>
|
<h4>Parameter</h4>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
@@ -394,6 +491,24 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getOrder"><span class="symbol-name">getOrder</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing <a href="Order.html">Order</a></span></span></h3>
|
||||||
|
<p>Gets the order associated with a given message</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise containing <a href="Order.html">Order</a></code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getPayment"><span class="symbol-name">getPayment</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing <a href="Payment.html">Payment</a></span></span></h3>
|
||||||
|
<p>Gets the payment details associated with a given message</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise containing <a href="Payment.html">Payment</a></code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="getQuotedMessage"><span class="symbol-name">getQuotedMessage</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing <a href="Message.html">Message</a></span></span></h3>
|
<h3 id="getQuotedMessage"><span class="symbol-name">getQuotedMessage</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing <a href="Message.html">Message</a></span></span></h3>
|
||||||
<p>Returns the quoted message, if any</p>
|
<p>Returns the quoted message, if any</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
@@ -403,6 +518,54 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="react"><span class="symbol-name">react</span><span class="signature"><span class="signature-params">(reaction)</span> → <span class="signature-returns"> Promise</span></span></h3>
|
||||||
|
<p>React to this message with an emoji</p>
|
||||||
|
<section>
|
||||||
|
<h4>Parameter</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>reaction</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Emoji to react with. Send an empty string to remove the reaction.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise</code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="reload"><span class="symbol-name">reload</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing <a href="Message.html">Message</a></span></span></h3>
|
||||||
|
<p>Reloads this Message object's data in-place with the latest values from WhatsApp Web.
|
||||||
|
Note that the Message must still be in the web app cache for this to work, otherwise will return null.</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise containing <a href="Message.html">Message</a></code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="reply"><span class="symbol-name">reply</span><span class="signature"><span class="signature-params">(content[, chatId][, options])</span> → <span class="signature-returns"> Promise containing <a href="Message.html">Message</a></span></span></h3>
|
<h3 id="reply"><span class="symbol-name">reply</span><span class="signature"><span class="signature-params">(content[, chatId][, options])</span> → <span class="signature-returns"> Promise containing <a href="Message.html">Message</a></span></span></h3>
|
||||||
<p>Sends a message as a reply to this message. If chatId is specified, it will be sent
|
<p>Sends a message as a reply to this message. If chatId is specified, it will be sent
|
||||||
through the specified Chat. If not, it will send the message
|
through the specified Chat. If not, it will send the message
|
||||||
@@ -487,7 +650,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: MessageMedia</title>
|
<title>whatsapp-web.js 1.19.5 » Class: MessageMedia</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<header class="page-header">
|
<header class="page-header">
|
||||||
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
<h1><small></small><span class="symbol-name">MessageMedia</span></h1>
|
<h1><small></small><span class="symbol-name">MessageMedia</span></h1>
|
||||||
<p class="source-link">Source: <a href="structures_MessageMedia.js.html#source-line-13">structures/<wbr>MessageMedia.<wbr>js:13</a></p>
|
<p class="source-link">Source: <a href="structures_MessageMedia.js.html#source-line-16">structures/<wbr>MessageMedia.<wbr>js:16</a></p>
|
||||||
<div class="symbol-classdesc">
|
<div class="symbol-classdesc">
|
||||||
<p>Media attached to a message</p>
|
<p>Media attached to a message</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -42,10 +42,6 @@
|
|||||||
<dt><a href="MessageMedia.html#data">data</a></dt>
|
<dt><a href="MessageMedia.html#data">data</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
<div class="summary-column">
|
|
||||||
<dl class="dl-summary-callout">
|
|
||||||
<dt><a href="MessageMedia.html#filename">filename</a></dt>
|
<dt><a href="MessageMedia.html#filename">filename</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -53,15 +49,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="MessageMedia.html#filesize">filesize</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="MessageMedia.html#mimetype">mimetype</a></dt>
|
<dt><a href="MessageMedia.html#mimetype">mimetype</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-callout">
|
<div class="summary-callout">
|
||||||
<h2 class="summary-callout-heading">Method</h2>
|
<h2 class="summary-callout-heading">Methods</h2>
|
||||||
<div class="summary-content">
|
<div class="summary-content">
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
@@ -71,6 +72,11 @@
|
|||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="MessageMedia.html#.fromUrl">fromUrl(url[, options])</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
</div>
|
</div>
|
||||||
@@ -78,7 +84,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2 id="MessageMedia">new <span class="symbol-name">MessageMedia</span><span class="signature"><span class="signature-params">(mimetype, data, filename)</span></span></h2>
|
<h2 id="MessageMedia">new <span class="symbol-name">MessageMedia</span><span class="signature"><span class="signature-params">(mimetype, data, filename, filesize)</span></span></h2>
|
||||||
<section>
|
<section>
|
||||||
<h3>Parameters</h3>
|
<h3>Parameters</h3>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
@@ -130,7 +136,22 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Document file name</p>
|
<p>Document file name. Value can be null</p>
|
||||||
|
<p>Value can be null.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>filesize</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Document file size in bytes. Value can be null</p>
|
||||||
<p>Value can be null.</p>
|
<p>Value can be null.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -150,7 +171,12 @@
|
|||||||
</dl>
|
</dl>
|
||||||
<h3 id="filename"><span class="symbol-name">filename</span><small class="property-type">
|
<h3 id="filename"><span class="symbol-name">filename</span><small class="property-type">
|
||||||
nullable string</small></h3>
|
nullable string</small></h3>
|
||||||
<p>Name of the file (for documents)</p>
|
<p>Document file name. Value can be null</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="filesize"><span class="symbol-name">filesize</span><small class="property-type">
|
||||||
|
nullable number</small></h3>
|
||||||
|
<p>Document file size in bytes. Value can be null</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
<h3 id="mimetype"><span class="symbol-name">mimetype</span><small class="property-type">
|
<h3 id="mimetype"><span class="symbol-name">mimetype</span><small class="property-type">
|
||||||
@@ -159,7 +185,7 @@
|
|||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
</section>
|
</section>
|
||||||
<h2>Method</h2>
|
<h2>Methods</h2>
|
||||||
<section>
|
<section>
|
||||||
<div class="symbol-detail-labels"><span class="label label-static">static</span></div>
|
<div class="symbol-detail-labels"><span class="label label-static">static</span></div>
|
||||||
<h3 id=".fromFilePath"><span class="symbol-name">fromFilePath</span><span class="signature"><span class="signature-params">(filePath)</span> → <span class="signature-returns"> <a href="MessageMedia.html">MessageMedia</a></span></span></h3>
|
<h3 id=".fromFilePath"><span class="symbol-name">fromFilePath</span><span class="signature"><span class="signature-params">(filePath)</span> → <span class="signature-returns"> <a href="MessageMedia.html">MessageMedia</a></span></span></h3>
|
||||||
@@ -198,6 +224,136 @@
|
|||||||
<p><code><a href="MessageMedia.html">MessageMedia</a></code> </p>
|
<p><code><a href="MessageMedia.html">MessageMedia</a></code> </p>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span> <span class="label label-static">static</span></div>
|
||||||
|
<h3 id=".fromUrl"><span class="symbol-name">fromUrl</span><span class="signature"><span class="signature-params">(url[, options])</span> → <span class="signature-returns"> Promise containing <a href="MessageMedia.html">MessageMedia</a></span></span></h3>
|
||||||
|
<p>Creates a MessageMedia instance from a URL</p>
|
||||||
|
<section>
|
||||||
|
<h4>Parameters</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>url</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>options</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Object</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Values in <code>options</code> have the following properties:</p>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>unsafeMime</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>boolean</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Defaults to <code>false</code>.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>filename</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>client</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>object</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>reqOptions</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>object</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>reqOptions.size</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>number</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Defaults to <code>0</code>.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd>
|
||||||
|
<p><code>Promise containing <a href="MessageMedia.html">MessageMedia</a></code> </p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@@ -208,7 +364,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
66
docs/NoAuth.html
Normal file
66
docs/NoAuth.html
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: NoAuth</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">NoAuth</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="authStrategies_NoAuth.js.html#source-line-9">authStrategies/<wbr>NoAuth.<wbr>js:9</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>No session restoring functionality
|
||||||
|
Will need to authenticate via QR code every time</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="NoAuth">new <span class="symbol-name">NoAuth</span><span class="signature"><span class="signature-params">()</span></span></h2>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
117
docs/Order.html
Normal file
117
docs/Order.html
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: Order</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">Order</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="structures_Order.js.html#source-line-10">structures/<wbr>Order.<wbr>js:10</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Represents a Order on WhatsApp</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Properties</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Order.html#createdAt">createdAt</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Order.html#currency">currency</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Order.html#subtotal">subtotal</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Order.html#total">total</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="Order">new <span class="symbol-name">Order</span><span class="signature"><span class="signature-params">()</span></span></h2>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Extends</dt>
|
||||||
|
<dd><a href="Base.html">Base</a></dd>
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Properties</h2>
|
||||||
|
<section>
|
||||||
|
<h3 id="createdAt"><span class="symbol-name">createdAt</span><small class="property-type">
|
||||||
|
number</small></h3>
|
||||||
|
<p>Order Created At</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="currency"><span class="symbol-name">currency</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Order Currency</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="subtotal"><span class="symbol-name">subtotal</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Order Subtotal</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="total"><span class="symbol-name">total</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Order Total</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: PrivateChat</title>
|
<title>whatsapp-web.js 1.19.5 » Class: PrivateChat</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -295,7 +295,7 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Options for searching messages. Right now only limit is supported.</p>
|
<p>Options for searching messages. Right now only limit and fromMe is supported.</p>
|
||||||
<p>Values in <code>searchOptions</code> have the following properties:</p>
|
<p>Values in <code>searchOptions</code> have the following properties:</p>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
<thead>
|
<thead>
|
||||||
@@ -318,8 +318,21 @@
|
|||||||
<p>Yes</p>
|
<p>Yes</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>The amount of messages to return. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.</p>
|
<p>The amount of messages to return. If no limit is specified, the available messages will be returned. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.</p>
|
||||||
<p>Defaults to <code>50</code>.</p>
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>fromMe</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Return only messages from the bot number or vise versa. To get all messages, leave the option undefined.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -362,7 +375,7 @@
|
|||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="mute"><span class="symbol-name">mute</span><span class="signature"><span class="signature-params">(unmuteDate)</span></span></h3>
|
<h3 id="mute"><span class="symbol-name">mute</span><span class="signature"><span class="signature-params">(unmuteDate)</span></span></h3>
|
||||||
<p>Mutes this chat until a specified date</p>
|
<p>Mutes this chat forever, unless a date is specified</p>
|
||||||
<section>
|
<section>
|
||||||
<h4>Parameter</h4>
|
<h4>Parameter</h4>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
@@ -386,7 +399,8 @@
|
|||||||
<p> </p>
|
<p> </p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Date at which the Chat will be unmuted</p>
|
<p>Date at which the Chat will be unmuted, leave as is to mute forever</p>
|
||||||
|
<p>Value can be null.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -519,7 +533,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: PrivateContact</title>
|
<title>whatsapp-web.js 1.19.5 » Class: PrivateContact</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -101,20 +101,29 @@
|
|||||||
<dt><a href="PrivateContact.html#getAbout">getAbout()</a></dt>
|
<dt><a href="PrivateContact.html#getAbout">getAbout()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
|
||||||
</div>
|
|
||||||
<div class="summary-column">
|
|
||||||
<dl class="dl-summary-callout">
|
|
||||||
<dt><a href="PrivateContact.html#getChat">getChat()</a></dt>
|
<dt><a href="PrivateContact.html#getChat">getChat()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="PrivateContact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="PrivateContact.html#getCommonGroups">getCommonGroups()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="PrivateContact.html#getCountryCode">getCountryCode()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="PrivateContact.html#getFormattedNumber">getFormattedNumber()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="PrivateContact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="PrivateContact.html#unblock">unblock()</a></dt>
|
<dt><a href="PrivateContact.html#unblock">unblock()</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -256,6 +265,33 @@
|
|||||||
<dd></dd>
|
<dd></dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getCommonGroups"><span class="symbol-name">getCommonGroups</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing Array of WAWebJS.ChatId</span></span></h3>
|
||||||
|
<p>Gets the Contact's common groups with you. Returns empty array if you don't have any common group.</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Inherited from</dt>
|
||||||
|
<dd><a href="Contact.html#getCommonGroups">Contact#getCommonGroups</a></dd>
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd></dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getCountryCode"><span class="symbol-name">getCountryCode</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
|
<p>Returns the contact's countrycode, (1541859685@c.us) => (1)</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Inherited from</dt>
|
||||||
|
<dd><a href="Contact.html#getCountryCode">Contact#getCountryCode</a></dd>
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd></dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
|
<h3 id="getFormattedNumber"><span class="symbol-name">getFormattedNumber</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
|
<p>Returns the contact's formatted phone number, (12345678901@c.us) => (+1 (234) 5678-901)</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Inherited from</dt>
|
||||||
|
<dd><a href="Contact.html#getFormattedNumber">Contact#getFormattedNumber</a></dd>
|
||||||
|
<dt>Returns</dt>
|
||||||
|
<dd></dd>
|
||||||
|
</dl>
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||||
<h3 id="getProfilePicUrl"><span class="symbol-name">getProfilePicUrl</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
<h3 id="getProfilePicUrl"><span class="symbol-name">getProfilePicUrl</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||||
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
@@ -283,7 +319,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
142
docs/Product.html
Normal file
142
docs/Product.html
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: Product</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">Product</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="structures_Product.js.html#source-line-10">structures/<wbr>Product.<wbr>js:10</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Represents a Product on WhatsAppBusiness</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Properties</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Product.html#currency">currency</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Product.html#data">data</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Product.html#id">id</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Product.html#name">name</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Product.html#price">price</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Product.html#quantity">quantity</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Product.html#thumbnailUrl">thumbnailUrl</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="Product">new <span class="symbol-name">Product</span><span class="signature"><span class="signature-params">()</span></span></h2>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Extends</dt>
|
||||||
|
<dd><a href="Base.html">Base</a></dd>
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Properties</h2>
|
||||||
|
<section>
|
||||||
|
<h3 id="currency"><span class="symbol-name">currency</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Currency</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="data"><span class="symbol-name">data</span></h3>
|
||||||
|
<p>Product metadata</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="id"><span class="symbol-name">id</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Product ID</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="name"><span class="symbol-name">name</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Product Name</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="price"><span class="symbol-name">price</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Price</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="quantity"><span class="symbol-name">quantity</span><small class="property-type">
|
||||||
|
number</small></h3>
|
||||||
|
<p>Product Quantity</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="thumbnailUrl"><span class="symbol-name">thumbnailUrl</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Product Thumbnail</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
159
docs/Reaction.html
Normal file
159
docs/Reaction.html
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: Reaction</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">Reaction</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="structures_Reaction.js.html#source-line-9">structures/<wbr>Reaction.<wbr>js:9</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Represents a Reaction on WhatsApp</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
<div class="summary-callout">
|
||||||
|
<h2 class="summary-callout-heading">Properties</h2>
|
||||||
|
<div class="summary-content">
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Reaction.html#ack">ack</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Reaction.html#id">id</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Reaction.html#msgId">msgId</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Reaction.html#orphan">orphan</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Reaction.html#orphanReason">orphanReason</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Reaction.html#reaction">reaction</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="Reaction.html#read">read</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Reaction.html#senderId">senderId</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
<dt><a href="Reaction.html#timestamp">timestamp</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="Reaction">new <span class="symbol-name">Reaction</span><span class="signature"><span class="signature-params">()</span></span></h2>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
<dt>Extends</dt>
|
||||||
|
<dd><a href="Base.html">Base</a></dd>
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Properties</h2>
|
||||||
|
<section>
|
||||||
|
<h3 id="ack"><span class="symbol-name">ack</span><small class="property-type">
|
||||||
|
nullable number</small></h3>
|
||||||
|
<p>ACK</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="id"><span class="symbol-name">id</span><small class="property-type">
|
||||||
|
object</small></h3>
|
||||||
|
<p>Reaction ID</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="msgId"><span class="symbol-name">msgId</span><small class="property-type">
|
||||||
|
object</small></h3>
|
||||||
|
<p>Message ID</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="orphan"><span class="symbol-name">orphan</span><small class="property-type">
|
||||||
|
number</small></h3>
|
||||||
|
<p>Orphan</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="orphanReason"><span class="symbol-name">orphanReason</span><small class="property-type">
|
||||||
|
nullable string</small></h3>
|
||||||
|
<p>Orphan reason</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="reaction"><span class="symbol-name">reaction</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Reaction</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="read"><span class="symbol-name">read</span><small class="property-type">
|
||||||
|
boolean</small></h3>
|
||||||
|
<p>Read</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="senderId"><span class="symbol-name">senderId</span><small class="property-type">
|
||||||
|
string</small></h3>
|
||||||
|
<p>Sender ID</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
<h3 id="timestamp"><span class="symbol-name">timestamp</span><small class="property-type">
|
||||||
|
number</small></h3>
|
||||||
|
<p>Unix timestamp for when the reaction was created</p>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
163
docs/RemoteAuth.html
Normal file
163
docs/RemoteAuth.html
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Class: RemoteAuth</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
|
<h1><small></small><span class="symbol-name">RemoteAuth</span></h1>
|
||||||
|
<p class="source-link">Source: <a href="authStrategies_RemoteAuth.js.html#source-line-26">authStrategies/<wbr>RemoteAuth.<wbr>js:26</a></p>
|
||||||
|
<div class="symbol-classdesc">
|
||||||
|
<p>Remote-based authentication</p>
|
||||||
|
</div>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</header>
|
||||||
|
<section id="summary">
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2 id="RemoteAuth">new <span class="symbol-name">RemoteAuth</span><span class="signature"><span class="signature-params">(options)</span></span></h2>
|
||||||
|
<section>
|
||||||
|
<h3>Parameters</h3>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>options</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>options</p>
|
||||||
|
<p>Values in <code>options</code> have the following properties:</p>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>store</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Remote database store instance</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>clientId</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>dataPath</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Change the default path for saving session files, default is: "./.wwebjs_auth/"</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>backupSyncIntervalMs</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Sets the time interval for periodic session backups. Accepts values starting from 60000ms {1 minute}</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Class: Util</title>
|
<title>whatsapp-web.js 1.19.5 » Class: Util</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
<header class="page-header">
|
<header class="page-header">
|
||||||
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||||
<h1><small></small><span class="symbol-name">Util</span></h1>
|
<h1><small></small><span class="symbol-name">Util</span></h1>
|
||||||
<p class="source-link">Source: <a href="util_Util.js.html#source-line-15">util/<wbr>Util.<wbr>js:15</a></p>
|
<p class="source-link">Source: <a href="util_Util.js.html#source-line-14">util/<wbr>Util.<wbr>js:14</a></p>
|
||||||
<div class="symbol-classdesc">
|
<div class="symbol-classdesc">
|
||||||
<p>Utility methods</p>
|
<p>Utility methods</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<dt><a href="Util.html#.formatImageToWebpSticker">formatImageToWebpSticker(media)</a></dt>
|
<dt><a href="Util.html#.formatImageToWebpSticker">formatImageToWebpSticker(media)</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="Util.html#.formatToWebpSticker">formatToWebpSticker(media)</a></dt>
|
<dt><a href="Util.html#.formatToWebpSticker">formatToWebpSticker(media, metadata)</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
@@ -110,10 +110,10 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div class="symbol-detail-labels"><span class="label label-async">async</span> <span class="label label-static">static</span></div>
|
<div class="symbol-detail-labels"><span class="label label-async">async</span> <span class="label label-static">static</span></div>
|
||||||
<h3 id=".formatToWebpSticker"><span class="symbol-name">formatToWebpSticker</span><span class="signature"><span class="signature-params">(media)</span> → <span class="signature-returns"> Promise containing <a href="MessageMedia.html">MessageMedia</a></span></span></h3>
|
<h3 id=".formatToWebpSticker"><span class="symbol-name">formatToWebpSticker</span><span class="signature"><span class="signature-params">(media, metadata)</span> → <span class="signature-returns"> Promise containing <a href="MessageMedia.html">MessageMedia</a></span></span></h3>
|
||||||
<p>Formats a media to webp</p>
|
<p>Formats a media to webp</p>
|
||||||
<section>
|
<section>
|
||||||
<h4>Parameter</h4>
|
<h4>Parameters</h4>
|
||||||
<table class="jsdoc-details-table">
|
<table class="jsdoc-details-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -137,6 +137,19 @@
|
|||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>metadata</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p><a href="global.html#StickerMetadata">StickerMetadata</a></p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</section>
|
</section>
|
||||||
@@ -230,7 +243,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
80
docs/authStrategies_BaseAuthStrategy.js.html
Normal file
80
docs/authStrategies_BaseAuthStrategy.js.html
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: authStrategies/BaseAuthStrategy.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: authStrategies/BaseAuthStrategy.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class which all authentication strategies extend
|
||||||
|
*/
|
||||||
|
class BaseAuthStrategy {
|
||||||
|
constructor() {}
|
||||||
|
setup(client) {
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
async beforeBrowserInitialized() {}
|
||||||
|
async afterBrowserInitialized() {}
|
||||||
|
async onAuthenticationNeeded() {
|
||||||
|
return {
|
||||||
|
failed: false,
|
||||||
|
restart: false,
|
||||||
|
failureEventPayload: undefined
|
||||||
|
};
|
||||||
|
}
|
||||||
|
async getAuthEventPayload() {}
|
||||||
|
async afterAuthReady() {}
|
||||||
|
async disconnect() {}
|
||||||
|
async destroy() {}
|
||||||
|
async logout() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BaseAuthStrategy;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
126
docs/authStrategies_LegacySessionAuth.js.html
Normal file
126
docs/authStrategies_LegacySessionAuth.js.html
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: authStrategies/LegacySessionAuth.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: authStrategies/LegacySessionAuth.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const BaseAuthStrategy = require('./BaseAuthStrategy');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy session auth strategy
|
||||||
|
* Not compatible with multi-device accounts.
|
||||||
|
* @param {object} options - options
|
||||||
|
* @param {string} options.restartOnAuthFail - Restart client with a new session (i.e. use null 'session' var) if authentication fails
|
||||||
|
* @param {object} options.session - Whatsapp session to restore. If not set, will start a new session
|
||||||
|
* @param {string} options.session.WABrowserId
|
||||||
|
* @param {string} options.session.WASecretBundle
|
||||||
|
* @param {string} options.session.WAToken1
|
||||||
|
* @param {string} options.session.WAToken2
|
||||||
|
*/
|
||||||
|
class LegacySessionAuth extends BaseAuthStrategy {
|
||||||
|
constructor({ session, restartOnAuthFail }={}) {
|
||||||
|
super();
|
||||||
|
this.session = session;
|
||||||
|
this.restartOnAuthFail = restartOnAuthFail;
|
||||||
|
}
|
||||||
|
|
||||||
|
async afterBrowserInitialized() {
|
||||||
|
if(this.session) {
|
||||||
|
await this.client.pupPage.evaluateOnNewDocument(session => {
|
||||||
|
if (document.referrer === 'https://whatsapp.com/') {
|
||||||
|
localStorage.clear();
|
||||||
|
localStorage.setItem('WABrowserId', session.WABrowserId);
|
||||||
|
localStorage.setItem('WASecretBundle', session.WASecretBundle);
|
||||||
|
localStorage.setItem('WAToken1', session.WAToken1);
|
||||||
|
localStorage.setItem('WAToken2', session.WAToken2);
|
||||||
|
}
|
||||||
|
|
||||||
|
localStorage.setItem('remember-me', 'true');
|
||||||
|
}, this.session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async onAuthenticationNeeded() {
|
||||||
|
if(this.session) {
|
||||||
|
this.session = null;
|
||||||
|
return {
|
||||||
|
failed: true,
|
||||||
|
restart: this.restartOnAuthFail,
|
||||||
|
failureEventPayload: 'Unable to log in. Are the session details valid?'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return { failed: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAuthEventPayload() {
|
||||||
|
const isMD = await this.client.pupPage.evaluate(() => {
|
||||||
|
return window.Store.MDBackend;
|
||||||
|
});
|
||||||
|
|
||||||
|
if(isMD) throw new Error('Authenticating via JSON session is not supported for MultiDevice-enabled WhatsApp accounts.');
|
||||||
|
|
||||||
|
const localStorage = JSON.parse(await this.client.pupPage.evaluate(() => {
|
||||||
|
return JSON.stringify(window.localStorage);
|
||||||
|
}));
|
||||||
|
|
||||||
|
return {
|
||||||
|
WABrowserId: localStorage.WABrowserId,
|
||||||
|
WASecretBundle: localStorage.WASecretBundle,
|
||||||
|
WAToken1: localStorage.WAToken1,
|
||||||
|
WAToken2: localStorage.WAToken2
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = LegacySessionAuth;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
106
docs/authStrategies_LocalAuth.js.html
Normal file
106
docs/authStrategies_LocalAuth.js.html
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: authStrategies/LocalAuth.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: authStrategies/LocalAuth.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const path = require('path');
|
||||||
|
const fs = require('fs');
|
||||||
|
const BaseAuthStrategy = require('./BaseAuthStrategy');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Local directory-based authentication
|
||||||
|
* @param {object} options - options
|
||||||
|
* @param {string} options.clientId - Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance
|
||||||
|
* @param {string} options.dataPath - Change the default path for saving session files, default is: "./.wwebjs_auth/"
|
||||||
|
*/
|
||||||
|
class LocalAuth extends BaseAuthStrategy {
|
||||||
|
constructor({ clientId, dataPath }={}) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
const idRegex = /^[-_\w]+$/i;
|
||||||
|
if(clientId &amp;&amp; !idRegex.test(clientId)) {
|
||||||
|
throw new Error('Invalid clientId. Only alphanumeric characters, underscores and hyphens are allowed.');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dataPath = path.resolve(dataPath || './.wwebjs_auth/');
|
||||||
|
this.clientId = clientId;
|
||||||
|
}
|
||||||
|
|
||||||
|
async beforeBrowserInitialized() {
|
||||||
|
const puppeteerOpts = this.client.options.puppeteer;
|
||||||
|
const sessionDirName = this.clientId ? `session-${this.clientId}` : 'session';
|
||||||
|
const dirPath = path.join(this.dataPath, sessionDirName);
|
||||||
|
|
||||||
|
if(puppeteerOpts.userDataDir &amp;&amp; puppeteerOpts.userDataDir !== dirPath) {
|
||||||
|
throw new Error('LocalAuth is not compatible with a user-supplied userDataDir.');
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.mkdirSync(dirPath, { recursive: true });
|
||||||
|
|
||||||
|
this.client.options.puppeteer = {
|
||||||
|
...puppeteerOpts,
|
||||||
|
userDataDir: dirPath
|
||||||
|
};
|
||||||
|
|
||||||
|
this.userDataDir = dirPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
async logout() {
|
||||||
|
if (this.userDataDir) {
|
||||||
|
return (fs.rmSync ? fs.rmSync : fs.rmdirSync).call(this, this.userDataDir, { recursive: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = LocalAuth;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
65
docs/authStrategies_NoAuth.js.html
Normal file
65
docs/authStrategies_NoAuth.js.html
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: authStrategies/NoAuth.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: authStrategies/NoAuth.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const BaseAuthStrategy = require('./BaseAuthStrategy');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No session restoring functionality
|
||||||
|
* Will need to authenticate via QR code every time
|
||||||
|
*/
|
||||||
|
class NoAuth extends BaseAuthStrategy { }
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = NoAuth;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
258
docs/authStrategies_RemoteAuth.js.html
Normal file
258
docs/authStrategies_RemoteAuth.js.html
Normal file
@@ -0,0 +1,258 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: authStrategies/RemoteAuth.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: authStrategies/RemoteAuth.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
/* Require Optional Dependencies */
|
||||||
|
try {
|
||||||
|
var fs = require('fs-extra');
|
||||||
|
var unzipper = require('unzipper');
|
||||||
|
var archiver = require('archiver');
|
||||||
|
} catch {
|
||||||
|
fs = undefined;
|
||||||
|
unzipper = undefined;
|
||||||
|
archiver = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const path = require('path');
|
||||||
|
const { Events } = require('./../util/Constants');
|
||||||
|
const BaseAuthStrategy = require('./BaseAuthStrategy');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remote-based authentication
|
||||||
|
* @param {object} options - options
|
||||||
|
* @param {object} options.store - Remote database store instance
|
||||||
|
* @param {string} options.clientId - Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance
|
||||||
|
* @param {string} options.dataPath - Change the default path for saving session files, default is: "./.wwebjs_auth/"
|
||||||
|
* @param {number} options.backupSyncIntervalMs - Sets the time interval for periodic session backups. Accepts values starting from 60000ms {1 minute}
|
||||||
|
*/
|
||||||
|
class RemoteAuth extends BaseAuthStrategy {
|
||||||
|
constructor({ clientId, dataPath, store, backupSyncIntervalMs } = {}) {
|
||||||
|
if (!fs &amp;&amp; !unzipper &amp;&amp; !archiver) throw new Error('Optional Dependencies [fs-extra, unzipper, archiver] are required to use RemoteAuth. Make sure to run npm install correctly and remove the --no-optional flag');
|
||||||
|
super();
|
||||||
|
|
||||||
|
const idRegex = /^[-_\w]+$/i;
|
||||||
|
if (clientId &amp;&amp; !idRegex.test(clientId)) {
|
||||||
|
throw new Error('Invalid clientId. Only alphanumeric characters, underscores and hyphens are allowed.');
|
||||||
|
}
|
||||||
|
if (!backupSyncIntervalMs || backupSyncIntervalMs &lt; 60000) {
|
||||||
|
throw new Error('Invalid backupSyncIntervalMs. Accepts values starting from 60000ms {1 minute}.');
|
||||||
|
}
|
||||||
|
if(!store) throw new Error('Remote database store is required.');
|
||||||
|
|
||||||
|
this.store = store;
|
||||||
|
this.clientId = clientId;
|
||||||
|
this.backupSyncIntervalMs = backupSyncIntervalMs;
|
||||||
|
this.dataPath = path.resolve(dataPath || './.wwebjs_auth/');
|
||||||
|
this.tempDir = `${this.dataPath}/wwebjs_temp_session`;
|
||||||
|
this.requiredDirs = ['Default', 'IndexedDB', 'Local Storage']; /* => Required Files &amp; Dirs in WWebJS to restore session */
|
||||||
|
}
|
||||||
|
|
||||||
|
async beforeBrowserInitialized() {
|
||||||
|
const puppeteerOpts = this.client.options.puppeteer;
|
||||||
|
const sessionDirName = this.clientId ? `RemoteAuth-${this.clientId}` : 'RemoteAuth';
|
||||||
|
const dirPath = path.join(this.dataPath, sessionDirName);
|
||||||
|
|
||||||
|
if (puppeteerOpts.userDataDir &amp;&amp; puppeteerOpts.userDataDir !== dirPath) {
|
||||||
|
throw new Error('RemoteAuth is not compatible with a user-supplied userDataDir.');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.userDataDir = dirPath;
|
||||||
|
this.sessionName = sessionDirName;
|
||||||
|
|
||||||
|
await this.extractRemoteSession();
|
||||||
|
|
||||||
|
this.client.options.puppeteer = {
|
||||||
|
...puppeteerOpts,
|
||||||
|
userDataDir: dirPath
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async logout() {
|
||||||
|
await this.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
async destroy() {
|
||||||
|
clearInterval(this.backupSync);
|
||||||
|
}
|
||||||
|
|
||||||
|
async disconnect() {
|
||||||
|
await this.deleteRemoteSession();
|
||||||
|
|
||||||
|
let pathExists = await this.isValidPath(this.userDataDir);
|
||||||
|
if (pathExists) {
|
||||||
|
await fs.promises.rm(this.userDataDir, {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
clearInterval(this.backupSync);
|
||||||
|
}
|
||||||
|
|
||||||
|
async afterAuthReady() {
|
||||||
|
const sessionExists = await this.store.sessionExists({session: this.sessionName});
|
||||||
|
if(!sessionExists) {
|
||||||
|
await this.delay(60000); /* Initial delay sync required for session to be stable enough to recover */
|
||||||
|
await this.storeRemoteSession({emit: true});
|
||||||
|
}
|
||||||
|
var self = this;
|
||||||
|
this.backupSync = setInterval(async function () {
|
||||||
|
await self.storeRemoteSession();
|
||||||
|
}, this.backupSyncIntervalMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
async storeRemoteSession(options) {
|
||||||
|
/* Compress &amp; Store Session */
|
||||||
|
const pathExists = await this.isValidPath(this.userDataDir);
|
||||||
|
if (pathExists) {
|
||||||
|
await this.compressSession();
|
||||||
|
await this.store.save({session: this.sessionName});
|
||||||
|
await fs.promises.unlink(`${this.sessionName}.zip`);
|
||||||
|
await fs.promises.rm(`${this.tempDir}`, {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
}).catch(() => {});
|
||||||
|
if(options &amp;&amp; options.emit) this.client.emit(Events.REMOTE_SESSION_SAVED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async extractRemoteSession() {
|
||||||
|
const pathExists = await this.isValidPath(this.userDataDir);
|
||||||
|
const compressedSessionPath = `${this.sessionName}.zip`;
|
||||||
|
const sessionExists = await this.store.sessionExists({session: this.sessionName});
|
||||||
|
if (pathExists) {
|
||||||
|
await fs.promises.rm(this.userDataDir, {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
if (sessionExists) {
|
||||||
|
await this.store.extract({session: this.sessionName, path: compressedSessionPath});
|
||||||
|
await this.unCompressSession(compressedSessionPath);
|
||||||
|
} else {
|
||||||
|
fs.mkdirSync(this.userDataDir, { recursive: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteRemoteSession() {
|
||||||
|
const sessionExists = await this.store.sessionExists({session: this.sessionName});
|
||||||
|
if (sessionExists) await this.store.delete({session: this.sessionName});
|
||||||
|
}
|
||||||
|
|
||||||
|
async compressSession() {
|
||||||
|
const archive = archiver('zip');
|
||||||
|
const stream = fs.createWriteStream(`${this.sessionName}.zip`);
|
||||||
|
|
||||||
|
await fs.copy(this.userDataDir, this.tempDir).catch(() => {});
|
||||||
|
await this.deleteMetadata();
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
archive
|
||||||
|
.directory(this.tempDir, false)
|
||||||
|
.on('error', err => reject(err))
|
||||||
|
.pipe(stream);
|
||||||
|
|
||||||
|
stream.on('close', () => resolve());
|
||||||
|
archive.finalize();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async unCompressSession(compressedSessionPath) {
|
||||||
|
var stream = fs.createReadStream(compressedSessionPath);
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
stream.pipe(unzipper.Extract({
|
||||||
|
path: this.userDataDir
|
||||||
|
}))
|
||||||
|
.on('error', err => reject(err))
|
||||||
|
.on('finish', () => resolve());
|
||||||
|
});
|
||||||
|
await fs.promises.unlink(compressedSessionPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteMetadata() {
|
||||||
|
const sessionDirs = [this.tempDir, path.join(this.tempDir, 'Default')];
|
||||||
|
for (const dir of sessionDirs) {
|
||||||
|
const sessionFiles = await fs.promises.readdir(dir);
|
||||||
|
for (const element of sessionFiles) {
|
||||||
|
if (!this.requiredDirs.includes(element)) {
|
||||||
|
const dirElement = path.join(dir, element);
|
||||||
|
const stats = await fs.promises.lstat(dirElement);
|
||||||
|
|
||||||
|
if (stats.isDirectory()) {
|
||||||
|
await fs.promises.rm(dirElement, {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
}).catch(() => {});
|
||||||
|
} else {
|
||||||
|
await fs.promises.unlink(dirElement).catch(() => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async isValidPath(path) {
|
||||||
|
try {
|
||||||
|
await fs.promises.access(path);
|
||||||
|
return true;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async delay(ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = RemoteAuth;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
596
docs/global.html
596
docs/global.html
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Globals</title>
|
<title>whatsapp-web.js 1.19.5 » Globals</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -68,16 +68,22 @@
|
|||||||
<div class="summary-content">
|
<div class="summary-content">
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="global.html#ButtonSpec">ButtonSpec</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="global.html#ContactId">ContactId</a></dt>
|
<dt><a href="global.html#ContactId">ContactId</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
<dt><a href="global.html#GroupParticipant">GroupParticipant</a></dt>
|
<dt><a href="global.html#FormattedButtonSpec">FormattedButtonSpec</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
<dl class="dl-summary-callout">
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="global.html#GroupParticipant">GroupParticipant</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
<dt><a href="global.html#MessageInfo">MessageInfo</a></dt>
|
<dt><a href="global.html#MessageInfo">MessageInfo</a></dt>
|
||||||
<dd>
|
<dd>
|
||||||
</dd>
|
</dd>
|
||||||
@@ -87,6 +93,11 @@
|
|||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="summary-column">
|
<div class="summary-column">
|
||||||
|
<dl class="dl-summary-callout">
|
||||||
|
<dt><a href="global.html#StickerMetadata">StickerMetadata</a></dt>
|
||||||
|
<dd>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -274,6 +285,19 @@
|
|||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>MESSAGE_REACTION</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<p>MEDIA_UPLOADED</p>
|
<p>MEDIA_UPLOADED</p>
|
||||||
@@ -339,6 +363,19 @@
|
|||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>LOADING_SCREEN</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<p>DISCONNECTED</p>
|
<p>DISCONNECTED</p>
|
||||||
@@ -378,6 +415,32 @@
|
|||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>INCOMING_CALL</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>REMOTE_SESSION_SAVED</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</section>
|
</section>
|
||||||
@@ -766,6 +829,19 @@
|
|||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>ORDER</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<p>REVOKED</p>
|
<p>REVOKED</p>
|
||||||
@@ -779,6 +855,19 @@
|
|||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>PRODUCT</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<p>UNKNOWN</p>
|
<p>UNKNOWN</p>
|
||||||
@@ -792,6 +881,279 @@
|
|||||||
<td>
|
<td>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>GROUP_INVITE</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>LIST</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>LIST_RESPONSE</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>BUTTONS_RESPONSE</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>PAYMENT</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>BROADCAST_NOTIFICATION</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>CALL_LOG</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>CIPHERTEXT</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>DEBUG</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>E2E_NOTIFICATION</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>GP2</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>GROUP_NOTIFICATION</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>HSM</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>INTERACTIVE</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>NATIVE_FLOW</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>NOTIFICATION</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>NOTIFICATION_TEMPLATE</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>OVERSIZED</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>PROTOCOL</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>REACTION</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>TEMPLATE_BUTTON_REPLY</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</section>
|
</section>
|
||||||
@@ -1037,6 +1399,54 @@
|
|||||||
</section>
|
</section>
|
||||||
<h2>Abstract types</h2>
|
<h2>Abstract types</h2>
|
||||||
<section>
|
<section>
|
||||||
|
<h3 id="ButtonSpec"><span class="symbol-name">ButtonSpec</span><small class="property-type">
|
||||||
|
Object</small></h3>
|
||||||
|
<p>Button spec used in Buttons constructor</p>
|
||||||
|
<section>
|
||||||
|
<h4>Properties</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>id</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Custom ID to set on the button. A random one will be generated if one is not passed.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>body</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>The text to show on the button.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
<h3 id="ContactId"><span class="symbol-name">ContactId</span><small class="property-type">
|
<h3 id="ContactId"><span class="symbol-name">ContactId</span><small class="property-type">
|
||||||
Object</small></h3>
|
Object</small></h3>
|
||||||
<p>ID that represents a contact</p>
|
<p>ID that represents a contact</p>
|
||||||
@@ -1096,6 +1506,64 @@
|
|||||||
</section>
|
</section>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
|
<h3 id="FormattedButtonSpec"><span class="symbol-name">FormattedButtonSpec</span><small class="property-type">
|
||||||
|
Object</small></h3>
|
||||||
|
<section>
|
||||||
|
<h4>Properties</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>buttonId</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>type</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>number</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>buttonText</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Object</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p> </p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
<h3 id="GroupParticipant"><span class="symbol-name">GroupParticipant</span><small class="property-type">
|
<h3 id="GroupParticipant"><span class="symbol-name">GroupParticipant</span><small class="property-type">
|
||||||
Object</small></h3>
|
Object</small></h3>
|
||||||
<p>Group participant information</p>
|
<p>Group participant information</p>
|
||||||
@@ -1285,7 +1753,7 @@
|
|||||||
<p>Yes</p>
|
<p>Yes</p>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<p>Show links preview</p>
|
<p>Show links preview. Has no effect on multi-device accounts.</p>
|
||||||
<p>Defaults to <code>true</code>.</p>
|
<p>Defaults to <code>true</code>.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -1304,6 +1772,21 @@
|
|||||||
<p>Defaults to <code>false</code>.</p>
|
<p>Defaults to <code>false</code>.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>sendVideoAsGif</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>boolean</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Send video as gif</p>
|
||||||
|
<p>Defaults to <code>false</code>.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<p>sendMediaAsSticker</p>
|
<p>sendMediaAsSticker</p>
|
||||||
@@ -1406,6 +1889,48 @@
|
|||||||
<p>Defaults to <code>true</code>.</p>
|
<p>Defaults to <code>true</code>.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>stickerAuthor</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Sets the author of the sticker, (if sendMediaAsSticker is true).</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>stickerName</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Sets the name of the sticker, (if sendMediaAsSticker is true).</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>stickerCategories</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Array of string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Sets the categories of the sticker, (if sendMediaAsSticker is true). Provide emoji char array, can be null.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<p>media</p>
|
<p>media</p>
|
||||||
@@ -1425,6 +1950,65 @@
|
|||||||
</section>
|
</section>
|
||||||
<dl class="dl-compact">
|
<dl class="dl-compact">
|
||||||
</dl>
|
</dl>
|
||||||
|
<h3 id="StickerMetadata"><span class="symbol-name">StickerMetadata</span><small class="property-type">
|
||||||
|
Object</small></h3>
|
||||||
|
<p>Sticker metadata.</p>
|
||||||
|
<section>
|
||||||
|
<h4>Properties</h4>
|
||||||
|
<table class="jsdoc-details-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Optional</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>name</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>author</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<p>categories</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Array of string</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Yes</p>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</section>
|
||||||
|
<dl class="dl-compact">
|
||||||
|
</dl>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@@ -1435,7 +2019,7 @@
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
1049
docs/index.html
1049
docs/index.html
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@
|
|||||||
treeNode.tree({
|
treeNode.tree({
|
||||||
autoEscape: false,
|
autoEscape: false,
|
||||||
closedIcon: '⇢',
|
closedIcon: '⇢',
|
||||||
data: [{"label":"<a href=\"global.html\">Globals</a>","id":"global","children":[]},{"label":"<a href=\"Base.html\">Base</a>","id":"Base","children":[]},{"label":"<a href=\"BusinessContact.html\">BusinessContact</a>","id":"BusinessContact","children":[]},{"label":"<a href=\"Chat.html\">Chat</a>","id":"Chat","children":[]},{"label":"<a href=\"Client.html\">Client</a>","id":"Client","children":[]},{"label":"<a href=\"ClientInfo.html\">ClientInfo</a>","id":"ClientInfo","children":[]},{"label":"<a href=\"Contact.html\">Contact</a>","id":"Contact","children":[]},{"label":"<a href=\"GroupChat.html\">GroupChat</a>","id":"GroupChat","children":[]},{"label":"<a href=\"GroupNotification.html\">GroupNotification</a>","id":"GroupNotification","children":[]},{"label":"<a href=\"InterfaceController.html\">InterfaceController</a>","id":"InterfaceController","children":[]},{"label":"<a href=\"Label.html\">Label</a>","id":"Label","children":[]},{"label":"<a href=\"Location.html\">Location</a>","id":"Location","children":[]},{"label":"<a href=\"Message.html\">Message</a>","id":"Message","children":[]},{"label":"<a href=\"MessageMedia.html\">MessageMedia</a>","id":"MessageMedia","children":[]},{"label":"<a href=\"PrivateChat.html\">PrivateChat</a>","id":"PrivateChat","children":[]},{"label":"<a href=\"PrivateContact.html\">PrivateContact</a>","id":"PrivateContact","children":[]},{"label":"<a href=\"Util.html\">Util</a>","id":"Util","children":[]}],
|
data: [{"label":"<a href=\"global.html\">Globals</a>","id":"global","children":[]},{"label":"<a href=\"Base.html\">Base</a>","id":"Base","children":[]},{"label":"<a href=\"BaseAuthStrategy.html\">BaseAuthStrategy</a>","id":"BaseAuthStrategy","children":[]},{"label":"<a href=\"BusinessContact.html\">BusinessContact</a>","id":"BusinessContact","children":[]},{"label":"<a href=\"Buttons.html\">Buttons</a>","id":"Buttons","children":[]},{"label":"<a href=\"Call.html\">Call</a>","id":"Call","children":[]},{"label":"<a href=\"Chat.html\">Chat</a>","id":"Chat","children":[]},{"label":"<a href=\"Client.html\">Client</a>","id":"Client","children":[]},{"label":"<a href=\"ClientInfo.html\">ClientInfo</a>","id":"ClientInfo","children":[]},{"label":"<a href=\"Contact.html\">Contact</a>","id":"Contact","children":[]},{"label":"<a href=\"GroupChat.html\">GroupChat</a>","id":"GroupChat","children":[]},{"label":"<a href=\"GroupNotification.html\">GroupNotification</a>","id":"GroupNotification","children":[]},{"label":"<a href=\"InterfaceController.html\">InterfaceController</a>","id":"InterfaceController","children":[]},{"label":"<a href=\"Label.html\">Label</a>","id":"Label","children":[]},{"label":"<a href=\"LegacySessionAuth.html\">LegacySessionAuth</a>","id":"LegacySessionAuth","children":[]},{"label":"<a href=\"List.html\">List</a>","id":"List","children":[]},{"label":"<a href=\"LocalAuth.html\">LocalAuth</a>","id":"LocalAuth","children":[]},{"label":"<a href=\"Location.html\">Location</a>","id":"Location","children":[]},{"label":"<a href=\"Message.html\">Message</a>","id":"Message","children":[]},{"label":"<a href=\"MessageMedia.html\">MessageMedia</a>","id":"MessageMedia","children":[]},{"label":"<a href=\"NoAuth.html\">NoAuth</a>","id":"NoAuth","children":[]},{"label":"<a href=\"Order.html\">Order</a>","id":"Order","children":[]},{"label":"<a href=\"PrivateChat.html\">PrivateChat</a>","id":"PrivateChat","children":[]},{"label":"<a href=\"PrivateContact.html\">PrivateContact</a>","id":"PrivateContact","children":[]},{"label":"<a href=\"Product.html\">Product</a>","id":"Product","children":[]},{"label":"<a href=\"Reaction.html\">Reaction</a>","id":"Reaction","children":[]},{"label":"<a href=\"RemoteAuth.html\">RemoteAuth</a>","id":"RemoteAuth","children":[]},{"label":"<a href=\"Util.html\">Util</a>","id":"Util","children":[]}],
|
||||||
openedIcon: ' ⇣',
|
openedIcon: ' ⇣',
|
||||||
saveState: false,
|
saveState: false,
|
||||||
useContextMenu: false
|
useContextMenu: false
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Base.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Base.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -60,7 +60,7 @@ module.exports = Base;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/BusinessContact.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/BusinessContact.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -59,7 +59,7 @@ module.exports = BusinessContact;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
135
docs/structures_Buttons.js.html
Normal file
135
docs/structures_Buttons.js.html
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Buttons.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: structures/Buttons.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const MessageMedia = require('./MessageMedia');
|
||||||
|
const Util = require('../util/Util');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Button spec used in Buttons constructor
|
||||||
|
* @typedef {Object} ButtonSpec
|
||||||
|
* @property {string=} id - Custom ID to set on the button. A random one will be generated if one is not passed.
|
||||||
|
* @property {string} body - The text to show on the button.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} FormattedButtonSpec
|
||||||
|
* @property {string} buttonId
|
||||||
|
* @property {number} type
|
||||||
|
* @property {Object} buttonText
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Message type buttons
|
||||||
|
*/
|
||||||
|
class Buttons {
|
||||||
|
/**
|
||||||
|
* @param {string|MessageMedia} body
|
||||||
|
* @param {ButtonSpec[]} buttons - See {@link ButtonSpec}
|
||||||
|
* @param {string?} title
|
||||||
|
* @param {string?} footer
|
||||||
|
*/
|
||||||
|
constructor(body, buttons, title, footer) {
|
||||||
|
/**
|
||||||
|
* Message body
|
||||||
|
* @type {string|MessageMedia}
|
||||||
|
*/
|
||||||
|
this.body = body;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* title of message
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.title = title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* footer of message
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.footer = footer;
|
||||||
|
|
||||||
|
if (body instanceof MessageMedia) {
|
||||||
|
this.type = 'media';
|
||||||
|
this.title = '';
|
||||||
|
}else{
|
||||||
|
this.type = 'chat';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* buttons of message
|
||||||
|
* @type {FormattedButtonSpec[]}
|
||||||
|
*/
|
||||||
|
this.buttons = this._format(buttons);
|
||||||
|
if(!this.buttons.length){ throw '[BT01] No buttons';}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates button array from simple array
|
||||||
|
* @param {ButtonSpec[]} buttons
|
||||||
|
* @returns {FormattedButtonSpec[]}
|
||||||
|
* @example
|
||||||
|
* Input: [{id:'customId',body:'button1'},{body:'button2'},{body:'button3'},{body:'button4'}]
|
||||||
|
* Returns: [{ buttonId:'customId',buttonText:{'displayText':'button1'},type: 1 },{buttonId:'n3XKsL',buttonText:{'displayText':'button2'},type:1},{buttonId:'NDJk0a',buttonText:{'displayText':'button3'},type:1}]
|
||||||
|
*/
|
||||||
|
_format(buttons){
|
||||||
|
buttons = buttons.slice(0,3); // phone users can only see 3 buttons, so lets limit this
|
||||||
|
return buttons.map((btn) => {
|
||||||
|
return {'buttonId':btn.id ? String(btn.id) : Util.generateHash(6),'buttonText':{'displayText':btn.body},'type':1};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Buttons;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
129
docs/structures_Call.js.html
Normal file
129
docs/structures_Call.js.html
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Call.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: structures/Call.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const Base = require('./Base');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Call on WhatsApp
|
||||||
|
* @extends {Base}
|
||||||
|
*/
|
||||||
|
class Call extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/**
|
||||||
|
* Call ID
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.id = data.id;
|
||||||
|
/**
|
||||||
|
* From
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.from = data.peerJid;
|
||||||
|
/**
|
||||||
|
* Unix timestamp for when the call was created
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.timestamp = data.offerTime;
|
||||||
|
/**
|
||||||
|
* Is video
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.isVideo = data.isVideo;
|
||||||
|
/**
|
||||||
|
* Is Group
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.isGroup = data.isGroup;
|
||||||
|
/**
|
||||||
|
* Indicates if the call was sent by the current user
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.fromMe = data.outgoing;
|
||||||
|
/**
|
||||||
|
* Indicates if the call can be handled in waweb
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.canHandleLocally = data.canHandleLocally;
|
||||||
|
/**
|
||||||
|
* Indicates if the call Should be handled in waweb
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.webClientShouldHandle = data.webClientShouldHandle;
|
||||||
|
/**
|
||||||
|
* Object with participants
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.participants = data.participants;
|
||||||
|
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reject the call
|
||||||
|
*/
|
||||||
|
async reject() {
|
||||||
|
return this.client.pupPage.evaluate((peerJid, id) => {
|
||||||
|
return window.WWebJS.rejectCall(peerJid, id);
|
||||||
|
}, this.from, this.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Call;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Chat.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Chat.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -96,7 +96,7 @@ class Chat extends Base {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the chat is muted or not
|
* Indicates if the chat is muted or not
|
||||||
* @type {number}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
this.isMuted = data.isMuted;
|
this.isMuted = data.isMuted;
|
||||||
|
|
||||||
@@ -178,8 +178,8 @@ class Chat extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mutes this chat until a specified date
|
* Mutes this chat forever, unless a date is specified
|
||||||
* @param {Date} unmuteDate Date at which the Chat will be unmuted
|
* @param {?Date} unmuteDate Date at which the Chat will be unmuted, leave as is to mute forever
|
||||||
*/
|
*/
|
||||||
async mute(unmuteDate) {
|
async mute(unmuteDate) {
|
||||||
return this.client.muteChat(this.id._serialized, unmuteDate);
|
return this.client.muteChat(this.id._serialized, unmuteDate);
|
||||||
@@ -201,31 +201,42 @@ class Chat extends Base {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads chat messages, sorted from earliest to latest.
|
* Loads chat messages, sorted from earliest to latest.
|
||||||
* @param {Object} searchOptions Options for searching messages. Right now only limit is supported.
|
* @param {Object} searchOptions Options for searching messages. Right now only limit and fromMe is supported.
|
||||||
* @param {Number} [searchOptions.limit=50] The amount of messages to return. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.
|
* @param {Number} [searchOptions.limit] The amount of messages to return. If no limit is specified, the available messages will be returned. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.
|
||||||
|
* @param {Boolean} [searchOptions.fromMe] Return only messages from the bot number or vise versa. To get all messages, leave the option undefined.
|
||||||
* @returns {Promise&lt;Array&lt;Message>>}
|
* @returns {Promise&lt;Array&lt;Message>>}
|
||||||
*/
|
*/
|
||||||
async fetchMessages(searchOptions) {
|
async fetchMessages(searchOptions) {
|
||||||
if (!searchOptions || !searchOptions.limit) {
|
let messages = await this.client.pupPage.evaluate(async (chatId, searchOptions) => {
|
||||||
searchOptions = { limit: 50 };
|
const msgFilter = (m) => {
|
||||||
}
|
if (m.isNotification) {
|
||||||
let messages = await this.client.pupPage.evaluate(async (chatId, limit) => {
|
return false; // dont include notification messages
|
||||||
const msgFilter = m => !m.isNotification; // dont include notification messages
|
}
|
||||||
|
if (searchOptions &amp;&amp; searchOptions.fromMe &amp;&amp; m.id.fromMe !== searchOptions.fromMe) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
const chat = window.Store.Chat.get(chatId);
|
const chat = window.Store.Chat.get(chatId);
|
||||||
let msgs = chat.msgs.models.filter(msgFilter);
|
let msgs = chat.msgs.getModelsArray().filter(msgFilter);
|
||||||
|
|
||||||
while (msgs.length &lt; limit) {
|
if (searchOptions &amp;&amp; searchOptions.limit > 0) {
|
||||||
const loadedMessages = await chat.loadEarlierMsgs();
|
while (msgs.length &lt; searchOptions.limit) {
|
||||||
if (!loadedMessages) break;
|
const loadedMessages = await window.Store.ConversationMsgs.loadEarlierMsgs(chat);
|
||||||
msgs = [...loadedMessages.filter(msgFilter), ...msgs];
|
if (!loadedMessages || !loadedMessages.length) break;
|
||||||
|
msgs = [...loadedMessages.filter(msgFilter), ...msgs];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msgs.length > searchOptions.limit) {
|
||||||
|
msgs.sort((a, b) => (a.t > b.t) ? 1 : -1);
|
||||||
|
msgs = msgs.splice(msgs.length - searchOptions.limit);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
msgs.sort((a, b) => (a.t > b.t) ? 1 : -1);
|
|
||||||
if (msgs.length > limit) msgs = msgs.splice(msgs.length - limit);
|
|
||||||
return msgs.map(m => window.WWebJS.getMessageModel(m));
|
return msgs.map(m => window.WWebJS.getMessageModel(m));
|
||||||
|
|
||||||
}, this.id._serialized, searchOptions.limit);
|
}, this.id._serialized, searchOptions);
|
||||||
|
|
||||||
return messages.map(m => new Message(this.client, m));
|
return messages.map(m => new Message(this.client, m));
|
||||||
}
|
}
|
||||||
@@ -288,7 +299,7 @@ module.exports = Chat;
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/ClientInfo.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/ClientInfo.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -51,12 +51,6 @@ class ClientInfo extends Base {
|
|||||||
*/
|
*/
|
||||||
this.pushname = data.pushname;
|
this.pushname = data.pushname;
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {object}
|
|
||||||
* @deprecated Use .wid instead
|
|
||||||
*/
|
|
||||||
this.me = data.wid;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current user ID
|
* Current user ID
|
||||||
* @type {object}
|
* @type {object}
|
||||||
@@ -64,18 +58,25 @@ class ClientInfo extends Base {
|
|||||||
this.wid = data.wid;
|
this.wid = data.wid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information about the phone this client is connected to
|
* @type {object}
|
||||||
|
* @deprecated Use .wid instead
|
||||||
|
*/
|
||||||
|
this.me = data.wid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information about the phone this client is connected to. Not available in multi-device.
|
||||||
* @type {object}
|
* @type {object}
|
||||||
* @property {string} wa_version WhatsApp Version running on the phone
|
* @property {string} wa_version WhatsApp Version running on the phone
|
||||||
* @property {string} os_version OS Version running on the phone (iOS or Android version)
|
* @property {string} os_version OS Version running on the phone (iOS or Android version)
|
||||||
* @property {string} device_manufacturer Device manufacturer
|
* @property {string} device_manufacturer Device manufacturer
|
||||||
* @property {string} device_model Device model
|
* @property {string} device_model Device model
|
||||||
* @property {string} os_build_number OS build number
|
* @property {string} os_build_number OS build number
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
this.phone = data.phone;
|
this.phone = data.phone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Platform the phone is running on
|
* Platform WhatsApp is running on
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
this.platform = data.platform;
|
this.platform = data.platform;
|
||||||
@@ -88,6 +89,7 @@ class ClientInfo extends Base {
|
|||||||
* @returns {object} batteryStatus
|
* @returns {object} batteryStatus
|
||||||
* @returns {number} batteryStatus.battery - The current battery percentage
|
* @returns {number} batteryStatus.battery - The current battery percentage
|
||||||
* @returns {boolean} batteryStatus.plugged - Indicates if the phone is plugged in (true) or not (false)
|
* @returns {boolean} batteryStatus.plugged - Indicates if the phone is plugged in (true) or not (false)
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
async getBatteryStatus() {
|
async getBatteryStatus() {
|
||||||
return await this.client.pupPage.evaluate(() => {
|
return await this.client.pupPage.evaluate(() => {
|
||||||
@@ -95,7 +97,6 @@ class ClientInfo extends Base {
|
|||||||
return { battery, plugged };
|
return { battery, plugged };
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ClientInfo;</code></pre>
|
module.exports = ClientInfo;</code></pre>
|
||||||
@@ -108,7 +109,7 @@ module.exports = ClientInfo;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Contact.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Contact.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -151,6 +151,22 @@ class Contact extends Base {
|
|||||||
return await this.client.getProfilePicUrl(this.id._serialized);
|
return await this.client.getProfilePicUrl(this.id._serialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the contact's formatted phone number, (12345678901@c.us) => (+1 (234) 5678-901)
|
||||||
|
* @returns {Promise&lt;string>}
|
||||||
|
*/
|
||||||
|
async getFormattedNumber() {
|
||||||
|
return await this.client.getFormattedNumber(this.id._serialized);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the contact's countrycode, (1541859685@c.us) => (1)
|
||||||
|
* @returns {Promise&lt;string>}
|
||||||
|
*/
|
||||||
|
async getCountryCode() {
|
||||||
|
return await this.client.getCountryCode(this.id._serialized);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Chat that corresponds to this Contact.
|
* Returns the Chat that corresponds to this Contact.
|
||||||
* Will return null when getting chat for currently logged in user.
|
* Will return null when getting chat for currently logged in user.
|
||||||
@@ -198,7 +214,8 @@ class Contact extends Base {
|
|||||||
*/
|
*/
|
||||||
async getAbout() {
|
async getAbout() {
|
||||||
const about = await this.client.pupPage.evaluate(async (contactId) => {
|
const about = await this.client.pupPage.evaluate(async (contactId) => {
|
||||||
return window.Store.Wap.statusFind(contactId);
|
const wid = window.Store.WidFactory.createWid(contactId);
|
||||||
|
return window.Store.StatusUtils.getStatus(wid);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
if (typeof about.status !== 'string')
|
if (typeof about.status !== 'string')
|
||||||
@@ -207,9 +224,18 @@ class Contact extends Base {
|
|||||||
return about.status;
|
return about.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Contact's common groups with you. Returns empty array if you don't have any common group.
|
||||||
|
* @returns {Promise&lt;WAWebJS.ChatId[]>}
|
||||||
|
*/
|
||||||
|
async getCommonGroups() {
|
||||||
|
return await this.client.getCommonGroups(this.id._serialized);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Contact;</code></pre>
|
module.exports = Contact;
|
||||||
|
</code></pre>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -219,7 +245,7 @@ module.exports = Contact;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/GroupChat.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/GroupChat.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -90,8 +90,15 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise&lt;Object>}
|
* @returns {Promise&lt;Object>}
|
||||||
*/
|
*/
|
||||||
async addParticipants(participantIds) {
|
async addParticipants(participantIds) {
|
||||||
return await this.client.pupPage.evaluate((chatId, participantIds) => {
|
return await this.client.pupPage.evaluate(async (chatId, participantIds) => {
|
||||||
return window.Store.Wap.addParticipants(chatId, participantIds);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
const participants = await Promise.all(participantIds.map(async p => {
|
||||||
|
const wid = window.Store.WidFactory.createWid(p);
|
||||||
|
return await window.Store.Contact.get(wid);
|
||||||
|
}));
|
||||||
|
await window.Store.GroupParticipants.addParticipants(chat, participants);
|
||||||
|
return { status: 200 };
|
||||||
}, this.id._serialized, participantIds);
|
}, this.id._serialized, participantIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,8 +108,14 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise&lt;Object>}
|
* @returns {Promise&lt;Object>}
|
||||||
*/
|
*/
|
||||||
async removeParticipants(participantIds) {
|
async removeParticipants(participantIds) {
|
||||||
return await this.client.pupPage.evaluate((chatId, participantIds) => {
|
return await this.client.pupPage.evaluate(async (chatId, participantIds) => {
|
||||||
return window.Store.Wap.removeParticipants(chatId, participantIds);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
const participants = participantIds.map(p => {
|
||||||
|
return chat.groupMetadata.participants.get(p);
|
||||||
|
}).filter(p => Boolean(p));
|
||||||
|
await window.Store.GroupParticipants.removeParticipants(chat, participants);
|
||||||
|
return { status: 200 };
|
||||||
}, this.id._serialized, participantIds);
|
}, this.id._serialized, participantIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,8 +125,14 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise&lt;{ status: number }>} Object with status code indicating if the operation was successful
|
* @returns {Promise&lt;{ status: number }>} Object with status code indicating if the operation was successful
|
||||||
*/
|
*/
|
||||||
async promoteParticipants(participantIds) {
|
async promoteParticipants(participantIds) {
|
||||||
return await this.client.pupPage.evaluate((chatId, participantIds) => {
|
return await this.client.pupPage.evaluate(async (chatId, participantIds) => {
|
||||||
return window.Store.Wap.promoteParticipants(chatId, participantIds);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
const participants = participantIds.map(p => {
|
||||||
|
return chat.groupMetadata.participants.get(p);
|
||||||
|
}).filter(p => Boolean(p));
|
||||||
|
await window.Store.GroupParticipants.promoteParticipants(chat, participants);
|
||||||
|
return { status: 200 };
|
||||||
}, this.id._serialized, participantIds);
|
}, this.id._serialized, participantIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,40 +142,60 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise&lt;{ status: number }>} Object with status code indicating if the operation was successful
|
* @returns {Promise&lt;{ status: number }>} Object with status code indicating if the operation was successful
|
||||||
*/
|
*/
|
||||||
async demoteParticipants(participantIds) {
|
async demoteParticipants(participantIds) {
|
||||||
return await this.client.pupPage.evaluate((chatId, participantIds) => {
|
return await this.client.pupPage.evaluate(async (chatId, participantIds) => {
|
||||||
return window.Store.Wap.demoteParticipants(chatId, participantIds);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
const participants = participantIds.map(p => {
|
||||||
|
return chat.groupMetadata.participants.get(p);
|
||||||
|
}).filter(p => Boolean(p));
|
||||||
|
await window.Store.GroupParticipants.demoteParticipants(chat, participants);
|
||||||
|
return { status: 200 };
|
||||||
}, this.id._serialized, participantIds);
|
}, this.id._serialized, participantIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the group subject
|
* Updates the group subject
|
||||||
* @param {string} subject
|
* @param {string} subject
|
||||||
* @returns {Promise}
|
* @returns {Promise&lt;boolean>} Returns true if the subject was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
*/
|
*/
|
||||||
async setSubject(subject) {
|
async setSubject(subject) {
|
||||||
let res = await this.client.pupPage.evaluate((chatId, subject) => {
|
const success = await this.client.pupPage.evaluate(async (chatId, subject) => {
|
||||||
return window.Store.Wap.changeSubject(chatId, subject);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
try {
|
||||||
|
await window.Store.GroupUtils.setGroupSubject(chatWid, subject);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return false;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, this.id._serialized, subject);
|
}, this.id._serialized, subject);
|
||||||
|
|
||||||
if(res.status == 200) {
|
if(!success) return false;
|
||||||
this.name = subject;
|
this.name = subject;
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the group description
|
* Updates the group description
|
||||||
* @param {string} description
|
* @param {string} description
|
||||||
* @returns {Promise}
|
* @returns {Promise&lt;boolean>} Returns true if the description was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
*/
|
*/
|
||||||
async setDescription(description) {
|
async setDescription(description) {
|
||||||
let res = await this.client.pupPage.evaluate((chatId, description) => {
|
const success = await this.client.pupPage.evaluate(async (chatId, description) => {
|
||||||
let descId = window.Store.GroupMetadata.get(chatId).descId;
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
return window.Store.Wap.setGroupDescription(chatId, description, window.Store.genId(), descId);
|
let descId = window.Store.GroupMetadata.get(chatWid).descId;
|
||||||
|
try {
|
||||||
|
await window.Store.GroupUtils.setGroupDescription(chatWid, description, window.Store.MsgKey.newId(), descId);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return false;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, this.id._serialized, description);
|
}, this.id._serialized, description);
|
||||||
|
|
||||||
if (res.status == 200) {
|
if(!success) return false;
|
||||||
this.groupMetadata.desc = description;
|
this.groupMetadata.desc = description;
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -165,11 +204,18 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise&lt;boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
* @returns {Promise&lt;boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
*/
|
*/
|
||||||
async setMessagesAdminsOnly(adminsOnly=true) {
|
async setMessagesAdminsOnly(adminsOnly=true) {
|
||||||
let res = await this.client.pupPage.evaluate((chatId, value) => {
|
const success = await this.client.pupPage.evaluate(async (chatId, adminsOnly) => {
|
||||||
return window.Store.Wap.setGroupProperty(chatId, 'announcement', value);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
try {
|
||||||
|
await window.Store.GroupUtils.setGroupProperty(chatWid, 'announcement', adminsOnly ? 1 : 0);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return false;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, this.id._serialized, adminsOnly);
|
}, this.id._serialized, adminsOnly);
|
||||||
|
|
||||||
if (res.status !== 200) return false;
|
if(!success) return false;
|
||||||
|
|
||||||
this.groupMetadata.announce = adminsOnly;
|
this.groupMetadata.announce = adminsOnly;
|
||||||
return true;
|
return true;
|
||||||
@@ -181,11 +227,18 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise&lt;boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
* @returns {Promise&lt;boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
*/
|
*/
|
||||||
async setInfoAdminsOnly(adminsOnly=true) {
|
async setInfoAdminsOnly(adminsOnly=true) {
|
||||||
let res = await this.client.pupPage.evaluate((chatId, value) => {
|
const success = await this.client.pupPage.evaluate(async (chatId, adminsOnly) => {
|
||||||
return window.Store.Wap.setGroupProperty(chatId, 'restrict', value);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
try {
|
||||||
|
await window.Store.GroupUtils.setGroupProperty(chatWid, 'restrict', adminsOnly ? 1 : 0);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return false;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, this.id._serialized, adminsOnly);
|
}, this.id._serialized, adminsOnly);
|
||||||
|
|
||||||
if (res.status !== 200) return false;
|
if(!success) return false;
|
||||||
|
|
||||||
this.groupMetadata.restrict = adminsOnly;
|
this.groupMetadata.restrict = adminsOnly;
|
||||||
return true;
|
return true;
|
||||||
@@ -196,25 +249,25 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise&lt;string>} Group's invite code
|
* @returns {Promise&lt;string>} Group's invite code
|
||||||
*/
|
*/
|
||||||
async getInviteCode() {
|
async getInviteCode() {
|
||||||
let res = await this.client.pupPage.evaluate(chatId => {
|
const codeRes = await this.client.pupPage.evaluate(async chatId => {
|
||||||
return window.Store.Wap.groupInviteCode(chatId);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
return window.Store.Invite.queryGroupInviteCode(chatWid);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
if (res.status == 200) {
|
return codeRes.code;
|
||||||
return res.code;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error('Not authorized');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invalidates the current group invite code and generates a new one
|
* Invalidates the current group invite code and generates a new one
|
||||||
* @returns {Promise}
|
* @returns {Promise&lt;string>} New invite code
|
||||||
*/
|
*/
|
||||||
async revokeInvite() {
|
async revokeInvite() {
|
||||||
return await this.client.pupPage.evaluate(chatId => {
|
const codeRes = await this.client.pupPage.evaluate(chatId => {
|
||||||
return window.Store.Wap.revokeGroupInvite(chatId);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
return window.Store.Invite.resetGroupInviteCode(chatWid);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
|
return codeRes.code;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -222,8 +275,10 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
async leave() {
|
async leave() {
|
||||||
return await this.client.pupPage.evaluate(chatId => {
|
await this.client.pupPage.evaluate(async chatId => {
|
||||||
return window.Store.Wap.leaveGroup(chatId);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
return window.Store.GroupUtils.sendExitGroup(chat);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,7 +294,7 @@ module.exports = GroupChat;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/GroupNotification.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/GroupNotification.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -74,7 +74,7 @@ class GroupNotification extends Base {
|
|||||||
*
|
*
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
this.chatId = typeof (data.from) === 'object' ? data.from._serialized : data.from;
|
this.chatId = typeof (data.id.remote) === 'object' ? data.id.remote._serialized : data.id.remote;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ContactId for the user that produced the GroupNotification.
|
* ContactId for the user that produced the GroupNotification.
|
||||||
@@ -143,7 +143,7 @@ module.exports = GroupNotification;
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Label.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Label.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -88,7 +88,7 @@ module.exports = Label;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
133
docs/structures_List.js.html
Normal file
133
docs/structures_List.js.html
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: structures/List.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: structures/List.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const Util = require('../util/Util');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Message type List
|
||||||
|
*/
|
||||||
|
class List {
|
||||||
|
/**
|
||||||
|
* @param {string} body
|
||||||
|
* @param {string} buttonText
|
||||||
|
* @param {Array&lt;any>} sections
|
||||||
|
* @param {string?} title
|
||||||
|
* @param {string?} footer
|
||||||
|
*/
|
||||||
|
constructor(body, buttonText, sections, title, footer) {
|
||||||
|
/**
|
||||||
|
* Message body
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.description = body;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List button text
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.buttonText = buttonText;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* title of message
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.title = title;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* footer of message
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.footer = footer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sections of message
|
||||||
|
* @type {Array&lt;any>}
|
||||||
|
*/
|
||||||
|
this.sections = this._format(sections);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates section array from simple array
|
||||||
|
* @param {Array&lt;any>} sections
|
||||||
|
* @returns {Array&lt;any>}
|
||||||
|
* @example
|
||||||
|
* Input: [{title:'sectionTitle',rows:[{id:'customId', title:'ListItem2', description: 'desc'},{title:'ListItem2'}]}}]
|
||||||
|
* Returns: [{'title':'sectionTitle','rows':[{'rowId':'customId','title':'ListItem1','description':'desc'},{'rowId':'oGSRoD','title':'ListItem2','description':''}]}]
|
||||||
|
*/
|
||||||
|
_format(sections){
|
||||||
|
if(!sections.length){throw '[LT02] List without sections';}
|
||||||
|
if(sections.length > 1 &amp;&amp; sections.filter(s => typeof s.title == 'undefined').length > 1){throw '[LT05] You can\'t have more than one empty title.';}
|
||||||
|
return sections.map( (section) =>{
|
||||||
|
if(!section.rows.length){throw '[LT03] Section without rows';}
|
||||||
|
return {
|
||||||
|
title: section.title ? section.title : undefined,
|
||||||
|
rows: section.rows.map( (row) => {
|
||||||
|
if(!row.title){throw '[LT04] Row without title';}
|
||||||
|
return {
|
||||||
|
rowId: row.id ? row.id : Util.generateHash(6),
|
||||||
|
title: row.title,
|
||||||
|
description: row.description ? row.description : ''
|
||||||
|
};
|
||||||
|
})
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = List;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Location.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Location.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -71,7 +71,7 @@ module.exports = Location;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Message.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Message.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -34,6 +34,8 @@
|
|||||||
const Base = require('./Base');
|
const Base = require('./Base');
|
||||||
const MessageMedia = require('./MessageMedia');
|
const MessageMedia = require('./MessageMedia');
|
||||||
const Location = require('./Location');
|
const Location = require('./Location');
|
||||||
|
const Order = require('./Order');
|
||||||
|
const Payment = require('./Payment');
|
||||||
const { MessageTypes } = require('../util/Constants');
|
const { MessageTypes } = require('../util/Constants');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,13 +50,14 @@ class Message extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_patch(data) {
|
_patch(data) {
|
||||||
|
this._data = data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MediaKey that represents the sticker 'ID'
|
* MediaKey that represents the sticker 'ID'
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
this.mediaKey = data.mediaKey;
|
this.mediaKey = data.mediaKey;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ID that represents the message
|
* ID that represents the message
|
||||||
* @type {object}
|
* @type {object}
|
||||||
@@ -71,7 +74,7 @@ class Message extends Base {
|
|||||||
* Indicates if the message has media available for download
|
* Indicates if the message has media available for download
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
this.hasMedia = data.clientUrl || data.deprecatedMms3Url ? true : false;
|
this.hasMedia = Boolean(data.mediaKey &amp;&amp; data.directPath);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message content
|
* Message content
|
||||||
@@ -112,12 +115,26 @@ class Message extends Base {
|
|||||||
*/
|
*/
|
||||||
this.author = (typeof (data.author) === 'object' &amp;&amp; data.author !== null) ? data.author._serialized : data.author;
|
this.author = (typeof (data.author) === 'object' &amp;&amp; data.author !== null) ? data.author._serialized : data.author;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String that represents from which device type the message was sent
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.deviceType = data.id.id.length > 21 ? 'android' : data.id.id.substring(0, 2) == '3A' ? 'ios' : 'web';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the message was forwarded
|
* Indicates if the message was forwarded
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
this.isForwarded = data.isForwarded;
|
this.isForwarded = data.isForwarded;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates how many times the message was forwarded.
|
||||||
|
*
|
||||||
|
* The maximum value is 127.
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.forwardingScore = data.forwardingScore || 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the message is a status update
|
* Indicates if the message is a status update
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
@@ -148,6 +165,12 @@ class Message extends Base {
|
|||||||
*/
|
*/
|
||||||
this.hasQuotedMsg = data.quotedMsg ? true : false;
|
this.hasQuotedMsg = data.quotedMsg ? true : false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates the duration of the message in seconds
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.duration = data.duration ? data.duration : undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Location information contained in the message, if the message is type "location"
|
* Location information contained in the message, if the message is type "location"
|
||||||
* @type {Location}
|
* @type {Location}
|
||||||
@@ -160,6 +183,19 @@ class Message extends Base {
|
|||||||
*/
|
*/
|
||||||
this.vCards = data.type === MessageTypes.CONTACT_CARD_MULTI ? data.vcardList.map((c) => c.vcard) : data.type === MessageTypes.CONTACT_CARD ? [data.body] : [];
|
this.vCards = data.type === MessageTypes.CONTACT_CARD_MULTI ? data.vcardList.map((c) => c.vcard) : data.type === MessageTypes.CONTACT_CARD ? [data.body] : [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Group Invite Data
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.inviteV4 = data.type === MessageTypes.GROUP_INVITE ? {
|
||||||
|
inviteCode: data.inviteCode,
|
||||||
|
inviteCodeExp: data.inviteCodeExp,
|
||||||
|
groupId: data.inviteGrp,
|
||||||
|
groupName: data.inviteGrpName,
|
||||||
|
fromId: data.from._serialized,
|
||||||
|
toId: data.to._serialized
|
||||||
|
} : undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates the mentions in the message body.
|
* Indicates the mentions in the message body.
|
||||||
* @type {Array&lt;string>}
|
* @type {Array&lt;string>}
|
||||||
@@ -170,12 +206,71 @@ class Message extends Base {
|
|||||||
this.mentionedIds = data.mentionedJidList;
|
this.mentionedIds = data.mentionedJidList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order ID for message type ORDER
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.orderId = data.orderId ? data.orderId : undefined;
|
||||||
|
/**
|
||||||
|
* Order Token for message type ORDER
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.token = data.token ? data.token : undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether the message is a Gif
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.isGif = Boolean(data.isGif);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the message will disappear after it expires
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.isEphemeral = data.isEphemeral;
|
||||||
|
|
||||||
|
/** Title */
|
||||||
|
if (data.title) {
|
||||||
|
this.title = data.title;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Description */
|
||||||
|
if (data.description) {
|
||||||
|
this.description = data.description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Business Owner JID */
|
||||||
|
if (data.businessOwnerJid) {
|
||||||
|
this.businessOwnerJid = data.businessOwnerJid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Product ID */
|
||||||
|
if (data.productId) {
|
||||||
|
this.productId = data.productId;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Links included in the message.
|
* Links included in the message.
|
||||||
* @type {Array&lt;string>}
|
* @type {Array&lt;{link: string, isSuspicious: boolean}>}
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
this.links = data.links;
|
this.links = data.links;
|
||||||
|
|
||||||
|
/** Buttons */
|
||||||
|
if (data.dynamicReplyButtons) {
|
||||||
|
this.dynamicReplyButtons = data.dynamicReplyButtons;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Selected Button Id **/
|
||||||
|
if (data.selectedButtonId) {
|
||||||
|
this.selectedButtonId = data.selectedButtonId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Selected List row Id **/
|
||||||
|
if (data.listResponse &amp;&amp; data.listResponse.singleSelectReply.selectedRowId) {
|
||||||
|
this.selectedRowId = data.listResponse.singleSelectReply.selectedRowId;
|
||||||
|
}
|
||||||
|
|
||||||
return super._patch(data);
|
return super._patch(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,6 +278,32 @@ class Message extends Base {
|
|||||||
return this.fromMe ? this.to : this.from;
|
return this.fromMe ? this.to : this.from;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reloads this Message object's data in-place with the latest values from WhatsApp Web.
|
||||||
|
* Note that the Message must still be in the web app cache for this to work, otherwise will return null.
|
||||||
|
* @returns {Promise&lt;Message>}
|
||||||
|
*/
|
||||||
|
async reload() {
|
||||||
|
const newData = await this.client.pupPage.evaluate((msgId) => {
|
||||||
|
const msg = window.Store.Msg.get(msgId);
|
||||||
|
if(!msg) return null;
|
||||||
|
return window.WWebJS.getMessageModel(msg);
|
||||||
|
}, this.id._serialized);
|
||||||
|
|
||||||
|
if(!newData) return null;
|
||||||
|
|
||||||
|
this._patch(newData);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns message in a raw format
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
get rawData() {
|
||||||
|
return this._data;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Chat this message was sent in
|
* Returns the Chat this message was sent in
|
||||||
* @returns {Promise&lt;Chat>}
|
* @returns {Promise&lt;Chat>}
|
||||||
@@ -215,8 +336,9 @@ class Message extends Base {
|
|||||||
if (!this.hasQuotedMsg) return undefined;
|
if (!this.hasQuotedMsg) return undefined;
|
||||||
|
|
||||||
const quotedMsg = await this.client.pupPage.evaluate((msgId) => {
|
const quotedMsg = await this.client.pupPage.evaluate((msgId) => {
|
||||||
let msg = window.Store.Msg.get(msgId);
|
const msg = window.Store.Msg.get(msgId);
|
||||||
return msg.quotedMsgObj().serialize();
|
const quotedMsg = window.Store.QuotedMsg.getQuotedMsgObj(msg);
|
||||||
|
return window.WWebJS.getMessageModel(quotedMsg);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
return new Message(this.client, quotedMsg);
|
return new Message(this.client, quotedMsg);
|
||||||
@@ -246,7 +368,29 @@ class Message extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forwards this message to another chat
|
* React to this message with an emoji
|
||||||
|
* @param {string} reaction - Emoji to react with. Send an empty string to remove the reaction.
|
||||||
|
* @return {Promise}
|
||||||
|
*/
|
||||||
|
async react(reaction){
|
||||||
|
await this.client.pupPage.evaluate(async (messageId, reaction) => {
|
||||||
|
if (!messageId) { return undefined; }
|
||||||
|
|
||||||
|
const msg = await window.Store.Msg.get(messageId);
|
||||||
|
await window.Store.sendReactionToMsg(msg, reaction);
|
||||||
|
}, this.id._serialized, reaction);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accept Group V4 Invite
|
||||||
|
* @returns {Promise&lt;Object>}
|
||||||
|
*/
|
||||||
|
async acceptGroupV4Invite() {
|
||||||
|
return await this.client.acceptGroupV4Invite(this.inviteV4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forwards this message to another chat (that you chatted before, otherwise it will fail)
|
||||||
*
|
*
|
||||||
* @param {string|Chat} chat Chat model or chat ID to which the message will be forwarded
|
* @param {string|Chat} chat Chat model or chat ID to which the message will be forwarded
|
||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
@@ -273,45 +417,62 @@ class Message extends Base {
|
|||||||
|
|
||||||
const result = await this.client.pupPage.evaluate(async (msgId) => {
|
const result = await this.client.pupPage.evaluate(async (msgId) => {
|
||||||
const msg = window.Store.Msg.get(msgId);
|
const msg = window.Store.Msg.get(msgId);
|
||||||
|
if (!msg) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
if (msg.mediaData.mediaStage != 'RESOLVED') {
|
if (msg.mediaData.mediaStage != 'RESOLVED') {
|
||||||
// try to resolve media
|
// try to resolve media
|
||||||
await msg.downloadMedia(true, 1);
|
await msg.downloadMedia({
|
||||||
|
downloadEvenIfExpensive: true,
|
||||||
|
rmrReason: 1
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg.mediaData.mediaStage.includes('ERROR')) {
|
if (msg.mediaData.mediaStage.includes('ERROR') || msg.mediaData.mediaStage === 'FETCHING') {
|
||||||
// media could not be downloaded
|
// media could not be downloaded
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const mediaUrl = msg.clientUrl || msg.deprecatedMms3Url;
|
try {
|
||||||
|
const decryptedMedia = await window.Store.DownloadManager.downloadAndMaybeDecrypt({
|
||||||
|
directPath: msg.directPath,
|
||||||
|
encFilehash: msg.encFilehash,
|
||||||
|
filehash: msg.filehash,
|
||||||
|
mediaKey: msg.mediaKey,
|
||||||
|
mediaKeyTimestamp: msg.mediaKeyTimestamp,
|
||||||
|
type: msg.type,
|
||||||
|
signal: (new AbortController).signal
|
||||||
|
});
|
||||||
|
|
||||||
const buffer = await window.WWebJS.downloadBuffer(mediaUrl);
|
const data = await window.WWebJS.arrayBufferToBase64Async(decryptedMedia);
|
||||||
const decrypted = await window.Store.CryptoLib.decryptE2EMedia(msg.type, buffer, msg.mediaKey, msg.mimetype);
|
|
||||||
const data = await window.WWebJS.readBlobAsync(decrypted._blob);
|
|
||||||
|
|
||||||
return {
|
|
||||||
data: data.split(',')[1],
|
|
||||||
mimetype: msg.mimetype,
|
|
||||||
filename: msg.filename
|
|
||||||
};
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
data,
|
||||||
|
mimetype: msg.mimetype,
|
||||||
|
filename: msg.filename,
|
||||||
|
filesize: msg.size
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
if(e.status &amp;&amp; e.status === 404) return undefined;
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
if (!result) return undefined;
|
if (!result) return undefined;
|
||||||
return new MessageMedia(result.mimetype, result.data, result.filename);
|
return new MessageMedia(result.mimetype, result.data, result.filename, result.filesize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes a message from the chat
|
* Deletes a message from the chat
|
||||||
* @param {?boolean} everyone If true and the message is sent by the current user, will delete it for everyone in the chat.
|
* @param {?boolean} everyone If true and the message is sent by the current user or the user is an admin, will delete it for everyone in the chat.
|
||||||
*/
|
*/
|
||||||
async delete(everyone) {
|
async delete(everyone) {
|
||||||
await this.client.pupPage.evaluate((msgId, everyone) => {
|
await this.client.pupPage.evaluate((msgId, everyone) => {
|
||||||
let msg = window.Store.Msg.get(msgId);
|
let msg = window.Store.Msg.get(msgId);
|
||||||
|
|
||||||
if (everyone &amp;&amp; msg.id.fromMe &amp;&amp; msg.canRevoke()) {
|
const canRevoke = window.Store.MsgActionChecks.canSenderRevokeMsg(msg) || window.Store.MsgActionChecks.canAdminRevokeMsg(msg);
|
||||||
return window.Store.Cmd.sendRevokeMsgs(msg.chat, [msg], true);
|
if (everyone &amp;&amp; canRevoke) {
|
||||||
|
return window.Store.Cmd.sendRevokeMsgs(msg.chat, [msg], { type: msg.id.fromMe ? 'Sender' : 'Admin' });
|
||||||
}
|
}
|
||||||
|
|
||||||
return window.Store.Cmd.sendDeleteMsgs(msg.chat, [msg], true);
|
return window.Store.Cmd.sendDeleteMsgs(msg.chat, [msg], true);
|
||||||
@@ -325,8 +486,8 @@ class Message extends Base {
|
|||||||
await this.client.pupPage.evaluate((msgId) => {
|
await this.client.pupPage.evaluate((msgId) => {
|
||||||
let msg = window.Store.Msg.get(msgId);
|
let msg = window.Store.Msg.get(msgId);
|
||||||
|
|
||||||
if (msg.canStar()) {
|
if (window.Store.MsgActionChecks.canStarMsg(msg)) {
|
||||||
return msg.chat.sendStarMsgs([msg], true);
|
return window.Store.Cmd.sendStarMsgs(msg.chat, [msg], false);
|
||||||
}
|
}
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
}
|
}
|
||||||
@@ -338,8 +499,8 @@ class Message extends Base {
|
|||||||
await this.client.pupPage.evaluate((msgId) => {
|
await this.client.pupPage.evaluate((msgId) => {
|
||||||
let msg = window.Store.Msg.get(msgId);
|
let msg = window.Store.Msg.get(msgId);
|
||||||
|
|
||||||
if (msg.canStar()) {
|
if (window.Store.MsgActionChecks.canStarMsg(msg)) {
|
||||||
return msg.chat.sendStarMsgs([msg], false);
|
return window.Store.Cmd.sendUnstarMsgs(msg.chat, [msg], false);
|
||||||
}
|
}
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
}
|
}
|
||||||
@@ -362,17 +523,43 @@ class Message extends Base {
|
|||||||
async getInfo() {
|
async getInfo() {
|
||||||
const info = await this.client.pupPage.evaluate(async (msgId) => {
|
const info = await this.client.pupPage.evaluate(async (msgId) => {
|
||||||
const msg = window.Store.Msg.get(msgId);
|
const msg = window.Store.Msg.get(msgId);
|
||||||
if(!msg) return null;
|
if (!msg) return null;
|
||||||
|
|
||||||
return await window.Store.Wap.queryMsgInfo(msg.id);
|
return await window.Store.MessageInfo.sendQueryMsgInfo(msg.id);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
if(info.status) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the order associated with a given message
|
||||||
|
* @return {Promise&lt;Order>}
|
||||||
|
*/
|
||||||
|
async getOrder() {
|
||||||
|
if (this.type === MessageTypes.ORDER) {
|
||||||
|
const result = await this.client.pupPage.evaluate((orderId, token, chatId) => {
|
||||||
|
return window.WWebJS.getOrderDetail(orderId, token, chatId);
|
||||||
|
}, this.orderId, this.token, this._getChatId());
|
||||||
|
if (!result) return undefined;
|
||||||
|
return new Order(this.client, result);
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets the payment details associated with a given message
|
||||||
|
* @return {Promise&lt;Payment>}
|
||||||
|
*/
|
||||||
|
async getPayment() {
|
||||||
|
if (this.type === MessageTypes.PAYMENT) {
|
||||||
|
const msg = await this.client.pupPage.evaluate(async (msgId) => {
|
||||||
|
const msg = window.Store.Msg.get(msgId);
|
||||||
|
if(!msg) return null;
|
||||||
|
return msg.serialize();
|
||||||
|
}, this.id._serialized);
|
||||||
|
return new Payment(this.client, msg);
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Message;
|
module.exports = Message;
|
||||||
@@ -386,7 +573,7 @@ module.exports = Message;
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/MessageMedia.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/MessageMedia.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -34,15 +34,18 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const mime = require('mime');
|
const mime = require('mime');
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
const { URL } = require('url');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Media attached to a message
|
* Media attached to a message
|
||||||
* @param {string} mimetype MIME type of the attachment
|
* @param {string} mimetype MIME type of the attachment
|
||||||
* @param {string} data Base64-encoded data of the file
|
* @param {string} data Base64-encoded data of the file
|
||||||
* @param {?string} filename Document file name
|
* @param {?string} filename Document file name. Value can be null
|
||||||
|
* @param {?number} filesize Document file size in bytes. Value can be null
|
||||||
*/
|
*/
|
||||||
class MessageMedia {
|
class MessageMedia {
|
||||||
constructor(mimetype, data, filename) {
|
constructor(mimetype, data, filename, filesize) {
|
||||||
/**
|
/**
|
||||||
* MIME type of the attachment
|
* MIME type of the attachment
|
||||||
* @type {string}
|
* @type {string}
|
||||||
@@ -56,10 +59,16 @@ class MessageMedia {
|
|||||||
this.data = data;
|
this.data = data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the file (for documents)
|
* Document file name. Value can be null
|
||||||
* @type {?string}
|
* @type {?string}
|
||||||
*/
|
*/
|
||||||
this.filename = filename;
|
this.filename = filename;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document file size in bytes. Value can be null
|
||||||
|
* @type {?number}
|
||||||
|
*/
|
||||||
|
this.filesize = filesize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -74,9 +83,64 @@ class MessageMedia {
|
|||||||
|
|
||||||
return new MessageMedia(mimetype, b64data, filename);
|
return new MessageMedia(mimetype, b64data, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a MessageMedia instance from a URL
|
||||||
|
* @param {string} url
|
||||||
|
* @param {Object} [options]
|
||||||
|
* @param {boolean} [options.unsafeMime=false]
|
||||||
|
* @param {string} [options.filename]
|
||||||
|
* @param {object} [options.client]
|
||||||
|
* @param {object} [options.reqOptions]
|
||||||
|
* @param {number} [options.reqOptions.size=0]
|
||||||
|
* @returns {Promise&lt;MessageMedia>}
|
||||||
|
*/
|
||||||
|
static async fromUrl(url, options = {}) {
|
||||||
|
const pUrl = new URL(url);
|
||||||
|
let mimetype = mime.getType(pUrl.pathname);
|
||||||
|
|
||||||
|
if (!mimetype &amp;&amp; !options.unsafeMime)
|
||||||
|
throw new Error('Unable to determine MIME type using URL. Set unsafeMime to true to download it anyway.');
|
||||||
|
|
||||||
|
async function fetchData (url, options) {
|
||||||
|
const reqOptions = Object.assign({ headers: { accept: 'image/* video/* text/* audio/*' } }, options);
|
||||||
|
const response = await fetch(url, reqOptions);
|
||||||
|
const mime = response.headers.get('Content-Type');
|
||||||
|
const size = response.headers.get('Content-Length');
|
||||||
|
|
||||||
|
const contentDisposition = response.headers.get('Content-Disposition');
|
||||||
|
const name = contentDisposition ? contentDisposition.match(/((?&lt;=filename=")(.*)(?="))/) : null;
|
||||||
|
|
||||||
|
let data = '';
|
||||||
|
if (response.buffer) {
|
||||||
|
data = (await response.buffer()).toString('base64');
|
||||||
|
} else {
|
||||||
|
const bArray = new Uint8Array(await response.arrayBuffer());
|
||||||
|
bArray.forEach((b) => {
|
||||||
|
data += String.fromCharCode(b);
|
||||||
|
});
|
||||||
|
data = btoa(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { data, mime, name, size };
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = options.client
|
||||||
|
? (await options.client.pupPage.evaluate(fetchData, url, options.reqOptions))
|
||||||
|
: (await fetchData(url, options.reqOptions));
|
||||||
|
|
||||||
|
const filename = options.filename ||
|
||||||
|
(res.name ? res.name[0] : (pUrl.pathname.split('/').pop() || 'file'));
|
||||||
|
|
||||||
|
if (!mimetype)
|
||||||
|
mimetype = res.mime;
|
||||||
|
|
||||||
|
return new MessageMedia(mimetype, res.data, filename, res.size || null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = MessageMedia;</code></pre>
|
module.exports = MessageMedia;
|
||||||
|
</code></pre>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -86,7 +150,7 @@ module.exports = MessageMedia;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
105
docs/structures_Order.js.html
Normal file
105
docs/structures_Order.js.html
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Order.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: structures/Order.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const Base = require('./Base');
|
||||||
|
const Product = require('./Product');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Order on WhatsApp
|
||||||
|
* @extends {Base}
|
||||||
|
*/
|
||||||
|
class Order extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/**
|
||||||
|
* List of products
|
||||||
|
* @type {Array&lt;Product>}
|
||||||
|
*/
|
||||||
|
if (data.products) {
|
||||||
|
this.products = data.products.map(product => new Product(this.client, product));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Order Subtotal
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.subtotal = data.subtotal;
|
||||||
|
/**
|
||||||
|
* Order Total
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.total = data.total;
|
||||||
|
/**
|
||||||
|
* Order Currency
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.currency = data.currency;
|
||||||
|
/**
|
||||||
|
* Order Created At
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.createdAt = data.createdAt;
|
||||||
|
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Order;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
133
docs/structures_Payment.js.html
Normal file
133
docs/structures_Payment.js.html
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Payment.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: structures/Payment.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>const Base = require('./Base');
|
||||||
|
|
||||||
|
class Payment extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/**
|
||||||
|
* The payment Id
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.id = data.id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The payment currency
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.paymentCurrency = data.paymentCurrency;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The payment ammount ( R$ 1.00 = 1000 )
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.paymentAmount1000 = data.paymentAmount1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The payment receiver
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.paymentMessageReceiverJid = data.paymentMessageReceiverJid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The payment transaction timestamp
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.paymentTransactionTimestamp = data.paymentTransactionTimestamp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The paymentStatus
|
||||||
|
*
|
||||||
|
* Possible Status
|
||||||
|
* 0:UNKNOWN_STATUS
|
||||||
|
* 1:PROCESSING
|
||||||
|
* 2:SENT
|
||||||
|
* 3:NEED_TO_ACCEPT
|
||||||
|
* 4:COMPLETE
|
||||||
|
* 5:COULD_NOT_COMPLETE
|
||||||
|
* 6:REFUNDED
|
||||||
|
* 7:EXPIRED
|
||||||
|
* 8:REJECTED
|
||||||
|
* 9:CANCELLED
|
||||||
|
* 10:WAITING_FOR_PAYER
|
||||||
|
* 11:WAITING
|
||||||
|
*
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.paymentStatus = data.paymentStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integer that represents the payment Text
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.paymentTxnStatus = data.paymentTxnStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The note sent with the payment
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.paymentNote = !data.paymentNoteMsg ? undefined : data.paymentNoteMsg.body ? data.paymentNoteMsg.body : undefined ;
|
||||||
|
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Payment;
|
||||||
|
</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/PrivateChat.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/PrivateChat.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -51,7 +51,7 @@ module.exports = PrivateChat;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: structures/PrivateContact.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: structures/PrivateContact.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -51,7 +51,7 @@ module.exports = PrivateContact;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
121
docs/structures_Product.js.html
Normal file
121
docs/structures_Product.js.html
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Product.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: structures/Product.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const Base = require('./Base');
|
||||||
|
const ProductMetadata = require('./ProductMetadata');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Product on WhatsAppBusiness
|
||||||
|
* @extends {Base}
|
||||||
|
*/
|
||||||
|
class Product extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/**
|
||||||
|
* Product ID
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.id = data.id;
|
||||||
|
/**
|
||||||
|
* Price
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.price = data.price ? data.price : '';
|
||||||
|
/**
|
||||||
|
* Product Thumbnail
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.thumbnailUrl = data.thumbnailUrl;
|
||||||
|
/**
|
||||||
|
* Currency
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.currency = data.currency;
|
||||||
|
/**
|
||||||
|
* Product Name
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.name = data.name;
|
||||||
|
/**
|
||||||
|
* Product Quantity
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.quantity = data.quantity;
|
||||||
|
/** Product metadata */
|
||||||
|
this.data = null;
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getData() {
|
||||||
|
if (this.data === null) {
|
||||||
|
let result = await this.client.pupPage.evaluate((productId) => {
|
||||||
|
return window.WWebJS.getProductMetadata(productId);
|
||||||
|
}, this.id);
|
||||||
|
if (!result) {
|
||||||
|
this.data = undefined;
|
||||||
|
} else {
|
||||||
|
this.data = new ProductMetadata(this.client, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Product;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
78
docs/structures_ProductMetadata.js.html
Normal file
78
docs/structures_ProductMetadata.js.html
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: structures/ProductMetadata.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: structures/ProductMetadata.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>const Base = require('./Base');
|
||||||
|
|
||||||
|
class ProductMetadata extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/** Product ID */
|
||||||
|
this.id = data.id;
|
||||||
|
/** Retailer ID */
|
||||||
|
this.retailer_id = data.retailer_id;
|
||||||
|
/** Product Name */
|
||||||
|
this.name = data.name;
|
||||||
|
/** Product Description */
|
||||||
|
this.description = data.description;
|
||||||
|
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = ProductMetadata;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
122
docs/structures_Reaction.js.html
Normal file
122
docs/structures_Reaction.js.html
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>whatsapp-web.js 1.19.5 » Source: structures/Reaction.js</title>
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
|
<link href="css/baseline.css" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="prettyPrint()">
|
||||||
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
|
<div id="jsdoc-navbar-container">
|
||||||
|
<div id="jsdoc-navbar-content">
|
||||||
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div id="jsdoc-body-container">
|
||||||
|
<div id="jsdoc-content">
|
||||||
|
<div id="jsdoc-content-container">
|
||||||
|
<div id="jsdoc-banner" role="banner">
|
||||||
|
</div>
|
||||||
|
<div id="jsdoc-main" role="main">
|
||||||
|
<header class="page-header">
|
||||||
|
<h1>Source: structures/Reaction.js</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
|
const Base = require('./Base');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Reaction on WhatsApp
|
||||||
|
* @extends {Base}
|
||||||
|
*/
|
||||||
|
class Reaction extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/**
|
||||||
|
* Reaction ID
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.id = data.msgKey;
|
||||||
|
/**
|
||||||
|
* Orphan
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.orphan = data.orphan;
|
||||||
|
/**
|
||||||
|
* Orphan reason
|
||||||
|
* @type {?string}
|
||||||
|
*/
|
||||||
|
this.orphanReason = data.orphanReason;
|
||||||
|
/**
|
||||||
|
* Unix timestamp for when the reaction was created
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.timestamp = data.timestamp;
|
||||||
|
/**
|
||||||
|
* Reaction
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.reaction = data.reactionText;
|
||||||
|
/**
|
||||||
|
* Read
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.read = data.read;
|
||||||
|
/**
|
||||||
|
* Message ID
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.msgId = data.parentMsgKey;
|
||||||
|
/**
|
||||||
|
* Sender ID
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.senderId = data.senderUserJid;
|
||||||
|
/**
|
||||||
|
* ACK
|
||||||
|
* @type {?number}
|
||||||
|
*/
|
||||||
|
this.ack = data.ack;
|
||||||
|
|
||||||
|
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Reaction;</code></pre>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
|
<div id="jsdoc-footer-container">
|
||||||
|
<p>
|
||||||
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<script src="scripts/jquery.min.js"></script>
|
||||||
|
<script src="scripts/tree.jquery.js"></script>
|
||||||
|
<script src="scripts/prettify.js"></script>
|
||||||
|
<script src="scripts/jsdoc-toc.js"></script>
|
||||||
|
<script src="scripts/linenumber.js"></script>
|
||||||
|
<script src="scripts/scrollanchor.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: util/Constants.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: util/Constants.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -38,14 +38,13 @@ exports.DefaultOptions = {
|
|||||||
headless: true,
|
headless: true,
|
||||||
defaultViewport: null
|
defaultViewport: null
|
||||||
},
|
},
|
||||||
session: false,
|
authTimeoutMs: 0,
|
||||||
qrTimeoutMs: 45000,
|
qrMaxRetries: 0,
|
||||||
qrRefreshIntervalMs: 20000,
|
|
||||||
authTimeoutMs: 45000,
|
|
||||||
takeoverOnConflict: false,
|
takeoverOnConflict: false,
|
||||||
takeoverTimeoutMs: 0,
|
takeoverTimeoutMs: 0,
|
||||||
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',
|
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36',
|
||||||
ffmpegPath: 'ffmpeg'
|
ffmpegPath: 'ffmpeg',
|
||||||
|
bypassCSP: false
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -73,14 +72,18 @@ exports.Events = {
|
|||||||
MESSAGE_REVOKED_EVERYONE: 'message_revoke_everyone',
|
MESSAGE_REVOKED_EVERYONE: 'message_revoke_everyone',
|
||||||
MESSAGE_REVOKED_ME: 'message_revoke_me',
|
MESSAGE_REVOKED_ME: 'message_revoke_me',
|
||||||
MESSAGE_ACK: 'message_ack',
|
MESSAGE_ACK: 'message_ack',
|
||||||
|
MESSAGE_REACTION: 'message_reaction',
|
||||||
MEDIA_UPLOADED: 'media_uploaded',
|
MEDIA_UPLOADED: 'media_uploaded',
|
||||||
GROUP_JOIN: 'group_join',
|
GROUP_JOIN: 'group_join',
|
||||||
GROUP_LEAVE: 'group_leave',
|
GROUP_LEAVE: 'group_leave',
|
||||||
GROUP_UPDATE: 'group_update',
|
GROUP_UPDATE: 'group_update',
|
||||||
QR_RECEIVED: 'qr',
|
QR_RECEIVED: 'qr',
|
||||||
|
LOADING_SCREEN: 'loading_screen',
|
||||||
DISCONNECTED: 'disconnected',
|
DISCONNECTED: 'disconnected',
|
||||||
STATE_CHANGED: 'change_state',
|
STATE_CHANGED: 'change_state',
|
||||||
BATTERY_CHANGED: 'change_battery'
|
BATTERY_CHANGED: 'change_battery',
|
||||||
|
INCOMING_CALL: 'call',
|
||||||
|
REMOTE_SESSION_SAVED: 'remote_session_saved'
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -99,8 +102,31 @@ exports.MessageTypes = {
|
|||||||
LOCATION: 'location',
|
LOCATION: 'location',
|
||||||
CONTACT_CARD: 'vcard',
|
CONTACT_CARD: 'vcard',
|
||||||
CONTACT_CARD_MULTI: 'multi_vcard',
|
CONTACT_CARD_MULTI: 'multi_vcard',
|
||||||
|
ORDER: 'order',
|
||||||
REVOKED: 'revoked',
|
REVOKED: 'revoked',
|
||||||
UNKNOWN: 'unknown'
|
PRODUCT: 'product',
|
||||||
|
UNKNOWN: 'unknown',
|
||||||
|
GROUP_INVITE: 'groups_v4_invite',
|
||||||
|
LIST: 'list',
|
||||||
|
LIST_RESPONSE: 'list_response',
|
||||||
|
BUTTONS_RESPONSE: 'buttons_response',
|
||||||
|
PAYMENT: 'payment',
|
||||||
|
BROADCAST_NOTIFICATION: 'broadcast_notification',
|
||||||
|
CALL_LOG: 'call_log',
|
||||||
|
CIPHERTEXT: 'ciphertext',
|
||||||
|
DEBUG: 'debug',
|
||||||
|
E2E_NOTIFICATION: 'e2e_notification',
|
||||||
|
GP2: 'gp2',
|
||||||
|
GROUP_NOTIFICATION: 'group_notification',
|
||||||
|
HSM: 'hsm',
|
||||||
|
INTERACTIVE: 'interactive',
|
||||||
|
NATIVE_FLOW: 'native_flow',
|
||||||
|
NOTIFICATION: 'notification',
|
||||||
|
NOTIFICATION_TEMPLATE: 'notification_template',
|
||||||
|
OVERSIZED: 'oversized',
|
||||||
|
PROTOCOL: 'protocol',
|
||||||
|
REACTION: 'reaction',
|
||||||
|
TEMPLATE_BUTTON_REPLY: 'template_button_reply',
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -174,7 +200,7 @@ exports.MessageAck = {
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: util/InterfaceController.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: util/InterfaceController.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -46,7 +46,8 @@ class InterfaceController {
|
|||||||
*/
|
*/
|
||||||
async openChatWindow(chatId) {
|
async openChatWindow(chatId) {
|
||||||
await this.pupPage.evaluate(async chatId => {
|
await this.pupPage.evaluate(async chatId => {
|
||||||
let chat = await window.Store.Chat.get(chatId);
|
let chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
let chat = await window.Store.Chat.find(chatWid);
|
||||||
await window.Store.Cmd.openChatAt(chat);
|
await window.Store.Cmd.openChatAt(chat);
|
||||||
}, chatId);
|
}, chatId);
|
||||||
}
|
}
|
||||||
@@ -58,7 +59,7 @@ class InterfaceController {
|
|||||||
async openChatDrawer(chatId) {
|
async openChatDrawer(chatId) {
|
||||||
await this.pupPage.evaluate(async chatId => {
|
await this.pupPage.evaluate(async chatId => {
|
||||||
let chat = await window.Store.Chat.get(chatId);
|
let chat = await window.Store.Chat.get(chatId);
|
||||||
await window.Store.Cmd.chatInfoDrawer(chat);
|
await window.Store.Cmd.openDrawerMid(chat);
|
||||||
}, chatId);
|
}, chatId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,9 +105,56 @@ class InterfaceController {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all Features
|
||||||
|
*/
|
||||||
|
async getFeatures() {
|
||||||
|
return await this.pupPage.evaluate(() => {
|
||||||
|
if(!window.Store.Features) throw new Error('This version of Whatsapp Web does not support features');
|
||||||
|
return window.Store.Features.F;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if Feature is enabled
|
||||||
|
* @param {string} feature status to check
|
||||||
|
*/
|
||||||
|
async checkFeatureStatus(feature) {
|
||||||
|
return await this.pupPage.evaluate((feature) => {
|
||||||
|
if(!window.Store.Features) throw new Error('This version of Whatsapp Web does not support features');
|
||||||
|
return window.Store.Features.supportsFeature(feature);
|
||||||
|
}, feature);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable Features
|
||||||
|
* @param {string[]} features to be enabled
|
||||||
|
*/
|
||||||
|
async enableFeatures(features) {
|
||||||
|
await this.pupPage.evaluate((features) => {
|
||||||
|
if(!window.Store.Features) throw new Error('This version of Whatsapp Web does not support features');
|
||||||
|
for (const feature in features) {
|
||||||
|
window.Store.Features.setFeature(features[feature], true);
|
||||||
|
}
|
||||||
|
}, features);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable Features
|
||||||
|
* @param {string[]} features to be disabled
|
||||||
|
*/
|
||||||
|
async disableFeatures(features) {
|
||||||
|
await this.pupPage.evaluate((features) => {
|
||||||
|
if(!window.Store.Features) throw new Error('This version of Whatsapp Web does not support features');
|
||||||
|
for (const feature in features) {
|
||||||
|
window.Store.Features.setFeature(features[feature], false);
|
||||||
|
}
|
||||||
|
}, features);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = InterfaceController;</code></pre>
|
module.exports = InterfaceController;
|
||||||
|
</code></pre>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -116,7 +164,7 @@ module.exports = InterfaceController;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta name="generator" content="JSDoc 3.6.6">
|
<meta name="generator" content="JSDoc 3.6.7">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>whatsapp-web.js 1.12.5 » Source: util/Util.js</title>
|
<title>whatsapp-web.js 1.19.5 » Source: util/Util.js</title>
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
||||||
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
||||||
<div id="jsdoc-navbar-container">
|
<div id="jsdoc-navbar-container">
|
||||||
<div id="jsdoc-navbar-content">
|
<div id="jsdoc-navbar-content">
|
||||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>12.<wbr>5</a>
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>19.<wbr>5</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -31,24 +31,32 @@
|
|||||||
<article>
|
<article>
|
||||||
<pre class="prettyprint linenums"><code>'use strict';
|
<pre class="prettyprint linenums"><code>'use strict';
|
||||||
|
|
||||||
const sharp = require('sharp');
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const Crypto = require('crypto');
|
const Crypto = require('crypto');
|
||||||
const { tmpdir } = require('os');
|
const { tmpdir } = require('os');
|
||||||
const ffmpeg = require('fluent-ffmpeg');
|
const ffmpeg = require('fluent-ffmpeg');
|
||||||
|
const webp = require('node-webpmux');
|
||||||
const fs = require('fs').promises;
|
const fs = require('fs').promises;
|
||||||
|
|
||||||
const has = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
const has = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility methods
|
* Utility methods
|
||||||
*/
|
*/
|
||||||
class Util {
|
class Util {
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
throw new Error(`The ${this.constructor.name} class may not be instantiated.`);
|
throw new Error(`The ${this.constructor.name} class may not be instantiated.`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static generateHash(length) {
|
||||||
|
var result = '';
|
||||||
|
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
|
var charactersLength = characters.length;
|
||||||
|
for (var i = 0; i &lt; length; i++) {
|
||||||
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets default properties on an object that aren't already specified.
|
* Sets default properties on an object that aren't already specified.
|
||||||
* @param {Object} def Default properties
|
* @param {Object} def Default properties
|
||||||
@@ -75,7 +83,7 @@ class Util {
|
|||||||
*
|
*
|
||||||
* @returns {Promise&lt;MessageMedia>} media in webp format
|
* @returns {Promise&lt;MessageMedia>} media in webp format
|
||||||
*/
|
*/
|
||||||
static async formatImageToWebpSticker(media) {
|
static async formatImageToWebpSticker(media, pupPage) {
|
||||||
if (!media.mimetype.includes('image'))
|
if (!media.mimetype.includes('image'))
|
||||||
throw new Error('media is not a image');
|
throw new Error('media is not a image');
|
||||||
|
|
||||||
@@ -83,23 +91,9 @@ class Util {
|
|||||||
return media;
|
return media;
|
||||||
}
|
}
|
||||||
|
|
||||||
const buff = Buffer.from(media.data, 'base64');
|
return pupPage.evaluate((media) => {
|
||||||
|
return window.WWebJS.toStickerData(media);
|
||||||
let sharpImg = sharp(buff);
|
}, media);
|
||||||
sharpImg = sharpImg.webp();
|
|
||||||
|
|
||||||
sharpImg = sharpImg.resize(512, 512, {
|
|
||||||
fit: 'contain',
|
|
||||||
background: { r: 0, g: 0, b: 0, alpha: 0 },
|
|
||||||
});
|
|
||||||
|
|
||||||
let webpBase64 = (await sharpImg.toBuffer()).toString('base64');
|
|
||||||
|
|
||||||
return {
|
|
||||||
mimetype: 'image/webp',
|
|
||||||
data: webpBase64,
|
|
||||||
filename: media.filename,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -166,16 +160,49 @@ class Util {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sticker metadata.
|
||||||
|
* @typedef {Object} StickerMetadata
|
||||||
|
* @property {string} [name]
|
||||||
|
* @property {string} [author]
|
||||||
|
* @property {string[]} [categories]
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats a media to webp
|
* Formats a media to webp
|
||||||
* @param {MessageMedia} media
|
* @param {MessageMedia} media
|
||||||
|
* @param {StickerMetadata} metadata
|
||||||
*
|
*
|
||||||
* @returns {Promise&lt;MessageMedia>} media in webp format
|
* @returns {Promise&lt;MessageMedia>} media in webp format
|
||||||
*/
|
*/
|
||||||
static async formatToWebpSticker(media) {
|
static async formatToWebpSticker(media, metadata, pupPage) {
|
||||||
if (media.mimetype.includes('image')) return this.formatImageToWebpSticker(media);
|
let webpMedia;
|
||||||
else if (media.mimetype.includes('video')) return this.formatVideoToWebpSticker(media);
|
|
||||||
else throw new Error('Invalid media format');
|
if (media.mimetype.includes('image'))
|
||||||
|
webpMedia = await this.formatImageToWebpSticker(media, pupPage);
|
||||||
|
else if (media.mimetype.includes('video'))
|
||||||
|
webpMedia = await this.formatVideoToWebpSticker(media);
|
||||||
|
else
|
||||||
|
throw new Error('Invalid media format');
|
||||||
|
|
||||||
|
if (metadata.name || metadata.author) {
|
||||||
|
const img = new webp.Image();
|
||||||
|
const hash = this.generateHash(32);
|
||||||
|
const stickerPackId = hash;
|
||||||
|
const packname = metadata.name;
|
||||||
|
const author = metadata.author;
|
||||||
|
const categories = metadata.categories || [''];
|
||||||
|
const json = { 'sticker-pack-id': stickerPackId, 'sticker-pack-name': packname, 'sticker-pack-publisher': author, 'emojis': categories };
|
||||||
|
let exifAttr = Buffer.from([0x49, 0x49, 0x2A, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x57, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00]);
|
||||||
|
let jsonBuffer = Buffer.from(JSON.stringify(json), 'utf8');
|
||||||
|
let exif = Buffer.concat([exifAttr, jsonBuffer]);
|
||||||
|
exif.writeUIntLE(jsonBuffer.length, 14, 4);
|
||||||
|
await img.load(Buffer.from(webpMedia.data, 'base64'));
|
||||||
|
img.exif = exif;
|
||||||
|
webpMedia.data = (await img.save(null)).toString('base64');
|
||||||
|
}
|
||||||
|
|
||||||
|
return webpMedia;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -187,7 +214,8 @@ class Util {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Util;</code></pre>
|
module.exports = Util;
|
||||||
|
</code></pre>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -197,7 +225,7 @@ module.exports = Util;</code></pre>
|
|||||||
<footer id="jsdoc-footer" class="jsdoc-footer">
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
||||||
<div id="jsdoc-footer-container">
|
<div id="jsdoc-footer-container">
|
||||||
<p>
|
<p>
|
||||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.6 on February 25, 2021.
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on March 18, 2023.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
|||||||
111
example.js
111
example.js
@@ -1,35 +1,27 @@
|
|||||||
const fs = require('fs');
|
const { Client, Location, List, Buttons, LocalAuth } = require('./index');
|
||||||
const { Client, Location } = require('./index');
|
|
||||||
|
|
||||||
const SESSION_FILE_PATH = './session.json';
|
const client = new Client({
|
||||||
let sessionCfg;
|
authStrategy: new LocalAuth(),
|
||||||
if (fs.existsSync(SESSION_FILE_PATH)) {
|
puppeteer: { headless: false }
|
||||||
sessionCfg = require(SESSION_FILE_PATH);
|
});
|
||||||
}
|
|
||||||
|
|
||||||
const client = new Client({ puppeteer: { headless: false }, session: sessionCfg });
|
|
||||||
// You can use an existing session and avoid scanning a QR code by adding a "session" object to the client options.
|
|
||||||
// This object must include WABrowserId, WASecretBundle, WAToken1 and WAToken2.
|
|
||||||
|
|
||||||
client.initialize();
|
client.initialize();
|
||||||
|
|
||||||
|
client.on('loading_screen', (percent, message) => {
|
||||||
|
console.log('LOADING SCREEN', percent, message);
|
||||||
|
});
|
||||||
|
|
||||||
client.on('qr', (qr) => {
|
client.on('qr', (qr) => {
|
||||||
// NOTE: This event will not be fired if a session is specified.
|
// NOTE: This event will not be fired if a session is specified.
|
||||||
console.log('QR RECEIVED', qr);
|
console.log('QR RECEIVED', qr);
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('authenticated', (session) => {
|
client.on('authenticated', () => {
|
||||||
console.log('AUTHENTICATED', session);
|
console.log('AUTHENTICATED');
|
||||||
sessionCfg=session;
|
|
||||||
fs.writeFile(SESSION_FILE_PATH, JSON.stringify(session), function (err) {
|
|
||||||
if (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('auth_failure', msg => {
|
client.on('auth_failure', msg => {
|
||||||
// Fired if session restore was unsuccessfull
|
// Fired if session restore was unsuccessful
|
||||||
console.error('AUTHENTICATION FAILURE', msg);
|
console.error('AUTHENTICATION FAILURE', msg);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -117,9 +109,8 @@ client.on('message', async msg => {
|
|||||||
client.sendMessage(msg.from, `
|
client.sendMessage(msg.from, `
|
||||||
*Connection info*
|
*Connection info*
|
||||||
User name: ${info.pushname}
|
User name: ${info.pushname}
|
||||||
My number: ${info.me.user}
|
My number: ${info.wid.user}
|
||||||
Platform: ${info.platform}
|
Platform: ${info.platform}
|
||||||
WhatsApp version: ${info.phone.wa_version}
|
|
||||||
`);
|
`);
|
||||||
} else if (msg.body === '!mediainfo' && msg.hasMedia) {
|
} else if (msg.body === '!mediainfo' && msg.hasMedia) {
|
||||||
const attachmentData = await msg.downloadMedia();
|
const attachmentData = await msg.downloadMedia();
|
||||||
@@ -192,11 +183,20 @@ client.on('message', async msg => {
|
|||||||
const chat = await msg.getChat();
|
const chat = await msg.getChat();
|
||||||
// stops typing or recording in the chat
|
// stops typing or recording in the chat
|
||||||
chat.clearState();
|
chat.clearState();
|
||||||
} else if (msg.body === 'jumpto') {
|
} else if (msg.body === '!jumpto') {
|
||||||
if (msg.hasQuotedMsg) {
|
if (msg.hasQuotedMsg) {
|
||||||
const quotedMsg = await msg.getQuotedMessage();
|
const quotedMsg = await msg.getQuotedMessage();
|
||||||
client.interface.openChatWindowAt(quotedMsg.id._serialized);
|
client.interface.openChatWindowAt(quotedMsg.id._serialized);
|
||||||
}
|
}
|
||||||
|
} else if (msg.body === '!buttons') {
|
||||||
|
let button = new Buttons('Button body', [{ body: 'bt1' }, { body: 'bt2' }, { body: 'bt3' }], 'title', 'footer');
|
||||||
|
client.sendMessage(msg.from, button);
|
||||||
|
} else if (msg.body === '!list') {
|
||||||
|
let sections = [{ title: 'sectionTitle', rows: [{ title: 'ListItem1', description: 'desc' }, { title: 'ListItem2' }] }];
|
||||||
|
let list = new List('List body', 'btnText', sections, 'Title', 'footer');
|
||||||
|
client.sendMessage(msg.from, list);
|
||||||
|
} else if (msg.body === '!reaction') {
|
||||||
|
msg.react('👍');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -231,7 +231,7 @@ client.on('message_ack', (msg, ack) => {
|
|||||||
ACK_PLAYED: 4
|
ACK_PLAYED: 4
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(ack == 3) {
|
if (ack == 3) {
|
||||||
// The message was read
|
// The message was read
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -253,13 +253,68 @@ client.on('group_update', (notification) => {
|
|||||||
console.log('update', notification);
|
console.log('update', notification);
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('change_battery', (batteryInfo) => {
|
client.on('change_state', state => {
|
||||||
// Battery percentage for attached device has changed
|
console.log('CHANGE STATE', state);
|
||||||
const { battery, plugged } = batteryInfo;
|
});
|
||||||
console.log(`Battery: ${battery}% - Charging? ${plugged}`);
|
|
||||||
|
// Change to false if you don't want to reject incoming calls
|
||||||
|
let rejectCalls = true;
|
||||||
|
|
||||||
|
client.on('call', async (call) => {
|
||||||
|
console.log('Call received, rejecting. GOTO Line 261 to disable', call);
|
||||||
|
if (rejectCalls) await call.reject();
|
||||||
|
await client.sendMessage(call.from, `[${call.fromMe ? 'Outgoing' : 'Incoming'}] Phone call from ${call.from}, type ${call.isGroup ? 'group' : ''} ${call.isVideo ? 'video' : 'audio'} call. ${rejectCalls ? 'This call was automatically rejected by the script.' : ''}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('disconnected', (reason) => {
|
client.on('disconnected', (reason) => {
|
||||||
console.log('Client was logged out', reason);
|
console.log('Client was logged out', reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
client.on('contact_changed', async (message, oldId, newId, isContact) => {
|
||||||
|
/** The time the event occurred. */
|
||||||
|
const eventTime = (new Date(message.timestamp * 1000)).toLocaleString();
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`The contact ${oldId.slice(0, -5)}` +
|
||||||
|
`${!isContact ? ' that participates in group ' +
|
||||||
|
`${(await client.getChatById(message.to ?? message.from)).name} ` : ' '}` +
|
||||||
|
`changed their phone number\nat ${eventTime}.\n` +
|
||||||
|
`Their new phone number is ${newId.slice(0, -5)}.\n`);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information about the {@name message}:
|
||||||
|
*
|
||||||
|
* 1. If a notification was emitted due to a group participant changing their phone number:
|
||||||
|
* {@name message.author} is a participant's id before the change.
|
||||||
|
* {@name message.recipients[0]} is a participant's id after the change (a new one).
|
||||||
|
*
|
||||||
|
* 1.1 If the contact who changed their number WAS in the current user's contact list at the time of the change:
|
||||||
|
* {@name message.to} is a group chat id the event was emitted in.
|
||||||
|
* {@name message.from} is a current user's id that got an notification message in the group.
|
||||||
|
* Also the {@name message.fromMe} is TRUE.
|
||||||
|
*
|
||||||
|
* 1.2 Otherwise:
|
||||||
|
* {@name message.from} is a group chat id the event was emitted in.
|
||||||
|
* {@name message.to} is @type {undefined}.
|
||||||
|
* Also {@name message.fromMe} is FALSE.
|
||||||
|
*
|
||||||
|
* 2. If a notification was emitted due to a contact changing their phone number:
|
||||||
|
* {@name message.templateParams} is an array of two user's ids:
|
||||||
|
* the old (before the change) and a new one, stored in alphabetical order.
|
||||||
|
* {@name message.from} is a current user's id that has a chat with a user,
|
||||||
|
* whos phone number was changed.
|
||||||
|
* {@name message.to} is a user's id (after the change), the current user has a chat with.
|
||||||
|
*/
|
||||||
|
});
|
||||||
|
|
||||||
|
client.on('group_admin_changed', (notification) => {
|
||||||
|
if (notification.type === 'promote') {
|
||||||
|
/**
|
||||||
|
* Emitted when a current user is promoted to an admin.
|
||||||
|
* {@link notification.author} is a user who performs the action of promoting/demoting the current user.
|
||||||
|
*/
|
||||||
|
console.log(`You were promoted by ${notification.author}`);
|
||||||
|
} else if (notification.type === 'demote')
|
||||||
|
/** Emitted when a current user is demoted to a regular user. */
|
||||||
|
console.log(`You were demoted by ${notification.author}`);
|
||||||
|
});
|
||||||
|
|||||||
618
index.d.ts
vendored
618
index.d.ts
vendored
@@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
import { EventEmitter } from 'events'
|
import { EventEmitter } from 'events'
|
||||||
import puppeteer = require('puppeteer')
|
import { RequestInit } from 'node-fetch'
|
||||||
|
import * as puppeteer from 'puppeteer'
|
||||||
|
|
||||||
declare namespace WAWebJS {
|
declare namespace WAWebJS {
|
||||||
|
|
||||||
@@ -19,6 +20,9 @@ declare namespace WAWebJS {
|
|||||||
/**Accepts an invitation to join a group */
|
/**Accepts an invitation to join a group */
|
||||||
acceptInvite(inviteCode: string): Promise<string>
|
acceptInvite(inviteCode: string): Promise<string>
|
||||||
|
|
||||||
|
/** Accepts a private invitation to join a group (v4 invite) */
|
||||||
|
acceptGroupV4Invite: (inviteV4: InviteV4Data) => Promise<{status: number}>
|
||||||
|
|
||||||
/**Returns an object with information about the invite code's group */
|
/**Returns an object with information about the invite code's group */
|
||||||
getInviteInfo(inviteCode: string): Promise<object>
|
getInviteInfo(inviteCode: string): Promise<object>
|
||||||
|
|
||||||
@@ -44,6 +48,9 @@ declare namespace WAWebJS {
|
|||||||
/** Logs out the client, closing the current session */
|
/** Logs out the client, closing the current session */
|
||||||
logout(): Promise<void>
|
logout(): Promise<void>
|
||||||
|
|
||||||
|
/** Get all blocked contacts by host account */
|
||||||
|
getBlockedContacts(): Promise<Contact[]>
|
||||||
|
|
||||||
/** Get chat instance by ID */
|
/** Get chat instance by ID */
|
||||||
getChatById(chatId: string): Promise<Chat>
|
getChatById(chatId: string): Promise<Chat>
|
||||||
|
|
||||||
@@ -56,6 +63,12 @@ declare namespace WAWebJS {
|
|||||||
/** Get all current contact instances */
|
/** Get all current contact instances */
|
||||||
getContacts(): Promise<Contact[]>
|
getContacts(): Promise<Contact[]>
|
||||||
|
|
||||||
|
/** Get the country code of a WhatsApp ID. (154185968@c.us) => (1) */
|
||||||
|
getCountryCode(number: string): Promise<string>
|
||||||
|
|
||||||
|
/** Get the formatted number of a WhatsApp ID. (12345678901@c.us) => (+1 (234) 5678-901) */
|
||||||
|
getFormattedNumber(number: string): Promise<string>
|
||||||
|
|
||||||
/** Get all current Labels */
|
/** Get all current Labels */
|
||||||
getLabels(): Promise<Label[]>
|
getLabels(): Promise<Label[]>
|
||||||
|
|
||||||
@@ -71,6 +84,9 @@ declare namespace WAWebJS {
|
|||||||
/** Returns the contact ID's profile picture URL, if privacy settings allow it */
|
/** Returns the contact ID's profile picture URL, if privacy settings allow it */
|
||||||
getProfilePicUrl(contactId: string): Promise<string>
|
getProfilePicUrl(contactId: string): Promise<string>
|
||||||
|
|
||||||
|
/** Gets the Contact's common groups with you. Returns empty array if you don't have any common group. */
|
||||||
|
getCommonGroups(contactId: string): Promise<ChatId[]>
|
||||||
|
|
||||||
/** Gets the current connection state for the client */
|
/** Gets the current connection state for the client */
|
||||||
getState(): Promise<WAState>
|
getState(): Promise<WAState>
|
||||||
|
|
||||||
@@ -87,11 +103,11 @@ declare namespace WAWebJS {
|
|||||||
getNumberId(number: string): Promise<ContactId | null>
|
getNumberId(number: string): Promise<ContactId | null>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mutes the Chat until a specified date
|
* Mutes this chat forever, unless a date is specified
|
||||||
* @param chatId ID of the chat that will be muted
|
* @param chatId ID of the chat that will be muted
|
||||||
* @param unmuteDate Date when the chat will be unmuted
|
* @param unmuteDate Date when the chat will be unmuted, leave as is to mute forever
|
||||||
*/
|
*/
|
||||||
muteChat(chatId: string, unmuteDate: Date): Promise<void>
|
muteChat(chatId: string, unmuteDate?: Date): Promise<void>
|
||||||
|
|
||||||
/** Force reset of connection state for the client */
|
/** Force reset of connection state for the client */
|
||||||
resetState(): Promise<void>
|
resetState(): Promise<void>
|
||||||
@@ -99,9 +115,15 @@ declare namespace WAWebJS {
|
|||||||
/** Send a message to a specific chatId */
|
/** Send a message to a specific chatId */
|
||||||
sendMessage(chatId: string, content: MessageContent, options?: MessageSendOptions): Promise<Message>
|
sendMessage(chatId: string, content: MessageContent, options?: MessageSendOptions): Promise<Message>
|
||||||
|
|
||||||
|
/** Searches for messages */
|
||||||
|
searchMessages(query: string, options?: { chatId?: string, page?: number, limit?: number }): Promise<Message[]>
|
||||||
|
|
||||||
/** Marks the client as online */
|
/** Marks the client as online */
|
||||||
sendPresenceAvailable(): Promise<void>
|
sendPresenceAvailable(): Promise<void>
|
||||||
|
|
||||||
|
/** Marks the client as offline */
|
||||||
|
sendPresenceUnavailable(): Promise<void>
|
||||||
|
|
||||||
/** Mark as seen for the Chat */
|
/** Mark as seen for the Chat */
|
||||||
sendSeen(chatId: string): Promise<boolean>
|
sendSeen(chatId: string): Promise<boolean>
|
||||||
|
|
||||||
@@ -118,7 +140,7 @@ declare namespace WAWebJS {
|
|||||||
* Sets the current user's display name
|
* Sets the current user's display name
|
||||||
* @param displayName New display name
|
* @param displayName New display name
|
||||||
*/
|
*/
|
||||||
setDisplayName(displayName: string): Promise<void>
|
setDisplayName(displayName: string): Promise<boolean>
|
||||||
|
|
||||||
/** Changes and returns the archive state of the Chat */
|
/** Changes and returns the archive state of the Chat */
|
||||||
unarchiveChat(chatId: string): Promise<boolean>
|
unarchiveChat(chatId: string): Promise<boolean>
|
||||||
@@ -126,6 +148,12 @@ declare namespace WAWebJS {
|
|||||||
/** Unmutes the Chat */
|
/** Unmutes the Chat */
|
||||||
unmuteChat(chatId: string): Promise<void>
|
unmuteChat(chatId: string): Promise<void>
|
||||||
|
|
||||||
|
/** Sets the current user's profile picture */
|
||||||
|
setProfilePicture(media: MessageMedia): Promise<boolean>
|
||||||
|
|
||||||
|
/** Deletes the current user's profile picture */
|
||||||
|
deleteProfilePicture(): Promise<boolean>
|
||||||
|
|
||||||
/** Generic event */
|
/** Generic event */
|
||||||
on(event: string, listener: (...args: any) => void): this
|
on(event: string, listener: (...args: any) => void): this
|
||||||
|
|
||||||
@@ -134,11 +162,16 @@ declare namespace WAWebJS {
|
|||||||
|
|
||||||
/** Emitted when authentication is successful */
|
/** Emitted when authentication is successful */
|
||||||
on(event: 'authenticated', listener: (
|
on(event: 'authenticated', listener: (
|
||||||
/** Object containing session information. Can be used to restore the session */
|
/**
|
||||||
session: ClientSession
|
* Object containing session information, when using LegacySessionAuth. Can be used to restore the session
|
||||||
|
*/
|
||||||
|
session?: ClientSession
|
||||||
) => void): this
|
) => void): this
|
||||||
|
|
||||||
/** Emitted when the battery percentage for the attached device changes */
|
/**
|
||||||
|
* Emitted when the battery percentage for the attached device changes
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
on(event: 'change_battery', listener: (batteryInfo: BatteryInfo) => void): this
|
on(event: 'change_battery', listener: (batteryInfo: BatteryInfo) => void): this
|
||||||
|
|
||||||
/** Emitted when the connection state changes */
|
/** Emitted when the connection state changes */
|
||||||
@@ -149,8 +182,8 @@ declare namespace WAWebJS {
|
|||||||
|
|
||||||
/** Emitted when the client has been disconnected */
|
/** Emitted when the client has been disconnected */
|
||||||
on(event: 'disconnected', listener: (
|
on(event: 'disconnected', listener: (
|
||||||
/** state that caused the disconnect */
|
/** reason that caused the disconnect */
|
||||||
reason: WAState
|
reason: WAState | "NAVIGATION"
|
||||||
) => void): this
|
) => void): this
|
||||||
|
|
||||||
/** Emitted when a user joins the chat via invite link or is added by an admin */
|
/** Emitted when a user joins the chat via invite link or is added by an admin */
|
||||||
@@ -165,12 +198,30 @@ declare namespace WAWebJS {
|
|||||||
notification: GroupNotification
|
notification: GroupNotification
|
||||||
) => void): this
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when a current user is promoted to an admin or demoted to a regular user */
|
||||||
|
on(event: 'group_admin_changed', listener: (
|
||||||
|
/** GroupNotification with more information about the action */
|
||||||
|
notification: GroupNotification
|
||||||
|
) => void): this
|
||||||
|
|
||||||
/** Emitted when group settings are updated, such as subject, description or picture */
|
/** Emitted when group settings are updated, such as subject, description or picture */
|
||||||
on(event: 'group_update', listener: (
|
on(event: 'group_update', listener: (
|
||||||
/** GroupNotification with more information about the action */
|
/** GroupNotification with more information about the action */
|
||||||
notification: GroupNotification
|
notification: GroupNotification
|
||||||
) => void): this
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when a contact or a group participant changed their phone number. */
|
||||||
|
on(event: 'contact_changed', listener: (
|
||||||
|
/** Message with more information about the event. */
|
||||||
|
message: Message,
|
||||||
|
/** Old user's id. */
|
||||||
|
oldId : String,
|
||||||
|
/** New user's id. */
|
||||||
|
newId : String,
|
||||||
|
/** Indicates if a contact or a group participant changed their phone number. */
|
||||||
|
isContact : Boolean
|
||||||
|
) => void): this
|
||||||
|
|
||||||
/** Emitted when media has been uploaded for a message sent by the client */
|
/** Emitted when media has been uploaded for a message sent by the client */
|
||||||
on(event: 'media_uploaded', listener: (
|
on(event: 'media_uploaded', listener: (
|
||||||
/** The message with media that was uploaded */
|
/** The message with media that was uploaded */
|
||||||
@@ -191,6 +242,12 @@ declare namespace WAWebJS {
|
|||||||
ack: MessageAck
|
ack: MessageAck
|
||||||
) => void): this
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when a chat unread count changes */
|
||||||
|
on(event: 'unread_count', listener: (
|
||||||
|
/** The chat that was affected */
|
||||||
|
chat: Chat
|
||||||
|
) => void): this
|
||||||
|
|
||||||
/** Emitted when a new message is created, which may include the current user's own messages */
|
/** Emitted when a new message is created, which may include the current user's own messages */
|
||||||
on(event: 'message_create', listener: (
|
on(event: 'message_create', listener: (
|
||||||
/** The message that was created */
|
/** The message that was created */
|
||||||
@@ -214,6 +271,31 @@ declare namespace WAWebJS {
|
|||||||
message: Message
|
message: Message
|
||||||
) => void): this
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when a reaction is sent, received, updated or removed */
|
||||||
|
on(event: 'message_reaction', listener: (
|
||||||
|
/** The reaction object */
|
||||||
|
reaction: Reaction
|
||||||
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when a chat is removed */
|
||||||
|
on(event: 'chat_removed', listener: (
|
||||||
|
/** The chat that was removed */
|
||||||
|
chat: Chat
|
||||||
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when a chat is archived/unarchived */
|
||||||
|
on(event: 'chat_archived', listener: (
|
||||||
|
/** The chat that was archived/unarchived */
|
||||||
|
chat: Chat,
|
||||||
|
/** State the chat is currently in */
|
||||||
|
currState: boolean,
|
||||||
|
/** State the chat was previously in */
|
||||||
|
prevState: boolean
|
||||||
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when loading screen is appearing */
|
||||||
|
on(event: 'loading_screen', listener: (percent: string, message: string) => void): this
|
||||||
|
|
||||||
/** Emitted when the QR code is received */
|
/** Emitted when the QR code is received */
|
||||||
on(event: 'qr', listener: (
|
on(event: 'qr', listener: (
|
||||||
/** qr code string
|
/** qr code string
|
||||||
@@ -221,8 +303,17 @@ declare namespace WAWebJS {
|
|||||||
qr: string
|
qr: string
|
||||||
) => void): this
|
) => void): this
|
||||||
|
|
||||||
|
/** Emitted when a call is received */
|
||||||
|
on(event: 'call', listener: (
|
||||||
|
/** The call that started */
|
||||||
|
call: Call
|
||||||
|
) => void): this
|
||||||
|
|
||||||
/** Emitted when the client has initialized and is ready to receive messages */
|
/** Emitted when the client has initialized and is ready to receive messages */
|
||||||
on(event: 'ready', listener: () => void): this
|
on(event: 'ready', listener: () => void): this
|
||||||
|
|
||||||
|
/** Emitted when the RemoteAuth session is saved successfully on the external Database */
|
||||||
|
on(event: 'remote_session_saved', listener: () => void): this
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Current connection information */
|
/** Current connection information */
|
||||||
@@ -234,7 +325,10 @@ declare namespace WAWebJS {
|
|||||||
me: ContactId
|
me: ContactId
|
||||||
/** Current user ID */
|
/** Current user ID */
|
||||||
wid: ContactId
|
wid: ContactId
|
||||||
/** Information about the phone this client is connected to */
|
/**
|
||||||
|
* Information about the phone this client is connected to. Not available in multi-device.
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
phone: ClientInfoPhone
|
phone: ClientInfoPhone
|
||||||
/** Platform the phone is running on */
|
/** Platform the phone is running on */
|
||||||
platform: string
|
platform: string
|
||||||
@@ -245,7 +339,10 @@ declare namespace WAWebJS {
|
|||||||
getBatteryStatus: () => Promise<BatteryInfo>
|
getBatteryStatus: () => Promise<BatteryInfo>
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Information about the phone this client is connected to */
|
/**
|
||||||
|
* Information about the phone this client is connected to
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
export interface ClientInfoPhone {
|
export interface ClientInfoPhone {
|
||||||
/** WhatsApp Version running on the phone */
|
/** WhatsApp Version running on the phone */
|
||||||
wa_version: string
|
wa_version: string
|
||||||
@@ -262,20 +359,22 @@ declare namespace WAWebJS {
|
|||||||
/** Options for initializing the whatsapp client */
|
/** Options for initializing the whatsapp client */
|
||||||
export interface ClientOptions {
|
export interface ClientOptions {
|
||||||
/** Timeout for authentication selector in puppeteer
|
/** Timeout for authentication selector in puppeteer
|
||||||
* @default 45000 */
|
* @default 0 */
|
||||||
authTimeoutMs?: number,
|
authTimeoutMs?: number,
|
||||||
/** Puppeteer launch options. View docs here: https://github.com/puppeteer/puppeteer/ */
|
/** Puppeteer launch options. View docs here: https://github.com/puppeteer/puppeteer/ */
|
||||||
puppeteer?: puppeteer.LaunchOptions
|
puppeteer?: puppeteer.PuppeteerNodeLaunchOptions & puppeteer.ConnectOptions
|
||||||
/** Refresh interval for qr code (how much time to wait before checking if the qr code has changed)
|
/** Determines how to save and restore sessions. Will use LegacySessionAuth if options.session is set. Otherwise, NoAuth will be used. */
|
||||||
* @default 20000 */
|
authStrategy?: AuthStrategy,
|
||||||
qrRefreshIntervalMs?: number
|
/** How many times should the qrcode be refreshed before giving up
|
||||||
/** Timeout for qr code selector in puppeteer
|
* @default 0 (disabled) */
|
||||||
* @default 45000 */
|
qrMaxRetries?: number,
|
||||||
qrTimeoutMs?: number,
|
/**
|
||||||
/** Restart client with a new session (i.e. use null 'session' var) if authentication fails
|
* @deprecated This option should be set directly on the LegacySessionAuth
|
||||||
* @default false */
|
*/
|
||||||
restartOnAuthFail?: boolean
|
restartOnAuthFail?: boolean
|
||||||
/** Whatsapp session to restore. If not set, will start a new session */
|
/**
|
||||||
|
* @deprecated Only here for backwards-compatibility. You should move to using LocalAuth, or set the authStrategy to LegacySessionAuth explicitly.
|
||||||
|
*/
|
||||||
session?: ClientSession
|
session?: ClientSession
|
||||||
/** If another whatsapp web session is detected (another browser), take over the session in the current browser
|
/** If another whatsapp web session is detected (another browser), take over the session in the current browser
|
||||||
* @default false */
|
* @default false */
|
||||||
@@ -291,7 +390,81 @@ declare namespace WAWebJS {
|
|||||||
ffmpegPath?: string
|
ffmpegPath?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Represents a Whatsapp client session */
|
/**
|
||||||
|
* Base class which all authentication strategies extend
|
||||||
|
*/
|
||||||
|
export abstract class AuthStrategy {
|
||||||
|
setup: (client: Client) => void;
|
||||||
|
beforeBrowserInitialized: () => Promise<void>;
|
||||||
|
afterBrowserInitialized: () => Promise<void>;
|
||||||
|
onAuthenticationNeeded: () => Promise<{
|
||||||
|
failed?: boolean;
|
||||||
|
restart?: boolean;
|
||||||
|
failureEventPayload?: any
|
||||||
|
}>;
|
||||||
|
getAuthEventPayload: () => Promise<any>;
|
||||||
|
afterAuthReady: () => Promise<void>;
|
||||||
|
disconnect: () => Promise<void>;
|
||||||
|
destroy: () => Promise<void>;
|
||||||
|
logout: () => Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No session restoring functionality
|
||||||
|
* Will need to authenticate via QR code every time
|
||||||
|
*/
|
||||||
|
export class NoAuth extends AuthStrategy {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Local directory-based authentication
|
||||||
|
*/
|
||||||
|
export class LocalAuth extends AuthStrategy {
|
||||||
|
public clientId?: string;
|
||||||
|
public dataPath?: string;
|
||||||
|
constructor(options?: {
|
||||||
|
clientId?: string,
|
||||||
|
dataPath?: string
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remote-based authentication
|
||||||
|
*/
|
||||||
|
export class RemoteAuth extends AuthStrategy {
|
||||||
|
public clientId?: string;
|
||||||
|
public dataPath?: string;
|
||||||
|
constructor(options?: {
|
||||||
|
store: Store,
|
||||||
|
clientId?: string,
|
||||||
|
dataPath?: string,
|
||||||
|
backupSyncIntervalMs: number
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remote store interface
|
||||||
|
*/
|
||||||
|
export interface Store {
|
||||||
|
sessionExists: (options: { session: string }) => Promise<boolean> | boolean,
|
||||||
|
delete: (options: { session: string }) => Promise<any> | any,
|
||||||
|
save: (options: { session: string }) => Promise<any> | any,
|
||||||
|
extract: (options: { session: string, path: string }) => Promise<any> | any,
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy session auth strategy
|
||||||
|
* Not compatible with multi-device accounts.
|
||||||
|
*/
|
||||||
|
export class LegacySessionAuth extends AuthStrategy {
|
||||||
|
constructor(options?: {
|
||||||
|
session?: ClientSession,
|
||||||
|
restartOnAuthFail?: boolean,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a WhatsApp client session
|
||||||
|
*/
|
||||||
export interface ClientSession {
|
export interface ClientSession {
|
||||||
WABrowserId: string,
|
WABrowserId: string,
|
||||||
WASecretBundle: string,
|
WASecretBundle: string,
|
||||||
@@ -299,6 +472,9 @@ declare namespace WAWebJS {
|
|||||||
WAToken2: string,
|
WAToken2: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
*/
|
||||||
export interface BatteryInfo {
|
export interface BatteryInfo {
|
||||||
/** The current battery percentage */
|
/** The current battery percentage */
|
||||||
battery: number,
|
battery: number,
|
||||||
@@ -368,13 +544,18 @@ declare namespace WAWebJS {
|
|||||||
MESSAGE_REVOKED_ME = 'message_revoke_me',
|
MESSAGE_REVOKED_ME = 'message_revoke_me',
|
||||||
MESSAGE_ACK = 'message_ack',
|
MESSAGE_ACK = 'message_ack',
|
||||||
MEDIA_UPLOADED = 'media_uploaded',
|
MEDIA_UPLOADED = 'media_uploaded',
|
||||||
|
CONTACT_CHANGED = 'contact_changed',
|
||||||
GROUP_JOIN = 'group_join',
|
GROUP_JOIN = 'group_join',
|
||||||
GROUP_LEAVE = 'group_leave',
|
GROUP_LEAVE = 'group_leave',
|
||||||
|
GROUP_ADMIN_CHANGED = 'group_admin_changed',
|
||||||
GROUP_UPDATE = 'group_update',
|
GROUP_UPDATE = 'group_update',
|
||||||
QR_RECEIVED = 'qr',
|
QR_RECEIVED = 'qr',
|
||||||
|
LOADING_SCREEN = 'loading_screen',
|
||||||
DISCONNECTED = 'disconnected',
|
DISCONNECTED = 'disconnected',
|
||||||
STATE_CHANGED = 'change_state',
|
STATE_CHANGED = 'change_state',
|
||||||
BATTERY_CHANGED = 'change_battery',
|
BATTERY_CHANGED = 'change_battery',
|
||||||
|
REMOTE_SESSION_SAVED = 'remote_session_saved',
|
||||||
|
CALL = 'call'
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Group notification types */
|
/** Group notification types */
|
||||||
@@ -413,7 +594,30 @@ declare namespace WAWebJS {
|
|||||||
CONTACT_CARD = 'vcard',
|
CONTACT_CARD = 'vcard',
|
||||||
CONTACT_CARD_MULTI = 'multi_vcard',
|
CONTACT_CARD_MULTI = 'multi_vcard',
|
||||||
REVOKED = 'revoked',
|
REVOKED = 'revoked',
|
||||||
|
ORDER = 'order',
|
||||||
|
PRODUCT = 'product',
|
||||||
|
PAYMENT = 'payment',
|
||||||
UNKNOWN = 'unknown',
|
UNKNOWN = 'unknown',
|
||||||
|
GROUP_INVITE = 'groups_v4_invite',
|
||||||
|
LIST = 'list',
|
||||||
|
LIST_RESPONSE = 'list_response',
|
||||||
|
BUTTONS_RESPONSE = 'buttons_response',
|
||||||
|
BROADCAST_NOTIFICATION = 'broadcast_notification',
|
||||||
|
CALL_LOG = 'call_log',
|
||||||
|
CIPHERTEXT = 'ciphertext',
|
||||||
|
DEBUG = 'debug',
|
||||||
|
E2E_NOTIFICATION = 'e2e_notification',
|
||||||
|
GP2 = 'gp2',
|
||||||
|
GROUP_NOTIFICATION = 'group_notification',
|
||||||
|
HSM = 'hsm',
|
||||||
|
INTERACTIVE = 'interactive',
|
||||||
|
NATIVE_FLOW = 'native_flow',
|
||||||
|
NOTIFICATION = 'notification',
|
||||||
|
NOTIFICATION_TEMPLATE = 'notification_template',
|
||||||
|
OVERSIZED = 'oversized',
|
||||||
|
PROTOCOL = 'protocol',
|
||||||
|
REACTION = 'reaction',
|
||||||
|
TEMPLATE_BUTTON_REPLY = 'template_button_reply',
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Client status */
|
/** Client status */
|
||||||
@@ -448,6 +652,15 @@ declare namespace WAWebJS {
|
|||||||
readRemaining: number
|
readRemaining: number
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type InviteV4Data = {
|
||||||
|
inviteCode: string,
|
||||||
|
inviteCodeExp: number,
|
||||||
|
groupId: string,
|
||||||
|
groupName?: string,
|
||||||
|
fromId: string,
|
||||||
|
toId: string
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a Message on WhatsApp
|
* Represents a Message on WhatsApp
|
||||||
*
|
*
|
||||||
@@ -472,6 +685,7 @@ declare namespace WAWebJS {
|
|||||||
* broadcast: false,
|
* broadcast: false,
|
||||||
* fromMe: false,
|
* fromMe: false,
|
||||||
* hasQuotedMsg: false,
|
* hasQuotedMsg: false,
|
||||||
|
* hasReaction: false,
|
||||||
* location: undefined,
|
* location: undefined,
|
||||||
* mentionedIds: []
|
* mentionedIds: []
|
||||||
* }
|
* }
|
||||||
@@ -481,12 +695,18 @@ declare namespace WAWebJS {
|
|||||||
ack: MessageAck,
|
ack: MessageAck,
|
||||||
/** If the message was sent to a group, this field will contain the user that sent the message. */
|
/** If the message was sent to a group, this field will contain the user that sent the message. */
|
||||||
author?: string,
|
author?: string,
|
||||||
|
/** String that represents from which device type the message was sent */
|
||||||
|
deviceType: string,
|
||||||
/** Message content */
|
/** Message content */
|
||||||
body: string,
|
body: string,
|
||||||
/** Indicates if the message was a broadcast */
|
/** Indicates if the message was a broadcast */
|
||||||
broadcast: boolean,
|
broadcast: boolean,
|
||||||
/** Indicates if the message was a status update */
|
/** Indicates if the message was a status update */
|
||||||
isStatus: boolean,
|
isStatus: boolean,
|
||||||
|
/** Indicates if the message is a Gif */
|
||||||
|
isGif: boolean,
|
||||||
|
/** Indicates if the message will disappear after it expires */
|
||||||
|
isEphemeral: boolean,
|
||||||
/** ID for the Chat that this message was sent to, except if the message was sent by the current user */
|
/** ID for the Chat that this message was sent to, except if the message was sent by the current user */
|
||||||
from: string,
|
from: string,
|
||||||
/** Indicates if the message was sent by the current user */
|
/** Indicates if the message was sent by the current user */
|
||||||
@@ -495,16 +715,27 @@ declare namespace WAWebJS {
|
|||||||
hasMedia: boolean,
|
hasMedia: boolean,
|
||||||
/** Indicates if the message was sent as a reply to another message */
|
/** Indicates if the message was sent as a reply to another message */
|
||||||
hasQuotedMsg: boolean,
|
hasQuotedMsg: boolean,
|
||||||
|
/** Indicates whether there are reactions to the message */
|
||||||
|
hasReaction: boolean,
|
||||||
|
/** Indicates the duration of the message in seconds */
|
||||||
|
duration: string,
|
||||||
/** ID that represents the message */
|
/** ID that represents the message */
|
||||||
id: MessageId,
|
id: MessageId,
|
||||||
/** Indicates if the message was forwarded */
|
/** Indicates if the message was forwarded */
|
||||||
isForwarded: boolean,
|
isForwarded: boolean,
|
||||||
|
/**
|
||||||
|
* Indicates how many times the message was forwarded.
|
||||||
|
* The maximum value is 127.
|
||||||
|
*/
|
||||||
|
forwardingScore: number,
|
||||||
/** Indicates if the message was starred */
|
/** Indicates if the message was starred */
|
||||||
isStarred: boolean,
|
isStarred: boolean,
|
||||||
/** Location information contained in the message, if the message is type "location" */
|
/** Location information contained in the message, if the message is type "location" */
|
||||||
location: Location,
|
location: Location,
|
||||||
/** List of vCards contained in the message */
|
/** List of vCards contained in the message */
|
||||||
vCards: string[],
|
vCards: string[],
|
||||||
|
/** Invite v4 info */
|
||||||
|
inviteV4?: InviteV4Data,
|
||||||
/** MediaKey that represents the sticker 'ID' */
|
/** MediaKey that represents the sticker 'ID' */
|
||||||
mediaKey?: string,
|
mediaKey?: string,
|
||||||
/** Indicates the mentions in the message body. */
|
/** Indicates the mentions in the message body. */
|
||||||
@@ -520,11 +751,38 @@ declare namespace WAWebJS {
|
|||||||
/** Message type */
|
/** Message type */
|
||||||
type: MessageTypes,
|
type: MessageTypes,
|
||||||
/** Links included in the message. */
|
/** Links included in the message. */
|
||||||
links: string[],
|
links: Array<{
|
||||||
|
link: string,
|
||||||
|
isSuspicious: boolean
|
||||||
|
}>,
|
||||||
|
/** Order ID */
|
||||||
|
orderId: string,
|
||||||
|
/** title */
|
||||||
|
title?: string,
|
||||||
|
/** description*/
|
||||||
|
description?: string,
|
||||||
|
/** Business Owner JID */
|
||||||
|
businessOwnerJid?: string,
|
||||||
|
/** Product JID */
|
||||||
|
productId?: string,
|
||||||
|
/** Message buttons */
|
||||||
|
dynamicReplyButtons?: object,
|
||||||
|
/** Selected button ID */
|
||||||
|
selectedButtonId?: string,
|
||||||
|
/** Selected list row ID */
|
||||||
|
selectedRowId?: string,
|
||||||
|
/** Returns message in a raw format */
|
||||||
|
rawData: object,
|
||||||
|
/*
|
||||||
|
* Reloads this Message object's data in-place with the latest values from WhatsApp Web.
|
||||||
|
* Note that the Message must still be in the web app cache for this to work, otherwise will return null.
|
||||||
|
*/
|
||||||
|
reload: () => Promise<Message>,
|
||||||
|
/** Accept the Group V4 Invite in message */
|
||||||
|
acceptGroupV4Invite: () => Promise<{status: number}>,
|
||||||
/** Deletes the message from the chat */
|
/** Deletes the message from the chat */
|
||||||
delete: (everyone?: boolean) => Promise<void>,
|
delete: (everyone?: boolean) => Promise<void>,
|
||||||
/** Downloads and returns the attatched message media */
|
/** Downloads and returns the attached message media */
|
||||||
downloadMedia: () => Promise<MessageMedia>,
|
downloadMedia: () => Promise<MessageMedia>,
|
||||||
/** Returns the Chat this message was sent in */
|
/** Returns the Chat this message was sent in */
|
||||||
getChat: () => Promise<Chat>,
|
getChat: () => Promise<Chat>,
|
||||||
@@ -540,16 +798,30 @@ declare namespace WAWebJS {
|
|||||||
* If not, it will send the message in the same Chat as the original message was sent.
|
* If not, it will send the message in the same Chat as the original message was sent.
|
||||||
*/
|
*/
|
||||||
reply: (content: MessageContent, chatId?: string, options?: MessageSendOptions) => Promise<Message>,
|
reply: (content: MessageContent, chatId?: string, options?: MessageSendOptions) => Promise<Message>,
|
||||||
|
/** React to this message with an emoji*/
|
||||||
|
react: (reaction: string) => Promise<void>,
|
||||||
/**
|
/**
|
||||||
* Forwards this message to another chat
|
* Forwards this message to another chat (that you chatted before, otherwise it will fail)
|
||||||
*/
|
*/
|
||||||
forward: (chat: Chat | string) => Promise<void>,
|
forward: (chat: Chat | string) => Promise<void>,
|
||||||
/** Star this message */
|
/** Star this message */
|
||||||
star: () => Promise<void>,
|
star: () => Promise<void>,
|
||||||
/** Unstar this message */
|
/** Unstar this message */
|
||||||
unstar: () => Promise<void>,
|
unstar: () => Promise<void>,
|
||||||
/** Get information about message delivery statuso */
|
/** Get information about message delivery status */
|
||||||
getInfo: () => Promise<MessageInfo | null>
|
getInfo: () => Promise<MessageInfo | null>,
|
||||||
|
/**
|
||||||
|
* Gets the order associated with a given message
|
||||||
|
*/
|
||||||
|
getOrder: () => Promise<Order>,
|
||||||
|
/**
|
||||||
|
* Gets the payment details associated with a given message
|
||||||
|
*/
|
||||||
|
getPayment: () => Promise<Payment>,
|
||||||
|
/**
|
||||||
|
* Gets the reactions associated with the given message
|
||||||
|
*/
|
||||||
|
getReactions: () => Promise<ReactionList[]>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/** ID that represents a message */
|
/** ID that represents a message */
|
||||||
@@ -560,10 +832,13 @@ declare namespace WAWebJS {
|
|||||||
_serialized: string,
|
_serialized: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Location {
|
/** Location information */
|
||||||
description?: string | null,
|
export class Location {
|
||||||
latitude: string,
|
description?: string | null
|
||||||
longitude: string,
|
latitude: string
|
||||||
|
longitude: string
|
||||||
|
|
||||||
|
constructor(latitude: number, longitude: number, description?: string)
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Label {
|
export interface Label {
|
||||||
@@ -580,10 +855,12 @@ declare namespace WAWebJS {
|
|||||||
|
|
||||||
/** Options for sending a message */
|
/** Options for sending a message */
|
||||||
export interface MessageSendOptions {
|
export interface MessageSendOptions {
|
||||||
/** Show links preview */
|
/** Show links preview. Has no effect on multi-device accounts. */
|
||||||
linkPreview?: boolean
|
linkPreview?: boolean
|
||||||
/** Send audio as voice message */
|
/** Send audio as voice message */
|
||||||
sendAudioAsVoice?: boolean
|
sendAudioAsVoice?: boolean
|
||||||
|
/** Send video as gif */
|
||||||
|
sendVideoAsGif?: boolean
|
||||||
/** Send media as sticker */
|
/** Send media as sticker */
|
||||||
sendMediaAsSticker?: boolean
|
sendMediaAsSticker?: boolean
|
||||||
/** Send media as document */
|
/** Send media as document */
|
||||||
@@ -600,6 +877,21 @@ declare namespace WAWebJS {
|
|||||||
sendSeen?: boolean
|
sendSeen?: boolean
|
||||||
/** Media to be sent */
|
/** Media to be sent */
|
||||||
media?: MessageMedia
|
media?: MessageMedia
|
||||||
|
/** Extra options */
|
||||||
|
extra?: any
|
||||||
|
/** Sticker name, if sendMediaAsSticker is true */
|
||||||
|
stickerName?: string
|
||||||
|
/** Sticker author, if sendMediaAsSticker is true */
|
||||||
|
stickerAuthor?: string
|
||||||
|
/** Sticker categories, if sendMediaAsSticker is true */
|
||||||
|
stickerCategories?: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MediaFromURLOptions {
|
||||||
|
client?: Client
|
||||||
|
filename?: string
|
||||||
|
unsafeMime?: boolean
|
||||||
|
reqOptions?: RequestInit
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Media attached to a message */
|
/** Media attached to a message */
|
||||||
@@ -610,19 +902,25 @@ declare namespace WAWebJS {
|
|||||||
data: string
|
data: string
|
||||||
/** Document file name. Value can be null */
|
/** Document file name. Value can be null */
|
||||||
filename?: string | null
|
filename?: string | null
|
||||||
|
/** Document file size in bytes. Value can be null. */
|
||||||
|
filesize?: number | null
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} mimetype MIME type of the attachment
|
* @param {string} mimetype MIME type of the attachment
|
||||||
* @param {string} data Base64-encoded data of the file
|
* @param {string} data Base64-encoded data of the file
|
||||||
* @param {?string} filename Document file name. Value can be null
|
* @param {?string} filename Document file name. Value can be null
|
||||||
|
* @param {?number} filesize Document file size in bytes. Value can be null.
|
||||||
*/
|
*/
|
||||||
constructor(mimetype: string, data: string, filename?: string | null)
|
constructor(mimetype: string, data: string, filename?: string | null, filesize?: number | null)
|
||||||
|
|
||||||
/** Creates a MessageMedia instance from a local file path */
|
/** Creates a MessageMedia instance from a local file path */
|
||||||
static fromFilePath: (filePath: string) => MessageMedia
|
static fromFilePath: (filePath: string) => MessageMedia
|
||||||
|
|
||||||
|
/** Creates a MessageMedia instance from a URL */
|
||||||
|
static fromUrl: (url: string, options?: MediaFromURLOptions) => Promise<MessageMedia>
|
||||||
}
|
}
|
||||||
|
|
||||||
export type MessageContent = string | MessageMedia | Location | Contact | Contact[]
|
export type MessageContent = string | MessageMedia | Location | Contact | Contact[] | List | Buttons
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a Contact on WhatsApp
|
* Represents a Contact on WhatsApp
|
||||||
@@ -701,14 +999,24 @@ declare namespace WAWebJS {
|
|||||||
*/
|
*/
|
||||||
getChat: () => Promise<Chat>,
|
getChat: () => Promise<Chat>,
|
||||||
|
|
||||||
|
/** Returns the contact's countrycode, (1541859685@c.us) => (1) */
|
||||||
|
getCountryCode(): Promise<string>,
|
||||||
|
|
||||||
|
/** Returns the contact's formatted phone number, (12345678901@c.us) => (+1 (234) 5678-901) */
|
||||||
|
getFormattedNumber(): Promise<string>,
|
||||||
|
|
||||||
/** Blocks this contact from WhatsApp */
|
/** Blocks this contact from WhatsApp */
|
||||||
block: () => Promise<boolean>,
|
block: () => Promise<boolean>,
|
||||||
|
|
||||||
/** Unlocks this contact from WhatsApp */
|
/** Unlocks this contact from WhatsApp */
|
||||||
unblock: () => Promise<boolean>,
|
unblock: () => Promise<boolean>,
|
||||||
|
|
||||||
/** Gets the Contact's current "about" info. Returns null if you don't have permission to read their status. */
|
/** Gets the Contact's current "about" info. Returns null if you don't have permission to read their status. */
|
||||||
getAbout: () => Promise<string | null>,
|
getAbout: () => Promise<string | null>,
|
||||||
|
|
||||||
|
/** Gets the Contact's common groups with you. Returns empty array if you don't have any common group. */
|
||||||
|
getCommonGroups: () => Promise<ChatId[]>
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ContactId {
|
export interface ContactId {
|
||||||
@@ -766,6 +1074,8 @@ declare namespace WAWebJS {
|
|||||||
timestamp: number,
|
timestamp: number,
|
||||||
/** Amount of messages unread */
|
/** Amount of messages unread */
|
||||||
unreadCount: number,
|
unreadCount: number,
|
||||||
|
/** Last message fo chat */
|
||||||
|
lastMessage: Message,
|
||||||
|
|
||||||
/** Archives this chat */
|
/** Archives this chat */
|
||||||
archive: () => Promise<void>,
|
archive: () => Promise<void>,
|
||||||
@@ -781,8 +1091,8 @@ declare namespace WAWebJS {
|
|||||||
delete: () => Promise<boolean>,
|
delete: () => Promise<boolean>,
|
||||||
/** Loads chat messages, sorted from earliest to latest. */
|
/** Loads chat messages, sorted from earliest to latest. */
|
||||||
fetchMessages: (searchOptions: MessageSearchOptions) => Promise<Message[]>,
|
fetchMessages: (searchOptions: MessageSearchOptions) => Promise<Message[]>,
|
||||||
/** Mutes this chat until a specified date */
|
/** Mutes this chat forever, unless a date is specified */
|
||||||
mute: (unmuteDate: Date) => Promise<void>,
|
mute: (unmuteDate?: Date) => Promise<void>,
|
||||||
/** Send a message to this chat */
|
/** Send a message to this chat */
|
||||||
sendMessage: (content: MessageContent, options?: MessageSendOptions) => Promise<Message>,
|
sendMessage: (content: MessageContent, options?: MessageSendOptions) => Promise<Message>,
|
||||||
/** Set the message as seen */
|
/** Set the message as seen */
|
||||||
@@ -805,12 +1115,15 @@ declare namespace WAWebJS {
|
|||||||
|
|
||||||
export interface MessageSearchOptions {
|
export interface MessageSearchOptions {
|
||||||
/**
|
/**
|
||||||
* The amount of messages to return.
|
* The amount of messages to return. If no limit is specified, the available messages will be returned.
|
||||||
* Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation.
|
* Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation.
|
||||||
* Set this to Infinity to load all messages.
|
* Set this to Infinity to load all messages.
|
||||||
* @default 50
|
|
||||||
*/
|
*/
|
||||||
limit?: number
|
limit?: number
|
||||||
|
/**
|
||||||
|
* Return only messages from the bot number or vise versa. To get all messages, leave the option undefined.
|
||||||
|
*/
|
||||||
|
fromMe?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -852,7 +1165,7 @@ declare namespace WAWebJS {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Promotes or demotes participants by IDs to regular users or admins */
|
/** Promotes or demotes participants by IDs to regular users or admins */
|
||||||
export type ChangeParticipantsPermisions =
|
export type ChangeParticipantsPermissions =
|
||||||
(participantIds: Array<string>) => Promise<{ status: number }>
|
(participantIds: Array<string>) => Promise<{ status: number }>
|
||||||
|
|
||||||
/** Adds or removes a list of participants by ID to the group */
|
/** Adds or removes a list of participants by ID to the group */
|
||||||
@@ -882,13 +1195,13 @@ declare namespace WAWebJS {
|
|||||||
/** Removes a list of participants by ID to the group */
|
/** Removes a list of participants by ID to the group */
|
||||||
removeParticipants: ChangeGroupParticipants;
|
removeParticipants: ChangeGroupParticipants;
|
||||||
/** Promotes participants by IDs to admins */
|
/** Promotes participants by IDs to admins */
|
||||||
promoteParticipants: ChangeParticipantsPermisions;
|
promoteParticipants: ChangeParticipantsPermissions;
|
||||||
/** Demotes participants by IDs to regular users */
|
/** Demotes participants by IDs to regular users */
|
||||||
demoteParticipants: ChangeParticipantsPermisions;
|
demoteParticipants: ChangeParticipantsPermissions;
|
||||||
/** Updates the group subject */
|
/** Updates the group subject */
|
||||||
setSubject: (subject: string) => Promise<void>;
|
setSubject: (subject: string) => Promise<boolean>;
|
||||||
/** Updates the group description */
|
/** Updates the group description */
|
||||||
setDescription: (description: string) => Promise<void>;
|
setDescription: (description: string) => Promise<boolean>;
|
||||||
/** Updates the group settings to only allow admins to send messages
|
/** Updates the group settings to only allow admins to send messages
|
||||||
* @param {boolean} [adminsOnly=true] Enable or disable this option
|
* @param {boolean} [adminsOnly=true] Enable or disable this option
|
||||||
* @returns {Promise<boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
* @returns {Promise<boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
@@ -906,6 +1219,219 @@ declare namespace WAWebJS {
|
|||||||
revokeInvite: () => Promise<void>;
|
revokeInvite: () => Promise<void>;
|
||||||
/** Makes the bot leave the group */
|
/** Makes the bot leave the group */
|
||||||
leave: () => Promise<void>;
|
leave: () => Promise<void>;
|
||||||
|
/** Sets the group's picture.*/
|
||||||
|
setPicture: (media: MessageMedia) => Promise<boolean>;
|
||||||
|
/** Deletes the group's picture */
|
||||||
|
deletePicture: () => Promise<boolean>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the metadata associated with a given product
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export interface ProductMetadata {
|
||||||
|
/** Product Id */
|
||||||
|
id: string,
|
||||||
|
/** Product Name */
|
||||||
|
name: string,
|
||||||
|
/** Product Description */
|
||||||
|
description: string,
|
||||||
|
/** Retailer ID */
|
||||||
|
retailer_id?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Product on Whatsapp
|
||||||
|
* @example
|
||||||
|
* {
|
||||||
|
* "id": "123456789",
|
||||||
|
* "price": "150000",
|
||||||
|
* "thumbnailId": "123456789",
|
||||||
|
* "thumbnailUrl": "https://mmg.whatsapp.net",
|
||||||
|
* "currency": "GTQ",
|
||||||
|
* "name": "Store Name",
|
||||||
|
* "quantity": 1
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
export interface Product {
|
||||||
|
/** Product Id */
|
||||||
|
id: string,
|
||||||
|
/** Price */
|
||||||
|
price?: string,
|
||||||
|
/** Product Thumbnail*/
|
||||||
|
thumbnailUrl: string,
|
||||||
|
/** Currency */
|
||||||
|
currency: string,
|
||||||
|
/** Product Name */
|
||||||
|
name: string,
|
||||||
|
/** Product Quantity*/
|
||||||
|
quantity: number,
|
||||||
|
/** Gets the Product metadata */
|
||||||
|
getData: () => Promise<ProductMetadata>
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Order on WhatsApp
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* {
|
||||||
|
* "products": [
|
||||||
|
* {
|
||||||
|
* "id": "123456789",
|
||||||
|
* "price": "150000",
|
||||||
|
* "thumbnailId": "123456789",
|
||||||
|
* "thumbnailUrl": "https://mmg.whatsapp.net",
|
||||||
|
* "currency": "GTQ",
|
||||||
|
* "name": "Store Name",
|
||||||
|
* "quantity": 1
|
||||||
|
* }
|
||||||
|
* ],
|
||||||
|
* "subtotal": "150000",
|
||||||
|
* "total": "150000",
|
||||||
|
* "currency": "GTQ",
|
||||||
|
* "createdAt": 1610136796,
|
||||||
|
* "sellerJid": "55555555@s.whatsapp.net"
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
export interface Order {
|
||||||
|
/** List of products*/
|
||||||
|
products: Array<Product>,
|
||||||
|
/** Order Subtotal */
|
||||||
|
subtotal: string,
|
||||||
|
/** Order Total */
|
||||||
|
total: string,
|
||||||
|
/** Order Currency */
|
||||||
|
currency: string,
|
||||||
|
/** Order Created At*/
|
||||||
|
createdAt: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Payment on WhatsApp
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* {
|
||||||
|
* id: {
|
||||||
|
* fromMe: true,
|
||||||
|
* remote: {
|
||||||
|
* server: 'c.us',
|
||||||
|
* user: '5511999999999',
|
||||||
|
* _serialized: '5511999999999@c.us'
|
||||||
|
* },
|
||||||
|
* id: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||||
|
* _serialized: 'true_5511999999999@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
|
||||||
|
* },
|
||||||
|
* paymentCurrency: 'BRL',
|
||||||
|
* paymentAmount1000: 1000,
|
||||||
|
* paymentMessageReceiverJid: {
|
||||||
|
* server: 'c.us',
|
||||||
|
* user: '5511999999999',
|
||||||
|
* _serialized: '5511999999999@c.us'
|
||||||
|
* },
|
||||||
|
* paymentTransactionTimestamp: 1623463058,
|
||||||
|
* paymentStatus: 4,
|
||||||
|
* paymentTxnStatus: 4,
|
||||||
|
* paymentNote: 'note'
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
export interface Payment {
|
||||||
|
/** Payment Id*/
|
||||||
|
id: object,
|
||||||
|
/** Payment currency */
|
||||||
|
paymentCurrency: string,
|
||||||
|
/** Payment ammount */
|
||||||
|
paymentAmount1000 : number,
|
||||||
|
/** Payment receiver */
|
||||||
|
paymentMessageReceiverJid : object,
|
||||||
|
/** Payment transaction timestamp */
|
||||||
|
paymentTransactionTimestamp : number,
|
||||||
|
/** Payment paymentStatus */
|
||||||
|
paymentStatus : number,
|
||||||
|
/** Integer that represents the payment Text */
|
||||||
|
paymentTxnStatus : number,
|
||||||
|
/** The note sent with the payment */
|
||||||
|
paymentNote : string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Call on WhatsApp
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* Call {
|
||||||
|
* id: 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||||
|
* from: '5511999999@c.us',
|
||||||
|
* timestamp: 1625003709,
|
||||||
|
* isVideo: false,
|
||||||
|
* isGroup: false,
|
||||||
|
* fromMe: false,
|
||||||
|
* canHandleLocally: false,
|
||||||
|
* webClientShouldHandle: false,
|
||||||
|
* participants: []
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
export interface Call {
|
||||||
|
/** Call Id */
|
||||||
|
id: string,
|
||||||
|
/** from */
|
||||||
|
from?: string,
|
||||||
|
/** Unix timestamp for when the call was created*/
|
||||||
|
timestamp: number,
|
||||||
|
/** Is video */
|
||||||
|
isVideo: boolean,
|
||||||
|
/** Is Group */
|
||||||
|
isGroup: boolean,
|
||||||
|
/** Indicates if the call was sent by the current user */
|
||||||
|
fromMe: boolean,
|
||||||
|
/** indicates if the call can be handled in waweb */
|
||||||
|
canHandleLocally: boolean,
|
||||||
|
/** indicates if the call should be handled in waweb */
|
||||||
|
webClientShouldHandle: boolean,
|
||||||
|
/** Object with participants */
|
||||||
|
participants: object
|
||||||
|
|
||||||
|
/** Reject the call */
|
||||||
|
reject: () => Promise<void>
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Message type List */
|
||||||
|
export class List {
|
||||||
|
body: string
|
||||||
|
buttonText: string
|
||||||
|
sections: Array<any>
|
||||||
|
title?: string | null
|
||||||
|
footer?: string | null
|
||||||
|
|
||||||
|
constructor(body: string, buttonText: string, sections: Array<any>, title?: string | null, footer?: string | null)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Message type Buttons */
|
||||||
|
export class Buttons {
|
||||||
|
body: string | MessageMedia
|
||||||
|
buttons: Array<{ buttonId: string; buttonText: {displayText: string}; type: number }>
|
||||||
|
title?: string | null
|
||||||
|
footer?: string | null
|
||||||
|
|
||||||
|
constructor(body: string, buttons: Array<{ id?: string; body: string }>, title?: string | null, footer?: string | null)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Message type Reaction */
|
||||||
|
export class Reaction {
|
||||||
|
id: MessageId
|
||||||
|
orphan: number
|
||||||
|
orphanReason?: string
|
||||||
|
timestamp: number
|
||||||
|
reaction: string
|
||||||
|
read: boolean
|
||||||
|
msgId: MessageId
|
||||||
|
senderId: string
|
||||||
|
ack?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ReactionList = {
|
||||||
|
id: string,
|
||||||
|
aggregateEmoji: string,
|
||||||
|
hasReactionByMe: boolean,
|
||||||
|
senders: Array<Reaction>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
9
index.js
9
index.js
@@ -18,6 +18,15 @@ module.exports = {
|
|||||||
BusinessContact: require('./src/structures/BusinessContact'),
|
BusinessContact: require('./src/structures/BusinessContact'),
|
||||||
ClientInfo: require('./src/structures/ClientInfo'),
|
ClientInfo: require('./src/structures/ClientInfo'),
|
||||||
Location: require('./src/structures/Location'),
|
Location: require('./src/structures/Location'),
|
||||||
|
ProductMetadata: require('./src/structures/ProductMetadata'),
|
||||||
|
List: require('./src/structures/List'),
|
||||||
|
Buttons: require('./src/structures/Buttons'),
|
||||||
|
|
||||||
|
// Auth Strategies
|
||||||
|
NoAuth: require('./src/authStrategies/NoAuth'),
|
||||||
|
LocalAuth: require('./src/authStrategies/LocalAuth'),
|
||||||
|
RemoteAuth: require('./src/authStrategies/RemoteAuth'),
|
||||||
|
LegacySessionAuth: require('./src/authStrategies/LegacySessionAuth'),
|
||||||
|
|
||||||
...Constants
|
...Constants
|
||||||
};
|
};
|
||||||
|
|||||||
35
package.json
35
package.json
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "whatsapp-web.js",
|
"name": "whatsapp-web.js",
|
||||||
"version": "1.12.5",
|
"version": "1.19.5",
|
||||||
"description": "Library for interacting with the WhatsApp Web API ",
|
"description": "Library for interacting with the WhatsApp Web API ",
|
||||||
"main": "./index.js",
|
"main": "./index.js",
|
||||||
"typings": "./index.d.ts",
|
"typings": "./index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "mocha tests --recursive --timeout 5000",
|
||||||
|
"test-single": "mocha",
|
||||||
"shell": "node --experimental-repl-await ./shell.js",
|
"shell": "node --experimental-repl-await ./shell.js",
|
||||||
"generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose"
|
"generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose"
|
||||||
},
|
},
|
||||||
@@ -26,18 +27,34 @@
|
|||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/pedroslopez/whatsapp-web.js/issues"
|
"url": "https://github.com/pedroslopez/whatsapp-web.js/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://waguide.pedroslopez.me/",
|
"homepage": "https://wwebjs.dev/",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@pedroslopez/moduleraid": "^5.0.0",
|
"@pedroslopez/moduleraid": "^5.0.2",
|
||||||
"fluent-ffmpeg": "^2.1.2",
|
"fluent-ffmpeg": "^2.1.2",
|
||||||
"jsqr": "^1.3.1",
|
"jsqr": "^1.3.1",
|
||||||
"mime": "^2.4.5",
|
"mime": "^3.0.0",
|
||||||
"puppeteer": "^5.2.1",
|
"node-fetch": "^2.6.5",
|
||||||
"sharp": "^0.26.3"
|
"node-webpmux": "^3.1.0",
|
||||||
|
"puppeteer": "^13.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^6.8.0",
|
"@types/node-fetch": "^2.5.12",
|
||||||
|
"chai": "^4.3.4",
|
||||||
|
"chai-as-promised": "^7.1.1",
|
||||||
|
"dotenv": "^16.0.0",
|
||||||
|
"eslint": "^8.4.1",
|
||||||
|
"eslint-plugin-mocha": "^10.0.3",
|
||||||
"jsdoc": "^3.6.4",
|
"jsdoc": "^3.6.4",
|
||||||
"jsdoc-baseline": "^0.1.5"
|
"jsdoc-baseline": "^0.1.5",
|
||||||
|
"mocha": "^9.0.2",
|
||||||
|
"sinon": "^13.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"archiver": "^5.3.1",
|
||||||
|
"fs-extra": "^10.1.0",
|
||||||
|
"unzipper": "^0.10.11"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
shell.js
17
shell.js
@@ -2,24 +2,17 @@
|
|||||||
* ==== wwebjs-shell ====
|
* ==== wwebjs-shell ====
|
||||||
* Used for quickly testing library features
|
* Used for quickly testing library features
|
||||||
*
|
*
|
||||||
* Running `npm run shell` will start WhatsApp Web in headless mode
|
* Running `npm run shell` will start WhatsApp Web with headless=false
|
||||||
* and then drop you into Node REPL with `client` in its context.
|
* and then drop you into Node REPL with `client` in its context.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const repl = require('repl');
|
const repl = require('repl');
|
||||||
const fs = require('fs');
|
|
||||||
|
|
||||||
const { Client } = require('./index');
|
const { Client, LocalAuth } = require('./index');
|
||||||
|
|
||||||
const SESSION_FILE_PATH = './session.json';
|
|
||||||
let sessionCfg;
|
|
||||||
if (fs.existsSync(SESSION_FILE_PATH)) {
|
|
||||||
sessionCfg = require(SESSION_FILE_PATH);
|
|
||||||
}
|
|
||||||
|
|
||||||
const client = new Client({
|
const client = new Client({
|
||||||
puppeteer: { headless: false },
|
puppeteer: { headless: false },
|
||||||
session: sessionCfg
|
authStrategy: new LocalAuth()
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('Initializing...');
|
console.log('Initializing...');
|
||||||
@@ -30,6 +23,10 @@ client.on('qr', () => {
|
|||||||
console.log('Please scan the QR code on the browser.');
|
console.log('Please scan the QR code on the browser.');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
client.on('authenticated', (session) => {
|
||||||
|
console.log(JSON.stringify(session));
|
||||||
|
});
|
||||||
|
|
||||||
client.on('ready', () => {
|
client.on('ready', () => {
|
||||||
const shell = repl.start('wwebjs> ');
|
const shell = repl.start('wwebjs> ');
|
||||||
shell.context.client = client;
|
shell.context.client = client;
|
||||||
|
|||||||
723
src/Client.js
723
src/Client.js
File diff suppressed because it is too large
Load Diff
27
src/authStrategies/BaseAuthStrategy.js
Normal file
27
src/authStrategies/BaseAuthStrategy.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base class which all authentication strategies extend
|
||||||
|
*/
|
||||||
|
class BaseAuthStrategy {
|
||||||
|
constructor() {}
|
||||||
|
setup(client) {
|
||||||
|
this.client = client;
|
||||||
|
}
|
||||||
|
async beforeBrowserInitialized() {}
|
||||||
|
async afterBrowserInitialized() {}
|
||||||
|
async onAuthenticationNeeded() {
|
||||||
|
return {
|
||||||
|
failed: false,
|
||||||
|
restart: false,
|
||||||
|
failureEventPayload: undefined
|
||||||
|
};
|
||||||
|
}
|
||||||
|
async getAuthEventPayload() {}
|
||||||
|
async afterAuthReady() {}
|
||||||
|
async disconnect() {}
|
||||||
|
async destroy() {}
|
||||||
|
async logout() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = BaseAuthStrategy;
|
||||||
72
src/authStrategies/LegacySessionAuth.js
Normal file
72
src/authStrategies/LegacySessionAuth.js
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const BaseAuthStrategy = require('./BaseAuthStrategy');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy session auth strategy
|
||||||
|
* Not compatible with multi-device accounts.
|
||||||
|
* @param {object} options - options
|
||||||
|
* @param {string} options.restartOnAuthFail - Restart client with a new session (i.e. use null 'session' var) if authentication fails
|
||||||
|
* @param {object} options.session - Whatsapp session to restore. If not set, will start a new session
|
||||||
|
* @param {string} options.session.WABrowserId
|
||||||
|
* @param {string} options.session.WASecretBundle
|
||||||
|
* @param {string} options.session.WAToken1
|
||||||
|
* @param {string} options.session.WAToken2
|
||||||
|
*/
|
||||||
|
class LegacySessionAuth extends BaseAuthStrategy {
|
||||||
|
constructor({ session, restartOnAuthFail }={}) {
|
||||||
|
super();
|
||||||
|
this.session = session;
|
||||||
|
this.restartOnAuthFail = restartOnAuthFail;
|
||||||
|
}
|
||||||
|
|
||||||
|
async afterBrowserInitialized() {
|
||||||
|
if(this.session) {
|
||||||
|
await this.client.pupPage.evaluateOnNewDocument(session => {
|
||||||
|
if (document.referrer === 'https://whatsapp.com/') {
|
||||||
|
localStorage.clear();
|
||||||
|
localStorage.setItem('WABrowserId', session.WABrowserId);
|
||||||
|
localStorage.setItem('WASecretBundle', session.WASecretBundle);
|
||||||
|
localStorage.setItem('WAToken1', session.WAToken1);
|
||||||
|
localStorage.setItem('WAToken2', session.WAToken2);
|
||||||
|
}
|
||||||
|
|
||||||
|
localStorage.setItem('remember-me', 'true');
|
||||||
|
}, this.session);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async onAuthenticationNeeded() {
|
||||||
|
if(this.session) {
|
||||||
|
this.session = null;
|
||||||
|
return {
|
||||||
|
failed: true,
|
||||||
|
restart: this.restartOnAuthFail,
|
||||||
|
failureEventPayload: 'Unable to log in. Are the session details valid?'
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return { failed: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAuthEventPayload() {
|
||||||
|
const isMD = await this.client.pupPage.evaluate(() => {
|
||||||
|
return window.Store.MDBackend;
|
||||||
|
});
|
||||||
|
|
||||||
|
if(isMD) throw new Error('Authenticating via JSON session is not supported for MultiDevice-enabled WhatsApp accounts.');
|
||||||
|
|
||||||
|
const localStorage = JSON.parse(await this.client.pupPage.evaluate(() => {
|
||||||
|
return JSON.stringify(window.localStorage);
|
||||||
|
}));
|
||||||
|
|
||||||
|
return {
|
||||||
|
WABrowserId: localStorage.WABrowserId,
|
||||||
|
WASecretBundle: localStorage.WASecretBundle,
|
||||||
|
WAToken1: localStorage.WAToken1,
|
||||||
|
WAToken2: localStorage.WAToken2
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = LegacySessionAuth;
|
||||||
53
src/authStrategies/LocalAuth.js
Normal file
53
src/authStrategies/LocalAuth.js
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const path = require('path');
|
||||||
|
const fs = require('fs');
|
||||||
|
const BaseAuthStrategy = require('./BaseAuthStrategy');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Local directory-based authentication
|
||||||
|
* @param {object} options - options
|
||||||
|
* @param {string} options.clientId - Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance
|
||||||
|
* @param {string} options.dataPath - Change the default path for saving session files, default is: "./.wwebjs_auth/"
|
||||||
|
*/
|
||||||
|
class LocalAuth extends BaseAuthStrategy {
|
||||||
|
constructor({ clientId, dataPath }={}) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
const idRegex = /^[-_\w]+$/i;
|
||||||
|
if(clientId && !idRegex.test(clientId)) {
|
||||||
|
throw new Error('Invalid clientId. Only alphanumeric characters, underscores and hyphens are allowed.');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dataPath = path.resolve(dataPath || './.wwebjs_auth/');
|
||||||
|
this.clientId = clientId;
|
||||||
|
}
|
||||||
|
|
||||||
|
async beforeBrowserInitialized() {
|
||||||
|
const puppeteerOpts = this.client.options.puppeteer;
|
||||||
|
const sessionDirName = this.clientId ? `session-${this.clientId}` : 'session';
|
||||||
|
const dirPath = path.join(this.dataPath, sessionDirName);
|
||||||
|
|
||||||
|
if(puppeteerOpts.userDataDir && puppeteerOpts.userDataDir !== dirPath) {
|
||||||
|
throw new Error('LocalAuth is not compatible with a user-supplied userDataDir.');
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.mkdirSync(dirPath, { recursive: true });
|
||||||
|
|
||||||
|
this.client.options.puppeteer = {
|
||||||
|
...puppeteerOpts,
|
||||||
|
userDataDir: dirPath
|
||||||
|
};
|
||||||
|
|
||||||
|
this.userDataDir = dirPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
async logout() {
|
||||||
|
if (this.userDataDir) {
|
||||||
|
return (fs.rmSync ? fs.rmSync : fs.rmdirSync).call(this, this.userDataDir, { recursive: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = LocalAuth;
|
||||||
12
src/authStrategies/NoAuth.js
Normal file
12
src/authStrategies/NoAuth.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const BaseAuthStrategy = require('./BaseAuthStrategy');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No session restoring functionality
|
||||||
|
* Will need to authenticate via QR code every time
|
||||||
|
*/
|
||||||
|
class NoAuth extends BaseAuthStrategy { }
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = NoAuth;
|
||||||
204
src/authStrategies/RemoteAuth.js
Normal file
204
src/authStrategies/RemoteAuth.js
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/* Require Optional Dependencies */
|
||||||
|
try {
|
||||||
|
var fs = require('fs-extra');
|
||||||
|
var unzipper = require('unzipper');
|
||||||
|
var archiver = require('archiver');
|
||||||
|
} catch {
|
||||||
|
fs = undefined;
|
||||||
|
unzipper = undefined;
|
||||||
|
archiver = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const path = require('path');
|
||||||
|
const { Events } = require('./../util/Constants');
|
||||||
|
const BaseAuthStrategy = require('./BaseAuthStrategy');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remote-based authentication
|
||||||
|
* @param {object} options - options
|
||||||
|
* @param {object} options.store - Remote database store instance
|
||||||
|
* @param {string} options.clientId - Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance
|
||||||
|
* @param {string} options.dataPath - Change the default path for saving session files, default is: "./.wwebjs_auth/"
|
||||||
|
* @param {number} options.backupSyncIntervalMs - Sets the time interval for periodic session backups. Accepts values starting from 60000ms {1 minute}
|
||||||
|
*/
|
||||||
|
class RemoteAuth extends BaseAuthStrategy {
|
||||||
|
constructor({ clientId, dataPath, store, backupSyncIntervalMs } = {}) {
|
||||||
|
if (!fs && !unzipper && !archiver) throw new Error('Optional Dependencies [fs-extra, unzipper, archiver] are required to use RemoteAuth. Make sure to run npm install correctly and remove the --no-optional flag');
|
||||||
|
super();
|
||||||
|
|
||||||
|
const idRegex = /^[-_\w]+$/i;
|
||||||
|
if (clientId && !idRegex.test(clientId)) {
|
||||||
|
throw new Error('Invalid clientId. Only alphanumeric characters, underscores and hyphens are allowed.');
|
||||||
|
}
|
||||||
|
if (!backupSyncIntervalMs || backupSyncIntervalMs < 60000) {
|
||||||
|
throw new Error('Invalid backupSyncIntervalMs. Accepts values starting from 60000ms {1 minute}.');
|
||||||
|
}
|
||||||
|
if(!store) throw new Error('Remote database store is required.');
|
||||||
|
|
||||||
|
this.store = store;
|
||||||
|
this.clientId = clientId;
|
||||||
|
this.backupSyncIntervalMs = backupSyncIntervalMs;
|
||||||
|
this.dataPath = path.resolve(dataPath || './.wwebjs_auth/');
|
||||||
|
this.tempDir = `${this.dataPath}/wwebjs_temp_session`;
|
||||||
|
this.requiredDirs = ['Default', 'IndexedDB', 'Local Storage']; /* => Required Files & Dirs in WWebJS to restore session */
|
||||||
|
}
|
||||||
|
|
||||||
|
async beforeBrowserInitialized() {
|
||||||
|
const puppeteerOpts = this.client.options.puppeteer;
|
||||||
|
const sessionDirName = this.clientId ? `RemoteAuth-${this.clientId}` : 'RemoteAuth';
|
||||||
|
const dirPath = path.join(this.dataPath, sessionDirName);
|
||||||
|
|
||||||
|
if (puppeteerOpts.userDataDir && puppeteerOpts.userDataDir !== dirPath) {
|
||||||
|
throw new Error('RemoteAuth is not compatible with a user-supplied userDataDir.');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.userDataDir = dirPath;
|
||||||
|
this.sessionName = sessionDirName;
|
||||||
|
|
||||||
|
await this.extractRemoteSession();
|
||||||
|
|
||||||
|
this.client.options.puppeteer = {
|
||||||
|
...puppeteerOpts,
|
||||||
|
userDataDir: dirPath
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async logout() {
|
||||||
|
await this.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
async destroy() {
|
||||||
|
clearInterval(this.backupSync);
|
||||||
|
}
|
||||||
|
|
||||||
|
async disconnect() {
|
||||||
|
await this.deleteRemoteSession();
|
||||||
|
|
||||||
|
let pathExists = await this.isValidPath(this.userDataDir);
|
||||||
|
if (pathExists) {
|
||||||
|
await fs.promises.rm(this.userDataDir, {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
clearInterval(this.backupSync);
|
||||||
|
}
|
||||||
|
|
||||||
|
async afterAuthReady() {
|
||||||
|
const sessionExists = await this.store.sessionExists({session: this.sessionName});
|
||||||
|
if(!sessionExists) {
|
||||||
|
await this.delay(60000); /* Initial delay sync required for session to be stable enough to recover */
|
||||||
|
await this.storeRemoteSession({emit: true});
|
||||||
|
}
|
||||||
|
var self = this;
|
||||||
|
this.backupSync = setInterval(async function () {
|
||||||
|
await self.storeRemoteSession();
|
||||||
|
}, this.backupSyncIntervalMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
async storeRemoteSession(options) {
|
||||||
|
/* Compress & Store Session */
|
||||||
|
const pathExists = await this.isValidPath(this.userDataDir);
|
||||||
|
if (pathExists) {
|
||||||
|
await this.compressSession();
|
||||||
|
await this.store.save({session: this.sessionName});
|
||||||
|
await fs.promises.unlink(`${this.sessionName}.zip`);
|
||||||
|
await fs.promises.rm(`${this.tempDir}`, {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
}).catch(() => {});
|
||||||
|
if(options && options.emit) this.client.emit(Events.REMOTE_SESSION_SAVED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async extractRemoteSession() {
|
||||||
|
const pathExists = await this.isValidPath(this.userDataDir);
|
||||||
|
const compressedSessionPath = `${this.sessionName}.zip`;
|
||||||
|
const sessionExists = await this.store.sessionExists({session: this.sessionName});
|
||||||
|
if (pathExists) {
|
||||||
|
await fs.promises.rm(this.userDataDir, {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
}).catch(() => {});
|
||||||
|
}
|
||||||
|
if (sessionExists) {
|
||||||
|
await this.store.extract({session: this.sessionName, path: compressedSessionPath});
|
||||||
|
await this.unCompressSession(compressedSessionPath);
|
||||||
|
} else {
|
||||||
|
fs.mkdirSync(this.userDataDir, { recursive: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteRemoteSession() {
|
||||||
|
const sessionExists = await this.store.sessionExists({session: this.sessionName});
|
||||||
|
if (sessionExists) await this.store.delete({session: this.sessionName});
|
||||||
|
}
|
||||||
|
|
||||||
|
async compressSession() {
|
||||||
|
const archive = archiver('zip');
|
||||||
|
const stream = fs.createWriteStream(`${this.sessionName}.zip`);
|
||||||
|
|
||||||
|
await fs.copy(this.userDataDir, this.tempDir).catch(() => {});
|
||||||
|
await this.deleteMetadata();
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
archive
|
||||||
|
.directory(this.tempDir, false)
|
||||||
|
.on('error', err => reject(err))
|
||||||
|
.pipe(stream);
|
||||||
|
|
||||||
|
stream.on('close', () => resolve());
|
||||||
|
archive.finalize();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async unCompressSession(compressedSessionPath) {
|
||||||
|
var stream = fs.createReadStream(compressedSessionPath);
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
stream.pipe(unzipper.Extract({
|
||||||
|
path: this.userDataDir
|
||||||
|
}))
|
||||||
|
.on('error', err => reject(err))
|
||||||
|
.on('finish', () => resolve());
|
||||||
|
});
|
||||||
|
await fs.promises.unlink(compressedSessionPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteMetadata() {
|
||||||
|
const sessionDirs = [this.tempDir, path.join(this.tempDir, 'Default')];
|
||||||
|
for (const dir of sessionDirs) {
|
||||||
|
const sessionFiles = await fs.promises.readdir(dir);
|
||||||
|
for (const element of sessionFiles) {
|
||||||
|
if (!this.requiredDirs.includes(element)) {
|
||||||
|
const dirElement = path.join(dir, element);
|
||||||
|
const stats = await fs.promises.lstat(dirElement);
|
||||||
|
|
||||||
|
if (stats.isDirectory()) {
|
||||||
|
await fs.promises.rm(dirElement, {
|
||||||
|
recursive: true,
|
||||||
|
force: true
|
||||||
|
}).catch(() => {});
|
||||||
|
} else {
|
||||||
|
await fs.promises.unlink(dirElement).catch(() => {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async isValidPath(path) {
|
||||||
|
try {
|
||||||
|
await fs.promises.access(path);
|
||||||
|
return true;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async delay(ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = RemoteAuth;
|
||||||
82
src/structures/Buttons.js
Normal file
82
src/structures/Buttons.js
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const MessageMedia = require('./MessageMedia');
|
||||||
|
const Util = require('../util/Util');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Button spec used in Buttons constructor
|
||||||
|
* @typedef {Object} ButtonSpec
|
||||||
|
* @property {string=} id - Custom ID to set on the button. A random one will be generated if one is not passed.
|
||||||
|
* @property {string} body - The text to show on the button.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} FormattedButtonSpec
|
||||||
|
* @property {string} buttonId
|
||||||
|
* @property {number} type
|
||||||
|
* @property {Object} buttonText
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Message type buttons
|
||||||
|
*/
|
||||||
|
class Buttons {
|
||||||
|
/**
|
||||||
|
* @param {string|MessageMedia} body
|
||||||
|
* @param {ButtonSpec[]} buttons - See {@link ButtonSpec}
|
||||||
|
* @param {string?} title
|
||||||
|
* @param {string?} footer
|
||||||
|
*/
|
||||||
|
constructor(body, buttons, title, footer) {
|
||||||
|
/**
|
||||||
|
* Message body
|
||||||
|
* @type {string|MessageMedia}
|
||||||
|
*/
|
||||||
|
this.body = body;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* title of message
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.title = title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* footer of message
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.footer = footer;
|
||||||
|
|
||||||
|
if (body instanceof MessageMedia) {
|
||||||
|
this.type = 'media';
|
||||||
|
this.title = '';
|
||||||
|
}else{
|
||||||
|
this.type = 'chat';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* buttons of message
|
||||||
|
* @type {FormattedButtonSpec[]}
|
||||||
|
*/
|
||||||
|
this.buttons = this._format(buttons);
|
||||||
|
if(!this.buttons.length){ throw '[BT01] No buttons';}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates button array from simple array
|
||||||
|
* @param {ButtonSpec[]} buttons
|
||||||
|
* @returns {FormattedButtonSpec[]}
|
||||||
|
* @example
|
||||||
|
* Input: [{id:'customId',body:'button1'},{body:'button2'},{body:'button3'},{body:'button4'}]
|
||||||
|
* Returns: [{ buttonId:'customId',buttonText:{'displayText':'button1'},type: 1 },{buttonId:'n3XKsL',buttonText:{'displayText':'button2'},type:1},{buttonId:'NDJk0a',buttonText:{'displayText':'button3'},type:1}]
|
||||||
|
*/
|
||||||
|
_format(buttons){
|
||||||
|
buttons = buttons.slice(0,3); // phone users can only see 3 buttons, so lets limit this
|
||||||
|
return buttons.map((btn) => {
|
||||||
|
return {'buttonId':btn.id ? String(btn.id) : Util.generateHash(6),'buttonText':{'displayText':btn.body},'type':1};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Buttons;
|
||||||
76
src/structures/Call.js
Normal file
76
src/structures/Call.js
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const Base = require('./Base');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Call on WhatsApp
|
||||||
|
* @extends {Base}
|
||||||
|
*/
|
||||||
|
class Call extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/**
|
||||||
|
* Call ID
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.id = data.id;
|
||||||
|
/**
|
||||||
|
* From
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.from = data.peerJid;
|
||||||
|
/**
|
||||||
|
* Unix timestamp for when the call was created
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.timestamp = data.offerTime;
|
||||||
|
/**
|
||||||
|
* Is video
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.isVideo = data.isVideo;
|
||||||
|
/**
|
||||||
|
* Is Group
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.isGroup = data.isGroup;
|
||||||
|
/**
|
||||||
|
* Indicates if the call was sent by the current user
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.fromMe = data.outgoing;
|
||||||
|
/**
|
||||||
|
* Indicates if the call can be handled in waweb
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.canHandleLocally = data.canHandleLocally;
|
||||||
|
/**
|
||||||
|
* Indicates if the call Should be handled in waweb
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.webClientShouldHandle = data.webClientShouldHandle;
|
||||||
|
/**
|
||||||
|
* Object with participants
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.participants = data.participants;
|
||||||
|
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reject the call
|
||||||
|
*/
|
||||||
|
async reject() {
|
||||||
|
return this.client.pupPage.evaluate((peerJid, id) => {
|
||||||
|
return window.WWebJS.rejectCall(peerJid, id);
|
||||||
|
}, this.from, this.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Call;
|
||||||
@@ -65,7 +65,7 @@ class Chat extends Base {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the chat is muted or not
|
* Indicates if the chat is muted or not
|
||||||
* @type {number}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
this.isMuted = data.isMuted;
|
this.isMuted = data.isMuted;
|
||||||
|
|
||||||
@@ -75,6 +75,12 @@ class Chat extends Base {
|
|||||||
*/
|
*/
|
||||||
this.muteExpiration = data.muteExpiration;
|
this.muteExpiration = data.muteExpiration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Last message fo chat
|
||||||
|
* @type {Message}
|
||||||
|
*/
|
||||||
|
this.lastMessage = data.lastMessage ? new Message(super.client, data.lastMessage) : undefined;
|
||||||
|
|
||||||
return super._patch(data);
|
return super._patch(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,8 +153,8 @@ class Chat extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mutes this chat until a specified date
|
* Mutes this chat forever, unless a date is specified
|
||||||
* @param {Date} unmuteDate Date at which the Chat will be unmuted
|
* @param {?Date} unmuteDate Date at which the Chat will be unmuted, leave as is to mute forever
|
||||||
*/
|
*/
|
||||||
async mute(unmuteDate) {
|
async mute(unmuteDate) {
|
||||||
return this.client.muteChat(this.id._serialized, unmuteDate);
|
return this.client.muteChat(this.id._serialized, unmuteDate);
|
||||||
@@ -170,31 +176,42 @@ class Chat extends Base {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads chat messages, sorted from earliest to latest.
|
* Loads chat messages, sorted from earliest to latest.
|
||||||
* @param {Object} searchOptions Options for searching messages. Right now only limit is supported.
|
* @param {Object} searchOptions Options for searching messages. Right now only limit and fromMe is supported.
|
||||||
* @param {Number} [searchOptions.limit=50] The amount of messages to return. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.
|
* @param {Number} [searchOptions.limit] The amount of messages to return. If no limit is specified, the available messages will be returned. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.
|
||||||
|
* @param {Boolean} [searchOptions.fromMe] Return only messages from the bot number or vise versa. To get all messages, leave the option undefined.
|
||||||
* @returns {Promise<Array<Message>>}
|
* @returns {Promise<Array<Message>>}
|
||||||
*/
|
*/
|
||||||
async fetchMessages(searchOptions) {
|
async fetchMessages(searchOptions) {
|
||||||
if (!searchOptions || !searchOptions.limit) {
|
let messages = await this.client.pupPage.evaluate(async (chatId, searchOptions) => {
|
||||||
searchOptions = { limit: 50 };
|
const msgFilter = (m) => {
|
||||||
}
|
if (m.isNotification) {
|
||||||
let messages = await this.client.pupPage.evaluate(async (chatId, limit) => {
|
return false; // dont include notification messages
|
||||||
const msgFilter = m => !m.isNotification; // dont include notification messages
|
}
|
||||||
|
if (searchOptions && searchOptions.fromMe && m.id.fromMe !== searchOptions.fromMe) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
const chat = window.Store.Chat.get(chatId);
|
const chat = window.Store.Chat.get(chatId);
|
||||||
let msgs = chat.msgs.models.filter(msgFilter);
|
let msgs = chat.msgs.getModelsArray().filter(msgFilter);
|
||||||
|
|
||||||
while (msgs.length < limit) {
|
if (searchOptions && searchOptions.limit > 0) {
|
||||||
const loadedMessages = await chat.loadEarlierMsgs();
|
while (msgs.length < searchOptions.limit) {
|
||||||
if (!loadedMessages) break;
|
const loadedMessages = await window.Store.ConversationMsgs.loadEarlierMsgs(chat);
|
||||||
msgs = [...loadedMessages.filter(msgFilter), ...msgs];
|
if (!loadedMessages || !loadedMessages.length) break;
|
||||||
|
msgs = [...loadedMessages.filter(msgFilter), ...msgs];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msgs.length > searchOptions.limit) {
|
||||||
|
msgs.sort((a, b) => (a.t > b.t) ? 1 : -1);
|
||||||
|
msgs = msgs.splice(msgs.length - searchOptions.limit);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
msgs.sort((a, b) => (a.t > b.t) ? 1 : -1);
|
|
||||||
if (msgs.length > limit) msgs = msgs.splice(msgs.length - limit);
|
|
||||||
return msgs.map(m => window.WWebJS.getMessageModel(m));
|
return msgs.map(m => window.WWebJS.getMessageModel(m));
|
||||||
|
|
||||||
}, this.id._serialized, searchOptions.limit);
|
}, this.id._serialized, searchOptions);
|
||||||
|
|
||||||
return messages.map(m => new Message(this.client, m));
|
return messages.map(m => new Message(this.client, m));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,12 +20,6 @@ class ClientInfo extends Base {
|
|||||||
*/
|
*/
|
||||||
this.pushname = data.pushname;
|
this.pushname = data.pushname;
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {object}
|
|
||||||
* @deprecated Use .wid instead
|
|
||||||
*/
|
|
||||||
this.me = data.wid;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Current user ID
|
* Current user ID
|
||||||
* @type {object}
|
* @type {object}
|
||||||
@@ -33,18 +27,25 @@ class ClientInfo extends Base {
|
|||||||
this.wid = data.wid;
|
this.wid = data.wid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Information about the phone this client is connected to
|
* @type {object}
|
||||||
|
* @deprecated Use .wid instead
|
||||||
|
*/
|
||||||
|
this.me = data.wid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Information about the phone this client is connected to. Not available in multi-device.
|
||||||
* @type {object}
|
* @type {object}
|
||||||
* @property {string} wa_version WhatsApp Version running on the phone
|
* @property {string} wa_version WhatsApp Version running on the phone
|
||||||
* @property {string} os_version OS Version running on the phone (iOS or Android version)
|
* @property {string} os_version OS Version running on the phone (iOS or Android version)
|
||||||
* @property {string} device_manufacturer Device manufacturer
|
* @property {string} device_manufacturer Device manufacturer
|
||||||
* @property {string} device_model Device model
|
* @property {string} device_model Device model
|
||||||
* @property {string} os_build_number OS build number
|
* @property {string} os_build_number OS build number
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
this.phone = data.phone;
|
this.phone = data.phone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Platform the phone is running on
|
* Platform WhatsApp is running on
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
this.platform = data.platform;
|
this.platform = data.platform;
|
||||||
@@ -57,6 +58,7 @@ class ClientInfo extends Base {
|
|||||||
* @returns {object} batteryStatus
|
* @returns {object} batteryStatus
|
||||||
* @returns {number} batteryStatus.battery - The current battery percentage
|
* @returns {number} batteryStatus.battery - The current battery percentage
|
||||||
* @returns {boolean} batteryStatus.plugged - Indicates if the phone is plugged in (true) or not (false)
|
* @returns {boolean} batteryStatus.plugged - Indicates if the phone is plugged in (true) or not (false)
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
async getBatteryStatus() {
|
async getBatteryStatus() {
|
||||||
return await this.client.pupPage.evaluate(() => {
|
return await this.client.pupPage.evaluate(() => {
|
||||||
@@ -64,7 +66,6 @@ class ClientInfo extends Base {
|
|||||||
return { battery, plugged };
|
return { battery, plugged };
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = ClientInfo;
|
module.exports = ClientInfo;
|
||||||
@@ -120,6 +120,22 @@ class Contact extends Base {
|
|||||||
return await this.client.getProfilePicUrl(this.id._serialized);
|
return await this.client.getProfilePicUrl(this.id._serialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the contact's formatted phone number, (12345678901@c.us) => (+1 (234) 5678-901)
|
||||||
|
* @returns {Promise<string>}
|
||||||
|
*/
|
||||||
|
async getFormattedNumber() {
|
||||||
|
return await this.client.getFormattedNumber(this.id._serialized);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the contact's countrycode, (1541859685@c.us) => (1)
|
||||||
|
* @returns {Promise<string>}
|
||||||
|
*/
|
||||||
|
async getCountryCode() {
|
||||||
|
return await this.client.getCountryCode(this.id._serialized);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Chat that corresponds to this Contact.
|
* Returns the Chat that corresponds to this Contact.
|
||||||
* Will return null when getting chat for currently logged in user.
|
* Will return null when getting chat for currently logged in user.
|
||||||
@@ -167,7 +183,8 @@ class Contact extends Base {
|
|||||||
*/
|
*/
|
||||||
async getAbout() {
|
async getAbout() {
|
||||||
const about = await this.client.pupPage.evaluate(async (contactId) => {
|
const about = await this.client.pupPage.evaluate(async (contactId) => {
|
||||||
return window.Store.Wap.statusFind(contactId);
|
const wid = window.Store.WidFactory.createWid(contactId);
|
||||||
|
return window.Store.StatusUtils.getStatus(wid);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
if (typeof about.status !== 'string')
|
if (typeof about.status !== 'string')
|
||||||
@@ -176,6 +193,14 @@ class Contact extends Base {
|
|||||||
return about.status;
|
return about.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Contact's common groups with you. Returns empty array if you don't have any common group.
|
||||||
|
* @returns {Promise<WAWebJS.ChatId[]>}
|
||||||
|
*/
|
||||||
|
async getCommonGroups() {
|
||||||
|
return await this.client.getCommonGroups(this.id._serialized);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Contact;
|
module.exports = Contact;
|
||||||
@@ -59,8 +59,15 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise<Object>}
|
* @returns {Promise<Object>}
|
||||||
*/
|
*/
|
||||||
async addParticipants(participantIds) {
|
async addParticipants(participantIds) {
|
||||||
return await this.client.pupPage.evaluate((chatId, participantIds) => {
|
return await this.client.pupPage.evaluate(async (chatId, participantIds) => {
|
||||||
return window.Store.Wap.addParticipants(chatId, participantIds);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
const participants = await Promise.all(participantIds.map(async p => {
|
||||||
|
const wid = window.Store.WidFactory.createWid(p);
|
||||||
|
return await window.Store.Contact.get(wid);
|
||||||
|
}));
|
||||||
|
await window.Store.GroupParticipants.addParticipants(chat, participants);
|
||||||
|
return { status: 200 };
|
||||||
}, this.id._serialized, participantIds);
|
}, this.id._serialized, participantIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,8 +77,14 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise<Object>}
|
* @returns {Promise<Object>}
|
||||||
*/
|
*/
|
||||||
async removeParticipants(participantIds) {
|
async removeParticipants(participantIds) {
|
||||||
return await this.client.pupPage.evaluate((chatId, participantIds) => {
|
return await this.client.pupPage.evaluate(async (chatId, participantIds) => {
|
||||||
return window.Store.Wap.removeParticipants(chatId, participantIds);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
const participants = participantIds.map(p => {
|
||||||
|
return chat.groupMetadata.participants.get(p);
|
||||||
|
}).filter(p => Boolean(p));
|
||||||
|
await window.Store.GroupParticipants.removeParticipants(chat, participants);
|
||||||
|
return { status: 200 };
|
||||||
}, this.id._serialized, participantIds);
|
}, this.id._serialized, participantIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,8 +94,14 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise<{ status: number }>} Object with status code indicating if the operation was successful
|
* @returns {Promise<{ status: number }>} Object with status code indicating if the operation was successful
|
||||||
*/
|
*/
|
||||||
async promoteParticipants(participantIds) {
|
async promoteParticipants(participantIds) {
|
||||||
return await this.client.pupPage.evaluate((chatId, participantIds) => {
|
return await this.client.pupPage.evaluate(async (chatId, participantIds) => {
|
||||||
return window.Store.Wap.promoteParticipants(chatId, participantIds);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
const participants = participantIds.map(p => {
|
||||||
|
return chat.groupMetadata.participants.get(p);
|
||||||
|
}).filter(p => Boolean(p));
|
||||||
|
await window.Store.GroupParticipants.promoteParticipants(chat, participants);
|
||||||
|
return { status: 200 };
|
||||||
}, this.id._serialized, participantIds);
|
}, this.id._serialized, participantIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,40 +111,60 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise<{ status: number }>} Object with status code indicating if the operation was successful
|
* @returns {Promise<{ status: number }>} Object with status code indicating if the operation was successful
|
||||||
*/
|
*/
|
||||||
async demoteParticipants(participantIds) {
|
async demoteParticipants(participantIds) {
|
||||||
return await this.client.pupPage.evaluate((chatId, participantIds) => {
|
return await this.client.pupPage.evaluate(async (chatId, participantIds) => {
|
||||||
return window.Store.Wap.demoteParticipants(chatId, participantIds);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
const participants = participantIds.map(p => {
|
||||||
|
return chat.groupMetadata.participants.get(p);
|
||||||
|
}).filter(p => Boolean(p));
|
||||||
|
await window.Store.GroupParticipants.demoteParticipants(chat, participants);
|
||||||
|
return { status: 200 };
|
||||||
}, this.id._serialized, participantIds);
|
}, this.id._serialized, participantIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the group subject
|
* Updates the group subject
|
||||||
* @param {string} subject
|
* @param {string} subject
|
||||||
* @returns {Promise}
|
* @returns {Promise<boolean>} Returns true if the subject was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
*/
|
*/
|
||||||
async setSubject(subject) {
|
async setSubject(subject) {
|
||||||
let res = await this.client.pupPage.evaluate((chatId, subject) => {
|
const success = await this.client.pupPage.evaluate(async (chatId, subject) => {
|
||||||
return window.Store.Wap.changeSubject(chatId, subject);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
try {
|
||||||
|
await window.Store.GroupUtils.setGroupSubject(chatWid, subject);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return false;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, this.id._serialized, subject);
|
}, this.id._serialized, subject);
|
||||||
|
|
||||||
if(res.status == 200) {
|
if(!success) return false;
|
||||||
this.name = subject;
|
this.name = subject;
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the group description
|
* Updates the group description
|
||||||
* @param {string} description
|
* @param {string} description
|
||||||
* @returns {Promise}
|
* @returns {Promise<boolean>} Returns true if the description was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
*/
|
*/
|
||||||
async setDescription(description) {
|
async setDescription(description) {
|
||||||
let res = await this.client.pupPage.evaluate((chatId, description) => {
|
const success = await this.client.pupPage.evaluate(async (chatId, description) => {
|
||||||
let descId = window.Store.GroupMetadata.get(chatId).descId;
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
return window.Store.Wap.setGroupDescription(chatId, description, window.Store.genId(), descId);
|
let descId = window.Store.GroupMetadata.get(chatWid).descId;
|
||||||
|
try {
|
||||||
|
await window.Store.GroupUtils.setGroupDescription(chatWid, description, window.Store.MsgKey.newId(), descId);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return false;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, this.id._serialized, description);
|
}, this.id._serialized, description);
|
||||||
|
|
||||||
if (res.status == 200) {
|
if(!success) return false;
|
||||||
this.groupMetadata.desc = description;
|
this.groupMetadata.desc = description;
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -134,11 +173,18 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise<boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
* @returns {Promise<boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
*/
|
*/
|
||||||
async setMessagesAdminsOnly(adminsOnly=true) {
|
async setMessagesAdminsOnly(adminsOnly=true) {
|
||||||
let res = await this.client.pupPage.evaluate((chatId, value) => {
|
const success = await this.client.pupPage.evaluate(async (chatId, adminsOnly) => {
|
||||||
return window.Store.Wap.setGroupProperty(chatId, 'announcement', value);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
try {
|
||||||
|
await window.Store.GroupUtils.setGroupProperty(chatWid, 'announcement', adminsOnly ? 1 : 0);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return false;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, this.id._serialized, adminsOnly);
|
}, this.id._serialized, adminsOnly);
|
||||||
|
|
||||||
if (res.status !== 200) return false;
|
if(!success) return false;
|
||||||
|
|
||||||
this.groupMetadata.announce = adminsOnly;
|
this.groupMetadata.announce = adminsOnly;
|
||||||
return true;
|
return true;
|
||||||
@@ -150,40 +196,72 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise<boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
* @returns {Promise<boolean>} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
*/
|
*/
|
||||||
async setInfoAdminsOnly(adminsOnly=true) {
|
async setInfoAdminsOnly(adminsOnly=true) {
|
||||||
let res = await this.client.pupPage.evaluate((chatId, value) => {
|
const success = await this.client.pupPage.evaluate(async (chatId, adminsOnly) => {
|
||||||
return window.Store.Wap.setGroupProperty(chatId, 'restrict', value);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
try {
|
||||||
|
await window.Store.GroupUtils.setGroupProperty(chatWid, 'restrict', adminsOnly ? 1 : 0);
|
||||||
|
return true;
|
||||||
|
} catch (err) {
|
||||||
|
if(err.name === 'ServerStatusCodeError') return false;
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
}, this.id._serialized, adminsOnly);
|
}, this.id._serialized, adminsOnly);
|
||||||
|
|
||||||
if (res.status !== 200) return false;
|
if(!success) return false;
|
||||||
|
|
||||||
this.groupMetadata.restrict = adminsOnly;
|
this.groupMetadata.restrict = adminsOnly;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes the group's picture.
|
||||||
|
* @returns {Promise<boolean>} Returns true if the picture was properly deleted. This can return false if the user does not have the necessary permissions.
|
||||||
|
*/
|
||||||
|
async deletePicture() {
|
||||||
|
const success = await this.client.pupPage.evaluate((chatid) => {
|
||||||
|
return window.WWebJS.deletePicture(chatid);
|
||||||
|
}, this.id._serialized);
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the group's picture.
|
||||||
|
* @param {MessageMedia} media
|
||||||
|
* @returns {Promise<boolean>} Returns true if the picture was properly updated. This can return false if the user does not have the necessary permissions.
|
||||||
|
*/
|
||||||
|
async setPicture(media) {
|
||||||
|
const success = await this.client.pupPage.evaluate((chatid, media) => {
|
||||||
|
return window.WWebJS.setPicture(chatid, media);
|
||||||
|
}, this.id._serialized, media);
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the invite code for a specific group
|
* Gets the invite code for a specific group
|
||||||
* @returns {Promise<string>} Group's invite code
|
* @returns {Promise<string>} Group's invite code
|
||||||
*/
|
*/
|
||||||
async getInviteCode() {
|
async getInviteCode() {
|
||||||
let res = await this.client.pupPage.evaluate(chatId => {
|
const codeRes = await this.client.pupPage.evaluate(async chatId => {
|
||||||
return window.Store.Wap.groupInviteCode(chatId);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
return window.Store.Invite.queryGroupInviteCode(chatWid);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
if (res.status == 200) {
|
return codeRes.code;
|
||||||
return res.code;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Error('Not authorized');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invalidates the current group invite code and generates a new one
|
* Invalidates the current group invite code and generates a new one
|
||||||
* @returns {Promise}
|
* @returns {Promise<string>} New invite code
|
||||||
*/
|
*/
|
||||||
async revokeInvite() {
|
async revokeInvite() {
|
||||||
return await this.client.pupPage.evaluate(chatId => {
|
const codeRes = await this.client.pupPage.evaluate(chatId => {
|
||||||
return window.Store.Wap.revokeGroupInvite(chatId);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
return window.Store.Invite.resetGroupInviteCode(chatWid);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
|
return codeRes.code;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -191,8 +269,10 @@ class GroupChat extends Chat {
|
|||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
*/
|
*/
|
||||||
async leave() {
|
async leave() {
|
||||||
return await this.client.pupPage.evaluate(chatId => {
|
await this.client.pupPage.evaluate(async chatId => {
|
||||||
return window.Store.Wap.leaveGroup(chatId);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
const chat = await window.Store.Chat.find(chatWid);
|
||||||
|
return window.Store.GroupUtils.sendExitGroup(chat);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class GroupNotification extends Base {
|
|||||||
*
|
*
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
this.chatId = typeof (data.from) === 'object' ? data.from._serialized : data.from;
|
this.chatId = typeof (data.id.remote) === 'object' ? data.id.remote._serialized : data.id.remote;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ContactId for the user that produced the GroupNotification.
|
* ContactId for the user that produced the GroupNotification.
|
||||||
|
|||||||
79
src/structures/List.js
Normal file
79
src/structures/List.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const Util = require('../util/Util');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Message type List
|
||||||
|
*/
|
||||||
|
class List {
|
||||||
|
/**
|
||||||
|
* @param {string} body
|
||||||
|
* @param {string} buttonText
|
||||||
|
* @param {Array<any>} sections
|
||||||
|
* @param {string?} title
|
||||||
|
* @param {string?} footer
|
||||||
|
*/
|
||||||
|
constructor(body, buttonText, sections, title, footer) {
|
||||||
|
/**
|
||||||
|
* Message body
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.description = body;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List button text
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.buttonText = buttonText;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* title of message
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.title = title;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* footer of message
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.footer = footer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sections of message
|
||||||
|
* @type {Array<any>}
|
||||||
|
*/
|
||||||
|
this.sections = this._format(sections);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates section array from simple array
|
||||||
|
* @param {Array<any>} sections
|
||||||
|
* @returns {Array<any>}
|
||||||
|
* @example
|
||||||
|
* Input: [{title:'sectionTitle',rows:[{id:'customId', title:'ListItem2', description: 'desc'},{title:'ListItem2'}]}}]
|
||||||
|
* Returns: [{'title':'sectionTitle','rows':[{'rowId':'customId','title':'ListItem1','description':'desc'},{'rowId':'oGSRoD','title':'ListItem2','description':''}]}]
|
||||||
|
*/
|
||||||
|
_format(sections){
|
||||||
|
if(!sections.length){throw '[LT02] List without sections';}
|
||||||
|
if(sections.length > 1 && sections.filter(s => typeof s.title == 'undefined').length > 1){throw '[LT05] You can\'t have more than one empty title.';}
|
||||||
|
return sections.map( (section) =>{
|
||||||
|
if(!section.rows.length){throw '[LT03] Section without rows';}
|
||||||
|
return {
|
||||||
|
title: section.title ? section.title : undefined,
|
||||||
|
rows: section.rows.map( (row) => {
|
||||||
|
if(!row.title){throw '[LT04] Row without title';}
|
||||||
|
return {
|
||||||
|
rowId: row.id ? row.id : Util.generateHash(6),
|
||||||
|
title: row.title,
|
||||||
|
description: row.description ? row.description : ''
|
||||||
|
};
|
||||||
|
})
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = List;
|
||||||
@@ -3,7 +3,10 @@
|
|||||||
const Base = require('./Base');
|
const Base = require('./Base');
|
||||||
const MessageMedia = require('./MessageMedia');
|
const MessageMedia = require('./MessageMedia');
|
||||||
const Location = require('./Location');
|
const Location = require('./Location');
|
||||||
const { MessageTypes } = require('../util/Constants');
|
const Order = require('./Order');
|
||||||
|
const Payment = require('./Payment');
|
||||||
|
const Reaction = require('./Reaction');
|
||||||
|
const {MessageTypes} = require('../util/Constants');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a Message on WhatsApp
|
* Represents a Message on WhatsApp
|
||||||
@@ -17,13 +20,14 @@ class Message extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_patch(data) {
|
_patch(data) {
|
||||||
|
this._data = data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MediaKey that represents the sticker 'ID'
|
* MediaKey that represents the sticker 'ID'
|
||||||
* @type {string}
|
* @type {string}
|
||||||
*/
|
*/
|
||||||
this.mediaKey = data.mediaKey;
|
this.mediaKey = data.mediaKey;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ID that represents the message
|
* ID that represents the message
|
||||||
* @type {object}
|
* @type {object}
|
||||||
@@ -40,7 +44,7 @@ class Message extends Base {
|
|||||||
* Indicates if the message has media available for download
|
* Indicates if the message has media available for download
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
this.hasMedia = data.clientUrl || data.deprecatedMms3Url ? true : false;
|
this.hasMedia = Boolean(data.mediaKey && data.directPath);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message content
|
* Message content
|
||||||
@@ -81,12 +85,26 @@ class Message extends Base {
|
|||||||
*/
|
*/
|
||||||
this.author = (typeof (data.author) === 'object' && data.author !== null) ? data.author._serialized : data.author;
|
this.author = (typeof (data.author) === 'object' && data.author !== null) ? data.author._serialized : data.author;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String that represents from which device type the message was sent
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.deviceType = data.id.id.length > 21 ? 'android' : data.id.id.substring(0, 2) == '3A' ? 'ios' : 'web';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the message was forwarded
|
* Indicates if the message was forwarded
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
*/
|
*/
|
||||||
this.isForwarded = data.isForwarded;
|
this.isForwarded = data.isForwarded;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates how many times the message was forwarded.
|
||||||
|
*
|
||||||
|
* The maximum value is 127.
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.forwardingScore = data.forwardingScore || 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates if the message is a status update
|
* Indicates if the message is a status update
|
||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
@@ -117,6 +135,18 @@ class Message extends Base {
|
|||||||
*/
|
*/
|
||||||
this.hasQuotedMsg = data.quotedMsg ? true : false;
|
this.hasQuotedMsg = data.quotedMsg ? true : false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether there are reactions to the message
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.hasReaction = data.hasReaction ? true : false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates the duration of the message in seconds
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.duration = data.duration ? data.duration : undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Location information contained in the message, if the message is type "location"
|
* Location information contained in the message, if the message is type "location"
|
||||||
* @type {Location}
|
* @type {Location}
|
||||||
@@ -129,6 +159,19 @@ class Message extends Base {
|
|||||||
*/
|
*/
|
||||||
this.vCards = data.type === MessageTypes.CONTACT_CARD_MULTI ? data.vcardList.map((c) => c.vcard) : data.type === MessageTypes.CONTACT_CARD ? [data.body] : [];
|
this.vCards = data.type === MessageTypes.CONTACT_CARD_MULTI ? data.vcardList.map((c) => c.vcard) : data.type === MessageTypes.CONTACT_CARD ? [data.body] : [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Group Invite Data
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.inviteV4 = data.type === MessageTypes.GROUP_INVITE ? {
|
||||||
|
inviteCode: data.inviteCode,
|
||||||
|
inviteCodeExp: data.inviteCodeExp,
|
||||||
|
groupId: data.inviteGrp,
|
||||||
|
groupName: data.inviteGrpName,
|
||||||
|
fromId: data.from._serialized,
|
||||||
|
toId: data.to._serialized
|
||||||
|
} : undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates the mentions in the message body.
|
* Indicates the mentions in the message body.
|
||||||
* @type {Array<string>}
|
* @type {Array<string>}
|
||||||
@@ -139,12 +182,71 @@ class Message extends Base {
|
|||||||
this.mentionedIds = data.mentionedJidList;
|
this.mentionedIds = data.mentionedJidList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Order ID for message type ORDER
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.orderId = data.orderId ? data.orderId : undefined;
|
||||||
|
/**
|
||||||
|
* Order Token for message type ORDER
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.token = data.token ? data.token : undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether the message is a Gif
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.isGif = Boolean(data.isGif);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the message will disappear after it expires
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
this.isEphemeral = data.isEphemeral;
|
||||||
|
|
||||||
|
/** Title */
|
||||||
|
if (data.title) {
|
||||||
|
this.title = data.title;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Description */
|
||||||
|
if (data.description) {
|
||||||
|
this.description = data.description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Business Owner JID */
|
||||||
|
if (data.businessOwnerJid) {
|
||||||
|
this.businessOwnerJid = data.businessOwnerJid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Product ID */
|
||||||
|
if (data.productId) {
|
||||||
|
this.productId = data.productId;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Links included in the message.
|
* Links included in the message.
|
||||||
* @type {Array<string>}
|
* @type {Array<{link: string, isSuspicious: boolean}>}
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
this.links = data.links;
|
this.links = data.links;
|
||||||
|
|
||||||
|
/** Buttons */
|
||||||
|
if (data.dynamicReplyButtons) {
|
||||||
|
this.dynamicReplyButtons = data.dynamicReplyButtons;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Selected Button Id **/
|
||||||
|
if (data.selectedButtonId) {
|
||||||
|
this.selectedButtonId = data.selectedButtonId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Selected List row Id **/
|
||||||
|
if (data.listResponse && data.listResponse.singleSelectReply.selectedRowId) {
|
||||||
|
this.selectedRowId = data.listResponse.singleSelectReply.selectedRowId;
|
||||||
|
}
|
||||||
|
|
||||||
return super._patch(data);
|
return super._patch(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,6 +254,32 @@ class Message extends Base {
|
|||||||
return this.fromMe ? this.to : this.from;
|
return this.fromMe ? this.to : this.from;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reloads this Message object's data in-place with the latest values from WhatsApp Web.
|
||||||
|
* Note that the Message must still be in the web app cache for this to work, otherwise will return null.
|
||||||
|
* @returns {Promise<Message>}
|
||||||
|
*/
|
||||||
|
async reload() {
|
||||||
|
const newData = await this.client.pupPage.evaluate((msgId) => {
|
||||||
|
const msg = window.Store.Msg.get(msgId);
|
||||||
|
if(!msg) return null;
|
||||||
|
return window.WWebJS.getMessageModel(msg);
|
||||||
|
}, this.id._serialized);
|
||||||
|
|
||||||
|
if(!newData) return null;
|
||||||
|
|
||||||
|
this._patch(newData);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns message in a raw format
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
get rawData() {
|
||||||
|
return this._data;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Chat this message was sent in
|
* Returns the Chat this message was sent in
|
||||||
* @returns {Promise<Chat>}
|
* @returns {Promise<Chat>}
|
||||||
@@ -184,8 +312,9 @@ class Message extends Base {
|
|||||||
if (!this.hasQuotedMsg) return undefined;
|
if (!this.hasQuotedMsg) return undefined;
|
||||||
|
|
||||||
const quotedMsg = await this.client.pupPage.evaluate((msgId) => {
|
const quotedMsg = await this.client.pupPage.evaluate((msgId) => {
|
||||||
let msg = window.Store.Msg.get(msgId);
|
const msg = window.Store.Msg.get(msgId);
|
||||||
return msg.quotedMsgObj().serialize();
|
const quotedMsg = window.Store.QuotedMsg.getQuotedMsgObj(msg);
|
||||||
|
return window.WWebJS.getMessageModel(quotedMsg);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
return new Message(this.client, quotedMsg);
|
return new Message(this.client, quotedMsg);
|
||||||
@@ -215,7 +344,29 @@ class Message extends Base {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forwards this message to another chat
|
* React to this message with an emoji
|
||||||
|
* @param {string} reaction - Emoji to react with. Send an empty string to remove the reaction.
|
||||||
|
* @return {Promise}
|
||||||
|
*/
|
||||||
|
async react(reaction){
|
||||||
|
await this.client.pupPage.evaluate(async (messageId, reaction) => {
|
||||||
|
if (!messageId) { return undefined; }
|
||||||
|
|
||||||
|
const msg = await window.Store.Msg.get(messageId);
|
||||||
|
await window.Store.sendReactionToMsg(msg, reaction);
|
||||||
|
}, this.id._serialized, reaction);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Accept Group V4 Invite
|
||||||
|
* @returns {Promise<Object>}
|
||||||
|
*/
|
||||||
|
async acceptGroupV4Invite() {
|
||||||
|
return await this.client.acceptGroupV4Invite(this.inviteV4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forwards this message to another chat (that you chatted before, otherwise it will fail)
|
||||||
*
|
*
|
||||||
* @param {string|Chat} chat Chat model or chat ID to which the message will be forwarded
|
* @param {string|Chat} chat Chat model or chat ID to which the message will be forwarded
|
||||||
* @returns {Promise}
|
* @returns {Promise}
|
||||||
@@ -242,45 +393,62 @@ class Message extends Base {
|
|||||||
|
|
||||||
const result = await this.client.pupPage.evaluate(async (msgId) => {
|
const result = await this.client.pupPage.evaluate(async (msgId) => {
|
||||||
const msg = window.Store.Msg.get(msgId);
|
const msg = window.Store.Msg.get(msgId);
|
||||||
|
if (!msg) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
if (msg.mediaData.mediaStage != 'RESOLVED') {
|
if (msg.mediaData.mediaStage != 'RESOLVED') {
|
||||||
// try to resolve media
|
// try to resolve media
|
||||||
await msg.downloadMedia(true, 1);
|
await msg.downloadMedia({
|
||||||
|
downloadEvenIfExpensive: true,
|
||||||
|
rmrReason: 1
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg.mediaData.mediaStage.includes('ERROR')) {
|
if (msg.mediaData.mediaStage.includes('ERROR') || msg.mediaData.mediaStage === 'FETCHING') {
|
||||||
// media could not be downloaded
|
// media could not be downloaded
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const mediaUrl = msg.clientUrl || msg.deprecatedMms3Url;
|
try {
|
||||||
|
const decryptedMedia = await window.Store.DownloadManager.downloadAndMaybeDecrypt({
|
||||||
|
directPath: msg.directPath,
|
||||||
|
encFilehash: msg.encFilehash,
|
||||||
|
filehash: msg.filehash,
|
||||||
|
mediaKey: msg.mediaKey,
|
||||||
|
mediaKeyTimestamp: msg.mediaKeyTimestamp,
|
||||||
|
type: msg.type,
|
||||||
|
signal: (new AbortController).signal
|
||||||
|
});
|
||||||
|
|
||||||
const buffer = await window.WWebJS.downloadBuffer(mediaUrl);
|
const data = await window.WWebJS.arrayBufferToBase64Async(decryptedMedia);
|
||||||
const decrypted = await window.Store.CryptoLib.decryptE2EMedia(msg.type, buffer, msg.mediaKey, msg.mimetype);
|
|
||||||
const data = await window.WWebJS.readBlobAsync(decrypted._blob);
|
|
||||||
|
|
||||||
return {
|
|
||||||
data: data.split(',')[1],
|
|
||||||
mimetype: msg.mimetype,
|
|
||||||
filename: msg.filename
|
|
||||||
};
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
data,
|
||||||
|
mimetype: msg.mimetype,
|
||||||
|
filename: msg.filename,
|
||||||
|
filesize: msg.size
|
||||||
|
};
|
||||||
|
} catch (e) {
|
||||||
|
if(e.status && e.status === 404) return undefined;
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
if (!result) return undefined;
|
if (!result) return undefined;
|
||||||
return new MessageMedia(result.mimetype, result.data, result.filename);
|
return new MessageMedia(result.mimetype, result.data, result.filename, result.filesize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes a message from the chat
|
* Deletes a message from the chat
|
||||||
* @param {?boolean} everyone If true and the message is sent by the current user, will delete it for everyone in the chat.
|
* @param {?boolean} everyone If true and the message is sent by the current user or the user is an admin, will delete it for everyone in the chat.
|
||||||
*/
|
*/
|
||||||
async delete(everyone) {
|
async delete(everyone) {
|
||||||
await this.client.pupPage.evaluate((msgId, everyone) => {
|
await this.client.pupPage.evaluate((msgId, everyone) => {
|
||||||
let msg = window.Store.Msg.get(msgId);
|
let msg = window.Store.Msg.get(msgId);
|
||||||
|
|
||||||
if (everyone && msg.id.fromMe && msg.canRevoke()) {
|
const canRevoke = window.Store.MsgActionChecks.canSenderRevokeMsg(msg) || window.Store.MsgActionChecks.canAdminRevokeMsg(msg);
|
||||||
return window.Store.Cmd.sendRevokeMsgs(msg.chat, [msg], true);
|
if (everyone && canRevoke) {
|
||||||
|
return window.Store.Cmd.sendRevokeMsgs(msg.chat, [msg], { type: msg.id.fromMe ? 'Sender' : 'Admin' });
|
||||||
}
|
}
|
||||||
|
|
||||||
return window.Store.Cmd.sendDeleteMsgs(msg.chat, [msg], true);
|
return window.Store.Cmd.sendDeleteMsgs(msg.chat, [msg], true);
|
||||||
@@ -294,8 +462,8 @@ class Message extends Base {
|
|||||||
await this.client.pupPage.evaluate((msgId) => {
|
await this.client.pupPage.evaluate((msgId) => {
|
||||||
let msg = window.Store.Msg.get(msgId);
|
let msg = window.Store.Msg.get(msgId);
|
||||||
|
|
||||||
if (msg.canStar()) {
|
if (window.Store.MsgActionChecks.canStarMsg(msg)) {
|
||||||
return msg.chat.sendStarMsgs([msg], true);
|
return window.Store.Cmd.sendStarMsgs(msg.chat, [msg], false);
|
||||||
}
|
}
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
}
|
}
|
||||||
@@ -307,8 +475,8 @@ class Message extends Base {
|
|||||||
await this.client.pupPage.evaluate((msgId) => {
|
await this.client.pupPage.evaluate((msgId) => {
|
||||||
let msg = window.Store.Msg.get(msgId);
|
let msg = window.Store.Msg.get(msgId);
|
||||||
|
|
||||||
if (msg.canStar()) {
|
if (window.Store.MsgActionChecks.canStarMsg(msg)) {
|
||||||
return msg.chat.sendStarMsgs([msg], false);
|
return window.Store.Cmd.sendUnstarMsgs(msg.chat, [msg], false);
|
||||||
}
|
}
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
}
|
}
|
||||||
@@ -331,16 +499,80 @@ class Message extends Base {
|
|||||||
async getInfo() {
|
async getInfo() {
|
||||||
const info = await this.client.pupPage.evaluate(async (msgId) => {
|
const info = await this.client.pupPage.evaluate(async (msgId) => {
|
||||||
const msg = window.Store.Msg.get(msgId);
|
const msg = window.Store.Msg.get(msgId);
|
||||||
if(!msg) return null;
|
if (!msg) return null;
|
||||||
|
|
||||||
return await window.Store.Wap.queryMsgInfo(msg.id);
|
return await window.Store.MessageInfo.sendQueryMsgInfo(msg.id);
|
||||||
}, this.id._serialized);
|
}, this.id._serialized);
|
||||||
|
|
||||||
if(info.status) {
|
return info;
|
||||||
return null;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the order associated with a given message
|
||||||
|
* @return {Promise<Order>}
|
||||||
|
*/
|
||||||
|
async getOrder() {
|
||||||
|
if (this.type === MessageTypes.ORDER) {
|
||||||
|
const result = await this.client.pupPage.evaluate((orderId, token, chatId) => {
|
||||||
|
return window.WWebJS.getOrderDetail(orderId, token, chatId);
|
||||||
|
}, this.orderId, this.token, this._getChatId());
|
||||||
|
if (!result) return undefined;
|
||||||
|
return new Order(this.client, result);
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Gets the payment details associated with a given message
|
||||||
|
* @return {Promise<Payment>}
|
||||||
|
*/
|
||||||
|
async getPayment() {
|
||||||
|
if (this.type === MessageTypes.PAYMENT) {
|
||||||
|
const msg = await this.client.pupPage.evaluate(async (msgId) => {
|
||||||
|
const msg = window.Store.Msg.get(msgId);
|
||||||
|
if(!msg) return null;
|
||||||
|
return msg.serialize();
|
||||||
|
}, this.id._serialized);
|
||||||
|
return new Payment(this.client, msg);
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reaction List
|
||||||
|
* @typedef {Object} ReactionList
|
||||||
|
* @property {string} id Original emoji
|
||||||
|
* @property {string} aggregateEmoji aggregate emoji
|
||||||
|
* @property {boolean} hasReactionByMe Flag who sent the reaction
|
||||||
|
* @property {Array<Reaction>} senders Reaction senders, to this message
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the reactions associated with the given message
|
||||||
|
* @return {Promise<ReactionList[]>}
|
||||||
|
*/
|
||||||
|
async getReactions() {
|
||||||
|
if (!this.hasReaction) {
|
||||||
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
return info;
|
const reactions = await this.client.pupPage.evaluate(async (msgId) => {
|
||||||
|
const msgReactions = await window.Store.Reactions.find(msgId);
|
||||||
|
if (!msgReactions || !msgReactions.reactions.length) return null;
|
||||||
|
return msgReactions.reactions.serialize();
|
||||||
|
}, this.id._serialized);
|
||||||
|
|
||||||
|
if (!reactions) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return reactions.map(reaction => {
|
||||||
|
reaction.senders = reaction.senders.map(sender => {
|
||||||
|
sender.timestamp = Math.round(sender.timestamp / 1000);
|
||||||
|
return new Reaction(this.client, sender);
|
||||||
|
});
|
||||||
|
return reaction;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,15 +3,18 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const mime = require('mime');
|
const mime = require('mime');
|
||||||
|
const fetch = require('node-fetch');
|
||||||
|
const { URL } = require('url');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Media attached to a message
|
* Media attached to a message
|
||||||
* @param {string} mimetype MIME type of the attachment
|
* @param {string} mimetype MIME type of the attachment
|
||||||
* @param {string} data Base64-encoded data of the file
|
* @param {string} data Base64-encoded data of the file
|
||||||
* @param {?string} filename Document file name
|
* @param {?string} filename Document file name. Value can be null
|
||||||
|
* @param {?number} filesize Document file size in bytes. Value can be null
|
||||||
*/
|
*/
|
||||||
class MessageMedia {
|
class MessageMedia {
|
||||||
constructor(mimetype, data, filename) {
|
constructor(mimetype, data, filename, filesize) {
|
||||||
/**
|
/**
|
||||||
* MIME type of the attachment
|
* MIME type of the attachment
|
||||||
* @type {string}
|
* @type {string}
|
||||||
@@ -25,10 +28,16 @@ class MessageMedia {
|
|||||||
this.data = data;
|
this.data = data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the file (for documents)
|
* Document file name. Value can be null
|
||||||
* @type {?string}
|
* @type {?string}
|
||||||
*/
|
*/
|
||||||
this.filename = filename;
|
this.filename = filename;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Document file size in bytes. Value can be null
|
||||||
|
* @type {?number}
|
||||||
|
*/
|
||||||
|
this.filesize = filesize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -43,6 +52,60 @@ class MessageMedia {
|
|||||||
|
|
||||||
return new MessageMedia(mimetype, b64data, filename);
|
return new MessageMedia(mimetype, b64data, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a MessageMedia instance from a URL
|
||||||
|
* @param {string} url
|
||||||
|
* @param {Object} [options]
|
||||||
|
* @param {boolean} [options.unsafeMime=false]
|
||||||
|
* @param {string} [options.filename]
|
||||||
|
* @param {object} [options.client]
|
||||||
|
* @param {object} [options.reqOptions]
|
||||||
|
* @param {number} [options.reqOptions.size=0]
|
||||||
|
* @returns {Promise<MessageMedia>}
|
||||||
|
*/
|
||||||
|
static async fromUrl(url, options = {}) {
|
||||||
|
const pUrl = new URL(url);
|
||||||
|
let mimetype = mime.getType(pUrl.pathname);
|
||||||
|
|
||||||
|
if (!mimetype && !options.unsafeMime)
|
||||||
|
throw new Error('Unable to determine MIME type using URL. Set unsafeMime to true to download it anyway.');
|
||||||
|
|
||||||
|
async function fetchData (url, options) {
|
||||||
|
const reqOptions = Object.assign({ headers: { accept: 'image/* video/* text/* audio/*' } }, options);
|
||||||
|
const response = await fetch(url, reqOptions);
|
||||||
|
const mime = response.headers.get('Content-Type');
|
||||||
|
const size = response.headers.get('Content-Length');
|
||||||
|
|
||||||
|
const contentDisposition = response.headers.get('Content-Disposition');
|
||||||
|
const name = contentDisposition ? contentDisposition.match(/((?<=filename=")(.*)(?="))/) : null;
|
||||||
|
|
||||||
|
let data = '';
|
||||||
|
if (response.buffer) {
|
||||||
|
data = (await response.buffer()).toString('base64');
|
||||||
|
} else {
|
||||||
|
const bArray = new Uint8Array(await response.arrayBuffer());
|
||||||
|
bArray.forEach((b) => {
|
||||||
|
data += String.fromCharCode(b);
|
||||||
|
});
|
||||||
|
data = btoa(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { data, mime, name, size };
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = options.client
|
||||||
|
? (await options.client.pupPage.evaluate(fetchData, url, options.reqOptions))
|
||||||
|
: (await fetchData(url, options.reqOptions));
|
||||||
|
|
||||||
|
const filename = options.filename ||
|
||||||
|
(res.name ? res.name[0] : (pUrl.pathname.split('/').pop() || 'file'));
|
||||||
|
|
||||||
|
if (!mimetype)
|
||||||
|
mimetype = res.mime;
|
||||||
|
|
||||||
|
return new MessageMedia(mimetype, res.data, filename, res.size || null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = MessageMedia;
|
module.exports = MessageMedia;
|
||||||
52
src/structures/Order.js
Normal file
52
src/structures/Order.js
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const Base = require('./Base');
|
||||||
|
const Product = require('./Product');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a Order on WhatsApp
|
||||||
|
* @extends {Base}
|
||||||
|
*/
|
||||||
|
class Order extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/**
|
||||||
|
* List of products
|
||||||
|
* @type {Array<Product>}
|
||||||
|
*/
|
||||||
|
if (data.products) {
|
||||||
|
this.products = data.products.map(product => new Product(this.client, product));
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Order Subtotal
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.subtotal = data.subtotal;
|
||||||
|
/**
|
||||||
|
* Order Total
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.total = data.total;
|
||||||
|
/**
|
||||||
|
* Order Currency
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.currency = data.currency;
|
||||||
|
/**
|
||||||
|
* Order Created At
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.createdAt = data.createdAt;
|
||||||
|
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Order;
|
||||||
79
src/structures/Payment.js
Normal file
79
src/structures/Payment.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
const Base = require('./Base');
|
||||||
|
|
||||||
|
class Payment extends Base {
|
||||||
|
constructor(client, data) {
|
||||||
|
super(client);
|
||||||
|
|
||||||
|
if (data) this._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
_patch(data) {
|
||||||
|
/**
|
||||||
|
* The payment Id
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.id = data.id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The payment currency
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.paymentCurrency = data.paymentCurrency;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The payment ammount ( R$ 1.00 = 1000 )
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.paymentAmount1000 = data.paymentAmount1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The payment receiver
|
||||||
|
* @type {object}
|
||||||
|
*/
|
||||||
|
this.paymentMessageReceiverJid = data.paymentMessageReceiverJid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The payment transaction timestamp
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.paymentTransactionTimestamp = data.paymentTransactionTimestamp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The paymentStatus
|
||||||
|
*
|
||||||
|
* Possible Status
|
||||||
|
* 0:UNKNOWN_STATUS
|
||||||
|
* 1:PROCESSING
|
||||||
|
* 2:SENT
|
||||||
|
* 3:NEED_TO_ACCEPT
|
||||||
|
* 4:COMPLETE
|
||||||
|
* 5:COULD_NOT_COMPLETE
|
||||||
|
* 6:REFUNDED
|
||||||
|
* 7:EXPIRED
|
||||||
|
* 8:REJECTED
|
||||||
|
* 9:CANCELLED
|
||||||
|
* 10:WAITING_FOR_PAYER
|
||||||
|
* 11:WAITING
|
||||||
|
*
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.paymentStatus = data.paymentStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integer that represents the payment Text
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
this.paymentTxnStatus = data.paymentTxnStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The note sent with the payment
|
||||||
|
* @type {string}
|
||||||
|
*/
|
||||||
|
this.paymentNote = !data.paymentNoteMsg ? undefined : data.paymentNoteMsg.body ? data.paymentNoteMsg.body : undefined ;
|
||||||
|
|
||||||
|
return super._patch(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Payment;
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user