zaileys 2.0.14 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,56 @@
1
+ name: Deploy Jekyll with GitHub Pages dependencies preinstalled
2
+
3
+ on:
4
+ # Runs on pushes targeting the default branch
5
+ push:
6
+ branches: ["main"]
7
+
8
+ # Allows you to run this workflow manually from the Actions tab
9
+ workflow_dispatch:
10
+
11
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
12
+ permissions:
13
+ contents: read
14
+ pages: write
15
+ id-token: write
16
+
17
+ # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
18
+ # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
19
+ concurrency:
20
+ group: "pages"
21
+ cancel-in-progress: false
22
+
23
+ jobs:
24
+ # Build job
25
+ build:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - name: Checkout
29
+ uses: actions/checkout@v4
30
+ - name: Setup Pages
31
+ uses: actions/configure-pages@v5
32
+ - name: Build with Jekyll
33
+ uses: actions/jekyll-build-pages@v1
34
+ with:
35
+ source: ./
36
+ destination: ./_site
37
+
38
+ - name: Inject Google Site Verification Meta Tag
39
+ run: |
40
+ META_TAG='<meta name="google-site-verification" content="D1yM0hOKOz3yT6N4uIb753KAWhGQ1m80hIyCkd8QrTg" />'
41
+ find ./_site -name "*.html" -exec sudo sed -i "s|</head>|$META_TAG\n</head>|g" {} +
42
+
43
+ - name: Upload artifact
44
+ uses: actions/upload-pages-artifact@v3
45
+
46
+ # Deployment job
47
+ deploy:
48
+ environment:
49
+ name: github-pages
50
+ url: ${{ steps.deployment.outputs.page_url }}
51
+ runs-on: ubuntu-latest
52
+ needs: build
53
+ steps:
54
+ - name: Deploy to GitHub Pages
55
+ id: deployment
56
+ uses: actions/deploy-pages@v4
package/README.MD CHANGED
@@ -1,33 +1,37 @@
1
- <div align="center">
2
- <img alt="Zaileys - Simplified WhatsApp Node.js TypeScript/JavaScript API" src="https://socialify.git.ci/zeative/zaileys/image?custom_description=Simplified+WhatsApp+Node.js+TypeScript%2FJavaScript+API&custom_language=TypeScript&description=1&font=Inter&language=1&owner=1&pattern=Charlie+Brown&theme=Auto">
3
-
4
- <h1 align="center">Zaileys - Simplified WhatsApp Node.js TypeScript/JavaScript API</h1>
5
-
6
- <a href="https://www.npmjs.com/package/zaileys"><img src="https://img.shields.io/npm/v/zaileys.svg" alt="NPM Version"></a>
7
- <a href="https://www.npmjs.com/package/zaileys"><img src="https://img.shields.io/npm/dw/zaileys?label=npm&color=%23CB3837" alt="NPM Downloads"></a>
8
- <a href="https://github.com/zeative/zaileys/releases"><img src="https://img.shields.io/npm/dt/zaileys" alt="NPM Downloads"></a>
9
- <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/languages/code-size/zeative/zaileys" alt="GitHub Code Size"></a>
10
- <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/issues/zeative/zaileys" alt="GitHub Issues"></a>
11
- <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/issues-closed/zeative/zaileys" alt="GitHub Closed Issues"></a>
12
- <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/badge/TypeScript-5.0%2B-blue?style=flat-square&logo=typescript" alt="TypeScript"></a>
13
- <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/license/zeative/zaileys" alt="GitHub License"></a>
14
- <a href="https://discord.gg/SfnWWYUe"><img alt="Discord" src="https://img.shields.io/discord/1105833273415962654?logo=discord&label=discord&link=https%3A%2F%2Fgithub.com%2Fzeative%2Fzaileys"></a>
15
- <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/stars/zeative/zaileys" alt="GitHub Stars"></a>
16
- <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/forks/zeative/zaileys" alt="GitHub Forks"></a>
17
- <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/watchers/zeative/zaileys" alt="GitHub Watchers"></a>
18
- [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/zeative/zaileys)
1
+ <dd align="center">
2
+
3
+ <img alt="Zaileys - Simplified WhatsApp Node.js TypeScript/JavaScript API" src="https://github.com/zeative/zeative/blob/main/libraries/zaileys/zaileys-clean.png?raw=true" width="140">
4
+
5
+ <h1 align="center">Zaileys - Simplified WhatsApp Node.js TypeScript/JavaScript API</h1>
19
6
 
7
+ <br>
8
+
9
+ <div align="center">
10
+ <a href="https://www.npmjs.com/package/zaileys"><img src="https://img.shields.io/npm/v/zaileys.svg" alt="NPM Version"></a>
11
+ <a href="https://www.npmjs.com/package/zaileys"><img src="https://img.shields.io/npm/dw/zaileys?label=npm&color=%23CB3837" alt="NPM Downloads"></a>
12
+ <a href="https://github.com/zeative/zaileys/releases"><img src="https://img.shields.io/npm/dt/zaileys" alt="NPM Downloads"></a>
13
+ <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/languages/code-size/zeative/zaileys" alt="GitHub Code Size"></a>
14
+ <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/badge/TypeScript-5.0%2B-blue?style=flat-square&logo=typescript" alt="TypeScript"></a>
20
15
  </div>
21
16
 
22
17
  <div align="center">
23
- <p>
24
- <b>Zaileys</b> is a powerful, type-safe wrapper around <a href="https://github.com/WhiskeySockets/Baileys">Baileys</a>, designed to simplify the development of WhatsApp bots. It provides a robust architecture with built-in state management, middleware support, and easy-to-use event handlers, making it perfect for building scalable and maintainable WhatsApp applications.
25
- </p>
18
+ <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/license/zeative/zaileys" alt="GitHub License"></a>
19
+ <a href="https://discord.gg/SfnWWYUe"><img alt="Discord" src="https://img.shields.io/discord/1105833273415962654?logo=discord&label=discord&link=https%3A%2F%2Fgithub.com%2Fzeative%2Fzaileys"></a>
20
+ <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/stars/zeative/zaileys" alt="GitHub Stars"></a>
21
+ <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/forks/zeative/zaileys" alt="GitHub Forks"></a>
22
+ <a href="https://github.com/zeative/zaileys"><img src="https://img.shields.io/github/watchers/zeative/zaileys" alt="GitHub Watchers"></a>
23
+ <a href="https://deepwiki.com/zeative/zaileys"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
26
24
  </div>
27
25
 
28
26
  <br>
29
27
 
30
- <div align="center">
28
+ <dl align="center">
29
+ <dd>
30
+ <b>Zaileys</b> is a powerful, type-safe wrapper around <a href="https://github.com/WhiskeySockets/Baileys">Baileys</a>, designed to simplify the development of WhatsApp bots. It provides a robust architecture with built-in state management, middleware support, and easy-to-use event handlers, making it perfect for building scalable and maintainable WhatsApp applications.
31
+ </dd>
32
+ </dl>
33
+
34
+ <dd align="center">
31
35
 
