Compare commits

..
26 Commits
Author SHA1 Message Date
devlikepro c4660bc824 [core] 2024.11.4
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
2024-11-10 12:48:54 +07:00
devlikepro 6053d38e4d [core] Handle WEBJS 429 error
fix #633
2024-11-10 12:48:54 +07:00
devlikepro 3865254a1c [core] NOWEB - get contacts list for status from store if not provided 2024-11-10 12:48:54 +07:00
devlikepro 65b61c09cb [core] Fix 10K status problem
fix #390 fix #413
2024-11-10 12:48:54 +07:00
devlikepro cce1618117 [core] add mongo auth by default 2024-11-08 18:14:35 +07:00
devlikepro 8b4b49a34b [core] waha-plus image 2024-11-08 17:19:50 +07:00
devlikepro 048c5dc2ec [core] send video back
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
fix #629
2024-11-07 11:43:42 +07:00
devlikepro eb218da8fb [core] linkPreview: false|true
fix #596 #598
2024-11-06 15:46:55 +07:00
devlikepro 65942a4ed4 [core] 2024.11.3 2024-11-06 15:46:55 +07:00
devlikepro 1444155c09 [core] Use WAL for sqlite3
fix #628
2024-11-06 15:46:55 +07:00
devlikepro 84ac1d8cfc [core] 2024.11.2
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-11-05 18:39:40 +07:00
devlikepro 440e1e879a [core] WEBJS - fix injection 2024-11-05 18:39:40 +07:00
devlikepro bcecf793d4 [core] WEBJS - only issue WORKING on READY event 2024-11-05 18:39:40 +07:00
devlikepro 16c0d827e1 [core] Add some fonts 2024-11-05 18:39:40 +07:00
devlikepro 94f16a9583 [core] WEBJS - --disable-software-rasterizer 2024-11-05 18:39:40 +07:00
devlikepro 4bdac3bbc2 [core] use sessions folder (no dot) so it's visible via ls 2024-11-05 18:39:40 +07:00
devlikepro 2bc4a59aaf [core] 2024.11.1
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-11-04 12:08:16 +07:00
devlikepro cf886de5ce [core] Add status for WEBJS 2024-11-04 12:08:15 +07:00
devlikepro 9969966ac6 [core] Add labels CRUD
fix #607
2024-11-04 12:08:15 +07:00
devlikepro fb809338e3 [core] 2024.10.14
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-10-31 16:45:38 +07:00
devlikepro c6284eb994 [core] fix /api/messages
fix #622
2024-10-31 16:45:15 +07:00
devlikepro 454bda4c82 [core] fix /api/messages
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
fix #620
2024-10-31 13:07:30 +07:00
devlikepro 26e21441a0 [core] 2024.10.13 2024-10-31 13:04:25 +07:00
devlikepro 2edef0166e [core] add waves on voice back
fix #621
2024-10-31 13:03:46 +07:00
devlikepro 05cb89779b [core] 2024.10.12
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-10-30 16:56:44 +07:00
devlikepro c0b2524952 [core] remove single process 2024-10-30 16:56:30 +07:00
19 changed files with 519 additions and 61 deletions

No files matched your search

