{
"id": "social.colibri.sync.subscribeEvents",
"defs": {
"ack": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"const": "ack"
}
},
"description": "Sent in response to a heartbeat message."
},
"main": {
"type": "subscription",
"errors": [
{
"name": "AuthRequired"
}
],
"message": {
"schema": {
"refs": [
"lex:social.colibri.sync.subscribeEvents#ack",
"lex:social.colibri.sync.subscribeEvents#communityEvent",
"lex:social.colibri.sync.subscribeEvents#memberEvent",
"lex:social.colibri.sync.subscribeEvents#categoryEvent",
"lex:social.colibri.sync.subscribeEvents#channelEvent",
"lex:social.colibri.sync.subscribeEvents#messageEvent",
"lex:social.colibri.sync.subscribeEvents#reactionEvent",
"lex:social.colibri.sync.subscribeEvents#userEvent",
"lex:social.colibri.sync.subscribeEvents#typingEvent",
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
],
"type": "union"
}
},
"description": "Opens a WebSocket stream that transmits relevant events for the authenticated user."
},
"userEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#userEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "user_event"
}
},
"description": "Sent when a known user has updated their profile or Colibri status."
},
"userStatus": {
"type": "object",
"required": [
"state",
"text"
],
"properties": {
"text": {
"type": "string"
},
"emoji": {
"type": "string"
},
"state": {
"type": "string",
"knownValues": [
"online",
"away",
"dnd",
"offline"
]
}
}
},
"humEnvelope": {
"type": "object",
"required": [
"origin",
"id",
"ttl",
"subject",
"community",
"event"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"description": "Unique id for this Hum, used by receivers to dedup across relay paths."
},
"ttl": {
"type": "integer",
"maximum": 8,
"minimum": 0,
"description": "Remaining relay hops. Decremented on each forward; a Hum at ttl 0 is delivered locally but never relayed."
},
"event": {
"refs": [
"lex:social.colibri.sync.subscribeEvents#userEvent",
"lex:social.colibri.sync.subscribeEvents#typingEvent",
"lex:social.colibri.sync.subscribeEvents#voicePresenceEvent"
],
"type": "union",
"description": "Ephemeral event payload. Only off-protocol types are permitted."
},
"origin": {
"type": "string",
"format": "did",
"description": "DID of the AppView that first emitted this Hum."
},
"subject": {
"type": "string",
"format": "did",
"description": "The user this event is about. Receiver MUST verify origin equals subject's declared presenceService before trusting or relaying."
},
"community": {
"type": "string",
"format": "at-uri",
"description": "Community the event is scoped to. Receiver relays to local clients only if they are members of this community."
}
},
"description": "An off-protocol event relayed between AppViews. The authenticated sender (inter-service auth JWT: aud = receiving AppView did:web, lxm = social.colibri.sync.sendHum) is the origin of record; `origin` is echoed for relay/loop control and MUST match the JWT issuer. Only off-protocol event types are permitted — on-protocol events are never carried by a Hum and are derived from the firehose instead."
},
"memberEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#memberEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "member_event"
}
},
"description": "Sent when a member has joined or left a community."
},
"typingEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#typingEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "typing_event"
}
},
"description": "Sent when a user is typing in a channel the client is viewing."
},
"userProfile": {
"type": "object",
"required": [
"handle"
],
"properties": {
"avatar": {
"type": "blob"
},
"banner": {
"type": "blob"
},
"handle": {
"type": "string",
"format": "handle"
},
"description": {
"type": "string"
},
"displayName": {
"type": "string"
}
}
},
"channelEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#channelEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "channel_event"
}
},
"description": "Sent when a channel has been created, updated, or deleted."
},
"messageEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#messageEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "message_event"
}
},
"description": "Sent when a message has been sent, edited, or deleted."
},
"categoryEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#categoryEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "category_event"
}
},
"description": "Sent when a category has been created, updated, or deleted."
},
"reactionEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#reactionEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "reaction_event"
}
},
"description": "Sent when a reaction has been added to or removed from a message."
},
"userEventData": {
"type": "object",
"required": [
"did",
"profile"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"status": {
"ref": "lex:social.colibri.sync.subscribeEvents#userStatus",
"type": "ref"
},
"profile": {
"ref": "lex:social.colibri.sync.subscribeEvents#userProfile",
"type": "ref"
}
}
},
"communityEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#communityEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "community_event"
}
},
"description": "Sent when a community has been updated or deleted."
},
"memberEventData": {
"type": "object",
"required": [
"event",
"community",
"membership"
],
"properties": {
"event": {
"type": "string",
"knownValues": [
"join",
"leave"
]
},
"community": {
"type": "string",
"format": "at-uri"
},
"membership": {
"type": "string",
"format": "at-uri"
}
}
},
"typingEventData": {
"type": "object",
"required": [
"event",
"channel",
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"event": {
"type": "string",
"knownValues": [
"start",
"stop"
]
},
"channel": {
"type": "string",
"format": "at-uri"
}
}
},
"channelEventData": {
"type": "object",
"required": [
"event",
"uri",
"community"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"event": {
"type": "string",
"knownValues": [
"upsert",
"delete"
]
},
"category": {
"type": "string",
"format": "at-uri"
},
"community": {
"type": "string",
"format": "at-uri"
},
"description": {
"type": "string"
}
}
},
"messageEventData": {
"type": "object",
"required": [
"event",
"uri",
"channel"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"text": {
"type": "string"
},
"event": {
"type": "string",
"knownValues": [
"upsert",
"delete"
]
},
"edited": {
"type": "boolean"
},
"facets": {
"type": "array",
"items": {
"ref": "lex:social.colibri.richtext.facet",
"type": "ref"
}
},
"parent": {
"type": "string",
"format": "at-uri"
},
"channel": {
"type": "string",
"format": "at-uri"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"indexedAt": {
"type": "string",
"format": "datetime"
},
"attachments": {
"type": "array",
"items": {
"type": "blob"
}
}
}
},
"categoryEventData": {
"type": "object",
"required": [
"event",
"uri",
"community"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"name": {
"type": "string"
},
"event": {
"type": "string",
"knownValues": [
"upsert",
"delete"
]
},
"community": {
"type": "string",
"format": "at-uri"
},
"channelOrder": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
}
}
},
"reactionEventData": {
"type": "object",
"required": [
"event",
"uri",
"emoji",
"target",
"channel"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"emoji": {
"type": "string"
},
"event": {
"type": "string",
"knownValues": [
"added",
"removed"
]
},
"target": {
"type": "string",
"format": "at-uri"
},
"channel": {
"type": "string",
"format": "at-uri"
}
}
},
"communityEventData": {
"type": "object",
"required": [
"event",
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"name": {
"type": "string"
},
"event": {
"type": "string",
"knownValues": [
"upsert",
"delete"
]
},
"picture": {
"type": "blob"
},
"description": {
"type": "string"
},
"categoryOrder": {
"type": "array",
"items": {
"type": "string",
"format": "at-uri"
}
}
}
},
"voicePresenceEvent": {
"type": "object",
"required": [
"type",
"data"
],
"properties": {
"data": {
"ref": "lex:social.colibri.sync.subscribeEvents#voicePresenceEventData",
"type": "ref"
},
"type": {
"type": "string",
"const": "voice_presence_event"
}
},
"description": "Sent when a user joins or leaves a voice channel."
},
"voicePresenceEventData": {
"type": "object",
"required": [
"event",
"channel",
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"event": {
"type": "string",
"knownValues": [
"join",
"leave"
]
},
"channel": {
"type": "string",
"format": "at-uri"
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"revision": 1
}