diff --git a/src/index.ts b/src/index.ts index fdcbffa..1e99295 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,7 +3,7 @@ import process from "node:process"; import { PrismaClient } from '@prisma/client'; import Fastify from "fastify"; -import { ServerOptions, SessionToken } from "./libs/types.js"; +import type { ServerOptions, SessionToken, RouteOptions } from "./libs/types.js"; import type { BackendInterface } from "./backendimpl/base.js"; import { route as getPermissions } from "./routes/getPermissions.js"; @@ -46,20 +46,29 @@ const fastify = Fastify({ logger: true }); -getPermissions(fastify, prisma, sessionTokens, serverOptions); +const routeOptions: RouteOptions = { + fastify: fastify, + prisma: prisma, + tokens: sessionTokens, + options: serverOptions, + + backends: backends +}; + +getPermissions(routeOptions); -backendCreate(fastify, prisma, sessionTokens, serverOptions, backends); -backendRemove(fastify, prisma, sessionTokens, serverOptions, backends); -backendLookup(fastify, prisma, sessionTokens, serverOptions, backends); +backendCreate(routeOptions); +backendRemove(routeOptions); +backendLookup(routeOptions); -forwardCreate(fastify, prisma, sessionTokens, serverOptions, backends); -forwardRemove(fastify, prisma, sessionTokens, serverOptions, backends); -forwardLookup(fastify, prisma, sessionTokens, serverOptions, backends); +forwardCreate(routeOptions); +forwardRemove(routeOptions); +forwardLookup(routeOptions); -userCreate(fastify, prisma, sessionTokens, serverOptions); -userRemove(fastify, prisma, sessionTokens, serverOptions); -userLookup(fastify, prisma, sessionTokens, serverOptions); -userLogin(fastify, prisma, sessionTokens, serverOptions); +userCreate(routeOptions); +userRemove(routeOptions); +userLookup(routeOptions); +userLogin(routeOptions); // Run the server! try { diff --git a/src/libs/types.ts b/src/libs/types.ts index 66c2efd..22fdc45 100644 --- a/src/libs/types.ts +++ b/src/libs/types.ts @@ -1,3 +1,8 @@ +import type { PrismaClient } from "@prisma/client"; +import type { FastifyInstance } from "fastify"; + +import type { BackendInterface } from "../backendimpl/base.js"; + export type ServerOptions = { isSignupEnabled: boolean; isSignupAsAdminEnabled: boolean; @@ -11,4 +16,13 @@ export type SessionToken = { expiresAt: number, // Should be (createdAt + (30 minutes)) token: string +}; + +export type RouteOptions = { + fastify: FastifyInstance, + prisma: PrismaClient, + tokens: Record, + + options: ServerOptions, + backends: Record }; \ No newline at end of file diff --git a/src/routes/backends/create.ts b/src/routes/backends/create.ts index da35b82..15ae03d 100644 --- a/src/routes/backends/create.ts +++ b/src/routes/backends/create.ts @@ -1,11 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import type { BackendInterface } from "../../backendimpl/base.js"; -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { hasPermissionByToken } from "../../libs/permissions.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, _options: ServerOptions, backends: Record) { function hasPermission(token: string, permissionList: string[]): Promise { return hasPermissionByToken(permissionList, token, tokens, prisma); }; diff --git a/src/routes/backends/lookup.ts b/src/routes/backends/lookup.ts index e9b2fbc..310d5a6 100644 --- a/src/routes/backends/lookup.ts +++ b/src/routes/backends/lookup.ts @@ -1,11 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import type { BackendInterface } from "../../backendimpl/base.js"; -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { hasPermissionByToken } from "../../libs/permissions.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, _options: ServerOptions, backends: Record) { function hasPermission(token: string, permissionList: string[]): Promise { return hasPermissionByToken(permissionList, token, tokens, prisma); }; diff --git a/src/routes/backends/remove.ts b/src/routes/backends/remove.ts index d54dbb5..13dbb73 100644 --- a/src/routes/backends/remove.ts +++ b/src/routes/backends/remove.ts @@ -1,11 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import type { BackendInterface } from "../../backendimpl/base.js"; -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { hasPermissionByToken } from "../../libs/permissions.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, _options: ServerOptions, backends: Record) { function hasPermission(token: string, permissionList: string[]): Promise { return hasPermissionByToken(permissionList, token, tokens, prisma); }; diff --git a/src/routes/forward/create.ts b/src/routes/forward/create.ts index df02642..da350db 100644 --- a/src/routes/forward/create.ts +++ b/src/routes/forward/create.ts @@ -1,11 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import type { BackendInterface } from "../../backendimpl/base.js"; -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { hasPermissionByToken } from "../../libs/permissions.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, _options: ServerOptions, backends: Record) { function hasPermission(token: string, permissionList: string[]): Promise { return hasPermissionByToken(permissionList, token, tokens, prisma); }; diff --git a/src/routes/forward/lookup.ts b/src/routes/forward/lookup.ts index 0e095f4..b4dd312 100644 --- a/src/routes/forward/lookup.ts +++ b/src/routes/forward/lookup.ts @@ -1,11 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import type { BackendInterface } from "../../backendimpl/base.js"; -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { hasPermissionByToken } from "../../libs/permissions.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, _options: ServerOptions, _backends: Record) { function hasPermission(token: string, permissionList: string[]): Promise { return hasPermissionByToken(permissionList, token, tokens, prisma); }; diff --git a/src/routes/forward/remove.ts b/src/routes/forward/remove.ts index 7a00310..d1f1cd3 100644 --- a/src/routes/forward/remove.ts +++ b/src/routes/forward/remove.ts @@ -1,11 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import type { BackendInterface } from "../../backendimpl/base.js"; -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { hasPermissionByToken } from "../../libs/permissions.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, _options: ServerOptions, backends: Record) { function hasPermission(token: string, permissionList: string[]): Promise { return hasPermissionByToken(permissionList, token, tokens, prisma); }; diff --git a/src/routes/getPermissions.ts b/src/routes/getPermissions.ts index a363cc8..8787927 100644 --- a/src/routes/getPermissions.ts +++ b/src/routes/getPermissions.ts @@ -1,10 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import { ServerOptions, SessionToken } from "../libs/types.js"; import { hasPermission, getUID } from "../libs/permissions.js"; +import type { RouteOptions } from "../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, options: ServerOptions) { /** * Logs in to a user account. */ diff --git a/src/routes/user/create.ts b/src/routes/user/create.ts index 221c254..e5cc619 100644 --- a/src/routes/user/create.ts +++ b/src/routes/user/create.ts @@ -1,12 +1,18 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; import { hash } from "bcrypt"; -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { permissionListEnabled } from "../../libs/permissions.js"; import { generateToken } from "../../libs/generateToken.js"; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, options: ServerOptions) { +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens, + options + } = routeOptions; + /** * Creates a new user account to use, only if it is enabled. */ diff --git a/src/routes/user/login.ts b/src/routes/user/login.ts index c5ae933..525b23b 100644 --- a/src/routes/user/login.ts +++ b/src/routes/user/login.ts @@ -1,11 +1,15 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; import { compare } from "bcrypt"; -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { generateToken } from "../../libs/generateToken.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, options: ServerOptions) { /** * Logs in to a user account. */ diff --git a/src/routes/user/lookup.ts b/src/routes/user/lookup.ts index cd97a89..05f2cc9 100644 --- a/src/routes/user/lookup.ts +++ b/src/routes/user/lookup.ts @@ -1,10 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { hasPermissionByToken } from "../../libs/permissions.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, options: ServerOptions) { function hasPermission(token: string, permissionList: string[]): Promise { return hasPermissionByToken(permissionList, token, tokens, prisma); }; diff --git a/src/routes/user/remove.ts b/src/routes/user/remove.ts index 45de0c9..7c2d2a1 100644 --- a/src/routes/user/remove.ts +++ b/src/routes/user/remove.ts @@ -1,10 +1,13 @@ -import type { PrismaClient } from "@prisma/client"; -import type { FastifyInstance } from "fastify"; - -import { ServerOptions, SessionToken } from "../../libs/types.js"; import { hasPermissionByToken } from "../../libs/permissions.js"; +import type { RouteOptions } from "../../libs/types.js"; + +export function route(routeOptions: RouteOptions) { + const { + fastify, + prisma, + tokens + } = routeOptions; -export function route(fastify: FastifyInstance, prisma: PrismaClient, tokens: Record, options: ServerOptions) { function hasPermission(token: string, permissionList: string[]): Promise { return hasPermissionByToken(permissionList, token, tokens, prisma); };