Node.js (fetch — No Dependencies)
For Node.js 18+ using the built-in fetch API:
/**
* HOW TO RUN:
* 1. Save this file as `test-trust-sse-js.js` (standard CommonJS).
* 2. Run the following command in your terminal:
* node test-trust-sse-js.js
*/
const API_BASE_URL = "https://trust-sse.oten.com";
const API_KEY = "ot_live_-d5Il4kuuv..."; // Replace with your actual API Key
const URL_TO_SCAN = "https://google.com";
/**
* Scans a URL using Server-Sent Events (SSE) via Fetch API
* @param {string} url - The target URL to scan
* @param {string} lang - Language for the response (default: "en")
*/
async function scanUrl(url, lang = "en") {
const endpoint = new URL('/api/v1/scan-url', API_BASE_URL);
endpoint.searchParams.set('url', url);
endpoint.searchParams.set('lang', lang);
try {
// Node.js 18+ has native fetch built-in
const response = await fetch(endpoint.toString(), {
method: 'GET',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Accept': 'text/event-stream',
},
});
if (!response.ok) {
console.error(`[Error] Status: ${response.status} ${response.statusText}`);
const errorText = await response.text();
console.error("[Detail]:", errorText);
return;
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
let currentEvent = null;
console.log(">>> Connected to Stream (CommonJS Mode)\n");
while (true) {
const { value, done } = await reader.read();
if (done) break;
const chunk = decoder.decode(value);
const lines = chunk.split('\n');
for (const line of lines) {
const trimmedLine = line.trim();
if (!trimmedLine) continue;
if (trimmedLine.startsWith('event:')) {
currentEvent = trimmedLine.replace('event:', '').trim();
continue;
}
if (trimmedLine.startsWith('data:')) {
const rawData = trimmedLine.replace('data:', '').trim();
switch (currentEvent) {
case 'progress':
console.log("[progress]", rawData);
break;
case 'heartbeat':
console.log("[heartbeat] ❤️");
break;
case 'result':
try {
const parsed = JSON.parse(rawData);
console.log("\n✅ [RESULT]:", JSON.stringify(parsed, null, 2));
} catch {
console.log("\n✅ [RESULT raw]:", rawData);
}
break;
case 'error':
console.error("❌ [event error]:", rawData);
break;
default:
console.log(`[${currentEvent || 'message'}]`, rawData);
}
currentEvent = null;
}
}
}
console.log("\n>>> Stream Closed");
} catch (err) {
console.error("!!! Execution Error:", err);
}
}
// Execute the function
scanUrl(URL_TO_SCAN);Last updated