32
36
  [🚀 Overview](#-overview) &nbsp;&nbsp;•&nbsp;&nbsp;
33
37
  [🪶 Features](#-features) &nbsp;&nbsp;•&nbsp;&nbsp;
@@ -43,8 +47,12 @@
43
47
  [🤝 Contributing](#-contributing)
44
48
 
45
49
  <br>
50
+
46
51
  <a href="https://discord.gg/SfnWWYUe"><img alt="Discord" src="https://discord.com/api/guilds/1105833273415962654/widget.png?style=banner2"></a>
47
- </div>
52
+
53
+ </dd>
54
+
55
+ </dd>
48
56
 
49
57
  <br>
50
58
 
@@ -61,7 +69,7 @@ Targeting **Node.js** and **TypeScript** developers, Zaileys integrates essentia
61
69
  - 🛡️ **Type-Safe** - Full TypeScript + Zod validation with autocomplete
62
70
  - 🏓 **Middleware** - Intercept and process events globally
63
71
  - 🧩 **Plugin System** - Drop-in file-based plugins
64
- - 💾 **State Management** - Built-in `lowdb` for data persistence
72
+ - 💾 **State Management** - Built-in `lowdb` for data persistence with **auto chunking**
65
73
  - 🔔 **Event-Driven** - Clean listeners for `connection`, `messages`, `calls`
66
74
  - 📢 **Rate Limiting** - Anti-spam protection out of the box
67
75
  - 🤖 **Auto-Everything** - Auto-read, auto-reject calls, auto-mentions
@@ -113,12 +121,18 @@ import { Client } from 'zaileys';
113
121
  const { Client } = require('zaileys');
114
122
 
115
123
  const wa = new Client({
124
+ // dynamic session you can change
125
+ session: 'zaileys', // default
126
+
116
127
  // qr code
117
128
  authType: 'qr',
118
129
 
119
130
  // pairing code
120
131
  authType: 'pairing',
121
132
  phoneNumber: 6280000000,
133
+
134
+ // if you want to disable built-in ffmpeg
135
+ // disableFFmpeg: true,
122
136
  });
123
137
 
124
138
  wa.on('messages', async (ctx) => {
@@ -562,7 +576,7 @@ await wa.button(ctx.roomId, {
562
576
 
563
577
  ### Member Label
564
578
 
565
- Labeling user member on group chat (NEW!)
579
+ Labeling user member on group chat.
566
580
 
567
581
  ```typescript
568
582
  await wa.memberLabel(ctx.roomId, 'Fullstack Developer');
@@ -1015,3 +1029,10 @@ Contributions are welcome! Please follow these steps:
1015
1029
  ## 📜 License
1016
1030
 
1017
1031
  Distributed under the **MIT License**. See [`LICENSE`](https://github.com/zeative/zaileys/blob/main/LICENSE) for details.
1032
+
1033
+ <div align="left">
1034
+ <p>
1035
+ <img alt="Zaileys - Simplified WhatsApp Node.js TypeScript/JavaScript API" src="https://github.com/zeative/zeative/blob/main/libraries/zaileys/zaileys-clean.png?raw=true" width="28" align="center">
1036
+ Copyright © 2025 zaadevofc. All rights reserved.
1037
+ </p>
1038
+ </div>
package/dist/index.d.mts CHANGED
@@ -655,6 +655,7 @@ declare const ClientBaseType: z$1.ZodObject<{
655
655
  ignoreMe: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
656
656
  showLogs: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
657
657
  syncFullHistory: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
658
+ disableFFmpeg: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
658
659
  autoMarkAI: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
659
660
  autoMentions: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
660
661
  autoOnline: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
@@ -697,6 +698,7 @@ declare const ClientOptionsType: z$1.ZodUnion<readonly [z$1.ZodObject<{
697
698
  ignoreMe: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
698
699
  showLogs: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
699
700
  syncFullHistory: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
701
+ disableFFmpeg: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
700
702
  autoMarkAI: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
701
703
  autoMentions: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
702
704
  autoOnline: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
@@ -730,6 +732,7 @@ declare const ClientOptionsType: z$1.ZodUnion<readonly [z$1.ZodObject<{
730
732
  ignoreMe: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
731
733
  showLogs: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
732
734
  syncFullHistory: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
735
+ disableFFmpeg: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
733
736
  autoMarkAI: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
734
737
  autoMentions: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
735
738
  autoOnline: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
@@ -1131,6 +1134,7 @@ declare const getDeepContent: (raw?: proto.IMessage | null) => {
1131
1134
  };
1132
1135
  declare const cleanJid: (jid: string) => number;
1133
1136
 
1137
+ declare const configureFFmpeg: (disable?: boolean) => Promise<void>;
1134
1138
  type MediaInput = string | ArrayBuffer | Buffer;
1135
1139
  type AudioType = 'opus' | 'mp3';
1136
1140
  declare class AudioProcessor {
@@ -1207,4 +1211,4 @@ declare class SessionWatchdog {
1207
1211
  declare const createWatchdog: (options: WatchdogOptions) => SessionWatchdog;
1208
1212
  declare const getWatchdog: () => SessionWatchdog | null;
1209
1213
 
1210
- export { AudioProcessor, type AudioType, BaseMessagesType, ButtonInteractiveCallType, ButtonInteractiveCopyType, ButtonInteractiveReplyType, ButtonInteractiveSingleSelectType, ButtonInteractiveType, ButtonInteractiveUrlType, ButtonSimpleType, ButtonType, type CallsContext, CitationType, Client, ClientAuthPairingType, ClientAuthQRType, ClientBaseType, ClientOptionsType, type ConnectionContext, DEVICE_ENUM_TYPES, DocumentProcessor, type EventCallbackType, EventEnumType, FakeReplyType, ImageProcessor, LimiterType, ListenerCallsType, ListenerConnectionType, ListenerMessagesType, Lowdb, MESSAGE_ENUM_TYPES, MediaProcessor, type MessagesContext, type PluginDefinition, Plugins, type PluginsConfigType, type PluginsHandlerType, SessionWatchdog, StickerMetadataType, StickerProcessor, VideoProcessor, cleanJid, cleanMediaObject, cleanupSocket, createLowdb, createWatchdog, definePlugins, extractJids, extractUrls, findGlobalWord, findNestedByKeys, generateId, getDeepContent, getExistingSocket, getLatestLibVersion, getMediaThumbnail, getUsersMentions, getVideoDuration, getVideoThumbnail, getWaAudio, getWaDocument, getWaSticker, getWatchdog, ignoreLint, logColor, modifyFn, normalizeText, numbersToJids, pickKeysFromArray, randomize, registerAuthCreds, removeAuthCreds, repairSessionKeys, shuffleString, toBuffer, toJson, toString, useAuthState };
1214
+ export { AudioProcessor, type AudioType, BaseMessagesType, ButtonInteractiveCallType, ButtonInteractiveCopyType, ButtonInteractiveReplyType, ButtonInteractiveSingleSelectType, ButtonInteractiveType, ButtonInteractiveUrlType, ButtonSimpleType, ButtonType, type CallsContext, CitationType, Client, ClientAuthPairingType, ClientAuthQRType, ClientBaseType, ClientOptionsType, type ConnectionContext, DEVICE_ENUM_TYPES, DocumentProcessor, type EventCallbackType, EventEnumType, FakeReplyType, ImageProcessor, LimiterType, ListenerCallsType, ListenerConnectionType, ListenerMessagesType, Lowdb, MESSAGE_ENUM_TYPES, MediaProcessor, type MessagesContext, type PluginDefinition, Plugins, type PluginsConfigType, type PluginsHandlerType, SessionWatchdog, StickerMetadataType, StickerProcessor, VideoProcessor, cleanJid, cleanMediaObject, cleanupSocket, configureFFmpeg, createLowdb, createWatchdog, definePlugins, extractJids, extractUrls, findGlobalWord, findNestedByKeys, generateId, getDeepContent, getExistingSocket, getLatestLibVersion, getMediaThumbnail, getUsersMentions, getVideoDuration, getVideoThumbnail, getWaAudio, getWaDocument, getWaSticker, getWatchdog, ignoreLint, logColor, modifyFn, normalizeText, numbersToJids, pickKeysFromArray, randomize, registerAuthCreds, removeAuthCreds, repairSessionKeys, shuffleString, toBuffer, toJson, toString, useAuthState };
package/dist/index.d.ts CHANGED
@@ -655,6 +655,7 @@ declare const ClientBaseType: z$1.ZodObject<{
655
655
  ignoreMe: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
656
656
  showLogs: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
657
657
  syncFullHistory: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
658
+ disableFFmpeg: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
658
659
  autoMarkAI: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
659
660
  autoMentions: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
660
661
  autoOnline: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
@@ -697,6 +698,7 @@ declare const ClientOptionsType: z$1.ZodUnion<readonly [z$1.ZodObject<{
697
698
  ignoreMe: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
698
699
  showLogs: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
699
700
  syncFullHistory: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
701
+ disableFFmpeg: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
700
702
  autoMarkAI: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
701
703
  autoMentions: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
702
704
  autoOnline: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
@@ -730,6 +732,7 @@ declare const ClientOptionsType: z$1.ZodUnion<readonly [z$1.ZodObject<{
730
732
  ignoreMe: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
731
733
  showLogs: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
732
734
  syncFullHistory: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
735
+ disableFFmpeg: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
733
736
  autoMarkAI: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
734
737
  autoMentions: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
735
738
  autoOnline: z$1.ZodOptional<z$1.ZodDefault<z$1.ZodBoolean>>;
@@ -1131,6 +1134,7 @@ declare const getDeepContent: (raw?: proto.IMessage | null) => {
1131
1134
  };
1132
1135
  declare const cleanJid: (jid: string) => number;
1133
1136
 
1137
+ declare const configureFFmpeg: (disable?: boolean) => Promise<void>;
1134
1138
  type MediaInput = string | ArrayBuffer | Buffer;
1135
1139
  type AudioType = 'opus' | 'mp3';
1136
1140
  declare class AudioProcessor {
@@ -1207,4 +1211,4 @@ declare class SessionWatchdog {
1207
1211
  declare const createWatchdog: (options: WatchdogOptions) => SessionWatchdog;
1208
1212
  declare const getWatchdog: () => SessionWatchdog | null;
1209
1213
 
1210
- export { AudioProcessor, type AudioType, BaseMessagesType, ButtonInteractiveCallType, ButtonInteractiveCopyType, ButtonInteractiveReplyType, ButtonInteractiveSingleSelectType, ButtonInteractiveType, ButtonInteractiveUrlType, ButtonSimpleType, ButtonType, type CallsContext, CitationType, Client, ClientAuthPairingType, ClientAuthQRType, ClientBaseType, ClientOptionsType, type ConnectionContext, DEVICE_ENUM_TYPES, DocumentProcessor, type EventCallbackType, EventEnumType, FakeReplyType, ImageProcessor, LimiterType, ListenerCallsType, ListenerConnectionType, ListenerMessagesType, Lowdb, MESSAGE_ENUM_TYPES, MediaProcessor, type MessagesContext, type PluginDefinition, Plugins, type PluginsConfigType, type PluginsHandlerType, SessionWatchdog, StickerMetadataType, StickerProcessor, VideoProcessor, cleanJid, cleanMediaObject, cleanupSocket, createLowdb, createWatchdog, definePlugins, extractJids, extractUrls, findGlobalWord, findNestedByKeys, generateId, getDeepContent, getExistingSocket, getLatestLibVersion, getMediaThumbnail, getUsersMentions, getVideoDuration, getVideoThumbnail, getWaAudio, getWaDocument, getWaSticker, getWatchdog, ignoreLint, logColor, modifyFn, normalizeText, numbersToJids, pickKeysFromArray, randomize, registerAuthCreds, removeAuthCreds, repairSessionKeys, shuffleString, toBuffer, toJson, toString, useAuthState };
1214
+ export { AudioProcessor, type AudioType, BaseMessagesType, ButtonInteractiveCallType, ButtonInteractiveCopyType, ButtonInteractiveReplyType, ButtonInteractiveSingleSelectType, ButtonInteractiveType, ButtonInteractiveUrlType, ButtonSimpleType, ButtonType, type CallsContext, CitationType, Client, ClientAuthPairingType, ClientAuthQRType, ClientBaseType, ClientOptionsType, type ConnectionContext, DEVICE_ENUM_TYPES, DocumentProcessor, type EventCallbackType, EventEnumType, FakeReplyType, ImageProcessor, LimiterType, ListenerCallsType, ListenerConnectionType, ListenerMessagesType, Lowdb, MESSAGE_ENUM_TYPES, MediaProcessor, type MessagesContext, type PluginDefinition, Plugins, type PluginsConfigType, type PluginsHandlerType, SessionWatchdog, StickerMetadataType, StickerProcessor, VideoProcessor, cleanJid, cleanMediaObject, cleanupSocket, configureFFmpeg, createLowdb, createWatchdog, definePlugins, extractJids, extractUrls, findGlobalWord, findNestedByKeys, generateId, getDeepContent, getExistingSocket, getLatestLibVersion, getMediaThumbnail, getUsersMentions, getVideoDuration, getVideoThumbnail, getWaAudio, getWaDocument, getWaSticker, getWatchdog, ignoreLint, logColor, modifyFn, normalizeText, numbersToJids, pickKeysFromArray, randomize, registerAuthCreds, removeAuthCreds, repairSessionKeys, shuffleString, toBuffer, toJson, toString, useAuthState };
package/dist/index.js CHANGED
@@ -1,16 +1,16 @@
1
- 'use strict';var ps=require('baileys'),Be=require('fs/promises'),asyncMutex=require('async-mutex'),je=require('path'),nanospinner=require('nanospinner'),Ke=require('node-cache'),events=require('events'),zt=require('pino'),it=require('gradient-string'),b=require('lodash'),fileType=require('file-type'),X=require('fluent-ffmpeg'),Gt=require('node-webpmux'),os=require('os'),$e=require('sharp'),Ht=require('@ffmpeg-installer/ffmpeg'),Zt=require('@ffprobe-installer/ffprobe'),_=require('fs'),ms=require('figlet'),fs=require('qrcode-terminal'),rateLimiterFlexible=require('rate-limiter-flexible'),u=require('zod'),Vs=require('stream'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var ps__default=/*#__PURE__*/_interopDefault(ps);var Be__default=/*#__PURE__*/_interopDefault(Be);var je__namespace=/*#__PURE__*/_interopNamespace(je);var Ke__default=/*#__PURE__*/_interopDefault(Ke);var zt__default=/*#__PURE__*/_interopDefault(zt);var it__default=/*#__PURE__*/_interopDefault(it);var b__default=/*#__PURE__*/_interopDefault(b);var X__default=/*#__PURE__*/_interopDefault(X);var Gt__default=/*#__PURE__*/_interopDefault(Gt);var $e__default=/*#__PURE__*/_interopDefault($e);var Ht__default=/*#__PURE__*/_interopDefault(Ht);var Zt__default=/*#__PURE__*/_interopDefault(Zt);var ___namespace=/*#__PURE__*/_interopNamespace(_);var ms__default=/*#__PURE__*/_interopDefault(ms);var fs__default=/*#__PURE__*/_interopDefault(fs);var u__default=/*#__PURE__*/_interopDefault(u);var Vs__default=/*#__PURE__*/_interopDefault(Vs);var Oe=class{data=new Map;cache=new Map;set(e,t){this.data.set(e,{...this.data.get(e),...t});}get(e){return this.data.get(e)||{}}update(e,t){let s=this.get(e);this.set(e,t(s));}delete(e){this.data.delete(e);}has(e){return this.data.has(e)}lowdb(e,t){let s=`.session/${e}/${t}`;if(this.cache.has(s))return this.cache.get(s);let o=H(s);return this.cache.set(s,o),o}spinner=nanospinner.createSpinner("",{color:"green"});logger=zt__default.default({level:"silent",enabled:false});events=new events.EventEmitter;groupCache=new Ke__default.default({stdTTL:300,useClones:false});collectors=new Map},r=new Oe;var h=a=>a,nt=async()=>{try{return (await(await fetch("https://registry.npmjs.org/zaileys")).json())["dist-tags"].latest}catch(a){throw a}},ot=async a=>{try{let e=`.session/${a}/auth/creds.json`;await Be__default.default.unlink(e);}catch(e){throw r.spinner.error(`Failed to remove auth creds for session "${a}"!`),e}},R=(a="")=>a?.length?a.normalize("NFKD").replace(/[\u0000-\u001F\u007F-\u009F\u200B-\u200F\u2028-\u202F\u2060-\u206F\uFEFF\uFFF9-\uFFFB]/gu,"").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u20D0-\u20FF\uFE20-\uFE2F]/gu,"").replace(/[\u202A-\u202E\u2066-\u2069]/gu,"").replace(/\u202E([\s\S]*?)\u202C?/gu,(t,s)=>[...s].reverse().join("")):null;var M=(a,e="lime")=>Array.isArray(e)?it__default.default(e)(a):it__default.default([e,e])(a),Le=a=>{try{return JSON.parse(a)}catch{return b__default.default.attempt(()=>JSON.parse(JSON.stringify(a)||"{}"))}},Z=a=>{try{return JSON.stringify(a)}catch{let e=b__default.default.attempt(()=>JSON.stringify(Le(a)||"{}"));return b__default.default.isError(e)?"{}":e}},un=(a="")=>b__default.default.shuffle(a).join(""),Q=(a="",e="")=>a?b__default.default.includes(a.toLowerCase(),e.toLowerCase()):null,rt=(a="")=>a?b__default.default.castArray(a.match(ps.URL_REGEX)||[]):[],mn=a=>a[Math.floor(Math.random()*a.length)],A=(a,e)=>{let t=(s,o)=>{if(!s||typeof s!="object")return;let n=s;for(let i of o.split("."))if(n=n?.[i],n==null)return;return n};for(let s of a||[])if(s&&typeof s=="object")for(let o of e){let n=t(s,o);if(n!=null)return n}},at=(a,e)=>{let t=b__default.default.castArray(e),s=(i,c)=>b__default.default.every(c,(l,p)=>i?.[p]===l),o=(i,c)=>b__default.default.some(c,(l,p)=>i?.[p]===l),n=i=>b__default.default.isArray(i)?b__default.default.find(i,n)??i:b__default.default.isObject(i)?b__default.default.find(t,p=>s(i,p))||b__default.default.find(t,p=>o(i,p))?i:b__default.default.find(b__default.default.values(i),n)??i:null;return n(a)},dn=(a,e,t)=>new Proxy(a,{apply(s,o,n){e?.(n);let i=Reflect.apply(s,o,n);return t?t(i,n):i}});var j=a=>{let e;Array.isArray(a)?e=a.join("|"):typeof a=="string"?e=a:e=String(a);let t=2166136261,s=e.length;for(let o=0;o<s;o++)t^=e.charCodeAt(o),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return "Z4D3FC"+(t>>>0).toString(16).padStart(8,"0").toUpperCase()},ct=(a="")=>{if(!a)return [];let e=new Set;for(let t of a.matchAll(/@(\d+)/g))e.add(t[1]);return b__default.default.toArray(e)},Fe=(a="")=>{if(!a)return [];let e=new Set;for(let t of a.matchAll(/@(\d+)/g))t[1].length<=15&&e.add(t[1]);return b__default.default.flatMap([...e],t=>[`${t}@s.whatsapp.net`,`${t}@g.us`,`${t}@lid`])},wn=a=>b__default.default.isEmpty(a)?[]:b__default.default.map([...a],e=>`${e}@s.whatsapp.net`),lt=a=>b__default.default.omit(a,["url","contextInfo","fileSha256","fileEncSha256","mediaKey","directPath","waveform","thumbnail","jpegThumbnail","thumbnailEncSha256","thumbnailSha256","thumbnailDirectPath","firstFrameSidecar","streamingSidecar","scansSidecar","callKey","message","key","midQualityFileSha256","historySyncNotification","appStateSyncKeyShare","appStateSyncKeyRequest","initialSecurityNotificationSettingSync","appStateFatalExceptionNotification","disappearingMode","peerDataOperationRequestMessage","peerDataOperationRequestResponseMessage","botFeedbackMessage"]),ie=a=>{if(!a)return {leaf:void 0,chain:[]};let e=ps.extractMessageContent(a)||a,t=[];for(;e&&typeof e=="object";){let s=ps.getContentType(e);if(!s)break;t.push(s);let o=e[s];if(!o||typeof o!="object"){e=o;break}e=o;}return {leaf:e,chain:t}},D=a=>Number(a?.split("@")[0]);X__default.default.setFfmpegPath(Ht__default.default.path);X__default.default.setFfprobePath(Zt__default.default.path);var k={OPUS:{CODEC:"libopus",CHANNELS:1,FREQUENCY:48e3,BITRATE:"48k",FORMAT:"ogg"},THUMBNAIL:{SIZE:100,QUALITY:50,TIMESTAMP:"10%"},STICKER:{SIZE:512,MAX_DURATION:10,FPS:15,DEFAULT_QUALITY:80,COMPRESSION_LEVEL:6},MIME:{AUDIO:"audio/",VIDEO:"video/",IMAGE:"image/",GIF:"image/gif",MP4:"video/mp4"}},v=class{static generateUniqueId(){return `${Date.now()}_${Math.random().toString(36).slice(2,11)}`}static createTempPath(e,t){return je__namespace.default.join(os.tmpdir(),`${e}_${this.generateUniqueId()}.${t}`)}static async cleanup(e){await Promise.allSettled(e.map(t=>Be__default.default.unlink(t)));}static async safeReadFile(e){try{return await Be__default.default.readFile(e)}catch{throw new Error(`Failed to read file: ${e}`)}}static async safeWriteFile(e,t){try{await Be__default.default.writeFile(e,t);}catch{throw new Error(`Failed to write file: ${e}`)}}},P=class{static async toBuffer(e){if(b__default.default.isBuffer(e))return e;if(b__default.default.isArrayBuffer(e))return Buffer.from(e);if(b__default.default.isString(e))return this.fromString(e);throw new Error("Invalid input type: expected string, Buffer, or ArrayBuffer")}static async fromString(e){return e.startsWith("http://")||e.startsWith("https://")?this.fromUrl(e):Buffer.from(e,"base64")}static async fromUrl(e){try{let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);let s=await t.arrayBuffer();return Buffer.from(s)}catch(t){throw new Error(`Failed to fetch URL: ${t.message}`)}}},z=class{static validate(e,t){if(!e?.mime?.startsWith(t))throw new Error(`Invalid file type: expected ${t}*, got ${e?.mime||"unknown"}`)}static isMedia(e){return e.startsWith(k.MIME.IMAGE)||e.startsWith(k.MIME.VIDEO)}static isAnimated(e){return e===k.MIME.GIF||e.startsWith(k.MIME.VIDEO)}},ee=class{static async process(e){return new Promise((t,s)=>{let o=X__default.default(e.input).output(e.output);for(let n=0;n<e.options.length;n++){let i=e.options[n];i.startsWith("-")&&n+1<e.options.length&&!e.options[n+1].startsWith("-")?(o.outputOptions(i,e.options[n+1]),n++):o.outputOptions(i);}o.on("end",async()=>{try{await e.onEnd(),t();}catch(n){s(n);}}).on("error",async n=>{try{await e.onError(n);}finally{s(n);}}).run();})}static async getDuration(e){return new Promise((t,s)=>{X__default.default.ffprobe(e,(o,n)=>{if(o)return s(o);t(n.format.duration||0);});})}},re=class{static async getWaAudio(e,t="opus"){let s=await P.toBuffer(e),o=await fileType.fileTypeFromBuffer(s);z.validate(o,k.MIME.AUDIO);let n=v.createTempPath("audio_in","wav"),i=t==="opus"?"ogg":"mp3",c=v.createTempPath("audio_out",i);await v.safeWriteFile(n,s);let l;try{let p=t==="opus"?["-vn","-c:a","libopus","-b:a","48k","-ac","1","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","opus"]:["-vn","-c:a","libmp3lame","-b:a","128k","-ac","2","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","mp3"];return await ee.process({input:n,output:c,options:p,onEnd:async()=>{l=await v.safeReadFile(c);},onError:async()=>{await v.cleanup([n,c]);}}),await v.cleanup([n,c]),l}catch(p){throw await v.cleanup([n,c]),new Error(`${t.toUpperCase()} conversion failed: ${p.message}`)}}},N=class{static async getThumbnail(e){let t=await P.toBuffer(e),s=await fileType.fileTypeFromBuffer(t);z.validate(s,k.MIME.VIDEO);let o=v.createTempPath("video","mp4"),n=v.createTempPath("thumb","jpg");await v.safeWriteFile(o,t);let i;try{return await new Promise((c,l)=>{X__default.default(o).screenshots({timestamps:[k.THUMBNAIL.TIMESTAMP],filename:je__namespace.default.basename(n),folder:je__namespace.default.dirname(n),size:`${k.THUMBNAIL.SIZE}x${k.THUMBNAIL.SIZE}`,quality:k.THUMBNAIL.QUALITY}).on("end",async()=>{try{i=(await v.safeReadFile(n)).toString("base64"),c();}catch(p){l(p);}}).on("error",l);}),await v.cleanup([o,n]),i}catch(c){throw await v.cleanup([o,n]),new Error(`Thumbnail generation failed: ${c.message}`)}}static async getDuration(e){return ee.getDuration(e)}},ae=class{static async getThumbnail(e){return (await((await fileType.fileTypeFromBuffer(e)).mime===k.MIME.GIF?$e__default.default(e,{animated:false}):$e__default.default(e)).resize(k.THUMBNAIL.SIZE,k.THUMBNAIL.SIZE,{fit:"cover"}).jpeg({quality:k.THUMBNAIL.QUALITY}).toBuffer()).toString("base64")}static async resizeForSticker(e,t){return $e__default.default(e).resize(k.STICKER.SIZE,k.STICKER.SIZE,{fit:"cover",background:{r:0,g:0,b:0,alpha:0}}).webp({quality:t}).toBuffer()}},te=class{static async getThumbnail(e){let t=await P.toBuffer(e),s=await fileType.fileTypeFromBuffer(t);if(!s||!z.isMedia(s.mime))throw new Error("Invalid media type: expected image or video");return s.mime.startsWith(k.MIME.VIDEO)?N.getThumbnail(e):ae.getThumbnail(t)}},ce=class{static createExifMetadata(e){let t={"sticker-pack-id":j(Date.now().toString()),"sticker-pack-name":e?.packageName||"Zaileys Library","sticker-pack-publisher":e?.authorName||"https://github.com/zeative/zaileys",emojis:["\u{1F913}"],"android-app-store-link":"https://play.google.com/store/apps/details?id=com.marsvard.stickermakerforwhatsapp","ios-app-store-link":"https://itunes.apple.com/app/sticker-maker-studio/id1443326857"},s=Buffer.from([73,73,42,0,8,0,0,0,1,0,65,87,7,0,0,0,0,0,22,0,0,0]),o=Buffer.from(JSON.stringify(t),"utf8"),n=Buffer.concat([s,o]);return n.writeUIntLE(o.length,14,4),n}static async processAnimated(e,t,s){let o=this.getExtension(t),n=v.createTempPath("sticker_in",o),i=v.createTempPath("sticker_out","webp");await v.safeWriteFile(n,e);let c=k.STICKER.MAX_DURATION;try{let S=await N.getDuration(n);c=h(Math.min(S,k.STICKER.MAX_DURATION));}catch{console.warn("Using default duration:",k.STICKER.MAX_DURATION);}let l=`scale=${k.STICKER.SIZE}:${k.STICKER.SIZE}:force_original_aspect_ratio=increase,crop=${k.STICKER.SIZE}:${k.STICKER.SIZE},fps=${k.STICKER.FPS},format=rgba`,p=Math.max(1,Math.min(100,100-s)),y;try{return await ee.process({input:n,output:i,options:["-vcodec libwebp",`-vf ${l}`,`-q:v ${p}`,"-loop 0","-preset default","-an","-vsync 0",`-t ${c}`,`-compression_level ${k.STICKER.COMPRESSION_LEVEL}`],onEnd:async()=>{y=await v.safeReadFile(i);},onError:async()=>{await v.cleanup([n,i]);}}),await v.cleanup([n,i]),y}catch(S){throw await v.cleanup([n,i]),new Error(`Animated sticker processing failed: ${S.message}`)}}static getExtension(e){return e===k.MIME.GIF?"gif":e.startsWith(k.MIME.VIDEO)?"mp4":"tmp"}static async create(e,t){try{let s=await P.toBuffer(e),o=await fileType.fileTypeFromBuffer(s);if(!o)throw new Error("Unable to detect file type");let n=t?.quality||k.STICKER.DEFAULT_QUALITY,c=z.isAnimated(o.mime)?await this.processAnimated(s,o.mime,n):await ae.resizeForSticker(s,n),l=this.createExifMetadata(t),p=new Gt__default.default.Image;await p.load(c),p.exif=l;let y=await p.save(null);return Buffer.isBuffer(y)?y:Buffer.from(y)}catch(s){throw new Error(`Sticker creation failed: ${s.message||s}`)}}},le=class{static async create(e){try{let t=await P.toBuffer(e),s=await fileType.fileTypeFromBuffer(t);if(!s)throw new Error("Unable to detect file type");return {document:t,mimetype:s.mime,fileName:j(Date.now().toString()),jpegThumbnail:await te.getThumbnail(t)}}catch(t){throw new Error(`Document creation failed: ${t.message||t}`)}}},pe=P.toBuffer.bind(P),pt=re.getWaAudio.bind(re),Nn=N.getThumbnail.bind(N),On=N.getDuration.bind(N),ze=te.getThumbnail.bind(te),ut=ce.create.bind(ce),mt=le.create.bind(le);var ft=a=>{if(a)try{a.ev?.removeAllListeners(),a.end?.(new Error("Cleanup"));}catch{}},ue=async a=>{let e=`.session/${a}/auth/keys.json`;try{let t=await _.promises.readFile(e,"utf-8"),s=JSON.parse(t),o=["sender-key:","session:"],n={},i=!1;for(let[c,l]of Object.entries(s))o.some(y=>c.startsWith(y))?i=!0:n[c]=l;i&&(await _.promises.writeFile(e,JSON.stringify(n,null,2)),r.spinner.success(" Session keys repaired successfully"));}catch{r.spinner.warn(" Could not repair session keys, will re-negotiate");}},gt=()=>{let a=r.get("socket");return a?.end?a:null};var Qt=6e4,Yt=12e4,Xt=6e4,es=3,Ue=class{lastActivityTime=Date.now();lastRecoveryTime=0;checkInterval=null;isRecovering=false;retryCount=0;options;constructor(e){this.options={checkIntervalMs:Qt,staleThresholdMs:Yt,cooldownMs:Xt,maxRetries:es,onRecovery:async()=>{},...e};}start(){this.checkInterval||(this.lastActivityTime=Date.now(),this.setupActivityListeners(),this.checkInterval=setInterval(()=>this.check(),this.options.checkIntervalMs),r.spinner.success(" Session watchdog started"));}stop(){this.checkInterval&&(clearInterval(this.checkInterval),this.checkInterval=null);}touch(){this.lastActivityTime=Date.now(),this.retryCount=0;}setupActivityListeners(){let e=r.get("socket");if(!e?.ev)return;let t=["messages.upsert","message-receipt.update","presence.update","chats.update"];for(let s of t)e.ev.on(s,()=>this.touch());}async check(){if(this.isRecovering)return;Date.now()-this.lastActivityTime>this.options.staleThresholdMs&&await this.recover();}isInCooldown(){return Date.now()-this.lastRecoveryTime<this.options.cooldownMs}async recover(){if(!this.isRecovering){if(this.isInCooldown()){r.spinner.warn(" Recovery in cooldown, skipping...");return}if(this.retryCount>=this.options.maxRetries){r.spinner.error(` Max recovery retries (${this.options.maxRetries}) reached. Manual restart required.`);return}this.isRecovering=true,this.lastRecoveryTime=Date.now(),this.retryCount++;try{r.spinner.warn(` Session recovery attempt ${this.retryCount}/${this.options.maxRetries}...`);let e=r.get("socket");if(e?.ws?.readyState===1)try{await e.fetchStatus(e.user?.id||""),this.touch(),r.spinner.success(" Session health check passed");return}catch{}await ue(this.options.session),r.spinner.warn(" Forcing reconnection..."),await this.options.onRecovery(),this.touch();}catch{r.spinner.error(" Recovery failed");}finally{this.isRecovering=false;}}}async forceRecovery(){if(this.isInCooldown()){r.spinner.warn(" Recovery blocked by cooldown");return}await this.recover();}},se=null,yt=a=>(se&&se.stop(),se=new Ue(a),se),qn=()=>se;var Je=class a{static inst;fLocks=new Map;kLocks=new Map;maxSize=100;static get(){return this.inst||(this.inst=new a)}getFile(e){let t=this.fLocks.get(e);if(!t){if(this.fLocks.size>=this.maxSize){let s=this.fLocks.keys().next().value;this.fLocks.delete(s);}t=new asyncMutex.Mutex,this.fLocks.set(e,t);}return t}getKey(e){let t=this.kLocks.get(e);if(!t){if(this.kLocks.size>=this.maxSize){let s=this.kLocks.keys().next().value;this.kLocks.delete(s);}t=new asyncMutex.Mutex,this.kLocks.set(e,t);}return t}},Ge=class{data;path;pool;size;chunkDir;replacer;reviver;loaded=false;flushMode;debounceMs;flushTimer=null;dirty=false;constructor(e,t,s=2*1024*1024,o="debounce",n=200){this.data=new Map,this.path=e,this.pool=Je.get(),this.size=s,this.chunkDir=`${e}.c`,this.replacer=t?.replacer||null,this.reviver=t?.reviver||null,this.flushMode=o,this.debounceMs=n;}async ensureLoaded(){this.loaded||(await this.read(),this.loaded=true);}scheduleFlush(){if(this.flushMode!=="manual"){if(this.flushMode==="sync"){this.write();return}this.dirty=true,!this.flushTimer&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.dirty&&(this.dirty=false,this.write());},this.debounceMs));}}async read(){return this.pool.getFile(this.path).runExclusive(async()=>{try{let t=await Be.readFile(this.path,"utf-8"),s=JSON.parse(t,this.reviver);this.data.clear();let o=[];for(let[n,i]of Object.entries(s))this.isMeta(i)?o.push(this.loadChunk(n,i)):this.data.set(n,i);return await Promise.all(o),this.loaded=!0,this.data}catch{return await Be.mkdir(je.dirname(this.path),{recursive:true}),this.data.clear(),this.loaded=true,this.data}})}async write(){return this.pool.getFile(this.path).runExclusive(async()=>{let t={},s=[];for(let[n,i]of this.data){if(this.isMeta(i)){t[n]=i;continue}JSON.stringify(i,this.replacer).length>this.size?s.push(this.saveChunk(n,i).then(l=>{t[n]=l;})):t[n]=i;}await Promise.all(s);let o=JSON.stringify(t,this.replacer,2);await Be.writeFile(this.path,o,"utf-8");})}async set(e,t){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{this.data.set(e,t),this.scheduleFlush();});}async push(e,t){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{let o=this.data.get(e),n;Array.isArray(o)?n=o:o===void 0?n=[]:n=[o],n.push(t),this.data.set(e,n),this.scheduleFlush();});}async upsert(e,t,s="key.id"){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{let n=this.data.get(e),i;Array.isArray(n)?i=n:n===void 0?i=[]:i=[n];let c=b__default.default.get(t,s);if(c){let l=i.findIndex(p=>b__default.default.get(p,s)===c);l>=0?i[l]=t:i.push(t);}else i.push(t);this.data.set(e,i),this.scheduleFlush();});}async get(e){if(await this.ensureLoaded(),typeof e=="string")return this.data.get(e);let t=Array.from(this.data.values()).flat();return at(t,e)}async all(){return await this.ensureLoaded(),Array.from(this.data.entries())}async delete(e){return await this.ensureLoaded(),this.pool.getKey(e).runExclusive(async()=>{let s=this.data.get(e);this.isMeta(s)&&await this.delChunk(e,s);let o=this.data.delete(e);return this.scheduleFlush(),o})}async saveChunk(e,t){let s=JSON.stringify(t,this.replacer),o=Buffer.from(s,"utf-8"),n=Math.ceil(o.length/this.size);await Be.mkdir(this.chunkDir,{recursive:true});let i={v:1,k:e,t:n,s:this.size,c:o.length,m:Date.now().toString(36)},c=[];for(let l=0;l<n;l++){let p=l*this.size,y=Math.min(p+this.size,o.length),S=o.subarray(p,y);c.push(Be.writeFile(je.join(this.chunkDir,`${e}.${l}.json`),JSON.stringify({i:l,d:S.toString("base64")})));}return c.push(Be.writeFile(je.join(this.chunkDir,`${e}.manifest.json`),JSON.stringify(i))),await Promise.all(c),{t:n,s:this.size,k:e}}async loadChunk(e,t){let s=je.join(this.chunkDir,`${e}.manifest.json`),o=JSON.parse(await Be.readFile(s,"utf-8")),n=[];for(let p=0;p<o.t;p++)n.push(Be.readFile(je.join(this.chunkDir,`${e}.${p}.json`),"utf-8").then(y=>Buffer.from(JSON.parse(y).d,"base64")));let i=await Promise.all(n),c=Buffer.concat(i),l=JSON.parse(c.toString("utf-8"),this.reviver);this.data.set(e,l);}async delChunk(e,t){let s=[];for(let o=0;o<t.t;o++)s.push(Be.unlink(je.join(this.chunkDir,`${e}.${o}.json`)).catch(()=>{}));s.push(Be.unlink(je.join(this.chunkDir,`${e}.manifest.json`)).catch(()=>{})),await Promise.all(s);try{(await Be.readdir(this.chunkDir)).length===0&&await Be.rmdir(this.chunkDir);}catch{}}isMeta(e){return e?.t&&e?.s&&e?.k}},H=(a,e)=>new Ge(a,e?.BufferJSON,e?.size,e?.flushMode,e?.debounceMs);var bt=async a=>{r.spinner.start(" Initializing auth state...");let e=await Be.stat(a).catch(()=>{});if(e){if(!e.isDirectory())throw r.spinner.error(` Failed to open credentials
2
- `),`found something that is not a directory at ${a}, either delete it or specify a different location`}else await Be.mkdir(a,{recursive:true});let t=H(`${a}/auth/creds.json`,{BufferJSON:ps.BufferJSON}),s=H(`${a}/auth/keys.json`,{BufferJSON:ps.BufferJSON,size:512*1024});await Promise.all([t.read(),s.read()]);let o=await t.get("creds")||ps.initAuthCreds();return r.spinner.success(" Generate auth successfully"),{state:{creds:o,keys:{get:async(n,i)=>{let c={};return await Promise.all(i.map(async l=>{let p=`${n}:${l}`,y=await s.get(p);n==="app-state-sync-key"&&y&&(y=ps.proto.Message.AppStateSyncKeyData.fromObject(y)),c[l]=y;})),c},set:async n=>{let i=[];for(let c in n)for(let l in n[c]){let p=n[c][l],y=`${c}:${l}`;p?i.push(s.set(y,p)):i.push(s.delete(y).then(()=>{}));}await Promise.all(i),await s.write();}}},saveCreds:async()=>{await t.set("creds",o),await t.write();}}};var ls=new Ke__default.default,xt=(a,e)=>({logger:r.logger,printQRInTerminal:false,defaultQueryTimeoutMs:void 0,markOnlineOnConnect:a.options.autoOnline,syncFullHistory:a.options.syncFullHistory,msgRetryCounterCache:new Ke__default.default,mediaCache:new Ke__default.default({stdTTL:60}),cachedGroupMetadata:async t=>ls.get(t),auth:{creds:e.creds,keys:ps.makeCacheableSignalKeyStore(e.keys,r.logger)},getMessage:async t=>t?.remoteJid?(await a.db("messages").get(t.remoteJid))?.find(n=>n?.key?.id===t.id):void 0});var St=async a=>{let e=gt();e&&ft(e);let t=`.session/${a.options.session}`;console.info=()=>{};let{state:s,saveCreds:o}=await bt(t),n=xt(a,s),i=ps__default.default(n);i.ev.on("creds.update",o),r.set("socket",i);};var me=class{constructor(e){this.client=e;this.initialize();}async initialize(){let e=r.get("socket");e.ev.on("call",async t=>{for(let s of t){let o=await this.parse(s);o&&(await this.client.middleware.run({calls:o}),await this.client.plugins.execute(this.client,{messages:o}),r.events.emit("calls",o),this.client.options?.autoRejectCall&&await e.rejectCall(o.callId,o.callerId));}});}async parse(e){let t=r.get("socket"),s={};return s.callId=e.id,s.callerId=ps.jidNormalizedUser(e.from),s.callerName=await this.client.getRoomName(s.callerId),s.roomId=ps.jidNormalizedUser(e.chatId),s.roomName=R(t?.user?.name||t?.user?.verifiedName),s.date=e.date,s.offline=e.offline,s.status=e.status,s.isVideo=!!e.isVideo,s.isGroup=!!e.isGroup,this.client.logs.call(s),s}};var de={version:"2.0.13",author:"zaadevofc"};var Ct=a=>{fs__default.default.generate(a,{small:true},e=>{console.log(e);});},At=async()=>{console.clear(),r.spinner.start(" Checking for updates...");let a=await nt(),e=de.version===a;r.spinner.stop();let t="Zaileys",s=`
1
+ 'use strict';var ls=require('baileys'),Be=require('fs/promises'),asyncMutex=require('async-mutex'),je=require('path'),nanospinner=require('nanospinner'),Ke=require('node-cache'),events=require('events'),Ut=require('pino'),it=require('gradient-string'),M=require('lodash'),fileType=require('file-type'),X=require('fluent-ffmpeg'),Kt=require('node-webpmux'),os=require('os'),$e=require('sharp'),_=require('fs'),us=require('figlet'),ds=require('qrcode-terminal'),rateLimiterFlexible=require('rate-limiter-flexible'),u=require('zod'),qs=require('stream'),url=require('url');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var ls__default=/*#__PURE__*/_interopDefault(ls);var Be__default=/*#__PURE__*/_interopDefault(Be);var je__namespace=/*#__PURE__*/_interopNamespace(je);var Ke__default=/*#__PURE__*/_interopDefault(Ke);var Ut__default=/*#__PURE__*/_interopDefault(Ut);var it__default=/*#__PURE__*/_interopDefault(it);var M__default=/*#__PURE__*/_interopDefault(M);var X__default=/*#__PURE__*/_interopDefault(X);var Kt__default=/*#__PURE__*/_interopDefault(Kt);var $e__default=/*#__PURE__*/_interopDefault($e);var ___namespace=/*#__PURE__*/_interopNamespace(_);var us__default=/*#__PURE__*/_interopDefault(us);var ds__default=/*#__PURE__*/_interopDefault(ds);var u__default=/*#__PURE__*/_interopDefault(u);var qs__default=/*#__PURE__*/_interopDefault(qs);var Fe=class{data=new Map;cache=new Map;set(e,t){this.data.set(e,{...this.data.get(e),...t});}get(e){return this.data.get(e)||{}}update(e,t){let s=this.get(e);this.set(e,t(s));}delete(e){this.data.delete(e);}has(e){return this.data.has(e)}lowdb(e,t){let s=`.session/${e}/${t}`;if(this.cache.has(s))return this.cache.get(s);let o=H(s);return this.cache.set(s,o),o}spinner=nanospinner.createSpinner("",{color:"green"});logger=Ut__default.default({level:"silent",enabled:false});events=new events.EventEmitter;groupCache=new Ke__default.default({stdTTL:300,useClones:false});collectors=new Map},r=new Fe;var h=a=>a,nt=async()=>{try{return (await(await fetch("https://registry.npmjs.org/zaileys")).json())["dist-tags"].latest}catch(a){throw a}},ot=async a=>{try{let e=`.session/${a}/auth/creds.json`;await Be__default.default.unlink(e);}catch(e){throw r.spinner.error(`Failed to remove auth creds for session "${a}"!`),e}},R=(a="")=>a?.length?a.normalize("NFKD").replace(/[\u0000-\u001F\u007F-\u009F\u200B-\u200F\u2028-\u202F\u2060-\u206F\uFEFF\uFFF9-\uFFFB]/gu,"").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u20D0-\u20FF\uFE20-\uFE2F]/gu,"").replace(/[\u202A-\u202E\u2066-\u2069]/gu,"").replace(/\u202E([\s\S]*?)\u202C?/gu,(t,s)=>[...s].reverse().join("")):null;var b=(a,e="lime")=>Array.isArray(e)?it__default.default(e)(a):it__default.default([e,e])(a),Oe=a=>{try{return JSON.parse(a)}catch{return M__default.default.attempt(()=>JSON.parse(JSON.stringify(a)||"{}"))}},Z=a=>{try{return JSON.stringify(a)}catch{let e=M__default.default.attempt(()=>JSON.stringify(Oe(a)||"{}"));return M__default.default.isError(e)?"{}":e}},pn=(a="")=>M__default.default.shuffle(a).join(""),Q=(a="",e="")=>a?M__default.default.includes(a.toLowerCase(),e.toLowerCase()):null,rt=(a="")=>a?M__default.default.castArray(a.match(ls.URL_REGEX)||[]):[],un=a=>a[Math.floor(Math.random()*a.length)],A=(a,e)=>{let t=(s,o)=>{if(!s||typeof s!="object")return;let n=s;for(let i of o.split("."))if(n=n?.[i],n==null)return;return n};for(let s of a||[])if(s&&typeof s=="object")for(let o of e){let n=t(s,o);if(n!=null)return n}},at=(a,e)=>{let t=M__default.default.castArray(e),s=(i,c)=>M__default.default.every(c,(l,p)=>i?.[p]===l),o=(i,c)=>M__default.default.some(c,(l,p)=>i?.[p]===l),n=i=>M__default.default.isArray(i)?M__default.default.find(i,n)??i:M__default.default.isObject(i)?M__default.default.find(t,p=>s(i,p))||M__default.default.find(t,p=>o(i,p))?i:M__default.default.find(M__default.default.values(i),n)??i:null;return n(a)},mn=(a,e,t)=>new Proxy(a,{apply(s,o,n){e?.(n);let i=Reflect.apply(s,o,n);return t?t(i,n):i}});var j=a=>{let e;Array.isArray(a)?e=a.join("|"):typeof a=="string"?e=a:e=String(a);let t=2166136261,s=e.length;for(let o=0;o<s;o++)t^=e.charCodeAt(o),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return "Z4D3FC"+(t>>>0).toString(16).padStart(8,"0").toUpperCase()},ct=(a="")=>{if(!a)return [];let e=new Set;for(let t of a.matchAll(/@(\d+)/g))e.add(t[1]);return M__default.default.toArray(e)},Le=(a="")=>{if(!a)return [];let e=new Set;for(let t of a.matchAll(/@(\d+)/g))t[1].length<=15&&e.add(t[1]);return M__default.default.flatMap([...e],t=>[`${t}@s.whatsapp.net`,`${t}@g.us`,`${t}@lid`])},kn=a=>M__default.default.isEmpty(a)?[]:M__default.default.map([...a],e=>`${e}@s.whatsapp.net`),lt=a=>M__default.default.omit(a,["url","contextInfo","fileSha256","fileEncSha256","mediaKey","directPath","waveform","thumbnail","jpegThumbnail","thumbnailEncSha256","thumbnailSha256","thumbnailDirectPath","firstFrameSidecar","streamingSidecar","scansSidecar","callKey","message","key","midQualityFileSha256","historySyncNotification","appStateSyncKeyShare","appStateSyncKeyRequest","initialSecurityNotificationSettingSync","appStateFatalExceptionNotification","disappearingMode","peerDataOperationRequestMessage","peerDataOperationRequestResponseMessage","botFeedbackMessage"]),ie=a=>{if(!a)return {leaf:void 0,chain:[]};let e=ls.extractMessageContent(a)||a,t=[];for(;e&&typeof e=="object";){let s=ls.getContentType(e);if(!s)break;t.push(s);let o=e[s];if(!o||typeof o!="object"){e=o;break}e=o;}return {leaf:e,chain:t}},D=a=>Number(a?.split("@")[0]);var pt=async(a=false)=>{if(!a)try{let e=(await import('@ffmpeg-installer/ffmpeg')).default,t=(await import('@ffprobe-installer/ffprobe')).default;X__default.default.setFfmpegPath(e.path),X__default.default.setFfprobePath(t.path);}catch{}},k={OPUS:{CODEC:"libopus",CHANNELS:1,FREQUENCY:48e3,BITRATE:"48k",FORMAT:"ogg"},THUMBNAIL:{SIZE:100,QUALITY:50,TIMESTAMP:"10%"},STICKER:{SIZE:512,MAX_DURATION:10,FPS:15,DEFAULT_QUALITY:80,COMPRESSION_LEVEL:6},MIME:{AUDIO:"audio/",VIDEO:"video/",IMAGE:"image/",GIF:"image/gif",MP4:"video/mp4"}},v=class{static generateUniqueId(){return `${Date.now()}_${Math.random().toString(36).slice(2,11)}`}static createTempPath(e,t){return je__namespace.default.join(os.tmpdir(),`${e}_${this.generateUniqueId()}.${t}`)}static async cleanup(e){await Promise.allSettled(e.map(t=>Be__default.default.unlink(t)));}static async safeReadFile(e){try{return await Be__default.default.readFile(e)}catch{throw new Error(`Failed to read file: ${e}`)}}static async safeWriteFile(e,t){try{await Be__default.default.writeFile(e,t);}catch{throw new Error(`Failed to write file: ${e}`)}}},P=class{static async toBuffer(e){if(M__default.default.isBuffer(e))return e;if(M__default.default.isArrayBuffer(e))return Buffer.from(e);if(M__default.default.isString(e))return this.fromString(e);throw new Error("Invalid input type: expected string, Buffer, or ArrayBuffer")}static async fromString(e){return e.startsWith("http://")||e.startsWith("https://")?this.fromUrl(e):Buffer.from(e,"base64")}static async fromUrl(e){try{let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);let s=await t.arrayBuffer();return Buffer.from(s)}catch(t){throw new Error(`Failed to fetch URL: ${t.message}`)}}},z=class{static validate(e,t){if(!e?.mime?.startsWith(t))throw new Error(`Invalid file type: expected ${t}*, got ${e?.mime||"unknown"}`)}static isMedia(e){return e.startsWith(k.MIME.IMAGE)||e.startsWith(k.MIME.VIDEO)}static isAnimated(e){return e===k.MIME.GIF||e.startsWith(k.MIME.VIDEO)}},ee=class{static async process(e){return new Promise((t,s)=>{let o=X__default.default(e.input).output(e.output);for(let n=0;n<e.options.length;n++){let i=e.options[n];i.startsWith("-")&&n+1<e.options.length&&!e.options[n+1].startsWith("-")?(o.outputOptions(i,e.options[n+1]),n++):o.outputOptions(i);}o.on("end",async()=>{try{await e.onEnd(),t();}catch(n){s(n);}}).on("error",async n=>{try{await e.onError(n);}finally{s(n);}}).run();})}static async getDuration(e){return new Promise((t,s)=>{X__default.default.ffprobe(e,(o,n)=>{if(o)return s(o);t(n.format.duration||0);});})}},re=class{static async getWaAudio(e,t="opus"){let s=await P.toBuffer(e),o=await fileType.fileTypeFromBuffer(s);z.validate(o,k.MIME.AUDIO);let n=v.createTempPath("audio_in","wav"),i=t==="opus"?"ogg":"mp3",c=v.createTempPath("audio_out",i);await v.safeWriteFile(n,s);let l;try{let p=t==="opus"?["-vn","-c:a","libopus","-b:a","48k","-ac","1","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","opus"]:["-vn","-c:a","libmp3lame","-b:a","128k","-ac","2","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","mp3"];return await ee.process({input:n,output:c,options:p,onEnd:async()=>{l=await v.safeReadFile(c);},onError:async()=>{await v.cleanup([n,c]);}}),await v.cleanup([n,c]),l}catch(p){throw await v.cleanup([n,c]),new Error(`${t.toUpperCase()} conversion failed: ${p.message}`)}}},N=class{static async getThumbnail(e){let t=await P.toBuffer(e),s=await fileType.fileTypeFromBuffer(t);z.validate(s,k.MIME.VIDEO);let o=v.createTempPath("video","mp4"),n=v.createTempPath("thumb","jpg");await v.safeWriteFile(o,t);let i;try{return await new Promise((c,l)=>{X__default.default(o).screenshots({timestamps:[k.THUMBNAIL.TIMESTAMP],filename:je__namespace.default.basename(n),folder:je__namespace.default.dirname(n),size:`${k.THUMBNAIL.SIZE}x${k.THUMBNAIL.SIZE}`,quality:k.THUMBNAIL.QUALITY}).on("end",async()=>{try{i=(await v.safeReadFile(n)).toString("base64"),c();}catch(p){l(p);}}).on("error",l);}),await v.cleanup([o,n]),i}catch(c){throw await v.cleanup([o,n]),new Error(`Thumbnail generation failed: ${c.message}`)}}static async getDuration(e){return ee.getDuration(e)}},ae=class{static async getThumbnail(e){return (await((await fileType.fileTypeFromBuffer(e)).mime===k.MIME.GIF?$e__default.default(e,{animated:false}):$e__default.default(e)).resize(k.THUMBNAIL.SIZE,k.THUMBNAIL.SIZE,{fit:"cover"}).jpeg({quality:k.THUMBNAIL.QUALITY}).toBuffer()).toString("base64")}static async resizeForSticker(e,t){return $e__default.default(e).resize(k.STICKER.SIZE,k.STICKER.SIZE,{fit:"cover",background:{r:0,g:0,b:0,alpha:0}}).webp({quality:t}).toBuffer()}},te=class{static async getThumbnail(e){let t=await P.toBuffer(e),s=await fileType.fileTypeFromBuffer(t);if(!s||!z.isMedia(s.mime))throw new Error("Invalid media type: expected image or video");return s.mime.startsWith(k.MIME.VIDEO)?N.getThumbnail(e):ae.getThumbnail(t)}},ce=class{static createExifMetadata(e){let t={"sticker-pack-id":j(Date.now().toString()),"sticker-pack-name":e?.packageName||"Zaileys Library","sticker-pack-publisher":e?.authorName||"https://github.com/zeative/zaileys",emojis:["\u{1F913}"],"android-app-store-link":"https://play.google.com/store/apps/details?id=com.marsvard.stickermakerforwhatsapp","ios-app-store-link":"https://itunes.apple.com/app/sticker-maker-studio/id1443326857"},s=Buffer.from([73,73,42,0,8,0,0,0,1,0,65,87,7,0,0,0,0,0,22,0,0,0]),o=Buffer.from(JSON.stringify(t),"utf8"),n=Buffer.concat([s,o]);return n.writeUIntLE(o.length,14,4),n}static async processAnimated(e,t,s){let o=this.getExtension(t),n=v.createTempPath("sticker_in",o),i=v.createTempPath("sticker_out","webp");await v.safeWriteFile(n,e);let c=k.STICKER.MAX_DURATION;try{let S=await N.getDuration(n);c=h(Math.min(S,k.STICKER.MAX_DURATION));}catch{console.warn("Using default duration:",k.STICKER.MAX_DURATION);}let l=`scale=${k.STICKER.SIZE}:${k.STICKER.SIZE}:force_original_aspect_ratio=increase,crop=${k.STICKER.SIZE}:${k.STICKER.SIZE},fps=${k.STICKER.FPS},format=rgba`,p=Math.max(1,Math.min(100,100-s)),y;try{return await ee.process({input:n,output:i,options:["-vcodec libwebp",`-vf ${l}`,`-q:v ${p}`,"-loop 0","-preset default","-an","-vsync 0",`-t ${c}`,`-compression_level ${k.STICKER.COMPRESSION_LEVEL}`],onEnd:async()=>{y=await v.safeReadFile(i);},onError:async()=>{await v.cleanup([n,i]);}}),await v.cleanup([n,i]),y}catch(S){throw await v.cleanup([n,i]),new Error(`Animated sticker processing failed: ${S.message}`)}}static getExtension(e){return e===k.MIME.GIF?"gif":e.startsWith(k.MIME.VIDEO)?"mp4":"tmp"}static async create(e,t){try{let s=await P.toBuffer(e),o=await fileType.fileTypeFromBuffer(s);if(!o)throw new Error("Unable to detect file type");let n=t?.quality||k.STICKER.DEFAULT_QUALITY,c=z.isAnimated(o.mime)?await this.processAnimated(s,o.mime,n):await ae.resizeForSticker(s,n),l=this.createExifMetadata(t),p=new Kt__default.default.Image;await p.load(c),p.exif=l;let y=await p.save(null);return Buffer.isBuffer(y)?y:Buffer.from(y)}catch(s){throw new Error(`Sticker creation failed: ${s.message||s}`)}}},le=class{static async create(e){try{let t=await P.toBuffer(e),s=await fileType.fileTypeFromBuffer(t);if(!s)throw new Error("Unable to detect file type");return {document:t,mimetype:s.mime,fileName:j(Date.now().toString()),jpegThumbnail:await te.getThumbnail(t)}}catch(t){throw new Error(`Document creation failed: ${t.message||t}`)}}},pe=P.toBuffer.bind(P),ut=re.getWaAudio.bind(re),En=N.getThumbnail.bind(N),Wn=N.getDuration.bind(N),ze=te.getThumbnail.bind(te),mt=ce.create.bind(ce),dt=le.create.bind(le);var gt=a=>{if(a)try{a.ev?.removeAllListeners(),a.end?.(new Error("Cleanup"));}catch{}},ue=async a=>{let e=`.session/${a}/auth/keys.json`;try{let t=await _.promises.readFile(e,"utf-8"),s=JSON.parse(t),o=["sender-key:","session:"],n={},i=!1;for(let[c,l]of Object.entries(s))o.some(y=>c.startsWith(y))?i=!0:n[c]=l;i&&(await _.promises.writeFile(e,JSON.stringify(n,null,2)),r.spinner.success(" Session keys repaired successfully"));}catch{r.spinner.warn(" Could not repair session keys, will re-negotiate");}},yt=()=>{let a=r.get("socket");return a?.end?a:null};var Zt=6e4,Qt=12e4,Yt=6e4,Xt=3,Ue=class{lastActivityTime=Date.now();lastRecoveryTime=0;checkInterval=null;isRecovering=false;retryCount=0;options;constructor(e){this.options={checkIntervalMs:Zt,staleThresholdMs:Qt,cooldownMs:Yt,maxRetries:Xt,onRecovery:async()=>{},...e};}start(){this.checkInterval||(this.lastActivityTime=Date.now(),this.setupActivityListeners(),this.checkInterval=setInterval(()=>this.check(),this.options.checkIntervalMs),r.spinner.success(" Session watchdog started"));}stop(){this.checkInterval&&(clearInterval(this.checkInterval),this.checkInterval=null);}touch(){this.lastActivityTime=Date.now(),this.retryCount=0;}setupActivityListeners(){let e=r.get("socket");if(!e?.ev)return;let t=["messages.upsert","message-receipt.update","presence.update","chats.update"];for(let s of t)e.ev.on(s,()=>this.touch());}async check(){if(this.isRecovering)return;Date.now()-this.lastActivityTime>this.options.staleThresholdMs&&await this.recover();}isInCooldown(){return Date.now()-this.lastRecoveryTime<this.options.cooldownMs}async recover(){if(!this.isRecovering){if(this.isInCooldown()){r.spinner.warn(" Recovery in cooldown, skipping...");return}if(this.retryCount>=this.options.maxRetries){r.spinner.error(` Max recovery retries (${this.options.maxRetries}) reached. Manual restart required.`);return}this.isRecovering=true,this.lastRecoveryTime=Date.now(),this.retryCount++;try{r.spinner.warn(` Session recovery attempt ${this.retryCount}/${this.options.maxRetries}...`);let e=r.get("socket");if(e?.ws?.readyState===1)try{await e.fetchStatus(e.user?.id||""),this.touch(),r.spinner.success(" Session health check passed");return}catch{}await ue(this.options.session),r.spinner.warn(" Forcing reconnection..."),await this.options.onRecovery(),this.touch();}catch{r.spinner.error(" Recovery failed");}finally{this.isRecovering=false;}}}async forceRecovery(){if(this.isInCooldown()){r.spinner.warn(" Recovery blocked by cooldown");return}await this.recover();}},se=null,ht=a=>(se&&se.stop(),se=new Ue(a),se),jn=()=>se;var Je=class a{static inst;fLocks=new Map;kLocks=new Map;maxSize=100;static get(){return this.inst||(this.inst=new a)}getFile(e){let t=this.fLocks.get(e);if(!t){if(this.fLocks.size>=this.maxSize){let s=this.fLocks.keys().next().value;this.fLocks.delete(s);}t=new asyncMutex.Mutex,this.fLocks.set(e,t);}return t}getKey(e){let t=this.kLocks.get(e);if(!t){if(this.kLocks.size>=this.maxSize){let s=this.kLocks.keys().next().value;this.kLocks.delete(s);}t=new asyncMutex.Mutex,this.kLocks.set(e,t);}return t}},Ge=class{data;path;pool;size;chunkDir;replacer;reviver;loaded=false;flushMode;debounceMs;flushTimer=null;dirty=false;constructor(e,t,s=2*1024*1024,o="debounce",n=200){this.data=new Map,this.path=e,this.pool=Je.get(),this.size=s,this.chunkDir=`${e}.c`,this.replacer=t?.replacer||null,this.reviver=t?.reviver||null,this.flushMode=o,this.debounceMs=n;}async ensureLoaded(){this.loaded||(await this.read(),this.loaded=true);}scheduleFlush(){if(this.flushMode!=="manual"){if(this.flushMode==="sync"){this.write();return}this.dirty=true,!this.flushTimer&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.dirty&&(this.dirty=false,this.write());},this.debounceMs));}}async read(){return this.pool.getFile(this.path).runExclusive(async()=>{try{let t=await Be.readFile(this.path,"utf-8"),s=JSON.parse(t,this.reviver);this.data.clear();let o=[];for(let[n,i]of Object.entries(s))this.isMeta(i)?o.push(this.loadChunk(n,i)):this.data.set(n,i);return await Promise.all(o),this.loaded=!0,this.data}catch{return await Be.mkdir(je.dirname(this.path),{recursive:true}),this.data.clear(),this.loaded=true,this.data}})}async write(){return this.pool.getFile(this.path).runExclusive(async()=>{let t={},s=[];for(let[n,i]of this.data){if(this.isMeta(i)){t[n]=i;continue}JSON.stringify(i,this.replacer).length>this.size?s.push(this.saveChunk(n,i).then(l=>{t[n]=l;})):t[n]=i;}await Promise.all(s);let o=JSON.stringify(t,this.replacer,2);await Be.writeFile(this.path,o,"utf-8");})}async set(e,t){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{this.data.set(e,t),this.scheduleFlush();});}async push(e,t){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{let o=this.data.get(e),n;Array.isArray(o)?n=o:o===void 0?n=[]:n=[o],n.push(t),this.data.set(e,n),this.scheduleFlush();});}async upsert(e,t,s="key.id"){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{let n=this.data.get(e),i;Array.isArray(n)?i=n:n===void 0?i=[]:i=[n];let c=M__default.default.get(t,s);if(c){let l=i.findIndex(p=>M__default.default.get(p,s)===c);l>=0?i[l]=t:i.push(t);}else i.push(t);this.data.set(e,i),this.scheduleFlush();});}async get(e){if(await this.ensureLoaded(),typeof e=="string")return this.data.get(e);let t=Array.from(this.data.values()).flat();return at(t,e)}async all(){return await this.ensureLoaded(),Array.from(this.data.entries())}async delete(e){return await this.ensureLoaded(),this.pool.getKey(e).runExclusive(async()=>{let s=this.data.get(e);this.isMeta(s)&&await this.delChunk(e,s);let o=this.data.delete(e);return this.scheduleFlush(),o})}async saveChunk(e,t){let s=JSON.stringify(t,this.replacer),o=Buffer.from(s,"utf-8"),n=Math.ceil(o.length/this.size);await Be.mkdir(this.chunkDir,{recursive:true});let i={v:1,k:e,t:n,s:this.size,c:o.length,m:Date.now().toString(36)},c=[];for(let l=0;l<n;l++){let p=l*this.size,y=Math.min(p+this.size,o.length),S=o.subarray(p,y);c.push(Be.writeFile(je.join(this.chunkDir,`${e}.${l}.json`),JSON.stringify({i:l,d:S.toString("base64")})));}return c.push(Be.writeFile(je.join(this.chunkDir,`${e}.manifest.json`),JSON.stringify(i))),await Promise.all(c),{t:n,s:this.size,k:e}}async loadChunk(e,t){let s=je.join(this.chunkDir,`${e}.manifest.json`),o=JSON.parse(await Be.readFile(s,"utf-8")),n=[];for(let p=0;p<o.t;p++)n.push(Be.readFile(je.join(this.chunkDir,`${e}.${p}.json`),"utf-8").then(y=>Buffer.from(JSON.parse(y).d,"base64")));let i=await Promise.all(n),c=Buffer.concat(i),l=JSON.parse(c.toString("utf-8"),this.reviver);this.data.set(e,l);}async delChunk(e,t){let s=[];for(let o=0;o<t.t;o++)s.push(Be.unlink(je.join(this.chunkDir,`${e}.${o}.json`)).catch(()=>{}));s.push(Be.unlink(je.join(this.chunkDir,`${e}.manifest.json`)).catch(()=>{})),await Promise.all(s);try{(await Be.readdir(this.chunkDir)).length===0&&await Be.rmdir(this.chunkDir);}catch{}}isMeta(e){return e?.t&&e?.s&&e?.k}},H=(a,e)=>new Ge(a,e?.BufferJSON,e?.size,e?.flushMode,e?.debounceMs);var xt=async a=>{r.spinner.start(" Initializing auth state...");let e=await Be.stat(a).catch(()=>{});if(e){if(!e.isDirectory())throw r.spinner.error(` Failed to open credentials
2
+ `),`found something that is not a directory at ${a}, either delete it or specify a different location`}else await Be.mkdir(a,{recursive:true});let t=H(`${a}/auth/creds.json`,{BufferJSON:ls.BufferJSON}),s=H(`${a}/auth/keys.json`,{BufferJSON:ls.BufferJSON,size:512*1024});await Promise.all([t.read(),s.read()]);let o=await t.get("creds")||ls.initAuthCreds();return r.spinner.success(" Generate auth successfully"),{state:{creds:o,keys:{get:async(n,i)=>{let c={};return await Promise.all(i.map(async l=>{let p=`${n}:${l}`,y=await s.get(p);n==="app-state-sync-key"&&y&&(y=ls.proto.Message.AppStateSyncKeyData.fromObject(y)),c[l]=y;})),c},set:async n=>{let i=[];for(let c in n)for(let l in n[c]){let p=n[c][l],y=`${c}:${l}`;p?i.push(s.set(y,p)):i.push(s.delete(y).then(()=>{}));}await Promise.all(i),await s.write();}}},saveCreds:async()=>{await t.set("creds",o),await t.write();}}};var cs=new Ke__default.default,St=(a,e)=>({logger:r.logger,printQRInTerminal:false,defaultQueryTimeoutMs:void 0,markOnlineOnConnect:a.options.autoOnline,syncFullHistory:a.options.syncFullHistory,msgRetryCounterCache:new Ke__default.default,mediaCache:new Ke__default.default({stdTTL:60}),cachedGroupMetadata:async t=>cs.get(t),auth:{creds:e.creds,keys:ls.makeCacheableSignalKeyStore(e.keys,r.logger)},getMessage:async t=>t?.remoteJid?(await a.db("messages").get(t.remoteJid))?.find(n=>n?.key?.id===t.id):void 0});var Tt=async a=>{let e=yt();e&&gt(e);let t=`.session/${a.options.session}`;console.info=()=>{};let{state:s,saveCreds:o}=await xt(t),n=St(a,s),i=ls__default.default(n);i.ev.on("creds.update",o),r.set("socket",i);};var me=class{constructor(e){this.client=e;this.initialize();}async initialize(){let e=r.get("socket");e.ev.on("call",async t=>{for(let s of t){let o=await this.parse(s);o&&(await this.client.middleware.run({calls:o}),await this.client.plugins.execute(this.client,{messages:o}),r.events.emit("calls",o),this.client.options?.autoRejectCall&&await e.rejectCall(o.callId,o.callerId));}});}async parse(e){let t=r.get("socket"),s={};return s.callId=e.id,s.callerId=ls.jidNormalizedUser(e.from),s.callerName=await this.client.getRoomName(s.callerId),s.roomId=ls.jidNormalizedUser(e.chatId),s.roomName=R(t?.user?.name||t?.user?.verifiedName),s.date=e.date,s.offline=e.offline,s.status=e.status,s.isVideo=!!e.isVideo,s.isGroup=!!e.isGroup,this.client.logs.call(s),s}};var de={version:"2.0.14",author:"zaadevofc"};var At=a=>{ds__default.default.generate(a,{small:true},e=>{console.log(e);});},It=async()=>{console.clear(),r.spinner.start(" Checking for updates...");let a=await nt(),e=de.version===a;r.spinner.stop();let t="Zaileys",s=`
3
3
  by ${de.author} \xB7 v${de.version}`,o=`${e?"Already using latest version!":`Update available! (v${a})`}
4
- `,n=e?"lime":"orange",i=await ms__default.default.text(t),c=it.cristal(i);console.log(c),console.log(M(s,"dimgray")),console.log(M(o,n));};var ye=class{constructor(e){this.client=e;this.initialize();}async initialize(){r.spinner.start(" Initializing connection...");let e=r.get("socket"),t={},s=async()=>{t.status="reload",r.spinner.warn(" Connection lost. Attempting auto-reload..."),await this.client.initialize();},o=async()=>{await ps.delay(3e3),r.spinner.warn(" Invalid session. Attempting auto cleaning creds..."),await ps.delay(3e3),await ot(this.client.options.session),await s();};if(this.client.options.authType==="pairing"&&this.client.options.phoneNumber&&!e.authState.creds.registered){r.spinner.update(" Generating pairing code..."),await ps.delay(3500);try{t.authTimeout=Date.now()+6e4;let n=new Date(t.authTimeout).toLocaleTimeString(),i=await e.requestPairingCode(this.client.options.phoneNumber.toString());r.spinner.warn(` Pairing expired at ${it.cristal(n)}`),r.spinner.warn(` Pairing code: ${i}`),t.code=i;}catch{await o();}}e.ev.on("connection.update",async n=>{let{connection:i,lastDisconnect:c,qr:l}=n;if(t.status=i||"connecting",t.authType=this.client.options.authType,r.spinner.update(" Connection status: "+it.cristal(t.status)),this.client.options.authType==="qr"&&l){t.authTimeout=Date.now()+6e4;let p=new Date(t.authTimeout).toLocaleTimeString();r.spinner.warn(" Please scan the QR code..."),r.spinner.warn(` Qr code expired at ${it.cristal(p)}`),Ct(l),t.qr=l;return}if(i==="close"){let p=h(c?.error)?.output?.statusCode,y=c?.error?.message||"",S=typeof p=="number"&&p!==ps.DisconnectReason.loggedOut,$=p===515||y.toLowerCase().includes("prekey");if(r.spinner.error(` [${p} - Closed] ${y}`),$){r.spinner.warn(" Session key mismatch detected, attempting repair..."),await ue(this.client.options.session),await ps.delay(1e3),await s();return}if(p===401||p===405){r.spinner.warn(" Session may be used by another device/instance."),r.spinner.warn(" If you want to connect here, close the other connection first."),r.spinner.warn(` Or use a different session name in your Client options.
5
- `);return}if(p===500){r.spinner.error(" Server error occurred, attempting reconnect..."),await s();return}S&&await s();}if(i==="open")if(e.user?.id){let p=ps.jidNormalizedUser(e.user.id).split("@")[0],y=e.user.name||e.user.verifiedName;r.spinner.success(` Connected as ${it.cristal(y||p)}`);}else r.spinner.success(" Connected!");r.events.emit("connection",t);}),e.ev.on("messaging-history.set",({progress:n})=>{t.status="syncing",t.syncProgress=n,r.spinner.start(" Syncing messages history..."),n&&r.spinner.update(` Syncing messages history ${n+"%"}`),n==100&&(r.spinner.success(" Syncing messages history completed!"),t.syncCompleted=true),r.events.emit("connection",t);});}};var It={text:"text",conversation:"text",imageMessage:"image",contactMessage:"contact",locationMessage:"location",documentMessage:"document",audioMessage:"audio",videoMessage:"video",protocolMessage:"protocol",contactsArrayMessage:"contacts",highlyStructuredMessage:"highlyStructured",sendPaymentMessage:"sendPayment",liveLocationMessage:"location",requestPaymentMessage:"requestPayment",declinePaymentRequestMessage:"declinePaymentRequest",cancelPaymentRequestMessage:"cancelPaymentRequest",templateMessage:"template",stickerMessage:"sticker",groupInviteMessage:"groupInvite",templateButtonReplyMessage:"buttons",productMessage:"product",deviceSentMessage:"deviceSent",listMessage:"lists",viewOnceMessage:"viewOnce",orderMessage:"order",listResponseMessage:"lists",ephemeralMessage:"ephemeral",invoiceMessage:"invoice",buttonsMessage:"buttons",buttonsResponseMessage:"buttons",paymentInviteMessage:"paymentInvite",interactiveMessage:"interactive",reactionMessage:"reaction",stickerSyncRmrMessage:"sticker",questionMessage:"question",nativeFlowResponseMessage:"lists",interactiveResponseMessage:"interactiveResponse",pollCreationMessage:"pollCreation",pollCreationMessageKey:"pollUpdate",pollUpdateMessage:"pollUpdate",keepInChatMessage:"keepInChat",documentWithCaptionMessage:"document",requestPhoneNumberMessage:"requestPhoneNumber",viewOnceMessageV2:"viewOnce",encReactionMessage:"reaction",editedMessage:"text",viewOnceMessageV2Extension:"viewOnce",pollCreationMessageV2:"pollCreation",scheduledCallCreationMessage:"scheduledCallCreation",groupMentionedMessage:"groupMentioned",pinInChatMessage:"pinInChat",pollCreationMessageV3:"pollCreation",scheduledCallEditMessage:"scheduledCallEdit",ptvMessage:"ptv",botInvokeMessage:"botInvoke",callLogMesssage:"callLog",encCommentMessage:"encComment",bcallMessage:"bcall",lottieStickerMessage:"lottieSticker",eventMessage:"event",commentMessage:"comment",newsletterAdminInviteMessage:"text",extendedTextMessageWithParentKey:"text",extendedTextMessage:"text",placeholderMessage:"placeholder",encEventUpdateMessage:"encEventUpdate"},He={whatsapp:"0@s.whatsapp.net",meta:"13135550002@s.whatsapp.net",chatgpt:"18002428478@s.whatsapp.net",copilot:"18772241042@s.whatsapp.net",instagram:"447723442971@s.whatsapp.net",tiktok:"6285574670498@s.whatsapp.net"};var he=class{constructor(e){this.client=e;this.limiter=new rateLimiterFlexible.RateLimiterMemory({points:this.client.options.limiter?.maxMessages,duration:this.client.options.limiter?.durationMs/1e3});}limiter;async isSpam(e){try{return await this.limiter.consume(e),!1}catch{return true}}};var we=class{constructor(e){this.client=e;this.limiter=new he(e),this.initialize();}limiter;maxReplies=3;async initialize(){let e=r.get("socket");e.ev.on("messages.upsert",async({messages:t,type:s})=>{if(s==="notify")for(let o of t){let n=await this.parse(o);n&&(this.client.collector.push(n)||(await this.client.middleware.run({messages:n}),await this.client.plugins.execute(this.client,{messages:n}),r.set("message",n),r.events.emit("messages",n)),this.client.options.autoRead&&await e.readMessages([n.message().key]));}});}async parse(e,t){if(e?.category==="peer"||!e?.message||!e?.key?.id||e?.messageStubType||e?.messageStubParameters?.length||e.message?.protocolMessage?.peerDataOperationRequestResponseMessage||e.message?.groupStatusMentionMessage)return;let s=e,o=r.get("socket"),n={},i=ie(e.message),c=i.chain.at(-1),l=i.leaf;l?.message&&(i=ie(l.message),c=i.chain.at(-1),l=i.leaf),n.uniqueId=null,n.channelId=null,n.chatId=e?.message?.protocolMessage?.key?.id||e?.key?.id||null,n.chatType=It[c],n.receiverId=ps.jidNormalizedUser(o?.user?.id||""),n.receiverName=R(o?.user?.name||o?.user?.verifiedName),n.roomId=ps.jidNormalizedUser(e?.key?.remoteJid);let p=l?.type===0,y=l?.type===1,S=l?.type===2,$=n.roomId?.includes("@newsletter"),We=!!e?.message?.questionMessage,V=e?.key?.fromMe||false;if(V&&this.client.options.ignoreMe&&t!=="replied")return;let De=l?.key?.id;if(p||y||S){let T=(await this.client.db("messages").get(n.roomId))?.find(B=>B.key.id===De);if(!T)return;e=T,i=ie(e.message),c=i.chain.at(-1),l=i.leaf;}if(n.roomName=await this.client.getRoomName(n.roomId),n.senderLid=A([e?.key],["remoteJidAlt","participant"])||null,n.senderId=ps.jidNormalizedUser(e?.participant||e?.key?.participant||e?.key?.remoteJid),n.senderName=R(e?.pushName||e?.verifiedBizName),n.senderDevice=ps.getDevice(n.chatId),n.channelId=j([n.roomId,n.senderId]),n.uniqueId=j([n.channelId,n.chatId]),n.timestamp=Number(e?.messageTimestamp)*1e3,$){let I=await o.newsletterMetadata("jid",n.roomId);n.roomName=h(I.thread_metadata.name)?.text,n.senderId=null,n.senderLid=null;}if(V&&(n.senderLid=ps.jidNormalizedUser(o.user.lid),n.senderId=n.receiverId,n.senderName=n.receiverName),n.text=l?.text||l?.caption||l?.name||l?.displayName||l?.conversation||l?.contentText||l?.selectedDisplayText||l||null,l?.name=="menu_options"&&(n.text=Le(l?.paramsJson)?.id),n.text=R(n.text),n.mentions=ct(n.text),n.links=rt(n.text||""),n.isBot=n.chatId.startsWith("BAE5")||n.chatId.startsWith("3EB0")||n.chatId.startsWith("Z4D3FC"),n.isFromMe=V,n.isTagMe=n.mentions?.includes(n.receiverId.split("@")[0]),n.isPrefix=n.text?.startsWith(this.client.options?.prefix)||false,n.isSpam=await this.limiter.isSpam(n.channelId),n.isPrefix&&(n.text=n.text.replace(new RegExp(`^${this.client.options?.prefix}`),"")),n.isGroup=n.roomId?.includes("@g.us"),n.isNewsletter=$,n.isQuestion=We,n.isStory=n.roomId?.includes("@broadcast"),!n.isGroup&&!n.roomName&&(n.roomName=n.senderName),n.isViewOnce=false,n.isEdited=!!Q(Z(i),"editedMessage"),n.isDeleted=p,n.isPinned=y,n.isUnPinned=S,n.isBroadcast=!!e?.broadcast,n.isEphemeral=!!Q(Z(l?.contextInfo),"ephemeralSettingTimestamp"),n.isForwarded=!!Q(Z(l?.contextInfo),"forwardingScore"),n.citation=null,this.client.options.citation){n.citation=n.citation||{};let I=this.client.options.citation;for(let T of Object.keys(I)){let B=I[T];n.citation[T]=async()=>{let G=await B(),Ne=[D(n.roomId),D(n.senderLid),D(n.senderId)];return !!b__default.default.intersection(Ne,G).length};}}n.chatType!=="text"&&(n.media={...lt(l),buffer:()=>ps.downloadMediaMessage(e,"buffer",{}),stream:()=>ps.downloadMediaMessage(e,"stream",{})}),n.message=()=>s,n.replied=null;let L=l?.contextInfo?.quotedMessage,F=A([L],["viewOnceMessageV2Extension","viewOnceMessage"]);F=Q(Z(L),"viewOnce")?L:F;let J=l?.contextInfo?.stanzaId;if(L&&this.maxReplies){this.maxReplies--;let T=(await this.client.db("messages").get(n.roomId))?.find(G=>G.key.id===J),B={...T,message:F};F?(n.replied=await this.parse(B,"replied"),n.replied.isViewOnce=true):n.replied=await this.parse(T,"replied"),this.maxReplies=3;}return t!="replied"&&this.client.logs.message(n),n}};var ve=class{constructor(e){this.client=e;this.connection=new ye(e),this.messages=new we(e),this.calls=new me(e),this.initialize();}connection;messages;calls;async initialize(){let e=r.get("socket");e.ev.on("groups.update",async([t])=>{let s=await e.groupMetadata(t.id);r.groupCache.set(t.id,s);}),e.ev.on("group-participants.update",async t=>{let s=await e.groupMetadata(t.id);r.groupCache.set(t.id,s);}),e?.ev.on("messaging-history.set",async t=>{let{chats:s,contacts:o,messages:n}=t;for(let i of s)await this.client.db("chats").upsert(i.id,i,"id");for(let i of o)await this.client.db("contacts").upsert(i.id,i,"id");for(let i of n){if(!i.message&&!i.key.isViewOnce||i?.category==="peer"||i.message?.protocolMessage&&!i.message?.protocolMessage?.memberLabel||i.message?.groupStatusMentionMessage)return;await this.client.db("messages").upsert(i.key.remoteJid,i,"key.id");}}),e?.ev.on("messages.upsert",async({messages:t})=>{for(let s of t){if(!s.message&&!s.key.isViewOnce||s?.category==="peer"||s.message?.protocolMessage&&!s.message?.protocolMessage?.memberLabel||s.message?.groupStatusMentionMessage)return;await this.client.db("messages").upsert(s.key.remoteJid,s,"key.id");}}),e?.ev.on("chats.upsert",async t=>{for(let s of t)await this.client.db("chats").upsert(s.id,s,"id");}),e?.ev.on("contacts.upsert",async t=>{for(let s of t)await this.client.db("contacts").upsert(s.id,s,"id");});}};var ne=(a,e)=>{let t=a.safeParse(e);if(t.success)return t.data;throw console.error(t.error),"Invalid data"};var vs=u__default.default.object({type:u__default.default.literal("quick_reply"),text:u__default.default.string()}),Ms=u__default.default.object({type:u__default.default.literal("cta_url"),url:u__default.default.url(),text:u__default.default.string()}),bs=u__default.default.object({type:u__default.default.literal("cta_copy"),copy:u__default.default.string(),text:u__default.default.string()}),xs=u__default.default.object({type:u__default.default.literal("cta_call"),text:u__default.default.string(),phoneNumber:u__default.default.string()}),Ss=u__default.default.object({type:u__default.default.literal("single_select"),text:u__default.default.string(),section:u__default.default.object({title:u__default.default.string(),highlight_label:u__default.default.string().optional(),rows:u__default.default.object({id:u__default.default.string(),title:u__default.default.string(),header:u__default.default.string().optional(),description:u__default.default.string().optional()}).array()}).array()}),Ts=u__default.default.object({type:u__default.default.literal("interactive"),footer:u__default.default.string().optional(),data:u__default.default.union([vs,Ms,bs,xs,Ss]).array()}),Cs=u__default.default.object({type:u__default.default.literal("simple"),footer:u__default.default.string().optional(),data:u__default.default.object({id:u__default.default.string(),text:u__default.default.string()}).array()}),Pt=u__default.default.union([Cs,Ts]);var oe=u__default.default.url().or(u__default.default.base64()).or(u__default.default.instanceof(Buffer)),Et=u__default.default.object({text:u__default.default.string()}).passthrough(),As=u__default.default.object({image:oe,caption:u__default.default.string().optional()}).passthrough(),Is=u__default.default.object({audio:oe,caption:u__default.default.string().optional(),ptt:u__default.default.boolean().optional()}).passthrough(),Rs=u__default.default.object({video:oe,caption:u__default.default.string().optional(),ptv:u__default.default.boolean().optional()}).passthrough(),Ps=u__default.default.object({sticker:oe,caption:u__default.default.string().optional()}).passthrough(),Es=u__default.default.object({document:oe,caption:u__default.default.string().optional(),fileName:u__default.default.string().optional()}).passthrough(),Ws=u__default.default.object({location:u__default.default.object({latitude:u__default.default.number(),longitude:u__default.default.number(),url:u__default.default.url().optional(),title:u__default.default.string().optional(),footer:u__default.default.string().optional()}).optional()}).passthrough(),Ds=u__default.default.object({title:u__default.default.string().optional(),contacts:u__default.default.object({fullname:u__default.default.string(),phoneNumber:u__default.default.number(),organization:u__default.default.string().optional()}).array()}),Ns=u__default.default.object({poll:u__default.default.object({name:u__default.default.string(),answers:u__default.default.string().array(),isMultiple:u__default.default.boolean().default(false).optional()})}),Wt=u__default.default.object({replied:u__default.default.custom().optional(),isForwardedMany:u__default.default.boolean().optional(),isViewOnce:u__default.default.boolean().optional(),banner:u__default.default.custom().optional(),buttons:Pt.optional()});u__default.default.enum(["forward","button","edit","delete"]);var Os=u__default.default.union([Et,As,Is,Rs,Ps,Es,Ws,Ds,Ns]),Dt=u__default.default.string().or(u__default.default.intersection(Os,Wt.omit({buttons:true}))),Nt=u__default.default.intersection(Et,Wt.omit({banner:true}));var Me=class{toNativeSimple(e){return e.map(({id:t,text:s})=>({name:"quick_reply",buttonParamsJson:JSON.stringify({display_text:s,id:t})}))}toNativeInteractive(e){let t={quick_reply:s=>({display_text:s.text,id:s.id}),cta_url:s=>({display_text:s.text,url:s.url,merchant_url:s.url}),cta_copy:s=>({display_text:s.text,id:s.id,copy_code:s.copy}),cta_call:s=>({display_text:s.text,phone_number:s.phoneNumber}),single_select:s=>({title:s.text,sections:s.section})};return e.map(s=>({name:s.type,buttonParamsJson:JSON.stringify(t[s.type](s))}))}build(e){let t=h(e).buttons,s=t?.data||[],n=t?.type=="simple"?this.toNativeSimple(s):this.toNativeInteractive(s);return {body:{text:h(e).text},footer:t.footer?{text:t.footer}:void 0,nativeFlowMessage:{buttons:n}}}async send(e,t,s){let o=r.get("socket"),n=o.authState?.creds?.me?.id||o.user?.id,i=this.build(t),c=ps.generateWAMessageFromContent(e,{interactiveMessage:i},{userJid:n,messageId:ps.generateMessageIDV2(n),...s});return await o.relayMessage(e,c.message,{messageId:c.key.id,...s,additionalNodes:[{tag:"biz",attrs:{},content:[{tag:"interactive",attrs:{type:"native_flow",v:"1"},content:[{tag:"native_flow",attrs:{v:"9",name:"mixed"}}]}]}]}),o.config?.emitOwnEvents&&!ps.isJidGroup(e)&&process.nextTick(()=>o.upsertMessage?.(c,"append")),c}};var be=class{constructor(e){this.client=e;}async signal(e,t,s,o){s!="delete"&&(s=="button"?t=ne(Nt,t):t=ne(Dt,t));let n=r.get("socket"),i={},c={},l=b__default.default.isString(t),p=this.client.options?.fakeReply?.provider,y=this.client.options?.autoMentions,S=this.client.options?.autoPresence,$=b__default.default.has(t,"replied"),We=b__default.default.has(t,"banner"),V=b__default.default.has(t,"isViewOnce"),De=s=="button",L=b__default.default.has(t,"image"),F=b__default.default.has(t,"video"),J=b__default.default.has(t,"audio"),I=b__default.default.has(t,"sticker"),T=b__default.default.has(t,"document"),B=b__default.default.has(t,"location"),G=b__default.default.has(t,"contacts"),Ne=b__default.default.has(t,"poll"),tt=L||F||J||I||T,K=l?t:A([t],["text","caption"]);if(S&&(J?await n.sendPresenceUpdate("recording",e):await n.sendPresenceUpdate("composing",e)),y&&(i={...i,mentions:Fe(K),contextInfo:{mentionedJid:Fe(K)}}),$&&(c.quoted=h(t).replied,p&&(c.quoted.key.remoteJid=He[p],c.quoted.key.participant=He[p])),We&&(i={...i,contextInfo:{externalAdReply:h(t).banner}},i.contextInfo.externalAdReply.mediaType=1),V&&(i={...i,viewOnce:h(t)?.isViewOnce}),K&&(i={...i,text:K,caption:K},tt&&delete h(i).text),tt){let w=A([t],["image","video","audio","sticker","document"]),E=b__default.default.isString(w)?{url:w}:w;if(L&&(i={...i,image:E,jpegThumbnail:await ze(w)}),F){let W=h(t)?.ptv;i={...i,video:E,ptv:W,jpegThumbnail:await ze(w)};}if(J){let W=h(t)?.ptt;i={...i,audio:await pt(w),ptt:W,mimetype:W?"audio/ogg; codecs=opus":"audio/mpeg"};}if(I&&(i={...i,sticker:await ut(w,this.client.options?.sticker)}),T){let W=await mt(w);i={...i,fileName:h(t).fileName,...W};}}if(B){let w=h(t).location;i={...i,location:{degreesLatitude:w.latitude,degreesLongitude:w.longitude,url:w.url,address:w.footer,name:w.title}};}if(G){let w=h(t)?.contacts,st=w?.contacts.map(E=>{let W=["BEGIN:VCARD","VERSION:3.0",`FN:${E.fullname}`,`ORG:${E.organization||""}`,`TEL;type=CELL;type=VOICE;waid=${E.phoneNumber}:${E.phoneNumber}`,"END:VCARD"].join(`
6
- `);return {displayName:E.fullname,vcard:W}});i={...i,contacts:{displayName:w?.title,contacts:st}};}if(Ne){let w=h(t)?.poll;i={...i,poll:{name:w.name,values:w.answers,selectableCount:w.isMultiple?1:0,toAnnouncementGroup:true}};}return s=="forward"&&(i={...i,contextInfo:{...h(i).contextInfo,isForwarded:true,forwardingScore:h(t).isForwardedMany?9999:1}}),s=="edit"&&(i={...i,edit:o?.key},await n.sendPresenceUpdate("paused",e)),s=="delete"&&(i={...i,delete:o?.key},await n.sendPresenceUpdate("paused",e)),De?await new Me().send(e,t,c):await n.sendMessage(e,h(i),c)}async send(e,t){return await this.signal(e,t)}async forward(e,t){return await this.signal(e,t,"forward")}async button(e,t){return await this.signal(e,t,"button")}async edit(e,t){return await this.signal(e.key.remoteJid,t,"edit",e)}async delete(e){return b__default.default.isArray(e)?Promise.all(e.map(t=>this.signal(t.key.remoteJid,{},"delete",t))):await this.signal(e.key.remoteJid,{},"delete",e)}async presence(e,t){let s=r.get("socket"),o={typing:"composing",recording:"recording",online:"available",offline:"unavailable",paused:"paused"};return await s.sendPresenceUpdate(o[t],e)}async reaction(e,t){return await r.get("socket").sendMessage(e.key.remoteJid,{react:{text:t,key:e?.key}})}async memberLabel(e,t){return await r.get("socket").relayMessage(e,{protocolMessage:{type:30,memberLabel:{label:t,labelTimestamp:Date.now()}}},{})}};var Ze=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").communityCreate(e,t)}async createGroup(e,t,s){return await r.get("socket").communityCreateGroup(e,t,s)}async leave(e){return await r.get("socket").communityLeave(e)}async metadata(e){return await r.get("socket").communityMetadata(e)}async update(e,t,s){let o=r.get("socket");switch(t){case "subject":return await o.communityUpdateSubject(e,s);case "description":return await o.communityUpdateDescription(e,s)}}async group(e,t,s){let o=r.get("socket");switch(t){case "link":if(!s)throw "Group JID is required for linking";return await o.communityLinkGroup(e,s);case "unlink":if(!s)throw "Group JID is required for unlinking";return await o.communityUnlinkGroup(e,s);case "linked":return await o.communityFetchLinkedGroups(e)}}async participants(e,t,s,o){let n=r.get("socket");switch(t){case "list":return await n.communityRequestParticipantsList(e);case "request-update":return await n.communityRequestParticipantsUpdate(e,o,h(s));case "update":if(!s||!o)throw "Action and participants are required for update";return await n.communityParticipantsUpdate(e,o,h(s));case "all":return await n.communityFetchAllParticipating()}}async invite(e,t,...s){let o=r.get("socket");switch(t){case "code":return await o.communityInviteCode(e);case "revoke":return await o.communityRevokeInvite(e);case "accept":return await o.communityAcceptInvite(e);case "info":return await o.communityGetInviteInfo(e);case "revokeV4":return await o.communityRevokeInviteV4(e,s[0]);case "acceptV4":return await o.communityAcceptInviteV4(e,s[0])}}async settings(e,t,s){let o=r.get("socket");switch(t){case "ephemeral":return await o.communityToggleEphemeral(e,s);case "update":return await o.communitySettingUpdate(e,s);case "memberAdd":return await o.communityMemberAddMode(e,s);case "approval":return await o.communityJoinApprovalMode(e,s)}}},xe=class{constructor(e){this.mlient=e;this.community=new Ze(e);}community};var Qe=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").groupCreate(e,t)}async participant(e,t,s){return await r.get("socket").groupParticipantsUpdate(e,t,s)}async profile(e,t,s){let o=r.get("socket"),n=Buffer.isBuffer(t);switch(s){case "subject":if(!n)return await o.groupUpdateSubject(e,t);case "description":if(!n)return await o.groupUpdateDescription(e,t);case "picture":return await o.updateProfilePicture(e,pe(t))}}async setting(e,t){let s=r.get("socket");switch(t){case "open":return await s.groupSettingUpdate(e,"not_announcement");case "close":return await s.groupSettingUpdate(e,"announcement");case "locked":return await s.groupSettingUpdate(e,t);case "unlocked":return await s.groupSettingUpdate(e,t);case "all_member_add":return await s.groupMemberAddMode(e,t);case "admin_add":return await s.groupMemberAddMode(e,t)}}async leave(e){return await r.get("socket").groupLeave(e)}async inviteCode(e,t){let s=r.get("socket");switch(t){case "code":return await s.groupInviteCode(e);case "revoke":return await s.groupRevokeInvite(e);case "accept":return await s.groupAcceptInvite(e);case "info":return await s.groupGetInviteInfo(e)}}async metadata(e){return await r.get("socket").groupMetadata(e)}async requestJoin(e,t,s){let o=r.get("socket");switch(s){case "approve":return await o.groupRequestParticipantsUpdate(e,t,s);case "reject":return await o.groupRequestParticipantsUpdate(e,t,s)}}async requestJoinList(e){return await r.get("socket").groupRequestParticipantsList(e)}async fetchAllGroups(){return await r.get("socket").groupFetchAllParticipating()}async ephemeral(e,t){let s=r.get("socket"),o={off:0,"24h":86400,"7d":604800,"90d":7776e3};return await s.groupToggleEphemeral(e,o[t])}},Se=class{constructor(e){this.glient=e;this.group=new Qe(e);}group};var Ye=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").newsletterCreate(e,t)}async action(e,t){let s=r.get("socket");switch(t){case "follow":return await s.newsletterFollow(e);case "unfollow":return await s.newsletterUnfollow(e);case "mute":return await s.newsletterMute(e);case "unmute":return await s.newsletterUnmute(e);}}async update(e,t,s){let o=r.get("socket"),n=Buffer.isBuffer(t);switch(s){case "name":if(!n)return await o.newsletterUpdateName(e,t);case "description":if(!n)return await o.newsletterUpdateDescription(e,t);case "picture":return await o.newsletterUpdatePicture(e,pe(t))}}async metadata(e,t){return await r.get("socket").newsletterMetadata(t,e)}async subscribers(e){return await r.get("socket").newsletterSubscribers(e)}async reaction(e,t,s){return await r.get("socket").newsletterReactMessage(e,t,s)}async fetchMessages(e,t,s,o){let n=r.get("socket"),i=s.getTime()/1e3,c=o.getTime()/1e3;return await n.newsletterFetchMessages(e,t,i,c)}async adminCount(e){return await r.get("socket").newsletterAdminCount(e)}async changeOwner(e,t){return await r.get("socket").newsletterChangeOwner(e,t)}async demote(e,t){return await r.get("socket").newsletterDemote(e,t)}async delete(e){return await r.get("socket").newsletterDelete(e)}async removePicture(e){return await r.get("socket").newsletterRemovePicture(e)}},Te=class{constructor(e){this.nlient=e;this.newsletter=new Ye(e);}newsletter};var Xe=class{constructor(e){this.client=e;}async block(e){return await r.get("socket").updateBlockStatus(e,"block")}async unblock(e){return await r.get("socket").updateBlockStatus(e,"unblock")}async lastSeen(e){return await r.get("socket").updateLastSeenPrivacy(e)}async online(e){return await r.get("socket").updateOnlinePrivacy(e)}async picture(e){return await r.get("socket").updateProfilePicturePrivacy(e)}async status(e){return await r.get("socket").updateStatusPrivacy(e)}async readReceipt(e){return await r.get("socket").updateReadReceiptsPrivacy(e)}async groupsAdd(e){return await r.get("socket").updateGroupsAddPrivacy(e)}async ephemeral(e){let t=r.get("socket"),s={off:0,"24h":86400,"7d":604800,"90d":7776e3};return await t.updateDefaultDisappearingMode(s[e])}async blocklist(){return await r.get("socket").fetchBlocklist()}async getSettings(){return await r.get("socket").fetchPrivacySettings(true)}},Ce=class{constructor(e){this.plient=e;this.privacy=new Xe(e);}privacy};var _s=u.z.object({maxMessages:u.z.number().default(20),durationMs:u.z.number().default(1e4)}).optional(),$s=u.z.record(u.z.string(),u.z.function({output:u.z.promise(u.z.array(u.z.number()))})).optional(),js=u.z.object({provider:u.z.enum(["whatsapp","meta","chatgpt","copilot","instagram","tiktok"]).or(u.z.number())}).optional(),zs=u.z.object({packageName:u.z.string(),authorName:u.z.string(),quality:u.z.number()}).optional(),Ot=u.z.object({session:u.z.string().default("zaileys").optional(),prefix:u.z.string().optional(),ignoreMe:u.z.boolean().default(true).optional(),showLogs:u.z.boolean().default(true).optional(),syncFullHistory:u.z.boolean().default(true).optional(),autoMarkAI:u.z.boolean().default(true).optional(),autoMentions:u.z.boolean().default(true).optional(),autoOnline:u.z.boolean().default(true).optional(),autoRead:u.z.boolean().default(true).optional(),autoPresence:u.z.boolean().default(true).optional(),autoRejectCall:u.z.boolean().default(true).optional(),limiter:_s,citation:$s,fakeReply:js,sticker:zs}),Us=u.z.object({authType:u.z.literal("pairing"),phoneNumber:u.z.number()}),qs=u.z.object({authType:u.z.literal("qr")}),Lt=u.z.union([Us.extend(Ot.shape),qs.extend(Ot.shape)]),kr=u.z.enum(["connection","messages","calls"]);var br=u__default.default.object({status:u__default.default.enum(["connecting","open","close","reload","syncing"]),authType:u__default.default.enum(["pairing","qr"]),authTimeout:u__default.default.number().optional(),syncProgress:u__default.default.number().optional(),syncCompleted:u__default.default.boolean().default(false).optional(),qr:u__default.default.string().optional(),code:u__default.default.string().optional()});var Js=u__default.default.enum(["unknown","android","ios","desktop","web"]),Gs=u__default.default.enum(["text","image","contact","location","document","audio","video","protocol","contacts","highlyStructured","sendPayment","requestPayment","declinePaymentRequest","cancelPaymentRequest","template","sticker","groupInvite","product","deviceSent","lists","viewOnce","order","ephemeral","invoice","buttons","paymentInvite","interactive","reaction","sticker","interactiveResponse","pollCreation","pollUpdate","keepInChat","document","requestPhoneNumber","viewOnce","reaction","text","viewOnce","pollCreation","scheduledCallCreation","groupMentioned","pinInChat","pollCreation","scheduledCallEdit","ptv","botInvoke","callLog","encComment","bcall","lottieSticker","event","comment","placeholder","encEventUpdate"]),Ft=u__default.default.object({channelId:u__default.default.string(),uniqueId:u__default.default.string(),chatId:u__default.default.string(),chatType:Gs,receiverId:u__default.default.string(),receiverName:u__default.default.string(),roomId:u__default.default.string(),roomName:u__default.default.string(),senderLid:u__default.default.string(),senderId:u__default.default.string(),senderName:u__default.default.string(),senderDevice:Js,timestamp:u__default.default.number(),text:u__default.default.string().nullable(),mentions:u__default.default.string().array(),links:u__default.default.string().array(),isBot:u__default.default.boolean(),isFromMe:u__default.default.boolean(),isPrefix:u__default.default.boolean(),isSpam:u__default.default.boolean(),isTagMe:u__default.default.boolean(),isGroup:u__default.default.boolean(),isNewsletter:u__default.default.boolean(),isQuestion:u__default.default.boolean(),isStory:u__default.default.boolean(),isViewOnce:u__default.default.boolean(),isEdited:u__default.default.boolean(),isDeleted:u__default.default.boolean(),isPinned:u__default.default.boolean(),isUnPinned:u__default.default.boolean(),isBroadcast:u__default.default.boolean(),isEphemeral:u__default.default.boolean(),isForwarded:u__default.default.boolean(),citation:u__default.default.record(u__default.default.string(),u__default.default.function({output:u__default.default.promise(u__default.default.boolean())})).nullable(),media:u__default.default.object({buffer:u__default.default.function({output:u__default.default.promise(u__default.default.instanceof(Buffer))}),stream:u__default.default.function({output:u__default.default.promise(u__default.default.instanceof(Vs__default.default))})}).loose().nullable(),message:u__default.default.function({input:[],output:u__default.default.custom()})}),Ar=Ft.extend({replied:Ft.nullable()});var Er=u__default.default.object({callId:u__default.default.string(),callerId:u__default.default.string(),callerName:u__default.default.string(),roomId:u__default.default.string(),roomName:u__default.default.string(),date:u__default.default.date(),offline:u__default.default.boolean(),status:u__default.default.enum(["accept","offer","reject","ringing","terminate","timeout"]),isVideo:u__default.default.boolean(),isGroup:u__default.default.boolean()});var Ae=class{collect(e,t,s){let o=t.max??1/0;if(o<=0){s([]);return}let n=r.collectors.get(e);n&&(clearTimeout(n.timeoutId),n.callback(n.messages),r.collectors.delete(e));let i=setTimeout(()=>{let c=r.collectors.get(e);c&&(c.callback(c.messages),r.collectors.delete(e));},t.timeout);r.collectors.set(e,{messages:[],max:o,filter:t.filter,callback:s,timeoutId:i});}push(e){let t=r.collectors.get(e.channelId);return !t||t.filter&&!t.filter(e)?false:(t.messages.push(e),t.messages.length>=t.max&&(clearTimeout(t.timeoutId),t.callback(t.messages),r.collectors.delete(e.channelId)),true)}has(e){return r.collectors.has(e)}cancel(e){let t=r.collectors.get(e);return t?(clearTimeout(t.timeoutId),t.callback(t.messages),r.collectors.delete(e),t.messages):[]}};var Ie=class{constructor(e){this.client=e;this.initialize();}logsInitialized=false;logsDisplayed=false;isReady=false;getRoomColor(e){return e?.isNewsletter?"blue":e?.isGroup?e?.isGroup?"lime":"dimgray":"orange"}initialize(){if(!this.client.options.showLogs||this.logsInitialized)return;this.logsInitialized=true,r.get("socket").ev.on("connection.update",({connection:t})=>{this.logsDisplayed||t==="open"&&(this.logsDisplayed=true,this.isReady=true,console.log(),r.spinner.info("Logs Indicator:"),console.log(M(" \u2022","orange")+" Private Chat"),console.log(M(" \u2022","lime")+" Group Chat"),console.log(M(" \u2022","blue")+" Newsletter Chat"),console.log());});}message(e){if(!this.isReady)return;let t=h(this.getRoomColor(e)),s=e?.text?.toLowerCase()?.match("zaileys"),o=M(`[${new Date(e?.timestamp).toTimeString().split(" ")[0]}]`,"dimgray"),n=M(`${e?.roomName}`,t),i=e?.text?.slice(0,300)||"",c=i?.length>=300?"...":"",l=`${o} \u2192 ${n}
7
- `;e?.isNewsletter?l+=`${M("[room]","dimgray")} \u2192 ${M(`${e?.roomName} (${D(e?.roomId)})`,t)}
8
- `:l+=`${M("[sender]","dimgray")} \u2192 ${M(`${e?.senderName} (${D(e?.senderId)})`,t)}
9
- `,l+=`${M(`[${e?.chatType||"unknown"}]`,"dimgray")} \u2192 ${M(i+c,s?["#ff5f6d","#ffc371"]:"brown")}
10
- `,l+="\u2014",console.log(l);}call(e){if(!r.get("logs")?.ready)return;let t=h(this.getRoomColor(e)),s=M(`[${new Date(e?.date).toTimeString().split(" ")[0]}]`,"dimgray"),o=M(`${e?.roomName}`,t),n=`${s} \u2192 ${o}
11
- `;n+=`${M("[caller]","dimgray")} \u2192 ${M(`${e?.callerName} (${D(e?.callerId)})`,t)}
12
- `,n+=`${M(`[${e?.status}]`,"dimgray")} \u2192 ${M(e?.isVideo?"Video Call":"Voice Call","brown")}
13
- `,n+="\u2014",console.log(n);}};var Re=class{stack=[];use(e){return this.stack.push(e),this}async run(e){let t=-1,s=async o=>{if(o<=t)throw "next() called multiple times";t=o;let n=this.stack[o];if(n)try{await n(e,()=>s(o+1));}catch(i){throw console.error("Middleware error:",i),i}};await s(0);}};var Pe=class{plugins=[];pluginsDir;constructor(e=je__namespace.join(process.cwd(),"plugins")){this.pluginsDir=e;}getAllFiles(e,t=[]){if(!___namespace.existsSync(e))return t;let s=___namespace.readdirSync(e);for(let o of s){let n=je__namespace.join(e,o);___namespace.statSync(n).isDirectory()?this.getAllFiles(n,t):(o.endsWith(".ts")||o.endsWith(".js"))&&!o.endsWith(".d.ts")&&t.push(n);}return t}async load(){if(!___namespace.existsSync(this.pluginsDir))return;let e=this.getAllFiles(this.pluginsDir);for(let t of e)try{let o=(await import(url.pathToFileURL(t).href)).default;o?.default&&(o=o.default),o?.handler&&o?.config&&this.plugins.push(o);}catch{}}async execute(e,t){let s=t.messages.text||"";for(let o of this.plugins)try{this.match(s,o.config.matcher)&&await o.handler(e,t);}catch{}}match(e,t){return t.some(s=>e===s||e.startsWith(s+" "))}getLoadedPlugins(){return this.plugins}getPluginsInfo(){return this.plugins.map(e=>({matcher:e.config.matcher,metadata:e.config.metadata}))}async reload(){this.plugins=[],await this.load();}},Qr=(a,e)=>({handler:a,config:e});var Ee=class{classInjection(e,t){let s=t.length;return new Proxy(e,{get(o,n,i){if(n in o){let c=Reflect.get(o,n,i);return typeof c=="function"?c.bind(o):c}for(let c=0;c<s;c++){let l=t[c];if(n in l){let p=Reflect.get(l,n,i);return typeof p=="function"?p.bind(l):p}}},set(o,n,i,c){if(n in o)return Reflect.set(o,n,i,c);for(let l=0;l<s;l++){let p=t[l];if(n in p)return Reflect.set(p,n,i,c)}return Reflect.set(o,n,i,c)},has(o,n){if(n in e)return true;for(let i=0;i<s;i++)if(n in t[i])return true;return false},ownKeys(){let o=[];for(let n of Reflect.ownKeys(e))o.push(n);for(let n=0;n<s;n++)for(let i of Reflect.ownKeys(t[n]))o.includes(i)||o.push(i);return o},getOwnPropertyDescriptor(o,n){let i=Object.getOwnPropertyDescriptor(e,n);if(i)return i;for(let c=0;c<s;c++)if(i=Object.getOwnPropertyDescriptor(t[c],n),i)return i}})}};var Bt=class{constructor(e){this.options=e;this.options=ne(Lt,e);let t=new Ee().classInjection(this,[new be(this),new Se(this),new Ce(this),new Te(this),new xe(this)]);return this._ready=this.initialize(t),t}listener;_ready;watchdog=null;logs;collector=new Ae;middleware=new Re;plugins=new Pe;async initialize(e){await At(),await St(this),await this.plugins.load(),this.listener=new ve(e||this),this.logs=new Ie(this),this.watchdog=yt({session:this.options.session,checkIntervalMs:6e4,staleThresholdMs:12e4,cooldownMs:6e4,maxRetries:3,onRecovery:async()=>{await this.initialize(e);}}),this.watchdog.start(),this.setupPrekeyErrorDetection();}prekeyDetected=false;setupPrekeyErrorDetection(){let e=console.log,t=this.watchdog,s=this;console.log=(...o)=>{let n=o.map(i=>String(i)).join(" ").toLowerCase();return (n.includes("closing open session")||n.includes("prekey bundle"))&&!s.prekeyDetected&&(s.prekeyDetected=true,r.spinner.warn(" Prekey bundle error detected"),t?.forceRecovery(),setTimeout(()=>{s.prekeyDetected=false;},6e4)),e.apply(console,o)};}ready(){return this._ready}db(e){return r.lowdb(this.options.session,`stores/${e}.json`)}on(e,t){r.events.on(e,t);}use(e){return this.middleware.use(e),this}get socket(){return r.get("socket")}async getMessageByChatId(e){let s=(await this.db("messages").all())?.flat()?.filter(o=>typeof o=="object")?.flat()?.find(o=>o?.key?.id===e);return await this.listener.messages.parse(s)}async getRoomName(e){let t=await this.db("chats").get(e),s=await this.db("contacts").get(e),o=A(t,["name","verifiedName","displayName"]),n=A(s,["notify","name"]);return R(o||n)||null}async getLabelName(e){let t=await this.db("messages").get(e),s=A(t,["message.protocolMessage.memberLabel"]);return R(s?.label)||null}};
4
+ `,n=e?"lime":"orange",i=await us__default.default.text(t),c=it.cristal(i);console.log(c),console.log(b(s,"dimgray")),console.log(b(o,n));};var ye=class{constructor(e){this.client=e;this.initialize();}async initialize(){r.spinner.start(" Initializing connection...");let e=r.get("socket"),t={},s=async()=>{t.status="reload",r.spinner.warn(" Connection lost. Attempting auto-reload..."),await this.client.initialize();},o=async()=>{await ls.delay(3e3),r.spinner.warn(" Invalid session. Attempting auto cleaning creds..."),await ls.delay(3e3),await ot(this.client.options.session),await s();};if(this.client.options.authType==="pairing"&&this.client.options.phoneNumber&&!e.authState.creds.registered){r.spinner.update(" Generating pairing code..."),await ls.delay(3500);try{t.authTimeout=Date.now()+6e4;let n=new Date(t.authTimeout).toLocaleTimeString(),i=await e.requestPairingCode(this.client.options.phoneNumber.toString());r.spinner.warn(` Pairing expired at ${it.cristal(n)}`),r.spinner.warn(` Pairing code: ${i}`),t.code=i;}catch{await o();}}e.ev.on("connection.update",async n=>{let{connection:i,lastDisconnect:c,qr:l}=n;if(t.status=i||"connecting",t.authType=this.client.options.authType,r.spinner.update(" Connection status: "+it.cristal(t.status)),this.client.options.authType==="qr"&&l){t.authTimeout=Date.now()+6e4;let p=new Date(t.authTimeout).toLocaleTimeString();r.spinner.warn(" Please scan the QR code..."),r.spinner.warn(` Qr code expired at ${it.cristal(p)}`),At(l),t.qr=l;return}if(i==="close"){let p=h(c?.error)?.output?.statusCode,y=c?.error?.message||"",S=typeof p=="number"&&p!==ls.DisconnectReason.loggedOut,$=p===515||y.toLowerCase().includes("prekey");if(r.spinner.error(` [${p} - Closed] ${y}`),$){r.spinner.warn(" Session key mismatch detected, attempting repair..."),await ue(this.client.options.session),await ls.delay(1e3),await s();return}if(p===401||p===405){r.spinner.warn(" Session may be used by another device/instance."),r.spinner.warn(" If you want to connect here, close the other connection first."),r.spinner.warn(` Or use a different session name in your Client options.
5
+ `);return}if(p===500){r.spinner.error(" Server error occurred, attempting reconnect..."),await s();return}S&&await s();}if(i==="open")if(e.user?.id){let p=ls.jidNormalizedUser(e.user.id).split("@")[0],y=e.user.name||e.user.verifiedName;r.spinner.success(` Connected as ${it.cristal(y||p)}`);}else r.spinner.success(" Connected!");r.events.emit("connection",t);}),e.ev.on("messaging-history.set",({progress:n})=>{t.status="syncing",t.syncProgress=n,r.spinner.start(" Syncing messages history..."),n&&r.spinner.update(` Syncing messages history ${n+"%"}`),n==100&&(r.spinner.success(" Syncing messages history completed!"),t.syncCompleted=true),r.events.emit("connection",t);});}};var Rt={text:"text",conversation:"text",imageMessage:"image",contactMessage:"contact",locationMessage:"location",documentMessage:"document",audioMessage:"audio",videoMessage:"video",protocolMessage:"protocol",contactsArrayMessage:"contacts",highlyStructuredMessage:"highlyStructured",sendPaymentMessage:"sendPayment",liveLocationMessage:"location",requestPaymentMessage:"requestPayment",declinePaymentRequestMessage:"declinePaymentRequest",cancelPaymentRequestMessage:"cancelPaymentRequest",templateMessage:"template",stickerMessage:"sticker",groupInviteMessage:"groupInvite",templateButtonReplyMessage:"buttons",productMessage:"product",deviceSentMessage:"deviceSent",listMessage:"lists",viewOnceMessage:"viewOnce",orderMessage:"order",listResponseMessage:"lists",ephemeralMessage:"ephemeral",invoiceMessage:"invoice",buttonsMessage:"buttons",buttonsResponseMessage:"buttons",paymentInviteMessage:"paymentInvite",interactiveMessage:"interactive",reactionMessage:"reaction",stickerSyncRmrMessage:"sticker",questionMessage:"question",nativeFlowResponseMessage:"lists",interactiveResponseMessage:"interactiveResponse",pollCreationMessage:"pollCreation",pollCreationMessageKey:"pollUpdate",pollUpdateMessage:"pollUpdate",keepInChatMessage:"keepInChat",documentWithCaptionMessage:"document",requestPhoneNumberMessage:"requestPhoneNumber",viewOnceMessageV2:"viewOnce",encReactionMessage:"reaction",editedMessage:"text",viewOnceMessageV2Extension:"viewOnce",pollCreationMessageV2:"pollCreation",scheduledCallCreationMessage:"scheduledCallCreation",groupMentionedMessage:"groupMentioned",pinInChatMessage:"pinInChat",pollCreationMessageV3:"pollCreation",scheduledCallEditMessage:"scheduledCallEdit",ptvMessage:"ptv",botInvokeMessage:"botInvoke",callLogMesssage:"callLog",encCommentMessage:"encComment",bcallMessage:"bcall",lottieStickerMessage:"lottieSticker",eventMessage:"event",commentMessage:"comment",newsletterAdminInviteMessage:"text",extendedTextMessageWithParentKey:"text",extendedTextMessage:"text",placeholderMessage:"placeholder",encEventUpdateMessage:"encEventUpdate"},He={whatsapp:"0@s.whatsapp.net",meta:"13135550002@s.whatsapp.net",chatgpt:"18002428478@s.whatsapp.net",copilot:"18772241042@s.whatsapp.net",instagram:"447723442971@s.whatsapp.net",tiktok:"6285574670498@s.whatsapp.net"};var he=class{constructor(e){this.client=e;this.limiter=new rateLimiterFlexible.RateLimiterMemory({points:this.client.options.limiter?.maxMessages,duration:this.client.options.limiter?.durationMs/1e3});}limiter;async isSpam(e){try{return await this.limiter.consume(e),!1}catch{return true}}};var we=class{constructor(e){this.client=e;this.limiter=new he(e),this.initialize();}limiter;maxReplies=3;async initialize(){let e=r.get("socket");e.ev.on("messages.upsert",async({messages:t,type:s})=>{if(s==="notify")for(let o of t){let n=await this.parse(o);n&&(this.client.collector.push(n)||(await this.client.middleware.run({messages:n}),await this.client.plugins.execute(this.client,{messages:n}),r.set("message",n),r.events.emit("messages",n)),this.client.options.autoRead&&await e.readMessages([n.message().key]));}});}async parse(e,t){if(e?.category==="peer"||!e?.message||!e?.key?.id||e?.messageStubType||e?.messageStubParameters?.length||e.message?.protocolMessage?.peerDataOperationRequestResponseMessage||e.message?.groupStatusMentionMessage)return;let s=e,o=r.get("socket"),n={},i=ie(e.message),c=i.chain.at(-1),l=i.leaf;l?.message&&(i=ie(l.message),c=i.chain.at(-1),l=i.leaf),n.uniqueId=null,n.channelId=null,n.chatId=e?.message?.protocolMessage?.key?.id||e?.key?.id||null,n.chatType=Rt[c],n.receiverId=ls.jidNormalizedUser(o?.user?.id||""),n.receiverName=R(o?.user?.name||o?.user?.verifiedName),n.roomId=ls.jidNormalizedUser(e?.key?.remoteJid);let p=l?.type===0,y=l?.type===1,S=l?.type===2,$=n.roomId?.includes("@newsletter"),We=!!e?.message?.questionMessage,V=e?.key?.fromMe||false;if(V&&this.client.options.ignoreMe&&t!=="replied")return;let De=l?.key?.id;if(p||y||S){let T=(await this.client.db("messages").get(n.roomId))?.find(B=>B.key.id===De);if(!T)return;e=T,i=ie(e.message),c=i.chain.at(-1),l=i.leaf;}if(n.roomName=await this.client.getRoomName(n.roomId),n.senderLid=A([e?.key],["remoteJidAlt","participant"])||null,n.senderId=ls.jidNormalizedUser(e?.participant||e?.key?.participant||e?.key?.remoteJid),n.senderName=R(e?.pushName||e?.verifiedBizName),n.senderDevice=ls.getDevice(n.chatId),n.channelId=j([n.roomId,n.senderId]),n.uniqueId=j([n.channelId,n.chatId]),n.timestamp=Number(e?.messageTimestamp)*1e3,$){let I=await o.newsletterMetadata("jid",n.roomId);n.roomName=h(I.thread_metadata.name)?.text,n.senderId=null,n.senderLid=null;}if(V&&(n.senderLid=ls.jidNormalizedUser(o.user.lid),n.senderId=n.receiverId,n.senderName=n.receiverName),n.text=l?.text||l?.caption||l?.name||l?.displayName||l?.conversation||l?.contentText||l?.selectedDisplayText||l||null,l?.name=="menu_options"&&(n.text=Oe(l?.paramsJson)?.id),n.text=R(n.text),n.mentions=ct(n.text),n.links=rt(n.text||""),n.isBot=n.chatId.startsWith("BAE5")||n.chatId.startsWith("3EB0")||n.chatId.startsWith("Z4D3FC"),n.isFromMe=V,n.isTagMe=n.mentions?.includes(n.receiverId.split("@")[0]),n.isPrefix=n.text?.startsWith(this.client.options?.prefix)||false,n.isSpam=await this.limiter.isSpam(n.channelId),n.isPrefix&&(n.text=n.text.replace(new RegExp(`^${this.client.options?.prefix}`),"")),n.isGroup=n.roomId?.includes("@g.us"),n.isNewsletter=$,n.isQuestion=We,n.isStory=n.roomId?.includes("@broadcast"),!n.isGroup&&!n.roomName&&(n.roomName=n.senderName),n.isViewOnce=false,n.isEdited=!!Q(Z(i),"editedMessage"),n.isDeleted=p,n.isPinned=y,n.isUnPinned=S,n.isBroadcast=!!e?.broadcast,n.isEphemeral=!!Q(Z(l?.contextInfo),"ephemeralSettingTimestamp"),n.isForwarded=!!Q(Z(l?.contextInfo),"forwardingScore"),n.citation=null,this.client.options.citation){n.citation=n.citation||{};let I=this.client.options.citation;for(let T of Object.keys(I)){let B=I[T];n.citation[T]=async()=>{let G=await B(),Ne=[D(n.roomId),D(n.senderLid),D(n.senderId)];return !!M__default.default.intersection(Ne,G).length};}}n.chatType!=="text"&&(n.media={...lt(l),buffer:()=>ls.downloadMediaMessage(e,"buffer",{}),stream:()=>ls.downloadMediaMessage(e,"stream",{})}),n.message=()=>s,n.replied=null;let O=l?.contextInfo?.quotedMessage,L=A([O],["viewOnceMessageV2Extension","viewOnceMessage"]);L=Q(Z(O),"viewOnce")?O:L;let J=l?.contextInfo?.stanzaId;if(O&&this.maxReplies){this.maxReplies--;let T=(await this.client.db("messages").get(n.roomId))?.find(G=>G.key.id===J),B={...T,message:L};L?(n.replied=await this.parse(B,"replied"),n.replied.isViewOnce=true):n.replied=await this.parse(T,"replied"),this.maxReplies=3;}return t!="replied"&&this.client.logs.message(n),n}};var ve=class{constructor(e){this.client=e;this.connection=new ye(e),this.messages=new we(e),this.calls=new me(e),this.initialize();}connection;messages;calls;async initialize(){let e=r.get("socket");e.ev.on("groups.update",async([t])=>{let s=await e.groupMetadata(t.id);r.groupCache.set(t.id,s);}),e.ev.on("group-participants.update",async t=>{let s=await e.groupMetadata(t.id);r.groupCache.set(t.id,s);}),e?.ev.on("messaging-history.set",async t=>{let{chats:s,contacts:o,messages:n}=t;for(let i of s)await this.client.db("chats").upsert(i.id,i,"id");for(let i of o)await this.client.db("contacts").upsert(i.id,i,"id");for(let i of n){if(!i.message&&!i.key.isViewOnce||i?.category==="peer"||i.message?.protocolMessage&&!i.message?.protocolMessage?.memberLabel||i.message?.groupStatusMentionMessage)return;await this.client.db("messages").upsert(i.key.remoteJid,i,"key.id");}}),e?.ev.on("messages.upsert",async({messages:t})=>{for(let s of t){if(!s.message&&!s.key.isViewOnce||s?.category==="peer"||s.message?.protocolMessage&&!s.message?.protocolMessage?.memberLabel||s.message?.groupStatusMentionMessage)return;await this.client.db("messages").upsert(s.key.remoteJid,s,"key.id");}}),e?.ev.on("chats.upsert",async t=>{for(let s of t)await this.client.db("chats").upsert(s.id,s,"id");}),e?.ev.on("contacts.upsert",async t=>{for(let s of t)await this.client.db("contacts").upsert(s.id,s,"id");});}};var ne=(a,e)=>{let t=a.safeParse(e);if(t.success)return t.data;throw console.error(t.error),"Invalid data"};var ws=u__default.default.object({type:u__default.default.literal("quick_reply"),text:u__default.default.string()}),vs=u__default.default.object({type:u__default.default.literal("cta_url"),url:u__default.default.url(),text:u__default.default.string()}),bs=u__default.default.object({type:u__default.default.literal("cta_copy"),copy:u__default.default.string(),text:u__default.default.string()}),Ms=u__default.default.object({type:u__default.default.literal("cta_call"),text:u__default.default.string(),phoneNumber:u__default.default.string()}),xs=u__default.default.object({type:u__default.default.literal("single_select"),text:u__default.default.string(),section:u__default.default.object({title:u__default.default.string(),highlight_label:u__default.default.string().optional(),rows:u__default.default.object({id:u__default.default.string(),title:u__default.default.string(),header:u__default.default.string().optional(),description:u__default.default.string().optional()}).array()}).array()}),Ss=u__default.default.object({type:u__default.default.literal("interactive"),footer:u__default.default.string().optional(),data:u__default.default.union([ws,vs,bs,Ms,xs]).array()}),Ts=u__default.default.object({type:u__default.default.literal("simple"),footer:u__default.default.string().optional(),data:u__default.default.object({id:u__default.default.string(),text:u__default.default.string()}).array()}),Et=u__default.default.union([Ts,Ss]);var oe=u__default.default.url().or(u__default.default.base64()).or(u__default.default.instanceof(Buffer)),Wt=u__default.default.object({text:u__default.default.string()}).passthrough(),Cs=u__default.default.object({image:oe,caption:u__default.default.string().optional()}).passthrough(),As=u__default.default.object({audio:oe,caption:u__default.default.string().optional(),ptt:u__default.default.boolean().optional()}).passthrough(),Is=u__default.default.object({video:oe,caption:u__default.default.string().optional(),ptv:u__default.default.boolean().optional()}).passthrough(),Rs=u__default.default.object({sticker:oe,caption:u__default.default.string().optional()}).passthrough(),Ps=u__default.default.object({document:oe,caption:u__default.default.string().optional(),fileName:u__default.default.string().optional()}).passthrough(),Es=u__default.default.object({location:u__default.default.object({latitude:u__default.default.number(),longitude:u__default.default.number(),url:u__default.default.url().optional(),title:u__default.default.string().optional(),footer:u__default.default.string().optional()}).optional()}).passthrough(),Ws=u__default.default.object({title:u__default.default.string().optional(),contacts:u__default.default.object({fullname:u__default.default.string(),phoneNumber:u__default.default.number(),organization:u__default.default.string().optional()}).array()}),Ds=u__default.default.object({poll:u__default.default.object({name:u__default.default.string(),answers:u__default.default.string().array(),isMultiple:u__default.default.boolean().default(false).optional()})}),Dt=u__default.default.object({replied:u__default.default.custom().optional(),isForwardedMany:u__default.default.boolean().optional(),isViewOnce:u__default.default.boolean().optional(),banner:u__default.default.custom().optional(),buttons:Et.optional()});u__default.default.enum(["forward","button","edit","delete"]);var Ns=u__default.default.union([Wt,Cs,As,Is,Rs,Ps,Es,Ws,Ds]),Nt=u__default.default.string().or(u__default.default.intersection(Ns,Dt.omit({buttons:true}))),Ft=u__default.default.intersection(Wt,Dt.omit({banner:true}));var be=class{toNativeSimple(e){return e.map(({id:t,text:s})=>({name:"quick_reply",buttonParamsJson:JSON.stringify({display_text:s,id:t})}))}toNativeInteractive(e){let t={quick_reply:s=>({display_text:s.text,id:s.id}),cta_url:s=>({display_text:s.text,url:s.url,merchant_url:s.url}),cta_copy:s=>({display_text:s.text,id:s.id,copy_code:s.copy}),cta_call:s=>({display_text:s.text,phone_number:s.phoneNumber}),single_select:s=>({title:s.text,sections:s.section})};return e.map(s=>({name:s.type,buttonParamsJson:JSON.stringify(t[s.type](s))}))}build(e){let t=h(e).buttons,s=t?.data||[],n=t?.type=="simple"?this.toNativeSimple(s):this.toNativeInteractive(s);return {body:{text:h(e).text},footer:t.footer?{text:t.footer}:void 0,nativeFlowMessage:{buttons:n}}}async send(e,t,s){let o=r.get("socket"),n=o.authState?.creds?.me?.id||o.user?.id,i=this.build(t),c=ls.generateWAMessageFromContent(e,{interactiveMessage:i},{userJid:n,messageId:ls.generateMessageIDV2(n),...s});return await o.relayMessage(e,c.message,{messageId:c.key.id,...s,additionalNodes:[{tag:"biz",attrs:{},content:[{tag:"interactive",attrs:{type:"native_flow",v:"1"},content:[{tag:"native_flow",attrs:{v:"9",name:"mixed"}}]}]}]}),o.config?.emitOwnEvents&&!ls.isJidGroup(e)&&process.nextTick(()=>o.upsertMessage?.(c,"append")),c}};var Me=class{constructor(e){this.client=e;}async signal(e,t,s,o){s!="delete"&&(s=="button"?t=ne(Ft,t):t=ne(Nt,t));let n=r.get("socket"),i={},c={},l=M__default.default.isString(t),p=this.client.options?.fakeReply?.provider,y=this.client.options?.autoMentions,S=this.client.options?.autoPresence,$=M__default.default.has(t,"replied"),We=M__default.default.has(t,"banner"),V=M__default.default.has(t,"isViewOnce"),De=s=="button",O=M__default.default.has(t,"image"),L=M__default.default.has(t,"video"),J=M__default.default.has(t,"audio"),I=M__default.default.has(t,"sticker"),T=M__default.default.has(t,"document"),B=M__default.default.has(t,"location"),G=M__default.default.has(t,"contacts"),Ne=M__default.default.has(t,"poll"),tt=O||L||J||I||T,K=l?t:A([t],["text","caption"]);if(S&&(J?await n.sendPresenceUpdate("recording",e):await n.sendPresenceUpdate("composing",e)),y&&(i={...i,mentions:Le(K),contextInfo:{mentionedJid:Le(K)}}),$&&(c.quoted=h(t).replied,p&&(c.quoted.key.remoteJid=He[p],c.quoted.key.participant=He[p])),We&&(i={...i,contextInfo:{externalAdReply:h(t).banner}},i.contextInfo.externalAdReply.mediaType=1),V&&(i={...i,viewOnce:h(t)?.isViewOnce}),K&&(i={...i,text:K,caption:K},tt&&delete h(i).text),tt){let w=A([t],["image","video","audio","sticker","document"]),E=M__default.default.isString(w)?{url:w}:w;if(O&&(i={...i,image:E,jpegThumbnail:await ze(w)}),L){let W=h(t)?.ptv;i={...i,video:E,ptv:W,jpegThumbnail:await ze(w)};}if(J){let W=h(t)?.ptt;i={...i,audio:await ut(w),ptt:W,mimetype:W?"audio/ogg; codecs=opus":"audio/mpeg"};}if(I&&(i={...i,sticker:await mt(w,this.client.options?.sticker)}),T){let W=await dt(w);i={...i,fileName:h(t).fileName,...W};}}if(B){let w=h(t).location;i={...i,location:{degreesLatitude:w.latitude,degreesLongitude:w.longitude,url:w.url,address:w.footer,name:w.title}};}if(G){let w=h(t)?.contacts,st=w?.contacts.map(E=>{let W=["BEGIN:VCARD","VERSION:3.0",`FN:${E.fullname}`,`ORG:${E.organization||""}`,`TEL;type=CELL;type=VOICE;waid=${E.phoneNumber}:${E.phoneNumber}`,"END:VCARD"].join(`
6
+ `);return {displayName:E.fullname,vcard:W}});i={...i,contacts:{displayName:w?.title,contacts:st}};}if(Ne){let w=h(t)?.poll;i={...i,poll:{name:w.name,values:w.answers,selectableCount:w.isMultiple?1:0,toAnnouncementGroup:true}};}return s=="forward"&&(i={...i,contextInfo:{...h(i).contextInfo,isForwarded:true,forwardingScore:h(t).isForwardedMany?9999:1}}),s=="edit"&&(i={...i,edit:o?.key},await n.sendPresenceUpdate("paused",e)),s=="delete"&&(i={...i,delete:o?.key},await n.sendPresenceUpdate("paused",e)),De?await new be().send(e,t,c):await n.sendMessage(e,h(i),c)}async send(e,t){return await this.signal(e,t)}async forward(e,t){return await this.signal(e,t,"forward")}async button(e,t){return await this.signal(e,t,"button")}async edit(e,t){return await this.signal(e.key.remoteJid,t,"edit",e)}async delete(e){return M__default.default.isArray(e)?Promise.all(e.map(t=>this.signal(t.key.remoteJid,{},"delete",t))):await this.signal(e.key.remoteJid,{},"delete",e)}async presence(e,t){let s=r.get("socket"),o={typing:"composing",recording:"recording",online:"available",offline:"unavailable",paused:"paused"};return await s.sendPresenceUpdate(o[t],e)}async reaction(e,t){return await r.get("socket").sendMessage(e.key.remoteJid,{react:{text:t,key:e?.key}})}async memberLabel(e,t){return await r.get("socket").relayMessage(e,{protocolMessage:{type:30,memberLabel:{label:t,labelTimestamp:Date.now()}}},{})}};var Ze=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").communityCreate(e,t)}async createGroup(e,t,s){return await r.get("socket").communityCreateGroup(e,t,s)}async leave(e){return await r.get("socket").communityLeave(e)}async metadata(e){return await r.get("socket").communityMetadata(e)}async update(e,t,s){let o=r.get("socket");switch(t){case "subject":return await o.communityUpdateSubject(e,s);case "description":return await o.communityUpdateDescription(e,s)}}async group(e,t,s){let o=r.get("socket");switch(t){case "link":if(!s)throw "Group JID is required for linking";return await o.communityLinkGroup(e,s);case "unlink":if(!s)throw "Group JID is required for unlinking";return await o.communityUnlinkGroup(e,s);case "linked":return await o.communityFetchLinkedGroups(e)}}async participants(e,t,s,o){let n=r.get("socket");switch(t){case "list":return await n.communityRequestParticipantsList(e);case "request-update":return await n.communityRequestParticipantsUpdate(e,o,h(s));case "update":if(!s||!o)throw "Action and participants are required for update";return await n.communityParticipantsUpdate(e,o,h(s));case "all":return await n.communityFetchAllParticipating()}}async invite(e,t,...s){let o=r.get("socket");switch(t){case "code":return await o.communityInviteCode(e);case "revoke":return await o.communityRevokeInvite(e);case "accept":return await o.communityAcceptInvite(e);case "info":return await o.communityGetInviteInfo(e);case "revokeV4":return await o.communityRevokeInviteV4(e,s[0]);case "acceptV4":return await o.communityAcceptInviteV4(e,s[0])}}async settings(e,t,s){let o=r.get("socket");switch(t){case "ephemeral":return await o.communityToggleEphemeral(e,s);case "update":return await o.communitySettingUpdate(e,s);case "memberAdd":return await o.communityMemberAddMode(e,s);case "approval":return await o.communityJoinApprovalMode(e,s)}}},xe=class{constructor(e){this.mlient=e;this.community=new Ze(e);}community};var Qe=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").groupCreate(e,t)}async participant(e,t,s){return await r.get("socket").groupParticipantsUpdate(e,t,s)}async profile(e,t,s){let o=r.get("socket"),n=Buffer.isBuffer(t);switch(s){case "subject":if(!n)return await o.groupUpdateSubject(e,t);case "description":if(!n)return await o.groupUpdateDescription(e,t);case "picture":return await o.updateProfilePicture(e,pe(t))}}async setting(e,t){let s=r.get("socket");switch(t){case "open":return await s.groupSettingUpdate(e,"not_announcement");case "close":return await s.groupSettingUpdate(e,"announcement");case "locked":return await s.groupSettingUpdate(e,t);case "unlocked":return await s.groupSettingUpdate(e,t);case "all_member_add":return await s.groupMemberAddMode(e,t);case "admin_add":return await s.groupMemberAddMode(e,t)}}async leave(e){return await r.get("socket").groupLeave(e)}async inviteCode(e,t){let s=r.get("socket");switch(t){case "code":return await s.groupInviteCode(e);case "revoke":return await s.groupRevokeInvite(e);case "accept":return await s.groupAcceptInvite(e);case "info":return await s.groupGetInviteInfo(e)}}async metadata(e){return await r.get("socket").groupMetadata(e)}async requestJoin(e,t,s){let o=r.get("socket");switch(s){case "approve":return await o.groupRequestParticipantsUpdate(e,t,s);case "reject":return await o.groupRequestParticipantsUpdate(e,t,s)}}async requestJoinList(e){return await r.get("socket").groupRequestParticipantsList(e)}async fetchAllGroups(){return await r.get("socket").groupFetchAllParticipating()}async ephemeral(e,t){let s=r.get("socket"),o={off:0,"24h":86400,"7d":604800,"90d":7776e3};return await s.groupToggleEphemeral(e,o[t])}},Se=class{constructor(e){this.glient=e;this.group=new Qe(e);}group};var Ye=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").newsletterCreate(e,t)}async action(e,t){let s=r.get("socket");switch(t){case "follow":return await s.newsletterFollow(e);case "unfollow":return await s.newsletterUnfollow(e);case "mute":return await s.newsletterMute(e);case "unmute":return await s.newsletterUnmute(e);}}async update(e,t,s){let o=r.get("socket"),n=Buffer.isBuffer(t);switch(s){case "name":if(!n)return await o.newsletterUpdateName(e,t);case "description":if(!n)return await o.newsletterUpdateDescription(e,t);case "picture":return await o.newsletterUpdatePicture(e,pe(t))}}async metadata(e,t){return await r.get("socket").newsletterMetadata(t,e)}async subscribers(e){return await r.get("socket").newsletterSubscribers(e)}async reaction(e,t,s){return await r.get("socket").newsletterReactMessage(e,t,s)}async fetchMessages(e,t,s,o){let n=r.get("socket"),i=s.getTime()/1e3,c=o.getTime()/1e3;return await n.newsletterFetchMessages(e,t,i,c)}async adminCount(e){return await r.get("socket").newsletterAdminCount(e)}async changeOwner(e,t){return await r.get("socket").newsletterChangeOwner(e,t)}async demote(e,t){return await r.get("socket").newsletterDemote(e,t)}async delete(e){return await r.get("socket").newsletterDelete(e)}async removePicture(e){return await r.get("socket").newsletterRemovePicture(e)}},Te=class{constructor(e){this.nlient=e;this.newsletter=new Ye(e);}newsletter};var Xe=class{constructor(e){this.client=e;}async block(e){return await r.get("socket").updateBlockStatus(e,"block")}async unblock(e){return await r.get("socket").updateBlockStatus(e,"unblock")}async lastSeen(e){return await r.get("socket").updateLastSeenPrivacy(e)}async online(e){return await r.get("socket").updateOnlinePrivacy(e)}async picture(e){return await r.get("socket").updateProfilePicturePrivacy(e)}async status(e){return await r.get("socket").updateStatusPrivacy(e)}async readReceipt(e){return await r.get("socket").updateReadReceiptsPrivacy(e)}async groupsAdd(e){return await r.get("socket").updateGroupsAddPrivacy(e)}async ephemeral(e){let t=r.get("socket"),s={off:0,"24h":86400,"7d":604800,"90d":7776e3};return await t.updateDefaultDisappearingMode(s[e])}async blocklist(){return await r.get("socket").fetchBlocklist()}async getSettings(){return await r.get("socket").fetchPrivacySettings(true)}},Ce=class{constructor(e){this.plient=e;this.privacy=new Xe(e);}privacy};var Bs=u.z.object({maxMessages:u.z.number().default(20),durationMs:u.z.number().default(1e4)}).optional(),_s=u.z.record(u.z.string(),u.z.function({output:u.z.promise(u.z.array(u.z.number()))})).optional(),$s=u.z.object({provider:u.z.enum(["whatsapp","meta","chatgpt","copilot","instagram","tiktok"]).or(u.z.number())}).optional(),js=u.z.object({packageName:u.z.string(),authorName:u.z.string(),quality:u.z.number()}).optional(),Ot=u.z.object({session:u.z.string().default("zaileys").optional(),prefix:u.z.string().optional(),ignoreMe:u.z.boolean().default(true).optional(),showLogs:u.z.boolean().default(true).optional(),syncFullHistory:u.z.boolean().default(true).optional(),disableFFmpeg:u.z.boolean().default(false).optional(),autoMarkAI:u.z.boolean().default(true).optional(),autoMentions:u.z.boolean().default(true).optional(),autoOnline:u.z.boolean().default(true).optional(),autoRead:u.z.boolean().default(true).optional(),autoPresence:u.z.boolean().default(true).optional(),autoRejectCall:u.z.boolean().default(true).optional(),limiter:Bs,citation:_s,fakeReply:$s,sticker:js}),zs=u.z.object({authType:u.z.literal("pairing"),phoneNumber:u.z.number()}),Us=u.z.object({authType:u.z.literal("qr")}),Lt=u.z.union([zs.extend(Ot.shape),Us.extend(Ot.shape)]),gr=u.z.enum(["connection","messages","calls"]);var wr=u__default.default.object({status:u__default.default.enum(["connecting","open","close","reload","syncing"]),authType:u__default.default.enum(["pairing","qr"]),authTimeout:u__default.default.number().optional(),syncProgress:u__default.default.number().optional(),syncCompleted:u__default.default.boolean().default(false).optional(),qr:u__default.default.string().optional(),code:u__default.default.string().optional()});var Vs=u__default.default.enum(["unknown","android","ios","desktop","web"]),Js=u__default.default.enum(["text","image","contact","location","document","audio","video","protocol","contacts","highlyStructured","sendPayment","requestPayment","declinePaymentRequest","cancelPaymentRequest","template","sticker","groupInvite","product","deviceSent","lists","viewOnce","order","ephemeral","invoice","buttons","paymentInvite","interactive","reaction","sticker","interactiveResponse","pollCreation","pollUpdate","keepInChat","document","requestPhoneNumber","viewOnce","reaction","text","viewOnce","pollCreation","scheduledCallCreation","groupMentioned","pinInChat","pollCreation","scheduledCallEdit","ptv","botInvoke","callLog","encComment","bcall","lottieSticker","event","comment","placeholder","encEventUpdate"]),Bt=u__default.default.object({channelId:u__default.default.string(),uniqueId:u__default.default.string(),chatId:u__default.default.string(),chatType:Js,receiverId:u__default.default.string(),receiverName:u__default.default.string(),roomId:u__default.default.string(),roomName:u__default.default.string(),senderLid:u__default.default.string(),senderId:u__default.default.string(),senderName:u__default.default.string(),senderDevice:Vs,timestamp:u__default.default.number(),text:u__default.default.string().nullable(),mentions:u__default.default.string().array(),links:u__default.default.string().array(),isBot:u__default.default.boolean(),isFromMe:u__default.default.boolean(),isPrefix:u__default.default.boolean(),isSpam:u__default.default.boolean(),isTagMe:u__default.default.boolean(),isGroup:u__default.default.boolean(),isNewsletter:u__default.default.boolean(),isQuestion:u__default.default.boolean(),isStory:u__default.default.boolean(),isViewOnce:u__default.default.boolean(),isEdited:u__default.default.boolean(),isDeleted:u__default.default.boolean(),isPinned:u__default.default.boolean(),isUnPinned:u__default.default.boolean(),isBroadcast:u__default.default.boolean(),isEphemeral:u__default.default.boolean(),isForwarded:u__default.default.boolean(),citation:u__default.default.record(u__default.default.string(),u__default.default.function({output:u__default.default.promise(u__default.default.boolean())})).nullable(),media:u__default.default.object({buffer:u__default.default.function({output:u__default.default.promise(u__default.default.instanceof(Buffer))}),stream:u__default.default.function({output:u__default.default.promise(u__default.default.instanceof(qs__default.default))})}).loose().nullable(),message:u__default.default.function({input:[],output:u__default.default.custom()})}),Sr=Bt.extend({replied:Bt.nullable()});var Ir=u__default.default.object({callId:u__default.default.string(),callerId:u__default.default.string(),callerName:u__default.default.string(),roomId:u__default.default.string(),roomName:u__default.default.string(),date:u__default.default.date(),offline:u__default.default.boolean(),status:u__default.default.enum(["accept","offer","reject","ringing","terminate","timeout"]),isVideo:u__default.default.boolean(),isGroup:u__default.default.boolean()});var Ae=class{collect(e,t,s){let o=t.max??1/0;if(o<=0){s([]);return}let n=r.collectors.get(e);n&&(clearTimeout(n.timeoutId),n.callback(n.messages),r.collectors.delete(e));let i=setTimeout(()=>{let c=r.collectors.get(e);c&&(c.callback(c.messages),r.collectors.delete(e));},t.timeout);r.collectors.set(e,{messages:[],max:o,filter:t.filter,callback:s,timeoutId:i});}push(e){let t=r.collectors.get(e.channelId);return !t||t.filter&&!t.filter(e)?false:(t.messages.push(e),t.messages.length>=t.max&&(clearTimeout(t.timeoutId),t.callback(t.messages),r.collectors.delete(e.channelId)),true)}has(e){return r.collectors.has(e)}cancel(e){let t=r.collectors.get(e);return t?(clearTimeout(t.timeoutId),t.callback(t.messages),r.collectors.delete(e),t.messages):[]}};var Ie=class{constructor(e){this.client=e;this.initialize();}logsInitialized=false;logsDisplayed=false;isReady=false;getRoomColor(e){return e?.isNewsletter?"blue":e?.isGroup?e?.isGroup?"lime":"dimgray":"orange"}initialize(){if(!this.client.options.showLogs||this.logsInitialized)return;this.logsInitialized=true,r.get("socket").ev.on("connection.update",({connection:t})=>{this.logsDisplayed||t==="open"&&(this.logsDisplayed=true,this.isReady=true,console.log(),r.spinner.info("Logs Indicator:"),console.log(b(" \u2022","orange")+" Private Chat"),console.log(b(" \u2022","lime")+" Group Chat"),console.log(b(" \u2022","blue")+" Newsletter Chat"),console.log());});}message(e){if(!this.isReady)return;let t=h(this.getRoomColor(e)),s=e?.text?.toLowerCase()?.match("zaileys"),o=b(`[${new Date(e?.timestamp).toTimeString().split(" ")[0]}]`,"dimgray"),n=b(`${e?.roomName}`,t),i=e?.text?.slice(0,300)||"",c=i?.length>=300?"...":"",l=`${o} \u2192 ${n}
7
+ `;e?.isNewsletter?l+=`${b("[room]","dimgray")} \u2192 ${b(`${e?.roomName} (${D(e?.roomId)})`,t)}
8
+ `:l+=`${b("[sender]","dimgray")} \u2192 ${b(`${e?.senderName} (${D(e?.senderId)})`,t)}
9
+ `,l+=`${b(`[${e?.chatType||"unknown"}]`,"dimgray")} \u2192 ${b(i+c,s?["#ff5f6d","#ffc371"]:"brown")}
10
+ `,l+="\u2014",console.log(l);}call(e){if(!r.get("logs")?.ready)return;let t=h(this.getRoomColor(e)),s=b(`[${new Date(e?.date).toTimeString().split(" ")[0]}]`,"dimgray"),o=b(`${e?.roomName}`,t),n=`${s} \u2192 ${o}
11
+ `;n+=`${b("[caller]","dimgray")} \u2192 ${b(`${e?.callerName} (${D(e?.callerId)})`,t)}
12
+ `,n+=`${b(`[${e?.status}]`,"dimgray")} \u2192 ${b(e?.isVideo?"Video Call":"Voice Call","brown")}
13
+ `,n+="\u2014",console.log(n);}};var Re=class{stack=[];use(e){return this.stack.push(e),this}async run(e){let t=-1,s=async o=>{if(o<=t)throw "next() called multiple times";t=o;let n=this.stack[o];if(n)try{await n(e,()=>s(o+1));}catch(i){throw console.error("Middleware error:",i),i}};await s(0);}};var Pe=class{plugins=[];pluginsDir;constructor(e=je__namespace.join(process.cwd(),"plugins")){this.pluginsDir=e;}getAllFiles(e,t=[]){if(!___namespace.existsSync(e))return t;let s=___namespace.readdirSync(e);for(let o of s){let n=je__namespace.join(e,o);___namespace.statSync(n).isDirectory()?this.getAllFiles(n,t):(o.endsWith(".ts")||o.endsWith(".js"))&&!o.endsWith(".d.ts")&&t.push(n);}return t}async load(){if(!___namespace.existsSync(this.pluginsDir))return;let e=this.getAllFiles(this.pluginsDir);for(let t of e)try{let o=(await import(url.pathToFileURL(t).href)).default;o?.default&&(o=o.default),o?.handler&&o?.config&&this.plugins.push(o);}catch{}}async execute(e,t){let s=t.messages.text||"";for(let o of this.plugins)try{this.match(s,o.config.matcher)&&await o.handler(e,t);}catch{}}match(e,t){return t.some(s=>e===s||e.startsWith(s+" "))}getLoadedPlugins(){return this.plugins}getPluginsInfo(){return this.plugins.map(e=>({matcher:e.config.matcher,metadata:e.config.metadata}))}async reload(){this.plugins=[],await this.load();}},Kr=(a,e)=>({handler:a,config:e});var Ee=class{classInjection(e,t){let s=t.length;return new Proxy(e,{get(o,n,i){if(n in o){let c=Reflect.get(o,n,i);return typeof c=="function"?c.bind(o):c}for(let c=0;c<s;c++){let l=t[c];if(n in l){let p=Reflect.get(l,n,i);return typeof p=="function"?p.bind(l):p}}},set(o,n,i,c){if(n in o)return Reflect.set(o,n,i,c);for(let l=0;l<s;l++){let p=t[l];if(n in p)return Reflect.set(p,n,i,c)}return Reflect.set(o,n,i,c)},has(o,n){if(n in e)return true;for(let i=0;i<s;i++)if(n in t[i])return true;return false},ownKeys(){let o=[];for(let n of Reflect.ownKeys(e))o.push(n);for(let n=0;n<s;n++)for(let i of Reflect.ownKeys(t[n]))o.includes(i)||o.push(i);return o},getOwnPropertyDescriptor(o,n){let i=Object.getOwnPropertyDescriptor(e,n);if(i)return i;for(let c=0;c<s;c++)if(i=Object.getOwnPropertyDescriptor(t[c],n),i)return i}})}};var _t=class{constructor(e){this.options=e;this.options=ne(Lt,e);let t=new Ee().classInjection(this,[new Me(this),new Se(this),new Ce(this),new Te(this),new xe(this)]);return this._ready=this.initialize(t),t}listener;_ready;watchdog=null;logs;collector=new Ae;middleware=new Re;plugins=new Pe;async initialize(e){await It(),await pt(this.options.disableFFmpeg),await Tt(this),await this.plugins.load(),this.listener=new ve(e||this),this.logs=new Ie(this),this.watchdog=ht({session:this.options.session,checkIntervalMs:6e4,staleThresholdMs:12e4,cooldownMs:6e4,maxRetries:3,onRecovery:async()=>{await this.initialize(e);}}),this.watchdog.start(),this.setupPrekeyErrorDetection();}prekeyDetected=false;setupPrekeyErrorDetection(){let e=console.log,t=this.watchdog,s=this;console.log=(...o)=>{let n=o.map(i=>String(i)).join(" ").toLowerCase();return (n.includes("closing open session")||n.includes("prekey bundle"))&&!s.prekeyDetected&&(s.prekeyDetected=true,r.spinner.warn(" Prekey bundle error detected"),t?.forceRecovery(),setTimeout(()=>{s.prekeyDetected=false;},6e4)),e.apply(console,o)};}ready(){return this._ready}db(e){return r.lowdb(this.options.session,`stores/${e}.json`)}on(e,t){r.events.on(e,t);}use(e){return this.middleware.use(e),this}get socket(){return r.get("socket")}async getMessageByChatId(e){let s=(await this.db("messages").all())?.flat()?.filter(o=>typeof o=="object")?.flat()?.find(o=>o?.key?.id===e);return await this.listener.messages.parse(s)}async getRoomName(e){let t=await this.db("chats").get(e),s=await this.db("contacts").get(e),o=A(t,["name","verifiedName"]),n=A(s,["notify","name"]);return R(o||n)||null}async getLabelName(e){let t=await this.db("messages").get(e),s=A(t,["message.protocolMessage.memberLabel"]);return R(s?.label)||null}};
14
14
  /*
15
15
  * Copyright (c) 2025 zaadevofc.
16
16
  * All rights reserved.
@@ -18,7 +18,7 @@ by ${de.author} \xB7 v${de.version}`,o=`${e?"Already using latest version!":`Upd
18
18
  * See LICENSE file for details.
