/** * Module Actions Registry (Server-Side) * * Static registry for internal module server actions. * External modules registered via zen.config.js are resolved through the runtime registry. * * Usage: * import { getModuleActions } from '@zen/core/modules/actions'; * const { getInvoiceByToken } = getModuleActions('invoice'); */ import { getModule } from '../core/modules/registry.js'; // Static actions for internal modules (add entries here for new internal modules) export const MODULE_ACTIONS = { posts: {}, }; // Static dashboard stats actions for internal modules export const MODULE_DASHBOARD_ACTIONS = {}; /** * Get actions for a specific module. * Checks the static registry first, then the runtime registry for external modules. * * @param {string} moduleName - Module name * @returns {Object} Module actions object or empty object */ export function getModuleActions(moduleName) { if (MODULE_ACTIONS[moduleName]) return MODULE_ACTIONS[moduleName]; // External modules declare their actions in their defineModule() config return getModule(moduleName)?.actions ?? {}; } /** * Get dashboard stats action for a specific module * @param {string} moduleName - Module name * @returns {Function|null} Dashboard stats function or null */ export function getModuleDashboardAction(moduleName) { return MODULE_DASHBOARD_ACTIONS[moduleName] || null; } /** * Get all dashboard stats from all modules * @returns {Promise} Object with module names as keys and stats as values */ export async function getAllModuleDashboardStats() { const stats = {}; for (const [moduleName, getStats] of Object.entries(MODULE_DASHBOARD_ACTIONS)) { const envKey = `ZEN_MODULE_${moduleName.toUpperCase()}`; if (process.env[envKey] !== 'true') continue; try { const result = await getStats(); if (result.success) { stats[moduleName] = result.stats; } } catch (error) { console.error(`Error getting dashboard stats for ${moduleName}:`, error); } } return stats; } export default MODULE_ACTIONS;