@neelegirl/wa-api 1.6.2 → 1.6.4

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