public
anord
read
Ledger
Why work hard when you can work easier?
Languages
Repository composition by tracked source files.
TypeScript
86%
CSS
10%
SQL
3%
Shell
1%
HTML
0%
Trace
apps/api/src/app.ts
Trace helps you understand code history line by line. See who changed each line, when it changed, and which commit introduced it.
Author
Date
Commit
Line
Code
1
import cookieParser from "cookie-parser";
2
import cors from "cors";
3
import express from "express";
4
import rateLimit from "express-rate-limit";
5
import helmet from "helmet";
6
import { env } from "./config/env.js";
7
import { sessionMiddleware } from "./http/middleware/auth.js";
8
import { errorHandler } from "./http/middleware/error-handler.js";
9
import { adminRouter } from "./http/routes/admin.js";
10
import { aiRouter } from "./http/routes/ai.js";
11
import { attachmentsRouter } from "./http/routes/attachments.js";
12
import { authRouter } from "./http/routes/auth.js";
13
import { feedbackRouter } from "./http/routes/feedback.js";
14
import { mcpRouter } from "./http/routes/mcp.js";
15
import { pagesRouter } from "./http/routes/pages.js";
16
import { rolesRouter } from "./http/routes/roles.js";
17
import { searchRouter } from "./http/routes/search.js";
18
import { spacesRouter } from "./http/routes/spaces.js";
19
import { setupRouter } from "./http/routes/setup.js";
20
import { settingsRouter } from "./http/routes/settings.js";
21
import { webhooksRouter } from "./http/routes/webhooks.js";
22
import { integrationsRouter } from "./http/routes/integrations.js";
24
export function createApp() {
25
const app = express();
27
app.use(helmet());
28
app.use(
29
cors({
30
origin: env.LEDGER_APP_URL,
31
credentials: true
32
})
33
);
34
app.use(express.json({ limit: "1mb" }));
35
app.use(cookieParser());
36
app.use(sessionMiddleware);
38
app.use(
39
"/api/auth",
40
rateLimit({
41
windowMs: 15 * 60 * 1000,
42
max: 20,
43
standardHeaders: true,
44
legacyHeaders: false
45
}),
46
authRouter
47
);
49
app.use(
50
"/api/search",
51
rateLimit({
52
windowMs: 60 * 1000,
53
max: 60,
54
standardHeaders: true,
55
legacyHeaders: false
56
}),
57
searchRouter
58
);
60
app.get("/health", (_req, res) => {
61
res.json({ ok: true, service: "ledger-api" });
62
});
64
app.use("/api/pages", pagesRouter);
65
app.use("/api/attachments", attachmentsRouter);
66
app.use("/api/spaces", spacesRouter);
67
app.use("/api/roles", rolesRouter);
68
app.use("/api/feedback", feedbackRouter);
69
app.use("/api/settings", settingsRouter);
70
app.use("/api/setup", setupRouter);
71
app.use("/api/admin", adminRouter);
72
app.use("/api/webhooks", webhooksRouter);
73
app.use("/api/integrations", integrationsRouter);
74
app.use("/api/ai", aiRouter);
75
app.use("/mcp", mcpRouter);
76
app.use("/api/mcp", mcpRouter);
78
app.use(errorHandler);
79
return app;
80
}