Skip to content

Releases: SyncEngine/SyncEngine

0.1.0-beta.7

Choose a tag to compare

@JoryHogeveen JoryHogeveen released this 15 Sep 13:25

Features

  • Trace history retention: Define automatic cleanup rules for automation traces with per-status limits and date-based expiration. A new CLI command is available for manual pruning as well.
  • Improved form builders: New Tabs and Wizard field types for organizing complex configuration forms. All HTML input types are now supported.
  • Faster editor performance: Client-side caching for query results and lazyloaded portal containers reduce unnecessary re-renders and improve initial load times.
  • Better enum translations: Enums now support automatic translation, making UI labels easier to localize.
  • Blueprint data management: Blueprints can now manage data directly while preventing external modifications for better data integrity.

Internationalization

  • Full translation support: Added frontend translations in all currently existing locales (DE, FR, ES, IT, PL, NL, DA, NO, SV, EL, CS, PT, UK, ZH_HANS, TR, FI, PT_BR, KO, JA).
  • Symfony UX Translator migration: Replaced i18next with Symfony UX Translator for better integration and performance. Includes useTranslator hook and global translation function.
  • Locale switching: Proper locale changes in session when switching languages, with page reload for UX Turbo compatibility. Available locales are now stored locally and filtered to only show locales that actually exist.
  • Translation improvements: Added missing translation strings, converted code in translation strings to params, removed tags from translation strings, fixed incorrect escaping issues.

Security

  • Enhanced CSRF protection: All JSON API endpoints now require valid CSRF tokens, protecting against cross-site request forgery attacks.
  • Restricted vault access: The vault is now accessible only to admin users.
  • API token scope validation: Users can no longer assign token scopes beyond what their account permissions allow.

Improvements

  • Cleaner date column naming: Date columns now follow the standard "At" suffix convention (e.g., createdAt, updatedAt). A migration command is available to update existing databases.
  • Better error handling: Network errors are now clearly distinguished from parsing errors, making debugging easier.
  • HTML sanitization: HTML and SVG content is automatically sanitized by default to prevent XSS vulnerabilities. Trusted form sources are excluded from sanitization.
  • Improved blueprint data management: Blueprints can now manage data directly while preventing external modifications for better data integrity.
  • Onboarding improvements: Fixed close button behavior when onboarding fails to load and parameterized onboarding config location.
  • Column validation: Added column validation before formatting to prevent malformed data output.
  • Reference preservation: Improved reference handling in params to preserve object references where needed, fixing issues with data not being passed correctly.
  • Model normalizer refactor: Improved structure and data validation for model normalization, with better handling of dependencies and dependents.
  • ExecuteResult DTO: Introduced a new typed result class for execution outcomes, replacing ad-hoc result handling throughout the codebase. Provides clear accessors for success status, messages, data, and errors.

Frontend

  • Faster editor performance: Query results are now cached temporarily, reducing unnecessary reloads and improving responsiveness.
  • Better state management: Improved conflict handling when multiple components respond to viewport changes, and fixed issues with stale data in form fields.
  • Faster initial load: Modal containers are now loaded on demand instead of upfront, speeding up the initial editor render.
  • Clearer error messages: Network errors are now clearly distinguished from parsing errors, making debugging easier. Fixed static language fallback.

Bug Fixes

  • Fixed issues with event callback cleanup that could cause stale state reads.
  • Fixed a loop in the fetch state management that caused unnecessary re-subscriptions.
  • Fixed vault key handling for complex key names.
  • Fixed type comparison and entity selection issues in form fields.
  • Fixed recursive state updates in the editor that caused duplicate callbacks.

Developer Notes

  • Installed symfony/html-sanitizer package (7.4.*)
  • Installed Symfony UX Translator packages for frontend translation support
  • Updated composer.lock with new dependencies
  • Updated node and composer packages
  • Added missing onboarding directory structure
  • Added required PHP extension dependencies in composer

Full changelog: 0.1.0-beta.6...0.1.0-beta.7

0.1.0-beta.6

Choose a tag to compare

