/** * Gitbook API Script * * Use this script to push documentation content to your Gitbook workspace * via the Gitbook API. */ const fs = require("fs"); const path = require("path"); const https = require("https"); const API_TOKEN = process.env.GITBOOK_API_TOKEN; const SPACE_ID = process.env.GITBOOK_SPACE_ID; const PAGES = [ { title: "Welcome to AeThex Documentation", slug: "overview", file: "01-overview.md", }, { title: "Getting Started", slug: "getting-started", file: "02-getting-started.md", }, { title: "Platform Guide", slug: "platform", file: "03-platform.md" }, { title: "API Reference", slug: "api-reference", file: "04-api-reference.md", }, { title: "Tutorials", slug: "tutorials", file: "05-tutorials.md" }, { title: "CLI Tools", slug: "cli", file: "06-cli.md" }, { title: "Code Examples", slug: "examples", file: "07-examples.md" }, { title: "Integrations", slug: "integrations", file: "08-integrations.md" }, { title: "Curriculum", slug: "curriculum", file: "09-curriculum.md" }, ]; async function makeRequest(method, path, body = null) { return new Promise((resolve, reject) => { const options = { hostname: "api.gitbook.com", port: 443, path: `/v1${path}`, method, headers: { Authorization: `Bearer ${API_TOKEN}`, "Content-Type": "application/json", "User-Agent": "AeThex-Docs-Migration", }, }; const req = https.request(options, (res) => { let data = ""; res.on("data", (chunk) => { data += chunk; }); res.on("end", () => { try { resolve({ status: res.statusCode, data: data ? JSON.parse(data) : null, headers: res.headers, }); } catch (error) { resolve({ status: res.statusCode, data, headers: res.headers }); } }); }); req.on("error", reject); if (body) req.write(JSON.stringify(body)); req.end(); }); } async function syncDocs() { console.log("šŸš€ Starting documentation sync to Gitbook...\n"); if (!API_TOKEN || !SPACE_ID) { console.error( "āŒ Missing environment variables: GITBOOK_API_TOKEN or GITBOOK_SPACE_ID", ); process.exit(1); } let successful = 0; let failed = 0; for (const page of PAGES) { try { const filePath = path.join(__dirname, page.file); if (!fs.existsSync(filePath)) { console.error(` āœ— File not found: ${page.file}`); failed++; continue; } const content = fs.readFileSync(filePath, "utf-8"); console.log(` Updating page: ${page.title}...`); const body = { title: page.title, description: `AeThex Documentation - ${page.title}`, }; const response = await makeRequest( "POST", `/spaces/${SPACE_ID}/pages`, body, ); if (response.status >= 200 && response.status < 300) { console.log(` āœ“ ${page.title} updated successfully`); successful++; } else { console.error(` āœ— Failed: ${response.status}`); failed++; } await new Promise((resolve) => setTimeout(resolve, 500)); } catch (error) { console.error(` āœ— Error: ${error.message}`); failed++; } } console.log( `\nāœ… Sync complete: ${successful} successful, ${failed} failed\n`, ); process.exit(failed > 0 ? 1 : 0); } const action = process.argv[2] || "sync"; if (action === "sync") syncDocs();