@neelegirl/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.
Files changed (60) hide show
  1. package/LICENSE +3 -0
  2. package/dist/Defaults/index.d.ts +18 -0
  3. package/dist/Defaults/index.d.ts.map +1 -0
  4. package/dist/Defaults/index.js +28 -0
  5. package/dist/Error/index.d.ts +5 -0
  6. package/dist/Error/index.d.ts.map +1 -0
  7. package/dist/Error/index.js +14 -0
  8. package/dist/Messaging/index.d.ts +44 -0
  9. package/dist/Messaging/index.d.ts.map +1 -0
  10. package/dist/Messaging/index.js +121 -0
  11. package/dist/Socket/Socket.d.ts +21 -0
  12. package/dist/Socket/Socket.d.ts.map +1 -0
  13. package/dist/Socket/Socket.interface.d.ts +4 -0
  14. package/dist/Socket/Socket.interface.d.ts.map +1 -0
  15. package/dist/Socket/Socket.interface.js +2 -0
  16. package/dist/Socket/Socket.js +31 -0
  17. package/dist/Socket/index.d.ts +22 -0
  18. package/dist/Socket/index.d.ts.map +1 -0
  19. package/dist/Socket/index.js +375 -0
  20. package/dist/Types/WhatsappOptions.d.ts +3 -0
  21. package/dist/Types/WhatsappOptions.d.ts.map +1 -0
  22. package/dist/Types/WhatsappOptions.js +2 -0
  23. package/dist/Types/index.d.ts +51 -0
  24. package/dist/Types/index.d.ts.map +1 -0
  25. package/dist/Types/index.js +2 -0
  26. package/dist/Utils/create-delay.d.ts +2 -0
  27. package/dist/Utils/create-delay.d.ts.map +1 -0
  28. package/dist/Utils/create-delay.js +18 -0
  29. package/dist/Utils/error.d.ts +4 -0
  30. package/dist/Utils/error.d.ts.map +1 -0
  31. package/dist/Utils/error.js +8 -0
  32. package/dist/Utils/index.d.ts +5 -0
  33. package/dist/Utils/index.d.ts.map +1 -0
  34. package/dist/Utils/index.js +21 -0
  35. package/dist/Utils/is-exist.d.ts +3 -0
  36. package/dist/Utils/is-exist.d.ts.map +1 -0
  37. package/dist/Utils/is-exist.js +38 -0
  38. package/dist/Utils/message-status.d.ts +4 -0
  39. package/dist/Utils/message-status.d.ts.map +1 -0
  40. package/dist/Utils/message-status.js +18 -0
  41. package/dist/Utils/phone-to-jid.d.ts +5 -0
  42. package/dist/Utils/phone-to-jid.d.ts.map +1 -0
  43. package/dist/Utils/phone-to-jid.js +30 -0
  44. package/dist/Utils/save-media.d.ts +5 -0
  45. package/dist/Utils/save-media.d.ts.map +1 -0
  46. package/dist/Utils/save-media.js +47 -0
  47. package/dist/Utils/set-credentials-dir.d.ts +2 -0
  48. package/dist/Utils/set-credentials-dir.d.ts.map +1 -0
  49. package/dist/Utils/set-credentials-dir.js +8 -0
  50. package/dist/Utils/set-credentials.d.ts +2 -0
  51. package/dist/Utils/set-credentials.d.ts.map +1 -0
  52. package/dist/Utils/set-credentials.js +8 -0
  53. package/dist/index.d.ts +6 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +21 -0
  56. package/dist/whatsapp/index.d.ts +15 -0
  57. package/dist/whatsapp/index.d.ts.map +1 -0
  58. package/dist/whatsapp/index.js +206 -0
  59. package/package.json +38 -0
  60. package/readme.md +141 -0
