@neelegirl/wa-api 1.6.8 → 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.
@@ -1,379 +1,441 @@
1
- "use strict";
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
2
37
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.onPairingCode = exports.onMessageUpdate = exports.onConnecting = exports.onDisconnected = exports.onConnected = exports.onQRUpdated = exports.onMessageReceived = exports.sock = exports.loadSessionsFromStorage = exports.getAllSessionData = exports.getSession = exports.getAllSession = exports.deleteSession = exports.startWhatsapp = exports.startSessionWithPairingCode = exports.onimaii = exports.startSession = void 0;
4
-
5
- const baileys_1 = require("@neelegirl/baileys");
6
- const pino_1 = require("pino");
7
- const path_1 = require("path");
8
- const fs_1 = require("fs");
9
- const https_1 = require("https");
38
+ exports.onPairingCode = exports.onMessageUpdate = exports.onConnecting = exports.onDisconnected = exports.onConnected = exports.onQRUpdated = exports.onMessageReceived = exports.loadSessionsFromStorage = exports.getSession = exports.getAllSession = exports.deleteSession = exports.startWhatsapp = exports.startSession = void 0;
39
+ const baileys_1 = __importStar(require("@neelegirl/baileys"));
40
+ const pino_1 = __importDefault(require("pino"));
41
+ const path_1 = __importDefault(require("path"));
42
+ const fs_1 = __importDefault(require("fs"));
43
+ const https_1 = __importDefault(require("https"));
10
44
  const Defaults_1 = require("../Defaults");
11
45
  const save_media_1 = require("../Utils/save-media");
12
46
  const Error_1 = require("../Error");
13
47
  const message_status_1 = require("../Utils/message-status");
14
-
15
48
  const sessions = new Map();
16
49
  const callback = new Map();
17
50
  const retryCount = new Map();
18
-
19
- let CURRENT_WA_API_VERSION = "1.6.5";
51
+ let stock;
52
+ const CURRENT_WA_API_VERSION = "1.3.3";
20
53
  let waApiUpdateCheckDone = false;
21
54
 
