# All files / config swagger.js

0% Statements 0/6
0% Branches 0/2
0% Functions 0/1
0% Lines 0/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65

     /**
     * Swagger/OpenAPI Configuration
     * API documentation setup
     *
     * @module config/swagger
     */

    const swaggerJsdoc = require('swagger-jsdoc');
    const swaggerUi = require('swagger-ui-express');

    const options = {
      swaggerDefinition: {
        info: {
          title: 'Misayan SaaS API',
          version: '1.0.0',
          description: 'Multi-tenant WhatsApp Business SaaS Platform API Documentation',
          contact: {
            name: 'Misayan Support',
            email: 'support@saas.misayan.cloud',
          },
          license: {
            name: 'Commercial',
          },
        },
        host: process.env.APP_URL ? process.env.APP_URL.replace(/^https?:\/\//, '') : 'localhost:3000',
        basePath: '/',
        schemes: ['http', 'https'],
        securityDefinitions: {
          bearerAuth: {
            type: 'apiKey',
            name: 'Authorization',
            in: 'header',
            description: 'JWT Authorization header using the Bearer scheme. Example: "Bearer {token}"',
          },
          tenantId: {
            type: 'apiKey',
            in: 'header',
            name: 'X-Tenant-ID',
          },
        },
        security: [
          {
            bearerAuth: [],
          },
        ],
      },
      apis: ['./routes/*.js', './controllers/*.js'],
    };

    const specs = swaggerJsdoc(options);

    function setupSwagger(app) {
      app.use(
        '/api-docs',
        swaggerUi.serve,
        swaggerUi.setup(specs, {
          explorer: true,
          customCss: '.swagger-ui .topbar { display: none }',
          customSiteTitle: 'Misayan SaaS API Documentation',
        })
      );
    }

    module.exports = { setupSwagger, specs };