mirror of
https://github.com/cheveguerra/whatsapp-web.js.git
synced 2026-04-18 11:39:14 +00:00
Compare commits
81 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
2
.env.example
Normal file
2
.env.example
Normal file
@@ -0,0 +1,2 @@
|
||||
WWEBJS_TEST_SESSION_PATH=test_session.json
|
||||
WWEBJS_TEST_REMOTE_ID=XXXXXXXXXX@c.us
|
||||
@@ -5,14 +5,16 @@
|
||||
"es6": true,
|
||||
"node": true
|
||||
},
|
||||
"extends": "eslint:recommended",
|
||||
"extends": ["eslint:recommended", "plugin:mocha/recommended"],
|
||||
"globals": {
|
||||
"Atomics": "readonly",
|
||||
"SharedArrayBuffer": "readonly"
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2018
|
||||
"ecmaVersion": 2020
|
||||
},
|
||||
"plugins": ["mocha"],
|
||||
"ignorePatterns": ["docs"],
|
||||
"rules": {
|
||||
"indent": [
|
||||
"error",
|
||||
|
||||
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
3
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -34,5 +34,8 @@ If applicable, add code snippets to help explain your problem.
|
||||
- npm or yarn version (`npm -v`):
|
||||
- whatsapp-web.js version:
|
||||
|
||||
**Other**
|
||||
- Operating system (the one running node) [Linux / MacOS / Windows]:
|
||||
- Operating system version (ex. Windows 10):
|
||||
### Additional context
|
||||
Add any other context about the problem here.
|
||||
|
||||
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"
|
||||
20
.github/workflows/lint.yml
vendored
20
.github/workflows/lint.yml
vendored
@@ -6,19 +6,15 @@ on:
|
||||
|
||||
jobs:
|
||||
eslint:
|
||||
name: eslint
|
||||
name: ESLint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: install node v12
|
||||
uses: actions/setup-node@v1
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install node v14
|
||||
uses: actions/setup-node@v2
|
||||
with:
|
||||
node-version: 12
|
||||
- name: npm install
|
||||
node-version: '14'
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
- name: eslint
|
||||
uses: icrawl/action-eslint@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
job-name: eslint
|
||||
- name: Run ESLint
|
||||
run: ./node_modules/.bin/eslint .
|
||||
|
||||
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
|
||||
@@ -12,3 +12,6 @@ yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
*session.json
|
||||
.env
|
||||
tools/
|
||||
tests/
|
||||
|
||||
47
README.md
47
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
|
||||
A WhatsApp API client that connects through the WhatsApp Web browser app
|
||||
@@ -11,12 +11,13 @@ It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocke
|
||||
|
||||
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
|
||||
|
||||
```js
|
||||
const { Client } = require('whatsapp-web.js');
|
||||
|
||||
const client = new Client();
|
||||
|
||||
client.on('qr', (qr) => {
|
||||
@@ -39,6 +40,39 @@ 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.
|
||||
|
||||
## Remote Access
|
||||
|
||||
You could also connect to any previously existing browser instance:
|
||||
|
||||
```js
|
||||
const client = new Client({
|
||||
puppeteer: {
|
||||
browserWSEndpoint: `ws://localhost:3000`
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### Docker
|
||||
|
||||
1) Installing a browser using browserless:
|
||||
|
||||
```
|
||||
docker run \
|
||||
--rm \
|
||||
-p 3000:3000 \
|
||||
-e "MAX_CONCURRENT_SESSIONS=1" \
|
||||
browserless/chrome:latest
|
||||
```
|
||||
|
||||
Reference: https://docs.browserless.io/docs/docker-quickstart.html
|
||||
|
||||
### Remote Debugging
|
||||
|
||||
2) Running a browser with websocket remote debugging enabled:
|
||||
> chrome.exe --remote-debugging-port=9222
|
||||
|
||||
After that check the following webpage and check http://127.0.0.1:9220/json and get the **webSocketDebuggerUrl**
|
||||
|
||||
## Supported features
|
||||
|
||||
| Feature | Status |
|
||||
@@ -46,11 +80,13 @@ Take a look at [example.js](https://github.com/pedroslopez/whatsapp-web.js/blob/
|
||||
| Send messages | ✅ |
|
||||
| Receive messages | ✅ |
|
||||
| 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://guide.wwebjs.dev/features/handling-attachments#caveat-for-sending-videos-and-gifs) |
|
||||
| Send stickers | ✅ |
|
||||
| Receive media (images/audio/video/documents) | ✅ |
|
||||
| Send contact cards | ✅ |
|
||||
| Send location | ✅ |
|
||||
| Send buttons | ✅ |
|
||||
| Send lists | ✅ (business accounts not supported) |
|
||||
| Receive location | ✅ |
|
||||
| Message replies | ✅ |
|
||||
| Join groups by invite | ✅ |
|
||||
@@ -71,9 +107,10 @@ 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)_
|
||||
* [Reference](https://docs.wwebjs.dev/)
|
||||
* [Guide](https://guide.wwebjs.dev/) _(work in progress)_
|
||||
* [GitHub](https://github.com/pedroslopez/whatsapp-web.js)
|
||||
* [npm](https://npmjs.org/package/whatsapp-web.js)
|
||||
|
||||
## Contributing
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: Base</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -50,7 +50,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: BusinessContact</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -104,11 +104,17 @@
|
||||
<dt><a href="BusinessContact.html#getAbout">getAbout()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="BusinessContact.html#getChat">getChat()</a></dt>
|
||||
<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#getCountryCode">getCountryCode()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="BusinessContact.html#getFormattedNumber">getFormattedNumber()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="BusinessContact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
||||
@@ -263,6 +269,24 @@
|
||||
<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>
|
||||
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
||||
<dl class="dl-compact">
|
||||
@@ -290,7 +314,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
248
docs/Buttons.html
Normal file
248
docs/Buttons.html
Normal file
@@ -0,0 +1,248 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.15.0 » 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>15.<wbr>0</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-9">structures/<wbr>Buttons.<wbr>js:9</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>
|
||||
</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 Array of string</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 Array of string</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 Array of string</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Array of Array of string</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 October 30, 2021.
|
||||
</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
|
||||
159
docs/Call.html
Normal file
159
docs/Call.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.15.0 » 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>15.<wbr>0</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>
|
||||
</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>
|
||||
</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 October 30, 2021.
|
||||
</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>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: Chat</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -224,8 +224,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing Boolean</code>
|
||||
<p>result</p>
|
||||
<p><code>Promise containing Boolean</code> <p>result</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -240,8 +239,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing Boolean</code>
|
||||
<p>result</p>
|
||||
<p><code>Promise containing Boolean</code> <p>result</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -336,7 +334,7 @@
|
||||
</dl>
|
||||
<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>
|
||||
<p>Mutes this chat until a specified date</p>
|
||||
<p>Mutes this chat forever, unless a date is specified</p>
|
||||
<section>
|
||||
<h4>Parameter</h4>
|
||||
<table class="jsdoc-details-table">
|
||||
@@ -360,7 +358,8 @@
|
||||
<p> </p>
|
||||
</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>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -374,8 +373,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing boolean</code>
|
||||
<p>New pin state. Could be false if the max number of pinned chats was reached.</p>
|
||||
<p><code>Promise containing boolean</code> <p>New pin state. Could be false if the max number of pinned chats was reached.</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -426,8 +424,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing <a href="Message.html">Message</a></code>
|
||||
<p>Message that was just sent</p>
|
||||
<p><code>Promise containing <a href="Message.html">Message</a></code> <p>Message that was just sent</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -437,8 +434,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing Boolean</code>
|
||||
<p>result</p>
|
||||
<p><code>Promise containing Boolean</code> <p>result</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -468,8 +464,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing boolean</code>
|
||||
<p>New pin state</p>
|
||||
<p><code>Promise containing boolean</code> <p>New pin state</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -483,7 +478,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
484
docs/Client.html
484
docs/Client.html
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: Client</title>
|
||||
<title>whatsapp-web.js 1.15.0 » Class: Client</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">
|
||||
@@ -15,7 +15,7 @@
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -26,7 +26,7 @@
|
||||
<header class="page-header">
|
||||
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||
<h1><small></small><span class="symbol-name">Client</span></h1>
|
||||
<p class="source-link">Source: <a href="Client.js.html#source-line-51">Client.<wbr>js:51</a></p>
|
||||
<p class="source-link">Source: <a href="Client.js.html#source-line-53">Client.<wbr>js:53</a></p>
|
||||
<div class="symbol-classdesc">
|
||||
<p>Starting point for interacting with the WhatsApp Web API</p>
|
||||
</div>
|
||||
@@ -55,6 +55,9 @@
|
||||
<div class="summary-content">
|
||||
<div class="summary-column">
|
||||
<dl class="dl-summary-callout">
|
||||
<dt><a href="Client.html#acceptGroupV4Invite">acceptGroupV4Invite(inviteV4)</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#acceptInvite">acceptInvite(inviteCode)</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -67,6 +70,9 @@
|
||||
<dt><a href="Client.html#destroy">destroy()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#getBlockedContacts">getBlockedContacts()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#getChatById">getChatById(chatId)</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -85,13 +91,19 @@
|
||||
<dt><a href="Client.html#getContacts">getContacts()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#getInviteInfo">getInviteInfo(inviteCode)</a></dt>
|
||||
<dt><a href="Client.html#getCountryCode">getCountryCode(number)</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="summary-column">
|
||||
<dl class="dl-summary-callout">
|
||||
<dt><a href="Client.html#getFormattedNumber">getFormattedNumber(number)</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#getInviteInfo">getInviteInfo(inviteCode)</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#getLabelById">getLabelById(labelId)</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -135,6 +147,9 @@
|
||||
<dt><a href="Client.html#resetState">resetState()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#searchMessages">searchMessages(query[, options])</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#sendMessage">sendMessage(chatId, content[, options])</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -196,6 +211,9 @@
|
||||
<dt><a href="Client.html#event:group_update">group_update</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#event:incoming_call">incoming_call</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#event:media_uploaded">media_uploaded</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -205,13 +223,13 @@
|
||||
<dt><a href="Client.html#event:message_ack">message_ack</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#event:message_create">message_create</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="summary-column">
|
||||
<dl class="dl-summary-callout">
|
||||
<dt><a href="Client.html#event:message_create">message_create</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Client.html#event:message_revoke_everyone">message_revoke_everyone</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -322,6 +340,20 @@
|
||||
<p>Timeout for qr code selector in puppeteer</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>qrMaxRetries</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>How many times should the qrcode be refreshed before giving up</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>restartOnAuthFail</p>
|
||||
@@ -458,6 +490,20 @@
|
||||
<p>Ffmpeg path to use when formating videos to webp while sending stickers</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>bypassCSP</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Sets bypassing of page's Content-Security-Policy.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
@@ -498,6 +544,44 @@
|
||||
</section>
|
||||
<h2>Methods</h2>
|
||||
<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">(inviteV4)</span> → <span class="signature-returns"> Promise containing Object</span></span></h3>
|
||||
<p>Accepts a private invitation to join a group</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>inviteV4</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>object</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Invite V4 Info</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<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>
|
||||
<h3 id="acceptInvite"><span class="symbol-name">acceptInvite</span><span class="signature"><span class="signature-params">(inviteCode)</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||
<p>Accepts an invitation to join a group</p>
|
||||
@@ -533,8 +617,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing string</code>
|
||||
<p>Id of the joined Chat</p>
|
||||
<p><code>Promise containing string</code> <p>Id of the joined Chat</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -596,18 +679,15 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Object</code>
|
||||
<p>createRes</p>
|
||||
<p><code>Object</code> <p>createRes</p>
|
||||
</p>
|
||||
</dd>
|
||||
<dd>
|
||||
<p><code>string</code>
|
||||
<p>createRes.gid - ID for the group that was just created</p>
|
||||
<p><code>string</code> <p>createRes.gid - ID for the group that was just created</p>
|
||||
</p>
|
||||
</dd>
|
||||
<dd>
|
||||
<p><code>Object with string properties</code>
|
||||
<p>createRes.missingParticipants - participants that were not added to the group. Keys represent the ID for participant that was not added and its value is a status code that represents the reason why participant could not be added. This is usually 403 if the user's privacy settings don't allow you to add them to groups.</p>
|
||||
<p><code>Object with string properties</code> <p>createRes.missingParticipants - participants that were not added to the group. Keys represent the ID for participant that was not added and its value is a status code that represents the reason why participant could not be added. This is usually 403 if the user's privacy settings don't allow you to add them to groups.</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -617,6 +697,15 @@
|
||||
<dl class="dl-compact">
|
||||
</dl>
|
||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||
<h3 id="getBlockedContacts"><span class="symbol-name">getBlockedContacts</span><span class="signature"><span class="signature-params">()</span> → <span class="signature-returns"> Promise containing Array of <a href="Contact.html">Contact</a></span></span></h3>
|
||||
<p>Gets all blocked contacts by host account</p>
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing Array of <a href="Contact.html">Contact</a></code> </p>
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||
<h3 id="getChatById"><span class="symbol-name">getChatById</span><span class="signature"><span class="signature-params">(chatId)</span> → <span class="signature-returns"> Promise containing <a href="Chat.html">Chat</a></span></span></h3>
|
||||
<p>Get chat instance by ID</p>
|
||||
<section>
|
||||
@@ -783,6 +872,82 @@
|
||||
</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">(number)</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||
<p>Get the country code of a WhatsApp ID.</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>number</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>string</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Number or ID</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<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">(number)</span> → <span class="signature-returns"> Promise containing string</span></span></h3>
|
||||
<p>Get the formatted number of a WhatsApp ID.</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>number</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>string</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Number or ID</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<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="getInviteInfo"><span class="symbol-name">getInviteInfo</span><span class="signature"><span class="signature-params">(inviteCode)</span> → <span class="signature-returns"> Promise containing object</span></span></h3>
|
||||
<p>Returns an object with information about the invite code's group</p>
|
||||
<section>
|
||||
@@ -816,8 +981,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing object</code>
|
||||
<p>Invite information</p>
|
||||
<p><code>Promise containing object</code> <p>Invite information</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -1046,7 +1210,7 @@
|
||||
</dl>
|
||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||
<h3 id="muteChat"><span class="symbol-name">muteChat</span><span class="signature"><span class="signature-params">(chatId, unmuteDate)</span></span></h3>
|
||||
<p>Mutes the Chat until a specified date</p>
|
||||
<p>Mutes this chat forever, unless a date is specified</p>
|
||||
<section>
|
||||
<h4>Parameters</h4>
|
||||
<table class="jsdoc-details-table">
|
||||
@@ -1084,7 +1248,8 @@
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Date when the chat will be unmuted</p>
|
||||
<p>Date when the chat will be unmuted, leave as is to mute forever</p>
|
||||
<p>Value can be null.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -1098,8 +1263,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing boolean</code>
|
||||
<p>New pin state. Could be false if the max number of pinned chats was reached.</p>
|
||||
<p><code>Promise containing boolean</code> <p>New pin state. Could be false if the max number of pinned chats was reached.</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -1109,6 +1273,108 @@
|
||||
<dl class="dl-compact">
|
||||
</dl>
|
||||
<div class="symbol-detail-labels"><span class="label label-async">async</span></div>
|
||||
<h3 id="searchMessages"><span class="symbol-name">searchMessages</span><span class="signature"><span class="signature-params">(query[, options])</span> → <span class="signature-returns"> Promise containing Array of <a href="Message.html">Message</a></span></span></h3>
|
||||
<p>Searches for messages</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>query</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>page</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>number</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Yes</p>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>limit</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>number</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Yes</p>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>chatId</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>string</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Yes</p>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing Array of <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="sendMessage"><span class="symbol-name">sendMessage</span><span class="signature"><span class="signature-params">(chatId, content[, options])</span> → <span class="signature-returns"> Promise containing <a href="Message.html">Message</a></span></span></h3>
|
||||
<p>Send a message to a specific chatId</p>
|
||||
<section>
|
||||
@@ -1141,7 +1407,7 @@
|
||||
<p>content</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>(string, <a href="MessageMedia.html">MessageMedia</a>, <a href="Location.html">Location</a>, <a href="Contact.html">Contact</a>, or Array of <a href="Contact.html">Contact</a>)</p>
|
||||
<p>(string, <a href="MessageMedia.html">MessageMedia</a>, <a href="Location.html">Location</a>, <a href="Contact.html">Contact</a>, Array of <a href="Contact.html">Contact</a>, <a href="Buttons.html">Buttons</a>, or <a href="List.html">List</a>)</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
@@ -1169,8 +1435,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing <a href="Message.html">Message</a></code>
|
||||
<p>Message that was just sent</p>
|
||||
<p><code>Promise containing <a href="Message.html">Message</a></code> <p>Message that was just sent</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -1213,8 +1478,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing boolean</code>
|
||||
<p>result</p>
|
||||
<p><code>Promise containing boolean</code> <p>result</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -1336,8 +1600,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing boolean</code>
|
||||
<p>New pin state</p>
|
||||
<p><code>Promise containing boolean</code> <p>New pin state</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -1599,13 +1862,13 @@
|
||||
<p>reason</p>
|
||||
</td>
|
||||
<td>
|
||||
<p><a href="global.html#WAState">WAState</a></p>
|
||||
<p>(<a href="global.html#WAState">WAState</a> or "NAVIGATION")</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>state that caused the disconnect</p>
|
||||
<p>reason that caused the disconnect</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -1712,6 +1975,163 @@
|
||||
</section>
|
||||
<dl class="dl-compact">
|
||||
</dl>
|
||||
<h3 id="event:incoming_call"><span class="symbol-name">incoming_call</span></h3>
|
||||
<p>Emitted when a call is received</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>call</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>object</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Values in <code>call</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>id</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>number</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Call id</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>peerJid</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>string</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Who called</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>isVideo</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>boolean</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>if is video</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>isGroup</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>boolean</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>if is group</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>canHandleLocally</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>boolean</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>if we can handle in waweb</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>outgoing</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>boolean</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>if is outgoing</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>webClientShouldHandle</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>boolean</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>If Waweb should handle</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>participants</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>object</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Participants</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<dl class="dl-compact">
|
||||
</dl>
|
||||
<h3 id="event:media_uploaded"><span class="symbol-name">media_uploaded</span></h3>
|
||||
<p>Emitted when media has been uploaded for a message sent by the client.</p>
|
||||
<section>
|
||||
@@ -1987,7 +2407,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: Client.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -42,7 +42,7 @@ const { WhatsWebURL, DefaultOptions, Events, WAState } = require('./ut
|
||||
const { ExposeStore, LoadUtils } = require('./util/Injected');
|
||||
const ChatFactory = require('./factories/ChatFactory');
|
||||
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} = require('./structures');
|
||||
/**
|
||||
* Starting point for interacting with the WhatsApp Web API
|
||||
* @extends {EventEmitter}
|
||||
@@ -51,6 +51,7 @@ const { ClientInfo, Message, MessageMedia, Contact, Location, GroupNotification
|
||||
* @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.qrTimeoutMs - Timeout for qr code selector in puppeteer
|
||||
* @param {number} options.qrMaxRetries - How many times should the qrcode be refreshed before giving up
|
||||
* @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
|
||||
@@ -61,6 +62,7 @@ const { ClientInfo, Message, MessageMedia, Contact, Location, GroupNotification
|
||||
* @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.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#authenticated
|
||||
@@ -95,8 +97,16 @@ class Client extends EventEmitter {
|
||||
* Sets up events and requirements, kicks off authentication request
|
||||
*/
|
||||
async initialize() {
|
||||
const browser = await puppeteer.launch(this.options.puppeteer);
|
||||
const page = (await browser.pages())[0];
|
||||
let [browser, page] = [null, null];
|
||||
|
||||
if(this.options.puppeteer &amp;&amp; this.options.puppeteer.browserWSEndpoint) {
|
||||
browser = await puppeteer.connect(this.options.puppeteer);
|
||||
page = await browser.newPage();
|
||||
} else {
|
||||
browser = await puppeteer.launch(this.options.puppeteer);
|
||||
page = (await browser.pages())[0];
|
||||
}
|
||||
|
||||
page.setUserAgent(this.options.userAgent);
|
||||
|
||||
this.pupBrowser = browser;
|
||||
@@ -113,12 +123,16 @@ class Client extends EventEmitter {
|
||||
}, this.options.session);
|
||||
}
|
||||
|
||||
if(this.options.bypassCSP) {
|
||||
await page.setBypassCSP(true);
|
||||
}
|
||||
|
||||
await page.goto(WhatsWebURL, {
|
||||
waitUntil: 'load',
|
||||
timeout: 0,
|
||||
});
|
||||
|
||||
const KEEP_PHONE_CONNECTED_IMG_SELECTOR = '[data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]';
|
||||
const KEEP_PHONE_CONNECTED_IMG_SELECTOR = '[data-icon="intro-md-beta-logo-dark"], [data-icon="intro-md-beta-logo-light"], [data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]';
|
||||
|
||||
if (this.options.session) {
|
||||
// Check if session restore was successfull
|
||||
@@ -145,26 +159,36 @@ class Client extends EventEmitter {
|
||||
}
|
||||
|
||||
} else {
|
||||
let qrRetries = 0;
|
||||
|
||||
const getQrCode = async () => {
|
||||
// Check if retry button is present
|
||||
var QR_RETRY_SELECTOR = 'div[data-ref] > span > div';
|
||||
var QR_RETRY_SELECTOR = 'div[data-ref] > span > button';
|
||||
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
|
||||
* @event Client#qr
|
||||
* @param {string} qr QR Code
|
||||
*/
|
||||
this.emit(Events.QR_RECEIVED, qr);
|
||||
|
||||
if (this.options.qrMaxRetries > 0) {
|
||||
qrRetries++;
|
||||
if (qrRetries > this.options.qrMaxRetries) {
|
||||
this.emit(Events.DISCONNECTED, 'Max qrcode retries reached');
|
||||
await this.destroy();
|
||||
}
|
||||
}
|
||||
};
|
||||
getQrCode();
|
||||
this._qrRefreshInterval = setInterval(getQrCode, this.options.qrRefreshIntervalMs);
|
||||
@@ -204,6 +228,14 @@ class Client extends EventEmitter {
|
||||
// Check window.Store Injection
|
||||
await page.waitForFunction('window.Store != undefined');
|
||||
|
||||
const isMD = await page.evaluate(() => {
|
||||
return window.Store.Features.features.MD_BACKEND;
|
||||
});
|
||||
|
||||
if(isMD) {
|
||||
throw new Error('Multi-device is not yet supported by whatsapp-web.js. Please check out https://github.com/pedroslopez/whatsapp-web.js/pull/889 to follow the progress.');
|
||||
}
|
||||
|
||||
//Load util functions (serializers, helper functions)
|
||||
await page.evaluate(LoadUtils);
|
||||
|
||||
@@ -366,7 +398,7 @@ class Client extends EventEmitter {
|
||||
/**
|
||||
* Emitted when the client has been disconnected
|
||||
* @event Client#disconnected
|
||||
* @param {WAState} reason state that caused the disconnect
|
||||
* @param {WAState|"NAVIGATION"} reason reason that caused the disconnect
|
||||
*/
|
||||
this.emit(Events.DISCONNECTED, state);
|
||||
this.destroy();
|
||||
@@ -388,6 +420,24 @@ class Client extends EventEmitter {
|
||||
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.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)); });
|
||||
@@ -397,6 +447,7 @@ class Client extends EventEmitter {
|
||||
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.Conn.on('change:battery', (state) => { window.onBatteryStateChangedEvent(state); });
|
||||
window.Store.Call.on('add', (call) => { window.onIncomingCall(call); });
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -404,6 +455,13 @@ class Client extends EventEmitter {
|
||||
* @event Client#ready
|
||||
*/
|
||||
this.emit(Events.READY);
|
||||
|
||||
// Disconnect when navigating away
|
||||
// Because WhatsApp Web now reloads when logging out from the device, this also covers that case
|
||||
this.pupPage.on('framenavigated', async () => {
|
||||
this.emit(Events.DISCONNECTED, 'NAVIGATION');
|
||||
await this.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -454,6 +512,7 @@ class Client extends EventEmitter {
|
||||
* @typedef {Object} MessageSendOptions
|
||||
* @property {boolean} [linkPreview=true] - Show links preview
|
||||
* @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} [sendMediaAsDocument=false] - Send media as a document
|
||||
* @property {boolean} [parseVCards=true] - Automatically parse vCards and send them as contacts
|
||||
@@ -461,13 +520,16 @@ class Client extends EventEmitter {
|
||||
* @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 {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
|
||||
*/
|
||||
|
||||
/**
|
||||
* Send a message to a specific 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
|
||||
*
|
||||
* @returns {Promise&lt;Message>} Message that was just sent
|
||||
@@ -476,12 +538,14 @@ class Client extends EventEmitter {
|
||||
let internalOptions = {
|
||||
linkPreview: options.linkPreview === false ? undefined : true,
|
||||
sendAudioAsVoice: options.sendAudioAsVoice,
|
||||
sendVideoAsGif: options.sendVideoAsGif,
|
||||
sendMediaAsSticker: options.sendMediaAsSticker,
|
||||
sendMediaAsDocument: options.sendMediaAsDocument,
|
||||
caption: options.caption,
|
||||
quotedMessageId: options.quotedMessageId,
|
||||
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) : [],
|
||||
...options.extra
|
||||
};
|
||||
|
||||
const sendSeen = typeof options.sendSeen === 'undefined' ? true : options.sendSeen;
|
||||
@@ -502,10 +566,22 @@ class Client extends EventEmitter {
|
||||
} else if(Array.isArray(content) &amp;&amp; content.length > 0 &amp;&amp; content[0] instanceof Contact) {
|
||||
internalOptions.contactCardList = content.map(contact => contact.id._serialized);
|
||||
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) {
|
||||
internalOptions.attachment = await Util.formatToWebpSticker(internalOptions.attachment);
|
||||
internalOptions.attachment =
|
||||
await Util.formatToWebpSticker(internalOptions.attachment, {
|
||||
name: options.stickerName,
|
||||
author: options.stickerAuthor,
|
||||
categories: options.stickerCategories
|
||||
});
|
||||
}
|
||||
|
||||
const newMessage = await this.pupPage.evaluate(async (chatId, message, options, sendSeen) => {
|
||||
@@ -523,6 +599,24 @@ class Client extends EventEmitter {
|
||||
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
|
||||
* @returns {Promise&lt;Array&lt;Chat>>}
|
||||
@@ -597,6 +691,20 @@ class Client extends EventEmitter {
|
||||
return chatId._serialized;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accepts a private invitation to join a group
|
||||
* @param {object} inviteV4 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 await this.pupPage.evaluate(async inviteInfo => {
|
||||
let { groupId, fromId, inviteCode, inviteCodeExp, toId } = inviteInfo;
|
||||
return await window.Store.Wap.acceptGroupV4Invite(groupId, fromId, inviteCode, String(inviteCodeExp), toId);
|
||||
}, inviteInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current user's status message
|
||||
* @param {string} status New status message
|
||||
@@ -699,15 +807,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 {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) {
|
||||
unmuteDate = unmuteDate ? unmuteDate.getTime() / 1000 : -1;
|
||||
await this.pupPage.evaluate(async (chatId, timestamp) => {
|
||||
let chat = await window.Store.Chat.get(chatId);
|
||||
await chat.mute.mute(timestamp, !0);
|
||||
}, chatId, unmuteDate.getTime() / 1000);
|
||||
}, chatId, unmuteDate || -1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -773,10 +882,7 @@ class Client extends EventEmitter {
|
||||
* @returns {Promise&lt;Object|null>}
|
||||
*/
|
||||
async getNumberId(number) {
|
||||
if(!number.endsWith('@c.us')) {
|
||||
number += '@c.us';
|
||||
}
|
||||
|
||||
if (!number.endsWith('@c.us')) number += '@c.us';
|
||||
try {
|
||||
return await this.pupPage.evaluate(async numberId => {
|
||||
return window.WWebJS.getNumberId(numberId);
|
||||
@@ -786,6 +892,33 @@ class Client extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new group
|
||||
* @param {string} name group title
|
||||
@@ -880,6 +1013,19 @@ class Client extends EventEmitter {
|
||||
|
||||
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.models.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;
|
||||
@@ -893,7 +1039,7 @@ module.exports = Client;
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: ClientInfo</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -213,18 +213,15 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>object</code>
|
||||
<p>batteryStatus</p>
|
||||
<p><code>object</code> <p>batteryStatus</p>
|
||||
</p>
|
||||
</dd>
|
||||
<dd>
|
||||
<p><code>number</code>
|
||||
<p>batteryStatus.battery - The current battery percentage</p>
|
||||
<p><code>number</code> <p>batteryStatus.battery - The current battery percentage</p>
|
||||
</p>
|
||||
</dd>
|
||||
<dd>
|
||||
<p><code>boolean</code>
|
||||
<p>batteryStatus.plugged - Indicates if the phone is plugged in (true) or not (false)</p>
|
||||
<p><code>boolean</code> <p>batteryStatus.plugged - Indicates if the phone is plugged in (true) or not (false)</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -238,7 +235,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: Contact</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -101,11 +101,17 @@
|
||||
<dt><a href="Contact.html#getAbout">getAbout()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Contact.html#getChat">getChat()</a></dt>
|
||||
<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#getCountryCode">getCountryCode()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Contact.html#getFormattedNumber">getFormattedNumber()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Contact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
||||
@@ -230,6 +236,24 @@
|
||||
</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>
|
||||
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
||||
<dl class="dl-compact">
|
||||
@@ -257,7 +281,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: GroupChat</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -405,8 +405,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing {status: number}</code>
|
||||
<p>Object with status code indicating if the operation was successful</p>
|
||||
<p><code>Promise containing {status: number}</code> <p>Object with status code indicating if the operation was successful</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -491,8 +490,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing string</code>
|
||||
<p>Group's invite code</p>
|
||||
<p><code>Promise containing string</code> <p>Group's invite code</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -523,7 +521,7 @@
|
||||
</dl>
|
||||
<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>
|
||||
<p>Mutes this chat until a specified date</p>
|
||||
<p>Mutes this chat forever, unless a date is specified</p>
|
||||
<section>
|
||||
<h4>Parameter</h4>
|
||||
<table class="jsdoc-details-table">
|
||||
@@ -547,7 +545,8 @@
|
||||
<p> </p>
|
||||
</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>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -602,8 +601,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing {status: number}</code>
|
||||
<p>Object with status code indicating if the operation was successful</p>
|
||||
<p><code>Promise containing {status: number}</code> <p>Object with status code indicating if the operation was successful</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -803,8 +801,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing boolean</code>
|
||||
<p>Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.</p>
|
||||
<p><code>Promise containing boolean</code> <p>Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -844,8 +841,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing boolean</code>
|
||||
<p>Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.</p>
|
||||
<p><code>Promise containing boolean</code> <p>Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -921,7 +917,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: GroupNotification</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -233,7 +233,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: InterfaceController</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -39,16 +39,28 @@
|
||||
<div class="summary-content">
|
||||
<div class="summary-column">
|
||||
<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>
|
||||
<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>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="summary-column">
|
||||
<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>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -78,12 +90,119 @@
|
||||
<section>
|
||||
<h2>Methods</h2>
|
||||
<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>
|
||||
<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>
|
||||
<dl class="dl-compact">
|
||||
</dl>
|
||||
<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>
|
||||
<p>Opens the Chat Drawer</p>
|
||||
<section>
|
||||
@@ -263,7 +382,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: Label</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -163,7 +163,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
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.15.0 » 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>15.<wbr>0</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 October 30, 2021.
|
||||
</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>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: Location</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -149,7 +149,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: Message</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -26,7 +26,7 @@
|
||||
<header class="page-header">
|
||||
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||
<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">
|
||||
<p>Represents a Message on WhatsApp</p>
|
||||
</div>
|
||||
@@ -51,6 +51,12 @@
|
||||
<dt><a href="Message.html#broadcast">broadcast</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#deviceType">deviceType</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#forwardingScore">forwardingScore</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#from">from</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -70,6 +76,9 @@
|
||||
<dt><a href="Message.html#id">id</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#inviteV4">inviteV4</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#isForwarded">isForwarded</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -85,14 +94,17 @@
|
||||
<dt><a href="Message.html#location">location</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#mediaKey">mediaKey</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="summary-column">
|
||||
<dl class="dl-summary-callout">
|
||||
<dt><a href="Message.html#mediaKey">mediaKey</a></dt>
|
||||
<dt><a href="Message.html#mentionedIds">mentionedIds</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#mentionedIds">mentionedIds</a></dt>
|
||||
<dt><a href="Message.html#orderId">orderId</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#timestamp">timestamp</a></dt>
|
||||
@@ -101,6 +113,9 @@
|
||||
<dt><a href="Message.html#to">to</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#token">token</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#type">type</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -116,6 +131,9 @@
|
||||
<div class="summary-content">
|
||||
<div class="summary-column">
|
||||
<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>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -141,13 +159,19 @@
|
||||
<dt><a href="Message.html#getMentions">getMentions()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#getQuotedMessage">getQuotedMessage()</a></dt>
|
||||
<dt><a href="Message.html#getOrder">getOrder()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#getPayment">getPayment()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
<div class="summary-column">
|
||||
<dl class="dl-summary-callout">
|
||||
<dt><a href="Message.html#getQuotedMessage">getQuotedMessage()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="Message.html#reply">reply(content[, chatId][, options])</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
@@ -192,6 +216,17 @@
|
||||
<p>Indicates if the message was a broadcast</p>
|
||||
<dl class="dl-compact">
|
||||
</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="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">
|
||||
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>
|
||||
@@ -217,6 +252,11 @@
|
||||
<p>ID that represents the message</p>
|
||||
<dl class="dl-compact">
|
||||
</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="isForwarded"><span class="symbol-name">isForwarded</span><small class="property-type">
|
||||
boolean</small></h3>
|
||||
<p>Indicates if the message was forwarded</p>
|
||||
@@ -233,7 +273,7 @@
|
||||
<dl class="dl-compact">
|
||||
</dl>
|
||||
<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>
|
||||
<dl class="dl-compact">
|
||||
</dl>
|
||||
@@ -252,6 +292,11 @@
|
||||
<p>Indicates the mentions in the message body.</p>
|
||||
<dl class="dl-compact">
|
||||
</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="timestamp"><span class="symbol-name">timestamp</span><small class="property-type">
|
||||
number</small></h3>
|
||||
<p>Unix timestamp for when the message was created</p>
|
||||
@@ -264,6 +309,11 @@
|
||||
If the message is sent by another user, it will be the ID for the current user.</p>
|
||||
<dl class="dl-compact">
|
||||
</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">
|
||||
<a href="global.html#MessageTypes">MessageTypes</a></small></h3>
|
||||
<p>Message type</p>
|
||||
@@ -277,6 +327,15 @@
|
||||
</section>
|
||||
<h2>Methods</h2>
|
||||
<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>
|
||||
<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>
|
||||
@@ -394,6 +453,24 @@
|
||||
</dd>
|
||||
</dl>
|
||||
<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>
|
||||
<p>Returns the quoted message, if any</p>
|
||||
<dl class="dl-compact">
|
||||
@@ -487,7 +564,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: MessageMedia</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -26,7 +26,7 @@
|
||||
<header class="page-header">
|
||||
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||
<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-15">structures/<wbr>MessageMedia.<wbr>js:15</a></p>
|
||||
<div class="symbol-classdesc">
|
||||
<p>Media attached to a message</p>
|
||||
</div>
|
||||
@@ -61,7 +61,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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-column">
|
||||
<dl class="dl-summary-callout">
|
||||
@@ -71,6 +71,11 @@
|
||||
</dl>
|
||||
</div>
|
||||
<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 class="summary-column">
|
||||
</div>
|
||||
@@ -159,7 +164,7 @@
|
||||
<dl class="dl-compact">
|
||||
</dl>
|
||||
</section>
|
||||
<h2>Method</h2>
|
||||
<h2>Methods</h2>
|
||||
<section>
|
||||
<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>
|
||||
@@ -198,6 +203,123 @@
|
||||
<p><code><a href="MessageMedia.html">MessageMedia</a></code> </p>
|
||||
</dd>
|
||||
</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>number</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Yes</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>Defaults to <code>false</code>.</p>
|
||||
</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>
|
||||
</div>
|
||||
@@ -208,7 +330,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
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.15.0 » 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>15.<wbr>0</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 October 30, 2021.
|
||||
</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>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: PrivateChat</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -362,7 +362,7 @@
|
||||
</dl>
|
||||
<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>
|
||||
<p>Mutes this chat until a specified date</p>
|
||||
<p>Mutes this chat forever, unless a date is specified</p>
|
||||
<section>
|
||||
<h4>Parameter</h4>
|
||||
<table class="jsdoc-details-table">
|
||||
@@ -386,7 +386,8 @@
|
||||
<p> </p>
|
||||
</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>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -519,7 +520,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: PrivateContact</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -101,11 +101,17 @@
|
||||
<dt><a href="PrivateContact.html#getAbout">getAbout()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="PrivateContact.html#getChat">getChat()</a></dt>
|
||||
<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#getCountryCode">getCountryCode()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="PrivateContact.html#getFormattedNumber">getFormattedNumber()</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
<dt><a href="PrivateContact.html#getProfilePicUrl">getProfilePicUrl()</a></dt>
|
||||
@@ -256,6 +262,24 @@
|
||||
<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>
|
||||
<p>Returns the contact's profile picture URL, if privacy settings allow it</p>
|
||||
<dl class="dl-compact">
|
||||
@@ -283,7 +307,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</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.15.0 » 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>15.<wbr>0</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 October 30, 2021.
|
||||
</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>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Class: Util</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -26,7 +26,7 @@
|
||||
<header class="page-header">
|
||||
<div class="symbol-detail-labels"><span class="label label-kind">class</span></div>
|
||||
<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-16">util/<wbr>Util.<wbr>js:16</a></p>
|
||||
<div class="symbol-classdesc">
|
||||
<p>Utility methods</p>
|
||||
</div>
|
||||
@@ -42,7 +42,7 @@
|
||||
<dt><a href="Util.html#.formatImageToWebpSticker">formatImageToWebpSticker(media)</a></dt>
|
||||
<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>
|
||||
</dl>
|
||||
@@ -104,16 +104,15 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing <a href="MessageMedia.html">MessageMedia</a></code>
|
||||
<p>media in webp format</p>
|
||||
<p><code>Promise containing <a href="MessageMedia.html">MessageMedia</a></code> <p>media in webp format</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<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>
|
||||
<section>
|
||||
<h4>Parameter</h4>
|
||||
<h4>Parameters</h4>
|
||||
<table class="jsdoc-details-table">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -137,14 +136,26 @@
|
||||
<td>
|
||||
</td>
|
||||
</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>
|
||||
</table>
|
||||
</section>
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing <a href="MessageMedia.html">MessageMedia</a></code>
|
||||
<p>media in webp format</p>
|
||||
<p><code>Promise containing <a href="MessageMedia.html">MessageMedia</a></code> <p>media in webp format</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -182,8 +193,7 @@
|
||||
<dl class="dl-compact">
|
||||
<dt>Returns</dt>
|
||||
<dd>
|
||||
<p><code>Promise containing <a href="MessageMedia.html">MessageMedia</a></code>
|
||||
<p>media in webp format</p>
|
||||
<p><code>Promise containing <a href="MessageMedia.html">MessageMedia</a></code> <p>media in webp format</p>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -230,7 +240,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
220
docs/global.html
220
docs/global.html
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Globals</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -87,6 +87,11 @@
|
||||
</dl>
|
||||
</div>
|
||||
<div class="summary-column">
|
||||
<dl class="dl-summary-callout">
|
||||
<dt><a href="global.html#StickerMetadata">StickerMetadata</a></dt>
|
||||
<dd>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -378,6 +383,19 @@
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>INCOMING_CALL</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
@@ -766,6 +784,19 @@
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>ORDER</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>REVOKED</p>
|
||||
@@ -779,6 +810,19 @@
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>PRODUCT</p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
<p> </p>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>UNKNOWN</p>
|
||||
@@ -792,6 +836,58 @@
|
||||
<td>
|
||||
</td>
|
||||
</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>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>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
@@ -1304,6 +1400,21 @@
|
||||
<p>Defaults to <code>false</code>.</p>
|
||||
</td>
|
||||
</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>
|
||||
<td>
|
||||
<p>sendMediaAsSticker</p>
|
||||
@@ -1406,6 +1517,48 @@
|
||||
<p>Defaults to <code>true</code>.</p>
|
||||
</td>
|
||||
</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>
|
||||
<td>
|
||||
<p>media</p>
|
||||
@@ -1425,6 +1578,65 @@
|
||||
</section>
|
||||
<dl class="dl-compact">
|
||||
</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>
|
||||
</div>
|
||||
@@ -1435,7 +1647,7 @@
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
666
docs/index.html
666
docs/index.html
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@
|
||||
treeNode.tree({
|
||||
autoEscape: false,
|
||||
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=\"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=\"List.html\">List</a>","id":"List","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=\"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=\"Util.html\">Util</a>","id":"Util","children":[]}],
|
||||
openedIcon: ' ⇣',
|
||||
saveState: false,
|
||||
useContextMenu: false
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Base.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -60,7 +60,7 @@ module.exports = Base;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/BusinessContact.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -59,7 +59,7 @@ module.exports = BusinessContact;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
121
docs/structures_Buttons.js.html
Normal file
121
docs/structures_Buttons.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.15.0 » 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>15.<wbr>0</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');
|
||||
|
||||
/**
|
||||
* Message type buttons
|
||||
*/
|
||||
class Buttons {
|
||||
/**
|
||||
* @param {string|MessageMedia} body
|
||||
* @param {Array&lt;Array&lt;string>>} buttons
|
||||
* @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 {Array&lt;Array&lt;string>>}
|
||||
*/
|
||||
this.buttons = this._format(buttons);
|
||||
if(!this.buttons.length){ throw '[BT01] No buttons';}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates button array from simple array
|
||||
* @param {Array&lt;Array&lt;string>>} buttons
|
||||
* @returns {Array&lt;Array&lt;string>>}
|
||||
* @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 ? 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 October 30, 2021.
|
||||
</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>
|
||||
121
docs/structures_Call.js.html
Normal file
121
docs/structures_Call.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.15.0 » 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>15.<wbr>0</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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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 October 30, 2021.
|
||||
</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>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Chat.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -178,8 +178,8 @@ class Chat extends Base {
|
||||
}
|
||||
|
||||
/**
|
||||
* Mutes this chat until a specified date
|
||||
* @param {Date} unmuteDate Date at which the Chat will be unmuted
|
||||
* Mutes this chat forever, unless a date is specified
|
||||
* @param {?Date} unmuteDate Date at which the Chat will be unmuted, leave as is to mute forever
|
||||
*/
|
||||
async mute(unmuteDate) {
|
||||
return this.client.muteChat(this.id._serialized, unmuteDate);
|
||||
@@ -288,7 +288,7 @@ module.exports = Chat;
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/ClientInfo.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -108,7 +108,7 @@ module.exports = ClientInfo;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Contact.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -139,7 +139,7 @@ class Contact extends Base {
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.isBlocked = data.isBlocked;
|
||||
|
||||
|
||||
return super._patch(data);
|
||||
}
|
||||
|
||||
@@ -151,6 +151,22 @@ class Contact extends Base {
|
||||
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.
|
||||
* Will return null when getting chat for currently logged in user.
|
||||
@@ -209,7 +225,8 @@ class Contact extends Base {
|
||||
|
||||
}
|
||||
|
||||
module.exports = Contact;</code></pre>
|
||||
module.exports = Contact;
|
||||
</code></pre>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
@@ -219,7 +236,7 @@ module.exports = Contact;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/GroupChat.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -239,7 +239,7 @@ module.exports = GroupChat;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/GroupNotification.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -74,7 +74,7 @@ class GroupNotification extends Base {
|
||||
*
|
||||
* @type {string}
|
||||
*/
|
||||
this.chatId = typeof (data.from) === 'object' ? data.from._serialized : data.from;
|
||||
this.chatId = typeof (data.to) === 'object' ? data.to._serialized : data.to;
|
||||
|
||||
/**
|
||||
* ContactId for the user that produced the GroupNotification.
|
||||
@@ -143,7 +143,7 @@ module.exports = GroupNotification;
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Label.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -88,7 +88,7 @@ module.exports = Label;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
132
docs/structures_List.js.html
Normal file
132
docs/structures_List.js.html
Normal file
@@ -0,0 +1,132 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.15.0 » 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>15.<wbr>0</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){throw '[LT05] Lists with more than one section are having problems';}
|
||||
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 October 30, 2021.
|
||||
</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>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Location.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -71,7 +71,7 @@ module.exports = Location;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/Message.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -34,6 +34,8 @@
|
||||
const Base = require('./Base');
|
||||
const MessageMedia = require('./MessageMedia');
|
||||
const Location = require('./Location');
|
||||
const Order = require('./Order');
|
||||
const Payment = require('./Payment');
|
||||
const { MessageTypes } = require('../util/Constants');
|
||||
|
||||
/**
|
||||
@@ -71,7 +73,7 @@ class Message extends Base {
|
||||
* Indicates if the message has media available for download
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.hasMedia = data.clientUrl || data.deprecatedMms3Url ? true : false;
|
||||
this.hasMedia = Boolean(data.mediaKey &amp;&amp; data.directPath);
|
||||
|
||||
/**
|
||||
* Message content
|
||||
@@ -112,12 +114,26 @@ class Message extends Base {
|
||||
*/
|
||||
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
|
||||
* @type {boolean}
|
||||
*/
|
||||
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
|
||||
* @type {boolean}
|
||||
@@ -160,6 +176,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] : [];
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @type {Array&lt;string>}
|
||||
@@ -170,12 +199,59 @@ class Message extends Base {
|
||||
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;
|
||||
|
||||
/** 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.
|
||||
* @type {Array&lt;string>}
|
||||
* @type {Array&lt;{link: string, isSuspicious: boolean}>}
|
||||
*
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -245,6 +321,14 @@ class Message extends Base {
|
||||
return this.client.sendMessage(chatId, content, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Accept Group V4 Invite
|
||||
* @returns {Promise&lt;Object>}
|
||||
*/
|
||||
async acceptGroupV4Invite() {
|
||||
return await this.client.acceptGroupV4Invite(this.inviteV4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Forwards this message to another chat
|
||||
*
|
||||
@@ -276,26 +360,39 @@ class Message extends Base {
|
||||
|
||||
if (msg.mediaData.mediaStage != 'RESOLVED') {
|
||||
// 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
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const mediaUrl = msg.clientUrl || msg.deprecatedMms3Url;
|
||||
|
||||
const buffer = await window.WWebJS.downloadBuffer(mediaUrl);
|
||||
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
|
||||
};
|
||||
|
||||
try {
|
||||
const decryptedMedia = await window.Store.DownloadManager.downloadAndDecrypt({
|
||||
directPath: msg.directPath,
|
||||
encFilehash: msg.encFilehash,
|
||||
filehash: msg.filehash,
|
||||
mediaKey: msg.mediaKey,
|
||||
mediaKeyTimestamp: msg.mediaKeyTimestamp,
|
||||
type: msg.type,
|
||||
signal: (new AbortController).signal
|
||||
});
|
||||
|
||||
const data = window.WWebJS.arrayBufferToBase64(decryptedMedia);
|
||||
|
||||
return {
|
||||
data,
|
||||
mimetype: msg.mimetype,
|
||||
filename: msg.filename
|
||||
};
|
||||
} catch (e) {
|
||||
if(e.status &amp;&amp; e.status === 404) return undefined;
|
||||
throw e;
|
||||
}
|
||||
}, this.id._serialized);
|
||||
|
||||
if (!result) return undefined;
|
||||
@@ -373,6 +470,36 @@ class Message extends Base {
|
||||
|
||||
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) => {
|
||||
return window.WWebJS.getOrderDetail(orderId, token);
|
||||
}, this.orderId, this.token);
|
||||
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;
|
||||
@@ -386,7 +513,7 @@ module.exports = Message;
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/MessageMedia.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -34,6 +34,8 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const mime = require('mime');
|
||||
const fetch = require('node-fetch');
|
||||
const { URL } = require('url');
|
||||
|
||||
/**
|
||||
* Media attached to a message
|
||||
@@ -74,6 +76,56 @@ class MessageMedia {
|
||||
|
||||
return new MessageMedia(mimetype, b64data, filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a MessageMedia instance from a URL
|
||||
* @param {string} url
|
||||
* @param {Object} [options]
|
||||
* @param {number} [options.unsafeMime=false]
|
||||
* @param {object} [options.client]
|
||||
* @param {object} [options.reqOptions]
|
||||
* @param {number} [options.reqOptions.size=0]
|
||||
* @returns {Promise&lt;MessageMedia>}
|
||||
*/
|
||||
static async fromUrl(url, options = {}) {
|
||||
let mimetype;
|
||||
|
||||
if (!options.unsafeMime) {
|
||||
const pUrl = new URL(url);
|
||||
mimetype = mime.getType(pUrl.pathname);
|
||||
|
||||
if (!mimetype)
|
||||
throw new Error('Unable to determine MIME type');
|
||||
}
|
||||
|
||||
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');
|
||||
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 };
|
||||
}
|
||||
|
||||
const res = options.client
|
||||
? (await options.client.pupPage.evaluate(fetchData, url, options.reqOptions))
|
||||
: (await fetchData(url, options.reqOptions));
|
||||
|
||||
if (!mimetype)
|
||||
mimetype = res.mime;
|
||||
|
||||
return new MessageMedia(mimetype, res.data, null);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = MessageMedia;</code></pre>
|
||||
@@ -86,7 +138,7 @@ module.exports = MessageMedia;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</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.15.0 » 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>15.<wbr>0</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 October 30, 2021.
|
||||
</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>
|
||||
132
docs/structures_Payment.js.html
Normal file
132
docs/structures_Payment.js.html
Normal file
@@ -0,0 +1,132 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.15.0 » 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>15.<wbr>0</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
|
||||
* @type {number}
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
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 October 30, 2021.
|
||||
</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>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/PrivateChat.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -51,7 +51,7 @@ module.exports = PrivateChat;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: structures/PrivateContact.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -51,7 +51,7 @@ module.exports = PrivateContact;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</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.15.0 » 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>15.<wbr>0</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 October 30, 2021.
|
||||
</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.15.0 » 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>15.<wbr>0</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 October 30, 2021.
|
||||
</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>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: util/Constants.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -42,10 +42,12 @@ exports.DefaultOptions = {
|
||||
qrTimeoutMs: 45000,
|
||||
qrRefreshIntervalMs: 20000,
|
||||
authTimeoutMs: 45000,
|
||||
qrMaxRetries: 0,
|
||||
takeoverOnConflict: false,
|
||||
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',
|
||||
ffmpegPath: 'ffmpeg'
|
||||
ffmpegPath: 'ffmpeg',
|
||||
bypassCSP: false
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -80,7 +82,8 @@ exports.Events = {
|
||||
QR_RECEIVED: 'qr',
|
||||
DISCONNECTED: 'disconnected',
|
||||
STATE_CHANGED: 'change_state',
|
||||
BATTERY_CHANGED: 'change_battery'
|
||||
BATTERY_CHANGED: 'change_battery',
|
||||
INCOMING_CALL: 'incoming_call'
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -99,8 +102,14 @@ exports.MessageTypes = {
|
||||
LOCATION: 'location',
|
||||
CONTACT_CARD: 'vcard',
|
||||
CONTACT_CARD_MULTI: 'multi_vcard',
|
||||
ORDER: 'order',
|
||||
REVOKED: 'revoked',
|
||||
UNKNOWN: 'unknown'
|
||||
PRODUCT: 'product',
|
||||
UNKNOWN: 'unknown',
|
||||
GROUP_INVITE: 'groups_v4_invite',
|
||||
LIST: 'list',
|
||||
BUTTONS_RESPONSE: 'buttons_response',
|
||||
PAYMENT: 'payment'
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -174,7 +183,7 @@ exports.MessageAck = {
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: util/InterfaceController.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -46,7 +46,8 @@ class InterfaceController {
|
||||
*/
|
||||
async openChatWindow(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);
|
||||
}, chatId);
|
||||
}
|
||||
@@ -103,10 +104,53 @@ class InterfaceController {
|
||||
await window.Store.Cmd.closeDrawerRight();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all Features
|
||||
*/
|
||||
async getFeatures() {
|
||||
return await this.pupPage.evaluate(() => {
|
||||
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) => {
|
||||
return window.Store.Features.supportsFeature(feature);
|
||||
}, feature);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable Features
|
||||
* @param {string[]} features to be enabled
|
||||
*/
|
||||
async enableFeatures(features) {
|
||||
await this.pupPage.evaluate((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) => {
|
||||
for (const feature in features) {
|
||||
window.Store.Features.setFeature(features[feature], false);
|
||||
}
|
||||
}, features);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = InterfaceController;</code></pre>
|
||||
module.exports = InterfaceController;
|
||||
</code></pre>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
@@ -116,7 +160,7 @@ module.exports = InterfaceController;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="JSDoc 3.6.6">
|
||||
<meta name="generator" content="JSDoc 3.6.7">
|
||||
<meta charset="utf-8">
|
||||
<title>whatsapp-web.js 1.12.5 » Source: util/Util.js</title>
|
||||
<title>whatsapp-web.js 1.15.0 » 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/Noto+Serif:400,400i,700,700i" 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">
|
||||
<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>12.<wbr>5</a>
|
||||
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>15.<wbr>0</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
@@ -36,6 +36,7 @@ const path = require('path');
|
||||
const Crypto = require('crypto');
|
||||
const { tmpdir } = require('os');
|
||||
const ffmpeg = require('fluent-ffmpeg');
|
||||
const webp = require('node-webpmux');
|
||||
const fs = require('fs').promises;
|
||||
|
||||
const has = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
||||
@@ -49,6 +50,16 @@ class Util {
|
||||
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.
|
||||
* @param {Object} def Default properties
|
||||
@@ -166,16 +177,49 @@ class Util {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Sticker metadata.
|
||||
* @typedef {Object} StickerMetadata
|
||||
* @property {string} [name]
|
||||
* @property {string} [author]
|
||||
* @property {string[]} [categories]
|
||||
*/
|
||||
|
||||
/**
|
||||
* Formats a media to webp
|
||||
* @param {MessageMedia} media
|
||||
* @param {StickerMetadata} metadata
|
||||
*
|
||||
* @returns {Promise&lt;MessageMedia>} media in webp format
|
||||
*/
|
||||
static async formatToWebpSticker(media) {
|
||||
if (media.mimetype.includes('image')) return this.formatImageToWebpSticker(media);
|
||||
else if (media.mimetype.includes('video')) return this.formatVideoToWebpSticker(media);
|
||||
else throw new Error('Invalid media format');
|
||||
static async formatToWebpSticker(media, metadata) {
|
||||
let webpMedia;
|
||||
|
||||
if (media.mimetype.includes('image'))
|
||||
webpMedia = await this.formatImageToWebpSticker(media);
|
||||
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 +231,8 @@ class Util {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Util;</code></pre>
|
||||
module.exports = Util;
|
||||
</code></pre>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
@@ -197,7 +242,7 @@ module.exports = Util;</code></pre>
|
||||
<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.6 on February 25, 2021.
|
||||
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.7 on October 30, 2021.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
22
example.js
22
example.js
@@ -1,5 +1,5 @@
|
||||
const fs = require('fs');
|
||||
const { Client, Location } = require('./index');
|
||||
const { Client, Location, List, Buttons } = require('./index');
|
||||
|
||||
const SESSION_FILE_PATH = './session.json';
|
||||
let sessionCfg;
|
||||
@@ -11,6 +11,13 @@ 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.
|
||||
|
||||
// You also could connect to an existing instance of a browser
|
||||
// {
|
||||
// puppeteer: {
|
||||
// browserWSEndpoint: `ws://localhost:3000`
|
||||
// }
|
||||
// }
|
||||
|
||||
client.initialize();
|
||||
|
||||
client.on('qr', (qr) => {
|
||||
@@ -192,11 +199,18 @@ client.on('message', async msg => {
|
||||
const chat = await msg.getChat();
|
||||
// stops typing or recording in the chat
|
||||
chat.clearState();
|
||||
} else if (msg.body === 'jumpto') {
|
||||
} else if (msg.body === '!jumpto') {
|
||||
if (msg.hasQuotedMsg) {
|
||||
const quotedMsg = await msg.getQuotedMessage();
|
||||
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);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -259,6 +273,10 @@ client.on('change_battery', (batteryInfo) => {
|
||||
console.log(`Battery: ${battery}% - Charging? ${plugged}`);
|
||||
});
|
||||
|
||||
client.on('change_state', state => {
|
||||
console.log('CHANGE STATE', state );
|
||||
});
|
||||
|
||||
client.on('disconnected', (reason) => {
|
||||
console.log('Client was logged out', reason);
|
||||
});
|
||||
|
||||
324
index.d.ts
vendored
324
index.d.ts
vendored
@@ -1,5 +1,6 @@
|
||||
|
||||
import { EventEmitter } from 'events'
|
||||
import { RequestInit } from 'node-fetch'
|
||||
import puppeteer = require('puppeteer')
|
||||
|
||||
declare namespace WAWebJS {
|
||||
@@ -19,6 +20,9 @@ declare namespace WAWebJS {
|
||||
/**Accepts an invitation to join a group */
|
||||
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 */
|
||||
getInviteInfo(inviteCode: string): Promise<object>
|
||||
|
||||
@@ -44,6 +48,9 @@ declare namespace WAWebJS {
|
||||
/** Logs out the client, closing the current session */
|
||||
logout(): Promise<void>
|
||||
|
||||
/** Get all blocked contacts by host account */
|
||||
getBlockedContacts(): Promise<Contact[]>
|
||||
|
||||
/** Get chat instance by ID */
|
||||
getChatById(chatId: string): Promise<Chat>
|
||||
|
||||
@@ -55,6 +62,12 @@ declare namespace WAWebJS {
|
||||
|
||||
/** Get all current contact instances */
|
||||
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 */
|
||||
getLabels(): Promise<Label[]>
|
||||
@@ -87,11 +100,11 @@ declare namespace WAWebJS {
|
||||
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 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 */
|
||||
resetState(): Promise<void>
|
||||
@@ -99,6 +112,9 @@ declare namespace WAWebJS {
|
||||
/** Send a message to a specific chatId */
|
||||
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 */
|
||||
sendPresenceAvailable(): Promise<void>
|
||||
|
||||
@@ -149,8 +165,8 @@ declare namespace WAWebJS {
|
||||
|
||||
/** Emitted when the client has been disconnected */
|
||||
on(event: 'disconnected', listener: (
|
||||
/** state that caused the disconnect */
|
||||
reason: WAState
|
||||
/** reason that caused the disconnect */
|
||||
reason: WAState | "NAVIGATED"
|
||||
) => void): this
|
||||
|
||||
/** Emitted when a user joins the chat via invite link or is added by an admin */
|
||||
@@ -221,6 +237,12 @@ declare namespace WAWebJS {
|
||||
qr: string
|
||||
) => 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 */
|
||||
on(event: 'ready', listener: () => void): this
|
||||
}
|
||||
@@ -265,13 +287,16 @@ declare namespace WAWebJS {
|
||||
* @default 45000 */
|
||||
authTimeoutMs?: number,
|
||||
/** Puppeteer launch options. View docs here: https://github.com/puppeteer/puppeteer/ */
|
||||
puppeteer?: puppeteer.LaunchOptions
|
||||
puppeteer?: puppeteer.LaunchOptions & puppeteer.BrowserLaunchArgumentOptions & puppeteer.BrowserConnectOptions
|
||||
/** Refresh interval for qr code (how much time to wait before checking if the qr code has changed)
|
||||
* @default 20000 */
|
||||
qrRefreshIntervalMs?: number
|
||||
/** Timeout for qr code selector in puppeteer
|
||||
* @default 45000 */
|
||||
qrTimeoutMs?: number,
|
||||
/** How many times should the qrcode be refreshed before giving up
|
||||
* @default 0 (disabled) */
|
||||
qrMaxRetries?: number,
|
||||
/** Restart client with a new session (i.e. use null 'session' var) if authentication fails
|
||||
* @default false */
|
||||
restartOnAuthFail?: boolean
|
||||
@@ -343,7 +368,7 @@ declare namespace WAWebJS {
|
||||
reply: (content: MessageContent, options?: MessageSendOptions) => Promise<Message>,
|
||||
|
||||
}
|
||||
|
||||
|
||||
/** whatsapp web url */
|
||||
export const WhatsWebURL: string
|
||||
|
||||
@@ -413,7 +438,11 @@ declare namespace WAWebJS {
|
||||
CONTACT_CARD = 'vcard',
|
||||
CONTACT_CARD_MULTI = 'multi_vcard',
|
||||
REVOKED = 'revoked',
|
||||
ORDER = 'order',
|
||||
PRODUCT = 'product',
|
||||
PAYMENT = 'payment',
|
||||
UNKNOWN = 'unknown',
|
||||
GROUP_INVITE = 'groups_v4_invite',
|
||||
}
|
||||
|
||||
/** Client status */
|
||||
@@ -448,6 +477,15 @@ declare namespace WAWebJS {
|
||||
readRemaining: number
|
||||
}
|
||||
|
||||
export type InviteV4Data = {
|
||||
inviteCode: string,
|
||||
inviteCodeExp: number,
|
||||
groupId: string,
|
||||
groupName?: string,
|
||||
fromId: string,
|
||||
toId: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents a Message on WhatsApp
|
||||
*
|
||||
@@ -499,12 +537,19 @@ declare namespace WAWebJS {
|
||||
id: MessageId,
|
||||
/** Indicates if the message was forwarded */
|
||||
isForwarded: boolean,
|
||||
/**
|
||||
* Indicates how many times the message was forwarded.
|
||||
* The maximum value is 127.
|
||||
*/
|
||||
forwardingScore: number,
|
||||
/** Indicates if the message was starred */
|
||||
isStarred: boolean,
|
||||
/** Location information contained in the message, if the message is type "location" */
|
||||
location: Location,
|
||||
/** List of vCards contained in the message */
|
||||
vCards: string[],
|
||||
/** Invite v4 info */
|
||||
inviteV4?: InviteV4Data,
|
||||
/** MediaKey that represents the sticker 'ID' */
|
||||
mediaKey?: string,
|
||||
/** Indicates the mentions in the message body. */
|
||||
@@ -520,8 +565,28 @@ declare namespace WAWebJS {
|
||||
/** Message type */
|
||||
type: MessageTypes,
|
||||
/** 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,
|
||||
/** Accept the Group V4 Invite in message */
|
||||
acceptGroupV4Invite: () => Promise<{status: number}>,
|
||||
/** Deletes the message from the chat */
|
||||
delete: (everyone?: boolean) => Promise<void>,
|
||||
/** Downloads and returns the attatched message media */
|
||||
@@ -549,7 +614,15 @@ declare namespace WAWebJS {
|
||||
/** Unstar this message */
|
||||
unstar: () => Promise<void>,
|
||||
/** Get information about message delivery statuso */
|
||||
getInfo: () => Promise<MessageInfo | null>
|
||||
getInfo: () => Promise<MessageInfo | null>,
|
||||
/**
|
||||
* Gets the order associated with a given message
|
||||
*/
|
||||
getOrder: () => Order,
|
||||
/**
|
||||
* Gets the payment details associated with a given message
|
||||
*/
|
||||
getPayment: () => Payment,
|
||||
}
|
||||
|
||||
/** ID that represents a message */
|
||||
@@ -560,10 +633,13 @@ declare namespace WAWebJS {
|
||||
_serialized: string,
|
||||
}
|
||||
|
||||
export interface Location {
|
||||
description?: string | null,
|
||||
latitude: string,
|
||||
longitude: string,
|
||||
/** Location information */
|
||||
export class Location {
|
||||
description?: string | null
|
||||
latitude: string
|
||||
longitude: string
|
||||
|
||||
constructor(latitude: number, longitude: number, description?: string)
|
||||
}
|
||||
|
||||
export interface Label {
|
||||
@@ -584,6 +660,8 @@ declare namespace WAWebJS {
|
||||
linkPreview?: boolean
|
||||
/** Send audio as voice message */
|
||||
sendAudioAsVoice?: boolean
|
||||
/** Send video as gif */
|
||||
sendVideoAsGif?: boolean
|
||||
/** Send media as sticker */
|
||||
sendMediaAsSticker?: boolean
|
||||
/** Send media as document */
|
||||
@@ -600,6 +678,20 @@ declare namespace WAWebJS {
|
||||
sendSeen?: boolean
|
||||
/** Media to be sent */
|
||||
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
|
||||
unsafeMime?: boolean
|
||||
reqOptions?: RequestInit
|
||||
}
|
||||
|
||||
/** Media attached to a message */
|
||||
@@ -620,9 +712,12 @@ declare namespace WAWebJS {
|
||||
|
||||
/** Creates a MessageMedia instance from a local file path */
|
||||
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
|
||||
@@ -700,9 +795,16 @@ declare namespace WAWebJS {
|
||||
* Will return null when getting chat for currently logged in user.
|
||||
*/
|
||||
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 */
|
||||
block: () => Promise<boolean>,
|
||||
|
||||
/** Unlocks this contact from WhatsApp */
|
||||
unblock: () => Promise<boolean>,
|
||||
|
||||
@@ -781,8 +883,8 @@ declare namespace WAWebJS {
|
||||
delete: () => Promise<boolean>,
|
||||
/** Loads chat messages, sorted from earliest to latest. */
|
||||
fetchMessages: (searchOptions: MessageSearchOptions) => Promise<Message[]>,
|
||||
/** Mutes this chat until a specified date */
|
||||
mute: (unmuteDate: Date) => Promise<void>,
|
||||
/** Mutes this chat forever, unless a date is specified */
|
||||
mute: (unmuteDate?: Date) => Promise<void>,
|
||||
/** Send a message to this chat */
|
||||
sendMessage: (content: MessageContent, options?: MessageSendOptions) => Promise<Message>,
|
||||
/** Set the message as seen */
|
||||
@@ -907,6 +1009,192 @@ declare namespace WAWebJS {
|
||||
/** Makes the bot leave the group */
|
||||
leave: () => Promise<void>;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
}
|
||||
|
||||
/** 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<Array<string>>
|
||||
title?: string | null
|
||||
footer?: string | null
|
||||
|
||||
constructor(body: string, buttons: Array<Array<string>>, title?: string | null, footer?: string | null)
|
||||
}
|
||||
}
|
||||
|
||||
export = WAWebJS
|
||||
|
||||
4
index.js
4
index.js
@@ -18,6 +18,8 @@ module.exports = {
|
||||
BusinessContact: require('./src/structures/BusinessContact'),
|
||||
ClientInfo: require('./src/structures/ClientInfo'),
|
||||
Location: require('./src/structures/Location'),
|
||||
|
||||
ProductMetadata: require('./src/structures/ProductMetadata'),
|
||||
List: require('./src/structures/List'),
|
||||
Buttons: require('./src/structures/Buttons'),
|
||||
...Constants
|
||||
};
|
||||
|
||||
26
package.json
26
package.json
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "whatsapp-web.js",
|
||||
"version": "1.12.5",
|
||||
"version": "1.15.0",
|
||||
"description": "Library for interacting with the WhatsApp Web API ",
|
||||
"main": "./index.js",
|
||||
"typings": "./index.d.ts",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"test": "mocha tests",
|
||||
"shell": "node --experimental-repl-await ./shell.js",
|
||||
"generate-docs": "node_modules/.bin/jsdoc --configure .jsdoc.json --verbose"
|
||||
},
|
||||
@@ -26,18 +26,28 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/pedroslopez/whatsapp-web.js/issues"
|
||||
},
|
||||
"homepage": "https://waguide.pedroslopez.me/",
|
||||
"homepage": "https://guide.wwebjs.dev/",
|
||||
"dependencies": {
|
||||
"@pedroslopez/moduleraid": "^5.0.0",
|
||||
"@pedroslopez/moduleraid": "^5.0.2",
|
||||
"fluent-ffmpeg": "^2.1.2",
|
||||
"jsqr": "^1.3.1",
|
||||
"mime": "^2.4.5",
|
||||
"puppeteer": "^5.2.1",
|
||||
"sharp": "^0.26.3"
|
||||
"node-webpmux": "^3.1.0",
|
||||
"puppeteer": "^10.1.0",
|
||||
"sharp": "^0.28.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^6.8.0",
|
||||
"@types/node-fetch": "^2.5.11",
|
||||
"chai": "^4.3.4",
|
||||
"dotenv": "^10.0.0",
|
||||
"eslint": "^7.27.0",
|
||||
"eslint-plugin-mocha": "^9.0.0",
|
||||
"jsdoc": "^3.6.4",
|
||||
"jsdoc-baseline": "^0.1.5"
|
||||
"jsdoc-baseline": "^0.1.5",
|
||||
"mocha": "^9.0.2",
|
||||
"sinon": "^11.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
180
src/Client.js
180
src/Client.js
@@ -11,7 +11,7 @@ const { WhatsWebURL, DefaultOptions, Events, WAState } = require('./util/Constan
|
||||
const { ExposeStore, LoadUtils } = require('./util/Injected');
|
||||
const ChatFactory = require('./factories/ChatFactory');
|
||||
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} = require('./structures');
|
||||
/**
|
||||
* Starting point for interacting with the WhatsApp Web API
|
||||
* @extends {EventEmitter}
|
||||
@@ -20,6 +20,7 @@ const { ClientInfo, Message, MessageMedia, Contact, Location, GroupNotification
|
||||
* @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.qrTimeoutMs - Timeout for qr code selector in puppeteer
|
||||
* @param {number} options.qrMaxRetries - How many times should the qrcode be refreshed before giving up
|
||||
* @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
|
||||
@@ -30,6 +31,7 @@ const { ClientInfo, Message, MessageMedia, Contact, Location, GroupNotification
|
||||
* @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.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#authenticated
|
||||
@@ -64,8 +66,16 @@ class Client extends EventEmitter {
|
||||
* Sets up events and requirements, kicks off authentication request
|
||||
*/
|
||||
async initialize() {
|
||||
const browser = await puppeteer.launch(this.options.puppeteer);
|
||||
const page = (await browser.pages())[0];
|
||||
let [browser, page] = [null, null];
|
||||
|
||||
if(this.options.puppeteer && this.options.puppeteer.browserWSEndpoint) {
|
||||
browser = await puppeteer.connect(this.options.puppeteer);
|
||||
page = await browser.newPage();
|
||||
} else {
|
||||
browser = await puppeteer.launch(this.options.puppeteer);
|
||||
page = (await browser.pages())[0];
|
||||
}
|
||||
|
||||
page.setUserAgent(this.options.userAgent);
|
||||
|
||||
this.pupBrowser = browser;
|
||||
@@ -82,12 +92,16 @@ class Client extends EventEmitter {
|
||||
}, this.options.session);
|
||||
}
|
||||
|
||||
if(this.options.bypassCSP) {
|
||||
await page.setBypassCSP(true);
|
||||
}
|
||||
|
||||
await page.goto(WhatsWebURL, {
|
||||
waitUntil: 'load',
|
||||
timeout: 0,
|
||||
});
|
||||
|
||||
const KEEP_PHONE_CONNECTED_IMG_SELECTOR = '[data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]';
|
||||
const KEEP_PHONE_CONNECTED_IMG_SELECTOR = '[data-icon="intro-md-beta-logo-dark"], [data-icon="intro-md-beta-logo-light"], [data-asset-intro-image-light="true"], [data-asset-intro-image-dark="true"]';
|
||||
|
||||
if (this.options.session) {
|
||||
// Check if session restore was successfull
|
||||
@@ -114,26 +128,36 @@ class Client extends EventEmitter {
|
||||
}
|
||||
|
||||
} else {
|
||||
let qrRetries = 0;
|
||||
|
||||
const getQrCode = async () => {
|
||||
// Check if retry button is present
|
||||
var QR_RETRY_SELECTOR = 'div[data-ref] > span > div';
|
||||
var QR_RETRY_SELECTOR = 'div[data-ref] > span > button';
|
||||
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
|
||||
* @event Client#qr
|
||||
* @param {string} qr QR Code
|
||||
*/
|
||||
this.emit(Events.QR_RECEIVED, qr);
|
||||
|
||||
if (this.options.qrMaxRetries > 0) {
|
||||
qrRetries++;
|
||||
if (qrRetries > this.options.qrMaxRetries) {
|
||||
this.emit(Events.DISCONNECTED, 'Max qrcode retries reached');
|
||||
await this.destroy();
|
||||
}
|
||||
}
|
||||
};
|
||||
getQrCode();
|
||||
this._qrRefreshInterval = setInterval(getQrCode, this.options.qrRefreshIntervalMs);
|
||||
@@ -173,6 +197,14 @@ class Client extends EventEmitter {
|
||||
// Check window.Store Injection
|
||||
await page.waitForFunction('window.Store != undefined');
|
||||
|
||||
const isMD = await page.evaluate(() => {
|
||||
return window.Store.Features.features.MD_BACKEND;
|
||||
});
|
||||
|
||||
if(isMD) {
|
||||
throw new Error('Multi-device is not yet supported by whatsapp-web.js. Please check out https://github.com/pedroslopez/whatsapp-web.js/pull/889 to follow the progress.');
|
||||
}
|
||||
|
||||
//Load util functions (serializers, helper functions)
|
||||
await page.evaluate(LoadUtils);
|
||||
|
||||
@@ -335,7 +367,7 @@ class Client extends EventEmitter {
|
||||
/**
|
||||
* Emitted when the client has been disconnected
|
||||
* @event Client#disconnected
|
||||
* @param {WAState} reason state that caused the disconnect
|
||||
* @param {WAState|"NAVIGATION"} reason reason that caused the disconnect
|
||||
*/
|
||||
this.emit(Events.DISCONNECTED, state);
|
||||
this.destroy();
|
||||
@@ -357,6 +389,24 @@ class Client extends EventEmitter {
|
||||
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.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)); });
|
||||
@@ -366,6 +416,7 @@ class Client extends EventEmitter {
|
||||
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.Conn.on('change:battery', (state) => { window.onBatteryStateChangedEvent(state); });
|
||||
window.Store.Call.on('add', (call) => { window.onIncomingCall(call); });
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -373,6 +424,13 @@ class Client extends EventEmitter {
|
||||
* @event Client#ready
|
||||
*/
|
||||
this.emit(Events.READY);
|
||||
|
||||
// Disconnect when navigating away
|
||||
// Because WhatsApp Web now reloads when logging out from the device, this also covers that case
|
||||
this.pupPage.on('framenavigated', async () => {
|
||||
this.emit(Events.DISCONNECTED, 'NAVIGATION');
|
||||
await this.destroy();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -423,6 +481,7 @@ class Client extends EventEmitter {
|
||||
* @typedef {Object} MessageSendOptions
|
||||
* @property {boolean} [linkPreview=true] - Show links preview
|
||||
* @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} [sendMediaAsDocument=false] - Send media as a document
|
||||
* @property {boolean} [parseVCards=true] - Automatically parse vCards and send them as contacts
|
||||
@@ -430,13 +489,16 @@ class Client extends EventEmitter {
|
||||
* @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 {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
|
||||
*/
|
||||
|
||||
/**
|
||||
* Send a message to a specific chatId
|
||||
* @param {string} chatId
|
||||
* @param {string|MessageMedia|Location|Contact|Array<Contact>} content
|
||||
* @param {string|MessageMedia|Location|Contact|Array<Contact>|Buttons|List} content
|
||||
* @param {MessageSendOptions} [options] - Options used when sending the message
|
||||
*
|
||||
* @returns {Promise<Message>} Message that was just sent
|
||||
@@ -445,12 +507,14 @@ class Client extends EventEmitter {
|
||||
let internalOptions = {
|
||||
linkPreview: options.linkPreview === false ? undefined : true,
|
||||
sendAudioAsVoice: options.sendAudioAsVoice,
|
||||
sendVideoAsGif: options.sendVideoAsGif,
|
||||
sendMediaAsSticker: options.sendMediaAsSticker,
|
||||
sendMediaAsDocument: options.sendMediaAsDocument,
|
||||
caption: options.caption,
|
||||
quotedMessageId: options.quotedMessageId,
|
||||
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) : [],
|
||||
...options.extra
|
||||
};
|
||||
|
||||
const sendSeen = typeof options.sendSeen === 'undefined' ? true : options.sendSeen;
|
||||
@@ -471,10 +535,22 @@ class Client extends EventEmitter {
|
||||
} else if(Array.isArray(content) && content.length > 0 && content[0] instanceof Contact) {
|
||||
internalOptions.contactCardList = content.map(contact => contact.id._serialized);
|
||||
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 && 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
|
||||
});
|
||||
}
|
||||
|
||||
const newMessage = await this.pupPage.evaluate(async (chatId, message, options, sendSeen) => {
|
||||
@@ -492,6 +568,24 @@ class Client extends EventEmitter {
|
||||
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<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
|
||||
* @returns {Promise<Array<Chat>>}
|
||||
@@ -566,6 +660,20 @@ class Client extends EventEmitter {
|
||||
return chatId._serialized;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accepts a private invitation to join a group
|
||||
* @param {object} inviteV4 Invite V4 Info
|
||||
* @returns {Promise<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 await this.pupPage.evaluate(async inviteInfo => {
|
||||
let { groupId, fromId, inviteCode, inviteCodeExp, toId } = inviteInfo;
|
||||
return await window.Store.Wap.acceptGroupV4Invite(groupId, fromId, inviteCode, String(inviteCodeExp), toId);
|
||||
}, inviteInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current user's status message
|
||||
* @param {string} status New status message
|
||||
@@ -668,15 +776,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 {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) {
|
||||
unmuteDate = unmuteDate ? unmuteDate.getTime() / 1000 : -1;
|
||||
await this.pupPage.evaluate(async (chatId, timestamp) => {
|
||||
let chat = await window.Store.Chat.get(chatId);
|
||||
await chat.mute.mute(timestamp, !0);
|
||||
}, chatId, unmuteDate.getTime() / 1000);
|
||||
}, chatId, unmuteDate || -1);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -742,10 +851,7 @@ class Client extends EventEmitter {
|
||||
* @returns {Promise<Object|null>}
|
||||
*/
|
||||
async getNumberId(number) {
|
||||
if(!number.endsWith('@c.us')) {
|
||||
number += '@c.us';
|
||||
}
|
||||
|
||||
if (!number.endsWith('@c.us')) number += '@c.us';
|
||||
try {
|
||||
return await this.pupPage.evaluate(async numberId => {
|
||||
return window.WWebJS.getNumberId(numberId);
|
||||
@@ -755,6 +861,33 @@ class Client extends EventEmitter {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the formatted number of a WhatsApp ID.
|
||||
* @param {string} number Number or ID
|
||||
* @returns {Promise<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<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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new group
|
||||
* @param {string} name group title
|
||||
@@ -849,6 +982,19 @@ class Client extends EventEmitter {
|
||||
|
||||
return Promise.all(chatIds.map(id => this.getChatById(id)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all blocked contacts by host account
|
||||
* @returns {Promise<Array<Contact>>}
|
||||
*/
|
||||
async getBlockedContacts() {
|
||||
const blockedContacts = await this.pupPage.evaluate(() => {
|
||||
let chatIds = window.Store.Blocklist.models.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;
|
||||
|
||||
68
src/structures/Buttons.js
Normal file
68
src/structures/Buttons.js
Normal file
@@ -0,0 +1,68 @@
|
||||
'use strict';
|
||||
|
||||
const MessageMedia = require('./MessageMedia');
|
||||
const Util = require('../util/Util');
|
||||
|
||||
/**
|
||||
* Message type buttons
|
||||
*/
|
||||
class Buttons {
|
||||
/**
|
||||
* @param {string|MessageMedia} body
|
||||
* @param {Array<Array<string>>} buttons
|
||||
* @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 {Array<Array<string>>}
|
||||
*/
|
||||
this.buttons = this._format(buttons);
|
||||
if(!this.buttons.length){ throw '[BT01] No buttons';}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates button array from simple array
|
||||
* @param {Array<Array<string>>} buttons
|
||||
* @returns {Array<Array<string>>}
|
||||
* @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 ? btn.id : Util.generateHash(6),'buttonText':{'displayText':btn.body},'type':1};
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Buttons;
|
||||
68
src/structures/Call.js
Normal file
68
src/structures/Call.js
Normal file
@@ -0,0 +1,68 @@
|
||||
'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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = Call;
|
||||
@@ -147,8 +147,8 @@ class Chat extends Base {
|
||||
}
|
||||
|
||||
/**
|
||||
* Mutes this chat until a specified date
|
||||
* @param {Date} unmuteDate Date at which the Chat will be unmuted
|
||||
* Mutes this chat forever, unless a date is specified
|
||||
* @param {?Date} unmuteDate Date at which the Chat will be unmuted, leave as is to mute forever
|
||||
*/
|
||||
async mute(unmuteDate) {
|
||||
return this.client.muteChat(this.id._serialized, unmuteDate);
|
||||
|
||||
@@ -108,7 +108,7 @@ class Contact extends Base {
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.isBlocked = data.isBlocked;
|
||||
|
||||
|
||||
return super._patch(data);
|
||||
}
|
||||
|
||||
@@ -120,6 +120,22 @@ class Contact extends Base {
|
||||
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.
|
||||
* Will return null when getting chat for currently logged in user.
|
||||
@@ -178,4 +194,4 @@ class Contact extends Base {
|
||||
|
||||
}
|
||||
|
||||
module.exports = Contact;
|
||||
module.exports = Contact;
|
||||
|
||||
@@ -43,7 +43,7 @@ class GroupNotification extends Base {
|
||||
*
|
||||
* @type {string}
|
||||
*/
|
||||
this.chatId = typeof (data.from) === 'object' ? data.from._serialized : data.from;
|
||||
this.chatId = typeof (data.to) === 'object' ? data.to._serialized : data.to;
|
||||
|
||||
/**
|
||||
* 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){throw '[LT05] Lists with more than one section are having problems';}
|
||||
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,6 +3,8 @@
|
||||
const Base = require('./Base');
|
||||
const MessageMedia = require('./MessageMedia');
|
||||
const Location = require('./Location');
|
||||
const Order = require('./Order');
|
||||
const Payment = require('./Payment');
|
||||
const { MessageTypes } = require('../util/Constants');
|
||||
|
||||
/**
|
||||
@@ -40,7 +42,7 @@ class Message extends Base {
|
||||
* Indicates if the message has media available for download
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.hasMedia = data.clientUrl || data.deprecatedMms3Url ? true : false;
|
||||
this.hasMedia = Boolean(data.mediaKey && data.directPath);
|
||||
|
||||
/**
|
||||
* Message content
|
||||
@@ -81,12 +83,26 @@ class Message extends Base {
|
||||
*/
|
||||
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
|
||||
* @type {boolean}
|
||||
*/
|
||||
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
|
||||
* @type {boolean}
|
||||
@@ -129,6 +145,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] : [];
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @type {Array<string>}
|
||||
@@ -139,12 +168,59 @@ class Message extends Base {
|
||||
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;
|
||||
|
||||
/** 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.
|
||||
* @type {Array<string>}
|
||||
* @type {Array<{link: string, isSuspicious: boolean}>}
|
||||
*
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -214,6 +290,14 @@ class Message extends Base {
|
||||
return this.client.sendMessage(chatId, content, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Accept Group V4 Invite
|
||||
* @returns {Promise<Object>}
|
||||
*/
|
||||
async acceptGroupV4Invite() {
|
||||
return await this.client.acceptGroupV4Invite(this.inviteV4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Forwards this message to another chat
|
||||
*
|
||||
@@ -245,26 +329,39 @@ class Message extends Base {
|
||||
|
||||
if (msg.mediaData.mediaStage != 'RESOLVED') {
|
||||
// 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
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const mediaUrl = msg.clientUrl || msg.deprecatedMms3Url;
|
||||
|
||||
const buffer = await window.WWebJS.downloadBuffer(mediaUrl);
|
||||
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
|
||||
};
|
||||
|
||||
try {
|
||||
const decryptedMedia = await window.Store.DownloadManager.downloadAndDecrypt({
|
||||
directPath: msg.directPath,
|
||||
encFilehash: msg.encFilehash,
|
||||
filehash: msg.filehash,
|
||||
mediaKey: msg.mediaKey,
|
||||
mediaKeyTimestamp: msg.mediaKeyTimestamp,
|
||||
type: msg.type,
|
||||
signal: (new AbortController).signal
|
||||
});
|
||||
|
||||
const data = window.WWebJS.arrayBufferToBase64(decryptedMedia);
|
||||
|
||||
return {
|
||||
data,
|
||||
mimetype: msg.mimetype,
|
||||
filename: msg.filename
|
||||
};
|
||||
} catch (e) {
|
||||
if(e.status && e.status === 404) return undefined;
|
||||
throw e;
|
||||
}
|
||||
}, this.id._serialized);
|
||||
|
||||
if (!result) return undefined;
|
||||
@@ -342,6 +439,36 @@ class Message extends Base {
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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) => {
|
||||
return window.WWebJS.getOrderDetail(orderId, token);
|
||||
}, this.orderId, this.token);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Message;
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const mime = require('mime');
|
||||
const fetch = require('node-fetch');
|
||||
const { URL } = require('url');
|
||||
|
||||
/**
|
||||
* Media attached to a message
|
||||
@@ -43,6 +45,56 @@ class MessageMedia {
|
||||
|
||||
return new MessageMedia(mimetype, b64data, filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a MessageMedia instance from a URL
|
||||
* @param {string} url
|
||||
* @param {Object} [options]
|
||||
* @param {number} [options.unsafeMime=false]
|
||||
* @param {object} [options.client]
|
||||
* @param {object} [options.reqOptions]
|
||||
* @param {number} [options.reqOptions.size=0]
|
||||
* @returns {Promise<MessageMedia>}
|
||||
*/
|
||||
static async fromUrl(url, options = {}) {
|
||||
let mimetype;
|
||||
|
||||
if (!options.unsafeMime) {
|
||||
const pUrl = new URL(url);
|
||||
mimetype = mime.getType(pUrl.pathname);
|
||||
|
||||
if (!mimetype)
|
||||
throw new Error('Unable to determine MIME type');
|
||||
}
|
||||
|
||||
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');
|
||||
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 };
|
||||
}
|
||||
|
||||
const res = options.client
|
||||
? (await options.client.pupPage.evaluate(fetchData, url, options.reqOptions))
|
||||
: (await fetchData(url, options.reqOptions));
|
||||
|
||||
if (!mimetype)
|
||||
mimetype = res.mime;
|
||||
|
||||
return new MessageMedia(mimetype, res.data, null);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
78
src/structures/Payment.js
Normal file
78
src/structures/Payment.js
Normal file
@@ -0,0 +1,78 @@
|
||||
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
|
||||
* @type {number}
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
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;
|
||||
68
src/structures/Product.js
Normal file
68
src/structures/Product.js
Normal file
@@ -0,0 +1,68 @@
|
||||
'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;
|
||||
25
src/structures/ProductMetadata.js
Normal file
25
src/structures/ProductMetadata.js
Normal file
@@ -0,0 +1,25 @@
|
||||
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;
|
||||
@@ -11,5 +11,11 @@ module.exports = {
|
||||
PrivateChat: require('./PrivateChat'),
|
||||
PrivateContact: require('./PrivateContact'),
|
||||
GroupNotification: require('./GroupNotification'),
|
||||
Label: require('./Label.js')
|
||||
};
|
||||
Label: require('./Label.js'),
|
||||
Order: require('./Order'),
|
||||
Product: require('./Product'),
|
||||
Call: require('./Call'),
|
||||
Buttons: require('./Buttons'),
|
||||
List: require('./List'),
|
||||
Payment: require('./Payment')
|
||||
};
|
||||
|
||||
@@ -11,10 +11,12 @@ exports.DefaultOptions = {
|
||||
qrTimeoutMs: 45000,
|
||||
qrRefreshIntervalMs: 20000,
|
||||
authTimeoutMs: 45000,
|
||||
qrMaxRetries: 0,
|
||||
takeoverOnConflict: false,
|
||||
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',
|
||||
ffmpegPath: 'ffmpeg'
|
||||
ffmpegPath: 'ffmpeg',
|
||||
bypassCSP: false
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -49,7 +51,8 @@ exports.Events = {
|
||||
QR_RECEIVED: 'qr',
|
||||
DISCONNECTED: 'disconnected',
|
||||
STATE_CHANGED: 'change_state',
|
||||
BATTERY_CHANGED: 'change_battery'
|
||||
BATTERY_CHANGED: 'change_battery',
|
||||
INCOMING_CALL: 'incoming_call'
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -68,8 +71,14 @@ exports.MessageTypes = {
|
||||
LOCATION: 'location',
|
||||
CONTACT_CARD: 'vcard',
|
||||
CONTACT_CARD_MULTI: 'multi_vcard',
|
||||
ORDER: 'order',
|
||||
REVOKED: 'revoked',
|
||||
UNKNOWN: 'unknown'
|
||||
PRODUCT: 'product',
|
||||
UNKNOWN: 'unknown',
|
||||
GROUP_INVITE: 'groups_v4_invite',
|
||||
LIST: 'list',
|
||||
BUTTONS_RESPONSE: 'buttons_response',
|
||||
PAYMENT: 'payment'
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,6 +21,7 @@ exports.ExposeStore = (moduleRaidStr) => {
|
||||
window.Store.MediaPrep = window.mR.findModule('MediaPrep')[0];
|
||||
window.Store.MediaObject = window.mR.findModule('getOrCreateMediaObject')[0];
|
||||
window.Store.MediaUpload = window.mR.findModule('uploadMedia')[0];
|
||||
window.Store.NumberInfo = window.mR.findModule('formattedPhoneNumber')[0];
|
||||
window.Store.Cmd = window.mR.findModule('Cmd')[0].default;
|
||||
window.Store.MediaTypes = window.mR.findModule('msgToMediaType')[0];
|
||||
window.Store.VCard = window.mR.findModule('vcardFromContactModel')[0];
|
||||
@@ -32,6 +33,20 @@ exports.ExposeStore = (moduleRaidStr) => {
|
||||
window.Store.Sticker = window.mR.findModule('Sticker')[0].default.Sticker;
|
||||
window.Store.UploadUtils = window.mR.findModule((module) => (module.default && module.default.encryptAndUpload) ? module.default : null)[0].default;
|
||||
window.Store.Label = window.mR.findModule('LabelCollection')[0].default;
|
||||
window.Store.Features = window.mR.findModule('FEATURE_CHANGE_EVENT')[0].default;
|
||||
window.Store.QueryOrder = window.mR.findModule('queryOrder')[0];
|
||||
window.Store.QueryProduct = window.mR.findModule('queryProduct')[0];
|
||||
window.Store.DownloadManager = window.mR.findModule('DownloadManager')[0].default;
|
||||
window.Store.Call = window.mR.findModule('CallCollection')[0].default;
|
||||
|
||||
if(!window.Store.Chat._find) {
|
||||
window.Store.Chat._find = e => {
|
||||
const target = window.Store.Chat.get(e);
|
||||
return target ? Promise.resolve(target) : Promise.resolve({
|
||||
id: e
|
||||
});
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
exports.LoadUtils = () => {
|
||||
@@ -62,7 +77,8 @@ exports.LoadUtils = () => {
|
||||
? await window.WWebJS.processStickerData(options.attachment)
|
||||
: await window.WWebJS.processMediaData(options.attachment, {
|
||||
forceVoice: options.sendAudioAsVoice,
|
||||
forceDocument: options.sendMediaAsDocument
|
||||
forceDocument: options.sendMediaAsDocument,
|
||||
forceGif: options.sendVideoAsGif
|
||||
});
|
||||
|
||||
content = options.sendMediaAsSticker ? undefined : attOptions.preview;
|
||||
@@ -138,7 +154,47 @@ exports.LoadUtils = () => {
|
||||
options = { ...options, ...preview };
|
||||
}
|
||||
}
|
||||
|
||||
let extraOptions = {};
|
||||
if(options.buttons){
|
||||
let caption;
|
||||
if(options.buttons.type === 'chat') {
|
||||
content = options.buttons.body;
|
||||
caption = content;
|
||||
}else{
|
||||
caption = options.caption ? options.caption : ' '; //Caption can't be empty
|
||||
}
|
||||
extraOptions = {
|
||||
productHeaderImageRejected: false,
|
||||
isFromTemplate: false,
|
||||
isDynamicReplyButtonsMsg: true,
|
||||
title: options.buttons.title ? options.buttons.title : undefined,
|
||||
footer: options.buttons.footer ? options.buttons.footer : undefined,
|
||||
dynamicReplyButtons: options.buttons.buttons,
|
||||
replyButtons: options.buttons.buttons,
|
||||
caption: caption
|
||||
};
|
||||
delete options.buttons;
|
||||
}
|
||||
|
||||
if(options.list){
|
||||
if(window.Store.Conn.platform === 'smba' || window.Store.Conn.platform === 'smbi'){
|
||||
throw '[LT01] Whatsapp business can\'t send this yet';
|
||||
}
|
||||
extraOptions = {
|
||||
...extraOptions,
|
||||
type: 'list',
|
||||
footer: options.list.footer,
|
||||
list: {
|
||||
...options.list,
|
||||
listType: 1
|
||||
},
|
||||
body: options.list.description
|
||||
};
|
||||
delete options.list;
|
||||
delete extraOptions.list.footer;
|
||||
}
|
||||
|
||||
const newMsgId = new window.Store.MsgKey({
|
||||
fromMe: true,
|
||||
remote: chat.id,
|
||||
@@ -160,7 +216,8 @@ exports.LoadUtils = () => {
|
||||
...locationOptions,
|
||||
...attOptions,
|
||||
...quotedMsgOptions,
|
||||
...vcardOptions
|
||||
...vcardOptions,
|
||||
...extraOptions
|
||||
};
|
||||
|
||||
await window.Store.SendMessage.addAndSendMsgToChat(chat, message);
|
||||
@@ -195,7 +252,7 @@ exports.LoadUtils = () => {
|
||||
return stickerInfo;
|
||||
};
|
||||
|
||||
window.WWebJS.processMediaData = async (mediaInfo, { forceVoice, forceDocument }) => {
|
||||
window.WWebJS.processMediaData = async (mediaInfo, { forceVoice, forceDocument, forceGif }) => {
|
||||
const file = window.WWebJS.mediaInfoToFile(mediaInfo);
|
||||
const mData = await window.Store.OpaqueData.createFromData(file, file.type);
|
||||
const mediaPrep = window.Store.MediaPrep.prepRawMedia(mData, { asDocument: forceDocument });
|
||||
@@ -211,6 +268,10 @@ exports.LoadUtils = () => {
|
||||
mediaData.type = 'ptt';
|
||||
}
|
||||
|
||||
if (forceGif && mediaData.type === 'video') {
|
||||
mediaData.isGif = true;
|
||||
}
|
||||
|
||||
if (forceDocument) {
|
||||
mediaData.type = 'document';
|
||||
}
|
||||
@@ -255,17 +316,31 @@ exports.LoadUtils = () => {
|
||||
const msg = message.serialize();
|
||||
|
||||
msg.isStatusV3 = message.isStatusV3;
|
||||
msg.links = (message.getLinks()).map(link => link.href);
|
||||
msg.links = (message.getLinks()).map(link => ({
|
||||
link: link.href,
|
||||
isSuspicious: Boolean(link.suspiciousCharacters && link.suspiciousCharacters.size)
|
||||
}));
|
||||
|
||||
if (msg.buttons) {
|
||||
msg.buttons = msg.buttons.serialize();
|
||||
}
|
||||
if (msg.dynamicReplyButtons) {
|
||||
msg.dynamicReplyButtons = JSON.parse(JSON.stringify(msg.dynamicReplyButtons));
|
||||
}
|
||||
if(msg.replyButtons) {
|
||||
msg.replyButtons = JSON.parse(JSON.stringify(msg.replyButtons));
|
||||
}
|
||||
|
||||
if(typeof msg.id.remote === 'object') {
|
||||
msg.id.remote = msg.id.remote._serialized;
|
||||
}
|
||||
|
||||
delete msg.pendingAckUpdate;
|
||||
|
||||
return msg;
|
||||
};
|
||||
|
||||
|
||||
window.WWebJS.getChatModel = async chat => {
|
||||
let res = chat.serialize();
|
||||
res.isGroup = chat.isGroup;
|
||||
@@ -285,7 +360,8 @@ exports.LoadUtils = () => {
|
||||
};
|
||||
|
||||
window.WWebJS.getChat = async chatId => {
|
||||
const chat = window.Store.Chat.get(chatId);
|
||||
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||
const chat = await window.Store.Chat.find(chatWid);
|
||||
return await window.WWebJS.getChatModel(chat);
|
||||
};
|
||||
|
||||
@@ -315,8 +391,9 @@ exports.LoadUtils = () => {
|
||||
return res;
|
||||
};
|
||||
|
||||
window.WWebJS.getContact = contactId => {
|
||||
const contact = window.Store.Contact.get(contactId);
|
||||
window.WWebJS.getContact = async contactId => {
|
||||
const wid = window.Store.WidFactory.createWid(contactId);
|
||||
const contact = await window.Store.Contact.find(wid);
|
||||
return window.WWebJS.getContactModel(contact);
|
||||
};
|
||||
|
||||
@@ -341,43 +418,14 @@ exports.LoadUtils = () => {
|
||||
});
|
||||
};
|
||||
|
||||
window.WWebJS.downloadBuffer = (url) => {
|
||||
return new Promise(function (resolve, reject) {
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', url);
|
||||
xhr.responseType = 'arraybuffer';
|
||||
xhr.onload = function () {
|
||||
if (xhr.status == 200) {
|
||||
resolve(xhr.response);
|
||||
} else {
|
||||
reject({
|
||||
status: this.status,
|
||||
statusText: xhr.statusText
|
||||
});
|
||||
}
|
||||
};
|
||||
xhr.onerror = function () {
|
||||
reject({
|
||||
status: this.status,
|
||||
statusText: xhr.statusText
|
||||
});
|
||||
};
|
||||
xhr.send(null);
|
||||
});
|
||||
};
|
||||
|
||||
window.WWebJS.readBlobAsync = (blob) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
let reader = new FileReader();
|
||||
|
||||
reader.onload = () => {
|
||||
resolve(reader.result);
|
||||
};
|
||||
|
||||
reader.onerror = reject;
|
||||
|
||||
reader.readAsDataURL(blob);
|
||||
});
|
||||
window.WWebJS.arrayBufferToBase64 = (arrayBuffer) => {
|
||||
let binary = '';
|
||||
const bytes = new Uint8Array( arrayBuffer );
|
||||
const len = bytes.byteLength;
|
||||
for (let i = 0; i < len; i++) {
|
||||
binary += String.fromCharCode( bytes[ i ] );
|
||||
}
|
||||
return window.btoa( binary );
|
||||
};
|
||||
|
||||
window.WWebJS.getFileHash = async (data) => {
|
||||
@@ -453,6 +501,20 @@ exports.LoadUtils = () => {
|
||||
const chat = await window.WWebJS.getChat(chatId);
|
||||
return (chat.labels || []).map(id => window.WWebJS.getLabel(id));
|
||||
};
|
||||
|
||||
window.WWebJS.getOrderDetail = async (orderId, token) => {
|
||||
return window.Store.QueryOrder.queryOrder(orderId, 80, 80, token);
|
||||
};
|
||||
|
||||
window.WWebJS.getProductMetadata = async (productId) => {
|
||||
let sellerId = window.Store.Conn.wid;
|
||||
let product = await window.Store.QueryProduct.queryProduct(sellerId, productId);
|
||||
if (product && product.data) {
|
||||
return product.data;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
};
|
||||
};
|
||||
|
||||
exports.MarkAllRead = () => {
|
||||
|
||||
@@ -15,7 +15,8 @@ class InterfaceController {
|
||||
*/
|
||||
async openChatWindow(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);
|
||||
}, chatId);
|
||||
}
|
||||
@@ -72,7 +73,49 @@ class InterfaceController {
|
||||
await window.Store.Cmd.closeDrawerRight();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all Features
|
||||
*/
|
||||
async getFeatures() {
|
||||
return await this.pupPage.evaluate(() => {
|
||||
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) => {
|
||||
return window.Store.Features.supportsFeature(feature);
|
||||
}, feature);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable Features
|
||||
* @param {string[]} features to be enabled
|
||||
*/
|
||||
async enableFeatures(features) {
|
||||
await this.pupPage.evaluate((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) => {
|
||||
for (const feature in features) {
|
||||
window.Store.Features.setFeature(features[feature], false);
|
||||
}
|
||||
}, features);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = InterfaceController;
|
||||
module.exports = InterfaceController;
|
||||
|
||||
@@ -5,6 +5,7 @@ const path = require('path');
|
||||
const Crypto = require('crypto');
|
||||
const { tmpdir } = require('os');
|
||||
const ffmpeg = require('fluent-ffmpeg');
|
||||
const webp = require('node-webpmux');
|
||||
const fs = require('fs').promises;
|
||||
|
||||
const has = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
||||
@@ -18,6 +19,16 @@ class Util {
|
||||
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 < length; i++ ) {
|
||||
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets default properties on an object that aren't already specified.
|
||||
* @param {Object} def Default properties
|
||||
@@ -135,16 +146,49 @@ class Util {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Sticker metadata.
|
||||
* @typedef {Object} StickerMetadata
|
||||
* @property {string} [name]
|
||||
* @property {string} [author]
|
||||
* @property {string[]} [categories]
|
||||
*/
|
||||
|
||||
/**
|
||||
* Formats a media to webp
|
||||
* @param {MessageMedia} media
|
||||
* @param {StickerMetadata} metadata
|
||||
*
|
||||
* @returns {Promise<MessageMedia>} media in webp format
|
||||
*/
|
||||
static async formatToWebpSticker(media) {
|
||||
if (media.mimetype.includes('image')) return this.formatImageToWebpSticker(media);
|
||||
else if (media.mimetype.includes('video')) return this.formatVideoToWebpSticker(media);
|
||||
else throw new Error('Invalid media format');
|
||||
static async formatToWebpSticker(media, metadata) {
|
||||
let webpMedia;
|
||||
|
||||
if (media.mimetype.includes('image'))
|
||||
webpMedia = await this.formatImageToWebpSticker(media);
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -156,4 +200,4 @@ class Util {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Util;
|
||||
module.exports = Util;
|
||||
|
||||
10
tests/README.md
Normal file
10
tests/README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
## Running tests
|
||||
|
||||
These tests require an authenticated WhatsApp Web session, as well as an additional phone that you can send messages to.
|
||||
|
||||
This can be configured using the following environment variables:
|
||||
- `WWEBJS_TEST_SESSION`: A JSON-formatted string with the session details. Must include `WABrowserId`, `WASecretBundle`, `WAToken1` and `WAToken2`.
|
||||
- `WWEBJS_TEST_SESSION_PATH`: Path to a JSON file that contains the session details. Must include `WABrowserId`, `WASecretBundle`, `WAToken1` and `WAToken2`.
|
||||
- `WWEBJS_TEST_REMOTE_ID`: A valid WhatsApp ID that you can send messages to, e.g. `123456789@c.us`. It should be different from the ID used by the provided session.
|
||||
|
||||
You *must* set `WWEBJS_TEST_REMOTE_ID` **and** either `WWEBJS_TEST_SESSION` or `WWEBJS_TEST_SESSION_PATH` for the tests to run properly.
|
||||
479
tests/client.js
Normal file
479
tests/client.js
Normal file
@@ -0,0 +1,479 @@
|
||||
const {expect} = require('chai');
|
||||
const sinon = require('sinon');
|
||||
|
||||
const helper = require('./helper');
|
||||
const Chat = require('../src/structures/Chat');
|
||||
const Contact = require('../src/structures/Contact');
|
||||
const Message = require('../src/structures/Message');
|
||||
const MessageMedia = require('../src/structures/MessageMedia');
|
||||
const Location = require('../src/structures/Location');
|
||||
const { MessageTypes } = require('../src/util/Constants');
|
||||
|
||||
const remoteId = helper.remoteId;
|
||||
|
||||
describe('Client', function() {
|
||||
describe('Authentication', function() {
|
||||
it('should emit QR code if not authenticated', async function() {
|
||||
this.timeout(25000);
|
||||
const callback = sinon.spy();
|
||||
|
||||
const client = helper.createClient();
|
||||
client.on('qr', callback);
|
||||
client.initialize();
|
||||
|
||||
await helper.sleep(20000);
|
||||
|
||||
expect(callback.called).to.equal(true);
|
||||
expect(callback.args[0][0]).to.have.lengthOf(152);
|
||||
|
||||
await client.destroy();
|
||||
});
|
||||
|
||||
it('should disconnect after reaching max qr retries', async function () {
|
||||
this.timeout(50000);
|
||||
|
||||
const qrCallback = sinon.spy();
|
||||
const disconnectedCallback = sinon.spy();
|
||||
|
||||
const client = helper.createClient({options: {qrMaxRetries: 2}});
|
||||
client.on('qr', qrCallback);
|
||||
client.on('disconnected', disconnectedCallback);
|
||||
|
||||
client.initialize();
|
||||
|
||||
await helper.sleep(45000);
|
||||
|
||||
expect(qrCallback.calledThrice).to.eql(true);
|
||||
expect(disconnectedCallback.calledOnceWith('Max qrcode retries reached')).to.eql(true);
|
||||
});
|
||||
|
||||
it('should fail auth if session is invalid', async function() {
|
||||
this.timeout(40000);
|
||||
|
||||
const authFailCallback = sinon.spy();
|
||||
const qrCallback = sinon.spy();
|
||||
const readyCallback = sinon.spy();
|
||||
|
||||
const client = helper.createClient({
|
||||
options: {
|
||||
session: {
|
||||
WABrowserId: 'invalid',
|
||||
WASecretBundle: 'invalid',
|
||||
WAToken1: 'invalid',
|
||||
WAToken2: 'invalid'
|
||||
},
|
||||
authTimeoutMs: 10000,
|
||||
restartOnAuthFail: false
|
||||
}
|
||||
});
|
||||
|
||||
client.on('qr', qrCallback);
|
||||
client.on('auth_failure', authFailCallback);
|
||||
client.on('ready', readyCallback);
|
||||
|
||||
client.initialize();
|
||||
|
||||
await helper.sleep(25000);
|
||||
|
||||
expect(authFailCallback.called).to.equal(true);
|
||||
expect(authFailCallback.args[0][0]).to.equal('Unable to log in. Are the session details valid?');
|
||||
|
||||
expect(readyCallback.called).to.equal(false);
|
||||
expect(qrCallback.called).to.equal(false);
|
||||
|
||||
await client.destroy();
|
||||
});
|
||||
|
||||
it('can restart without a session if session was invalid and restartOnAuthFail=true', async function() {
|
||||
this.timeout(40000);
|
||||
|
||||
const authFailCallback = sinon.spy();
|
||||
const qrCallback = sinon.spy();
|
||||
|
||||
const client = helper.createClient({
|
||||
options:{
|
||||
session: {
|
||||
WABrowserId: 'invalid',
|
||||
WASecretBundle: 'invalid',
|
||||
WAToken1: 'invalid',
|
||||
WAToken2: 'invalid'
|
||||
},
|
||||
authTimeoutMs: 10000,
|
||||
restartOnAuthFail: true
|
||||
}
|
||||
});
|
||||
|
||||
client.on('auth_failure', authFailCallback);
|
||||
client.on('qr', qrCallback);
|
||||
|
||||
client.initialize();
|
||||
|
||||
await helper.sleep(35000);
|
||||
|
||||
expect(authFailCallback.called).to.equal(true);
|
||||
expect(qrCallback.called).to.equal(true);
|
||||
expect(qrCallback.args[0][0]).to.have.lengthOf(152);
|
||||
|
||||
await client.destroy();
|
||||
});
|
||||
|
||||
it('should authenticate with existing session', async function() {
|
||||
this.timeout(40000);
|
||||
|
||||
const authenticatedCallback = sinon.spy();
|
||||
const qrCallback = sinon.spy();
|
||||
const readyCallback = sinon.spy();
|
||||
|
||||
const client = helper.createClient({withSession: true});
|
||||
client.on('qr', qrCallback);
|
||||
client.on('authenticated', authenticatedCallback);
|
||||
client.on('ready', readyCallback);
|
||||
|
||||
await client.initialize();
|
||||
|
||||
expect(authenticatedCallback.called).to.equal(true);
|
||||
const newSession = authenticatedCallback.args[0][0];
|
||||
expect(newSession).to.have.key([
|
||||
'WABrowserId',
|
||||
'WASecretBundle',
|
||||
'WAToken1',
|
||||
'WAToken2'
|
||||
]);
|
||||
expect(authenticatedCallback.called).to.equal(true);
|
||||
expect(readyCallback.called).to.equal(true);
|
||||
expect(qrCallback.called).to.equal(false);
|
||||
|
||||
await client.destroy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Authenticated', function() {
|
||||
let client;
|
||||
|
||||
before(async function() {
|
||||
this.timeout(35000);
|
||||
client = helper.createClient({withSession: true});
|
||||
await client.initialize();
|
||||
});
|
||||
|
||||
after(async function () {
|
||||
await client.destroy();
|
||||
});
|
||||
|
||||
describe('Expose Store', function() {
|
||||
it('exposes the store', async function() {
|
||||
const exposed = await client.pupPage.evaluate(() => {
|
||||
return Boolean(window.Store);
|
||||
});
|
||||
|
||||
expect(exposed).to.equal(true);
|
||||
});
|
||||
|
||||
it('exposes all required WhatsApp Web internal models', async function() {
|
||||
const expectedModules = [
|
||||
'Chat',
|
||||
'Msg',
|
||||
'Contact',
|
||||
'Conn',
|
||||
'AppState',
|
||||
'CryptoLib',
|
||||
'Wap',
|
||||
'SendSeen',
|
||||
'SendClear',
|
||||
'SendDelete',
|
||||
'genId',
|
||||
'SendMessage',
|
||||
'MsgKey',
|
||||
'Invite',
|
||||
'OpaqueData',
|
||||
'MediaPrep',
|
||||
'MediaObject',
|
||||
'MediaUpload',
|
||||
'Cmd',
|
||||
'MediaTypes',
|
||||
'VCard',
|
||||
'UserConstructor',
|
||||
'Validators',
|
||||
'WidFactory',
|
||||
'BlockContact',
|
||||
'GroupMetadata',
|
||||
'Sticker',
|
||||
'UploadUtils',
|
||||
'Label',
|
||||
'Features',
|
||||
'QueryOrder',
|
||||
'QueryProduct',
|
||||
'DownloadManager'
|
||||
];
|
||||
|
||||
const loadedModules = await client.pupPage.evaluate(() => {
|
||||
return Object.keys(window.Store);
|
||||
});
|
||||
|
||||
expect(loadedModules).to.include.members(expectedModules);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Send Messages', function () {
|
||||
it('can send a message', async function() {
|
||||
const msg = await client.sendMessage(remoteId, 'hello world');
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.TEXT);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.body).to.equal('hello world');
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
});
|
||||
|
||||
it('can send a media message', async function() {
|
||||
const media = new MessageMedia(
|
||||
'image/png',
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAV4AAACWBAMAAABkyf1EAAAAG1BMVEXMzMyWlpacnJyqqqrFxcWxsbGjo6O3t7e+vr6He3KoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEcElEQVR4nO2aTW/bRhCGh18ij1zKknMkbbf2UXITIEeyMhIfRaF1exQLA/JRclslRykO+rs7s7s0VwytNmhJtsA8gHZEcox9PTs7uysQgGEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmGYr2OWRK/ReIKI8Zt7Hb19wTcQ0uTkGh13bQupcw7gPOvdo12/5CzNtNR7xLUtNtT3CGBQ6g3InjY720pvofUec22LJPr8PhEp2OMPyI40PdwWUdronCu9yQpdPx53bQlfLKnfOVhlnDYRBXve4Ov+IZTeMgdedm0NR+xoXJeQvdJ3CvziykSukwil16W/Oe7aGjIjqc/9ib4jQlJy0uArtN4A0+cvXFvDkmUJ47sJ1Y1ATLDNVXZkNPIepQzxy1ki9fqiwbUj/I+64zxWNzyZnPuhvohJ9K70VvXBixpcu2SAHU+Xd9EKdEJDNpYP3AQr3bQSpPQ6Y6/4dl1z7ZDbArsszjA7L0g7ibB0CDcidUWVoErvIMKZh2Xs0LUzcLW6V5NfiUgNEbaYmAVL6bXl0nJRc+1S72ua/D/cTjGPlQj7eUqd7A096rYlRjdPYlhz7VIvxpVG3cemDKF+WAwLY/6XelOZKTXXzsC4xvDjjtSN6kHLhLke6PrwM8h1raf40qjrGO7H9aTEbduucjS04ZrYU/4iuS5Z2Hdt0rvCLFdmLEXcU30AGddST62o+sLcf5l6k7CP+ru4pLYqX/VFyxbm/utQbx/r22ZEbTb2f5I2kns1Y1OQR8ZyofX+TjJxj1Rz7QQVnf1QzR26Oth0ueJVYcRP6ZUPac/Rx/5M6ixO1dhSrT3Y1DpiYmx3tF4ZUdpz9LD/dSg9PXES0LB71BwcGjKROuV28lnvnv7HHJsezheBGH5+X2CfSfRbMKW+5aGs3JFjMrjGibJc0S7TJzqjHrh2hDybj9XRXNZa89Aro55XBdbW5wti2c/5WJ7jJ1RolVUn/HWpb0I58Tziup6Rx7Dm2hnbRP1GM9PW/NFmQ4PtVRVN63Wvxfmu5sowDMMwDMMwDMMwDMMwDMMwDMMwzL+CpT//F/6beoV8zb2Jmt4Qryx6lTUCsENQ75HOkhXAO3EPVgyQtKtUy3C/e+FJg17Zjnew1Xrdb9InbG4WqfUAftG+WhLwPVyfg536+MU7m4C1CMk4ZznpXZzDYI1PDL2nS1hpvc5cNd7E2sJg05Fe7/7d3Fln8Cvc3bwB616auxsKl4WPghjemHrDqyDWeu1UNW5s2btPnSQ75oOdunEwWazfwgVG0kqluYCM9OIjWOGnfA2b9G4Ha63XKpvQ8perTvTifJNhi6+WMWmi7smEZf6G8MmhlyGq+NqP8GV84TLuJr7UIQVx+bDEoEpRZIz42gs40OuN4Mv8hXzelV7KX1isH+ewTWckikyVv+CfHuqVF7I16gN0VKypX6wPsE+zFPzkinolU9UH8OMGvSpnZqKsv13p/RsMun6X5x/y2LeAr8O66lsBwzBMP/wJfyGq8pgBk6IAAAAASUVORK5CYII='
|
||||
);
|
||||
|
||||
const msg = await client.sendMessage(remoteId, media, {caption: 'here\'s my media'});
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.IMAGE);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.hasMedia).to.equal(true);
|
||||
expect(msg.body).to.equal('here\'s my media');
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
});
|
||||
|
||||
it('can send a media message as a document', async function() {
|
||||
const media = new MessageMedia(
|
||||
'image/png',
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAV4AAACWBAMAAABkyf1EAAAAG1BMVEXMzMyWlpacnJyqqqrFxcWxsbGjo6O3t7e+vr6He3KoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEcElEQVR4nO2aTW/bRhCGh18ij1zKknMkbbf2UXITIEeyMhIfRaF1exQLA/JRclslRykO+rs7s7s0VwytNmhJtsA8gHZEcox9PTs7uysQgGEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmGYr2OWRK/ReIKI8Zt7Hb19wTcQ0uTkGh13bQupcw7gPOvdo12/5CzNtNR7xLUtNtT3CGBQ6g3InjY720pvofUec22LJPr8PhEp2OMPyI40PdwWUdronCu9yQpdPx53bQlfLKnfOVhlnDYRBXve4Ov+IZTeMgdedm0NR+xoXJeQvdJ3CvziykSukwil16W/Oe7aGjIjqc/9ib4jQlJy0uArtN4A0+cvXFvDkmUJ47sJ1Y1ATLDNVXZkNPIepQzxy1ki9fqiwbUj/I+64zxWNzyZnPuhvohJ9K70VvXBixpcu2SAHU+Xd9EKdEJDNpYP3AQr3bQSpPQ6Y6/4dl1z7ZDbArsszjA7L0g7ibB0CDcidUWVoErvIMKZh2Xs0LUzcLW6V5NfiUgNEbaYmAVL6bXl0nJRc+1S72ua/D/cTjGPlQj7eUqd7A096rYlRjdPYlhz7VIvxpVG3cemDKF+WAwLY/6XelOZKTXXzsC4xvDjjtSN6kHLhLke6PrwM8h1raf40qjrGO7H9aTEbduucjS04ZrYU/4iuS5Z2Hdt0rvCLFdmLEXcU30AGddST62o+sLcf5l6k7CP+ru4pLYqX/VFyxbm/utQbx/r22ZEbTb2f5I2kns1Y1OQR8ZyofX+TjJxj1Rz7QQVnf1QzR26Oth0ueJVYcRP6ZUPac/Rx/5M6ixO1dhSrT3Y1DpiYmx3tF4ZUdpz9LD/dSg9PXES0LB71BwcGjKROuV28lnvnv7HHJsezheBGH5+X2CfSfRbMKW+5aGs3JFjMrjGibJc0S7TJzqjHrh2hDybj9XRXNZa89Aro55XBdbW5wti2c/5WJ7jJ1RolVUn/HWpb0I58Tziup6Rx7Dm2hnbRP1GM9PW/NFmQ4PtVRVN63Wvxfmu5sowDMMwDMMwDMMwDMMwDMMwDMMwzL+CpT//F/6beoV8zb2Jmt4Qryx6lTUCsENQ75HOkhXAO3EPVgyQtKtUy3C/e+FJg17Zjnew1Xrdb9InbG4WqfUAftG+WhLwPVyfg536+MU7m4C1CMk4ZznpXZzDYI1PDL2nS1hpvc5cNd7E2sJg05Fe7/7d3Fln8Cvc3bwB616auxsKl4WPghjemHrDqyDWeu1UNW5s2btPnSQ75oOdunEwWazfwgVG0kqluYCM9OIjWOGnfA2b9G4Ha63XKpvQ8perTvTifJNhi6+WMWmi7smEZf6G8MmhlyGq+NqP8GV84TLuJr7UIQVx+bDEoEpRZIz42gs40OuN4Mv8hXzelV7KX1isH+ewTWckikyVv+CfHuqVF7I16gN0VKypX6wPsE+zFPzkinolU9UH8OMGvSpnZqKsv13p/RsMun6X5x/y2LeAr8O66lsBwzBMP/wJfyGq8pgBk6IAAAAASUVORK5CYII=',
|
||||
'this is my filename.png'
|
||||
);
|
||||
|
||||
const msg = await client.sendMessage(remoteId, media, { sendMediaAsDocument: true});
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.DOCUMENT);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.hasMedia).to.equal(true);
|
||||
expect(msg.body).to.equal('this is my filename.png');
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
});
|
||||
|
||||
it('can send a sticker message', async function() {
|
||||
const media = new MessageMedia(
|
||||
'image/png',
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAV4AAACWBAMAAABkyf1EAAAAG1BMVEXMzMyWlpacnJyqqqrFxcWxsbGjo6O3t7e+vr6He3KoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEcElEQVR4nO2aTW/bRhCGh18ij1zKknMkbbf2UXITIEeyMhIfRaF1exQLA/JRclslRykO+rs7s7s0VwytNmhJtsA8gHZEcox9PTs7uysQgGEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmGYr2OWRK/ReIKI8Zt7Hb19wTcQ0uTkGh13bQupcw7gPOvdo12/5CzNtNR7xLUtNtT3CGBQ6g3InjY720pvofUec22LJPr8PhEp2OMPyI40PdwWUdronCu9yQpdPx53bQlfLKnfOVhlnDYRBXve4Ov+IZTeMgdedm0NR+xoXJeQvdJ3CvziykSukwil16W/Oe7aGjIjqc/9ib4jQlJy0uArtN4A0+cvXFvDkmUJ47sJ1Y1ATLDNVXZkNPIepQzxy1ki9fqiwbUj/I+64zxWNzyZnPuhvohJ9K70VvXBixpcu2SAHU+Xd9EKdEJDNpYP3AQr3bQSpPQ6Y6/4dl1z7ZDbArsszjA7L0g7ibB0CDcidUWVoErvIMKZh2Xs0LUzcLW6V5NfiUgNEbaYmAVL6bXl0nJRc+1S72ua/D/cTjGPlQj7eUqd7A096rYlRjdPYlhz7VIvxpVG3cemDKF+WAwLY/6XelOZKTXXzsC4xvDjjtSN6kHLhLke6PrwM8h1raf40qjrGO7H9aTEbduucjS04ZrYU/4iuS5Z2Hdt0rvCLFdmLEXcU30AGddST62o+sLcf5l6k7CP+ru4pLYqX/VFyxbm/utQbx/r22ZEbTb2f5I2kns1Y1OQR8ZyofX+TjJxj1Rz7QQVnf1QzR26Oth0ueJVYcRP6ZUPac/Rx/5M6ixO1dhSrT3Y1DpiYmx3tF4ZUdpz9LD/dSg9PXES0LB71BwcGjKROuV28lnvnv7HHJsezheBGH5+X2CfSfRbMKW+5aGs3JFjMrjGibJc0S7TJzqjHrh2hDybj9XRXNZa89Aro55XBdbW5wti2c/5WJ7jJ1RolVUn/HWpb0I58Tziup6Rx7Dm2hnbRP1GM9PW/NFmQ4PtVRVN63Wvxfmu5sowDMMwDMMwDMMwDMMwDMMwDMMwzL+CpT//F/6beoV8zb2Jmt4Qryx6lTUCsENQ75HOkhXAO3EPVgyQtKtUy3C/e+FJg17Zjnew1Xrdb9InbG4WqfUAftG+WhLwPVyfg536+MU7m4C1CMk4ZznpXZzDYI1PDL2nS1hpvc5cNd7E2sJg05Fe7/7d3Fln8Cvc3bwB616auxsKl4WPghjemHrDqyDWeu1UNW5s2btPnSQ75oOdunEwWazfwgVG0kqluYCM9OIjWOGnfA2b9G4Ha63XKpvQ8perTvTifJNhi6+WMWmi7smEZf6G8MmhlyGq+NqP8GV84TLuJr7UIQVx+bDEoEpRZIz42gs40OuN4Mv8hXzelV7KX1isH+ewTWckikyVv+CfHuqVF7I16gN0VKypX6wPsE+zFPzkinolU9UH8OMGvSpnZqKsv13p/RsMun6X5x/y2LeAr8O66lsBwzBMP/wJfyGq8pgBk6IAAAAASUVORK5CYII='
|
||||
);
|
||||
|
||||
const msg = await client.sendMessage(remoteId, media, {sendMediaAsSticker: true});
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.STICKER);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.hasMedia).to.equal(true);
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
});
|
||||
|
||||
it('can send a sticker message with custom author and name', async function() {
|
||||
const media = new MessageMedia(
|
||||
'image/png',
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAV4AAACWBAMAAABkyf1EAAAAG1BMVEXMzMyWlpacnJyqqqrFxcWxsbGjo6O3t7e+vr6He3KoAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEcElEQVR4nO2aTW/bRhCGh18ij1zKknMkbbf2UXITIEeyMhIfRaF1exQLA/JRclslRykO+rs7s7s0VwytNmhJtsA8gHZEcox9PTs7uysQgGEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmEYhmGYr2OWRK/ReIKI8Zt7Hb19wTcQ0uTkGh13bQupcw7gPOvdo12/5CzNtNR7xLUtNtT3CGBQ6g3InjY720pvofUec22LJPr8PhEp2OMPyI40PdwWUdronCu9yQpdPx53bQlfLKnfOVhlnDYRBXve4Ov+IZTeMgdedm0NR+xoXJeQvdJ3CvziykSukwil16W/Oe7aGjIjqc/9ib4jQlJy0uArtN4A0+cvXFvDkmUJ47sJ1Y1ATLDNVXZkNPIepQzxy1ki9fqiwbUj/I+64zxWNzyZnPuhvohJ9K70VvXBixpcu2SAHU+Xd9EKdEJDNpYP3AQr3bQSpPQ6Y6/4dl1z7ZDbArsszjA7L0g7ibB0CDcidUWVoErvIMKZh2Xs0LUzcLW6V5NfiUgNEbaYmAVL6bXl0nJRc+1S72ua/D/cTjGPlQj7eUqd7A096rYlRjdPYlhz7VIvxpVG3cemDKF+WAwLY/6XelOZKTXXzsC4xvDjjtSN6kHLhLke6PrwM8h1raf40qjrGO7H9aTEbduucjS04ZrYU/4iuS5Z2Hdt0rvCLFdmLEXcU30AGddST62o+sLcf5l6k7CP+ru4pLYqX/VFyxbm/utQbx/r22ZEbTb2f5I2kns1Y1OQR8ZyofX+TjJxj1Rz7QQVnf1QzR26Oth0ueJVYcRP6ZUPac/Rx/5M6ixO1dhSrT3Y1DpiYmx3tF4ZUdpz9LD/dSg9PXES0LB71BwcGjKROuV28lnvnv7HHJsezheBGH5+X2CfSfRbMKW+5aGs3JFjMrjGibJc0S7TJzqjHrh2hDybj9XRXNZa89Aro55XBdbW5wti2c/5WJ7jJ1RolVUn/HWpb0I58Tziup6Rx7Dm2hnbRP1GM9PW/NFmQ4PtVRVN63Wvxfmu5sowDMMwDMMwDMMwDMMwDMMwDMMwzL+CpT//F/6beoV8zb2Jmt4Qryx6lTUCsENQ75HOkhXAO3EPVgyQtKtUy3C/e+FJg17Zjnew1Xrdb9InbG4WqfUAftG+WhLwPVyfg536+MU7m4C1CMk4ZznpXZzDYI1PDL2nS1hpvc5cNd7E2sJg05Fe7/7d3Fln8Cvc3bwB616auxsKl4WPghjemHrDqyDWeu1UNW5s2btPnSQ75oOdunEwWazfwgVG0kqluYCM9OIjWOGnfA2b9G4Ha63XKpvQ8perTvTifJNhi6+WMWmi7smEZf6G8MmhlyGq+NqP8GV84TLuJr7UIQVx+bDEoEpRZIz42gs40OuN4Mv8hXzelV7KX1isH+ewTWckikyVv+CfHuqVF7I16gN0VKypX6wPsE+zFPzkinolU9UH8OMGvSpnZqKsv13p/RsMun6X5x/y2LeAr8O66lsBwzBMP/wJfyGq8pgBk6IAAAAASUVORK5CYII='
|
||||
);
|
||||
|
||||
const msg = await client.sendMessage(remoteId, media, {
|
||||
sendMediaAsSticker: true,
|
||||
stickerAuthor: 'WWEBJS',
|
||||
stickerName: 'My Sticker'
|
||||
});
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.STICKER);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.hasMedia).to.equal(true);
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
});
|
||||
|
||||
it('can send a location message', async function() {
|
||||
const location = new Location(37.422, -122.084, 'Googleplex\nGoogle Headquarters');
|
||||
|
||||
const msg = await client.sendMessage(remoteId, location);
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.LOCATION);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
|
||||
expect(msg.location).to.be.instanceOf(Location);
|
||||
expect(msg.location.latitude).to.equal(37.422);
|
||||
expect(msg.location.longitude).to.equal(-122.084);
|
||||
expect(msg.location.description).to.equal('Googleplex\nGoogle Headquarters');
|
||||
});
|
||||
|
||||
it('can send a vCard as a contact card message', async function() {
|
||||
const vCard = `BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN;CHARSET=UTF-8:John Doe
|
||||
N;CHARSET=UTF-8:Doe;John;;;
|
||||
EMAIL;CHARSET=UTF-8;type=HOME,INTERNET:john@doe.com
|
||||
TEL;TYPE=HOME,VOICE:1234567890
|
||||
REV:2021-06-06T02:35:53.559Z
|
||||
END:VCARD`;
|
||||
|
||||
const msg = await client.sendMessage(remoteId, vCard);
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.CONTACT_CARD);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
expect(msg.body).to.equal(vCard);
|
||||
expect(msg.vCards).to.have.lengthOf(1);
|
||||
expect(msg.vCards[0]).to.equal(vCard);
|
||||
});
|
||||
|
||||
it('can optionally turn off vCard parsing', async function() {
|
||||
const vCard = `BEGIN:VCARD
|
||||
VERSION:3.0
|
||||
FN;CHARSET=UTF-8:John Doe
|
||||
N;CHARSET=UTF-8:Doe;John;;;
|
||||
EMAIL;CHARSET=UTF-8;type=HOME,INTERNET:john@doe.com
|
||||
TEL;TYPE=HOME,VOICE:1234567890
|
||||
REV:2021-06-06T02:35:53.559Z
|
||||
END:VCARD`;
|
||||
|
||||
const msg = await client.sendMessage(remoteId, vCard, {parseVCards: false});
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.TEXT); // not a contact card
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
expect(msg.body).to.equal(vCard);
|
||||
});
|
||||
|
||||
it('can send a Contact as a contact card message', async function() {
|
||||
const contact = await client.getContactById(remoteId);
|
||||
|
||||
const msg = await client.sendMessage(remoteId, contact);
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.CONTACT_CARD);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
expect(msg.body).to.match(/BEGIN:VCARD/);
|
||||
expect(msg.vCards).to.have.lengthOf(1);
|
||||
expect(msg.vCards[0]).to.match(/BEGIN:VCARD/);
|
||||
});
|
||||
|
||||
it('can send multiple Contacts as a contact card message', async function () {
|
||||
const contact1 = await client.getContactById(remoteId);
|
||||
const contact2 = await client.getContactById('5511942167462@c.us'); //iFood
|
||||
|
||||
const msg = await client.sendMessage(remoteId, [contact1, contact2]);
|
||||
expect(msg).to.be.instanceOf(Message);
|
||||
expect(msg.type).to.equal(MessageTypes.CONTACT_CARD_MULTI);
|
||||
expect(msg.fromMe).to.equal(true);
|
||||
expect(msg.to).to.equal(remoteId);
|
||||
expect(msg.vCards).to.have.lengthOf(2);
|
||||
expect(msg.vCards[0]).to.match(/BEGIN:VCARD/);
|
||||
expect(msg.vCards[1]).to.match(/BEGIN:VCARD/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Get Chats', function () {
|
||||
it('can get a chat by its ID', async function () {
|
||||
const chat = await client.getChatById(remoteId);
|
||||
expect(chat).to.be.instanceOf(Chat);
|
||||
expect(chat.id._serialized).to.eql(remoteId);
|
||||
expect(chat.isGroup).to.eql(false);
|
||||
});
|
||||
|
||||
it('can get all chats', async function () {
|
||||
const chats = await client.getChats();
|
||||
expect(chats.length).to.be.greaterThanOrEqual(1);
|
||||
|
||||
const chat = chats.find(c => c.id._serialized === remoteId);
|
||||
expect(chat).to.exist;
|
||||
expect(chat).to.be.instanceOf(Chat);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Get Contacts', function () {
|
||||
it('can get a contact by its ID', async function () {
|
||||
const contact = await client.getContactById(remoteId);
|
||||
expect(contact).to.be.instanceOf(Contact);
|
||||
expect(contact.id._serialized).to.eql(remoteId);
|
||||
expect(contact.number).to.eql(remoteId.split('@')[0]);
|
||||
});
|
||||
|
||||
it('can get all contacts', async function () {
|
||||
const contacts = await client.getContacts();
|
||||
expect(contacts.length).to.be.greaterThanOrEqual(1);
|
||||
|
||||
const contact = contacts.find(c => c.id._serialized === remoteId);
|
||||
expect(contact).to.exist;
|
||||
expect(contact).to.be.instanceOf(Contact);
|
||||
});
|
||||
|
||||
it('can block a contact', async function () {
|
||||
const contact = await client.getContactById(remoteId);
|
||||
await contact.block();
|
||||
|
||||
const refreshedContact = await client.getContactById(remoteId);
|
||||
expect(refreshedContact.isBlocked).to.eql(true);
|
||||
});
|
||||
|
||||
it('can get a list of blocked contacts', async function () {
|
||||
const blockedContacts = await client.getBlockedContacts();
|
||||
expect(blockedContacts.length).to.be.greaterThanOrEqual(1);
|
||||
|
||||
const contact = blockedContacts.find(c => c.id._serialized === remoteId);
|
||||
expect(contact).to.exist;
|
||||
expect(contact).to.be.instanceOf(Contact);
|
||||
|
||||
});
|
||||
|
||||
it('can unblock a contact', async function () {
|
||||
const contact = await client.getContactById(remoteId);
|
||||
await contact.unblock();
|
||||
|
||||
const refreshedContact = await client.getContactById(remoteId);
|
||||
expect(refreshedContact.isBlocked).to.eql(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Numbers and Users', function () {
|
||||
it('can verify that a user is registered', async function () {
|
||||
const isRegistered = await client.isRegisteredUser(remoteId);
|
||||
expect(isRegistered).to.be.true;
|
||||
});
|
||||
|
||||
it('can verify that a user is not registered', async function () {
|
||||
const isRegistered = await client.isRegisteredUser('9999999999@c.us');
|
||||
expect(isRegistered).to.be.false;
|
||||
});
|
||||
|
||||
it('can get a number\'s whatsapp id', async function () {
|
||||
const number = remoteId.split('@')[0];
|
||||
const numberId = await client.getNumberId(number);
|
||||
expect(numberId).to.eql({
|
||||
server: 'c.us',
|
||||
user: number,
|
||||
_serialized: `${number}@c.us`
|
||||
});
|
||||
});
|
||||
|
||||
it('returns null when getting an unregistered number\'s whatsapp id', async function () {
|
||||
const number = '9999999999';
|
||||
const numberId = await client.getNumberId(number);
|
||||
expect(numberId).to.eql(null);
|
||||
});
|
||||
|
||||
it('can get a number\'s country code', async function () {
|
||||
const number = '18092201111';
|
||||
const countryCode = await client.getCountryCode(number);
|
||||
expect(countryCode).to.eql('1');
|
||||
});
|
||||
|
||||
it('can get a formatted number', async function () {
|
||||
const number = '18092201111';
|
||||
const formatted = await client.getFormattedNumber(number);
|
||||
expect(formatted).to.eql('+1 (809) 220-1111');
|
||||
});
|
||||
|
||||
it('can get a formatted number from a serialized ID', async function () {
|
||||
const number = '18092201111@c.us';
|
||||
const formatted = await client.getFormattedNumber(number);
|
||||
expect(formatted).to.eql('+1 (809) 220-1111');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
40
tests/helper.js
Normal file
40
tests/helper.js
Normal file
@@ -0,0 +1,40 @@
|
||||
const path = require('path');
|
||||
const Client = require('../src/Client');
|
||||
const Util = require('../src/util/Util');
|
||||
|
||||
require('dotenv').config();
|
||||
|
||||
const remoteId = process.env.WWEBJS_TEST_REMOTE_ID;
|
||||
if(!remoteId) throw new Error('The WWEBJS_TEST_REMOTE_ID environment variable has not been set.');
|
||||
|
||||
function getSessionFromEnv() {
|
||||
const envSession = process.env.WWEBJS_TEST_SESSION;
|
||||
if(envSession) return JSON.parse(envSession);
|
||||
|
||||
const envSessionPath = process.env.WWEBJS_TEST_SESSION_PATH;
|
||||
if(envSessionPath) {
|
||||
const absPath = path.resolve(process.cwd(), envSessionPath);
|
||||
return require(absPath);
|
||||
}
|
||||
|
||||
throw new Error('No session found in environment.');
|
||||
}
|
||||
|
||||
function createClient({withSession, options: additionalOpts}={}) {
|
||||
const options = {};
|
||||
if(withSession) {
|
||||
options.session = getSessionFromEnv();
|
||||
}
|
||||
|
||||
return new Client(Util.mergeDefault(options, additionalOpts || {}));
|
||||
}
|
||||
|
||||
function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
sleep,
|
||||
createClient,
|
||||
remoteId
|
||||
};
|
||||
1
tools/version-checker/.version
Normal file
1
tools/version-checker/.version
Normal file
@@ -0,0 +1 @@
|
||||
2.2142.12
|
||||
46
tools/version-checker/update-version
Executable file
46
tools/version-checker/update-version
Executable file
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs');
|
||||
const fetch = require('node-fetch');
|
||||
|
||||
const getLatestVersion = async (currentVersion) => {
|
||||
const res = await fetch(`https://web.whatsapp.com/check-update?version=${currentVersion}&platform=web`);
|
||||
const data = await res.json();
|
||||
return data.currentVersion;
|
||||
};
|
||||
|
||||
const getCurrentVersion = () => {
|
||||
try {
|
||||
const versionFile = fs.readFileSync('./.version');
|
||||
return versionFile ? versionFile.toString().trim() : null;
|
||||
} catch(_) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
const updateVersion = async (oldVersion, newVersion) => {
|
||||
const readmePath = '../../README.md';
|
||||
|
||||
const readme = fs.readFileSync(readmePath);
|
||||
const newReadme = readme.toString().replaceAll(oldVersion, newVersion);
|
||||
|
||||
fs.writeFileSync(readmePath, newReadme);
|
||||
fs.writeFileSync('./.version', newVersion);
|
||||
|
||||
};
|
||||
|
||||
(async () => {
|
||||
const currentVersion = getCurrentVersion();
|
||||
const version = await getLatestVersion(currentVersion);
|
||||
|
||||
console.log(`Current version: ${currentVersion}`);
|
||||
console.log(`Latest version: ${version}`);
|
||||
|
||||
if(currentVersion !== version) {
|
||||
console.log('Updating files...');
|
||||
await updateVersion(currentVersion, version);
|
||||
console.log('Updated!');
|
||||
} else {
|
||||
console.log('No changes.');
|
||||
}
|
||||
})();
|
||||
Reference in New Issue
Block a user