chore(v1.34.7): bump version and generate docs

This commit is contained in:
WWebJS Bot 2026-04-24 20:10:36 +00:00
commit f935b50011
77 changed files with 5207 additions and 2669 deletions

6
docs/Base.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Base</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: BaseAuthStrategy</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: BaseAuthStrategy</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Broadcast.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Broadcast</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: Broadcast</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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -152,7 +152,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: BusinessContact</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -338,7 +338,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Buttons.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Buttons</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -234,7 +234,7 @@ Returns: [{ buttonId:&#x27;customId&#x27;,buttonText:{&#x27;displayText&#x27;:&#
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Call.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Call</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -168,7 +168,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Channel.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Channel</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: Channel</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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -900,7 +900,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

22
docs/Chat.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Chat</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -48,13 +48,16 @@
<dt><a href="Chat.html#isGroup">isGroup</a></dt>
<dd>
</dd>
<dt><a href="Chat.html#isMuted">isMuted</a></dt>
<dt><a href="Chat.html#isLocked">isLocked</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="Chat.html#isMuted">isMuted</a></dt>
<dd>
</dd>
<dt><a href="Chat.html#isReadOnly">isReadOnly</a></dt>
<dd>
</dd>
@ -64,13 +67,13 @@
<dt><a href="Chat.html#muteExpiration">muteExpiration</a></dt>
<dd>
</dd>
<dt><a href="Chat.html#name">name</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="Chat.html#name">name</a></dt>
<dd>
</dd>
<dt><a href="Chat.html#pinned">pinned</a></dt>
<dd>
</dd>
@ -193,6 +196,11 @@
<p>Indicates if the Chat is a Group Chat</p>
<dl class="dl-compact">
</dl>
<h3 id="isLocked"><span class="symbol-name">isLocked</span><small class="property-type">
&nbsp;boolean</small></h3>
<p>Indicates if the Chat is locked</p>
<dl class="dl-compact">
</dl>
<h3 id="isMuted"><span class="symbol-name">isMuted</span><small class="property-type">
&nbsp;boolean</small></h3>
<p>Indicates if the chat is muted or not</p>
@ -636,7 +644,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

243
docs/Client.html generated
View file

@ -3,7 +3,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Client</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -13,7 +13,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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -23,7 +23,7 @@
<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">Client</span></h1> <p class="source-link">Source: <a href="Client.js.html#source-line-66">Client.<wbr>js:66</a></p>
<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-82">Client.<wbr>js:82</a></p>
<div class="symbol-classdesc">
<p>Starting point for interacting with the WhatsApp Web API</p>
</div>
@ -107,6 +107,9 @@
<dt><a href="Client.html#attachEventListeners">attachEventListeners()</a></dt>
<dd>
</dd>
<dt><a href="Client.html#cancelPairingCode">cancelPairingCode()</a></dt>
<dd>
</dd>
<dt><a href="Client.html#createCallLink">createCallLink(startTime, callType)</a></dt>
<dd>
</dd>
@ -247,14 +250,14 @@
<dt><a href="Client.html#requestPairingCode">requestPairingCode(phoneNumber[, showNotification][, intervalMs])</a></dt>
<dd>
</dd>
<dt><a href="Client.html#resetState">resetState()</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="Client.html#resetState">resetState()</a></dt>
<dd>
</dd>
<dt><a href="Client.html#revokeChannelAdminInvite">revokeChannelAdminInvite(channelId, userId)</a></dt>
<dd>
</dd>
@ -282,6 +285,9 @@
<dt><a href="Client.html#sendPresenceUnavailable">sendPresenceUnavailable()</a></dt>
<dd>
</dd>
<dt><a href="Client.html#sendReaction">sendReaction(messageId, reaction)</a></dt>
<dd>
</dd>
<dt><a href="Client.html#sendResponseToScheduledEvent">sendResponseToScheduledEvent(response, eventMessageId)</a></dt>
<dd>
</dd>
@ -374,14 +380,14 @@
<dt><a href="Client.html#event:disconnected">disconnected</a></dt>
<dd>
</dd>
<dt><a href="Client.html#event:group_admin_changed">group_admin_changed</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="Client.html#event:group_admin_changed">group_admin_changed</a></dt>
<dd>
</dd>
<dt><a href="Client.html#event:group_join">group_join</a></dt>
<dd>
</dd>
@ -406,14 +412,17 @@
<dt><a href="Client.html#event:message_ack">message_ack</a></dt>
<dd>
</dd>
<dt><a href="Client.html#event:message_ciphertext">message_ciphertext</a></dt>
<dd>
</dd>
<dt><a href="Client.html#event:message_ciphertext_failed">message_ciphertext_failed</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="Client.html#event:message_ciphertext">message_ciphertext</a></dt>
<dd>
</dd>
<dt><a href="Client.html#event:message_create">message_create</a></dt>
<dd>
</dd>
@ -497,7 +506,7 @@
<p>&nbsp;</p>
</td>
<td>
<p>Determines how to save and restore sessions. Will use LegacySessionAuth if options.session is set. Otherwise, NoAuth will be used.</p>
<p>Determines how to save and restore sessions. If not set, NoAuth will be used.</p>
</td>
</tr>
@ -593,36 +602,6 @@
<tr>
<td>
<p>restartOnAuthFail</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>@deprecated This option should be set directly on the LegacySessionAuth.</p>
</td>
</tr>
<tr>
<td>
<p>session</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>@deprecated Only here for backwards-compatibility. You should move to using LocalAuth, or set the authStrategy to LegacySessionAuth explicitly.</p>
</td>
</tr>
<tr>
<td>
<p>takeoverOnConflict</p>
</td>
<td>
@ -1540,6 +1519,38 @@ Private function</p>
</dl>
<div class="symbol-detail-labels"><span class="label label-async">async</span></div><h3 id="cancelPairingCode"><span class="symbol-name">cancelPairingCode</span><span class="signature"><span class="signature-params">()</span></span></h3> <p>Cancels an active pairing code session and returns to QR code mode</p>
<dl class="dl-compact">
@ -4996,6 +5007,86 @@ the lastMessage property of a found channel will be 'null'</li>
</dl>
<div class="symbol-detail-labels"><span class="label label-async">async</span></div><h3 id="sendReaction"><span class="symbol-name">sendReaction</span><span class="signature"><span class="signature-params">(messageId, reaction)</span>&nbsp;&rarr; <span class="signature-returns"> Promise</span></span></h3> <p>Send an emoji reaction to a specific message</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>messageId</p>
</td>
<td>
<p>string</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>Id of the message to add the reaction.</p>
</td>
</tr>
<tr>
<td>
<p>reaction</p>
</td>
<td>
<p>string</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>Emoji to react with. Send an empty string to remove the reaction.</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
<dt>Returns</dt>
<dd><p><code>Promise</code> </p></dd>
@ -7526,7 +7617,69 @@ that has the membership approval mode turned on</p>
</dl>
<h3 id="event:message_ciphertext"><span class="symbol-name">message_ciphertext</span></h3> <p>Emitted when messages are edited</p>
<h3 id="event:message_ciphertext"><span class="symbol-name">message_ciphertext</span></h3> <p>Emitted when a message is received as ciphertext (not yet decrypted)</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>message</p>
</td>
<td>
<p><a href="Message.html">Message</a></p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
</dl>
<h3 id="event:message_ciphertext_failed"><span class="symbol-name">message_ciphertext_failed</span></h3> <p>Emitted when a ciphertext message failed to decrypt after recovery attempt</p>
<section>
@ -8237,7 +8390,7 @@ shows a user's current selected option(s) on the poll</p>
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

2920
docs/Client.js.html generated

File diff suppressed because it is too large Load diff

6
docs/ClientInfo.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: ClientInfo</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -242,7 +242,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Contact.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Contact</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -305,7 +305,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

22
docs/GroupChat.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: GroupChat</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -54,6 +54,9 @@
<dt><a href="GroupChat.html#isGroup">isGroup</a></dt>
<dd>
</dd>
<dt><a href="GroupChat.html#isLocked">isLocked</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
@ -73,13 +76,13 @@
<dt><a href="GroupChat.html#name">name</a></dt>
<dd>
</dd>
<dt><a href="GroupChat.html#owner">owner</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="GroupChat.html#owner">owner</a></dt>
<dd>
</dd>
<dt><a href="GroupChat.html#participants">participants</a></dt>
<dd>
</dd>
@ -272,6 +275,13 @@
<dt>Inherited from</dt>
<dd><a href="Chat.html#isGroup">Chat#isGroup</a></dd>
</dl>
<h3 id="isLocked"><span class="symbol-name">isLocked</span><small class="property-type">
&nbsp;unknown</small></h3>
<p>Indicates if the Chat is locked</p>
<dl class="dl-compact">
<dt>Inherited from</dt>
<dd><a href="Chat.html#isLocked">Chat#isLocked</a></dd>
</dl>
<h3 id="isMuted"><span class="symbol-name">isMuted</span><small class="property-type">
&nbsp;unknown</small></h3>
<p>Indicates if the chat is muted or not</p>
@ -1294,7 +1304,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: GroupNotification</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: InterfaceController</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -382,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Label.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Label</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/List.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: List</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -256,7 +256,7 @@ Returns: [{&#x27;title&#x27;:&#x27;sectionTitle&#x27;,&#x27;rows&#x27;:[{&#x27;r
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/LocalAuth.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: LocalAuth</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: LocalAuth</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -134,7 +134,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: LocalWebCache</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: LocalWebCache</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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -120,7 +120,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Location.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Location</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -173,7 +173,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Message.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Message</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -911,7 +911,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: MessageMedia</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -364,7 +364,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/NoAuth.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: NoAuth</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: NoAuth</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -51,7 +51,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Order.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Order</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -102,7 +102,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Poll.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Poll</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: Poll</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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -148,7 +148,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/PollVote.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: PollVote</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: PollVote</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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -102,7 +102,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

24
docs/PrivateChat.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: PrivateChat</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -48,13 +48,16 @@
<dt><a href="PrivateChat.html#isGroup">isGroup</a></dt>
<dd>
</dd>
<dt><a href="PrivateChat.html#isMuted">isMuted</a></dt>
<dt><a href="PrivateChat.html#isLocked">isLocked</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="PrivateChat.html#isMuted">isMuted</a></dt>
<dd>
</dd>
<dt><a href="PrivateChat.html#isReadOnly">isReadOnly</a></dt>
<dd>
</dd>
@ -64,13 +67,13 @@
<dt><a href="PrivateChat.html#muteExpiration">muteExpiration</a></dt>
<dd>
</dd>
<dt><a href="PrivateChat.html#name">name</a></dt>
<dd>
</dd>
</dl>
</div>
<div class="summary-column">
<dl class="dl-summary-callout">
<dt><a href="PrivateChat.html#name">name</a></dt>
<dd>
</dd>
<dt><a href="PrivateChat.html#pinned">pinned</a></dt>
<dd>
</dd>
@ -199,6 +202,13 @@
<dt>Inherited from</dt>
<dd><a href="Chat.html#isGroup">Chat#isGroup</a></dd>
</dl>
<h3 id="isLocked"><span class="symbol-name">isLocked</span><small class="property-type">
&nbsp;unknown</small></h3>
<p>Indicates if the Chat is locked</p>
<dl class="dl-compact">
<dt>Inherited from</dt>
<dd><a href="Chat.html#isLocked">Chat#isLocked</a></dd>
</dl>
<h3 id="isMuted"><span class="symbol-name">isMuted</span><small class="property-type">
&nbsp;unknown</small></h3>
<p>Indicates if the chat is muted or not</p>
@ -670,7 +680,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: PrivateContact</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -331,7 +331,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Product.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Product</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -127,7 +127,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Reaction.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Reaction</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: Reaction</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -144,7 +144,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/RemoteAuth.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: RemoteAuth</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: RemoteAuth</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -162,7 +162,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: RemoteWebCache</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: RemoteWebCache</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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -120,7 +120,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: ScheduledEvent</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: ScheduledEvent</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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -220,7 +220,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/Util.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: Util</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -243,7 +243,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

6
docs/WebCache.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Class: WebCache</title>
<title>whatsapp-web.js 1.34.7 &raquo; Class: WebCache</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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: authStrategies/BaseAuthStrategy.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: authStrategies/BaseAuthStrategy.js</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -39,15 +39,17 @@ class BaseAuthStrategy {
setup(client) {
this.client &#x3D; client;
}
async beforeBrowserInitialized() {}
async afterBrowserInitialized() {}
async onAuthenticationNeeded() {
return {
failed: false,
restart: false,
failureEventPayload: undefined
failureEventPayload: undefined,
};
}
async getAuthEventPayload() {}
async afterAuthReady() {}
async disconnect() {}
@ -55,7 +57,8 @@ class BaseAuthStrategy {
async logout() {}
}
module.exports &#x3D; BaseAuthStrategy;</code></pre>
module.exports &#x3D; BaseAuthStrategy;
</code></pre>
</article>
</div>
</div>
@ -65,7 +68,7 @@ module.exports &#x3D; BaseAuthStrategy;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: authStrategies/LocalAuth.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: authStrategies/LocalAuth.js</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -39,16 +39,18 @@ const BaseAuthStrategy &#x3D; require(&#x27;./BaseAuthStrategy&#x27;);
* Local directory-based authentication
* @param {object} options - options
* @param {string} options.clientId - Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance
* @param {string} options.dataPath - Change the default path for saving session files, default is: &quot;./.wwebjs_auth/&quot;
* @param {string} options.dataPath - Change the default path for saving session files, default is: &quot;./.wwebjs_auth/&quot;
* @param {number} options.rmMaxRetries - Sets the maximum number of retries for removing the session directory
*/
*/
class LocalAuth extends BaseAuthStrategy {
constructor({ clientId, dataPath, rmMaxRetries }&#x3D;{}) {
constructor({ clientId, dataPath, rmMaxRetries } &#x3D; {}) {
super();
const idRegex &#x3D; /^[-_\w]+$/i;
if(clientId &amp;amp;&amp;amp; !idRegex.test(clientId)) {
throw new Error(&#x27;Invalid clientId. Only alphanumeric characters, underscores and hyphens are allowed.&#x27;);
if (clientId &amp;amp;&amp;amp; !idRegex.test(clientId)) {
throw new Error(
&#x27;Invalid clientId. Only alphanumeric characters, underscores and hyphens are allowed.&#x27;,
);
}
this.dataPath &#x3D; path.resolve(dataPath || &#x27;./.wwebjs_auth/&#x27;);
@ -58,18 +60,25 @@ class LocalAuth extends BaseAuthStrategy {
async beforeBrowserInitialized() {
const puppeteerOpts &#x3D; this.client.options.puppeteer;
const sessionDirName &#x3D; this.clientId ? &#x60;session-${this.clientId}&#x60; : &#x27;session&#x27;;
const sessionDirName &#x3D; this.clientId
? &#x60;session-${this.clientId}&#x60;
: &#x27;session&#x27;;
const dirPath &#x3D; path.join(this.dataPath, sessionDirName);
if(puppeteerOpts.userDataDir &amp;amp;&amp;amp; puppeteerOpts.userDataDir !&#x3D;&#x3D; dirPath) {
throw new Error(&#x27;LocalAuth is not compatible with a user-supplied userDataDir.&#x27;);
if (
puppeteerOpts.userDataDir &amp;amp;&amp;amp;
puppeteerOpts.userDataDir !&#x3D;&#x3D; dirPath
) {
throw new Error(
&#x27;LocalAuth is not compatible with a user-supplied userDataDir.&#x27;,
);
}
fs.mkdirSync(dirPath, { recursive: true });
this.client.options.puppeteer &#x3D; {
...puppeteerOpts,
userDataDir: dirPath
userDataDir: dirPath,
};
this.userDataDir &#x3D; dirPath;
@ -77,13 +86,17 @@ class LocalAuth extends BaseAuthStrategy {
async logout() {
if (this.userDataDir) {
await fs.promises.rm(this.userDataDir, { recursive: true, force: true, maxRetries: this.rmMaxRetries })
await fs.promises
.rm(this.userDataDir, {
recursive: true,
force: true,
maxRetries: this.rmMaxRetries,
})
.catch((e) &#x3D;&gt; {
throw new Error(e);
});
}
}
}
module.exports &#x3D; LocalAuth;
@ -97,7 +110,7 @@ module.exports &#x3D; LocalAuth;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: authStrategies/NoAuth.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: authStrategies/NoAuth.js</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -36,11 +36,11 @@ const BaseAuthStrategy &#x3D; require(&#x27;./BaseAuthStrategy&#x27;);
/**
* No session restoring functionality
* Will need to authenticate via QR code every time
*/
class NoAuth extends BaseAuthStrategy { }
*/
class NoAuth extends BaseAuthStrategy {}
module.exports &#x3D; NoAuth;</code></pre>
module.exports &#x3D; NoAuth;
</code></pre>
</article>
</div>
</div>
@ -50,7 +50,7 @@ module.exports &#x3D; NoAuth;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: authStrategies/RemoteAuth.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: authStrategies/RemoteAuth.js</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -51,40 +51,64 @@ const BaseAuthStrategy &#x3D; require(&#x27;./BaseAuthStrategy&#x27;);
* @param {object} options - options
* @param {object} options.store - Remote database store instance
* @param {string} options.clientId - Client id to distinguish instances if you are using multiple, otherwise keep null if you are using only one instance
* @param {string} options.dataPath - Change the default path for saving session files, default is: &quot;./.wwebjs_auth/&quot;
* @param {string} options.dataPath - Change the default path for saving session files, default is: &quot;./.wwebjs_auth/&quot;
* @param {number} options.backupSyncIntervalMs - Sets the time interval for periodic session backups. Accepts values starting from 60000ms {1 minute}
* @param {number} options.rmMaxRetries - Sets the maximum number of retries for removing the session directory
*/
class RemoteAuth extends BaseAuthStrategy {
constructor({ clientId, dataPath, store, backupSyncIntervalMs, rmMaxRetries } &#x3D; {}) {
if (!fs &amp;amp;&amp;amp; !unzipper &amp;amp;&amp;amp; !archiver) throw new Error(&#x27;Optional Dependencies [fs-extra, unzipper, archiver] are required to use RemoteAuth. Make sure to run npm install correctly and remove the --no-optional flag&#x27;);
constructor({
clientId,
dataPath,
store,
backupSyncIntervalMs,
rmMaxRetries,
} &#x3D; {}) {
if (!fs &amp;amp;&amp;amp; !unzipper &amp;amp;&amp;amp; !archiver)
throw new Error(
&#x27;Optional Dependencies [fs-extra, unzipper, archiver] are required to use RemoteAuth. Make sure to run npm install correctly and remove the --no-optional flag&#x27;,
);
super();
const idRegex &#x3D; /^[-_\w]+$/i;
if (clientId &amp;amp;&amp;amp; !idRegex.test(clientId)) {
throw new Error(&#x27;Invalid clientId. Only alphanumeric characters, underscores and hyphens are allowed.&#x27;);
throw new Error(
&#x27;Invalid clientId. Only alphanumeric characters, underscores and hyphens are allowed.&#x27;,
);
}
if (!backupSyncIntervalMs || backupSyncIntervalMs &amp;lt; 60000) {
throw new Error(&#x27;Invalid backupSyncIntervalMs. Accepts values starting from 60000ms {1 minute}.&#x27;);
throw new Error(
&#x27;Invalid backupSyncIntervalMs. Accepts values starting from 60000ms {1 minute}.&#x27;,
);
}
if(!store) throw new Error(&#x27;Remote database store is required.&#x27;);
if (!store) throw new Error(&#x27;Remote database store is required.&#x27;);
this.store &#x3D; store;
this.clientId &#x3D; clientId;
this.backupSyncIntervalMs &#x3D; backupSyncIntervalMs;
this.dataPath &#x3D; path.resolve(dataPath || &#x27;./.wwebjs_auth/&#x27;);
this.tempDir &#x3D; &#x60;${this.dataPath}/wwebjs_temp_session_${this.clientId}&#x60;;
this.requiredDirs &#x3D; [&#x27;Default&#x27;, &#x27;IndexedDB&#x27;, &#x27;Local Storage&#x27;]; /* &#x3D;&gt; Required Files &amp;amp; Dirs in WWebJS to restore session */
this.requiredDirs &#x3D; [
&#x27;Default&#x27;,
&#x27;IndexedDB&#x27;,
&#x27;Local Storage&#x27;,
]; /* &#x3D;&gt; Required Files &amp;amp; Dirs in WWebJS to restore session */
this.rmMaxRetries &#x3D; rmMaxRetries ?? 4;
}
async beforeBrowserInitialized() {
const puppeteerOpts &#x3D; this.client.options.puppeteer;
const sessionDirName &#x3D; this.clientId ? &#x60;RemoteAuth-${this.clientId}&#x60; : &#x27;RemoteAuth&#x27;;
const sessionDirName &#x3D; this.clientId
? &#x60;RemoteAuth-${this.clientId}&#x60;
: &#x27;RemoteAuth&#x27;;
const dirPath &#x3D; path.join(this.dataPath, sessionDirName);
if (puppeteerOpts.userDataDir &amp;amp;&amp;amp; puppeteerOpts.userDataDir !&#x3D;&#x3D; dirPath) {
throw new Error(&#x27;RemoteAuth is not compatible with a user-supplied userDataDir.&#x27;);
if (
puppeteerOpts.userDataDir &amp;amp;&amp;amp;
puppeteerOpts.userDataDir !&#x3D;&#x3D; dirPath
) {
throw new Error(
&#x27;RemoteAuth is not compatible with a user-supplied userDataDir.&#x27;,
);
}
this.userDataDir &#x3D; dirPath;
@ -94,7 +118,7 @@ class RemoteAuth extends BaseAuthStrategy {
this.client.options.puppeteer &#x3D; {
...puppeteerOpts,
userDataDir: dirPath
userDataDir: dirPath,
};
}
@ -111,20 +135,26 @@ class RemoteAuth extends BaseAuthStrategy {
let pathExists &#x3D; await this.isValidPath(this.userDataDir);
if (pathExists) {
await fs.promises.rm(this.userDataDir, {
recursive: true,
force: true,
maxRetries: this.rmMaxRetries,
}).catch(() &#x3D;&gt; {});
await fs.promises
.rm(this.userDataDir, {
recursive: true,
force: true,
maxRetries: this.rmMaxRetries,
})
.catch(() &#x3D;&gt; {});
}
clearInterval(this.backupSync);
}
async afterAuthReady() {
const sessionExists &#x3D; await this.store.sessionExists({session: this.sessionName});
if(!sessionExists) {
await this.delay(60000); /* Initial delay sync required for session to be stable enough to recover */
await this.storeRemoteSession({emit: true});
const sessionExists &#x3D; await this.store.sessionExists({
session: this.sessionName,
});
if (!sessionExists) {
await this.delay(
60000,
); /* Initial delay sync required for session to be stable enough to recover */
await this.storeRemoteSession({ emit: true });
}
var self &#x3D; this;
this.backupSync &#x3D; setInterval(async function () {
@ -133,34 +163,57 @@ class RemoteAuth extends BaseAuthStrategy {
}
async storeRemoteSession(options) {
/* Compress &amp;amp; Store Session */
const pathExists &#x3D; await this.isValidPath(this.userDataDir);
if (pathExists) {
await this.compressSession();
await this.store.save({session: path.join(this.dataPath, this.sessionName)});
await fs.promises.unlink(path.join(this.dataPath, &#x60;${this.sessionName}.zip&#x60;));
await fs.promises.rm(&#x60;${this.tempDir}&#x60;, {
recursive: true,
force: true,
maxRetries: this.rmMaxRetries,
}).catch(() &#x3D;&gt; {});
if(options &amp;amp;&amp;amp; options.emit) this.client.emit(Events.REMOTE_SESSION_SAVED);
if (!pathExists) return;
let compressedSessionPath;
try {
compressedSessionPath &#x3D; await this.compressSession();
await this.store.save({
session: this.sessionName,
});
if (options &amp;amp;&amp;amp; options.emit)
this.client.emit(Events.REMOTE_SESSION_SAVED);
} finally {
const paths &#x3D; [
this.tempDir,
...(compressedSessionPath ? [compressedSessionPath] : []),
];
await Promise.allSettled(
paths.map((p) &#x3D;&gt;
fs.promises.rm(p, {
recursive: true,
force: true,
maxRetries: this.rmMaxRetries,
}),
),
);
}
}
async extractRemoteSession() {
const pathExists &#x3D; await this.isValidPath(this.userDataDir);
const compressedSessionPath &#x3D; path.join(this.dataPath, &#x60;${this.sessionName}.zip&#x60;);
const sessionExists &#x3D; await this.store.sessionExists({session: this.sessionName});
const compressedSessionPath &#x3D; path.join(
this.dataPath,
&#x60;${this.sessionName}.zip&#x60;,
);
const sessionExists &#x3D; await this.store.sessionExists({
session: this.sessionName,
});
if (pathExists) {
await fs.promises.rm(this.userDataDir, {
recursive: true,
force: true,
maxRetries: this.rmMaxRetries,
}).catch(() &#x3D;&gt; {});
await fs.promises
.rm(this.userDataDir, {
recursive: true,
force: true,
maxRetries: this.rmMaxRetries,
})
.catch(() &#x3D;&gt; {});
}
if (sessionExists) {
await this.store.extract({session: this.sessionName, path: compressedSessionPath});
await this.store.extract({
session: this.sessionName,
path: compressedSessionPath,
});
await this.unCompressSession(compressedSessionPath);
} else {
fs.mkdirSync(this.userDataDir, { recursive: true });
@ -168,59 +221,62 @@ class RemoteAuth extends BaseAuthStrategy {
}
async deleteRemoteSession() {
const sessionExists &#x3D; await this.store.sessionExists({session: this.sessionName});
if (sessionExists) await this.store.delete({session: this.sessionName});
const sessionExists &#x3D; await this.store.sessionExists({
session: this.sessionName,
});
if (sessionExists)
await this.store.delete({ session: this.sessionName });
}
async compressSession() {
const stageDefaultPath &#x3D; path.join(this.tempDir, &#x27;Default&#x27;);
const userDataDefaultPath &#x3D; path.join(this.userDataDir, &#x27;Default&#x27;);
await fs.emptyDir(stageDefaultPath);
await this.copyByRequiredDirs(userDataDefaultPath, stageDefaultPath);
const archive &#x3D; archiver(&#x27;zip&#x27;);
const stream &#x3D; fs.createWriteStream(path.join(this.dataPath, &#x60;${this.sessionName}.zip&#x60;));
const outPath &#x3D; path.join(this.dataPath, &#x60;${this.sessionName}.zip&#x60;);
const out &#x3D; fs.createWriteStream(outPath);
await fs.copy(this.userDataDir, this.tempDir).catch(() &#x3D;&gt; {});
await this.deleteMetadata();
return new Promise((resolve, reject) &#x3D;&gt; {
archive
.directory(this.tempDir, false)
.on(&#x27;error&#x27;, err &#x3D;&gt; reject(err))
.pipe(stream);
await new Promise((resolve, reject) &#x3D;&gt; {
out.once(&#x27;close&#x27;, resolve);
out.once(&#x27;error&#x27;, reject);
archive.once(&#x27;error&#x27;, reject);
stream.on(&#x27;close&#x27;, () &#x3D;&gt; resolve());
archive.pipe(out);
archive.directory(this.tempDir, false);
archive.finalize();
});
return outPath;
}
async unCompressSession(compressedSessionPath) {
var stream &#x3D; fs.createReadStream(compressedSessionPath);
await new Promise((resolve, reject) &#x3D;&gt; {
stream.pipe(unzipper.Extract({
path: this.userDataDir,
concurrency: 10
}))
.on(&#x27;error&#x27;, err &#x3D;&gt; reject(err))
stream
.pipe(
unzipper.Extract({
path: this.userDataDir,
concurrency: 10,
}),
)
.on(&#x27;error&#x27;, (err) &#x3D;&gt; reject(err))
.on(&#x27;finish&#x27;, () &#x3D;&gt; resolve());
});
await fs.promises.unlink(compressedSessionPath);
}
async deleteMetadata() {
const sessionDirs &#x3D; [this.tempDir, path.join(this.tempDir, &#x27;Default&#x27;)];
for (const dir of sessionDirs) {
const sessionFiles &#x3D; await fs.promises.readdir(dir);
for (const element of sessionFiles) {
if (!this.requiredDirs.includes(element)) {
const dirElement &#x3D; path.join(dir, element);
const stats &#x3D; await fs.promises.lstat(dirElement);
if (stats.isDirectory()) {
await fs.promises.rm(dirElement, {
recursive: true,
force: true,
maxRetries: this.rmMaxRetries,
}).catch(() &#x3D;&gt; {});
} else {
await fs.promises.unlink(dirElement).catch(() &#x3D;&gt; {});
}
}
async copyByRequiredDirs(from, to) {
for (const d of this.requiredDirs) {
const src &#x3D; path.join(from, d);
if (await this.isValidPath(src)) {
const dest &#x3D; path.join(to, path.basename(src));
await fs.promises.cp(src, dest, {
recursive: true,
force: true,
errorOnExist: false,
});
}
}
}
@ -235,7 +291,7 @@ class RemoteAuth extends BaseAuthStrategy {
}
async delay(ms) {
return new Promise(resolve &#x3D;&gt; setTimeout(resolve, ms));
return new Promise((resolve) &#x3D;&gt; setTimeout(resolve, ms));
}
}
@ -250,7 +306,7 @@ module.exports &#x3D; RemoteAuth;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

84
docs/global.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Globals</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -188,9 +188,6 @@
<dt><a href="global.html#TargetOptions">TargetOptions</a></dt>
<dd>
</dd>
<dt><a href="global.html#TargetOptions">TargetOptions</a></dt>
<dd>
</dd>
<dt><a href="global.html#TransferChannelOwnershipOptions">TransferChannelOwnershipOptions</a></dt>
<dd>
</dd>
@ -375,6 +372,19 @@
<td>
</td>
</tr>
<tr>
<td>
<p>MESSAGE_CIPHERTEXT_FAILED</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
</td>
</tr>
<tr>
<td>
<p>MESSAGE_CREATE</p>
@ -4163,68 +4173,6 @@
<h3 id="TargetOptions"><span class="symbol-name">TargetOptions</span><small class="property-type">
&nbsp;Object</small></h3>
<p>Target options object description</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>module</p>
</td>
<td>
<p>(string or number)</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>The name or a key of the target module to search</p>
</td>
</tr>
<tr>
<td>
<p>index</p>
</td>
<td>
<p>number</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>The index value of the target module</p>
</td>
</tr>
<tr>
<td>
<p>function</p>
</td>
<td>
<p>string</p>
</td>
<td>
<p>&nbsp;</p>
</td>
<td>
<p>The function name to get from a module</p>
</td>
</tr>
</tbody>
</table>
</section>
<dl class="dl-compact">
</dl>
<h3 id="TargetOptions"><span class="symbol-name">TargetOptions</span><small class="property-type">
&nbsp;Object</small></h3>
<p>Target options object description</p>
<section>
<h4>Properties</h4>
<table class="jsdoc-details-table">
@ -4385,7 +4333,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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

175
docs/index.html generated
View file

@ -3,7 +3,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Home</title>
<title>whatsapp-web.js 1.34.7 &raquo; Home</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">
@ -13,7 +13,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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -26,61 +26,62 @@
<div id="jsdoc-main" role="main">
<header class="page-header">
<h1>
whatsapp-web.js 1.34.6
whatsapp-web.js 1.34.7
</h1>
</header>
<article><div align="center">
<br />
<p>
<a href="https://wwebjs.dev"><img src="https://github.com/wwebjs/assets/blob/main/Collection/GitHub/wwebjs.png?raw=true" title="whatsapp-web.js" alt="WWebJS Website" width="500" /></a>
<a href="https://wwebjs.dev">
<img src="https://github.com/wwebjs/Assets/blob/main/Collection/GitHub/whatsapp-web.js.png?raw=true"
title="whatsapp-web.js" alt="WWebJS Website" />
</a>
</p>
<br />
<p>
<a href="https://www.npmjs.com/package/whatsapp-web.js"><img src="https://img.shields.io/npm/v/whatsapp-web.js.svg" alt="npm" /></a>
<a href="https://depfu.com/github/pedroslopez/whatsapp-web.js?project_id=9765"><img src="https://badges.depfu.com/badges/4a65a0de96ece65fdf39e294e0c8dcba/overview.svg" alt="Depfu" /></a>
<img src="https://img.shields.io/badge/WhatsApp_Web-2.3000.1017054665-brightgreen.svg" alt="WhatsApp_Web 2.2346.52" />
<a href="https://discord.gg/H7DqQs4"><img src="https://img.shields.io/discord/698610475432411196.svg?logo=discord" alt="Discord server" /></a>
</p>
<br />
<a href="https://www.npmjs.com/package/whatsapp-web.js"><img
src="https://img.shields.io/npm/v/whatsapp-web.js.svg" alt="npm" /></a>
<a href="https://www.npmjs.com/package/whatsapp-web.js"><img alt="NPM Downloads"
src="https://img.shields.io/npm/d18m/whatsapp-web.js" /></a>
<a href="https://github.com/wwebjs/whatsapp-web.js/graphs/contributors"><img alt="GitHub contributors"
src="https://img.shields.io/github/contributors-anon/wwebjs/whatsapp-web.js" /></a>
<a href="https://depfu.com/github/wwebjs/whatsapp-web.js?project_id=9765"><img
src="https://badges.depfu.com/badges/4a65a0de96ece65fdf39e294e0c8dcba/overview.svg" alt="Depfu" /></a>
<a href="https://discord.wwebjs.dev"><img
src="https://img.shields.io/discord/698610475432411196.svg?logo=discord" alt="Discord server" /></a>
</p>
</div>
<h2>About</h2>
<p><strong>A WhatsApp API client that operates via the WhatsApp Web browser.</strong></p>
<p>The library launches the WhatsApp Web browser app via Puppeteer, accessing its internal functions and creating a managed instance to reduce the risk of being blocked. This gives the API client nearly all WhatsApp Web features for dynamic use in a Node.js application.</p>
<blockquote>
<p>[!IMPORTANT]
<strong>It is not guaranteed you will not be blocked by using this method. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe.</strong></p>
</blockquote>
<p>whatsapp‑web.js is a powerful <a href="https://nodejs.org/en/download/">Node.js</a> library that lets you interact with WhatsApp Web, making it easy to build a dynamic WhatsApp API with nearly all features of the web client. It uses <a href="https://pptr.dev/">Puppeteer</a> to access WhatsApp Web’s internal functions and runs them in a managed browser instance to reduce the risk of being blocked.</p>
<h2>Links</h2>
<ul>
<li><a href="https://github.com/pedroslopez/whatsapp-web.js">GitHub</a></li>
<li><a href="https://github.com/wwebjs/whatsapp-web.js">GitHub</a></li>
<li><a href="https://guide.wwebjs.dev/guide">Guide</a> (<a href="https://github.com/wwebjs/wwebjs.dev/tree/main">source</a>)</li>
<li><a href="https://docs.wwebjs.dev/">Documentation</a> (<a href="https://github.com/pedroslopez/whatsapp-web.js/tree/main/docs">source</a>)</li>
<li><a href="https://discord.gg/H7DqQs4">Discord Server</a></li>
<li><a href="https://docs.wwebjs.dev/">Documentation</a> (<a href="https://github.com/wwebjs/whatsapp-web.js/tree/main/docs">source</a>)</li>
<li><a href="https://discord.wwebjs.dev">Discord Server</a></li>
<li><a href="https://npmjs.org/package/whatsapp-web.js">npm</a></li>
</ul>
<h2>Installation</h2>
<p>The module is available on <a href="https://npmjs.org/package/whatsapp-web.js">npm</a> via <code>npm i whatsapp-web.js</code>!</p>
<blockquote>
<p>[!NOTE]
<strong>Node <code>v18</code> or higher, is required.</strong><br>
See the <a href="https://guide.wwebjs.dev/guide">Guide</a> for quick upgrade instructions.</p>
</blockquote>
<p><strong>Node.js <code>v18.0.0</code> or higher, is required.</strong></p>
<pre class="prettyprint source lang-sh"><code>npm install whatsapp-web.js
yarn add whatsapp-web.js
pnpm add whatsapp-web.js
</code></pre>
<p>Having trouble installing? Take a peak at the <a href="https://guide.wwebjs.dev/guide">Guide</a> for more detailed instructions.</p>
<h2>Example usage</h2>
<pre class="prettyprint source lang-js"><code>const { Client } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const client = new Client();
client.on('qr', (qr) => {
// Generate and scan this code with your phone
console.log('QR RECEIVED', qr);
qrcode.generate(qr, { small: true });
});
client.on('ready', () => {
console.log('Client is ready!');
});
client.on('message', msg => {
client.on('message', (msg) => {
if (msg.body == '!ping') {
msg.reply('pong');
}
@ -88,8 +89,8 @@ client.on('message', msg => {
client.initialize();
</code></pre>
<p>Take a look at <a href="https://github.com/pedroslopez/whatsapp-web.js/blob/master/example.js">example.js</a> for another examples with additional use cases.<br>
For further details on saving and restoring sessions, explore the provided <a href="https://wwebjs.dev/guide/creating-your-bot/authentication.html">Authentication Strategies</a>.</p>
<p>Take a look at <a href="https://github.com/wwebjs/whatsapp-web.js/blob/main/example.js">example.js</a> for additional examples and use cases.<br>
For more details on saving and restoring sessions, check out the <a href="https://wwebjs.dev/guide/creating-your-bot/authentication.html">Authentication Strategies</a>.</p>
<h2>Supported features</h2>
<table>
<thead>
@ -137,11 +138,11 @@ For further details on saving and restoring sessions, explore the provided <a hr
</tr>
<tr>
<td>Send buttons</td>
<td>❌ <a href="https://www.youtube.com/watch?v=hv1R1rLeVVE">(DEPRECATED)</a></td>
<td>❌ <a href="https://www.youtube.com/watch?v=hv1R1rLeVVE">(DEPRECATED)</a></td>
</tr>
<tr>
<td>Send lists</td>
<td>❌ <a href="https://www.youtube.com/watch?v=hv1R1rLeVVE">(DEPRECATED)</a></td>
<td>❌ <a href="https://www.youtube.com/watch?v=hv1R1rLeVVE">(DEPRECATED)</a></td>
</tr>
<tr>
<td>Receive location</td>
@ -221,7 +222,7 @@ For further details on saving and restoring sessions, explore the provided <a hr
</tr>
<tr>
<td>Vote in polls</td>
<td>🔜</td>
<td>✅</td>
</tr>
<tr>
<td>Communities</td>
@ -230,22 +231,21 @@ For further details on saving and restoring sessions, explore the provided <a hr
</tbody>
</table>
<p>Something missing? Make an issue and let us know!</p>
<h2>Contributing</h2>
<p>Feel free to open pull requests; we welcome contributions! However, for significant changes, it's best to open an issue beforehand. Make sure to review our <a href="https://github.com/pedroslopez/whatsapp-web.js/blob/main/CODE_OF_CONDUCT.md">contribution guidelines</a> before creating a pull request. Before creating your own issue or pull request, always check to see if one already exists!</p>
<h2>Supporting the project</h2>
<p>You can support the maintainer of this project through the links below</p>
<p>You can support the maintainer of this project through the links below:</p>
<ul>
<li><a href="https://github.com/sponsors/pedroslopez">Support via GitHub Sponsors</a></li>
<li><a href="https://github.com/sponsors/wwebjs">Support via GitHub Sponsors</a></li>
<li><a href="https://www.paypal.me/psla/">Support via PayPal</a></li>
<li><a href="https://m.do.co/c/73f906a36ed4">Sign up for DigitalOcean</a> and get $200 in credit when you sign up (Referral)</li>
</ul>
<h2>Contributing</h2>
<p>Feel free to open pull requests; we welcome contributions! However, for significant changes, it's best to open an issue beforehand. Make sure to review our <a href=".github/CONTRIBUTING.md">contribution guidelines</a> before creating a pull request. Before creating your own issue or pull request, always check to see if one already exists!</p>
<h2>Disclaimer</h2>
<p>This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or any of its subsidiaries or its affiliates. The official WhatsApp website can be found at <a href="https://whatsapp.com">whatsapp.com</a>. &quot;WhatsApp&quot; as well as related names, marks, emblems and images are registered trademarks of their respective owners. Also it is not guaranteed you will not be blocked by using this method. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe.</p>
<h2>License</h2>
<p>Copyright 2019 Pedro S Lopez</p>
<p>Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);<br>
you may not use this project except in compliance with the License.<br>
You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.</p>
You may obtain a copy of the License at <a href="https:%5C/%5C/www.apache.org/licenses/LICENSE-2.0">https://www.apache.org/licenses/LICENSE-2.0</a>.</p>
<p>Unless required by applicable law or agreed to in writing, software<br>
distributed under the License is distributed on an &quot;AS IS&quot; BASIS,<br>
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br>
@ -898,6 +898,11 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Chat.html#isLocked" class="!symbol-index-name">Chat#<wbr>isLocked</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Chat.html#isMuted" class="!symbol-index-name">Chat#<wbr>isMuted</a>
</dt>
@ -938,16 +943,16 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Chat.html#pinned" class="!symbol-index-name">Chat#<wbr>pinned</a>
</dt>
<dd>
</dd>
</dl>
</div>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="Chat.html#pinned" class="!symbol-index-name">Chat#<wbr>pinned</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Chat.html#sendMessage" class="!symbol-index-name">Chat#<wbr>sendMessage(content[, options])</a>
</dt>
@ -1097,6 +1102,11 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Client.html#cancelPairingCode" class="!symbol-index-name">Client#<wbr>cancelPairingCode()</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Client.html#createCallLink" class="!symbol-index-name">Client#<wbr>createCallLink(startTime, callType)</a>
</dt>
@ -1233,7 +1243,7 @@ limitations under the License.</p></article>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Client.html#event:message_create" class="!symbol-index-name">Client#<wbr>event:message_create</a>
<a href="Client.html#event:message_ciphertext_failed" class="!symbol-index-name">Client#<wbr>event:message_ciphertext_failed</a>
</dt>
<dd>
</dd>
@ -1242,6 +1252,11 @@ limitations under the License.</p></article>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="Client.html#event:message_create" class="!symbol-index-name">Client#<wbr>event:message_create</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Client.html#event:message_edit" class="!symbol-index-name">Client#<wbr>event:message_edit</a>
</dt>
@ -1532,6 +1547,11 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Client.html#sendReaction" class="!symbol-index-name">Client#<wbr>sendReaction(messageId, reaction)</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="Client.html#sendResponseToScheduledEvent" class="!symbol-index-name">Client#<wbr>sendResponseToScheduledEvent(response, eventMessageId)</a>
</dt>
@ -1873,16 +1893,16 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
</dl>
</div>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="global.html#Events#.GROUP_LEAVE" class="!symbol-index-name">Events.<wbr>GROUP_LEAVE</a>
</dt>
<dd>
</dd>
</dl>
</div>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="global.html#Events#.GROUP_MEMBERSHIP_REQUEST" class="!symbol-index-name">Events.<wbr>GROUP_MEMBERSHIP_REQUEST</a>
</dt>
@ -1918,6 +1938,11 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="global.html#Events#.MESSAGE_CIPHERTEXT_FAILED" class="!symbol-index-name">Events.<wbr>MESSAGE_CIPHERTEXT_FAILED</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="global.html#Events#.MESSAGE_CREATE" class="!symbol-index-name">Events.<wbr>MESSAGE_CREATE</a>
</dt>
@ -1928,16 +1953,16 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
</dl>
</div>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="global.html#Events#.MESSAGE_REACTION" class="!symbol-index-name">Events.<wbr>MESSAGE_REACTION</a>
</dt>
<dd>
</dd>
</dl>
</div>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="global.html#Events#.MESSAGE_RECEIVED" class="!symbol-index-name">Events.<wbr>MESSAGE_RECEIVED</a>
</dt>
@ -2115,6 +2140,11 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="GroupChat.html#isLocked" class="!symbol-index-name">GroupChat#<wbr>isLocked</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="GroupChat.html#isMuted" class="!symbol-index-name">GroupChat#<wbr>isMuted</a>
</dt>
@ -2185,16 +2215,16 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="GroupChat.html#removeParticipants" class="!symbol-index-name">GroupChat#<wbr>removeParticipants(participantIds)</a>
</dt>
<dd>
</dd>
</dl>
</div>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="GroupChat.html#removeParticipants" class="!symbol-index-name">GroupChat#<wbr>removeParticipants(participantIds)</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="GroupChat.html#revokeInvite" class="!symbol-index-name">GroupChat#<wbr>revokeInvite()</a>
</dt>
@ -3671,6 +3701,11 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="PrivateChat.html#isLocked" class="!symbol-index-name">PrivateChat#<wbr>isLocked</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="PrivateChat.html#isMuted" class="!symbol-index-name">PrivateChat#<wbr>isMuted</a>
</dt>
@ -3711,16 +3746,16 @@ limitations under the License.</p></article>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="PrivateChat.html#pinned" class="!symbol-index-name">PrivateChat#<wbr>pinned</a>
</dt>
<dd>
</dd>
</dl>
</div>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="PrivateChat.html#pinned" class="!symbol-index-name">PrivateChat#<wbr>pinned</a>
</dt>
<dd>
</dd>
<dt class="symbol-index-name">
<a href="PrivateChat.html#sendMessage" class="!symbol-index-name">PrivateChat#<wbr>sendMessage(content[, options])</a>
</dt>
@ -4391,7 +4426,7 @@ limitations under the License.</p></article>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="window.html#.compareWwebVersions" class="!symbol-index-name">window.<wbr>compareWwebVersions(lOperand, operator, rOperand)</a>
<a href="window.WWebJS.html#.compareWwebVersions" class="!symbol-index-name">window.<wbr>WWebJS.<wbr>compareWwebVersions(lOperand, operator, rOperand)</a>
</dt>
<dd>
</dd>
@ -4401,7 +4436,7 @@ limitations under the License.</p></article>
<div class="symbol-index-column">
<dl class="symbol-index-list">
<dt class="symbol-index-name">
<a href="window.html#.injectToFunction" class="!symbol-index-name">window.<wbr>injectToFunction(target, callback)</a>
<a href="window.WWebJS.html#.injectToFunction" class="!symbol-index-name">window.<wbr>WWebJS.<wbr>injectToFunction(target, callback)</a>
</dt>
<dd>
</dd>
@ -4426,7 +4461,7 @@ limitations under the License.</p></article>
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Base.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -46,11 +46,14 @@ class Base {
_clone() {
return Object.assign(Object.create(this), this);
}
_patch(data) { return data; }
_patch(data) {
return data;
}
}
module.exports &#x3D; Base;</code></pre>
module.exports &#x3D; Base;
</code></pre>
</article>
</div>
</div>
@ -60,7 +63,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Broadcast.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: structures/Broadcast.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -74,7 +74,7 @@ class Broadcast extends Base {
* Messages statuses
* @type {Message[]}
*/
this.msgs &#x3D; data.msgs?.map(msg &#x3D;&gt; new Message(this.client, msg));
this.msgs &#x3D; data.msgs?.map((msg) &#x3D;&gt; new Message(this.client, msg));
return super._patch(data);
}
@ -94,7 +94,6 @@ class Broadcast extends Base {
getContact() {
return this.client.getContactById(this.id._serialized);
}
}
module.exports &#x3D; Broadcast;
@ -108,7 +107,7 @@ module.exports &#x3D; Broadcast;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/BusinessContact.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -46,10 +46,10 @@ class BusinessContact extends Contact {
return super._patch(data);
}
}
module.exports &#x3D; BusinessContact;</code></pre>
module.exports &#x3D; BusinessContact;
</code></pre>
</article>
</div>
</div>
@ -59,7 +59,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Buttons.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -70,7 +70,7 @@ class Buttons {
* @type {string}
*/
this.title &#x3D; title;
/**
* footer of message
* @type {string}
@ -80,7 +80,7 @@ class Buttons {
if (body instanceof MessageMedia) {
this.type &#x3D; &#x27;media&#x27;;
this.title &#x3D; &#x27;&#x27;;
}else{
} else {
this.type &#x3D; &#x27;chat&#x27;;
}
@ -89,28 +89,33 @@ class Buttons {
* @type {FormattedButtonSpec[]}
*/
this.buttons &#x3D; this._format(buttons);
if(!this.buttons.length){ throw &#x27;[BT01] No buttons&#x27;;}
if (!this.buttons.length) {
throw &#x27;[BT01] No buttons&#x27;;
}
}
/**
* Creates button array from simple array
* @param {ButtonSpec[]} buttons
* @returns {FormattedButtonSpec[]}
* @example
* @example
* Input: [{id:&#x27;customId&#x27;,body:&#x27;button1&#x27;},{body:&#x27;button2&#x27;},{body:&#x27;button3&#x27;},{body:&#x27;button4&#x27;}]
* Returns: [{ buttonId:&#x27;customId&#x27;,buttonText:{&#x27;displayText&#x27;:&#x27;button1&#x27;},type: 1 },{buttonId:&#x27;n3XKsL&#x27;,buttonText:{&#x27;displayText&#x27;:&#x27;button2&#x27;},type:1},{buttonId:&#x27;NDJk0a&#x27;,buttonText:{&#x27;displayText&#x27;:&#x27;button3&#x27;},type:1}]
*/
_format(buttons){
buttons &#x3D; buttons.slice(0,3); // phone users can only see 3 buttons, so lets limit this
_format(buttons) {
buttons &#x3D; buttons.slice(0, 3); // phone users can only see 3 buttons, so lets limit this
return buttons.map((btn) &#x3D;&gt; {
return {&#x27;buttonId&#x27;:btn.id ? String(btn.id) : Util.generateHash(6),&#x27;buttonText&#x27;:{&#x27;displayText&#x27;:btn.body},&#x27;type&#x27;:1};
return {
buttonId: btn.id ? String(btn.id) : Util.generateHash(6),
buttonText: { displayText: btn.body },
type: 1,
};
});
}
}
module.exports &#x3D; Buttons;</code></pre>
module.exports &#x3D; Buttons;
</code></pre>
</article>
</div>
</div>
@ -120,7 +125,7 @@ module.exports &#x3D; Buttons;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Call.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -90,21 +90,26 @@ class Call extends Base {
* @type {object}
*/
this.participants &#x3D; data.participants;
return super._patch(data);
}
/**
* Reject the call
*/
*/
async reject() {
return this.client.pupPage.evaluate((peerJid, id) &#x3D;&gt; {
return window.WWebJS.rejectCall(peerJid, id);
}, this.from, this.id);
return this.client.pupPage.evaluate(
(peerJid, id) &#x3D;&gt; {
return window.WWebJS.rejectCall(peerJid, id);
},
this.from,
this.id,
);
}
}
module.exports &#x3D; Call;</code></pre>
module.exports &#x3D; Call;
</code></pre>
</article>
</div>
</div>
@ -114,7 +119,7 @@ module.exports &#x3D; Call;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Channel.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: structures/Channel.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -68,11 +68,12 @@ class Channel extends Base {
*/
this.name &#x3D; data.name;
/**
/**
* The channel description
* @type {string}
*/
this.description &#x3D; data.channelMetadata.description;
this.description &#x3D;
data.channelMetadata?.description ?? data.description ?? &#x27;&#x27;;
/**
* Indicates if it is a Channel
@ -120,7 +121,9 @@ class Channel extends Base {
* Last message in the channel
* @type {Message}
*/
this.lastMessage &#x3D; data.lastMessage ? new Message(super.client, data.lastMessage) : undefined;
this.lastMessage &#x3D; data.lastMessage
? new Message(super.client, data.lastMessage)
: undefined;
return super._patch(data);
}
@ -131,58 +134,82 @@ class Channel extends Base {
* @returns {Promise&amp;lt;Array&amp;lt;{contact: Contact, role: string}&gt;&gt;} Returns an array of objects that handle the subscribed contacts and their roles in the channel
*/
async getSubscribers(limit) {
return await this.client.pupPage.evaluate(async (channelId, limit) &#x3D;&gt; {
const channel &#x3D; await window.WWebJS.getChat(channelId, { getAsModel: false });
if (!channel) return [];
!limit &amp;amp;&amp;amp; (limit &#x3D; window.Store.ChannelUtils.getMaxSubscriberNumber());
const response &#x3D; await window.Store.ChannelSubscribers.mexFetchNewsletterSubscribers(channelId, limit);
const contacts &#x3D; window.Store.ChannelSubscribers.getSubscribersInContacts(response.subscribers);
return Promise.all(contacts.map((obj) &#x3D;&gt; ({
...obj,
contact: window.WWebJS.getContactModel(obj.contact)
})));
}, this.id._serialized, limit);
return await this.client.pupPage.evaluate(
async (channelId, limit) &#x3D;&gt; {
const channel &#x3D; await window.WWebJS.getChat(channelId, {
getAsModel: false,
});
if (!channel) return [];
!limit &amp;amp;&amp;amp;
(limit &#x3D; window
.require(&#x27;WAWebNewsletterGatingUtils&#x27;)
.getMaxSubscriberNumber());
const response &#x3D; await window
.require(&#x27;WAWebMexFetchNewsletterSubscribersJob&#x27;)
.mexFetchNewsletterSubscribers(channelId, limit);
const contacts &#x3D; window
.require(&#x27;WAWebNewsletterSubscriberListAction&#x27;)
.getSubscribersInContacts(response.subscribers);
return Promise.all(
contacts.map((obj) &#x3D;&gt; ({
...obj,
contact: window.WWebJS.getContactModel(obj.contact),
})),
);
},
this.id._serialized,
limit,
);
}
/**
* Updates the channel subject
* @param {string} newSubject
* @param {string} newSubject
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the subject was properly updated. This can return false if the user does not have the necessary permissions.
*/
async setSubject(newSubject) {
const success &#x3D; await this._setChannelMetadata({ name: newSubject }, { editName: true });
const success &#x3D; await this._setChannelMetadata(
{ name: newSubject },
{ editName: true },
);
success &amp;amp;&amp;amp; (this.name &#x3D; newSubject);
return success;
}
/**
* Updates the channel description
* @param {string} newDescription
* @param {string} newDescription
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
*/
async setDescription(newDescription) {
const success &#x3D; await this._setChannelMetadata({ description: newDescription }, { editDescription: true });
const success &#x3D; await this._setChannelMetadata(
{ description: newDescription },
{ editDescription: true },
);
success &amp;amp;&amp;amp; (this.description &#x3D; newDescription);
return success;
}
/**
* Updates the channel profile picture
* @param {MessageMedia} newProfilePicture
* @param {MessageMedia} newProfilePicture
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
*/
async setProfilePicture(newProfilePicture) {
return await this._setChannelMetadata({ picture: newProfilePicture }, { editPicture: true });
return await this._setChannelMetadata(
{ picture: newProfilePicture },
{ editPicture: true },
);
}
/**
* Updates available reactions to use in the channel
*
*
* Valid values for passing to the method are:
* 0 for NONE reactions to be avaliable
* 1 for BASIC reactions to be available: 👍, ❤️, 😂, 😮, 😢, 🙏
* 2 for ALL reactions to be available
* @param {number} reactionCode
* @param {number} reactionCode
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
*/
async setReactionSetting(reactionCode) {
@ -190,11 +217,11 @@ class Channel extends Base {
const reactionMapper &#x3D; {
0: 3,
1: 1,
2: 0
2: 0,
};
const success &#x3D; await this._setChannelMetadata(
{ reactionCodesSetting: reactionMapper[reactionCode] },
{ editReactionCodesSetting: true }
{ editReactionCodesSetting: true },
);
success &amp;amp;&amp;amp; (this.channelMetadata.reactionCodesSetting &#x3D; reactionCode);
return success;
@ -212,7 +239,7 @@ class Channel extends Base {
}
return success;
}
/**
* Unmutes the channel
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
@ -260,11 +287,15 @@ class Channel extends Base {
/**
* Sends a channel admin invitation to a user, allowing them to become an admin of the channel
* @param {string} chatId The ID of a user to send the channel admin invitation to
* @param {SendChannelAdminInviteOptions} options
* @param {SendChannelAdminInviteOptions} options
* @returns {Promise&amp;lt;boolean&gt;} Returns true if an invitation was sent successfully, false otherwise
*/
async sendChannelAdminInvite(chatId, options &#x3D; {}) {
return this.client.sendChannelAdminInvite(chatId, this.id._serialized, options);
return this.client.sendChannelAdminInvite(
chatId,
this.id._serialized,
options,
);
}
/**
@ -281,7 +312,10 @@ class Channel extends Base {
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
*/
async revokeChannelAdminInvite(userId) {
return this.client.revokeChannelAdminInvite(this.id._serialized, userId);
return this.client.revokeChannelAdminInvite(
this.id._serialized,
userId,
);
}
/**
@ -307,7 +341,11 @@ class Channel extends Base {
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
*/
async transferChannelOwnership(newOwnerId, options &#x3D; {}) {
return this.client.transferChannelOwnership(this.id._serialized, newOwnerId, options);
return this.client.transferChannelOwnership(
this.id._serialized,
newOwnerId,
options,
);
}
/**
@ -318,36 +356,50 @@ class Channel extends Base {
* @returns {Promise&amp;lt;Array&amp;lt;Message&gt;&gt;}
*/
async fetchMessages(searchOptions) {
let messages &#x3D; await this.client.pupPage.evaluate(async (channelId, searchOptions) &#x3D;&gt; {
const msgFilter &#x3D; (m) &#x3D;&gt; {
if (m.isNotification || m.type &#x3D;&#x3D;&#x3D; &#x27;newsletter_notification&#x27;) {
return false; // dont include notification messages
}
if (searchOptions &amp;amp;&amp;amp; searchOptions.fromMe !&#x3D;&#x3D; undefined &amp;amp;&amp;amp; m.id.fromMe !&#x3D;&#x3D; searchOptions.fromMe) {
return false;
}
return true;
};
let messages &#x3D; await this.client.pupPage.evaluate(
async (channelId, searchOptions) &#x3D;&gt; {
const msgFilter &#x3D; (m) &#x3D;&gt; {
if (
m.isNotification ||
m.type &#x3D;&#x3D;&#x3D; &#x27;newsletter_notification&#x27;
) {
return false; // dont include notification messages
}
if (
searchOptions &amp;amp;&amp;amp;
searchOptions.fromMe !&#x3D;&#x3D; undefined &amp;amp;&amp;amp;
m.id.fromMe !&#x3D;&#x3D; searchOptions.fromMe
) {
return false;
}
return true;
};
const channel &#x3D; await window.WWebJS.getChat(channelId, { getAsModel: false });
let msgs &#x3D; channel.msgs.getModelsArray().filter(msgFilter);
const channel &#x3D; await window.WWebJS.getChat(channelId, {
getAsModel: false,
});
let msgs &#x3D; channel.msgs.getModelsArray().filter(msgFilter);
if (searchOptions &amp;amp;&amp;amp; searchOptions.limit &gt; 0) {
while (msgs.length &amp;lt; searchOptions.limit) {
const loadedMessages &#x3D; await window.Store.ConversationMsgs.loadEarlierMsgs(channel);
if (!loadedMessages || !loadedMessages.length) break;
msgs &#x3D; [...loadedMessages.filter(msgFilter), ...msgs];
if (searchOptions &amp;amp;&amp;amp; searchOptions.limit &gt; 0) {
while (msgs.length &amp;lt; searchOptions.limit) {
const loadedMessages &#x3D; await window
.require(&#x27;WAWebChatLoadMessages&#x27;)
.loadEarlierMsgs({ chat: channel });
if (!loadedMessages || !loadedMessages.length) break;
msgs &#x3D; [...loadedMessages.filter(msgFilter), ...msgs];
}
if (msgs.length &gt; searchOptions.limit) {
msgs.sort((a, b) &#x3D;&gt; (a.t &gt; b.t ? 1 : -1));
msgs &#x3D; msgs.splice(msgs.length - searchOptions.limit);
}
}
if (msgs.length &gt; searchOptions.limit) {
msgs.sort((a, b) &#x3D;&gt; (a.t &gt; b.t) ? 1 : -1);
msgs &#x3D; msgs.splice(msgs.length - searchOptions.limit);
}
}
return msgs.map(m &#x3D;&gt; window.WWebJS.getMessageModel(m));
}, this.id._serialized, searchOptions);
return msgs.map((m) &#x3D;&gt; window.WWebJS.getMessageModel(m));
},
this.id._serialized,
searchOptions,
);
return messages.map((msg) &#x3D;&gt; new Message(this.client, msg));
}
@ -367,27 +419,39 @@ class Channel extends Base {
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
*/
async _setChannelMetadata(value, property) {
return await this.client.pupPage.evaluate(async (channelId, value, property) &#x3D;&gt; {
const channel &#x3D; await window.WWebJS.getChat(channelId, { getAsModel: false });
if (!channel) return false;
if (property.editPicture) {
value.picture &#x3D; value.picture
? await window.WWebJS.cropAndResizeImage(value.picture, {
asDataUrl: true,
mimetype: &#x27;image/jpeg&#x27;,
size: 640,
quality: 1
})
: null;
}
try {
await window.Store.ChannelUtils.editNewsletterMetadataAction(channel, property, value);
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
}, this.id._serialized, value, property);
return await this.client.pupPage.evaluate(
async (channelId, value, property) &#x3D;&gt; {
const channel &#x3D; await window.WWebJS.getChat(channelId, {
getAsModel: false,
});
if (!channel) return false;
if (property.editPicture) {
value.picture &#x3D; value.picture
? await window.WWebJS.cropAndResizeImage(
value.picture,
{
asDataUrl: true,
mimetype: &#x27;image/jpeg&#x27;,
size: 640,
quality: 1,
},
)
: null;
}
try {
await window
.require(&#x27;WAWebEditNewsletterMetadataAction&#x27;)
.editNewsletterMetadataAction(channel, property, value);
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
},
this.id._serialized,
value,
property,
);
}
/**
@ -396,17 +460,35 @@ class Channel extends Base {
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
*/
async _muteUnmuteChannel(action) {
return await this.client.pupPage.evaluate(async (channelId, action) &#x3D;&gt; {
try {
action &#x3D;&#x3D;&#x3D; &#x27;MUTE&#x27;
? await window.Store.ChannelUtils.muteNewsletter([channelId])
: await window.Store.ChannelUtils.unmuteNewsletter([channelId]);
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
}, this.id._serialized, action);
return await this.client.pupPage.evaluate(
async (channelId, action) &#x3D;&gt; {
try {
await window
.require(&#x27;WAWebNewsletterUpdateUserSettingJob&#x27;)
.updateNewsletterUserSetting({
newsletterJid: window
.require(&#x27;WAJids&#x27;)
.toNewsletterJid(channelId),
type: window.require(&#x27;WAWebNewsletterModelUtils&#x27;)
.ADMIN_NOTIFICATIONS,
muteExpirationValue:
action &#x3D;&#x3D;&#x3D; &#x27;MUTE&#x27;
? window.require(
&#x27;WAWebNewsletterModelUtils&#x27;,
).MUTED_STATE
: window.require(
&#x27;WAWebNewsletterModelUtils&#x27;,
).UNMUTED_STATE,
});
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
},
this.id._serialized,
action,
);
}
}
@ -421,7 +503,7 @@ module.exports &#x3D; Channel;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Chat.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -94,6 +94,12 @@ class Chat extends Base {
*/
this.pinned &#x3D; !!data.pin;
/**
* Indicates if the Chat is locked
* @type {boolean}
*/
this.isLocked &#x3D; data.isLocked;
/**
* Indicates if the chat is muted or not
* @type {boolean}
@ -110,15 +116,17 @@ class Chat extends Base {
* Last message fo chat
* @type {Message}
*/
this.lastMessage &#x3D; data.lastMessage ? new Message(this.client, data.lastMessage) : undefined;
this.lastMessage &#x3D; data.lastMessage
? new Message(this.client, data.lastMessage)
: undefined;
return super._patch(data);
}
/**
* Send a message to this chat
* @param {string|MessageMedia|Location} content
* @param {MessageSendOptions} [options]
* @param {MessageSendOptions} [options]
* @returns {Promise&amp;lt;Message&gt;} Message that was just sent
*/
async sendMessage(content, options) {
@ -138,7 +146,7 @@ class Chat extends Base {
* @returns {Promise&amp;lt;boolean&gt;} result
*/
async clearMessages() {
return this.client.pupPage.evaluate(chatId &#x3D;&gt; {
return this.client.pupPage.evaluate((chatId) &#x3D;&gt; {
return window.WWebJS.sendClearChat(chatId);
}, this.id._serialized);
}
@ -148,7 +156,7 @@ class Chat extends Base {
* @returns {Promise&amp;lt;Boolean&gt;} result
*/
async delete() {
return this.client.pupPage.evaluate(chatId &#x3D;&gt; {
return this.client.pupPage.evaluate((chatId) &#x3D;&gt; {
return window.WWebJS.sendDeleteChat(chatId);
}, this.id._serialized);
}
@ -189,7 +197,10 @@ class Chat extends Base {
* @returns {Promise&amp;lt;{isMuted: boolean, muteExpiration: number}&gt;}
*/
async mute(unmuteDate) {
const result &#x3D; await this.client.muteChat(this.id._serialized, unmuteDate);
const result &#x3D; await this.client.muteChat(
this.id._serialized,
unmuteDate,
);
this.isMuted &#x3D; result.isMuted;
this.muteExpiration &#x3D; result.muteExpiration;
return result;
@ -209,7 +220,7 @@ class Chat extends Base {
/**
* Mark this chat as unread
*/
async markUnread(){
async markUnread() {
return this.client.markChatUnread(this.id._serialized);
}
@ -221,45 +232,56 @@ class Chat extends Base {
* @returns {Promise&amp;lt;Array&amp;lt;Message&gt;&gt;}
*/
async fetchMessages(searchOptions) {
let messages &#x3D; await this.client.pupPage.evaluate(async (chatId, searchOptions) &#x3D;&gt; {
const msgFilter &#x3D; (m) &#x3D;&gt; {
if (m.isNotification) {
return false; // dont include notification messages
let messages &#x3D; await this.client.pupPage.evaluate(
async (chatId, searchOptions) &#x3D;&gt; {
const msgFilter &#x3D; (m) &#x3D;&gt; {
if (m.isNotification) {
return false; // dont include notification messages
}
if (
searchOptions &amp;amp;&amp;amp;
searchOptions.fromMe !&#x3D;&#x3D; undefined &amp;amp;&amp;amp;
m.id.fromMe !&#x3D;&#x3D; searchOptions.fromMe
) {
return false;
}
return true;
};
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
let msgs &#x3D; chat.msgs.getModelsArray().filter(msgFilter);
if (searchOptions &amp;amp;&amp;amp; searchOptions.limit &gt; 0) {
while (msgs.length &amp;lt; searchOptions.limit) {
const loadedMessages &#x3D; await window
.require(&#x27;WAWebChatLoadMessages&#x27;)
.loadEarlierMsgs({ chat });
if (!loadedMessages || !loadedMessages.length) break;
msgs &#x3D; [...loadedMessages.filter(msgFilter), ...msgs];
}
if (msgs.length &gt; searchOptions.limit) {
msgs.sort((a, b) &#x3D;&gt; (a.t &gt; b.t ? 1 : -1));
msgs &#x3D; msgs.splice(msgs.length - searchOptions.limit);
}
}
if (searchOptions &amp;amp;&amp;amp; searchOptions.fromMe !&#x3D;&#x3D; undefined &amp;amp;&amp;amp; m.id.fromMe !&#x3D;&#x3D; searchOptions.fromMe) {
return false;
}
return true;
};
const chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
let msgs &#x3D; chat.msgs.getModelsArray().filter(msgFilter);
return msgs.map((m) &#x3D;&gt; window.WWebJS.getMessageModel(m));
},
this.id._serialized,
searchOptions,
);
if (searchOptions &amp;amp;&amp;amp; searchOptions.limit &gt; 0) {
while (msgs.length &amp;lt; searchOptions.limit) {
const loadedMessages &#x3D; await window.Store.ConversationMsgs.loadEarlierMsgs(chat,chat.msgs);
if (!loadedMessages || !loadedMessages.length) break;
msgs &#x3D; [...loadedMessages.filter(msgFilter), ...msgs];
}
if (msgs.length &gt; searchOptions.limit) {
msgs.sort((a, b) &#x3D;&gt; (a.t &gt; b.t) ? 1 : -1);
msgs &#x3D; msgs.splice(msgs.length - searchOptions.limit);
}
}
return msgs.map(m &#x3D;&gt; window.WWebJS.getMessageModel(m));
}, this.id._serialized, searchOptions);
return messages.map(m &#x3D;&gt; new Message(this.client, m));
return messages.map((m) &#x3D;&gt; new Message(this.client, m));
}
/**
* Simulate typing in chat. This will last for 25 seconds.
*/
async sendStateTyping() {
return this.client.pupPage.evaluate(chatId &#x3D;&gt; {
return this.client.pupPage.evaluate((chatId) &#x3D;&gt; {
window.WWebJS.sendChatstate(&#x27;typing&#x27;, chatId);
return true;
}, this.id._serialized);
@ -269,7 +291,7 @@ class Chat extends Base {
* Simulate recording audio in chat. This will last for 25 seconds.
*/
async sendStateRecording() {
return this.client.pupPage.evaluate(chatId &#x3D;&gt; {
return this.client.pupPage.evaluate((chatId) &#x3D;&gt; {
window.WWebJS.sendChatstate(&#x27;recording&#x27;, chatId);
return true;
}, this.id._serialized);
@ -279,7 +301,7 @@ class Chat extends Base {
* Stops typing or recording in chat immediately.
*/
async clearState() {
return this.client.pupPage.evaluate(chatId &#x3D;&gt; {
return this.client.pupPage.evaluate((chatId) &#x3D;&gt; {
window.WWebJS.sendChatstate(&#x27;stop&#x27;, chatId);
return true;
}, this.id._serialized);
@ -317,7 +339,7 @@ class Chat extends Base {
async getPinnedMessages() {
return this.client.getPinnedMessages(this.id._serialized);
}
/**
* Sync chat history conversation
* @return {Promise&amp;lt;boolean&gt;} True if operation completed successfully, false otherwise.
@ -352,7 +374,7 @@ class Chat extends Base {
*/
async getCustomerNote() {
if (this.isGroup || this.isChannel) return null;
return this.client.getCustomerNote(this.id._serialized);
}
}
@ -368,7 +390,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/ClientInfo.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -93,13 +93,14 @@ class ClientInfo extends Base {
*/
async getBatteryStatus() {
return await this.client.pupPage.evaluate(() &#x3D;&gt; {
const { battery, plugged } &#x3D; window.Store.Conn;
const { battery, plugged } &#x3D; window.require(&#x27;WAWebConnModel&#x27;).Conn;
return { battery, plugged };
});
}
}
module.exports &#x3D; ClientInfo;</code></pre>
module.exports &#x3D; ClientInfo;
</code></pre>
</article>
</div>
</div>
@ -109,7 +110,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Contact.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -49,7 +49,7 @@ class Contact extends Base {
constructor(client, data) {
super(client);
if(data) this._patch(data);
if (data) this._patch(data);
}
_patch(data) {
@ -139,7 +139,7 @@ class Contact extends Base {
* @type {boolean}
*/
this.isBlocked &#x3D; data.isBlocked;
return super._patch(data);
}
@ -158,7 +158,7 @@ class Contact extends Base {
async getFormattedNumber() {
return await this.client.getFormattedNumber(this.id._serialized);
}
/**
* Returns the contact&#x27;s countrycode, (1541859685@c.us) &#x3D;&gt; (1)
* @returns {Promise&amp;lt;string&gt;}
@ -166,14 +166,14 @@ class Contact extends Base {
async getCountryCode() {
return await this.client.getCountryCode(this.id._serialized);
}
/**
* Returns the Chat that corresponds to this Contact.
* Returns the Chat that corresponds to this Contact.
* Will return null when getting chat for currently logged in user.
* @returns {Promise&amp;lt;Chat&gt;}
*/
async getChat() {
if(this.isMe) return null;
if (this.isMe) return null;
return await this.client.getChatById(this.id._serialized);
}
@ -183,11 +183,21 @@ class Contact extends Base {
* @returns {Promise&amp;lt;boolean&gt;}
*/
async block() {
if(this.isGroup) return false;
if (this.isGroup) return false;
await this.client.pupPage.evaluate(async (contactId) &#x3D;&gt; {
const contact &#x3D; window.Store.Contact.get(contactId);
await window.Store.BlockContact.blockContact({contact});
const contact &#x3D; await window
.require(&#x27;WAWebCollections&#x27;)
.Contact.find(contactId);
const resolved &#x3D; window
.require(&#x27;WAWebBlockContactUtils&#x27;)
.getContactToBlockOnlyUseIfNoAssociatedChat(
contact,
&#x27;ChatListBlock&#x27;,
);
await window
.require(&#x27;WAWebBlockContactAction&#x27;)
.blockContact({ contact: resolved });
}, this.id._serialized);
this.isBlocked &#x3D; true;
@ -199,11 +209,21 @@ class Contact extends Base {
* @returns {Promise&amp;lt;boolean&gt;}
*/
async unblock() {
if(this.isGroup) return false;
if (this.isGroup) return false;
await this.client.pupPage.evaluate(async (contactId) &#x3D;&gt; {
const contact &#x3D; window.Store.Contact.get(contactId);
await window.Store.BlockContact.unblockContact(contact);
const contact &#x3D; await window
.require(&#x27;WAWebCollections&#x27;)
.Contact.find(contactId);
const resolved &#x3D; window
.require(&#x27;WAWebBlockContactUtils&#x27;)
.getContactToBlockOnlyUseIfNoAssociatedChat(
contact,
&#x27;ChatListBlock&#x27;,
);
await window
.require(&#x27;WAWebBlockContactAction&#x27;)
.unblockContact(resolved);
}, this.id._serialized);
this.isBlocked &#x3D; false;
@ -216,12 +236,13 @@ class Contact extends Base {
*/
async getAbout() {
const about &#x3D; await this.client.pupPage.evaluate(async (contactId) &#x3D;&gt; {
const wid &#x3D; window.Store.WidFactory.createWid(contactId);
return window.Store.StatusUtils.getStatus({&#x27;token&#x27;:&#x27;&#x27;, &#x27;wid&#x27;: wid});
const wid &#x3D; window.require(&#x27;WAWebWidFactory&#x27;).createWid(contactId);
return window
.require(&#x27;WAWebContactStatusBridge&#x27;)
.getStatus({ token: &#x27;&#x27;, wid: wid });
}, this.id._serialized);
if (typeof about.status !&#x3D;&#x3D; &#x27;string&#x27;)
return null;
if (typeof about.status !&#x3D;&#x3D; &#x27;string&#x27;) return null;
return about.status;
}
@ -237,7 +258,7 @@ class Contact extends Base {
/**
* Gets the Contact&#x27;s current status broadcast.
* @returns {Promise&amp;lt;Broadcast&gt;}
*/
*/
async getBroadcast() {
return await this.client.getBroadcastById(this.id._serialized);
}
@ -254,7 +275,7 @@ module.exports &#x3D; Contact;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/GroupChat.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -59,7 +59,7 @@ class GroupChat extends Chat {
get owner() {
return this.groupMetadata.owner;
}
/**
* Gets the date at which the group was created
* @type {date}
@ -68,7 +68,7 @@ class GroupChat extends Chat {
return new Date(this.groupMetadata.creation * 1000);
}
/**
/**
* Gets the group description
* @type {string}
*/
@ -102,264 +102,440 @@ class GroupChat extends Chat {
/**
* Adds a list of participants by ID to the group
* @param {string|Array&amp;lt;string&gt;} participantIds
* @param {string|Array&amp;lt;string&gt;} participantIds
* @param {AddParticipnatsOptions} options An object thay handles options for adding participants
* @returns {Promise&amp;lt;Object.&amp;lt;string, AddParticipantsResult&gt;|string&gt;} Returns an object with the resulting data or an error message as a string
*/
async addParticipants(participantIds, options &#x3D; {}) {
return await this.client.pupPage.evaluate(async (groupId, participantIds, options) &#x3D;&gt; {
const { sleep &#x3D; [250, 500], autoSendInviteV4 &#x3D; true, comment &#x3D; &#x27;&#x27; } &#x3D; options;
const participantData &#x3D; {};
return await this.client.pupPage.evaluate(
async (groupId, participantIds, options) &#x3D;&gt; {
const {
sleep &#x3D; [250, 500],
autoSendInviteV4 &#x3D; true,
comment &#x3D; &#x27;&#x27;,
} &#x3D; options;
const participantData &#x3D; {};
!Array.isArray(participantIds) &amp;amp;&amp;amp; (participantIds &#x3D; [participantIds]);
const groupWid &#x3D; window.Store.WidFactory.createWid(groupId);
const group &#x3D; window.Store.Chat.get(groupWid) || (await window.Store.Chat.find(groupWid));
const participantWids &#x3D; participantIds.map((p) &#x3D;&gt; window.Store.WidFactory.createWid(p));
!Array.isArray(participantIds) &amp;amp;&amp;amp;
(participantIds &#x3D; [participantIds]);
const groupWid &#x3D; window
.require(&#x27;WAWebWidFactory&#x27;)
.createWid(groupId);
const group &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Chat.get(groupWid) ||
(await window
.require(&#x27;WAWebCollections&#x27;)
.Chat.find(groupWid));
const participantWids &#x3D; participantIds.map((p) &#x3D;&gt;
window.require(&#x27;WAWebWidFactory&#x27;).createWid(p),
);
const errorCodes &#x3D; {
default: &#x27;An unknown error occupied while adding a participant&#x27;,
isGroupEmpty: &#x27;AddParticipantsError: The participant can\&#x27;t be added to an empty group&#x27;,
iAmNotAdmin: &#x27;AddParticipantsError: You have no admin rights to add a participant to a group&#x27;,
200: &#x27;The participant was added successfully&#x27;,
403: &#x27;The participant can be added by sending private invitation only&#x27;,
404: &#x27;The phone number is not registered on WhatsApp&#x27;,
408: &#x27;You cannot add this participant because they recently left the group&#x27;,
409: &#x27;The participant is already a group member&#x27;,
417: &#x27;The participant can\&#x27;t be added to the community. You can invite them privately to join this group through its invite link&#x27;,
419: &#x27;The participant can\&#x27;t be added because the group is full&#x27;
};
await window.Store.GroupQueryAndUpdate({ id: groupId });
let groupParticipants &#x3D; group.groupMetadata?.participants.serialize();
if (!groupParticipants) {
return errorCodes.isGroupEmpty;
}
if (!group.iAmAdmin()) {
return errorCodes.iAmNotAdmin;
}
groupParticipants.map(({ id }) &#x3D;&gt; {
return id.server &#x3D;&#x3D;&#x3D; &#x27;lid&#x27; ? window.Store.LidUtils.getPhoneNumber(id) : id;
});
const _getSleepTime &#x3D; (sleep) &#x3D;&gt; {
if (!Array.isArray(sleep) || sleep.length &#x3D;&#x3D;&#x3D; 2 &amp;amp;&amp;amp; sleep[0] &#x3D;&#x3D;&#x3D; sleep[1]) {
return sleep;
}
if (sleep.length &#x3D;&#x3D;&#x3D; 1) {
return sleep[0];
}
(sleep[1] - sleep[0]) &amp;lt; 100 &amp;amp;&amp;amp; (sleep[0] &#x3D; sleep[1]) &amp;amp;&amp;amp; (sleep[1] +&#x3D; 100);
return Math.floor(Math.random() * (sleep[1] - sleep[0] + 1)) + sleep[0];
};
for (let pWid of participantWids) {
const pId &#x3D; pWid._serialized;
pWid &#x3D; pWid.server &#x3D;&#x3D;&#x3D; &#x27;lid&#x27; ? window.Store.LidUtils.getPhoneNumber(pWid) : pWid;
participantData[pId] &#x3D; {
code: undefined,
message: undefined,
isInviteV4Sent: false
const errorCodes &#x3D; {
default:
&#x27;An unknown error occupied while adding a participant&#x27;,
isGroupEmpty:
&quot;AddParticipantsError: The participant can&#x27;t be added to an empty group&quot;,
iAmNotAdmin:
&#x27;AddParticipantsError: You have no admin rights to add a participant to a group&#x27;,
200: &#x27;The participant was added successfully&#x27;,
403: &#x27;The participant can be added by sending private invitation only&#x27;,
404: &#x27;The phone number is not registered on WhatsApp&#x27;,
408: &#x27;You cannot add this participant because they recently left the group&#x27;,
409: &#x27;The participant is already a group member&#x27;,
417: &quot;The participant can&#x27;t be added to the community. You can invite them privately to join this group through its invite link&quot;,
419: &quot;The participant can&#x27;t be added because the group is full&quot;,
};
if (groupParticipants.some(p &#x3D;&gt; p._serialized &#x3D;&#x3D;&#x3D; pId)) {
participantData[pId].code &#x3D; 409;
participantData[pId].message &#x3D; errorCodes[409];
continue;
await window
.require(&#x27;WAWebGroupQueryJob&#x27;)
.queryAndUpdateGroupMetadataById({ id: groupId });
let groupParticipants &#x3D;
group.groupMetadata?.participants.serialize();
if (!groupParticipants) {
return errorCodes.isGroupEmpty;
}
if (!(await window.Store.QueryExist(pWid))?.wid) {
participantData[pId].code &#x3D; 404;
participantData[pId].message &#x3D; errorCodes[404];
continue;
if (!group.iAmAdmin()) {
return errorCodes.iAmNotAdmin;
}
const rpcResult &#x3D;
await window.WWebJS.getAddParticipantsRpcResult(groupWid, pWid);
const { code: rpcResultCode } &#x3D; rpcResult;
groupParticipants.map(({ id }) &#x3D;&gt; {
return id.server &#x3D;&#x3D;&#x3D; &#x27;lid&#x27;
? window.require(&#x27;WAWebApiContact&#x27;).getPhoneNumber(id)
: id;
});
participantData[pId].code &#x3D; rpcResultCode;
participantData[pId].message &#x3D;
errorCodes[rpcResultCode] || errorCodes.default;
const _getSleepTime &#x3D; (sleep) &#x3D;&gt; {
if (
!Array.isArray(sleep) ||
(sleep.length &#x3D;&#x3D;&#x3D; 2 &amp;amp;&amp;amp; sleep[0] &#x3D;&#x3D;&#x3D; sleep[1])
) {
return sleep;
}
if (sleep.length &#x3D;&#x3D;&#x3D; 1) {
return sleep[0];
}
sleep[1] - sleep[0] &amp;lt; 100 &amp;amp;&amp;amp;
(sleep[0] &#x3D; sleep[1]) &amp;amp;&amp;amp;
(sleep[1] +&#x3D; 100);
return (
Math.floor(Math.random() * (sleep[1] - sleep[0] + 1)) +
sleep[0]
);
};
if (autoSendInviteV4 &amp;amp;&amp;amp; rpcResultCode &#x3D;&#x3D;&#x3D; 403) {
let userChat, isInviteV4Sent &#x3D; false;
window.Store.Contact.gadd(pWid, { silent: true });
for (let pWid of participantWids) {
const pId &#x3D; pWid._serialized;
pWid &#x3D;
pWid.server &#x3D;&#x3D;&#x3D; &#x27;lid&#x27;
? window
.require(&#x27;WAWebApiContact&#x27;)
.getPhoneNumber(pWid)
: pWid;
if (rpcResult.name &#x3D;&#x3D;&#x3D; &#x27;ParticipantRequestCodeCanBeSent&#x27; &amp;amp;&amp;amp;
(userChat &#x3D; window.Store.Chat.get(pWid) || (await window.Store.Chat.find(pWid)))) {
const groupName &#x3D; group.formattedTitle || group.name;
const res &#x3D; await window.Store.GroupInviteV4.sendGroupInviteMessage(
userChat,
group.id._serialized,
groupName,
rpcResult.inviteV4Code,
rpcResult.inviteV4CodeExp,
comment,
await window.WWebJS.getProfilePicThumbToBase64(groupWid)
);
isInviteV4Sent &#x3D; res.messageSendResult &#x3D;&#x3D;&#x3D; &#x27;OK&#x27;;
participantData[pId] &#x3D; {
code: undefined,
message: undefined,
isInviteV4Sent: false,
};
if (groupParticipants.some((p) &#x3D;&gt; p._serialized &#x3D;&#x3D;&#x3D; pId)) {
participantData[pId].code &#x3D; 409;
participantData[pId].message &#x3D; errorCodes[409];
continue;
}
participantData[pId].isInviteV4Sent &#x3D; isInviteV4Sent;
if (
!(
await window
.require(&#x27;WAWebQueryExistsJob&#x27;)
.queryWidExists(pWid)
)?.wid
) {
participantData[pId].code &#x3D; 404;
participantData[pId].message &#x3D; errorCodes[404];
continue;
}
const rpcResult &#x3D;
await window.WWebJS.getAddParticipantsRpcResult(
groupWid,
pWid,
);
const { code: rpcResultCode } &#x3D; rpcResult;
participantData[pId].code &#x3D; rpcResultCode;
participantData[pId].message &#x3D;
errorCodes[rpcResultCode] || errorCodes.default;
if (autoSendInviteV4 &amp;amp;&amp;amp; rpcResultCode &#x3D;&#x3D;&#x3D; 403) {
let userChat,
isInviteV4Sent &#x3D; false;
window
.require(&#x27;WAWebCollections&#x27;)
.Contact.gadd(pWid, { silent: true });
if (
rpcResult.name &#x3D;&#x3D;&#x3D;
&#x27;ParticipantRequestCodeCanBeSent&#x27; &amp;amp;&amp;amp;
(userChat &#x3D;
window
.require(&#x27;WAWebCollections&#x27;)
.Chat.get(pWid) ||
(await window
.require(&#x27;WAWebCollections&#x27;)
.Chat.find(pWid)))
) {
const groupName &#x3D;
group.formattedTitle || group.name;
const res &#x3D; await window
.require(&#x27;WAWebChatSendMessages&#x27;)
.sendGroupInviteMessage(
userChat,
group.id._serialized,
groupName,
rpcResult.inviteV4Code,
rpcResult.inviteV4CodeExp,
comment,
await window.WWebJS.getProfilePicThumbToBase64(
groupWid,
),
);
isInviteV4Sent &#x3D; res.messageSendResult &#x3D;&#x3D;&#x3D; &#x27;OK&#x27;;
}
participantData[pId].isInviteV4Sent &#x3D; isInviteV4Sent;
}
sleep &amp;amp;&amp;amp;
participantWids.length &gt; 1 &amp;amp;&amp;amp;
participantWids.indexOf(pWid) !&#x3D;&#x3D;
participantWids.length - 1 &amp;amp;&amp;amp;
(await new Promise((resolve) &#x3D;&gt;
setTimeout(resolve, _getSleepTime(sleep)),
));
}
sleep &amp;amp;&amp;amp;
participantWids.length &gt; 1 &amp;amp;&amp;amp;
participantWids.indexOf(pWid) !&#x3D;&#x3D; participantWids.length - 1 &amp;amp;&amp;amp;
(await new Promise((resolve) &#x3D;&gt; setTimeout(resolve, _getSleepTime(sleep))));
}
return participantData;
}, this.id._serialized, participantIds, options);
return participantData;
},
this.id._serialized,
participantIds,
options,
);
}
/**
* Removes a list of participants by ID to the group
* @param {Array&amp;lt;string&gt;} participantIds
* @param {Array&amp;lt;string&gt;} participantIds
* @returns {Promise&amp;lt;{ status: number }&gt;}
*/
async removeParticipants(participantIds) {
return await this.client.pupPage.evaluate(async (chatId, participantIds) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
const participants &#x3D; (await Promise.all(participantIds.map(async p &#x3D;&gt; {
const { lid, phone } &#x3D; await window.WWebJS.enforceLidAndPnRetrieval(p);
return await this.client.pupPage.evaluate(
async (chatId, participantIds) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
const participants &#x3D; (
await Promise.all(
participantIds.map(async (p) &#x3D;&gt; {
const { lid, phone } &#x3D;
await window.WWebJS.enforceLidAndPnRetrieval(p);
return chat.groupMetadata.participants.get(lid?._serialized) ||
chat.groupMetadata.participants.get(phone?._serialized);
}))).filter(Boolean);
await window.Store.GroupParticipants.removeParticipants(chat, participants);
return { status: 200 };
}, this.id._serialized, participantIds);
return (
chat.groupMetadata.participants.get(
lid?._serialized,
) ||
chat.groupMetadata.participants.get(
phone?._serialized,
)
);
}),
)
).filter(Boolean);
await window
.require(&#x27;WAWebModifyParticipantsGroupAction&#x27;)
.removeParticipants(chat, participants);
return { status: 200 };
},
this.id._serialized,
participantIds,
);
}
/**
* Promotes participants by IDs to admins
* @param {Array&amp;lt;string&gt;} participantIds
* @param {Array&amp;lt;string&gt;} participantIds
* @returns {Promise&amp;lt;{ status: number }&gt;} Object with status code indicating if the operation was successful
*/
async promoteParticipants(participantIds) {
return await this.client.pupPage.evaluate(async (chatId, participantIds) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
const participants &#x3D; (await Promise.all(participantIds.map(async p &#x3D;&gt; {
const { lid, phone } &#x3D; await window.WWebJS.enforceLidAndPnRetrieval(p);
return await this.client.pupPage.evaluate(
async (chatId, participantIds) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
const participants &#x3D; (
await Promise.all(
participantIds.map(async (p) &#x3D;&gt; {
const { lid, phone } &#x3D;
await window.WWebJS.enforceLidAndPnRetrieval(p);
return chat.groupMetadata.participants.get(lid?._serialized) ||
chat.groupMetadata.participants.get(phone?._serialized);
}))).filter(Boolean);
await window.Store.GroupParticipants.promoteParticipants(chat, participants);
return { status: 200 };
}, this.id._serialized, participantIds);
return (
chat.groupMetadata.participants.get(
lid?._serialized,
) ||
chat.groupMetadata.participants.get(
phone?._serialized,
)
);
}),
)
).filter(Boolean);
await window
.require(&#x27;WAWebModifyParticipantsGroupAction&#x27;)
.promoteParticipants(chat, participants);
return { status: 200 };
},
this.id._serialized,
participantIds,
);
}
/**
* Demotes participants by IDs to regular users
* @param {Array&amp;lt;string&gt;} participantIds
* @param {Array&amp;lt;string&gt;} participantIds
* @returns {Promise&amp;lt;{ status: number }&gt;} Object with status code indicating if the operation was successful
*/
async demoteParticipants(participantIds) {
return await this.client.pupPage.evaluate(async (chatId, participantIds) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
const participants &#x3D; (await Promise.all(participantIds.map(async p &#x3D;&gt; {
const { lid, phone } &#x3D; await window.WWebJS.enforceLidAndPnRetrieval(p);
return await this.client.pupPage.evaluate(
async (chatId, participantIds) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
const participants &#x3D; (
await Promise.all(
participantIds.map(async (p) &#x3D;&gt; {
const { lid, phone } &#x3D;
await window.WWebJS.enforceLidAndPnRetrieval(p);
return chat.groupMetadata.participants.get(lid?._serialized) ||
chat.groupMetadata.participants.get(phone?._serialized);
}))).filter(Boolean);
await window.Store.GroupParticipants.demoteParticipants(chat, participants);
return { status: 200 };
}, this.id._serialized, participantIds);
return (
chat.groupMetadata.participants.get(
lid?._serialized,
) ||
chat.groupMetadata.participants.get(
phone?._serialized,
)
);
}),
)
).filter(Boolean);
await window
.require(&#x27;WAWebModifyParticipantsGroupAction&#x27;)
.demoteParticipants(chat, participants);
return { status: 200 };
},
this.id._serialized,
participantIds,
);
}
/**
* Updates the group subject
* @param {string} subject
* @param {string} subject
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the subject was properly updated. This can return false if the user does not have the necessary permissions.
*/
async setSubject(subject) {
const success &#x3D; await this.client.pupPage.evaluate(async (chatId, subject) &#x3D;&gt; {
const chatWid &#x3D; window.Store.WidFactory.createWid(chatId);
try {
await window.Store.GroupUtils.setGroupSubject(chatWid, subject);
return true;
} catch (err) {
if(err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
}, this.id._serialized, subject);
const success &#x3D; await this.client.pupPage.evaluate(
async (chatId, subject) &#x3D;&gt; {
const chatWid &#x3D; window
.require(&#x27;WAWebWidFactory&#x27;)
.createWid(chatId);
try {
await window
.require(&#x27;WAWebGroupModifyInfoJob&#x27;)
.setGroupSubject(chatWid, subject);
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
},
this.id._serialized,
subject,
);
if(!success) return false;
if (!success) return false;
this.name &#x3D; subject;
return true;
}
/**
* Updates the group description
* @param {string} description
* @param {string} description
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the description was properly updated. This can return false if the user does not have the necessary permissions.
*/
async setDescription(description) {
const success &#x3D; await this.client.pupPage.evaluate(async (chatId, description) &#x3D;&gt; {
const chatWid &#x3D; window.Store.WidFactory.createWid(chatId);
let descId &#x3D; window.Store.GroupMetadata.get(chatWid).descId;
let newId &#x3D; await window.Store.MsgKey.newId();
try {
await window.Store.GroupUtils.setGroupDescription(chatWid, description, newId, descId);
return true;
} catch (err) {
if(err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
}, this.id._serialized, description);
const success &#x3D; await this.client.pupPage.evaluate(
async (chatId, description) &#x3D;&gt; {
const chatWid &#x3D; window
.require(&#x27;WAWebWidFactory&#x27;)
.createWid(chatId);
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
let descId &#x3D; chat.groupMetadata.descId;
let newId &#x3D; await window.require(&#x27;WAWebMsgKey&#x27;).newId();
try {
await window
.require(&#x27;WAWebGroupModifyInfoJob&#x27;)
.setGroupDescription(
chatWid,
description,
newId,
descId,
);
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
},
this.id._serialized,
description,
);
if(!success) return false;
if (!success) return false;
this.groupMetadata.desc &#x3D; description;
return true;
}
/**
* Updates the group setting to allow only admins to add members to the group.
* @param {boolean} [adminsOnly&#x3D;true] Enable or disable this option
* @param {boolean} [adminsOnly&#x3D;true] Enable or disable this option
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
*/
async setAddMembersAdminsOnly(adminsOnly&#x3D;true) {
const success &#x3D; await this.client.pupPage.evaluate(async (groupId, adminsOnly) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(groupId, { getAsModel: false });
try {
await window.Store.GroupUtils.setGroupProperty(chat, &#x27;member_add_mode&#x27;, adminsOnly ? 0 : 1);
return true;
} catch (err) {
if(err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
}, this.id._serialized, adminsOnly);
async setAddMembersAdminsOnly(adminsOnly &#x3D; true) {
const success &#x3D; await this.client.pupPage.evaluate(
async (groupId, adminsOnly) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(groupId, {
getAsModel: false,
});
try {
await window
.require(&#x27;WAWebSetPropertyGroupAction&#x27;)
.setGroupProperty(
chat,
&#x27;member_add_mode&#x27;,
adminsOnly ? 0 : 1,
);
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
},
this.id._serialized,
adminsOnly,
);
success &amp;amp;&amp;amp; (this.groupMetadata.memberAddMode &#x3D; adminsOnly ? &#x27;admin_add&#x27; : &#x27;all_member_add&#x27;);
success &amp;amp;&amp;amp;
(this.groupMetadata.memberAddMode &#x3D; adminsOnly
? &#x27;admin_add&#x27;
: &#x27;all_member_add&#x27;);
return success;
}
/**
* Updates the group settings to only allow admins to send messages.
* @param {boolean} [adminsOnly&#x3D;true] Enable or disable this option
* @param {boolean} [adminsOnly&#x3D;true] Enable or disable this option
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
*/
async setMessagesAdminsOnly(adminsOnly&#x3D;true) {
const success &#x3D; await this.client.pupPage.evaluate(async (chatId, adminsOnly) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
try {
await window.Store.GroupUtils.setGroupProperty(chat, &#x27;announcement&#x27;, adminsOnly ? 1 : 0);
return true;
} catch (err) {
if(err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
}, this.id._serialized, adminsOnly);
async setMessagesAdminsOnly(adminsOnly &#x3D; true) {
const success &#x3D; await this.client.pupPage.evaluate(
async (chatId, adminsOnly) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
try {
await window
.require(&#x27;WAWebSetPropertyGroupAction&#x27;)
.setGroupProperty(
chat,
&#x27;announcement&#x27;,
adminsOnly ? 1 : 0,
);
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
},
this.id._serialized,
adminsOnly,
);
if(!success) return false;
if (!success) return false;
this.groupMetadata.announce &#x3D; adminsOnly;
return true;
@ -367,27 +543,35 @@ class GroupChat extends Chat {
/**
* Updates the group settings to only allow admins to edit group info (title, description, photo).
* @param {boolean} [adminsOnly&#x3D;true] Enable or disable this option
* @param {boolean} [adminsOnly&#x3D;true] Enable or disable this option
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the setting was properly updated. This can return false if the user does not have the necessary permissions.
*/
async setInfoAdminsOnly(adminsOnly&#x3D;true) {
const success &#x3D; await this.client.pupPage.evaluate(async (chatId, adminsOnly) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
try {
await window.Store.GroupUtils.setGroupProperty(chat, &#x27;restrict&#x27;, adminsOnly ? 1 : 0);
return true;
} catch (err) {
if(err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
}, this.id._serialized, adminsOnly);
async setInfoAdminsOnly(adminsOnly &#x3D; true) {
const success &#x3D; await this.client.pupPage.evaluate(
async (chatId, adminsOnly) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
try {
await window
.require(&#x27;WAWebSetPropertyGroupAction&#x27;)
.setGroupProperty(chat, &#x27;restrict&#x27;, adminsOnly ? 1 : 0);
return true;
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return false;
throw err;
}
},
this.id._serialized,
adminsOnly,
);
if (!success) return false;
if(!success) return false;
this.groupMetadata.restrict &#x3D; adminsOnly;
return true;
}
/**
* Deletes the group&#x27;s picture.
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the picture was properly deleted. This can return false if the user does not have the necessary permissions.
@ -406,9 +590,13 @@ class GroupChat extends Chat {
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the picture was properly updated. This can return false if the user does not have the necessary permissions.
*/
async setPicture(media) {
const success &#x3D; await this.client.pupPage.evaluate((chatid, media) &#x3D;&gt; {
return window.WWebJS.setPicture(chatid, media);
}, this.id._serialized, media);
const success &#x3D; await this.client.pupPage.evaluate(
(chatid, media) &#x3D;&gt; {
return window.WWebJS.setPicture(chatid, media);
},
this.id._serialized,
media,
);
return success;
}
@ -418,37 +606,35 @@ class GroupChat extends Chat {
* @returns {Promise&amp;lt;string&gt;} Group&#x27;s invite code
*/
async getInviteCode() {
const codeRes &#x3D; await this.client.pupPage.evaluate(async chatId &#x3D;&gt; {
const chatWid &#x3D; window.Store.WidFactory.createWid(chatId);
const codeRes &#x3D; await this.client.pupPage.evaluate(async (chatId) &#x3D;&gt; {
try {
return window.compareWwebVersions(window.Debug.VERSION, &#x27;&gt;&#x3D;&#x27;, &#x27;2.3000.1020730154&#x27;)
? await window.Store.GroupInvite.fetchMexGroupInviteCode(chatId)
: await window.Store.GroupInvite.queryGroupInviteCode(chatWid, true);
}
catch (err) {
if(err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return undefined;
return await window
.require(&#x27;WAWebMexFetchGroupInviteCodeJob&#x27;)
.fetchMexGroupInviteCode(chatId);
} catch (err) {
if (err.name &#x3D;&#x3D;&#x3D; &#x27;ServerStatusCodeError&#x27;) return undefined;
throw err;
}
}, this.id._serialized);
return codeRes?.code
? codeRes?.code
: codeRes;
return codeRes?.code ? codeRes?.code : codeRes;
}
/**
* Invalidates the current group invite code and generates a new one
* @returns {Promise&amp;lt;string&gt;} New invite code
*/
async revokeInvite() {
const codeRes &#x3D; await this.client.pupPage.evaluate(chatId &#x3D;&gt; {
const chatWid &#x3D; window.Store.WidFactory.createWid(chatId);
return window.Store.GroupInvite.resetGroupInviteCode(chatWid);
const codeRes &#x3D; await this.client.pupPage.evaluate((chatId) &#x3D;&gt; {
const chatWid &#x3D; window.require(&#x27;WAWebWidFactory&#x27;).createWid(chatId);
return window
.require(&#x27;WAWebGroupQueryJob&#x27;)
.resetGroupInviteCode(chatWid);
}, this.id._serialized);
return codeRes.code;
}
/**
* An object that handles the information about the group membership request
* @typedef {Object} GroupMembershipRequest
@ -458,13 +644,15 @@ class GroupChat extends Chat {
* @property {string} requestMethod The method used to create the request: NonAdminAdd/InviteLink/LinkedGroupJoin
* @property {number} t The timestamp the request was created at
*/
/**
* Gets an array of membership requests
* @returns {Promise&amp;lt;Array&amp;lt;GroupMembershipRequest&gt;&gt;} An array of membership requests
*/
async getGroupMembershipRequests() {
return await this.client.getGroupMembershipRequests(this.id._serialized);
return await this.client.getGroupMembershipRequests(
this.id._serialized,
);
}
/**
@ -488,7 +676,10 @@ class GroupChat extends Chat {
* @returns {Promise&amp;lt;Array&amp;lt;MembershipRequestActionResult&gt;&gt;} Returns an array of requester IDs whose membership requests were approved and an error for each requester, if any occurred during the operation. If there are no requests, an empty array will be returned
*/
async approveGroupMembershipRequests(options &#x3D; {}) {
return await this.client.approveGroupMembershipRequests(this.id._serialized, options);
return await this.client.approveGroupMembershipRequests(
this.id._serialized,
options,
);
}
/**
@ -497,7 +688,10 @@ class GroupChat extends Chat {
* @returns {Promise&amp;lt;Array&amp;lt;MembershipRequestActionResult&gt;&gt;} Returns an array of requester IDs whose membership requests were rejected and an error for each requester, if any occurred during the operation. If there are no requests, an empty array will be returned
*/
async rejectGroupMembershipRequests(options &#x3D; {}) {
return await this.client.rejectGroupMembershipRequests(this.id._serialized, options);
return await this.client.rejectGroupMembershipRequests(
this.id._serialized,
options,
);
}
/**
@ -505,12 +699,13 @@ class GroupChat extends Chat {
* @returns {Promise}
*/
async leave() {
await this.client.pupPage.evaluate(async chatId &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
return window.Store.GroupUtils.sendExitGroup(chat);
await this.client.pupPage.evaluate(async (chatId) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
return window.require(&#x27;WAWebExitGroupAction&#x27;).sendExitGroup(chat);
}, this.id._serialized);
}
}
module.exports &#x3D; GroupChat;
@ -524,7 +719,7 @@ module.exports &#x3D; GroupChat;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/GroupNotification.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -41,7 +41,7 @@ class GroupNotification extends Base {
constructor(client, data) {
super(client);
if(data) this._patch(data);
if (data) this._patch(data);
}
_patch(data) {
@ -57,12 +57,12 @@ class GroupNotification extends Base {
*/
this.body &#x3D; data.body || &#x27;&#x27;;
/**
/**
* GroupNotification type
* @type {GroupNotificationTypes}
*/
this.type &#x3D; data.subtype;
/**
* Unix timestamp for when the groupNotification was created
* @type {number}
@ -71,17 +71,23 @@ class GroupNotification extends Base {
/**
* ID for the Chat that this groupNotification was sent for.
*
*
* @type {string}
*/
this.chatId &#x3D; typeof (data.id.remote) &#x3D;&#x3D;&#x3D; &#x27;object&#x27; ? data.id.remote._serialized : data.id.remote;
this.chatId &#x3D;
typeof data.id.remote &#x3D;&#x3D;&#x3D; &#x27;object&#x27;
? data.id.remote._serialized
: data.id.remote;
/**
* ContactId for the user that produced the GroupNotification.
* @type {string}
*/
this.author &#x3D; typeof (data.author) &#x3D;&#x3D;&#x3D; &#x27;object&#x27; ? data.author._serialized : data.author;
this.author &#x3D;
typeof data.author &#x3D;&#x3D;&#x3D; &#x27;object&#x27;
? data.author._serialized
: data.author;
/**
* Contact IDs for the users that were affected by this GroupNotification.
* @type {Array&amp;lt;string&gt;}
@ -116,20 +122,23 @@ class GroupNotification extends Base {
* @returns {Promise&amp;lt;Array&amp;lt;Contact&gt;&gt;}
*/
async getRecipients() {
return await Promise.all(this.recipientIds.map(async m &#x3D;&gt; await this.client.getContactById(m)));
return await Promise.all(
this.recipientIds.map(
async (m) &#x3D;&gt; await this.client.getContactById(m),
),
);
}
/**
* Sends a message to the same chat this GroupNotification was produced in.
*
* @param {string|MessageMedia|Location} content
*
* @param {string|MessageMedia|Location} content
* @param {object} options
* @returns {Promise&amp;lt;Message&gt;}
*/
async reply(content, options&#x3D;{}) {
async reply(content, options &#x3D; {}) {
return this.client.sendMessage(this.chatId, content, options);
}
}
module.exports &#x3D; GroupNotification;
@ -143,7 +152,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Label.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -43,13 +43,13 @@ class Label extends Base {
* @param {Base} client
* @param {object} labelData
*/
constructor(client, labelData){
constructor(client, labelData) {
super(client);
if(labelData) this._patch(labelData);
if (labelData) this._patch(labelData);
}
_patch(labelData){
_patch(labelData) {
/**
* Label ID
* @type {string}
@ -68,17 +68,18 @@ class Label extends Base {
*/
this.hexColor &#x3D; labelData.hexColor;
}
/**
* Get all chats that have been assigned this Label
* @returns {Promise&amp;lt;Array&amp;lt;Chat&gt;&gt;}
*/
async getChats(){
async getChats() {
return this.client.getChatsByLabelId(this.id);
}
}
module.exports &#x3D; Label;</code></pre>
module.exports &#x3D; Label;
</code></pre>
</article>
</div>
</div>
@ -88,7 +89,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/List.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -56,13 +56,12 @@ class List {
* @type {string}
*/
this.buttonText &#x3D; buttonText;
/**
* title of message
* @type {string}
*/
this.title &#x3D; title;
/**
* footer of message
@ -75,9 +74,8 @@ class List {
* @type {Array&amp;lt;any&gt;}
*/
this.sections &#x3D; this._format(sections);
}
/**
* Creates section array from simple array
* @param {Array&amp;lt;any&gt;} sections
@ -86,25 +84,35 @@ class List {
* Input: [{title:&#x27;sectionTitle&#x27;,rows:[{id:&#x27;customId&#x27;, title:&#x27;ListItem2&#x27;, description: &#x27;desc&#x27;},{title:&#x27;ListItem2&#x27;}]}}]
* Returns: [{&#x27;title&#x27;:&#x27;sectionTitle&#x27;,&#x27;rows&#x27;:[{&#x27;rowId&#x27;:&#x27;customId&#x27;,&#x27;title&#x27;:&#x27;ListItem1&#x27;,&#x27;description&#x27;:&#x27;desc&#x27;},{&#x27;rowId&#x27;:&#x27;oGSRoD&#x27;,&#x27;title&#x27;:&#x27;ListItem2&#x27;,&#x27;description&#x27;:&#x27;&#x27;}]}]
*/
_format(sections){
if(!sections.length){throw &#x27;[LT02] List without sections&#x27;;}
if(sections.length &gt; 1 &amp;amp;&amp;amp; sections.filter(s &#x3D;&gt; typeof s.title &#x3D;&#x3D; &#x27;undefined&#x27;).length &gt; 1){throw &#x27;[LT05] You can\&#x27;t have more than one empty title.&#x27;;}
return sections.map( (section) &#x3D;&gt;{
if(!section.rows.length){throw &#x27;[LT03] Section without rows&#x27;;}
_format(sections) {
if (!sections.length) {
throw &#x27;[LT02] List without sections&#x27;;
}
if (
sections.length &gt; 1 &amp;amp;&amp;amp;
sections.filter((s) &#x3D;&gt; typeof s.title &#x3D;&#x3D; &#x27;undefined&#x27;).length &gt; 1
) {
throw &quot;[LT05] You can&#x27;t have more than one empty title.&quot;;
}
return sections.map((section) &#x3D;&gt; {
if (!section.rows.length) {
throw &#x27;[LT03] Section without rows&#x27;;
}
return {
title: section.title ? section.title : undefined,
rows: section.rows.map( (row) &#x3D;&gt; {
if(!row.title){throw &#x27;[LT04] Row without title&#x27;;}
rows: section.rows.map((row) &#x3D;&gt; {
if (!row.title) {
throw &#x27;[LT04] Row without title&#x27;;
}
return {
rowId: row.id ? row.id : Util.generateHash(6),
title: row.title,
description: row.description ? row.description : &#x27;&#x27;
description: row.description ? row.description : &#x27;&#x27;,
};
})
}),
};
});
}
}
module.exports &#x3D; List;
@ -118,7 +126,7 @@ module.exports &#x3D; List;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Location.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -84,13 +84,15 @@ class Location {
* Location full description
* @type {string|undefined}
*/
this.description &#x3D; this.name &amp;amp;&amp;amp; this.address
? &#x60;${this.name}\n${this.address}&#x60;
: this.name || this.address || &#x27;&#x27;;
this.description &#x3D;
this.name &amp;amp;&amp;amp; this.address
? &#x60;${this.name}\n${this.address}&#x60;
: this.name || this.address || &#x27;&#x27;;
}
}
module.exports &#x3D; Location;</code></pre>
module.exports &#x3D; Location;
</code></pre>
</article>
</div>
</div>
@ -100,7 +102,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Message.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -54,13 +54,13 @@ class Message extends Base {
_patch(data) {
this._data &#x3D; data;
/**
* MediaKey that represents the sticker &#x27;ID&#x27;
* @type {string}
*/
this.mediaKey &#x3D; data.mediaKey;
/**
* ID that represents the message
* @type {object}
@ -83,7 +83,9 @@ class Message extends Base {
* Message content
* @type {string}
*/
this.body &#x3D; this.hasMedia ? data.caption || &#x27;&#x27; : data.body || data.pollName || data.eventName || &#x27;&#x27;;
this.body &#x3D; this.hasMedia
? data.caption || &#x27;&#x27;
: data.body || data.pollName || data.eventName || &#x27;&#x27;;
/**
* Message type
@ -101,7 +103,10 @@ class Message extends Base {
* ID for the Chat that this message was sent to, except if the message was sent by the current user.
* @type {string}
*/
this.from &#x3D; (typeof (data.from) &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp; data.from !&#x3D;&#x3D; null) ? data.from._serialized : data.from;
this.from &#x3D;
typeof data.from &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp; data.from !&#x3D;&#x3D; null
? data.from._serialized
: data.from;
/**
* ID for who this message is for.
@ -110,19 +115,31 @@ class Message extends Base {
* If the message is sent by another user, it will be the ID for the current user.
* @type {string}
*/
this.to &#x3D; (typeof (data.to) &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp; data.to !&#x3D;&#x3D; null) ? data.to._serialized : data.to;
this.to &#x3D;
typeof data.to &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp; data.to !&#x3D;&#x3D; null
? data.to._serialized
: data.to;
/**
* If the message was sent to a group, this field will contain the user that sent the message.
* @type {string}
*/
this.author &#x3D; (typeof (data.author) &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp; data.author !&#x3D;&#x3D; null) ? data.author._serialized : data.author;
this.author &#x3D;
typeof data.author &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp; data.author !&#x3D;&#x3D; null
? data.author._serialized
: data.author;
/**
* String that represents from which device type the message was sent
* @type {string}
*/
this.deviceType &#x3D; typeof data.id.id &#x3D;&#x3D;&#x3D; &#x27;string&#x27; &amp;amp;&amp;amp; data.id.id.length &gt; 21 ? &#x27;android&#x27; : typeof data.id.id &#x3D;&#x3D;&#x3D; &#x27;string&#x27; &amp;amp;&amp;amp; data.id.id.substring(0, 2) &#x3D;&#x3D;&#x3D; &#x27;3A&#x27; ? &#x27;ios&#x27; : &#x27;web&#x27;;
this.deviceType &#x3D;
typeof data.id.id &#x3D;&#x3D;&#x3D; &#x27;string&#x27; &amp;amp;&amp;amp; data.id.id.length &gt; 25
? &#x27;android&#x27;
: typeof data.id.id &#x3D;&#x3D;&#x3D; &#x27;string&#x27; &amp;amp;&amp;amp;
data.id.id.substring(0, 2) &#x3D;&#x3D;&#x3D; &#x27;3A&#x27;
? &#x27;ios&#x27;
: &#x27;web&#x27;;
/**
* Indicates if the message was forwarded
* @type {boolean}
@ -141,7 +158,8 @@ class Message extends Base {
* Indicates if the message is a status update
* @type {boolean}
*/
this.isStatus &#x3D; data.isStatusV3 || data.id.remote &#x3D;&#x3D;&#x3D; &#x27;status@broadcast&#x27;;
this.isStatus &#x3D;
data.isStatusV3 || data.id.remote &#x3D;&#x3D;&#x3D; &#x27;status@broadcast&#x27;;
/**
* Indicates if the message was starred
@ -193,7 +211,7 @@ class Message extends Base {
description &#x3D; {
name: splitted[0],
address: splitted[1],
url: data.clientUrl
url: data.clientUrl,
};
}
return new Location(data.lat, data.lng, description);
@ -203,20 +221,36 @@ class Message extends Base {
* List of vCards contained in the message.
* @type {Array&amp;lt;string&gt;}
*/
this.vCards &#x3D; data.type &#x3D;&#x3D;&#x3D; MessageTypes.CONTACT_CARD_MULTI ? data.vcardList.map((c) &#x3D;&gt; c.vcard) : data.type &#x3D;&#x3D;&#x3D; MessageTypes.CONTACT_CARD ? [data.body] : [];
this.vCards &#x3D;
data.type &#x3D;&#x3D;&#x3D; MessageTypes.CONTACT_CARD_MULTI
? data.vcardList.map((c) &#x3D;&gt; c.vcard)
: data.type &#x3D;&#x3D;&#x3D; MessageTypes.CONTACT_CARD
? [data.body]
: [];
/**
* Group Invite Data
* @type {object}
*/
this.inviteV4 &#x3D; data.type &#x3D;&#x3D;&#x3D; MessageTypes.GROUP_INVITE ? {
inviteCode: data.inviteCode,
inviteCodeExp: data.inviteCodeExp,
groupId: data.inviteGrp,
groupName: data.inviteGrpName,
fromId: typeof data.from &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp; &#x27;_serialized&#x27; in data.from ? data.from._serialized : data.from,
toId: typeof data.to &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp; &#x27;_serialized&#x27; in data.to ? data.to._serialized : data.to
} : undefined;
this.inviteV4 &#x3D;
data.type &#x3D;&#x3D;&#x3D; MessageTypes.GROUP_INVITE
? {
inviteCode: data.inviteCode,
inviteCodeExp: data.inviteCodeExp,
groupId: data.inviteGrp,
groupName: data.inviteGrpName,
fromId:
typeof data.from &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp;
&#x27;_serialized&#x27; in data.from
? data.from._serialized
: data.from,
toId:
typeof data.to &#x3D;&#x3D;&#x3D; &#x27;object&#x27; &amp;amp;&amp;amp;
&#x27;_serialized&#x27; in data.to
? data.to._serialized
: data.to,
}
: undefined;
/**
* Indicates the mentions in the message body.
@ -247,7 +281,7 @@ class Message extends Base {
*/
this.token &#x3D; data.token ? data.token : undefined;
/**
/**
* Indicates whether the message is a Gif
* @type {boolean}
*/
@ -288,7 +322,7 @@ class Message extends Base {
if (data.latestEditMsgKey) {
this.latestEditMsgKey &#x3D; data.latestEditMsgKey;
}
/**
* Protocol message key.
* Can be used to retrieve the ID of an original message that was revoked.
@ -315,17 +349,27 @@ class Message extends Base {
}
/** Selected List row Id **/
if (data.listResponse &amp;amp;&amp;amp; data.listResponse.singleSelectReply.selectedRowId) {
this.selectedRowId &#x3D; data.listResponse.singleSelectReply.selectedRowId;
if (
data.listResponse &amp;amp;&amp;amp;
data.listResponse.singleSelectReply.selectedRowId
) {
this.selectedRowId &#x3D;
data.listResponse.singleSelectReply.selectedRowId;
}
if (this.type &#x3D;&#x3D;&#x3D; MessageTypes.POLL_CREATION) {
this.pollName &#x3D; data.pollName;
this.pollOptions &#x3D; data.pollOptions;
this.allowMultipleAnswers &#x3D; Boolean(!data.pollSelectableOptionsCount);
this.allowMultipleAnswers &#x3D; Boolean(
!data.pollSelectableOptionsCount,
);
this.pollInvalidated &#x3D; data.pollInvalidated;
this.isSentCagPollCreation &#x3D; data.isSentCagPollCreation;
this.messageSecret &#x3D; data.messageSecret ? Object.keys(data.messageSecret).map((key) &#x3D;&gt; data.messageSecret[key]) : [];
this.messageSecret &#x3D; data.messageSecret
? Object.keys(data.messageSecret).map(
(key) &#x3D;&gt; data.messageSecret[key],
)
: [];
}
return super._patch(data);
@ -336,19 +380,25 @@ class Message extends Base {
}
/**
* Reloads this Message object&#x27;s data in-place with the latest values from WhatsApp Web.
* Reloads this Message object&#x27;s data in-place with the latest values from WhatsApp Web.
* Note that the Message must still be in the web app cache for this to work, otherwise will return null.
* @returns {Promise&amp;lt;Message&gt;}
*/
async reload() {
const newData &#x3D; await this.client.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
if (!msg) return null;
return window.WWebJS.getMessageModel(msg);
}, this.id._serialized);
if(!newData) return null;
if (!newData) return null;
this._patch(newData);
return this;
}
@ -360,7 +410,7 @@ class Message extends Base {
get rawData() {
return this._data;
}
/**
* Returns the Chat this message was sent in
* @returns {Promise&amp;lt;Chat&gt;}
@ -382,15 +432,27 @@ class Message extends Base {
* @returns {Promise&amp;lt;Array&amp;lt;Contact&gt;&gt;}
*/
async getMentions() {
return await Promise.all(this.mentionedIds.map(async m &#x3D;&gt; await this.client.getContactById(m)));
return await Promise.all(
this.mentionedIds.map(
async (m) &#x3D;&gt;
await this.client.getContactById(
typeof m &#x3D;&#x3D;&#x3D; &#x27;string&#x27; ? m : m._serialized,
),
),
);
}
/**
* Returns groups mentioned in this message
* @returns {Promise&amp;lt;Array&amp;lt;GroupChat&gt;&gt;}
*/
async getGroupMentions() {
return await Promise.all(this.groupMentions.map(async (m) &#x3D;&gt; await this.client.getChatById(m.groupJid._serialized)));
return await Promise.all(
this.groupMentions.map(
async (m) &#x3D;&gt;
await this.client.getChatById(m.groupJid._serialized),
),
);
}
/**
@ -401,8 +463,16 @@ class Message extends Base {
if (!this.hasQuotedMsg) return undefined;
const quotedMsg &#x3D; await this.client.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
const quotedMsg &#x3D; window.Store.QuotedMsg.getQuotedMsgObj(msg);
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
const quotedMsg &#x3D; window
.require(&#x27;WAWebQuotedMsgModelUtils&#x27;)
.getQuotedMsgObj(msg);
return window.WWebJS.getMessageModel(quotedMsg);
}, this.id._serialized);
@ -426,7 +496,7 @@ class Message extends Base {
options &#x3D; {
...options,
quotedMessageId: this.id._serialized
quotedMessageId: this.id._serialized,
};
return this.client.sendMessage(chatId, content, options);
@ -437,14 +507,8 @@ class Message extends Base {
* @param {string} reaction - Emoji to react with. Send an empty string to remove the reaction.
* @return {Promise}
*/
async react(reaction){
await this.client.pupPage.evaluate(async (messageId, reaction) &#x3D;&gt; {
if (!messageId) return null;
const msg &#x3D;
window.Store.Msg.get(messageId) || (await window.Store.Msg.getMessagesById([messageId]))?.messages?.[0];
if(!msg) return null;
await window.Store.sendReactionToMsg(msg, reaction);
}, this.id._serialized, reaction);
async react(reaction) {
return this.client.sendReaction(this.id._serialized, reaction);
}
/**
@ -464,9 +528,13 @@ class Message extends Base {
async forward(chat) {
const chatId &#x3D; typeof chat &#x3D;&#x3D;&#x3D; &#x27;string&#x27; ? chat : chat.id._serialized;
await this.client.pupPage.evaluate(async (msgId, chatId) &#x3D;&gt; {
return window.WWebJS.forwardMessage(chatId, msgId);
}, this.id._serialized, chatId);
await this.client.pupPage.evaluate(
async (msgId, chatId) &#x3D;&gt; {
return window.WWebJS.forwardMessage(chatId, msgId);
},
this.id._serialized,
chatId,
);
}
/**
@ -479,57 +547,84 @@ class Message extends Base {
}
const result &#x3D; await this.client.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
// REUPLOADING mediaStage means the media is expired and the download button is spinning, cannot be downloaded now
if (!msg || !msg.mediaData || msg.mediaData.mediaStage &#x3D;&#x3D;&#x3D; &#x27;REUPLOADING&#x27;) {
if (
!msg ||
!msg.mediaData ||
msg.mediaData.mediaStage &#x3D;&#x3D;&#x3D; &#x27;REUPLOADING&#x27;
) {
return null;
}
if (msg.mediaData.mediaStage !&#x3D; &#x27;RESOLVED&#x27;) {
// try to resolve media
await msg.downloadMedia({
downloadEvenIfExpensive: true,
rmrReason: 1
rmrReason: 1,
});
}
if (msg.mediaData.mediaStage.includes(&#x27;ERROR&#x27;) || msg.mediaData.mediaStage &#x3D;&#x3D;&#x3D; &#x27;FETCHING&#x27;) {
if (
msg.mediaData.mediaStage.includes(&#x27;ERROR&#x27;) ||
msg.mediaData.mediaStage &#x3D;&#x3D;&#x3D; &#x27;FETCHING&#x27;
) {
// media could not be downloaded
return undefined;
}
try {
const mockQpl &#x3D; {
addAnnotations: function() { return this; },
addPoint: function() { return this; }
addAnnotations: function () {
return this;
},
addPoint: function () {
return this;
},
};
const decryptedMedia &#x3D; await window.Store.DownloadManager.downloadAndMaybeDecrypt({
directPath: msg.directPath,
encFilehash: msg.encFilehash,
filehash: msg.filehash,
mediaKey: msg.mediaKey,
mediaKeyTimestamp: msg.mediaKeyTimestamp,
type: msg.type,
signal: (new AbortController).signal,
downloadQpl: mockQpl
});
const decryptedMedia &#x3D; await window
.require(&#x27;WAWebDownloadManager&#x27;)
.downloadManager.downloadAndMaybeDecrypt({
directPath: msg.directPath,
encFilehash: msg.encFilehash,
filehash: msg.filehash,
mediaKey: msg.mediaKey,
mediaKeyTimestamp: msg.mediaKeyTimestamp,
type: msg.type,
signal: new AbortController().signal,
downloadQpl: mockQpl,
});
const data &#x3D; await window.WWebJS.arrayBufferToBase64Async(decryptedMedia);
const data &#x3D;
await window.WWebJS.arrayBufferToBase64Async(
decryptedMedia,
);
return {
data,
mimetype: msg.mimetype,
filename: msg.filename,
filesize: msg.size
filesize: msg.size,
};
} catch (e) {
if(e.status &amp;amp;&amp;amp; e.status &#x3D;&#x3D;&#x3D; 404) return undefined;
if (e.status &amp;amp;&amp;amp; e.status &#x3D;&#x3D;&#x3D; 404) return undefined;
throw e;
}
}, this.id._serialized);
if (!result) return undefined;
return new MessageMedia(result.mimetype, result.data, result.filename, result.filesize);
return new MessageMedia(
result.mimetype,
result.data,
result.filename,
result.filesize,
);
}
/**
@ -538,23 +633,66 @@ class Message extends Base {
* @param {?boolean} [clearMedia &#x3D; true] If true, any associated media will also be deleted from a device.
*/
async delete(everyone, clearMedia &#x3D; true) {
await this.client.pupPage.evaluate(async (msgId, everyone, clearMedia) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
const chat &#x3D; window.Store.Chat.get(msg.id.remote) || (await window.Store.Chat.find(msg.id.remote));
const canRevoke &#x3D;
window.Store.MsgActionChecks.canSenderRevokeMsg(msg) || window.Store.MsgActionChecks.canAdminRevokeMsg(msg);
await this.client.pupPage.evaluate(
async (msgId, everyone, clearMedia) &#x3D;&gt; {
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
const chat &#x3D;
window
.require(&#x27;WAWebCollections&#x27;)
.Chat.get(msg.id.remote) ||
(await window
.require(&#x27;WAWebCollections&#x27;)
.Chat.find(msg.id.remote));
if (everyone &amp;amp;&amp;amp; canRevoke) {
return window.compareWwebVersions(window.Debug.VERSION, &#x27;&gt;&#x3D;&#x27;, &#x27;2.3000.0&#x27;)
? window.Store.Cmd.sendRevokeMsgs(chat, { list: [msg], type: &#x27;message&#x27; }, { clearMedia: clearMedia })
: window.Store.Cmd.sendRevokeMsgs(chat, [msg], { clearMedia: true, type: msg.id.fromMe ? &#x27;Sender&#x27; : &#x27;Admin&#x27; });
}
const canRevoke &#x3D;
window
.require(&#x27;WAWebMsgActionCapability&#x27;)
.canSenderRevokeMsg(msg) ||
window
.require(&#x27;WAWebMsgActionCapability&#x27;)
.canAdminRevokeMsg(msg);
return window.compareWwebVersions(window.Debug.VERSION, &#x27;&gt;&#x3D;&#x27;, &#x27;2.3000.0&#x27;)
? window.Store.Cmd.sendDeleteMsgs(chat, { list: [msg], type: &#x27;message&#x27; }, clearMedia)
: window.Store.Cmd.sendDeleteMsgs(chat, [msg], clearMedia);
}, this.id._serialized, everyone, clearMedia);
const { Cmd } &#x3D; window.require(&#x27;WAWebCmd&#x27;);
if (everyone &amp;amp;&amp;amp; canRevoke) {
return window.WWebJS.compareWwebVersions(
window.Debug.VERSION,
&#x27;&gt;&#x3D;&#x27;,
&#x27;2.3000.0&#x27;,
)
? Cmd.sendRevokeMsgs(
chat,
{ list: [msg], type: &#x27;message&#x27; },
{ clearMedia: clearMedia },
)
: Cmd.sendRevokeMsgs(chat, [msg], {
clearMedia: true,
type: msg.id.fromMe ? &#x27;Sender&#x27; : &#x27;Admin&#x27;,
});
}
return window.WWebJS.compareWwebVersions(
window.Debug.VERSION,
&#x27;&gt;&#x3D;&#x27;,
&#x27;2.3000.0&#x27;,
)
? Cmd.sendDeleteMsgs(
chat,
{ list: [msg], type: &#x27;message&#x27; },
clearMedia,
)
: Cmd.sendDeleteMsgs(chat, [msg], clearMedia);
},
this.id._serialized,
everyone,
clearMedia,
);
}
/**
@ -562,10 +700,20 @@ class Message extends Base {
*/
async star() {
await this.client.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
if (window.Store.MsgActionChecks.canStarMsg(msg)) {
let chat &#x3D; await window.Store.Chat.find(msg.id.remote);
return window.Store.Cmd.sendStarMsgs(chat, [msg], false);
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
if (window.require(&#x27;WAWebMsgActionCapability&#x27;).canStarMsg(msg)) {
let chat &#x3D; await window
.require(&#x27;WAWebCollections&#x27;)
.Chat.find(msg.id.remote);
return window
.require(&#x27;WAWebCmd&#x27;)
.Cmd.sendStarMsgs(chat, [msg], false);
}
}, this.id._serialized);
}
@ -575,10 +723,20 @@ class Message extends Base {
*/
async unstar() {
await this.client.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
if (window.Store.MsgActionChecks.canStarMsg(msg)) {
let chat &#x3D; await window.Store.Chat.find(msg.id.remote);
return window.Store.Cmd.sendUnstarMsgs(chat, [msg], false);
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
if (window.require(&#x27;WAWebMsgActionCapability&#x27;).canStarMsg(msg)) {
let chat &#x3D; await window
.require(&#x27;WAWebCollections&#x27;)
.Chat.find(msg.id.remote);
return window
.require(&#x27;WAWebCmd&#x27;)
.Cmd.sendUnstarMsgs(chat, [msg], false);
}
}, this.id._serialized);
}
@ -589,9 +747,17 @@ class Message extends Base {
* @returns {Promise&amp;lt;boolean&gt;} Returns true if the operation completed successfully, false otherwise
*/
async pin(duration) {
return await this.client.pupPage.evaluate(async (msgId, duration) &#x3D;&gt; {
return await window.WWebJS.pinUnpinMsgAction(msgId, 1, duration);
}, this.id._serialized, duration);
return await this.client.pupPage.evaluate(
async (msgId, duration) &#x3D;&gt; {
return await window.WWebJS.pinUnpinMsgAction(
msgId,
1,
duration,
);
},
this.id._serialized,
duration,
);
}
/**
@ -622,13 +788,28 @@ class Message extends Base {
*/
async getInfo() {
const info &#x3D; await this.client.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
if (!msg || !msg.id.fromMe) return null;
return new Promise((resolve) &#x3D;&gt; {
setTimeout(async () &#x3D;&gt; {
resolve(await window.Store.getMsgInfo(msg.id));
}, (Date.now() - msg.t * 1000 &amp;lt; 1250) &amp;amp;&amp;amp; Math.floor(Math.random() * (1200 - 1100 + 1)) + 1100 || 0);
setTimeout(
async () &#x3D;&gt; {
resolve(
await window
.require(&#x27;WAWebApiMessageInfoStore&#x27;)
.queryMsgInfo(msg.id),
);
},
(Date.now() - msg.t * 1000 &amp;lt; 1250 &amp;amp;&amp;amp;
Math.floor(Math.random() * (1200 - 1100 + 1)) + 1100) ||
0,
);
});
}, this.id._serialized);
@ -641,14 +822,20 @@ class Message extends Base {
*/
async getOrder() {
if (this.type &#x3D;&#x3D;&#x3D; MessageTypes.ORDER) {
const result &#x3D; await this.client.pupPage.evaluate((orderId, token, chatId) &#x3D;&gt; {
return window.WWebJS.getOrderDetail(orderId, token, chatId);
}, this.orderId, this.token, this._getChatId());
const result &#x3D; await this.client.pupPage.evaluate(
(orderId, token, chatId) &#x3D;&gt; {
return window.WWebJS.getOrderDetail(orderId, token, chatId);
},
this.orderId,
this.token,
this._getChatId(),
);
if (!result) return undefined;
return new Order(this.client, result);
}
return undefined;
}
/**
* Gets the payment details associated with a given message
* @return {Promise&amp;lt;Payment&gt;}
@ -656,8 +843,14 @@ class Message extends Base {
async getPayment() {
if (this.type &#x3D;&#x3D;&#x3D; MessageTypes.PAYMENT) {
const msg &#x3D; await this.client.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
if(!msg) return null;
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
if (!msg) return null;
return msg.serialize();
}, this.id._serialized);
return new Payment(this.client, msg);
@ -665,7 +858,6 @@ class Message extends Base {
return undefined;
}
/**
* Reaction List
* @typedef {Object} ReactionList
@ -685,7 +877,9 @@ class Message extends Base {
}
const reactions &#x3D; await this.client.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msgReactions &#x3D; await window.Store.Reactions.find(msgId);
const msgReactions &#x3D; await window
.require(&#x27;WAWebCollections&#x27;)
.Reactions.find(msgId);
if (!msgReactions || !msgReactions.reactions.length) return null;
return msgReactions.reactions.serialize();
}, this.id._serialized);
@ -694,8 +888,8 @@ class Message extends Base {
return undefined;
}
return reactions.map(reaction &#x3D;&gt; {
reaction.senders &#x3D; reaction.senders.map(sender &#x3D;&gt; {
return reactions.map((reaction) &#x3D;&gt; {
reaction.senders &#x3D; reaction.senders.map((sender) &#x3D;&gt; {
sender.timestamp &#x3D; Math.round(sender.timestamp / 1000);
return new Reaction(this.client, sender);
});
@ -711,36 +905,68 @@ class Message extends Base {
*/
async edit(content, options &#x3D; {}) {
if (options.mentions) {
!Array.isArray(options.mentions) &amp;amp;&amp;amp; (options.mentions &#x3D; [options.mentions]);
if (options.mentions.some((possiblyContact) &#x3D;&gt; possiblyContact instanceof Contact)) {
console.warn(&#x27;Mentions with an array of Contact are now deprecated. See more at https://github.com/pedroslopez/whatsapp-web.js/pull/2166.&#x27;);
options.mentions &#x3D; options.mentions.map((a) &#x3D;&gt; a.id._serialized);
!Array.isArray(options.mentions) &amp;amp;&amp;amp;
(options.mentions &#x3D; [options.mentions]);
if (
options.mentions.some(
(possiblyContact) &#x3D;&gt; possiblyContact instanceof Contact,
)
) {
console.warn(
&#x27;Mentions with an array of Contact are now deprecated. See more at https://github.com/wwebjs/whatsapp-web.js/pull/2166.&#x27;,
);
options.mentions &#x3D; options.mentions.map(
(a) &#x3D;&gt; a.id._serialized,
);
}
}
options.groupMentions &amp;amp;&amp;amp; !Array.isArray(options.groupMentions) &amp;amp;&amp;amp; (options.groupMentions &#x3D; [options.groupMentions]);
options.groupMentions &amp;amp;&amp;amp;
!Array.isArray(options.groupMentions) &amp;amp;&amp;amp;
(options.groupMentions &#x3D; [options.groupMentions]);
let internalOptions &#x3D; {
linkPreview: options.linkPreview &#x3D;&#x3D;&#x3D; false ? undefined : true,
mentionedJidList: options.mentions || [],
groupMentions: options.groupMentions,
extraOptions: options.extra
extraOptions: options.extra,
};
if (!this.fromMe) {
return null;
}
const messageEdit &#x3D; await this.client.pupPage.evaluate(async (msgId, message, options) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
if (!msg) return null;
const messageEdit &#x3D; await this.client.pupPage.evaluate(
async (msgId, message, options) &#x3D;&gt; {
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
if (!msg) return null;
let canEdit &#x3D; window.Store.MsgActionChecks.canEditText(msg) || window.Store.MsgActionChecks.canEditCaption(msg);
if (canEdit) {
const msgEdit &#x3D; await window.WWebJS.editMessage(msg, message, options);
return msgEdit.serialize();
}
return null;
}, this.id._serialized, content, internalOptions);
let canEdit &#x3D;
window
.require(&#x27;WAWebMsgActionCapability&#x27;)
.canEditText(msg) ||
window
.require(&#x27;WAWebMsgActionCapability&#x27;)
.canEditCaption(msg);
if (canEdit) {
const msgEdit &#x3D; await window.WWebJS.editMessage(
msg,
message,
options,
);
return msgEdit.serialize();
}
return null;
},
this.id._serialized,
content,
internalOptions,
);
if (messageEdit) {
return new Message(this.client, messageEdit);
}
@ -758,28 +984,44 @@ class Message extends Base {
return null;
}
const edittedEventMsg &#x3D; await this.client.pupPage.evaluate(async (msgId, editedEventObject) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
if (!msg) return null;
const edittedEventMsg &#x3D; await this.client.pupPage.evaluate(
async (msgId, editedEventObject) &#x3D;&gt; {
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
if (!msg) return null;
const { name, startTimeTs, eventSendOptions } &#x3D; editedEventObject;
const eventOptions &#x3D; {
name: name,
description: eventSendOptions.description,
startTime: startTimeTs,
endTime: eventSendOptions.endTimeTs,
location: eventSendOptions.location,
callType: eventSendOptions.callType,
isEventCanceled: eventSendOptions.isEventCanceled,
};
const { name, startTimeTs, eventSendOptions } &#x3D;
editedEventObject;
const eventOptions &#x3D; {
name: name,
description: eventSendOptions.description,
startTime: startTimeTs,
endTime: eventSendOptions.endTimeTs,
location: eventSendOptions.location,
callType: eventSendOptions.callType,
isEventCanceled: eventSendOptions.isEventCanceled,
};
await window.Store.ScheduledEventMsgUtils.sendEventEditMessage(eventOptions, msg);
const editedMsg &#x3D; window.Store.Msg.get(msg.id._serialized);
return editedMsg?.serialize();
}, this.id._serialized, editedEventObject);
await window
.require(&#x27;WAWebSendEventEditMsgAction&#x27;)
.sendEventEditMessage(eventOptions, msg);
const editedMsg &#x3D; window
.require(&#x27;WAWebCollections&#x27;)
.Msg.get(msg.id._serialized);
return editedMsg?.serialize();
},
this.id._serialized,
editedEventObject,
);
return edittedEventMsg &amp;amp;&amp;amp; new Message(this.client, edittedEventMsg);
}
/**
* Returns the PollVote this poll message
* @returns {Promise&amp;lt;PollVote[]&gt;}
@ -794,24 +1036,36 @@ class Message extends Base {
* @returns {Promise}
*/
async vote(selectedOptions) {
if (this.type !&#x3D; MessageTypes.POLL_CREATION) throw &#x27;Invalid usage! Can only be used with a pollCreation message&#x27;;
if (this.type !&#x3D; MessageTypes.POLL_CREATION)
throw &#x27;Invalid usage! Can only be used with a pollCreation message&#x27;;
await this.client.pupPage.evaluate(async (messageId, votes) &#x3D;&gt; {
if (!messageId) return null;
if (!Array.isArray(votes)) votes &#x3D; [votes];
let localIdSet &#x3D; new Set();
const msg &#x3D;
window.Store.Msg.get(messageId) || (await window.Store.Msg.getMessagesById([messageId]))?.messages?.[0];
if (!msg) return null;
await this.client.pupPage.evaluate(
async (messageId, votes) &#x3D;&gt; {
if (!messageId) return null;
if (!Array.isArray(votes)) votes &#x3D; [votes];
let localIdSet &#x3D; new Set();
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(messageId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([messageId])
)?.messages?.[0];
if (!msg) return null;
msg.pollOptions.forEach(a &#x3D;&gt; {
for (const option of votes) {
if (a.name &#x3D;&#x3D;&#x3D; option) localIdSet.add(a.localId);
}
});
msg.pollOptions.forEach((a) &#x3D;&gt; {
for (const option of votes) {
if (a.name &#x3D;&#x3D;&#x3D; option) localIdSet.add(a.localId);
}
});
await window.Store.PollsSendVote.sendVote(msg, localIdSet);
}, this.id._serialized, selectedOptions);
await window
.require(&#x27;WAWebPollsSendVoteMsgAction&#x27;)
.sendVote(msg, localIdSet);
},
this.id._serialized,
selectedOptions,
);
}
}
@ -826,7 +1080,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/MessageMedia.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -63,7 +63,7 @@ class MessageMedia {
* @type {?string}
*/
this.filename &#x3D; filename;
/**
* Document file size in bytes. Value can be null
* @type {?number}
@ -73,12 +73,12 @@ class MessageMedia {
/**
* Creates a MessageMedia instance from a local file path
* @param {string} filePath
* @param {string} filePath
* @returns {MessageMedia}
*/
static fromFilePath(filePath) {
const b64data &#x3D; fs.readFileSync(filePath, {encoding: &#x27;base64&#x27;});
const mimetype &#x3D; mime.getType(filePath);
const b64data &#x3D; fs.readFileSync(filePath, { encoding: &#x27;base64&#x27; });
const mimetype &#x3D; mime.getType(filePath);
const filename &#x3D; path.basename(filePath);
return new MessageMedia(mimetype, b64data, filename);
@ -100,16 +100,25 @@ class MessageMedia {
let mimetype &#x3D; mime.getType(pUrl.pathname);
if (!mimetype &amp;amp;&amp;amp; !options.unsafeMime)
throw new Error(&#x27;Unable to determine MIME type using URL. Set unsafeMime to true to download it anyway.&#x27;);
throw new Error(
&#x27;Unable to determine MIME type using URL. Set unsafeMime to true to download it anyway.&#x27;,
);
async function fetchData (url, options) {
const reqOptions &#x3D; Object.assign({ headers: { accept: &#x27;image/* video/* text/* audio/*&#x27; } }, options);
async function fetchData(url, options) {
const reqOptions &#x3D; Object.assign(
{ headers: { accept: &#x27;image/* video/* text/* audio/*&#x27; } },
options,
);
const response &#x3D; await fetch(url, reqOptions);
const mime &#x3D; response.headers.get(&#x27;Content-Type&#x27;);
const size &#x3D; response.headers.get(&#x27;Content-Length&#x27;);
const contentDisposition &#x3D; response.headers.get(&#x27;Content-Disposition&#x27;);
const name &#x3D; contentDisposition ? contentDisposition.match(/((?&amp;lt;&#x3D;filename&#x3D;&quot;)(.*)(?&#x3D;&quot;))/) : null;
const contentDisposition &#x3D; response.headers.get(
&#x27;Content-Disposition&#x27;,
);
const name &#x3D; contentDisposition
? contentDisposition.match(/((?&amp;lt;&#x3D;filename&#x3D;&quot;)(.*)(?&#x3D;&quot;))/)
: null;
let data &#x3D; &#x27;&#x27;;
if (response.buffer) {
@ -121,19 +130,23 @@ class MessageMedia {
});
data &#x3D; btoa(data);
}
return { data, mime, name, size };
}
const res &#x3D; options.client
? (await options.client.pupPage.evaluate(fetchData, url, options.reqOptions))
: (await fetchData(url, options.reqOptions));
? await options.client.pupPage.evaluate(
fetchData,
url,
options.reqOptions,
)
: await fetchData(url, options.reqOptions);
const filename &#x3D; options.filename ||
(res.name ? res.name[0] : (pUrl.pathname.split(&#x27;/&#x27;).pop() || &#x27;file&#x27;));
if (!mimetype)
mimetype &#x3D; res.mime;
const filename &#x3D;
options.filename ||
(res.name ? res.name[0] : pUrl.pathname.split(&#x27;/&#x27;).pop() || &#x27;file&#x27;);
if (!mimetype) mimetype &#x3D; res.mime;
return new MessageMedia(mimetype, res.data, filename, res.size || null);
}
@ -150,7 +163,7 @@ module.exports &#x3D; MessageMedia;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Order.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -51,7 +51,9 @@ class Order extends Base {
* @type {Array&amp;lt;Product&gt;}
*/
if (data.products) {
this.products &#x3D; data.products.map(product &#x3D;&gt; new Product(this.client, product));
this.products &#x3D; data.products.map(
(product) &#x3D;&gt; new Product(this.client, product),
);
}
/**
* Order Subtotal
@ -76,11 +78,10 @@ class Order extends Base {
return super._patch(data);
}
}
module.exports &#x3D; Order;</code></pre>
module.exports &#x3D; Order;
</code></pre>
</article>
</div>
</div>
@ -90,7 +91,7 @@ module.exports &#x3D; Order;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Payment.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -85,7 +85,7 @@ class Payment extends Base {
* 9:CANCELLED
* 10:WAITING_FOR_PAYER
* 11:WAITING
*
*
* @type {number}
*/
this.paymentStatus &#x3D; data.paymentStatus;
@ -100,11 +100,14 @@ class Payment extends Base {
* The note sent with the payment
* @type {string}
*/
this.paymentNote &#x3D; !data.paymentNoteMsg ? undefined : data.paymentNoteMsg.body ? data.paymentNoteMsg.body : undefined ;
this.paymentNote &#x3D; !data.paymentNoteMsg
? undefined
: data.paymentNoteMsg.body
? data.paymentNoteMsg.body
: undefined;
return super._patch(data);
}
}
module.exports &#x3D; Payment;
@ -118,7 +121,7 @@ module.exports &#x3D; Payment;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Poll.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: structures/Poll.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -58,7 +58,7 @@ class Poll {
*/
this.pollOptions &#x3D; pollOptions.map((option, index) &#x3D;&gt; ({
name: option.trim(),
localId: index
localId: index,
}));
/**
@ -67,7 +67,7 @@ class Poll {
*/
this.options &#x3D; {
allowMultipleAnswers: options.allowMultipleAnswers &#x3D;&#x3D;&#x3D; true,
messageSecret: options.messageSecret
messageSecret: options.messageSecret,
};
}
}
@ -83,7 +83,7 @@ module.exports &#x3D; Poll;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/PollVote.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: structures/PollVote.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -66,21 +66,24 @@ class PollVote extends Base {
* @type {SelectedPollOption[]}
*/
if (data.selectedOptionLocalIds.length &gt; 0) {
if(data.parentMessage) { // temporary failsafe
if (data.parentMessage) {
// temporary failsafe
this.selectedOptions &#x3D; data.selectedOptionLocalIds.map((e) &#x3D;&gt; ({
name: data.parentMessage.pollOptions.find((x) &#x3D;&gt; x.localId &#x3D;&#x3D;&#x3D; e).name,
localId: e
name: data.parentMessage.pollOptions.find(
(x) &#x3D;&gt; x.localId &#x3D;&#x3D;&#x3D; e,
).name,
localId: e,
}));
} else {
this.selectedOptions &#x3D; data.selectedOptionLocalIds.map((e) &#x3D;&gt; ({
name: undefined,
localId: e
localId: e,
}));
}
} else {
this.selectedOptions &#x3D; [];
}
/**
* Timestamp the option was selected or deselected at
* @type {number}
@ -97,7 +100,7 @@ class PollVote extends Base {
* The poll creation message id
* @type {Object}
*/
this.parentMsgKey &#x3D; data.parentMsgKey;
this.parentMsgKey &#x3D; data.parentMsgKey;
return super._patch(data);
}
@ -114,7 +117,7 @@ module.exports &#x3D; PollVote;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/PrivateChat.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -37,11 +37,10 @@ const Chat &#x3D; require(&#x27;./Chat&#x27;);
* Represents a Private Chat on WhatsApp
* @extends {Chat}
*/
class PrivateChat extends Chat {
class PrivateChat extends Chat {}
}
module.exports &#x3D; PrivateChat;</code></pre>
module.exports &#x3D; PrivateChat;
</code></pre>
</article>
</div>
</div>
@ -51,7 +50,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/PrivateContact.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -37,11 +37,10 @@ const Contact &#x3D; require(&#x27;./Contact&#x27;);
* Represents a Private Contact on WhatsApp
* @extends {Contact}
*/
class PrivateContact extends Contact {
class PrivateContact extends Contact {}
}
module.exports &#x3D; PrivateContact;</code></pre>
module.exports &#x3D; PrivateContact;
</code></pre>
</article>
</div>
</div>
@ -51,7 +50,7 @@ module.exports &#x3D; 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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Product.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -96,7 +96,8 @@ class Product extends Base {
}
}
module.exports &#x3D; Product;</code></pre>
module.exports &#x3D; Product;
</code></pre>
</article>
</div>
</div>
@ -106,7 +107,7 @@ module.exports &#x3D; Product;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/ProductMetadata.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -50,10 +50,10 @@ class ProductMetadata extends Base {
return super._patch(data);
}
}
module.exports &#x3D; ProductMetadata;</code></pre>
module.exports &#x3D; ProductMetadata;
</code></pre>
</article>
</div>
</div>
@ -63,7 +63,7 @@ module.exports &#x3D; ProductMetadata;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/Reaction.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: structures/Reaction.js</title>
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
@ -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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -90,14 +90,13 @@ class Reaction extends Base {
* @type {?number}
*/
this.ack &#x3D; data.ack;
return super._patch(data);
}
}
module.exports &#x3D; Reaction;</code></pre>
module.exports &#x3D; Reaction;
</code></pre>
</article>
</div>
</div>
@ -107,7 +106,7 @@ module.exports &#x3D; Reaction;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: structures/ScheduledEvent.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: structures/ScheduledEvent.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -68,11 +68,13 @@ class ScheduledEvent {
*/
this.eventSendOptions &#x3D; {
description: options.description?.trim(),
endTimeTs: options.endTime ? Math.floor(options.endTime.getTime() / 1000) : null,
endTimeTs: options.endTime
? Math.floor(options.endTime.getTime() / 1000)
: null,
location: options.location?.trim(),
callType: this._validateInputs(&#x27;callType&#x27;, options.callType),
isEventCanceled: options.isEventCanceled ?? false,
messageSecret: options.messageSecret
messageSecret: options.messageSecret,
};
}
@ -84,17 +86,27 @@ class ScheduledEvent {
*/
_validateInputs(propName, propValue) {
if (propName &#x3D;&#x3D;&#x3D; &#x27;name&#x27; &amp;amp;&amp;amp; !propValue) {
throw new class CreateScheduledEventError extends Error {
constructor(m) { super(m); }
}(&#x60;Empty &#x27;${propName}&#x27; parameter value is provided.&#x60;);
throw new (class CreateScheduledEventError extends Error {
constructor(m) {
super(m);
}
})(&#x60;Empty &#x27;${propName}&#x27; parameter value is provided.&#x60;);
}
if (propName &#x3D;&#x3D;&#x3D; &#x27;callType&#x27; &amp;amp;&amp;amp; propValue &amp;amp;&amp;amp; ![&#x27;video&#x27;, &#x27;voice&#x27;, &#x27;none&#x27;].includes(propValue)) {
throw new class CreateScheduledEventError extends Error {
constructor(m) { super(m); }
}(&#x60;Invalid &#x27;${propName}&#x27; parameter value is provided. Valid values are: &#x27;voice&#x27; | &#x27;video&#x27; | &#x27;none&#x27;.&#x60;);
if (
propName &#x3D;&#x3D;&#x3D; &#x27;callType&#x27; &amp;amp;&amp;amp;
propValue &amp;amp;&amp;amp;
![&#x27;video&#x27;, &#x27;voice&#x27;, &#x27;none&#x27;].includes(propValue)
) {
throw new (class CreateScheduledEventError extends Error {
constructor(m) {
super(m);
}
})(
&#x60;Invalid &#x27;${propName}&#x27; parameter value is provided. Valid values are: &#x27;voice&#x27; | &#x27;video&#x27; | &#x27;none&#x27;.&#x60;,
);
}
return propValue;
}
}
@ -110,7 +122,7 @@ module.exports &#x3D; ScheduledEvent;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: util/Constants.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -36,7 +36,7 @@ exports.WhatsWebURL &#x3D; &#x27;https://web.whatsapp.com/&#x27;;
exports.DefaultOptions &#x3D; {
puppeteer: {
headless: true,
defaultViewport: null
defaultViewport: null,
},
webVersion: &#x27;2.3000.1017054665&#x27;,
webVersionCache: {
@ -46,7 +46,8 @@ exports.DefaultOptions &#x3D; {
qrMaxRetries: 0,
takeoverOnConflict: false,
takeoverTimeoutMs: 0,
userAgent: &#x27;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36&#x27;,
userAgent:
&#x27;Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36&#x27;,
ffmpegPath: &#x27;ffmpeg&#x27;,
bypassCSP: false,
proxyAuthentication: undefined,
@ -65,7 +66,7 @@ exports.DefaultOptions &#x3D; {
exports.Status &#x3D; {
INITIALIZING: 0,
AUTHENTICATING: 1,
READY: 3
READY: 3,
};
/**
@ -81,6 +82,7 @@ exports.Events &#x3D; {
CHAT_ARCHIVED: &#x27;chat_archived&#x27;,
MESSAGE_RECEIVED: &#x27;message&#x27;,
MESSAGE_CIPHERTEXT: &#x27;message_ciphertext&#x27;,
MESSAGE_CIPHERTEXT_FAILED: &#x27;message_ciphertext_failed&#x27;,
MESSAGE_CREATE: &#x27;message_create&#x27;,
MESSAGE_REVOKED_EVERYONE: &#x27;message_revoke_everyone&#x27;,
MESSAGE_REVOKED_ME: &#x27;message_revoke_me&#x27;,
@ -103,7 +105,7 @@ exports.Events &#x3D; {
BATTERY_CHANGED: &#x27;change_battery&#x27;,
INCOMING_CALL: &#x27;call&#x27;,
REMOTE_SESSION_SAVED: &#x27;remote_session_saved&#x27;,
VOTE_UPDATE: &#x27;vote_update&#x27;
VOTE_UPDATE: &#x27;vote_update&#x27;,
};
/**
@ -179,7 +181,7 @@ exports.GroupNotificationTypes &#x3D; {
exports.ChatTypes &#x3D; {
SOLO: &#x27;solo&#x27;,
GROUP: &#x27;group&#x27;,
UNKNOWN: &#x27;unknown&#x27;
UNKNOWN: &#x27;unknown&#x27;,
};
/**
@ -199,7 +201,7 @@ exports.WAState &#x3D; {
TOS_BLOCK: &#x27;TOS_BLOCK&#x27;,
UNLAUNCHED: &#x27;UNLAUNCHED&#x27;,
UNPAIRED: &#x27;UNPAIRED&#x27;,
UNPAIRED_IDLE: &#x27;UNPAIRED_IDLE&#x27;
UNPAIRED_IDLE: &#x27;UNPAIRED_IDLE&#x27;,
};
/**
@ -225,7 +227,7 @@ exports.MessageAck &#x3D; {
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

File diff suppressed because it is too large Load diff

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: util/InterfaceController.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -35,7 +35,6 @@
* Interface Controller
*/
class InterfaceController {
constructor(props) {
this.pupPage &#x3D; props.pupPage;
}
@ -46,8 +45,12 @@ class InterfaceController {
*/
async openChatWindow(chatId) {
return await this.pupPage.evaluate(async (chatId) &#x3D;&gt; {
const chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
return await window.Store.Cmd.openChatBottom({&#x27;chat&#x27;:chat});
const chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
return await window
.require(&#x27;WAWebCmd&#x27;)
.Cmd.openChatBottom({ chat: chat });
}, chatId);
}
@ -56,9 +59,11 @@ class InterfaceController {
* @param {string} chatId ID of the chat drawer that will be opened
*/
async openChatDrawer(chatId) {
await this.pupPage.evaluate(async chatId &#x3D;&gt; {
let chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
await window.Store.Cmd.openDrawerMid(chat);
await this.pupPage.evaluate(async (chatId) &#x3D;&gt; {
let chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
await window.require(&#x27;WAWebCmd&#x27;).Cmd.openDrawerMid(chat);
}, chatId);
}
@ -67,9 +72,11 @@ class InterfaceController {
* @param {string} chatId ID of the chat search that will be opened
*/
async openChatSearch(chatId) {
await this.pupPage.evaluate(async chatId &#x3D;&gt; {
let chat &#x3D; await window.WWebJS.getChat(chatId, { getAsModel: false });
await window.Store.Cmd.chatSearch(chat);
await this.pupPage.evaluate(async (chatId) &#x3D;&gt; {
let chat &#x3D; await window.WWebJS.getChat(chatId, {
getAsModel: false,
});
await window.require(&#x27;WAWebCmd&#x27;).Cmd.chatSearch(chat);
}, chatId);
}
@ -79,10 +86,24 @@ class InterfaceController {
*/
async openChatWindowAt(msgId) {
await this.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
const chat &#x3D; window.Store.Chat.get(msg.id.remote) ?? await window.Store.Chat.find(msg.id.remote);
const searchContext &#x3D; await window.Store.SearchContext.getSearchContext(chat, msg.id);
await window.Store.Cmd.openChatAt({ chat: chat, msgContext: searchContext });
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
const chat &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Chat.get(msg.id.remote) ??
(await window
.require(&#x27;WAWebCollections&#x27;)
.Chat.find(msg.id.remote));
const searchContext &#x3D; await window
.require(&#x27;WAWebChatMessageSearch&#x27;)
.getSearchContext(chat, msg.id);
await window
.require(&#x27;WAWebCmd&#x27;)
.Cmd.openChatAt({ chat: chat, msgContext: searchContext });
}, msgId);
}
@ -91,9 +112,15 @@ class InterfaceController {
* @param {string} msgId ID of the message drawer that will be opened
*/
async openMessageDrawer(msgId) {
await this.pupPage.evaluate(async msgId &#x3D;&gt; {
const msg &#x3D; window.Store.Msg.get(msgId) || (await window.Store.Msg.getMessagesById([msgId]))?.messages?.[0];
await window.Store.Cmd.msgInfoDrawer(msg);
await this.pupPage.evaluate(async (msgId) &#x3D;&gt; {
const msg &#x3D;
window.require(&#x27;WAWebCollections&#x27;).Msg.get(msgId) ||
(
await window
.require(&#x27;WAWebCollections&#x27;)
.Msg.getMessagesById([msgId])
)?.messages?.[0];
await window.require(&#x27;WAWebCmd&#x27;).Cmd.msgInfoDrawer(msg);
}, msgId);
}
@ -102,7 +129,9 @@ class InterfaceController {
*/
async closeRightDrawer() {
await this.pupPage.evaluate(async () &#x3D;&gt; {
await window.Store.DrawerManager.closeDrawerRight();
await window
.require(&#x27;WAWebDrawerManager&#x27;)
.DrawerManager.closeDrawerRight();
});
}
@ -111,8 +140,11 @@ class InterfaceController {
*/
async getFeatures() {
return await this.pupPage.evaluate(() &#x3D;&gt; {
if(!window.Store.Features) throw new Error(&#x27;This version of Whatsapp Web does not support features&#x27;);
return window.Store.Features.F;
if (!window.require(&#x27;WAWebCollections&#x27;).Features)
throw new Error(
&#x27;This version of Whatsapp Web does not support features&#x27;,
);
return window.require(&#x27;WAWebCollections&#x27;).Features.F;
});
}
@ -122,8 +154,13 @@ class InterfaceController {
*/
async checkFeatureStatus(feature) {
return await this.pupPage.evaluate((feature) &#x3D;&gt; {
if(!window.Store.Features) throw new Error(&#x27;This version of Whatsapp Web does not support features&#x27;);
return window.Store.Features.supportsFeature(feature);
if (!window.require(&#x27;WAWebCollections&#x27;).Features)
throw new Error(
&#x27;This version of Whatsapp Web does not support features&#x27;,
);
return window
.require(&#x27;WAWebCollections&#x27;)
.Features.supportsFeature(feature);
}, feature);
}
@ -133,9 +170,14 @@ class InterfaceController {
*/
async enableFeatures(features) {
await this.pupPage.evaluate((features) &#x3D;&gt; {
if(!window.Store.Features) throw new Error(&#x27;This version of Whatsapp Web does not support features&#x27;);
if (!window.require(&#x27;WAWebCollections&#x27;).Features)
throw new Error(
&#x27;This version of Whatsapp Web does not support features&#x27;,
);
for (const feature in features) {
window.Store.Features.setFeature(features[feature], true);
window
.require(&#x27;WAWebCollections&#x27;)
.Features.setFeature(features[feature], true);
}
}, features);
}
@ -146,9 +188,14 @@ class InterfaceController {
*/
async disableFeatures(features) {
await this.pupPage.evaluate((features) &#x3D;&gt; {
if(!window.Store.Features) throw new Error(&#x27;This version of Whatsapp Web does not support features&#x27;);
if (!window.require(&#x27;WAWebCollections&#x27;).Features)
throw new Error(
&#x27;This version of Whatsapp Web does not support features&#x27;,
);
for (const feature in features) {
window.Store.Features.setFeature(features[feature], false);
window
.require(&#x27;WAWebCollections&#x27;)
.Features.setFeature(features[feature], false);
}
}, features);
}
@ -165,7 +212,7 @@ module.exports &#x3D; InterfaceController;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: util/Puppeteer.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: util/Puppeteer.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -51,7 +51,7 @@ async function exposeFunctionIfAbsent(page, name, fn) {
await page.exposeFunction(name, fn);
}
module.exports &#x3D; {exposeFunctionIfAbsent};
module.exports &#x3D; { exposeFunctionIfAbsent };
</code></pre>
</article>
</div>
@ -62,7 +62,7 @@ module.exports &#x3D; {exposeFunctionIfAbsent};
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

49
docs/util_Util.js.html generated
View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: util/Util.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; 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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -44,15 +44,20 @@ const has &#x3D; (o, k) &#x3D;&gt; Object.prototype.hasOwnProperty.call(o, k);
*/
class Util {
constructor() {
throw new Error(&#x60;The ${this.constructor.name} class may not be instantiated.&#x60;);
throw new Error(
&#x60;The ${this.constructor.name} class may not be instantiated.&#x60;,
);
}
static generateHash(length) {
var result &#x3D; &#x27;&#x27;;
var characters &#x3D; &#x27;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&#x27;;
var characters &#x3D;
&#x27;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&#x27;;
var charactersLength &#x3D; characters.length;
for (var i &#x3D; 0; i &amp;lt; length; i++) {
result +&#x3D; characters.charAt(Math.floor(Math.random() * charactersLength));
result +&#x3D; characters.charAt(
Math.floor(Math.random() * charactersLength),
);
}
return result;
}
@ -80,7 +85,7 @@ class Util {
/**
* Formats a image to webp
* @param {MessageMedia} media
*
*
* @returns {Promise&amp;lt;MessageMedia&gt;} media in webp format
*/
static async formatImageToWebpSticker(media, pupPage) {
@ -99,7 +104,7 @@ class Util {
/**
* Formats a video to webp
* @param {MessageMedia} media
*
*
* @returns {Promise&amp;lt;MessageMedia&gt;} media in webp format
*/
static async formatVideoToWebpSticker(media) {
@ -110,13 +115,13 @@ class Util {
const tempFile &#x3D; path.join(
tmpdir(),
&#x60;${Crypto.randomBytes(6).readUIntLE(0, 6).toString(36)}.webp&#x60;
&#x60;${Crypto.randomBytes(6).readUIntLE(0, 6).toString(36)}.webp&#x60;,
);
const stream &#x3D; new (require(&#x27;stream&#x27;).Readable)();
const buffer &#x3D; Buffer.from(
media.data.replace(&#x60;data:${media.mimetype};base64,&#x60;, &#x27;&#x27;),
&#x27;base64&#x27;
&#x27;base64&#x27;,
);
stream.push(buffer);
stream.push(null);
@ -131,7 +136,7 @@ class Util {
&#x27;libwebp&#x27;,
&#x27;-vf&#x27;,
// eslint-disable-next-line no-useless-escape
&#x27;scale&#x3D;\&#x27;iw*min(300/iw\,300/ih)\&#x27;:\&#x27;ih*min(300/iw\,300/ih)\&#x27;,format&#x3D;rgba,pad&#x3D;300:300:\&#x27;(300-iw)/2\&#x27;:\&#x27;(300-ih)/2\&#x27;:\&#x27;#00000000\&#x27;,setsar&#x3D;1,fps&#x3D;10&#x27;,
&quot;scale&#x3D;&#x27;iw*min(300/iw\,300/ih)&#x27;:&#x27;ih*min(300/iw\,300/ih)&#x27;,format&#x3D;rgba,pad&#x3D;300:300:&#x27;(300-iw)/2&#x27;:&#x27;(300-ih)/2&#x27;:&#x27;#00000000&#x27;,setsar&#x3D;1,fps&#x3D;10&quot;,
&#x27;-loop&#x27;,
&#x27;0&#x27;,
&#x27;-ss&#x27;,
@ -163,8 +168,8 @@ class Util {
/**
* Sticker metadata.
* @typedef {Object} StickerMetadata
* @property {string} [name]
* @property {string} [author]
* @property {string} [name]
* @property {string} [author]
* @property {string[]} [categories]
*/
@ -172,7 +177,7 @@ class Util {
* Formats a media to webp
* @param {MessageMedia} media
* @param {StickerMetadata} metadata
*
*
* @returns {Promise&amp;lt;MessageMedia&gt;} media in webp format
*/
static async formatToWebpSticker(media, metadata, pupPage) {
@ -182,8 +187,7 @@ class Util {
webpMedia &#x3D; await this.formatImageToWebpSticker(media, pupPage);
else if (media.mimetype.includes(&#x27;video&#x27;))
webpMedia &#x3D; await this.formatVideoToWebpSticker(media);
else
throw new Error(&#x27;Invalid media format&#x27;);
else throw new Error(&#x27;Invalid media format&#x27;);
if (metadata.name || metadata.author) {
const img &#x3D; new webp.Image();
@ -192,8 +196,17 @@ class Util {
const packname &#x3D; metadata.name;
const author &#x3D; metadata.author;
const categories &#x3D; metadata.categories || [&#x27;&#x27;];
const json &#x3D; { &#x27;sticker-pack-id&#x27;: stickerPackId, &#x27;sticker-pack-name&#x27;: packname, &#x27;sticker-pack-publisher&#x27;: author, &#x27;emojis&#x27;: categories };
let exifAttr &#x3D; Buffer.from([0x49, 0x49, 0x2A, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x57, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00]);
const json &#x3D; {
&#x27;sticker-pack-id&#x27;: stickerPackId,
&#x27;sticker-pack-name&#x27;: packname,
&#x27;sticker-pack-publisher&#x27;: author,
emojis: categories,
};
let exifAttr &#x3D; 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 &#x3D; Buffer.from(JSON.stringify(json), &#x27;utf8&#x27;);
let exif &#x3D; Buffer.concat([exifAttr, jsonBuffer]);
exif.writeUIntLE(jsonBuffer.length, 14, 4);
@ -225,7 +238,7 @@ module.exports &#x3D; Util;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: webCache/LocalWebCache.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: webCache/LocalWebCache.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -37,7 +37,7 @@ const { WebCache, VersionResolveError } &#x3D; require(&#x27;./WebCache&#x27;);
/**
* LocalWebCache - Fetches a WhatsApp Web version from a local file store
* @param {object} options - options
* @param {string} options.path - Path to the directory where cached versions are saved, default is: &quot;./.wwebjs_cache/&quot;
* @param {string} options.path - Path to the directory where cached versions are saved, default is: &quot;./.wwebjs_cache/&quot;
* @param {boolean} options.strict - If true, will throw an error if the requested version can&#x27;t be fetched. If false, will resolve to the latest version.
*/
class LocalWebCache extends WebCache {
@ -50,12 +50,14 @@ class LocalWebCache extends WebCache {
async resolve(version) {
const filePath &#x3D; path.join(this.path, &#x60;${version}.html&#x60;);
try {
return fs.readFileSync(filePath, &#x27;utf-8&#x27;);
}
catch (err) {
if (this.strict) throw new VersionResolveError(&#x60;Couldn&#x27;t load version ${version} from the cache&#x60;);
} catch (ignoredError) {
if (this.strict)
throw new VersionResolveError(
&#x60;Couldn&#x27;t load version ${version} from the cache&#x60;,
);
return null;
}
}
@ -79,7 +81,7 @@ module.exports &#x3D; LocalWebCache;
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: webCache/RemoteWebCache.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: webCache/RemoteWebCache.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -42,7 +42,10 @@ class RemoteWebCache extends WebCache {
constructor(options &#x3D; {}) {
super();
if (!options.remotePath) throw new Error(&#x27;webVersionCache.remotePath is required when using the remote cache&#x27;);
if (!options.remotePath)
throw new Error(
&#x27;webVersionCache.remotePath is required when using the remote cache&#x27;,
);
this.remotePath &#x3D; options.remotePath;
this.strict &#x3D; options.strict || false;
}
@ -59,8 +62,11 @@ class RemoteWebCache extends WebCache {
console.error(&#x60;Error fetching version ${version} from remote&#x60;, err);
}
if (this.strict) throw new VersionResolveError(&#x60;Couldn&#x27;t load version ${version} from the archive&#x60;);
return null;
if (this.strict)
throw new VersionResolveError(
&#x60;Couldn&#x27;t load version ${version} from the archive&#x60;,
);
return null;
}
async persist() {
@ -68,7 +74,8 @@ class RemoteWebCache extends WebCache {
}
}
module.exports &#x3D; RemoteWebCache;</code></pre>
module.exports &#x3D; RemoteWebCache;
</code></pre>
</article>
</div>
</div>
@ -78,7 +85,7 @@ module.exports &#x3D; RemoteWebCache;</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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

View file

@ -4,7 +4,7 @@
<head>
<meta name="generator" content="JSDoc 3.6.11">
<meta charset="utf-8">
<title>whatsapp-web.js 1.34.6 &raquo; Source: webCache/WebCache.js</title>
<title>whatsapp-web.js 1.34.7 &raquo; Source: webCache/WebCache.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>34.<wbr>6</a>
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>34.<wbr>7</a>
</div>
</div>
</nav>
@ -33,16 +33,20 @@
* Default implementation of a web version cache that does nothing.
*/
class WebCache {
async resolve() { return null; }
async persist() { }
async resolve() {
return null;
}
async persist() {}
}
class VersionResolveError extends Error { }
class VersionResolveError extends Error {}
module.exports &#x3D; {
WebCache,
VersionResolveError
};</code></pre>
VersionResolveError,
};
</code></pre>
</article>
</div>
</div>
@ -52,7 +56,7 @@ module.exports &#x3D; {
<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.11 on January 30, 2026.
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.11 on April 24, 2026.
</p>
</div>
</footer>

24
package-lock.json generated
View file

@ -1,12 +1,12 @@
{
"name": "whatsapp-web.js",
"version": "1.34.6",
"version": "1.34.7",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "whatsapp-web.js",
"version": "1.34.6",
"version": "1.34.7",
"license": "Apache-2.0",
"dependencies": {
"fluent-ffmpeg": "2.1.3",
@ -925,7 +925,6 @@
"integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==",
"devOptional": true,
"license": "MIT",
"peer": true,
"dependencies": {
"undici-types": "~6.21.0"
}
@ -980,7 +979,6 @@
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@ -1177,7 +1175,6 @@
"resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz",
"integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==",
"license": "Apache-2.0",
"peer": true,
"peerDependencies": {
"bare-abort-controller": "*"
},
@ -1409,7 +1406,6 @@
"integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.3",
@ -1753,7 +1749,6 @@
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz",
"integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"env-paths": "^2.2.1",
"import-fresh": "^3.3.0",
@ -1932,8 +1927,7 @@
"version": "0.0.1581282",
"resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1581282.tgz",
"integrity": "sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==",
"license": "BSD-3-Clause",
"peer": true
"license": "BSD-3-Clause"
},
"node_modules/diff": {
"version": "7.0.0",
@ -2102,6 +2096,7 @@
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=0.12"
},
@ -2238,7 +2233,6 @@
"integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@ -2299,7 +2293,6 @@
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@ -3749,6 +3742,7 @@
"integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"uc.micro": "^2.0.0"
}
@ -4174,7 +4168,8 @@
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
"dev": true,
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/meow": {
"version": "13.2.0",
@ -4722,7 +4717,6 @@
"integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@ -4830,6 +4824,7 @@
"integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=6"
}
@ -5480,7 +5475,8 @@
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
"integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
"dev": true,
"license": "MIT"
"license": "MIT",
"peer": true
},
"node_modules/uglify-js": {
"version": "3.19.3",

View file

@ -1,6 +1,6 @@
{
"name": "whatsapp-web.js",
"version": "1.34.6",
"version": "1.34.7",
"description": "A Node.js library for interacting with WhatsApp Web",
"main": "./index.js",
"typings": "./index.d.ts",