Metadata-Version: 2.4
Name: tigr-asgi-contract-artifacts
Version: 0.3.3.dev6
Summary: Canonical contract artifacts for the Tigr ASGI contract
License: Apache-2.0
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: PyYAML>=6.0
Dynamic: license-file

# tigr-asgi-contract-artifacts

Canonical Python artifact package for the Tigr ASGI contract. This package ships the source artifacts that drive the downstream contract packages.

## Artifact Package Matrix

| Ecosystem | Package | Version | Path | Surface files | Notes |
| --- | --- | --- | --- | --- | --- |
| python | **`tigr-asgi-contract-artifacts`** | `0.3.3-dev6` | `packages/artifacts-py` | 1 | Vendored file accessors |
| npm | `@tigrbljs/tigr-asgi-contract-artifacts` | `0.3.3-dev6` | `packages/artifacts-npm` | 4 | Packaged artifact exports |
| rust | `tigr_asgi_contract_artifacts_rs` | `0.3.3-dev6` | `packages/artifacts-rs` | 1 | Embedded artifact accessors |

## Artifact Inventory Matrix

| Artifact path | Category | SHA-256 |
| --- | --- | --- |
| `automata.yaml` | registry | `1efccd18b44f` |
| `bindings.yaml` | registry | `0a08946ef696` |
| `capabilities.yaml` | registry | `8ca0167eccbc` |
| `channels.yaml` | registry | `66a6a3b36551` |
| `compatibility.yaml` | registry | `d90c5c30ab2c` |
| `completion.yaml` | registry | `036f6b37c6bc` |
| `directions.yaml` | registry | `5b3e8f536f80` |
| `event_classification.yaml` | registry | `4d3e87cd2ce5` |
| `exchanges.yaml` | registry | `efc32610dfb1` |
| `extensions.yaml` | registry | `7da670b74348` |
| `families.yaml` | registry | `e8a62db0c0ff` |
| `frames.yaml` | registry | `20460c3307c9` |
| `framing.yaml` | registry | `d7e90674cfa9` |
| `ids.yaml` | registry | `aec52c6b3ef7` |
| `legality/binding_family.yaml` | legality | `eaf47e7fefc2` |
| `legality/binding_subevent.yaml` | legality | `1126c019c67d` |
| `legality/family_subevent.yaml` | legality | `4aa82e7da8bd` |
| `protocols.yaml` | registry | `c56512c06918` |
| `schemas/automata.schema.json` | schema | `651e4d388282` |
| `schemas/bindings.schema.json` | schema | `dbc22d80846b` |
| `schemas/capabilities.schema.json` | schema | `93c9734265ef` |
| `schemas/compatibility.schema.json` | schema | `309ba3093d34` |
| `schemas/completion.schema.json` | schema | `26e6082df0cd` |
| `schemas/event.schema.json` | schema | `2c4b0d6a71b8` |
| `schemas/events/http.disconnect.schema.json` | schema | `c8e0ef15a51a` |
| `schemas/events/http.request.schema.json` | schema | `5dc3e9637842` |
| `schemas/events/http.response.body.schema.json` | schema | `aea43c0ae295` |
| `schemas/events/http.response.pathsend.schema.json` | schema | `93e5ccb15358` |
| `schemas/events/http.response.start.schema.json` | schema | `e12dd07d4486` |
| `schemas/events/lifespan.shutdown.complete.schema.json` | schema | `a7dab0910c2c` |
| `schemas/events/lifespan.shutdown.failed.schema.json` | schema | `40a49256ac6e` |
| `schemas/events/lifespan.shutdown.schema.json` | schema | `6eda511d8920` |
| `schemas/events/lifespan.startup.complete.schema.json` | schema | `f7802854affa` |
| `schemas/events/lifespan.startup.failed.schema.json` | schema | `0de2facf072d` |
| `schemas/events/lifespan.startup.schema.json` | schema | `77cea05772ad` |
| `schemas/events/transport.emit.complete.schema.json` | schema | `154aad5d68c0` |
| `schemas/events/transport.emit.failed.schema.json` | schema | `d501f202757c` |
| `schemas/events/websocket.accept.schema.json` | schema | `eb7eceeb6aeb` |
| `schemas/events/websocket.close.schema.json` | schema | `1b093c67bdc8` |
| `schemas/events/websocket.connect.schema.json` | schema | `de9333a842b2` |
| `schemas/events/websocket.disconnect.schema.json` | schema | `344950c6fbb3` |
| `schemas/events/websocket.receive.schema.json` | schema | `2934a40b9c7b` |
| `schemas/events/websocket.send.schema.json` | schema | `c39fa047b2d5` |
| `schemas/events/webtransport.accept.schema.json` | schema | `d11fae8fbca5` |
| `schemas/events/webtransport.close.schema.json` | schema | `efd59a3d1c08` |
| `schemas/events/webtransport.connect.schema.json` | schema | `8faa5332a687` |
| `schemas/events/webtransport.datagram.receive.schema.json` | schema | `36318243e42d` |
| `schemas/events/webtransport.datagram.send.schema.json` | schema | `5e5bb8220d54` |
| `schemas/events/webtransport.disconnect.schema.json` | schema | `8df0b9ea2978` |
| `schemas/events/webtransport.stream.close.schema.json` | schema | `cbe00704dba3` |
| `schemas/events/webtransport.stream.receive.schema.json` | schema | `dd20d55fe0da` |
| `schemas/events/webtransport.stream.reset.schema.json` | schema | `fc21cb3b6a0f` |
| `schemas/events/webtransport.stream.send.schema.json` | schema | `056fcd815163` |
| `schemas/events/webtransport.stream.stop_sending.schema.json` | schema | `9504fa51a954` |
| `schemas/exchanges.schema.json` | schema | `45134196417e` |
| `schemas/extensions.schema.json` | schema | `132fed861e37` |
| `schemas/families.schema.json` | schema | `fcf4059df66f` |
| `schemas/frames/app.schema.json` | schema | `41c2aed3a67a` |
| `schemas/frames/asgi-pathsend-extension.schema.json` | schema | `2b87939ce375` |
| `schemas/frames/asgi-tls-extension.schema.json` | schema | `d68a6b4f8dda` |
| `schemas/frames/bytes.schema.json` | schema | `755296a01d67` |
| `schemas/frames/grpc.schema.json` | schema | `8c6b359506a9` |
| `schemas/frames/http-1-1-message.schema.json` | schema | `11984505830d` |
| `schemas/frames/http-request-body-chunk.schema.json` | schema | `8fa1b4990502` |
| `schemas/frames/http-response-body-chunk.schema.json` | schema | `b98ba92c69c8` |
| `schemas/frames/http-response-start-frame.schema.json` | schema | `dc7632c80201` |
| `schemas/frames/json-rpc-error-object.schema.json` | schema | `33f576f0afe1` |
| `schemas/frames/json-rpc-notification-object.schema.json` | schema | `10cec03e763c` |
| `schemas/frames/json-rpc-request-object.schema.json` | schema | `205faf614cbb` |
| `schemas/frames/json-rpc-response-object.schema.json` | schema | `d250c3d711f7` |
| `schemas/frames/json.schema.json` | schema | `85f41ceb9bdf` |
| `schemas/frames/jsonrpc.schema.json` | schema | `c8ae981b8f73` |
| `schemas/frames/raw.schema.json` | schema | `4cee0c0d124c` |
| `schemas/frames/sse-data-field.schema.json` | schema | `c10f41a57e0e` |
| `schemas/frames/sse-event-field.schema.json` | schema | `a41698829ec9` |
| `schemas/frames/sse-id-field.schema.json` | schema | `7d6c646de271` |
| `schemas/frames/sse-retry-field.schema.json` | schema | `503420c3cc76` |
| `schemas/frames/sse.schema.json` | schema | `e8ad591bece0` |
| `schemas/frames/websocket-accept-frame.schema.json` | schema | `ea02b67caae0` |
| `schemas/frames/websocket-close-frame.schema.json` | schema | `0585472ded8e` |
| `schemas/frames/websocket-continuation-frame.schema.json` | schema | `2517b16b8191` |
| `schemas/frames/websocket-disconnect-frame.schema.json` | schema | `561867894530` |
| `schemas/frames/websocket-frame.schema.json` | schema | `604039e37393` |
| `schemas/frames/websocket-ping-frame.schema.json` | schema | `7023c772e08c` |
| `schemas/frames/websocket-pong-frame.schema.json` | schema | `8e14dde38aa3` |
| `schemas/frames/websocket-receive-bytes.schema.json` | schema | `ce947932d79f` |
| `schemas/frames/websocket-receive-text.schema.json` | schema | `e99c5cc750a2` |
| `schemas/frames/websocket-send-bytes.schema.json` | schema | `ad47b364bf5b` |
| `schemas/frames/websocket-send-text.schema.json` | schema | `43759bf68f06` |
| `schemas/frames/webtransport-datagram-frame.schema.json` | schema | `771c825084e4` |
| `schemas/frames/webtransport-stream-frame.schema.json` | schema | `1c6470847545` |
| `schemas/frames.schema.json` | schema | `f2cd26e07ecd` |
| `schemas/ids.schema.json` | schema | `da78d37bd5e6` |
| `schemas/jsonrpc.schema.json` | schema | `c885d927555d` |
| `schemas/manifest.schema.json` | schema | `57e8566de631` |
| `schemas/pathsend.schema.json` | schema | `5ded01ee80d8` |
| `schemas/protocols.schema.json` | schema | `2cabd7b55baa` |
| `schemas/scope.schema.json` | schema | `2698752580f8` |
| `schemas/scope_types.schema.json` | schema | `8a79bbcb718a` |
| `schemas/sse.schema.json` | schema | `42e060246611` |
| `schemas/subevents.schema.json` | schema | `778d5c6ddc30` |
| `schemas/surfaces.schema.json` | schema | `1926e68c0c96` |
| `schemas/tls.schema.json` | schema | `c66e49f6031a` |
| `schemas/transport.schema.json` | schema | `d54b83b136f1` |
| `schemas/websocket.schema.json` | schema | `b4e38fad362c` |
| `schemas/webtransport.schema.json` | schema | `e6f9300bfe82` |
| `scope_types.yaml` | registry | `620b4d20180e` |
| `subevents.yaml` | registry | `3f5432b79a57` |
| `surfaces.yaml` | registry | `7bae2973aad0` |

