From a2250b0ec47f48684678d162eb5de02abd5739e4 Mon Sep 17 00:00:00 2001 From: Krzysztof Polak Date: Thu, 26 Feb 2026 13:37:20 +0100 Subject: [PATCH 1/2] feat: enhance MpnBuilderService with external renderer normalization and improve Slack service logging --- src/modules/mpn-builder/service.ts | 39 +++++++++++++++++-- .../steps/slack-service.ts | 6 +++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/modules/mpn-builder/service.ts b/src/modules/mpn-builder/service.ts index 176e4f9..b3ee7f9 100644 --- a/src/modules/mpn-builder/service.ts +++ b/src/modules/mpn-builder/service.ts @@ -119,9 +119,8 @@ class MpnBuilderService extends MedusaService({ const templateModule = await import( templateValue ) - const template = templateModule.default - // renderer = template?.default || template - renderer = template?.default || templateModule + renderer = + templateModule?.default || templateModule if (!renderer) { this.logger_.warn( @@ -129,6 +128,12 @@ class MpnBuilderService extends MedusaService({ ) return } + + renderer = + this.normalizeExternalRenderer( + renderer, + templateService + ) } catch (error: any) { this.logger_.warn( `Failed to load template from "${templateValue}": ${error?.message || "Unknown error"}` @@ -155,6 +160,34 @@ class MpnBuilderService extends MedusaService({ ) } + /** + * Normalize external template modules to match system template shape. + * Ensures getConfig() exists and base template renderers are included. + */ + private normalizeExternalRenderer( + renderer: any, + templateService: BaseTemplateService + ) { + if (!renderer) { + return renderer + } + + const templateBlocks = renderer.templateBlocks + const translations = renderer.translations + + const baseTemplateConfig = (templateService as any) + ?.baseTemplateConfig + + return { + ...(baseTemplateConfig || {}), + ...renderer, + getConfig: () => ({ + blocks: templateBlocks || [], + translations: translations || {}, + }), + } + } + /** * Get template types * diff --git a/src/workflows/mpn-builder-services/steps/slack-service.ts b/src/workflows/mpn-builder-services/steps/slack-service.ts index 4ca329e..a23b3fc 100644 --- a/src/workflows/mpn-builder-services/steps/slack-service.ts +++ b/src/workflows/mpn-builder-services/steps/slack-service.ts @@ -51,6 +51,12 @@ export const slackServiceStep = createStep( let blocks: any[] = [] + console.log('templateId', templateId); + console.log('isSystemTemplateId', isSystemTemplateId); + console.log('isExternalTemplateId', isExternalTemplateId); + console.log('isRegistryTemplate', isRegistryTemplate); + + // If it's not a registry template, get the blocks from the database if (!isRegistryTemplate) { const { result: templateData } = await getTemplateWorkflow(container).run({ From bff5e4ec83584bd9c71c4f5f77d7e92042a723ab Mon Sep 17 00:00:00 2001 From: Krzysztof Polak Date: Thu, 26 Feb 2026 13:37:44 +0100 Subject: [PATCH 2/2] feat: implement error handling in MpnBuilderService and optimize logging for better traceability --- .changeset/external-templates-normalization.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/external-templates-normalization.md diff --git a/.changeset/external-templates-normalization.md b/.changeset/external-templates-normalization.md new file mode 100644 index 0000000..887ce12 --- /dev/null +++ b/.changeset/external-templates-normalization.md @@ -0,0 +1,7 @@ +--- +"@codee-sh/medusa-plugin-notification-emails": patch +--- + +Normalize external template registration to use a single shape +(`templateBlocks` + `translations`) and ensure `getConfig` is +always available for external templates.