UNPKG

cloudku-uploader

Version:

Blazing-fast, zero-dependency uploader for CloudKu. Supports auto-conversion, chunked uploads, and TypeScript. Easily upload images, videos, audio, and documents via Node.js.

90 lines (73 loc) 2.64 kB
const cloudku = (() => { const BASE = [ 'https://cloudkuimages.guru', 'https://cloudkuimages-guru.us.itpanel.app' ] const HEADERS = { 'User-Agent': 'cloudku-uploader/5.0', 'Accept': 'application/json' } const pickBase = () => BASE[Math.floor(Math.random() * BASE.length)] const uploadSingle = async (buffer, name) => { const fd = new FormData() fd.append('file', new Blob([buffer]), name) const res = await fetch(pickBase() + '/upload.php', { method: 'POST', headers: HEADERS, body: fd }) return res.json() } const uploadChunked = async (buffer, name, chunkSize = 8 * 1024 * 1024) => { const totalChunks = Math.ceil(buffer.byteLength / chunkSize) const fileId = crypto.randomUUID() for (let i = 0; i < totalChunks; i++) { const start = i * chunkSize const end = Math.min(start + chunkSize, buffer.byteLength) const chunk = buffer.slice(start, end) const fd = new FormData() fd.append('file', new Blob([chunk]), name) fd.append('chunk', i) fd.append('chunks', totalChunks) fd.append('filename', name) fd.append('fileId', fileId) fd.append('size', buffer.byteLength) const res = await fetch(pickBase() + '/upload.php', { method: 'POST', headers: HEADERS, body: fd }) const json = await res.json() if (json.status === 'error') throw json } const finalize = await fetch( pickBase() + '/upload.php?chunked=1&finalize=1', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ fileId, filename: name, chunks: totalChunks }) } ) return finalize.json() } const uploadFile = async (buffer, name = 'file.bin') => { if (buffer.byteLength > 100 * 1024 * 1024) { return uploadChunked(buffer, name) } return uploadSingle(buffer, name) } const uploadBatch = async (files) => Promise.allSettled( files.map(f => uploadFile(f.buffer, f.name)) ) return { uploadFile, uploadLarge: uploadChunked, uploadBatch } })() export default cloudku