## Release Matrix

| Field | Value |
| --- | --- |
| Contract name | `tigr-asgi-contract` |
| Contract version | `0.3.3-dev6` |
| Artifact version | `0.3.3-dev6` |
| Serde version | `1` |
| Schema draft | `2020-12` |
| Bindings | 7 |
| Families | 6 |
| Subevents | 50 |
| Scope types | 4 |
| Event types | 30 |

## Scope Type Matrix

| ASGI3 scope type | Scope ext fields | Scope event types | Source |
| --- | --- | --- | --- |
| `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `scope.schema.json` |
| `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `scope.schema.json` |
| `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `scope.schema.json` |
| `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `scope.schema.json` |

## Capability Matrix

| Capability field | Family alignment | Meaning | Schema source |
| --- | --- | --- | --- |
| `request` | `request` | bounded unary invocation available | `transport.schema.json#/$defs/familyCapabilities` |
| `session` | `session` | long-lived association available | `transport.schema.json#/$defs/familyCapabilities` |
| `message` | `message` | discrete logical message transport available | `transport.schema.json#/$defs/familyCapabilities` |
| `stream_in` | `stream` | inbound stream chunks available | `transport.schema.json#/$defs/familyCapabilities` |
| `stream_out` | `stream` | outbound stream chunks available | `transport.schema.json#/$defs/familyCapabilities` |
| `datagram` | `datagram` | datagram transport available | `transport.schema.json#/$defs/familyCapabilities` |
| `lifespan` | `lifespan` | ASGI lifespan startup and shutdown events available | `transport.schema.json#/$defs/familyCapabilities` |

