Metadata-Version: 2.4
Name: tigr-asgi-contract
Version: 0.3.1
Summary: Generated Python contract bindings for the Tigr ASGI contract
License: Apache-2.0
License-File: LICENSE
Requires-Python: >=3.10
Requires-Dist: pydantic>=2.8
Description-Content-Type: text/markdown

# tigr-asgi-contract

Generated Python contract package for the Tigr ASGI contract. It is generated from the canonical `contract/` directory and mirrors the legality and schema artifacts.

## Contract Package Matrix

| Ecosystem | Package | Version | Path | Surface files | Notes |
| --- | --- | --- | --- | --- | --- |
| python | **`tigr-asgi-contract`** | `0.3.1` | `packages/contract-py` | 18 | Enums, models, validators |
| npm | `@tigrbljs/tigr-asgi-contract` | `0.3.1` | `packages/contract-npm` | 20 | TypeScript and TSX surfaces |
| rust | `tigr_asgi_contract_rs` | `0.3.1` | `packages/contract-rs` | 17 | Serde-friendly contract surfaces |

## Generated Surface Matrix

| Module | Export surface |
| --- | --- |
| `_enum_compat` | `tigr_asgi_contract/_enum_compat.py` |
| `bindings` | `tigr_asgi_contract/bindings.py` |
| `capabilities` | `tigr_asgi_contract/capabilities.py` |
| `compatibility` | `tigr_asgi_contract/compatibility.py` |
| `completion` | `tigr_asgi_contract/completion.py` |
| `events` | `tigr_asgi_contract/events.py` |
| `exchanges` | `tigr_asgi_contract/exchanges.py` |
| `families` | `tigr_asgi_contract/families.py` |
| `frames` | `tigr_asgi_contract/frames.py` |
| `ids` | `tigr_asgi_contract/ids.py` |
| `models` | `tigr_asgi_contract/models.py` |
| `protocols` | `tigr_asgi_contract/protocols.py` |
| `registry` | `tigr_asgi_contract/registry.py` |
| `scope` | `tigr_asgi_contract/scope.py` |
| `scope_types` | `tigr_asgi_contract/scope_types.py` |
| `subevents` | `tigr_asgi_contract/subevents.py` |
| `validators` | `tigr_asgi_contract/validators.py` |
| `version` | `tigr_asgi_contract/version.py` |

## Release Matrix

| Field | Value |
| --- | --- |
| Contract name | `tigr-asgi-contract` |
| Contract version | `0.3.1` |
| Artifact version | `0.3.1` |
| Serde version | `1` |
| Schema draft | `2020-12` |
| Bindings | 6 |
| Families | 5 |
| Subevents | 42 |
| Scope types | 4 |
| Event types | 26 |

