import { Knex } from "knex"; import { z } from "zod"; import { registerV1EERoutes } from "@app/ee/routes/v1"; import { auditLogDALFactory } from "@app/ee/services/audit-log/audit-log-dal"; import { auditLogQueueServiceFactory } from "@app/ee/services/audit-log/audit-log-queue"; import { auditLogServiceFactory } from "@app/ee/services/audit-log/audit-log-service"; import { dynamicSecretDALFactory } from "@app/ee/services/dynamic-secret/dynamic-secret-dal"; import { dynamicSecretServiceFactory } from "@app/ee/services/dynamic-secret/dynamic-secret-service"; import { buildDynamicSecretProviders } from "@app/ee/services/dynamic-secret/providers"; import { dynamicSecretLeaseDALFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-dal"; import { dynamicSecretLeaseQueueServiceFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-queue"; import { dynamicSecretLeaseServiceFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-service"; import { groupDALFactory } from "@app/ee/services/group/group-dal"; import { groupServiceFactory } from "@app/ee/services/group/group-service"; import { userGroupMembershipDALFactory } from "@app/ee/services/group/user-group-membership-dal"; import { identityProjectAdditionalPrivilegeDALFactory } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-dal"; import { identityProjectAdditionalPrivilegeServiceFactory } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service"; import { ldapConfigDALFactory } from "@app/ee/services/ldap-config/ldap-config-dal"; import { ldapConfigServiceFactory } from "@app/ee/services/ldap-config/ldap-config-service"; import { ldapGroupMapDALFactory } from "@app/ee/services/ldap-config/ldap-group-map-dal"; import { licenseDALFactory } from "@app/ee/services/license/license-dal"; import { licenseServiceFactory } from "@app/ee/services/license/license-service"; import { permissionDALFactory } from "@app/ee/services/permission/permission-dal"; import { permissionServiceFactory } from "@app/ee/services/permission/permission-service"; import { projectUserAdditionalPrivilegeDALFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-dal"; import { projectUserAdditionalPrivilegeServiceFactory } from "@app/ee/services/project-user-additional-privilege/project-user-additional-privilege-service"; import { samlConfigDALFactory } from "@app/ee/services/saml-config/saml-config-dal"; import { samlConfigServiceFactory } from "@app/ee/services/saml-config/saml-config-service"; import { scimDALFactory } from "@app/ee/services/scim/scim-dal"; import { scimServiceFactory } from "@app/ee/services/scim/scim-service"; import { secretApprovalPolicyApproverDALFactory } from "@app/ee/services/secret-approval-policy/secret-approval-policy-approver-dal"; import { secretApprovalPolicyDALFactory } from "@app/ee/services/secret-approval-policy/secret-approval-policy-dal"; import { secretApprovalPolicyServiceFactory } from "@app/ee/services/secret-approval-policy/secret-approval-policy-service"; import { secretApprovalRequestDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-dal"; import { secretApprovalRequestReviewerDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-reviewer-dal"; import { secretApprovalRequestSecretDALFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-secret-dal"; import { secretApprovalRequestServiceFactory } from "@app/ee/services/secret-approval-request/secret-approval-request-service"; import { secretRotationDALFactory } from "@app/ee/services/secret-rotation/secret-rotation-dal"; import { secretRotationQueueFactory } from "@app/ee/services/secret-rotation/secret-rotation-queue"; import { secretRotationServiceFactory } from "@app/ee/services/secret-rotation/secret-rotation-service"; import { gitAppDALFactory } from "@app/ee/services/secret-scanning/git-app-dal"; import { gitAppInstallSessionDALFactory } from "@app/ee/services/secret-scanning/git-app-install-session-dal"; import { secretScanningDALFactory } from "@app/ee/services/secret-scanning/secret-scanning-dal"; import { secretScanningQueueFactory } from "@app/ee/services/secret-scanning/secret-scanning-queue"; import { secretScanningServiceFactory } from "@app/ee/services/secret-scanning/secret-scanning-service"; import { secretSnapshotServiceFactory } from "@app/ee/services/secret-snapshot/secret-snapshot-service"; import { snapshotDALFactory } from "@app/ee/services/secret-snapshot/snapshot-dal"; import { snapshotFolderDALFactory } from "@app/ee/services/secret-snapshot/snapshot-folder-dal"; import { snapshotSecretDALFactory } from "@app/ee/services/secret-snapshot/snapshot-secret-dal"; import { trustedIpDALFactory } from "@app/ee/services/trusted-ip/trusted-ip-dal"; import { trustedIpServiceFactory } from "@app/ee/services/trusted-ip/trusted-ip-service"; import { TKeyStoreFactory } from "@app/keystore/keystore"; import { getConfig } from "@app/lib/config/env"; import { TQueueServiceFactory } from "@app/queue"; import { readLimit } from "@app/server/config/rateLimiter"; import { apiKeyDALFactory } from "@app/services/api-key/api-key-dal"; import { apiKeyServiceFactory } from "@app/services/api-key/api-key-service"; import { authDALFactory } from "@app/services/auth/auth-dal"; import { authLoginServiceFactory } from "@app/services/auth/auth-login-service"; import { authPaswordServiceFactory } from "@app/services/auth/auth-password-service"; import { authSignupServiceFactory } from "@app/services/auth/auth-signup-service"; import { tokenDALFactory } from "@app/services/auth-token/auth-token-dal"; import { tokenServiceFactory } from "@app/services/auth-token/auth-token-service"; import { groupProjectDALFactory } from "@app/services/group-project/group-project-dal"; import { groupProjectMembershipRoleDALFactory } from "@app/services/group-project/group-project-membership-role-dal"; import { groupProjectServiceFactory } from "@app/services/group-project/group-project-service"; import { identityDALFactory } from "@app/services/identity/identity-dal"; import { identityOrgDALFactory } from "@app/services/identity/identity-org-dal"; import { identityServiceFactory } from "@app/services/identity/identity-service"; import { identityAccessTokenDALFactory } from "@app/services/identity-access-token/identity-access-token-dal"; import { identityAccessTokenServiceFactory } from "@app/services/identity-access-token/identity-access-token-service"; import { identityProjectDALFactory } from "@app/services/identity-project/identity-project-dal"; import { identityProjectMembershipRoleDALFactory } from "@app/services/identity-project/identity-project-membership-role-dal"; import { identityProjectServiceFactory } from "@app/services/identity-project/identity-project-service"; import { identityUaClientSecretDALFactory } from "@app/services/identity-ua/identity-ua-client-secret-dal"; import { identityUaDALFactory } from "@app/services/identity-ua/identity-ua-dal"; import { identityUaServiceFactory } from "@app/services/identity-ua/identity-ua-service"; import { integrationDALFactory } from "@app/services/integration/integration-dal"; import { integrationServiceFactory } from "@app/services/integration/integration-service"; import { integrationAuthDALFactory } from "@app/services/integration-auth/integration-auth-dal"; import { integrationAuthServiceFactory } from "@app/services/integration-auth/integration-auth-service"; import { incidentContactDALFactory } from "@app/services/org/incident-contacts-dal"; import { orgBotDALFactory } from "@app/services/org/org-bot-dal"; import { orgDALFactory } from "@app/services/org/org-dal"; import { orgRoleDALFactory } from "@app/services/org/org-role-dal"; import { orgRoleServiceFactory } from "@app/services/org/org-role-service"; import { orgServiceFactory } from "@app/services/org/org-service"; import { orgMembershipDALFactory } from "@app/services/org-membership/org-membership-dal"; import { projectDALFactory } from "@app/services/project/project-dal"; import { projectQueueFactory } from "@app/services/project/project-queue"; import { projectServiceFactory } from "@app/services/project/project-service"; import { projectBotDALFactory } from "@app/services/project-bot/project-bot-dal"; import { projectBotServiceFactory } from "@app/services/project-bot/project-bot-service"; import { projectEnvDALFactory } from "@app/services/project-env/project-env-dal"; import { projectEnvServiceFactory } from "@app/services/project-env/project-env-service"; import { projectKeyDALFactory } from "@app/services/project-key/project-key-dal"; import { projectKeyServiceFactory } from "@app/services/project-key/project-key-service"; import { projectMembershipDALFactory } from "@app/services/project-membership/project-membership-dal"; import { projectMembershipServiceFactory } from "@app/services/project-membership/project-membership-service"; import { projectUserMembershipRoleDALFactory } from "@app/services/project-membership/project-user-membership-role-dal"; import { projectRoleDALFactory } from "@app/services/project-role/project-role-dal"; import { projectRoleServiceFactory } from "@app/services/project-role/project-role-service"; import { secretDALFactory } from "@app/services/secret/secret-dal"; import { secretQueueFactory } from "@app/services/secret/secret-queue"; import { secretServiceFactory } from "@app/services/secret/secret-service"; import { secretVersionDALFactory } from "@app/services/secret/secret-version-dal"; import { secretVersionTagDALFactory } from "@app/services/secret/secret-version-tag-dal"; import { secretBlindIndexDALFactory } from "@app/services/secret-blind-index/secret-blind-index-dal"; import { secretBlindIndexServiceFactory } from "@app/services/secret-blind-index/secret-blind-index-service"; import { secretFolderDALFactory } from "@app/services/secret-folder/secret-folder-dal"; import { secretFolderServiceFactory } from "@app/services/secret-folder/secret-folder-service"; import { secretFolderVersionDALFactory } from "@app/services/secret-folder/secret-folder-version-dal"; import { secretImportDALFactory } from "@app/services/secret-import/secret-import-dal"; import { secretImportServiceFactory } from "@app/services/secret-import/secret-import-service"; import { secretTagDALFactory } from "@app/services/secret-tag/secret-tag-dal"; import { secretTagServiceFactory } from "@app/services/secret-tag/secret-tag-service"; import { serviceTokenDALFactory } from "@app/services/service-token/service-token-dal"; import { serviceTokenServiceFactory } from "@app/services/service-token/service-token-service"; import { TSmtpService } from "@app/services/smtp/smtp-service"; import { superAdminDALFactory } from "@app/services/super-admin/super-admin-dal"; import { getServerCfg, superAdminServiceFactory } from "@app/services/super-admin/super-admin-service"; import { telemetryDALFactory } from "@app/services/telemetry/telemetry-dal"; import { telemetryQueueServiceFactory } from "@app/services/telemetry/telemetry-queue"; import { telemetryServiceFactory } from "@app/services/telemetry/telemetry-service"; import { userDALFactory } from "@app/services/user/user-dal"; import { userServiceFactory } from "@app/services/user/user-service"; import { userAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; import { webhookDALFactory } from "@app/services/webhook/webhook-dal"; import { webhookServiceFactory } from "@app/services/webhook/webhook-service"; import { injectAuditLogInfo } from "../plugins/audit-log"; import { injectIdentity } from "../plugins/auth/inject-identity"; import { injectPermission } from "../plugins/auth/inject-permission"; import { registerSecretScannerGhApp } from "../plugins/secret-scanner"; import { registerV1Routes } from "./v1"; import { registerV2Routes } from "./v2"; import { registerV3Routes } from "./v3"; export const registerRoutes = async ( server: FastifyZodProvider, { db, smtp: smtpService, queue: queueService, keyStore }: { db: Knex; smtp: TSmtpService; queue: TQueueServiceFactory; keyStore: TKeyStoreFactory } ) => { await server.register(registerSecretScannerGhApp, { prefix: "/ss-webhook" }); // db layers const userDAL = userDALFactory(db); const userAliasDAL = userAliasDALFactory(db); const authDAL = authDALFactory(db); const authTokenDAL = tokenDALFactory(db); const orgDAL = orgDALFactory(db); const orgMembershipDAL = orgMembershipDALFactory(db); const orgBotDAL = orgBotDALFactory(db); const incidentContactDAL = incidentContactDALFactory(db); const orgRoleDAL = orgRoleDALFactory(db); const superAdminDAL = superAdminDALFactory(db); const apiKeyDAL = apiKeyDALFactory(db); const projectDAL = projectDALFactory(db); const projectMembershipDAL = projectMembershipDALFactory(db); const projectUserAdditionalPrivilegeDAL = projectUserAdditionalPrivilegeDALFactory(db); const projectUserMembershipRoleDAL = projectUserMembershipRoleDALFactory(db); const projectRoleDAL = projectRoleDALFactory(db); const projectEnvDAL = projectEnvDALFactory(db); const projectKeyDAL = projectKeyDALFactory(db); const projectBotDAL = projectBotDALFactory(db); const secretDAL = secretDALFactory(db); const secretTagDAL = secretTagDALFactory(db); const folderDAL = secretFolderDALFactory(db); const folderVersionDAL = secretFolderVersionDALFactory(db); const secretImportDAL = secretImportDALFactory(db); const secretVersionDAL = secretVersionDALFactory(db); const secretVersionTagDAL = secretVersionTagDALFactory(db); const secretBlindIndexDAL = secretBlindIndexDALFactory(db); const integrationDAL = integrationDALFactory(db); const integrationAuthDAL = integrationAuthDALFactory(db); const webhookDAL = webhookDALFactory(db); const serviceTokenDAL = serviceTokenDALFactory(db); const identityDAL = identityDALFactory(db); const identityAccessTokenDAL = identityAccessTokenDALFactory(db); const identityOrgMembershipDAL = identityOrgDALFactory(db); const identityProjectDAL = identityProjectDALFactory(db); const identityProjectMembershipRoleDAL = identityProjectMembershipRoleDALFactory(db); const identityProjectAdditionalPrivilegeDAL = identityProjectAdditionalPrivilegeDALFactory(db); const identityUaDAL = identityUaDALFactory(db); const identityUaClientSecretDAL = identityUaClientSecretDALFactory(db); const auditLogDAL = auditLogDALFactory(db); const trustedIpDAL = trustedIpDALFactory(db); const telemetryDAL = telemetryDALFactory(db); // ee db layer ops const permissionDAL = permissionDALFactory(db); const samlConfigDAL = samlConfigDALFactory(db); const scimDAL = scimDALFactory(db); const ldapConfigDAL = ldapConfigDALFactory(db); const ldapGroupMapDAL = ldapGroupMapDALFactory(db); const sapApproverDAL = secretApprovalPolicyApproverDALFactory(db); const secretApprovalPolicyDAL = secretApprovalPolicyDALFactory(db); const secretApprovalRequestDAL = secretApprovalRequestDALFactory(db); const sarReviewerDAL = secretApprovalRequestReviewerDALFactory(db); const sarSecretDAL = secretApprovalRequestSecretDALFactory(db); const secretRotationDAL = secretRotationDALFactory(db); const snapshotDAL = snapshotDALFactory(db); const snapshotSecretDAL = snapshotSecretDALFactory(db); const snapshotFolderDAL = snapshotFolderDALFactory(db); const gitAppInstallSessionDAL = gitAppInstallSessionDALFactory(db); const gitAppOrgDAL = gitAppDALFactory(db); const groupDAL = groupDALFactory(db); const groupProjectDAL = groupProjectDALFactory(db); const groupProjectMembershipRoleDAL = groupProjectMembershipRoleDALFactory(db); const userGroupMembershipDAL = userGroupMembershipDALFactory(db); const secretScanningDAL = secretScanningDALFactory(db); const licenseDAL = licenseDALFactory(db); const dynamicSecretDAL = dynamicSecretDALFactory(db); const dynamicSecretLeaseDAL = dynamicSecretLeaseDALFactory(db); const permissionService = permissionServiceFactory({ permissionDAL, orgRoleDAL, projectRoleDAL, serviceTokenDAL, projectDAL }); const licenseService = licenseServiceFactory({ permissionService, orgDAL, licenseDAL, keyStore }); const trustedIpService = trustedIpServiceFactory({ licenseService, projectDAL, trustedIpDAL, permissionService }); const auditLogQueue = auditLogQueueServiceFactory({ auditLogDAL, queueService, projectDAL, licenseService }); const auditLogService = auditLogServiceFactory({ auditLogDAL, permissionService, auditLogQueue }); const sapService = secretApprovalPolicyServiceFactory({ projectMembershipDAL, projectEnvDAL, secretApprovalPolicyApproverDAL: sapApproverDAL, permissionService, secretApprovalPolicyDAL }); const samlService = samlConfigServiceFactory({ permissionService, orgBotDAL, orgDAL, orgMembershipDAL, userDAL, userAliasDAL, samlConfigDAL, licenseService }); const groupService = groupServiceFactory({ userDAL, groupDAL, groupProjectDAL, orgDAL, userGroupMembershipDAL, projectDAL, projectBotDAL, projectKeyDAL, permissionService, licenseService }); const groupProjectService = groupProjectServiceFactory({ groupDAL, groupProjectDAL, groupProjectMembershipRoleDAL, userGroupMembershipDAL, projectDAL, projectKeyDAL, projectBotDAL, projectRoleDAL, permissionService }); const scimService = scimServiceFactory({ licenseService, scimDAL, userDAL, userAliasDAL, orgDAL, orgMembershipDAL, projectDAL, projectMembershipDAL, groupDAL, groupProjectDAL, userGroupMembershipDAL, projectKeyDAL, projectBotDAL, permissionService, smtpService }); const ldapService = ldapConfigServiceFactory({ ldapConfigDAL, ldapGroupMapDAL, orgDAL, orgBotDAL, groupDAL, groupProjectDAL, projectKeyDAL, projectDAL, projectBotDAL, userGroupMembershipDAL, userDAL, userAliasDAL, permissionService, licenseService }); const telemetryService = telemetryServiceFactory({ keyStore, licenseService }); const telemetryQueue = telemetryQueueServiceFactory({ keyStore, telemetryDAL, queueService }); const tokenService = tokenServiceFactory({ tokenDAL: authTokenDAL, userDAL }); const userService = userServiceFactory({ userDAL, userAliasDAL, orgMembershipDAL, tokenService, smtpService }); const loginService = authLoginServiceFactory({ userDAL, smtpService, tokenService, orgDAL, tokenDAL: authTokenDAL }); const passwordService = authPaswordServiceFactory({ tokenService, smtpService, authDAL, userDAL }); const orgService = orgServiceFactory({ userAliasDAL, licenseService, samlConfigDAL, orgRoleDAL, permissionService, orgDAL, incidentContactDAL, tokenService, projectDAL, projectMembershipDAL, projectKeyDAL, smtpService, userDAL, groupDAL, orgBotDAL }); const signupService = authSignupServiceFactory({ tokenService, smtpService, authDAL, userDAL, userGroupMembershipDAL, projectKeyDAL, projectDAL, projectBotDAL, groupProjectDAL, orgDAL, orgService, licenseService }); const orgRoleService = orgRoleServiceFactory({ permissionService, orgRoleDAL }); const superAdminService = superAdminServiceFactory({ userDAL, authService: loginService, serverCfgDAL: superAdminDAL, orgService, keyStore }); const apiKeyService = apiKeyServiceFactory({ apiKeyDAL, userDAL }); const secretScanningQueue = secretScanningQueueFactory({ telemetryService, smtpService, secretScanningDAL, queueService, orgMembershipDAL: orgDAL }); const secretScanningService = secretScanningServiceFactory({ permissionService, gitAppOrgDAL, gitAppInstallSessionDAL, secretScanningDAL, secretScanningQueue }); const projectBotService = projectBotServiceFactory({ permissionService, projectBotDAL, projectDAL }); const projectMembershipService = projectMembershipServiceFactory({ projectMembershipDAL, projectUserMembershipRoleDAL, projectDAL, permissionService, projectBotDAL, orgDAL, userDAL, userGroupMembershipDAL, smtpService, projectKeyDAL, projectRoleDAL, licenseService }); const projectUserAdditionalPrivilegeService = projectUserAdditionalPrivilegeServiceFactory({ permissionService, projectMembershipDAL, projectUserAdditionalPrivilegeDAL }); const projectKeyService = projectKeyServiceFactory({ permissionService, projectKeyDAL, projectMembershipDAL }); const projectQueueService = projectQueueFactory({ queueService, secretDAL, folderDAL, projectDAL, orgDAL, integrationAuthDAL, orgService, projectEnvDAL, userDAL, secretVersionDAL, projectKeyDAL, projectBotDAL, projectMembershipDAL, secretApprovalRequestDAL, secretApprovalSecretDAL: sarSecretDAL, projectUserMembershipRoleDAL }); const projectService = projectServiceFactory({ permissionService, projectDAL, projectQueue: projectQueueService, secretBlindIndexDAL, identityProjectDAL, identityOrgMembershipDAL, projectBotDAL, projectKeyDAL, userDAL, projectEnvDAL, orgDAL, orgService, projectMembershipDAL, folderDAL, licenseService, projectUserMembershipRoleDAL, identityProjectMembershipRoleDAL, keyStore }); const projectEnvService = projectEnvServiceFactory({ permissionService, projectEnvDAL, licenseService, projectDAL, folderDAL }); const projectRoleService = projectRoleServiceFactory({ permissionService, projectRoleDAL, projectUserMembershipRoleDAL, identityProjectMembershipRoleDAL }); const snapshotService = secretSnapshotServiceFactory({ permissionService, licenseService, folderDAL, secretDAL, snapshotDAL, snapshotFolderDAL, snapshotSecretDAL, secretVersionDAL, folderVersionDAL, secretTagDAL, secretVersionTagDAL }); const webhookService = webhookServiceFactory({ permissionService, webhookDAL, projectEnvDAL }); const secretTagService = secretTagServiceFactory({ secretTagDAL, permissionService }); const folderService = secretFolderServiceFactory({ permissionService, folderDAL, folderVersionDAL, projectEnvDAL, snapshotService }); const integrationAuthService = integrationAuthServiceFactory({ integrationAuthDAL, integrationDAL, permissionService, projectBotDAL, projectBotService }); const secretQueueService = secretQueueFactory({ queueService, secretDAL, folderDAL, integrationAuthService, projectBotService, integrationDAL, secretImportDAL, projectEnvDAL, webhookDAL, orgDAL, projectMembershipDAL, smtpService, projectDAL, projectBotDAL, secretVersionDAL, secretBlindIndexDAL, secretTagDAL, secretVersionTagDAL }); const secretImportService = secretImportServiceFactory({ projectEnvDAL, folderDAL, permissionService, secretImportDAL, projectDAL, secretDAL, secretQueueService }); const secretBlindIndexService = secretBlindIndexServiceFactory({ permissionService, secretDAL, secretBlindIndexDAL }); const secretService = secretServiceFactory({ folderDAL, secretVersionDAL, secretVersionTagDAL, secretBlindIndexDAL, permissionService, projectDAL, secretDAL, secretTagDAL, snapshotService, secretQueueService, secretImportDAL, projectEnvDAL, projectBotService }); const sarService = secretApprovalRequestServiceFactory({ permissionService, folderDAL, secretDAL, secretTagDAL, secretApprovalRequestSecretDAL: sarSecretDAL, secretApprovalRequestReviewerDAL: sarReviewerDAL, projectDAL, secretVersionDAL, secretBlindIndexDAL, secretApprovalRequestDAL, secretService, snapshotService, secretVersionTagDAL, secretQueueService }); const secretRotationQueue = secretRotationQueueFactory({ telemetryService, secretRotationDAL, queue: queueService, secretDAL, secretVersionDAL, projectBotService }); const secretRotationService = secretRotationServiceFactory({ permissionService, secretRotationDAL, secretRotationQueue, projectDAL, licenseService, secretDAL, folderDAL }); const integrationService = integrationServiceFactory({ permissionService, folderDAL, integrationDAL, integrationAuthDAL, secretQueueService }); const serviceTokenService = serviceTokenServiceFactory({ projectEnvDAL, serviceTokenDAL, userDAL, permissionService, projectDAL }); const identityService = identityServiceFactory({ permissionService, identityDAL, identityOrgMembershipDAL }); const identityAccessTokenService = identityAccessTokenServiceFactory({ identityAccessTokenDAL, identityOrgMembershipDAL }); const identityProjectService = identityProjectServiceFactory({ permissionService, projectDAL, identityProjectDAL, identityOrgMembershipDAL, identityProjectMembershipRoleDAL, projectRoleDAL }); const identityProjectAdditionalPrivilegeService = identityProjectAdditionalPrivilegeServiceFactory({ projectDAL, identityProjectAdditionalPrivilegeDAL, permissionService, identityProjectDAL }); const identityUaService = identityUaServiceFactory({ identityOrgMembershipDAL, permissionService, identityDAL, identityAccessTokenDAL, identityUaClientSecretDAL, identityUaDAL, licenseService }); const dynamicSecretProviders = buildDynamicSecretProviders(); const dynamicSecretQueueService = dynamicSecretLeaseQueueServiceFactory({ queueService, dynamicSecretLeaseDAL, dynamicSecretProviders, dynamicSecretDAL }); const dynamicSecretService = dynamicSecretServiceFactory({ projectDAL, dynamicSecretQueueService, dynamicSecretDAL, dynamicSecretLeaseDAL, dynamicSecretProviders, folderDAL, permissionService, licenseService }); const dynamicSecretLeaseService = dynamicSecretLeaseServiceFactory({ projectDAL, permissionService, dynamicSecretQueueService, dynamicSecretDAL, dynamicSecretLeaseDAL, dynamicSecretProviders, folderDAL, licenseService }); await superAdminService.initServerCfg(); // // setup the communication with license key server await licenseService.init(); await auditLogQueue.startAuditLogPruneJob(); await telemetryQueue.startTelemetryCheck(); // inject all services server.decorate("services", { login: loginService, password: passwordService, signup: signupService, user: userService, group: groupService, groupProject: groupProjectService, permission: permissionService, org: orgService, orgRole: orgRoleService, apiKey: apiKeyService, authToken: tokenService, superAdmin: superAdminService, project: projectService, projectMembership: projectMembershipService, projectKey: projectKeyService, projectEnv: projectEnvService, projectRole: projectRoleService, secret: secretService, secretTag: secretTagService, folder: folderService, secretImport: secretImportService, projectBot: projectBotService, integration: integrationService, integrationAuth: integrationAuthService, webhook: webhookService, serviceToken: serviceTokenService, identity: identityService, identityAccessToken: identityAccessTokenService, identityProject: identityProjectService, identityUa: identityUaService, secretApprovalPolicy: sapService, secretApprovalRequest: sarService, secretRotation: secretRotationService, dynamicSecret: dynamicSecretService, dynamicSecretLease: dynamicSecretLeaseService, snapshot: snapshotService, saml: samlService, ldap: ldapService, auditLog: auditLogService, secretScanning: secretScanningService, license: licenseService, trustedIp: trustedIpService, scim: scimService, secretBlindIndex: secretBlindIndexService, telemetry: telemetryService, projectUserAdditionalPrivilege: projectUserAdditionalPrivilegeService, identityProjectAdditionalPrivilege: identityProjectAdditionalPrivilegeService }); server.decorate("store", { user: userDAL }); await server.register(injectIdentity, { userDAL, serviceTokenDAL }); await server.register(injectPermission); await server.register(injectAuditLogInfo); server.route({ method: "GET", url: "/api/status", config: { rateLimit: readLimit }, schema: { response: { 200: z.object({ date: z.date(), message: z.literal("Ok"), emailConfigured: z.boolean().optional(), inviteOnlySignup: z.boolean().optional(), redisConfigured: z.boolean().optional(), secretScanningConfigured: z.boolean().optional() }) } }, handler: async () => { const cfg = getConfig(); const serverCfg = await getServerCfg(); return { date: new Date(), message: "Ok" as const, emailConfigured: cfg.isSmtpConfigured, inviteOnlySignup: Boolean(serverCfg.allowSignUp), redisConfigured: cfg.isRedisConfigured, secretScanningConfigured: cfg.isSecretScanningConfigured }; } }); // register routes for v1 await server.register( async (v1Server) => { await v1Server.register(registerV1EERoutes); await v1Server.register(registerV1Routes); }, { prefix: "/api/v1" } ); await server.register(registerV2Routes, { prefix: "/api/v2" }); await server.register(registerV3Routes, { prefix: "/api/v3" }); server.addHook("onClose", async () => { await telemetryService.flushAll(); }); };