## Compatibility Matrix

| Compatibility field | Value | Meaning | Source |
| --- | --- | --- | --- |
| `contract_name` | `tigr-asgi-contract` | Canonical contract identifier | `contract/compatibility.yaml` |
| `contract_version` | `0.1.2` | Published contract version | `contract/compatibility.yaml` |
| `serde_version` | `1` | Serialization surface version | `contract/compatibility.yaml` |
| `schema_draft` | `2020-12` | JSON Schema draft level | `contract/compatibility.yaml` |

## Completion Matrix

| Completion level | Meaning | Default | Source |
| --- | --- | --- | --- |
| `accepted_by_runtime` | send accepted by runtime/output queue | no | `contract/completion.yaml` |
| `flushed_to_transport` | send flushed to transport boundary | yes | `contract/completion.yaml` |

## Event Matrix

| Transport event | ASGI3 scope type | Bindings | Related subevents | Meaning |
| --- | --- | --- | --- | --- |
| `http.request` | `http` | `http.stream`, `jsonrpc`, `rest`, `sse` | `request.body_in`, `request.chunk_in`, `request.close`, `request.open`, `stream.chunk_in` | Inbound HTTP request unit |
| `http.disconnect` | `http` | `http.stream`, `jsonrpc`, `rest`, `sse` | `request.disconnect`, `stream.reset` | HTTP connection closed by peer or server |
| `http.response.start` | `http` | `http.stream`, `jsonrpc`, `rest`, `sse` | `response.open`, `stream.open` | HTTP response metadata start |
| `http.response.body` | `http` | `http.stream`, `jsonrpc`, `rest`, `sse` | `message.out`, `message.replay`, `message.snapshot`, `response.body_out`, `response.chunk_out`, `response.finalize`, `stream.chunk_out`, `stream.close`, `stream.finalize`, `stream.flush` | HTTP response body frame |
| `http.response.pathsend` | `http` | `http.stream`, `jsonrpc`, `rest`, `sse` | - |  |
| `websocket.connect` | `websocket` | `websocket` | `session.open` | WebSocket connection open event |
| `websocket.receive` | `websocket` | `websocket` | `message.decode`, `message.decode_failed`, `message.handle`, `message.handle_failed`, `message.in` | Inbound WebSocket frame |
| `websocket.disconnect` | `websocket` | `websocket` | `session.disconnect` | WebSocket disconnect signal |
| `websocket.accept` | `websocket` | `websocket` | `session.accept`, `session.ready` | WebSocket accept handshake response |
| `websocket.send` | `websocket` | `websocket` | `message.out`, `message.replay`, `message.snapshot`, `session.heartbeat`, `session.sync` | Outbound WebSocket frame |
| `websocket.close` | `websocket` | `websocket` | `session.close`, `session.reject` | WebSocket close frame |
| `webtransport.connect` | `webtransport` | `webtransport` | `session.open` | WebTransport session connect event |
| `webtransport.accept` | `webtransport` | `webtransport` | `session.accept`, `session.ready` | WebTransport accept event |
| `webtransport.stream.receive` | `webtransport` | `webtransport` | `message.decode`, `message.decode_failed`, `message.handle`, `message.handle_failed`, `message.in`, `stream.chunk_in` | Inbound WebTransport stream frame |
| `webtransport.stream.send` | `webtransport` | `webtransport` | `message.out`, `message.replay`, `message.snapshot`, `session.heartbeat`, `session.sync`, `stream.chunk_out`, `stream.finalize`, `stream.flush`, `stream.open` | Outbound WebTransport stream frame |
| `webtransport.stream.close` | `webtransport` | `webtransport` | `stream.close` | Per-stream WebTransport close or FIN |
| `webtransport.stream.reset` | `webtransport` | `webtransport` | `stream.reset` | Per-stream WebTransport reset |
| `webtransport.stream.stop_sending` | `webtransport` | `webtransport` | `stream.stop_sending` | Per-stream WebTransport stop-sending signal |
| `webtransport.datagram.receive` | `webtransport` | `webtransport` | `datagram.handle`, `datagram.in`, `message.decode`, `message.decode_failed`, `message.handle`, `message.handle_failed`, `message.in` | Inbound WebTransport datagram |
| `webtransport.datagram.send` | `webtransport` | `webtransport` | `datagram.out` | Outbound WebTransport datagram |
| `webtransport.disconnect` | `webtransport` | `webtransport` | `session.disconnect` | WebTransport disconnect signal |
| `webtransport.close` | `webtransport` | `webtransport` | `session.close`, `session.reject` | WebTransport session close event |
| `lifespan.startup` | `lifespan` | - | `lifespan.startup` | ASGI lifespan startup receive event |
| `lifespan.startup.complete` | `lifespan` | - | `lifespan.startup_complete` | ASGI lifespan startup completion send event |
| `lifespan.startup.failed` | `lifespan` | - | `lifespan.startup_failed` | ASGI lifespan startup failure send event |
| `lifespan.shutdown` | `lifespan` | - | `lifespan.shutdown` | ASGI lifespan shutdown receive event |
| `lifespan.shutdown.complete` | `lifespan` | - | `lifespan.shutdown_complete` | ASGI lifespan shutdown completion send event |
| `lifespan.shutdown.failed` | `lifespan` | - | `lifespan.shutdown_failed` | ASGI lifespan shutdown failure send event |
| `transport.emit.complete` | `http, websocket, webtransport` | `http.stream`, `jsonrpc`, `lifespan`, `rest`, `sse`, `websocket`, `webtransport` | `datagram.emit_complete`, `message.emit_complete`, `response.emit_complete`, `session.emit_complete`, `stream.emit_complete` | Completion emission event |
| `transport.emit.failed` | `http, websocket, webtransport` | - | `datagram.emit_failed`, `message.emit_failed` | Failed emission event |

## Family Matrix