@JoryHogeveen JoryHogeveen released this 21 Aug 23:59

New Features

Two-Factor Authentication #189

Protect your account with an extra layer of security. 2FA is fully integrated via the SchebTwoFactorBundle and supports two methods:

  • TOTP (Authenticator app): Generate a QR code during setup, scan it with Google Authenticator or similar, then verify with the generated code. Each user can have one TOTP method configured.
  • Email verification: A 6-digit verification code is sent to your registered email address. The code expires after 10 minutes and can be regenerated.
  • Master toggle: Each account has a single master 2FA switch, enabling it activates whichever method is configured. Your preferred method (TOTP over email) is used automatically during login.
  • Account management: Enable, configure, or disable both methods from Account settings. You cannot remove the last active method without first disabling 2FA entirely.

Entity Management #187

Automations and other entities now have full lifecycle control with status and visibility states:

  • Enabled / Disabled: Control whether an automation can run. Disabled automations are blocked from executing or scheduling, and the API returns HTTP 423 Locked for requests to disabled endpoints.
  • Visible / Hidden: Filter entities from list views without deleting them. Hidden entities remain accessible via API and can be shown again at any time.
  • Trash and restore: Entities can be trashed (soft-deleted) instead of permanently removed. Trashed entities appear in a separate state with a timestamp and can be fully restored to their previous status. Permanent deletion is still available as an explicit action.
  • Dependency tracking: Automations and flows automatically track which entities they reference. The system prevents deleting or trashing entities that are still used by other configurations, avoiding broken automations.
  • Contextual actions: List view actions (hide/show, enable/disable, trash/restore/delete) now appear only when relevant based on the entity's current state.
  • Filter dropdowns: Entity list views include filter controls for status and visibility. Filter by enabled/disabled/trashed or visible/hidden to quickly narrow down your view.

Improvements

  • Faster form updates: Form modals no longer flicker or lose state when updating content. Changes are applied in-place using smart DOM diffing that preserves interactive Stimulus elements.
  • Safer entity operations: Creating entities with dots (.) in their reference is now blocked early with a clear error message. Attempting to update an entity before it is saved is also caught with a helpful error.
  • Better webservice error messages: FTP, SFTP, SOAP, and SQL connection forms now show clear warnings when required server extensions are missing, instead of failing silently or with cryptic errors later.
  • Dynamic SQL driver selection: The SQL connection form automatically shows only available database drivers (MySQLi or PDO) based on what is installed on the server.
  • Filter wildcards: Filter conditions can now use {*key*}, {*index*}, and {*current*} wildcards to reference the current row's key, 0-based index, and 1-based position during iteration.
  • Mapper config support: Mapper fields in blueprints now export/import their nested configuration recursively, preserving column mappings across save cycles.
  • Better error display in modals: ChooseModal now captures and displays errors from async actions, showing them as alert banners so you can see what went wrong without losing your place.
  • Improved admin error messages: Controller JSON responses are now wrapped in try-catch blocks. When something goes wrong, the UI receives a structured {success: false, error: "..."} response instead of crashing or hanging. Exception details are visible when debug mode is enabled.
  • Proper form submission status codes: Account preferences and settings forms now return correct HTTP status codes (202 Accepted for success, 422 Unprocessable Entity for validation errors), fixing Turbo navigation issues after form submissions.
  • Account form improvements: Password is no longer required when updating the account form, making it easier to update profile information without re-entering credentials.
  • API shows all entities by default: The REST API now returns all entities regardless of their enabled/disabled or visible/hidden state, making it easier to work with entity data programmatically.
  • Improved dark mode contrast: Darker background colors improve readability and visual depth in the admin interface.
  • Better installation recovery: After a database repair, you are redirected back to the page you were on instead of landing on the admin dashboard.

Bug Fixes

  • Fixed issues when importing configurations with dots in reference names.
  • Fixed form modal content updates causing Turbo navigation conflicts.
  • Fixed data merging behavior when object keys contain special characters.
  • Fixed schema conversion settings not being applied at the correct level.
  • Fixed tag parsing for strings with unclosed quotes.
  • Fixed entity delete in the REST API to perform soft-trash instead of permanent deletion, preventing accidental data loss.
  • Database errors like missing tables or invalid column names are now detected more reliably, triggering the repair flow automatically.

