diff --git a/apps/api/src/core/functions/modules/loadModuleRoutes.ts b/apps/api/src/core/functions/modules/loadModuleRoutes.ts index da3f7f256..30bfaa377 100644 --- a/apps/api/src/core/functions/modules/loadModuleRoutes.ts +++ b/apps/api/src/core/functions/modules/loadModuleRoutes.ts @@ -5,6 +5,8 @@ import crypto from 'crypto' import fs from 'fs' import path from 'path' +import { registerModule } from './moduleRegistry' + const IS_PRODUCTION = process.env.NODE_ENV === 'production' const logger = createServiceLogger('Route Loader') @@ -68,6 +70,7 @@ export async function loadModuleRoutes(): Promise> { } modules[key] = mod.default + registerModule(key, pkg.name) } catch (error) { logger.error(`Failed to load routes from ${modDir}: ${error}`) } diff --git a/apps/api/src/core/functions/modules/moduleRegistry.ts b/apps/api/src/core/functions/modules/moduleRegistry.ts new file mode 100644 index 000000000..fa7038ef8 --- /dev/null +++ b/apps/api/src/core/functions/modules/moduleRegistry.ts @@ -0,0 +1,22 @@ +interface ModuleEntry { + hashedKey: string + fullName: string +} + +const registeredModules: ModuleEntry[] = [] + +export function registerModule(hashedKey: string, fullName: string) { + registeredModules.push({ hashedKey, fullName }) +} + +export function isModuleRegistered(hashedKey: string): boolean { + return registeredModules.some(m => m.hashedKey === hashedKey) +} + +export function isModuleNameRegistered(fullName: string): boolean { + return registeredModules.some(m => m.fullName === fullName) +} + +export function getRegisteredModules(): ModuleEntry[] { + return [...registeredModules] +} diff --git a/apps/api/src/core/functions/utils/checkModulesAvailability.ts b/apps/api/src/core/functions/utils/checkModulesAvailability.ts index d1eaa793d..fd791cc28 100644 --- a/apps/api/src/core/functions/utils/checkModulesAvailability.ts +++ b/apps/api/src/core/functions/utils/checkModulesAvailability.ts @@ -1,15 +1,11 @@ -import fs from 'fs' +import { isModuleNameRegistered } from '../modules/moduleRegistry' export async function checkModulesAvailability( moduleId: string ): Promise { - const modulePath = `../modules/${moduleId}/` + const fullName = moduleId.startsWith('@') + ? moduleId + : `@lifeforge/${moduleId}` - try { - fs.accessSync(modulePath, fs.constants.R_OK) - - return true - } catch { - return false - } + return isModuleNameRegistered(fullName) }