import { Page } from "./metadata"; import generators from "./generate"; import express, { Router } from "express"; import morgan from "morgan"; import bodyParser from "body-parser"; import activitypub from "./activitypub"; import validateHttpSig from "./activitypub/middleware/http-signature"; //import sqlite3 from "sqlite3"; import "reflect-metadata"; import { createConnection} from "typeorm"; import { promises as fs } from "fs"; import * as path from "path"; //createConnection().then(async connection => { //}).catch(console.error); //const db = new (sqlite3.verbose().Database)(process.env.DB_PATH!); //db.run("CREATE TABLE IF NOT EXISTS followers (id TEXT PRIMARY KEY, inbox TEXT)"); //db.run("CREATE TABLE IF NOT EXISTS articles (id TEXT PRIMARY KEY, article_doc TEXT, conversation TEXT, has_federated INT)"); //db.run("CREATE TABLE IF NOT EXISTS notes (id TEXT PRIMARY KEY, content TEXT, attributed_to TEXT, in_reply_to TEXT, conversation TEXT, published TEXT)"); //db.run("CREATE TABLE IF NOT EXISTS actors (id TEXT PRIMARY KEY, display_name TEXT, inbox TEXT, icon_url TEXT, public_key_pem TEXT)") async function generate(): Promise { generators.copy(); generators.css(); generators.missing(); const tutorials = await generators.tutorials(); const posts = await generators.posts(); generators.homepage(posts); generators.redirects(posts); const categories = await generators.categories(posts); await generators.rss(posts, categories, tutorials); return posts; } //const app = express(); //app.set("db", db); //app.use(morgan("dev")); //app.use(bodyParser.json({ type: "application/activity+json" })); //db.run("DELETE FROM articles"); (async () => { const app = express(); app.use(morgan("dev")); app.use(bodyParser.json({ type: "application/activity+json" })); const connection = await createConnection({ "type": "postgres", "host": "localhost", "port": 5432, "username": "blog", "password": "blog", "database": "blog", "synchronize": true, "logging": true, "entities": [ path.join(__dirname, "entity/**/*.{ts,js}") ], "migrations": [ path.join(__dirname, "migration/**/*.{ts,js}") ], "subscribers": [ path.join(__dirname, "subscriber/**/*.{ts,js}") ], "cli": { "entitiesDir": "lib/entity", "migrationsDir": "lib/migration", "subscribersDir": "lib/subscriber" } }); const posts = await generate(); await activitypub.articles.setup(posts); const toFederate = await activitypub.articles.toFederate(); const apRouter = Router(); apRouter.use(validateHttpSig); await activitypub.actor(apRouter); activitypub.comments(apRouter); activitypub.followers(apRouter); activitypub.inbox(apRouter); activitypub.webfinger(apRouter); activitypub.articles.route(apRouter); app.use(apRouter); app.use(express.static("out")); const port = process.env.PORT || 8083; app.listen(port, () => { console.log(`Listening on port ${port}`); activitypub.federate(toFederate); }); })();