Wire GoogleTokenStore and DeviceFlowClient into main

This commit is contained in:
EugeneTes
2026-09-23 10:29:43 +00:00
parent f3c4025b38
commit ee38bd02d5

View File

@@ -10,7 +10,9 @@ import { JobStore } from "./scheduler/store.js";
import { createOpenAiTranscriber } from "./stt/openai.js";
import { BOT_COMMANDS, formatStatus, registerBridge } from "./telegram/bridge.js";
import { Outbound } from "./telegram/outbound.js";
import { createDeviceFlowClient, type DeviceFlowClient } from "./telegram/google-device-flow.js";
import { createCalendarTool } from "./tools/calendar.js";
import { createGoogleTokenStore, type GoogleTokenStore } from "./tools/google-token-store.js";
import { createPlaywrightMcpBridge } from "./agent/playwright-mcp.js";
import { createScheduleTool } from "./tools/schedule.js";
import { createSendTool } from "./tools/send.js";
@@ -83,11 +85,30 @@ async function main(): Promise<void> {
chatId: config.telegramOwnerId,
workspaceDir: config.workspaceDir,
}));
let deviceFlow: DeviceFlowClient | null = null;
let tokenStore: GoogleTokenStore | null = null;
if (config.google) {
customTools.push(createCalendarTool(config.google, config.timezone));
tokenStore = createGoogleTokenStore(config.workspaceDir);
if (config.google.refreshToken && tokenStore.read() === null) {
tokenStore.write(config.google.refreshToken);
logger.warn(
"GOOGLE_REFRESH_TOKEN env var seeded into workspace/.secretary/google-token.json. " +
"You can remove GOOGLE_REFRESH_TOKEN from .env now — future updates come through /connect_calendar.",
);
}
customTools.push(createCalendarTool({
clientId: config.google.clientId,
clientSecret: config.google.clientSecret,
tokenStore,
timezone: config.timezone,
}));
logger.info("calendar tool enabled");
deviceFlow = createDeviceFlowClient({
clientId: config.google.clientId,
clientSecret: config.google.clientSecret,
});
} else {
logger.info("calendar tool disabled (set GOOGLE_CLIENT_ID/SECRET/REFRESH_TOKEN to enable)");
logger.info("calendar tool disabled (set GOOGLE_CLIENT_ID/SECRET to enable)");
}
let playwrightDispose: (() => Promise<void>) | undefined;
@@ -125,7 +146,7 @@ async function main(): Promise<void> {
: undefined;
if (!transcriber) logger.warn("OPENAI_API_KEY not set, voice messages will not be transcribed");
registerBridge({ bot, config, host, scheduler, outbound, transcriber, logger });
registerBridge({ bot, config, host, scheduler, outbound, transcriber, logger, deviceFlow, tokenStore });
await bot.api.setMyCommands(BOT_COMMANDS);
await scheduler.start();
logger.info(`scheduler ready with ${scheduler.list().length} job(s)`);