| Family | Subevent count | Required bindings | Optional bindings | Subevents |
| --- | --- | --- | --- | --- |
| `request` | 11 | `rest`, `jsonrpc`, `http.stream`, `sse` | - | `request.open`, `request.body_in`, `request.chunk_in`, `request.dispatch`, `request.close`, `request.disconnect`, `response.open`, `response.body_out`, `response.chunk_out`, `response.finalize`, `response.emit_complete` |
| `session` | 9 | `sse`, `websocket`, `webtransport` | - | `session.open`, `session.accept`, `session.reject`, `session.ready`, `session.heartbeat`, `session.sync`, `session.close`, `session.disconnect`, `session.emit_complete` |
| `message` | 10 | `sse`, `websocket` | - | `message.in`, `message.decode`, `message.decode_failed`, `message.handle`, `message.handle_failed`, `message.out`, `message.replay`, `message.snapshot`, `message.emit_complete`, `message.emit_failed` |
| `stream` | 9 | `http.stream`, `sse`, `webtransport` | `rest`, `jsonrpc` | `stream.open`, `stream.chunk_in`, `stream.chunk_out`, `stream.flush`, `stream.finalize`, `stream.reset`, `stream.stop_sending`, `stream.close`, `stream.emit_complete` |
| `datagram` | 5 | `webtransport` | - | `datagram.in`, `datagram.handle`, `datagram.out`, `datagram.emit_complete`, `datagram.emit_failed` |
| `lifespan` | 6 | `lifespan` | - | `lifespan.startup`, `lifespan.startup_complete`, `lifespan.startup_failed`, `lifespan.shutdown`, `lifespan.shutdown_complete`, `lifespan.shutdown_failed` |

## Subevent Matrix

| Subevent | Family | Family legality | Required bindings | Optional bindings | Derived bindings | Related transport events |
| --- | --- | --- | --- | --- | --- | --- |
| `request.open` | `request` | `R` required | `rest`, `jsonrpc`, `http.stream`, `sse` | - | - | `http.request` |
| `request.body_in` | `request` | `R` required | `rest`, `jsonrpc` | `http.stream`, `sse` | - | `http.request` |
| `request.chunk_in` | `request` | `R` required | - | - | `http.stream` | `http.request` |
| `request.dispatch` | `request` | `R` required | - | - | `rest`, `jsonrpc`, `http.stream`, `sse` | - |
| `request.close` | `request` | `R` required | `rest`, `jsonrpc`, `http.stream`, `sse` | - | - | `http.request` |
| `request.disconnect` | `request` | `R` required | - | `rest`, `jsonrpc`, `http.stream`, `sse` | - | `http.disconnect` |
| `response.open` | `request` | `R` required | `rest`, `jsonrpc`, `http.stream` | `sse` | - | `http.response.start` |
| `response.body_out` | `request` | `R` required | `rest`, `jsonrpc` | `http.stream` | - | `http.response.body` |
| `response.chunk_out` | `request` | `R` required | - | - | `http.stream`, `sse` | `http.response.body` |
| `response.finalize` | `request` | `R` required | - | `rest`, `jsonrpc`, `http.stream`, `sse` | - | `http.response.body` |
| `response.emit_complete` | `request` | `R` required | `rest`, `jsonrpc`, `http.stream`, `sse` | - | - | `transport.emit.complete` |
| `session.open` | `session` | `R` required | `sse`, `websocket`, `webtransport` | - | - | `websocket.connect`, `webtransport.connect` |
| `session.accept` | `session` | `R` required | `sse`, `websocket`, `webtransport` | - | - | `websocket.accept`, `webtransport.accept` |
| `session.reject` | `session` | `R` required | - | `websocket`, `webtransport` | - | `websocket.close`, `webtransport.close` |
| `session.ready` | `session` | `R` required | `sse`, `websocket`, `webtransport` | - | - | `websocket.accept`, `webtransport.accept` |
| `session.heartbeat` | `session` | `R` required | - | `sse`, `websocket`, `webtransport` | - | `websocket.send`, `webtransport.stream.send` |
| `session.sync` | `session` | `R` required | - | `sse`, `websocket`, `webtransport` | - | `websocket.send`, `webtransport.stream.send` |
| `session.close` | `session` | `R` required | `sse`, `websocket`, `webtransport` | - | - | `websocket.close`, `webtransport.close` |
| `session.disconnect` | `session` | `R` required | - | `sse`, `websocket`, `webtransport` | - | `websocket.disconnect`, `webtransport.disconnect` |
| `session.emit_complete` | `session` | `R` required | - | `sse`, `websocket`, `webtransport` | - | `transport.emit.complete` |
| `message.in` | `message` | `R` required | `websocket` | - | - | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `message.decode` | `message` | `R` required | - | `websocket` | `jsonrpc` | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `message.decode_failed` | `message` | `R` required | - | `websocket` | `jsonrpc` | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `message.handle` | `message` | `R` required | `websocket` | - | - | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `message.handle_failed` | `message` | `R` required | - | `websocket` | - | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `message.out` | `message` | `R` required | `sse`, `websocket` | - | - | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `message.replay` | `message` | `R` required | - | `sse`, `websocket` | - | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `message.snapshot` | `message` | `R` required | - | `sse`, `websocket` | - | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `message.emit_complete` | `message` | `R` required | `sse`, `websocket` | - | - | `transport.emit.complete` |
| `message.emit_failed` | `message` | `R` required | - | `sse`, `websocket` | - | `transport.emit.failed` |
| `stream.open` | `stream` | `R` required | `http.stream`, `sse`, `webtransport` | `rest`, `jsonrpc` | - | `webtransport.stream.send`, `http.response.start` |
| `stream.chunk_in` | `stream` | `R` required | `http.stream`, `webtransport` | `rest`, `jsonrpc` | - | `webtransport.stream.receive`, `http.request` |
| `stream.chunk_out` | `stream` | `R` required | `http.stream`, `sse`, `webtransport` | `rest`, `jsonrpc` | - | `webtransport.stream.send`, `http.response.body` |
| `stream.flush` | `stream` | `R` required | - | `http.stream`, `sse`, `webtransport` | - | `webtransport.stream.send`, `http.response.body` |
| `stream.finalize` | `stream` | `R` required | `http.stream`, `webtransport` | `rest`, `jsonrpc`, `sse` | - | `webtransport.stream.send`, `http.response.body` |
| `stream.reset` | `stream` | `R` required | - | `http.stream`, `sse`, `webtransport` | - | `webtransport.stream.reset`, `http.disconnect` |
| `stream.stop_sending` | `stream` | `R` required | - | `webtransport` | - | `webtransport.stream.stop_sending` |
| `stream.close` | `stream` | `R` required | `http.stream`, `sse`, `webtransport` | `rest`, `jsonrpc` | - | `webtransport.stream.close`, `http.response.body` |
| `stream.emit_complete` | `stream` | `R` required | `http.stream`, `sse`, `webtransport` | `rest`, `jsonrpc` | - | `transport.emit.complete` |
| `datagram.in` | `datagram` | `R` required | `webtransport` | - | - | `webtransport.datagram.receive` |
| `datagram.handle` | `datagram` | `R` required | `webtransport` | - | - | `webtransport.datagram.receive` |
| `datagram.out` | `datagram` | `R` required | `webtransport` | - | - | `webtransport.datagram.send` |
| `datagram.emit_complete` | `datagram` | `R` required | `webtransport` | - | - | `transport.emit.complete` |
| `datagram.emit_failed` | `datagram` | `R` required | - | `webtransport` | - | `transport.emit.failed` |
| `lifespan.startup` | `lifespan` | `R` required | `lifespan` | - | - | `lifespan.startup` |
| `lifespan.startup_complete` | `lifespan` | `R` required | `lifespan` | - | - | `lifespan.startup.complete` |
| `lifespan.startup_failed` | `lifespan` | `R` required | - | `lifespan` | - | `lifespan.startup.failed` |
| `lifespan.shutdown` | `lifespan` | `R` required | `lifespan` | - | - | `lifespan.shutdown` |
| `lifespan.shutdown_complete` | `lifespan` | `R` required | `lifespan` | - | - | `lifespan.shutdown.complete` |
| `lifespan.shutdown_failed` | `lifespan` | `R` required | - | `lifespan` | - | `lifespan.shutdown.failed` |

