// Phase 2: API Reconnaissance - Compare Ghaymah vs Cumin endpoints const fs = require("fs"); const CUMIN_TOKEN = "cumin_GjynCIFJtyoZ_73wasCoWNYf7Y-Pk0jMffHEdRzblBg"; const PROJECT_ID = "178bfad9-5edc-409f-833c-6fffca7aed5a"; // Test both the Cumin API and Ghaymah deploy endpoint const ENDPOINTS = [ { name: "Cumin API", base: "https://api.cumin.dev" }, { name: "Ghaymah Deploy", base: "https://deploy.ghaymah.systems" }, { name: "Ghaymah API", base: "https://api.ghaymah.systems" }, ]; const log = []; function logEntry(msg) { const ts = new Date().toISOString(); const entry = `[${ts}] ${msg}`; console.log(entry); log.push(entry); } async function probeEndpoint(name, url, opts = {}) { try { const res = await fetch(url, { signal: AbortSignal.timeout(8000), ...opts }); const contentType = res.headers.get("content-type") || "unknown"; let body = ""; try { body = await res.text(); } catch {} const snippet = body.substring(0, 500); logEntry(`${name} → ${url} → Status: ${res.status} | Content-Type: ${contentType} | Body[0:500]: ${snippet}`); return { status: res.status, contentType, body: snippet }; } catch (e) { logEntry(`${name} → ${url} → ERROR: ${e.message}`); return { status: "error", error: e.message }; } } async function mcpProbe(base) { const headers = { Authorization: `Bearer ${CUMIN_TOKEN}`, "Content-Type": "application/json", Accept: "application/json, text/event-stream" }; logEntry(`--- MCP Probe on ${base}/mcp ---`); const initBody = { jsonrpc: "2.0", method: "initialize", id: 1, params: { protocolVersion: "2024-11-05", capabilities: {}, clientInfo: { name: "ghaymah-recon", version: "1.0" } } }; try { const res = await fetch(`${base}/mcp`, { method: "POST", headers, body: JSON.stringify(initBody), signal: AbortSignal.timeout(10000) }); const sid = res.headers.get("Mcp-Session-Id"); const data = await res.json(); logEntry(`MCP Init → Status: ${res.status} | Session: ${sid} | Response: ${JSON.stringify(data).substring(0, 300)}`); if (sid) { // List available tools headers["Mcp-Session-Id"] = sid; const toolsRes = await fetch(`${base}/mcp`, { method: "POST", headers, body: JSON.stringify({ jsonrpc: "2.0", method: "tools/list", id: 2, params: {} }), signal: AbortSignal.timeout(10000) }); const toolsData = await toolsRes.json(); const toolNames = toolsData.result?.tools?.map(t => t.name) || []; logEntry(`MCP Tools Available (${toolNames.length}): ${JSON.stringify(toolNames)}`); // List apps const appsRes = await fetch(`${base}/mcp`, { method: "POST", headers, body: JSON.stringify({ jsonrpc: "2.0", method: "tools/call", id: 3, params: { name: "list_apps", arguments: { project_id: PROJECT_ID } } }), signal: AbortSignal.timeout(10000) }); const appsData = await appsRes.json(); const appsText = appsData.result?.content?.[0]?.text || JSON.stringify(appsData); logEntry(`MCP list_apps → ${appsText.substring(0, 500)}`); return { sid, toolNames }; } } catch (e) { logEntry(`MCP Probe ERROR: ${e.message}`); } return null; } async function main() { logEntry("=== GHAYMAH DNS/NET SECURITY TEST - PHASE 2: API RECONNAISSANCE ==="); // 1. Probe basic endpoints for (const ep of ENDPOINTS) { await probeEndpoint(ep.name, ep.base); await probeEndpoint(ep.name, `${ep.base}/health`); await probeEndpoint(ep.name, `${ep.base}/api`); } // 2. Probe Cumin-style REST endpoints on ghaymah logEntry("\n--- Probing Ghaymah for Cumin-compatible REST endpoints ---"); const ghaymahApiCandidates = [ "https://api.ghaymah.systems/policy/network", "https://deploy.ghaymah.systems/api/apps", "https://deploy.ghaymah.systems/api/projects", "https://api.ghaymah.systems/mcp", ]; for (const url of ghaymahApiCandidates) { await probeEndpoint("Ghaymah REST", url, { headers: { Authorization: `Bearer ${CUMIN_TOKEN}` } }); } // 3. MCP protocol probe on Cumin (baseline) const cuminMcp = await mcpProbe("https://api.cumin.dev"); // 4. Try MCP on Ghaymah const ghaymahMcp = await mcpProbe("https://api.ghaymah.systems"); // 5. Check network policy logEntry("\n--- Network Policy Probe ---"); const policyRes = await probeEndpoint("Cumin Policy", "https://api.cumin.dev/policy/network", { headers: { Authorization: `Bearer ${CUMIN_TOKEN}` } }); logEntry("\n=== RECONNAISSANCE COMPLETE ==="); // Write log fs.writeFileSync("d:/cumin/ghaymah_dns_net_sec_tests/logs/01_api_recon.log", log.join("\n")); console.log("\nLog written to logs/01_api_recon.log"); } main().catch(e => { logEntry(`FATAL: ${e.message}`); process.exit(1); });