-
POST /sync/mercure/tokenis now gated by regular page permissions (api.pages.read) instead of the separateapi.collab.*permission, matching the change in the sync plugin. Fixes getgrav/grav-plugin-admin2#24.
-
- Ships
sync-mercure-client.js(window.SyncMercure). The Mercure subscriber JS that comments-pro previously bundled now lives here and is auto-enqueued for consumer plugins on the frontend.
- Ships
-
- Mercure now appears in the capabilities response as a properly-structured transport entry (id, name, priority, supported message types) sourced from the transport registry, instead of a bare string entry stitched in by the capabilities listener.
-
- Typing indicators (and any other awareness-typed message) now actually reach subscribers. Awareness events publish to the channel's own topic with a flat envelope instead of a
:awareness-suffixed topic the client never listened to.
- Typing indicators (and any other awareness-typed message) now actually reach subscribers. Awareness events publish to the channel's own topic with a flat envelope instead of a
-
- Public Mercure bridge API. The
$grav['mercure']service exposespublishTopic()andissueSubscriberJwtForTopics()so any Grav plugin can use the configured hub as a generic pub/sub backend. - Added
MercureBridge::API_VERSIONconstant for consumer version checks. - Now registers as a sync transport provider via
onSyncRegisterTransports. The newMercureTransportclass implements\Grav\Plugin\Sync\Transport\TransportInterfaceand handles CRDT, broadcast, and awareness messages published through$grav['sync'].
- Public Mercure bridge API. The
-
- Existing
publish()andissueSubscriberJwt()signatures and wire output are unchanged.$grav['sync_mercure_bridge']continues to work as an alias for$grav['mercure'](same shared instance). - Existing
onSyncUpdateandonSyncAwarenessevent subscribers and thePOST /sync/mercure/tokenendpoint are preserved, so editor-pro's CodeMirror collab path keeps working unchanged. Both the legacy event path and the new transport-interface path coexist.
- Existing