const express = require('express'); const multer = require('multer'); const { Storage, File } = require('megajs'); const fs = require('fs'); require('dotenv').config(); const app = express(); const port = process.env.PORT || 7860; // Setup penyimpanan sementara untuk upload transit const upload = multer({ dest: '/tmp/' }); app.use(express.json()); let megaStorage; // Variabel tracker statis sederhana (akan ter-reset jika space restart/tidur) let totalFiles = 0; let totalBytes = 0; let totalDownloads = 0; // Fungsi format ukuran biner function formatBytes(bytes, decimals = 2) { if (!bytes) return '0 B'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['B', 'KB', 'MB', 'GB', 'TB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } async function connectStorage() { return new Promise((resolve, reject) => { const email = process.env.MEGA_EMAIL; const password = process.env.MEGA_PASSWORD; if (!email || !password) { console.error("ERROR: Variabel lingkungan kredensial belum diatur!"); return reject("Kredensial kosong"); } const storage = new Storage({ email: email, password: password, keepalive: true }, (err) => { if (err) return reject(err); console.log('✓ Sistem backend CDN siap dan terhubung!'); resolve(storage); }); }); } connectStorage().then(storage => { megaStorage = storage; }).catch(err => { console.error('⚠️ Gagal menginisialisasi storage:', err); }); // Endpoint 1: Frontend Dashboard Utama (Tema Putih Bersih Premium) app.get('/', (req, res) => { const hostUrl = `${req.protocol}://${req.get('host')}`; res.send(` CDN FAREL - Secure CDN Gateway

CDN FAREL

Secure CDN Gateway

Unggah Berkas, Dapatkan Direct Link

Sistem direct link CDN mandiri berkecepatan tinggi dengan enkripsi awan ganda yang aman dan global.

${totalFiles}

Total File Aktif

Seluruh file yang tersimpan di CDN

${formatBytes(totalBytes)}

Kapasitas Terpakai

Total kapasitas cloud terpakai

${totalDownloads}

Total Pengunduhan

File dikonsumsi via link CDN

1

Node Storage Cluster

Penyimpanan cloud node terenkripsi aktif

Unggah Berkas ke CDN Farel

Dapatkan direct link, embedding, dan direct download berkecepatan tinggi instan dengan mengunggah berkas ke gateway kami.

Seret & taruh berkas di sini, atau pilih manual

Semua format file didukung (Maks 100 MB)

Pilih atau seret berkas ke dropzone untuk mempersiapkan pratinjau dan mengaktifkan tautan CDN.

Sedang memproses berkas... Harap tunggu...

🎉 Berkas Berhasil Diproses!

Nama Berkas:

Link CDN Anda:

Manfaat & Kelebihan CDN FAREL

Infrastruktur andal yang dioptimalkan untuk performa pengiriman aset digital terbaik.

Direct Streaming Link

Dapatkan link bersih langsung tanpa halaman pengalihan, iklan, atau timer. Sempurna untuk disematkan langsung pada HTML, Markdown, stylesheet, atau tag media web.

Bebas Hambatan CORS

Mendukung kebijakan penuh Cross-Origin Resource Sharing (CORS). Integrasikan aset seperti gambar kustom, font kustom, atau file JSON dari domain manapun secara mulus.

Penyimpanan MEGA Aman

Semua aset diunggah langsung dan disimpan ke dalam penyimpanan awan MEGA terenkripsi yang aman untuk menjamin ketersediaan data Anda tetap utuh, aman, dan dapat diakses terus.

MIME Type yang Tepat

Deteksi tipe konten otomatis secara cerdas. Server menyajikan berkas dengan header Content-Type yang akurat agar dapat di-render atau diputar langsung di browser.

Kapasitas Besar 100MB

Kirim berkas media berukuran besar seperti video klip, track musik berkualitas tinggi, dokumen PDF tebal, hingga kompresi zip tanpa takut batasan ukuran yang kecil.

Arsip Selamanya (Persistent)

Berkas tidak memiliki batas kedaluwarsa waktu. File Anda tetap tersimpan utuh di gateway awan tanpa kekhawatiran akan terhapus otomatis setelah beberapa hari.

POST multipart/form-data
/api/upload
Gunakan endpoint pengunggahan file dari CDN FAREL untuk mengotomatiskan proses upload file langsung dari aplikasi, skrip backend, website, atau bot Anda. Kirim berkas Anda pada parameter body bernama file. Respon akan mengembalikan URL streaming langsung secara instan.
curl -X POST "${hostUrl}/api/upload" \\\n  -F "file=@/path/to/your/file.png"
CORS ENABLED
`); }); // Endpoint 2: API Proses Upload File (Update data stat secara real-time) app.post('/api/upload', upload.single('file'), async (req, res) => { if (!megaStorage) return res.status(503).json({ error: 'Storage backend belum siap' }); if (!req.file) return res.status(400).json({ error: 'Tidak ada file yang dikirim' }); try { const filePath = req.file.path; const fileName = req.file.originalname; const fileSize = req.file.size; const fileStream = fs.createReadStream(filePath); // Upload berkas ke cloud storage MEGA const megaFile = await megaStorage.upload({ name: fileName, size: fileSize }, fileStream).complete; // Dapatkan tautan cloud publik internal const downloadLink = await megaFile.link(); // Hapus file transit di lokal (/tmp/) fs.unlinkSync(filePath); // Ubah '#' menjadi '-' agar aman dilewati via URL Express Gateway const fileId = downloadLink.split('/file/')[1].replace('#', '-'); // Tambah counter statistik internal server totalFiles += 1; totalBytes += fileSize; res.json({ success: true, fileName: fileName, cdnLink: `${req.protocol}://${req.get('host')}/cdn/${fileId}`, stats: { files: totalFiles, formattedBytes: formatBytes(totalBytes) } }); } catch (error) { console.error(error); res.status(500).json({ error: 'Gagal memproses penyimpanan: ' + error.message }); } }); // Endpoint 3: Proxy CDN Gateway (Streaming Data Langsung + Dukungan CORS) app.get('/cdn/:fileIdAndKey', async (req, res) => { try { const fullId = req.params.fileIdAndKey; // Kembalikan karakter '-' menjadi '#' untuk menyusun URL asli MEGA const correctedId = fullId.replace('-', '#'); const targetUrl = `https://mega.nz/file/${correctedId}`; const file = File.fromURL(targetUrl); await file.loadAttributes(); // Dukungan Penuh Kebijakan CORS res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, HEAD, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); // Atur header disposisi agar browser langsung memutar/merender inline aset res.setHeader('Content-Disposition', `inline; filename="${file.name}"`); // Tambah hit counter unduhan totalDownloads += 1; // Alirkan data secara streaming waktu nyata ke pengguna luar const stream = file.download(); stream.pipe(res); } catch (error) { console.error(error); res.status(404).send('Berkas tidak ditemukan atau tautan CDN salah.'); } }); app.listen(port, () => { console.log(`Server CDN Farel berjalan aktif pada port ${port}`); });