import { existsSync, readFileSync } from "node:fs"; import { resolve } from "node:path"; import { runGoogleSearchProbe, searchProviderStatus } from "../server/research-tools.mjs"; loadDotEnv(resolve(process.cwd(), ".env")); const query = process.argv.slice(2).join(" ").trim() || "site:realtor.ca Toronto rentals apartment"; const status = searchProviderStatus(); console.log( JSON.stringify( { provider: status.provider, requested: status.requested, googleConfigured: status.google.configured, googleMissing: status.google.missing, }, null, 2, ), ); const probe = await runGoogleSearchProbe(query); console.log( JSON.stringify( { ok: probe.ok, provider: probe.provider, query: probe.query, resultCount: probe.results.length, error: probe.error, results: probe.results.slice(0, 5).map((result) => ({ title: result.title, url: result.url, snippet: result.snippet, })), }, null, 2, ), ); if (!probe.ok) process.exitCode = 1; function loadDotEnv(filePath) { if (!existsSync(filePath)) return; const content = readFileSync(filePath, "utf8"); for (const line of content.split(/\r?\n/)) { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith("#")) continue; const match = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/); if (!match) continue; const [, key, rawValue] = match; if (process.env[key] !== undefined) continue; process.env[key] = stripQuotes(rawValue.trim()); } } function stripQuotes(value) { if ( (value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'")) ) { return value.slice(1, -1); } return value; }