From 484a396a6421205d329b9ad5698b94a2ac30a5b9 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 4 Mar 2023 20:19:57 -0600 Subject: [PATCH] Add /api/v1/instance --- src/api/instance.ts | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/app.ts | 4 +++- src/config.ts | 2 ++ src/deps.ts | 4 +++- 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src/api/instance.ts create mode 100644 src/config.ts diff --git a/src/api/instance.ts b/src/api/instance.ts new file mode 100644 index 00000000..0b432b0f --- /dev/null +++ b/src/api/instance.ts @@ -0,0 +1,45 @@ +import { LOCAL_DOMAIN, POST_CHAR_LIMIT } from '@/config.ts'; + +import type { Context } from '@/deps.ts'; + +function instanceController(c: Context) { + const { host } = new URL(LOCAL_DOMAIN); + + return c.json({ + uri: host, + title: 'Nostrverse', + description: 'An adapter between Mastodon API and Nostr.', + short_description: 'An adapter between Mastodon API and Nostr.', + registrations: false, + max_toot_chars: POST_CHAR_LIMIT, + configuration: { + media_attachments: { + image_size_limit: 100000000, + video_size_limit: 100000000, + }, + polls: { + max_characters_per_option: 0, + max_expiration: 0, + max_options: 0, + min_expiration: 0, + }, + statuses: { + max_characters: POST_CHAR_LIMIT, + max_media_attachments: 20, + }, + }, + languages: ['en'], + stats: { + domain_count: 0, + status_count: 0, + user_count: 0, + }, + urls: { + streaming_api: `wss://${host}`, + }, + version: '0.0.0 (compatible; Nostrverse 0.0.1)', + rules: [], + }); +} + +export default instanceController; diff --git a/src/app.ts b/src/app.ts index 77d78833..2e2445ce 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,7 +1,9 @@ import { Hono } from '@/deps.ts'; +import instanceController from './api/instance.ts'; + const app = new Hono(); -app.get('/', (c) => c.text('Hono!')); +app.get('/api/v1/instance', instanceController); export default app; diff --git a/src/config.ts b/src/config.ts new file mode 100644 index 00000000..cedd9045 --- /dev/null +++ b/src/config.ts @@ -0,0 +1,2 @@ +export const LOCAL_DOMAIN = Deno.env.get('LOCAL_DOMAIN') || 'http://localhost:8000'; +export const POST_CHAR_LIMIT = Number(Deno.env.get('POST_CHAR_LIMIT') || 5000); diff --git a/src/deps.ts b/src/deps.ts index b0af16e8..0925d11f 100644 --- a/src/deps.ts +++ b/src/deps.ts @@ -1 +1,3 @@ -export { Hono } from 'https://deno.land/x/hono@v3.0.2/mod.ts'; +import { Context, Hono } from 'https://deno.land/x/hono@v3.0.2/mod.ts'; +export { Hono }; +export type { Context };