diff --git a/apps/sim/executor/utils/block-reference.ts b/apps/sim/executor/utils/block-reference.ts index 590e9d869..7f0eac85b 100644 --- a/apps/sim/executor/utils/block-reference.ts +++ b/apps/sim/executor/utils/block-reference.ts @@ -53,17 +53,34 @@ function getProperties(schema: unknown): Record | undefined { : undefined } +function getFieldCaseInsensitive( + obj: Record, + fieldName: string +): unknown | undefined { + if (fieldName in obj) { + return obj[fieldName] + } + const lowerName = fieldName.toLowerCase() + for (const key of Object.keys(obj)) { + if (key.toLowerCase() === lowerName) { + return obj[key] + } + } + return undefined +} + function lookupField(schema: unknown, fieldName: string): unknown | undefined { if (typeof schema !== 'object' || schema === null) return undefined const typed = schema as Record - if (fieldName in typed) { - return typed[fieldName] + const direct = getFieldCaseInsensitive(typed, fieldName) + if (direct !== undefined) { + return direct } const props = getProperties(schema) - if (props && fieldName in props) { - return props[fieldName] + if (props) { + return getFieldCaseInsensitive(props, fieldName) } return undefined diff --git a/apps/sim/executor/variables/resolvers/reference.ts b/apps/sim/executor/variables/resolvers/reference.ts index 9f4b69eec..7be74cb5b 100644 --- a/apps/sim/executor/variables/resolvers/reference.ts +++ b/apps/sim/executor/variables/resolvers/reference.ts @@ -20,6 +20,19 @@ export interface Resolver { * navigatePath({a: {b: {c: 1}}}, ['a', 'b', 'c']) => 1 * navigatePath({items: [{name: 'test'}]}, ['items', '0', 'name']) => 'test' */ +function getPropertyCaseInsensitive(obj: Record, key: string): unknown { + if (key in obj) { + return obj[key] + } + const lowerKey = key.toLowerCase() + for (const k of Object.keys(obj)) { + if (k.toLowerCase() === lowerKey) { + return obj[k] + } + } + return undefined +} + export function navigatePath(obj: any, path: string[]): any { let current = obj for (const part of path) { @@ -30,7 +43,10 @@ export function navigatePath(obj: any, path: string[]): any { const arrayMatch = part.match(/^([^[]+)(\[.+)$/) if (arrayMatch) { const [, prop, bracketsPart] = arrayMatch - current = current[prop] + current = + typeof current === 'object' && current !== null + ? getPropertyCaseInsensitive(current, prop) + : undefined if (current === undefined || current === null) { return undefined } @@ -49,7 +65,10 @@ export function navigatePath(obj: any, path: string[]): any { const index = Number.parseInt(part, 10) current = Array.isArray(current) ? current[index] : undefined } else { - current = current[part] + current = + typeof current === 'object' && current !== null + ? getPropertyCaseInsensitive(current, part) + : undefined } } return current