wa-multi-mongodb 3.10.8 → 3.11.1

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.
Files changed (38) hide show
  1. package/dist/Socket/index.d.ts +5 -0
  2. package/dist/Socket/index.d.ts.map +1 -1
  3. package/dist/Socket/index.js +42 -3
  4. package/dist/Utils/group-cache.d.ts.map +1 -1
  5. package/dist/Utils/group-cache.js +20 -12
  6. package/dist/Utils/index.d.ts +1 -0
  7. package/dist/Utils/index.d.ts.map +1 -1
  8. package/dist/Utils/index.js +1 -0
  9. package/dist/Utils/mongo-auth-state.d.ts.map +1 -1
  10. package/dist/Utils/mongo-auth-state.js +5 -3
  11. package/dist/Utils/save-media.d.ts.map +1 -1
  12. package/dist/Utils/save-media.js +6 -4
  13. package/dist/Utils/security.d.ts +7 -0
  14. package/dist/Utils/security.d.ts.map +1 -0
  15. package/dist/Utils/security.js +44 -0
  16. package/dist/cjs/Socket/index.d.ts +5 -0
  17. package/dist/cjs/Socket/index.d.ts.map +1 -1
  18. package/dist/cjs/Socket/index.js +43 -3
  19. package/dist/cjs/Utils/group-cache.d.ts.map +1 -1
  20. package/dist/cjs/Utils/group-cache.js +20 -12
  21. package/dist/cjs/Utils/index.d.ts +1 -0
  22. package/dist/cjs/Utils/index.d.ts.map +1 -1
  23. package/dist/cjs/Utils/index.js +1 -0
  24. package/dist/cjs/Utils/mongo-auth-state.d.ts.map +1 -1
  25. package/dist/cjs/Utils/mongo-auth-state.js +5 -3
  26. package/dist/cjs/Utils/save-media.d.ts.map +1 -1
  27. package/dist/cjs/Utils/save-media.js +6 -4
  28. package/dist/cjs/Utils/security.d.ts +7 -0
  29. package/dist/cjs/Utils/security.d.ts.map +1 -0
  30. package/dist/cjs/Utils/security.js +56 -0
  31. package/dist/cjs/index.d.ts +1 -0
  32. package/dist/cjs/index.d.ts.map +1 -1
  33. package/dist/cjs/index.js +1 -0
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +1 -0
  37. package/package.json +9 -8
  38. package/readme.md +1302 -1246
@@ -31,6 +31,11 @@ export declare const deleteSession: (sessionId: string) => Promise<void>;
31
31
  export declare const getAllSession: () => Promise<string[]>;
32
32
  export declare const getAllSessionSync: () => string[];
33
33
  export declare const getSession: (key: string) => WASocket | undefined;
