const fetch = require("node-fetch"); async function github(url) { const regex = /(?:https|git)(?::\/\/|@)github\.com[\/:]([^\/:]+)\/(.+)/i; const match = url.match(regex); if (!match) throw new Error("Invalid GitHub URL"); const user = match[1]; const repo = match[2].replace(/\.git$/, ""); const apiUrl = `https://api.github.com/repos/${user}/${repo}/zipball`; const head = await fetch(apiUrl, { method: "HEAD" }); if (!head.ok) throw new Error("Failed to fetch repository"); let disposition = head.headers.get("content-disposition"); let filename = "repository.zip"; if (disposition) { const m = disposition.match(/attachment; filename=(.*)/); if (m && m[1]) filename = m[1]; } return { user, repo, url: apiUrl, filename: filename }; } module.exports = { github };