From b912db69f6c45f0f38eae6922bd26542653d68ee Mon Sep 17 00:00:00 2001 From: Gosha Date: Mon, 27 Jan 2025 10:48:44 +0200 Subject: [PATCH 1/3] feat(root): wip refactor control compilation --- .../construct-framework-workflow.usecase.ts | 5 +- .../chat-output-renderer.usecase.ts | 6 +- .../delay-output-renderer.usecase.ts | 6 +- .../digest-output-renderer.usecase.ts | 6 +- .../email-output-renderer.usecase.ts | 22 ++--- .../in-app-output-renderer.usecase.ts | 6 +- .../push-output-renderer.usecase.ts | 6 +- .../sms-output-renderer.usecase.ts | 6 +- apps/api/src/app/shared/helpers/liquid.ts | 11 ++- .../src/components/primitives/editor.tsx | 5 +- .../shared/configure-preview-accordion.tsx | 4 +- .../test-workflow/snippet-editor.tsx | 5 +- packages/framework/src/client.ts | 99 +++++++++++++------ packages/framework/src/types/config.types.ts | 6 ++ 14 files changed, 127 insertions(+), 66 deletions(-) diff --git a/apps/api/src/app/environments-v1/usecases/construct-framework-workflow/construct-framework-workflow.usecase.ts b/apps/api/src/app/environments-v1/usecases/construct-framework-workflow/construct-framework-workflow.usecase.ts index 20519ca276d..7f2c6ab0b3e 100644 --- a/apps/api/src/app/environments-v1/usecases/construct-framework-workflow/construct-framework-workflow.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/construct-framework-workflow/construct-framework-workflow.usecase.ts @@ -19,6 +19,7 @@ import { DelayOutputRendererUsecase } from '../output-renderers/delay-output-ren import { DigestOutputRendererUsecase } from '../output-renderers/digest-output-renderer.usecase'; import { evaluateRules } from '../../../shared/services/query-parser/query-parser.service'; import { isMatchingJsonSchema } from '../../../workflows-v2/util/jsonToSchema'; +import { parseLiquid, parseLiquidString } from '../../../shared/helpers/liquid'; const LOG_CONTEXT = 'ConstructFrameworkWorkflow'; @@ -239,8 +240,8 @@ export class ConstructFrameworkWorkflow { if (_.isEmpty(skipRules)) { return false; } - - const { result, error } = evaluateRules(skipRules, variables); + const compiledSkipRules = await parseLiquid(skipRules, variables); + const { result, error } = evaluateRules(compiledSkipRules, variables); if (error) { this.logger.error({ err: error }, 'Failed to evaluate skip rule', LOG_CONTEXT); diff --git a/apps/api/src/app/environments-v1/usecases/output-renderers/chat-output-renderer.usecase.ts b/apps/api/src/app/environments-v1/usecases/output-renderers/chat-output-renderer.usecase.ts index 20ceae85707..f95090c35cd 100644 --- a/apps/api/src/app/environments-v1/usecases/output-renderers/chat-output-renderer.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/output-renderers/chat-output-renderer.usecase.ts @@ -2,13 +2,15 @@ import { ChatRenderOutput } from '@novu/shared'; import { Injectable } from '@nestjs/common'; import { InstrumentUsecase } from '@novu/application-generic'; import { RenderCommand } from './render-command'; +import { parseLiquid } from '../../../shared/helpers/liquid'; @Injectable() export class ChatOutputRendererUsecase { @InstrumentUsecase() - execute(renderCommand: RenderCommand): ChatRenderOutput { + async execute(renderCommand: RenderCommand): Promise { const { skip, ...outputControls } = renderCommand.controlValues ?? {}; + const parsedOutputControls = await parseLiquid(outputControls, renderCommand.fullPayloadForRender); - return outputControls as any; + return parsedOutputControls as any; } } diff --git a/apps/api/src/app/environments-v1/usecases/output-renderers/delay-output-renderer.usecase.ts b/apps/api/src/app/environments-v1/usecases/output-renderers/delay-output-renderer.usecase.ts index 2e86f6d6253..a0e74a05106 100644 --- a/apps/api/src/app/environments-v1/usecases/output-renderers/delay-output-renderer.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/output-renderers/delay-output-renderer.usecase.ts @@ -2,13 +2,15 @@ import { Injectable } from '@nestjs/common'; import { DelayRenderOutput } from '@novu/shared'; import { InstrumentUsecase } from '@novu/application-generic'; import { RenderCommand } from './render-command'; +import { parseLiquid } from '../../../shared/helpers/liquid'; @Injectable() export class DelayOutputRendererUsecase { @InstrumentUsecase() - execute(renderCommand: RenderCommand): DelayRenderOutput { + async execute(renderCommand: RenderCommand): Promise { const { skip, ...outputControls } = renderCommand.controlValues ?? {}; + const parsedOutputControls = await parseLiquid(outputControls, renderCommand.fullPayloadForRender); - return outputControls as any; + return parsedOutputControls as any; } } diff --git a/apps/api/src/app/environments-v1/usecases/output-renderers/digest-output-renderer.usecase.ts b/apps/api/src/app/environments-v1/usecases/output-renderers/digest-output-renderer.usecase.ts index c0993cbdb12..e312f51bd23 100644 --- a/apps/api/src/app/environments-v1/usecases/output-renderers/digest-output-renderer.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/output-renderers/digest-output-renderer.usecase.ts @@ -2,13 +2,15 @@ import { Injectable, InternalServerErrorException } from '@nestjs/common'; import { DigestRenderOutput } from '@novu/shared'; import { InstrumentUsecase } from '@novu/application-generic'; import { RenderCommand } from './render-command'; +import { parseLiquid } from '../../../shared/helpers/liquid'; @Injectable() export class DigestOutputRendererUsecase { @InstrumentUsecase() - execute(renderCommand: RenderCommand): DigestRenderOutput { + async execute(renderCommand: RenderCommand): Promise { const { skip, ...outputControls } = renderCommand.controlValues ?? {}; + const parsedOutputControls = await parseLiquid(outputControls, renderCommand.fullPayloadForRender); - return outputControls as any; + return parsedOutputControls as any; } } diff --git a/apps/api/src/app/environments-v1/usecases/output-renderers/email-output-renderer.usecase.ts b/apps/api/src/app/environments-v1/usecases/output-renderers/email-output-renderer.usecase.ts index 2e3d6602657..4775162f55d 100644 --- a/apps/api/src/app/environments-v1/usecases/output-renderers/email-output-renderer.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/output-renderers/email-output-renderer.usecase.ts @@ -7,7 +7,7 @@ import { InstrumentUsecase } from '@novu/application-generic'; import { FullPayloadForRender, RenderCommand } from './render-command'; import { WrapMailyInLiquidUseCase } from './maily-to-liquid/wrap-maily-in-liquid.usecase'; import { MAILY_ITERABLE_MARK, MailyAttrsEnum, MailyContentTypeEnum } from './maily-to-liquid/maily.types'; -import { parseLiquid } from '../../../shared/helpers/liquid'; +import { parseLiquid, parseLiquidString } from '../../../shared/helpers/liquid'; export class EmailOutputRendererCommand extends RenderCommand {} @@ -17,7 +17,8 @@ export class EmailOutputRendererUsecase { @InstrumentUsecase() async execute(renderCommand: EmailOutputRendererCommand): Promise { - const { body, subject } = renderCommand.controlValues; + const { body, subject: controlSubject } = renderCommand.controlValues; + const subject = await parseLiquidString(controlSubject as string, renderCommand.fullPayloadForRender); if (!body || typeof body !== 'string') { /** @@ -33,7 +34,7 @@ export class EmailOutputRendererUsecase { const liquifiedMaily = this.wrapMailyInLiquidUsecase.execute({ emailEditor: body }); const transformedMaily = await this.transformMailyContent(liquifiedMaily, renderCommand.fullPayloadForRender); - const parsedMaily = await this.parseMailyContentByLiquid(transformedMaily, renderCommand.fullPayloadForRender); + const parsedMaily = await parseLiquid(transformedMaily, renderCommand.fullPayloadForRender); const strippedMaily = this.removeTrailingEmptyLines(parsedMaily); const renderedHtml = await mailyRender(strippedMaily); @@ -42,7 +43,7 @@ export class EmailOutputRendererUsecase { * This passes responsibility to framework to throw type validation exceptions * rather than handling invalid types here. */ - return { subject: subject as string, body: renderedHtml }; + return { subject, body: renderedHtml }; } private removeTrailingEmptyLines(node: MailyJSONContent): MailyJSONContent { @@ -69,15 +70,6 @@ export class EmailOutputRendererUsecase { return { ...node, content: filteredContent }; } - private async parseMailyContentByLiquid( - mailyContent: MailyJSONContent, - variables: FullPayloadForRender - ): Promise { - const parsedString = await parseLiquid(JSON.stringify(mailyContent), variables); - - return JSON.parse(parsedString); - } - private async transformMailyContent( node: MailyJSONContent, variables: FullPayloadForRender, @@ -146,7 +138,7 @@ export class EmailOutputRendererUsecase { node: MailyJSONContent & { attrs: { [MailyAttrsEnum.SHOW_IF_KEY]: string } } ): Promise { const { [MailyAttrsEnum.SHOW_IF_KEY]: showIfKey } = node.attrs; - const parsedShowIfValue = await parseLiquid(showIfKey, variables); + const parsedShowIfValue = await parseLiquidString(showIfKey, variables); return this.stringToBoolean(parsedShowIfValue); } @@ -209,7 +201,7 @@ export class EmailOutputRendererUsecase { } private async getIterableArray(iterablePath: string, variables: FullPayloadForRender): Promise { - const iterableArrayString = await parseLiquid(iterablePath, variables); + const iterableArrayString = await parseLiquidString(iterablePath, variables); try { const parsedArray = JSON.parse(iterableArrayString.replace(/'/g, '"')); diff --git a/apps/api/src/app/environments-v1/usecases/output-renderers/in-app-output-renderer.usecase.ts b/apps/api/src/app/environments-v1/usecases/output-renderers/in-app-output-renderer.usecase.ts index c80b524e1bb..3ffcc775b18 100644 --- a/apps/api/src/app/environments-v1/usecases/output-renderers/in-app-output-renderer.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/output-renderers/in-app-output-renderer.usecase.ts @@ -2,13 +2,15 @@ import { InAppRenderOutput } from '@novu/shared'; import { Injectable } from '@nestjs/common'; import { InstrumentUsecase } from '@novu/application-generic'; import { RenderCommand } from './render-command'; +import { parseLiquid } from '../../../shared/helpers/liquid'; @Injectable() export class InAppOutputRendererUsecase { @InstrumentUsecase() - execute(renderCommand: RenderCommand): InAppRenderOutput { + async execute(renderCommand: RenderCommand): Promise { const { skip, disableOutputSanitization, ...outputControls } = renderCommand.controlValues ?? {}; + const parsedOutputControls = await parseLiquid(outputControls, renderCommand.fullPayloadForRender); - return outputControls as any; + return parsedOutputControls as any; } } diff --git a/apps/api/src/app/environments-v1/usecases/output-renderers/push-output-renderer.usecase.ts b/apps/api/src/app/environments-v1/usecases/output-renderers/push-output-renderer.usecase.ts index 40377647732..0a4094b8119 100644 --- a/apps/api/src/app/environments-v1/usecases/output-renderers/push-output-renderer.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/output-renderers/push-output-renderer.usecase.ts @@ -2,13 +2,15 @@ import { Injectable } from '@nestjs/common'; import { PushRenderOutput } from '@novu/shared'; import { InstrumentUsecase } from '@novu/application-generic'; import { RenderCommand } from './render-command'; +import { parseLiquid } from '../../../shared/helpers/liquid'; @Injectable() export class PushOutputRendererUsecase { @InstrumentUsecase() - execute(renderCommand: RenderCommand): PushRenderOutput { + async execute(renderCommand: RenderCommand): Promise { const { skip, ...outputControls } = renderCommand.controlValues ?? {}; + const parsedOutputControls = await parseLiquid(outputControls, renderCommand.fullPayloadForRender); - return outputControls as any; + return parsedOutputControls as any; } } diff --git a/apps/api/src/app/environments-v1/usecases/output-renderers/sms-output-renderer.usecase.ts b/apps/api/src/app/environments-v1/usecases/output-renderers/sms-output-renderer.usecase.ts index 4e43cd28622..84abd68ed3c 100644 --- a/apps/api/src/app/environments-v1/usecases/output-renderers/sms-output-renderer.usecase.ts +++ b/apps/api/src/app/environments-v1/usecases/output-renderers/sms-output-renderer.usecase.ts @@ -2,13 +2,15 @@ import { Injectable } from '@nestjs/common'; import { SmsRenderOutput } from '@novu/shared'; import { InstrumentUsecase } from '@novu/application-generic'; import { RenderCommand } from './render-command'; +import { parseLiquid } from '../../../shared/helpers/liquid'; @Injectable() export class SmsOutputRendererUsecase { @InstrumentUsecase() - execute(renderCommand: RenderCommand): SmsRenderOutput { + async execute(renderCommand: RenderCommand): Promise { const { skip, ...outputControls } = renderCommand.controlValues ?? {}; + const parsedOutputControls = await parseLiquid(outputControls, renderCommand.fullPayloadForRender); - return outputControls as any; + return parsedOutputControls as any; } } diff --git a/apps/api/src/app/shared/helpers/liquid.ts b/apps/api/src/app/shared/helpers/liquid.ts index 959869897e2..e2b425aec8d 100644 --- a/apps/api/src/app/shared/helpers/liquid.ts +++ b/apps/api/src/app/shared/helpers/liquid.ts @@ -1,6 +1,13 @@ import { Liquid } from 'liquidjs'; -export const parseLiquid = async (value: string, variables: object): Promise => { +export async function parseLiquid(value: T, variables: object): Promise { + const valueStringified = JSON.stringify(value); + const renderedString = await parseLiquidString(valueStringified, variables); + + return JSON.parse(renderedString); +} + +export async function parseLiquidString(value: string, variables: object): Promise { const client = new Liquid({ outputEscape: (output) => { return stringifyDataStructureWithSingleQuotes(output); @@ -10,7 +17,7 @@ export const parseLiquid = async (value: string, variables: object): Promise { if (Array.isArray(value) || (typeof value === 'object' && value !== null)) { diff --git a/apps/dashboard/src/components/primitives/editor.tsx b/apps/dashboard/src/components/primitives/editor.tsx index 09537afd26e..b1ac8a9c5d0 100644 --- a/apps/dashboard/src/components/primitives/editor.tsx +++ b/apps/dashboard/src/components/primitives/editor.tsx @@ -194,12 +194,15 @@ export const Editor = React.forwardRef( // which results in value not being updated and "jumping" effect in the editor // to prevent this we need to flush the state updates synchronously flushSync(() => { + console.log('value 4444', value); onChangeRef.current?.(value); }); }, [onChangeRef] ); + console.log('value 3333', JSON.stringify(value)); + return ( ( height={height} placeholder={placeholder} basicSetup={basicSetup} - value={value} + value={JSON.stringify(value)} onChange={onChangeCallback} theme={theme} onBlur={() => { diff --git a/apps/dashboard/src/components/workflow-editor/steps/shared/configure-preview-accordion.tsx b/apps/dashboard/src/components/workflow-editor/steps/shared/configure-preview-accordion.tsx index 0f3bd85a9b5..1e130403e94 100644 --- a/apps/dashboard/src/components/workflow-editor/steps/shared/configure-preview-accordion.tsx +++ b/apps/dashboard/src/components/workflow-editor/steps/shared/configure-preview-accordion.tsx @@ -46,6 +46,8 @@ export const ConfigurePreviewAccordion = ({ [setEditorValue] ); + console.log('editorValue 6666', editorValue); + return ( @@ -61,7 +63,7 @@ export const ConfigurePreviewAccordion = ({ style={{ '--radix-collapsible-content-height': `${height}px` } as CSSProperties} > stringifyDataStructureWithSingleQuotes(value, spaces) ); @@ -86,6 +89,7 @@ export class Client { apiUrl: resolveApiUrl(providedOptions?.apiUrl), secretKey: resolveSecretKey(providedOptions?.secretKey), strictAuthentication: !isRuntimeInDevelopment(), + compileControls: providedOptions?.compileControls ?? true, }; if (providedOptions?.strictAuthentication !== undefined) { @@ -309,11 +313,20 @@ export class Client { const step = this.getStep(event.workflowId, stepId); const isPreview = event.action === PostActionEnum.PREVIEW; + let controls = {}; + + if (stepId === event.stepId) { + const templateControls = await this.createStepControls(step, event); + + if (this.compileControls) { + controls = await this.renderTemplateControls(templateControls, event); + } else { + controls = templateControls; + } + } // Only evaluate a skip condition when the step is the current step and not in preview mode. if (!isPreview && stepId === event.stepId) { - const templateControls = await this.createStepControls(step, event); - const controls = await this.compileControls(templateControls, event); const shouldSkip = await this.shouldSkip(options?.skip as typeof step.options.skip, controls); if (shouldSkip) { @@ -336,24 +349,28 @@ export class Client { const executeStepHandler = this.executeStep.bind(this); const handler = isPreview ? previewStepHandler : executeStepHandler; - let stepResult = await handler(event, { - ...step, - providers: step.providers.map((provider) => { - // TODO: Update return type to include ChannelStep and fix typings - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const providerResolve = (options as any)?.providers?.[provider.type] as typeof provider.resolve; - - if (!providerResolve) { - throw new ProviderNotFoundError(provider.type); - } - - return { - ...provider, - resolve: providerResolve, - }; - }), - resolve: stepResolve as typeof step.resolve, - }); + let stepResult = await handler( + event, + { + ...step, + providers: step.providers.map((provider) => { + // TODO: Update return type to include ChannelStep and fix typings + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const providerResolve = (options as any)?.providers?.[provider.type] as typeof provider.resolve; + + if (!providerResolve) { + throw new ProviderNotFoundError(provider.type); + } + + return { + ...provider, + resolve: providerResolve, + }; + }), + resolve: stepResolve as typeof step.resolve, + }, + controls + ); if ( Object.values(ChannelStepEnum).includes(step.type as ChannelStepEnum) && @@ -634,12 +651,11 @@ export class Client { private async executeStep( event: Event, - step: DiscoverStepOutput + step: DiscoverStepOutput, + controls: Record ): Promise> { if (event.stepId === step.stepId) { try { - const templateControls = await this.createStepControls(step, event); - const controls = await this.compileControls(templateControls, event); const output = await step.resolve(controls); const validatedOutput = await this.validate( output, @@ -696,8 +712,26 @@ export class Client { } } - private async compileControls(templateControls: Record, event: Event) { + private async renderTemplateControls(templateControls: Record, event: Event) { try { + // eslint-disable-next-line no-console + console.log( + 'compileControls 555 ', + JSON.stringify( + { + templateControls, + templateControlsString: JSON.stringify(templateControls), + variables: { + payload: event.payload, + subscriber: event.subscriber, + steps: buildSteps(event.state), + }, + }, + null, + 2 + ) + ); + const templateString = this.templateEngine.parse(JSON.stringify(templateControls)); const compiledString = await this.templateEngine.render(templateString, { @@ -708,6 +742,9 @@ export class Client { return JSON.parse(compiledString); } catch (error) { + // eslint-disable-next-line no-console + console.log('error 666', error); + throw new StepControlCompilationFailedError(event.workflowId, event.stepId, error); } } @@ -734,10 +771,11 @@ export class Client { private async previewStep( event: Event, - step: DiscoverStepOutput + step: DiscoverStepOutput, + controls: Record ): Promise> { try { - return await this.constructStepForPreview(event, step); + return await this.constructStepForPreview(event, step, controls); } catch (error) { console.log(` ${EMOJI.ERROR} Failed to preview stepId: \`${step.stepId}\``); @@ -749,9 +787,9 @@ export class Client { } } - private async constructStepForPreview(event: Event, step: DiscoverStepOutput) { + private async constructStepForPreview(event: Event, step: DiscoverStepOutput, controls: Record) { if (event.stepId === step.stepId) { - return await this.previewRequiredStep(step, event); + return await this.previewRequiredStep(step, event, controls); } else { return await this.extractMockDataForPreviousSteps(event, step); } @@ -770,10 +808,7 @@ export class Client { }; } - private async previewRequiredStep(step: DiscoverStepOutput, event: Event) { - const templateControls = await this.createStepControls(step, event); - const controls = await this.compileControls(templateControls, event); - + private async previewRequiredStep(step: DiscoverStepOutput, event: Event, controls: Record) { const previewOutput = await step.resolve(controls); const validatedOutput = await this.validate( previewOutput, diff --git a/packages/framework/src/types/config.types.ts b/packages/framework/src/types/config.types.ts index 65f9c9e4cfe..be930b38979 100644 --- a/packages/framework/src/types/config.types.ts +++ b/packages/framework/src/types/config.types.ts @@ -23,4 +23,10 @@ export type ClientOptions = { * Defaults to true. */ strictAuthentication?: boolean; + + /** + * Whether to compile controls. + * Defaults to true. + */ + compileControls?: boolean; }; From b4dd38c2223fcc9378dd154b036bc1dc01871305 Mon Sep 17 00:00:00 2001 From: Gosha Date: Mon, 27 Jan 2025 12:27:12 +0200 Subject: [PATCH 2/3] feat(api-service): add compile flag --- apps/api/src/app/environments-v1/novu-bridge-client.ts | 2 +- apps/dashboard/src/components/primitives/editor.tsx | 5 +---- .../steps/shared/configure-preview-accordion.tsx | 4 +--- .../workflow-editor/test-workflow/snippet-editor.tsx | 5 +---- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/apps/api/src/app/environments-v1/novu-bridge-client.ts b/apps/api/src/app/environments-v1/novu-bridge-client.ts index 94f1b062cd6..4eab6b2fbff 100644 --- a/apps/api/src/app/environments-v1/novu-bridge-client.ts +++ b/apps/api/src/app/environments-v1/novu-bridge-client.ts @@ -55,7 +55,7 @@ export class NovuBridgeClient { this.novuRequestHandler = new NovuRequestHandler({ frameworkName, workflows, - client: new Client({ secretKey, strictAuthentication: true }), + client: new Client({ secretKey, strictAuthentication: true, compileControls: false }), handler: this.novuHandler.handler, }); diff --git a/apps/dashboard/src/components/primitives/editor.tsx b/apps/dashboard/src/components/primitives/editor.tsx index b1ac8a9c5d0..09537afd26e 100644 --- a/apps/dashboard/src/components/primitives/editor.tsx +++ b/apps/dashboard/src/components/primitives/editor.tsx @@ -194,15 +194,12 @@ export const Editor = React.forwardRef( // which results in value not being updated and "jumping" effect in the editor // to prevent this we need to flush the state updates synchronously flushSync(() => { - console.log('value 4444', value); onChangeRef.current?.(value); }); }, [onChangeRef] ); - console.log('value 3333', JSON.stringify(value)); - return ( ( height={height} placeholder={placeholder} basicSetup={basicSetup} - value={JSON.stringify(value)} + value={value} onChange={onChangeCallback} theme={theme} onBlur={() => { diff --git a/apps/dashboard/src/components/workflow-editor/steps/shared/configure-preview-accordion.tsx b/apps/dashboard/src/components/workflow-editor/steps/shared/configure-preview-accordion.tsx index 1e130403e94..0f3bd85a9b5 100644 --- a/apps/dashboard/src/components/workflow-editor/steps/shared/configure-preview-accordion.tsx +++ b/apps/dashboard/src/components/workflow-editor/steps/shared/configure-preview-accordion.tsx @@ -46,8 +46,6 @@ export const ConfigurePreviewAccordion = ({ [setEditorValue] ); - console.log('editorValue 6666', editorValue); - return ( @@ -63,7 +61,7 @@ export const ConfigurePreviewAccordion = ({ style={{ '--radix-collapsible-content-height': `${height}px` } as CSSProperties} > Date: Mon, 27 Jan 2025 12:56:23 +0200 Subject: [PATCH 3/3] chore(framework): remove console logs --- packages/framework/src/client.ts | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/packages/framework/src/client.ts b/packages/framework/src/client.ts index 53937e7b81f..a3e9247b7ed 100644 --- a/packages/framework/src/client.ts +++ b/packages/framework/src/client.ts @@ -714,24 +714,6 @@ export class Client { private async renderTemplateControls(templateControls: Record, event: Event) { try { - // eslint-disable-next-line no-console - console.log( - 'compileControls 555 ', - JSON.stringify( - { - templateControls, - templateControlsString: JSON.stringify(templateControls), - variables: { - payload: event.payload, - subscriber: event.subscriber, - steps: buildSteps(event.state), - }, - }, - null, - 2 - ) - ); - const templateString = this.templateEngine.parse(JSON.stringify(templateControls)); const compiledString = await this.templateEngine.render(templateString, { @@ -742,9 +724,6 @@ export class Client { return JSON.parse(compiledString); } catch (error) { - // eslint-disable-next-line no-console - console.log('error 666', error); - throw new StepControlCompilationFailedError(event.workflowId, event.stepId, error); } }