export interface TicketEngagementFile { id: string; name: string | null; url: string | null; mime: string | null; size: number | null; } export interface TicketEngagement { id: string; body: string | null; authorId: string | null; /** Whether this engagement is customer-authored (Custom Channels * Messages — INCOMING direction) or team-authored (Notes + future * OUTGOING messages). Drives avatar variant + the "Customer"/"Support * team" header label in the drawer's conversation thread. */ authorRole: 'customer' | 'support'; /** Display name. Server resolves it differently per role: * - `support` (Notes) → HubSpot owner id is resolved to an owner * email, then matched against our `profiles` table; the matched * employee's `full_name` is returned here. Null when the owner * isn't a known Flamingo employee. * - `customer` (Conversations messages) → null on new messages * (drawer renders identity.user.name LIVE for the current * user's own messages). Set only on legacy rows from earlier * migrations. */ authorName: string | null; /** Resolved author email — for `support` it's the HubSpot owner's * email; for `customer` it's the message sender. Used by the * drawer to cross-check "is this me?" against `identity.user.email`. */ authorEmail: string | null; /** Avatar URL. For `support`, resolved from the matched `profiles` * row's `avatar_url`. Null when the owner isn't a known Flamingo * employee. For `customer`, always null on the wire (drawer reads * identity.user.avatarUrl live for own messages). */ authorAvatarUrl: string | null; createdAt: string; attachments: TicketEngagementFile[]; } export interface UseTicketEngagementsReturn { engagements: TicketEngagement[]; isLoading: boolean; isFetching: boolean; error: Error | null; refetch: () => void; } export declare function useTicketEngagements(externalTicketId: string | null | undefined, enabled?: boolean): UseTicketEngagementsReturn; //# sourceMappingURL=use-ticket-engagements.d.ts.map