230 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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));
 | |
| 
 | 
