'use strict' const swaggerJSDoc = require('swagger-jsdoc'); const fs = require('fs'); const yaml = require('js-yaml'); const apiRoot = './src/api/endpoints'; const files = [ 'meta.js', //app 'app/show.js', 'app/create.js', 'app/name_id/available.js', //auth 'auth/accept.js', //auth/session 'auth/session/generate.js', 'auth/session/show.js', 'auth/session/userkey.js', ]; const defaultSwagger = { "swagger": "2.0", "info": { "title": "Misskey API", "version": "aoi" }, "host": "api.misskey.xyz", "schemes": [ "https" ], "consumes": [ "application/x-www-form-urlencoded" ], "produces": [ "application/json" ], "parameters": { "AccessToken": { "name": "i", "description": "Access Token", "in": "formData", "required": true, "type": "string" }, "NativeToken": { "name": "i", "description": "Native Access Token", "in": "formData", "required": true, "type": "string", "pattern": "^\!.+" } }, "definitions": { "Error": { "type": "object", "properties": { "error": { "type": "string", "description": "Error message" } } }, "User": { "type": "object", "required": [ "created_at", "followers_count", "following_count", "id", "liked_count", "likes_count", "name", "posts_count", "username" ], "properties": { "avatar_id": { "type": "string", "description": "アバターに設定しているドライブのファイルのID" }, "avatar_url": { "type": "string", "description": "アバターURL" }, "banner_id": { "type": "string", "description": "バナーに設定しているドライブのファイルのID" }, "banner_url": { "type": "string", "description": "バナーURL" }, "bio": { "type": "string", "description": "プロフィール" }, "birthday": { "type": "string", "format": "date", "description": "誕生日" }, "created_at": { "type": "string", "format": "date-time", "description": "アカウント作成日時" }, "drive_capacity": { "type": "integer", "description": "ドライブの最大容量" }, "followers_count": { "type": "integer", "description": "フォロワー数" }, "following_count": { "type": "integer", "description": "フォロー数" }, "id": { "type": "string", "description": "ユーザーID" }, "is_followed": { "type": "boolean", "description": "フォローされているか" }, "is_following": { "type": "boolean", "description": "フォローしているか" }, "liked_count": { "type": "integer", "description": "投稿にいいねされた数" }, "likes_count": { "type": "integer", "description": "投稿にいいねした数" }, "location": { "type": "string", "description": "場所" }, "name": { "type": "string", "description": "ニックネーム" }, "posts_count": { "type": "integer", "description": "投稿数" }, "username": { "type": "string", "description": "ユーザー名" } } }, "Application": { "type": "object", "properties": { "created_at": { "type": "string", "format": "date-time", "description": "アプリケーションの作成日時" }, "user_id": { "type": "string", "description": "アプリケーションを作成したユーザーのID" }, "name": { "type": "string", "description": "アプリケーションの名前" }, "name_id": { "type": "string", "description": "アプリケーションのユニークな名前" }, "description": { "type": "string", "description": "アプリケーションの説明" }, "permission": { "type": "array", "items": { "type": "string" }, "description": "アプリケーションの持つ権限一覧" }, "callback_url": { "type": "string", "description": "コールバックURL" }, "id": { "type": "string", "description": "アプリケーションID" }, "icon_url": { "type": "string", "description": "アプリケーションのアイコンのURL" } } } }, "securityDefinitions": {}, "tags": [] }; var options = { swaggerDefinition: defaultSwagger, 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')); options.swaggerDefinition.host = `api.${config.url.match(/\:\/\/(.+)$/)[1]}`; options.swaggerDefinition.schemes = config.https.enable ? ['https'] : ['http']; } var swaggerSpec = swaggerJSDoc(options); fs.writeFileSync('api-docs.json', JSON.stringify(swaggerSpec));