misskey/src/server/api/endpoints.ts

122 lines
2.8 KiB
TypeScript
Raw Normal View History

2018-11-01 18:32:24 +00:00
import { Context } from 'cafy';
2018-07-15 18:43:36 +00:00
import * as path from 'path';
import * as glob from 'glob';
2019-02-24 08:28:51 +00:00
import { Schema } from '../../misc/schema';
2018-07-15 18:25:35 +00:00
export type Param = {
validator: Context<any>;
transform?: any;
default?: any;
2019-02-24 19:18:09 +00:00
deprecated?: boolean;
desc?: { [key: string]: string };
ref?: string;
};
2018-07-15 18:43:36 +00:00
export interface IEndpointMeta {
2018-11-01 18:32:24 +00:00
stability?: string; //'deprecated' | 'experimental' | 'stable';
2018-10-21 20:16:27 +00:00
2018-11-01 18:32:24 +00:00
desc?: { [key: string]: string };
2018-07-15 18:53:03 +00:00
tags?: string[];
2018-11-01 18:32:24 +00:00
params?: {
[key: string]: Param;
};
errors?: {
2018-11-01 18:32:24 +00:00
[key: string]: {
message: string;
code: string;
id: string;
2018-11-01 18:32:24 +00:00
};
};
2018-07-15 18:53:03 +00:00
2019-02-24 00:45:27 +00:00
res?: Schema;
2018-07-15 18:53:03 +00:00
2018-07-15 18:25:35 +00:00
/**
*
* false
*/
requireCredential?: boolean;
2018-08-13 16:05:58 +00:00
/**
* 使
*/
requireAdmin?: boolean;
2018-11-14 19:15:42 +00:00
/**
* 使
*/
requireModerator?: boolean;
2018-07-15 18:25:35 +00:00
/**
*
*
* withCredential false
*/
limit?: {
/**
*
*/
key?: string;
/**
* (ms)
* max
*/
duration?: number;
/**
* durationで指定した期間内にいくつまでリクエストできるのか
* duration
*/
max?: number;
/**
* (ms)
*/
minInterval?: number;
};
/**
*
* false
*/
2018-07-24 22:18:50 +00:00
requireFile?: boolean;
2018-07-15 18:25:35 +00:00
/**
*
* false
*/
secure?: boolean;
/**
*
*
*/
kind?: string;
}
2018-07-15 18:43:36 +00:00
export interface IEndpoint {
name: string;
exec: any;
meta: IEndpointMeta;
}
const files = glob.sync('**/*.js', {
cwd: path.resolve(__dirname + '/endpoints/')
});
const endpoints: IEndpoint[] = files.map(f => {
2018-09-01 14:12:51 +00:00
const ep = require(`./endpoints/${f}`);
2018-07-15 18:43:36 +00:00
return {
name: f.replace('.js', ''),
exec: ep.default,
meta: ep.meta || {}
};
});
export default endpoints;