{
"id": "place.stream.livestream",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"title",
"createdAt"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The URL where this stream can be found. This is primarily a hint for other Streamplace nodes to locate and replicate the stream."
},
"post": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "The post that announced this livestream."
},
"agent": {
"type": "string",
"description": "The source of the livestream, if available, in a User Agent format: `<product> / <product-version> <comment>` e.g. Streamplace/0.7.5 iOS"
},
"thumb": {
"type": "blob",
"accept": [
"image/*"
],
"maxSize": 1000000
},
"title": {
"type": "string",
"maxLength": 1400,
"description": "The title of the livestream, as it will be announced to followers.",
"maxGraphemes": 140
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this livestream started."
},
"canonicalUrl": {
"type": "string",
"format": "uri",
"description": "The primary URL where this livestream can be viewed, if available."
},
"notificationSettings": {
"ref": "place.stream.livestream#notificationSettings",
"type": "ref"
}
}
},
"description": "Record announcing a livestream is happening"
},
"viewerCount": {
"type": "object",
"required": [
"count"
],
"properties": {
"count": {
"type": "integer"
}
}
},
"livestreamView": {
"type": "object",
"required": [
"uri",
"cid",
"author",
"record",
"indexedAt"
],
"properties": {
"cid": {
"type": "string",
"format": "cid"
},
"uri": {
"type": "string",
"format": "at-uri"
},
"author": {
"ref": "app.bsky.actor.defs#profileViewBasic",
"type": "ref"
},
"record": {
"type": "unknown"
},
"indexedAt": {
"type": "string",
"format": "datetime"
},
"viewerCount": {
"ref": "#viewerCount",
"type": "ref",
"description": "The number of viewers watching this livestream. Use when you can't reasonably use #viewerCount directly."
}
}
},
"teleportArrival": {
"type": "object",
"required": [
"teleportUri",
"source",
"viewerCount",
"startsAt"
],
"properties": {
"source": {
"ref": "app.bsky.actor.defs#profileViewBasic",
"type": "ref",
"description": "The streamer who is teleporting their viewers here"
},
"startsAt": {
"type": "string",
"format": "datetime",
"description": "When this teleport started"
},
"chatProfile": {
"ref": "place.stream.chat.profile",
"type": "ref",
"description": "The chat profile of the source streamer"
},
"teleportUri": {
"type": "string",
"format": "at-uri",
"description": "The URI of the teleport record"
},
"viewerCount": {
"type": "integer",
"description": "How many viewers are arriving from this teleport"
}
}
},
"teleportCanceled": {
"type": "object",
"required": [
"teleportUri",
"reason"
],
"properties": {
"reason": {
"enum": [
"deleted",
"denied",
"expired"
],
"type": "string",
"description": "Why this teleport was canceled"
},
"teleportUri": {
"type": "string",
"format": "at-uri",
"description": "The URI of the teleport record that was canceled"
}
}
},
"streamplaceAnything": {
"type": "object",
"required": [
"livestream"
],
"properties": {
"livestream": {
"refs": [
"#livestreamView",
"#viewerCount",
"#teleportArrival",
"#teleportCanceled",
"place.stream.defs#blockView",
"place.stream.defs#renditions",
"place.stream.defs#rendition",
"place.stream.chat.defs#messageView"
],
"type": "union"
}
}
},
"notificationSettings": {
"type": "object",
"properties": {
"pushNotification": {
"type": "boolean",
"description": "Whether this livestream should trigger a push notification to followers."
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}