Skip to main content

🔴 Release v2.78.2

⭐⭐⭐ Complex Complexity • 5 commits • 110 files changed
Advanced webhook filtering controls and comprehensive logging refinements. This release introduces intelligent entity filtering for webhooks—giving administrators precise control over which community events trigger integrations—plus significantly improved logging infrastructure to reduce noise and enhance observability across authentication flows.

What’s New

  • Webhook Entity Filtering - Configure webhooks to fire only for specific communities, users, or rewards using include/exclude modes, enabling granular control over event routing to third-party systems
  • Improved Logging Interface - Standardized logger interface matching industry standards (BetterStack/Logtail) with reduced noise from authentication events for cleaner observability in development and production
  • Enhanced Webhook UI - New configuration panel in admin settings with comprehensive filtering options and improved form handling for managing webhook event routing
  • Translation Script Enhancement - Improved CI/CD translation pipeline with hardcoded text detection to prevent untranslated content from reaching production
  • User App Cache Reliability - Fixed cache invalidation logic in user app to ensure fresh data loads after state changes, preventing stale content display

Apps Updated

User App

✓ Updated - 21 changes

API

✓ Updated - 15 changes

Admin

✓ Updated - 2 changes

MCP Server

✓ Updated - 1 change

Website

— No changes

Games

✓ Updated - 3 changes

Detailed Changes

Entity Filtering for Granular Event ControlWebhook configurations now support intelligent entity filtering, allowing administrators to precisely control which community events trigger integrations. This includes two filtering modes:
  • Include Mode: Fire webhooks only for specified entities (communities, users, rewards)
  • Exclude Mode: Fire webhooks for all entities except those in the exclusion list
The filtering engine automatically extracts entity IDs from event payloads using configurable paths, supporting nested objects and array traversal. Common event types (challenge completion, reward claims, post interactions) have pre-configured extraction paths for immediate usability.Admin Configuration Panel
  • New “Entity Filtering” section in webhook settings with intuitive entity selection
  • Mode toggle between include/exclude filtering strategies
  • Live validation of entity IDs during configuration
  • Test configuration interface to verify filtering behavior before activation
Backend Enhancements
  • New should-fire-webhook utility with comprehensive path extraction supporting dot-notation and array wildcards
  • 776+ lines of test coverage for filtering logic across 45+ event type combinations
  • Improved webhook handler service with entity filtering integration
  • Schema validation for webhook entity filter configurations
Customer Impact:
  • Multi-tenant administrators can isolate webhook events by community, preventing cross-organization data leaks
  • Integration teams can focus webhook processing on relevant subsets of events, reducing downstream costs
  • Event routing becomes predictable and auditable through clear filtering rules
Files Changed:
  • apps/admin/app/(admin)/admin/settings/organisation/components/webhooks-settings/webhooks-tab.tsx - UI for entity filtering configuration
  • packages/services/util/webhook/should-fire-webhook.util.ts - Filtering engine with path extraction
  • packages/services/util/webhook/__tests__/should-fire-webhook.util.test.ts - Comprehensive test coverage
  • packages/models/dto/platform-config/model/configs/webhook-entity-filter-dto.model.ts - DTO for filter configuration
Standardized Logger InterfaceImplemented a unified logger interface matching industry standards (BetterStack/Logtail), ensuring consistent behavior between production and development environments. All logging calls now follow the standard pattern: log.info("message", { context: "data" }).Reduced Authentication Noise
  • Downgraded verbose authentication error logs to debug level
  • Consolidated duplicate error reporting in auth flows
  • Auth provider logging now only surfaces meaningful exceptions
  • Cleaner Sentry error reporting with reduced alert fatigue
Logger Improvements
  • Production environment uses Logtail/BetterStack integration
  • Development environment uses console with matching interface
  • Type-safe logging with proper context typing
  • Support for debug, info, warn, and error log levels
Scope of Changes
  • Auth adapter cleanup: 211 insertions, 212 deletions (simplified with improved logging)
  • Auth callback consolidation: 37 insertions, 37 deletions
  • Custom Mongo adapter: 212 insertions, 212 deletions
  • Sentry configuration updates for both API and user app
  • Logger interface in observability package
Developer & Operations Impact:
  • Local Development: Cleaner console output focused on critical issues, easier debugging
  • Production Monitoring: Reduced noise in error tracking allows easier identification of real issues
  • Alert Management: Fewer false positives in monitoring systems means faster incident response
Files Changed:
  • packages/observability/log.ts - Standardized logger interface
  • apps/user/auth/general/general.config.ts - Enhanced auth logging
  • apps/api/sentry.server.config.ts - Improved error reporting
  • Multiple auth provider files with consolidated logging
Cache Invalidation ReliabilityFixed critical issue where user app cache wasn’t properly invalidating after state changes. Users would see stale data when:
  • Switching between challenges
  • Updating personal profile information
  • Redeeming rewards
The fix ensures cache headers are properly evaluated during state transitions, forcing fresh data loads from the API.Translation & InternationalizationEnhanced CI/CD pipeline with hardcoded text detection in the translation script. This prevents untranslated UI strings from reaching production, ensuring a consistent multilingual experience. The validator now:
  • Detects hardcoded text that should be externalized to translation files
  • Flags component strings that bypass the i18n system
  • Prevents merge of translations with missing keys
  • Provides clear feedback on untranslated content locations
