chat.yakka.defs

yakka.chat

Documentation

channelReadState object

Viewer state, kept apart from the channel because it changes on every read while the channel rarely changes.

Properties

channelId string Required

No description available.

lastSeenSeq integer Required

No description available.

minimum: 0
latestSeq integer Required

No description available.

minimum: 0
mentions integer Optional

No description available.

minimum: 0
View raw schema
{
  "type": "object",
  "required": [
    "channelId",
    "lastSeenSeq",
    "latestSeq"
  ],
  "properties": {
    "mentions": {
      "type": "integer",
      "minimum": 0
    },
    "channelId": {
      "type": "string"
    },
    "latestSeq": {
      "type": "integer",
      "minimum": 0
    },
    "lastSeenSeq": {
      "type": "integer",
      "minimum": 0
    }
  },
  "description": "Viewer state, kept apart from the channel because it changes on every read while the channel rarely changes."
}
channelView object

A channel — one space of type `chat.yakka.channel` under its server (ADR 0002).

Properties

gated boolean Optional

Whether the mint policy restricts this space to a role rather than any member (ADR 0007). Open and gated channels are structurally identical; this drives affordances and nothing else.

group string Optional

Sidebar grouping label. Purely presentational.

maxGraphemes: 64 graphemes
id string Required

No description available.

kind string Required

No description available.

Known values: text, voice
name string Required

No description available.

maxGraphemes: 64 graphemes
serverDid string did Required

A decentralized identifier (DID).

spaceUri string at-uri Required

