placeStreamLivestream top-level constant

Map<String, dynamic> const placeStreamLivestream

place.stream.livestream

Implementation

const placeStreamLivestream = <String, dynamic>{
  "lexicon": 1,
  "id": "place.stream.livestream",
  "defs": {
    "main": {
      "type": "record",
      "description": "Record announcing a livestream is happening",
      "key": "tid",
      "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": {
            "type": "ref",
            "description": "The post that announced this livestream.",
            "ref": "com.atproto.repo.strongRef",
          },
          "tags": {
            "type": "array",
            "description":
                "Freeform tags for this stream. Each tag must be alphanumeric (a-z, A-Z, 0-9) plus colon. Tags with colons indicate a specific tag group (e.g. 'lang:en' indicates the stream's primary language).",
            "items": {"type": "string", "maxLength": 640, "maxGraphemes": 64},
            "maxLength": 10,
          },
          "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",
            "description":
                "The title of the livestream, as it will be announced to followers.",
            "maxLength": 1400,
            "maxGraphemes": 140,
          },
          "endedAt": {
            "type": "string",
            "format": "datetime",
            "description":
                "Client-declared timestamp when this livestream ended. Ended livestreams are not supposed to start up again.",
          },
          "activity": {
            "type": "union",
            "description": "The game or activity being streamed.",
            "refs": [
              "place.stream.defs#activityGame",
              "place.stream.defs#activityLabel",
            ],
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description":
                "Client-declared timestamp when this livestream started.",
          },
          "lastSeenAt": {
            "type": "string",
            "format": "datetime",
            "description":
                "Client-declared timestamp when this livestream was last seen by the Streamplace station.",
          },
          "canonicalUrl": {
            "type": "string",
            "format": "uri",
            "description":
                "The primary URL where this livestream can be viewed, if available.",
          },
          "idleTimeoutSeconds": {
            "type": "integer",
            "description":
                "Time in seconds after which this livestream should be automatically ended if idle. Zero means no timeout.",
          },
          "notificationSettings": {
            "type": "ref",
            "ref": "place.stream.livestream#notificationSettings",
          },
        },
      },
    },
    "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": {
          "type": "ref",
          "ref": "app.bsky.actor.defs#profileViewBasic",
        },
        "record": {"type": "unknown"},
        "indexedAt": {"type": "string", "format": "datetime"},
        "viewerCount": {
          "type": "ref",
          "description":
              "The number of viewers watching this livestream. Use when you can't reasonably use #viewerCount directly.",
          "ref": "#viewerCount",
        },
      },
    },
    "teleportArrival": {
      "type": "object",
      "required": ["teleportUri", "source", "viewerCount", "startsAt"],
      "properties": {
        "source": {
          "type": "ref",
          "description": "The streamer who is teleporting their viewers here",
          "ref": "app.bsky.actor.defs#profileViewBasic",
        },
        "startsAt": {
          "type": "string",
          "format": "datetime",
          "description": "When this teleport started",
        },
        "chatProfile": {
          "type": "ref",
          "description": "The chat profile of the source streamer",
          "ref": "place.stream.chat.profile",
        },
        "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": {
          "type": "string",
          "description": "Why this teleport was canceled",
          "enum": ["deleted", "denied", "expired"],
        },
        "teleportUri": {
          "type": "string",
          "format": "at-uri",
          "description": "The URI of the teleport record that was canceled",
        },
      },
    },
    "streamplaceAnything": {
      "type": "object",
      "required": ["livestream"],
      "properties": {
        "livestream": {
          "type": "union",
          "refs": [
            "#livestreamView",
            "#viewerCount",
            "#teleportArrival",
            "#teleportCanceled",
            "place.stream.defs#blockView",
            "place.stream.defs#renditions",
            "place.stream.defs#rendition",
            "place.stream.chat.defs#messageView",
            "place.stream.chat.defs#pinnedRecordView",
          ],
        },
      },
    },
    "notificationSettings": {
      "type": "object",
      "properties": {
        "pushNotification": {
          "type": "boolean",
          "description":
              "Whether this livestream should trigger a push notification to followers.",
        },
      },
    },
  },
};