import { type NotificationPlan } from './planner.js'; import type { NotificationDomainDelivery } from './domain-delivery.js'; import { sendHarmonyPush } from './harmony-push.js'; export declare class NotificationService { private readonly options; private timer; private draining; private drainAgain; private lastMaintenanceAt; constructor(options: { publish: (type: string, payload: unknown) => void; fetch?: typeof fetch; domainDelivery?: NotificationDomainDelivery; allowsNotification?: (notification: NotificationPlan['notification']) => boolean; sendHarmony?: typeof sendHarmonyPush; }); start(): void; stop(): void; handleGatewayEvent(type: string, payload: unknown): void; /** Throws on persistence failure so durable producers can retry the handoff. */ persistGatewayEvent(type: string, payload: unknown): { schemaVersion: 1; id: string; type: "work_discovery.completed" | "work_discovery.failed" | "scene.result" | "scene.digest" | "chat.completed" | "chat.failed" | "task.needs_input" | "task.blocked" | "task.failed" | "task.completed" | "automation.completed" | "automation.failed" | "home.opportunity"; priority: "normal" | "high"; title: { en: string; zh: string; }; payload: Record; createdAt: number; target?: { kind: "scene_result"; activationId: string; presentationId: string; } | { kind: "scene_digest"; digestId: string; } | { kind: "chat"; conversationId: string; } | { kind: "task"; taskId: string; } | { kind: "home"; } | { kind: "automation_run"; automationId: string; runId: string; } | { kind: "work_discovery"; runId: string; conversationId: string; }; body?: { en: string; zh: string; }; }; persistPlan(plan: NotificationPlan): { schemaVersion: 1; id: string; type: "work_discovery.completed" | "work_discovery.failed" | "scene.result" | "scene.digest" | "chat.completed" | "chat.failed" | "task.needs_input" | "task.blocked" | "task.failed" | "task.completed" | "automation.completed" | "automation.failed" | "home.opportunity"; priority: "normal" | "high"; title: { en: string; zh: string; }; payload: Record; createdAt: number; target?: { kind: "scene_result"; activationId: string; presentationId: string; } | { kind: "scene_digest"; digestId: string; } | { kind: "chat"; conversationId: string; } | { kind: "task"; taskId: string; } | { kind: "home"; } | { kind: "automation_run"; automationId: string; runId: string; } | { kind: "work_discovery"; runId: string; conversationId: string; }; body?: { en: string; zh: string; }; }; drain(): Promise; private deliverPending; private send; private retryOrFail; }