All files / src server.ts

94.11% Statements 32/34
100% Branches 0/0
100% Functions 3/3
94.11% Lines 32/34

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102                                                          2x 2x   2x 2x   2x   2x             2x             2x             2x   2x 2x   2x             2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x   2x     2x 2x 2x 2x 2x 2x     2x             2x  
import express from "express"
import pino from "pino"
 
import { env } from "./config"
import { configEndpoint } from "./endpoints/config"
import { createNewCategory } from "./endpoints/createNewCategory"
import { currentMonth } from "./endpoints/currentMonth"
import { hideBudget } from "./endpoints/hideBudget"
import { hideCategory } from "./endpoints/hideCategory"
import { nextMonth } from "./endpoints/nextMonth"
import { setCurrentAccount } from "./endpoints/setAssetAccount"
import { setBudgetRole } from "./endpoints/setBudgetRole"
import { setCronConfig } from "./endpoints/setCronConfig"
import { setLocale } from "./endpoints/setLocale"
import { setNotifier } from "./endpoints/setNotifier"
import { setNotifierField } from "./endpoints/setNotifierField"
import { settingBudgetForTransaction } from "./endpoints/settingBudgetForTransaction"
import { settingCategoryForTransaction } from "./endpoints/settingCategoryForTransaction"
import { triggerAutoImport } from "./endpoints/triggerAutoImport"
import { triggerBudgetSumUp } from "./endpoints/triggerBudgetSumUp"
import { webhook } from "./endpoints/webhook"
import { AssertTransactionExistsMiddleware } from "./middleware/assertTransactionExistsMiddleware"
import { ParseBodyMiddleware } from "./middleware/parseBodyMiddleware"
import { TokenMiddleware } from "./middleware/tokenMiddleware"
import { TransactionResultMiddleware } from "./middleware/transactionResultMiddleware"
import { verifyWebhookMiddleware } from "./middleware/webhookSecretMiddleware"
import { initializeJobs } from "./queues"
import { initializeI18N } from "./utils/i18n"
 
const logger = pino()
const app = express()
 
app.use("/public", express.static("public"))
app.set("views", "templates")
 
app.use(ParseBodyMiddleware)
 
app.get(
  "/transaction/:transactionId/budget/:budget_id",
  TokenMiddleware,
  AssertTransactionExistsMiddleware,
  settingBudgetForTransaction,
  TransactionResultMiddleware,
)
app.get(
  "/transaction/:transactionId/category/:category_id",
  TokenMiddleware,
  AssertTransactionExistsMiddleware,
  settingCategoryForTransaction,
  TransactionResultMiddleware,
)
app.get(
  "/transaction/:transactionId/newCategory",
  TokenMiddleware,
  createNewCategory,
  settingCategoryForTransaction,
  TransactionResultMiddleware,
)
app.post("/webhook", verifyWebhookMiddleware, webhook)
 
app.post("/api/current-month", currentMonth)
app.post("/api/next-month", nextMonth)
 
app.get(
  "/api/transaction/:transactionId/newCategory",
  TokenMiddleware,
  createNewCategory,
  settingCategoryForTransaction,
  TransactionResultMiddleware,
)
app.post("/api/budget-role/:role/:budgetId", TokenMiddleware, setBudgetRole)
app.post("/api/current-account/:accountId", TokenMiddleware, setCurrentAccount)
app.post("/api/hide-toggle/category/:categoryName", TokenMiddleware, hideCategory)
app.post("/api/hide-toggle/budget/:budgetName", TokenMiddleware, hideBudget)
app.post("/api/budget-sumup", TokenMiddleware, triggerBudgetSumUp)
app.post("/api/auto-import", TokenMiddleware, triggerAutoImport)
app.post("/api/cron/:type", TokenMiddleware, setCronConfig)
app.post("/api/locale", TokenMiddleware, setLocale)
app.post("/api/notifier/:notifier", TokenMiddleware, setNotifier)
app.post("/api/notifier-field/:field", TokenMiddleware, setNotifierField)
app.get("/api/config", TokenMiddleware, configEndpoint)
 
app.use("/control", express.static("dist/frontend"))
 
async function startServer() {
  await initializeI18N()
  try {
    await new Promise<void>((resolve) => {
      app.listen(env.port, () => {
        logger.info("Server is running on http://localhost:%s", env.port)
        resolve()
      })
    })
    await initializeJobs()
  } catch (err) {
    logger.error({ err }, "Failed to start server:")
    process.exit(1)
  }
}
 
startServer()