UNPKG

@paroicms/server

Version:
96 lines 5.45 kB
import { ApolloServer } from "@apollo/server"; import { expressMiddleware } from "@as-integrations/express5"; import { ApiError } from "@paroicms/public-server-lib"; import express from "express"; import { GraphQLError } from "graphql"; import multer from "multer"; import { downloadBackupController } from "../admin-backend/backup/backup.controller.js"; import { loginController } from "../admin-backend/login/login.controller.js"; import { uploadMediaController } from "../admin-backend/media/media-upload.controller.js"; import { platformLogger } from "../context.js"; import { getPaSiteContext } from "../express/http-helpers.js"; import { mergeReqHandlers, reqHandlerToExpressMiddleware, wrapRouteController, } from "../express/route-handler-wrapper.js"; import { federateResolvers, typeDefs } from "../graphql/apollo-server-init.js"; import { createComplexityPlugin } from "../graphql/complexity-plugin.js"; import { disableApolloStudioPlugin } from "../graphql/disable-apollo-studio-plugin.js"; import { createErrorConverterPlugin } from "../graphql/error-converter-plugin.js"; import { protectedAccessController } from "../protected-site/protected-access.controller.js"; import { protectedSiteReqHandler } from "../protected-site/protected-site.req-handler.js"; import { checkPasswordResetController, setAccountPasswordController, } from "../public-api/password-reset/password-reset.controller.js"; import { healthCheckController } from "../public-api/public-api-controller.js"; import { favicon16x16Controller, robotsTxtController, } from "../rendered-site/common-routes.controller.js"; import { feedReqHandler } from "../rendered-site/feed/feed.req-handler.js"; import { serveCacheImageController, serveFilecontroller, } from "../rendered-site/media-serve/media-serve.controller.js"; import { previewReqHandler } from "../rendered-site/preview.req-handler.js"; import { siteRouterReqHandler } from "../rendered-site/site-router.req-handler.js"; import { mergeExpressMiddlewares } from "./express-utils.js"; import { toPaHttpContext } from "./pa-http-context.js"; import { pluginPublicApiReqHandler } from "./public-api.req-handler.js"; import { adminUiFilesReqHandler, adminUiPluginsReqHandler, renderedPageAssetsReqHandler, } from "./static-files.req-handler.js"; import { staticFilesReqHandler, unprotectedStaticFilesReqHandler, } from "./static-site-files.req-handler.js"; export async function createAdminUiGraphqlMiddleware() { const developmentMode = process.env.NODE_ENV === "development"; const apolloServer = new ApolloServer({ typeDefs, resolvers: federateResolvers(), plugins: [ createComplexityPlugin(), createErrorConverterPlugin(), ...(developmentMode ? [] : [disableApolloStudioPlugin()]), ], introspection: developmentMode, formatError(formattedError, error) { if (error instanceof GraphQLError && (!error.cause || error.cause instanceof ApiError)) { return formattedError; } platformLogger.error("Unexpected graphql error", formattedError, error); return { message: "Internal Server Error", code: "INTERNAL_SERVER_ERROR", }; }, }); await apolloServer.start(); return expressMiddleware(apolloServer, { context: async ({ req, res }) => ({ siteContext: getPaSiteContext(req), httpContext: toPaHttpContext(req, res), }), }); } export function createMinimalSiteMiddleware() { const router = express.Router(); const upload = multer(); router.post("/adm/backend/upload", upload.single("file"), wrapRouteController(uploadMediaController)); router.get("/adm/backend/backup/:backupName", wrapRouteController(downloadBackupController)); router.get("/api/v1/healthcheck", wrapRouteController(healthCheckController)); router.post("/api/v1/login", wrapRouteController(loginController, { allowMigration: true })); router.post("/api/v1/set-account-password", wrapRouteController(setAccountPasswordController)); router.post("/api/v1/check-password-reset", wrapRouteController(checkPasswordResetController)); router.post("/api/v1/protected-access", wrapRouteController(protectedAccessController)); router.get("/robots.txt", wrapRouteController(robotsTxtController)); router.get("/favicon.ico", wrapRouteController(favicon16x16Controller)); return mergeExpressMiddlewares([ reqHandlerToExpressMiddleware(mergeReqHandlers([unprotectedStaticFilesReqHandler, adminUiPluginsReqHandler])), router, reqHandlerToExpressMiddleware(adminUiFilesReqHandler, { allowMigration: true }), ]); } export function createRenderedSiteMiddleware() { const router = express.Router(); router.get("/medias/:mediaId/file/:nameAndExt", wrapRouteController(serveFilecontroller)); router.get("/medias/:mediaId/cache/:resourceVersion/:nameAndExt", wrapRouteController(serveCacheImageController)); return mergeExpressMiddlewares([ reqHandlerToExpressMiddleware(mergeReqHandlers([ protectedSiteReqHandler, staticFilesReqHandler, pluginPublicApiReqHandler, renderedPageAssetsReqHandler, feedReqHandler, previewReqHandler, siteRouterReqHandler, ])), router, ]); } //# sourceMappingURL=site-middleware.js.map