@neelegirl/wa-api 1.6.0 → 1.6.3

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