import { normalizeWebhookPath, type OpenClawConfig } from "openclaw/plugin-sdk/bluebubbles"; import type { ResolvedBlueBubblesAccount } from "./accounts.js"; import { getBlueBubblesRuntime } from "./runtime.js"; import type { BlueBubblesAccountConfig } from "./types.js"; export { normalizeWebhookPath }; export type BlueBubblesRuntimeEnv = { log?: (message: string) => void; error?: (message: string) => void; }; export type BlueBubblesMonitorOptions = { account: ResolvedBlueBubblesAccount; config: OpenClawConfig; runtime: BlueBubblesRuntimeEnv; abortSignal: AbortSignal; statusSink?: (patch: { lastInboundAt?: number; lastOutboundAt?: number }) => void; webhookPath?: string; }; export type BlueBubblesCoreRuntime = ReturnType; export type WebhookTarget = { account: ResolvedBlueBubblesAccount; config: OpenClawConfig; runtime: BlueBubblesRuntimeEnv; core: BlueBubblesCoreRuntime; path: string; statusSink?: (patch: { lastInboundAt?: number; lastOutboundAt?: number }) => void; }; export const DEFAULT_WEBHOOK_PATH = "/bluebubbles-webhook"; export function resolveWebhookPathFromConfig(config?: BlueBubblesAccountConfig): string { const raw = config?.webhookPath?.trim(); if (raw) { return normalizeWebhookPath(raw); } return DEFAULT_WEBHOOK_PATH; }