@@ -0,0 +1,47 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.saveDocumentHandler = exports.saveVideoHandler = exports.saveImageHandler = void 0;
16
+ const baileys_1 = require("@neelegirl/baileys");
17
+ const error_1 = __importDefault(require("./error"));
18
+ const promises_1 = __importDefault(require("fs/promises"));
19
+ const saveMedia = (path, data) => __awaiter(void 0, void 0, void 0, function* () {
20
+ yield promises_1.default.writeFile(path, data.toString("base64"), "base64");
21
+ });
22
+ const saveImageHandler = (msg, path) => __awaiter(void 0, void 0, void 0, function* () {
23
+ var _a;
24
+ if (!((_a = msg.message) === null || _a === void 0 ? void 0 : _a.imageMessage))
25
+ throw new error_1.default("Message is not contain Image");
26
+ const buf = yield (0, baileys_1.downloadMediaMessage)(msg, "buffer", {});
27
+ return saveMedia(path, buf);
28
+ });
29
+ exports.saveImageHandler = saveImageHandler;
30
+ const saveVideoHandler = (msg, path) => __awaiter(void 0, void 0, void 0, function* () {
31
+ var _b;
32
+ if (!((_b = msg.message) === null || _b === void 0 ? void 0 : _b.videoMessage))
33
+ throw new error_1.default("Message is not contain Video");
34
+ const buf = yield (0, baileys_1.downloadMediaMessage)(msg, "buffer", {});
35
+ return saveMedia(path, buf);
36
+ });
37
+ exports.saveVideoHandler = saveVideoHandler;
38
+ const saveDocumentHandler = (msg, path) => __awaiter(void 0, void 0, void 0, function* () {
39
+ var _c, _d;
40
+ if (!((_c = msg.message) === null || _c === void 0 ? void 0 : _c.documentMessage))
41
+ throw new error_1.default("Message is not contain Document");
42
+ const buf = yield (0, baileys_1.downloadMediaMessage)(msg, "buffer", {});
43
+ const ext = (_d = msg.message.documentMessage.fileName) === null || _d === void 0 ? void 0 : _d.split(".").pop();
44
+ path += "." + ext;
45
+ return saveMedia(path, buf);
46
+ });
47
+ exports.saveDocumentHandler = saveDocumentHandler;
@@ -0,0 +1,2 @@
1
+ export declare const setCredentialsDir: (dirname?: string) => void;
2
+ //# sourceMappingURL=set-credentials-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-credentials-dir.d.ts","sourceRoot":"","sources":["../../src/Utils/set-credentials-dir.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,aAAa,MAAM,SAEhD,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setCredentialsDir = void 0;
4
+ const Defaults_1 = require("../Defaults");
5
+ const setCredentialsDir = (dirname = "wa_credentials") => {
6
+ Defaults_1.CREDENTIALS.DIR_NAME = dirname;
7
+ };
8
+ exports.setCredentialsDir = setCredentialsDir;
@@ -0,0 +1,2 @@
1
+ export declare const setCredentials: (dirname?: string) => void;
2
+ //# sourceMappingURL=set-credentials-dir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-credentials-dir.d.ts","sourceRoot":"","sources":["../../src/Utils/set-credentials.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,aAAa,MAAM,SAEhD,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setCredentials = void 0;
4
+ const Defaults_1 = require("../Defaults");
5
+ const setCredentials = (dirname = "_credentials") => {
6
+ Defaults_1.CREDENTIALS.SUFFIX = dirname;
7
+ };
8
+ exports.setCredentials = setCredentials;
@@ -0,0 +1,6 @@
1
+ export * from "./Socket";
2
+ export * from "./Messaging";
3
+ export * from "./Utils";
4
+ export * from "./Types";
5
+ export * from "./Error";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -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("./Socket"), exports);
18
+ __exportStar(require("./Messaging"), exports);
19
+ __exportStar(require("./Utils"), exports);
20
+ __exportStar(require("./Types"), exports);
21
+ __exportStar(require("./Error"), exports);
@@ -0,0 +1,15 @@
1
+ import { Socket } from "../Socket/Socket";
2
+ import { WhatsappOptions } from "../Types/WhatsappOptions";
3
+ export declare class Whatsapp {
4
+ constructor(options?: WhatsappOptions);
5
+ sockets: Map<string, Socket>;
6
+ callback: Map<string, Function>;
7
+ retryCount: Map<string, number>;
8
+ load(each?: (socket: Socket) => Socket): Promise<void>;
9
+ private shouldLoadSession;
10
+ private getSocket;
11
+ startSession: (socket: Socket) => Promise<Socket>;
12
+ private isSessionExistAndRunning;
13
+ deleteSession: (sessionId: string) => Promise<void>;
14
+ }
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Whatsapp/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAc3D,qBAAa,QAAQ;gBACP,OAAO,GAAE,eAAoB;IAEzC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IACzC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAa;IAC5C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAEtC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM;IAsB5C,OAAO,CAAC,iBAAiB,CAoBvB;IAEF,OAAO,CAAC,SAAS,CACe;IAEhC,YAAY,WAAkB,MAAM,KAAG,QAAQ,MAAM,CAAC,CAiGpD;IAEF,OAAO,CAAC,wBAAwB,CAoB9B;IAEF,aAAa,cAAqB,MAAM,mBAWtC;CACH"}
@@ -0,0 +1,206 @@
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.Whatsapp = void 0;
39
+ const baileys_1 = __importStar(require("@neelegirl/baileys"));
40
+ const Defaults_1 = require("../Defaults");
41
+ const Socket_1 = require("../Socket/Socket");
42
+ const fs_1 = __importDefault(require("fs"));
43
+ const path_1 = __importDefault(require("path"));
44
+ const Error_1 = require("../Error");
45
+ const pino_1 = __importDefault(require("pino"));
46
+ const message_status_1 = require("../Utils/message-status");
47
+ const save_media_1 = require("../Utils/save-media");
48
+ class Whatsapp {
49
+ constructor(options = {}) {
50
+ this.sockets = new Map();
51
+ this.callback = new Map();
52
+ this.retryCount = new Map();
53
+ this.shouldLoadSession = (socket) => {
54
+ if (fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME)) &&
55
+ fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, socket.id + "_" + socket.phoneNumber + Defaults_1.CREDENTIALS.SUFFIX)) &&
56
+ fs_1.default.readdirSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, socket.id + "_" + socket.phoneNumber + Defaults_1.CREDENTIALS.SUFFIX)).length &&
57
+ !this.getSocket(socket.id)) {
58
+ return true;
59
+ }
60
+ return false;
61
+ };
62
+ this.getSocket = (key) => { var _a; return (_a = this.sockets.get(key)) !== null && _a !== void 0 ? _a : null; };
63
+ this.startSession = (socket) => __awaiter(this, void 0, void 0, function* () {
64
+ if (this.isSessionExistAndRunning(socket))
65
+ throw new Error_1.WhatsappError(Defaults_1.Messages.sessionAlreadyExist(socket.id));
66
+ const logger = (0, pino_1.default)({ level: "silent" });
67
+ const { version } = yield (0, baileys_1.fetchLatestBaileysVersion)();
68
+ const startSocket = () => __awaiter(this, void 0, void 0, function* () {
69
+ var _a;
70
+ const { state, saveCreds } = yield (0, baileys_1.useMultiFileAuthState)(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, socket.id + "_" + socket.phoneNumber + Defaults_1.CREDENTIALS.SUFFIX));
71
+ const sock = (0, baileys_1.default)({
72
+ version,
73
+ auth: {
74
+ creds: state.creds,
75
+ keys: (0, baileys_1.makeCacheableSignalKeyStore)(state.keys, logger),
76
+ },
77
+ logger,
78
+ markOnlineOnConnect: false,
79
+ browser: baileys_1.Browsers.ubuntu("Chrome"),
80
+ });
81
+ socket.socket = sock;
82
+ this.sockets.set(socket.id, socket);
83
+ try {
84
+ sock.ev.process((events) => __awaiter(this, void 0, void 0, function* () {
85
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
86
+ if (events["connection.update"]) {
87
+ const update = events["connection.update"];
88
+ const { connection, lastDisconnect } = update;
89
+ if (update.qr) {
90
+ (_b = socket.onQr) === null || _b === void 0 ? void 0 : _b.call(socket, update.qr);
91
+ }
92
+ if (connection == "connecting") {
93
+ (_c = socket.onConnecting) === null || _c === void 0 ? void 0 : _c.call(socket);
94
+ }
95
+ if (connection === "close") {
96
+ const code = (_e = (_d = lastDisconnect === null || lastDisconnect === void 0 ? void 0 : lastDisconnect.error) === null || _d === void 0 ? void 0 : _d.output) === null || _e === void 0 ? void 0 : _e.statusCode;
97
+ let retryAttempt = (_f = this.retryCount.get(socket.id)) !== null && _f !== void 0 ? _f : 0;
98
+ let shouldRetry;
99
+ if (code != baileys_1.DisconnectReason.loggedOut && retryAttempt < 10) {
100
+ shouldRetry = true;
101
+ }
102
+ if (shouldRetry) {
103
+ retryAttempt++;
104
+ }
105
+ if (shouldRetry) {
106
+ this.retryCount.set(socket.id, retryAttempt);
107
+ startSocket();
108
+ }
109
+ else {
110
+ this.retryCount.delete(socket.id);
111
+ this.deleteSession(socket.id);
112
+ (_g = socket.onDisconnected) === null || _g === void 0 ? void 0 : _g.call(socket);
113
+ }
114
+ }
115
+ if (connection == "open") {
116
+ this.retryCount.delete(socket.id);
117
+ (_h = socket.onConnected) === null || _h === void 0 ? void 0 : _h.call(socket);
118
+ }
119
+ }
120
+ if (events["creds.update"]) {
121
+ yield saveCreds();
122
+ }
123
+ if (events["messages.update"]) {
124
+ const msg = events["messages.update"][0];
125
+ const data = Object.assign({ sessionId: socket.id, messageStatus: (0, message_status_1.parseMessageStatusCodeToReadable)(msg.update.status) }, msg);
126
+ (_j = socket.onMessageUpdated) === null || _j === void 0 ? void 0 : _j.call(socket, data);
127
+ }
128
+ if (events["messages.upsert"]) {
129
+ const msg = (_k = events["messages.upsert"]
130
+ .messages) === null || _k === void 0 ? void 0 : _k[0];
131
+ msg.sessionId = socket.id;
132
+ msg.saveImage = (path) => (0, save_media_1.saveImageHandler)(msg, path);
133
+ msg.saveVideo = (path) => (0, save_media_1.saveVideoHandler)(msg, path);
134
+ msg.saveDocument = (path) => (0, save_media_1.saveDocumentHandler)(msg, path);
135
+ (_l = socket.onMessageReceived) === null || _l === void 0 ? void 0 : _l.call(socket, msg);
136
+ }
137
+ }));
138
+ if (!sock.authState.creds.registered) {
139
+ yield new Promise((resolve) => setTimeout(resolve, 5000));
140
+ const code = yield sock.requestPairingCode(socket.phoneNumber);
141
+ console.log(code);
142
+ (_a = socket.onPairing) === null || _a === void 0 ? void 0 : _a.call(socket, code);
143
+ }
144
+ return socket;
145
+ }
146
+ catch (error) {
147
+ console.log(error.message);
148
+ return socket;
149
+ }
150
+ });
151
+ return startSocket();
152
+ });
153
+ this.isSessionExistAndRunning = (socket) => {
154
+ if (fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME)) &&
155
+ fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, socket.id + "_" + socket.phoneNumber + Defaults_1.CREDENTIALS.SUFFIX)) &&
156
+ fs_1.default.readdirSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, socket.id + "_" + socket.phoneNumber + Defaults_1.CREDENTIALS.SUFFIX)).length &&
157
+ this.getSocket(socket.id)) {
158
+ return true;
159
+ }
160
+ return false;
161
+ };
162
+ this.deleteSession = (sessionId) => __awaiter(this, void 0, void 0, function* () {
163
+ const socket = this.getSocket(sessionId);
164
+ if (!socket)
165
+ return;
166
+ yield socket.logout();
167
+ const dir = path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME, socket.id + "_" + socket.phoneNumber + Defaults_1.CREDENTIALS.SUFFIX);
168
+ if (fs_1.default.existsSync(dir)) {
169
+ fs_1.default.rmSync(dir, { force: true, recursive: true });
170
+ }
171
+ });
172
+ }
173
+ load(each) {
174
+ return __awaiter(this, void 0, void 0, function* () {
175
+ if (!fs_1.default.existsSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME))) {
176
+ fs_1.default.mkdirSync(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME));
177
+ }
178
+ fs_1.default.readdir(path_1.default.resolve(Defaults_1.CREDENTIALS.DIR_NAME), (err, dirs) => __awaiter(this, void 0, void 0, function* () {
179
+ var _a;
180
+ if (err) {
181
+ throw err;
182
+ }
183
+ for (const dir of dirs) {
184
+ const sessionId = dir.split("_")[0];
185
+ const phoneNumber = dir.split("_")[1];
186
+ let socket = new Socket_1.Socket({
187
+ id: sessionId,
188
+ phoneNumber: phoneNumber,
189
+ });
190
+ socket = (_a = each === null || each === void 0 ? void 0 : each(socket)) !== null && _a !== void 0 ? _a : socket;
191
+ if (!this.shouldLoadSession(socket))
192
+ continue;
193
+ this.startSession(socket);
194
+ }
195
+ }));
196
+ });
197
+ }
198
+ }
199
+ exports.Whatsapp = Whatsapp;
200
+ const wa = new Whatsapp();
201
+ // wa.load();
202
+ const mySocket = new Socket_1.Socket({ id: "mysocket", phoneNumber: "6281524538841" });
203
+ mySocket.onPairing = (code) => {
204
+ console.log(code);
205
+ };
206
+ wa.startSession(mySocket);
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@neelegirl/wa-api",
3
+ "version": "1.0.0",
4
+ "description": "Multi Session Whatsapp Library",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/neelegirly/neelegirl-wa-api.git"
10
+ },
11
+ "homepage": "https://https://github.com/neelegirly/neelegirl-wa-api#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/neelegirly/neelegirl-wa-api"
14
+ },
15
+ "files": [
16
+ "dist/**/*"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "start": "tsc && node ./dist/index.js",
21
+ "test": "echo \"Error: no test specified\" && exit 1",
22
+ "run-script": "node ./dist/index.js"
23
+ },
24
+ "author": "Neele",
25
+ "license": "ISC",
26
+ "dependencies": {
27
+ "jest": "^29.0.0",
28
+ "@adiwajshing/keyed-db": "^0.2.4",
29
+ "@hapi/boom": "^10.0.1",
30
+ "@neelegirl/baileys": "^1.5.6",
31
+ "mime": "^3.0.0",
32
+ "pino": "^8.11.0",
33
+ "qrcode-terminal": "^0.12.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/mime": "^3.0.1"
37
+ }
38
+ }
package/readme.md ADDED
@@ -0,0 +1,141 @@
1
+ # 💌 @neelegirl/wa-api → **onimai**
2
+
3
+ ✨ *Die elegante & simple WhatsApp-Bibliothek*
4
+ zur Verwaltung **mehrerer Sessions** – mit
5
+ 💎 **universeller `sendMessage`** und direkter
6
+ ⚡ **`relayMessage`-Power** für Profis.
7
+
8
+ ---
9
+
10
+ > ⚠️ **Hinweis:**
11
+ > Diese Library funktioniert **ausschließlich** mit **@neelegirl/baileys** und ist auch **mit LID kompatibel**.
12
+ > 🔒 Andere Baileys-Forks oder Varianten sind **nicht unterstützt**.
13
+
14
+ ---
15
+
16
+ ## 📚 Inhaltsverzeichnis
17
+
18
+ 1. [📦 Installation](#-installation)
19
+ 2. [🔌 Import & Setup](#-import--setup)
20
+ 3. [📲 Session Management](#-session-management)
21
+ 4. [💬 Nachrichten senden (`sendMessage`)](#-nachrichten-senden-sendmessage)
22
+ 5. [🔧 Spezialfunktionen (`relayMessage`)](#-spezialfunktionen-relaymessage)
23
+ 6. [🎧 Listener](#-listener)
24
+ 7. [🚨 Fehlerbehandlung](#-fehlerbehandlung)
25
+ 8. [👩‍💻 Autorin & Support](#-autorin--support)
26
+
27
+ ---
28
+
29
+ ## 📦 Installation
30
+
31
+ ```bash
32
+ npm install @neelegirl/wa-api@latest
33
+ ```
34
+
35
+ ---
36
+
37
+ ## 🔌 Import & Setup
38
+
39
+ ```js
40
+ // CommonJS
41
+ const onimai = require('@neelegirl/wa-api');
42
+
43
+ // ES Module
44
+ import * as onimai from '@neelegirl/wa-api';
45
+ ```
46
+
47
+ ---
48
+
49
+ ## 📲 Session Management
50
+
51
+ ```js
52
+ await onimai.startSession('session1');
53
+ await onimai.startSessionWithPairingCode('session2', {
54
+ phoneNumber: '491234567890'
55
+ });
56
+ const all = onimai.getAllSession();
57
+ const one = onimai.getSession('session1');
58
+ const loaded = await onimai.loadSessionsFromStorage();
59
+ ```
60
+
61
+ ---
62
+
63
+ ## 💬 Nachrichten senden (`sendMessage`)
64
+
65
+ ```js
66
+ await onimai1.sendMessage(sessionId, jidOrPhone, content, options);
67
+ ```
68
+
69
+ ### ✨ Beispiele
70
+
71
+ | 📨 Typ | 📘 Beschreibung | 🧾 Inhalt Beispiel |
72
+ |--------------|------------------------|--------------------|
73
+ | **Text** | Klassische Nachricht | `{ text: 'Hallo!' }` |
74
+ | **Bild** | Mit Caption | `{ image: { url: './img.png' }, caption: 'Hey' }` |
75
+ | **Video** | Mit Caption | `{ video: { url: './vid.mp4' }, caption: 'Clip' }` |
76
+ | **GIF** | Loop-Video | `{ video: { url: './gif.mp4' }, gifPlayback: true }` |
77
+ | **Audio** | Sprachnachricht | `{ audio: fs.createReadStream('voice.ogg'), mimetype: 'audio/ogg', ptt: true }` |
78
+ | **Dokument** | PDF o.ä. | `{ document: { url: './doc.pdf', filename: 'Beispiel.pdf' } }` |
79
+ | **Umfrage** | Poll erstellen | `{ pollCreationMessage: { name: 'Frage?', options: [...], selectableCount: 1 } }` |
80
+ | **Reaktion** | Emoji antworten | `{ react: { text: '❤️', key: msg.key } }` |
81
+ | **Löschen** | Nachricht zurückziehen | `{ delete: msg.key }` |
82
+ | **Pin** | Nachricht anpinnen | `{ pin: { type: 1, time: 3600, key: msg.key } }` |
83
+ | **Kontakt** | vCard teilen | `{ contacts: { displayName: 'Max', contacts: [{ vcard }] } }` |
84
+ | **Standort** | Map teilen | `{ location: { degreesLatitude: 52.52, degreesLongitude: 13.405 } }` |
85
+ | **Forward** | Nachricht weiterleiten | `{ forward: origMsg }` |
86
+ | **Status** | Story posten | `{ video: { url: 'story.mp4' }, caption: 'Mein Status' }` |
87
+
88
+ ---
89
+
90
+ ## 🔧 Spezialfunktionen (`relayMessage`)
91
+
92
+ - **Nachricht löschen (Revoke)**
93
+ - **Ephemeral-Mode an/aus**
94
+ - **Status posten (Story)**
95
+ - **Weiterleiten**
96
+ - **Profilbild ändern**
97
+ - **Chat als gelesen markieren**
98
+ - **Custom Message IDs setzen**
99
+
100
+ ➡️ Beispiele siehe Code im Repo – alle Funktionen sind out-of-the-box!
101
+
102
+ ---
103
+
104
+ ## 🎧 Listener
105
+
106
+ ```js
107
+ onimai.onConnected(id => console.log('✅ Online:', id));
108
+ onimai.onQRUpdated(info => console.log('📲 QR-Code:', info));
109
+ onimai.onMessageReceived(msg => console.log('📥 Nachricht:', msg));
110
+ ```
111
+
112
+ ---
113
+
114
+ ## 🚨 Fehlerbehandlung
115
+
116
+ ```js
117
+ try {
118
+ await onimai1.sendMessage(...);
119
+ } catch (e) {
120
+ console.error('⚠️ Fehler:', e);
121
+ }
122
+ ```
123
+
124
+ ---
125
+
126
+ ## 👩‍💻 Autorin & Support
127
+
128
+ © 2026 **@neelegirl/wa-api**
129
+ 🌸 Made with Love by **Neele**
130
+ 💌 Support: [neelehoven@gmail.com](mailto:neelehoven@gmail.com)
131
+ 📚 Docs: [wa-api.org](https://wa-api.org)
132
+
133
+ ---
134
+
135
+ ## 💖 Community
136
+
137
+ Wir danken allen **schönen & treuen Usern**, die diese Library benutzen und supporten.
138
+ Euer Vertrauen macht dieses Projekt **LID** und einzigartig. ✨
139
+
140
+ ---
141
+ 🌸 *Stay kawaii, stay connected – Onimai forever!* 🌸