22
- try {
23
- const pkg = require("../../package.json");
24
- if (pkg && typeof pkg.version === "string") {
25
- CURRENT_WA_API_VERSION = pkg.version;
26
- }
27
- }
28
- catch (_) {
29
- }
30
-
31
- const isNewerVersion = (latest, current) => {
32
- if (!latest || !current) {
33
- return false;
34
- }
35
- const a = current.split(".").map((n) => parseInt(n, 10) || 0);
36
- const b = latest.split(".").map((n) => parseInt(n, 10) || 0);
37
- for (let i = 0; i < Math.max(a.length, b.length); i += 1) {
38
- const x = a[i] || 0;
39
- const y = b[i] || 0;
40
- if (y > x) {
41
- return true;
42
- }
43
- if (y < x) {
44
- return false;
45
- }
55
+ function isNewerVersion(latest, current) {
56
+ if (!latest || !current) return false;
57
+ const a = current.split('.').map((n) => parseInt(n, 10) || 0);
58
+ const b = latest.split('.').map((n) => parseInt(n, 10) || 0);
59
+ for (let i = 0; i < Math.max(a.length, b.length); i++) {
60
+ const x = a[i] || 0, y = b[i] || 0;
61
+ if (y > x) return true;
62
+ if (y < x) return false;
46
63
  }
47
64
  return false;
48
- };
65
+ }
49
66
 
67
+ // Liest von der offiziellen npm-Registry (registry.npmjs.org), ob ein Update existiert – nur 1x pro Prozess
50
68
  const checkWaApiUpdate = () => {
51
69
  if (waApiUpdateCheckDone) {
52
70
  return Promise.resolve(null);
53
71
  }
54
72
  waApiUpdateCheckDone = true;
55
73
  return new Promise((resolve) => {
56
- const url = "https://registry.npmjs.org/@neelegirl/wa-api/latest";
57
- https_1.get(url, { timeout: 5000 }, (res) => {
58
- let data = "";
59
- res.on("data", (chunk) => {
74
+ const url = `https://registry.npmjs.org/@neelegirl/wa-api/latest`;
75
+ https_1.default.get(url, { timeout: 5000 }, (res) => {
76
+ let data = '';
77
+ res.on('data', (chunk) => {
60
78
  data += chunk;
61
79
  });
62
- res.on("end", () => {
80
+ res.on('end', () => {
63
81
  try {
64
- const latestVersion = JSON.parse(data)?.version;
82
+ const packageInfo = JSON.parse(data);
83
+ const latestVersion = packageInfo.version;
65
84
  if (latestVersion && isNewerVersion(latestVersion, CURRENT_WA_API_VERSION)) {
66
- console.log(
67
- [
68
- "",
69
- "[wa-api] Update available",
70
- `Current: ${CURRENT_WA_API_VERSION}`,
71
- `Latest: ${latestVersion}`,
72
- "Run: npm install @neelegirl/wa-api@latest",
73
- ""
74
- ].join("\n")
75
- );
85
+ const updateMessage = `\n╔════════════════════════════════════════╗\n║ 🔔 NEUES UPDATE VERFÜGBAR! 🔔 ║\n╠════════════════════════════════════════╣\n║ @neelegirl/wa-api ║\n║ Aktuelle Version: ${(CURRENT_WA_API_VERSION || '').padEnd(20)} ║\n║ Neue Version: ${(latestVersion || '').padEnd(20)} ║\n║ ║\n║ Bitte aktualisiere: ║\n║ npm install @neelegirl/wa-api@latest ║\n╚════════════════════════════════════════╝\n`;
86
+ console.log(updateMessage);
76
87
  resolve({
77
88
  current: CURRENT_WA_API_VERSION,
78
89
  latest: latestVersion,
79
90
  hasUpdate: true
80
91
  });
81
- return;
82
92
  }
83
- resolve({
84
- current: CURRENT_WA_API_VERSION,
85
- latest: latestVersion || CURRENT_WA_API_VERSION,
86
- hasUpdate: false
87
- });
93
+ else {
94
+ const currentVersionMessage = `\n╔════════════════════════════════════════╗\n║ ✅ Du nutzt die aktuelle Version ║\n║ von @neelegirl/wa-api ║\n╚════════════════════════════════════════╝\n`;
95
+ console.log(currentVersionMessage);
96
+ resolve({
97
+ current: CURRENT_WA_API_VERSION,
98
+ latest: latestVersion || CURRENT_WA_API_VERSION,
99
+ hasUpdate: false
100
+ });
101
+ }
88
102
  }
89
- catch (_) {
103
+ catch (error) {
90
104
  resolve(null);
91
105
  }
92
106
  });
93
- }).on("error", () => resolve(null))
94
- .on("timeout", () => resolve(null));
107
+ }).on('error', () => {
108
+ resolve(null);
109
+ }).on('timeout', () => {
110
+ resolve(null);
111
+ });
95
112
  });
96
113
  };
97
-
98
- const emitMessageUpsert = (sessionId, msg) => {
99
- msg.sessionId = sessionId;
100
- msg.saveImage = (path) => (0, save_media_1.saveImageHandler)(msg, path);
101
- msg.saveVideo = (path) => (0, save_media_1.saveVideoHandler)(msg, path);
102
- msg.saveDocument = (path) => (0, save_media_1.saveDocumentHandler)(msg, path);
103
- callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED)?.({ ...msg });
104
- };
105
-
106
- const attachSocketEvents = (sessionId, sock, saveCreds, restartSocket) => {
107
- sock.ev.process(async (events) => {
108
- if (events["connection.update"]) {
109
- const update = events["connection.update"];
110
- const { connection, lastDisconnect } = update;
111
- if (update.qr) {
112
- callback.get(Defaults_1.CALLBACK_KEY.ON_QR)?.({
113
- sessionId,
114
- qr: update.qr
115
- });
116
- }
117
- if (connection === "connecting") {
118
- callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTING)?.(sessionId);
119
- }
120
- if (connection === "close") {
121
- const code = lastDisconnect?.error?.output?.statusCode;
122
- let retryAttempt = retryCount.get(sessionId) ?? 0;
123
- const shouldRetry = code !== baileys_1.DisconnectReason.loggedOut && retryAttempt < 10;
124
- if (shouldRetry) {
125
- retryAttempt += 1;
126
- retryCount.set(sessionId, retryAttempt);
127
- restartSocket();
114
+ const startSession = (sessionId = "mysession", options = { printQR: true }) => __awaiter(void 0, void 0, void 0, function* () {
115
+ // Prüfe auf Updates beim Start
116
+ checkWaApiUpdate().catch(() => {
117
+ // Silently fail if update check fails
118
+ });
119
+ if (isSessionExistAndRunning(sessionId))
120
+ throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
121
+ const logger = (0, pino_1.default)({ level: "silent" });
122
+ const { version } = yield (0, baileys_1.fetchLatestBaileysVersion)();
123
+ const startSocket = () => __awaiter(void 0, void 0, void 0, function* () {
124
+ const { state, saveCreds } = yield (0, baileys_1.useMultiFileAuthState)(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX));
125
+ const sock = (0, baileys_1.default)({
126
+ version,
127
+ printQRInTerminal: options.printQR,
128
+ auth: state,
129
+ logger,
130
+ markOnlineOnConnect: false,
131
+ browser: baileys_1.Browsers.ubuntu("Chrome"),
132
+ });
133
+ sessions.set(sessionId, sock);
134
+ try {
135
+
136
+ sock.ev.process((events) => __awaiter(void 0, void 0, void 0, function* () {
137
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
138
+ if (events["connection.update"]) {
139
+ const update = events["connection.update"];
140
+ const { connection, lastDisconnect } = update;
141
+ if (update.qr) {
142
+ (_a = callback.get(Defaults_1.CALLBACK_KEY.ON_QR)) === null || _a === void 0 ? void 0 : _a({
143
+ sessionId,
144
+ qr: update.qr,
145
+ });
146
+ }
147
+ if (connection == "connecting") {
148
+ (_b = callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTING)) === null || _b === void 0 ? void 0 : _b(sessionId);
149
+ }
150
+ if (connection === "close") {
151
+ const code = (_d = (_c = lastDisconnect === null || lastDisconnect === void 0 ? void 0 : lastDisconnect.error) === null || _c === void 0 ? void 0 : _c.output) === null || _d === void 0 ? void 0 : _d.statusCode;
152
+ let retryAttempt = (_e = retryCount.get(sessionId)) !== null && _e !== void 0 ? _e : 0;
153
+ let shouldRetry;
154
+ if (code != baileys_1.DisconnectReason.loggedOut && retryAttempt < 10) {
155
+ shouldRetry = true;
156
+ }
157
+ if (shouldRetry) {
158
+ retryAttempt++;
159
+ }
160
+ if (shouldRetry) {
161
+ retryCount.set(sessionId, retryAttempt);
162
+ startSocket();
163
+ }
164
+ else {
165
+ //retryCount.delete(sessionId);
166
+ (0, exports.deleteSession)(sessionId);
167
+ (_f = callback.get(Defaults_1.CALLBACK_KEY.ON_DISCONNECTED)) === null || _f === void 0 ? void 0 : _f(sessionId);
168
+ }
169
+ }
170
+ if (connection == "open") {
171
+ retryCount.delete(sessionId);
172
+ (_g = callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTED)) === null || _g === void 0 ? void 0 : _g(sessionId);
173
+ }
128
174
  }
129
- else {
130
- retryCount.delete(sessionId);
131
- await (0, exports.deleteSession)(sessionId);
132
- callback.get(Defaults_1.CALLBACK_KEY.ON_DISCONNECTED)?.(sessionId);
175
+ if (events["creds.update"]) {
176
+ yield saveCreds();
133
177
  }
134
- }
135
- if (connection === "open") {
136
- retryCount.delete(sessionId);
137
- callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTED)?.(sessionId);
138
- }
139
- }
140
- if (events["creds.update"]) {
141
- await saveCreds();
142
- }
143
- if (events["messages.update"]) {
144
- const msg = events["messages.update"][0];
145
- if (msg) {
146
- const data = {
147
- ...msg,
148
- sessionId,
149
- messageStatus: (0, message_status_1.parseMessageStatusCodeToReadable)(msg.update?.status)
150
- };
151
- callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED)?.(sessionId, data);
152
- }
178
+ if (events["messages.update"]) {
179
+ const msg = events["messages.update"][0];
180
+ const data = Object.assign({ sessionId: sessionId, messageStatus: (0, message_status_1.parseMessageStatusCodeToReadable)(msg.update.status) }, msg);
181
+ (_h = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED)) === null || _h === void 0 ? void 0 : _h(sessionId, data);
182
+ }
183
+ if (events["messages.upsert"]) {
184
+ const msg = (_j = events["messages.upsert"]
185
+ .messages) === null || _j === void 0 ? void 0 : _j[0];
186
+ msg.sessionId = sessionId;
187
+ msg.saveImage = (path) => (0, save_media_1.saveImageHandler)(msg, path);
188
+ msg.saveVideo = (path) => (0, save_media_1.saveVideoHandler)(msg, path);
189
+ msg.saveDocument = (path) => (0, save_media_1.saveDocumentHandler)(msg, path);
190
+ (_k = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED)) === null || _k === void 0 ? void 0 : _k(Object.assign({}, msg));
191
+ }
192
+ }));
193
+ return sock;
153
194
  }
154
- if (events["messages.upsert"]) {
155
- const msg = events["messages.upsert"]?.messages?.[0];
156
- if (msg) {
157
- emitMessageUpsert(sessionId, msg);
158
- }
195
+ catch (error) {
196
+ // console.log("SOCKET ERROR", error);
197
+ return sock;
159
198
  }
160
199
  });
161
- };
162
-
163
- const createSessionSocket = async (sessionId, options = {}, retryStarter) => {
164
- const logger = (0, pino_1)({ level: "silent" });
165
- const { version } = await (0, baileys_1.fetchLatestBaileysVersion)();
166
- const { state, saveCreds } = await (0, baileys_1.useMultiFileAuthState)(
167
- path_1.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)
168
- );
169
- const sock = (0, baileys_1.default)({
170
- version,
171
- printQRInTerminal: !!options.printQR,
172
- auth: state,
173
- logger,
174
- markOnlineOnConnect: false,
175
- browser: baileys_1.Browsers.ubuntu("Chrome")
176
- });
177
- sessions.set(sessionId, { ...sock });
178
- attachSocketEvents(sessionId, sock, saveCreds, retryStarter);
179
- if (options.phoneNumber && !sock.authState?.creds?.registered) {
180
- setTimeout(async () => {
181
- try {
182
- const code = await sock.requestPairingCode(options.phoneNumber, options.pairingCode);
183
- callback.get(Defaults_1.CALLBACK_KEY.ON_PAIRING_CODE)?.(sessionId, code);
184
- }
185
- catch (_) {
186
- }
187
- }, 5000);
188
- }
189
- return sock;
190
- };
191
-
192
- const isSessionExistAndRunning = (sessionId) => {
193
- const credsPath = path_1.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX);
194
- return (
195
- fs_1.existsSync(path_1.resolve(Defaults_1.CREDENTIALS.DIR_NAME)) &&
196
- fs_1.existsSync(credsPath) &&
197
- fs_1.readdirSync(credsPath).length > 0 &&
198
- (0, exports.getSession)(sessionId)
199
- );
200
- };
201
-
202
- const shouldLoadSession = (sessionId) => {
203
- const credsPath = path_1.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX);
204
- return (
205
- fs_1.existsSync(path_1.resolve(Defaults_1.CREDENTIALS.DIR_NAME)) &&
206
- fs_1.existsSync(credsPath) &&
207
- fs_1.readdirSync(credsPath).length > 0 &&
208
- !(0, exports.getSession)(sessionId)
209
- );
210
- };
211
-
212
- const startSession = async (sessionId = "mysession", options = { printQR: true }) => {
213
- checkWaApiUpdate().catch(() => { });
214
- if (isSessionExistAndRunning(sessionId)) {
215
- throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
216
- }
217
- const starter = () => createSessionSocket(sessionId, { printQR: options?.printQR !== false }, starter);
218
- return starter();
219
- };
200
+ return startSocket();
201
+ });
202
+ const onimaii = (sessionId = "mysession", connect) => __awaiter(void 0, void 0, void 0, function* () {
203
+ if (isSessionExistAndRunning(sessionId))
204
+ throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
205
+ const logger = (0, pino_1.default)({ level: "silent" });
206
+ const { version } = yield (0, baileys_1.fetchLatestBaileysVersion)();
207
+ const { state, saveCreds } = yield (0, baileys_1.useMultiFileAuthState)(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX));
208
+ const sock = (0, connect)({
209
+ version,
210
+ printQRInTerminal: true,
211
+ auth: state,
212
+ logger,
213
+ markOnlineOnConnect: false,
214
+ browser: baileys_1.Browsers.ubuntu("Chrome"),
215
+ });
216
+ })
217
+ exports.onimaii = onimaii;
220
218
  exports.startSession = startSession;