34
+ export declare const downloadMediaMessage: ({ sessionId, message, key, }: {
35
+ sessionId: string;
36
+ message: any;
37
+ key?: any;
38
+ }) => Promise<Buffer>;
34
39
  /**
35
40
  * @deprecated Use loadSessionsFromMongo instead
36
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Socket/index.ts"],"names":[],"mappings":"AAAA,OAAqB,EAInB,QAAQ,EAET,MAAM,SAAS,CAAC;AAMjB,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EACd,kBAAkB,EAEnB,MAAM,UAAU,CAAC;AAqHlB;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,kBAkB5C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,GAAG,QAEjD;AAkBD,eAAO,MAAM,YAAY,GACvB,kBAAuB,EACvB,UAAS,kBAAsC,KAC9C,OAAO,CAAC,QAAQ,CAmKlB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,GACtC,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,UAAS,kBAAuB,KAC/B,OAAO,CAAC,QAAQ,CAqNlB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,iCA7Yf,kBAAkB,KAC1B,OAAO,CAAC,QAAQ,CA4YsB,CAAC;AA4C1C,eAAO,MAAM,aAAa,GAAU,WAAW,MAAM,kBAmCpD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,MAAM,EAAE,CAsBtD,CAAC;AAGF,eAAO,MAAM,iBAAiB,QAAO,MAAM,EAAiC,CAAC;AAE7E,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,QAAQ,GAAG,SACrB,CAAC;AAoChC;;GAEG;AACH,eAAO,MAAM,uBAAuB,YAMnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,UAAU,CAAC,GAAG,EAAE,eAAe,KAAK,GAAG,SAExE,CAAC;AACF,eAAO,MAAM,WAAW,GACtB,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,KAAK,GAAG,SAGxE,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,UAAU,CAAC,SAAS,EAAE,MAAM,KAAK,GAAG,SAE/D,CAAC;AACF,eAAO,MAAM,cAAc,GAAI,UAAU,CAAC,SAAS,EAAE,MAAM,KAAK,GAAG,SAElE,CAAC;AACF,eAAO,MAAM,YAAY,GAAI,UAAU,CAAC,SAAS,EAAE,MAAM,KAAK,GAAG,SAEhE,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,CAAC,IAAI,EAAE,cAAc,KAAK,GAAG,SAEtE,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,GAAG,SAInD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,qBAcjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,SAAQ,MAAqB,EAAE,iBAAgB,MAAe,SAG7F,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAS,MAAyB,SAGnE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,OAAO,CA2FlE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,+BAA+B,QAAa,OAAO,CAAC;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAiBhG,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAAO,MAAM,EAE/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,MAAM;;;;;;CAYjD,CAAC;AAGF,eAAO,MAAM,mBAAmB,GAAI,SAAS;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,SAEA,CAAC;AAGF,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,KAAK,MAAM,EACX,aAAY,OAAe,KAC1B,OAAO,CAAC,GAAG,CA4Bb,CAAC;AAGF,eAAO,MAAM,uBAAuB,GAAU,WAAW,MAAM,EAAE,KAAK,MAAM,kBAE3E,CAAC;AAGF,eAAO,MAAM,8BAA8B,GAAU,WAAW,MAAM,kBAErE,CAAC;AAGF,eAAO,MAAM,0BAA0B,YAEtC,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,WAAW,GAAU,WAAW,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,mBAAmB,CA8C7F,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,WAAW,GAAU,WAAW,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAgD3F,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,iBAAiB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,eAAe,EAAE,CA6CpF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,OAEzC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,OAExC,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,aAAa,GAAU,WAAW,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAoCzF,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,KAAK,GAAU,WAAW,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAkBjF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Socket/index.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import makeWASocket, { Browsers, DisconnectReason, fetchLatestBaileysVersion, jidNormalizedUser } from "baileys";
10
+ import makeWASocket, { Browsers, DisconnectReason, fetchLatestBaileysVersion, jidNormalizedUser, downloadMediaMessage as baileysDownloadMediaMessage, } from "baileys";
11
11
  import path from "path";
12
12
  import fs from "fs";
13
13
  import QRCode from "qrcode";
@@ -20,6 +20,7 @@ import { parseMessageStatusCodeToReadable } from "../Utils/message-status.js";
20
20
  import { MongoClient } from "mongodb";
21
21
  import { useMongoAuthState } from "../Utils/mongo-auth-state.js";
22
22
  import { createDelay } from "../Utils/create-delay.js";
23
+ import { assertValidJidIdentifier, assertValidSessionId, maskSensitiveValue } from "../Utils/security.js";
23
24
  const sessions = new Map();
24
25
  /**
25
26
  * Valid PlatformType values that WhatsApp recognizes
@@ -143,6 +144,7 @@ function initMongo() {
143
144
  });
144
145
  }
145
146
  export const startSession = (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (sessionId = "mysession", options = { printQR: true }) {
147
+ sessionId = assertValidSessionId(sessionId);
146
148
  if (isSessionExistAndRunning(sessionId))
147
149
  throw new WhatsappError(Messages.sessionAlreadyExist(sessionId));
148
150
  yield initMongo();
@@ -310,6 +312,7 @@ export const startSession = (...args_1) => __awaiter(void 0, [...args_1], void 0
310
312
  * @returns Promise<WASocket> The WhatsApp socket instance
311
313
  */
