import { syncGeneratedPagesFromPublicAssets } from './mindspace-page-sync.mjs'; import { resolvePublishDir } from './user-publish.mjs'; export function createPageSyncService({ pool, pageService, assetService, h5Root, syncWorkspaceAssets = null, logger = console, } = {}) { const syncInFlight = new Map(); async function syncUserGeneratedPages(userId, { onlyRelativePaths = null } = {}) { if (!pool || !pageService || !userId) { return { created: 0, skipped: 0, updated: 0 }; } const scopeKey = onlyRelativePaths == null ? '*' : [...new Set(onlyRelativePaths)].sort().join('|'); const inFlightKey = `${userId}:${scopeKey}`; let inFlight = syncInFlight.get(inFlightKey); if (!inFlight) { inFlight = syncGeneratedPagesFromPublicAssets({ pool, pageService, assetService, userId, publishDir: h5Root ? resolvePublishDir(h5Root, { id: userId }) : null, syncWorkspaceAssets, onlyRelativePaths, }) .catch((error) => { logger.warn?.('[MindSpace] page sync failed:', error?.message ?? error); return { created: 0, skipped: 0, updated: 0 }; }) .finally(() => { if (syncInFlight.get(inFlightKey) === inFlight) { syncInFlight.delete(inFlightKey); } }); syncInFlight.set(inFlightKey, inFlight); } return inFlight; } return { syncUserGeneratedPages }; }