19
19
 
20
20
  * Author: zaadevofc
21
- * Last build time: 12/15/2025 2:15:09 PM
21
+ * Last build time: 12/15/2025 10:28:53 PM
22
22
  *
23
23
  * Repository: git+https://github.com/zeative/zaileys.git
24
- */exports.AudioProcessor=re;exports.BaseMessagesType=Ft;exports.ButtonInteractiveCallType=xs;exports.ButtonInteractiveCopyType=bs;exports.ButtonInteractiveReplyType=vs;exports.ButtonInteractiveSingleSelectType=Ss;exports.ButtonInteractiveType=Ts;exports.ButtonInteractiveUrlType=Ms;exports.ButtonSimpleType=Cs;exports.ButtonType=Pt;exports.CitationType=$s;exports.Client=Bt;exports.ClientAuthPairingType=Us;exports.ClientAuthQRType=qs;exports.ClientBaseType=Ot;exports.ClientOptionsType=Lt;exports.DEVICE_ENUM_TYPES=Js;exports.DocumentProcessor=le;exports.EventEnumType=kr;exports.FakeReplyType=js;exports.ImageProcessor=ae;exports.LimiterType=_s;exports.ListenerCallsType=Er;exports.ListenerConnectionType=br;exports.ListenerMessagesType=Ar;exports.Lowdb=Ge;exports.MESSAGE_ENUM_TYPES=Gs;exports.MediaProcessor=te;exports.Plugins=Pe;exports.SessionWatchdog=Ue;exports.StickerMetadataType=zs;exports.StickerProcessor=ce;exports.VideoProcessor=N;exports.cleanJid=D;exports.cleanMediaObject=lt;exports.cleanupSocket=ft;exports.createLowdb=H;exports.createWatchdog=yt;exports.definePlugins=Qr;exports.extractJids=Fe;exports.extractUrls=rt;exports.findGlobalWord=Q;exports.findNestedByKeys=at;exports.generateId=j;exports.getDeepContent=ie;exports.getExistingSocket=gt;exports.getLatestLibVersion=nt;exports.getMediaThumbnail=ze;exports.getUsersMentions=ct;exports.getVideoDuration=On;exports.getVideoThumbnail=Nn;exports.getWaAudio=pt;exports.getWaDocument=mt;exports.getWaSticker=ut;exports.getWatchdog=qn;exports.ignoreLint=h;exports.logColor=M;exports.modifyFn=dn;exports.normalizeText=R;exports.numbersToJids=wn;exports.pickKeysFromArray=A;exports.randomize=mn;exports.registerAuthCreds=St;exports.removeAuthCreds=ot;exports.repairSessionKeys=ue;exports.shuffleString=un;exports.toBuffer=pe;exports.toJson=Le;exports.toString=Z;exports.useAuthState=bt;
24
+ */exports.AudioProcessor=re;exports.BaseMessagesType=Bt;exports.ButtonInteractiveCallType=Ms;exports.ButtonInteractiveCopyType=bs;exports.ButtonInteractiveReplyType=ws;exports.ButtonInteractiveSingleSelectType=xs;exports.ButtonInteractiveType=Ss;exports.ButtonInteractiveUrlType=vs;exports.ButtonSimpleType=Ts;exports.ButtonType=Et;exports.CitationType=_s;exports.Client=_t;exports.ClientAuthPairingType=zs;exports.ClientAuthQRType=Us;exports.ClientBaseType=Ot;exports.ClientOptionsType=Lt;exports.DEVICE_ENUM_TYPES=Vs;exports.DocumentProcessor=le;exports.EventEnumType=gr;exports.FakeReplyType=$s;exports.ImageProcessor=ae;exports.LimiterType=Bs;exports.ListenerCallsType=Ir;exports.ListenerConnectionType=wr;exports.ListenerMessagesType=Sr;exports.Lowdb=Ge;exports.MESSAGE_ENUM_TYPES=Js;exports.MediaProcessor=te;exports.Plugins=Pe;exports.SessionWatchdog=Ue;exports.StickerMetadataType=js;exports.StickerProcessor=ce;exports.VideoProcessor=N;exports.cleanJid=D;exports.cleanMediaObject=lt;exports.cleanupSocket=gt;exports.configureFFmpeg=pt;exports.createLowdb=H;exports.createWatchdog=ht;exports.definePlugins=Kr;exports.extractJids=Le;exports.extractUrls=rt;exports.findGlobalWord=Q;exports.findNestedByKeys=at;exports.generateId=j;exports.getDeepContent=ie;exports.getExistingSocket=yt;exports.getLatestLibVersion=nt;exports.getMediaThumbnail=ze;exports.getUsersMentions=ct;exports.getVideoDuration=Wn;exports.getVideoThumbnail=En;exports.getWaAudio=ut;exports.getWaDocument=dt;exports.getWaSticker=mt;exports.getWatchdog=jn;exports.ignoreLint=h;exports.logColor=b;exports.modifyFn=mn;exports.normalizeText=R;exports.numbersToJids=kn;exports.pickKeysFromArray=A;exports.randomize=un;exports.registerAuthCreds=Tt;exports.removeAuthCreds=ot;exports.repairSessionKeys=ue;exports.shuffleString=pn;exports.toBuffer=pe;exports.toJson=Oe;exports.toString=Z;exports.useAuthState=xt;
package/dist/index.mjs CHANGED
@@ -1,16 +1,16 @@
1
- import us,{URL_REGEX,extractMessageContent,getContentType,BufferJSON,initAuthCreds,proto,makeCacheableSignalKeyStore,generateWAMessageFromContent,generateMessageIDV2,isJidGroup,delay,DisconnectReason,jidNormalizedUser,getDevice,downloadMediaMessage}from'baileys';import _e,{readFile,mkdir,writeFile,unlink,readdir,rmdir,stat}from'fs/promises';import {Mutex}from'async-mutex';import*as ze from'path';import ze__default,{dirname,join}from'path';import {createSpinner}from'nanospinner';import He from'node-cache';import {EventEmitter}from'events';import Ut from'pino';import rt,{cristal}from'gradient-string';import x from'lodash';import {fileTypeFromBuffer}from'file-type';import ee from'fluent-ffmpeg';import Kt from'node-webpmux';import {tmpdir}from'os';import je from'sharp';import Zt from'@ffmpeg-installer/ffmpeg';import Qt from'@ffprobe-installer/ffprobe';import*as $ from'fs';import {promises}from'fs';import ds from'figlet';import gs from'qrcode-terminal';import {RateLimiterMemory}from'rate-limiter-flexible';import u,{z as z$1}from'zod';import Js from'stream';import {pathToFileURL}from'url';var Le=class{data=new Map;cache=new Map;set(e,t){this.data.set(e,{...this.data.get(e),...t});}get(e){return this.data.get(e)||{}}update(e,t){let s=this.get(e);this.set(e,t(s));}delete(e){this.data.delete(e);}has(e){return this.data.has(e)}lowdb(e,t){let s=`.session/${e}/${t}`;if(this.cache.has(s))return this.cache.get(s);let o=Z(s);return this.cache.set(s,o),o}spinner=createSpinner("",{color:"green"});logger=Ut({level:"silent",enabled:false});events=new EventEmitter;groupCache=new He({stdTTL:300,useClones:false});collectors=new Map},r=new Le;var k=a=>a,ot=async()=>{try{return (await(await fetch("https://registry.npmjs.org/zaileys")).json())["dist-tags"].latest}catch(a){throw a}},it=async a=>{try{let e=`.session/${a}/auth/creds.json`;await _e.unlink(e);}catch(e){throw r.spinner.error(`Failed to remove auth creds for session "${a}"!`),e}},P=(a="")=>a?.length?a.normalize("NFKD").replace(/[\u0000-\u001F\u007F-\u009F\u200B-\u200F\u2028-\u202F\u2060-\u206F\uFEFF\uFFF9-\uFFFB]/gu,"").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u20D0-\u20FF\uFE20-\uFE2F]/gu,"").replace(/[\u202A-\u202E\u2066-\u2069]/gu,"").replace(/\u202E([\s\S]*?)\u202C?/gu,(t,s)=>[...s].reverse().join("")):null;var b=(a,e="lime")=>Array.isArray(e)?rt(e)(a):rt([e,e])(a),Fe=a=>{try{return JSON.parse(a)}catch{return x.attempt(()=>JSON.parse(JSON.stringify(a)||"{}"))}},Q=a=>{try{return JSON.stringify(a)}catch{let e=x.attempt(()=>JSON.stringify(Fe(a)||"{}"));return x.isError(e)?"{}":e}},mn=(a="")=>x.shuffle(a).join(""),Y=(a="",e="")=>a?x.includes(a.toLowerCase(),e.toLowerCase()):null,at=(a="")=>a?x.castArray(a.match(URL_REGEX)||[]):[],dn=a=>a[Math.floor(Math.random()*a.length)],I=(a,e)=>{let t=(s,o)=>{if(!s||typeof s!="object")return;let n=s;for(let i of o.split("."))if(n=n?.[i],n==null)return;return n};for(let s of a||[])if(s&&typeof s=="object")for(let o of e){let n=t(s,o);if(n!=null)return n}},ct=(a,e)=>{let t=x.castArray(e),s=(i,c)=>x.every(c,(l,p)=>i?.[p]===l),o=(i,c)=>x.some(c,(l,p)=>i?.[p]===l),n=i=>x.isArray(i)?x.find(i,n)??i:x.isObject(i)?x.find(t,p=>s(i,p))||x.find(t,p=>o(i,p))?i:x.find(x.values(i),n)??i:null;return n(a)},fn=(a,e,t)=>new Proxy(a,{apply(s,o,n){e?.(n);let i=Reflect.apply(s,o,n);return t?t(i,n):i}});var z=a=>{let e;Array.isArray(a)?e=a.join("|"):typeof a=="string"?e=a:e=String(a);let t=2166136261,s=e.length;for(let o=0;o<s;o++)t^=e.charCodeAt(o),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return "Z4D3FC"+(t>>>0).toString(16).padStart(8,"0").toUpperCase()},lt=(a="")=>{if(!a)return [];let e=new Set;for(let t of a.matchAll(/@(\d+)/g))e.add(t[1]);return x.toArray(e)},Be=(a="")=>{if(!a)return [];let e=new Set;for(let t of a.matchAll(/@(\d+)/g))t[1].length<=15&&e.add(t[1]);return x.flatMap([...e],t=>[`${t}@s.whatsapp.net`,`${t}@g.us`,`${t}@lid`])},vn=a=>x.isEmpty(a)?[]:x.map([...a],e=>`${e}@s.whatsapp.net`),pt=a=>x.omit(a,["url","contextInfo","fileSha256","fileEncSha256","mediaKey","directPath","waveform","thumbnail","jpegThumbnail","thumbnailEncSha256","thumbnailSha256","thumbnailDirectPath","firstFrameSidecar","streamingSidecar","scansSidecar","callKey","message","key","midQualityFileSha256","historySyncNotification","appStateSyncKeyShare","appStateSyncKeyRequest","initialSecurityNotificationSettingSync","appStateFatalExceptionNotification","disappearingMode","peerDataOperationRequestMessage","peerDataOperationRequestResponseMessage","botFeedbackMessage"]),re=a=>{if(!a)return {leaf:void 0,chain:[]};let e=extractMessageContent(a)||a,t=[];for(;e&&typeof e=="object";){let s=getContentType(e);if(!s)break;t.push(s);let o=e[s];if(!o||typeof o!="object"){e=o;break}e=o;}return {leaf:e,chain:t}},N=a=>Number(a?.split("@")[0]);ee.setFfmpegPath(Zt.path);ee.setFfprobePath(Qt.path);var w={OPUS:{CODEC:"libopus",CHANNELS:1,FREQUENCY:48e3,BITRATE:"48k",FORMAT:"ogg"},THUMBNAIL:{SIZE:100,QUALITY:50,TIMESTAMP:"10%"},STICKER:{SIZE:512,MAX_DURATION:10,FPS:15,DEFAULT_QUALITY:80,COMPRESSION_LEVEL:6},MIME:{AUDIO:"audio/",VIDEO:"video/",IMAGE:"image/",GIF:"image/gif",MP4:"video/mp4"}},M=class{static generateUniqueId(){return `${Date.now()}_${Math.random().toString(36).slice(2,11)}`}static createTempPath(e,t){return ze__default.join(tmpdir(),`${e}_${this.generateUniqueId()}.${t}`)}static async cleanup(e){await Promise.allSettled(e.map(t=>_e.unlink(t)));}static async safeReadFile(e){try{return await _e.readFile(e)}catch{throw new Error(`Failed to read file: ${e}`)}}static async safeWriteFile(e,t){try{await _e.writeFile(e,t);}catch{throw new Error(`Failed to write file: ${e}`)}}},E=class{static async toBuffer(e){if(x.isBuffer(e))return e;if(x.isArrayBuffer(e))return Buffer.from(e);if(x.isString(e))return this.fromString(e);throw new Error("Invalid input type: expected string, Buffer, or ArrayBuffer")}static async fromString(e){return e.startsWith("http://")||e.startsWith("https://")?this.fromUrl(e):Buffer.from(e,"base64")}static async fromUrl(e){try{let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);let s=await t.arrayBuffer();return Buffer.from(s)}catch(t){throw new Error(`Failed to fetch URL: ${t.message}`)}}},U=class{static validate(e,t){if(!e?.mime?.startsWith(t))throw new Error(`Invalid file type: expected ${t}*, got ${e?.mime||"unknown"}`)}static isMedia(e){return e.startsWith(w.MIME.IMAGE)||e.startsWith(w.MIME.VIDEO)}static isAnimated(e){return e===w.MIME.GIF||e.startsWith(w.MIME.VIDEO)}},te=class{static async process(e){return new Promise((t,s)=>{let o=ee(e.input).output(e.output);for(let n=0;n<e.options.length;n++){let i=e.options[n];i.startsWith("-")&&n+1<e.options.length&&!e.options[n+1].startsWith("-")?(o.outputOptions(i,e.options[n+1]),n++):o.outputOptions(i);}o.on("end",async()=>{try{await e.onEnd(),t();}catch(n){s(n);}}).on("error",async n=>{try{await e.onError(n);}finally{s(n);}}).run();})}static async getDuration(e){return new Promise((t,s)=>{ee.ffprobe(e,(o,n)=>{if(o)return s(o);t(n.format.duration||0);});})}},ae=class{static async getWaAudio(e,t="opus"){let s=await E.toBuffer(e),o=await fileTypeFromBuffer(s);U.validate(o,w.MIME.AUDIO);let n=M.createTempPath("audio_in","wav"),i=t==="opus"?"ogg":"mp3",c=M.createTempPath("audio_out",i);await M.safeWriteFile(n,s);let l;try{let p=t==="opus"?["-vn","-c:a","libopus","-b:a","48k","-ac","1","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","opus"]:["-vn","-c:a","libmp3lame","-b:a","128k","-ac","2","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","mp3"];return await te.process({input:n,output:c,options:p,onEnd:async()=>{l=await M.safeReadFile(c);},onError:async()=>{await M.cleanup([n,c]);}}),await M.cleanup([n,c]),l}catch(p){throw await M.cleanup([n,c]),new Error(`${t.toUpperCase()} conversion failed: ${p.message}`)}}},O=class{static async getThumbnail(e){let t=await E.toBuffer(e),s=await fileTypeFromBuffer(t);U.validate(s,w.MIME.VIDEO);let o=M.createTempPath("video","mp4"),n=M.createTempPath("thumb","jpg");await M.safeWriteFile(o,t);let i;try{return await new Promise((c,l)=>{ee(o).screenshots({timestamps:[w.THUMBNAIL.TIMESTAMP],filename:ze__default.basename(n),folder:ze__default.dirname(n),size:`${w.THUMBNAIL.SIZE}x${w.THUMBNAIL.SIZE}`,quality:w.THUMBNAIL.QUALITY}).on("end",async()=>{try{i=(await M.safeReadFile(n)).toString("base64"),c();}catch(p){l(p);}}).on("error",l);}),await M.cleanup([o,n]),i}catch(c){throw await M.cleanup([o,n]),new Error(`Thumbnail generation failed: ${c.message}`)}}static async getDuration(e){return te.getDuration(e)}},ce=class{static async getThumbnail(e){return (await((await fileTypeFromBuffer(e)).mime===w.MIME.GIF?je(e,{animated:false}):je(e)).resize(w.THUMBNAIL.SIZE,w.THUMBNAIL.SIZE,{fit:"cover"}).jpeg({quality:w.THUMBNAIL.QUALITY}).toBuffer()).toString("base64")}static async resizeForSticker(e,t){return je(e).resize(w.STICKER.SIZE,w.STICKER.SIZE,{fit:"cover",background:{r:0,g:0,b:0,alpha:0}}).webp({quality:t}).toBuffer()}},se=class{static async getThumbnail(e){let t=await E.toBuffer(e),s=await fileTypeFromBuffer(t);if(!s||!U.isMedia(s.mime))throw new Error("Invalid media type: expected image or video");return s.mime.startsWith(w.MIME.VIDEO)?O.getThumbnail(e):ce.getThumbnail(t)}},le=class{static createExifMetadata(e){let t={"sticker-pack-id":z(Date.now().toString()),"sticker-pack-name":e?.packageName||"Zaileys Library","sticker-pack-publisher":e?.authorName||"https://github.com/zeative/zaileys",emojis:["\u{1F913}"],"android-app-store-link":"https://play.google.com/store/apps/details?id=com.marsvard.stickermakerforwhatsapp","ios-app-store-link":"https://itunes.apple.com/app/sticker-maker-studio/id1443326857"},s=Buffer.from([73,73,42,0,8,0,0,0,1,0,65,87,7,0,0,0,0,0,22,0,0,0]),o=Buffer.from(JSON.stringify(t),"utf8"),n=Buffer.concat([s,o]);return n.writeUIntLE(o.length,14,4),n}static async processAnimated(e,t,s){let o=this.getExtension(t),n=M.createTempPath("sticker_in",o),i=M.createTempPath("sticker_out","webp");await M.safeWriteFile(n,e);let c=w.STICKER.MAX_DURATION;try{let T=await O.getDuration(n);c=k(Math.min(T,w.STICKER.MAX_DURATION));}catch{console.warn("Using default duration:",w.STICKER.MAX_DURATION);}let l=`scale=${w.STICKER.SIZE}:${w.STICKER.SIZE}:force_original_aspect_ratio=increase,crop=${w.STICKER.SIZE}:${w.STICKER.SIZE},fps=${w.STICKER.FPS},format=rgba`,p=Math.max(1,Math.min(100,100-s)),h;try{return await te.process({input:n,output:i,options:["-vcodec libwebp",`-vf ${l}`,`-q:v ${p}`,"-loop 0","-preset default","-an","-vsync 0",`-t ${c}`,`-compression_level ${w.STICKER.COMPRESSION_LEVEL}`],onEnd:async()=>{h=await M.safeReadFile(i);},onError:async()=>{await M.cleanup([n,i]);}}),await M.cleanup([n,i]),h}catch(T){throw await M.cleanup([n,i]),new Error(`Animated sticker processing failed: ${T.message}`)}}static getExtension(e){return e===w.MIME.GIF?"gif":e.startsWith(w.MIME.VIDEO)?"mp4":"tmp"}static async create(e,t){try{let s=await E.toBuffer(e),o=await fileTypeFromBuffer(s);if(!o)throw new Error("Unable to detect file type");let n=t?.quality||w.STICKER.DEFAULT_QUALITY,c=U.isAnimated(o.mime)?await this.processAnimated(s,o.mime,n):await ce.resizeForSticker(s,n),l=this.createExifMetadata(t),p=new Kt.Image;await p.load(c),p.exif=l;let h=await p.save(null);return Buffer.isBuffer(h)?h:Buffer.from(h)}catch(s){throw new Error(`Sticker creation failed: ${s.message||s}`)}}},pe=class{static async create(e){try{let t=await E.toBuffer(e),s=await fileTypeFromBuffer(t);if(!s)throw new Error("Unable to detect file type");return {document:t,mimetype:s.mime,fileName:z(Date.now().toString()),jpegThumbnail:await se.getThumbnail(t)}}catch(t){throw new Error(`Document creation failed: ${t.message||t}`)}}},ue=E.toBuffer.bind(E),ut=ae.getWaAudio.bind(ae),On=O.getThumbnail.bind(O),Ln=O.getDuration.bind(O),Ue=se.getThumbnail.bind(se),mt=le.create.bind(le),dt=pe.create.bind(pe);var gt=a=>{if(a)try{a.ev?.removeAllListeners(),a.end?.(new Error("Cleanup"));}catch{}},me=async a=>{let e=`.session/${a}/auth/keys.json`;try{let t=await promises.readFile(e,"utf-8"),s=JSON.parse(t),o=["sender-key:","session:"],n={},i=!1;for(let[c,l]of Object.entries(s))o.some(h=>c.startsWith(h))?i=!0:n[c]=l;i&&(await promises.writeFile(e,JSON.stringify(n,null,2)),r.spinner.success(" Session keys repaired successfully"));}catch{r.spinner.warn(" Could not repair session keys, will re-negotiate");}},yt=()=>{let a=r.get("socket");return a?.end?a:null};var Yt=6e4,Xt=12e4,es=6e4,ts=3,qe=class{lastActivityTime=Date.now();lastRecoveryTime=0;checkInterval=null;isRecovering=false;retryCount=0;options;constructor(e){this.options={checkIntervalMs:Yt,staleThresholdMs:Xt,cooldownMs:es,maxRetries:ts,onRecovery:async()=>{},...e};}start(){this.checkInterval||(this.lastActivityTime=Date.now(),this.setupActivityListeners(),this.checkInterval=setInterval(()=>this.check(),this.options.checkIntervalMs),r.spinner.success(" Session watchdog started"));}stop(){this.checkInterval&&(clearInterval(this.checkInterval),this.checkInterval=null);}touch(){this.lastActivityTime=Date.now(),this.retryCount=0;}setupActivityListeners(){let e=r.get("socket");if(!e?.ev)return;let t=["messages.upsert","message-receipt.update","presence.update","chats.update"];for(let s of t)e.ev.on(s,()=>this.touch());}async check(){if(this.isRecovering)return;Date.now()-this.lastActivityTime>this.options.staleThresholdMs&&await this.recover();}isInCooldown(){return Date.now()-this.lastRecoveryTime<this.options.cooldownMs}async recover(){if(!this.isRecovering){if(this.isInCooldown()){r.spinner.warn(" Recovery in cooldown, skipping...");return}if(this.retryCount>=this.options.maxRetries){r.spinner.error(` Max recovery retries (${this.options.maxRetries}) reached. Manual restart required.`);return}this.isRecovering=true,this.lastRecoveryTime=Date.now(),this.retryCount++;try{r.spinner.warn(` Session recovery attempt ${this.retryCount}/${this.options.maxRetries}...`);let e=r.get("socket");if(e?.ws?.readyState===1)try{await e.fetchStatus(e.user?.id||""),this.touch(),r.spinner.success(" Session health check passed");return}catch{}await me(this.options.session),r.spinner.warn(" Forcing reconnection..."),await this.options.onRecovery(),this.touch();}catch{r.spinner.error(" Recovery failed");}finally{this.isRecovering=false;}}}async forceRecovery(){if(this.isInCooldown()){r.spinner.warn(" Recovery blocked by cooldown");return}await this.recover();}},ne=null,ht=a=>(ne&&ne.stop(),ne=new qe(a),ne),Vn=()=>ne;var Ge=class a{static inst;fLocks=new Map;kLocks=new Map;maxSize=100;static get(){return this.inst||(this.inst=new a)}getFile(e){let t=this.fLocks.get(e);if(!t){if(this.fLocks.size>=this.maxSize){let s=this.fLocks.keys().next().value;this.fLocks.delete(s);}t=new Mutex,this.fLocks.set(e,t);}return t}getKey(e){let t=this.kLocks.get(e);if(!t){if(this.kLocks.size>=this.maxSize){let s=this.kLocks.keys().next().value;this.kLocks.delete(s);}t=new Mutex,this.kLocks.set(e,t);}return t}},Ke=class{data;path;pool;size;chunkDir;replacer;reviver;loaded=false;flushMode;debounceMs;flushTimer=null;dirty=false;constructor(e,t,s=2*1024*1024,o="debounce",n=200){this.data=new Map,this.path=e,this.pool=Ge.get(),this.size=s,this.chunkDir=`${e}.c`,this.replacer=t?.replacer||null,this.reviver=t?.reviver||null,this.flushMode=o,this.debounceMs=n;}async ensureLoaded(){this.loaded||(await this.read(),this.loaded=true);}scheduleFlush(){if(this.flushMode!=="manual"){if(this.flushMode==="sync"){this.write();return}this.dirty=true,!this.flushTimer&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.dirty&&(this.dirty=false,this.write());},this.debounceMs));}}async read(){return this.pool.getFile(this.path).runExclusive(async()=>{try{let t=await readFile(this.path,"utf-8"),s=JSON.parse(t,this.reviver);this.data.clear();let o=[];for(let[n,i]of Object.entries(s))this.isMeta(i)?o.push(this.loadChunk(n,i)):this.data.set(n,i);return await Promise.all(o),this.loaded=!0,this.data}catch{return await mkdir(dirname(this.path),{recursive:true}),this.data.clear(),this.loaded=true,this.data}})}async write(){return this.pool.getFile(this.path).runExclusive(async()=>{let t={},s=[];for(let[n,i]of this.data){if(this.isMeta(i)){t[n]=i;continue}JSON.stringify(i,this.replacer).length>this.size?s.push(this.saveChunk(n,i).then(l=>{t[n]=l;})):t[n]=i;}await Promise.all(s);let o=JSON.stringify(t,this.replacer,2);await writeFile(this.path,o,"utf-8");})}async set(e,t){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{this.data.set(e,t),this.scheduleFlush();});}async push(e,t){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{let o=this.data.get(e),n;Array.isArray(o)?n=o:o===void 0?n=[]:n=[o],n.push(t),this.data.set(e,n),this.scheduleFlush();});}async upsert(e,t,s="key.id"){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{let n=this.data.get(e),i;Array.isArray(n)?i=n:n===void 0?i=[]:i=[n];let c=x.get(t,s);if(c){let l=i.findIndex(p=>x.get(p,s)===c);l>=0?i[l]=t:i.push(t);}else i.push(t);this.data.set(e,i),this.scheduleFlush();});}async get(e){if(await this.ensureLoaded(),typeof e=="string")return this.data.get(e);let t=Array.from(this.data.values()).flat();return ct(t,e)}async all(){return await this.ensureLoaded(),Array.from(this.data.entries())}async delete(e){return await this.ensureLoaded(),this.pool.getKey(e).runExclusive(async()=>{let s=this.data.get(e);this.isMeta(s)&&await this.delChunk(e,s);let o=this.data.delete(e);return this.scheduleFlush(),o})}async saveChunk(e,t){let s=JSON.stringify(t,this.replacer),o=Buffer.from(s,"utf-8"),n=Math.ceil(o.length/this.size);await mkdir(this.chunkDir,{recursive:true});let i={v:1,k:e,t:n,s:this.size,c:o.length,m:Date.now().toString(36)},c=[];for(let l=0;l<n;l++){let p=l*this.size,h=Math.min(p+this.size,o.length),T=o.subarray(p,h);c.push(writeFile(join(this.chunkDir,`${e}.${l}.json`),JSON.stringify({i:l,d:T.toString("base64")})));}return c.push(writeFile(join(this.chunkDir,`${e}.manifest.json`),JSON.stringify(i))),await Promise.all(c),{t:n,s:this.size,k:e}}async loadChunk(e,t){let s=join(this.chunkDir,`${e}.manifest.json`),o=JSON.parse(await readFile(s,"utf-8")),n=[];for(let p=0;p<o.t;p++)n.push(readFile(join(this.chunkDir,`${e}.${p}.json`),"utf-8").then(h=>Buffer.from(JSON.parse(h).d,"base64")));let i=await Promise.all(n),c=Buffer.concat(i),l=JSON.parse(c.toString("utf-8"),this.reviver);this.data.set(e,l);}async delChunk(e,t){let s=[];for(let o=0;o<t.t;o++)s.push(unlink(join(this.chunkDir,`${e}.${o}.json`)).catch(()=>{}));s.push(unlink(join(this.chunkDir,`${e}.manifest.json`)).catch(()=>{})),await Promise.all(s);try{(await readdir(this.chunkDir)).length===0&&await rmdir(this.chunkDir);}catch{}}isMeta(e){return e?.t&&e?.s&&e?.k}},Z=(a,e)=>new Ke(a,e?.BufferJSON,e?.size,e?.flushMode,e?.debounceMs);var xt=async a=>{r.spinner.start(" Initializing auth state...");let e=await stat(a).catch(()=>{});if(e){if(!e.isDirectory())throw r.spinner.error(` Failed to open credentials
2
- `),`found something that is not a directory at ${a}, either delete it or specify a different location`}else await mkdir(a,{recursive:true});let t=Z(`${a}/auth/creds.json`,{BufferJSON:BufferJSON}),s=Z(`${a}/auth/keys.json`,{BufferJSON:BufferJSON,size:512*1024});await Promise.all([t.read(),s.read()]);let o=await t.get("creds")||initAuthCreds();return r.spinner.success(" Generate auth successfully"),{state:{creds:o,keys:{get:async(n,i)=>{let c={};return await Promise.all(i.map(async l=>{let p=`${n}:${l}`,h=await s.get(p);n==="app-state-sync-key"&&h&&(h=proto.Message.AppStateSyncKeyData.fromObject(h)),c[l]=h;})),c},set:async n=>{let i=[];for(let c in n)for(let l in n[c]){let p=n[c][l],h=`${c}:${l}`;p?i.push(s.set(h,p)):i.push(s.delete(h).then(()=>{}));}await Promise.all(i),await s.write();}}},saveCreds:async()=>{await t.set("creds",o),await t.write();}}};var ps=new He,St=(a,e)=>({logger:r.logger,printQRInTerminal:false,defaultQueryTimeoutMs:void 0,markOnlineOnConnect:a.options.autoOnline,syncFullHistory:a.options.syncFullHistory,msgRetryCounterCache:new He,mediaCache:new He({stdTTL:60}),cachedGroupMetadata:async t=>ps.get(t),auth:{creds:e.creds,keys:makeCacheableSignalKeyStore(e.keys,r.logger)},getMessage:async t=>t?.remoteJid?(await a.db("messages").get(t.remoteJid))?.find(n=>n?.key?.id===t.id):void 0});var Tt=async a=>{let e=yt();e&&gt(e);let t=`.session/${a.options.session}`;console.info=()=>{};let{state:s,saveCreds:o}=await xt(t),n=St(a,s),i=us(n);i.ev.on("creds.update",o),r.set("socket",i);};var de=class{constructor(e){this.client=e;this.initialize();}async initialize(){let e=r.get("socket");e.ev.on("call",async t=>{for(let s of t){let o=await this.parse(s);o&&(await this.client.middleware.run({calls:o}),await this.client.plugins.execute(this.client,{messages:o}),r.events.emit("calls",o),this.client.options?.autoRejectCall&&await e.rejectCall(o.callId,o.callerId));}});}async parse(e){let t=r.get("socket"),s={};return s.callId=e.id,s.callerId=jidNormalizedUser(e.from),s.callerName=await this.client.getRoomName(s.callerId),s.roomId=jidNormalizedUser(e.chatId),s.roomName=P(t?.user?.name||t?.user?.verifiedName),s.date=e.date,s.offline=e.offline,s.status=e.status,s.isVideo=!!e.isVideo,s.isGroup=!!e.isGroup,this.client.logs.call(s),s}};var fe={version:"2.0.13",author:"zaadevofc"};var At=a=>{gs.generate(a,{small:true},e=>{console.log(e);});},It=async()=>{console.clear(),r.spinner.start(" Checking for updates...");let a=await ot(),e=fe.version===a;r.spinner.stop();let t="Zaileys",s=`
1
+ import ps,{URL_REGEX,extractMessageContent,getContentType,BufferJSON,initAuthCreds,proto,makeCacheableSignalKeyStore,generateWAMessageFromContent,generateMessageIDV2,isJidGroup,delay,DisconnectReason,jidNormalizedUser,getDevice,downloadMediaMessage}from'baileys';import _e,{readFile,mkdir,writeFile,unlink,readdir,rmdir,stat}from'fs/promises';import {Mutex}from'async-mutex';import*as ze from'path';import ze__default,{dirname,join}from'path';import {createSpinner}from'nanospinner';import He from'node-cache';import {EventEmitter}from'events';import qt from'pino';import rt,{cristal}from'gradient-string';import x from'lodash';import {fileTypeFromBuffer}from'file-type';import ee from'fluent-ffmpeg';import Ht from'node-webpmux';import {tmpdir}from'os';import je from'sharp';import*as $ from'fs';import {promises}from'fs';import ms from'figlet';import fs from'qrcode-terminal';import {RateLimiterMemory}from'rate-limiter-flexible';import u,{z as z$1}from'zod';import Vs from'stream';import {pathToFileURL}from'url';var Oe=class{data=new Map;cache=new Map;set(e,t){this.data.set(e,{...this.data.get(e),...t});}get(e){return this.data.get(e)||{}}update(e,t){let s=this.get(e);this.set(e,t(s));}delete(e){this.data.delete(e);}has(e){return this.data.has(e)}lowdb(e,t){let s=`.session/${e}/${t}`;if(this.cache.has(s))return this.cache.get(s);let o=Z(s);return this.cache.set(s,o),o}spinner=createSpinner("",{color:"green"});logger=qt({level:"silent",enabled:false});events=new EventEmitter;groupCache=new He({stdTTL:300,useClones:false});collectors=new Map},r=new Oe;var k=a=>a,ot=async()=>{try{return (await(await fetch("https://registry.npmjs.org/zaileys")).json())["dist-tags"].latest}catch(a){throw a}},it=async a=>{try{let e=`.session/${a}/auth/creds.json`;await _e.unlink(e);}catch(e){throw r.spinner.error(`Failed to remove auth creds for session "${a}"!`),e}},P=(a="")=>a?.length?a.normalize("NFKD").replace(/[\u0000-\u001F\u007F-\u009F\u200B-\u200F\u2028-\u202F\u2060-\u206F\uFEFF\uFFF9-\uFFFB]/gu,"").replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1-\u05C2\u05C4-\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u20D0-\u20FF\uFE20-\uFE2F]/gu,"").replace(/[\u202A-\u202E\u2066-\u2069]/gu,"").replace(/\u202E([\s\S]*?)\u202C?/gu,(t,s)=>[...s].reverse().join("")):null;var M=(a,e="lime")=>Array.isArray(e)?rt(e)(a):rt([e,e])(a),Le=a=>{try{return JSON.parse(a)}catch{return x.attempt(()=>JSON.parse(JSON.stringify(a)||"{}"))}},Q=a=>{try{return JSON.stringify(a)}catch{let e=x.attempt(()=>JSON.stringify(Le(a)||"{}"));return x.isError(e)?"{}":e}},un=(a="")=>x.shuffle(a).join(""),Y=(a="",e="")=>a?x.includes(a.toLowerCase(),e.toLowerCase()):null,at=(a="")=>a?x.castArray(a.match(URL_REGEX)||[]):[],mn=a=>a[Math.floor(Math.random()*a.length)],I=(a,e)=>{let t=(s,o)=>{if(!s||typeof s!="object")return;let n=s;for(let i of o.split("."))if(n=n?.[i],n==null)return;return n};for(let s of a||[])if(s&&typeof s=="object")for(let o of e){let n=t(s,o);if(n!=null)return n}},ct=(a,e)=>{let t=x.castArray(e),s=(i,c)=>x.every(c,(l,p)=>i?.[p]===l),o=(i,c)=>x.some(c,(l,p)=>i?.[p]===l),n=i=>x.isArray(i)?x.find(i,n)??i:x.isObject(i)?x.find(t,p=>s(i,p))||x.find(t,p=>o(i,p))?i:x.find(x.values(i),n)??i:null;return n(a)},dn=(a,e,t)=>new Proxy(a,{apply(s,o,n){e?.(n);let i=Reflect.apply(s,o,n);return t?t(i,n):i}});var z=a=>{let e;Array.isArray(a)?e=a.join("|"):typeof a=="string"?e=a:e=String(a);let t=2166136261,s=e.length;for(let o=0;o<s;o++)t^=e.charCodeAt(o),t+=(t<<1)+(t<<4)+(t<<7)+(t<<8)+(t<<24);return "Z4D3FC"+(t>>>0).toString(16).padStart(8,"0").toUpperCase()},lt=(a="")=>{if(!a)return [];let e=new Set;for(let t of a.matchAll(/@(\d+)/g))e.add(t[1]);return x.toArray(e)},Be=(a="")=>{if(!a)return [];let e=new Set;for(let t of a.matchAll(/@(\d+)/g))t[1].length<=15&&e.add(t[1]);return x.flatMap([...e],t=>[`${t}@s.whatsapp.net`,`${t}@g.us`,`${t}@lid`])},wn=a=>x.isEmpty(a)?[]:x.map([...a],e=>`${e}@s.whatsapp.net`),pt=a=>x.omit(a,["url","contextInfo","fileSha256","fileEncSha256","mediaKey","directPath","waveform","thumbnail","jpegThumbnail","thumbnailEncSha256","thumbnailSha256","thumbnailDirectPath","firstFrameSidecar","streamingSidecar","scansSidecar","callKey","message","key","midQualityFileSha256","historySyncNotification","appStateSyncKeyShare","appStateSyncKeyRequest","initialSecurityNotificationSettingSync","appStateFatalExceptionNotification","disappearingMode","peerDataOperationRequestMessage","peerDataOperationRequestResponseMessage","botFeedbackMessage"]),re=a=>{if(!a)return {leaf:void 0,chain:[]};let e=extractMessageContent(a)||a,t=[];for(;e&&typeof e=="object";){let s=getContentType(e);if(!s)break;t.push(s);let o=e[s];if(!o||typeof o!="object"){e=o;break}e=o;}return {leaf:e,chain:t}},N=a=>Number(a?.split("@")[0]);var ut=async(a=false)=>{if(!a)try{let e=(await import('@ffmpeg-installer/ffmpeg')).default,t=(await import('@ffprobe-installer/ffprobe')).default;ee.setFfmpegPath(e.path),ee.setFfprobePath(t.path);}catch{}},w={OPUS:{CODEC:"libopus",CHANNELS:1,FREQUENCY:48e3,BITRATE:"48k",FORMAT:"ogg"},THUMBNAIL:{SIZE:100,QUALITY:50,TIMESTAMP:"10%"},STICKER:{SIZE:512,MAX_DURATION:10,FPS:15,DEFAULT_QUALITY:80,COMPRESSION_LEVEL:6},MIME:{AUDIO:"audio/",VIDEO:"video/",IMAGE:"image/",GIF:"image/gif",MP4:"video/mp4"}},b=class{static generateUniqueId(){return `${Date.now()}_${Math.random().toString(36).slice(2,11)}`}static createTempPath(e,t){return ze__default.join(tmpdir(),`${e}_${this.generateUniqueId()}.${t}`)}static async cleanup(e){await Promise.allSettled(e.map(t=>_e.unlink(t)));}static async safeReadFile(e){try{return await _e.readFile(e)}catch{throw new Error(`Failed to read file: ${e}`)}}static async safeWriteFile(e,t){try{await _e.writeFile(e,t);}catch{throw new Error(`Failed to write file: ${e}`)}}},E=class{static async toBuffer(e){if(x.isBuffer(e))return e;if(x.isArrayBuffer(e))return Buffer.from(e);if(x.isString(e))return this.fromString(e);throw new Error("Invalid input type: expected string, Buffer, or ArrayBuffer")}static async fromString(e){return e.startsWith("http://")||e.startsWith("https://")?this.fromUrl(e):Buffer.from(e,"base64")}static async fromUrl(e){try{let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);let s=await t.arrayBuffer();return Buffer.from(s)}catch(t){throw new Error(`Failed to fetch URL: ${t.message}`)}}},U=class{static validate(e,t){if(!e?.mime?.startsWith(t))throw new Error(`Invalid file type: expected ${t}*, got ${e?.mime||"unknown"}`)}static isMedia(e){return e.startsWith(w.MIME.IMAGE)||e.startsWith(w.MIME.VIDEO)}static isAnimated(e){return e===w.MIME.GIF||e.startsWith(w.MIME.VIDEO)}},te=class{static async process(e){return new Promise((t,s)=>{let o=ee(e.input).output(e.output);for(let n=0;n<e.options.length;n++){let i=e.options[n];i.startsWith("-")&&n+1<e.options.length&&!e.options[n+1].startsWith("-")?(o.outputOptions(i,e.options[n+1]),n++):o.outputOptions(i);}o.on("end",async()=>{try{await e.onEnd(),t();}catch(n){s(n);}}).on("error",async n=>{try{await e.onError(n);}finally{s(n);}}).run();})}static async getDuration(e){return new Promise((t,s)=>{ee.ffprobe(e,(o,n)=>{if(o)return s(o);t(n.format.duration||0);});})}},ae=class{static async getWaAudio(e,t="opus"){let s=await E.toBuffer(e),o=await fileTypeFromBuffer(s);U.validate(o,w.MIME.AUDIO);let n=b.createTempPath("audio_in","wav"),i=t==="opus"?"ogg":"mp3",c=b.createTempPath("audio_out",i);await b.safeWriteFile(n,s);let l;try{let p=t==="opus"?["-vn","-c:a","libopus","-b:a","48k","-ac","1","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","opus"]:["-vn","-c:a","libmp3lame","-b:a","128k","-ac","2","-avoid_negative_ts","make_zero","-map_metadata","-1","-f","mp3"];return await te.process({input:n,output:c,options:p,onEnd:async()=>{l=await b.safeReadFile(c);},onError:async()=>{await b.cleanup([n,c]);}}),await b.cleanup([n,c]),l}catch(p){throw await b.cleanup([n,c]),new Error(`${t.toUpperCase()} conversion failed: ${p.message}`)}}},F=class{static async getThumbnail(e){let t=await E.toBuffer(e),s=await fileTypeFromBuffer(t);U.validate(s,w.MIME.VIDEO);let o=b.createTempPath("video","mp4"),n=b.createTempPath("thumb","jpg");await b.safeWriteFile(o,t);let i;try{return await new Promise((c,l)=>{ee(o).screenshots({timestamps:[w.THUMBNAIL.TIMESTAMP],filename:ze__default.basename(n),folder:ze__default.dirname(n),size:`${w.THUMBNAIL.SIZE}x${w.THUMBNAIL.SIZE}`,quality:w.THUMBNAIL.QUALITY}).on("end",async()=>{try{i=(await b.safeReadFile(n)).toString("base64"),c();}catch(p){l(p);}}).on("error",l);}),await b.cleanup([o,n]),i}catch(c){throw await b.cleanup([o,n]),new Error(`Thumbnail generation failed: ${c.message}`)}}static async getDuration(e){return te.getDuration(e)}},ce=class{static async getThumbnail(e){return (await((await fileTypeFromBuffer(e)).mime===w.MIME.GIF?je(e,{animated:false}):je(e)).resize(w.THUMBNAIL.SIZE,w.THUMBNAIL.SIZE,{fit:"cover"}).jpeg({quality:w.THUMBNAIL.QUALITY}).toBuffer()).toString("base64")}static async resizeForSticker(e,t){return je(e).resize(w.STICKER.SIZE,w.STICKER.SIZE,{fit:"cover",background:{r:0,g:0,b:0,alpha:0}}).webp({quality:t}).toBuffer()}},se=class{static async getThumbnail(e){let t=await E.toBuffer(e),s=await fileTypeFromBuffer(t);if(!s||!U.isMedia(s.mime))throw new Error("Invalid media type: expected image or video");return s.mime.startsWith(w.MIME.VIDEO)?F.getThumbnail(e):ce.getThumbnail(t)}},le=class{static createExifMetadata(e){let t={"sticker-pack-id":z(Date.now().toString()),"sticker-pack-name":e?.packageName||"Zaileys Library","sticker-pack-publisher":e?.authorName||"https://github.com/zeative/zaileys",emojis:["\u{1F913}"],"android-app-store-link":"https://play.google.com/store/apps/details?id=com.marsvard.stickermakerforwhatsapp","ios-app-store-link":"https://itunes.apple.com/app/sticker-maker-studio/id1443326857"},s=Buffer.from([73,73,42,0,8,0,0,0,1,0,65,87,7,0,0,0,0,0,22,0,0,0]),o=Buffer.from(JSON.stringify(t),"utf8"),n=Buffer.concat([s,o]);return n.writeUIntLE(o.length,14,4),n}static async processAnimated(e,t,s){let o=this.getExtension(t),n=b.createTempPath("sticker_in",o),i=b.createTempPath("sticker_out","webp");await b.safeWriteFile(n,e);let c=w.STICKER.MAX_DURATION;try{let T=await F.getDuration(n);c=k(Math.min(T,w.STICKER.MAX_DURATION));}catch{console.warn("Using default duration:",w.STICKER.MAX_DURATION);}let l=`scale=${w.STICKER.SIZE}:${w.STICKER.SIZE}:force_original_aspect_ratio=increase,crop=${w.STICKER.SIZE}:${w.STICKER.SIZE},fps=${w.STICKER.FPS},format=rgba`,p=Math.max(1,Math.min(100,100-s)),h;try{return await te.process({input:n,output:i,options:["-vcodec libwebp",`-vf ${l}`,`-q:v ${p}`,"-loop 0","-preset default","-an","-vsync 0",`-t ${c}`,`-compression_level ${w.STICKER.COMPRESSION_LEVEL}`],onEnd:async()=>{h=await b.safeReadFile(i);},onError:async()=>{await b.cleanup([n,i]);}}),await b.cleanup([n,i]),h}catch(T){throw await b.cleanup([n,i]),new Error(`Animated sticker processing failed: ${T.message}`)}}static getExtension(e){return e===w.MIME.GIF?"gif":e.startsWith(w.MIME.VIDEO)?"mp4":"tmp"}static async create(e,t){try{let s=await E.toBuffer(e),o=await fileTypeFromBuffer(s);if(!o)throw new Error("Unable to detect file type");let n=t?.quality||w.STICKER.DEFAULT_QUALITY,c=U.isAnimated(o.mime)?await this.processAnimated(s,o.mime,n):await ce.resizeForSticker(s,n),l=this.createExifMetadata(t),p=new Ht.Image;await p.load(c),p.exif=l;let h=await p.save(null);return Buffer.isBuffer(h)?h:Buffer.from(h)}catch(s){throw new Error(`Sticker creation failed: ${s.message||s}`)}}},pe=class{static async create(e){try{let t=await E.toBuffer(e),s=await fileTypeFromBuffer(t);if(!s)throw new Error("Unable to detect file type");return {document:t,mimetype:s.mime,fileName:z(Date.now().toString()),jpegThumbnail:await se.getThumbnail(t)}}catch(t){throw new Error(`Document creation failed: ${t.message||t}`)}}},ue=E.toBuffer.bind(E),mt=ae.getWaAudio.bind(ae),Wn=F.getThumbnail.bind(F),Dn=F.getDuration.bind(F),Ue=se.getThumbnail.bind(se),dt=le.create.bind(le),ft=pe.create.bind(pe);var yt=a=>{if(a)try{a.ev?.removeAllListeners(),a.end?.(new Error("Cleanup"));}catch{}},me=async a=>{let e=`.session/${a}/auth/keys.json`;try{let t=await promises.readFile(e,"utf-8"),s=JSON.parse(t),o=["sender-key:","session:"],n={},i=!1;for(let[c,l]of Object.entries(s))o.some(h=>c.startsWith(h))?i=!0:n[c]=l;i&&(await promises.writeFile(e,JSON.stringify(n,null,2)),r.spinner.success(" Session keys repaired successfully"));}catch{r.spinner.warn(" Could not repair session keys, will re-negotiate");}},ht=()=>{let a=r.get("socket");return a?.end?a:null};var Qt=6e4,Yt=12e4,Xt=6e4,es=3,qe=class{lastActivityTime=Date.now();lastRecoveryTime=0;checkInterval=null;isRecovering=false;retryCount=0;options;constructor(e){this.options={checkIntervalMs:Qt,staleThresholdMs:Yt,cooldownMs:Xt,maxRetries:es,onRecovery:async()=>{},...e};}start(){this.checkInterval||(this.lastActivityTime=Date.now(),this.setupActivityListeners(),this.checkInterval=setInterval(()=>this.check(),this.options.checkIntervalMs),r.spinner.success(" Session watchdog started"));}stop(){this.checkInterval&&(clearInterval(this.checkInterval),this.checkInterval=null);}touch(){this.lastActivityTime=Date.now(),this.retryCount=0;}setupActivityListeners(){let e=r.get("socket");if(!e?.ev)return;let t=["messages.upsert","message-receipt.update","presence.update","chats.update"];for(let s of t)e.ev.on(s,()=>this.touch());}async check(){if(this.isRecovering)return;Date.now()-this.lastActivityTime>this.options.staleThresholdMs&&await this.recover();}isInCooldown(){return Date.now()-this.lastRecoveryTime<this.options.cooldownMs}async recover(){if(!this.isRecovering){if(this.isInCooldown()){r.spinner.warn(" Recovery in cooldown, skipping...");return}if(this.retryCount>=this.options.maxRetries){r.spinner.error(` Max recovery retries (${this.options.maxRetries}) reached. Manual restart required.`);return}this.isRecovering=true,this.lastRecoveryTime=Date.now(),this.retryCount++;try{r.spinner.warn(` Session recovery attempt ${this.retryCount}/${this.options.maxRetries}...`);let e=r.get("socket");if(e?.ws?.readyState===1)try{await e.fetchStatus(e.user?.id||""),this.touch(),r.spinner.success(" Session health check passed");return}catch{}await me(this.options.session),r.spinner.warn(" Forcing reconnection..."),await this.options.onRecovery(),this.touch();}catch{r.spinner.error(" Recovery failed");}finally{this.isRecovering=false;}}}async forceRecovery(){if(this.isInCooldown()){r.spinner.warn(" Recovery blocked by cooldown");return}await this.recover();}},ne=null,kt=a=>(ne&&ne.stop(),ne=new qe(a),ne),zn=()=>ne;var Ge=class a{static inst;fLocks=new Map;kLocks=new Map;maxSize=100;static get(){return this.inst||(this.inst=new a)}getFile(e){let t=this.fLocks.get(e);if(!t){if(this.fLocks.size>=this.maxSize){let s=this.fLocks.keys().next().value;this.fLocks.delete(s);}t=new Mutex,this.fLocks.set(e,t);}return t}getKey(e){let t=this.kLocks.get(e);if(!t){if(this.kLocks.size>=this.maxSize){let s=this.kLocks.keys().next().value;this.kLocks.delete(s);}t=new Mutex,this.kLocks.set(e,t);}return t}},Ke=class{data;path;pool;size;chunkDir;replacer;reviver;loaded=false;flushMode;debounceMs;flushTimer=null;dirty=false;constructor(e,t,s=2*1024*1024,o="debounce",n=200){this.data=new Map,this.path=e,this.pool=Ge.get(),this.size=s,this.chunkDir=`${e}.c`,this.replacer=t?.replacer||null,this.reviver=t?.reviver||null,this.flushMode=o,this.debounceMs=n;}async ensureLoaded(){this.loaded||(await this.read(),this.loaded=true);}scheduleFlush(){if(this.flushMode!=="manual"){if(this.flushMode==="sync"){this.write();return}this.dirty=true,!this.flushTimer&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.dirty&&(this.dirty=false,this.write());},this.debounceMs));}}async read(){return this.pool.getFile(this.path).runExclusive(async()=>{try{let t=await readFile(this.path,"utf-8"),s=JSON.parse(t,this.reviver);this.data.clear();let o=[];for(let[n,i]of Object.entries(s))this.isMeta(i)?o.push(this.loadChunk(n,i)):this.data.set(n,i);return await Promise.all(o),this.loaded=!0,this.data}catch{return await mkdir(dirname(this.path),{recursive:true}),this.data.clear(),this.loaded=true,this.data}})}async write(){return this.pool.getFile(this.path).runExclusive(async()=>{let t={},s=[];for(let[n,i]of this.data){if(this.isMeta(i)){t[n]=i;continue}JSON.stringify(i,this.replacer).length>this.size?s.push(this.saveChunk(n,i).then(l=>{t[n]=l;})):t[n]=i;}await Promise.all(s);let o=JSON.stringify(t,this.replacer,2);await writeFile(this.path,o,"utf-8");})}async set(e,t){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{this.data.set(e,t),this.scheduleFlush();});}async push(e,t){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{let o=this.data.get(e),n;Array.isArray(o)?n=o:o===void 0?n=[]:n=[o],n.push(t),this.data.set(e,n),this.scheduleFlush();});}async upsert(e,t,s="key.id"){await this.ensureLoaded(),await this.pool.getKey(e).runExclusive(async()=>{let n=this.data.get(e),i;Array.isArray(n)?i=n:n===void 0?i=[]:i=[n];let c=x.get(t,s);if(c){let l=i.findIndex(p=>x.get(p,s)===c);l>=0?i[l]=t:i.push(t);}else i.push(t);this.data.set(e,i),this.scheduleFlush();});}async get(e){if(await this.ensureLoaded(),typeof e=="string")return this.data.get(e);let t=Array.from(this.data.values()).flat();return ct(t,e)}async all(){return await this.ensureLoaded(),Array.from(this.data.entries())}async delete(e){return await this.ensureLoaded(),this.pool.getKey(e).runExclusive(async()=>{let s=this.data.get(e);this.isMeta(s)&&await this.delChunk(e,s);let o=this.data.delete(e);return this.scheduleFlush(),o})}async saveChunk(e,t){let s=JSON.stringify(t,this.replacer),o=Buffer.from(s,"utf-8"),n=Math.ceil(o.length/this.size);await mkdir(this.chunkDir,{recursive:true});let i={v:1,k:e,t:n,s:this.size,c:o.length,m:Date.now().toString(36)},c=[];for(let l=0;l<n;l++){let p=l*this.size,h=Math.min(p+this.size,o.length),T=o.subarray(p,h);c.push(writeFile(join(this.chunkDir,`${e}.${l}.json`),JSON.stringify({i:l,d:T.toString("base64")})));}return c.push(writeFile(join(this.chunkDir,`${e}.manifest.json`),JSON.stringify(i))),await Promise.all(c),{t:n,s:this.size,k:e}}async loadChunk(e,t){let s=join(this.chunkDir,`${e}.manifest.json`),o=JSON.parse(await readFile(s,"utf-8")),n=[];for(let p=0;p<o.t;p++)n.push(readFile(join(this.chunkDir,`${e}.${p}.json`),"utf-8").then(h=>Buffer.from(JSON.parse(h).d,"base64")));let i=await Promise.all(n),c=Buffer.concat(i),l=JSON.parse(c.toString("utf-8"),this.reviver);this.data.set(e,l);}async delChunk(e,t){let s=[];for(let o=0;o<t.t;o++)s.push(unlink(join(this.chunkDir,`${e}.${o}.json`)).catch(()=>{}));s.push(unlink(join(this.chunkDir,`${e}.manifest.json`)).catch(()=>{})),await Promise.all(s);try{(await readdir(this.chunkDir)).length===0&&await rmdir(this.chunkDir);}catch{}}isMeta(e){return e?.t&&e?.s&&e?.k}},Z=(a,e)=>new Ke(a,e?.BufferJSON,e?.size,e?.flushMode,e?.debounceMs);var St=async a=>{r.spinner.start(" Initializing auth state...");let e=await stat(a).catch(()=>{});if(e){if(!e.isDirectory())throw r.spinner.error(` Failed to open credentials
2
+ `),`found something that is not a directory at ${a}, either delete it or specify a different location`}else await mkdir(a,{recursive:true});let t=Z(`${a}/auth/creds.json`,{BufferJSON:BufferJSON}),s=Z(`${a}/auth/keys.json`,{BufferJSON:BufferJSON,size:512*1024});await Promise.all([t.read(),s.read()]);let o=await t.get("creds")||initAuthCreds();return r.spinner.success(" Generate auth successfully"),{state:{creds:o,keys:{get:async(n,i)=>{let c={};return await Promise.all(i.map(async l=>{let p=`${n}:${l}`,h=await s.get(p);n==="app-state-sync-key"&&h&&(h=proto.Message.AppStateSyncKeyData.fromObject(h)),c[l]=h;})),c},set:async n=>{let i=[];for(let c in n)for(let l in n[c]){let p=n[c][l],h=`${c}:${l}`;p?i.push(s.set(h,p)):i.push(s.delete(h).then(()=>{}));}await Promise.all(i),await s.write();}}},saveCreds:async()=>{await t.set("creds",o),await t.write();}}};var ls=new He,Tt=(a,e)=>({logger:r.logger,printQRInTerminal:false,defaultQueryTimeoutMs:void 0,markOnlineOnConnect:a.options.autoOnline,syncFullHistory:a.options.syncFullHistory,msgRetryCounterCache:new He,mediaCache:new He({stdTTL:60}),cachedGroupMetadata:async t=>ls.get(t),auth:{creds:e.creds,keys:makeCacheableSignalKeyStore(e.keys,r.logger)},getMessage:async t=>t?.remoteJid?(await a.db("messages").get(t.remoteJid))?.find(n=>n?.key?.id===t.id):void 0});var Ct=async a=>{let e=ht();e&&yt(e);let t=`.session/${a.options.session}`;console.info=()=>{};let{state:s,saveCreds:o}=await St(t),n=Tt(a,s),i=ps(n);i.ev.on("creds.update",o),r.set("socket",i);};var de=class{constructor(e){this.client=e;this.initialize();}async initialize(){let e=r.get("socket");e.ev.on("call",async t=>{for(let s of t){let o=await this.parse(s);o&&(await this.client.middleware.run({calls:o}),await this.client.plugins.execute(this.client,{messages:o}),r.events.emit("calls",o),this.client.options?.autoRejectCall&&await e.rejectCall(o.callId,o.callerId));}});}async parse(e){let t=r.get("socket"),s={};return s.callId=e.id,s.callerId=jidNormalizedUser(e.from),s.callerName=await this.client.getRoomName(s.callerId),s.roomId=jidNormalizedUser(e.chatId),s.roomName=P(t?.user?.name||t?.user?.verifiedName),s.date=e.date,s.offline=e.offline,s.status=e.status,s.isVideo=!!e.isVideo,s.isGroup=!!e.isGroup,this.client.logs.call(s),s}};var fe={version:"2.0.14",author:"zaadevofc"};var It=a=>{fs.generate(a,{small:true},e=>{console.log(e);});},Rt=async()=>{console.clear(),r.spinner.start(" Checking for updates...");let a=await ot(),e=fe.version===a;r.spinner.stop();let t="Zaileys",s=`
3
3
  by ${fe.author} \xB7 v${fe.version}`,o=`${e?"Already using latest version!":`Update available! (v${a})`}
4
- `,n=e?"lime":"orange",i=await ds.text(t),c=cristal(i);console.log(c),console.log(b(s,"dimgray")),console.log(b(o,n));};var he=class{constructor(e){this.client=e;this.initialize();}async initialize(){r.spinner.start(" Initializing connection...");let e=r.get("socket"),t={},s=async()=>{t.status="reload",r.spinner.warn(" Connection lost. Attempting auto-reload..."),await this.client.initialize();},o=async()=>{await delay(3e3),r.spinner.warn(" Invalid session. Attempting auto cleaning creds..."),await delay(3e3),await it(this.client.options.session),await s();};if(this.client.options.authType==="pairing"&&this.client.options.phoneNumber&&!e.authState.creds.registered){r.spinner.update(" Generating pairing code..."),await delay(3500);try{t.authTimeout=Date.now()+6e4;let n=new Date(t.authTimeout).toLocaleTimeString(),i=await e.requestPairingCode(this.client.options.phoneNumber.toString());r.spinner.warn(` Pairing expired at ${cristal(n)}`),r.spinner.warn(` Pairing code: ${i}`),t.code=i;}catch{await o();}}e.ev.on("connection.update",async n=>{let{connection:i,lastDisconnect:c,qr:l}=n;if(t.status=i||"connecting",t.authType=this.client.options.authType,r.spinner.update(" Connection status: "+cristal(t.status)),this.client.options.authType==="qr"&&l){t.authTimeout=Date.now()+6e4;let p=new Date(t.authTimeout).toLocaleTimeString();r.spinner.warn(" Please scan the QR code..."),r.spinner.warn(` Qr code expired at ${cristal(p)}`),At(l),t.qr=l;return}if(i==="close"){let p=k(c?.error)?.output?.statusCode,h=c?.error?.message||"",T=typeof p=="number"&&p!==DisconnectReason.loggedOut,j=p===515||h.toLowerCase().includes("prekey");if(r.spinner.error(` [${p} - Closed] ${h}`),j){r.spinner.warn(" Session key mismatch detected, attempting repair..."),await me(this.client.options.session),await delay(1e3),await s();return}if(p===401||p===405){r.spinner.warn(" Session may be used by another device/instance."),r.spinner.warn(" If you want to connect here, close the other connection first."),r.spinner.warn(` Or use a different session name in your Client options.
5
- `);return}if(p===500){r.spinner.error(" Server error occurred, attempting reconnect..."),await s();return}T&&await s();}if(i==="open")if(e.user?.id){let p=jidNormalizedUser(e.user.id).split("@")[0],h=e.user.name||e.user.verifiedName;r.spinner.success(` Connected as ${cristal(h||p)}`);}else r.spinner.success(" Connected!");r.events.emit("connection",t);}),e.ev.on("messaging-history.set",({progress:n})=>{t.status="syncing",t.syncProgress=n,r.spinner.start(" Syncing messages history..."),n&&r.spinner.update(` Syncing messages history ${n+"%"}`),n==100&&(r.spinner.success(" Syncing messages history completed!"),t.syncCompleted=true),r.events.emit("connection",t);});}};var Rt={text:"text",conversation:"text",imageMessage:"image",contactMessage:"contact",locationMessage:"location",documentMessage:"document",audioMessage:"audio",videoMessage:"video",protocolMessage:"protocol",contactsArrayMessage:"contacts",highlyStructuredMessage:"highlyStructured",sendPaymentMessage:"sendPayment",liveLocationMessage:"location",requestPaymentMessage:"requestPayment",declinePaymentRequestMessage:"declinePaymentRequest",cancelPaymentRequestMessage:"cancelPaymentRequest",templateMessage:"template",stickerMessage:"sticker",groupInviteMessage:"groupInvite",templateButtonReplyMessage:"buttons",productMessage:"product",deviceSentMessage:"deviceSent",listMessage:"lists",viewOnceMessage:"viewOnce",orderMessage:"order",listResponseMessage:"lists",ephemeralMessage:"ephemeral",invoiceMessage:"invoice",buttonsMessage:"buttons",buttonsResponseMessage:"buttons",paymentInviteMessage:"paymentInvite",interactiveMessage:"interactive",reactionMessage:"reaction",stickerSyncRmrMessage:"sticker",questionMessage:"question",nativeFlowResponseMessage:"lists",interactiveResponseMessage:"interactiveResponse",pollCreationMessage:"pollCreation",pollCreationMessageKey:"pollUpdate",pollUpdateMessage:"pollUpdate",keepInChatMessage:"keepInChat",documentWithCaptionMessage:"document",requestPhoneNumberMessage:"requestPhoneNumber",viewOnceMessageV2:"viewOnce",encReactionMessage:"reaction",editedMessage:"text",viewOnceMessageV2Extension:"viewOnce",pollCreationMessageV2:"pollCreation",scheduledCallCreationMessage:"scheduledCallCreation",groupMentionedMessage:"groupMentioned",pinInChatMessage:"pinInChat",pollCreationMessageV3:"pollCreation",scheduledCallEditMessage:"scheduledCallEdit",ptvMessage:"ptv",botInvokeMessage:"botInvoke",callLogMesssage:"callLog",encCommentMessage:"encComment",bcallMessage:"bcall",lottieStickerMessage:"lottieSticker",eventMessage:"event",commentMessage:"comment",newsletterAdminInviteMessage:"text",extendedTextMessageWithParentKey:"text",extendedTextMessage:"text",placeholderMessage:"placeholder",encEventUpdateMessage:"encEventUpdate"},Ze={whatsapp:"0@s.whatsapp.net",meta:"13135550002@s.whatsapp.net",chatgpt:"18002428478@s.whatsapp.net",copilot:"18772241042@s.whatsapp.net",instagram:"447723442971@s.whatsapp.net",tiktok:"6285574670498@s.whatsapp.net"};var ke=class{constructor(e){this.client=e;this.limiter=new RateLimiterMemory({points:this.client.options.limiter?.maxMessages,duration:this.client.options.limiter?.durationMs/1e3});}limiter;async isSpam(e){try{return await this.limiter.consume(e),!1}catch{return true}}};var ve=class{constructor(e){this.client=e;this.limiter=new ke(e),this.initialize();}limiter;maxReplies=3;async initialize(){let e=r.get("socket");e.ev.on("messages.upsert",async({messages:t,type:s})=>{if(s==="notify")for(let o of t){let n=await this.parse(o);n&&(this.client.collector.push(n)||(await this.client.middleware.run({messages:n}),await this.client.plugins.execute(this.client,{messages:n}),r.set("message",n),r.events.emit("messages",n)),this.client.options.autoRead&&await e.readMessages([n.message().key]));}});}async parse(e,t){if(e?.category==="peer"||!e?.message||!e?.key?.id||e?.messageStubType||e?.messageStubParameters?.length||e.message?.protocolMessage?.peerDataOperationRequestResponseMessage||e.message?.groupStatusMentionMessage)return;let s=e,o=r.get("socket"),n={},i=re(e.message),c=i.chain.at(-1),l=i.leaf;l?.message&&(i=re(l.message),c=i.chain.at(-1),l=i.leaf),n.uniqueId=null,n.channelId=null,n.chatId=e?.message?.protocolMessage?.key?.id||e?.key?.id||null,n.chatType=Rt[c],n.receiverId=jidNormalizedUser(o?.user?.id||""),n.receiverName=P(o?.user?.name||o?.user?.verifiedName),n.roomId=jidNormalizedUser(e?.key?.remoteJid);let p=l?.type===0,h=l?.type===1,T=l?.type===2,j=n.roomId?.includes("@newsletter"),De=!!e?.message?.questionMessage,J=e?.key?.fromMe||false;if(J&&this.client.options.ignoreMe&&t!=="replied")return;let Ne=l?.key?.id;if(p||h||T){let C=(await this.client.db("messages").get(n.roomId))?.find(_=>_.key.id===Ne);if(!C)return;e=C,i=re(e.message),c=i.chain.at(-1),l=i.leaf;}if(n.roomName=await this.client.getRoomName(n.roomId),n.senderLid=I([e?.key],["remoteJidAlt","participant"])||null,n.senderId=jidNormalizedUser(e?.participant||e?.key?.participant||e?.key?.remoteJid),n.senderName=P(e?.pushName||e?.verifiedBizName),n.senderDevice=getDevice(n.chatId),n.channelId=z([n.roomId,n.senderId]),n.uniqueId=z([n.channelId,n.chatId]),n.timestamp=Number(e?.messageTimestamp)*1e3,j){let R=await o.newsletterMetadata("jid",n.roomId);n.roomName=k(R.thread_metadata.name)?.text,n.senderId=null,n.senderLid=null;}if(J&&(n.senderLid=jidNormalizedUser(o.user.lid),n.senderId=n.receiverId,n.senderName=n.receiverName),n.text=l?.text||l?.caption||l?.name||l?.displayName||l?.conversation||l?.contentText||l?.selectedDisplayText||l||null,l?.name=="menu_options"&&(n.text=Fe(l?.paramsJson)?.id),n.text=P(n.text),n.mentions=lt(n.text),n.links=at(n.text||""),n.isBot=n.chatId.startsWith("BAE5")||n.chatId.startsWith("3EB0")||n.chatId.startsWith("Z4D3FC"),n.isFromMe=J,n.isTagMe=n.mentions?.includes(n.receiverId.split("@")[0]),n.isPrefix=n.text?.startsWith(this.client.options?.prefix)||false,n.isSpam=await this.limiter.isSpam(n.channelId),n.isPrefix&&(n.text=n.text.replace(new RegExp(`^${this.client.options?.prefix}`),"")),n.isGroup=n.roomId?.includes("@g.us"),n.isNewsletter=j,n.isQuestion=De,n.isStory=n.roomId?.includes("@broadcast"),!n.isGroup&&!n.roomName&&(n.roomName=n.senderName),n.isViewOnce=false,n.isEdited=!!Y(Q(i),"editedMessage"),n.isDeleted=p,n.isPinned=h,n.isUnPinned=T,n.isBroadcast=!!e?.broadcast,n.isEphemeral=!!Y(Q(l?.contextInfo),"ephemeralSettingTimestamp"),n.isForwarded=!!Y(Q(l?.contextInfo),"forwardingScore"),n.citation=null,this.client.options.citation){n.citation=n.citation||{};let R=this.client.options.citation;for(let C of Object.keys(R)){let _=R[C];n.citation[C]=async()=>{let K=await _(),Oe=[N(n.roomId),N(n.senderLid),N(n.senderId)];return !!x.intersection(Oe,K).length};}}n.chatType!=="text"&&(n.media={...pt(l),buffer:()=>downloadMediaMessage(e,"buffer",{}),stream:()=>downloadMediaMessage(e,"stream",{})}),n.message=()=>s,n.replied=null;let F=l?.contextInfo?.quotedMessage,B=I([F],["viewOnceMessageV2Extension","viewOnceMessage"]);B=Y(Q(F),"viewOnce")?F:B;let G=l?.contextInfo?.stanzaId;if(F&&this.maxReplies){this.maxReplies--;let C=(await this.client.db("messages").get(n.roomId))?.find(K=>K.key.id===G),_={...C,message:B};B?(n.replied=await this.parse(_,"replied"),n.replied.isViewOnce=true):n.replied=await this.parse(C,"replied"),this.maxReplies=3;}return t!="replied"&&this.client.logs.message(n),n}};var Me=class{constructor(e){this.client=e;this.connection=new he(e),this.messages=new ve(e),this.calls=new de(e),this.initialize();}connection;messages;calls;async initialize(){let e=r.get("socket");e.ev.on("groups.update",async([t])=>{let s=await e.groupMetadata(t.id);r.groupCache.set(t.id,s);}),e.ev.on("group-participants.update",async t=>{let s=await e.groupMetadata(t.id);r.groupCache.set(t.id,s);}),e?.ev.on("messaging-history.set",async t=>{let{chats:s,contacts:o,messages:n}=t;for(let i of s)await this.client.db("chats").upsert(i.id,i,"id");for(let i of o)await this.client.db("contacts").upsert(i.id,i,"id");for(let i of n){if(!i.message&&!i.key.isViewOnce||i?.category==="peer"||i.message?.protocolMessage&&!i.message?.protocolMessage?.memberLabel||i.message?.groupStatusMentionMessage)return;await this.client.db("messages").upsert(i.key.remoteJid,i,"key.id");}}),e?.ev.on("messages.upsert",async({messages:t})=>{for(let s of t){if(!s.message&&!s.key.isViewOnce||s?.category==="peer"||s.message?.protocolMessage&&!s.message?.protocolMessage?.memberLabel||s.message?.groupStatusMentionMessage)return;await this.client.db("messages").upsert(s.key.remoteJid,s,"key.id");}}),e?.ev.on("chats.upsert",async t=>{for(let s of t)await this.client.db("chats").upsert(s.id,s,"id");}),e?.ev.on("contacts.upsert",async t=>{for(let s of t)await this.client.db("contacts").upsert(s.id,s,"id");});}};var oe=(a,e)=>{let t=a.safeParse(e);if(t.success)return t.data;throw console.error(t.error),"Invalid data"};var Ms=u.object({type:u.literal("quick_reply"),text:u.string()}),bs=u.object({type:u.literal("cta_url"),url:u.url(),text:u.string()}),xs=u.object({type:u.literal("cta_copy"),copy:u.string(),text:u.string()}),Ss=u.object({type:u.literal("cta_call"),text:u.string(),phoneNumber:u.string()}),Ts=u.object({type:u.literal("single_select"),text:u.string(),section:u.object({title:u.string(),highlight_label:u.string().optional(),rows:u.object({id:u.string(),title:u.string(),header:u.string().optional(),description:u.string().optional()}).array()}).array()}),Cs=u.object({type:u.literal("interactive"),footer:u.string().optional(),data:u.union([Ms,bs,xs,Ss,Ts]).array()}),As=u.object({type:u.literal("simple"),footer:u.string().optional(),data:u.object({id:u.string(),text:u.string()}).array()}),Et=u.union([As,Cs]);var ie=u.url().or(u.base64()).or(u.instanceof(Buffer)),Wt=u.object({text:u.string()}).passthrough(),Is=u.object({image:ie,caption:u.string().optional()}).passthrough(),Rs=u.object({audio:ie,caption:u.string().optional(),ptt:u.boolean().optional()}).passthrough(),Ps=u.object({video:ie,caption:u.string().optional(),ptv:u.boolean().optional()}).passthrough(),Es=u.object({sticker:ie,caption:u.string().optional()}).passthrough(),Ws=u.object({document:ie,caption:u.string().optional(),fileName:u.string().optional()}).passthrough(),Ds=u.object({location:u.object({latitude:u.number(),longitude:u.number(),url:u.url().optional(),title:u.string().optional(),footer:u.string().optional()}).optional()}).passthrough(),Ns=u.object({title:u.string().optional(),contacts:u.object({fullname:u.string(),phoneNumber:u.number(),organization:u.string().optional()}).array()}),Os=u.object({poll:u.object({name:u.string(),answers:u.string().array(),isMultiple:u.boolean().default(false).optional()})}),Dt=u.object({replied:u.custom().optional(),isForwardedMany:u.boolean().optional(),isViewOnce:u.boolean().optional(),banner:u.custom().optional(),buttons:Et.optional()});u.enum(["forward","button","edit","delete"]);var Ls=u.union([Wt,Is,Rs,Ps,Es,Ws,Ds,Ns,Os]),Nt=u.string().or(u.intersection(Ls,Dt.omit({buttons:true}))),Ot=u.intersection(Wt,Dt.omit({banner:true}));var be=class{toNativeSimple(e){return e.map(({id:t,text:s})=>({name:"quick_reply",buttonParamsJson:JSON.stringify({display_text:s,id:t})}))}toNativeInteractive(e){let t={quick_reply:s=>({display_text:s.text,id:s.id}),cta_url:s=>({display_text:s.text,url:s.url,merchant_url:s.url}),cta_copy:s=>({display_text:s.text,id:s.id,copy_code:s.copy}),cta_call:s=>({display_text:s.text,phone_number:s.phoneNumber}),single_select:s=>({title:s.text,sections:s.section})};return e.map(s=>({name:s.type,buttonParamsJson:JSON.stringify(t[s.type](s))}))}build(e){let t=k(e).buttons,s=t?.data||[],n=t?.type=="simple"?this.toNativeSimple(s):this.toNativeInteractive(s);return {body:{text:k(e).text},footer:t.footer?{text:t.footer}:void 0,nativeFlowMessage:{buttons:n}}}async send(e,t,s){let o=r.get("socket"),n=o.authState?.creds?.me?.id||o.user?.id,i=this.build(t),c=generateWAMessageFromContent(e,{interactiveMessage:i},{userJid:n,messageId:generateMessageIDV2(n),...s});return await o.relayMessage(e,c.message,{messageId:c.key.id,...s,additionalNodes:[{tag:"biz",attrs:{},content:[{tag:"interactive",attrs:{type:"native_flow",v:"1"},content:[{tag:"native_flow",attrs:{v:"9",name:"mixed"}}]}]}]}),o.config?.emitOwnEvents&&!isJidGroup(e)&&process.nextTick(()=>o.upsertMessage?.(c,"append")),c}};var xe=class{constructor(e){this.client=e;}async signal(e,t,s,o){s!="delete"&&(s=="button"?t=oe(Ot,t):t=oe(Nt,t));let n=r.get("socket"),i={},c={},l=x.isString(t),p=this.client.options?.fakeReply?.provider,h=this.client.options?.autoMentions,T=this.client.options?.autoPresence,j=x.has(t,"replied"),De=x.has(t,"banner"),J=x.has(t,"isViewOnce"),Ne=s=="button",F=x.has(t,"image"),B=x.has(t,"video"),G=x.has(t,"audio"),R=x.has(t,"sticker"),C=x.has(t,"document"),_=x.has(t,"location"),K=x.has(t,"contacts"),Oe=x.has(t,"poll"),st=F||B||G||R||C,H=l?t:I([t],["text","caption"]);if(T&&(G?await n.sendPresenceUpdate("recording",e):await n.sendPresenceUpdate("composing",e)),h&&(i={...i,mentions:Be(H),contextInfo:{mentionedJid:Be(H)}}),j&&(c.quoted=k(t).replied,p&&(c.quoted.key.remoteJid=Ze[p],c.quoted.key.participant=Ze[p])),De&&(i={...i,contextInfo:{externalAdReply:k(t).banner}},i.contextInfo.externalAdReply.mediaType=1),J&&(i={...i,viewOnce:k(t)?.isViewOnce}),H&&(i={...i,text:H,caption:H},st&&delete k(i).text),st){let v=I([t],["image","video","audio","sticker","document"]),W=x.isString(v)?{url:v}:v;if(F&&(i={...i,image:W,jpegThumbnail:await Ue(v)}),B){let D=k(t)?.ptv;i={...i,video:W,ptv:D,jpegThumbnail:await Ue(v)};}if(G){let D=k(t)?.ptt;i={...i,audio:await ut(v),ptt:D,mimetype:D?"audio/ogg; codecs=opus":"audio/mpeg"};}if(R&&(i={...i,sticker:await mt(v,this.client.options?.sticker)}),C){let D=await dt(v);i={...i,fileName:k(t).fileName,...D};}}if(_){let v=k(t).location;i={...i,location:{degreesLatitude:v.latitude,degreesLongitude:v.longitude,url:v.url,address:v.footer,name:v.title}};}if(K){let v=k(t)?.contacts,nt=v?.contacts.map(W=>{let D=["BEGIN:VCARD","VERSION:3.0",`FN:${W.fullname}`,`ORG:${W.organization||""}`,`TEL;type=CELL;type=VOICE;waid=${W.phoneNumber}:${W.phoneNumber}`,"END:VCARD"].join(`
6
- `);return {displayName:W.fullname,vcard:D}});i={...i,contacts:{displayName:v?.title,contacts:nt}};}if(Oe){let v=k(t)?.poll;i={...i,poll:{name:v.name,values:v.answers,selectableCount:v.isMultiple?1:0,toAnnouncementGroup:true}};}return s=="forward"&&(i={...i,contextInfo:{...k(i).contextInfo,isForwarded:true,forwardingScore:k(t).isForwardedMany?9999:1}}),s=="edit"&&(i={...i,edit:o?.key},await n.sendPresenceUpdate("paused",e)),s=="delete"&&(i={...i,delete:o?.key},await n.sendPresenceUpdate("paused",e)),Ne?await new be().send(e,t,c):await n.sendMessage(e,k(i),c)}async send(e,t){return await this.signal(e,t)}async forward(e,t){return await this.signal(e,t,"forward")}async button(e,t){return await this.signal(e,t,"button")}async edit(e,t){return await this.signal(e.key.remoteJid,t,"edit",e)}async delete(e){return x.isArray(e)?Promise.all(e.map(t=>this.signal(t.key.remoteJid,{},"delete",t))):await this.signal(e.key.remoteJid,{},"delete",e)}async presence(e,t){let s=r.get("socket"),o={typing:"composing",recording:"recording",online:"available",offline:"unavailable",paused:"paused"};return await s.sendPresenceUpdate(o[t],e)}async reaction(e,t){return await r.get("socket").sendMessage(e.key.remoteJid,{react:{text:t,key:e?.key}})}async memberLabel(e,t){return await r.get("socket").relayMessage(e,{protocolMessage:{type:30,memberLabel:{label:t,labelTimestamp:Date.now()}}},{})}};var Qe=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").communityCreate(e,t)}async createGroup(e,t,s){return await r.get("socket").communityCreateGroup(e,t,s)}async leave(e){return await r.get("socket").communityLeave(e)}async metadata(e){return await r.get("socket").communityMetadata(e)}async update(e,t,s){let o=r.get("socket");switch(t){case "subject":return await o.communityUpdateSubject(e,s);case "description":return await o.communityUpdateDescription(e,s)}}async group(e,t,s){let o=r.get("socket");switch(t){case "link":if(!s)throw "Group JID is required for linking";return await o.communityLinkGroup(e,s);case "unlink":if(!s)throw "Group JID is required for unlinking";return await o.communityUnlinkGroup(e,s);case "linked":return await o.communityFetchLinkedGroups(e)}}async participants(e,t,s,o){let n=r.get("socket");switch(t){case "list":return await n.communityRequestParticipantsList(e);case "request-update":return await n.communityRequestParticipantsUpdate(e,o,k(s));case "update":if(!s||!o)throw "Action and participants are required for update";return await n.communityParticipantsUpdate(e,o,k(s));case "all":return await n.communityFetchAllParticipating()}}async invite(e,t,...s){let o=r.get("socket");switch(t){case "code":return await o.communityInviteCode(e);case "revoke":return await o.communityRevokeInvite(e);case "accept":return await o.communityAcceptInvite(e);case "info":return await o.communityGetInviteInfo(e);case "revokeV4":return await o.communityRevokeInviteV4(e,s[0]);case "acceptV4":return await o.communityAcceptInviteV4(e,s[0])}}async settings(e,t,s){let o=r.get("socket");switch(t){case "ephemeral":return await o.communityToggleEphemeral(e,s);case "update":return await o.communitySettingUpdate(e,s);case "memberAdd":return await o.communityMemberAddMode(e,s);case "approval":return await o.communityJoinApprovalMode(e,s)}}},Se=class{constructor(e){this.mlient=e;this.community=new Qe(e);}community};var Ye=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").groupCreate(e,t)}async participant(e,t,s){return await r.get("socket").groupParticipantsUpdate(e,t,s)}async profile(e,t,s){let o=r.get("socket"),n=Buffer.isBuffer(t);switch(s){case "subject":if(!n)return await o.groupUpdateSubject(e,t);case "description":if(!n)return await o.groupUpdateDescription(e,t);case "picture":return await o.updateProfilePicture(e,ue(t))}}async setting(e,t){let s=r.get("socket");switch(t){case "open":return await s.groupSettingUpdate(e,"not_announcement");case "close":return await s.groupSettingUpdate(e,"announcement");case "locked":return await s.groupSettingUpdate(e,t);case "unlocked":return await s.groupSettingUpdate(e,t);case "all_member_add":return await s.groupMemberAddMode(e,t);case "admin_add":return await s.groupMemberAddMode(e,t)}}async leave(e){return await r.get("socket").groupLeave(e)}async inviteCode(e,t){let s=r.get("socket");switch(t){case "code":return await s.groupInviteCode(e);case "revoke":return await s.groupRevokeInvite(e);case "accept":return await s.groupAcceptInvite(e);case "info":return await s.groupGetInviteInfo(e)}}async metadata(e){return await r.get("socket").groupMetadata(e)}async requestJoin(e,t,s){let o=r.get("socket");switch(s){case "approve":return await o.groupRequestParticipantsUpdate(e,t,s);case "reject":return await o.groupRequestParticipantsUpdate(e,t,s)}}async requestJoinList(e){return await r.get("socket").groupRequestParticipantsList(e)}async fetchAllGroups(){return await r.get("socket").groupFetchAllParticipating()}async ephemeral(e,t){let s=r.get("socket"),o={off:0,"24h":86400,"7d":604800,"90d":7776e3};return await s.groupToggleEphemeral(e,o[t])}},Te=class{constructor(e){this.glient=e;this.group=new Ye(e);}group};var Xe=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").newsletterCreate(e,t)}async action(e,t){let s=r.get("socket");switch(t){case "follow":return await s.newsletterFollow(e);case "unfollow":return await s.newsletterUnfollow(e);case "mute":return await s.newsletterMute(e);case "unmute":return await s.newsletterUnmute(e);}}async update(e,t,s){let o=r.get("socket"),n=Buffer.isBuffer(t);switch(s){case "name":if(!n)return await o.newsletterUpdateName(e,t);case "description":if(!n)return await o.newsletterUpdateDescription(e,t);case "picture":return await o.newsletterUpdatePicture(e,ue(t))}}async metadata(e,t){return await r.get("socket").newsletterMetadata(t,e)}async subscribers(e){return await r.get("socket").newsletterSubscribers(e)}async reaction(e,t,s){return await r.get("socket").newsletterReactMessage(e,t,s)}async fetchMessages(e,t,s,o){let n=r.get("socket"),i=s.getTime()/1e3,c=o.getTime()/1e3;return await n.newsletterFetchMessages(e,t,i,c)}async adminCount(e){return await r.get("socket").newsletterAdminCount(e)}async changeOwner(e,t){return await r.get("socket").newsletterChangeOwner(e,t)}async demote(e,t){return await r.get("socket").newsletterDemote(e,t)}async delete(e){return await r.get("socket").newsletterDelete(e)}async removePicture(e){return await r.get("socket").newsletterRemovePicture(e)}},Ce=class{constructor(e){this.nlient=e;this.newsletter=new Xe(e);}newsletter};var et=class{constructor(e){this.client=e;}async block(e){return await r.get("socket").updateBlockStatus(e,"block")}async unblock(e){return await r.get("socket").updateBlockStatus(e,"unblock")}async lastSeen(e){return await r.get("socket").updateLastSeenPrivacy(e)}async online(e){return await r.get("socket").updateOnlinePrivacy(e)}async picture(e){return await r.get("socket").updateProfilePicturePrivacy(e)}async status(e){return await r.get("socket").updateStatusPrivacy(e)}async readReceipt(e){return await r.get("socket").updateReadReceiptsPrivacy(e)}async groupsAdd(e){return await r.get("socket").updateGroupsAddPrivacy(e)}async ephemeral(e){let t=r.get("socket"),s={off:0,"24h":86400,"7d":604800,"90d":7776e3};return await t.updateDefaultDisappearingMode(s[e])}async blocklist(){return await r.get("socket").fetchBlocklist()}async getSettings(){return await r.get("socket").fetchPrivacySettings(true)}},Ae=class{constructor(e){this.plient=e;this.privacy=new et(e);}privacy};var $s=z$1.object({maxMessages:z$1.number().default(20),durationMs:z$1.number().default(1e4)}).optional(),js=z$1.record(z$1.string(),z$1.function({output:z$1.promise(z$1.array(z$1.number()))})).optional(),zs=z$1.object({provider:z$1.enum(["whatsapp","meta","chatgpt","copilot","instagram","tiktok"]).or(z$1.number())}).optional(),Us=z$1.object({packageName:z$1.string(),authorName:z$1.string(),quality:z$1.number()}).optional(),Lt=z$1.object({session:z$1.string().default("zaileys").optional(),prefix:z$1.string().optional(),ignoreMe:z$1.boolean().default(true).optional(),showLogs:z$1.boolean().default(true).optional(),syncFullHistory:z$1.boolean().default(true).optional(),autoMarkAI:z$1.boolean().default(true).optional(),autoMentions:z$1.boolean().default(true).optional(),autoOnline:z$1.boolean().default(true).optional(),autoRead:z$1.boolean().default(true).optional(),autoPresence:z$1.boolean().default(true).optional(),autoRejectCall:z$1.boolean().default(true).optional(),limiter:$s,citation:js,fakeReply:zs,sticker:Us}),qs=z$1.object({authType:z$1.literal("pairing"),phoneNumber:z$1.number()}),Vs=z$1.object({authType:z$1.literal("qr")}),Ft=z$1.union([qs.extend(Lt.shape),Vs.extend(Lt.shape)]),wr=z$1.enum(["connection","messages","calls"]);var xr=u.object({status:u.enum(["connecting","open","close","reload","syncing"]),authType:u.enum(["pairing","qr"]),authTimeout:u.number().optional(),syncProgress:u.number().optional(),syncCompleted:u.boolean().default(false).optional(),qr:u.string().optional(),code:u.string().optional()});var Gs=u.enum(["unknown","android","ios","desktop","web"]),Ks=u.enum(["text","image","contact","location","document","audio","video","protocol","contacts","highlyStructured","sendPayment","requestPayment","declinePaymentRequest","cancelPaymentRequest","template","sticker","groupInvite","product","deviceSent","lists","viewOnce","order","ephemeral","invoice","buttons","paymentInvite","interactive","reaction","sticker","interactiveResponse","pollCreation","pollUpdate","keepInChat","document","requestPhoneNumber","viewOnce","reaction","text","viewOnce","pollCreation","scheduledCallCreation","groupMentioned","pinInChat","pollCreation","scheduledCallEdit","ptv","botInvoke","callLog","encComment","bcall","lottieSticker","event","comment","placeholder","encEventUpdate"]),Bt=u.object({channelId:u.string(),uniqueId:u.string(),chatId:u.string(),chatType:Ks,receiverId:u.string(),receiverName:u.string(),roomId:u.string(),roomName:u.string(),senderLid:u.string(),senderId:u.string(),senderName:u.string(),senderDevice:Gs,timestamp:u.number(),text:u.string().nullable(),mentions:u.string().array(),links:u.string().array(),isBot:u.boolean(),isFromMe:u.boolean(),isPrefix:u.boolean(),isSpam:u.boolean(),isTagMe:u.boolean(),isGroup:u.boolean(),isNewsletter:u.boolean(),isQuestion:u.boolean(),isStory:u.boolean(),isViewOnce:u.boolean(),isEdited:u.boolean(),isDeleted:u.boolean(),isPinned:u.boolean(),isUnPinned:u.boolean(),isBroadcast:u.boolean(),isEphemeral:u.boolean(),isForwarded:u.boolean(),citation:u.record(u.string(),u.function({output:u.promise(u.boolean())})).nullable(),media:u.object({buffer:u.function({output:u.promise(u.instanceof(Buffer))}),stream:u.function({output:u.promise(u.instanceof(Js))})}).loose().nullable(),message:u.function({input:[],output:u.custom()})}),Ir=Bt.extend({replied:Bt.nullable()});var Wr=u.object({callId:u.string(),callerId:u.string(),callerName:u.string(),roomId:u.string(),roomName:u.string(),date:u.date(),offline:u.boolean(),status:u.enum(["accept","offer","reject","ringing","terminate","timeout"]),isVideo:u.boolean(),isGroup:u.boolean()});var Ie=class{collect(e,t,s){let o=t.max??1/0;if(o<=0){s([]);return}let n=r.collectors.get(e);n&&(clearTimeout(n.timeoutId),n.callback(n.messages),r.collectors.delete(e));let i=setTimeout(()=>{let c=r.collectors.get(e);c&&(c.callback(c.messages),r.collectors.delete(e));},t.timeout);r.collectors.set(e,{messages:[],max:o,filter:t.filter,callback:s,timeoutId:i});}push(e){let t=r.collectors.get(e.channelId);return !t||t.filter&&!t.filter(e)?false:(t.messages.push(e),t.messages.length>=t.max&&(clearTimeout(t.timeoutId),t.callback(t.messages),r.collectors.delete(e.channelId)),true)}has(e){return r.collectors.has(e)}cancel(e){let t=r.collectors.get(e);return t?(clearTimeout(t.timeoutId),t.callback(t.messages),r.collectors.delete(e),t.messages):[]}};var Re=class{constructor(e){this.client=e;this.initialize();}logsInitialized=false;logsDisplayed=false;isReady=false;getRoomColor(e){return e?.isNewsletter?"blue":e?.isGroup?e?.isGroup?"lime":"dimgray":"orange"}initialize(){if(!this.client.options.showLogs||this.logsInitialized)return;this.logsInitialized=true,r.get("socket").ev.on("connection.update",({connection:t})=>{this.logsDisplayed||t==="open"&&(this.logsDisplayed=true,this.isReady=true,console.log(),r.spinner.info("Logs Indicator:"),console.log(b(" \u2022","orange")+" Private Chat"),console.log(b(" \u2022","lime")+" Group Chat"),console.log(b(" \u2022","blue")+" Newsletter Chat"),console.log());});}message(e){if(!this.isReady)return;let t=k(this.getRoomColor(e)),s=e?.text?.toLowerCase()?.match("zaileys"),o=b(`[${new Date(e?.timestamp).toTimeString().split(" ")[0]}]`,"dimgray"),n=b(`${e?.roomName}`,t),i=e?.text?.slice(0,300)||"",c=i?.length>=300?"...":"",l=`${o} \u2192 ${n}
7
- `;e?.isNewsletter?l+=`${b("[room]","dimgray")} \u2192 ${b(`${e?.roomName} (${N(e?.roomId)})`,t)}
8
- `:l+=`${b("[sender]","dimgray")} \u2192 ${b(`${e?.senderName} (${N(e?.senderId)})`,t)}
9
- `,l+=`${b(`[${e?.chatType||"unknown"}]`,"dimgray")} \u2192 ${b(i+c,s?["#ff5f6d","#ffc371"]:"brown")}
10
- `,l+="\u2014",console.log(l);}call(e){if(!r.get("logs")?.ready)return;let t=k(this.getRoomColor(e)),s=b(`[${new Date(e?.date).toTimeString().split(" ")[0]}]`,"dimgray"),o=b(`${e?.roomName}`,t),n=`${s} \u2192 ${o}
11
- `;n+=`${b("[caller]","dimgray")} \u2192 ${b(`${e?.callerName} (${N(e?.callerId)})`,t)}
12
- `,n+=`${b(`[${e?.status}]`,"dimgray")} \u2192 ${b(e?.isVideo?"Video Call":"Voice Call","brown")}
13
- `,n+="\u2014",console.log(n);}};var Pe=class{stack=[];use(e){return this.stack.push(e),this}async run(e){let t=-1,s=async o=>{if(o<=t)throw "next() called multiple times";t=o;let n=this.stack[o];if(n)try{await n(e,()=>s(o+1));}catch(i){throw console.error("Middleware error:",i),i}};await s(0);}};var Ee=class{plugins=[];pluginsDir;constructor(e=ze.join(process.cwd(),"plugins")){this.pluginsDir=e;}getAllFiles(e,t=[]){if(!$.existsSync(e))return t;let s=$.readdirSync(e);for(let o of s){let n=ze.join(e,o);$.statSync(n).isDirectory()?this.getAllFiles(n,t):(o.endsWith(".ts")||o.endsWith(".js"))&&!o.endsWith(".d.ts")&&t.push(n);}return t}async load(){if(!$.existsSync(this.pluginsDir))return;let e=this.getAllFiles(this.pluginsDir);for(let t of e)try{let o=(await import(pathToFileURL(t).href)).default;o?.default&&(o=o.default),o?.handler&&o?.config&&this.plugins.push(o);}catch{}}async execute(e,t){let s=t.messages.text||"";for(let o of this.plugins)try{this.match(s,o.config.matcher)&&await o.handler(e,t);}catch{}}match(e,t){return t.some(s=>e===s||e.startsWith(s+" "))}getLoadedPlugins(){return this.plugins}getPluginsInfo(){return this.plugins.map(e=>({matcher:e.config.matcher,metadata:e.config.metadata}))}async reload(){this.plugins=[],await this.load();}},Yr=(a,e)=>({handler:a,config:e});var We=class{classInjection(e,t){let s=t.length;return new Proxy(e,{get(o,n,i){if(n in o){let c=Reflect.get(o,n,i);return typeof c=="function"?c.bind(o):c}for(let c=0;c<s;c++){let l=t[c];if(n in l){let p=Reflect.get(l,n,i);return typeof p=="function"?p.bind(l):p}}},set(o,n,i,c){if(n in o)return Reflect.set(o,n,i,c);for(let l=0;l<s;l++){let p=t[l];if(n in p)return Reflect.set(p,n,i,c)}return Reflect.set(o,n,i,c)},has(o,n){if(n in e)return true;for(let i=0;i<s;i++)if(n in t[i])return true;return false},ownKeys(){let o=[];for(let n of Reflect.ownKeys(e))o.push(n);for(let n=0;n<s;n++)for(let i of Reflect.ownKeys(t[n]))o.includes(i)||o.push(i);return o},getOwnPropertyDescriptor(o,n){let i=Object.getOwnPropertyDescriptor(e,n);if(i)return i;for(let c=0;c<s;c++)if(i=Object.getOwnPropertyDescriptor(t[c],n),i)return i}})}};var _t=class{constructor(e){this.options=e;this.options=oe(Ft,e);let t=new We().classInjection(this,[new xe(this),new Te(this),new Ae(this),new Ce(this),new Se(this)]);return this._ready=this.initialize(t),t}listener;_ready;watchdog=null;logs;collector=new Ie;middleware=new Pe;plugins=new Ee;async initialize(e){await It(),await Tt(this),await this.plugins.load(),this.listener=new Me(e||this),this.logs=new Re(this),this.watchdog=ht({session:this.options.session,checkIntervalMs:6e4,staleThresholdMs:12e4,cooldownMs:6e4,maxRetries:3,onRecovery:async()=>{await this.initialize(e);}}),this.watchdog.start(),this.setupPrekeyErrorDetection();}prekeyDetected=false;setupPrekeyErrorDetection(){let e=console.log,t=this.watchdog,s=this;console.log=(...o)=>{let n=o.map(i=>String(i)).join(" ").toLowerCase();return (n.includes("closing open session")||n.includes("prekey bundle"))&&!s.prekeyDetected&&(s.prekeyDetected=true,r.spinner.warn(" Prekey bundle error detected"),t?.forceRecovery(),setTimeout(()=>{s.prekeyDetected=false;},6e4)),e.apply(console,o)};}ready(){return this._ready}db(e){return r.lowdb(this.options.session,`stores/${e}.json`)}on(e,t){r.events.on(e,t);}use(e){return this.middleware.use(e),this}get socket(){return r.get("socket")}async getMessageByChatId(e){let s=(await this.db("messages").all())?.flat()?.filter(o=>typeof o=="object")?.flat()?.find(o=>o?.key?.id===e);return await this.listener.messages.parse(s)}async getRoomName(e){let t=await this.db("chats").get(e),s=await this.db("contacts").get(e),o=I(t,["name","verifiedName","displayName"]),n=I(s,["notify","name"]);return P(o||n)||null}async getLabelName(e){let t=await this.db("messages").get(e),s=I(t,["message.protocolMessage.memberLabel"]);return P(s?.label)||null}};
4
+ `,n=e?"lime":"orange",i=await ms.text(t),c=cristal(i);console.log(c),console.log(M(s,"dimgray")),console.log(M(o,n));};var he=class{constructor(e){this.client=e;this.initialize();}async initialize(){r.spinner.start(" Initializing connection...");let e=r.get("socket"),t={},s=async()=>{t.status="reload",r.spinner.warn(" Connection lost. Attempting auto-reload..."),await this.client.initialize();},o=async()=>{await delay(3e3),r.spinner.warn(" Invalid session. Attempting auto cleaning creds..."),await delay(3e3),await it(this.client.options.session),await s();};if(this.client.options.authType==="pairing"&&this.client.options.phoneNumber&&!e.authState.creds.registered){r.spinner.update(" Generating pairing code..."),await delay(3500);try{t.authTimeout=Date.now()+6e4;let n=new Date(t.authTimeout).toLocaleTimeString(),i=await e.requestPairingCode(this.client.options.phoneNumber.toString());r.spinner.warn(` Pairing expired at ${cristal(n)}`),r.spinner.warn(` Pairing code: ${i}`),t.code=i;}catch{await o();}}e.ev.on("connection.update",async n=>{let{connection:i,lastDisconnect:c,qr:l}=n;if(t.status=i||"connecting",t.authType=this.client.options.authType,r.spinner.update(" Connection status: "+cristal(t.status)),this.client.options.authType==="qr"&&l){t.authTimeout=Date.now()+6e4;let p=new Date(t.authTimeout).toLocaleTimeString();r.spinner.warn(" Please scan the QR code..."),r.spinner.warn(` Qr code expired at ${cristal(p)}`),It(l),t.qr=l;return}if(i==="close"){let p=k(c?.error)?.output?.statusCode,h=c?.error?.message||"",T=typeof p=="number"&&p!==DisconnectReason.loggedOut,j=p===515||h.toLowerCase().includes("prekey");if(r.spinner.error(` [${p} - Closed] ${h}`),j){r.spinner.warn(" Session key mismatch detected, attempting repair..."),await me(this.client.options.session),await delay(1e3),await s();return}if(p===401||p===405){r.spinner.warn(" Session may be used by another device/instance."),r.spinner.warn(" If you want to connect here, close the other connection first."),r.spinner.warn(` Or use a different session name in your Client options.
5
+ `);return}if(p===500){r.spinner.error(" Server error occurred, attempting reconnect..."),await s();return}T&&await s();}if(i==="open")if(e.user?.id){let p=jidNormalizedUser(e.user.id).split("@")[0],h=e.user.name||e.user.verifiedName;r.spinner.success(` Connected as ${cristal(h||p)}`);}else r.spinner.success(" Connected!");r.events.emit("connection",t);}),e.ev.on("messaging-history.set",({progress:n})=>{t.status="syncing",t.syncProgress=n,r.spinner.start(" Syncing messages history..."),n&&r.spinner.update(` Syncing messages history ${n+"%"}`),n==100&&(r.spinner.success(" Syncing messages history completed!"),t.syncCompleted=true),r.events.emit("connection",t);});}};var Pt={text:"text",conversation:"text",imageMessage:"image",contactMessage:"contact",locationMessage:"location",documentMessage:"document",audioMessage:"audio",videoMessage:"video",protocolMessage:"protocol",contactsArrayMessage:"contacts",highlyStructuredMessage:"highlyStructured",sendPaymentMessage:"sendPayment",liveLocationMessage:"location",requestPaymentMessage:"requestPayment",declinePaymentRequestMessage:"declinePaymentRequest",cancelPaymentRequestMessage:"cancelPaymentRequest",templateMessage:"template",stickerMessage:"sticker",groupInviteMessage:"groupInvite",templateButtonReplyMessage:"buttons",productMessage:"product",deviceSentMessage:"deviceSent",listMessage:"lists",viewOnceMessage:"viewOnce",orderMessage:"order",listResponseMessage:"lists",ephemeralMessage:"ephemeral",invoiceMessage:"invoice",buttonsMessage:"buttons",buttonsResponseMessage:"buttons",paymentInviteMessage:"paymentInvite",interactiveMessage:"interactive",reactionMessage:"reaction",stickerSyncRmrMessage:"sticker",questionMessage:"question",nativeFlowResponseMessage:"lists",interactiveResponseMessage:"interactiveResponse",pollCreationMessage:"pollCreation",pollCreationMessageKey:"pollUpdate",pollUpdateMessage:"pollUpdate",keepInChatMessage:"keepInChat",documentWithCaptionMessage:"document",requestPhoneNumberMessage:"requestPhoneNumber",viewOnceMessageV2:"viewOnce",encReactionMessage:"reaction",editedMessage:"text",viewOnceMessageV2Extension:"viewOnce",pollCreationMessageV2:"pollCreation",scheduledCallCreationMessage:"scheduledCallCreation",groupMentionedMessage:"groupMentioned",pinInChatMessage:"pinInChat",pollCreationMessageV3:"pollCreation",scheduledCallEditMessage:"scheduledCallEdit",ptvMessage:"ptv",botInvokeMessage:"botInvoke",callLogMesssage:"callLog",encCommentMessage:"encComment",bcallMessage:"bcall",lottieStickerMessage:"lottieSticker",eventMessage:"event",commentMessage:"comment",newsletterAdminInviteMessage:"text",extendedTextMessageWithParentKey:"text",extendedTextMessage:"text",placeholderMessage:"placeholder",encEventUpdateMessage:"encEventUpdate"},Ze={whatsapp:"0@s.whatsapp.net",meta:"13135550002@s.whatsapp.net",chatgpt:"18002428478@s.whatsapp.net",copilot:"18772241042@s.whatsapp.net",instagram:"447723442971@s.whatsapp.net",tiktok:"6285574670498@s.whatsapp.net"};var ke=class{constructor(e){this.client=e;this.limiter=new RateLimiterMemory({points:this.client.options.limiter?.maxMessages,duration:this.client.options.limiter?.durationMs/1e3});}limiter;async isSpam(e){try{return await this.limiter.consume(e),!1}catch{return true}}};var ve=class{constructor(e){this.client=e;this.limiter=new ke(e),this.initialize();}limiter;maxReplies=3;async initialize(){let e=r.get("socket");e.ev.on("messages.upsert",async({messages:t,type:s})=>{if(s==="notify")for(let o of t){let n=await this.parse(o);n&&(this.client.collector.push(n)||(await this.client.middleware.run({messages:n}),await this.client.plugins.execute(this.client,{messages:n}),r.set("message",n),r.events.emit("messages",n)),this.client.options.autoRead&&await e.readMessages([n.message().key]));}});}async parse(e,t){if(e?.category==="peer"||!e?.message||!e?.key?.id||e?.messageStubType||e?.messageStubParameters?.length||e.message?.protocolMessage?.peerDataOperationRequestResponseMessage||e.message?.groupStatusMentionMessage)return;let s=e,o=r.get("socket"),n={},i=re(e.message),c=i.chain.at(-1),l=i.leaf;l?.message&&(i=re(l.message),c=i.chain.at(-1),l=i.leaf),n.uniqueId=null,n.channelId=null,n.chatId=e?.message?.protocolMessage?.key?.id||e?.key?.id||null,n.chatType=Pt[c],n.receiverId=jidNormalizedUser(o?.user?.id||""),n.receiverName=P(o?.user?.name||o?.user?.verifiedName),n.roomId=jidNormalizedUser(e?.key?.remoteJid);let p=l?.type===0,h=l?.type===1,T=l?.type===2,j=n.roomId?.includes("@newsletter"),De=!!e?.message?.questionMessage,J=e?.key?.fromMe||false;if(J&&this.client.options.ignoreMe&&t!=="replied")return;let Ne=l?.key?.id;if(p||h||T){let C=(await this.client.db("messages").get(n.roomId))?.find(_=>_.key.id===Ne);if(!C)return;e=C,i=re(e.message),c=i.chain.at(-1),l=i.leaf;}if(n.roomName=await this.client.getRoomName(n.roomId),n.senderLid=I([e?.key],["remoteJidAlt","participant"])||null,n.senderId=jidNormalizedUser(e?.participant||e?.key?.participant||e?.key?.remoteJid),n.senderName=P(e?.pushName||e?.verifiedBizName),n.senderDevice=getDevice(n.chatId),n.channelId=z([n.roomId,n.senderId]),n.uniqueId=z([n.channelId,n.chatId]),n.timestamp=Number(e?.messageTimestamp)*1e3,j){let R=await o.newsletterMetadata("jid",n.roomId);n.roomName=k(R.thread_metadata.name)?.text,n.senderId=null,n.senderLid=null;}if(J&&(n.senderLid=jidNormalizedUser(o.user.lid),n.senderId=n.receiverId,n.senderName=n.receiverName),n.text=l?.text||l?.caption||l?.name||l?.displayName||l?.conversation||l?.contentText||l?.selectedDisplayText||l||null,l?.name=="menu_options"&&(n.text=Le(l?.paramsJson)?.id),n.text=P(n.text),n.mentions=lt(n.text),n.links=at(n.text||""),n.isBot=n.chatId.startsWith("BAE5")||n.chatId.startsWith("3EB0")||n.chatId.startsWith("Z4D3FC"),n.isFromMe=J,n.isTagMe=n.mentions?.includes(n.receiverId.split("@")[0]),n.isPrefix=n.text?.startsWith(this.client.options?.prefix)||false,n.isSpam=await this.limiter.isSpam(n.channelId),n.isPrefix&&(n.text=n.text.replace(new RegExp(`^${this.client.options?.prefix}`),"")),n.isGroup=n.roomId?.includes("@g.us"),n.isNewsletter=j,n.isQuestion=De,n.isStory=n.roomId?.includes("@broadcast"),!n.isGroup&&!n.roomName&&(n.roomName=n.senderName),n.isViewOnce=false,n.isEdited=!!Y(Q(i),"editedMessage"),n.isDeleted=p,n.isPinned=h,n.isUnPinned=T,n.isBroadcast=!!e?.broadcast,n.isEphemeral=!!Y(Q(l?.contextInfo),"ephemeralSettingTimestamp"),n.isForwarded=!!Y(Q(l?.contextInfo),"forwardingScore"),n.citation=null,this.client.options.citation){n.citation=n.citation||{};let R=this.client.options.citation;for(let C of Object.keys(R)){let _=R[C];n.citation[C]=async()=>{let K=await _(),Fe=[N(n.roomId),N(n.senderLid),N(n.senderId)];return !!x.intersection(Fe,K).length};}}n.chatType!=="text"&&(n.media={...pt(l),buffer:()=>downloadMediaMessage(e,"buffer",{}),stream:()=>downloadMediaMessage(e,"stream",{})}),n.message=()=>s,n.replied=null;let L=l?.contextInfo?.quotedMessage,B=I([L],["viewOnceMessageV2Extension","viewOnceMessage"]);B=Y(Q(L),"viewOnce")?L:B;let G=l?.contextInfo?.stanzaId;if(L&&this.maxReplies){this.maxReplies--;let C=(await this.client.db("messages").get(n.roomId))?.find(K=>K.key.id===G),_={...C,message:B};B?(n.replied=await this.parse(_,"replied"),n.replied.isViewOnce=true):n.replied=await this.parse(C,"replied"),this.maxReplies=3;}return t!="replied"&&this.client.logs.message(n),n}};var be=class{constructor(e){this.client=e;this.connection=new he(e),this.messages=new ve(e),this.calls=new de(e),this.initialize();}connection;messages;calls;async initialize(){let e=r.get("socket");e.ev.on("groups.update",async([t])=>{let s=await e.groupMetadata(t.id);r.groupCache.set(t.id,s);}),e.ev.on("group-participants.update",async t=>{let s=await e.groupMetadata(t.id);r.groupCache.set(t.id,s);}),e?.ev.on("messaging-history.set",async t=>{let{chats:s,contacts:o,messages:n}=t;for(let i of s)await this.client.db("chats").upsert(i.id,i,"id");for(let i of o)await this.client.db("contacts").upsert(i.id,i,"id");for(let i of n){if(!i.message&&!i.key.isViewOnce||i?.category==="peer"||i.message?.protocolMessage&&!i.message?.protocolMessage?.memberLabel||i.message?.groupStatusMentionMessage)return;await this.client.db("messages").upsert(i.key.remoteJid,i,"key.id");}}),e?.ev.on("messages.upsert",async({messages:t})=>{for(let s of t){if(!s.message&&!s.key.isViewOnce||s?.category==="peer"||s.message?.protocolMessage&&!s.message?.protocolMessage?.memberLabel||s.message?.groupStatusMentionMessage)return;await this.client.db("messages").upsert(s.key.remoteJid,s,"key.id");}}),e?.ev.on("chats.upsert",async t=>{for(let s of t)await this.client.db("chats").upsert(s.id,s,"id");}),e?.ev.on("contacts.upsert",async t=>{for(let s of t)await this.client.db("contacts").upsert(s.id,s,"id");});}};var oe=(a,e)=>{let t=a.safeParse(e);if(t.success)return t.data;throw console.error(t.error),"Invalid data"};var vs=u.object({type:u.literal("quick_reply"),text:u.string()}),bs=u.object({type:u.literal("cta_url"),url:u.url(),text:u.string()}),Ms=u.object({type:u.literal("cta_copy"),copy:u.string(),text:u.string()}),xs=u.object({type:u.literal("cta_call"),text:u.string(),phoneNumber:u.string()}),Ss=u.object({type:u.literal("single_select"),text:u.string(),section:u.object({title:u.string(),highlight_label:u.string().optional(),rows:u.object({id:u.string(),title:u.string(),header:u.string().optional(),description:u.string().optional()}).array()}).array()}),Ts=u.object({type:u.literal("interactive"),footer:u.string().optional(),data:u.union([vs,bs,Ms,xs,Ss]).array()}),Cs=u.object({type:u.literal("simple"),footer:u.string().optional(),data:u.object({id:u.string(),text:u.string()}).array()}),Wt=u.union([Cs,Ts]);var ie=u.url().or(u.base64()).or(u.instanceof(Buffer)),Dt=u.object({text:u.string()}).passthrough(),As=u.object({image:ie,caption:u.string().optional()}).passthrough(),Is=u.object({audio:ie,caption:u.string().optional(),ptt:u.boolean().optional()}).passthrough(),Rs=u.object({video:ie,caption:u.string().optional(),ptv:u.boolean().optional()}).passthrough(),Ps=u.object({sticker:ie,caption:u.string().optional()}).passthrough(),Es=u.object({document:ie,caption:u.string().optional(),fileName:u.string().optional()}).passthrough(),Ws=u.object({location:u.object({latitude:u.number(),longitude:u.number(),url:u.url().optional(),title:u.string().optional(),footer:u.string().optional()}).optional()}).passthrough(),Ds=u.object({title:u.string().optional(),contacts:u.object({fullname:u.string(),phoneNumber:u.number(),organization:u.string().optional()}).array()}),Ns=u.object({poll:u.object({name:u.string(),answers:u.string().array(),isMultiple:u.boolean().default(false).optional()})}),Nt=u.object({replied:u.custom().optional(),isForwardedMany:u.boolean().optional(),isViewOnce:u.boolean().optional(),banner:u.custom().optional(),buttons:Wt.optional()});u.enum(["forward","button","edit","delete"]);var Fs=u.union([Dt,As,Is,Rs,Ps,Es,Ws,Ds,Ns]),Ft=u.string().or(u.intersection(Fs,Nt.omit({buttons:true}))),Ot=u.intersection(Dt,Nt.omit({banner:true}));var Me=class{toNativeSimple(e){return e.map(({id:t,text:s})=>({name:"quick_reply",buttonParamsJson:JSON.stringify({display_text:s,id:t})}))}toNativeInteractive(e){let t={quick_reply:s=>({display_text:s.text,id:s.id}),cta_url:s=>({display_text:s.text,url:s.url,merchant_url:s.url}),cta_copy:s=>({display_text:s.text,id:s.id,copy_code:s.copy}),cta_call:s=>({display_text:s.text,phone_number:s.phoneNumber}),single_select:s=>({title:s.text,sections:s.section})};return e.map(s=>({name:s.type,buttonParamsJson:JSON.stringify(t[s.type](s))}))}build(e){let t=k(e).buttons,s=t?.data||[],n=t?.type=="simple"?this.toNativeSimple(s):this.toNativeInteractive(s);return {body:{text:k(e).text},footer:t.footer?{text:t.footer}:void 0,nativeFlowMessage:{buttons:n}}}async send(e,t,s){let o=r.get("socket"),n=o.authState?.creds?.me?.id||o.user?.id,i=this.build(t),c=generateWAMessageFromContent(e,{interactiveMessage:i},{userJid:n,messageId:generateMessageIDV2(n),...s});return await o.relayMessage(e,c.message,{messageId:c.key.id,...s,additionalNodes:[{tag:"biz",attrs:{},content:[{tag:"interactive",attrs:{type:"native_flow",v:"1"},content:[{tag:"native_flow",attrs:{v:"9",name:"mixed"}}]}]}]}),o.config?.emitOwnEvents&&!isJidGroup(e)&&process.nextTick(()=>o.upsertMessage?.(c,"append")),c}};var xe=class{constructor(e){this.client=e;}async signal(e,t,s,o){s!="delete"&&(s=="button"?t=oe(Ot,t):t=oe(Ft,t));let n=r.get("socket"),i={},c={},l=x.isString(t),p=this.client.options?.fakeReply?.provider,h=this.client.options?.autoMentions,T=this.client.options?.autoPresence,j=x.has(t,"replied"),De=x.has(t,"banner"),J=x.has(t,"isViewOnce"),Ne=s=="button",L=x.has(t,"image"),B=x.has(t,"video"),G=x.has(t,"audio"),R=x.has(t,"sticker"),C=x.has(t,"document"),_=x.has(t,"location"),K=x.has(t,"contacts"),Fe=x.has(t,"poll"),st=L||B||G||R||C,H=l?t:I([t],["text","caption"]);if(T&&(G?await n.sendPresenceUpdate("recording",e):await n.sendPresenceUpdate("composing",e)),h&&(i={...i,mentions:Be(H),contextInfo:{mentionedJid:Be(H)}}),j&&(c.quoted=k(t).replied,p&&(c.quoted.key.remoteJid=Ze[p],c.quoted.key.participant=Ze[p])),De&&(i={...i,contextInfo:{externalAdReply:k(t).banner}},i.contextInfo.externalAdReply.mediaType=1),J&&(i={...i,viewOnce:k(t)?.isViewOnce}),H&&(i={...i,text:H,caption:H},st&&delete k(i).text),st){let v=I([t],["image","video","audio","sticker","document"]),W=x.isString(v)?{url:v}:v;if(L&&(i={...i,image:W,jpegThumbnail:await Ue(v)}),B){let D=k(t)?.ptv;i={...i,video:W,ptv:D,jpegThumbnail:await Ue(v)};}if(G){let D=k(t)?.ptt;i={...i,audio:await mt(v),ptt:D,mimetype:D?"audio/ogg; codecs=opus":"audio/mpeg"};}if(R&&(i={...i,sticker:await dt(v,this.client.options?.sticker)}),C){let D=await ft(v);i={...i,fileName:k(t).fileName,...D};}}if(_){let v=k(t).location;i={...i,location:{degreesLatitude:v.latitude,degreesLongitude:v.longitude,url:v.url,address:v.footer,name:v.title}};}if(K){let v=k(t)?.contacts,nt=v?.contacts.map(W=>{let D=["BEGIN:VCARD","VERSION:3.0",`FN:${W.fullname}`,`ORG:${W.organization||""}`,`TEL;type=CELL;type=VOICE;waid=${W.phoneNumber}:${W.phoneNumber}`,"END:VCARD"].join(`
6
+ `);return {displayName:W.fullname,vcard:D}});i={...i,contacts:{displayName:v?.title,contacts:nt}};}if(Fe){let v=k(t)?.poll;i={...i,poll:{name:v.name,values:v.answers,selectableCount:v.isMultiple?1:0,toAnnouncementGroup:true}};}return s=="forward"&&(i={...i,contextInfo:{...k(i).contextInfo,isForwarded:true,forwardingScore:k(t).isForwardedMany?9999:1}}),s=="edit"&&(i={...i,edit:o?.key},await n.sendPresenceUpdate("paused",e)),s=="delete"&&(i={...i,delete:o?.key},await n.sendPresenceUpdate("paused",e)),Ne?await new Me().send(e,t,c):await n.sendMessage(e,k(i),c)}async send(e,t){return await this.signal(e,t)}async forward(e,t){return await this.signal(e,t,"forward")}async button(e,t){return await this.signal(e,t,"button")}async edit(e,t){return await this.signal(e.key.remoteJid,t,"edit",e)}async delete(e){return x.isArray(e)?Promise.all(e.map(t=>this.signal(t.key.remoteJid,{},"delete",t))):await this.signal(e.key.remoteJid,{},"delete",e)}async presence(e,t){let s=r.get("socket"),o={typing:"composing",recording:"recording",online:"available",offline:"unavailable",paused:"paused"};return await s.sendPresenceUpdate(o[t],e)}async reaction(e,t){return await r.get("socket").sendMessage(e.key.remoteJid,{react:{text:t,key:e?.key}})}async memberLabel(e,t){return await r.get("socket").relayMessage(e,{protocolMessage:{type:30,memberLabel:{label:t,labelTimestamp:Date.now()}}},{})}};var Qe=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").communityCreate(e,t)}async createGroup(e,t,s){return await r.get("socket").communityCreateGroup(e,t,s)}async leave(e){return await r.get("socket").communityLeave(e)}async metadata(e){return await r.get("socket").communityMetadata(e)}async update(e,t,s){let o=r.get("socket");switch(t){case "subject":return await o.communityUpdateSubject(e,s);case "description":return await o.communityUpdateDescription(e,s)}}async group(e,t,s){let o=r.get("socket");switch(t){case "link":if(!s)throw "Group JID is required for linking";return await o.communityLinkGroup(e,s);case "unlink":if(!s)throw "Group JID is required for unlinking";return await o.communityUnlinkGroup(e,s);case "linked":return await o.communityFetchLinkedGroups(e)}}async participants(e,t,s,o){let n=r.get("socket");switch(t){case "list":return await n.communityRequestParticipantsList(e);case "request-update":return await n.communityRequestParticipantsUpdate(e,o,k(s));case "update":if(!s||!o)throw "Action and participants are required for update";return await n.communityParticipantsUpdate(e,o,k(s));case "all":return await n.communityFetchAllParticipating()}}async invite(e,t,...s){let o=r.get("socket");switch(t){case "code":return await o.communityInviteCode(e);case "revoke":return await o.communityRevokeInvite(e);case "accept":return await o.communityAcceptInvite(e);case "info":return await o.communityGetInviteInfo(e);case "revokeV4":return await o.communityRevokeInviteV4(e,s[0]);case "acceptV4":return await o.communityAcceptInviteV4(e,s[0])}}async settings(e,t,s){let o=r.get("socket");switch(t){case "ephemeral":return await o.communityToggleEphemeral(e,s);case "update":return await o.communitySettingUpdate(e,s);case "memberAdd":return await o.communityMemberAddMode(e,s);case "approval":return await o.communityJoinApprovalMode(e,s)}}},Se=class{constructor(e){this.mlient=e;this.community=new Qe(e);}community};var Ye=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").groupCreate(e,t)}async participant(e,t,s){return await r.get("socket").groupParticipantsUpdate(e,t,s)}async profile(e,t,s){let o=r.get("socket"),n=Buffer.isBuffer(t);switch(s){case "subject":if(!n)return await o.groupUpdateSubject(e,t);case "description":if(!n)return await o.groupUpdateDescription(e,t);case "picture":return await o.updateProfilePicture(e,ue(t))}}async setting(e,t){let s=r.get("socket");switch(t){case "open":return await s.groupSettingUpdate(e,"not_announcement");case "close":return await s.groupSettingUpdate(e,"announcement");case "locked":return await s.groupSettingUpdate(e,t);case "unlocked":return await s.groupSettingUpdate(e,t);case "all_member_add":return await s.groupMemberAddMode(e,t);case "admin_add":return await s.groupMemberAddMode(e,t)}}async leave(e){return await r.get("socket").groupLeave(e)}async inviteCode(e,t){let s=r.get("socket");switch(t){case "code":return await s.groupInviteCode(e);case "revoke":return await s.groupRevokeInvite(e);case "accept":return await s.groupAcceptInvite(e);case "info":return await s.groupGetInviteInfo(e)}}async metadata(e){return await r.get("socket").groupMetadata(e)}async requestJoin(e,t,s){let o=r.get("socket");switch(s){case "approve":return await o.groupRequestParticipantsUpdate(e,t,s);case "reject":return await o.groupRequestParticipantsUpdate(e,t,s)}}async requestJoinList(e){return await r.get("socket").groupRequestParticipantsList(e)}async fetchAllGroups(){return await r.get("socket").groupFetchAllParticipating()}async ephemeral(e,t){let s=r.get("socket"),o={off:0,"24h":86400,"7d":604800,"90d":7776e3};return await s.groupToggleEphemeral(e,o[t])}},Te=class{constructor(e){this.glient=e;this.group=new Ye(e);}group};var Xe=class{constructor(e){this.client=e;}async create(e,t){return await r.get("socket").newsletterCreate(e,t)}async action(e,t){let s=r.get("socket");switch(t){case "follow":return await s.newsletterFollow(e);case "unfollow":return await s.newsletterUnfollow(e);case "mute":return await s.newsletterMute(e);case "unmute":return await s.newsletterUnmute(e);}}async update(e,t,s){let o=r.get("socket"),n=Buffer.isBuffer(t);switch(s){case "name":if(!n)return await o.newsletterUpdateName(e,t);case "description":if(!n)return await o.newsletterUpdateDescription(e,t);case "picture":return await o.newsletterUpdatePicture(e,ue(t))}}async metadata(e,t){return await r.get("socket").newsletterMetadata(t,e)}async subscribers(e){return await r.get("socket").newsletterSubscribers(e)}async reaction(e,t,s){return await r.get("socket").newsletterReactMessage(e,t,s)}async fetchMessages(e,t,s,o){let n=r.get("socket"),i=s.getTime()/1e3,c=o.getTime()/1e3;return await n.newsletterFetchMessages(e,t,i,c)}async adminCount(e){return await r.get("socket").newsletterAdminCount(e)}async changeOwner(e,t){return await r.get("socket").newsletterChangeOwner(e,t)}async demote(e,t){return await r.get("socket").newsletterDemote(e,t)}async delete(e){return await r.get("socket").newsletterDelete(e)}async removePicture(e){return await r.get("socket").newsletterRemovePicture(e)}},Ce=class{constructor(e){this.nlient=e;this.newsletter=new Xe(e);}newsletter};var et=class{constructor(e){this.client=e;}async block(e){return await r.get("socket").updateBlockStatus(e,"block")}async unblock(e){return await r.get("socket").updateBlockStatus(e,"unblock")}async lastSeen(e){return await r.get("socket").updateLastSeenPrivacy(e)}async online(e){return await r.get("socket").updateOnlinePrivacy(e)}async picture(e){return await r.get("socket").updateProfilePicturePrivacy(e)}async status(e){return await r.get("socket").updateStatusPrivacy(e)}async readReceipt(e){return await r.get("socket").updateReadReceiptsPrivacy(e)}async groupsAdd(e){return await r.get("socket").updateGroupsAddPrivacy(e)}async ephemeral(e){let t=r.get("socket"),s={off:0,"24h":86400,"7d":604800,"90d":7776e3};return await t.updateDefaultDisappearingMode(s[e])}async blocklist(){return await r.get("socket").fetchBlocklist()}async getSettings(){return await r.get("socket").fetchPrivacySettings(true)}},Ae=class{constructor(e){this.plient=e;this.privacy=new et(e);}privacy};var _s=z$1.object({maxMessages:z$1.number().default(20),durationMs:z$1.number().default(1e4)}).optional(),$s=z$1.record(z$1.string(),z$1.function({output:z$1.promise(z$1.array(z$1.number()))})).optional(),js=z$1.object({provider:z$1.enum(["whatsapp","meta","chatgpt","copilot","instagram","tiktok"]).or(z$1.number())}).optional(),zs=z$1.object({packageName:z$1.string(),authorName:z$1.string(),quality:z$1.number()}).optional(),Lt=z$1.object({session:z$1.string().default("zaileys").optional(),prefix:z$1.string().optional(),ignoreMe:z$1.boolean().default(true).optional(),showLogs:z$1.boolean().default(true).optional(),syncFullHistory:z$1.boolean().default(true).optional(),disableFFmpeg:z$1.boolean().default(false).optional(),autoMarkAI:z$1.boolean().default(true).optional(),autoMentions:z$1.boolean().default(true).optional(),autoOnline:z$1.boolean().default(true).optional(),autoRead:z$1.boolean().default(true).optional(),autoPresence:z$1.boolean().default(true).optional(),autoRejectCall:z$1.boolean().default(true).optional(),limiter:_s,citation:$s,fakeReply:js,sticker:zs}),Us=z$1.object({authType:z$1.literal("pairing"),phoneNumber:z$1.number()}),qs=z$1.object({authType:z$1.literal("qr")}),Bt=z$1.union([Us.extend(Lt.shape),qs.extend(Lt.shape)]),yr=z$1.enum(["connection","messages","calls"]);var vr=u.object({status:u.enum(["connecting","open","close","reload","syncing"]),authType:u.enum(["pairing","qr"]),authTimeout:u.number().optional(),syncProgress:u.number().optional(),syncCompleted:u.boolean().default(false).optional(),qr:u.string().optional(),code:u.string().optional()});var Js=u.enum(["unknown","android","ios","desktop","web"]),Gs=u.enum(["text","image","contact","location","document","audio","video","protocol","contacts","highlyStructured","sendPayment","requestPayment","declinePaymentRequest","cancelPaymentRequest","template","sticker","groupInvite","product","deviceSent","lists","viewOnce","order","ephemeral","invoice","buttons","paymentInvite","interactive","reaction","sticker","interactiveResponse","pollCreation","pollUpdate","keepInChat","document","requestPhoneNumber","viewOnce","reaction","text","viewOnce","pollCreation","scheduledCallCreation","groupMentioned","pinInChat","pollCreation","scheduledCallEdit","ptv","botInvoke","callLog","encComment","bcall","lottieSticker","event","comment","placeholder","encEventUpdate"]),_t=u.object({channelId:u.string(),uniqueId:u.string(),chatId:u.string(),chatType:Gs,receiverId:u.string(),receiverName:u.string(),roomId:u.string(),roomName:u.string(),senderLid:u.string(),senderId:u.string(),senderName:u.string(),senderDevice:Js,timestamp:u.number(),text:u.string().nullable(),mentions:u.string().array(),links:u.string().array(),isBot:u.boolean(),isFromMe:u.boolean(),isPrefix:u.boolean(),isSpam:u.boolean(),isTagMe:u.boolean(),isGroup:u.boolean(),isNewsletter:u.boolean(),isQuestion:u.boolean(),isStory:u.boolean(),isViewOnce:u.boolean(),isEdited:u.boolean(),isDeleted:u.boolean(),isPinned:u.boolean(),isUnPinned:u.boolean(),isBroadcast:u.boolean(),isEphemeral:u.boolean(),isForwarded:u.boolean(),citation:u.record(u.string(),u.function({output:u.promise(u.boolean())})).nullable(),media:u.object({buffer:u.function({output:u.promise(u.instanceof(Buffer))}),stream:u.function({output:u.promise(u.instanceof(Vs))})}).loose().nullable(),message:u.function({input:[],output:u.custom()})}),Tr=_t.extend({replied:_t.nullable()});var Rr=u.object({callId:u.string(),callerId:u.string(),callerName:u.string(),roomId:u.string(),roomName:u.string(),date:u.date(),offline:u.boolean(),status:u.enum(["accept","offer","reject","ringing","terminate","timeout"]),isVideo:u.boolean(),isGroup:u.boolean()});var Ie=class{collect(e,t,s){let o=t.max??1/0;if(o<=0){s([]);return}let n=r.collectors.get(e);n&&(clearTimeout(n.timeoutId),n.callback(n.messages),r.collectors.delete(e));let i=setTimeout(()=>{let c=r.collectors.get(e);c&&(c.callback(c.messages),r.collectors.delete(e));},t.timeout);r.collectors.set(e,{messages:[],max:o,filter:t.filter,callback:s,timeoutId:i});}push(e){let t=r.collectors.get(e.channelId);return !t||t.filter&&!t.filter(e)?false:(t.messages.push(e),t.messages.length>=t.max&&(clearTimeout(t.timeoutId),t.callback(t.messages),r.collectors.delete(e.channelId)),true)}has(e){return r.collectors.has(e)}cancel(e){let t=r.collectors.get(e);return t?(clearTimeout(t.timeoutId),t.callback(t.messages),r.collectors.delete(e),t.messages):[]}};var Re=class{constructor(e){this.client=e;this.initialize();}logsInitialized=false;logsDisplayed=false;isReady=false;getRoomColor(e){return e?.isNewsletter?"blue":e?.isGroup?e?.isGroup?"lime":"dimgray":"orange"}initialize(){if(!this.client.options.showLogs||this.logsInitialized)return;this.logsInitialized=true,r.get("socket").ev.on("connection.update",({connection:t})=>{this.logsDisplayed||t==="open"&&(this.logsDisplayed=true,this.isReady=true,console.log(),r.spinner.info("Logs Indicator:"),console.log(M(" \u2022","orange")+" Private Chat"),console.log(M(" \u2022","lime")+" Group Chat"),console.log(M(" \u2022","blue")+" Newsletter Chat"),console.log());});}message(e){if(!this.isReady)return;let t=k(this.getRoomColor(e)),s=e?.text?.toLowerCase()?.match("zaileys"),o=M(`[${new Date(e?.timestamp).toTimeString().split(" ")[0]}]`,"dimgray"),n=M(`${e?.roomName}`,t),i=e?.text?.slice(0,300)||"",c=i?.length>=300?"...":"",l=`${o} \u2192 ${n}
7
+ `;e?.isNewsletter?l+=`${M("[room]","dimgray")} \u2192 ${M(`${e?.roomName} (${N(e?.roomId)})`,t)}
8
+ `:l+=`${M("[sender]","dimgray")} \u2192 ${M(`${e?.senderName} (${N(e?.senderId)})`,t)}
9
+ `,l+=`${M(`[${e?.chatType||"unknown"}]`,"dimgray")} \u2192 ${M(i+c,s?["#ff5f6d","#ffc371"]:"brown")}
10
+ `,l+="\u2014",console.log(l);}call(e){if(!r.get("logs")?.ready)return;let t=k(this.getRoomColor(e)),s=M(`[${new Date(e?.date).toTimeString().split(" ")[0]}]`,"dimgray"),o=M(`${e?.roomName}`,t),n=`${s} \u2192 ${o}
11
+ `;n+=`${M("[caller]","dimgray")} \u2192 ${M(`${e?.callerName} (${N(e?.callerId)})`,t)}
12
+ `,n+=`${M(`[${e?.status}]`,"dimgray")} \u2192 ${M(e?.isVideo?"Video Call":"Voice Call","brown")}
13
+ `,n+="\u2014",console.log(n);}};var Pe=class{stack=[];use(e){return this.stack.push(e),this}async run(e){let t=-1,s=async o=>{if(o<=t)throw "next() called multiple times";t=o;let n=this.stack[o];if(n)try{await n(e,()=>s(o+1));}catch(i){throw console.error("Middleware error:",i),i}};await s(0);}};var Ee=class{plugins=[];pluginsDir;constructor(e=ze.join(process.cwd(),"plugins")){this.pluginsDir=e;}getAllFiles(e,t=[]){if(!$.existsSync(e))return t;let s=$.readdirSync(e);for(let o of s){let n=ze.join(e,o);$.statSync(n).isDirectory()?this.getAllFiles(n,t):(o.endsWith(".ts")||o.endsWith(".js"))&&!o.endsWith(".d.ts")&&t.push(n);}return t}async load(){if(!$.existsSync(this.pluginsDir))return;let e=this.getAllFiles(this.pluginsDir);for(let t of e)try{let o=(await import(pathToFileURL(t).href)).default;o?.default&&(o=o.default),o?.handler&&o?.config&&this.plugins.push(o);}catch{}}async execute(e,t){let s=t.messages.text||"";for(let o of this.plugins)try{this.match(s,o.config.matcher)&&await o.handler(e,t);}catch{}}match(e,t){return t.some(s=>e===s||e.startsWith(s+" "))}getLoadedPlugins(){return this.plugins}getPluginsInfo(){return this.plugins.map(e=>({matcher:e.config.matcher,metadata:e.config.metadata}))}async reload(){this.plugins=[],await this.load();}},Hr=(a,e)=>({handler:a,config:e});var We=class{classInjection(e,t){let s=t.length;return new Proxy(e,{get(o,n,i){if(n in o){let c=Reflect.get(o,n,i);return typeof c=="function"?c.bind(o):c}for(let c=0;c<s;c++){let l=t[c];if(n in l){let p=Reflect.get(l,n,i);return typeof p=="function"?p.bind(l):p}}},set(o,n,i,c){if(n in o)return Reflect.set(o,n,i,c);for(let l=0;l<s;l++){let p=t[l];if(n in p)return Reflect.set(p,n,i,c)}return Reflect.set(o,n,i,c)},has(o,n){if(n in e)return true;for(let i=0;i<s;i++)if(n in t[i])return true;return false},ownKeys(){let o=[];for(let n of Reflect.ownKeys(e))o.push(n);for(let n=0;n<s;n++)for(let i of Reflect.ownKeys(t[n]))o.includes(i)||o.push(i);return o},getOwnPropertyDescriptor(o,n){let i=Object.getOwnPropertyDescriptor(e,n);if(i)return i;for(let c=0;c<s;c++)if(i=Object.getOwnPropertyDescriptor(t[c],n),i)return i}})}};var $t=class{constructor(e){this.options=e;this.options=oe(Bt,e);let t=new We().classInjection(this,[new xe(this),new Te(this),new Ae(this),new Ce(this),new Se(this)]);return this._ready=this.initialize(t),t}listener;_ready;watchdog=null;logs;collector=new Ie;middleware=new Pe;plugins=new Ee;async initialize(e){await Rt(),await ut(this.options.disableFFmpeg),await Ct(this),await this.plugins.load(),this.listener=new be(e||this),this.logs=new Re(this),this.watchdog=kt({session:this.options.session,checkIntervalMs:6e4,staleThresholdMs:12e4,cooldownMs:6e4,maxRetries:3,onRecovery:async()=>{await this.initialize(e);}}),this.watchdog.start(),this.setupPrekeyErrorDetection();}prekeyDetected=false;setupPrekeyErrorDetection(){let e=console.log,t=this.watchdog,s=this;console.log=(...o)=>{let n=o.map(i=>String(i)).join(" ").toLowerCase();return (n.includes("closing open session")||n.includes("prekey bundle"))&&!s.prekeyDetected&&(s.prekeyDetected=true,r.spinner.warn(" Prekey bundle error detected"),t?.forceRecovery(),setTimeout(()=>{s.prekeyDetected=false;},6e4)),e.apply(console,o)};}ready(){return this._ready}db(e){return r.lowdb(this.options.session,`stores/${e}.json`)}on(e,t){r.events.on(e,t);}use(e){return this.middleware.use(e),this}get socket(){return r.get("socket")}async getMessageByChatId(e){let s=(await this.db("messages").all())?.flat()?.filter(o=>typeof o=="object")?.flat()?.find(o=>o?.key?.id===e);return await this.listener.messages.parse(s)}async getRoomName(e){let t=await this.db("chats").get(e),s=await this.db("contacts").get(e),o=I(t,["name","verifiedName"]),n=I(s,["notify","name"]);return P(o||n)||null}async getLabelName(e){let t=await this.db("messages").get(e),s=I(t,["message.protocolMessage.memberLabel"]);return P(s?.label)||null}};
14
14
  /*
15
15
  * Copyright (c) 2025 zaadevofc.
16
16
  * All rights reserved.
@@ -18,7 +18,7 @@ by ${fe.author} \xB7 v${fe.version}`,o=`${e?"Already using latest version!":`Upd
18
18
  * See LICENSE file for details.
19
19
 
20
20
  * Author: zaadevofc
21
- * Last build time: 12/15/2025 2:15:09 PM
21
+ * Last build time: 12/15/2025 10:28:53 PM
22
22
  *
23
23
  * Repository: git+https://github.com/zeative/zaileys.git
24
- */export{ae as AudioProcessor,Bt as BaseMessagesType,Ss as ButtonInteractiveCallType,xs as ButtonInteractiveCopyType,Ms as ButtonInteractiveReplyType,Ts as ButtonInteractiveSingleSelectType,Cs as ButtonInteractiveType,bs as ButtonInteractiveUrlType,As as ButtonSimpleType,Et as ButtonType,js as CitationType,_t as Client,qs as ClientAuthPairingType,Vs as ClientAuthQRType,Lt as ClientBaseType,Ft as ClientOptionsType,Gs as DEVICE_ENUM_TYPES,pe as DocumentProcessor,wr as EventEnumType,zs as FakeReplyType,ce as ImageProcessor,$s as LimiterType,Wr as ListenerCallsType,xr as ListenerConnectionType,Ir as ListenerMessagesType,Ke as Lowdb,Ks as MESSAGE_ENUM_TYPES,se as MediaProcessor,Ee as Plugins,qe as SessionWatchdog,Us as StickerMetadataType,le as StickerProcessor,O as VideoProcessor,N as cleanJid,pt as cleanMediaObject,gt as cleanupSocket,Z as createLowdb,ht as createWatchdog,Yr as definePlugins,Be as extractJids,at as extractUrls,Y as findGlobalWord,ct as findNestedByKeys,z as generateId,re as getDeepContent,yt as getExistingSocket,ot as getLatestLibVersion,Ue as getMediaThumbnail,lt as getUsersMentions,Ln as getVideoDuration,On as getVideoThumbnail,ut as getWaAudio,dt as getWaDocument,mt as getWaSticker,Vn as getWatchdog,k as ignoreLint,b as logColor,fn as modifyFn,P as normalizeText,vn as numbersToJids,I as pickKeysFromArray,dn as randomize,Tt as registerAuthCreds,it as removeAuthCreds,me as repairSessionKeys,mn as shuffleString,ue as toBuffer,Fe as toJson,Q as toString,xt as useAuthState};
24
+ */export{ae as AudioProcessor,_t as BaseMessagesType,xs as ButtonInteractiveCallType,Ms as ButtonInteractiveCopyType,vs as ButtonInteractiveReplyType,Ss as ButtonInteractiveSingleSelectType,Ts as ButtonInteractiveType,bs as ButtonInteractiveUrlType,Cs as ButtonSimpleType,Wt as ButtonType,$s as CitationType,$t as Client,Us as ClientAuthPairingType,qs as ClientAuthQRType,Lt as ClientBaseType,Bt as ClientOptionsType,Js as DEVICE_ENUM_TYPES,pe as DocumentProcessor,yr as EventEnumType,js as FakeReplyType,ce as ImageProcessor,_s as LimiterType,Rr as ListenerCallsType,vr as ListenerConnectionType,Tr as ListenerMessagesType,Ke as Lowdb,Gs as MESSAGE_ENUM_TYPES,se as MediaProcessor,Ee as Plugins,qe as SessionWatchdog,zs as StickerMetadataType,le as StickerProcessor,F as VideoProcessor,N as cleanJid,pt as cleanMediaObject,yt as cleanupSocket,ut as configureFFmpeg,Z as createLowdb,kt as createWatchdog,Hr as definePlugins,Be as extractJids,at as extractUrls,Y as findGlobalWord,ct as findNestedByKeys,z as generateId,re as getDeepContent,ht as getExistingSocket,ot as getLatestLibVersion,Ue as getMediaThumbnail,lt as getUsersMentions,Dn as getVideoDuration,Wn as getVideoThumbnail,mt as getWaAudio,ft as getWaDocument,dt as getWaSticker,zn as getWatchdog,k as ignoreLint,M as logColor,dn as modifyFn,P as normalizeText,wn as numbersToJids,I as pickKeysFromArray,mn as randomize,Ct as registerAuthCreds,it as removeAuthCreds,me as repairSessionKeys,un as shuffleString,ue as toBuffer,Le as toJson,Q as toString,St as useAuthState};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "zaileys",
3
3
  "description": "Zaileys - Simplified WhatsApp Node.js TypeScript/JavaScript API",
4
- "version": "2.0.14",
4
+ "version": "2.0.15",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.mjs",