Advertisement
AdzeB

/services/staff/index.ts

Mar 9th, 2025
240
0
6 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Fastify from "fastify";
  2. import { http } from "@nitric/sdk";
  3. import { setupFastify } from "../../resources/fastify-setup";
  4. import { RoleRepository } from "../../repositories/role.repository";
  5. import { UserRepository } from "../../repositories/user.repository";
  6. import { registerStaffRoutes } from "./routes";
  7. import dbClient from "../../db";
  8. import { FastifyRequest, FastifyReply } from "fastify";
  9. import { LogtoManagementClient } from "../../resources/logto-management-client";
  10. import { LogtoUser } from "../../resources/logto-fastify";
  11. import { FirewallRepository } from "../../repositories/firewall.repository";
  12. import { SiteRepository } from "../../repositories/site.repository";
  13.  
  14. // Add this before creating the Fastify instance
  15. declare module "fastify" {
  16.   export interface FastifyInstance {
  17.     db: Awaited<ReturnType<typeof dbClient>> | null;
  18.     roleRepository: RoleRepository | null;
  19.     userRepository: UserRepository | null;
  20.     firewallRepository: FirewallRepository | null;
  21.     siteRepository: SiteRepository | null;
  22.     logtoManagement: LogtoManagementClient | null;
  23.     verifyLogtoToken: (
  24.       request: FastifyRequest,
  25.       reply: FastifyReply
  26.     ) => Promise<boolean>;
  27.     requireScopes: (
  28.       scopes: string[]
  29.     ) => (request: FastifyRequest, reply: FastifyReply) => Promise<boolean>;
  30.     requireRoles: (
  31.       roles: string[]
  32.     ) => (request: FastifyRequest, reply: FastifyReply) => Promise<boolean>;
  33.     getLogtoUserClaims: (request: FastifyRequest) => LogtoUser | null;
  34.     getLogtoUserClaim: (request: FastifyRequest, claimName: string) => any;
  35.   }
  36. }
  37.  
  38. async function bootstrap(port: number) {
  39.   const fastify = Fastify({
  40.     logger: true,
  41.   });
  42.  
  43.   // Setup Fastify with plugins, error handlers, etc.
  44.   await setupFastify(fastify, {
  45.     serviceName: "Staff",
  46.     serviceVersion: "1.0.0",
  47.     setupRepositories: (fastify, db) => {
  48.       fastify.decorate("roleRepository", new RoleRepository(db));
  49.       fastify.decorate("userRepository", new UserRepository(db));
  50.       fastify.decorate("firewallRepository", new FirewallRepository(db));
  51.       fastify.decorate("siteRepository", new SiteRepository(db));
  52.       // const logtoManagement = new LogtoManagementClient();
  53.       // fastify.decorate("logtoManagement", logtoManagement);
  54.     },
  55.     logtoConfig: {
  56.       jwksUrl: `${process.env.LOGTO_EXPRESS_ENDPOINT}/oidc/jwks`,
  57.       issuer: `${process.env.LOGTO_EXPRESS_ENDPOINT}/oidc`,
  58.       audience: "",
  59.     },
  60.   });
  61.  
  62.   // Register all routes for this service
  63.   registerStaffRoutes(fastify);
  64.  
  65.   const isCloud = process.env.NITRIC_ENVIRONMENT === "cloud";
  66.   const address = await fastify.listen({ port: isCloud ? port : 8001 });
  67.  
  68.   console.log(`Server listening on ${address}`);
  69.  
  70.   return fastify.server;
  71. }
  72.  
  73. // Start the server with Nitric
  74. http(bootstrap, () => {
  75.   console.log("Staff service started");
  76. });
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement