getPackageDisplaysByIds(groupIds: readonly number[]): Promise<Map<number, PackageDisplay>>
The package displays for a set of (possibly repeated or zero)
package_group_ids — only ids naming a live package appear in the map. Lets
the ticket view collapse each token's package rows into one card per package,
so an attendee holding both a package booking and a standalone one (e.g. after
an attendee merge) doesn't fall back to per-row cards that leak a hidden member.
Groups are resolved together from their shared cache.
Promise<Map<number, PackageDisplay>>