{"version":3,"file":"preview-config.mjs","sources":["../../../../server/src/preview/services/preview-config.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { errors, extendMiddlewareConfiguration } from '@strapi/utils';\n\nexport type HandlerParams = {\n documentId: string;\n locale: string;\n status: 'published' | 'draft';\n};\n\n/**\n * @deprecated Use Core.Config.Admin['preview'] from @strapi/types instead\n * Keeping for backward compatibility\n */\nexport type PreviewConfig = NonNullable;\n\n/**\n * Read configuration for static preview\n */\nconst createPreviewConfigService = ({ strapi }: { strapi: Core.Strapi }) => {\n return {\n register() {\n if (!this.isEnabled()) {\n return;\n }\n\n const config = strapi.config.get('admin.preview') as PreviewConfig;\n\n /**\n * Register the allowed origins for CSP, so the preview URL can be displayed\n */\n if (config.config?.allowedOrigins) {\n const middlewares = strapi.config.get('middlewares') as (\n | string\n | { name?: string; config?: any }\n )[];\n\n const configuredMiddlewares = extendMiddlewareConfiguration(middlewares, {\n name: 'strapi::security',\n config: {\n contentSecurityPolicy: {\n directives: {\n 'frame-src': config.config.allowedOrigins,\n },\n },\n },\n });\n\n strapi.config.set('middlewares', configuredMiddlewares);\n }\n },\n\n isConfigured() {\n const config = strapi.config.get('admin.preview') as PreviewConfig;\n return config?.enabled === false || config?.config?.handler != null;\n },\n\n isEnabled() {\n const config = strapi.config.get('admin.preview') as PreviewConfig;\n\n if (!config) {\n return false;\n }\n\n return config?.enabled ?? true;\n },\n\n /**\n * Validate if the configuration is valid\n */\n validate() {\n if (!this.isEnabled()) {\n return;\n }\n\n const handler = this.getPreviewHandler();\n\n // Handler must be a function\n if (typeof handler !== 'function') {\n throw new errors.ValidationError(\n 'Preview configuration is invalid. Handler must be a function'\n );\n }\n },\n\n /**\n * Utility to get the preview handler from the configuration\n */\n getPreviewHandler(): NonNullable['config']['handler'] {\n const emptyHandler = () => {\n return undefined;\n };\n\n if (!this.isEnabled()) {\n return emptyHandler;\n }\n\n const config = strapi.config.get('admin.preview') as PreviewConfig;\n\n return config?.config?.handler || emptyHandler;\n },\n };\n};\n\nexport { createPreviewConfigService };\n"],"names":["createPreviewConfigService","strapi","register","isEnabled","config","get","allowedOrigins","middlewares","configuredMiddlewares","extendMiddlewareConfiguration","name","contentSecurityPolicy","directives","set","isConfigured","enabled","handler","validate","getPreviewHandler","errors","ValidationError","emptyHandler","undefined"],"mappings":";;AAeA;;AAEC,IACD,MAAMA,0BAAAA,GAA6B,CAAC,EAAEC,MAAM,EAA2B,GAAA;IACrE,OAAO;AACLC,QAAAA,QAAAA,CAAAA,GAAAA;AACE,YAAA,IAAI,CAAC,IAAI,CAACC,SAAS,EAAA,EAAI;AACrB,gBAAA;AACF,YAAA;AAEA,YAAA,MAAMC,MAAAA,GAASH,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;AAEjC;;AAEC,UACD,IAAID,MAAAA,CAAOA,MAAM,EAAEE,cAAAA,EAAgB;AACjC,gBAAA,MAAMC,WAAAA,GAAcN,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,aAAA,CAAA;gBAKtC,MAAMG,qBAAAA,GAAwBC,8BAA8BF,WAAAA,EAAa;oBACvEG,IAAAA,EAAM,kBAAA;oBACNN,MAAAA,EAAQ;wBACNO,qBAAAA,EAAuB;4BACrBC,UAAAA,EAAY;gCACV,WAAA,EAAaR,MAAAA,CAAOA,MAAM,CAACE;AAC7B;AACF;AACF;AACF,iBAAA,CAAA;AAEAL,gBAAAA,MAAAA,CAAOG,MAAM,CAACS,GAAG,CAAC,aAAA,EAAeL,qBAAAA,CAAAA;AACnC,YAAA;AACF,QAAA,CAAA;AAEAM,QAAAA,YAAAA,CAAAA,GAAAA;AACE,YAAA,MAAMV,MAAAA,GAASH,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;AACjC,YAAA,OAAOD,MAAAA,EAAQW,OAAAA,KAAY,KAAA,IAASX,MAAAA,EAAQA,QAAQY,OAAAA,IAAW,IAAA;AACjE,QAAA,CAAA;AAEAb,QAAAA,SAAAA,CAAAA,GAAAA;AACE,YAAA,MAAMC,MAAAA,GAASH,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;AAEjC,YAAA,IAAI,CAACD,MAAAA,EAAQ;gBACX,OAAO,KAAA;AACT,YAAA;AAEA,YAAA,OAAOA,QAAQW,OAAAA,IAAW,IAAA;AAC5B,QAAA,CAAA;AAEA;;QAGAE,QAAAA,CAAAA,GAAAA;AACE,YAAA,IAAI,CAAC,IAAI,CAACd,SAAS,EAAA,EAAI;AACrB,gBAAA;AACF,YAAA;YAEA,MAAMa,OAAAA,GAAU,IAAI,CAACE,iBAAiB,EAAA;;YAGtC,IAAI,OAAOF,YAAY,UAAA,EAAY;gBACjC,MAAM,IAAIG,MAAAA,CAAOC,eAAe,CAC9B,8DAAA,CAAA;AAEJ,YAAA;AACF,QAAA,CAAA;AAEA;;QAGAF,iBAAAA,CAAAA,GAAAA;AACE,YAAA,MAAMG,YAAAA,GAAe,IAAA;gBACnB,OAAOC,SAAAA;AACT,YAAA,CAAA;AAEA,YAAA,IAAI,CAAC,IAAI,CAACnB,SAAS,EAAA,EAAI;gBACrB,OAAOkB,YAAAA;AACT,YAAA;AAEA,YAAA,MAAMjB,MAAAA,GAASH,MAAAA,CAAOG,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;YAEjC,OAAOD,MAAAA,EAAQA,QAAQY,OAAAA,IAAWK,YAAAA;AACpC,QAAA;AACF,KAAA;AACF;;;;"}