asyncapi: '1.2.0'
info:
  title: Gitter Streaming API
  version: '1.0.0'

servers:
  - url: https://stream.gitter.im/v1/rooms/{roomId}/{resource}
    scheme: https
    schemeVersion: '1.1'
    variables:
      roomId:
        description: Id of the Gitter room.
      resource:
        description: The resource to consume.
        enum:
          - chatMessages
          - events

security:
  - httpBearerToken: []

stream:
  framing:
    type: 'chunked'
    delimiter: '\r\n'
  read:
    - $ref: '#/components/messages/chatMessage'
    - $ref: '#/components/messages/heartbeat'

components:
  securitySchemes:
    httpBearerToken:
      type: http
      scheme: bearer
  messages:
    chatMessage:
      summary: >-
        A message represents an individual chat message sent to a room.
        They are a sub-resource of a room.
      payload:
        type: object
        properties:
          id:
            type: string
            description: ID of the message.
          text:
            type: string
            description: Original message in plain-text/markdown.
          html:
            type: string
            description: HTML formatted message.
          sent:
            type: string
            format: date-time
            description: ISO formatted date of the message.
          fromUser:
            type: object
            description: User that sent the message.
            properties:
              id:
                type: string
                description: Gitter User ID.
              username:
                type: string
                description: Gitter/GitHub username.
              displayName:
                type: string
                description: Gitter/GitHub user real name.
              url:
                type: string
                description: Path to the user on Gitter.
              avatarUrl:
                type: string
                format: uri
                description: User avatar URI.
              avatarUrlSmall:
                type: string
                format: uri
                description: User avatar URI (small).
              avatarUrlMedium:
                type: string
                format: uri
                description: User avatar URI (medium).
              v:
                type: number
                description: Version.
              gv:
                type: string
                description: Stands for "Gravatar version" and is used for cache busting.
          unread:
            type: boolean
            description: Boolean that indicates if the current user has read the message.
          readBy:
            type: number
            description: Number of users that have read the message.
          urls:
            type: array
            description: List of URLs present in the message.
            items:
              type: string
              format: uri
          mentions:
            type: array
            description: List of @Mentions in the message.
            items:
              type: object
              properties:
                screenName:
                  type: string
                userId:
                  type: string
                userIds:
                  type: array
                  items:
                    type: string
          issues:
            type: array
            description: 'List of #Issues referenced in the message.'
            items:
              type: object
              properties:
                number:
                  type: string
          meta:
            type: array
            description: Metadata. This is currently not used for anything.
            items: {}
          v:
            type: number
            description: Version.
          gv:
            type: string
            description: Stands for "Gravatar version" and is used for cache busting.

    heartbeat:
      summary: Its purpose is to keep the connection alive.
      payload:
        type: string
        enum: ["\r\n"]
