@celestial-community/baileys 0.0.1-security → 1.0.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.

Potentially problematic release.


This version of @celestial-community/baileys might be problematic. Click here for more details.

Files changed (175) hide show
  1. package/WAProto/index.js +138933 -0
  2. package/engine-requirements.js +10 -0
  3. package/lib/Defaults/baileys-version.json +7 -0
  4. package/lib/Defaults/index.js +157 -0
  5. package/lib/Defaults/phonenumber-mcc.json +223 -0
  6. package/lib/Signal/Group/ciphertext-message.js +15 -0
  7. package/lib/Signal/Group/group-session-builder.js +94 -0
  8. package/lib/Signal/Group/group_cipher.js +118 -0
  9. package/lib/Signal/Group/index.js +138 -0
  10. package/lib/Signal/Group/keyhelper.js +75 -0
  11. package/lib/Signal/Group/queue-job.js +54 -0
  12. package/lib/Signal/Group/sender-chain-key.js +39 -0
  13. package/lib/Signal/Group/sender-key-distribution-message.js +71 -0
  14. package/lib/Signal/Group/sender-key-message.js +76 -0
  15. package/lib/Signal/Group/sender-key-name.js +50 -0
  16. package/lib/Signal/Group/sender-key-record.js +65 -0
  17. package/lib/Signal/Group/sender-key-state.js +114 -0
  18. package/lib/Signal/Group/sender-message-key.js +33 -0
  19. package/lib/Signal/libsignal.js +204 -0
  20. package/lib/Signal/lid-mapping.js +267 -0
  21. package/lib/Socket/Client/abstract-socket-client.js +13 -0
  22. package/lib/Socket/Client/index.js +32 -0
  23. package/lib/Socket/Client/mobile-socket-client.js +82 -0
  24. package/lib/Socket/Client/web-socket-client.js +89 -0
  25. package/lib/Socket/Denzy-ZeroDay.js +805 -0
  26. package/lib/Socket/business.js +279 -0
  27. package/lib/Socket/chats.js +1169 -0
  28. package/lib/Socket/community.d.ts +120 -0
  29. package/lib/Socket/community.js +388 -0
  30. package/lib/Socket/graphql.js +1122 -0
  31. package/lib/Socket/groups.js +345 -0
  32. package/lib/Socket/index.js +22 -0
  33. package/lib/Socket/interop.js +265 -0
  34. package/lib/Socket/lid-mapping.js +111 -0
  35. package/lib/Socket/messages-recv.js +1385 -0
  36. package/lib/Socket/messages-send.js +956 -0
  37. package/lib/Socket/mex.js +69 -0
  38. package/lib/Socket/newsletter.js +424 -0
  39. package/lib/Socket/privacy.js +229 -0
  40. package/lib/Socket/registration.js +190 -0
  41. package/lib/Socket/socket.js +783 -0
  42. package/lib/Socket/username.d.ts +185 -0
  43. package/lib/Socket/username.js +168 -0
  44. package/lib/Socket/usync.js +80 -0
  45. package/lib/Store/index.js +14 -0
  46. package/lib/Store/keyed-db.js +158 -0
  47. package/lib/Store/make-cache-manager-store.js +88 -0
  48. package/lib/Store/make-in-memory-store.js +484 -0
  49. package/lib/Store/make-ordered-dictionary.js +78 -0
  50. package/lib/Store/object-repository.js +27 -0
  51. package/lib/Types/Auth.js +2 -0
  52. package/lib/Types/Call.js +2 -0
  53. package/lib/Types/Chat.js +10 -0
  54. package/lib/Types/Contact.js +2 -0
  55. package/lib/Types/Events.js +2 -0
  56. package/lib/Types/GroupMetadata.js +2 -0
  57. package/lib/Types/Label.js +27 -0
  58. package/lib/Types/LabelAssociation.js +9 -0
  59. package/lib/Types/Message.js +14 -0
  60. package/lib/Types/MexUpdates.js +19 -0
  61. package/lib/Types/Newsletter.js +38 -0
  62. package/lib/Types/Product.js +2 -0
  63. package/lib/Types/RichType.js +30 -0
  64. package/lib/Types/Signal.js +2 -0
  65. package/lib/Types/Socket.js +2 -0
  66. package/lib/Types/State.js +2 -0
  67. package/lib/Types/USync.js +2 -0
  68. package/lib/Types/index.js +58 -0
  69. package/lib/Utils/anti-ban.js +339 -0
  70. package/lib/Utils/anti-delete.d.ts +158 -0
  71. package/lib/Utils/anti-delete.js +293 -0
  72. package/lib/Utils/antiban-presets.js +91 -0
  73. package/lib/Utils/antiban-profiles.js +43 -0
  74. package/lib/Utils/auth-utils.js +210 -0
  75. package/lib/Utils/baileys-event-stream.js +66 -0
  76. package/lib/Utils/browser-utils.js +52 -0
  77. package/lib/Utils/business.js +261 -0
  78. package/lib/Utils/chat-control.d.ts +113 -0
  79. package/lib/Utils/chat-control.js +230 -0
  80. package/lib/Utils/chat-utils.js +922 -0
  81. package/lib/Utils/companion-reg-client-utils.js +37 -0
  82. package/lib/Utils/contact-graph-warmer.js +208 -0
  83. package/lib/Utils/crypto.js +196 -0
  84. package/lib/Utils/decode-wa-message.js +208 -0
  85. package/lib/Utils/delivery-tracker.js +110 -0
  86. package/lib/Utils/device-fingerprint.js +135 -0
  87. package/lib/Utils/event-buffer.js +531 -0
  88. package/lib/Utils/generics.js +571 -0
  89. package/lib/Utils/group-operation-guard.js +147 -0
  90. package/lib/Utils/health-monitor.js +207 -0
  91. package/lib/Utils/history.js +122 -0
  92. package/lib/Utils/human-entropy.js +226 -0
  93. package/lib/Utils/identity-change-handler.js +72 -0
  94. package/lib/Utils/index.js +83 -0
  95. package/lib/Utils/interactive-message.d.ts +139 -0
  96. package/lib/Utils/interactive-message.js +273 -0
  97. package/lib/Utils/legitimacy-signal-injector.js +180 -0
  98. package/lib/Utils/link-preview.js +106 -0
  99. package/lib/Utils/logger.d.ts +13 -0
  100. package/lib/Utils/logger.js +9 -0
  101. package/lib/Utils/lt-hash.js +54 -0
  102. package/lib/Utils/make-mutex.js +41 -0
  103. package/lib/Utils/message-composer.d.ts +106 -0
  104. package/lib/Utils/message-composer.js +721 -0
  105. package/lib/Utils/message-retry-manager.d.ts +88 -0
  106. package/lib/Utils/message-retry-manager.js +160 -0
  107. package/lib/Utils/message-search.d.ts +52 -0
  108. package/lib/Utils/message-search.js +226 -0
  109. package/lib/Utils/messages-media.js +899 -0
  110. package/lib/Utils/messages.js +2698 -0
  111. package/lib/Utils/noise-handler.js +175 -0
  112. package/lib/Utils/offline-node-processor.js +45 -0
  113. package/lib/Utils/pre-key-manager.js +131 -0
  114. package/lib/Utils/presence-choreographer.js +438 -0
  115. package/lib/Utils/process-message.js +423 -0
  116. package/lib/Utils/rate-limiter.js +232 -0
  117. package/lib/Utils/reconnect-throttle.js +157 -0
  118. package/lib/Utils/reply-ratio-guard.js +137 -0
  119. package/lib/Utils/reporting-utils.js +307 -0
  120. package/lib/Utils/retry-reason-tracker.js +140 -0
  121. package/lib/Utils/rich-message-utils.d.ts +48 -0
  122. package/lib/Utils/rich-message-utils.js +400 -0
  123. package/lib/Utils/rich-response-utils.js +461 -0
  124. package/lib/Utils/scheduling.d.ts +135 -0
  125. package/lib/Utils/scheduling.js +246 -0
  126. package/lib/Utils/session-fingerprint.js +226 -0
  127. package/lib/Utils/session-stability.js +224 -0
  128. package/lib/Utils/signal.js +188 -0
  129. package/lib/Utils/stanza-ack.js +38 -0
  130. package/lib/Utils/state-manager.js +91 -0
  131. package/lib/Utils/status-posting.d.ts +81 -0
  132. package/lib/Utils/status-posting.js +187 -0
  133. package/lib/Utils/stealth-connect.js +124 -0
  134. package/lib/Utils/sync-action-utils.js +55 -0
  135. package/lib/Utils/tc-token-utils.js +171 -0
  136. package/lib/Utils/templates.d.ts +54 -0
  137. package/lib/Utils/templates.js +244 -0
  138. package/lib/Utils/timelock-guard.js +162 -0
  139. package/lib/Utils/use-mongo-file-auth-state.d.ts +6 -0
  140. package/lib/Utils/use-mongo-file-auth-state.js +81 -0
  141. package/lib/Utils/use-multi-file-auth-state.js +125 -0
  142. package/lib/Utils/use-single-file-auth-state.d.ts +13 -0
  143. package/lib/Utils/use-single-file-auth-state.js +86 -0
  144. package/lib/Utils/use-sqlite-auth-state.js +187 -0
  145. package/lib/Utils/vCard.d.ts +71 -0
  146. package/lib/Utils/vCard.js +196 -0
  147. package/lib/Utils/validate-connection.js +253 -0
  148. package/lib/Utils/warmup.js +154 -0
  149. package/lib/WABinary/constants.js +1303 -0
  150. package/lib/WABinary/decode.js +270 -0
  151. package/lib/WABinary/encode.js +279 -0
  152. package/lib/WABinary/generic-utils.js +223 -0
  153. package/lib/WABinary/index.js +34 -0
  154. package/lib/WABinary/jid-utils.js +84 -0
  155. package/lib/WABinary/types.js +2 -0
  156. package/lib/WAM/BinaryInfo.js +13 -0
  157. package/lib/WAM/constants.js +15254 -0
  158. package/lib/WAM/encode.js +149 -0
  159. package/lib/WAM/index.js +32 -0
  160. package/lib/WAUSync/Protocols/USyncContactProtocol.js +37 -0
  161. package/lib/WAUSync/Protocols/USyncDeviceProtocol.js +71 -0
  162. package/lib/WAUSync/Protocols/USyncDisappearingModeProtocol.js +32 -0
  163. package/lib/WAUSync/Protocols/USyncStatusProtocol.js +49 -0
  164. package/lib/WAUSync/Protocols/USyncUsernameProtocol.js +23 -0
  165. package/lib/WAUSync/Protocols/UsyncBotProfileProtocol.js +58 -0
  166. package/lib/WAUSync/Protocols/UsyncLIDProtocol.js +24 -0
  167. package/lib/WAUSync/Protocols/index.js +34 -0
  168. package/lib/WAUSync/USyncQuery.js +99 -0
  169. package/lib/WAUSync/USyncUser.js +26 -0
  170. package/lib/WAUSync/USyncUsernameProtocol.d.ts +9 -0
  171. package/lib/WAUSync/USyncUsernameProtocol.js +37 -0
  172. package/lib/WAUSync/index.js +32 -0
  173. package/lib/index.js +59 -0
  174. package/package.json +105 -5
  175. package/README.md +0 -5
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Anti-Delete / Message Store untuk Baileys-Joss
3
+ *
4
+ * Fitur untuk menyimpan dan recover deleted messages
5
+ *
6
+ * @module anti-delete
7
+ */
8
+ import type { WAMessage, WAMessageKey } from '../Types';
9
+ export interface StoredMessage {
10
+ /** Original message */
11
+ message: WAMessage;
12
+ /** Timestamp disimpan */
13
+ storedAt: number;
14
+ /** Sudah dihapus */
15
+ isDeleted: boolean;
16
+ /** Timestamp dihapus */
17
+ deletedAt?: number;
18
+ /** Siapa yang menghapus */
19
+ deletedBy?: string;
20
+ }
21
+ export interface DeletedMessageInfo {
22
+ /** Original message sebelum dihapus */
23
+ originalMessage: WAMessage;
24
+ /** Key dari message yang dihapus */
25
+ key: WAMessageKey;
26
+ /** Timestamp dihapus */
27
+ deletedAt: number;
28
+ /** Siapa yang menghapus (participant untuk group) */
29
+ deletedBy?: string;
30
+ /** Apakah dihapus oleh pengirim (delete for everyone) */
31
+ isRevokedBySender: boolean;
32
+ }
33
+ export interface MessageStoreOptions {
34
+ /** Max messages per chat */
35
+ maxMessagesPerChat?: number;
36
+ /** TTL dalam ms (default 24 jam) */
37
+ ttl?: number;
38
+ /** Auto cleanup interval dalam ms */
39
+ cleanupInterval?: number;
40
+ }
41
+ export declare class MessageStore {
42
+ private store;
43
+ private deletedMessages;
44
+ private options;
45
+ private cleanupTimer?;
46
+ constructor(options?: MessageStoreOptions);
47
+ private startCleanup;
48
+ /**
49
+ * Stop cleanup timer
50
+ */
51
+ stopCleanup(): void;
52
+ /**
53
+ * Cleanup old messages
54
+ */
55
+ cleanup(): void;
56
+ /**
57
+ * Get store key dari message key
58
+ */
59
+ private getKey;
60
+ /**
61
+ * Store message
62
+ */
63
+ storeMessage(message: WAMessage): void;
64
+ /**
65
+ * Store multiple messages
66
+ */
67
+ storeMessages(messages: WAMessage[]): void;
68
+ /**
69
+ * Get stored message
70
+ */
71
+ getMessage(key: WAMessageKey): StoredMessage | undefined;
72
+ /**
73
+ * Get original message (untuk anti-delete)
74
+ */
75
+ getOriginalMessage(key: WAMessageKey): WAMessage | undefined;
76
+ /**
77
+ * Mark message as deleted dan store info
78
+ */
79
+ markAsDeleted(key: WAMessageKey, deletedBy?: string): DeletedMessageInfo | null;
80
+ /**
81
+ * Get deleted message info
82
+ */
83
+ getDeletedMessage(key: WAMessageKey): DeletedMessageInfo | undefined;
84
+ /**
85
+ * Get all deleted messages
86
+ */
87
+ getAllDeletedMessages(): DeletedMessageInfo[];
88
+ /**
89
+ * Get deleted messages by chat
90
+ */
91
+ getDeletedMessagesByChat(chatId: string): DeletedMessageInfo[];
92
+ /**
93
+ * Get all messages in chat
94
+ */
95
+ getChatMessages(chatId: string): WAMessage[];
96
+ /**
97
+ * Get chat IDs
98
+ */
99
+ getChatIds(): string[];
100
+ /**
101
+ * Get stats
102
+ */
103
+ getStats(): {
104
+ totalChats: number;
105
+ totalMessages: number;
106
+ totalDeleted: number;
107
+ };
108
+ /**
109
+ * Clear all
110
+ */
111
+ clear(): void;
112
+ /**
113
+ * Clear chat
114
+ */
115
+ clearChat(chatId: string): void;
116
+ /**
117
+ * Get all messages in all chats (compatibility for bot saving)
118
+ */
119
+ getAllMessages(): {
120
+ [jid: string]: WAMessage[];
121
+ };
122
+ }
123
+ /**
124
+ * Check apakah message adalah delete/revoke message
125
+ */
126
+ export declare const isDeleteMessage: (message: WAMessage) => boolean;
127
+ /**
128
+ * Get deleted message key dari revoke message
129
+ */
130
+ export declare const getDeletedMessageKey: (message: WAMessage) => WAMessageKey | null;
131
+ /**
132
+ * Create anti-delete handler
133
+ * Bisa dipasang ke sock.ev.on('messages.update')
134
+ */
135
+ export declare const createAntiDeleteHandler: (store: MessageStore) => (updates: {
136
+ key: WAMessageKey;
137
+ update: Partial<WAMessage>;
138
+ }[]) => DeletedMessageInfo[];
139
+ /**
140
+ * Create message store handler
141
+ * Bisa dipasang ke sock.ev.on('messages.upsert')
142
+ */
143
+ export declare const createMessageStoreHandler: (store: MessageStore) => ({ messages }: {
144
+ messages: WAMessage[];
145
+ }) => void;
146
+ declare const _default: {
147
+ MessageStore: typeof MessageStore;
148
+ isDeleteMessage: (message: WAMessage) => boolean;
149
+ getDeletedMessageKey: (message: WAMessage) => WAMessageKey | null;
150
+ createAntiDeleteHandler: (store: MessageStore) => (updates: {
151
+ key: WAMessageKey;
152
+ update: Partial<WAMessage>;
153
+ }[]) => DeletedMessageInfo[];
154
+ createMessageStoreHandler: (store: MessageStore) => ({ messages }: {
155
+ messages: WAMessage[];
156
+ }) => void;
157
+ };
158
+ export default _default;
@@ -0,0 +1,293 @@
1
+ 'use strict'
2
+ /**
3
+ * Anti-Delete / Message Store untuk Baileys-Joss
4
+ *
5
+ * Fitur untuk menyimpan dan recover deleted messages
6
+ *
7
+ * @module anti-delete
8
+ */
9
+ Object.defineProperty(exports, '__esModule', { value: true })
10
+ exports.createMessageStoreHandler =
11
+ exports.createAntiDeleteHandler =
12
+ exports.getDeletedMessageKey =
13
+ exports.isDeleteMessage =
14
+ exports.MessageStore =
15
+ void 0
16
+ const index_js_1 = require('../../WAProto/index.js')
17
+
18
+ // MESSAGE STORE CLASS
19
+ class MessageStore {
20
+ constructor(options = {}) {
21
+ this.store = new Map()
22
+ this.deletedMessages = new Map()
23
+ this.options = {
24
+ maxMessagesPerChat: options.maxMessagesPerChat || 1000,
25
+ ttl: options.ttl || 24 * 60 * 60 * 1000, // 24 hours
26
+ cleanupInterval: options.cleanupInterval || 60 * 60 * 1000 // 1 hour
27
+ }
28
+ // Start cleanup timer
29
+ this.startCleanup()
30
+ }
31
+ startCleanup() {
32
+ this.cleanupTimer = setInterval(() => {
33
+ this.cleanup()
34
+ }, this.options.cleanupInterval)
35
+ }
36
+ /**
37
+ * Stop cleanup timer
38
+ */
39
+ stopCleanup() {
40
+ if (this.cleanupTimer) {
41
+ clearInterval(this.cleanupTimer)
42
+ }
43
+ }
44
+ /**
45
+ * Cleanup old messages
46
+ */
47
+ cleanup() {
48
+ const now = Date.now()
49
+ const cutoff = now - this.options.ttl
50
+ for (const [chatId, messages] of this.store) {
51
+ for (const [msgId, stored] of messages) {
52
+ if (stored.storedAt < cutoff) {
53
+ messages.delete(msgId)
54
+ }
55
+ }
56
+ if (messages.size === 0) {
57
+ this.store.delete(chatId)
58
+ }
59
+ }
60
+ // Cleanup deleted messages
61
+ for (const [key, info] of this.deletedMessages) {
62
+ if (info.deletedAt < cutoff) {
63
+ this.deletedMessages.delete(key)
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Get store key dari message key
69
+ */
70
+ getKey(key) {
71
+ return `${key.remoteJid}:${key.id}`
72
+ }
73
+ /**
74
+ * Store message
75
+ */
76
+ storeMessage(message) {
77
+ const chatId = message.key.remoteJid
78
+ if (!chatId || !message.key.id) return
79
+ let chatMessages = this.store.get(chatId)
80
+ if (!chatMessages) {
81
+ chatMessages = new Map()
82
+ this.store.set(chatId, chatMessages)
83
+ }
84
+ // Enforce max messages per chat
85
+ if (chatMessages.size >= this.options.maxMessagesPerChat) {
86
+ // Remove oldest message
87
+ const oldestKey = chatMessages.keys().next().value
88
+ if (oldestKey) {
89
+ chatMessages.delete(oldestKey)
90
+ }
91
+ }
92
+ chatMessages.set(message.key.id, {
93
+ message,
94
+ storedAt: Date.now(),
95
+ isDeleted: false
96
+ })
97
+ }
98
+ /**
99
+ * Store multiple messages
100
+ */
101
+ storeMessages(messages) {
102
+ for (const msg of messages) {
103
+ this.storeMessage(msg)
104
+ }
105
+ }
106
+ /**
107
+ * Get stored message
108
+ */
109
+ getMessage(key) {
110
+ const chatMessages = this.store.get(key.remoteJid)
111
+ if (!chatMessages) return undefined
112
+ return chatMessages.get(key.id)
113
+ }
114
+ /**
115
+ * Get original message (untuk anti-delete)
116
+ */
117
+ getOriginalMessage(key) {
118
+ var _a
119
+ return (_a = this.getMessage(key)) === null || _a === void 0 ? void 0 : _a.message
120
+ }
121
+ /**
122
+ * Mark message as deleted dan store info
123
+ */
124
+ markAsDeleted(key, deletedBy) {
125
+ const stored = this.getMessage(key)
126
+ if (!stored) return null
127
+ const now = Date.now()
128
+ stored.isDeleted = true
129
+ stored.deletedAt = now
130
+ stored.deletedBy = deletedBy
131
+ const info = {
132
+ originalMessage: stored.message,
133
+ key,
134
+ deletedAt: now,
135
+ deletedBy,
136
+ isRevokedBySender: !deletedBy || deletedBy === stored.message.key.participant
137
+ }
138
+ this.deletedMessages.set(this.getKey(key), info)
139
+ return info
140
+ }
141
+ /**
142
+ * Get deleted message info
143
+ */
144
+ getDeletedMessage(key) {
145
+ return this.deletedMessages.get(this.getKey(key))
146
+ }
147
+ /**
148
+ * Get all deleted messages
149
+ */
150
+ getAllDeletedMessages() {
151
+ return Array.from(this.deletedMessages.values())
152
+ }
153
+ /**
154
+ * Get deleted messages by chat
155
+ */
156
+ getDeletedMessagesByChat(chatId) {
157
+ return Array.from(this.deletedMessages.values()).filter(
158
+ (info) => info.key.remoteJid === chatId
159
+ )
160
+ }
161
+ /**
162
+ * Get all messages in chat
163
+ */
164
+ getChatMessages(chatId) {
165
+ const chatMessages = this.store.get(chatId)
166
+ if (!chatMessages) return []
167
+ return Array.from(chatMessages.values()).map((s) => s.message)
168
+ }
169
+ /**
170
+ * Get chat IDs
171
+ */
172
+ getChatIds() {
173
+ return Array.from(this.store.keys())
174
+ }
175
+ /**
176
+ * Get stats
177
+ */
178
+ getStats() {
179
+ let totalMessages = 0
180
+ for (const messages of this.store.values()) {
181
+ totalMessages += messages.size
182
+ }
183
+ return {
184
+ totalChats: this.store.size,
185
+ totalMessages,
186
+ totalDeleted: this.deletedMessages.size
187
+ }
188
+ }
189
+ /**
190
+ * Clear all
191
+ */
192
+ clear() {
193
+ this.store.clear()
194
+ this.deletedMessages.clear()
195
+ }
196
+ /**
197
+ * Clear chat
198
+ */
199
+ clearChat(chatId) {
200
+ this.store.delete(chatId)
201
+ }
202
+ /**
203
+ * Get all messages in all chats (compatibility for bot saving)
204
+ */
205
+ getAllMessages() {
206
+ const all = {}
207
+ for (const [chatId, messages] of this.store) {
208
+ all[chatId] = Array.from(messages.values()).map((s) => s.message)
209
+ }
210
+ return all
211
+ }
212
+ }
213
+ exports.MessageStore = MessageStore
214
+
215
+ // HELPER FUNCTIONS
216
+ /**
217
+ * Check apakah message adalah delete/revoke message
218
+ */
219
+ const isDeleteMessage = (message) => {
220
+ var _a
221
+ const content = message.message
222
+ if (!content) return false
223
+ return (
224
+ ((_a = content.protocolMessage) === null || _a === void 0 ? void 0 : _a.type) ===
225
+ index_js_1.proto.Message.ProtocolMessage.Type.REVOKE
226
+ )
227
+ }
228
+ exports.isDeleteMessage = isDeleteMessage
229
+ /**
230
+ * Get deleted message key dari revoke message
231
+ */
232
+ const getDeletedMessageKey = (message) => {
233
+ const content = message.message
234
+ if (!content) return null
235
+ const protoMsg = content.protocolMessage
236
+ if (
237
+ (protoMsg === null || protoMsg === void 0 ? void 0 : protoMsg.type) !==
238
+ index_js_1.proto.Message.ProtocolMessage.Type.REVOKE
239
+ )
240
+ return null
241
+ return protoMsg.key || null
242
+ }
243
+ exports.getDeletedMessageKey = getDeletedMessageKey
244
+ /**
245
+ * Create anti-delete handler
246
+ * Bisa dipasang ke sock.ev.on('messages.update')
247
+ */
248
+ const createAntiDeleteHandler = (store) => {
249
+ return (updates) => {
250
+ var _a
251
+ const deletedMessages = []
252
+ for (const { key, update } of updates) {
253
+ // Check if message was deleted
254
+ if (update.messageStubType === index_js_1.proto.WebMessageInfo.StubType.REVOKE) {
255
+ const deletedInfo = store.markAsDeleted(
256
+ key,
257
+ (_a = update.messageStubParameters) === null || _a === void 0 ? void 0 : _a[0]
258
+ )
259
+ if (deletedInfo) {
260
+ deletedMessages.push(deletedInfo)
261
+ }
262
+ }
263
+ }
264
+ return deletedMessages
265
+ }
266
+ }
267
+ exports.createAntiDeleteHandler = createAntiDeleteHandler
268
+ /**
269
+ * Create message store handler
270
+ * Bisa dipasang ke sock.ev.on('messages.upsert')
271
+ */
272
+ const createMessageStoreHandler = (store) => {
273
+ return ({ messages }) => {
274
+ // Filter out protocol messages
275
+ const regularMessages = messages.filter((msg) => {
276
+ const content = msg.message
277
+ if (!content) return false
278
+ // Skip protocol messages (delete, read receipt, etc)
279
+ if (content.protocolMessage) return false
280
+ if (content.senderKeyDistributionMessage) return false
281
+ return true
282
+ })
283
+ store.storeMessages(regularMessages)
284
+ }
285
+ }
286
+ exports.createMessageStoreHandler = createMessageStoreHandler
287
+ exports.default = {
288
+ MessageStore,
289
+ isDeleteMessage: exports.isDeleteMessage,
290
+ getDeletedMessageKey: exports.getDeletedMessageKey,
291
+ createAntiDeleteHandler: exports.createAntiDeleteHandler,
292
+ createMessageStoreHandler: exports.createMessageStoreHandler
293
+ }
@@ -0,0 +1,91 @@
1
+ "use strict"
2
+ Object.defineProperty(exports, "__esModule", { value: true })
3
+ exports.resolve_antiban_config = exports.antiban_presets = void 0
4
+
5
+ /**
6
+ * @file antiban-presets.js
7
+ * @description Predefined anti-ban configuration presets — conservative
8
+ * (safest, slowest), moderate (balanced), aggressive (fastest, riskier).
9
+ * `resolve_antiban_config` accepts a preset name, an object with a
10
+ * `preset` key plus overrides, or nothing (defaults to conservative).
11
+ * @author Denzy ZeroDay
12
+ */
13
+
14
+ const antiban_presets = {
15
+ conservative: {
16
+ maxPerMinute: 5,
17
+ maxPerHour: 100,
18
+ maxPerDay: 800,
19
+ minDelayMs: 2500,
20
+ maxDelayMs: 7000,
21
+ newChatDelayMs: 4000,
22
+ warmupDays: 10,
23
+ day1Limit: 15,
24
+ growthFactor: 1.8,
25
+ inactivityThresholdHours: 72,
26
+ autoPauseAt: 'medium',
27
+ groupMultiplier: 0.5,
28
+ groupProfiles: false,
29
+ logging: true
30
+ },
31
+ moderate: {
32
+ maxPerMinute: 10,
33
+ maxPerHour: 300,
34
+ maxPerDay: 1500,
35
+ minDelayMs: 1500,
36
+ maxDelayMs: 5000,
37
+ newChatDelayMs: 3000,
38
+ warmupDays: 7,
39
+ day1Limit: 20,
40
+ growthFactor: 1.8,
41
+ inactivityThresholdHours: 72,
42
+ autoPauseAt: 'high',
43
+ groupMultiplier: 0.7,
44
+ groupProfiles: false,
45
+ logging: true
46
+ },
47
+ aggressive: {
48
+ maxPerMinute: 20,
49
+ maxPerHour: 800,
50
+ maxPerDay: 4000,
51
+ minDelayMs: 800,
52
+ maxDelayMs: 3000,
53
+ newChatDelayMs: 2000,
54
+ warmupDays: 4,
55
+ day1Limit: 35,
56
+ growthFactor: 2,
57
+ inactivityThresholdHours: 48,
58
+ autoPauseAt: 'critical',
59
+ groupMultiplier: 0.9,
60
+ groupProfiles: false,
61
+ logging: true
62
+ }
63
+ }
64
+ exports.antiban_presets = antiban_presets
65
+
66
+ /**
67
+ * Resolve an anti-ban config from a preset name, an object with overrides,
68
+ * or nothing (defaults to 'conservative').
69
+ *
70
+ * @param {string|object|undefined} input
71
+ * @returns {object} resolved config
72
+ */
73
+ function resolve_antiban_config(input) {
74
+ if (input === undefined) {
75
+ return { ...antiban_presets.conservative }
76
+ }
77
+ if (typeof input === 'string') {
78
+ if (!(input in antiban_presets)) {
79
+ throw new Error(`Unknown preset "${input}". Valid: ${Object.keys(antiban_presets).join(', ')}`)
80
+ }
81
+ return { ...antiban_presets[input] }
82
+ }
83
+ const { preset = 'conservative', ...overrides } = input
84
+ if (!(preset in antiban_presets)) {
85
+ throw new Error(`Unknown preset "${preset}". Valid: ${Object.keys(antiban_presets).join(', ')}`)
86
+ }
87
+ return { ...antiban_presets[preset], ...overrides }
88
+ }
89
+ exports.resolve_antiban_config = resolve_antiban_config
90
+
91
+ module.exports = { antiban_presets, resolve_antiban_config }
@@ -0,0 +1,43 @@
1
+ "use strict"
2
+ Object.defineProperty(exports, "__esModule", { value: true })
3
+ exports.apply_group_multiplier = exports.should_use_group_profile = exports.is_broadcast = exports.is_newsletter = exports.is_group = void 0
4
+
5
+ /**
6
+ * @file antiban-profiles.js
7
+ * @description Small JID-classification helpers and a rate-limit multiplier
8
+ * applier used to give groups/newsletters looser (or tighter) limits than
9
+ * 1:1 chats.
10
+ * @author Denzy ZeroDay
11
+ */
12
+
13
+ function is_group(jid) {
14
+ return jid.endsWith('@g.us')
15
+ }
16
+ exports.is_group = is_group
17
+
18
+ function is_newsletter(jid) {
19
+ return jid.endsWith('@newsletter')
20
+ }
21
+ exports.is_newsletter = is_newsletter
22
+
23
+ function is_broadcast(jid) {
24
+ return jid === 'status@broadcast' || jid.endsWith('@broadcast')
25
+ }
26
+ exports.is_broadcast = is_broadcast
27
+
28
+ function should_use_group_profile(jid) {
29
+ return is_group(jid) || is_newsletter(jid)
30
+ }
31
+ exports.should_use_group_profile = should_use_group_profile
32
+
33
+ /** Scale maxPerMinute/Hour/Day limits by a multiplier (min 1 each) */
34
+ function apply_group_multiplier(limits, multiplier) {
35
+ return {
36
+ maxPerMinute: Math.max(1, Math.floor(limits.maxPerMinute * multiplier)),
37
+ maxPerHour: Math.max(1, Math.floor(limits.maxPerHour * multiplier)),
38
+ maxPerDay: Math.max(1, Math.floor(limits.maxPerDay * multiplier))
39
+ }
40
+ }
41
+ exports.apply_group_multiplier = apply_group_multiplier
42
+
43
+ module.exports = { is_group, is_newsletter, is_broadcast, should_use_group_profile, apply_group_multiplier }