Skip to content
Snippets Groups Projects
swagger.js 1.17 KiB
Newer Older
'use strict'

Tosuke's avatar
Tosuke committed
const swaggerJSDoc = require('swagger-jsdoc');
const fs = require('fs');
const yaml = require('js-yaml');
Tosuke's avatar
Tosuke committed

const apiRoot = './src/api/endpoints';
const files = [
  'users.js',
  'auth/session/generate.js',
  'auth/session/userkey.js',
Tosuke's avatar
Tosuke committed
];

const errorDefinition = {
  'type': 'object',
  'properties':{
    'error': {
      'type': 'string',
      'description': 'Error message'
    }
  }
} 

var options = {
  swaggerDefinition: {
    swagger: '2.0',
    info: {
      title: 'Misskey API',
      version: 'aoi',
    },
    host: 'api.misskey.xyz',
    schemes: ['https'],
Tosuke's avatar
Tosuke committed
    consumes: [
      'application/x-www-form-urlencoded'
    ],
    produces: [
      'application/json'
    ]
  },
  apis: []
};
options.apis = files.map(c => {return `${apiRoot}/${c}`;});

if(fs.existsSync('.config/config.yml')){
  var config = yaml.safeLoad(fs.readFileSync('./.config/config.yml', 'utf8'));
Tosuke's avatar
Tosuke committed
  options.swaggerDefinition.host = `api.${config.url}`;
  options.swaggerDefinition.schemes = config.https.enable ? ['https'] : ['http'];
}

Tosuke's avatar
Tosuke committed
var swaggerSpec = swaggerJSDoc(options);
swaggerSpec.definitions.Error = errorDefinition;

fs.writeFileSync('api-docs.json', JSON.stringify(swaggerSpec));