Path: blob/master/node_modules/@adiwajshing/baileys/lib/Utils/baileys-event-stream.js
1129 views
"use strict";1var __importDefault = (this && this.__importDefault) || function (mod) {2return (mod && mod.__esModule) ? mod : { "default": mod };3};4Object.defineProperty(exports, "__esModule", { value: true });5exports.readAndEmitEventStream = exports.captureEventStream = void 0;6const events_1 = __importDefault(require("events"));7const fs_1 = require("fs");8const promises_1 = require("fs/promises");9const readline_1 = require("readline");10const generics_1 = require("./generics");11const make_mutex_1 = require("./make-mutex");12/**13* Captures events from a baileys event emitter & stores them in a file14* @param ev The event emitter to read events from15* @param filename File to save to16*/17const captureEventStream = (ev, filename) => {18const oldEmit = ev.emit;19// write mutex so data is appended in order20const writeMutex = (0, make_mutex_1.makeMutex)();21// monkey patch eventemitter to capture all events22ev.emit = function (...args) {23const content = JSON.stringify({ timestamp: Date.now(), event: args[0], data: args[1] }) + '\n';24const result = oldEmit.apply(ev, args);25writeMutex.mutex(async () => {26await (0, promises_1.writeFile)(filename, content, { flag: 'a' });27});28return result;29};30};31exports.captureEventStream = captureEventStream;32/**33* Read event file and emit events from there34* @param filename filename containing event data35* @param delayIntervalMs delay between each event emit36*/37const readAndEmitEventStream = (filename, delayIntervalMs = 0) => {38const ev = new events_1.default();39const fireEvents = async () => {40// from: https://stackoverflow.com/questions/6156501/read-a-file-one-line-at-a-time-in-node-js41const fileStream = (0, fs_1.createReadStream)(filename);42const rl = (0, readline_1.createInterface)({43input: fileStream,44crlfDelay: Infinity45});46// Note: we use the crlfDelay option to recognize all instances of CR LF47// ('\r\n') in input.txt as a single line break.48for await (const line of rl) {49if (line) {50const { event, data } = JSON.parse(line);51ev.emit(event, data);52delayIntervalMs && await (0, generics_1.delay)(delayIntervalMs);53}54}55fileStream.close();56};57return {58ev,59task: fireEvents()60};61};62exports.readAndEmitEventStream = readAndEmitEventStream;636465