## 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` | `scope.schema.json` |
| `websocket` | `transport`, `family_capabilities`, `websocket` | `websocket.connect`, `websocket.receive`, `websocket.disconnect`, `websocket.accept`, `websocket.send`, `websocket.close`, `transport.emit.complete` | `scope.schema.json` |
| `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `scope.schema.json` |
| `lifespan` | `transport`, `family_capabilities` | - | `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` |

## 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.accept`, `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.abort` | 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.close`, `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.handle`, `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.ack`, `message.nack`, `message.out`, `message.replay`, `message.snapshot`, `session.heartbeat`, `session.sync` | Outbound WebSocket frame |
| `websocket.close` | `websocket` | `websocket` | `session.close` | 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.handle`, `message.in`, `stream.chunk_in` | Inbound WebTransport stream frame |
| `webtransport.stream.send` | `webtransport` | `webtransport` | `message.ack`, `message.nack`, `message.out`, `message.replay`, `message.snapshot`, `session.heartbeat`, `session.sync`, `stream.chunk_out`, `stream.finalize`, `stream.flush`, `stream.open` | Outbound WebTransport stream frame |
| `webtransport.datagram.receive` | `webtransport` | `webtransport` | `datagram.handle`, `datagram.in`, `message.decode`, `message.handle`, `message.in` | Inbound WebTransport datagram |
| `webtransport.datagram.send` | `webtransport` | `webtransport` | `datagram.ack`, `datagram.out`, `message.ack`, `message.nack` | Outbound WebTransport datagram |
| `webtransport.disconnect` | `webtransport` | `webtransport` | `session.disconnect` | WebTransport disconnect signal |
| `webtransport.close` | `webtransport` | `webtransport` | `datagram.close`, `session.close`, `stream.abort`, `stream.close` | WebTransport close event |
| `lifespan.startup` | `http, websocket, webtransport` | - | - |  |
| `lifespan.startup.complete` | `http, websocket, webtransport` | - | - |  |
| `lifespan.startup.failed` | `http, websocket, webtransport` | - | - |  |
| `lifespan.shutdown` | `http, websocket, webtransport` | - | - |  |
| `lifespan.shutdown.complete` | `http, websocket, webtransport` | - | - |  |
| `lifespan.shutdown.failed` | `http, websocket, webtransport` | - | - |  |
| `transport.emit.complete` | `http, websocket, webtransport` | `http.stream`, `jsonrpc`, `rest`, `sse`, `websocket`, `webtransport` | `datagram.emit_complete`, `message.emit_complete`, `response.emit_complete`, `session.emit_complete`, `stream.emit_complete` | Completion 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.accept`, `request.close`, `request.disconnect`, `response.open`, `response.body_out`, `response.chunk_out`, `response.close`, `response.emit_complete` |
| `session` | 8 | `sse`, `websocket`, `webtransport` | - | `session.open`, `session.accept`, `session.ready`, `session.heartbeat`, `session.sync`, `session.close`, `session.disconnect`, `session.emit_complete` |
| `message` | 9 | `sse`, `websocket` | `webtransport` | `message.in`, `message.decode`, `message.handle`, `message.out`, `message.ack`, `message.nack`, `message.replay`, `message.snapshot`, `message.emit_complete` |
| `stream` | 8 | `http.stream`, `sse`, `webtransport` | `rest`, `jsonrpc` | `stream.open`, `stream.chunk_in`, `stream.chunk_out`, `stream.flush`, `stream.finalize`, `stream.abort`, `stream.close`, `stream.emit_complete` |
| `datagram` | 6 | `webtransport` | - | `datagram.in`, `datagram.handle`, `datagram.out`, `datagram.ack`, `datagram.close`, `datagram.emit_complete` |

## 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.accept` | `request` | `R` required | - | `rest`, `jsonrpc`, `http.stream`, `sse` | - | `http.request` |
| `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.close` | `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.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` | `webtransport` | - | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `message.decode` | `message` | `R` required | - | `websocket`, `webtransport` | `jsonrpc` | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `message.handle` | `message` | `R` required | `websocket` | `webtransport` | - | `websocket.receive`, `webtransport.stream.receive`, `webtransport.datagram.receive` |
| `message.out` | `message` | `R` required | `sse`, `websocket` | `webtransport` | - | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `message.ack` | `message` | `R` required | - | `websocket`, `webtransport` | - | `websocket.send`, `webtransport.stream.send`, `webtransport.datagram.send` |
| `message.nack` | `message` | `R` required | - | `websocket`, `webtransport` | - | `websocket.send`, `webtransport.stream.send`, `webtransport.datagram.send` |
| `message.replay` | `message` | `R` required | - | `sse`, `websocket`, `webtransport` | - | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `message.snapshot` | `message` | `R` required | - | `sse`, `websocket`, `webtransport` | - | `websocket.send`, `webtransport.stream.send`, `http.response.body` |
| `message.emit_complete` | `message` | `R` required | `sse`, `websocket` | `webtransport` | - | `transport.emit.complete` |
| `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.abort` | `stream` | `R` required | - | `http.stream`, `sse`, `webtransport` | - | `webtransport.close`, `http.disconnect` |
| `stream.close` | `stream` | `R` required | `http.stream`, `sse`, `webtransport` | `rest`, `jsonrpc` | - | `webtransport.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.ack` | `datagram` | `R` required | - | `webtransport` | - | `webtransport.datagram.send` |
| `datagram.close` | `datagram` | `R` required | `webtransport` | - | - | `webtransport.close` |
| `datagram.emit_complete` | `datagram` | `R` required | `webtransport` | - | - | `transport.emit.complete` |

