| import { format as formatBytes } from 'bytes' |
| import express from 'express' |
| import { fileTypeFromBuffer } from 'file-type' |
| import morgan from 'morgan' |
| import pg from 'puppeteer-ghost' |
| import * as prb from 'puppeteer-real-browser' |
| import serveIndex from 'serve-index' |
|
|
| import { spawn } from 'node:child_process' |
| import { promises as fsp } from 'node:fs' |
| import { tmpdir } from 'node:os' |
| import { env } from 'node:process' |
| import { setTimeout } from 'node:timers/promises' |
| import { format } from 'node:util' |
|
|
| const app = express() |
| app.enable('trust proxy') |
|
|
| const limitSize = '1000mb' |
| app.set('json spaces', 2) |
| app.use(express.json({ limit: limitSize })) |
| app.use(express.urlencoded({ |
| extended: true, |
| limit: limitSize |
| })) |
| app.use(morgan('dev')) |
|
|
| const tmpDir = tmpdir() |
| app.use( |
| tmpDir, |
| express.static(tmpDir), |
| serveIndex( |
| tmpDir, |
| { hidden: true, icons: true } |
| ) |
| ) |
|
|
| const isBase64 = (str) => { |
| try { |
| return btoa(atob(str)) === str |
| } catch { |
| return false |
| } |
| } |
|
|
| app.all('/', async (req, res) => { |
| try { |
| if (req.method !== 'POST') return res |
| .status(405) |
| .json({ msg: 'Hello World' }) |
|
|
| const { file } = req.body |
| if (!isBase64(file)) return res |
| .status(400) |
| .json({ |
| err: true, |
| msg: 'Bad Request' |
| }) |
|
|
| const buffer = Buffer.from(file, 'base64') |
| const { |
| mime = 'application/octet-stream', |
| ext = 'bin' |
| } = await fileTypeFromBuffer(buffer) || {} |
|
|
| const name = format( |
| '%s/%s-%s.%s', |
| tmpDir, |
| mime.split('/')[0], |
| Math.random().toString(36).slice(2), |
| ext |
| ) |
| await fsp.writeFile(name, buffer) |
|
|
| const bytes = buffer.length |
| res.json({ |
| name: name.split('/').pop(), |
| size: { |
| bytes, |
| readable: formatBytes( |
| bytes, |
| { unitSeparator: ' ' } |
| ), |
| }, |
| type: { mime, ext }, |
| url: format( |
| '%s://%s', |
| req.protocol, |
| req.host + name |
| ) |
| }) |
| } catch (e) { |
| console.error(e) |
| res |
| .status(500) |
| .json({ |
| err: true, |
| msg: format(e?.message || e) |
| }) |
| } |
| }) |
|
|
| app.get('/dl', async (req, res) => { |
| const { url } = req.query |
| if (!url) return res.redirect('/') |
| const api = format( |
| 'https://ochinpo-helper.hf.space/mediafire?url=%s', |
| url |
| ) |
| try { |
| const json = await (await fetch(api)).json() |
| const { result } = json |
| const target = format( |
| '%s/%s', |
| tmpDir, |
| result.filename |
| ) |
| const cmds = [ |
| '/shell?cmd=wget', '%s', '-O', '"%s"', |
| '--header="cookie: %s"','&&', |
| 'unzip', '"%s"', '-d', '%s' |
| ] |
| const route = format( |
| cmds.join(' '), |
| result.download, |
| target, |
| result.cookie, |
| target, |
| target.replace('.zip', '') |
| ) |
| res.set('user-agent', env.UA) |
| res.redirect(route) |
| } catch (e) { |
| console.error(e) |
| res |
| .status(500) |
| .json({ |
| err: true, |
| msg: format(e?.message || e) |
| }) |
| } |
| }) |
|
|
| app.get( |
| '/shell', |
| (req, res, next) => |
| req.get('user-agent') != env.UA ? |
| res.redirect('/') : |
| next(), |
| async (req, res) => { |
| req.query.cmd ||= 'w' |
| const [cmd, ...args] = req |
| .query |
| .cmd |
| .trim() |
| .split(' ') |
| const file = format( |
| '%s/%s.log', |
| tmpDir, |
| Date.now() |
| ) |
| const log = await fsp.open(file, 'w+') |
| const child = spawn( |
| cmd, |
| args, |
| { |
| detached: true, |
| env: Object.assign( |
| env, |
| { FORCE_COLOR: '0' } |
| ), |
| shell: true, |
| stdio: ['ignore', log, log] |
| } |
| ) |
| child.unref() |
| res.redirect(file) |
| } |
| ) |
|
|
| const executablePath = env.CHROME_BIN |
| app.get('/ss', async (req, res) => { |
| const { |
| delay = 0, |
| full = false, |
| mode = 'ghost', |
| transparent = false, |
| url = 'https://example.com' |
| } = req.query |
| if (String(url).includes('whatsapp.com')) |
| return res.redirect('/') |
|
|
| const isGhost = /^ghost$/i.test(mode) |
| const ctx = isGhost ? |
| await pg.launch({ |
| executablePath, |
| headless: 'new' |
| }) : |
| await prb.connect({ |
| customConfig: { executablePath }, |
| disableXvfb: true, |
| headless: 'new', |
| turnstile: true |
| }) |
|
|
| try { |
| const page = isGhost ? |
| await ctx.newPage() : |
| ctx.page |
| await page.goto( |
| url, |
| { waitUntil: 'networkidle0'} |
| ) |
|
|
| const name = format( |
| '%s/%s.png', |
| tmpDir, |
| Math.random().toString(36).slice(2) |
| ) |
|
|
| if (/^\d$/.test(delay) && delay > 0) |
| await setTimeout(+delay) |
| await page.screenshot({ |
| fullPage: full, |
| path: name, |
| omitBackground: transparent |
| }) |
|
|
| res.redirect(name) |
| } catch (e) { |
| console.error(e) |
| res |
| .status(500) |
| .json({ |
| err: true, |
| msg: format(e?.message || e) |
| }) |
| } finally { |
| await (isGhost ? ctx : ctx.browser).close() |
| } |
| }) |
|
|
| const PORT = env.SERVER_PORT || env.PORT || 7860 |
| app.listen( |
| PORT, |
| () => console.log('App running on port', PORT) |
| ) |