+1
View File
@@ -1,5 +1,6 @@
Dockerfile
.*sessions
sessions
files
venv
.wwebjs_auth
+1 -1
View File
@@ -172,5 +172,5 @@ WHATSAPP_FILES_FOLDER=/app/.media
#
# MongoDB Configuration
# https://waha.devlike.pro/docs/how-to/storages/#sessions---mongodb
#WHATSAPP_SESSIONS_MONGO_URL=mongodb://mongodb:27017
#WHATSAPP_SESSIONS_MONGO_URL=mongodb://mongouser:mongopassword@mongodb:27017
#
+1
View File
@@ -3,6 +3,7 @@
.yarn
example.ts
.*sessions
sessions
.secrets
.minio
.media
+14 -1
View File
@@ -60,7 +60,20 @@ RUN if [ "$USE_BROWSER" = "chromium" ] || [ "$USE_BROWSER" = "chrome" ]; then \
# Install fonts if using either chromium or chrome
RUN if [ "$USE_BROWSER" = "chromium" ] || [ "$USE_BROWSER" = "chrome" ]; then \
apt-get update \
&& apt-get install -y fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \
&& apt-get install -y \
fontconfig \
fonts-freefont-ttf \
fonts-gfs-neohellenic \
fonts-indic \
fonts-ipafont-gothic \
fonts-kacst \
fonts-liberation \
fonts-noto-cjk \
fonts-noto-color-emoji \
fonts-roboto \
fonts-thai-tlwg \
fonts-wqy-zenhei \
fonts-open-sans \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*; \
fi
+7 -5
View File
@@ -4,7 +4,7 @@ services:
restart: always
# https://waha.devlike.pro/docs/how-to/engines/#docker-images
# https://portal.devlike.pro/docker-image
image: devlikeapro/waha-plus:latest
image: devlikeapro/waha-plus
# WAHA Core
# image: devlikeapro/waha:latest
@@ -13,7 +13,7 @@ services:
volumes:
# Store sessions in the .sessions folder (comment it if you're using MongoDB)
- './.sessions:/app/.sessions'
- './sessions:/app/.sessions'
# Save media files
# https://waha.devlike.pro/docs/how-to/storages/#save-media-files-between-the-container-restarts
@@ -24,7 +24,7 @@ services:
# NOTE: Only if you're using MongoDB
# https://waha.devlike.pro/docs/how-to/storages/#sessions---mongodb
# Comment this block if you're using MongoDB
# Uncomment this block if you're using MongoDB
# mongodb:
# image: mongo
# container_name: mongodb
@@ -32,11 +32,13 @@ services:
# - '127.0.0.1:27017:27017/tcp'
# volumes:
# - mongodb_data:/data/db
# restart: always
# environment:
# - MONGO_INITDB_ROOT_USERNAME=mongouser
# - MONGO_INITDB_ROOT_PASSWORD=mongopassword
# NOTE: Only if you're using S3 to save media files
# https://waha.devlike.pro/docs/how-to/storages/#media---s3
# Comment this block if you're using AWS S3
# Uncomment this block if you're using AWS S3
# minio:
# image: quay.io/minio/minio
# container_name: minio
+2
View File
@@ -6,6 +6,7 @@ import {
Put,
Query,
UsePipes,
ValidationPipe,
} from '@nestjs/common';
import { ApiOperation, ApiSecurity, ApiTags } from '@nestjs/swagger';
import { WAHAValidationPipe } from '@waha/nestjs/pipes/WAHAValidationPipe';
@@ -172,6 +173,7 @@ export class ChattingController {
@Get('/messages')
@ApiOperation({ summary: 'Get messages in a chat' })
@UsePipes(new ValidationPipe({ transform: true, whitelist: true }))
async getMessages(
@Query() query: GetMessageQuery,
@Query() filter: GetChatMessagesFilter,
+91 -2
View File
@@ -1,4 +1,16 @@
import { Body, Controller, Get, Param, Put } from '@nestjs/common';
import {
Body,
Controller,
Delete,
Get,
NotFoundException,
Param,
Post,
Put,
UnprocessableEntityException,
UsePipes,
ValidationPipe,
} from '@nestjs/common';
import { ApiOperation, ApiSecurity, ApiTags } from '@nestjs/swagger';
import { WhatsappSession } from '@waha/core/abc/session.abc';
import { ChatIdApiParam } from '@waha/nestjs/params/ChatIdApiParam';
@@ -6,7 +18,12 @@ import {
SessionApiParam,
WorkingSessionParam,
} from '@waha/nestjs/params/SessionApiParam';
import { Label, SetLabelsRequest } from '@waha/structures/labels.dto';
import {
Label,
LabelBody,
SetLabelsRequest,
} from '@waha/structures/labels.dto';
import * as lodash from 'lodash';
import { SessionManager } from '../core/abc/manager.abc';
@@ -23,6 +40,78 @@ export class LabelsController {
return session.getLabels();
}
@Post('/')
@SessionApiParam
@ApiOperation({ summary: 'Create a new label' })
@UsePipes(new ValidationPipe({ transform: true, whitelist: true }))
async create(
@WorkingSessionParam session: WhatsappSession,
@Body() body: LabelBody,
): Promise<Label> {
const labelDto = body.toDTO();
const labels = await session.getLabels();
if (labels.length >= 20) {
throw new UnprocessableEntityException('Maximum 20 labels allowed');
}
const labelByName = lodash.find(labels, { name: labelDto.name });
if (labelByName) {
throw new UnprocessableEntityException(
`Label with '${labelByName.name}' already exists, id: ${labelByName.id}`,
);
}
return session.createLabel(labelDto);
}
@Put('/:labelId')
@SessionApiParam
@ApiOperation({ summary: 'Update a label' })
@UsePipes(new ValidationPipe({ transform: true, whitelist: true }))
async update(
@WorkingSessionParam session: WhatsappSession,
@Param('labelId') labelId: string,
@Body() body: LabelBody,
): Promise<Label> {
const label = await session.getLabel(labelId);
if (!label) {
throw new NotFoundException('Label not found');
}
const labelDto = body.toDTO();
const labels = await session.getLabels();
const labelByName = lodash.find(labels, { name: labelDto.name });
if (labelByName) {
throw new UnprocessableEntityException(
`Label with '${labelByName.name}' already exists, id: ${labelByName.id}`,
);
}
label.name = labelDto.name;
label.color = labelDto.color;
label.colorHex = Label.toHex(label.color);
await session.updateLabel(label);
return label;
}
@Delete('/:labelId')
@SessionApiParam
@ApiOperation({ summary: 'Delete a label' })
@UsePipes(new ValidationPipe({ transform: true, whitelist: true }))
async delete(
@WorkingSessionParam session: WhatsappSession,
@Param('labelId') labelId: string,
): Promise<any> {
const label = await session.getLabel(labelId);
if (!label) {
throw new NotFoundException('Label not found');
}
await session.deleteLabel(label);
return { result: true };
}
@Get('/chats/:chatId')
@SessionApiParam
@ChatIdApiParam
+22 -3
View File
@@ -9,12 +9,13 @@ import {
GetChatMessagesQuery,
} from '@waha/structures/chats.dto';
import { SendButtonsRequest } from '@waha/structures/chatting.buttons.dto';
import { Label, LabelID } from '@waha/structures/labels.dto';
import { Label, LabelDTO, LabelID } from '@waha/structures/labels.dto';
import { PaginationParams } from '@waha/structures/pagination.dto';
import { WAMessage } from '@waha/structures/responses.dto';
import { LoggerBuilder } from '@waha/utils/logging';
import { EventEmitter } from 'events';
import * as fs from 'fs';
import * as lodash from 'lodash';
import { Logger } from 'pino';
import { MessageId } from 'whatsapp-web.js';
@@ -66,7 +67,6 @@ import { NotImplementedByEngineError } from '../exceptions';
import { IMediaManager } from '../media/IMediaManager';
import { QR } from '../QR';
import { DataStore } from './DataStore';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const qrcode = require('qrcode-terminal');
@@ -172,6 +172,9 @@ export abstract class WhatsappSession {
'--disable-accelerated-2d-canvas',
'--disable-application-cache',
'--disable-background-networking',
// DO NOT disable software rasterizer, it will break the video
// https://github.com/devlikeapro/waha/issues/629
// '--disable-software-rasterizer',
'--disable-cache',
'--disable-client-side-phishing-detection',
'--disable-component-update',
@@ -204,7 +207,7 @@ export abstract class WhatsappSession {
'--password-store=basic',
'--renderer-process-limit=2', // https://superuser.com/questions/654565/how-to-run-google-chrome-in-a-single-process
'--safebrowsing-disable-auto-update',
'--single-process',
// '--single-process',
'--use-mock-keychain',
'--window-size=1280,720',
];
@@ -387,11 +390,27 @@ export abstract class WhatsappSession {
/**
* Labels methods
*/
public async getLabel(labelId: string): Promise<Label | undefined> {
const labels = await this.getLabels();
return lodash.find(labels, { id: labelId });
}
public getLabels(): Promise<Label[]> {
throw new NotImplementedByEngineError();
}
public async createLabel(label: LabelDTO): Promise<Label> {
throw new NotImplementedByEngineError();
}
public async updateLabel(label: Label): Promise<Label> {
throw new NotImplementedByEngineError();
}
public async deleteLabel(label: Label): Promise<void> {
throw new NotImplementedByEngineError();
}
public getChatsByLabelId(labelId: string) {
throw new NotImplementedByEngineError();
}
+96 -13
View File
@@ -21,7 +21,10 @@ import makeWASocket, {
WAMessageKey,
} from '@adiwajshing/baileys';
import { WACallEvent } from '@adiwajshing/baileys/lib/Types/Call';
import { Label as NOWEBLabel } from '@adiwajshing/baileys/lib/Types/Label';
import {
Label as NOWEBLabel,
LabelActionBody,
} from '@adiwajshing/baileys/lib/Types/Label';
import { LabelAssociationType } from '@adiwajshing/baileys/lib/Types/LabelAssociation';
import { isLidUser } from '@adiwajshing/baileys/lib/WABinary/jid-utils';
import { Logger as BaileysLogger } from '@adiwajshing/baileys/node_modules/pino';
@@ -49,6 +52,7 @@ import { BinaryFile, RemoteFile } from '@waha/structures/files.dto';
import {
Label,
LabelChatAssociation,
LabelDTO,
LabelID,
} from '@waha/structures/labels.dto';
import { ReplyToMessage } from '@waha/structures/message.dto';
@@ -617,6 +621,7 @@ export class WhatsappSessionNoWebCore extends WhatsappSession {
const message = {
text: request.text,
mentions: request.mentions?.map(toJID),
linkPreview: this.getLinkPreview(request),
};
const options = await this.getMessageOptions(request);
return this.sock.sendMessage(chatId, message, options);
@@ -875,6 +880,52 @@ export class WhatsappSessionNoWebCore extends WhatsappSession {
return labels.map(this.toLabel);
}
public async createLabel(label: LabelDTO): Promise<Label> {
const labels = await this.store.getLabels();
const highestLabelId = lodash.max(
labels.map((label) => parseInt(label.id)),
);
const labelId = highestLabelId ? highestLabelId + 1 : 1;
const labelAction: LabelActionBody = {
id: labelId.toString(),
name: label.name,
color: label.color,
deleted: false,
predefinedId: undefined,
};
await this.sock.addLabel(undefined, labelAction);
return {
id: labelId.toString(),
name: label.name,
color: label.color,
colorHex: Label.toHex(label.color),
};
}
public async updateLabel(label: Label): Promise<Label> {
const labelAction: LabelActionBody = {
id: label.id,
name: label.name,
color: label.color,
deleted: false,
predefinedId: undefined,
};
await this.sock.addLabel(undefined, labelAction);
return label;
}
public async deleteLabel(label: Label): Promise<void> {
const labelAction: LabelActionBody = {
id: label.id,
name: label.name,
color: label.color,
deleted: true,
predefinedId: undefined,
};
await this.sock.addLabel(undefined, labelAction);
}
public async getChatsByLabelId(labelId: string) {
const chats = await this.store.getChatsByLabelId(labelId);
// Remove unreadCount, it's not ready yet
@@ -1050,38 +1101,54 @@ export class WhatsappSessionNoWebCore extends WhatsappSession {
/**
* Status methods
*/
public sendTextStatus(status: TextStatus) {
public async sendTextStatus(status: TextStatus) {
const message = { text: status.text };
const JIDs = status.contacts.map(toJID);
this.upsertMeInJIDs(JIDs);
const jids = await this.prepareJidsForStatus(status.contacts);
const options = {
backgroundColor: status.backgroundColor,
font: status.font,
statusJidList: JIDs,
statusJidList: jids,
};
return this.sock.sendMessage(BROADCAST_ID, message, options);
return await this.sock.sendMessage(BROADCAST_ID, message, options);
}
public deleteStatus(request: DeleteStatusRequest) {
protected async prepareJidsForStatus(contacts: string[]) {
let jids: string[];
if (contacts?.length > 0) {
jids = contacts.map(toJID);
} else {
jids = await this.fetchMyContactsJids();
}
this.upsertMeInJIDs(jids);
return jids;
}
protected async fetchMyContactsJids() {
const contacts = await this.store.getContacts({});
const jids = contacts.map((contact) => contact.id);
return jids.filter((jid) => jid.endsWith('@s.whatsapp.net'));
}
public async deleteStatus(request: DeleteStatusRequest) {
const messageId = request.id;
const key = parseMessageIdSerialized(messageId, true);
key.fromMe = true;
key.remoteJid = BROADCAST_ID;
const JIDs = request.contacts.map(toJID);
const jids = await this.prepareJidsForStatus(request.contacts);
const options = {
statusJidList: JIDs,
statusJidList: jids,
};
return this.sock.sendMessage(BROADCAST_ID, { delete: key }, options);
return await this.sock.sendMessage(BROADCAST_ID, { delete: key }, options);
}
protected upsertMeInJIDs(JIDs: string[]) {
protected upsertMeInJIDs(jids: string[]) {
if (!this.sock?.authState?.creds?.me) {
return;
}
const myJID = jidNormalizedUser(this.sock.authState.creds.me.id);
if (!JIDs.includes(myJID)) {
JIDs.push(myJID);
if (!jids.includes(myJID)) {
jids.push(myJID);
}
}
@@ -1636,6 +1703,22 @@ export class WhatsappSessionNoWebCore extends WhatsappSession {
quoted: quoted,
};
}
protected getLinkPreview(request): any {
// NOWEB works this way
// If it's undefined - it'll generate it
// If it's false - it will not generate it
let linkPreview: boolean | undefined;
switch (request.linkPreview) {
case false:
linkPreview = false;
break;
case true:
default:
linkPreview = undefined;
}
return linkPreview;
}
}
function hasPath(url: string) {
@@ -0,0 +1,52 @@
<!DOCTYPE html><html id="whatsapp-web" class="" lang="en" dir="ltr"><head><link data-default-icon="https://static.whatsapp.net/rsrc.php/v3/yP/r/rYZqPCBaG70.png" rel="shortcut icon" href="https://static.whatsapp.net/rsrc.php/v3/yP/r/rYZqPCBaG70.png" /><meta name="bingbot" content="noarchive" /><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=2,shrink-to-fit=no" /><link rel="manifest" href="/data/manifest.json" crossorigin="use-credentials" /><meta name="google" content="notranslate" /><meta name="format-detection" content="telephone=no" /><meta name="description" content="Quickly send and receive WhatsApp messages right from your computer." /><meta name="og:description" content="Quickly send and receive WhatsApp messages right from your computer." /><meta name="og:url" content="https://web.whatsapp.com/" /><meta name="og:title" content="WhatsApp Web" /><meta name="og:image" content="https://static.whatsapp.net/rsrc.php/v3/yR/r/y8-PTBaP90a.png" /><meta name="theme-color" content="#111b21" media="(prefers-color-scheme: dark)" /><meta name="theme-color" content="#f0f2f5" /><link rel="apple-touch-icon" sizes="192x192" href="https://static.whatsapp.net/rsrc.php/v3/yc/r/hUUuVTz6ZVi.png" /><style data-btmanifest="1018072227_main" nonce="o8S8zE9I">:root,.__fb-light-mode:root,.__fb-light-mode{--splashscreen-primary-title:#4125d;--splashscreen-progress-background:#e9edef;--splashscreen-progress-primary:#00c298;--splashscreen-secondary-lighter:#8696a0;--splashscreen-startup-background:#f0f2f5;--splashscreen-startup-background-rgb:240, 242, 245;--splashscreen-startup-icon:#bbc5cb}</style><style data-btmanifest="1018072227_main" nonce="o8S8zE9I">.__fb-dark-mode{--splashscreen-primary-title:rgba(233, 237, 239, .88);--splashscreen-progress-background:#233138;--splashscreen-progress-primary:#0b846d;--splashscreen-secondary-lighter:#667781;--splashscreen-startup-background:#111b21;--splashscreen-startup-background-rgb:17, 27, 33;--splashscreen-startup-icon:#676f73}@media (prefers-color-scheme: dark){:root{--splashscreen-primary-title:rgba(233, 237, 239, .88);--splashscreen-progress-background:#233138;--splashscreen-progress-primary:#0b846d;--splashscreen-secondary-lighter:#667781;--splashscreen-startup-background:#111b21;--splashscreen-startup-background-rgb:17, 27, 33;--splashscreen-startup-icon:#676f73}}</style><script id="envjson" type="application/json" nonce="o8S8zE9I">{"useTrustedTypes":false,"isTrustedTypesReportOnly":false,"use_fbt_virtual_modules":true,"compat_iframe_token":null,"clear_js_factory_after_used":true,"brsid":"7435115086220858941"}</script><script src="data:application/x-javascript; charset=utf-8;base64,Oy8qRkJfUEtHX0RFTElNKi8KCnZhciBkYXRhRWxlbWVudD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW52anNvbiIpO2lmKGRhdGFFbGVtZW50IT1udWxsKXt2YXIgY29weVZhcmlhYmxlcz1mdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gdmFyaWFibGVzKWFbYl09dmFyaWFibGVzW2JdfSx2YXJpYWJsZXM9SlNPTi5wYXJzZShkYXRhRWxlbWVudC50ZXh0Q29udGVudCk7d2luZG93LnJlcXVpcmVMYXp5P3dpbmRvdy5yZXF1aXJlTGF6eShbIkVudiJdLGNvcHlWYXJpYWJsZXMpOih3aW5kb3cuRW52PXdpbmRvdy5FbnZ8fHt9LGNvcHlWYXJpYWJsZXMod2luZG93LkVudikpfQovLyMgc291cmNlVVJMPWh0dHBzOi8vc3RhdGljLndoYXRzYXBwLm5ldC9yc3JjLnBocC92My95TC9yL2RiZ3JNc25EMThwLmpzCg==" data-bootloader-hash="nxRKQO6" crossorigin="anonymous" data-p=":0" data-btmanifest="1018072227_main" data-c="1"></script><script src="data:application/x-javascript; charset=utf-8;base64,Oy8qRkJfUEtHX0RFTElNKi8KCl9fYW5ub3RhdG9yPWZ1bmN0aW9uKGEpe3JldHVybiBhfSxfX2Rfc3R1Yj1bXSxfX2Q9ZnVuY3Rpb24oYSxiLGMsZCl7X19kX3N0dWIucHVzaChbYSxiLGMsZF0pfSxfX3JsX3N0dWI9W10scmVxdWlyZUxhenk9ZnVuY3Rpb24oKXtfX3JsX3N0dWIucHVzaChhcmd1bWVudHMpfTsKLy8jIHNvdXJjZVVSTD1odHRwczovL3N0YXRpYy53aGF0c2FwcC5uZXQvcnNyYy5waHAvdjMveTIvci9jTWRfU1pvdjlFaS5qcwo=" data-bootloader-hash="W7CcKyc" crossorigin="anonymous" data-p=":0" data-btmanifest="1018072227_main" data-c="1"></script><script src="data:application/x-javascript; charset=utf-8;base64,Oy8qRkJfUEtHX0RFTElNKi8KCl9idGxkcj17fTsKLy8jIHNvdXJjZVVSTD1odHRwczovL3N0YXRpYy53aGF0c2FwcC5uZXQvcnNyYy5waHAvdjMveUgvci9aTGNLT2JOdU8xYi5qcwo=" data-bootloader-hash="678jA6i" crossorigin="anonymous" data-p=":0" data-btmanifest="1018072227_main" data-c="1"></script><script src="data:application/x-javascript; charset=utf-8;base64,Oy8qRkJfUEtHX0RFTElNKi8KCndpbmRvdy5vcGVuRGF0YWJhc2UmJih3aW5kb3cub3BlbkRhdGFiYXNlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCl9KTsKLy8jIHNvdXJjZVVSTD1odHRwczovL3N0YXRpYy53aGF0c2FwcC5uZXQvcnNyYy5waHAvdjMveVkvci85Qk95ZURLTC1kQy5qcwo=" data-bootloader-hash="k6/EjOG" crossorigin="anonymous" data-p=":0" data-btmanifest="1018072227_main" data-c="1"></script><script src="data:application/x-javascript; charset=utf-8;base64,Oy8qRkJfUEtHX0RFTElNKi8KCmZ1bmN0aW9uIHBhcmVudElzTm90SGVhZE5vckJvZHkoYSl7cmV0dXJuIGEucGFyZW50RWxlbWVudCE9PWRvY3VtZW50LmJvZHkmJmEucGFyZW50RWxlbWVudCE9PWRvY3VtZW50LmhlYWR9ZnVuY3Rpb24gaXNUYWdTdXBwb3J0ZWQoYSl7cmV0dXJuIGEubm9kZU5hbWU9PT0iU0NSSVBUInx8YS5ub2RlTmFtZT09PSJMSU5LIiYmKChhPWdldE5vZGVEYXRhU2V0KGEpKT09bnVsbD92b2lkIDA6YS5hc3Line truncated
<script type="application/json" data-content-len="92" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941-server","htmlStart",23]]]}</script>
<link type="text/css" rel="stylesheet" href="https://static.whatsapp.net/rsrc.php/v4/y4/l/0,cross/nJSuJRxe0LRIuQQZ3xdyKtes83aNhixgx.css" data-bootloader-hash="L0/3ndb" crossorigin="anonymous" data-p=":3,27,19" data-btmanifest="1018072227_main" data-c="1" />
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3/yl/r/HOQztTu5JYT.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3/yl/r/HOQztTu5JYT.js" data-bootloader-hash="A8pgoR4" async="1" crossorigin="anonymous" data-p=":1" data-btmanifest="1018072227_main" data-c="1"></script>
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3/yw/r/dYGBdB10S1Z.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3/yw/r/dYGBdB10S1Z.js" data-bootloader-hash="Bbw1TQP" async="1" crossorigin="anonymous" data-p=":2" data-btmanifest="1018072227_main" data-c="1"></script>
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3/yS/r/UhwbwVdbQX0.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3/yS/r/UhwbwVdbQX0.js" data-bootloader-hash="F/l6arV" async="1" crossorigin="anonymous" data-p=":14" data-btmanifest="1018072227_main" data-c="1"></script>
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3/yx/r/ryQSgyNOW8X.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3/yx/r/ryQSgyNOW8X.js" data-bootloader-hash="krMlcAs" async="1" crossorigin="anonymous" data-p=":8" data-btmanifest="1018072227_main" data-c="1"></script>
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3iWBv4/yk/l/rt/IN3s4Kru2-t2RSfFSjWLjPTFOQq3__cln_2SsOE-ssqJx0Eef7DOYopYnK0rykQBR7vsWqehdEtWw.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3iWBv4/yk/l/rt/IN3s4Kru2-t2RSfFSjWLjPTFOQq3__cln_2SsOE-ssqJx0Eef7DOYopYnK0rykQBR7vsWqehdEtWw.js" data-bootloader-hash="U5nfRMR" async="1" crossorigin="anonymous" data-tsrc="https://static.whatsapp.net/rsrc-translations.php/v7iWBv4/yV/l/en_US/IN3s4Kru2-t2RSfFSjWLjPTFOQq3__cln_2SsOE-ssqJx0Eef7DOYopYnK0rykQBR7vsWqehdEtWw.js" data-p=":25,5,13,23,20,22,7" data-btmanifest="1018072227_main" data-c="1"></script><link rel="preload" href="https://static.whatsapp.net/rsrc-translations.php/v7iWBv4/yV/l/en_US/IN3s4Kru2-t2RSfFSjWLjPTFOQq3__cln_2SsOE-ssqJx0Eef7DOYopYnK0rykQBR7vsWqehdEtWw.js" as="fetch" crossorigin="anonymous" />
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3iHCc4/yu/l/rt/rW3lOI79YLL.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3iHCc4/yu/l/rt/rW3lOI79YLL.js" data-bootloader-hash="Bv8Xq6G" async="1" crossorigin="anonymous" data-tsrc="https://static.whatsapp.net/rsrc-translations.php/v7iHCc4/ys/l/en_US/rW3lOI79YLL.js" data-p=":16" data-btmanifest="1018072227_main" data-c="1"></script><link rel="preload" href="https://static.whatsapp.net/rsrc-translations.php/v7iHCc4/ys/l/en_US/rW3lOI79YLL.js" as="fetch" crossorigin="anonymous" />
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3/yR/r/h4Qy0FiYsZ_.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3/yR/r/h4Qy0FiYsZ_.js" data-bootloader-hash="bUA3nqa" async="1" crossorigin="anonymous" data-p=":4" data-btmanifest="1018072227_main" data-c="1"></script>
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3iuY-4/ym/l/rt/yTGZCBMSfU8.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3iuY-4/ym/l/rt/yTGZCBMSfU8.js" data-bootloader-hash="VS6S+f6" async="1" crossorigin="anonymous" data-tsrc="https://static.whatsapp.net/rsrc-translations.php/v7iuY-4/ye/l/en_US/yTGZCBMSfU8.js" data-p=":9" data-btmanifest="1018072227_main" data-c="1"></script><link rel="preload" href="https://static.whatsapp.net/rsrc-translations.php/v7iuY-4/ye/l/en_US/yTGZCBMSfU8.js" as="fetch" crossorigin="anonymous" />
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v3/y6/r/OicDJTSlcdh.js" as="script" crossorigin="anonymous" nonce="o8S8zE9I" /><script src="https://static.whatsapp.net/rsrc.php/v3/y6/r/OicDJTSlcdh.js" data-bootloader-hash="hER3bup" async="1" crossorigin="anonymous" data-p=":6" data-btmanifest="1018072227_main" data-c="1"></script>
<script type="application/json" data-content-len="459" data-sjs>{"require":[["MakeHasteTranslations","fetchTranslationsForEarlyFlush",null,[{"U5nfRMR":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iWBv4\/yV\/l\/en_US\/IN3s4Kru2-t2RSfFSjWLjPTFOQq3__cln_2SsOE-ssqJx0Eef7DOYopYnK0rykQBR7vsWqehdEtWw.js","Bv8Xq6G":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iHCc4\/ys\/l\/en_US\/rW3lOI79YLL.js","VS6S+f6":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iuY-4\/ye\/l\/en_US\/yTGZCBMSfU8.js"}]]]}</script>
<!--EF-->
<title>WhatsApp Web</title>
<script type="application/json" data-content-len="1247" data-sjs>{"require":[["HasteSupportData","handle",null,[{"gkxData":{"2199":{"result":false,"hash":null},"7742":{"result":false,"hash":null},"8068":{"result":true,"hash":null},"20935":{"result":true,"hash":null},"20936":{"result":false,"hash":null},"1393":{"result":false,"hash":null},"3485":{"result":false,"hash":null},"5918":{"result":false,"hash":null},"5971":{"result":false,"hash":null},"7686":{"result":false,"hash":null},"7687":{"result":true,"hash":null},"21050":{"result":false,"hash":null},"21075":{"result":false,"hash":null},"21076":{"result":true,"hash":null},"22792":{"result":false,"hash":null},"23433":{"result":false,"hash":null},"4341":{"result":false,"hash":null},"6323":{"result":false,"hash":null},"8523":{"result":false,"hash":null},"9861":{"result":false,"hash":null},"21062":{"result":false,"hash":null},"21063":{"result":false,"hash":null},"21069":{"result":false,"hash":null},"21071":{"result":false,"hash":null},"21072":{"result":false,"hash":null},"33056":{"result":false,"hash":null}},"qexData":{"526":{"r":null},"538":{"r":null},"543":{"r":null},"362":{"r":null},"1028":{"r":null},"104":{"r":null},"128":{"r":null},"344":{"r":null},"388":{"r":null}},"justknobxData":{"3323":{"r":true},"1806":{"r":true},"2819":{"r":true}}}]]]}</script>
</head><body class=""><div id="wa_web_initial_startup" class="_apdl"><div style="transform: translate(calc(50% - 52px / 2))" class="_apdm"><span><svg width="250" height="52" xmlns="http://www.w3.org/2000/svg"><path d="M37.7 31.2c-.6-.4-3.8-2-4.4-2.1-.6-.2-1-.4-1.4.3l-2 2.5c-.4.4-.8.5-1.5.2-.6-.3-2.7-1-5.1-3.2-2-1.7-3.2-3.8-3.6-4.5-.4-.6 0-1 .3-1.3l1-1.1.6-1.1c.2-.4 0-.8 0-1.1l-2-4.8c-.6-1.3-1.1-1-1.5-1.1h-1.2c-.5 0-1.2.1-1.8.8-.5.6-2.2 2.2-2.2 5.3 0 3.2 2.3 6.3 2.6 6.7.3.4 4.6 7 11 9.7l3.7 1.4c1.5.5 3 .4 4 .2 1.3-.1 3.9-1.5 4.4-3 .5-1.5.5-2.8.4-3-.2-.4-.6-.5-1.3-.8M26 47.2c-3.9 0-7.6-1-11-3l-.7-.4-8.1 2L8.4 38l-.6-.8A21.4 21.4 0 0126 4.4a21.3 21.3 0 0121.4 21.4c0 11.8-9.6 21.4-21.4 21.4M44.2 7.6a25.8 25.8 0 00-40.6 31L0 52l13.7-3.6A25.8 25.8 0 0044.3 7.5" fill="currentColor"></path></svg></span></div><div class="_apdq"><progress value="0" max="100" dir="ltr"></progress></div><div class="_apdr">WhatsApp</div><div class="_apds"><span><svg width="10" height="12" xmlns="http://www.w3.org/2000/svg"><path d="M5 1.6c1.4 0 2.5 1 2.6 2.4v1.5h.2c.5 0 1 .4 1 1V10c0 .6-.5 1-1 1H2.3a1 1 0 01-1.1-1V6.5c0-.6.5-1 1-1h.2V4.2c0-1.4 1-2.5 2.4-2.6H5zm0 1.2c-.7 0-1.3.6-1.3 1.3v1.4h2.6V4.2c0-.7-.4-1.2-1-1.3H5z" fill="currentColor"></path></svg></span><span> </span>End-to-end encrypted</div></div><script type="application/json" data-content-len="91" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941","splash_screen_show"]]]}</script>
<div id="mount_0_0_kK"></div>
<script type="application/json" data-content-len="53" data-sjs>{"require":[["maybeDisableAnimations",null,null,[]]]}</script>
<script type="application/json" data-content-len="49" data-sjs>{"require":[["replaceNativeTimer",null,null,[]]]}</script>
<script type="application/json" data-content-len="60" data-sjs>{"require":[["bootstrapWebSession",null,null,[1731122631]]]}</script>
<script type="application/json" data-content-len="109" data-sjs>{"require":[["qplTagServerJS",null,null,[["comet_aa_coinflip:false","should_use_bt_safe_js","logged_out"]]]]}</script>
<script type="application/json" data-content-len="157" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941","tierOne"]],["qplTimingsServerJS",null,null,["7435115086220858941-server","tierOne",36]]]}</script>
<script type="application/json" data-content-len="82" data-sjs>{"require":[["JSScheduler","makeSchedulerGlobalEntry",null,["null",false,false]]]}</script>
<script type="application/json" data-content-len="7774" data-sjs>{"require":[["ScheduledServerJS","handle",null,[{"__bbox":{"define":[["cr:310",["RunWWW"],{"__rc":["RunWWW",null]},-1],["cr:1078",[],{"__rc":[null,null]},-1],["cr:1080",["unexpectedUseInComet"],{"__rc":["unexpectedUseInComet",null]},-1],["cr:1126",["TimeSliceSham"],{"__rc":["TimeSliceSham",null]},-1],["cr:3725",["clearTimeoutWWWOrMobile"],{"__rc":["clearTimeoutWWWOrMobile",null]},-1],["cr:4344",["setTimeoutWWWOrMobile"],{"__rc":["setTimeoutWWWOrMobile",null]},-1],["cr:6640",[],{"__rc":[null,null]},-1],["cr:7385",["clearIntervalWWW"],{"__rc":["clearIntervalWWW",null]},-1],["cr:7386",["clearTimeoutWWW"],{"__rc":["clearTimeoutWWW",null]},-1],["cr:7388",["setIntervalWWW"],{"__rc":["setIntervalWWW",null]},-1],["cr:7389",["setIntervalAcrossTransitionsWWW"],{"__rc":["setIntervalAcrossTransitionsWWW",null]},-1],["cr:7390",["setTimeoutWWW"],{"__rc":["setTimeoutWWW",null]},-1],["cr:7391",["setTimeoutAcrossTransitionsWWW"],{"__rc":["setTimeoutAcrossTransitionsWWW",null]},-1],["cr:8959",["DTSG"],{"__rc":["DTSG",null]},-1],["cr:8960",["DTSG_ASYNC"],{"__rc":["DTSG_ASYNC",null]},-1],["cr:696703",["JSScheduler"],{"__rc":["JSScheduler",null]},-1],["cr:806696",["clearTimeoutComet"],{"__rc":["clearTimeoutComet",null]},-1],["cr:807042",["setTimeoutComet"],{"__rc":["setTimeoutComet",null]},-1],["cr:896461",["setIntervalComet"],{"__rc":["setIntervalComet",null]},-1],["cr:896462",["setIntervalComet"],{"__rc":["setIntervalComet",null]},-1],["cr:925100",["RunComet"],{"__rc":["RunComet",null]},-1],["cr:986633",["setTimeoutComet"],{"__rc":["setTimeoutComet",null]},-1],["cr:1003267",["clearIntervalComet"],{"__rc":["clearIntervalComet",null]},-1],["cr:734",[],{"__rc":[null,null]},-1],["cr:1293",["ReactDOM.classic"],{"__rc":["ReactDOM.classic",null]},-1],["cr:4874",[],{"__rc":[null,null]},-1],["cr:7162",["ReactDOMCompatibilityLayer"],{"__rc":["ReactDOMCompatibilityLayer",null]},-1],["cr:7451",[],{"__rc":[null,null]},-1],["cr:1064332",[],{"__rc":[null,null]},-1],["cr:1106516",[],{"__rc":[null,null]},-1],["cr:1108857",[],{"__rc":[null,null]},-1],["cr:1294158",["React.classic"],{"__rc":["React.classic",null]},-1],["cr:1294159",["ReactDOM.classic"],{"__rc":["ReactDOM.classic",null]},-1],["CometPersistQueryParams",[],{"relative":{},"domain":{}},6231],["GetAsyncParamsExtraData",[],{"extra_data":{}},7511],["BootloaderConfig",[],{"deferBootloads":false,"jsRetries":[200,500],"jsRetryAbortNum":2,"jsRetryAbortTime":5,"silentDups":true,"timeout":60000,"tieredLoadingFromTier":100,"hypStep4":true,"phdOn":false,"btCutoffIndex":302,"fastPathForAlreadyRequired":true,"earlyRequireLazy":false,"enableTimeoutLoggingForNonComet":false,"deferLongTailManifest":true,"lazySoT":false,"translationRetries":[200,500],"translationRetryAbortNum":3,"translationRetryAbortTime":50},329],["CSSLoaderConfig",[],{"timeout":5000,"loadEventSupported":true},619],["CurrentUserInitialData",[],{"ACCOUNT_ID":"0","USER_ID":"0","NAME":"","SHORT_NAME":null,"IS_BUSINESS_PERSON_ACCOUNT":false,"HAS_SECONDARY_BUSINESS_PERSON":false,"IS_FACEBOOK_WORK_ACCOUNT":false,"IS_INSTAGRAM_BUSINESS_PERSON":false,"IS_MESSENGER_ONLY_USER":false,"IS_DEACTIVATED_ALLOWED_ON_MESSENGER":false,"IS_MESSENGER_CALL_GUEST_USER":false,"IS_WORK_MESSENGER_CALL_GUEST_USER":false,"IS_WORKROOMS_USER":false,"APP_ID":"2220391788200892","IS_BUSINESS_DOMAIN":false,"NON_FACEBOOK_USER_ID":"0"},270],["DTSGInitialData",[],{},258],["LSD",[],{"token":"wEKbRN9wZlWrDjkzN7hiVV"},323],["ServerNonce",[],{"ServerNonce":"EXAGZxp_fullevDJmcCA-j"},141],["SiteData",[],{"server_revision":1018072227,"client_revision":1018072227,"push_phase":"C3","pkg_cohort":"HYP:whatsapp_comet_pkg","haste_session":"20036.HYP:whatsapp_comet_pkg.2.1..0.1","pr":1,"manifest_base_uri":"https:\/\/static.whatsapp.net","manifest_origin":"whatsapp","manifest_version_prefix":"","be_one_ahead":true,"is_rtl":false,"is_experimental_tier":false,"is_jit_warmed_up":true,"hsi":"7435115086220858941","semr_host_bucket":"5","bl_hash_version":2,"comet_env":17,"wbloks_env":false,"ef_page":"comet.whatsapp.web.\/","compose_bootloads":false,"spin":4,"__spin_r":1018072227,"__spin_b":"trunk","__spin_t":1731122631,"vip":"157.240.229.60"},317],["SprinkleConfig",[],{"param_name":"jazoest","version":2,"should_randomize":false},2111],["PromiseUsePolyfillSetImmediateGK",[],{"www_always_use_polyfill_setimmediate":false},2190],["JSErrorLoggingConfig",[],{"appId":2220391788200892,"extra":[],"reportInterval":50,"sampleWeight":null,"sampleWeightKey":"__jssesw","projectBlocklist":[]},2776],["ImmediateImplementationExperiments",[],{"prefer_message_channel":true},3419],["DTSGInitData",[],{"token":"","async_get_token":""},3515],["UriNeedRawQuerySVConfig",[],{"uris":["dms.netmng.com","doubleclick.net","r.msn.com","watchit.sky.com","graphite.instagram.com","www.kfc.co.th","learn.pantheon.io","www.landmarkshops.in","www.ncl.com","s0.wp.com","www.tatacliq.com","bs.serving-sys.com","kohls.com","lazada.co.th","xg4ken.com","technopark.ruLine truncated
<script type="application/json" data-content-len="83" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941","tierOneEnd"]]]}</script>
<script type="application/json" data-content-len="157" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941","tierTwo"]],["qplTimingsServerJS",null,null,["7435115086220858941-server","tierTwo",80]]]}</script>
<script type="application/json" data-content-len="3594" data-sjs>{"require":[["HasteSupportData","handle",null,[{"bxData":{"9547":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yl\/r\/gi_DckOUM5a.png"},"9548":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y_\/r\/TPtFe9SpDSX.png"},"9555":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y4\/r\/XEPQuYy90FJ.png"},"9556":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/ye\/r\/fWOSgX_xpHG.png"},"9561":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yW\/r\/BS_BUUXbKq5.mp3"},"9562":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yu\/r\/lsK0FC6wi8C.m4a"},"10639":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y3\/r\/AZwgE-H9Ubq.png"},"11319":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yX\/r\/JYPizEwERE4.png"},"11370":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y-\/r\/_8J_xqERSbv.png"},"31401":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y1\/r\/m5BEg2K4OR4.png"},"31402":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yb\/r\/uspVxRFx2oU.png"},"31422":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yq\/r\/MHVytaGe3gh.png"},"9544":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yv\/r\/6Ib-MkrweJ6.ttf"},"9545":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yk\/r\/ln-uwGsChQW.ttf"},"9551":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yq\/r\/xCHrap4ZvgY.png"},"9552":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y6\/r\/R6k6NrF2Cbl.png"},"9553":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yd\/r\/jLlIEwASpgj.png"},"9554":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y5\/r\/_U7GO8EnPFR.png"},"9559":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yy\/r\/noBSk9ItwJJ.png"},"9583":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yP\/r\/re6de1QF8pQ.png"},"10591":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yp\/r\/ReKDgNfJEFB.png"}},"clpData":{"6476":{"r":1000,"s":1},"1744178":{"r":1,"s":1},"1838142":{"r":1,"s":1}},"gkxData":{"1624":{"result":false,"hash":null},"2160":{"result":false,"hash":null},"4112":{"result":false,"hash":null},"5134":{"result":true,"hash":null},"5434":{"result":false,"hash":null},"5679":{"result":false,"hash":null},"5943":{"result":false,"hash":null},"6748":{"result":true,"hash":null},"6969":{"result":false,"hash":null},"7541":{"result":false,"hash":null},"7685":{"result":false,"hash":null},"20836":{"result":false,"hash":null},"20940":{"result":false,"hash":null},"21043":{"result":false,"hash":null},"21051":{"result":false,"hash":null},"21052":{"result":false,"hash":null},"21053":{"result":false,"hash":null},"21054":{"result":false,"hash":null},"21055":{"result":false,"hash":null},"21056":{"result":false,"hash":null},"21057":{"result":false,"hash":null},"21058":{"result":true,"hash":null},"21106":{"result":true,"hash":null},"21107":{"result":false,"hash":null},"21112":{"result":true,"hash":null},"26256":{"result":false,"hash":null},"26258":{"result":true,"hash":null},"26259":{"result":false,"hash":null},"26262":{"result":true,"hash":null},"24344":{"result":false,"hash":null},"24351":{"result":false,"hash":null},"24383":{"result":false,"hash":null},"30214":{"result":false,"hash":null}},"qplData":{"106":{}},"justknobxData":{"371":{"r":true},"819":{"r":true},"822":{"r":true},"860":{"r":100},"1617":{"r":160},"1618":{"r":8},"1619":{"r":1},"1620":{"r":2},"1621":{"r":4},"1622":{"r":0},"1623":{"r":6},"1624":{"r":1},"1662":{"r":2},"1663":{"r":14},"1664":{"r":2},"1784":{"r":false},"1854":{"r":false},"2086":{"r":4},"2148":{"r":false},"2157":{"r":true},"2237":{"r":false},"2268":{"r":true},"2269":{"r":true},"2552":{"r":false},"2702":{"r":true}}}]]]}</script>
<script type="application/json" data-content-len="40671" data-sjs>{"require":[["Bootloader","handlePayload",null,[{"consistency":{"rev":1018072227},"rsrcMap":{"xFqg8AH":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yL\/r\/BlIuoNYtWPV.js","c":1,"p":":195","m":"1018072227_main"},"AJOaQIc":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y8\/r\/G_AUzITVDxz.js","c":1,"p":":11","m":"1018072227_main"},"a\/ErpYx":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y_\/r\/Erq9JIEfuV6.js","c":1,"p":":10","m":"1018072227_main"},"a5fZ54F":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iekP4\/yH\/l\/rt\/NXnawuAbdD4.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iekP4\/yP\/l\/en_US\/NXnawuAbdD4.js","c":1,"p":":21","m":"1018072227_main"},"EeF59cM":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3i9cC4\/yD\/l\/rt\/mzFfMLLw6HK.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7i9cC4\/yX\/l\/en_US\/mzFfMLLw6HK.js","c":1,"p":":36","m":"1018072227_main"},"Xkc0WVi":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iREA4\/yI\/l\/rt\/8Aolmhvy8LU.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iREA4\/yN\/l\/en_US\/8Aolmhvy8LU.js","c":1,"p":":34","m":"1018072227_main"},"vR+ju+x":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3i91J4\/yt\/l\/rt\/dNU4SErCrmv.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7i91J4\/ya\/l\/en_US\/dNU4SErCrmv.js","c":1,"p":":28","m":"1018072227_main"},"XRiLJ5h":{"type":"css","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v4\/y7\/l\/0,cross\/WfrI-AAXpPh.css","c":1,"p":":18","m":"1018072227_main"},"4zHjo\/t":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yq\/r\/sMiW0MeCLnG.js","c":1,"p":":15","m":"1018072227_main"},"zBLIrrt":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yq\/r\/hmLfv8YDyld.js","c":1,"p":":194","m":"1018072227_main"},"gXHW2I\/":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yw\/r\/-LbRSVJO6sn.js","c":1,"p":":40","m":"1018072227_main"},"Kyj0DuM":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yE\/r\/CtlyoX5avh8.js","c":1,"p":":39","m":"1018072227_main"},"zzVLof4":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3i6XI4\/y-\/l\/rt\/AObUHhfOII7.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7i6XI4\/yf\/l\/en_US\/AObUHhfOII7.js","c":1,"p":":149","m":"1018072227_main"},"080D39R":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yX\/r\/ctArhl7hZ9J.js","c":1,"p":":219","m":"1018072227_main"},"zZM5CG8":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y0\/r\/qV4CPdytvui.js","c":1,"p":":80","m":"1018072227_main"},"Fw+YAB0":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yJ\/r\/41rr4p6vs7j.js","c":1,"p":":147","m":"1018072227_main"},"7jdcV+B":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yf\/r\/fNcbr8WPj3N.js","c":1,"p":":228","m":"1018072227_main"},"tTfYNAo":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yv\/r\/OtiwkkrbnEg.js","c":1,"p":":67","m":"1018072227_main"},"9YKdw6R":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yI\/r\/SMKPIPut05F.js","c":1,"p":":192","m":"1018072227_main"},"lz41h9C":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yT\/r\/sqn5gRbbgEd.js","c":1,"p":":142","m":"1018072227_main"},"UcOlgtU":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yR\/r\/xjqPhXjJVzw.js","c":1,"p":":172","m":"1018072227_main"},"K4DN3ov":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yH\/r\/YUTlfecSbQp.js","c":1,"p":":218","m":"1018072227_main"},"WhncEwJ":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yy\/r\/jTuTGnMJXdo.js","c":1,"p":":90","m":"1018072227_main"},"Fr6Lkg3":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yu\/r\/D_fZidk8XTz.js","c":1,"p":":198","m":"1018072227_main"},"dzSjMyH":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y4\/r\/pWX5sxLaZTx.js","c":1,"p":":48","m":"1018072227_main"},"l9YeuzY":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/ya\/r\/mEsaFp2_2Sa.js","c":1,"p":":50","m":"1018072227_main"},"pZbl5CZ":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yD\/r\/Hfkat6cPNHo.js","c":1,"p":":241","m":"1018072227_main"},"j65SaHn":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yC\/r\/sDl5KW9QJ97.js","c":1,"p":":150","m":"1018072227_main"},"bRKmx2D":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yj\/r\/wLUf1sFtuSI.js","c":1,"p":":163","m":"1018072227_main"},"wDNapDv":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yP\/r\/xc6XM-JdW6p.js","c":1,"p":":274","m":"1018072227_main"},"rc5Kz5Y":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y7\/r\/EZZ9HoHBlyi.js","c":1,"p":":79","m":"1018072227_main"},"IkfPTaq":{"tLine truncated
<script type="application/json" data-content-len="65298" data-sjs>{"require":[["ScheduledServerJS","handle",null,[{"__bbox":{"define":[["cr:686",[],{"__rc":[null,null]},-1],["cr:755",["warningWWW"],{"__rc":["warningWWW",null]},-1],["cr:3128",[],{"__rc":[null,null]},-1],["cr:4122",[],{"__rc":[null,null]},-1],["cr:4324",[],{"__rc":[null,null]},-1],["cr:4533",[],{"__rc":[null,null]},-1],["cr:4722",[],{"__rc":[null,null]},-1],["cr:4857",[],{"__rc":[null,null]},-1],["cr:4940",[],{"__rc":[null,null]},-1],["cr:4941",[],{"__rc":[null,null]},-1],["cr:5151",[],{"__rc":[null,null]},-1],["cr:5292",[],{"__rc":[null,null]},-1],["cr:5411",[],{"__rc":[null,null]},-1],["cr:5624",["WAWebCleanAssets"],{"__rc":["WAWebCleanAssets",null]},-1],["cr:5664",[],{"__rc":[null,null]},-1],["cr:5981",[],{"__rc":[null,null]},-1],["cr:6000",[],{"__rc":[null,null]},-1],["cr:6009",[],{"__rc":[null,null]},-1],["cr:6022",["WAWebFeatureDetectionSwSupport"],{"__rc":["WAWebFeatureDetectionSwSupport",null]},-1],["cr:6167",[],{"__rc":[null,null]},-1],["cr:7730",["getFbtResult"],{"__rc":["getFbtResult",null]},-1],["cr:7907",[],{"__rc":[null,null]},-1],["cr:8958",["FBJSON"],{"__rc":["FBJSON",null]},-1],["cr:9859",[],{"__rc":[null,null]},-1],["cr:10195",[],{"__rc":[null,null]},-1],["cr:10196",[],{"__rc":[null,null]},-1],["cr:10197",[],{"__rc":[null,null]},-1],["cr:10198",[],{"__rc":[null,null]},-1],["cr:10199",[],{"__rc":[null,null]},-1],["cr:10201",[],{"__rc":[null,null]},-1],["cr:10212",[],{"__rc":[null,null]},-1],["cr:10234",[],{"__rc":[null,null]},-1],["cr:951783",[],{"__rc":[null,null]},-1],["cr:1984081",[],{"__rc":[null,null]},-1],["IntlCurrentLocale",[],{"code":"en_US"},5954],["WAMediaWasmWorkerResource",[],{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y0\/r\/nM6SFfo6YdP.js","name":"WAMediaWasmWorkerBundle","dynamicModules":{"cr:6640":{"__bbox":{"__rc":[null,null]}}},"hsdp":{"bxData":{"236":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/y_\/r\/IbbOXFaNJTy.wasm"},"237":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yR\/r\/ayqr5HQtlkb.wasm"},"6945":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yO\/r\/tL59TT3QfUA.wasm"},"6946":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yf\/r\/rogm88TRRiw.wasm"},"31390":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yk\/r\/jtnU4lyaNTU.wasm"}},"gkxData":{"8169":{"result":false,"hash":null}},"qplData":{"106":{}}}},7438],["CookiePrivacySandboxConfig",[],{"is_affected_by_samesite_lax":false},7723],["WAWebMediaWorkerResource",[],{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yd\/r\/TWBPKyJqVOD.js","name":"WAMediaWorkerBundle","useInitScript":true},7034],["CookieDomain",[],{"domain":"whatsapp.com"},6421],["IntlVariationHoldout",[],{"disable_variation":false},6533],["IntlNumberTypeProps",["IntlCLDRNumberType05"],{"module":{"__m":"IntlCLDRNumberType05"}},7027],["WAWebRgbaToWebpWorkerResource",[],{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yx\/r\/qFfYRbc9sfE.js","name":"WAWebRgbaToWebpWorkerBundle","dynamicModules":{"cr:6640":{"__bbox":{"__rc":[null,null]}}},"hsdp":{}},7480],["WAWebFtsWorkerResource",[],{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/ya\/r\/UWqggsl4Tnn.js","name":"WAWebFtsWorkerBundle","dynamicModules":{"cr:6640":{"__bbox":{"__rc":[null,null]}}},"hsdp":{"gkxData":{"5943":{"result":false,"hash":null},"26258":{"result":true,"hash":null},"26259":{"result":false,"hash":null}},"justknobxData":{"1617":{"r":160},"1618":{"r":8},"1619":{"r":1},"1620":{"r":2},"1621":{"r":4},"1622":{"r":0},"1623":{"r":6},"1624":{"r":1},"1662":{"r":2},"1663":{"r":14},"1664":{"r":2},"1854":{"r":false}}}},7301],["WAWebOpusRecorderWorkerResource",[],{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yg\/r\/LgrJOIYRuL4.js","name":"WAWebOpusRecorderWorkerBundle","hsdp":{}},7347],["WAWebWebpToRgbaWorkerResource",[],{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yF\/r\/HOvMdg5_EUB.js","name":"WAWebWebpToRgbaWorkerBundle","dynamicModules":{"cr:6640":{"__bbox":{"__rc":[null,null]}}},"hsdp":{}},7481],["CookieCoreConfig",[],{"dpr":{"t":604800,"s":"None"},"locale":{"t":604800,"s":"Lax"},"wa_lang_pref":{"t":604800,"s":"None"},"wa_web_lang_pref":{"t":2419200,"s":"Lax"}},2104],["IntlPhonologicalRules",[],{"meta":{"\/_B\/":"([.,!?\\s]|^)","\/_E\/":"([.,!?\\s]|$)"},"patterns":{"\/\u0001(.*)('|&#039;)s\u0001(?:'|&#039;)s(.*)\/":"\u0001$1$2s\u0001$3","\/_\u0001([^\u0001]*)\u0001\/":"javascript"}},1496],["IntlViewerContext",[],{"GENDER":3,"regionalLocale":null},772],["NumberFormatConfig",[],{"decimalSeparator":".","numberDelimiter":",","minDigitsForThousandsSeparator":4,"standardDecimalPatternInfo":{"primaryGroupSize":3,"secondaryGroupSize":3},"numberingSystemData":null},54],["WebWorkerConfig",[],{"logging":{"enabled":false,"config":"WebWorkerLoggerConfig"},"evalWorkerURL":"\/rsrc.php\/v3\/y0\/r\/ypsvPwCD3ku.js"},297],["ZeroCategoryHeader",[],{},1127],["ZeroRewriteRules",[],{"rewrite_rules":{},"whitelist":{"\/hr\/r":1,"\/hr\/p":1,"\/zero\/unsupported_browser\/":1,"\/zero\/policy\/optin":1,"\/zero\/optin\Line truncated
<script type="application/json" data-content-len="83" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941","tierTwoEnd"]]]}</script>
<script type="application/json" data-content-len="162" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941","tierThree"]],["qplTimingsServerJS",null,null,["7435115086220858941-server","tierThree",108]]]}</script>
<link rel="preload" href="https://static.whatsapp.net/rsrc.php/v4/y7/l/0,cross/WfrI-AAXpPh.css" as="style" crossorigin="anonymous" />
<script type="application/json" data-content-len="1277" data-sjs>{"require":[["HasteSupportData","handle",null,[{"bxData":{"482":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yS\/r\/aGcVD59xVTb.png"},"484":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y6\/r\/wa669aeJeom.png"},"9546":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yf\/r\/4l5Jzvrg84p.png"},"9563":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yQ\/r\/WElxnwAGYY2.mp3"},"9564":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yv\/r\/ze2kHBOq8T0.mp3"},"10047":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v1\/y6\/r\/kNeGAbVVWRf.jpg"},"14943":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/ye\/r\/W2MDyeo0zkf.png"},"9557":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y5\/r\/cJXjAoffU5Q.png"},"9558":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yB\/r\/7Y1jh45L_8V.png"},"9565":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yn\/r\/6swO8kJM8z2.mp4"},"9566":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/yk\/r\/GoZyw2bTK6s.mp4"},"9560":{"uri":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yo\/r\/Oh4t5oP-H5G.png"}},"clpData":{"1848815":{"r":10000,"s":1},"1828945":{"r":100,"s":1},"5779":{"r":100,"s":1}},"gkxData":{"22826":{"result":false,"hash":null}},"justknobxData":{"2450":{"r":true},"2451":{"r":true},"770":{"r":false}}}]]]}</script>
<script type="application/json" data-content-len="43795" data-sjs>{"require":[["Bootloader","handlePayload",null,[{"consistency":{"rev":1018072227},"rsrcMap":{"D9ar2nt":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3i6sf4\/y_\/l\/rt\/65HPwmPTxvE.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7i6sf4\/yW\/l\/en_US\/65HPwmPTxvE.js","c":1,"p":":31","m":"1018072227_main"},"hnModTo":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iis_4\/yd\/l\/rt\/ZqmYe3zRs7GwaJyZPA-vVYdNU4SErCrmvFPlNguXyB9esMiW0MeCLnGG_AUzITVDxz.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iis_4\/ye\/l\/en_US\/ZqmYe3zRs7GwaJyZPA-vVYdNU4SErCrmvFPlNguXyB9esMiW0MeCLnGG_AUzITVDxz.js","c":1,"p":":17,29,28,30,15,11","m":"1018072227_main"},"rtkaIRw":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iXrJ4\/yS\/l\/rt\/KpdmaCxXrbk.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iXrJ4\/yF\/l\/en_US\/KpdmaCxXrbk.js","c":1,"p":":33","m":"1018072227_main"},"nH8nCaN":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3i4114\/y9\/l\/rt\/TPp4r4DTd6U.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7i4114\/y6\/l\/en_US\/TPp4r4DTd6U.js","c":1,"p":":12","m":"1018072227_main"},"NQLlfG2":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iY-Y4\/yl\/l\/rt\/E4aGTVxC2nj.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iY-Y4\/yw\/l\/en_US\/E4aGTVxC2nj.js","c":1,"p":":24","m":"1018072227_main"},"0DhT4t6":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iCUV4\/yP\/l\/rt\/eT8o1iCEdXa.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iCUV4\/ym\/l\/en_US\/eT8o1iCEdXa.js","c":1,"p":":35","m":"1018072227_main"},"qWX8sWF":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iJ3t4\/ys\/l\/rt\/jwMe24ZeyPw.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iJ3t4\/yo\/l\/en_US\/jwMe24ZeyPw.js","c":1,"p":":128","m":"1018072227_main"},"Ni4Wnff":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iXNj4\/yi\/l\/rt\/j3PVDVEGfbS.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iXNj4\/y-\/l\/en_US\/j3PVDVEGfbS.js","c":1,"p":":26","m":"1018072227_main"},"HxQDhQJ":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3i3uu4\/y2\/l\/rt\/I6OEshxaJLb.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7i3uu4\/yo\/l\/en_US\/I6OEshxaJLb.js","c":1,"p":":154","m":"1018072227_main"},"4hny5Ac":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iOEA4\/yi\/l\/rt\/8JxXFm1twal.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iOEA4\/yc\/l\/en_US\/8JxXFm1twal.js","c":1,"p":":182","m":"1018072227_main"},"VmsME0b":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iB5w4\/y2\/l\/rt\/zTPZwgAxofs.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iB5w4\/yE\/l\/en_US\/zTPZwgAxofs.js","c":1,"p":":53","m":"1018072227_main"},"IZZqytq":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iw2n4\/yT\/l\/rt\/JMYlCfvGpMJ.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iw2n4\/yd\/l\/en_US\/JMYlCfvGpMJ.js","c":1,"p":":122","m":"1018072227_main"},"\/9QLqMI":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yb\/r\/qXYvgBWQS1q.js","c":1,"p":":114","m":"1018072227_main"},"WL4swjd":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iNrs4\/yY\/l\/rt\/donqKK_Dv61.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iNrs4\/y0\/l\/en_US\/donqKK_Dv61.js","c":1,"p":":116","m":"1018072227_main"},"YWTJlBx":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yA\/r\/GSkPF-VZFTk.js","c":1,"p":":206","m":"1018072227_main"},"kfiiT2r":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iq274\/y4\/l\/rt\/KtBBEKCYzsi.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iq274\/yR\/l\/en_US\/KtBBEKCYzsi.js","c":1,"p":":176","m":"1018072227_main"},"hUx8D1I":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3inCB4\/yG\/l\/rt\/VzcTp4tGD9e.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7inCB4\/yz\/l\/en_US\/VzcTp4tGD9e.js","c":1,"p":":201","m":"1018072227_main"},"wCz0Cyh":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iiDn4\/yv\/l\/rt\/duJxhZWl9PJ.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7iiDn4\/y8\/l\/en_US\/duJxhZWl9PJ.js","c":1,"p":":103","m":"1018072227_main"},"H0SsTnU":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3itu04\/yb\/l\/rt\/2b-Iw6nVyr-.js","tsrc":"https:\/\/static.whatsapp.net\/rsrc-translations.php\/v7itu04\/yg\/l\/en_US\/2b-Iw6nVyr-.js","c":1,"p":":178","m":"1018072227_main"},"mpVqeE4":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yO\/r\/yPowwKlCoGk.js","c":1,"p":":101","m":"1018072227_main"},"RIMg8Zt":{"type":"js","src":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yM\/r\/Lz7N8MRDWLine truncated
<script type="application/json" data-content-len="130" data-sjs>{"require":[["DeferredJSResourceScheduler",null,null,[["D9ar2nt","a\/ErpYx","hnModTo","rtkaIRw","a5fZ54F","nH8nCaN","NQLlfG2"]]]]}</script>
<script type="application/json" data-content-len="6173" data-sjs>{"require":[["ScheduledServerJSWithCSS","handle",null,[{"__bbox":{"define":[["cr:104",[],{"__rc":[null,null]},-1],["cr:1066",[],{"__rc":[null,null]},-1],["cr:2015",[],{"__rc":[null,null]},-1],["cr:4937",[],{"__rc":[null,null]},-1],["cr:5037",[],{"__rc":[null,null]},-1],["cr:5735",[],{"__rc":[null,null]},-1],["cr:5736",[],{"__rc":[null,null]},-1],["cr:5923",[],{"__rc":[null,null]},-1],["cr:5932",[],{"__rc":[null,null]},-1],["cr:5959",[],{"__rc":[null,null]},-1],["cr:5993",[],{"__rc":[null,null]},-1],["cr:5997",[],{"__rc":[null,null]},-1],["cr:6003",[],{"__rc":[null,null]},-1],["cr:6004",[],{"__rc":[null,null]},-1],["cr:6005",[],{"__rc":[null,null]},-1],["cr:6018",[],{"__rc":[null,null]},-1],["cr:7004",["ReactReconcilerConstants.classic"],{"__rc":["ReactReconcilerConstants.classic",null]},-1],["cr:7007",["ReactReconciler.classic"],{"__rc":["ReactReconciler.classic",null]},-1],["cr:7456",[],{"__rc":[null,null]},-1],["cr:8750",[],{"__rc":[null,null]},-1],["cr:8751",[],{"__rc":[null,null]},-1],["cr:8752",[],{"__rc":[null,null]},-1],["cr:8753",[],{"__rc":[null,null]},-1],["cr:10202",[],{"__rc":[null,null]},-1],["cr:10204",[],{"__rc":[null,null]},-1],["cr:10207",[],{"__rc":[null,null]},-1],["cr:10208",[],{"__rc":[null,null]},-1],["cr:10209",[],{"__rc":[null,null]},-1],["cr:10210",[],{"__rc":[null,null]},-1],["cr:10211",[],{"__rc":[null,null]},-1],["cr:12061",["useWAWebNoop"],{"__rc":["useWAWebNoop",null]},-1],["cr:12093",[],{"__rc":[null,null]},-1],["cr:8828",[],{"__rc":[null,null]},-1],["cr:1094907",[],{"__rc":[null,null]},-1],["cr:921407",["useNoopDebuggingInfoComponent"],{"__rc":["useNoopDebuggingInfoComponent",null]},-1],["cr:1634616",["CometUserActivity"],{"__rc":["CometUserActivity",null]},-1],["cr:2695",[],{"__rc":[null,null]},-1],["cr:6008",[],{"__rc":[null,null]},-1],["cr:7002",["ReactReconcilerConstants-prod.classic"],{"__rc":["ReactReconcilerConstants-prod.classic",null]},-1],["cr:6994",["ReactReconciler-prod.classic"],{"__rc":["ReactReconciler-prod.classic",null]},-1]],"require":[["CometSuspenseFalcoEvent"],["WAWebMainWrapper"],["WAFtsMultiLangTokenizer"],["WAWebEmojiAssetLoaderConfig"],["asn1js-2.1.1"],["WAWebEmojiAssetLoader"],["WAWebSetWorkerSafeHandlerApi"],["WAWebSetFrontendHandlerApi"],["WAWebPipVideoStreaming"],["WAWebClearAppStates"],["WAWebLinkDeviceScreen.react"],["FbtLogging"],["IntlQtEventFalcoEvent"],["emptyFunction","thatReturns",["RequireDeferredReference"],[[{"__dr":"CometSuspenseFalcoEvent"},{"__dr":"WAWebMainWrapper"},{"__dr":"WAFtsMultiLangTokenizer"},{"__dr":"WAWebEmojiAssetLoaderConfig"},{"__dr":"asn1js-2.1.1"},{"__dr":"WAWebEmojiAssetLoader"},{"__dr":"WAWebSetWorkerSafeHandlerApi"},{"__dr":"WAWebSetFrontendHandlerApi"},{"__dr":"WAWebPipVideoStreaming"},{"__dr":"WAWebClearAppStates"},{"__dr":"WAWebLinkDeviceScreen.react"},{"__dr":"FbtLogging"},{"__dr":"IntlQtEventFalcoEvent"}]]],["CometBTManifestLoader","init",[],[]],["WAWebEmojiSetup"],["Bootloader","markComponentsAsImmediate",[],[["WAWebNewsletterContextMenu","WAWebAddToFavoritesModal.react","WAWebCaptureMediaDrawer.react","WAWebContactUsModal.react","WAWebCommunityFlow.react","WAWebProfileDrawer.react","pkijs","WAWebSendLogsPopup.react","WAWebSendMsgMultiModal.react","WAWebStarredDrawerV2.react","WAWebNewSubgroupSuggestionFlow.react","WAWebCreateTextStatusFlow.react","WAWebNewsletterTabFlow.react","WAWebVerificationDrawer.react","WAWebAddContactToGroupFlow.react","WAWebArchivedFlow.react","WAWebAttachMediaFlow.react","WAWebAttachVcardsFlow.react","WAWebContactMsgInfoFlow.react","WAWebEditCaptureFlow.react","WAWebGroupMsgInfoFlow.react","WAWebGroupsV4InviteFlow.react","WAWebInfoFlow.react","WAWebMediaViewerFlow.react","WAWebStatusFlow.react","WAWebStatusQuotedFlow.react","WAWebNewChatFlow.react","WAWebNewGroupFlow.react","WAWebSendGroupInviteFlow.react","WAWebSettingsFlow.react","WAWebDirectConnectionCaBundle","WAWebBizCartFlow","relay-runtime","WAWebPhotoPicker.react","WAWebLottieAnimation.react","WAWebStickerStoreFlow","WAWebBizOrderStatusUpdateFlow.react","WAWebDeactivateCommunityDrawer.react","WAWebCommunityAdminPromotionNotificationFlow.react","WAWebManageCommunityGroupsFlow.react","WAWebBizCatalogManagementFlow.react","WAWebBizLabelFlow.react","WAWebBizManageLabelFlow.react","WAWebBizMerchantDetailsFormFlow.react","WAWebBizOrderManagementFlow.react","WAWebBizProductDetailsFlow.react","WAWebBizQuickRepliesFlow.react","WAWebBizSendProductModal.react","WAWebBizAttachProductModal.react","WAWebBizRemoveDirectConnectionKeysBridge","WAWebGroupInviteLinkDrawer.react","WAWebForwardMessageModal.react","WAWebBizMerchantDetailsDrawer.react","WAWebViewAllRepliesFlow.react","WAWebStatusDrawerFlow.react","WAWebAdsManagementDrawer.react","pdfjs-dist","WAWebSeeReviewDetailScreenDrawer.react","WAWebBizToolsFlow.react","WAWebStatusPrivacySettingsModalFlow.react","WAWebNewsletterDSAReportDetailsDrawer.react","WAWeb-lottie-light-canvas","WAWebEventInfoFlow.react","WAWebNewsletteLine truncated
<script type="application/json" data-content-len="85" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941","tierThreeEnd"]]]}</script>
<script type="application/json" data-content-len="3280" data-sjs>{"require":[["CometQPLPayloadStore","storePayloadMap",null,[{"7435115086220858941":{"css\/cgu0bcly5o8w04ww.pkg,css\/8ssldt5oxp8g4o80.pkg,css\/77bvrgeabmo0ccc4.pkg.__composite__.css":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v4\/y4\/l\/0,cross\/nJSuJRxe0LRIuQQZ3xdyKtes83aNhixgx.css","refs":["htmlStart","tierOne","tierTwo","tierThree"]},"js\/adwjvc6bn6ogsocw.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yl\/r\/HOQztTu5JYT.js","refs":["htmlStart","tierOne","tierTwo","tierThree"]},"js\/c3ax5tl3nrc4kc88.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yw\/r\/dYGBdB10S1Z.js","refs":["htmlStart","tierOne","tierTwo","tierThree"]},"js\/94dcx39n0x8ooocc.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yS\/r\/UhwbwVdbQX0.js","refs":["htmlStart","tierOne","tierTwo","tierThree"]},"js\/boe4n1nexrwc0ws8.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yx\/r\/ryQSgyNOW8X.js","refs":["htmlStart","tierOne","tierTwo","tierThree"]},"js\/11h6rv0quww0048k.pkg,js\/ajfm1uik02woo48s.pkg,js\/3q7umf15ec00c8og.pkg,js\/4x9cumf05twko8s8.pkg,js\/4sx05anpb4ao84gw.pkg,js\/btvqx8uxs9sgkw4s.pkg,js\/csa9qir353c4goc0.pkg.__composite__.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iWBv4\/yk\/l\/rt\/IN3s4Kru2-t2RSfFSjWLjPTFOQq3__cln_2SsOE-ssqJx0Eef7DOYopYnK0rykQBR7vsWqehdEtWw.js","refs":["htmlStart","tierTwo","tierThree"]},"js\/bls5blk1p3k8gc04.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iHCc4\/yu\/l\/rt\/rW3lOI79YLL.js","refs":["htmlStart","tierTwo","tierThree"]},"js\/6lvucz4kv18g0og0.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/yR\/r\/h4Qy0FiYsZ_.js","refs":["htmlStart","tierTwo","tierThree"]},"js\/ci5trb6air4sskow.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iuY-4\/ym\/l\/rt\/yTGZCBMSfU8.js","refs":["htmlStart","tierTwo","tierThree"]},"js\/7smu524m1iko4ogs.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y6\/r\/OicDJTSlcdh.js","refs":["htmlStart","tierTwo","tierThree"]},"js\/7ir3e8fs6rokcc0w.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3i6sf4\/y_\/l\/rt\/65HPwmPTxvE.js","refs":["tierThree"]},"js\/6h6os3dm0kg0cog0.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3\/y_\/r\/Erq9JIEfuV6.js","refs":["tierThree"]},"js\/dt5kj0sja4o4kwos.pkg,js\/bqvubmtfy1w08804.pkg,js\/25aaww03azr4soww.pkg,js\/cdkr9wbfnr40ssg0.pkg,js\/7z0ji06w2wgskkwc.pkg,js\/6h5n7x3sc2ccgsoc.pkg.__composite__.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iis_4\/yd\/l\/rt\/ZqmYe3zRs7GwaJyZPA-vVYdNU4SErCrmvFPlNguXyB9esMiW0MeCLnGG_AUzITVDxz.js","refs":["tierThree"]},"js\/cqp6eiggu00ksgww.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iXrJ4\/yS\/l\/rt\/KpdmaCxXrbk.js","refs":["tierThree"]},"js\/mzhqcy7m8ao0oocw.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iekP4\/yH\/l\/rt\/NXnawuAbdD4.js","refs":["tierThree"]},"js\/8etvpcy3s2kggwkg.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3i4114\/y9\/l\/rt\/TPp4r4DTd6U.js","refs":["tierThree"]},"js\/6h1am4ng39s800kg.pkg.js":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v3iY-Y4\/yl\/l\/rt\/E4aGTVxC2nj.js","refs":["tierThree"]},"css\/dp3ugr89mbwo4osk.pkg.css":{"url":"https:\/\/static.whatsapp.net\/rsrc.php\/v4\/y7\/l\/0,cross\/WfrI-AAXpPh.css","refs":["tierThree"]}}}]]]}</script>
<script type="application/json" data-content-len="69" data-sjs>{"require":[["qplTagServerJS",null,null,[["lastServerTagFlushed"]]]]}</script>
<script type="application/json" data-content-len="1583" data-sjs>{"require":[["qplTimingsServerJS",null,null,["7435115086220858941-server","earlyFlushStart",11]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genEFRsrcStart",15]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genEFRsrcEnd",19]],["qplTimingsServerJS",null,null,["7435115086220858941-server","earlyFlushEnd",23]],["qplTimingsServerJS",null,null,["7435115086220858941-server","cometPageRender",25]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genTierOneStart",25]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genRenderSplashScreenStart",25]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genRenderSplashScreenEnd",26]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genTierOneEnd",36]],["qplTimingsServerJS",null,null,["7435115086220858941-server","tierOnePreloadersFinished",37]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genTierTwoStart",37]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genTierTwoEnd",78]],["qplTimingsServerJS",null,null,["7435115086220858941-server","tierTwoPreloadersFinished",83]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genTierThreeStart",83]],["qplTimingsServerJS",null,null,["7435115086220858941-server","genTierThreeEnd",107]],["qplTimingsServerJS",null,null,["7435115086220858941-server","tierThreePreloadersFinished",109]],["qplTimingsServerJS",null,null,["7435115086220858941-server","responseStart",1]],["qplTimingsServerJS",null,null,["7435115086220858941-server","responseEnd",109]]]}</script>
<script type="application/json" data-content-len="2" data-sjs>{}</script>
<script type="application/json" data-content-len="169" data-sjs>{"require":[["CometQPLPayloadStore","storePayloadBytesSent",null,[{"htmlStart":[14607,4599],"tierOne":[11806,4255],"tierTwo":[110183,31134],"tierThree":[52210,7574]}]]]}</script>
<div id='has-finished-comet-page' hidden style='display: none;'></div></body></html>
+80 -11
View File
@@ -1,7 +1,9 @@
import { GetChatMessagesFilter } from '@waha/structures/chats.dto';
import { Label } from '@waha/structures/labels.dto';
import { PaginationParams } from '@waha/structures/pagination.dto';
import { TextStatus } from '@waha/structures/status.dto';
import * as lodash from 'lodash';
import { Client } from 'whatsapp-web.js';
import { Client, Events } from 'whatsapp-web.js';
import { Message } from 'whatsapp-web.js/src/structures';
// eslint-disable-next-line @typescript-eslint/no-var-requires
@@ -17,16 +19,14 @@ const { LoadPaginator } = require('./_Paginator.js');
const ChatFactory = require('whatsapp-web.js/src/factories/ChatFactory');
export class WebjsClient extends Client {
async inject() {
// Even tho this.inject is not defined as interface in Client.ts
// We can still call and override it
// @ts-ignore
await super.inject();
// Load util functions (serializers, helper functions)
await this.pupPage.evaluate(LoadLodash);
await this.pupPage.evaluate(LoadPaginator);
await this.pupPage.evaluate(LoadWAHA);
constructor(options) {
super(options);
// Wait until it's READY and inject more utils
this.on(Events.READY, async () => {
await this.pupPage.evaluate(LoadLodash);
await this.pupPage.evaluate(LoadPaginator);
await this.pupPage.evaluate(LoadWAHA);
});
}
async unpair() {
@@ -45,6 +45,44 @@ export class WebjsClient extends Client {
});
}
async createLabel(name: string, color: number): Promise<number> {
const labelId: number = await this.pupPage.evaluate(
async (name, color) => {
// @ts-ignore
return await window.WAHA.WAWebBizLabelEditingAction.labelAddAction(
name,
color,
);
},
name,
color,
);
return labelId;
}
async deleteLabel(label: Label) {
return await this.pupPage.evaluate(async (label) => {
// @ts-ignore
return await window.WAHA.WAWebBizLabelEditingAction.labelDeleteAction(
label.id,
label.name,
label.color,
);
}, label);
}
async updateLabel(label: Label) {
return await this.pupPage.evaluate(async (label) => {
// @ts-ignore
return await window.WAHA.WAWebBizLabelEditingAction.labelEditAction(
label.id,
label.name,
undefined, // predefinedId
label.color,
);
}, label);
}
async getChats(pagination?: PaginationParams) {
if (lodash.isEmpty(pagination)) {
return await super.getChats();
@@ -62,6 +100,37 @@ export class WebjsClient extends Client {
return chats.map((chat) => ChatFactory.create(this, chat));
}
async sendTextStatus(status: TextStatus) {
// Convert from hex to number
const waColor = 'FF' + status.backgroundColor.replace('#', '');
const color = parseInt(waColor, 16);
const textStatus = {
text: status.text,
color: color,
font: status.font,
};
const sentMsg = await this.pupPage.evaluate(async (status) => {
// @ts-ignore
await window.Store.SendStatus.sendStatusTextMsgAction(status);
// @ts-ignore
const meUser = window.Store.User.getMeUser();
// @ts-ignore
const myStatus = window.Store.Status.getModelsArray().findLast(
(x) => x.id == meUser,
);
if (!myStatus) {
return undefined;
}
// @ts-ignore
const msg = myStatus.msgs.last();
// @ts-ignore
return msg ? window.WWebJS.getMessageModel(msg) : undefined;
}, textStatus);
return sentMsg ? new Message(this, sentMsg) : undefined;
}
async getMessages(
chatId: string,
filter: GetChatMessagesFilter,
+3
View File
@@ -1,5 +1,8 @@
exports.LoadWAHA = () => {
window.WAHA = {};
window.WAHA.WAWebBizLabelEditingAction = window.require(
'WAWebBizLabelEditingAction',
);
window.WAHA.getChats = async (pagination) => {
let chats = window.Store.Chat.getModelsArray().slice();
+49 -7
View File
@@ -1,8 +1,10 @@
import { UnprocessableEntityException } from '@nestjs/common';
import {
getChannelInviteLink,
WAHAInternalEvent,
WhatsappSession,
} from '@waha/core/abc/session.abc';
import { toJID } from '@waha/core/engines/noweb/session.noweb.core';
import { LocalAuth } from '@waha/core/engines/webjs/LocalAuth';
import { WebjsClient } from '@waha/core/engines/webjs/WebjsClient';
import {
@@ -58,11 +60,16 @@ import {
ParticipantsRequest,
SettingsSecurityChangeInfo,
} from '@waha/structures/groups.dto';
import { Label, LabelID } from '@waha/structures/labels.dto';
import { Label, LabelDTO, LabelID } from '@waha/structures/labels.dto';
import { ReplyToMessage } from '@waha/structures/message.dto';
import { PaginationParams } from '@waha/structures/pagination.dto';
import { WAMessage, WAMessageReaction } from '@waha/structures/responses.dto';
import { MeInfo } from '@waha/structures/sessions.dto';
import {
BROADCAST_ID,
StatusRequest,
TextStatus,
} from '@waha/structures/status.dto';
import { WAMessageRevokedBody } from '@waha/structures/webhooks.dto';
import { PaginatorInMemory } from '@waha/utils/Paginator';
import { sleep, waitUntil } from '@waha/utils/promiseTimeout';
@@ -132,8 +139,8 @@ export class WhatsappSessionWebJSCore extends WhatsappSession {
protected getClientOptions(): ClientOptions {
const path = this.getClassDirName();
const webVersion =
this.engineConfig?.webVersion || '2.3000.1014522270-alpha';
// this.log.debug(`Using web version: '${webVersion}'`);
this.engineConfig?.webVersion || '2.3000.1018072227-alpha';
this.logger.info(`Using web version: '${webVersion}'`);
return {
puppeteer: {
headless: true,
@@ -143,9 +150,10 @@ export class WhatsappSessionWebJSCore extends WhatsappSession {
},
webVersion: webVersion,
webVersionCache: {
type: 'none',
// path: path,
// strict: true,
// type: 'none',
type: 'local',
path: path,
strict: true,
},
};
}
@@ -336,7 +344,6 @@ export class WhatsappSessionWebJSCore extends WhatsappSession {
});
this.whatsapp.on(Events.AUTHENTICATED, (args) => {
this.status = WAHASessionStatus.WORKING;
this.qr.save('');
this.logger.info({ args: args }, `Session has been authenticated!`);
});
@@ -632,6 +639,24 @@ export class WhatsappSessionWebJSCore extends WhatsappSession {
return labels.map(this.toLabel);
}
public async createLabel(label: LabelDTO): Promise<Label> {
const labelId = await this.whatsapp.createLabel(label.name, label.color);
return {
id: labelId.toString(),
name: label.name,
color: label.color,
colorHex: Label.toHex(label.color),
};
}
public async updateLabel(label: Label): Promise<Label> {
return await this.whatsapp.updateLabel(label);
}
public deleteLabel(label: Label): Promise<void> {
return this.whatsapp.deleteLabel(label);
}
public getChatsByLabelId(labelId: string) {
return this.whatsapp.getChatsByLabelId(labelId);
}
@@ -950,6 +975,22 @@ export class WhatsappSessionWebJSCore extends WhatsappSession {
}
}
/**
* Status methods
*/
protected checkStatusRequest(request: StatusRequest) {
if (request.contacts?.length > 0) {
const msg =
"WEBJS doesn't accept 'contacts'. Remove the field to send status to all contacts.";
throw new UnprocessableEntityException(msg);
}
}
public sendTextStatus(status: TextStatus) {
this.checkStatusRequest(status);
return this.whatsapp.sendTextStatus(status);
}
/**
* END - Methods for API
*/
@@ -1129,6 +1170,7 @@ export class WhatsappSessionWebJSCore extends WhatsappSession {
return {
mentions: mentions,
quotedMessageId: quotedMessageId,
linkPreview: request.linkPreview,
};
}
}
+1
View File
@@ -63,6 +63,7 @@ export class LocalStoreCore extends LocalStore {
const engineDir = this.getEngineDirectory();
const database = path.join(engineDir, 'waha.sqlite3');
this.db = new Database(database);
this.db.pragma('journal_mode = WAL;');
}
return this.db;
}
+4
View File
@@ -49,9 +49,11 @@ export class ChatQuery extends SessionQuery {
export class GetMessageQuery extends GetChatMessagesQuery {
@IsNotEmpty()
@IsString()
session: string = WHATSAPP_DEFAULT_SESSION_NAME;
@ChatIdProperty()
@IsString()
chatId: string;
}
@@ -154,6 +156,8 @@ export class MessageTextRequest extends ChatRequest {
@ReplyToProperty()
reply_to?: string;
linkPreview?: boolean = true;
}
export class EditMessageRequest {
+62 -1
View File
@@ -1,5 +1,7 @@
import { UnprocessableEntityException } from '@nestjs/common';
import { ApiProperty } from '@nestjs/swagger';
import { ChatIdProperty } from '@waha/structures/properties.dto';
import { IsHexColor, IsNumber, IsOptional, IsString } from 'class-validator';
const Colors = [
'#ff9485',
@@ -24,6 +26,65 @@ const Colors = [
'#9368cf',
];
export class LabelBody {
@ApiProperty({
example: 'Lead',
description: 'Label name',
})
@IsString()
name: string;
@ApiProperty({
example: '#ff9485',
description: 'Color in hex',
})
@IsHexColor()
@IsOptional()
colorHex?: string;
@ApiProperty({
example: null,
description: 'Color number, not hex',
})
@IsNumber()
@IsOptional()
color?: number;
toDTO(): LabelDTO {
if (this.color != null && this.colorHex != null) {
throw new UnprocessableEntityException(
"Use either 'color' or 'colorHex'",
);
}
if (this.color == null && this.colorHex == null) {
throw new UnprocessableEntityException(
"'color' or 'colorHex' is required",
);
}
if (this.colorHex) {
const color = Colors.indexOf(this.colorHex);
if (color == -1) {
throw new UnprocessableEntityException(
"Invalid 'colorHex'. Possible values: " + Colors.join(', '),
);
}
this.color = color;
}
return {
name: this.name,
color: this.color,
};
}
}
export class LabelDTO {
name: string;
color: number;
}
export class Label {
@ApiProperty({
example: '1',
@@ -39,7 +100,7 @@ export class Label {
@ApiProperty({
example: 0,
description: 'Internal color number, not hex',
description: 'Color number, not hex',
})
color: number;
+28 -12
View File
@@ -11,23 +11,27 @@ import {
export const BROADCAST_ID = 'status@broadcast';
class StatusRequest {
@ApiProperty({
description:
'it is always necessary to inform the list of contacts that will have access to the posted status',
example: ['55xxxxxxxxxxx@c.us'],
})
contacts = ['55xxxxxxxxxxx@c.us'];
const ContactsProperty = ApiProperty({
description: 'Contact list to send the status to.',
example: null,
required: false,
});
export interface StatusRequest {
contacts?: string[];
}
export class TextStatus extends StatusRequest {
export class TextStatus {
text: string = 'Have a look! https://github.com/';
backgroundColor: string = '#38b42f';
font: number = 1;
@ContactsProperty
contacts?: string[];
}
@ApiExtraModels(RemoteFile, BinaryFile)
export class ImageStatus extends StatusRequest {
export class ImageStatus {
@ApiProperty({
oneOf: [
{ $ref: getSchemaPath(RemoteFile) },
@@ -37,10 +41,13 @@ export class ImageStatus extends StatusRequest {
file: RemoteFile | BinaryFile;
caption?: string;
@ContactsProperty
contacts?: string[];
}
@ApiExtraModels(VoiceRemoteFile, VoiceBinaryFile)
export class VoiceStatus extends StatusRequest {
export class VoiceStatus {
@ApiProperty({
oneOf: [
{ $ref: getSchemaPath(VoiceRemoteFile) },
@@ -50,10 +57,13 @@ export class VoiceStatus extends StatusRequest {
file: VoiceRemoteFile | VoiceBinaryFile;
backgroundColor: string = '#38b42f';
@ContactsProperty
contacts?: string[];
}
@ApiExtraModels(VideoRemoteFile, VideoBinaryFile)
export class VideoStatus extends StatusRequest {
export class VideoStatus {
@ApiProperty({
oneOf: [
{ $ref: getSchemaPath(VideoRemoteFile) },
@@ -63,12 +73,18 @@ export class VideoStatus extends StatusRequest {
file: VideoRemoteFile | VideoBinaryFile;
caption?: string;
@ContactsProperty
contacts?: string[];
}
export class DeleteStatusRequest extends StatusRequest {
export class DeleteStatusRequest {
@ApiProperty({
description: 'status message id',
example: 'AAAAAAAAAAAAAAAAA',
})
id: string;
@ContactsProperty
contacts?: string[];
}
+1 -1
View File
@@ -33,7 +33,7 @@ export function getEngineName(): string {
}
export const VERSION: WAHAEnvironment = {
version: '2024.10.11',
version: '2024.11.4',
engine: getEngineName(),
tier: getWAHAVersion(),
browser: getBrowserExecutablePath(),
+4 -4
View File
@@ -7,7 +7,7 @@ __metadata:
"@adiwajshing/baileys@github:devlikeapro/Baileys#fork-master-channels-678":
version: 6.7.8
resolution: "@adiwajshing/baileys@https://github.com/devlikeapro/Baileys.git#commit=1a3d827b5d9633e0b82d95362fc07cf1060aa32f"
resolution: "@adiwajshing/baileys@https://github.com/devlikeapro/Baileys.git#commit=e2d6246da89a4775a8482fbe8de2a42b8421516d"
dependencies:
"@adiwajshing/keyed-db": ^0.2.4
"@hapi/boom": ^9.1.3
@@ -39,7 +39,7 @@ __metadata:
optional: true
sharp:
optional: true
checksum: fd4053af48069c3cdd6017075490d2061302e8006acbcf4d9a831159a1ae213548d135acbc4f2b8217c48bf989dbdc5c96a904df71becf2b0576a7a61998cc83
checksum: 43ac116fcc3eca176ff036a296c99d8be39bdcaafb788fb65305ee06d59060f0b8b8d5dee8596d9dca9794843dd76e90769e5acfa6d14ff55ad2a0f2616686e3
languageName: node
linkType: hard
@@ -12384,7 +12384,7 @@ __metadata:
"whatsapp-web.js@github:devlikeapro/whatsapp-web.js#fork-main-channels":
version: 1.26.0
resolution: "whatsapp-web.js@https://github.com/devlikeapro/whatsapp-web.js.git#commit=76329eedc27b07c11e38bf1b60e6c2476c11dd73"
resolution: "whatsapp-web.js@https://github.com/devlikeapro/whatsapp-web.js.git#commit=aa90f7378659a237f30cda6d368359a1f81904dc"
dependencies:
"@pedroslopez/moduleraid": ^5.0.2
archiver: ^5.3.1
@@ -12402,7 +12402,7 @@ __metadata:
optional: true
unzipper:
optional: true
checksum: b8d4fcb1fd1365a38f07f95dd2eb1fd743c6c406fc7ac679662ddeded80c441720bc8400222a37d61765ebcbb5c6799f169d5ac45f12f58b5421c55bb9f2ab7e
checksum: 7c914e9cdd4a25c967e057d0cb5019973f0556f6220320e4bcbc0666669801b92abf97c2cc783762ef462d0006123953e233136f457689ebac395260fe69a5fc
languageName: node
linkType: hard