221
-
222
- const onimaii = async (sessionId = "mysession", connect) => {
223
- if (typeof connect !== "function") {
224
- throw new Error_1.WhatsappError("connect must be a function");
225
- }
226
- if (isSessionExistAndRunning(sessionId)) {
227
- throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
219
+ const startSessionWithPairingCode = (sessionId = "mysession", options = { phoneNumber: "" }, key) => __awaiter(void 0, void 0, void 0, function* () {
220
+ if (isSessionExistAndRunning(sessionId)) throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
221
+ if (!(options === null || options === void 0 ? void 0 : options.phoneNumber)) {
222
+ throw new Error_1.WhatsappError(Defaults_1.Messages.paremetersRequired("phoneNumber"));
228
223
  }
229
- const logger = (0, pino_1)({ level: "silent" });
230
- const { version } = await (0, baileys_1.fetchLatestBaileysVersion)();
231
- const { state, saveCreds } = await (0, baileys_1.useMultiFileAuthState)(
232
- path_1.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)
233
- );
234
- const sock = connect({
235
- version,
236
- printQRInTerminal: true,
237
- auth: state,
238
- logger,
239
- markOnlineOnConnect: false,
240
- browser: baileys_1.Browsers.ubuntu("Chrome")
241
- });
242
- sessions.set(sessionId, { ...sock });
243
- if (sock?.ev?.on) {
244
- sock.ev.on("creds.update", saveCreds);
245
- }
246
- return sock;
247
- };
248
- exports.onimaii = onimaii;
249
-
250
- const startSessionWithPairingCode = async (
251
- sessionId = "mysession",
252
- options = { phoneNumber: "" },
253
- pairingCode
254
- ) => {
255
- if (isSessionExistAndRunning(sessionId)) {
256
- throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
224
+ const logger = (0, pino_1.default)({ level: "silent" });
225
+ const { version } = yield (0, baileys_1.fetchLatestBaileysVersion)();
226
+ const startSocket = () => __awaiter(void 0, void 0, void 0, function* () {
227
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
228
+ const { state, saveCreds } = yield (0, baileys_1.useMultiFileAuthState)(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX));
229
+
230
+ const sock = (0, baileys_1.default)({
231
+ version,
232
+ printQRInTerminal: false,
233
+ auth: state,
234
+ logger,
235
+ markOnlineOnConnect: false,
236
+ browser: baileys_1.Browsers.ubuntu("Chrome"),
237
+ });
238
+ sessions.set(sessionId, sock);
239
+ try {
240
+ if (!sock.authState.creds.registered) {
241
+ console.log("first time pairing");
242
+ setTimeout(async () => {
243
+ const code = await sock.requestPairingCode(options.phoneNumber,key);
244
+ console.log(code);
245
+
246
+ callback.get(Defaults_1.CALLBACK_KEY.ON_PAIRING_CODE)?.(sessionId, code);
247
+ }, 5000);
248
+ }
249
+ sock.ev.process(async (events) => {
250
+ if (events["connection.update"]) {
251
+ const update = events["connection.update"];
252
+ const { connection, lastDisconnect } = update;
253
+
254
+ if (connection == "connecting") {
255
+ (_b = callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTING)) === null || _b === void 0 ? void 0 : _b(sessionId);
256
+ }
257
+ if (connection === "close") {
258
+ const code = (_d = (_c = lastDisconnect === null || lastDisconnect === void 0 ? void 0 : lastDisconnect.error) === null || _c === void 0 ? void 0 : _c.output) === null || _d === void 0 ? void 0 : _d.statusCode;
259
+ let retryAttempt = (_e = retryCount.get(sessionId)) !== null && _e !== void 0 ? _e : 0;
260
+ let shouldRetry;
261
+ if (code != baileys_1.DisconnectReason.loggedOut && retryAttempt < 10) {
262
+ shouldRetry = true;
263
+ }
264
+ if (shouldRetry) {
265
+ retryAttempt++;
266
+ }
267
+ if (shouldRetry) {
268
+ retryCount.set(sessionId, retryAttempt);
269
+ startSocket();
270
+ }
271
+ else {
272
+ retryCount.delete(sessionId);
273
+ (0, exports.deleteSession)(sessionId);
274
+ (_f = callback.get(Defaults_1.CALLBACK_KEY.ON_DISCONNECTED)) === null || _f === void 0 ? void 0 : _f(sessionId);
275
+ }
276
+ }
277
+ if (connection == "open") {
278
+ retryCount.delete(sessionId);
279
+ callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTED)?.(sessionId);
280
+ }
257
281
  }
258
- if (!options?.phoneNumber) {
259
- throw new Error_1.WhatsappError("phoneNumber is required for pairing mode");
282
+ if (events["creds.update"]) {
283
+ await saveCreds();
260
284
  }
261
- const starter = () => createSessionSocket(
262
- sessionId,
263
- { printQR: false, phoneNumber: options.phoneNumber, pairingCode },
264
- starter
265
- );
266
- return starter();
267
- };
268
- exports.startSessionWithPairingCode = startSessionWithPairingCode;
269
-
285
+ if (events["messages.update"]) {
286
+ const msg = events["messages.update"][0];
287
+ const data = Object.assign({ sessionId: sessionId, messageStatus: (0, message_status_1.parseMessageStatusCodeToReadable)(msg.update.status) }, msg);
288
+ (_h = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED)) === null || _h === void 0 ? void 0 : _h(sessionId, data);
289
+ }
290
+ if (events["messages.upsert"]) {
291
+ const msg = (_j = events["messages.upsert"]
292
+ .messages) === null || _j === void 0 ? void 0 : _j[0];
293
+ msg.sessionId = sessionId;
294
+ msg.saveImage = (path) => (0, save_media_1.saveImageHandler)(msg, path);
295
+ msg.saveVideo = (path) => (0, save_media_1.saveVideoHandler)(msg, path);
296
+ msg.saveDocument = (path) => (0, save_media_1.saveDocumentHandler)(msg, path);
297
+ (_k = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED)) === null || _k === void 0 ? void 0 : _k(Object.assign({}, msg));
298
+ }
299
+ });
300
+ return sock;
301
+ }
302
+ catch (error) {
303
+ // console.log("SOCKET ERROR", error);
304
+ return sock;
305
+ }
306
+ });
307
+ return startSocket();
308
+ });
309
+ /**
310
+ * @deprecated Use startSession method instead
311
+ */
312
+ exports.startSessionWithPairingCode = startSessionWithPairingCode
270
313
  exports.startWhatsapp = exports.startSession;
