/*** @ Base: https://en.ephoto360.com/ @ Author: Shannz @ Note: Create text images with many effect options. ***/ import axios from 'axios'; import qs from 'qs'; import * as cheerio from 'cheerio'; const CONFIG = { BASE_URL: 'https://en.ephoto360.com', API_CREATE: 'https://en.ephoto360.com/effect/create-image', HEADERS: { NAVIGATE: { '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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Upgrade-Insecure-Requests': '1', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'same-origin' }, AJAX: { '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', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin' } } }; export const ephoto360 = { updateCookies: (oldCookie, newCookiesHeader) => { if (!newCookiesHeader) return oldCookie; const newCookieStr = newCookiesHeader.map(c => c.split(';')[0]).join('; '); return oldCookie ? `${oldCookie}; ${newCookieStr}` : newCookieStr; }, getSession: async (url, textArray) => { try { const resInit = await axios.get(url, { headers: CONFIG.HEADERS.NAVIGATE }); let cookies = ephoto360.updateCookies('', resInit.headers['set-cookie']); const $ = cheerio.load(resInit.data); const tokenShort = $('input[name="token"]').val(); const buildServer = $('input[name="build_server"]').val(); const buildServerId = $('input[name="build_server_id"]').val(); if (!tokenShort) throw new Error('Token awal tidak ditemukan.'); const formData = { 'text': textArray, 'submit': 'GO', 'token': tokenShort, 'build_server': buildServer, 'build_server_id': buildServerId }; const resMeta = await axios.post(url, qs.stringify(formData, { arrayFormat: 'brackets' }), { headers: { ...CONFIG.HEADERS.NAVIGATE, 'Content-Type': 'application/x-www-form-urlencoded', 'Referer': url, 'Cookie': cookies } }); cookies = ephoto360.updateCookies(cookies, resMeta.headers['set-cookie']); const $meta = cheerio.load(resMeta.data); const rawJson = $meta('#form_value_input').val(); if (!rawJson) throw new Error('Token generate tidak ditemukan (IP mungkin limit/spam).'); const sessionData = JSON.parse(rawJson); return { ...sessionData, cookies, referer: url }; } catch (error) { throw new Error(`Session Error: ${error.message}`); } }, create: async (effectUrl, texts) => { try { const session = await ephoto360.getSession(effectUrl, texts); const payload = { ...session, autocomplete: '', text: texts }; const response = await axios.post(CONFIG.API_CREATE, qs.stringify(payload, { arrayFormat: 'brackets' }), { headers: { ...CONFIG.HEADERS.AJAX, 'Referer': session.referer, 'Origin': CONFIG.BASE_URL, 'Cookie': session.cookies } }); const data = response.data; if (data.success) { const fullUrl = session.build_server + data.image; return { status: true, image_url: fullUrl, server: session.build_server }; } else { return { status: false, message: 'Server menolak request (Cek parameter teks).' }; } } catch (error) { return { status: false, message: error.message }; } } }; //ephoto360.create('https://en.ephoto360.com/create-pornhub-style-logos-online-free-549.html', ['Shannz', 'Hub']).then(a => console.log(a))