312
314
  export const startSessionWithPairingCode = (sessionId_1, phoneNumber_1, ...args_1) => __awaiter(void 0, [sessionId_1, phoneNumber_1, ...args_1], void 0, function* (sessionId, phoneNumber, options = {}) {
315
+ sessionId = assertValidSessionId(sessionId);
313
316
  if (isSessionExistAndRunning(sessionId))
314
317
  throw new WhatsappError(Messages.sessionAlreadyExist(sessionId));
315
318
  // Simpan informasi session pairing code untuk auto-reconnect
@@ -353,7 +356,7 @@ export const startSessionWithPairingCode = (sessionId_1, phoneNumber_1, ...args_
353
356
  const code = yield sock.requestPairingCode(phoneNumberFormatted);
354
357
  // Pastikan kode ada dan merupakan string
355
358
  if (code && typeof code === 'string') {
356
- console.log(`Pairing code untuk session ${sessionId}: ${code}`);
359
+ console.log(`Pairing code untuk session ${sessionId}: ${maskSensitiveValue(code)}`);
357
360
  // Panggil callback yang terdaftar
358
361
  (_a = callback.get(CALLBACK_KEY.ON_PAIRING_CODE)) === null || _a === void 0 ? void 0 : _a(sessionId, code);
359
362
  (_b = options.onPairingCode) === null || _b === void 0 ? void 0 : _b.call(options, code);
@@ -522,6 +525,7 @@ export const startWhatsapp = startSession;
522
525
  * @param sessionId Session ID to soft delete
523
526
  */
524
527
  const softDeleteSession = (sessionId_1, ...args_1) => __awaiter(void 0, [sessionId_1, ...args_1], void 0, function* (sessionId, preserveData = false) {
528
+ sessionId = assertValidSessionId(sessionId);
525
529
  const session = getSession(sessionId);
526
530
  try {
527
531
  yield (session === null || session === void 0 ? void 0 : session.logout());
@@ -557,6 +561,7 @@ const softDeleteSession = (sessionId_1, ...args_1) => __awaiter(void 0, [session
557
561
  }
558
562
  });
559
563
  export const deleteSession = (sessionId) => __awaiter(void 0, void 0, void 0, function* () {
564
+ sessionId = assertValidSessionId(sessionId);
560
565
  const session = getSession(sessionId);
561
566
  try {
562
567
  yield (session === null || session === void 0 ? void 0 : session.logout());
@@ -615,8 +620,28 @@ export const getAllSession = () => __awaiter(void 0, void 0, void 0, function* (
615
620
  });
616
621
  // Untuk backward compatibility
617
622
  export const getAllSessionSync = () => Array.from(sessions.keys());
618
- export const getSession = (key) => sessions.get(key);
623
+ export const getSession = (key) => sessions.get(assertValidSessionId(key));
624
+ export const downloadMediaMessage = (_a) => __awaiter(void 0, [_a], void 0, function* ({ sessionId, message, key, }) {
625
+ const session = getSession(sessionId);
626
+ if (!session) {
627
+ throw new WhatsappError(Messages.sessionNotFound(sessionId));
628
+ }
629
+ if (!message) {
630
+ throw new WhatsappError("Message is required to download media");
631
+ }
632
+ try {
633
+ const buffer = yield baileysDownloadMediaMessage(message, "buffer", {}, {
634
+ logger: P,
635
+ reuploadRequest: session.updateMediaMessage,
636
+ });
637
+ return buffer;
638
+ }
639
+ catch (error) {
640
+ throw new WhatsappError(`Failed to download media: ${error.message || String(error)}`);
641
+ }
642
+ });
619
643
  const isSessionExistAndRunning = (sessionId) => {
644
+ sessionId = assertValidSessionId(sessionId);
620
645
  // Cek jika session sudah berjalan di memory
621
646
  if (getSession(sessionId)) {
622
647
  return true;
@@ -629,6 +654,7 @@ const isSessionExistAndRunning = (sessionId) => {
629
654
  * @returns Boolean indicating if session should be loaded
630
655
  */
631
656
  const shouldLoadSession = (sessionId) => __awaiter(void 0, void 0, void 0, function* () {
657
+ sessionId = assertValidSessionId(sessionId);
632
658
  // Jika session sudah berjalan di memory, tidak perlu load lagi
633
659
  if (getSession(sessionId)) {
634
660
  return false;
@@ -726,6 +752,7 @@ export const setCredentialsDir = (dirname = "wa_credentials") => {
726
752
  */
727
753
  export const reconnect = (sessionId) => __awaiter(void 0, void 0, void 0, function* () {
728
754
  try {
755
+ sessionId = assertValidSessionId(sessionId);
729
756
  // Cek jika session masih ada di memory
730
757
  const existingSession = sessions.get(sessionId);
731
758
  // Hapus session terlebih dahulu untuk menghindari konflik
@@ -842,6 +869,7 @@ export const getPairingCodeSessions = () => {
842
869
  * @returns Object with session status information
843
870
  */
844
871
  export const getSessionStatus = (sessionId) => {
872
+ sessionId = assertValidSessionId(sessionId);
845
873
  const isRunning = !!getSession(sessionId);
846
874
  const isPairingCodeSession = pairingCodeSessions.has(sessionId);
847
875
  const retryAttempts = retryCount.get(sessionId) || 0;
@@ -859,6 +887,8 @@ export const setGroupCacheConfig = (options) => {
859
887
  };
860
888
  // Fungsi baru untuk mendapatkan atau memuat data grup dengan multi-session support
861
889
  export const getGroupMetadata = (sessionId_1, jid_1, ...args_1) => __awaiter(void 0, [sessionId_1, jid_1, ...args_1], void 0, function* (sessionId, jid, forceFetch = false) {
890
+ sessionId = assertValidSessionId(sessionId);
891
+ jid = assertValidJidIdentifier(jid, "jid");
862
892
  // Get the session socket
863
893
  const sock = getSession(sessionId);
864
894
  if (!sock) {
@@ -887,10 +917,13 @@ export const getGroupMetadata = (sessionId_1, jid_1, ...args_1) => __awaiter(voi
887
917
  });
888
918
  // Fungsi baru untuk menghapus cache grup tertentu
889
919
  export const clearGroupMetadataCache = (sessionId, jid) => __awaiter(void 0, void 0, void 0, function* () {
920
+ sessionId = assertValidSessionId(sessionId);
921
+ jid = assertValidJidIdentifier(jid, "jid");
890
922
  yield groupCache.delete(sessionId, jid);
891
923
  });
892
924
  // Fungsi untuk membersihkan seluruh cache grup untuk session tertentu
893
925
  export const clearSessionGroupMetadataCache = (sessionId) => __awaiter(void 0, void 0, void 0, function* () {
926
+ sessionId = assertValidSessionId(sessionId);
894
927
  yield groupCache.clearSessionCache(sessionId);
895
928
  });
896
929
  // Fungsi untuk membersihkan seluruh cache grup untuk semua session
@@ -922,6 +955,8 @@ export const clearAllGroupMetadataCache = () => {
922
955
  */
923
956
  export const getPNForLID = (sessionId, lid) => __awaiter(void 0, void 0, void 0, function* () {
924
957
  var _a, _b;
958
+ sessionId = assertValidSessionId(sessionId);
959
+ lid = assertValidJidIdentifier(lid, "lid");
925
960
  const session = getSession(sessionId);
926
961
  if (!session) {
927
962
  return {
@@ -989,6 +1024,7 @@ export const getPNForLID = (sessionId, lid) => __awaiter(void 0, void 0, void 0,
989
1024
  */
990
1025
  export const getLIDForPN = (sessionId, pn) => __awaiter(void 0, void 0, void 0, function* () {
991
1026
  var _a, _b;
1027
+ sessionId = assertValidSessionId(sessionId);
992
1028
  const session = getSession(sessionId);
993
1029
  if (!session) {
994
1030
  return {
@@ -1054,6 +1090,7 @@ export const getLIDForPN = (sessionId, pn) => __awaiter(void 0, void 0, void 0,
1054
1090
  * @note This may return an empty array if no mappings are available yet.
1055
1091
  */
1056
1092
  export const getAllLIDMappings = (sessionId) => __awaiter(void 0, void 0, void 0, function* () {
1093
+ sessionId = assertValidSessionId(sessionId);
1057
1094
  const session = getSession(sessionId);
1058
1095
  if (!session) {
1059
1096
  throw new WhatsappError(Messages.sessionNotFound(sessionId));
@@ -1145,6 +1182,7 @@ export const isPNFormat = (jid) => {
1145
1182
  * ```
1146
1183
  */
1147
1184
  export const toPhoneNumber = (sessionId, jid) => __awaiter(void 0, void 0, void 0, function* () {
1185
+ sessionId = assertValidSessionId(sessionId);
1148
1186
  // Handle null/undefined input
1149
1187
  if (!jid) {
1150
1188
  return null;
@@ -1195,6 +1233,7 @@ export const toPhoneNumber = (sessionId, jid) => __awaiter(void 0, void 0, void
1195
1233
  * ```
1196
1234
  */
1197
1235
  export const toLID = (sessionId, jid) => __awaiter(void 0, void 0, void 0, function* () {
1236
+ sessionId = assertValidSessionId(sessionId);
1198
1237
  // If already in LID format, return as-is
1199
1238
  if (isLIDFormat(jid)) {
1200
1239
  return jid;
@@ -1 +1 @@
1
- {"version":3,"file":"group-cache.d.ts","sourceRoot":"","sources":["../../src/Utils/group-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKxC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAuB;IAGvC,OAAO;WAUO,WAAW,IAAI,kBAAkB;IAQlC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBpD,OAAO,CAAC,cAAc;IAKT,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAoCtE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/E,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBzD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzD,SAAS,CAAC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAU5D,KAAK,IAAI,IAAI;CAGrB;AAGD,eAAO,MAAM,UAAU,oBAAmC,CAAC"}
1
+ {"version":3,"file":"group-cache.d.ts","sourceRoot":"","sources":["../../src/Utils/group-cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAMxC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAuB;IAGvC,OAAO;WAUO,WAAW,IAAI,kBAAkB;IAQlC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBpD,OAAO,CAAC,cAAc;IAKT,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAsCtE,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B/E,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBzD,SAAS,CAAC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAU5D,KAAK,IAAI,IAAI;CAGrB;AAGD,eAAO,MAAM,UAAU,oBAAmC,CAAC"}
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import NodeCache from "node-cache";
11
11
  import { MongoClient } from "mongodb";
12
12
  import { CREDENTIALS } from "../Defaults/index.js";
13
+ import { assertValidJidIdentifier, assertValidSessionId } from "./security.js";
13
14
  // Class untuk mengelola cache group metadata dengan pendekatan hybrid (NodeCache + MongoDB)
14
15
  export class GroupMetadataCache {
15
16
  // Konstruktor private untuk singleton pattern
@@ -58,8 +59,10 @@ export class GroupMetadataCache {
58
59
  // Mendapatkan metadata grup dari cache atau MongoDB
59
60
  get(sessionId, groupId) {
60
61
  return __awaiter(this, void 0, void 0, function* () {
62
+ const safeSessionId = assertValidSessionId(sessionId);
63
+ const safeGroupId = assertValidJidIdentifier(groupId, "groupId");
61
64
  // Buat kunci cache dengan kombinasi sessionId dan groupId
62
- const cacheKey = this.createCacheKey(sessionId, groupId);
65
+ const cacheKey = this.createCacheKey(safeSessionId, safeGroupId);
63
66
  // Coba ambil dari cache memory dulu
64
67
  const cachedData = this.cache.get(cacheKey);
65
68
  if (cachedData) {
@@ -69,8 +72,8 @@ export class GroupMetadataCache {
69
72
  if (this.mongoCollection) {
70
73
  try {
71
74
  const data = yield this.mongoCollection.findOne({
72
- id: groupId,
73
- sessionId: sessionId
75
+ id: safeGroupId,
76
+ sessionId: safeSessionId
74
77
  });
75
78
  if (data) {
76
79
  // Hapus _id dari MongoDB yang tidak diperlukan
@@ -91,18 +94,20 @@ export class GroupMetadataCache {
91
94
  // Menyimpan metadata grup ke cache dan MongoDB
92
95
  set(sessionId, groupId, metadata) {
93
96
  return __awaiter(this, void 0, void 0, function* () {
97
+ const safeSessionId = assertValidSessionId(sessionId);
98
+ const safeGroupId = assertValidJidIdentifier(groupId, "groupId");
94
99
  // Buat kunci cache dengan kombinasi sessionId dan groupId
95
- const cacheKey = this.createCacheKey(sessionId, groupId);
100
+ const cacheKey = this.createCacheKey(safeSessionId, safeGroupId);
96
101
  // Simpan ke cache memory
97
102
  this.cache.set(cacheKey, metadata);
98
103
  // Jika MongoDB tersedia, simpan juga ke MongoDB
99
104
  if (this.mongoCollection) {
100
105
  try {
101
106
  // Tambahkan sessionId ke data yang disimpan
102
- const dataToStore = Object.assign(Object.assign({}, metadata), { sessionId });
107
+ const dataToStore = Object.assign(Object.assign({}, metadata), { sessionId: safeSessionId });
103
108
  yield this.mongoCollection.updateOne({
104
- id: groupId,
105
- sessionId: sessionId
109
+ id: safeGroupId,
110
+ sessionId: safeSessionId
106
111
  }, { $set: dataToStore }, { upsert: true });
107
112
  }
108
113
  catch (error) {
@@ -114,16 +119,18 @@ export class GroupMetadataCache {
114
119
  // Menghapus metadata grup dari cache dan MongoDB
115
120
  delete(sessionId, groupId) {
116
121
  return __awaiter(this, void 0, void 0, function* () {
122
+ const safeSessionId = assertValidSessionId(sessionId);
123
+ const safeGroupId = assertValidJidIdentifier(groupId, "groupId");
117
124
  // Buat kunci cache dengan kombinasi sessionId dan groupId
118
- const cacheKey = this.createCacheKey(sessionId, groupId);
125
+ const cacheKey = this.createCacheKey(safeSessionId, safeGroupId);
119
126
  // Hapus dari cache memory
120
127
  this.cache.del(cacheKey);
121
128
  // Jika MongoDB tersedia, hapus juga dari MongoDB
122
129
  if (this.mongoCollection) {
123
130
  try {
124
131
  yield this.mongoCollection.deleteOne({
125
- id: groupId,
126
- sessionId: sessionId
132
+ id: safeGroupId,
133
+ sessionId: safeSessionId
127
134
  });
128
135
  }
129
136
  catch (error) {
@@ -135,10 +142,11 @@ export class GroupMetadataCache {
135
142
  // Menghapus semua cache untuk session tertentu
136
143
  clearSessionCache(sessionId) {
137
144
  return __awaiter(this, void 0, void 0, function* () {
145
+ const safeSessionId = assertValidSessionId(sessionId);
138
146
  // Hapus dari MongoDB
139
147
  if (this.mongoCollection) {
140
148
  try {
141
- yield this.mongoCollection.deleteMany({ sessionId: sessionId });
149
+ yield this.mongoCollection.deleteMany({ sessionId: safeSessionId });
142
150
  }
143
151
  catch (error) {
144
152
  console.error(`Error clearing session ${sessionId} cache from MongoDB:`, error);
@@ -147,7 +155,7 @@ export class GroupMetadataCache {
147
155
  // Hapus dari memory cache
148
156
  // Karena NodeCache tidak mendukung wildcard delete, kita harus mendapatkan semua kunci dulu
149
157
  const allKeys = this.cache.keys();
150
- const sessionKeys = allKeys.filter(key => key.startsWith(`${sessionId}:`));
158
+ const sessionKeys = allKeys.filter(key => key.startsWith(`${safeSessionId}:`));
151
159
  sessionKeys.forEach(key => this.cache.del(key));
152
160
  });
153
161
  }
@@ -3,4 +3,5 @@ export * from "./is-exist.js";
3
3
  export * from "./create-delay.js";
4
4
  export * from "./group-cache.js";
5
5
  export * from "./lid-utils.js";
6
+ export * from "./security.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -3,5 +3,6 @@ export * from "./is-exist.js";
3
3
  export * from "./create-delay.js";
4
4
  export * from "./group-cache.js";
5
5
  export * from "./lid-utils.js";
6
+ export * from "./security.js";
6
7
  // Note: setCredentialsDir & setMongoDBNames have been moved to src/Socket/index.ts
7
8
  // Please import them directly from there instead
@@ -1 +1 @@
1
- {"version":3,"file":"mongo-auth-state.d.ts","sourceRoot":"","sources":["../../src/Utils/mongo-auth-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,SAAS,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAuC1C,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;;;;kBAgC7D,CAAC,SAAS,MAAM,iBAAiB,QAAQ,CAAC,OAAO,MAAM,EAAE;;;2BAWhD,GAAG;;;;GAqB/B"}
1
+ {"version":3,"file":"mongo-auth-state.d.ts","sourceRoot":"","sources":["../../src/Utils/mongo-auth-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,SAAS,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAwC1C,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;;;;kBAkC7D,CAAC,SAAS,MAAM,iBAAiB,QAAQ,CAAC,OAAO,MAAM,EAAE;;;2BAWhD,GAAG;;;;GAqB/B"}
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { proto } from "baileys/WAProto/index.js";
11
11
  import { Curve, signedKeyPair } from "baileys/lib/Utils/crypto.js";
12
12
  import { generateRegistrationId } from "baileys/lib/Utils/generics.js";
13
+ import { assertValidSessionId } from "./security.js";
13
14
  const BufferJSON = {
14
15
  replacer: (_, value) => {
15
16
  if (Buffer.isBuffer(value) || value instanceof Uint8Array || (value === null || value === void 0 ? void 0 : value.type) === "Buffer") {
@@ -47,17 +48,18 @@ const initAuthCreds = () => {
47
48
  };
48
49
  export function useMongoAuthState(sessionId, collection) {
49
50
  return __awaiter(this, void 0, void 0, function* () {
51
+ const safeSessionId = assertValidSessionId(sessionId);
50
52
  const readState = () => __awaiter(this, void 0, void 0, function* () {
51
- const doc = yield collection.findOne({ sessionId });
53
+ const doc = yield collection.findOne({ sessionId: safeSessionId });
52
54
  return (doc === null || doc === void 0 ? void 0 : doc.state)
53
55
  ? JSON.parse(JSON.stringify(doc.state), BufferJSON.reviver)
54
56
  : null;
55
57
  });
56
58
  const writeState = (state) => __awaiter(this, void 0, void 0, function* () {
57
- yield collection.updateOne({ sessionId }, { $set: { state: JSON.parse(JSON.stringify(state, BufferJSON.replacer)) } }, { upsert: true });
59
+ yield collection.updateOne({ sessionId: safeSessionId }, { $set: { state: JSON.parse(JSON.stringify(state, BufferJSON.replacer)) } }, { upsert: true });
58
60
  });
59
61
  const removeKey = (key) => __awaiter(this, void 0, void 0, function* () {
60
- yield collection.updateOne({ sessionId }, { $unset: { [`state.keys.${key}`]: "" } });
62
+ yield collection.updateOne({ sessionId: safeSessionId }, { $unset: { [`state.keys.${key}`]: "" } });
61
63
  });
62
64
  const savedState = (yield readState()) || {};
63
65
  const creds = savedState.creds || initAuthCreds();
@@ -1 +1 @@
1
- {"version":3,"file":"save-media.d.ts","sourceRoot":"","sources":["../../src/Utils/save-media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAQ3C,eAAO,MAAM,gBAAgB,GAAU,KAAK,eAAe,EAAE,MAAM,MAAM,kBAOxE,CAAC;AACF,eAAO,MAAM,gBAAgB,GAAU,KAAK,eAAe,EAAE,MAAM,MAAM,kBAOxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,KAAK,eAAe,EACpB,MAAM,MAAM,kBAUb,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,KAAK,eAAe,EAAE,MAAM,MAAM,kBAOxE,CAAC"}
1
+ {"version":3,"file":"save-media.d.ts","sourceRoot":"","sources":["../../src/Utils/save-media.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAU3C,eAAO,MAAM,gBAAgB,GAAU,KAAK,eAAe,EAAE,MAAM,MAAM,kBAOxE,CAAC;AACF,eAAO,MAAM,gBAAgB,GAAU,KAAK,eAAe,EAAE,MAAM,MAAM,kBAOxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,KAAK,eAAe,EACpB,MAAM,MAAM,kBAUb,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,KAAK,eAAe,EAAE,MAAM,MAAM,kBAOxE,CAAC"}
@@ -10,8 +10,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { downloadMediaMessage } from "baileys";
11
11
  import ValidationError from "./error.js";
12
12
  import fs from "fs/promises";
13
- const saveMedia = (path, data) => __awaiter(void 0, void 0, void 0, function* () {
14
- yield fs.writeFile(path, data.toString("base64"), "base64");
13
+ import { assertSafeFilePath, sanitizeFileExtension } from "./security.js";
14
+ const saveMedia = (filePath, data) => __awaiter(void 0, void 0, void 0, function* () {
15
+ const safePath = assertSafeFilePath(filePath);
16
+ yield fs.writeFile(safePath, data.toString("base64"), "base64");
15
17
  });
16
18
  export const saveImageHandler = (msg, path) => __awaiter(void 0, void 0, void 0, function* () {
17
19
  var _a;
@@ -32,8 +34,8 @@ export const saveDocumentHandler = (msg, path) => __awaiter(void 0, void 0, void
32
34
  if (!((_a = msg.message) === null || _a === void 0 ? void 0 : _a.documentMessage))
33
35
  throw new ValidationError("Message is not contain Document");
34
36
  const buf = yield downloadMediaMessage(msg, "buffer", {});
35
- const ext = (_b = msg.message.documentMessage.fileName) === null || _b === void 0 ? void 0 : _b.split(".").pop();
36
- path += "." + ext;
37
+ const ext = sanitizeFileExtension((_b = msg.message.documentMessage.fileName) === null || _b === void 0 ? void 0 : _b.split(".").pop());
38
+ path = `${assertSafeFilePath(path)}.${ext}`;
37
39
  return saveMedia(path, buf);
38
40
  });
39
41
  export const saveAudioHandler = (msg, path) => __awaiter(void 0, void 0, void 0, function* () {
@@ -0,0 +1,7 @@
1
+ export declare const assertValidIdentifier: (value: string, fieldName: string) => string;
2
+ export declare const assertValidSessionId: (sessionId: string) => string;
3
+ export declare const assertValidJidIdentifier: (value: string, fieldName: string) => string;
4
+ export declare const assertSafeFilePath: (filePath: string) => string;
5
+ export declare const sanitizeFileExtension: (extension?: string) => string;
6
+ export declare const maskSensitiveValue: (value: string, visibleChars?: number) => string;
7
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/Utils/security.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,qBAAqB,GAAI,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,MAQxE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,KAAG,MACV,CAAC;AAEhD,eAAO,MAAM,wBAAwB,GAAI,OAAO,MAAM,EAAE,WAAW,MAAM,KAAG,MAQ3E,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,MAiBrD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,YAAY,MAAM,KAAG,MAK1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,EAAE,qBAAgB,KAAG,MAKpE,CAAC"}
@@ -0,0 +1,44 @@
1
+ import path from "path";
2
+ import { WhatsappError } from "../Error/index.js";
3
+ const SAFE_IDENTIFIER_PATTERN = /^[A-Za-z0-9_-]{1,128}$/;
4
+ const SAFE_JID_IDENTIFIER_PATTERN = /^[A-Za-z0-9_@.:-]{1,192}$/;
5
+ export const assertValidIdentifier = (value, fieldName) => {
6
+ if (typeof value !== "string" || !SAFE_IDENTIFIER_PATTERN.test(value)) {
7
+ throw new WhatsappError(`${fieldName} hanya boleh berisi huruf, angka, underscore, atau dash dengan panjang 1-128 karakter`);
8
+ }
9
+ return value;
10
+ };
11
+ export const assertValidSessionId = (sessionId) => assertValidIdentifier(sessionId, "sessionId");
12
+ export const assertValidJidIdentifier = (value, fieldName) => {
13
+ if (typeof value !== "string" || !SAFE_JID_IDENTIFIER_PATTERN.test(value)) {
14
+ throw new WhatsappError(`${fieldName} berisi karakter tidak valid atau melebihi 192 karakter`);
15
+ }
16
+ return value;
17
+ };
18
+ export const assertSafeFilePath = (filePath) => {
19
+ if (typeof filePath !== "string" || filePath.trim().length === 0) {
20
+ throw new WhatsappError("File path is required");
21
+ }
22
+ if (filePath.includes("\0")) {
23
+ throw new WhatsappError("File path contains invalid characters");
24
+ }
25
+ const normalized = path.normalize(filePath);
26
+ const baseName = path.basename(normalized);
27
+ if (!baseName || baseName === "." || baseName === "..") {
28
+ throw new WhatsappError("File path must include a valid file name");
29
+ }
30
+ return normalized;
31
+ };
32
+ export const sanitizeFileExtension = (extension) => {
33
+ if (!extension)
34
+ return "bin";
35
+ const cleanExtension = extension.replace(/[^A-Za-z0-9]/g, "").slice(0, 16);
36
+ return cleanExtension || "bin";
37
+ };
38
+ export const maskSensitiveValue = (value, visibleChars = 2) => {
39
+ if (!value)
40
+ return "";
41
+ if (value.length <= visibleChars * 2)
42
+ return "*".repeat(value.length);
43
+ return `${value.slice(0, visibleChars)}${"*".repeat(value.length - visibleChars * 2)}${value.slice(-visibleChars)}`;
44
+ };
@@ -31,6 +31,11 @@ export declare const deleteSession: (sessionId: string) => Promise<void>;
31
31
  export declare const getAllSession: () => Promise<string[]>;
32
32
  export declare const getAllSessionSync: () => string[];
33
33
  export declare const getSession: (key: string) => WASocket | undefined;
34
+ export declare const downloadMediaMessage: ({ sessionId, message, key, }: {
35
+ sessionId: string;
36
+ message: any;
37
+ key?: any;
38
+ }) => Promise<Buffer>;
34
39
  /**
35
40
  * @deprecated Use loadSessionsFromMongo instead
36
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Socket/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Socket/index.ts"],"names":[],"mappings":"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"}