Developer Notes

  • PHPDoc generics: All core task classes now have @param ConfigData<...> generic annotations for better IDE integration.
  • Type field factory: FieldTypeFactory now returns specific typed field classes instead of generic InputFieldType. Auto-sets type property from static getType() when not explicitly provided in config.
  • New exception classes: NotAllowedException and NotFoundException added to src/Exception/ for clearer error semantics.
  • Entity magic methods: EngineModel adds @method annotations for getStatus(), setStatus(), getVisibility(), setVisibility() for IDE completion.
  • API default behavior: REST API v1 list queries now show all entities by default (status '*', visibility '*') regardless of state. Entity delete in REST API performs soft-trash instead of permanent delete.
  • Engine query parsing: EngineModel::parseQuery() applies status/visibility defaults unless explicitly set. Use '*' to override and show all states.
  • Deprecation logging: deprecations now write to a dedicated rotating file (deprecation.log) in production. Display is only enabled when debug is enabled.

Testing

  • New test suite for entity dependency tracking, covering direct and recursive resolution scenarios.
  • Comprehensive 2FA tests covering TOTP setup, email verification codes, and the full login flow.
  • Vault service tests including key rotation and edge case values.
  • Filter task wildcard tests and JS condition evaluation tests.
  • New tests for model importer, exporter, and normalizer covering import/export edge cases and normalized dependent output.
  • New tests for data formatting, serialization sanitization, and env file persistence.

Full changelog: 0.1.0-beta.5...0.1.0-beta.6

0.1.0-beta.5

Choose a tag to compare

@JoryHogeveen JoryHogeveen released this 01 Aug 10:24

Release 0.1.0-beta.5

Security & Access Control

  • New Roles: Introduce Viewer and Editor roles alongside Administrator. These let you grant team members appropriate access without full admin privileges.
  • Role-Based Visibility: Non-admin users no longer see system-level menu items or module endpoints. The interface adapts to your role.
  • API Token Scopes: API tokens now support entity-based access control, letting you restrict tokens to specific resources and actions.
  • Admin-Only Features: User management and system configuration are now clearly restricted to administrators.

User Management

  • User Administration: Admins can create, edit, and delete user accounts directly from the application.
  • Password Reset: Administrators can reset passwords for other users.
  • Profile Editing: Password is no longer required when editing an existing user's profile.

Frontend & Editor

  • Guided Onboarding: New users are walked through setup with a step-by-step tour covering account configuration, system preferences, and key features. A help button on every page triggers contextual onboarding.
  • Entity Selector: Selecting entities in automations now uses a modal picker instead of a dropdown, providing better search and filtering for large lists.
  • Grouped Conditions: The conditions builder supports grouping related conditions together with editable labels and descriptions, making complex automation rules easier to read and maintain. Backwards compatible with existing automations.
  • Format Field: The format dropdown has been replaced with a full codec field selector with optional configuration.
  • Flow Editor Performance: Significant speed improvements when editing automations with many nodes; reduced lag and duplicate parsing eliminated.
  • Blueprint Icons: Blueprints now display a dedicated icon for quick visual identification, with a notice shown when no blueprints are available.

SOAP Integration

  • SOAP Webservice: Connect to SOAP-based APIs with full request/response handling, configurable data transport, compression support, and connection timeouts.
  • Multistep Operations: Configure complex SOAP workflows with multiple sequential API calls.
  • WSDL Integration: Automatic operation discovery from WSDL definitions.
  • Data Transport: Choose between full data payload or custom body parameters for SOAP requests.

