import type { EventBus, EventSource } from "@voyant-travel/core"; export declare const CUSTOMER_SIGNAL_CREATED_EVENT: "customer.signal.created"; export type CustomerSignalCreatedIntake = { surface: "storefront"; type: "lead"; } | { surface: "storefront"; type: "newsletter"; doubleOptIn: "not_configured" | "requested"; }; export interface CustomerSignalCreatedEvent { id: string; personId: string; kind: "wishlist" | "notify" | "inquiry" | "request_offer" | "referral"; source: "form" | "phone" | "admin" | "abandoned_cart" | "website" | "booking"; status: "new" | "contacted" | "qualified" | "converted" | "lost" | "expired"; productId?: string | null; optionUnitId?: string | null; sourceSubmissionId?: string | null; intake?: CustomerSignalCreatedIntake; } export declare function emitCustomerSignalCreated(eventBus: EventBus | undefined, payload: CustomerSignalCreatedEvent, source?: EventSource): Promise; export declare const PERSON_CHANGED_EVENT: "person.changed"; export declare const ORGANIZATION_CHANGED_EVENT: "organization.changed"; /** Which lifecycle transition produced a `*.changed` event. */ export type RelationshipChangeAction = "created" | "updated" | "deleted"; export interface PersonChangedEvent { id: string; action: RelationshipChangeAction; } export interface OrganizationChangedEvent { id: string; action: RelationshipChangeAction; } /** * Emit `person.changed` after a person create/update/delete so observers * (e.g. a realtime bridge) can refresh CRM views without polling. * Fire-and-forget: a missing bus is a no-op and emission never blocks. */ export declare function emitPersonChanged(eventBus: EventBus | undefined, payload: PersonChangedEvent, source?: EventSource): Promise; /** Emit `organization.changed` after an organization create/update/delete. */ export declare function emitOrganizationChanged(eventBus: EventBus | undefined, payload: OrganizationChangedEvent, source?: EventSource): Promise;