Component Updates for Code ClarityImproved several components with clearer logging and reduced confusion around user actions:
  • Challenge completion view: Enhanced logging for completion flow
  • Action wizard: Improved error handling and user feedback
  • Badge display: Better visual feedback during operations
  • Leaderboard filters: Cleaner state management
Files Changed:
  • apps/user/app/api/link/route.ts - Cache handling improvements
  • apps/user/app/api/oauth-link/route.ts - Auth cache fixes
  • apps/user/components/challenge/challenge-complete.tsx - Completion UX
  • Multiple Lite UI components for improved i18n compliance
Cache Invalidation PipelineUpdated user app cache invalidation workflow in GitHub Actions CI/CD pipeline:
  • Improved cache key generation for consistent invalidation
  • Enhanced staging and production pipeline cache handling
  • More reliable deployment-time cache refresh mechanism
Webhook Configuration APINew tRPC endpoints for webhook management:
  • admin.webhooks.getWebhookConfigs - Retrieve current webhook configurations with filtering settings
  • admin.webhooks.updateWebhookConfigs - Persist webhook configuration changes with validation
  • Comprehensive test coverage (221+ new assertions) for configuration updates
Event Payload SchemaEnhanced webhook platform configuration model to support entity filtering:
  • WebhookEntityFilterDtoModel - DTO for filter configuration with validation
  • WebhookPlatformConfigDtoModel - Updated to include entity filter settings
  • EntityFilterModeEnum - Enumeration for include/exclude modes
  • Full OpenAPI documentation for webhook configuration endpoints
Files Changed:
  • apps/api/trpc/routers/admin/webhooks/get-webhook-configs.trpc.ts - Config retrieval
  • apps/api/trpc/routers/admin/webhooks/update-webhook-configs.trpc.ts - Config updates
  • apps/api/trpc/utils/user-app-cache-invalidation.ts - Cache pipeline fix
  • packages/models/dto/platform-config/model/configs/webhook-platform-config-dto.model.ts - Schema updates
Platform Configuration ModelsExtended platform configuration models to support webhook entity filtering and improved type safety throughout the admin interface.Files Changed:
  • packages/models/enum/platform-config/entity-filter-mode.enum.ts - Filter mode enumeration
  • packages/models/dto/platform-config/model/configs/webhook-entity-filter-dto.model.ts - Filter DTO with validation
  • packages/models/enum/platform-config/index.ts - Updated exports
Translation & i18n ComplianceUpdated games app and MCP server components with proper internationalization support:
  • Fixed hardcoded text in game startup error handling
  • Improved game configuration error messages with i18n support
  • Enhanced MCP image tool error messaging
Files Changed:
  • apps/games/src/components/game-start-error.tsx - Error message i18n
  • apps/games/src/db/game-config.ts - Configuration message updates
  • apps/mcp-server/src/tools/image/tool.ts - Tool messaging

Business Impact

For Platform Administrators

Granular webhook control means you can now route different community events to different systems without creating multiple webhook endpoints. Use include mode to send specific community events to a partner system, or exclude mode to filter out test communities from production integrations.

For Integration Teams

The entity filtering feature significantly reduces data processing costs. Instead of filtering events on the receiving end, let Nudj’s webhook engine do the work—only events you need will be sent to your systems.

For Developer Experience

The improved logging infrastructure makes troubleshooting significantly faster. Authentication issues are no longer buried in noise, and the standardized interface means consistent behavior across dev and prod environments.

For Operations Teams

Better cache reliability in the user app ensures end users always see current data. The translation detection system prevents internationalization regressions from reaching customers.

Technical Notes

Webhook Filtering Architecture

The filtering system uses a configurable path-based extraction pattern that works with any event structure:
// Challenge completion with direct ID
PAYLOAD_ENTITY_PATHS[EventSubCategoryEnum.Challenge.ChallengeCompletion] = ["challengeId"]

// Reward distribution with nested array access
PAYLOAD_ENTITY_PATHS[EventSubCategoryEnum.Reward.RewardDistribution] = [
  "trigger.entityId",
  "earnedRewards[*].rewardId",
  "earnedEntries[*].rewardId",
]
This pattern enables any event payload structure to be filtered without schema modifications.

Logger Interface Pattern

The standardized AppLogger interface ensures production and development logging are interchangeable:
interface AppLogger {
  info: (message: string, args?: Record<string, any>) => void
  warn: (message: string, args?: Record<string, any>) => void
  error: (message: string, args?: Record<string, any>) => void
  debug: (message: string, args?: Record<string, any>) => void
}

Cache Invalidation Strategy

User app cache invalidation now properly handles distributed cache busting in CI/CD pipelines, ensuring fresh content delivery on deployment without risking stale data during development.

Contributors

SaadK94@SaadK943 commits • +2,459/-1,054 lines

erek_d@me.com@[email protected]1 commit • +2,420/-264 lines

nudj-changelog-bot[bot]@nudj-changelog-bot[bot]1 commit • Automation

Release Stats

MetricValue
Total Commits5
Lines Added+5,026
Lines Removed-1,318
Files Changed110
Release SizeMassive
Complexity⭐⭐⭐ Complex

v2.78.2 deployed on December 15, 2025