diff --git a/src/app.ts b/src/app.ts index 3fcd970..8a90aba 100644 --- a/src/app.ts +++ b/src/app.ts @@ -28,6 +28,7 @@ import { import { streamingController } from './controllers/api/streaming.ts'; import { indexController } from './controllers/site.ts'; import { hostMetaController } from './controllers/well-known/host-meta.ts'; +import { nodeInfoController, nodeInfoSchemaController } from './controllers/well-known/nodeinfo.ts'; import { nostrController } from './controllers/well-known/nostr.ts'; import { webfingerController } from './controllers/well-known/webfinger.ts'; import { auth19, requireAuth } from './middleware/auth19.ts'; @@ -61,8 +62,11 @@ app.use('*', cors({ origin: '*', exposeHeaders: ['link'] }), auth19, auth98()); app.get('/.well-known/webfinger', webfingerController); app.get('/.well-known/host-meta', hostMetaController); +app.get('/.well-known/nodeinfo', nodeInfoController); app.get('/.well-known/nostr.json', nostrController); +app.get('/nodeinfo/:version', nodeInfoSchemaController); + app.get('/api/v1/instance', instanceController); app.get('/api/v1/apps/verify_credentials', appCredentialsController); diff --git a/src/controllers/well-known/nodeinfo.ts b/src/controllers/well-known/nodeinfo.ts new file mode 100644 index 0000000..47bf6d8 --- /dev/null +++ b/src/controllers/well-known/nodeinfo.ts @@ -0,0 +1,55 @@ +import { Conf } from '@/config.ts'; + +import type { AppController } from '@/app.ts'; + +const nodeInfoController: AppController = (c) => { + return c.json({ + links: [ + { + rel: 'http://nodeinfo.diaspora.software/ns/schema/2.0', + href: Conf.local('/nodeinfo/2.0'), + }, + { + rel: 'http://nodeinfo.diaspora.software/ns/schema/2.1', + href: Conf.local('/nodeinfo/2.1'), + }, + ], + }); +}; + +const nodeInfoSchemaController: AppController = (c) => { + return c.json({ + version: '2.1', + software: { + name: 'ditto', + version: '0.0.0', + repository: 'https://gitlab.com/soapbox-pub/ditto', + homepage: 'https://soapbox.pub', + }, + protocols: [ + 'activitypub', + ], + services: { + inbound: [], + outbound: [], + }, + openRegistrations: false, + usage: { + users: { + total: 0, + activeMonth: 0, + activeHalfyear: 0, + }, + localPosts: 0, + localComments: 0, + }, + metadata: { + features: [ + 'nip05', + 'nostr_bridge', + ], + }, + }); +}; + +export { nodeInfoController, nodeInfoSchemaController };