openapi: 3.1.0
info:
  title: DeafAUTH - Identity Cortex
  version: 1.0.0
  description: Deaf-first authentication and identity layer=.

servers:
  - url: https://api.mbtq.dev/auth

security:
  - DeafAuthToken: []

components:
  securitySchemes:
    DeafAuthToken:
      type: http
      scheme: bearer
      bearerFormat: JWT

  schemas:
    User:
      type: object
      properties:
        id: { type: string }
        email: { type: string }
        createdAt: { type: string, format: date-time }

    AuthToken:
      type: object
      properties:
        accessToken: { type: string }
        refreshToken: { type: string }
        expiresIn: { type: integer }

    Error:
      type: object
      properties:
        error: { type: string }

paths:
  /register:
    post:
      tags: [Auth]
      summary: Register new user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [email, password]
              properties:
                email: { type: string }
                password: { type: string }
      responses:
        "201":
          description: User registered
          content:
            application/json:
              schema: { $ref: "#/components/schemas/User" }

  /login:
    post:
      tags: [Auth]
      summary: Login user
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [email, password]
              properties:
                email: { type: string }
                password: { type: string }
      responses:
        "200":
          description: Auth tokens
          content:
            application/json:
              schema: { $ref: "#/components/schemas/AuthToken" }

  /verify:
    get:
      tags: [Auth]
      summary: Verify a token
      responses:
        "200":
          description: Token is valid
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid: { type: boolean }

  /refresh:
    post:
      tags: [Auth]
      summary: Refresh token pair
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [refreshToken]
              properties:
                refreshToken: { type: string }
      responses:
        "200":
          description: Refreshed auth tokens
          content:
            application/json:
              schema: { $ref: "#/components/schemas/AuthToken" }
