feat(message-bus): add subscribtion eviction on grant revocation
change also plan to implement frontend types generation from AsyncAPI
This commit is contained in:
@@ -116,6 +116,7 @@ fn channels() -> Value {
|
||||
"SubscribedResponse": { "$ref": "#/components/messages/RtSubscribedResponse" },
|
||||
"ErrorResponse": { "$ref": "#/components/messages/RtErrorResponse" },
|
||||
"FolderEvent": { "$ref": "#/components/messages/RtFolderEventNotification" },
|
||||
"RevokedNotification": { "$ref": "#/components/messages/RtRevokedNotification" },
|
||||
}
|
||||
},
|
||||
"UserAuthz": {
|
||||
@@ -165,6 +166,14 @@ fn operations() -> Value {
|
||||
{ "$ref": "#/channels/Folder/messages/FolderEvent" }
|
||||
]
|
||||
},
|
||||
"receiveRevoked": {
|
||||
"action": "receive",
|
||||
"channel": { "$ref": "#/channels/Folder" },
|
||||
"summary": "Server-initiated eviction of a subscription (grant revoked, resource deleted, etc.). Client stops rendering the topic.",
|
||||
"messages": [
|
||||
{ "$ref": "#/channels/Folder/messages/RevokedNotification" }
|
||||
]
|
||||
},
|
||||
// Application-layer keepalive. Separate from the RFC 6455 Ping
|
||||
// control frame the server sends on `OXICLOUD_RT_WS_KEEPALIVE_SECONDS`
|
||||
// (which is transport-level and not modelled in AsyncAPI). This
|
||||
@@ -235,6 +244,12 @@ fn components() -> Value {
|
||||
"title": "Folder mutation event",
|
||||
"contentType": "application/json",
|
||||
"payload": { "$ref": "#/components/schemas/RtFolderEventBody" },
|
||||
},
|
||||
"RtRevokedNotification": {
|
||||
"name": "rt.revoked",
|
||||
"title": "Subscription evicted",
|
||||
"contentType": "application/json",
|
||||
"payload": { "$ref": "#/components/schemas/RtRevokedBody" },
|
||||
}
|
||||
},
|
||||
"schemas": {
|
||||
@@ -245,6 +260,7 @@ fn components() -> Value {
|
||||
"RtPongResponseBody": rpc_pong_response_schema(),
|
||||
"RtErrorResponseBody": rpc_error_response_schema(),
|
||||
"RtFolderEventBody": folder_event_notification_schema(),
|
||||
"RtRevokedBody": revoked_notification_schema(),
|
||||
"FileCreatedData": file_created_schema(),
|
||||
"FileRenamedData": file_renamed_schema(),
|
||||
"FileMovedData": file_moved_schema(),
|
||||
@@ -526,3 +542,36 @@ fn folder_deleted_schema() -> Value {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/// `rt.revoked` notification body — server tells the client that a
|
||||
/// specific subscription has been evicted. `topic` is the wire-form
|
||||
/// string the client originally subscribed to. `reason` is the stable
|
||||
/// eviction vocabulary — never repurpose an existing value (matches
|
||||
/// the AuthZ audit-line convention).
|
||||
fn revoked_notification_schema() -> Value {
|
||||
json!({
|
||||
"type": "object",
|
||||
"description": "JSON-RPC notification (no `id`). `method = \"rt.revoked\"`.",
|
||||
"required": ["jsonrpc", "method", "params"],
|
||||
"properties": {
|
||||
"jsonrpc": { "type": "string", "const": "2.0" },
|
||||
"method": { "type": "string", "const": "rt.revoked" },
|
||||
"params": {
|
||||
"type": "object",
|
||||
"required": ["topic", "reason"],
|
||||
"properties": {
|
||||
"topic": { "type": "string" },
|
||||
"reason": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"grant_revoked",
|
||||
"resource_deleted",
|
||||
"group_membership_lost",
|
||||
"admin_kick",
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user