UNPKG

@rifaichump/aternos

Version:

An unofficial API client to manage and interact with Aternos servers using Puppeteer.

1 lines 28.7 kB
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/global/set.ts","../src/login.ts","../src/server.ts","../src/servermanager.ts","../src/console.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import path from 'path';\nimport fs from 'fs';\nimport { execSync } from 'child_process';\nimport freeport from 'freeport';\n\nexport function resolveChromiumPath(): string {\n const localPath = path.resolve(\n __dirname,\n '../../stable-chromium/chrome-linux/chrome-linux64/chrome'\n );\n\n if (fs.existsSync(localPath)) return localPath;\n\n try {\n return execSync('which chromium').toString().trim();\n } catch {\n console.error('Chromium not found. Install with apt.');\n process.exit(1);\n }\n}\n\nexport function getFreePort(): Promise<number> {\n return new Promise((resolve, reject) => {\n freeport((err: Error | null, port: number | null) => {\n if (err || port === null) return reject(err);\n resolve(port);\n });\n });\n}\n\nexport function randomUserAgent(): string {\n const data = {\n platforms: [\"Windows NT 10.0; Win64; x64\", \"Macintosh; Intel Mac OS X 10_15_7\"],\n browsers: {\n chrome: [\"125.0.0.0\", \"124.0.0.0\"],\n firefox: [\"126.0\", \"125.0\"],\n edge: [\"125.0.2535.51\"],\n },\n };\n\n const randomItem = (arr: any[]) => arr[Math.floor(Math.random() * arr.length)];\n\n const os = randomItem(data.platforms);\n const browserKeys = Object.keys(data.browsers);\n const browserName = randomItem(browserKeys);\n const browserVersion = randomItem(data.browsers[browserName as keyof typeof data.browsers]);\n\n if (browserName === 'firefox') {\n return `Mozilla/5.0 (${os}; rv:${browserVersion}) Gecko/20100101 Firefox/${browserVersion}`;\n }\n\n if (browserName === 'edge') {\n const chromeVersion = randomItem(data.browsers.chrome);\n return `Mozilla/5.0 (${os}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${chromeVersion} Safari/537.36 Edg/${browserVersion}`;\n }\n\n return `Mozilla/5.0 (${os}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/${browserVersion} Safari/537.36`;\n}\n","import { getFreePort, resolveChromiumPath, randomUserAgent } from './global/set';\nimport puppeteer, { Browser, Page, Cookie } from 'puppeteer-core';\nimport { Server as ProxyChainServer } from 'proxy-chain';\nimport fs from 'fs';\nimport path from 'path';\n\nconst cookiesPath = path.resolve(process.cwd(), 'aternos-cookies.json');\n\nexport async function loginToAternos(user: string, pass: string): Promise<Cookie[]> {\n if (fs.existsSync(cookiesPath)) {\n try {\n const raw = fs.readFileSync(cookiesPath, 'utf8');\n if (raw.trim().length > 0) {\n const cookies: Cookie[] = JSON.parse(raw);\n return cookies;\n }\n } catch {\n console.warn('⚠️ Invalid or corrupted cookies file. Regenerating...');\n }\n }\n\n const port = await getFreePort();\n const proxyServer = new ProxyChainServer({ port });\n\n await proxyServer.listen(() => {\n console.log(`🧪 Proxy listening on 127.0.0.1:${port}`);\n });\n\n const browser: Browser = await puppeteer.launch({\n headless: true,\n executablePath: resolveChromiumPath(),\n args: [\n '--ignore-certificate-errors',\n '--disable-gpu',\n '--disable-software-rasterizer',\n '--disable-dev-shm-usage',\n '--no-sandbox',\n `--proxy-server=127.0.0.1:${port}`,\n ],\n });\n\n const page: Page = await browser.newPage();\n await page.setUserAgent(\n randomUserAgent()\n );\n\n await page.goto('https://aternos.org/go/', {\n waitUntil: 'domcontentloaded',\n timeout: 60000,\n });\n\n await page.type('input.username', user, { delay: 50 });\n await page.type('input.password', pass, { delay: 50 });\n await page.click('button.login-button');\n\n await new Promise(resolve => setTimeout(resolve, 5000));\n\n const cookies: Cookie[] = await page.cookies();\n fs.writeFileSync(cookiesPath, JSON.stringify(cookies, null, 2));\n\n await browser.close();\n await proxyServer.close(true);\n\n return cookies;\n}","import { getFreePort, resolveChromiumPath, randomUserAgent } from './global/set';\nimport puppeteer, { Browser, Page, Cookie } from 'puppeteer-core';\nimport { Server as ProxyChainServer } from 'proxy-chain';\n\ninterface ServerInfo {\n name: string | null;\n id: string | null;\n status: 'online' | 'offline' | 'unknown';\n software: string | null;\n players: string | null;\n}\n\ninterface ServerListResponse {\n servers: ServerInfo[];\n}\n\nexport async function getServerList(cookies: Cookie[]): Promise<ServerListResponse> {\n const port = await getFreePort();\n const proxyServer = new ProxyChainServer({ port });\n await proxyServer.listen(() => {});\n\n const browser: Browser = await puppeteer.launch({\n headless: true,\n executablePath: resolveChromiumPath(),\n args: [\n '--ignore-certificate-errors',\n '--disable-gpu',\n '--disable-software-rasterizer',\n '--disable-dev-shm-usage',\n '--no-sandbox',\n `--proxy-server=127.0.0.1:${port}`,\n ],\n });\n\n const page: Page = await browser.newPage();\n let servers: ServerInfo[] = [];\n\n try {\n await page.setUserAgent(\n randomUserAgent()\n );\n await page.setCookie(...cookies);\n await page.goto('https://aternos.org/servers/', {\n waitUntil: 'domcontentloaded',\n timeout: 60000,\n });\n\n if (page.url().includes('/go/')) {\n throw new Error('Authentication failed. Redirected back to login page.');\n }\n\n await page.waitForSelector('.servercard', { timeout: 20000 });\n\n servers = await page.evaluate(() => {\n const serverList: ServerInfo[] = [];\n const serverCards = document.querySelectorAll('.servercard');\n serverCards.forEach(card => {\n const serverName = card.querySelector('.server-name')?.textContent?.trim() || null;\n const serverId = card.querySelector('.server-id')?.textContent?.trim().replace('#', '') || null;\n const status = card.classList.contains('offline')\n ? 'offline'\n : card.classList.contains('online')\n ? 'online'\n : 'unknown';\n const software = card.querySelector('.server-software-name')?.textContent?.trim() || null;\n const players = card.querySelector('.statusplayerbadge')?.textContent?.trim() || null;\n serverList.push({ name: serverName, id: serverId, status, software, players });\n });\n return serverList;\n });\n\n } catch (error) {\n console.error(`❌ An error occurred during server list fetching:`, error);\n } finally {\n await browser.close();\n await proxyServer.close(true);\n }\n\n return { servers };\n}","import { getFreePort, resolveChromiumPath, randomUserAgent } from './global/set';\nimport puppeteer, { Browser, Page, Cookie } from 'puppeteer-core';\nimport { Server as ProxyChainServer } from 'proxy-chain';\n\ninterface DashboardInfo {\n shareUrl: string | null;\n address: string | null;\n port: string | null;\n software: string | null;\n version: string | null;\n players: string | null;\n ram: string | null;\n}\n\ninterface ActionResult {\n success: boolean;\n message: string;\n status?: string | null;\n timeRemaining?: string | null;\n}\n\ntype ServerTask = 'info' | 'start' | 'stop' | 'restart';\n\nexport async function manageServer(cookies: Cookie[], serverId: string, task: 'info'): Promise<DashboardInfo | null>;\nexport async function manageServer(cookies: Cookie[], serverId:string, task: 'start' | 'stop' | 'restart'): Promise<ActionResult>;\nexport async function manageServer(cookies: Cookie[], serverId: string, task: ServerTask): Promise<DashboardInfo | null | ActionResult> {\n if (!serverId) {\n return task === 'info' ? null : { success: false, message: 'Error: Server ID is required.' };\n }\n\n const maxAttempts = 3;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n let browser: Browser | null = null;\n let proxyServer: ProxyChainServer | null = null;\n \n try {\n const port = await getFreePort();\n proxyServer = new ProxyChainServer({ port });\n await proxyServer.listen(() => {});\n\n browser = await puppeteer.launch({\n headless: true,\n executablePath: resolveChromiumPath(),\n args: [\n '--ignore-certificate-errors',\n '--disable-gpu',\n '--disable-software-rasterizer',\n '--disable-dev-shm-usage',\n '--no-sandbox',\n `--proxy-server=127.0.0.1:${port}`,\n ],\n });\n\n const page: Page = await browser.newPage();\n\n await page.setUserAgent(\n randomUserAgent()\n );\n await page.setCookie(...cookies);\n await page.goto('https://aternos.org/servers/', {\n waitUntil: 'domcontentloaded',\n timeout: 60000,\n });\n\n const serverCardFound = await page.evaluate((id) => {\n const serverCards = document.querySelectorAll('.servercard');\n for (const card of serverCards) {\n const idElement = card.querySelector('.server-id');\n if (idElement && idElement.textContent?.trim().replace('#', '') === id) {\n (card as HTMLElement).click();\n return true;\n }\n }\n return false;\n }, serverId);\n\n if (!serverCardFound) {\n throw new Error(`Server with ID '${serverId}' not found on the page.`);\n }\n\n await new Promise(resolve => setTimeout(resolve, 3000));\n \n if (task === 'info') {\n const info = await page.evaluate(() => {\n const getText = (selector: string) => document.querySelector(selector)?.textContent?.trim() || null;\n return {\n shareUrl: getText('#share-url'),\n address: getText('#ip'),\n port: getText('#port'),\n software: getText('#software'),\n version: getText('#version'),\n players: getText('.js-players'),\n ram: getText('.js-ram')\n };\n });\n return info;\n } else {\n const currentStatus = await page.evaluate(() => document.querySelector('.statuslabel-label')?.textContent?.trim() || null);\n\n if (task === 'start') {\n if (currentStatus === 'Online') {\n const timeRemaining = await page.evaluate(() => document.querySelector('.server-end-countdown')?.textContent?.trim() || 'N/A');\n return { success: true, message: 'Server is already online.', status: 'Online', timeRemaining };\n }\n if (currentStatus !== 'Offline') {\n return { success: false, message: `Server is not offline. Current status: ${currentStatus}` };\n }\n }\n\n if ((task === 'stop' || task === 'restart') && currentStatus !== 'Online') {\n return { success: false, message: `Server is not online. Current status: ${currentStatus}` };\n }\n\n const selector = `#${task}`;\n await page.waitForSelector(selector, { visible: true, timeout: 10000 });\n await page.click(selector);\n\n if (task === 'start') {\n const keywords = ['yes', 'okay', 'accept', 'confirm', 'agree', 'continue', 'proceed', 'next', 'ok'];\n const clickDialogButton = async () => {\n try {\n await page.waitForFunction((kws) => {\n const buttons = document.querySelectorAll('.alert-buttons button.btn-success');\n for (const button of buttons) {\n const buttonText = button.textContent?.trim().toLowerCase() || '';\n if (kws.some(kw => buttonText.includes(kw))) {\n (button as HTMLElement).click();\n return true;\n }\n }\n return false;\n }, { timeout: 5000 }, keywords);\n } catch (e) {}\n };\n \n await clickDialogButton();\n await clickDialogButton();\n \n try {\n await page.waitForSelector('#confirm', { visible: true, timeout: 15000 });\n await page.click('#confirm');\n } catch(e) {}\n }\n\n if (task === 'start' || task === 'restart') {\n await page.waitForFunction(() => document.querySelector('.statuslabel-label')?.textContent?.trim() === 'Online', { timeout: 180000 });\n } else if (task === 'stop') {\n await page.waitForFunction(() => document.querySelector('.statuslabel-label')?.textContent?.trim() === 'Offline', { timeout: 60000 });\n }\n \n return { success: true, message: `Action '${task}' performed successfully.` };\n }\n } catch (error) {\n const errorMessage = (error as Error).message.toLowerCase();\n if (browser) await browser.close();\n if (proxyServer) await proxyServer.close(true);\n \n if ((errorMessage.includes('connection') || errorMessage.includes('target closed')) && attempt < maxAttempts) {\n console.error(`Attempt ${attempt} failed with connection error. Retrying...`);\n await new Promise(resolve => setTimeout(resolve, 2000));\n } else {\n console.error(`Failed to perform task '${task}' on server ${serverId}.`, error);\n return task === 'info' ? null : { success: false, message: (error as Error).message + \"Retry Rerun the console i think delay it\"};\n }\n } finally {\n if (browser && !browser.process()?.killed) await browser.close();\n if (proxyServer) await proxyServer.close(true);\n }\n }\n\n return task === 'info' ? null : { success: false, message: `Action failed after all ${maxAttempts} attempts.` + \"Retry Rerun the console i think delay it\"};\n}","import { getFreePort, resolveChromiumPath, randomUserAgent } from './global/set';\nimport puppeteer, { Browser, Page, Cookie } from 'puppeteer-core';\nimport { Server as ProxyChainServer } from 'proxy-chain';\nimport gradient from 'gradient-string';\n\nconst logGradients = [\n gradient('cyan', 'lightgreen'),\n gradient('orange', 'yellow'),\n gradient('#FF7E5F', '#FEB47B'),\n];\n\nexport async function viewConsoleLive(cookies: Cookie[], serverId: string): Promise<void> {\n if (!serverId) {\n console.error('Error: Server ID is required.');\n return;\n }\n\n let browser: Browser | null = null;\n let proxyServer: ProxyChainServer | null = null;\n\n try {\n const port = await getFreePort();\n proxyServer = new ProxyChainServer({ port });\n await proxyServer.listen(() => {});\n\n browser = await puppeteer.launch({\n headless: true,\n executablePath: resolveChromiumPath(),\n args: [\n '--ignore-certificate-errors',\n '--disable-gpu',\n '--disable-dev-shm-usage',\n '--no-sandbox',\n `--proxy-server=127.0.0.1:${port}`,\n ],\n });\n\n const page: Page = await browser.newPage();\n await page.setUserAgent(randomUserAgent());\n await page.setCookie(...cookies);\n\n await page.goto('https://aternos.org/servers/', {\n waitUntil: 'domcontentloaded',\n timeout: 60000,\n });\n\n const serverCardFound = await page.evaluate((id) => {\n const serverCards = document.querySelectorAll('.servercard');\n for (const card of serverCards) {\n const idElement = card.querySelector('.server-id');\n if (idElement && idElement.textContent?.trim().replace('#', '') === id) {\n (card as HTMLElement).click();\n return true;\n }\n }\n return false;\n }, serverId);\n\n if (!serverCardFound) {\n throw new Error(`Server with ID '${serverId}' not found on the page.`);\n }\n\n await new Promise(resolve => setTimeout(resolve, 3000));\n\n await page.goto('https://aternos.org/console/', {\n waitUntil: 'domcontentloaded',\n timeout: 60000,\n });\n\n await page.waitForSelector('#console', { timeout: 20000 });\n\n console.log(gradient.atlas.multiline('--- LIVE CONSOLE ---'));\n const seenLogs = new Set<string>();\n\n while (true) {\n const allLogs = await page.evaluate(() => \n Array.from(document.querySelectorAll('#console .line')).map(el => el.textContent || '')\n );\n\n const newLogs = allLogs.filter(log => !seenLogs.has(log));\n\n if (newLogs.length > 0) {\n for (const log of newLogs) {\n seenLogs.add(log);\n const cleanedLog = log.replace(/^\\[.*?\\]\\s*/, '');\n const randomGradient = logGradients[Math.floor(Math.random() * logGradients.length)]!;\n\n if(cleanedLog.trim()) {\n console.log(randomGradient(cleanedLog));\n }\n\n const connectMatch = /Player connected: (.*?),\\s*xuid:/.exec(log);\n if (connectMatch && connectMatch[1]) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n const playerName = connectMatch[1];\n const welcomeMessage = `/say \\u00A7bWelcome, \\u00A7e${playerName}\\u00A7b!`;\n await page.type('#c-input', welcomeMessage);\n await page.keyboard.press('Enter');\n }\n\n const disconnectMatch = /Player disconnected: (.*?),\\s*xuid:/.exec(log);\n if (disconnectMatch && disconnectMatch[1]) {\n await new Promise(resolve => setTimeout(resolve, 1000));\n const playerName = disconnectMatch[1];\n const goodbyeMessage = `/say \\u00A7cBye, ${playerName}!`;\n await page.type('#c-input', goodbyeMessage);\n await page.keyboard.press('Enter');\n }\n }\n }\n\n await new Promise(resolve => setTimeout(resolve, 2000));\n }\n\n } catch (error) {\n console.error(gradient.passion('An error occurred in the console viewer:'));\n if (error instanceof Error) {\n console.error(gradient.passion(error.message));\n } else {\n console.error(gradient.passion(String(error)));\n }\n } finally {\n if (browser) await browser.close();\n if (proxyServer) await proxyServer.close(true);\n console.log(gradient.atlas.multiline('--- CONSOLE CLOSED ---'));\n }\n}"],"mappings":"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","names":["path","fs","path","cookies","puppeteer","ProxyChainServer","puppeteer","ProxyChainServer","puppeteer","ProxyChainServer"]}