ReadonlysourceFirst colon-prefix of the GroupRef this provider handles.
Look up a Group by its unique name. Returns the first match
(the name index is unique at the collection level) or null.
Used by the AccessRegistry's bootstrap seeding and developer-
cache warm path to find well-known groups ('core',
'lounge', 'wizards').
Notify subscribed listeners that membership of Group id changed.
Called by the controller-side helpers after every CRUD mutation
(e.g., add, remove, setRole, disband). Internal to the
provider — external callers go through the verbs.
Read members. May resolve asynchronously (e.g., live Avatar lookups).
Project the source's native role for playerId in group id
into the coarse GroupRole vocabulary. null = not in the group.
Sources without a native role concept return 'member' for any
matched entry.
Provider contract. Concrete providers in
lib/social/providers/.membersis the canonical read;roleOfis the canonical role projection.isMemberandonChangeare optional fast-path / live-notification seams (defaults derive fromroleOfand no-op respectively).Role projection is mandatory. Every provider projects its native concept into the coarse
'owner' | 'admin' | 'member'vocabulary as best it can — even when the underlying source has no native role hierarchy (mql,contacts), the projection is "everyone in the materialized set is'member'". Surfacingnullis the "not in the group at all" signal. Sources with richer hierarchies (a future guild provider with leader / officer / member) fold their native roles into the coarse vocabulary — the contract is intentionally lossy.Writable providers add
add/remove/setRole/create/destroyon top — the managed provider has them; mql / contacts don't.