@boruto_vk7/stickengine 0.0.6 → 1.0.1

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.
@@ -0,0 +1,616 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.StickEngine = void 0;
40
+ exports.getBuffer = getBuffer;
41
+ const node_fs_1 = __importDefault(require("node:fs"));
42
+ const promises_1 = __importDefault(require("node:fs/promises"));
43
+ const node_path_1 = __importDefault(require("node:path"));
44
+ const node_child_process_1 = require("node:child_process");
45
+ const node_events_1 = require("node:events");
46
+ const axios_1 = __importDefault(require("axios"));
47
+ const fluent_ffmpeg_1 = __importDefault(require("fluent-ffmpeg"));
48
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
49
+ // @ts-ignore
50
+ const node_webpmux_1 = __importDefault(require("node-webpmux"));
51
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
52
+ // @ts-ignore
53
+ const jimp_1 = __importDefault(require("jimp"));
54
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
55
+ // @ts-ignore
56
+ const remove_bg_1 = require("remove.bg");
57
+ const moduleDir = typeof __dirname !== 'undefined' ? __dirname : process.cwd();
58
+ // ── Helpers ────────────────────────────────────────────────────────────────
59
+ async function getBuffer(url, options = {}) {
60
+ try {
61
+ const { data } = await (0, axios_1.default)({
62
+ method: 'get',
63
+ url,
64
+ headers: {
65
+ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
66
+ DNT: '1',
67
+ },
68
+ ...options,
69
+ responseType: 'arraybuffer',
70
+ timeout: 45000,
71
+ });
72
+ return Buffer.from(data);
73
+ }
74
+ catch (err) {
75
+ const fallback = node_path_1.default.join(moduleDir, 'emror.jpg');
76
+ if (node_fs_1.default.existsSync(fallback))
77
+ return node_fs_1.default.readFileSync(fallback);
78
+ throw new Error(`Failed to download: ${err instanceof Error ? err.message : String(err)}`);
79
+ }
80
+ }
81
+ function resolveWebpImage() {
82
+ const Image = node_webpmux_1.default.Image || node_webpmux_1.default.default?.Image;
83
+ if (!Image)
84
+ throw new Error('node-webpmux Image class not found');
85
+ return Image;
86
+ }
87
+ async function fileTypeFromBuf(buf) {
88
+ const ft = await Promise.resolve().then(() => __importStar(require('file-type')));
89
+ const mod = ft;
90
+ const fn = mod.fileTypeFromBuffer ||
91
+ mod.fromBuffer ||
92
+ mod.default?.fileTypeFromBuffer ||
93
+ mod.default?.fromBuffer;
94
+ if (!fn)
95
+ return undefined;
96
+ return fn(buf);
97
+ }
98
+ function isHttp(s) {
99
+ return /^https?:\/\//i.test(s);
100
+ }
101
+ // ── Engine ─────────────────────────────────────────────────────────────────
102
+ /**
103
+ * WhatsApp sticker engine (static + animated WebP + EXIF pack metadata).
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * import StickEngine from '@boruto_vk7/stickengine';
108
+ *
109
+ * const sticker = await StickEngine.create('./cat.gif', {
110
+ * metadata: { pack: 'My Pack', author: 'Me' },
111
+ * });
112
+ * // sticker.buffer → send to WhatsApp
113
+ * // sticker.path → temp file path
114
+ * ```
115
+ */
116
+ class StickEngine extends node_events_1.EventEmitter {
117
+ constructor(options = {}) {
118
+ super();
119
+ this.queue = [];
120
+ this.createdFiles = [];
121
+ this.options = {
122
+ webp: true,
123
+ edit: false,
124
+ transparent: false,
125
+ autoClean: false,
126
+ fps: 15,
127
+ quality: 75,
128
+ maxDuration: 6,
129
+ metadata: {
130
+ pack: 'StickEngine',
131
+ author: 'Borutovk7',
132
+ emojis: ['✨'],
133
+ },
134
+ ...options,
135
+ };
136
+ this.tempDir = node_path_1.default.resolve(options.tempDir || node_path_1.default.join(process.cwd(), 'tmp_stickengine'));
137
+ node_fs_1.default.mkdirSync(this.tempDir, { recursive: true });
138
+ }
139
+ // ── One-shot API (simplest) ──────────────────────────────────────────────
140
+ /**
141
+ * Create a sticker in one call. Returns path + buffer + base64.
142
+ */
143
+ static async create(input, options = {}) {
144
+ const engine = new StickEngine({ ...options, autoClean: false });
145
+ try {
146
+ return await engine.build(input);
147
+ }
148
+ finally {
149
+ // keep result file; drop other temps if any
150
+ }
151
+ }
152
+ /**
153
+ * Create sticker and return only the Buffer (handy for bots).
154
+ */
155
+ static async toBuffer(input, options = {}) {
156
+ const r = await StickEngine.create(input, options);
157
+ return r.buffer;
158
+ }
159
+ /**
160
+ * Create sticker and return base64 string.
161
+ */
162
+ static async toBase64String(input, options = {}) {
163
+ const r = await StickEngine.create(input, options);
164
+ return r.base64;
165
+ }
166
+ /** Instance one-shot (uses constructor options). */
167
+ async build(input) {
168
+ const filePath = await this.processFile(input, 0);
169
+ const buffer = await promises_1.default.readFile(filePath);
170
+ const info = await this.getMediaInfo(filePath);
171
+ const animated = await this.detectAnimatedWebp(filePath);
172
+ const result = {
173
+ path: filePath,
174
+ buffer,
175
+ base64: buffer.toString('base64'),
176
+ animated,
177
+ width: info.width || 512,
178
+ height: info.height || 512,
179
+ size: buffer.length,
180
+ };
181
+ this.emit('st.done', result);
182
+ return result;
183
+ }
184
+ // ── Queue API (batch) ────────────────────────────────────────────────────
185
+ addFile(file) {
186
+ this.queue.push(file);
187
+ return this;
188
+ }
189
+ add(...files) {
190
+ this.queue.push(...files);
191
+ return this;
192
+ }
193
+ /**
194
+ * Process the queue. Returns settled results with `value` = absolute path.
195
+ * Prefer `build()` / `StickEngine.create()` for a simpler API.
196
+ */
197
+ async start() {
198
+ if (!this.queue.length)
199
+ throw new Error('Queue is empty. Use addFile() or StickEngine.create().');
200
+ const jobs = this.queue.map((file, i) => this.processFile(file, i));
201
+ this.queue = [];
202
+ return Promise.allSettled(jobs);
203
+ }
204
+ /** Delete tracked temp files. */
205
+ clean() {
206
+ for (const file of this.createdFiles) {
207
+ try {
208
+ if (node_fs_1.default.existsSync(file))
209
+ node_fs_1.default.unlinkSync(file);
210
+ }
211
+ catch {
212
+ /* ignore */
213
+ }
214
+ }
215
+ this.createdFiles = [];
216
+ }
217
+ // ── Core pipeline ────────────────────────────────────────────────────────
218
+ track(file) {
219
+ this.createdFiles.push(file);
220
+ return file;
221
+ }
222
+ async processFile(input, index) {
223
+ const ts = `${Date.now()}_${index}_${Math.random().toString(36).slice(2, 7)}`;
224
+ const local = [];
225
+ try {
226
+ this.emit('st.start', { index, input: typeof input === 'string' ? input : '<buffer>' });
227
+ const { filePath, extension } = await this.materializeInput(input, ts);
228
+ local.push(filePath);
229
+ const mediaInfo = await this.getMediaInfo(filePath);
230
+ this.emit('st.info', { index, ...mediaInfo, extension });
231
+ let current = filePath;
232
+ let animated = mediaInfo.duration > 0.05 ||
233
+ ['gif', 'mp4', 'webm', 'mov', 'mkv', 'avi'].includes(extension) ||
234
+ (extension === 'webp' && (await this.detectAnimatedWebp(filePath)));
235
+ // Static edits only
236
+ if (this.options.edit && !animated) {
237
+ const edited = node_path_1.default.join(this.tempDir, `edited_${ts}.png`);
238
+ await this.applyJimpEdits(current, edited, this.options.edit);
239
+ local.push(edited);
240
+ current = edited;
241
+ }
242
+ // remove.bg static only
243
+ if (this.options.transparent && !animated) {
244
+ const key = Array.isArray(this.options.transparent)
245
+ ? this.options.transparent[Math.floor(Math.random() * this.options.transparent.length)]
246
+ : this.options.transparent;
247
+ if (typeof key === 'string' && key.length > 5) {
248
+ const out = node_path_1.default.join(this.tempDir, `nobg_${ts}.png`);
249
+ const result = await (0, remove_bg_1.removeBackgroundFromImageFile)({
250
+ path: current,
251
+ apiKey: key,
252
+ size: 'auto',
253
+ type: 'auto',
254
+ });
255
+ node_fs_1.default.writeFileSync(out, Buffer.from(result.base64img, 'base64'));
256
+ local.push(out);
257
+ current = out;
258
+ }
259
+ }
260
+ const webpPath = node_path_1.default.join(this.tempDir, `sticker_${ts}.webp`);
261
+ await this.convertToWebp(current, webpPath, animated);
262
+ local.push(webpPath);
263
+ current = webpPath;
264
+ // Re-check after ffmpeg (source of truth)
265
+ animated = await this.detectAnimatedWebp(current);
266
+ if (this.options.metadata !== undefined && this.options.metadata !== null) {
267
+ await this.addExif(current, this.options.metadata || {});
268
+ }
269
+ for (const f of local)
270
+ this.track(f);
271
+ this.emit('st.data', { index, file: current, animated });
272
+ return current;
273
+ }
274
+ catch (error) {
275
+ this.emit('st.error', { index, error: error?.message || String(error) });
276
+ for (const f of local) {
277
+ try {
278
+ if (node_fs_1.default.existsSync(f))
279
+ node_fs_1.default.unlinkSync(f);
280
+ }
281
+ catch {
282
+ /* ignore */
283
+ }
284
+ }
285
+ throw error;
286
+ }
287
+ }
288
+ async materializeInput(input, ts) {
289
+ if (Buffer.isBuffer(input)) {
290
+ const type = await fileTypeFromBuf(input);
291
+ const extension = type?.ext || 'bin';
292
+ const filePath = node_path_1.default.join(this.tempDir, `input_${ts}.${extension}`);
293
+ node_fs_1.default.writeFileSync(filePath, input);
294
+ return { filePath, extension };
295
+ }
296
+ if (typeof input === 'string' && isHttp(input)) {
297
+ const buffer = await getBuffer(input);
298
+ const type = await fileTypeFromBuf(buffer);
299
+ const extension = type?.ext || 'bin';
300
+ const filePath = node_path_1.default.join(this.tempDir, `input_${ts}.${extension}`);
301
+ node_fs_1.default.writeFileSync(filePath, buffer);
302
+ return { filePath, extension };
303
+ }
304
+ if (typeof input === 'string' && node_fs_1.default.existsSync(input)) {
305
+ const filePath = node_path_1.default.resolve(input);
306
+ const extension = node_path_1.default.extname(filePath).replace('.', '').toLowerCase() || 'bin';
307
+ return { filePath, extension };
308
+ }
309
+ throw new Error('Invalid input. Pass a file path, http(s) URL, or Buffer.');
310
+ }
311
+ // ── EXIF (fixes animated save error) ─────────────────────────────────────
312
+ /**
313
+ * Write WhatsApp sticker pack EXIF.
314
+ * Animated WebP MUST use muxAnim — save() throws on animations.
315
+ */
316
+ async addExif(webpPath, metadata) {
317
+ const Image = resolveWebpImage();
318
+ const img = new Image();
319
+ const json = {
320
+ 'sticker-pack-id': metadata.id || `stickengine-${Date.now()}`,
321
+ 'sticker-pack-name': metadata.pack || 'StickEngine',
322
+ 'sticker-pack-publisher': metadata.author || 'Borutovk7',
323
+ emojis: metadata.emojis?.length ? metadata.emojis : ['✨'],
324
+ };
325
+ const exifAttr = Buffer.from([
326
+ 0x49, 0x49, 0x2a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x57, 0x07, 0x00, 0x00, 0x00,
327
+ 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
328
+ ]);
329
+ const jsonBuff = Buffer.from(JSON.stringify(json), 'utf-8');
330
+ const exif = Buffer.concat([exifAttr, jsonBuff]);
331
+ exif.writeUIntLE(jsonBuff.length, 14, 4);
332
+ await img.load(webpPath);
333
+ img.exif = exif;
334
+ const frameCount = typeof img.frameCount === 'number'
335
+ ? img.frameCount
336
+ : Array.isArray(img.frames)
337
+ ? img.frames.length
338
+ : 0;
339
+ const animated = !!img.hasAnim || frameCount > 1;
340
+ /**
341
+ * node-webpmux compatibility layer
342
+ *
343
+ * v3.x (current):
344
+ * await img.save(path) // works for static AND animated (passes frames)
345
+ *
346
+ * v1.x / early forks:
347
+ * static → img.save(path)
348
+ * anim → img.muxAnim({ path, exif: true }) OR Image.muxAnim({ frames, exif, path })
349
+ * calling save() on anim throws:
350
+ * "Using `save` for animations is not currently supported. Use `muxAnim` instead"
351
+ */
352
+ const saveV3 = async () => {
353
+ // v3 instance save supports both; pass exif explicitly when supported
354
+ return img.save(webpPath, {
355
+ exif: true,
356
+ frames: animated ? img.frames : undefined,
357
+ width: img.width,
358
+ height: img.height,
359
+ loops: img.anim?.loops ?? img.anim?.loopCount ?? 0,
360
+ bgColor: img.anim?.bgColor ?? img.anim?.backgroundColor ?? [0, 0, 0, 0],
361
+ });
362
+ };
363
+ const saveLegacyMuxAnim = async () => {
364
+ const opts = {
365
+ path: webpPath,
366
+ frames: img.frames || [],
367
+ width: img.width || 512,
368
+ height: img.height || 512,
369
+ loops: img.anim?.loopCount ?? img.anim?.loops ?? 0,
370
+ bgColor: img.anim?.backgroundColor ?? img.anim?.bgColor ?? [0, 0, 0, 0],
371
+ exif,
372
+ };
373
+ if (typeof img.muxAnim === 'function') {
374
+ return img.muxAnim({
375
+ path: webpPath,
376
+ exif: true,
377
+ width: opts.width,
378
+ height: opts.height,
379
+ loops: opts.loops,
380
+ bgColor: opts.bgColor,
381
+ });
382
+ }
383
+ if (typeof Image.muxAnim === 'function') {
384
+ return Image.muxAnim(opts);
385
+ }
386
+ // absolute last resort: try plain save (v3)
387
+ return img.save(webpPath);
388
+ };
389
+ try {
390
+ if (typeof img.save === 'function') {
391
+ try {
392
+ await saveV3();
393
+ }
394
+ catch (err) {
395
+ const msg = String(err?.message || err);
396
+ if (/muxAnim|animations is not currently supported|Using `save`/i.test(msg)) {
397
+ await saveLegacyMuxAnim();
398
+ }
399
+ else if (animated) {
400
+ // some builds want save without second arg
401
+ try {
402
+ await img.save(webpPath);
403
+ }
404
+ catch (err2) {
405
+ const m2 = String(err2?.message || err2);
406
+ if (/muxAnim|animations is not currently supported|Using `save`/i.test(m2)) {
407
+ await saveLegacyMuxAnim();
408
+ }
409
+ else {
410
+ throw err2;
411
+ }
412
+ }
413
+ }
414
+ else {
415
+ throw err;
416
+ }
417
+ }
418
+ }
419
+ else if (typeof Image.save === 'function') {
420
+ // very old static save(path, image)
421
+ await Image.save(webpPath, img);
422
+ }
423
+ else {
424
+ await saveLegacyMuxAnim();
425
+ }
426
+ }
427
+ catch (err) {
428
+ const msg = String(err?.message || err);
429
+ if (/muxAnim|animations is not currently supported|Using `save`/i.test(msg)) {
430
+ await saveLegacyMuxAnim();
431
+ return;
432
+ }
433
+ throw err;
434
+ }
435
+ }
436
+ async detectAnimatedWebp(filePath) {
437
+ try {
438
+ if (!filePath.toLowerCase().endsWith('.webp') && !node_fs_1.default.existsSync(filePath))
439
+ return false;
440
+ const Image = resolveWebpImage();
441
+ const img = new Image();
442
+ await img.load(filePath);
443
+ return (!!img.hasAnim ||
444
+ (typeof img.frameCount === 'number' && img.frameCount > 1) ||
445
+ (Array.isArray(img.frames) && img.frames.length > 1));
446
+ }
447
+ catch {
448
+ return false;
449
+ }
450
+ }
451
+ // ── FFmpeg / Jimp ────────────────────────────────────────────────────────
452
+ async convertToWebp(input, output, isAnimated) {
453
+ const run = (quality, fps) => new Promise((resolve, reject) => {
454
+ const ff = (0, fluent_ffmpeg_1.default)(input).on('error', reject).on('end', () => resolve());
455
+ // Transparent pad for stickers looks better than white
456
+ const vf = isAnimated
457
+ ? `scale=512:512:force_original_aspect_ratio=decrease,fps=${fps},pad=512:512:(ow-iw)/2:(oh-ih)/2:color=0x00000000,setsar=1,format=rgba`
458
+ : `scale=512:512:force_original_aspect_ratio=decrease,pad=512:512:(ow-iw)/2:(oh-ih)/2:color=0x00000000,setsar=1,format=rgba`;
459
+ const opts = [
460
+ '-vcodec',
461
+ 'libwebp',
462
+ '-vf',
463
+ vf,
464
+ '-lossless',
465
+ isAnimated ? '0' : '1',
466
+ '-compression_level',
467
+ '6',
468
+ '-q:v',
469
+ String(Math.max(1, Math.min(100, quality))),
470
+ '-loop',
471
+ '0',
472
+ '-preset',
473
+ 'default',
474
+ '-an',
475
+ '-vsync',
476
+ '0',
477
+ ];
478
+ if (isAnimated) {
479
+ opts.push('-t', String(this.options.maxDuration || 6));
480
+ }
481
+ ff.addOutputOptions(opts).toFormat('webp').save(output);
482
+ });
483
+ let quality = this.options.quality ?? 75;
484
+ let fps = this.options.fps ?? 15;
485
+ await run(quality, fps);
486
+ // WhatsApp animated stickers should stay under ~1MB
487
+ if (isAnimated && node_fs_1.default.existsSync(output)) {
488
+ let attempts = 0;
489
+ while (node_fs_1.default.statSync(output).size > 1000000 && attempts < 4) {
490
+ quality = Math.max(20, quality - 15);
491
+ fps = Math.max(8, fps - 2);
492
+ await run(quality, fps);
493
+ attempts++;
494
+ }
495
+ }
496
+ if (!node_fs_1.default.existsSync(output) || node_fs_1.default.statSync(output).size < 20) {
497
+ throw new Error('FFmpeg failed to produce a valid WebP sticker.');
498
+ }
499
+ }
500
+ async applyJimpEdits(input, output, options) {
501
+ const image = await jimp_1.default.read(input);
502
+ if (options.greyscale)
503
+ image.greyscale();
504
+ if (options.invert)
505
+ image.invert();
506
+ if (options.sepia)
507
+ image.sepia();
508
+ if (options.blur)
509
+ image.blur(options.blur);
510
+ if (typeof options.brightness === 'number')
511
+ image.brightness(options.brightness);
512
+ if (typeof options.contrast === 'number')
513
+ image.contrast(options.contrast);
514
+ if (options.circle)
515
+ image.circle();
516
+ if (options.resize)
517
+ image.resize(options.resize.width, options.resize.height);
518
+ if (options.text?.content) {
519
+ const fontPath = options.text.color === 'BLACK' ? jimp_1.default.FONT_SANS_32_BLACK : jimp_1.default.FONT_SANS_32_WHITE;
520
+ const font = await jimp_1.default.loadFont(fontPath);
521
+ const printOptions = {
522
+ text: options.text.content,
523
+ alignmentX: options.text.alignmentX || jimp_1.default.HORIZONTAL_ALIGN_CENTER,
524
+ alignmentY: options.text.alignmentY || jimp_1.default.VERTICAL_ALIGN_BOTTOM,
525
+ };
526
+ if (options.text.stroke) {
527
+ const strokeFont = await jimp_1.default.loadFont(options.text.color === 'BLACK' ? jimp_1.default.FONT_SANS_32_WHITE : jimp_1.default.FONT_SANS_32_BLACK);
528
+ for (let x = -2; x <= 2; x++) {
529
+ for (let y = -2; y <= 2; y++) {
530
+ if (x !== 0 || y !== 0) {
531
+ image.print(strokeFont, x, y, printOptions, image.bitmap.width, image.bitmap.height);
532
+ }
533
+ }
534
+ }
535
+ }
536
+ image.print(font, 0, 0, printOptions, image.bitmap.width, image.bitmap.height);
537
+ }
538
+ await image.writeAsync(output);
539
+ }
540
+ getMediaInfo(file) {
541
+ return new Promise((resolve) => {
542
+ const args = [
543
+ '-v',
544
+ 'error',
545
+ '-select_streams',
546
+ 'v:0',
547
+ '-show_entries',
548
+ 'stream=width,height,duration',
549
+ '-of',
550
+ 'csv=p=0:s=x',
551
+ file,
552
+ ];
553
+ (0, node_child_process_1.execFile)('ffprobe', args, { timeout: 20000 }, (err, stdout) => {
554
+ if (err)
555
+ return resolve({ width: 0, height: 0, duration: 0 });
556
+ const parts = String(stdout).trim().split('x');
557
+ resolve({
558
+ width: parseInt(parts[0], 10) || 0,
559
+ height: parseInt(parts[1], 10) || 0,
560
+ duration: parseFloat(parts[2]) || 0,
561
+ });
562
+ });
563
+ });
564
+ }
565
+ // ── Extras ───────────────────────────────────────────────────────────────
566
+ static fileToBase64(filePath) {
567
+ return node_fs_1.default.readFileSync(filePath).toString('base64');
568
+ }
569
+ /** 96×96 tray icon WebP for sticker packs. */
570
+ async createTrayIcon(input) {
571
+ const ts = Date.now();
572
+ const pngPath = node_path_1.default.join(this.tempDir, `tray_${ts}.png`);
573
+ const webpPath = node_path_1.default.join(this.tempDir, `tray_${ts}.webp`);
574
+ let buffer;
575
+ if (Buffer.isBuffer(input))
576
+ buffer = input;
577
+ else if (typeof input === 'string' && isHttp(input))
578
+ buffer = await getBuffer(input);
579
+ else if (typeof input === 'string' && node_fs_1.default.existsSync(input))
580
+ buffer = node_fs_1.default.readFileSync(input);
581
+ else
582
+ throw new Error('Invalid tray icon input.');
583
+ const image = await jimp_1.default.read(buffer);
584
+ await image.cover(96, 96).writeAsync(pngPath);
585
+ await new Promise((resolve, reject) => {
586
+ (0, fluent_ffmpeg_1.default)(pngPath)
587
+ .on('error', reject)
588
+ .on('end', () => resolve())
589
+ .addOutputOptions(['-vcodec', 'libwebp', '-lossless', '1', '-q:v', '80'])
590
+ .toFormat('webp')
591
+ .save(webpPath);
592
+ });
593
+ this.track(pngPath);
594
+ this.track(webpPath);
595
+ return webpPath;
596
+ }
597
+ /** Text-only sticker (transparent 512×512). */
598
+ async createTextSticker(text, options = {}) {
599
+ const ts = Date.now();
600
+ const pngPath = node_path_1.default.join(this.tempDir, `text_${ts}.png`);
601
+ const image = new jimp_1.default(512, 512, options.background ?? 0x00000000);
602
+ const fontPath = options.color === 'BLACK' ? jimp_1.default.FONT_SANS_64_BLACK : jimp_1.default.FONT_SANS_64_WHITE;
603
+ const font = await jimp_1.default.loadFont(fontPath);
604
+ image.print(font, 0, 0, {
605
+ text,
606
+ alignmentX: jimp_1.default.HORIZONTAL_ALIGN_CENTER,
607
+ alignmentY: jimp_1.default.VERTICAL_ALIGN_MIDDLE,
608
+ }, 512, 512);
609
+ await image.writeAsync(pngPath);
610
+ this.track(pngPath);
611
+ return this.build(pngPath);
612
+ }
613
+ }
614
+ exports.StickEngine = StickEngine;
615
+ exports.default = StickEngine;
616
+ //# sourceMappingURL=StickEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StickEngine.js","sourceRoot":"","sources":["../../src/StickEngine.ts"],"names":[],"mappings":"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"}
Binary file
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = exports.getBuffer = exports.StickEngine = void 0;
4
+ var StickEngine_js_1 = require("./StickEngine.js");
5
+ Object.defineProperty(exports, "StickEngine", { enumerable: true, get: function () { return StickEngine_js_1.StickEngine; } });
6
+ Object.defineProperty(exports, "getBuffer", { enumerable: true, get: function () { return StickEngine_js_1.getBuffer; } });
7
+ var StickEngine_js_2 = require("./StickEngine.js");
8
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return StickEngine_js_2.StickEngine; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAS0B;AARxB,6GAAA,WAAW,OAAA;AACX,2GAAA,SAAS,OAAA;AASX,mDAA0D;AAAjD,yGAAA,WAAW,OAAW"}