## Binding Subevent Matrix

Every row is a concrete `binding x subevent` record sourced from the legality registries.

| Binding | Protocols | Exchange | ASGI3 scope type | Scope ext fields | Scope event types | Required families | Optional families | Subevent | Family | Family legality | Binding legality | Related transport events |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.open` | `request` | `R` required | `R` required | `http.request` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.body_in` | `request` | `R` required | `R` required | `http.request` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.chunk_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.dispatch` | `request` | `R` required | `D` derived | - |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.close` | `request` | `R` required | `R` required | `http.request` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.disconnect` | `request` | `R` required | `O` optional | `http.disconnect` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.open` | `request` | `R` required | `R` required | `http.response.start` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.body_out` | `request` | `R` required | `R` required | `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.chunk_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.finalize` | `request` | `R` required | `O` optional | `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.emit_complete` | `request` | `R` required | `R` required | `transport.emit.complete` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.open` | `session` | `R` required | `F` forbidden | `websocket.connect`, `webtransport.connect` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.accept` | `session` | `R` required | `F` forbidden | `websocket.accept`, `webtransport.accept` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.reject` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.ready` | `session` | `R` required | `F` forbidden | `websocket.accept`, `webtransport.accept` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.heartbeat` | `session` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.sync` | `session` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.close` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.disconnect` | `session` | `R` required | `F` forbidden | `websocket.disconnect`, `webtransport.disconnect` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.emit_complete` | `session` | `R` required | `F` forbidden | `transport.emit.complete` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.in` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.decode` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.decode_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.handle` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.handle_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.out` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.replay` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.snapshot` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.emit_complete` | `message` | `R` required | `F` forbidden | `transport.emit.complete` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.emit_failed` | `message` | `R` required | `F` forbidden | `transport.emit.failed` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.open` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.start` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.chunk_in` | `stream` | `R` required | `O` optional | `webtransport.stream.receive`, `http.request` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.chunk_out` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.flush` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.finalize` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.reset` | `stream` | `R` required | `F` forbidden | `webtransport.stream.reset`, `http.disconnect` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.stop_sending` | `stream` | `R` required | `F` forbidden | `webtransport.stream.stop_sending` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.close` | `stream` | `R` required | `O` optional | `webtransport.stream.close`, `http.response.body` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.emit_complete` | `stream` | `R` required | `O` optional | `transport.emit.complete` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.in` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.handle` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.out` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.send` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.emit_complete` | `datagram` | `R` required | `F` forbidden | `transport.emit.complete` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.emit_failed` | `datagram` | `R` required | `F` forbidden | `transport.emit.failed` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.startup` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.startup_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.complete` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.startup_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.failed` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.shutdown` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.shutdown_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.complete` |
| `rest` | `http.rest`, `https.rest` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.shutdown_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.failed` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.open` | `request` | `R` required | `R` required | `http.request` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.body_in` | `request` | `R` required | `R` required | `http.request` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.chunk_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.dispatch` | `request` | `R` required | `D` derived | - |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.close` | `request` | `R` required | `R` required | `http.request` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `request.disconnect` | `request` | `R` required | `O` optional | `http.disconnect` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.open` | `request` | `R` required | `R` required | `http.response.start` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.body_out` | `request` | `R` required | `R` required | `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.chunk_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.finalize` | `request` | `R` required | `O` optional | `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `response.emit_complete` | `request` | `R` required | `R` required | `transport.emit.complete` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.open` | `session` | `R` required | `F` forbidden | `websocket.connect`, `webtransport.connect` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.accept` | `session` | `R` required | `F` forbidden | `websocket.accept`, `webtransport.accept` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.reject` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.ready` | `session` | `R` required | `F` forbidden | `websocket.accept`, `webtransport.accept` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.heartbeat` | `session` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.sync` | `session` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.close` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.disconnect` | `session` | `R` required | `F` forbidden | `websocket.disconnect`, `webtransport.disconnect` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `session.emit_complete` | `session` | `R` required | `F` forbidden | `transport.emit.complete` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.in` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.decode` | `message` | `R` required | `D` derived | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.decode_failed` | `message` | `R` required | `D` derived | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.handle` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.handle_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.out` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.replay` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.snapshot` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.emit_complete` | `message` | `R` required | `F` forbidden | `transport.emit.complete` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `message.emit_failed` | `message` | `R` required | `F` forbidden | `transport.emit.failed` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.open` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.start` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.chunk_in` | `stream` | `R` required | `O` optional | `webtransport.stream.receive`, `http.request` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.chunk_out` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.flush` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.finalize` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.reset` | `stream` | `R` required | `F` forbidden | `webtransport.stream.reset`, `http.disconnect` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.stop_sending` | `stream` | `R` required | `F` forbidden | `webtransport.stream.stop_sending` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.close` | `stream` | `R` required | `O` optional | `webtransport.stream.close`, `http.response.body` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `stream.emit_complete` | `stream` | `R` required | `O` optional | `transport.emit.complete` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.in` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.handle` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.out` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.send` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.emit_complete` | `datagram` | `R` required | `F` forbidden | `transport.emit.complete` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `datagram.emit_failed` | `datagram` | `R` required | `F` forbidden | `transport.emit.failed` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.startup` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.startup_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.complete` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.startup_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.failed` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.shutdown` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.shutdown_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.complete` |
| `jsonrpc` | `http.jsonrpc`, `https.jsonrpc` | `unary` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request` | `stream` | `lifespan.shutdown_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.failed` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `request.open` | `request` | `R` required | `R` required | `http.request` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `request.body_in` | `request` | `R` required | `O` optional | `http.request` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `request.chunk_in` | `request` | `R` required | `D` derived | `http.request` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `request.dispatch` | `request` | `R` required | `D` derived | - |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `request.close` | `request` | `R` required | `R` required | `http.request` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `request.disconnect` | `request` | `R` required | `O` optional | `http.disconnect` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `response.open` | `request` | `R` required | `R` required | `http.response.start` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `response.body_out` | `request` | `R` required | `O` optional | `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `response.chunk_out` | `request` | `R` required | `D` derived | `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `response.finalize` | `request` | `R` required | `O` optional | `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `response.emit_complete` | `request` | `R` required | `R` required | `transport.emit.complete` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.open` | `session` | `R` required | `F` forbidden | `websocket.connect`, `webtransport.connect` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.accept` | `session` | `R` required | `F` forbidden | `websocket.accept`, `webtransport.accept` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.reject` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.ready` | `session` | `R` required | `F` forbidden | `websocket.accept`, `webtransport.accept` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.heartbeat` | `session` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.sync` | `session` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.close` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.disconnect` | `session` | `R` required | `F` forbidden | `websocket.disconnect`, `webtransport.disconnect` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `session.emit_complete` | `session` | `R` required | `F` forbidden | `transport.emit.complete` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.in` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.decode` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.decode_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.handle` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.handle_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.out` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.replay` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.snapshot` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.emit_complete` | `message` | `R` required | `F` forbidden | `transport.emit.complete` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `message.emit_failed` | `message` | `R` required | `F` forbidden | `transport.emit.failed` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.open` | `stream` | `R` required | `R` required | `webtransport.stream.send`, `http.response.start` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.chunk_in` | `stream` | `R` required | `R` required | `webtransport.stream.receive`, `http.request` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.chunk_out` | `stream` | `R` required | `R` required | `webtransport.stream.send`, `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.flush` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.finalize` | `stream` | `R` required | `R` required | `webtransport.stream.send`, `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.reset` | `stream` | `R` required | `O` optional | `webtransport.stream.reset`, `http.disconnect` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.stop_sending` | `stream` | `R` required | `F` forbidden | `webtransport.stream.stop_sending` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.close` | `stream` | `R` required | `R` required | `webtransport.stream.close`, `http.response.body` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `stream.emit_complete` | `stream` | `R` required | `R` required | `transport.emit.complete` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `datagram.in` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `datagram.handle` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `datagram.out` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.send` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `datagram.emit_complete` | `datagram` | `R` required | `F` forbidden | `transport.emit.complete` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `datagram.emit_failed` | `datagram` | `R` required | `F` forbidden | `transport.emit.failed` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `lifespan.startup` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `lifespan.startup_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.complete` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `lifespan.startup_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.failed` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `lifespan.shutdown` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `lifespan.shutdown_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.complete` |
| `http.stream` | `http.stream`, `https.stream` | `server_stream` | `http` | `transport`, `family_capabilities` | `http.request`, `http.disconnect`, `http.response.start`, `http.response.body`, `transport.emit.complete`, `transport.emit.failed` | `request`, `stream` | - | `lifespan.shutdown_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.failed` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `request.open` | `request` | `R` required | `R` required | `http.request` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `request.body_in` | `request` | `R` required | `O` optional | `http.request` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `request.chunk_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `request.dispatch` | `request` | `R` required | `D` derived | - |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `request.close` | `request` | `R` required | `R` required | `http.request` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `request.disconnect` | `request` | `R` required | `O` optional | `http.disconnect` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `response.open` | `request` | `R` required | `O` optional | `http.response.start` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `response.body_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `response.chunk_out` | `request` | `R` required | `D` derived | `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `response.finalize` | `request` | `R` required | `O` optional | `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `response.emit_complete` | `request` | `R` required | `R` required | `transport.emit.complete` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.open` | `session` | `R` required | `R` required | `websocket.connect`, `webtransport.connect` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.accept` | `session` | `R` required | `R` required | `websocket.accept`, `webtransport.accept` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.reject` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.ready` | `session` | `R` required | `R` required | `websocket.accept`, `webtransport.accept` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.heartbeat` | `session` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.sync` | `session` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.close` | `session` | `R` required | `R` required | `websocket.close`, `webtransport.close` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.disconnect` | `session` | `R` required | `O` optional | `websocket.disconnect`, `webtransport.disconnect` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `session.emit_complete` | `session` | `R` required | `O` optional | `transport.emit.complete` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.in` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.decode` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.decode_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.handle` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.handle_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.out` | `message` | `R` required | `R` required | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.replay` | `message` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.snapshot` | `message` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.emit_complete` | `message` | `R` required | `R` required | `transport.emit.complete` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `message.emit_failed` | `message` | `R` required | `O` optional | `transport.emit.failed` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.open` | `stream` | `R` required | `R` required | `webtransport.stream.send`, `http.response.start` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.chunk_in` | `stream` | `R` required | `F` forbidden | `webtransport.stream.receive`, `http.request` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.chunk_out` | `stream` | `R` required | `R` required | `webtransport.stream.send`, `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.flush` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.finalize` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.reset` | `stream` | `R` required | `O` optional | `webtransport.stream.reset`, `http.disconnect` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.stop_sending` | `stream` | `R` required | `F` forbidden | `webtransport.stream.stop_sending` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.close` | `stream` | `R` required | `R` required | `webtransport.stream.close`, `http.response.body` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `stream.emit_complete` | `stream` | `R` required | `R` required | `transport.emit.complete` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `datagram.in` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `datagram.handle` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `datagram.out` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.send` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `datagram.emit_complete` | `datagram` | `R` required | `F` forbidden | `transport.emit.complete` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `datagram.emit_failed` | `datagram` | `R` required | `F` forbidden | `transport.emit.failed` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `lifespan.startup` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `lifespan.startup_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.complete` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `lifespan.startup_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.failed` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `lifespan.shutdown` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `lifespan.shutdown_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.complete` |
| `sse` | `http.sse`, `https.sse` | `server_stream` | `http` | `transport`, `family_capabilities`, `sse` | `http.disconnect`, `http.request`, `http.response.body`, `http.response.start`, `transport.emit.complete`, `transport.emit.failed` | `request`, `session`, `message`, `stream` | - | `lifespan.shutdown_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.failed` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `request.open` | `request` | `R` required | `F` forbidden | `http.request` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `request.body_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `request.chunk_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `request.dispatch` | `request` | `R` required | `F` forbidden | - |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `request.close` | `request` | `R` required | `F` forbidden | `http.request` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `request.disconnect` | `request` | `R` required | `F` forbidden | `http.disconnect` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `response.open` | `request` | `R` required | `F` forbidden | `http.response.start` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `response.body_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `response.chunk_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `response.finalize` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `response.emit_complete` | `request` | `R` required | `F` forbidden | `transport.emit.complete` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.open` | `session` | `R` required | `R` required | `websocket.connect`, `webtransport.connect` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.accept` | `session` | `R` required | `R` required | `websocket.accept`, `webtransport.accept` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.reject` | `session` | `R` required | `O` optional | `websocket.close`, `webtransport.close` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.ready` | `session` | `R` required | `R` required | `websocket.accept`, `webtransport.accept` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.heartbeat` | `session` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.sync` | `session` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.close` | `session` | `R` required | `R` required | `websocket.close`, `webtransport.close` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.disconnect` | `session` | `R` required | `O` optional | `websocket.disconnect`, `webtransport.disconnect` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `session.emit_complete` | `session` | `R` required | `O` optional | `transport.emit.complete` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.in` | `message` | `R` required | `R` required | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.decode` | `message` | `R` required | `O` optional | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.decode_failed` | `message` | `R` required | `O` optional | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.handle` | `message` | `R` required | `R` required | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.handle_failed` | `message` | `R` required | `O` optional | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.out` | `message` | `R` required | `R` required | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.replay` | `message` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.snapshot` | `message` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.emit_complete` | `message` | `R` required | `R` required | `transport.emit.complete` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `message.emit_failed` | `message` | `R` required | `O` optional | `transport.emit.failed` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.open` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.start` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.chunk_in` | `stream` | `R` required | `F` forbidden | `webtransport.stream.receive`, `http.request` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.chunk_out` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.flush` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.finalize` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.reset` | `stream` | `R` required | `F` forbidden | `webtransport.stream.reset`, `http.disconnect` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.stop_sending` | `stream` | `R` required | `F` forbidden | `webtransport.stream.stop_sending` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.close` | `stream` | `R` required | `F` forbidden | `webtransport.stream.close`, `http.response.body` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `stream.emit_complete` | `stream` | `R` required | `F` forbidden | `transport.emit.complete` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `datagram.in` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `datagram.handle` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `datagram.out` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.send` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `datagram.emit_complete` | `datagram` | `R` required | `F` forbidden | `transport.emit.complete` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `datagram.emit_failed` | `datagram` | `R` required | `F` forbidden | `transport.emit.failed` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `lifespan.startup` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `lifespan.startup_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.complete` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `lifespan.startup_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.failed` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `lifespan.shutdown` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `lifespan.shutdown_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.complete` |
| `websocket` | `ws`, `wss` | `duplex` | `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `message` | - | `lifespan.shutdown_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.failed` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `request.open` | `request` | `R` required | `F` forbidden | `http.request` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `request.body_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `request.chunk_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `request.dispatch` | `request` | `R` required | `F` forbidden | - |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `request.close` | `request` | `R` required | `F` forbidden | `http.request` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `request.disconnect` | `request` | `R` required | `F` forbidden | `http.disconnect` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `response.open` | `request` | `R` required | `F` forbidden | `http.response.start` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `response.body_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `response.chunk_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `response.finalize` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `response.emit_complete` | `request` | `R` required | `F` forbidden | `transport.emit.complete` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.open` | `session` | `R` required | `R` required | `websocket.connect`, `webtransport.connect` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.accept` | `session` | `R` required | `R` required | `websocket.accept`, `webtransport.accept` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.reject` | `session` | `R` required | `O` optional | `websocket.close`, `webtransport.close` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.ready` | `session` | `R` required | `R` required | `websocket.accept`, `webtransport.accept` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.heartbeat` | `session` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.sync` | `session` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.close` | `session` | `R` required | `R` required | `websocket.close`, `webtransport.close` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.disconnect` | `session` | `R` required | `O` optional | `websocket.disconnect`, `webtransport.disconnect` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `session.emit_complete` | `session` | `R` required | `O` optional | `transport.emit.complete` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.in` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.decode` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.decode_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.handle` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.handle_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.out` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.replay` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.snapshot` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.emit_complete` | `message` | `R` required | `F` forbidden | `transport.emit.complete` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `message.emit_failed` | `message` | `R` required | `F` forbidden | `transport.emit.failed` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.open` | `stream` | `R` required | `R` required | `webtransport.stream.send`, `http.response.start` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.chunk_in` | `stream` | `R` required | `R` required | `webtransport.stream.receive`, `http.request` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.chunk_out` | `stream` | `R` required | `R` required | `webtransport.stream.send`, `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.flush` | `stream` | `R` required | `O` optional | `webtransport.stream.send`, `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.finalize` | `stream` | `R` required | `R` required | `webtransport.stream.send`, `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.reset` | `stream` | `R` required | `O` optional | `webtransport.stream.reset`, `http.disconnect` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.stop_sending` | `stream` | `R` required | `O` optional | `webtransport.stream.stop_sending` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.close` | `stream` | `R` required | `R` required | `webtransport.stream.close`, `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `stream.emit_complete` | `stream` | `R` required | `R` required | `transport.emit.complete` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `datagram.in` | `datagram` | `R` required | `R` required | `webtransport.datagram.receive` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `datagram.handle` | `datagram` | `R` required | `R` required | `webtransport.datagram.receive` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `datagram.out` | `datagram` | `R` required | `R` required | `webtransport.datagram.send` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `datagram.emit_complete` | `datagram` | `R` required | `R` required | `transport.emit.complete` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `datagram.emit_failed` | `datagram` | `R` required | `O` optional | `transport.emit.failed` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `lifespan.startup` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `lifespan.startup_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.complete` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `lifespan.startup_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.startup.failed` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `lifespan.shutdown` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `lifespan.shutdown_complete` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.complete` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.stream.close`, `webtransport.stream.reset`, `webtransport.stream.stop_sending`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete`, `transport.emit.failed` | `session`, `stream`, `datagram` | - | `lifespan.shutdown_failed` | `lifespan` | `R` required | `F` forbidden | `lifespan.shutdown.failed` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `request.open` | `request` | `R` required | `F` forbidden | `http.request` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `request.body_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `request.chunk_in` | `request` | `R` required | `F` forbidden | `http.request` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `request.dispatch` | `request` | `R` required | `F` forbidden | - |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `request.close` | `request` | `R` required | `F` forbidden | `http.request` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `request.disconnect` | `request` | `R` required | `F` forbidden | `http.disconnect` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `response.open` | `request` | `R` required | `F` forbidden | `http.response.start` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `response.body_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `response.chunk_out` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `response.finalize` | `request` | `R` required | `F` forbidden | `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `response.emit_complete` | `request` | `R` required | `F` forbidden | `transport.emit.complete` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.open` | `session` | `R` required | `F` forbidden | `websocket.connect`, `webtransport.connect` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.accept` | `session` | `R` required | `F` forbidden | `websocket.accept`, `webtransport.accept` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.reject` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.ready` | `session` | `R` required | `F` forbidden | `websocket.accept`, `webtransport.accept` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.heartbeat` | `session` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.sync` | `session` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.close` | `session` | `R` required | `F` forbidden | `websocket.close`, `webtransport.close` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.disconnect` | `session` | `R` required | `F` forbidden | `websocket.disconnect`, `webtransport.disconnect` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `session.emit_complete` | `session` | `R` required | `F` forbidden | `transport.emit.complete` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.in` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.decode` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.decode_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.handle` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.handle_failed` | `message` | `R` required | `F` forbidden | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.out` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.replay` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.snapshot` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.emit_complete` | `message` | `R` required | `F` forbidden | `transport.emit.complete` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `message.emit_failed` | `message` | `R` required | `F` forbidden | `transport.emit.failed` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.open` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.start` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.chunk_in` | `stream` | `R` required | `F` forbidden | `webtransport.stream.receive`, `http.request` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.chunk_out` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.flush` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.finalize` | `stream` | `R` required | `F` forbidden | `webtransport.stream.send`, `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.reset` | `stream` | `R` required | `F` forbidden | `webtransport.stream.reset`, `http.disconnect` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.stop_sending` | `stream` | `R` required | `F` forbidden | `webtransport.stream.stop_sending` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.close` | `stream` | `R` required | `F` forbidden | `webtransport.stream.close`, `http.response.body` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `stream.emit_complete` | `stream` | `R` required | `F` forbidden | `transport.emit.complete` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `datagram.in` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `datagram.handle` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.receive` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `datagram.out` | `datagram` | `R` required | `F` forbidden | `webtransport.datagram.send` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `datagram.emit_complete` | `datagram` | `R` required | `F` forbidden | `transport.emit.complete` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `datagram.emit_failed` | `datagram` | `R` required | `F` forbidden | `transport.emit.failed` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `lifespan.startup` | `lifespan` | `R` required | `R` required | `lifespan.startup` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `lifespan.startup_complete` | `lifespan` | `R` required | `R` required | `lifespan.startup.complete` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `lifespan.startup_failed` | `lifespan` | `R` required | `O` optional | `lifespan.startup.failed` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `lifespan.shutdown` | `lifespan` | `R` required | `R` required | `lifespan.shutdown` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `lifespan.shutdown_complete` | `lifespan` | `R` required | `R` required | `lifespan.shutdown.complete` |
| `lifespan` | `lifespan` | `unary` | `lifespan` | `transport`, `family_capabilities` | `lifespan.startup`, `lifespan.startup.complete`, `lifespan.startup.failed`, `lifespan.shutdown`, `lifespan.shutdown.complete`, `lifespan.shutdown.failed` | `lifespan` | - | `lifespan.shutdown_failed` | `lifespan` | `R` required | `O` optional | `lifespan.shutdown.failed` |