## 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` | `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` | `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` | `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` | `request` | `stream` | `request.accept` | `request` | `R` required | `O` optional | `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` | `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` | `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` | `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` | `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` | `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` | `request` | `stream` | `response.close` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `request` | `stream` | `message.ack` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `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` | `request` | `stream` | `message.nack` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `request` | `stream` | `stream.abort` | `stream` | `R` required | `F` forbidden | `webtransport.close`, `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` | `request` | `stream` | `stream.close` | `stream` | `R` required | `O` optional | `webtransport.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` | `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` | `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` | `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` | `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` | `request` | `stream` | `datagram.ack` | `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` | `request` | `stream` | `datagram.close` | `datagram` | `R` required | `F` forbidden | `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` | `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` | `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` | `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` | `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` | `request` | `stream` | `request.accept` | `request` | `R` required | `O` optional | `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` | `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` | `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` | `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` | `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` | `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` | `request` | `stream` | `response.close` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `request` | `stream` | `message.ack` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `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` | `request` | `stream` | `message.nack` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `request` | `stream` | `stream.abort` | `stream` | `R` required | `F` forbidden | `webtransport.close`, `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` | `request` | `stream` | `stream.close` | `stream` | `R` required | `O` optional | `webtransport.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` | `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` | `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` | `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` | `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` | `request` | `stream` | `datagram.ack` | `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` | `request` | `stream` | `datagram.close` | `datagram` | `R` required | `F` forbidden | `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` | `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` | `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` | `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` | `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` | `request`, `stream` | - | `request.accept` | `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` | `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` | `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` | `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` | `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` | `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` | `request`, `stream` | - | `response.close` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `request`, `stream` | - | `message.ack` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `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` | `request`, `stream` | - | `message.nack` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `request`, `stream` | - | `stream.abort` | `stream` | `R` required | `O` optional | `webtransport.close`, `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` | `request`, `stream` | - | `stream.close` | `stream` | `R` required | `R` required | `webtransport.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` | `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` | `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` | `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` | `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` | `request`, `stream` | - | `datagram.ack` | `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` | `request`, `stream` | - | `datagram.close` | `datagram` | `R` required | `F` forbidden | `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` | `request`, `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` | `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` | `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` | `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` | `request`, `session`, `message`, `stream` | - | `request.accept` | `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` | `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` | `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` | `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` | `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` | `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` | `request`, `session`, `message`, `stream` | - | `response.close` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `request`, `session`, `message`, `stream` | - | `message.ack` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `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` | `request`, `session`, `message`, `stream` | - | `message.nack` | `message` | `R` required | `F` forbidden | `websocket.send`, `webtransport.stream.send`, `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `request`, `session`, `message`, `stream` | - | `stream.abort` | `stream` | `R` required | `O` optional | `webtransport.close`, `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` | `request`, `session`, `message`, `stream` | - | `stream.close` | `stream` | `R` required | `R` required | `webtransport.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` | `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` | `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` | `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` | `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` | `request`, `session`, `message`, `stream` | - | `datagram.ack` | `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` | `request`, `session`, `message`, `stream` | - | `datagram.close` | `datagram` | `R` required | `F` forbidden | `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` | `request`, `session`, `message`, `stream` | - | `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` | `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` | `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` | `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` | `session`, `message` | - | `request.accept` | `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` | `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` | `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` | `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` | `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` | `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` | `session`, `message` | - | `response.close` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `session`, `message` | - | `message.ack` | `message` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send`, `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` | `session`, `message` | - | `message.nack` | `message` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send`, `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `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` | `session`, `message` | - | `stream.abort` | `stream` | `R` required | `F` forbidden | `webtransport.close`, `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` | `session`, `message` | - | `stream.close` | `stream` | `R` required | `F` forbidden | `webtransport.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` | `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` | `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` | `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` | `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` | `session`, `message` | - | `datagram.ack` | `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` | `session`, `message` | - | `datagram.close` | `datagram` | `R` required | `F` forbidden | `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` | `session`, `message` | - | `datagram.emit_complete` | `datagram` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `request.accept` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `response.close` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.in` | `message` | `R` required | `O` optional | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.decode` | `message` | `R` required | `O` optional | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.handle` | `message` | `R` required | `O` optional | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.out` | `message` | `R` required | `O` optional | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.ack` | `message` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send`, `webtransport.datagram.send` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.nack` | `message` | `R` required | `O` optional | `websocket.send`, `webtransport.stream.send`, `webtransport.datagram.send` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.replay` | `message` | `R` required | `O` optional | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.snapshot` | `message` | `R` required | `O` optional | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `message.emit_complete` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `stream.abort` | `stream` | `R` required | `O` optional | `webtransport.close`, `http.disconnect` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `stream.close` | `stream` | `R` required | `R` required | `webtransport.close`, `http.response.body` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `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.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `datagram.ack` | `datagram` | `R` required | `O` optional | `webtransport.datagram.send` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `datagram.close` | `datagram` | `R` required | `R` required | `webtransport.close` |
| `webtransport` | `webtransport` | `duplex` | `webtransport` | `transport`, `family_capabilities`, `webtransport` | `webtransport.connect`, `webtransport.accept`, `webtransport.stream.receive`, `webtransport.stream.send`, `webtransport.datagram.receive`, `webtransport.datagram.send`, `webtransport.disconnect`, `webtransport.close`, `transport.emit.complete` | `session`, `stream`, `datagram` | `message` | `datagram.emit_complete` | `datagram` | `R` required | `R` required | `transport.emit.complete` |
