var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); // src/index.js var RATE_LIMIT_WINDOW_MS = 60 * 60 * 1e3; var RATE_LIMIT_MAX_UPLOADS = 20; var rateLimitMap = /* @__PURE__ */ new Map(); function isRateLimited(ip) { const now = Date.now(); let entry = rateLimitMap.get(ip); if (!entry || now - entry.start > RATE_LIMIT_WINDOW_MS) { entry = { start: now, count: 0 }; } entry.count++; rateLimitMap.set(ip, entry); return entry.count > RATE_LIMIT_MAX_UPLOADS; } __name(isRateLimited, "isRateLimited"); var index_default = { async fetch(request, env, ctx) { const url = new URL(request.url); if (url.pathname === "/" && request.method === "GET") { return new Response(renderUploadHtml(), { headers: { "Content-Type": "text/html; charset=utf-8" } }); } if (url.pathname === "/upload" && request.method === "POST") { return handleUpload(request, env); } if (url.pathname.startsWith("/d/") && request.method === "GET") { const id = url.pathname.split("/").pop(); return handleDownloadPage(id, env, request); } if (url.pathname.startsWith("/api/download/") && request.method === "POST") { const id = url.pathname.split("/").pop(); return handleProtectedDownload(id, env, request); } return new Response("Not found", { status: 404 }); } }; function renderUploadHtml() { return ` SNet Transfer

SNet Transfer

Grosse Dateien sicher teilen. Mehrere Dateien k\xF6nnen gleichzeitig hochgeladen werden. Die Dateien werden Ende-zu-Ende verschl\xFCsselt.

Hinweis: Links laufen nach der gew\xE4hlten Zeit ab. Dateien werden sp\xE4testens nach 30 Tagen physisch aus dem Speicher gel\xF6scht.

Swiss Made with