An AT Protocol URI (e.g., at://did:plc:xyz/app.bsky.feed.post/abc).

tid string Required

The space's skey — the channel's creation TID. Stable across renames, which is what makes it the durable URL form where `name` is the readable one.

topic string Optional

No description available.

maxGraphemes: 256 graphemes
View raw schema
{
  "type": "object",
  "required": [
    "id",
    "serverDid",
    "tid",
    "spaceUri",
    "name",
    "kind"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "tid": {
      "type": "string",
      "description": "The space's skey — the channel's creation TID. Stable across renames, which is what makes it the durable URL form where `name` is the readable one."
    },
    "kind": {
      "type": "string",
      "knownValues": [
        "text",
        "voice"
      ]
    },
    "name": {
      "type": "string",
      "maxGraphemes": 64
    },
    "gated": {
      "type": "boolean",
      "description": "Whether the mint policy restricts this space to a role rather than any member (ADR 0007). Open and gated channels are structurally identical; this drives affordances and nothing else."
    },
    "group": {
      "type": "string",
      "description": "Sidebar grouping label. Purely presentational.",
      "maxGraphemes": 64
    },
    "topic": {
      "type": "string",
      "maxGraphemes": 256
    },
    "spaceUri": {
      "type": "string",
      "format": "at-uri"
    },
    "serverDid": {
      "type": "string",
      "format": "did"
    }
  },
  "description": "A channel — one space of type `chat.yakka.channel` under its server (ADR 0002)."
}
memberView object

No description available.

Properties

avatar string uri Optional

A valid URI.

did string did Required

A decentralized identifier (DID).

displayName string Optional

No description available.

maxGraphemes: 64 graphemes
handle string handle Optional

What the DID document currently claims, or `handle.invalid`. Never a key — handles are reassigned.

pds string Optional

Host of the member's repo. Presentational; the DID is the identity.

roles array of ref#roleView Optional

No description available.

View raw schema
{
  "type": "object",
  "required": [
    "did"
  ],
  "properties": {
    "did": {
      "type": "string",
      "format": "did"
    },
    "pds": {
      "type": "string",
      "description": "Host of the member's repo. Presentational; the DID is the identity."
    },
    "roles": {
      "type": "array",
      "items": {
        "ref": "#roleView",
        "type": "ref"
      }
    },
    "avatar": {
      "type": "string",
      "format": "uri"
    },
    "handle": {
      "type": "string",
      "format": "handle",
      "description": "What the DID document currently claims, or `handle.invalid`. Never a key — handles are reassigned."
    },
    "displayName": {
      "type": "string",
      "maxGraphemes": 64
    }
  }
}
messageView object

A message as the appview believes it. Present here means ingested: it has a URI, a CID and a sequence. Provisional messages exist only on the socket (ADR 0011) and never in a query response.

Properties

authorDid string did Required

A decentralized identifier (DID).

body string Required

The message text. Named `body` here and `text` in the record: the record follows the atproto convention it shares with app.bsky.feed.post, and every layer downstream of ingest — this view, the column, the client — says `body`. The rename happens once, at ingest, rather than in every consumer.

maxLength: 10000 bytesmaxGraphemes: 2000 graphemes
cid string cid Required

Half of the reconcile key. A client matches a socket frame to a stored message on (uri, cid), never on either alone.

createdAt string datetime Required

The author's clock, for display only. Not an ordering key and not comparable across repos — `seq` is the order.

reactions array of ref#reactionView Optional

No description available.

replyTo string at-uri Optional

An AT Protocol URI (e.g., at://did:plc:xyz/app.bsky.feed.post/abc).

seq ref #viewSeq Required

No description available.

tombstone boolean Optional

The record was deleted and the sequence survives it (ADR 0010). A tombstone keeps its place so a permalink still scrolls to where the message was, which is a fact worth reporting rather than flattening into a 404.

uri string at-uri Required

An AT Protocol URI (e.g., at://did:plc:xyz/app.bsky.feed.post/abc).

View raw schema
{
  "type": "object",
  "required": [
    "uri",
    "cid",
    "seq",
    "authorDid",
    "body",
    "createdAt"
  ],
  "properties": {
    "cid": {
      "type": "string",
      "format": "cid",
      "description": "Half of the reconcile key. A client matches a socket frame to a stored message on (uri, cid), never on either alone."
    },
    "seq": {
      "ref": "#viewSeq",
      "type": "ref"
    },
    "uri": {
      "type": "string",
      "format": "at-uri"
    },
    "body": {
      "type": "string",
      "maxLength": 10000,
      "description": "The message text. Named `body` here and `text` in the record: the record follows the atproto convention it shares with app.bsky.feed.post, and every layer downstream of ingest — this view, the column, the client — says `body`. The rename happens once, at ingest, rather than in every consumer.",
      "maxGraphemes": 2000
    },
    "replyTo": {
      "type": "string",
      "format": "at-uri"
    },
    "authorDid": {
      "type": "string",
      "format": "did"
    },
    "createdAt": {
      "type": "string",
      "format": "datetime",
      "description": "The author's clock, for display only. Not an ordering key and not comparable across repos — `seq` is the order."
    },
    "reactions": {
      "type": "array",
      "items": {
        "ref": "#reactionView",
        "type": "ref"
      }
    },
    "tombstone": {
      "type": "boolean",
      "description": "The record was deleted and the sequence survives it (ADR 0010). A tombstone keeps its place so a permalink still scrolls to where the message was, which is a fact worth reporting rather than flattening into a 404."
    }
  },
  "description": "A message as the appview believes it. Present here means ingested: it has a URI, a CID and a sequence. Provisional messages exist only on the socket (ADR 0011) and never in a query response."
}
reactionView object

No description available.

Properties

count integer Required

No description available.

minimum: 1
emoji string Required

No description available.

maxGraphemes: 8 graphemes
mine boolean Required

Whether the viewer is among the reactors. Absent a viewer, always false.

View raw schema
{
  "type": "object",
  "required": [
    "emoji",
    "count",
    "mine"
  ],
  "properties": {
    "mine": {
      "type": "boolean",
      "description": "Whether the viewer is among the reactors. Absent a viewer, always false."
    },
    "count": {
      "type": "integer",
      "minimum": 1
    },
    "emoji": {
      "type": "string",
      "maxGraphemes": 8
    }
  }
}
roleView object

No description available.

Properties

color string Optional

No description available.

maxLength: 32 bytes
label string Required

No description available.

maxGraphemes: 64 graphemes
View raw schema
{
  "type": "object",
  "required": [
    "label"
  ],
  "properties": {
    "color": {
      "type": "string",
      "maxLength": 32
    },
    "label": {
      "type": "string",
      "maxGraphemes": 64
    }
  }
}
serverView object

No description available.

Properties

did string did Required

The server's own DID, which holds authority over its channel spaces (ADR 0003).

glyph string uri Optional

A valid URI.

initials string Optional

No description available.

maxGraphemes: 2 graphemes
memberCount integer Optional

No description available.

minimum: 0
name string Required

No description available.

maxGraphemes: 64 graphemes
tint string Optional

No description available.

maxLength: 32 bytes
View raw schema
{
  "type": "object",
  "required": [
    "did",
    "name"
  ],
  "properties": {
    "did": {
      "type": "string",
      "format": "did",
      "description": "The server's own DID, which holds authority over its channel spaces (ADR 0003)."
    },
    "name": {
      "type": "string",
      "maxGraphemes": 64
    },
    "tint": {
      "type": "string",
      "maxLength": 32
    },
    "glyph": {
      "type": "string",
      "format": "uri"
    },
    "initials": {
      "type": "string",
      "maxGraphemes": 2
    },
    "memberCount": {
      "type": "integer",
      "minimum": 0
    }
  }
}
timelinePage object

A window of a channel's timeline plus the cursors needed to extend it. Both cursors are view sequences; nothing else is ever a cursor.

Properties

channelId string Required

No description available.

hasMoreBefore boolean Required

No description available.

latestSeq integer Optional

Highest sequence held. Resume the socket from here (ADR 0011).

messages array of ref#messageView Required

No description available.

oldestSeq integer Optional

Lowest sequence held. Page backwards from here.

View raw schema
{
  "type": "object",
  "required": [
    "channelId",
    "messages",
    "hasMoreBefore"
  ],
  "properties": {
    "messages": {
      "type": "array",
      "items": {
        "ref": "#messageView",
        "type": "ref"
      }
    },
    "channelId": {
      "type": "string"
    },
    "latestSeq": {
      "type": "integer",
      "description": "Highest sequence held. Resume the socket from here (ADR 0011)."
    },
    "oldestSeq": {
      "type": "integer",
      "description": "Lowest sequence held. Page backwards from here."
    },
    "hasMoreBefore": {
      "type": "boolean"
    }
  },
  "description": "A window of a channel's timeline plus the cursors needed to extend it. Both cursors are view sequences; nothing else is ever a cursor."
}
viewSeq integer

A per-space, strictly increasing sequence assigned by the appview at ingest (ADR 0012). The ordering authority for a timeline, and the only cursor a client is ever given. Never a database row id, and never comparable across spaces.

Constraintsminimum: 1
View raw schema
{
  "type": "integer",
  "minimum": 1,
  "description": "A per-space, strictly increasing sequence assigned by the appview at ingest (ADR 0012). The ordering authority for a timeline, and the only cursor a client is ever given. Never a database row id, and never comparable across spaces."
}

Lexicon Garden

@