asyncapi: 3.0.0
id: 'tag:stream.gitter.im,2022:api'
info:
  title: Gitter Streaming API
  version: 1.0.0
servers:
  production:
    host: stream.gitter.im
    pathname: /v1
    protocol: https
    protocolVersion: '1.1'
    security:
      - $ref: '#/components/securitySchemes/httpBearerToken'
channels:
  rooms:
    address: '/rooms/{roomId}/{resource}'
    messages:
      chatMessage:
        $ref: '#/components/messages/chatMessage'
      heartbeat:
        $ref: '#/components/messages/heartbeat'
    parameters:
      roomId:
        description: Id of the Gitter room.
        examples:
          - 53307860c3599d1de448e19d
      resource:
        enum:
          - chatMessages
          - events
        description: The resource to consume.
operations:
  sendRoomInfo:
    action: send
    channel:
      $ref: '#/channels/rooms'
    bindings:
      http:
        method: POST
    messages:
      - $ref: '#/channels/rooms/messages/chatMessage'
      - $ref: '#/channels/rooms/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:
        schemaFormat: application/schema+yaml;version=draft-07
        schema:
          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.
      bindings:
        http:
          headers:
            type: object
            properties:
              Transfer-Encoding: 
                type: string
                const: chunked
              Trailer: 
                type: string
                const: \r\n
    heartbeat:
      summary: Its purpose is to keep the connection alive.
      payload:
        schemaFormat: application/schema+yaml;version=draft-07
        schema:
          type: string
          enum:
            - "\r\n"
      bindings:
        http:
          headers:
            type: object
            properties:
              Transfer-Encoding: 
                type: string
                const: chunked
              Trailer: 
                type: string
                const: \r\n