@paroicms/server
Version:
The ParoiCMS server
206 lines • 10.5 kB
JavaScript
import { parseLNodeId } from "@paroicms/public-anywhere-lib";
import { permissionPatGuard } from "../admin-backend/auth/authorization.helper.js";
import { moveDocument as moveDocumentQuery } from "../admin-backend/document/document-moving.queries.js";
import { deleteDocument as deleteDocumentQuery, updateDocument as updateDocumentQuery, } from "../admin-backend/document/save-documents.queries.js";
import { getSiteFieldValue } from "../admin-backend/fields/load-fields.queries.js";
import { setLNodeReady } from "../admin-backend/lnode/lnode.queries.js";
import { getTypeNameOf, setNodePublishDate } from "../admin-backend/node/node.queries.js";
import { appConf } from "../context.js";
import { siteReadyGuard } from "../graphql/graphql.types.js";
import { getSiteContext } from "../site-context/site-context.js";
import { migrateSiteSchemas } from "../site-schema-migration/site-schema-migration.js";
import { getFullDocumentProgrammaticApi } from "./get-document-api.js";
import { setMediaProgrammaticApi } from "./media-api.js";
import { searchDocumentsProgrammaticApi } from "./search-documents-api.js";
import { createBlankSiteFromExisting } from "./single-site-generator.js";
import { createAccountProgrammaticApi, updateSiteFieldsProgrammaticApi, } from "./site-content-api.js";
import { buildClusterNodeInfo } from "./site-info-api.js";
import { registerNewSite, removeSite } from "./site-lifecycle-api.js";
import { createDocumentProgrammaticApi, createDocumentTranslationProgrammaticApi, createPartProgrammaticApi, createPartTranslationProgrammaticApi, updateFieldsProgrammaticApi, } from "./write-document-api.js";
export function createRunningServerConnector() {
return {
getSitePackConf: (packName) => {
if (appConf.kind !== "multisite") {
throw new Error("getSitePackDirectories is only available in multisite mode");
}
const pack = appConf.sitePacks.find((p) => p.packName === packName);
if (!pack)
throw new Error(`pack "${packName}" not found`);
return {
...pack,
trusted: pack.trusted !== false,
};
},
registerNewSite,
migrateSiteSchemas,
createBlankSiteFromExisting,
};
}
export function createRunningSiteConnector(input) {
const { fqdn } = input;
return {
loadSiteSchemaAndIds: async () => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
const { siteSchema, homeRoutingCluster } = siteContext;
return { siteSchema, homeRoutingCluster };
},
getSiteInfo: async () => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
const { siteSchema, homeRoutingCluster, siteNodeId } = siteContext;
const title = {};
for (const language of siteSchema.languages) {
const titleValue = await getSiteFieldValue(siteContext, {
fieldName: "title",
language,
publishedOnly: false,
});
title[language] = typeof titleValue === "string" ? titleValue : undefined;
}
const mainCluster = await buildClusterNodeInfo(siteContext, homeRoutingCluster);
return { siteNodeId, title, siteSchema, mainCluster };
},
createAccount: async (account, options) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "site.manageUsers");
}
return await createAccountProgrammaticApi(siteContext, account, options);
},
updateSiteFields: async (language, values) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "site.editProperties");
}
await updateSiteFieldsProgrammaticApi(siteContext, language, values);
},
removeSite: async () => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "site.administer");
}
return await removeSite(siteContext);
},
searchDocuments: async (searchInput) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
return await searchDocumentsProgrammaticApi(siteContext, searchInput);
},
deleteDocument: async (documentId) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
await deleteDocumentQuery(siteContext, parseLNodeId(documentId));
},
moveDocument: async (documentNodeId, newParentNodeId) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
await moveDocumentQuery(siteContext, { documentNodeId, newParentNodeId });
},
publishDocument: async (documentId, publishDateStr) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
const parsedId = parseLNodeId(documentId);
const publishDate = publishDateStr ? new Date(publishDateStr) : new Date();
await setNodePublishDate(siteContext, { nodeId: parsedId.nodeId, publishDate });
await setLNodeReady(siteContext, { lNodeId: parsedId, ready: true });
},
unpublishDocument: async (documentId) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
await setLNodeReady(siteContext, { lNodeId: parseLNodeId(documentId), ready: false });
},
getDocument: async (documentId) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
return await getFullDocumentProgrammaticApi(siteContext, parseLNodeId(documentId));
},
updateDocument: async (documentId, values) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
await updateDocumentQuery(siteContext, parseLNodeId(documentId), values);
},
updateFields: async (lNodeId, values) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
const parsedId = parseLNodeId(lNodeId);
if (input.authMethod === "pat") {
const typeName = await getTypeNameOf(siteContext, parsedId.nodeId);
const permission = typeName === "_site" ? "site.editProperties" : "document.edit";
await permissionPatGuard(siteContext, input.pat, permission);
}
await updateFieldsProgrammaticApi(siteContext, parsedId, values);
},
createDocument: async (createInput) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
return await createDocumentProgrammaticApi(siteContext, createInput);
},
createDocumentTranslation: async (createInput) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
return await createDocumentTranslationProgrammaticApi(siteContext, createInput);
},
createPart: async (createInput) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
return await createPartProgrammaticApi(siteContext, createInput);
},
createPartTranslation: async (createInput) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
return await createPartTranslationProgrammaticApi(siteContext, createInput);
},
setMedia: async (mediaInput) => {
const siteContext = await getSiteContext(fqdn);
siteReadyGuard(siteContext);
if (input.authMethod === "pat") {
await permissionPatGuard(siteContext, input.pat, "document.edit");
}
return await setMediaProgrammaticApi(siteContext, mediaInput);
},
};
}
//# sourceMappingURL=running-server-connector.js.map