Bug Fixes

  • List Endpoint: Fixed a bug where list endpoints used request parameters instead of query parameters, causing incorrect filtering results.
  • Data Loss: Fixed Replace task data loss and duplicate keys.
  • Stale Data: Fixed ResourceData returning old data after replacements.
  • Number Formatting: Fixed formatting for zero and negative decimals.
  • Entity Comparison: Fixed comparison logic using isEqual for correct value evaluation instead of reference comparison.
  • Codec Formats: Codec models now expose available formats for better visibility.
  • Loading Bar: Fixed loading bar display issues.
  • Delete Modal: Fixed the delete confirmation modal in non-react templates.
  • Condition Evaluation: Fixed various condition evaluation and type comparison issues.
  • DateTime Input: Fixed handling of invalid date/time inputs with proper fallback.
  • Database Compatibility: Fixed DB platform call compatibility with updated Doctrine.
  • SQLite Safety: Lowercased SQLite platform check and wrapped in try block to prevent fatal errors on SQL issues.
  • Webservice dependencies: Protect installation from type issues when PHP libraries are missing.
  • Blob MimeType: Fixed file mime type detection when the standard method is not available.
  • Entity Not Found: Added proper checks for missing entities instead of silent failures.

Developer Notes

  • PHPStan 2.x: Upgraded PHPStan from 1.x to 2.x with extensive type annotation fixes across the codebase.
  • Type Safety: Fixed numerous type annotations, generics, and return types across models, services, and structure classes.
  • Better DateTime Handling: Date/time formatting is more forgiving and handles invalid inputs gracefully with automatic fallback.
  • Redundant Code: Removed redundant code paths and dead branches identified by static analysis.
  • ServiceLocator Generics: Fixed generic type annotations in service locators for better IDE support.
  • Trace Annotations: Cleaned up duplicate and incorrect PHPDoc annotations in trace-related models.
  • Format Trait: Updated decodeFormat return type to mixed to correctly reflect its actual behavior.
  • Automation Cleanup: Fixed stale run cleanup to remove unnecessary null check on repository.

Testing

  • JavaScript Test Suite: New Vitest-based test framework with tests for utility functions, hooks (useGlobal, useSyncedState), data, conditions, tags, events, and format utilities.
  • SOAP Test Coverage: Comprehensive SOAP and SOAP multistep tests with mock webservices.
  • Condition Tests: Added extensive condition evaluation tests.
  • Replace Task Tests: Added tests for the Replace task to prevent regression.

Dev

  • Updated to Symfony 7.4.14.
  • Improved development configuration and security settings.

Full changelog: 0.1.0-beta.4...0.1.0-beta.5

0.1.0-beta.4

Choose a tag to compare

@JoryHogeveen JoryHogeveen released this 13 Jul 13:40

