Skip to main content

Overview

v2.110.5 is a focused maintenance release addressing a data model issue in engagement timer fields. This patch ensures null values are properly handled in the “Engage with Content” action, preventing validation errors when these optional fields are not specified. Released: January 7, 2026 Size: Small (8 lines changed, 1 file) Complexity: Simple (1 commit, 1 contributor)

What’s New

🔧 Fixed: Engagement Timer Field Validation

The “Engage with Content” action now properly supports null values for timer configuration fields, eliminating validation errors when admins don’t specify timer settings. What was broken:
  • Setting timerEnabled to null would fail validation
  • Setting timerDurationSeconds to null would fail validation
  • Admins couldn’t clear timer settings once configured
What’s fixed:
  • Both fields now accept null values alongside their normal types
  • Updated validation schema from .optional() to .nullish() for proper type handling
  • Works seamlessly with the auto-configuration system that defaults values when null
Customer Impact:
  • Eliminates validation errors when using timer fields programmatically
  • Better API integration with external systems that send null for optional fields
  • Cleaner data modeling distinguishing between “not provided” (undefined) and “explicitly cleared” (null)

Technical Details

What Changed

The EngageWithContentActionAttributesDtoModel now properly distinguishes between optional fields and explicitly null values: Type System Updates:
- timerEnabled?: boolean  →  timerEnabled?: boolean | null
- timerDurationSeconds?: number  →  timerDurationSeconds?: number | null
Validation Schema Updates:
- timerEnabled: z.boolean().optional()  →  z.boolean().nullish()
- timerDurationSeconds: z.int().optional()  →  z.int().nullish()

Why This Matters

The .nullish() Zod validator accepts both undefined and null, allowing for proper handling of:
  • Unset fields (undefined) - use defaults
  • Explicitly cleared fields (null) - user has removed/cleared the value
  • API integrations - systems that send explicit null values for optional parameters
This is a common pattern in REST APIs and prevents data synchronization issues.

For Developers

API Usage

The API continues to work exactly as before. This fix improves compatibility when:
// This now works without validation errors
const response = await api.actions.updateEngageWithContent({
  actionId: 'action_123',
  attributes: {
    content: 'Engage with our content',
    timerEnabled: null,  // Explicitly clear timer setting
    timerDurationSeconds: null
  }
});

// Default behavior still works
const response = await api.actions.updateEngageWithContent({
  actionId: 'action_123',
  attributes: {
    content: 'Engage with our content'
    // timerEnabled and timerDurationSeconds use defaults
  }
});

Database & Schema

  • No database migrations required
  • No breaking changes to existing data
  • Purely a validation layer improvement

  • Engagement Actions - User interaction prompts with timers
  • Challenge Actions - Building blocks of challenges
  • Action Types - Different ways users can engage with content

Metrics & Performance


Per-App Changes


Contributors

This maintenance release was completed by:

Backward Compatibility

Fully backward compatible. No breaking changes, no migrations needed. This fix only improves the robustness of validation for optional fields.

Known Issues Fixed

  • ✅ Validation errors when engagement timer fields are explicitly set to null
  • ✅ API integration issues with systems that send null for optional parameters

Support

  • Questions? Check the action types documentation
  • Issues? Report to [email protected] with action details
  • Feedback? Share improvements in your community

v2.110.5 deployed on January 7, 2026