@kangwifi-pro/waliwa 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.
- package/LICENSE +21 -0
- package/README.md +600 -0
- package/dist/advanced/features.d.ts +211 -0
- package/dist/advanced/features.d.ts.map +1 -0
- package/dist/advanced/features.js +671 -0
- package/dist/advanced/features.js.map +1 -0
- package/dist/auth/auth-state.d.ts +89 -0
- package/dist/auth/auth-state.d.ts.map +1 -0
- package/dist/auth/auth-state.js +330 -0
- package/dist/auth/auth-state.js.map +1 -0
- package/dist/auth/pairing-code.d.ts +78 -0
- package/dist/auth/pairing-code.d.ts.map +1 -0
- package/dist/auth/pairing-code.js +191 -0
- package/dist/auth/pairing-code.js.map +1 -0
- package/dist/auth/qr-code.d.ts +60 -0
- package/dist/auth/qr-code.d.ts.map +1 -0
- package/dist/auth/qr-code.js +151 -0
- package/dist/auth/qr-code.js.map +1 -0
- package/dist/calls/handler.d.ts +61 -0
- package/dist/calls/handler.d.ts.map +1 -0
- package/dist/calls/handler.js +117 -0
- package/dist/calls/handler.js.map +1 -0
- package/dist/core/binary.d.ts +74 -0
- package/dist/core/binary.d.ts.map +1 -0
- package/dist/core/binary.js +448 -0
- package/dist/core/binary.js.map +1 -0
- package/dist/core/crypto.d.ts +60 -0
- package/dist/core/crypto.d.ts.map +1 -0
- package/dist/core/crypto.js +170 -0
- package/dist/core/crypto.js.map +1 -0
- package/dist/core/noise.d.ts +106 -0
- package/dist/core/noise.d.ts.map +1 -0
- package/dist/core/noise.js +307 -0
- package/dist/core/noise.js.map +1 -0
- package/dist/events/emitter.d.ts +44 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +79 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/features/index.d.ts +342 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +755 -0
- package/dist/features/index.js.map +1 -0
- package/dist/fixes/index.d.ts +333 -0
- package/dist/fixes/index.d.ts.map +1 -0
- package/dist/fixes/index.js +762 -0
- package/dist/fixes/index.js.map +1 -0
- package/dist/groups/management.d.ts +86 -0
- package/dist/groups/management.d.ts.map +1 -0
- package/dist/groups/management.js +443 -0
- package/dist/groups/management.js.map +1 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +236 -0
- package/dist/index.js.map +1 -0
- package/dist/messages/media.d.ts +93 -0
- package/dist/messages/media.d.ts.map +1 -0
- package/dist/messages/media.js +252 -0
- package/dist/messages/media.js.map +1 -0
- package/dist/messages/message-encoder.d.ts +70 -0
- package/dist/messages/message-encoder.d.ts.map +1 -0
- package/dist/messages/message-encoder.js +453 -0
- package/dist/messages/message-encoder.js.map +1 -0
- package/dist/messages/send.d.ts +101 -0
- package/dist/messages/send.d.ts.map +1 -0
- package/dist/messages/send.js +409 -0
- package/dist/messages/send.js.map +1 -0
- package/dist/recovery/index.d.ts +125 -0
- package/dist/recovery/index.d.ts.map +1 -0
- package/dist/recovery/index.js +584 -0
- package/dist/recovery/index.js.map +1 -0
- package/dist/skdm/index.d.ts +220 -0
- package/dist/skdm/index.d.ts.map +1 -0
- package/dist/skdm/index.js +600 -0
- package/dist/skdm/index.js.map +1 -0
- package/dist/socket/hybrid.d.ts +118 -0
- package/dist/socket/hybrid.d.ts.map +1 -0
- package/dist/socket/hybrid.js +352 -0
- package/dist/socket/hybrid.js.map +1 -0
- package/dist/socket/wa-socket.d.ts +300 -0
- package/dist/socket/wa-socket.d.ts.map +1 -0
- package/dist/socket/wa-socket.js +1094 -0
- package/dist/socket/wa-socket.js.map +1 -0
- package/dist/socket/ws-socket.d.ts +96 -0
- package/dist/socket/ws-socket.d.ts.map +1 -0
- package/dist/socket/ws-socket.js +302 -0
- package/dist/socket/ws-socket.js.map +1 -0
- package/dist/types/index.d.ts +444 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/jid.d.ts +46 -0
- package/dist/utils/jid.d.ts.map +1 -0
- package/dist/utils/jid.js +152 -0
- package/dist/utils/jid.js.map +1 -0
- package/dist/utils/logger.d.ts +45 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +79 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +43 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +175 -0
- package/dist/utils/retry.js.map +1 -0
- package/docs/API.md +745 -0
- package/docs/ARCHITECTURE.md +307 -0
- package/docs/BAILEYS_FIXES.md +360 -0
- package/docs/FEATURES.md +532 -0
- package/docs/PROTOCOL.md +489 -0
- package/docs/RECOVERY.md +409 -0
- package/docs/SKDM.md +233 -0
- package/examples/ai-bot/index.ts +479 -0
- package/examples/ai-bot/package.json +17 -0
- package/examples/echo-bot/index.ts +171 -0
- package/examples/echo-bot/package.json +18 -0
- package/examples/group-bot/index.ts +557 -0
- package/examples/group-bot/package.json +17 -0
- package/examples/rest-gateway/index.ts +499 -0
- package/examples/rest-gateway/package.json +19 -0
- package/package.json +75 -0
- package/src/advanced/features.ts +817 -0
- package/src/auth/auth-state.ts +342 -0
- package/src/auth/pairing-code.ts +246 -0
- package/src/auth/qr-code.ts +191 -0
- package/src/calls/handler.ts +153 -0
- package/src/core/binary.ts +464 -0
- package/src/core/crypto.ts +189 -0
- package/src/core/noise.ts +406 -0
- package/src/events/emitter.ts +88 -0
- package/src/features/index.ts +921 -0
- package/src/fixes/index.ts +882 -0
- package/src/groups/management.ts +497 -0
- package/src/index.ts +274 -0
- package/src/messages/media.ts +372 -0
- package/src/messages/message-encoder.ts +520 -0
- package/src/messages/send.ts +521 -0
- package/src/recovery/index.ts +704 -0
- package/src/skdm/index.ts +693 -0
- package/src/socket/hybrid.ts +414 -0
- package/src/socket/wa-socket.ts +1347 -0
- package/src/socket/ws-socket.ts +355 -0
- package/src/types/index.ts +457 -0
- package/src/utils/jid.ts +156 -0
- package/src/utils/logger.ts +84 -0
- package/src/utils/retry.ts +205 -0
- package/tsconfig.json +30 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waliwa - SKDM (Store Key Data Manager)
|
|
3
|
+
*
|
|
4
|
+
* Subsystem cerdas untuk manage Signal protocol keys:
|
|
5
|
+
* - Auto-regenerate pre-keys saat hampir habis (prevents Baileys pre-key exhaustion)
|
|
6
|
+
* - LRU cache untuk sessions (RAM efficient)
|
|
7
|
+
* - Atomic writes untuk prevent corruption saat disconnect (Baileys issue)
|
|
8
|
+
* - Pre-key rotation policy dengan background jobs
|
|
9
|
+
* - Session cleanup untuk orphaned sessions
|
|
10
|
+
* - Key prefetching untuk known conversations (fix decryption failures)
|
|
11
|
+
*
|
|
12
|
+
* Fixes yang addressed:
|
|
13
|
+
* - Baileys issue: pre-key exhaustion → pre-keys habis gak auto-regenerate
|
|
14
|
+
* - Baileys issue: session corruption on disconnect → atomic write
|
|
15
|
+
* - Baileys issue: decryption failure for old messages → key prefetch
|
|
16
|
+
* - Baileys issue: memory leak dari sessions lama → LRU eviction
|
|
17
|
+
*/
|
|
18
|
+
import type { AuthenticationCreds, SignalKeyStore, KeyPair, WALogger } from '../types/index.js';
|
|
19
|
+
export interface SKDMConfig {
|
|
20
|
+
/** Min pre-keys sebelum regenerate (default: 5) */
|
|
21
|
+
minPreKeys?: number;
|
|
22
|
+
/** Max pre-keys yang di-generate sekaligus (default: 50) */
|
|
23
|
+
maxPreKeysBatch?: number;
|
|
24
|
+
/** Total pre-keys yang di-keep (default: 100) */
|
|
25
|
+
targetPreKeyCount?: number;
|
|
26
|
+
/** Max sessions di RAM cache (default: 500, RAM optimization) */
|
|
27
|
+
maxSessionCacheSize?: number;
|
|
28
|
+
/** Auto-save interval ms (default: 5000) */
|
|
29
|
+
autoSaveIntervalMs?: number;
|
|
30
|
+
/** Enable background key rotation (default: true) */
|
|
31
|
+
enableKeyRotation?: boolean;
|
|
32
|
+
/** Logger */
|
|
33
|
+
logger?: WALogger;
|
|
34
|
+
/** Folder untuk atomic writes */
|
|
35
|
+
storageFolder: string;
|
|
36
|
+
/** File prefix */
|
|
37
|
+
prefix?: string;
|
|
38
|
+
/** Enable session prefetching (default: true, fix decryption failure) */
|
|
39
|
+
enableSessionPrefetch?: boolean;
|
|
40
|
+
/** Session expiry (ms, default: 30 days) */
|
|
41
|
+
sessionExpiryMs?: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* LRU cache dengan O(1) operations, manual implementation untuk RAM efficiency.
|
|
45
|
+
* Used untuk caching sessions dan senderKeys.
|
|
46
|
+
*/
|
|
47
|
+
export declare class LRUCache<K, V> {
|
|
48
|
+
private cache;
|
|
49
|
+
private maxSize;
|
|
50
|
+
private hits;
|
|
51
|
+
private misses;
|
|
52
|
+
constructor(maxSize?: number);
|
|
53
|
+
get(key: K): V | undefined;
|
|
54
|
+
set(key: K, value: V): void;
|
|
55
|
+
has(key: K): boolean;
|
|
56
|
+
delete(key: K): boolean;
|
|
57
|
+
clear(): void;
|
|
58
|
+
size(): number;
|
|
59
|
+
getStats(): {
|
|
60
|
+
size: number;
|
|
61
|
+
hits: number;
|
|
62
|
+
misses: number;
|
|
63
|
+
hitRate: number;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Atomic file writer - prevents corruption saat disconnect/power failure.
|
|
68
|
+
* Baileys issue: session files corrupt jika process kill saat write.
|
|
69
|
+
*
|
|
70
|
+
* Strategy: write to .tmp file, then rename (atomic on POSIX systems).
|
|
71
|
+
*/
|
|
72
|
+
export declare class AtomicFileWriter {
|
|
73
|
+
private static writeLocks;
|
|
74
|
+
static writeFile(filePath: string, data: string | Buffer, encoding?: 'utf-8' | 'binary'): Promise<void>;
|
|
75
|
+
private static performWrite;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Pre-key manager - auto-regenerate saat low, prevents exhaustion.
|
|
79
|
+
* Fix Baileys issue: pre-keys habis tanpa warning.
|
|
80
|
+
*/
|
|
81
|
+
export declare class PreKeyManager {
|
|
82
|
+
private creds;
|
|
83
|
+
private keys;
|
|
84
|
+
private minPreKeys;
|
|
85
|
+
private maxBatch;
|
|
86
|
+
private targetCount;
|
|
87
|
+
private logger;
|
|
88
|
+
private isRegenerating;
|
|
89
|
+
private lastRegenTime;
|
|
90
|
+
private regenDebounce;
|
|
91
|
+
constructor(creds: AuthenticationCreds, keys: SignalKeyStore, config: Pick<SKDMConfig, 'minPreKeys' | 'maxPreKeysBatch' | 'targetPreKeyCount' | 'logger'>);
|
|
92
|
+
needsRegeneration(): boolean;
|
|
93
|
+
getPreKeyCount(): number;
|
|
94
|
+
getNextPreKeyId(): number;
|
|
95
|
+
getPreKey(id: number): KeyPair | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* Consume a pre-key (mark as used)
|
|
98
|
+
* Returns true jika key consumed, false jika tidak ada
|
|
99
|
+
*/
|
|
100
|
+
consumePreKey(id: number): boolean;
|
|
101
|
+
scheduleRegeneration(): void;
|
|
102
|
+
regeneratePreKeys(): Promise<void>;
|
|
103
|
+
startBackgroundRotation(intervalMs?: number): NodeJS.Timeout;
|
|
104
|
+
getStats(): {
|
|
105
|
+
total: number;
|
|
106
|
+
nextId: number;
|
|
107
|
+
lastRegenTime: number;
|
|
108
|
+
needsRegen: boolean;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Session manager dengan LRU cache untuk RAM efficiency.
|
|
113
|
+
* Fix Baileys issue: memory leak dari sessions lama.
|
|
114
|
+
*/
|
|
115
|
+
export declare class SessionManager {
|
|
116
|
+
private keys;
|
|
117
|
+
private cache;
|
|
118
|
+
private maxCacheSize;
|
|
119
|
+
private logger;
|
|
120
|
+
private sessionExpiryMs;
|
|
121
|
+
private lastAccess;
|
|
122
|
+
constructor(keys: SignalKeyStore, config: Pick<SKDMConfig, 'maxSessionCacheSize' | 'logger' | 'sessionExpiryMs'>);
|
|
123
|
+
getSession(jid: string): any | undefined;
|
|
124
|
+
setSession(jid: string, session: any): void;
|
|
125
|
+
deleteSession(jid: string): void;
|
|
126
|
+
/**
|
|
127
|
+
* Cleanup expired sessions (untuk free RAM)
|
|
128
|
+
* Returns count of cleaned sessions
|
|
129
|
+
*/
|
|
130
|
+
cleanupExpiredSessions(): number;
|
|
131
|
+
/**
|
|
132
|
+
* Prefetch sessions untuk multiple JIDs (fix decryption failure)
|
|
133
|
+
* Bulk load sessions sebelum decrypt group messages
|
|
134
|
+
*/
|
|
135
|
+
prefetchSessions(jids: string[]): void;
|
|
136
|
+
getStats(): {
|
|
137
|
+
totalSessions: number;
|
|
138
|
+
expiredSessions: number;
|
|
139
|
+
size: number;
|
|
140
|
+
hits: number;
|
|
141
|
+
misses: number;
|
|
142
|
+
hitRate: number;
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* AppState key manager - manage app state sync keys dengan deduplication.
|
|
147
|
+
* Fix Baileys issue: app state sync keys bertumpuk tanpa cleanup.
|
|
148
|
+
*/
|
|
149
|
+
export declare class AppStateKeyManager {
|
|
150
|
+
private keys;
|
|
151
|
+
private logger;
|
|
152
|
+
private cache;
|
|
153
|
+
constructor(keys: SignalKeyStore, logger?: WALogger);
|
|
154
|
+
get(keyId: string): Uint8Array | undefined;
|
|
155
|
+
set(keyId: string, key: Uint8Array): void;
|
|
156
|
+
cleanup(maxKeep?: number): number;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Identity key manager dengan verification.
|
|
160
|
+
* Fix Baileys issue: identity changes gak tracked properly.
|
|
161
|
+
*/
|
|
162
|
+
export declare class IdentityKeyManager {
|
|
163
|
+
private keys;
|
|
164
|
+
private logger;
|
|
165
|
+
private trustedIdentities;
|
|
166
|
+
private changedIdentities;
|
|
167
|
+
constructor(keys: SignalKeyStore, logger?: WALogger);
|
|
168
|
+
get(jid: string): Uint8Array | undefined;
|
|
169
|
+
/**
|
|
170
|
+
* Save identity key, detect changes
|
|
171
|
+
* Returns true jika identity CHANGED (security concern)
|
|
172
|
+
*/
|
|
173
|
+
save(jid: string, identity: Uint8Array): boolean;
|
|
174
|
+
getChangedIdentities(): string[];
|
|
175
|
+
acknowledge(jid: string): void;
|
|
176
|
+
trust(jid: string): void;
|
|
177
|
+
private bytesEqual;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* SKDM - Store Key Data Manager
|
|
181
|
+
* Single entry point untuk semua key management operations.
|
|
182
|
+
*/
|
|
183
|
+
export declare class SKDM {
|
|
184
|
+
private config;
|
|
185
|
+
private logger;
|
|
186
|
+
private creds;
|
|
187
|
+
private keys;
|
|
188
|
+
preKeyManager: PreKeyManager;
|
|
189
|
+
sessionManager: SessionManager;
|
|
190
|
+
identityManager: IdentityKeyManager;
|
|
191
|
+
appStateManager: AppStateKeyManager;
|
|
192
|
+
private dirty;
|
|
193
|
+
private saveCredsDebounced;
|
|
194
|
+
private saveKeysDebounced;
|
|
195
|
+
private backgroundJobs;
|
|
196
|
+
private isInitialized;
|
|
197
|
+
constructor(creds: AuthenticationCreds, keys: SignalKeyStore, config: SKDMConfig);
|
|
198
|
+
/**
|
|
199
|
+
* Initialize SKDM - load state, start background jobs
|
|
200
|
+
*/
|
|
201
|
+
initialize(): Promise<void>;
|
|
202
|
+
markCredsDirty(): void;
|
|
203
|
+
markKeysDirty(): void;
|
|
204
|
+
private flushCreds;
|
|
205
|
+
private flushKeys;
|
|
206
|
+
flush(): Promise<void>;
|
|
207
|
+
getStats(): SKDMStats;
|
|
208
|
+
destroy(): Promise<void>;
|
|
209
|
+
}
|
|
210
|
+
export interface SKDMStats {
|
|
211
|
+
preKeys: ReturnType<PreKeyManager['getStats']>;
|
|
212
|
+
sessions: ReturnType<SessionManager['getStats']>;
|
|
213
|
+
identities: {
|
|
214
|
+
total: number;
|
|
215
|
+
changed: number;
|
|
216
|
+
};
|
|
217
|
+
appStateKeys: number;
|
|
218
|
+
pendingSaves: number;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skdm/index.ts"],"names":[],"mappings":"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"}
|