UNPKG

wibusoft

Version:

our features are few but we provide the best and it is not uncommon to find in other npmjs

184 lines (180 loc) โ€ข 7.63 kB
/* * mulut tuh di jaga. jangan di kontol kontolin, di kentod kentotin, di anjing anjingin * jangan lupa follow ig @hardianto02_ * jangan hapus author asli, jika ingin menghapus author asli, silahkan hubungi hardianto02_ untuk gelud bersama */ const { default: axios } = require('axios') const { randomBytes } = require('crypto') const { fromBuffer } = require('file-type') const Image = require('node-webpmux').Image const Formdata = require('form-data') const fs = require('fs') const toBuffer = (url) => { return new Promise(async (resolve, reject) => { if (Buffer.isBuffer(url)) { const file = await fromBuffer(url) resolve({ buffer: url, mime: file.mime, }) } if (typeof url === 'string' && !url.includes('http')) { const base64 = url.replace(/^data:(.*?);base64,/, '') const file = await fromBuffer(Buffer.from(base64, 'base64')) resolve({ buffer: Buffer.from(url, 'base64'), mime: file.mime, }) } else { axios.get(url, { responseType: 'arraybuffer' }).then((res) => { resolve({ buffer: res.data, mime: res.headers['content-type'], }) }) } }) } const config = { sessionInfo: { WA_VERSION: '2.2106.5', PAGE_UA: 'WhatsApp/2.2037.6 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', WA_AUTOMATE_VERSION: '3.6.10 UPDATE AVAILABLE: 3.6.11', BROWSER_VERSION: 'HeadlessChrome/88.0.4324.190', OS: 'Windows Server 2016', START_TS: 1614310326309, NUM: '6247', LAUNCH_TIME_MS: 7934, PHONE_VERSION: '2.20.205.16', }, config: { sessionId: 'session', headless: true, qrTimeout: 20, authTimeout: 0, cacheEnabled: false, useChrome: true, killProcessOnBrowserClose: true, throwErrorOnTosBlock: false, chromiumArgs: ['--no-sandbox', '--disable-setuid-sandbox', '--aggressive-cache-discard', '--disable-cache', '--disable-application-cache', '--disable-offline-load-stale-cache', '--disk-cache-size=0'], executablePath: 'C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe', skipBrokenMethodsCheck: true, stickerServerEndpoint: true, }, } /** * unshorten url * @param {String} url url of the website * @returns {Promise<String>} */ exports.expandedUrl = async (url) => { let link try { const res = await axios.request({ method: 'get', url: url, maxRedirects: 0, headers: { 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; Redmi 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.58 Mobile Safari/537.36', Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', }, }) link = res.headers.location } catch (err) { if (Math.trunc(err.response.status / 100) === 3) { link = err.response.headers.location } else { throw err } } finally { return link } } exports.setExif = async (webpSticker, packname, author, extra = {}) => { return new Promise(async (resolve, reject) => { const img = new Image() const stickerPackId = randomBytes(16).toString('hex').slice(0, 8) const json = { 'sticker-pack-id': stickerPackId, 'sticker-pack-name': packname, 'sticker-pack-publisher': author, 'sticker-pack-publisher-id': author, 'sticker-pack-version': '1.0.0', 'android-app-store-link': 'https://wibusoft.site', 'ios-app-store-link': 'https://wibusoft.site', 'sticker-pack-description': 'sticker ini merupakan sticker yang telah di generate oleh jamal', emojis: ['โค', '๐Ÿ˜', '๐Ÿ˜˜', '๐Ÿ’•', '๐Ÿ˜ป', '๐Ÿ’‘', '๐Ÿ‘ฉโ€โคโ€๐Ÿ‘ฉ', '๐Ÿ‘จโ€โคโ€๐Ÿ‘จ', '๐Ÿ’', '๐Ÿ‘ฉโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘ฉ', '๐Ÿ‘จโ€โคโ€๐Ÿ’‹โ€๐Ÿ‘จ', '๐Ÿงก', '๐Ÿ’›', '๐Ÿ’š', '๐Ÿ’™', '๐Ÿ’œ', '๐Ÿ–ค', '๐Ÿ’”', 'โฃ', '๐Ÿ’ž', '๐Ÿ’“', '๐Ÿ’—', '๐Ÿ’–', '๐Ÿ’˜', '๐Ÿ’', '๐Ÿ’Ÿ', 'โ™ฅ', '๐Ÿ’Œ', '๐Ÿ’‹', '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ', '๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ', '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ', '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ', '๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ', '๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ', '๐Ÿ‘ฌ', '๐Ÿ‘ญ', '๐Ÿ‘ซ', '๐Ÿฅฐ', '๐Ÿ˜š', '๐Ÿ˜™', '๐Ÿ‘„', '๐ŸŒน', '๐Ÿ˜ฝ', 'โฃ๏ธ', 'โค๏ธ', '๐Ÿ˜€', '๐Ÿ˜ƒ', '๐Ÿ˜„', '๐Ÿ˜', '๐Ÿ˜†', '๐Ÿ˜…', '๐Ÿ˜‚', '๐Ÿคฃ', '๐Ÿ™‚', '๐Ÿ˜›', '๐Ÿ˜', '๐Ÿ˜œ', '๐Ÿคช', '๐Ÿค—', '๐Ÿ˜บ', '๐Ÿ˜ธ', '๐Ÿ˜น', 'โ˜บ', '๐Ÿ˜Œ', '๐Ÿ˜‰', '๐Ÿค—', '๐Ÿ˜Š', '๐ŸŽŠ', '๐ŸŽ‰', '๐ŸŽ', '๐ŸŽˆ', '๐Ÿ‘ฏโ€โ™‚๏ธ', '๐Ÿ‘ฏ', '๐Ÿ‘ฏโ€โ™€๏ธ', '๐Ÿ’ƒ', '๐Ÿ•บ', '๐Ÿ”ฅ', 'โญ๏ธ', 'โœจ', '๐Ÿ’ซ', '๐ŸŽ‡', '๐ŸŽ†', '๐Ÿป', '๐Ÿฅ‚', '๐Ÿพ', '๐ŸŽ‚', '๐Ÿฐ', 'โ˜น', '๐Ÿ˜ฃ', '๐Ÿ˜–', '๐Ÿ˜ซ', '๐Ÿ˜ฉ', '๐Ÿ˜ข', '๐Ÿ˜ญ', '๐Ÿ˜ž', '๐Ÿ˜”', '๐Ÿ˜Ÿ', '๐Ÿ˜•', '๐Ÿ˜ค', '๐Ÿ˜ ', '๐Ÿ˜ฅ', '๐Ÿ˜ฐ', '๐Ÿ˜จ', '๐Ÿ˜ฟ', '๐Ÿ˜พ', '๐Ÿ˜“', '๐Ÿ™โ€โ™‚', '๐Ÿ™โ€โ™€', '๐Ÿ’”', '๐Ÿ™', '๐Ÿฅบ', '๐Ÿค•', 'โ˜”๏ธ', 'โ›ˆ', '๐ŸŒฉ', '๐ŸŒง,๐Ÿ˜ฏ', '๐Ÿ˜ฆ', '๐Ÿ˜ง', '๐Ÿ˜ฎ', '๐Ÿ˜ฒ', '๐Ÿ™€', '๐Ÿ˜ฑ', '๐Ÿคฏ', '๐Ÿ˜ณ', 'โ—', 'โ•', '๐Ÿคฌ', '๐Ÿ˜ก', '๐Ÿ˜ ', '๐Ÿ™„', '๐Ÿ‘ฟ', '๐Ÿ˜พ', '๐Ÿ˜ค', '๐Ÿ’ข', '๐Ÿ‘บ', '๐Ÿ—ฏ๏ธ', '๐Ÿ˜’', '๐Ÿฅต', '๐Ÿ‘‹'], ...extra, } let exifAttr = Buffer.from([0x49, 0x49, 0x2a, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x41, 0x57, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00]) let jsonBuffer = Buffer.from(JSON.stringify(json), 'utf8') let exif = Buffer.concat([exifAttr, jsonBuffer]) exif.writeUIntLE(jsonBuffer.length, 14, 4) await img.load(webpSticker) img.exif = exif return resolve(await img.save(null)) }) } /** * implement the sticker generator from @rayyreal * @param {Buffer | String} file serah lu * @param {Object} data config untuk sticker * @returns {Promise<Buffer>} */ exports.makeSticker = async ( file, datao = { author: '', pack: '', keepScale: true, removebg: 'HQ', circle: false, } ) => { return new Promise(async (resolve, reject) => { const buffer = await toBuffer(file) if (buffer.mime == 'image/webp') return resolve(await this.setExif(buffer.buffer, datao.pack, datao.author)) const config2 = { ...datao, processOptions: { crop: !datao.keepScale, fps: 10, startTime: '00:00:00.0', endTime: '00:00:7.0', loop: 0, }, } const DEFAULT_URL = 'https://sticker-api.openwa.dev/' let Type = buffer.mime.includes('image') ? 'image' : 'file' let url = String(`${DEFAULT_URL}${Type === 'image' ? 'prepareWebp' : 'convertMp4BufferToWebpDataUrl'}`) await axios(url, { method: 'POST', headers: { Accept: 'application/json, text/plain, /', 'Content-Type': 'application/json;charset=utf-8', 'User-Agent': 'WhatsApp/2.2037.6 Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', }, data: JSON.stringify( Object.assign( config, { stickerMetadata: config2 }, { [Type]: `data:${buffer.mime};base64,${buffer.buffer.toString('base64')}`, } ) ), maxBodyLength: Infinity, maxContentLength: Infinity, }) .then(async ({ data }) => { if (Type === 'image') return resolve(await this.setExif(Buffer.from(data.webpBase64, 'base64'), datao.author, datao.pack)) else { const webpBase = data.replace(/^data:(.*?);base64,/, '') const webpBase64 = webpBase.replace(/ /g, '+') const file = Buffer.from(webpBase64, 'base64') resolve(await this.setExif(file, datao.pack, datao.author)) } }) .catch((err) => reject(err)) }) }