271
-
272
- const deleteSession = async (sessionId) => {
314
+ const deleteSession = (sessionId) => __awaiter(void 0, void 0, void 0, function* () {
273
315
  const session = (0, exports.getSession)(sessionId);
274
316
  try {
275
- await session?.logout?.();
276
- }
277
- catch (_) {
317
+ yield (session === null || session === void 0 ? void 0 : session.logout());
278
318
  }
279
- session?.end?.(undefined);
319
+ catch (error) { }
320
+ session === null || session === void 0 ? void 0 : session.end(undefined);
280
321
  sessions.delete(sessionId);
281
- const dir = path_1.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX);
282
- if (fs_1.existsSync(dir)) {
283
- fs_1.rmSync(dir, { force: true, recursive: true });
322
+ const dir = path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX);
323
+ if (fs_1.default.existsSync(dir)) {
324
+ fs_1.default.rmSync(dir, { force: true, recursive: true });
284
325
  }
285
- };
326
+ });
286
327
  exports.deleteSession = deleteSession;
287
-
288
328
  const getAllSession = () => Array.from(sessions.keys());
289
329
  exports.getAllSession = getAllSession;
290
-
291
330
  const getSession = (key) => sessions.get(key);
292
331
  exports.getSession = getSession;
293
-
332
+ const isSessionExistAndRunning = (sessionId) => {
333
+ if (fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME)) &&
334
+ fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)) &&
335
+ fs_1.default.readdirSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)).length &&
336
+ (0, exports.getSession)(sessionId)) {
337
+ return true;
338
+ }
339
+ return false;
340
+ };
341
+ const shouldLoadSession = (sessionId) => {
342
+ if (fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME)) &&
343
+ fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)) &&
344
+ fs_1.default.readdirSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)).length &&
345
+ !(0, exports.getSession)(sessionId)) {
346
+ return true;
347
+ }
348
+ return false;
349
+ };
294
350
  const getAllSessionData = () => {
295
- const allSessionData = {};
296
- for (const sessionName of (0, exports.getAllSession)()) {
297
- allSessionData[sessionName] = (0, exports.getSession)(sessionName);
351
+ // Angenommen, getAllSession gibt eine Liste aller aktiven Sessions zurück
352
+ let allSessions = getAllSession();
353
+ let allSessionData = {};
354
+
355
+ for(let i = 0; i < allSessions.length; i++) {
356
+ let sessionName = allSessions[i];
357
+ allSessionData[sessionName] = getSession(sessionName);
298
358
  }
359
+
299
360
  return allSessionData;
300
- };
361
+ }
301
362
  exports.getAllSessionData = getAllSessionData;
