UNPKG

@paroicms/server

Version:
206 lines 10.5 kB
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