Core & Runtime

  • Runtime: Introduce file transfer support via Blob VO and BlobStore. Files can now flow through the dataflow without being serialized into memory.
    • Blob value object wraps file data with metadata (filename, extension, mimeType) and supports both inline strings and file-backed streams.
    • BlobStore manages temporary file storage with content-hash deduplication and automatic cleanup.
    • Blobs normalize to marker arrays in the dataflow and rehydrate on the receiving end.
    • File codec handles binary data formats with encoder support.
    • HTTP and File webservices support file uploads and blob storage (including Symfony's UploadedFile).
    • Blob responses can be served as binary files or streams.
  • Core: Complete switch to Field objects for handling fields with FieldCollection; safe cloning, normalizing, merging, auto-created grouped fields, and nested group support.
  • Core: Create dedicated ModuleRegistryManager that handles module registry, activation, compatibility, and auto-disable on errors.
  • Core: Introduce SerializationSanitizer to sanitize data before JSON encoding and error handling.
  • Core: Migrate to module.json for module manifests instead of composer.
  • Core: Convert table prefix to a param (direct env autowiring removed); rename prefix to SYNCENGINE.
  • Core: Add non-destructive schema repair tool (metadata-driven, allows ALTER TABLE but blocks DROP) and system repair command (currently handles database only) with option to fetch repair output.
  • Core: Add system install command as an alternative to the UI.
  • Core: Update to Doctrine 3.6 (from 2.20) with updated dbal and persistence packages.

Frontend & API

  • API: Add REST API v1 CRUD endpoints for main core models (automation, connection, routine, flow, storage) with entity type validation.
  • API: Make the preview endpoint available for API use with a basic schema, type info, and error details when success is false.
  • Frontend: Add manual disable action and collapsible disabled modules with uninstall action. Convert module actions to dropdown for better UI.
  • Frontend: Fix React ref and key prop spreading issues.
  • Frontend: Improve clipboard capabilities check.

Other

  • Testing: Rename Automation scenarios to "Runtime" scenarios and move tests into Runtime namespace.
  • Testing: Add preview runtime test cases (flow, mode, request, routine, scope, service, task, validation).
  • Testing: Create BlobStore tests with various blob operations.
  • Testing: Create HTTP file upload tests and refactor mock to support file uploads.
  • Testing: Add module registry tests.
  • Dev: Add composer/semver requirement explicitly; silence deprecation messages from dependency projects.
  • Dev: Update NPM packages and PHP dependencies.
  • Dev: Improve dev server config and re-enable file watchers; fix local dev server access control.
  • Dev: Fix several PhpStan issues in controllers.
  • Docs: Update SECURITY.md to reflect current status.

Full changelog: 0.1.0-beta.3...0.1.0-beta.4

0.1.0-beta.3

Choose a tag to compare

@JoryHogeveen JoryHogeveen released this 12 Jun 21:51
  • Runtime: Introduce execution mode support (single, parallel, queued)
  • Runtime: Refactor scheduling into dedicated runtime services and move execute services into the Runtime namespace.
  • Runtime: Expand trace lifecycle handling with new statuses (registered, queued, scheduled) and better queued-trace dispatch flow.
  • Runtime: Improve active-run detection with heartbeat/timeout cleanup and stricter stale run reset logic.
  • Runtime: Move iterator runtime state to traces and improve iteration continuation/reset behavior (including {{ iteration.* }} availability).
  • API: Improve endpoint action handling (including schedule defaults) and return richer status payloads (running, scheduled, queued, capability flags).
  • Core: Add execution configuration improvements such as per-automation max traces and execution timeout handling.
  • Core: Improve connection/config safety with better validation paths and safer config object handling.
  • Core: Add non-destructive schema repair handler that applies metadata-driven DDL without executing DROP statements.
  • Webservice: Improve SQL reliability with client caching, reconnect/retry on retryable connection failures, and better PDO/mysqli error reporting.
  • Frontend: Expand schema/collection field UX with nested group support, collection input handling, and dynamic optional field selection.
  • Frontend: Improve blueprint selection UX (including custom/non-module blueprint grouping) and step preview/config handling.
  • Testing: Add broad integration and mock coverage (queued mode, scheduler/status behavior, iterator flows, attempt recovery, SQL mock webservice, advanced automation scenarios).
  • Dev: Improve and add migration helper tmp commands, update script naming cleanup, and workflow rename (composer-install to build-release).
  • Docs: Add CONTRIBUTING.md and remove outdated docs pages.

Full Changelog: 0.1.0-beta.2...0.1.0-beta.3

0.1.0-beta.2

Choose a tag to compare

@JoryHogeveen JoryHogeveen released this 12 Apr 17:05
  • Frontend: Set default flow UI, set default node on load and minor UI improvement.
  • Frontend: Enhance Blueprint selection with module and type selection
  • Frontend: Group param for select fields
  • Frontend: Custom error pages
  • API: Allow trailing slashed for endpoint
  • Runtime: Keep track of when the trace was killed (timestamp)
  • Core: Improve Blueprint model for automation triggers (afterUpdate method and allow config state comparison while updating)
  • Core: Start on field params within schema definitions
  • Core: Several improvements to DB repair handler
  • Core: Fix cache handling after module install
  • Core: Improve model getter (factory) and allow getting automation by endpoint
  • Core: Fix CLI options in system service

Full Changelog: 0.1.0-beta...0.1.0-beta.2

0.1.0-beta

Choose a tag to compare

@JoryHogeveen JoryHogeveen released this 12 Mar 16:34
01115b9

Officially Out of Prototype!

See Readme and Docs for more info on the project!