SharedSignalsEndpointRouteBuilderExtensions Class
Maps the Shared Signals endpoints as Minimal API route handlers: the whole transmitter management surface in one call, its configuration document in another. The handlers translate transport to the host-agnostic services and nothing else - authentication is the host's middleware, and the receiver identity is read per SharedSignalsEndpointOptions.
Push delivery is not here. RFC 8935 carries any Security Event Token, not this framework's in
particular, so its intake belongs to the package that owns the token - a receiver maps it with
MapPushDeliveryEndpoint from Abblix.SecurityEvents.MinimalApi.
public static class SharedSignalsEndpointRouteBuilderExtensionsInheritance System.Object → SharedSignalsEndpointRouteBuilderExtensions
Methods
SharedSignalsEndpointRouteBuilderExtensions.MapSharedSignalsConfigurationDocument(this IEndpointRouteBuilder) Method
Maps the transmitter's configuration document (SSF 1.0 Section 7.2) on its own: at ConfigurationDocumentRoute, or at the well-known address the issuer resolves to when that option is null.
public static Microsoft.AspNetCore.Builder.IEndpointConventionBuilder MapSharedSignalsConfigurationDocument(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints);Parameters
endpoints Microsoft.AspNetCore.Routing.IEndpointRouteBuilder
The route builder.
Returns
Microsoft.AspNetCore.Builder.IEndpointConventionBuilder
Remarks
MapSharedSignalsTransmitterEndpoints(this IEndpointRouteBuilder) calls this by default, so a plain host never needs it. It exists for the deployment where the canonical address is answered by something in front of the application: a gateway or CDN serving a cached copy (set MapWellKnownConfiguration to false and do not call this), or a reverse proxy rewriting paths, where the document must exist on an internal route the proxy maps the canonical address onto. The document advertises AdvertisedPrefix - the prefix as the outside world reaches it. The EXTERNAL address never moves: receivers derive it from the issuer, not from configuration, so the route option is deployment plumbing, not a protocol choice.
SharedSignalsEndpointRouteBuilderExtensions.MapSharedSignalsTransmitterEndpoints(this IEndpointRouteBuilder) Method
Maps the transmitter's endpoints: the Event Stream Management API under ManagementPrefix, poll delivery beside it, and the configuration document at the well-known address the issuer resolves to (SSF 1.0 Section 7.2). Every route comes from SharedSignalsEndpointOptions, so one options object states the whole topology.
public static Microsoft.AspNetCore.Routing.RouteGroupBuilder MapSharedSignalsTransmitterEndpoints(this Microsoft.AspNetCore.Routing.IEndpointRouteBuilder endpoints);Parameters
endpoints Microsoft.AspNetCore.Routing.IEndpointRouteBuilder
The route builder.
Returns
Microsoft.AspNetCore.Routing.RouteGroupBuilder
Remarks
The returned group carries the management and poll endpoints - attach the host's authorization to it. The well-known endpoint is deliberately mapped OUTSIDE the group: discovery must answer before any receiver has credentials, so the group's authorization does not cover it.
A route the HOST adds to this group is not scope-checked, and that is worth knowing before adding one. The filter is attached to the GROUP, so it is in that route's pipeline - but it judges a route by the requirement the route declares, and only the routes mapped here declare one. A route with none is let through. So a host route beside them is admitted for any caller the host's own authorization admits, in a deployment where every neighbouring route answers 403 to that same caller.
The scope requirement is deliberately not something a host can declare: making it so would put
the metadata type into this package's public surface for a need nobody has stated. The scopes
themselves are already public - SsfScopes carries their names and the profile's inclusion
rule - so a host that wants its route scoped reads the granted scopes and asks
SsfScopes.Satisfies, rather than needing a requirement this package would then have to
honour forever.