101 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import * as Router from '@koa/router';
 | 
						|
import config from '../config';
 | 
						|
import { fetchMeta } from '../misc/fetch-meta';
 | 
						|
import { Users } from '../models';
 | 
						|
// import User from '../models/user';
 | 
						|
// import Note from '../models/note';
 | 
						|
 | 
						|
const router = new Router();
 | 
						|
 | 
						|
const nodeinfo2_1path = '/nodeinfo/2.1';
 | 
						|
const nodeinfo2_0path = '/nodeinfo/2.0';
 | 
						|
 | 
						|
export const links = [/* (awaiting release) {
 | 
						|
	rel: 'http://nodeinfo.diaspora.software/ns/schema/2.1',
 | 
						|
	href: config.url + nodeinfo2_1path
 | 
						|
}, */{
 | 
						|
	rel: 'http://nodeinfo.diaspora.software/ns/schema/2.0',
 | 
						|
	href: config.url + nodeinfo2_0path
 | 
						|
}];
 | 
						|
 | 
						|
const nodeinfo2 = async () => {
 | 
						|
	const [
 | 
						|
		meta,
 | 
						|
		// total,
 | 
						|
		// activeHalfyear,
 | 
						|
		// activeMonth,
 | 
						|
		// localPosts,
 | 
						|
		// localComments
 | 
						|
	] = await Promise.all([
 | 
						|
		fetchMeta(true),
 | 
						|
		// User.count({ host: null }),
 | 
						|
		// User.count({ host: null, updatedAt: { $gt: new Date(Date.now() - 15552000000) } }),
 | 
						|
		// User.count({ host: null, updatedAt: { $gt: new Date(Date.now() - 2592000000) } }),
 | 
						|
		// Note.count({ '_user.host': null, replyId: null }),
 | 
						|
		// Note.count({ '_user.host': null, replyId: { $ne: null } })
 | 
						|
	]);
 | 
						|
 | 
						|
	const proxyAccount = meta.proxyAccountId ? await Users.pack(meta.proxyAccountId).catch(() => null) : null;
 | 
						|
 | 
						|
	return {
 | 
						|
		software: {
 | 
						|
			name: 'misskey',
 | 
						|
			version: config.version,
 | 
						|
			repository: meta.repositoryUrl,
 | 
						|
		},
 | 
						|
		protocols: ['activitypub'],
 | 
						|
		services: {
 | 
						|
			inbound: [] as string[],
 | 
						|
			outbound: ['atom1.0', 'rss2.0']
 | 
						|
		},
 | 
						|
		openRegistrations: !meta.disableRegistration,
 | 
						|
		usage: {
 | 
						|
			users: {} // { total, activeHalfyear, activeMonth },
 | 
						|
			// localPosts,
 | 
						|
			// localComments
 | 
						|
		},
 | 
						|
		metadata: {
 | 
						|
			nodeName: meta.name,
 | 
						|
			nodeDescription: meta.description,
 | 
						|
			maintainer: {
 | 
						|
				name: meta.maintainerName,
 | 
						|
				email: meta.maintainerEmail
 | 
						|
			},
 | 
						|
			langs: meta.langs,
 | 
						|
			tosUrl: meta.ToSUrl,
 | 
						|
			repositoryUrl: meta.repositoryUrl,
 | 
						|
			feedbackUrl: meta.feedbackUrl,
 | 
						|
			disableRegistration: meta.disableRegistration,
 | 
						|
			disableLocalTimeline: meta.disableLocalTimeline,
 | 
						|
			disableGlobalTimeline: meta.disableGlobalTimeline,
 | 
						|
			enableHcaptcha: meta.enableHcaptcha,
 | 
						|
			enableRecaptcha: meta.enableRecaptcha,
 | 
						|
			maxNoteTextLength: meta.maxNoteTextLength,
 | 
						|
			enableTwitterIntegration: meta.enableTwitterIntegration,
 | 
						|
			enableGithubIntegration: meta.enableGithubIntegration,
 | 
						|
			enableDiscordIntegration: meta.enableDiscordIntegration,
 | 
						|
			enableEmail: meta.enableEmail,
 | 
						|
			enableServiceWorker: meta.enableServiceWorker,
 | 
						|
			proxyAccountName: proxyAccount ? proxyAccount.username : null,
 | 
						|
		}
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
router.get(nodeinfo2_1path, async ctx => {
 | 
						|
	const base = await nodeinfo2();
 | 
						|
 | 
						|
	ctx.body = { version: '2.1', ...base };
 | 
						|
	ctx.set('Cache-Control', 'public, max-age=600');
 | 
						|
});
 | 
						|
 | 
						|
router.get(nodeinfo2_0path, async ctx => {
 | 
						|
	const base = await nodeinfo2();
 | 
						|
 | 
						|
	delete base.software.repository;
 | 
						|
 | 
						|
	ctx.body = { version: '2.0', ...base };
 | 
						|
	ctx.set('Cache-Control', 'public, max-age=600');
 | 
						|
});
 | 
						|
 | 
						|
export default router;
 |