From 02e09359d0bba7e9f918d73bbc5ad6bc43ff0234 Mon Sep 17 00:00:00 2001 From: Rashmi Shenoy Date: Tue, 2 Dec 2025 22:28:37 +0000 Subject: [PATCH] Fix schema for PropertyType.File and pattern matcher for mimetype to accept dot character --- packages/engine/src/lib/variables/processors/file.ts | 2 +- packages/engine/src/lib/variables/props-processor.ts | 3 ++- packages/engine/test/services/props-processor.test.ts | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/engine/src/lib/variables/processors/file.ts b/packages/engine/src/lib/variables/processors/file.ts index 4fd74e259b..39c0506fed 100644 --- a/packages/engine/src/lib/variables/processors/file.ts +++ b/packages/engine/src/lib/variables/processors/file.ts @@ -31,7 +31,7 @@ function handleBase64File(propertyValue: string): WorkflowFile | null { if (!isBase64(propertyValue, { allowMime: true })) { return null; } - const matches = propertyValue.match(/^data:([A-Za-z-+/]+);base64,(.+)$/); // example match: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC + const matches = propertyValue.match(/^data:([A-Za-z.+/-]+);base64,(.+)$/); // example match: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC if (!matches || matches?.length !== 3) { return null; } diff --git a/packages/engine/src/lib/variables/props-processor.ts b/packages/engine/src/lib/variables/props-processor.ts index 0f3b2159fa..16ac38052b 100644 --- a/packages/engine/src/lib/variables/props-processor.ts +++ b/packages/engine/src/lib/variables/props-processor.ts @@ -7,6 +7,7 @@ import { InputPropertyMap, PropertyType, StaticPropsValue, + WorkflowFile, } from '@openops/blocks-framework'; import { tryParseJson } from '@openops/common'; import { AUTHENTICATION_PROPERTY_NAME, isNil, isObject } from '@openops/shared'; @@ -192,7 +193,7 @@ const validateProperty = ( }); break; case PropertyType.FILE: - schema = z.record(z.any(), z.any(), { + schema = z.instanceof(WorkflowFile, { error: `Expected a file url or base64 with mimeType, received: ${originalValue}`, }); break; diff --git a/packages/engine/test/services/props-processor.test.ts b/packages/engine/test/services/props-processor.test.ts index e4e59ac880..04eff3d500 100644 --- a/packages/engine/test/services/props-processor.test.ts +++ b/packages/engine/test/services/props-processor.test.ts @@ -9,7 +9,7 @@ describe('Props Processor', () => { }; const props = { base64WithMime: Property.File({ - displayName: 'Base64', + displayName: 'Base64WithMime', required: true, }), base64: Property.File({