302
363
 
303
- const loadSessionsFromStorage = async () => {
304
- const dirPath = path_1.resolve(Defaults_1.CREDENTIALS.DIR_NAME);
364
+ async function loadSessionsFromStorage() {
365
+ const dirPath = path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME);
305
366
  const loadedSessions = [];
306
- if (!fs_1.existsSync(dirPath)) {
307
- fs_1.mkdirSync(dirPath, { recursive: true });
367
+
368
+ // Ordner anlegen, falls nicht existiert
369
+ if (!fs_1.default.existsSync(dirPath)) {
370
+ fs_1.default.mkdirSync(dirPath, { recursive: true });
308
371
  }
309
- const entries = await fs_1.promises.readdir(dirPath);
310
- for (const entry of entries) {
311
- const fullPath = path_1.join(dirPath, entry);
372
+
373
+ try {
374
+ const entries = await fs_1.default.promises.readdir(dirPath);
375
+
376
+ for (const entry of entries) {
377
+ const fullPath = path_1.default.join(dirPath, entry);
312
378
  let stat;
313
379
  try {
314
- stat = await fs_1.promises.stat(fullPath);
315
- }
316
- catch (_) {
317
- continue;
318
- }
319
- if (!stat.isDirectory()) {
320
- continue;
321
- }
322
- const underscoreIndex = entry.indexOf("_");
323
- const sessionId = underscoreIndex > 0 ? entry.slice(0, underscoreIndex) : entry;
324
- if (!shouldLoadSession(sessionId)) {
325
- continue;
380
+ stat = await fs_1.default.promises.stat(fullPath);
381
+ } catch {
382
+ // Wenn sich die Datei zwischenzeitlich entfernt hat o.Ä., überspringen
383
+ continue;
326
384
  }
385
+ if (!stat.isDirectory()) continue;
386
+
387
+ // sessionId bis zum ersten Unterstrich extrahieren
388
+ const underscoreIndex = entry.indexOf('_');
389
+ const sessionId = underscoreIndex > 0
390
+ ? entry.slice(0, underscoreIndex)
391
+ : entry; // oder continue, wenn du ohne _ nicht laden willst
392
+
327
393
  try {
328
- await (0, exports.startSession)(sessionId);
329
- loadedSessions.push(sessionId);
330
- }
331
- catch (_) {
394
+ await startSession(sessionId);
395
+ loadedSessions.push(sessionId);
396
+ } catch (err) {
397
+ console.error(`Fehler beim Starten der Session "${sessionId}":`, err);
398
+ // weitere Sessions trotzdem laden
332
399
  }
400
+ }
401
+
402
+ return loadedSessions;
403
+ } catch (err) {
404
+ console.error('Fehler beim Lesen des Session-Verzeichnisses:', err);
405
+ throw err; // oder wirf einen eigenen WhatsappError o.Ä.
333
406
  }
334
- return loadedSessions;
335
- };
407
+ }
336
408
  exports.loadSessionsFromStorage = loadSessionsFromStorage;
337
-
338
- const sock = (conn) => {
339
- (0, exports.onMessageReceived)((msg) => {
340
- conn = (0, exports.getSession)(msg.sessionId);
341
- });
342
- return conn;
343
- };
344
- exports.sock = sock;
345
-
346
409
  const onMessageReceived = (listener) => {
347
410
  callback.set(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED, listener);
348
411
  };
349
- exports.onMessageReceived = onMessageReceived;
350
412
 
413
+ const sock = (sessionId) => {
414
+ return (0, exports.getSession)(sessionId);
415
+ };
416
+ exports.sock = sock;
417
+ exports.onMessageReceived = onMessageReceived;
351
418
  const onQRUpdated = (listener) => {
352
419
  callback.set(Defaults_1.CALLBACK_KEY.ON_QR, listener);
353
420
  };
354
421
  exports.onQRUpdated = onQRUpdated;
355
-
356
422
  const onConnected = (listener) => {
357
423
  callback.set(Defaults_1.CALLBACK_KEY.ON_CONNECTED, listener);
358
424
  };
359
425
  exports.onConnected = onConnected;
360
-
361
426
  const onDisconnected = (listener) => {
362
427
  callback.set(Defaults_1.CALLBACK_KEY.ON_DISCONNECTED, listener);
363
428
  };
364
429
  exports.onDisconnected = onDisconnected;
365
-
366
430
  const onConnecting = (listener) => {
367
431
  callback.set(Defaults_1.CALLBACK_KEY.ON_CONNECTING, listener);
368
432
  };
369
433
  exports.onConnecting = onConnecting;
370
-
371
434
  const onMessageUpdate = (listener) => {
372
435
  callback.set(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED, listener);
373
436
  };
374
437
  exports.onMessageUpdate = onMessageUpdate;
375
-
376
438
  const onPairingCode = (listener) => {
377
439
  callback.set(Defaults_1.CALLBACK_KEY.ON_PAIRING_CODE, listener);
378
440
  };
379
- exports.onPairingCode = onPairingCode;
441
+ exports.onPairingCode = onPairingCode;