{
  "name": "sockets.signal",
  "description": "Pushes a SignalR message to clients subscribed to the channel; use to broadcast events from server to browsers",
  "signature": {
    "input": {
      "kind": "socket-channel",
      "description": "Socket channel to publish",
      "required": true,
      "mode": "ValueOrExpression"
    },
    "children": {
      "args": {
        "type": "lambda",
        "kind": "socket-args",
        "description": "Payload serialized to JSON and sent with the socket message",
        "required": true,
        "mode": "ValueOrExpression",
        "cardinality": "ExactlyOne",
        "role": "Payload",
        "evaluation": "UnwrapDescendants",
        "projection": "StructuredTree"
      },
      "roles": {
        "type": "string",
        "kind": "role",
        "description": "Comma-separated roles receiving the message",
        "required": false,
        "mode": "ValueOrExpression",
        "cardinality": "ZeroOrOne",
        "role": "Option",
        "projection": "Value"
      },
      "users": {
        "type": "string",
        "kind": "username",
        "description": "Comma-separated users receiving the message",
        "required": false,
        "mode": "ValueOrExpression",
        "cardinality": "ZeroOrOne",
        "role": "Option",
        "projection": "Value"
      },
      "groups": {
        "type": "string",
        "kind": "socket-group",
        "description": "Comma-separated groups receiving the message",
        "required": false,
        "mode": "ValueOrExpression",
        "cardinality": "ZeroOrOne",
        "role": "Option",
        "projection": "Value"
      },
      "clients": {
        "type": "string",
        "kind": "socket-connection-id",
        "description": "Comma-separated connection IDs receiving the message",
        "required": false,
        "mode": "ValueOrExpression",
        "cardinality": "ZeroOrOne",
        "role": "Option",
        "projection": "Value"
      }
    }
  }
}
