/***
@ 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))