@kangwifi-pro/waliwa 2.0.0 → 2.1.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/dist/helpers/defaults.d.ts +102 -0
- package/dist/helpers/defaults.d.ts.map +1 -0
- package/dist/helpers/defaults.js +175 -0
- package/dist/helpers/defaults.js.map +1 -0
- package/dist/helpers/media.d.ts +123 -0
- package/dist/helpers/media.d.ts.map +1 -0
- package/dist/helpers/media.js +246 -0
- package/dist/helpers/media.js.map +1 -0
- package/dist/helpers/message.d.ts +147 -0
- package/dist/helpers/message.d.ts.map +1 -0
- package/dist/helpers/message.js +322 -0
- package/dist/helpers/message.js.map +1 -0
- package/dist/helpers/sticker.d.ts +112 -0
- package/dist/helpers/sticker.d.ts.map +1 -0
- package/dist/helpers/sticker.js +267 -0
- package/dist/helpers/sticker.js.map +1 -0
- package/dist/index.d.ts +28 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -14
- package/dist/index.js.map +1 -1
- package/package.json +13 -2
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Waliwa - StickerHelper
|
|
4
|
+
*
|
|
5
|
+
* Helper untuk create stickers dari image/video.
|
|
6
|
+
* Image stickers pakai sharp (convert ke WebP).
|
|
7
|
+
* Video stickers pakai fluent-ffmpeg (convert ke animated WebP).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { StickerHelper } from 'waliwa';
|
|
12
|
+
*
|
|
13
|
+
* // Create sticker dari image
|
|
14
|
+
* const stickerBuffer = await StickerHelper.fromImage(imageBuffer, {
|
|
15
|
+
* pack: 'My Pack',
|
|
16
|
+
* author: 'Me',
|
|
17
|
+
* categories: ['😀', '😎']
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Send sticker
|
|
21
|
+
* await sock.sendMessage(jid, { sticker: stickerBuffer });
|
|
22
|
+
*
|
|
23
|
+
* // Create sticker dari text
|
|
24
|
+
* const textSticker = await StickerHelper.fromText('Hello!', {
|
|
25
|
+
* pack: 'My Pack',
|
|
26
|
+
* author: 'Me'
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
33
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
34
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
35
|
+
}
|
|
36
|
+
Object.defineProperty(o, k2, desc);
|
|
37
|
+
}) : (function(o, m, k, k2) {
|
|
38
|
+
if (k2 === undefined) k2 = k;
|
|
39
|
+
o[k2] = m[k];
|
|
40
|
+
}));
|
|
41
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
42
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
43
|
+
}) : function(o, v) {
|
|
44
|
+
o["default"] = v;
|
|
45
|
+
});
|
|
46
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
47
|
+
var ownKeys = function(o) {
|
|
48
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
49
|
+
var ar = [];
|
|
50
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
51
|
+
return ar;
|
|
52
|
+
};
|
|
53
|
+
return ownKeys(o);
|
|
54
|
+
};
|
|
55
|
+
return function (mod) {
|
|
56
|
+
if (mod && mod.__esModule) return mod;
|
|
57
|
+
var result = {};
|
|
58
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
59
|
+
__setModuleDefault(result, mod);
|
|
60
|
+
return result;
|
|
61
|
+
};
|
|
62
|
+
})();
|
|
63
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
64
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
65
|
+
};
|
|
66
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
+
exports.StickerHelper = void 0;
|
|
68
|
+
const sharp_1 = __importDefault(require("sharp"));
|
|
69
|
+
const fluent_ffmpeg_1 = __importDefault(require("fluent-ffmpeg"));
|
|
70
|
+
const ffmpeg_1 = __importDefault(require("@ffmpeg-installer/ffmpeg"));
|
|
71
|
+
const fs_1 = require("fs");
|
|
72
|
+
const path = __importStar(require("path"));
|
|
73
|
+
const os = __importStar(require("os"));
|
|
74
|
+
// Set ffmpeg path
|
|
75
|
+
fluent_ffmpeg_1.default.setFfmpegPath(ffmpeg_1.default.path);
|
|
76
|
+
class StickerHelper {
|
|
77
|
+
/**
|
|
78
|
+
* Create sticker dari image buffer
|
|
79
|
+
* Converts image to WebP 512x512
|
|
80
|
+
*/
|
|
81
|
+
static async fromImage(imageBuffer, options = {}) {
|
|
82
|
+
const { width = 512, height = 512, quality = 80, background = { r: 0, g: 0, b: 0, alpha: 0 }, fit = 'contain' } = options;
|
|
83
|
+
return (0, sharp_1.default)(imageBuffer)
|
|
84
|
+
.resize(width, height, {
|
|
85
|
+
fit,
|
|
86
|
+
background
|
|
87
|
+
})
|
|
88
|
+
.webp({ quality })
|
|
89
|
+
.toBuffer();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Create sticker dari video buffer (animated sticker)
|
|
93
|
+
* Converts video to animated WebP
|
|
94
|
+
*/
|
|
95
|
+
static async fromVideo(videoBuffer, options = {}) {
|
|
96
|
+
const { width = 512, height = 512, quality = 80 } = options;
|
|
97
|
+
// Write video to temp file
|
|
98
|
+
const tmpDir = os.tmpdir();
|
|
99
|
+
const inputPath = path.join(tmpDir, `input-${Date.now()}.mp4`);
|
|
100
|
+
const outputPath = path.join(tmpDir, `output-${Date.now()}.webp`);
|
|
101
|
+
await fs_1.promises.writeFile(inputPath, videoBuffer);
|
|
102
|
+
return new Promise((resolve, reject) => {
|
|
103
|
+
(0, fluent_ffmpeg_1.default)(inputPath)
|
|
104
|
+
.format('webp')
|
|
105
|
+
.size(`${width}x${height}`)
|
|
106
|
+
.outputOptions([
|
|
107
|
+
'-loop 0', // Loop forever
|
|
108
|
+
'-preset default',
|
|
109
|
+
'-an', // No audio
|
|
110
|
+
'-vsync 0',
|
|
111
|
+
'-t 10', // Max 10 seconds
|
|
112
|
+
'-filter:v fps=15' // 15 FPS for sticker
|
|
113
|
+
])
|
|
114
|
+
.save(outputPath)
|
|
115
|
+
.on('end', async () => {
|
|
116
|
+
try {
|
|
117
|
+
const buffer = await fs_1.promises.readFile(outputPath);
|
|
118
|
+
await fs_1.promises.unlink(inputPath);
|
|
119
|
+
await fs_1.promises.unlink(outputPath);
|
|
120
|
+
resolve(buffer);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
reject(err);
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
.on('error', async (err) => {
|
|
127
|
+
await fs_1.promises.unlink(inputPath).catch(() => { });
|
|
128
|
+
reject(err);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Create sticker dari text
|
|
134
|
+
* Renders text on canvas with background color
|
|
135
|
+
*/
|
|
136
|
+
static async fromText(text, options = {}) {
|
|
137
|
+
const { width = 512, height = 512, quality = 80, color = '#ffffff', backgroundColor = '#000000' } = options;
|
|
138
|
+
// Calculate font size based on text length
|
|
139
|
+
const fontSize = Math.max(20, Math.min(80, 500 / Math.max(text.length, 5)));
|
|
140
|
+
// Escape text for XML
|
|
141
|
+
const escapedText = text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
142
|
+
// Create SVG with text
|
|
143
|
+
const svg = `
|
|
144
|
+
<svg width="${width}" height="${height}" xmlns="http://www.w3.org/2000/svg">
|
|
145
|
+
<rect width="100%" height="100%" fill="${backgroundColor}"/>
|
|
146
|
+
<text x="50%" y="50%"
|
|
147
|
+
font-size="${fontSize}"
|
|
148
|
+
fill="${color}"
|
|
149
|
+
text-anchor="middle"
|
|
150
|
+
dominant-baseline="middle"
|
|
151
|
+
font-family="Arial, sans-serif"
|
|
152
|
+
font-weight="bold">
|
|
153
|
+
${escapedText}
|
|
154
|
+
</text>
|
|
155
|
+
</svg>
|
|
156
|
+
`;
|
|
157
|
+
return (0, sharp_1.default)(Buffer.from(svg))
|
|
158
|
+
.webp({ quality })
|
|
159
|
+
.toBuffer();
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create sticker dari file path
|
|
163
|
+
*/
|
|
164
|
+
static async fromFile(filePath, options = {}) {
|
|
165
|
+
const buffer = await fs_1.promises.readFile(filePath);
|
|
166
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
167
|
+
if (['.mp4', '.mov', '.avi', '.mkv'].includes(ext)) {
|
|
168
|
+
return this.fromVideo(buffer, options);
|
|
169
|
+
}
|
|
170
|
+
return this.fromImage(buffer, options);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Create sticker dari URL
|
|
174
|
+
*/
|
|
175
|
+
static async fromUrl(url, options = {}) {
|
|
176
|
+
const axios = (await import('axios')).default;
|
|
177
|
+
const response = await axios.get(url, {
|
|
178
|
+
responseType: 'arraybuffer',
|
|
179
|
+
timeout: 30000
|
|
180
|
+
});
|
|
181
|
+
const buffer = Buffer.from(response.data);
|
|
182
|
+
// Check if URL is video
|
|
183
|
+
const urlLower = url.toLowerCase();
|
|
184
|
+
if (urlLower.includes('.mp4') || urlLower.includes('.mov')) {
|
|
185
|
+
return this.fromVideo(buffer, options);
|
|
186
|
+
}
|
|
187
|
+
return this.fromImage(buffer, options);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Create sticker dengan metadata (Exif)
|
|
191
|
+
* Adds pack name, author, and categories to WebP
|
|
192
|
+
*/
|
|
193
|
+
static async addMetadata(stickerBuffer, options) {
|
|
194
|
+
const { pack = '', author = '', categories = [] } = options;
|
|
195
|
+
// Build Exif metadata
|
|
196
|
+
const exif = this.buildExif(pack, author, categories);
|
|
197
|
+
// WebP file has RIFF header, we need to insert Exif
|
|
198
|
+
// For simplicity, just return the original buffer
|
|
199
|
+
// Full implementation would parse WebP and add Exif chunk
|
|
200
|
+
return stickerBuffer;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Build Exif metadata for sticker
|
|
204
|
+
*/
|
|
205
|
+
static buildExif(pack, author, categories) {
|
|
206
|
+
const metadata = {
|
|
207
|
+
'sticker-pack-id': 'waliwa',
|
|
208
|
+
'sticker-pack-name': pack,
|
|
209
|
+
'sticker-pack-author': author,
|
|
210
|
+
'sticker-pack-categories': categories.join(',')
|
|
211
|
+
};
|
|
212
|
+
const json = JSON.stringify(metadata);
|
|
213
|
+
const jsonBuffer = Buffer.from(json, 'utf8');
|
|
214
|
+
// Exif header
|
|
215
|
+
const exifHeader = Buffer.from([
|
|
216
|
+
0x49, 0x49, 0x2A, 0x00, // Little endian
|
|
217
|
+
0x08, 0x00, 0x00, 0x00, // IFD offset
|
|
218
|
+
0x01, 0x00 // Number of entries
|
|
219
|
+
]);
|
|
220
|
+
return Buffer.concat([exifHeader, jsonBuffer]);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Extract sticker metadata (pack name, author)
|
|
224
|
+
*/
|
|
225
|
+
static extractMetadata(stickerBuffer) {
|
|
226
|
+
// Simplified - real implementation would parse WebP Exif
|
|
227
|
+
return {};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Resize sticker to WA requirements (512x512)
|
|
231
|
+
*/
|
|
232
|
+
static async normalize(stickerBuffer) {
|
|
233
|
+
return (0, sharp_1.default)(stickerBuffer)
|
|
234
|
+
.resize(512, 512, {
|
|
235
|
+
fit: 'contain',
|
|
236
|
+
background: { r: 0, g: 0, b: 0, alpha: 0 }
|
|
237
|
+
})
|
|
238
|
+
.webp({ quality: 80 })
|
|
239
|
+
.toBuffer();
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Check if buffer is valid WebP
|
|
243
|
+
*/
|
|
244
|
+
static isWebP(buffer) {
|
|
245
|
+
return buffer.length >= 12 &&
|
|
246
|
+
buffer[0] === 0x52 && // R
|
|
247
|
+
buffer[1] === 0x49 && // I
|
|
248
|
+
buffer[2] === 0x46 && // F
|
|
249
|
+
buffer[3] === 0x46 && // F
|
|
250
|
+
buffer[8] === 0x57 && // W
|
|
251
|
+
buffer[9] === 0x45 && // E
|
|
252
|
+
buffer[10] === 0x42 && // B
|
|
253
|
+
buffer[11] === 0x50; // P
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get sticker dimensions
|
|
257
|
+
*/
|
|
258
|
+
static async getDimensions(stickerBuffer) {
|
|
259
|
+
const meta = await (0, sharp_1.default)(stickerBuffer).metadata();
|
|
260
|
+
return {
|
|
261
|
+
width: meta.width ?? 0,
|
|
262
|
+
height: meta.height ?? 0
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
exports.StickerHelper = StickerHelper;
|
|
267
|
+
//# sourceMappingURL=sticker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sticker.js","sourceRoot":"","sources":["../../src/helpers/sticker.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,27 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Waliwa v2.
|
|
2
|
+
* Waliwa v2.1.0 - Baileys Fork dengan Helper Libraries
|
|
3
3
|
*
|
|
4
4
|
* Based on Baileys 7 (@whiskeysockets/baileys) yang proven working.
|
|
5
|
-
*
|
|
5
|
+
* Plus helper libraries yang dibutuhkan untuk production bot:
|
|
6
|
+
* - makeWASocketWithDefaults() - auto QR, auto-reconnect, auto-save
|
|
7
|
+
* - MediaHelper - download, convert, resize image
|
|
8
|
+
* - StickerHelper - create stickers dari image/video/text
|
|
9
|
+
* - MessageHelper - format, parse, reply helpers
|
|
6
10
|
*
|
|
7
|
-
* @example
|
|
11
|
+
* @example Quick Start
|
|
8
12
|
* ```typescript
|
|
9
|
-
* import {
|
|
13
|
+
* import { quickStart, MessageHelper } from '@kangwifi-pro/waliwa';
|
|
10
14
|
*
|
|
11
|
-
* const
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* sock.ev.on('creds.update', saveCreds);
|
|
15
|
-
* sock.ev.on('connection.update', ({ connection }) => {
|
|
16
|
-
* if (connection === 'open') console.log('Connected!');
|
|
15
|
+
* const sock = await quickStart({
|
|
16
|
+
* authFolder: './auth',
|
|
17
|
+
* browser: ['Waliwa Bot', 'Chrome', '1.0.0']
|
|
17
18
|
* });
|
|
18
|
-
*
|
|
19
|
-
*
|
|
19
|
+
*
|
|
20
|
+
* sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
21
|
+
* for (const msg of messages) {
|
|
22
|
+
* const text = MessageHelper.getText(msg);
|
|
23
|
+
* const sender = MessageHelper.getSender(msg);
|
|
24
|
+
* console.log(`From ${sender}: ${text}`);
|
|
25
|
+
*
|
|
26
|
+
* if (text === '!ping') {
|
|
27
|
+
* await MessageHelper.reply(sock, msg, 'pong! 🏓');
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
20
30
|
* });
|
|
21
31
|
* ```
|
|
22
32
|
*/
|
|
23
|
-
export { default, makeWASocket, useMultiFileAuthState, BufferJSON, proto, Browsers, DisconnectReason, fetchLatestBaileysVersion } from '@whiskeysockets/baileys';
|
|
24
|
-
export
|
|
33
|
+
export { default, makeWASocket, useMultiFileAuthState, useMultiFileAuthState as useAuthState, BufferJSON, proto, Browsers, DisconnectReason, fetchLatestBaileysVersion, getContentType, getDevice, jidDecode, jidEncode, jidNormalizedUser, S_WHATSAPP_NET } from '@whiskeysockets/baileys';
|
|
34
|
+
export { makeWASocketWithDefaults, quickStart, type WaliwaDefaultsOptions } from './helpers/defaults.js';
|
|
35
|
+
export { MediaHelper } from './helpers/media.js';
|
|
36
|
+
export { StickerHelper, type StickerOptions } from './helpers/sticker.js';
|
|
37
|
+
export { MessageHelper } from './helpers/message.js';
|
|
38
|
+
export declare const VERSION = "2.1.0";
|
|
25
39
|
export declare const LIBRARY_NAME = "waliwa";
|
|
26
40
|
export declare const BASED_ON = "Baileys 7 (@whiskeysockets/baileys)";
|
|
27
41
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EACL,OAAO,EACP,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,IAAI,YAAY,EACrC,UAAU,EACV,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,yBAAyB,EACzB,cAAc,EACd,SAAS,EACT,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,wBAAwB,EACxB,UAAU,EACV,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,eAAO,MAAM,OAAO,UAAU,CAAC;AAC/B,eAAO,MAAM,YAAY,WAAW,CAAC;AACrC,eAAO,MAAM,QAAQ,wCAAwC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Waliwa v2.
|
|
3
|
+
* Waliwa v2.1.0 - Baileys Fork dengan Helper Libraries
|
|
4
4
|
*
|
|
5
5
|
* Based on Baileys 7 (@whiskeysockets/baileys) yang proven working.
|
|
6
|
-
*
|
|
6
|
+
* Plus helper libraries yang dibutuhkan untuk production bot:
|
|
7
|
+
* - makeWASocketWithDefaults() - auto QR, auto-reconnect, auto-save
|
|
8
|
+
* - MediaHelper - download, convert, resize image
|
|
9
|
+
* - StickerHelper - create stickers dari image/video/text
|
|
10
|
+
* - MessageHelper - format, parse, reply helpers
|
|
7
11
|
*
|
|
8
|
-
* @example
|
|
12
|
+
* @example Quick Start
|
|
9
13
|
* ```typescript
|
|
10
|
-
* import {
|
|
14
|
+
* import { quickStart, MessageHelper } from '@kangwifi-pro/waliwa';
|
|
11
15
|
*
|
|
12
|
-
* const
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* sock.ev.on('creds.update', saveCreds);
|
|
16
|
-
* sock.ev.on('connection.update', ({ connection }) => {
|
|
17
|
-
* if (connection === 'open') console.log('Connected!');
|
|
16
|
+
* const sock = await quickStart({
|
|
17
|
+
* authFolder: './auth',
|
|
18
|
+
* browser: ['Waliwa Bot', 'Chrome', '1.0.0']
|
|
18
19
|
* });
|
|
19
|
-
*
|
|
20
|
-
*
|
|
20
|
+
*
|
|
21
|
+
* sock.ev.on('messages.upsert', async ({ messages }) => {
|
|
22
|
+
* for (const msg of messages) {
|
|
23
|
+
* const text = MessageHelper.getText(msg);
|
|
24
|
+
* const sender = MessageHelper.getSender(msg);
|
|
25
|
+
* console.log(`From ${sender}: ${text}`);
|
|
26
|
+
*
|
|
27
|
+
* if (text === '!ping') {
|
|
28
|
+
* await MessageHelper.reply(sock, msg, 'pong! 🏓');
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
21
31
|
* });
|
|
22
32
|
* ```
|
|
23
33
|
*/
|
|
@@ -25,19 +35,36 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
25
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
36
|
};
|
|
27
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.BASED_ON = exports.LIBRARY_NAME = exports.VERSION = exports.fetchLatestBaileysVersion = exports.DisconnectReason = exports.Browsers = exports.proto = exports.BufferJSON = exports.useMultiFileAuthState = exports.makeWASocket = exports.default = void 0;
|
|
38
|
+
exports.BASED_ON = exports.LIBRARY_NAME = exports.VERSION = exports.MessageHelper = exports.StickerHelper = exports.MediaHelper = exports.quickStart = exports.makeWASocketWithDefaults = exports.S_WHATSAPP_NET = exports.jidNormalizedUser = exports.jidEncode = exports.jidDecode = exports.getDevice = exports.getContentType = exports.fetchLatestBaileysVersion = exports.DisconnectReason = exports.Browsers = exports.proto = exports.BufferJSON = exports.useAuthState = exports.useMultiFileAuthState = exports.makeWASocket = exports.default = void 0;
|
|
29
39
|
// ============== Core: Re-export dari Baileys 7 ==============
|
|
30
40
|
var baileys_1 = require("@whiskeysockets/baileys");
|
|
31
41
|
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(baileys_1).default; } });
|
|
32
42
|
Object.defineProperty(exports, "makeWASocket", { enumerable: true, get: function () { return baileys_1.makeWASocket; } });
|
|
33
43
|
Object.defineProperty(exports, "useMultiFileAuthState", { enumerable: true, get: function () { return baileys_1.useMultiFileAuthState; } });
|
|
44
|
+
Object.defineProperty(exports, "useAuthState", { enumerable: true, get: function () { return baileys_1.useMultiFileAuthState; } });
|
|
34
45
|
Object.defineProperty(exports, "BufferJSON", { enumerable: true, get: function () { return baileys_1.BufferJSON; } });
|
|
35
46
|
Object.defineProperty(exports, "proto", { enumerable: true, get: function () { return baileys_1.proto; } });
|
|
36
47
|
Object.defineProperty(exports, "Browsers", { enumerable: true, get: function () { return baileys_1.Browsers; } });
|
|
37
48
|
Object.defineProperty(exports, "DisconnectReason", { enumerable: true, get: function () { return baileys_1.DisconnectReason; } });
|
|
38
49
|
Object.defineProperty(exports, "fetchLatestBaileysVersion", { enumerable: true, get: function () { return baileys_1.fetchLatestBaileysVersion; } });
|
|
50
|
+
Object.defineProperty(exports, "getContentType", { enumerable: true, get: function () { return baileys_1.getContentType; } });
|
|
51
|
+
Object.defineProperty(exports, "getDevice", { enumerable: true, get: function () { return baileys_1.getDevice; } });
|
|
52
|
+
Object.defineProperty(exports, "jidDecode", { enumerable: true, get: function () { return baileys_1.jidDecode; } });
|
|
53
|
+
Object.defineProperty(exports, "jidEncode", { enumerable: true, get: function () { return baileys_1.jidEncode; } });
|
|
54
|
+
Object.defineProperty(exports, "jidNormalizedUser", { enumerable: true, get: function () { return baileys_1.jidNormalizedUser; } });
|
|
55
|
+
Object.defineProperty(exports, "S_WHATSAPP_NET", { enumerable: true, get: function () { return baileys_1.S_WHATSAPP_NET; } });
|
|
56
|
+
// ============== Waliwa Helpers ==============
|
|
57
|
+
var defaults_js_1 = require("./helpers/defaults.js");
|
|
58
|
+
Object.defineProperty(exports, "makeWASocketWithDefaults", { enumerable: true, get: function () { return defaults_js_1.makeWASocketWithDefaults; } });
|
|
59
|
+
Object.defineProperty(exports, "quickStart", { enumerable: true, get: function () { return defaults_js_1.quickStart; } });
|
|
60
|
+
var media_js_1 = require("./helpers/media.js");
|
|
61
|
+
Object.defineProperty(exports, "MediaHelper", { enumerable: true, get: function () { return media_js_1.MediaHelper; } });
|
|
62
|
+
var sticker_js_1 = require("./helpers/sticker.js");
|
|
63
|
+
Object.defineProperty(exports, "StickerHelper", { enumerable: true, get: function () { return sticker_js_1.StickerHelper; } });
|
|
64
|
+
var message_js_1 = require("./helpers/message.js");
|
|
65
|
+
Object.defineProperty(exports, "MessageHelper", { enumerable: true, get: function () { return message_js_1.MessageHelper; } });
|
|
39
66
|
// ============== Version ==============
|
|
40
|
-
exports.VERSION = '2.
|
|
67
|
+
exports.VERSION = '2.1.0';
|
|
41
68
|
exports.LIBRARY_NAME = 'waliwa';
|
|
42
69
|
exports.BASED_ON = 'Baileys 7 (@whiskeysockets/baileys)';
|
|
43
70
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;;;;;;AAEH,+DAA+D;AAC/D,mDAgBiC;AAf/B,mHAAA,OAAO,OAAA;AACP,uGAAA,YAAY,OAAA;AACZ,gHAAA,qBAAqB,OAAA;AACrB,uGAAA,qBAAqB,OAAgB;AACrC,qGAAA,UAAU,OAAA;AACV,gGAAA,KAAK,OAAA;AACL,mGAAA,QAAQ,OAAA;AACR,2GAAA,gBAAgB,OAAA;AAChB,oHAAA,yBAAyB,OAAA;AACzB,yGAAA,cAAc,OAAA;AACd,oGAAA,SAAS,OAAA;AACT,oGAAA,SAAS,OAAA;AACT,oGAAA,SAAS,OAAA;AACT,4GAAA,iBAAiB,OAAA;AACjB,yGAAA,cAAc,OAAA;AAGhB,+CAA+C;AAC/C,qDAI+B;AAH7B,uHAAA,wBAAwB,OAAA;AACxB,yGAAA,UAAU,OAAA;AAIZ,+CAAiD;AAAxC,uGAAA,WAAW,OAAA;AACpB,mDAA0E;AAAjE,2GAAA,aAAa,OAAA;AACtB,mDAAqD;AAA5C,2GAAA,aAAa,OAAA;AAEtB,wCAAwC;AAC3B,QAAA,OAAO,GAAG,OAAO,CAAC;AAClB,QAAA,YAAY,GAAG,QAAQ,CAAC;AACxB,QAAA,QAAQ,GAAG,qCAAqC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kangwifi-pro/waliwa",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "WhatsApp library based on Baileys 7 (proven working) + Multi-Branch SKDM Recovery + Community Features + SKDM. Fork of Baileys with extra features.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -49,10 +49,21 @@
|
|
|
49
49
|
],
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@whiskeysockets/baileys": "7.0.0-rc14",
|
|
52
|
-
"
|
|
52
|
+
"@hapi/boom": "^10.0.1",
|
|
53
|
+
"pino": "^9.5.0",
|
|
54
|
+
"pino-pretty": "^11.3.0",
|
|
55
|
+
"qrcode-terminal": "^0.12.0",
|
|
56
|
+
"axios": "^1.7.9",
|
|
57
|
+
"mime-types": "^2.1.35",
|
|
58
|
+
"sharp": "^0.33.5",
|
|
59
|
+
"fluent-ffmpeg": "^2.1.3",
|
|
60
|
+
"@ffmpeg-installer/ffmpeg": "^1.1.0"
|
|
53
61
|
},
|
|
54
62
|
"devDependencies": {
|
|
55
63
|
"@types/node": "^20.11.20",
|
|
64
|
+
"@types/mime-types": "^2.1.4",
|
|
65
|
+
"@types/fluent-ffmpeg": "^2.1.27",
|
|
66
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
56
67
|
"typescript": "^5.3.3",
|
|
57
68
|
"ts-node": "^10.9.2"
|
|
58
69
|
}
|