{
  "lexicon": 1,
  "id": "chat.bsky.group.defs",
  "defs": {
    "linkEnabledStatus": {
      "type": "string",
      "knownValues": ["enabled", "disabled"]
    },
    "joinRule": {
      "type": "string",
      "knownValues": ["anyone", "followedByOwner"]
    },
    "joinLinkView": {
      "description": "Join link view to be used within a group view, so the convo is surrounding, not specified inside this view.",
      "type": "object",
      "required": [
        "code",
        "enabledStatus",
        "requireApproval",
        "joinRule",
        "createdAt"
      ],
      "properties": {
        "code": { "type": "string" },
        "enabledStatus": {
          "type": "ref",
          "ref": "#linkEnabledStatus"
        },
        "requireApproval": { "type": "boolean" },
        "joinRule": { "type": "ref", "ref": "#joinRule" },
        "createdAt": { "type": "string", "format": "datetime" }
      }
    },
    "joinLinkPreviewView": {
      "description": "Preview that can be shown in feeds, including to unauthenticated viewers.",
      "type": "object",
      "required": [
        "convoId",
        "code",
        "name",
        "owner",
        "memberCount",
        "memberLimit",
        "requireApproval",
        "joinRule"
      ],
      "properties": {
        "convoId": { "type": "string" },
        "code": { "type": "string" },
        "name": { "type": "string" },
        "owner": {
          "type": "ref",
          "ref": "chat.bsky.actor.defs#profileViewBasic"
        },
        "memberCount": { "type": "integer" },
        "memberLimit": { "type": "integer" },
        "requireApproval": { "type": "boolean" },
        "joinRule": { "type": "ref", "ref": "#joinRule" },
        "convo": {
          "type": "ref",
          "ref": "chat.bsky.convo.defs#convoView",
          "description": "Present only if the request is authenticated and the user is a member of the group."
        },
        "viewer": {
          "type": "ref",
          "ref": "#joinLinkViewerState"
        }
      }
    },
    "disabledJoinLinkPreviewView": {
      "description": "Preview for a disabled join link. Carries only the code so clients can correlate with the input and render a disabled state.",
      "type": "object",
      "required": ["code"],
      "properties": {
        "code": { "type": "string" }
      }
    },
    "invalidJoinLinkPreviewView": {
      "description": "Preview for a join link code that does not map to an existing link. Carries only the code so clients can correlate with the input and render an invalid state.",
      "type": "object",
      "required": ["code"],
      "properties": {
        "code": { "type": "string" }
      }
    },
    "joinLinkViewerState": {
      "type": "object",
      "properties": {
        "requestedAt": { "type": "string", "format": "datetime" }
      }
    },
    "joinRequestView": {
      "description": "A join request from the perspective of the group owner.",
      "type": "object",
      "required": ["convoId", "requestedBy", "requestedAt"],
      "properties": {
        "convoId": { "type": "string" },
        "requestedBy": {
          "type": "ref",
          "ref": "chat.bsky.actor.defs#profileViewBasic"
        },
        "requestedAt": { "type": "string", "format": "datetime" }
      }
    },
    "joinRequestConvoView": {
      "description": "A join request from the perspective of the requester, including enough group context to render the request in a list (e.g. group name, owner, member count).",
      "type": "object",
      "required": [
        "convoId",
        "name",
        "owner",
        "memberCount",
        "memberLimit",
        "viewer"
      ],
      "properties": {
        "convoId": { "type": "string" },
        "name": { "type": "string" },
        "owner": {
          "type": "ref",
          "ref": "chat.bsky.actor.defs#profileViewBasic"
        },
        "memberCount": { "type": "integer" },
        "memberLimit": { "type": "integer" },
        "viewer": {
          "type": "ref",
          "ref": "#joinLinkViewerState"
        }
      }
    }
  }
}

