The DISTINCT session ids stamped across details, in first-seen order.
Deduped case-insensitively (NormalizeUUID) because SQL Server returns uppercase ids and
PostgreSQL lowercase; the original casing of the first occurrence is what comes back, since that
is what the ID IN (…) filter has to match.
The conversation's loaded detail rows.
Realtime-session timeline grouping — re-exported from
@memberjunction/conversations-runtime.The grouping pass was always pure TypeScript, but purity is not the same as living in the right package: while the only implementation sat behind an Angular import, the React Native thread rendered every session-stamped row as an ordinary chat bubble — the exact thing the module's own header calls wrong. It now lives in the runtime every surface shares.
This file stays so the eleven call sites in this library keep importing from where they always did. Import from
@memberjunction/conversations-runtimein new code.