// import { getValidAuthToken } from "../../src/lib/seafile-auth-service"; // type CdnItem = { // name: string; // path: string; // cdnUrl: string; // }; // type DirItem = { // type: "file" | "dir"; // name: string; // }; // const BASE_URL = process.env.SEAFILE_BASE_URL!; // const REPO_ID = process.env.SEAFILE_REPO_ID!; // // folder yang dishare (RELATIVE, tanpa slash depan) // const DIR_TARGET = "asset-web"; // // 🔑 TOKEN DIRECTORY SHARE (/d/{token}) // const PUBLIC_SHARE_TOKEN = process.env.SEAFILE_PUBLIC_SHARE_TOKEN!; // /** // * Ambil list file dari repo (butuh token sekali) // */ // async function getDirItems(): Promise { // const token = await getValidAuthToken(); // // Validasi bahwa semua variabel lingkungan telah diatur // if (!BASE_URL) { // throw new Error('SEAFILE_BASE_URL environment variable is not set'); // } // if (!REPO_ID) { // throw new Error('SEAFILE_REPO_ID environment variable is not set'); // } // // Bangun URL dan pastikan valid // const url = `${BASE_URL}/api2/repos/${REPO_ID}/dir/?p=/${DIR_TARGET}`; // try { // new URL(url); // Ini akan melempar error jika URL tidak valid // } catch (error) { // throw new Error(`Invalid URL constructed: ${url}. Error: ${error}`); // } // const res = await fetch(url, { // headers: { // Authorization: `Token ${token}`, // }, // }); // if (!res.ok) { // const text = await res.text(); // throw new Error(`Failed get dir items: ${text}`); // } // return res.json(); // } // /** // * Build PUBLIC CDN URL // */ // function buildPublicCdnUrl(fileName: string) { // return `${BASE_URL}/d/${PUBLIC_SHARE_TOKEN}/files/?p=${encodeURIComponent( // fileName, // )}&raw=1`; // } // /** // * Ambil semua PUBLIC CDN URL // */ // export async function getAllPublicCdnUrls(): Promise { // const items = await getDirItems(); // return items // .filter((item) => item.type === "file") // .map((file) => { // const path = `${DIR_TARGET}/${file.name}`; // return { // name: file.name, // path, // cdnUrl: buildPublicCdnUrl(file.name), // }; // }); // } // /** // * Run langsung (optional) // */ // if (import.meta.main) { // const data = await getAllPublicCdnUrls(); // console.log(data); // } import { getValidAuthToken } from "../../src/lib/seafile-auth-service"; type CdnItem = { name: string; path: string; cdnUrl: string; }; type DirItem = { type: "file" | "dir"; name: string; }; // ✅ PAKAI ENV YANG BENAR const BASE_URL = process.env.SEAFILE_URL!; const REPO_ID = process.env.SEAFILE_REPO_ID!; const PUBLIC_SHARE_TOKEN = process.env.SEAFILE_PUBLIC_SHARE_TOKEN!; // folder yang dishare (RELATIVE, TANPA slash depan) const DIR_TARGET = "asset-web"; /** * Ambil list file dari repo (token dipakai SEKALI) */ async function getDirItems(): Promise { if (!BASE_URL || !REPO_ID) { throw new Error("SEAFILE env not configured correctly"); } const token = await getValidAuthToken(); const url = `${BASE_URL}/api2/repos/${REPO_ID}/dir/?p=/${DIR_TARGET}`; const res = await fetch(url, { headers: { Authorization: `Token ${token}`, }, }); if (!res.ok) { const text = await res.text(); throw new Error(`Failed get dir items: ${text}`); } return res.json(); } /** * Build PUBLIC CDN URL (DIRECTORY SHARE) */ function buildPublicCdnUrl(fileName: string) { const fullPath = `/${DIR_TARGET}/${fileName}`; return `${BASE_URL}/d/${PUBLIC_SHARE_TOKEN}/files/?p=${encodeURIComponent( fullPath, )}&raw=1`; } /** * Ambil semua PUBLIC CDN URL */ export async function getAllPublicCdnUrls(): Promise { const items = await getDirItems(); return items .filter((item) => item.type === "file") .map((file) => ({ name: file.name, path: `${DIR_TARGET}/${file.name}`, cdnUrl: buildPublicCdnUrl(file.name), })); } /** * Run langsung */ if (import.meta.main) { const data = await getAllPublicCdnUrls(); console.log(data); }