Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
jajbshjahavahh
GitHub Repository: jajbshjahavahh/Gojo-Satoru
Path: blob/master/node_modules/@adiwajshing/baileys/lib/Utils/generics.js
2593 views
1
"use strict";
2
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
if (k2 === undefined) k2 = k;
4
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
}) : (function(o, m, k, k2) {
6
if (k2 === undefined) k2 = k;
7
o[k2] = m[k];
8
}));
9
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
Object.defineProperty(o, "default", { enumerable: true, value: v });
11
}) : function(o, v) {
12
o["default"] = v;
13
});
14
var __importStar = (this && this.__importStar) || function (mod) {
15
if (mod && mod.__esModule) return mod;
16
var result = {};
17
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
__setModuleDefault(result, mod);
19
return result;
20
};
21
var __importDefault = (this && this.__importDefault) || function (mod) {
22
return (mod && mod.__esModule) ? mod : { "default": mod };
23
};
24
Object.defineProperty(exports, "__esModule", { value: true });
25
exports.fetchLatestBaileysVersion = exports.printQRIfNecessaryListener = exports.bindWaitForConnectionUpdate = exports.generateMessageID = exports.promiseTimeout = exports.delayCancellable = exports.delay = exports.debouncedTimeout = exports.unixTimestampSeconds = exports.shallowChanges = exports.toNumber = exports.encodeBigEndian = exports.encodeInt = exports.generateRegistrationId = exports.encodeWAMessage = exports.unpadRandomMax16 = exports.writeRandomPadMax16 = exports.BufferJSON = exports.Browsers = void 0;
26
const boom_1 = require("@hapi/boom");
27
const axios_1 = __importDefault(require("axios"));
28
const crypto_1 = require("crypto");
29
const os_1 = require("os");
30
const WAProto_1 = require("../../WAProto");
31
const baileys_version_json_1 = require("../Defaults/baileys-version.json");
32
const Types_1 = require("../Types");
33
const WABinary_1 = require("../WABinary");
34
const PLATFORM_MAP = {
35
'aix': 'AIX',
36
'darwin': 'Mac OS',
37
'win32': 'Windows',
38
'android': 'Android'
39
};
40
exports.Browsers = {
41
ubuntu: browser => ['Ubuntu', browser, '18.04'],
42
macOS: browser => ['Mac OS', browser, '10.15.3'],
43
baileys: browser => ['Baileys', browser, '4.0.0'],
44
/** The appropriate browser based on your OS & release */
45
appropriate: browser => [PLATFORM_MAP[os_1.platform()] || 'Ubuntu', browser, os_1.release()]
46
};
47
exports.BufferJSON = {
48
replacer: (k, value) => {
49
if (Buffer.isBuffer(value) || value instanceof Uint8Array || (value === null || value === void 0 ? void 0 : value.type) === 'Buffer') {
50
return { type: 'Buffer', data: Buffer.from((value === null || value === void 0 ? void 0 : value.data) || value).toString('base64') };
51
}
52
return value;
53
},
54
reviver: (_, value) => {
55
if (typeof value === 'object' && !!value && (value.buffer === true || value.type === 'Buffer')) {
56
const val = value.data || value.value;
57
return typeof val === 'string' ? Buffer.from(val, 'base64') : Buffer.from(val);
58
}
59
return value;
60
}
61
};
62
const writeRandomPadMax16 = (e) => {
63
function r(e, t) {
64
for (var r = 0; r < t; r++) {
65
e.writeUint8(t);
66
}
67
}
68
var t = crypto_1.randomBytes(1);
69
r(e, 1 + (15 & t[0]));
70
return e;
71
};
72
exports.writeRandomPadMax16 = writeRandomPadMax16;
73
const unpadRandomMax16 = (e) => {
74
const t = new Uint8Array(e);
75
if (0 === t.length) {
76
throw new Error('unpadPkcs7 given empty bytes');
77
}
78
var r = t[t.length - 1];
79
if (r > t.length) {
80
throw new Error(`unpad given ${t.length} bytes, but pad is ${r}`);
81
}
82
return new Uint8Array(t.buffer, t.byteOffset, t.length - r);
83
};
84
exports.unpadRandomMax16 = unpadRandomMax16;
85
const encodeWAMessage = (message) => (Buffer.from(exports.writeRandomPadMax16(new WABinary_1.Binary(WAProto_1.proto.Message.encode(message).finish())).readByteArray()));
86
exports.encodeWAMessage = encodeWAMessage;
87
const generateRegistrationId = () => (Uint16Array.from(crypto_1.randomBytes(2))[0] & 0x3fff);
88
exports.generateRegistrationId = generateRegistrationId;
89
const encodeInt = (e, t) => {
90
for (var r = t, a = new Uint8Array(e), i = e - 1; i >= 0; i--) {
91
a[i] = 255 & r;
92
r >>>= 8;
93
}
94
return a;
95
};
96
exports.encodeInt = encodeInt;
97
const encodeBigEndian = (e, t = 4) => {
98
let r = e;
99
const a = new Uint8Array(t);
100
for (let i = t - 1; i >= 0; i--) {
101
a[i] = 255 & r;
102
r >>>= 8;
103
}
104
return a;
105
};
106
exports.encodeBigEndian = encodeBigEndian;
107
const toNumber = (t) => ((typeof t === 'object' && 'toNumber' in t) ? t.toNumber() : t);
108
exports.toNumber = toNumber;
109
function shallowChanges(old, current, { lookForDeletedKeys }) {
110
const changes = {};
111
for (const key in current) {
112
if (old[key] !== current[key]) {
113
changes[key] = current[key] || null;
114
}
115
}
116
if (lookForDeletedKeys) {
117
for (const key in old) {
118
if (!changes[key] && old[key] !== current[key]) {
119
changes[key] = current[key] || null;
120
}
121
}
122
}
123
return changes;
124
}
125
exports.shallowChanges = shallowChanges;
126
/** unix timestamp of a date in seconds */
127
const unixTimestampSeconds = (date = new Date()) => Math.floor(date.getTime() / 1000);
128
exports.unixTimestampSeconds = unixTimestampSeconds;
129
const debouncedTimeout = (intervalMs = 1000, task = undefined) => {
130
let timeout;
131
return {
132
start: (newIntervalMs, newTask) => {
133
task = newTask || task;
134
intervalMs = newIntervalMs || intervalMs;
135
timeout && clearTimeout(timeout);
136
timeout = setTimeout(task, intervalMs);
137
},
138
cancel: () => {
139
timeout && clearTimeout(timeout);
140
timeout = undefined;
141
},
142
setTask: (newTask) => task = newTask,
143
setInterval: (newInterval) => intervalMs = newInterval
144
};
145
};
146
exports.debouncedTimeout = debouncedTimeout;
147
const delay = (ms) => exports.delayCancellable(ms).delay;
148
exports.delay = delay;
149
const delayCancellable = (ms) => {
150
const stack = new Error().stack;
151
let timeout;
152
let reject;
153
const delay = new Promise((resolve, _reject) => {
154
timeout = setTimeout(resolve, ms);
155
reject = _reject;
156
});
157
const cancel = () => {
158
clearTimeout(timeout);
159
reject(new boom_1.Boom('Cancelled', {
160
statusCode: 500,
161
data: {
162
stack
163
}
164
}));
165
};
166
return { delay, cancel };
167
};
168
exports.delayCancellable = delayCancellable;
169
async function promiseTimeout(ms, promise) {
170
if (!ms) {
171
return new Promise(promise);
172
}
173
const stack = new Error().stack;
174
// Create a promise that rejects in <ms> milliseconds
175
const { delay, cancel } = exports.delayCancellable(ms);
176
const p = new Promise((resolve, reject) => {
177
delay
178
.then(() => reject(new boom_1.Boom('Timed Out', {
179
statusCode: Types_1.DisconnectReason.timedOut,
180
data: {
181
stack
182
}
183
})))
184
.catch(err => reject(err));
185
promise(resolve, reject);
186
})
187
.finally(cancel);
188
return p;
189
}
190
exports.promiseTimeout = promiseTimeout;
191
// generate a random ID to attach to a message
192
const generateMessageID = () => 'BAE5' + crypto_1.randomBytes(6).toString('hex').toUpperCase();
193
exports.generateMessageID = generateMessageID;
194
const bindWaitForConnectionUpdate = (ev) => (async (check, timeoutMs) => {
195
let listener;
196
await (promiseTimeout(timeoutMs, (resolve, reject) => {
197
listener = (update) => {
198
var _a;
199
if (check(update)) {
200
resolve();
201
}
202
else if (update.connection === 'close') {
203
reject(((_a = update.lastDisconnect) === null || _a === void 0 ? void 0 : _a.error) || new boom_1.Boom('Connection Closed', { statusCode: Types_1.DisconnectReason.connectionClosed }));
204
}
205
};
206
ev.on('connection.update', listener);
207
})
208
.finally(() => (ev.off('connection.update', listener))));
209
});
210
exports.bindWaitForConnectionUpdate = bindWaitForConnectionUpdate;
211
const printQRIfNecessaryListener = (ev, logger) => {
212
ev.on('connection.update', async ({ qr }) => {
213
if (qr) {
214
const QR = await Promise.resolve().then(() => __importStar(require('qrcode-terminal'))).catch(err => {
215
logger.error('QR code terminal not added as dependency');
216
});
217
QR === null || QR === void 0 ? void 0 : QR.generate(qr, { small: true });
218
}
219
});
220
};
221
exports.printQRIfNecessaryListener = printQRIfNecessaryListener;
222
/**
223
* utility that fetches latest baileys version from the master branch.
224
* Use to ensure your WA connection is always on the latest version
225
*/
226
const fetchLatestBaileysVersion = async () => {
227
const URL = 'https://raw.githubusercontent.com/adiwajshing/Baileys/master/src/Defaults/baileys-version.json';
228
try {
229
const result = await axios_1.default.get(URL, { responseType: 'json' });
230
return {
231
version: result.data.version,
232
isLatest: true
233
};
234
}
235
catch (error) {
236
return {
237
version: baileys_version_json_1.version,
238
isLatest: false,
239
error
240
};
241
}
242
};
243
exports.fetchLatestBaileysVersion = fetchLatestBaileysVersion;
244
245