feat(protocol): add gateway transport authority contracts
This commit is contained in:
@@ -343,6 +343,134 @@
|
||||
"supported_versions": {"type": "array", "minItems": 1, "maxItems": 3, "items": {"type": "string", "maxLength": 16}},
|
||||
"features": {"type": "array", "maxItems": 64, "items": {"type": "string", "maxLength": 64}}
|
||||
}
|
||||
},
|
||||
"CapabilityProfile": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["transport", "framing", "media", "audio", "source_rate_control", "client_decode"],
|
||||
"properties": {
|
||||
"transport": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"framing": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"media": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"audio": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"source_rate_control": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"client_decode": {"type": "string", "minLength": 1, "maxLength": 64}
|
||||
}
|
||||
},
|
||||
"GatewayRegistration": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "gateway_id", "instance_identity", "certificate_identity", "public_identity", "address", "provider_identity", "protocol_min_version", "protocol_max_version", "connection_capacity", "bandwidth_capacity_kbps", "features", "capabilities"],
|
||||
"properties": {
|
||||
"version": {"type": "string", "const": "1"},
|
||||
"gateway_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"instance_identity": {"type": "string", "minLength": 1, "maxLength": 512},
|
||||
"certificate_identity": {"type": "string", "minLength": 1, "maxLength": 512},
|
||||
"public_identity": {"type": "string", "minLength": 1, "maxLength": 256},
|
||||
"address": {"type": "string", "minLength": 1, "maxLength": 256},
|
||||
"provider_identity": {"type": "string", "minLength": 1, "maxLength": 256},
|
||||
"protocol_min_version": {"type": "integer", "minimum": 1, "maximum": 100},
|
||||
"protocol_max_version": {"type": "integer", "minimum": 1, "maximum": 100},
|
||||
"connection_capacity": {"type": "integer", "minimum": 1, "maximum": 1000000},
|
||||
"bandwidth_capacity_kbps": {"type": "integer", "minimum": 1, "maximum": 1000000000},
|
||||
"features": {"type": "array", "maxItems": 64, "items": {"type": "string", "minLength": 1, "maxLength": 64}},
|
||||
"capabilities": {"$ref": "#/$defs/CapabilityProfile"}
|
||||
}
|
||||
},
|
||||
"GatewayHeartbeat": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "gateway_id", "sequence", "observed_at", "active_connections", "egress_kbps", "state"],
|
||||
"properties": {
|
||||
"version": {"type": "string", "const": "1"},
|
||||
"gateway_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"sequence": {"type": "integer", "minimum": 1},
|
||||
"observed_at": {"type": "string", "format": "date-time", "maxLength": 64},
|
||||
"active_connections": {"type": "integer", "minimum": 0, "maximum": 1000000},
|
||||
"egress_kbps": {"type": "integer", "minimum": 0, "maximum": 1000000000},
|
||||
"state": {"type": "string", "enum": ["ready", "draining", "offline"]}
|
||||
}
|
||||
},
|
||||
"GatewayDrain": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "gateway_id", "sequence", "reason", "deadline"],
|
||||
"properties": {
|
||||
"version": {"type": "string", "const": "1"},
|
||||
"gateway_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"sequence": {"type": "integer", "minimum": 1},
|
||||
"reason": {"type": "string", "minLength": 1, "maxLength": 256},
|
||||
"deadline": {"type": "string", "format": "date-time", "maxLength": 64}
|
||||
}
|
||||
},
|
||||
"TunnelAdmissionRequest": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "session_id", "gateway_id", "audience", "grant", "reconnect_sequence", "client_nonce", "capabilities"],
|
||||
"properties": {
|
||||
"version": {"type": "string", "const": "1"},
|
||||
"session_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"gateway_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"audience": {"type": "string", "minLength": 1, "maxLength": 256},
|
||||
"grant": {"type": "string", "minLength": 43, "maxLength": 256},
|
||||
"reconnect_sequence": {"type": "integer", "minimum": 0},
|
||||
"client_nonce": {"type": "string", "minLength": 16, "maxLength": 128},
|
||||
"capabilities": {"$ref": "#/$defs/CapabilityProfile"}
|
||||
}
|
||||
},
|
||||
"SessionAuthority": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "session_id", "gateway_id", "audience", "reconnect_sequence", "expires_at", "capabilities", "provider_profile", "provider_identity"],
|
||||
"properties": {
|
||||
"version": {"type": "string", "const": "1"},
|
||||
"session_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"gateway_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"audience": {"type": "string", "minLength": 1, "maxLength": 256},
|
||||
"reconnect_sequence": {"type": "integer", "minimum": 0},
|
||||
"expires_at": {"type": "string", "format": "date-time", "maxLength": 64},
|
||||
"capabilities": {"$ref": "#/$defs/CapabilityProfile"},
|
||||
"provider_profile": {"type": "string", "enum": ["apollo"]},
|
||||
"provider_identity": {"type": "string", "minLength": 1, "maxLength": 256}
|
||||
}
|
||||
},
|
||||
"ChannelFrame": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "flow_id", "sequence", "flags", "fragment_index", "fragment_count", "timestamp_ms", "payload"],
|
||||
"properties": {
|
||||
"version": {"type": "string", "const": "1"},
|
||||
"flow_id": {"type": "string", "minLength": 1, "maxLength": 64},
|
||||
"sequence": {"type": "integer", "minimum": 0},
|
||||
"flags": {"type": "integer", "minimum": 0, "maximum": 255},
|
||||
"fragment_index": {"type": "integer", "minimum": 0, "maximum": 15},
|
||||
"fragment_count": {"type": "integer", "minimum": 1, "maximum": 16},
|
||||
"timestamp_ms": {"type": "integer", "minimum": 0},
|
||||
"payload": {"type": "string", "maxLength": 87384, "x-max-bytes": 65536}
|
||||
}
|
||||
},
|
||||
"ProviderState": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "session_id", "state", "cleanup_pending", "channels"],
|
||||
"properties": {
|
||||
"version": {"type": "string", "const": "1"},
|
||||
"session_id": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"state": {"type": "string", "enum": ["starting", "ready", "disconnected", "terminating", "terminated", "cleanup_pending", "failed"]},
|
||||
"cleanup_pending": {"type": "boolean"},
|
||||
"channels": {"type": "array", "maxItems": 8, "items": {"type": "string", "minLength": 1, "maxLength": 64}}
|
||||
}
|
||||
},
|
||||
"StableError": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["version", "code", "message", "retryable"],
|
||||
"properties": {
|
||||
"version": {"type": "string", "const": "1"},
|
||||
"code": {"type": "string", "minLength": 1, "maxLength": 128},
|
||||
"message": {"type": "string", "minLength": 1, "maxLength": 512},
|
||||
"retryable": {"type": "boolean"}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user