Files
core/src/modules/modules.actions.js
T
hykocx 33c65d9871 chore: bump version to 1.3.8 and fix module import path
- Bump package version from 1.3.7 to 1.3.8
- Update modules.actions.js import to use package alias
  `@zen/core/core/modules` instead of relative path
2026-04-12 19:05:00 -04:00

85 lines
2.6 KiB
JavaScript

/**
* 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, getEnabledModules } from '@zen/core/core/modules';
// 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 (internal static + external runtime).
* @returns {Promise<Object>} Object with module names as keys and stats as values
*/
export async function getAllModuleDashboardStats() {
const stats = {};
// Internal modules — static action map
for (const [moduleName, getStats] of Object.entries(MODULE_DASHBOARD_ACTIONS)) {
const envKey = `ZEN_MODULE_${moduleName.toUpperCase().replace(/-/g, '_')}`;
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);
}
}
// External modules — runtime registry
for (const mod of getEnabledModules()) {
if (mod.external && typeof mod.actions?.getDashboardStats === 'function') {
try {
const result = await mod.actions.getDashboardStats();
if (result.success) {
stats[mod.name] = result.stats;
}
} catch (error) {
console.error(`Error getting dashboard stats for ${mod.name}:`, error);
}
}
}
return stats;
}
export default MODULE_ACTIONS;