105 lines
2.8 KiB
JavaScript
105 lines
2.8 KiB
JavaScript
#!/usr/bin/env node
|
|
import process from "node:process";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
import dotenv from "dotenv";
|
|
import { getReplyFromConfig } from "./auto-reply/reply.js";
|
|
import { applyTemplate } from "./auto-reply/templating.js";
|
|
import { createDefaultDeps } from "./cli/deps.js";
|
|
import { promptYesNo } from "./cli/prompt.js";
|
|
import { waitForever } from "./cli/wait.js";
|
|
import { loadConfig } from "./config/config.js";
|
|
import {
|
|
deriveSessionKey,
|
|
loadSessionStore,
|
|
resolveSessionKey,
|
|
resolveStorePath,
|
|
saveSessionStore,
|
|
} from "./config/sessions.js";
|
|
import { ensureBinary } from "./infra/binaries.js";
|
|
import { normalizeEnv } from "./infra/env.js";
|
|
import { isMainModule } from "./infra/is-main.js";
|
|
import { ensureClawdbotCliOnPath } from "./infra/path-env.js";
|
|
import {
|
|
describePortOwner,
|
|
ensurePortAvailable,
|
|
handlePortError,
|
|
PortInUseError,
|
|
} from "./infra/ports.js";
|
|
import { assertSupportedRuntime } from "./infra/runtime-guard.js";
|
|
import { enableConsoleCapture } from "./logging.js";
|
|
import { runCommandWithTimeout, runExec } from "./process/exec.js";
|
|
import { monitorWebProvider } from "./provider-web.js";
|
|
import { assertProvider, normalizeE164, toWhatsappJid } from "./utils.js";
|
|
|
|
dotenv.config({ quiet: true });
|
|
normalizeEnv();
|
|
ensureClawdbotCliOnPath();
|
|
|
|
// Capture all console output into structured logs while keeping stdout/stderr behavior.
|
|
enableConsoleCapture();
|
|
|
|
// Enforce the minimum supported runtime before doing any work.
|
|
assertSupportedRuntime();
|
|
|
|
import { buildProgram } from "./cli/program.js";
|
|
|
|
const program = buildProgram();
|
|
|
|
export {
|
|
assertProvider,
|
|
applyTemplate,
|
|
createDefaultDeps,
|
|
deriveSessionKey,
|
|
describePortOwner,
|
|
ensureBinary,
|
|
ensurePortAvailable,
|
|
getReplyFromConfig,
|
|
handlePortError,
|
|
loadConfig,
|
|
loadSessionStore,
|
|
monitorWebProvider,
|
|
normalizeE164,
|
|
PortInUseError,
|
|
promptYesNo,
|
|
resolveSessionKey,
|
|
resolveStorePath,
|
|
runCommandWithTimeout,
|
|
runExec,
|
|
saveSessionStore,
|
|
toWhatsappJid,
|
|
waitForever,
|
|
};
|
|
|
|
const isMain = isMainModule({
|
|
currentFile: fileURLToPath(import.meta.url),
|
|
});
|
|
|
|
if (isMain) {
|
|
// Global error handlers to prevent silent crashes from unhandled rejections/exceptions.
|
|
// These log the error and exit gracefully instead of crashing without trace.
|
|
process.on("unhandledRejection", (reason, _promise) => {
|
|
console.error(
|
|
"[clawdbot] Unhandled promise rejection:",
|
|
reason instanceof Error ? (reason.stack ?? reason.message) : reason,
|
|
);
|
|
process.exit(1);
|
|
});
|
|
|
|
process.on("uncaughtException", (error) => {
|
|
console.error(
|
|
"[clawdbot] Uncaught exception:",
|
|
error.stack ?? error.message,
|
|
);
|
|
process.exit(1);
|
|
});
|
|
|
|
void program.parseAsync(process.argv).catch((err) => {
|
|
console.error(
|
|
"[clawdbot] CLI failed:",
|
|
err instanceof Error ? (err.stack ?? err.message) : err,
|
|
);
|
|
process.exit(1);
|
|
});
|
|
}
|