const os = require('os'); const fs = require('fs'); const path = require('path'); const { chromium } = require('playwright'); const sharp = require('sharp'); const DIR = process.env.CARDS_PATH || '../cards'; async function genCards({ id, type }) { if (!process.env.DOMAIN) throw new Error("❌ DOMAIN не заданий у .env"); if (!process.env.ADMIN_TOKEN) throw new Error("❌ ADMIN_TOKEN не заданий у .env"); if (!process.env.CARDS_PATH) throw new Error("❌ CARDS_PATH не заданий у .env"); const name = type == 'homestead' ? `H${id}` : `T${id}` const URL = `https://${process.env.DOMAIN}/api/${type}/${id}`; // Замени на свой URL const AUTH_TOKEN = process.env.ADMIN_TOKEN; const DIR = process.env.CARDS_PATH || '../cards'; const SCREENSHOT_FILE = path.resolve(`${DIR}/cache/${type}/${name}.png`); const OUTPUT_FILE = path.resolve(`${DIR}/${type}/${name}.webp`); // --- Отримуємо дані --- const res = await fetch(URL, { headers: { 'Authorization': AUTH_TOKEN, 'Accept': 'application/json' } }); if (!res.ok) throw new Error(`Помилка запиту: ${res.status}`); const data = await res.json(); // --- Генеруємо HTML --- const html = `

Картка плану території

`; // --- Зберігаємо тимчасовий HTML --- const tmpFile = path.join(os.tmpdir(), 'map.html'); fs.writeFileSync(tmpFile, html, 'utf-8'); // --- Зберігаємо --- // const browser = await chromium.launch(); const browser = await chromium.launch({ executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium-browser', args: ['--no-sandbox', '--disable-setuid-sandbox'] }); const page = await browser.newPage({ viewport: { width: 811, height: 531 } }); await page.goto(`file://${tmpFile}`); await page.waitForTimeout(2000); // пауза 1 секунда для провантаження карти await page.screenshot({ path: SCREENSHOT_FILE }); await browser.close(); await sharp(SCREENSHOT_FILE) .webp() .toFile(OUTPUT_FILE); console.log(`Зображеня збережене: ${name}.png`); // return fs.existsSync(OUTPUT_FILE); } module.exports = genCards;