Files
memind/mindspace-page-sync-service.mjs
T
john d3239ff292 fix: MindSpace remote sync, thumbnail fallback, and Plaza URL guards
Ensure page sync runs via pageSyncService in remote mode, fall back to
workspace HTML when storage assets are missing, and prevent production
Portal from linking to loopback Plaza URLs baked in at build time.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 07:57:04 +08:00

45 lines
1.2 KiB
JavaScript

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) {
if (!pool || !pageService || !userId) {
return { created: 0, skipped: 0, updated: 0 };
}
let inFlight = syncInFlight.get(userId);
if (!inFlight) {
inFlight = syncGeneratedPagesFromPublicAssets({
pool,
pageService,
assetService,
userId,
publishDir: h5Root ? resolvePublishDir(h5Root, { id: userId }) : null,
syncWorkspaceAssets,
})
.catch((error) => {
logger.warn?.('[MindSpace] page sync failed:', error?.message ?? error);
return { created: 0, skipped: 0, updated: 0 };
})
.finally(() => {
if (syncInFlight.get(userId) === inFlight) {
syncInFlight.delete(userId);
}
});
syncInFlight.set(userId, inFlight);
}
return inFlight;
}
return { syncUserGeneratedPages };
}