@deathnaitsa/wa-api 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/Defaults/index.d.ts +18 -0
- package/dist/Defaults/index.d.ts.map +1 -0
- package/dist/Defaults/index.js +28 -0
- package/dist/Error/index.d.ts +5 -0
- package/dist/Error/index.d.ts.map +1 -0
- package/dist/Error/index.js +14 -0
- package/dist/Messaging/index.d.ts +43 -0
- package/dist/Messaging/index.d.ts.map +1 -0
- package/dist/Messaging/index.js +410 -0
- package/dist/Socket/Socket.d.ts +21 -0
- package/dist/Socket/Socket.d.ts.map +1 -0
- package/dist/Socket/Socket.interface.d.ts +4 -0
- package/dist/Socket/Socket.interface.d.ts.map +1 -0
- package/dist/Socket/Socket.interface.js +2 -0
- package/dist/Socket/Socket.js +31 -0
- package/dist/Socket/index.d.ts +22 -0
- package/dist/Socket/index.d.ts.map +1 -0
- package/dist/Socket/index.js +375 -0
- package/dist/Types/WhatsappOptions.d.ts +3 -0
- package/dist/Types/WhatsappOptions.d.ts.map +1 -0
- package/dist/Types/WhatsappOptions.js +2 -0
- package/dist/Types/index.d.ts +51 -0
- package/dist/Types/index.d.ts.map +1 -0
- package/dist/Types/index.js +2 -0
- package/dist/Utils/create-delay.d.ts +2 -0
- package/dist/Utils/create-delay.d.ts.map +1 -0
- package/dist/Utils/create-delay.js +18 -0
- package/dist/Utils/error.d.ts +4 -0
- package/dist/Utils/error.d.ts.map +1 -0
- package/dist/Utils/error.js +8 -0
- package/dist/Utils/index.d.ts +5 -0
- package/dist/Utils/index.d.ts.map +1 -0
- package/dist/Utils/index.js +21 -0
- package/dist/Utils/is-exist.d.ts +3 -0
- package/dist/Utils/is-exist.d.ts.map +1 -0
- package/dist/Utils/is-exist.js +38 -0
- package/dist/Utils/message-status.d.ts +4 -0
- package/dist/Utils/message-status.d.ts.map +1 -0
- package/dist/Utils/message-status.js +18 -0
- package/dist/Utils/phone-to-jid.d.ts +5 -0
- package/dist/Utils/phone-to-jid.d.ts.map +1 -0
- package/dist/Utils/phone-to-jid.js +30 -0
- package/dist/Utils/save-media.d.ts +5 -0
- package/dist/Utils/save-media.d.ts.map +1 -0
- package/dist/Utils/save-media.js +47 -0
- package/dist/Utils/set-credentials-dir.d.ts +2 -0
- package/dist/Utils/set-credentials-dir.d.ts.map +1 -0
- package/dist/Utils/set-credentials-dir.js +8 -0
- package/dist/Utils/set-credentials.d.ts +2 -0
- package/dist/Utils/set-credentials.d.ts.map +1 -0
- package/dist/Utils/set-credentials.js +8 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/whatsapp/index.d.ts +15 -0
- package/dist/whatsapp/index.d.ts.map +1 -0
- package/dist/whatsapp/index.js +206 -0
- package/package.json +37 -0
- package/readme.md +108 -0
|
@@ -0,0 +1,375 @@
|
|
|
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
|
+
};
|
|
37
|
+
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("@whiskeysockets/baileys"));
|
|
40
|
+
const pino_1 = __importDefault(require("pino"));
|
|
41
|
+
const path_1 = __importDefault(require("path"));
|
|
42
|
+
const fs_1 = __importDefault(require("fs"));
|
|
43
|
+
const Defaults_1 = require("../Defaults");
|
|
44
|
+
const save_media_1 = require("../Utils/save-media");
|
|
45
|
+
const Error_1 = require("../Error");
|
|
46
|
+
const message_status_1 = require("../Utils/message-status");
|
|
47
|
+
const sessions = new Map();
|
|
48
|
+
const callback = new Map();
|
|
49
|
+
const retryCount = new Map();
|
|
50
|
+
let stock;
|
|
51
|
+
const startSession = (sessionId = "mysession", options = { printQR: true }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
52
|
+
if (isSessionExistAndRunning(sessionId))
|
|
53
|
+
throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
|
|
54
|
+
const logger = (0, pino_1.default)({ level: "silent" });
|
|
55
|
+
const { version } = yield (0, baileys_1.fetchLatestBaileysVersion)();
|
|
56
|
+
const startSocket = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
const { state, saveCreds } = yield (0, baileys_1.useMultiFileAuthState)(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX));
|
|
58
|
+
const sock = (0, baileys_1.default)({
|
|
59
|
+
version,
|
|
60
|
+
printQRInTerminal: options.printQR,
|
|
61
|
+
auth: state,
|
|
62
|
+
logger,
|
|
63
|
+
markOnlineOnConnect: false,
|
|
64
|
+
browser: baileys_1.Browsers.ubuntu("Chrome"),
|
|
65
|
+
});
|
|
66
|
+
sessions.set(sessionId, Object.assign({}, sock));
|
|
67
|
+
try {
|
|
68
|
+
|
|
69
|
+
sock.ev.process((events) => __awaiter(void 0, void 0, void 0, function* () {
|
|
70
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
71
|
+
if (events["connection.update"]) {
|
|
72
|
+
const update = events["connection.update"];
|
|
73
|
+
const { connection, lastDisconnect } = update;
|
|
74
|
+
if (update.qr) {
|
|
75
|
+
(_a = callback.get(Defaults_1.CALLBACK_KEY.ON_QR)) === null || _a === void 0 ? void 0 : _a({
|
|
76
|
+
sessionId,
|
|
77
|
+
qr: update.qr,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (connection == "connecting") {
|
|
81
|
+
(_b = callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTING)) === null || _b === void 0 ? void 0 : _b(sessionId);
|
|
82
|
+
}
|
|
83
|
+
if (connection === "close") {
|
|
84
|
+
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;
|
|
85
|
+
let retryAttempt = (_e = retryCount.get(sessionId)) !== null && _e !== void 0 ? _e : 0;
|
|
86
|
+
let shouldRetry;
|
|
87
|
+
if (code != baileys_1.DisconnectReason.loggedOut && retryAttempt < 10) {
|
|
88
|
+
shouldRetry = true;
|
|
89
|
+
}
|
|
90
|
+
if (shouldRetry) {
|
|
91
|
+
retryAttempt++;
|
|
92
|
+
}
|
|
93
|
+
if (shouldRetry) {
|
|
94
|
+
retryCount.set(sessionId, retryAttempt);
|
|
95
|
+
startSocket();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
//retryCount.delete(sessionId);
|
|
99
|
+
(0, exports.deleteSession)(sessionId);
|
|
100
|
+
(_f = callback.get(Defaults_1.CALLBACK_KEY.ON_DISCONNECTED)) === null || _f === void 0 ? void 0 : _f(sessionId);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (connection == "open") {
|
|
104
|
+
retryCount.delete(sessionId);
|
|
105
|
+
(_g = callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTED)) === null || _g === void 0 ? void 0 : _g(sessionId);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (events["creds.update"]) {
|
|
109
|
+
yield saveCreds();
|
|
110
|
+
}
|
|
111
|
+
if (events["messages.update"]) {
|
|
112
|
+
const msg = events["messages.update"][0];
|
|
113
|
+
const data = Object.assign({ sessionId: sessionId, messageStatus: (0, message_status_1.parseMessageStatusCodeToReadable)(msg.update.status) }, msg);
|
|
114
|
+
(_h = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED)) === null || _h === void 0 ? void 0 : _h(sessionId, data);
|
|
115
|
+
}
|
|
116
|
+
if (events["messages.upsert"]) {
|
|
117
|
+
const msg = (_j = events["messages.upsert"]
|
|
118
|
+
.messages) === null || _j === void 0 ? void 0 : _j[0];
|
|
119
|
+
msg.sessionId = sessionId;
|
|
120
|
+
msg.saveImage = (path) => (0, save_media_1.saveImageHandler)(msg, path);
|
|
121
|
+
msg.saveVideo = (path) => (0, save_media_1.saveVideoHandler)(msg, path);
|
|
122
|
+
msg.saveDocument = (path) => (0, save_media_1.saveDocumentHandler)(msg, path);
|
|
123
|
+
(_k = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED)) === null || _k === void 0 ? void 0 : _k(Object.assign({}, msg));
|
|
124
|
+
}
|
|
125
|
+
}));
|
|
126
|
+
return sock;
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
// console.log("SOCKET ERROR", error);
|
|
130
|
+
return sock;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
return startSocket();
|
|
134
|
+
});
|
|
135
|
+
const nishii = (sessionId = "mysession", connect) => __awaiter(void 0, void 0, void 0, function* () {
|
|
136
|
+
if (isSessionExistAndRunning(sessionId))
|
|
137
|
+
throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(sessionId));
|
|
138
|
+
const logger = (0, pino_1.default)({ level: "silent" });
|
|
139
|
+
const { version } = yield (0, baileys_1.fetchLatestBaileysVersion)();
|
|
140
|
+
const { state, saveCreds } = yield (0, baileys_1.useMultiFileAuthState)(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX));
|
|
141
|
+
const sock = (0, connect)({
|
|
142
|
+
version,
|
|
143
|
+
printQRInTerminal: true,
|
|
144
|
+
auth: state,
|
|
145
|
+
logger,
|
|
146
|
+
markOnlineOnConnect: false,
|
|
147
|
+
browser: baileys_1.Browsers.ubuntu("Chrome"),
|
|
148
|
+
});
|
|
149
|
+
})
|
|
150
|
+
exports.nishii = nishii;
|
|
151
|
+
exports.startSession = startSession;
|
|
152
|
+
const startSessionWithPairingCode = (sessionId = "mysession", options = { phoneNumber },key) => __awaiter(void 0, void 0, void 0, function* () {
|
|
153
|
+
if (isSessionExistAndRunning(sessionId))throw new WhatsappError(Messages.sessionAlreadyExist(sessionId));
|
|
154
|
+
const logger = (0, pino_1.default)({ level: "silent" });
|
|
155
|
+
const { version } = yield (0, baileys_1.fetchLatestBaileysVersion)();
|
|
156
|
+
const startSocket = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
157
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
158
|
+
const { state, saveCreds } = yield (0, baileys_1.useMultiFileAuthState)(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX));
|
|
159
|
+
|
|
160
|
+
const sock = (0, baileys_1.default)({
|
|
161
|
+
version,
|
|
162
|
+
printQRInTerminal: false,
|
|
163
|
+
auth: state,
|
|
164
|
+
logger,
|
|
165
|
+
markOnlineOnConnect: false,
|
|
166
|
+
browser: baileys_1.Browsers.ubuntu("Chrome"),
|
|
167
|
+
});
|
|
168
|
+
sessions.set(sessionId, { ...sock });
|
|
169
|
+
try {
|
|
170
|
+
if (!sock.authState.creds.registered) {
|
|
171
|
+
console.log("first time pairing");
|
|
172
|
+
setTimeout(async () => {
|
|
173
|
+
const code = await sock.requestPairingCode(options.phoneNumber,key);
|
|
174
|
+
console.log(code);
|
|
175
|
+
|
|
176
|
+
callback.get(Defaults_1.CALLBACK_KEY.ON_PAIRING_CODE)?.(sessionId, code);
|
|
177
|
+
}, 5000);
|
|
178
|
+
}
|
|
179
|
+
sock.ev.process(async (events) => {
|
|
180
|
+
if (events["connection.update"]) {
|
|
181
|
+
const update = events["connection.update"];
|
|
182
|
+
const { connection, lastDisconnect } = update;
|
|
183
|
+
|
|
184
|
+
if (connection == "connecting") {
|
|
185
|
+
(_b = callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTING)) === null || _b === void 0 ? void 0 : _b(sessionId);
|
|
186
|
+
}
|
|
187
|
+
if (connection === "close") {
|
|
188
|
+
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;
|
|
189
|
+
let retryAttempt = (_e = retryCount.get(sessionId)) !== null && _e !== void 0 ? _e : 0;
|
|
190
|
+
let shouldRetry;
|
|
191
|
+
if (code != baileys_1.DisconnectReason.loggedOut && retryAttempt < 10) {
|
|
192
|
+
shouldRetry = true;
|
|
193
|
+
}
|
|
194
|
+
if (shouldRetry) {
|
|
195
|
+
retryAttempt++;
|
|
196
|
+
}
|
|
197
|
+
if (shouldRetry) {
|
|
198
|
+
retryCount.set(sessionId, retryAttempt);
|
|
199
|
+
startSocket();
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
retryCount.delete(sessionId);
|
|
203
|
+
(0, exports.deleteSession)(sessionId);
|
|
204
|
+
(_f = callback.get(Defaults_1.CALLBACK_KEY.ON_DISCONNECTED)) === null || _f === void 0 ? void 0 : _f(sessionId);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (connection == "open") {
|
|
208
|
+
retryCount.delete(sessionId);
|
|
209
|
+
callback.get(Defaults_1.CALLBACK_KEY.ON_CONNECTED)?.(sessionId);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (events["creds.update"]) {
|
|
213
|
+
await saveCreds();
|
|
214
|
+
}
|
|
215
|
+
if (events["messages.update"]) {
|
|
216
|
+
const msg = events["messages.update"][0];
|
|
217
|
+
const data = Object.assign({ sessionId: sessionId, messageStatus: (0, message_status_1.parseMessageStatusCodeToReadable)(msg.update.status) }, msg);
|
|
218
|
+
(_h = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED)) === null || _h === void 0 ? void 0 : _h(sessionId, data);
|
|
219
|
+
}
|
|
220
|
+
if (events["messages.upsert"]) {
|
|
221
|
+
const msg = (_j = events["messages.upsert"]
|
|
222
|
+
.messages) === null || _j === void 0 ? void 0 : _j[0];
|
|
223
|
+
msg.sessionId = sessionId;
|
|
224
|
+
msg.saveImage = (path) => (0, save_media_1.saveImageHandler)(msg, path);
|
|
225
|
+
msg.saveVideo = (path) => (0, save_media_1.saveVideoHandler)(msg, path);
|
|
226
|
+
msg.saveDocument = (path) => (0, save_media_1.saveDocumentHandler)(msg, path);
|
|
227
|
+
(_k = callback.get(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED)) === null || _k === void 0 ? void 0 : _k(Object.assign({}, msg));
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
return sock;
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
// console.log("SOCKET ERROR", error);
|
|
234
|
+
return sock;
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
return startSocket();
|
|
238
|
+
});
|
|
239
|
+
/**
|
|
240
|
+
* @deprecated Use startSession method instead
|
|
241
|
+
*/
|
|
242
|
+
exports.startSessionWithPairingCode = startSessionWithPairingCode
|
|
243
|
+
exports.startWhatsapp = exports.startSession;
|
|
244
|
+
const deleteSession = (sessionId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
245
|
+
const session = (0, exports.getSession)(sessionId);
|
|
246
|
+
try {
|
|
247
|
+
yield (session === null || session === void 0 ? void 0 : session.logout());
|
|
248
|
+
}
|
|
249
|
+
catch (error) { }
|
|
250
|
+
session === null || session === void 0 ? void 0 : session.end(undefined);
|
|
251
|
+
sessions.delete(sessionId);
|
|
252
|
+
const dir = path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX);
|
|
253
|
+
if (fs_1.default.existsSync(dir)) {
|
|
254
|
+
fs_1.default.rmSync(dir, { force: true, recursive: true });
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
exports.deleteSession = deleteSession;
|
|
258
|
+
const getAllSession = () => Array.from(sessions.keys());
|
|
259
|
+
exports.getAllSession = getAllSession;
|
|
260
|
+
const getSession = (key) => sessions.get(key);
|
|
261
|
+
exports.getSession = getSession;
|
|
262
|
+
const isSessionExistAndRunning = (sessionId) => {
|
|
263
|
+
if (fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME)) &&
|
|
264
|
+
fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)) &&
|
|
265
|
+
fs_1.default.readdirSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)).length &&
|
|
266
|
+
(0, exports.getSession)(sessionId)) {
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
};
|
|
271
|
+
const shouldLoadSession = (sessionId) => {
|
|
272
|
+
if (fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME)) &&
|
|
273
|
+
fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)) &&
|
|
274
|
+
fs_1.default.readdirSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, sessionId + Defaults_1.CREDENTIALS.SUFFIX)).length &&
|
|
275
|
+
!(0, exports.getSession)(sessionId)) {
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
};
|
|
280
|
+
const getAllSessionData = () => {
|
|
281
|
+
// Angenommen, getAllSession gibt eine Liste aller aktiven Sessions zurück
|
|
282
|
+
let allSessions = getAllSession();
|
|
283
|
+
let allSessionData = {};
|
|
284
|
+
|
|
285
|
+
for(let i = 0; i < allSessions.length; i++) {
|
|
286
|
+
let sessionName = allSessions[i];
|
|
287
|
+
allSessionData[sessionName] = getSession(sessionName);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return allSessionData;
|
|
291
|
+
}
|
|
292
|
+
exports.getAllSessionData = getAllSessionData;
|
|
293
|
+
|
|
294
|
+
async function loadSessionsFromStorage() {
|
|
295
|
+
const dirPath = path.resolve(CREDENTIALS.DIR_NAME);
|
|
296
|
+
const loadedSessions = [];
|
|
297
|
+
|
|
298
|
+
// Ordner anlegen, falls nicht existiert
|
|
299
|
+
if (!fs.existsSync(dirPath)) {
|
|
300
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
try {
|
|
304
|
+
const entries = await fs.promises.readdir(dirPath);
|
|
305
|
+
|
|
306
|
+
for (const entry of entries) {
|
|
307
|
+
const fullPath = path.join(dirPath, entry);
|
|
308
|
+
let stat;
|
|
309
|
+
try {
|
|
310
|
+
stat = await fs.promises.stat(fullPath);
|
|
311
|
+
} catch {
|
|
312
|
+
// Wenn sich die Datei zwischenzeitlich entfernt hat o.Ä., überspringen
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
if (!stat.isDirectory()) continue;
|
|
316
|
+
|
|
317
|
+
// sessionId bis zum ersten Unterstrich extrahieren
|
|
318
|
+
const underscoreIndex = entry.indexOf('_');
|
|
319
|
+
const sessionId = underscoreIndex > 0
|
|
320
|
+
? entry.slice(0, underscoreIndex)
|
|
321
|
+
: entry; // oder continue, wenn du ohne _ nicht laden willst
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
await startSession(sessionId);
|
|
325
|
+
loadedSessions.push(sessionId);
|
|
326
|
+
} catch (err) {
|
|
327
|
+
console.error(`Fehler beim Starten der Session "${sessionId}":`, err);
|
|
328
|
+
// weitere Sessions trotzdem laden
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return loadedSessions;
|
|
333
|
+
} catch (err) {
|
|
334
|
+
console.error('Fehler beim Lesen des Session-Verzeichnisses:', err);
|
|
335
|
+
throw err; // oder wirf einen eigenen WhatsappError o.Ä.
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
exports.loadSessionsFromStorage = loadSessionsFromStorage;
|
|
339
|
+
const onMessageReceived = (listener) => {
|
|
340
|
+
callback.set(Defaults_1.CALLBACK_KEY.ON_MESSAGE_RECEIVED, listener);
|
|
341
|
+
};
|
|
342
|
+
|
|
343
|
+
const sock = (conn) => {
|
|
344
|
+
onMessageReceived(async(msg) =>{
|
|
345
|
+
let {sessionId} = msg;
|
|
346
|
+
let sock1 = getSesseion(sessionId)
|
|
347
|
+
conn = sock1
|
|
348
|
+
})
|
|
349
|
+
};
|
|
350
|
+
exports.sock = sock;
|
|
351
|
+
exports.onMessageReceived = onMessageReceived;
|
|
352
|
+
const onQRUpdated = (listener) => {
|
|
353
|
+
callback.set(Defaults_1.CALLBACK_KEY.ON_QR, listener);
|
|
354
|
+
};
|
|
355
|
+
exports.onQRUpdated = onQRUpdated;
|
|
356
|
+
const onConnected = (listener) => {
|
|
357
|
+
callback.set(Defaults_1.CALLBACK_KEY.ON_CONNECTED, listener);
|
|
358
|
+
};
|
|
359
|
+
exports.onConnected = onConnected;
|
|
360
|
+
const onDisconnected = (listener) => {
|
|
361
|
+
callback.set(Defaults_1.CALLBACK_KEY.ON_DISCONNECTED, listener);
|
|
362
|
+
};
|
|
363
|
+
exports.onDisconnected = onDisconnected;
|
|
364
|
+
const onConnecting = (listener) => {
|
|
365
|
+
callback.set(Defaults_1.CALLBACK_KEY.ON_CONNECTING, listener);
|
|
366
|
+
};
|
|
367
|
+
exports.onConnecting = onConnecting;
|
|
368
|
+
const onMessageUpdate = (listener) => {
|
|
369
|
+
callback.set(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED, listener);
|
|
370
|
+
};
|
|
371
|
+
exports.onMessageUpdate = onMessageUpdate;
|
|
372
|
+
const onPairingCode = (listener) => {
|
|
373
|
+
callback.set(Defaults_1.CALLBACK_KEY.ON_MESSAGE_UPDATED, listener);
|
|
374
|
+
};
|
|
375
|
+
exports.onPairingCode = onPairingCode;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WhatsappOptions.d.ts","sourceRoot":"","sources":["../../src/Types/WhatsappOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;CAAG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { WAMessageUpdate, proto } from "@whiskeysockets/baileys";
|
|
3
|
+
export interface SendMessageTypes {
|
|
4
|
+
to: string | number;
|
|
5
|
+
text?: string;
|
|
6
|
+
sessionId: string;
|
|
7
|
+
isGroup?: boolean;
|
|
8
|
+
answering?: proto.IWebMessageInfo;
|
|
9
|
+
}
|
|
10
|
+
export interface SendMediaTypes extends SendMessageTypes {
|
|
11
|
+
media?: string | Buffer;
|
|
12
|
+
}
|
|
13
|
+
export interface SendTypingTypes extends SendMessageTypes {
|
|
14
|
+
duration: number;
|
|
15
|
+
}
|
|
16
|
+
export interface SendReadTypes {
|
|
17
|
+
sessionId: string;
|
|
18
|
+
key: proto.IMessageKey;
|
|
19
|
+
}
|
|
20
|
+
export interface MessageReceived extends proto.IWebMessageInfo {
|
|
21
|
+
/**
|
|
22
|
+
* Your Session ID
|
|
23
|
+
*/
|
|
24
|
+
sessionId: string;
|
|
25
|
+
/**
|
|
26
|
+
* @param path save image location path with extension
|
|
27
|
+
* @example "./myimage.jpg"
|
|
28
|
+
*/
|
|
29
|
+
saveImage: (path: string) => Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* @param path save video location path with extension
|
|
32
|
+
* @example "./myvideo.mp4"
|
|
33
|
+
*/
|
|
34
|
+
saveVideo: (path: string) => Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* @param path save image location path without extension
|
|
37
|
+
* @example "./mydocument"
|
|
38
|
+
*/
|
|
39
|
+
saveDocument: (path: string) => Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export interface StartSessionParams {
|
|
42
|
+
/**
|
|
43
|
+
* Print QR Code into Terminal
|
|
44
|
+
*/
|
|
45
|
+
printQR: boolean;
|
|
46
|
+
}
|
|
47
|
+
export type MessageUpdated = WAMessageUpdate & {
|
|
48
|
+
sessionId: string;
|
|
49
|
+
messageStatus: "error" | "pending" | "server" | "delivered" | "read" | "played";
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Types/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACtD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,eAAe;IAC5D;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,WAAW,GACX,MAAM,GACN,QAAQ,CAAC;CACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-delay.d.ts","sourceRoot":"","sources":["../../src/Utils/create-delay.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,cAAoB,MAAM,qBAMjD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.createDelay = void 0;
|
|
13
|
+
const createDelay = (duration = 1000) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
+
return yield new Promise((resolve) => setTimeout(() => {
|
|
15
|
+
resolve(true);
|
|
16
|
+
}, duration));
|
|
17
|
+
});
|
|
18
|
+
exports.createDelay = createDelay;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/Utils/error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAG5B"}
|
|
@@ -0,0 +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,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./phone-to-jid"), exports);
|
|
18
|
+
__exportStar(require("./is-exist"), exports);
|
|
19
|
+
__exportStar(require("./create-delay"), exports);
|
|
20
|
+
__exportStar(require("./set-credentials-dir"), exports);
|
|
21
|
+
__exportStar(require("./set-credentials"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-exist.d.ts","sourceRoot":"","sources":["../../src/Utils/is-exist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAG5C,eAAO,MAAM,OAAO,gCAIjB,gBAAgB,KAAG,QAAQ,OAAO,CAiBpC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.isExist = void 0;
|
|
13
|
+
const Error_1 = require("../Error");
|
|
14
|
+
const Socket_1 = require("../Socket");
|
|
15
|
+
const phone_to_jid_1 = require("./phone-to-jid");
|
|
16
|
+
const isExist = ({ sessionId, to, isGroup = false, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
17
|
+
var _a, _b;
|
|
18
|
+
try {
|
|
19
|
+
const session = (0, Socket_1.getSession)(sessionId);
|
|
20
|
+
if (!session)
|
|
21
|
+
throw new Error_1.WhatsappError("Session ID Not Found!");
|
|
22
|
+
const receiver = (0, phone_to_jid_1.phoneToJid)({
|
|
23
|
+
to: to,
|
|
24
|
+
isGroup: isGroup,
|
|
25
|
+
});
|
|
26
|
+
if (!isGroup) {
|
|
27
|
+
const one = Boolean((_b = (_a = (yield (session === null || session === void 0 ? void 0 : session.onWhatsApp(receiver)))) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.exists);
|
|
28
|
+
return one;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return Boolean((yield session.groupMetadata(receiver)).id);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
exports.isExist = isExist;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-status.d.ts","sourceRoot":"","sources":["../../src/Utils/message-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,gCAAgC,SACrC,MAAM,cAAc,CAAC,MAAM,KAChC,cAAc,CAAC,eAAe,CAQhC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMessageStatusCodeToReadable = void 0;
|
|
4
|
+
const baileys_1 = require("@whiskeysockets/baileys");
|
|
5
|
+
const parseMessageStatusCodeToReadable = (code) => {
|
|
6
|
+
if (code == baileys_1.proto.WebMessageInfo.Status.PENDING)
|
|
7
|
+
return "pending";
|
|
8
|
+
if (code == baileys_1.proto.WebMessageInfo.Status.SERVER_ACK)
|
|
9
|
+
return "server";
|
|
10
|
+
if (code == baileys_1.proto.WebMessageInfo.Status.DELIVERY_ACK)
|
|
11
|
+
return "delivered";
|
|
12
|
+
if (code == baileys_1.proto.WebMessageInfo.Status.READ)
|
|
13
|
+
return "read";
|
|
14
|
+
if (code == baileys_1.proto.WebMessageInfo.Status.PLAYED)
|
|
15
|
+
return "played";
|
|
16
|
+
return "error";
|
|
17
|
+
};
|
|
18
|
+
exports.parseMessageStatusCodeToReadable = parseMessageStatusCodeToReadable;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone-to-jid.d.ts","sourceRoot":"","sources":["../../src/Utils/phone-to-jid.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,UAAU;QAIjB,MAAM,GAAG,MAAM;;MAEjB,MAgBH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.phoneToJid = void 0;
|
|
4
|
+
const Error_1 = require("../Error");
|
|
5
|
+
const baileys_1 = require("@whiskeysockets/baileys");
|
|
6
|
+
const isPhoneNumberValidCountry = (phone) => {
|
|
7
|
+
return Object.keys(baileys_1.PHONENUMBER_MCC).some((key) => {
|
|
8
|
+
return phone.startsWith(key);
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
const phoneToJid = ({ to, isGroup = false, }) => {
|
|
12
|
+
if (!to)
|
|
13
|
+
throw new Error_1.WhatsappError('parameter "to" is required');
|
|
14
|
+
let number = to.toString();
|
|
15
|
+
if (!isPhoneNumberValidCountry(number)) {
|
|
16
|
+
throw new Error_1.WhatsappError("phone number must start with valid country code");
|
|
17
|
+
}
|
|
18
|
+
if (isGroup) {
|
|
19
|
+
number = number.replace(/\s|[+]|[-]/gim, "");
|
|
20
|
+
if (!number.includes("@g.us"))
|
|
21
|
+
number = number + "@g.us";
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
number = number.replace(/\s|[+]|[-]/gim, "");
|
|
25
|
+
if (!number.includes("@s.whatsapp.net"))
|
|
26
|
+
number = number + "@s.whatsapp.net";
|
|
27
|
+
}
|
|
28
|
+
return number;
|
|
29
|
+
};
|
|
30
|
+
exports.phoneToJid = phoneToJid;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { MessageReceived } from "../Types";
|
|
2
|
+
export declare const saveImageHandler: (msg: MessageReceived, path: string) => Promise<void>;
|
|
3
|
+
export declare const saveVideoHandler: (msg: MessageReceived, path: string) => Promise<void>;
|
|
4
|
+
export declare const saveDocumentHandler: (msg: MessageReceived, path: string) => Promise<void>;
|
|
5
|
+
//# sourceMappingURL=save-media.d.ts.map
|
|
@@ -0,0 +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,QAAe,eAAe,QAAQ,MAAM,kBAOxE,CAAC;AACF,eAAO,MAAM,gBAAgB,QAAe,eAAe,QAAQ,MAAM,kBAOxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,QACzB,eAAe,QACd,MAAM,kBAUb,CAAC"}
|