Encrypted fields are omitted from git serialization (credentials are never
stored in git). After a pull, the DSVO is missing those keys. The save-state
check compared state.options (missing encrypted keys) against
normalizedSavedOptions (which fills missing keys from dsDefaults/manifest),
producing a false mismatch on first open for plugin-type datasources.
Fix: normalize state.options with dsDefaults using the same reduction before
the deepEqual comparison, so both sides are symmetric.
* fix: allow pro plan workspace admins to preview apps
Pro plan has multiEnvironment=false. validateVersionEnvironment blocked any
request with environment_name set — including 'development' — causing a 403
that the frontend mapped to the restricted-preview error page.
Backend: allow 'development' env through even when multi-env is disabled;
only block staging/production to prevent URL manipulation.
Frontend: use featureAccess.multiEnvironment flag in isBasicPlan check
instead of hardcoded plan === 'starter', so pro plan also skips env in the
redirect URL.
* fix: align useAppPreviewLink isBasicPlan check with multiEnvironment flag
Same pattern as AppsRoute — was checking plan === 'starter', missing pro
and basic plans. Now uses !featureAccess.multiEnvironment consistently.
* fix: preserve original URL on app-scoped logout redirect
The app-scoped branch in redirectToLoginPage hardcoded
/applications/:slug/login with no redirectTo, dropping the env/version
preview params. After re-login, AppLoginPage fell back to
/applications/:slug (released-app viewer URL), which 501s for unreleased
apps and shows "App URL Unavailable".
Mirror the workspace branch's behavior: honor avoidRedirection and
preserve the original URL as redirectTo when false. Update logoutAction
to pass false so the runtime Logout event returns the user to the same
preview view after sign-in.
Regression introduced in #15716.
* chore: update package-lock files after lts-3.16 merge
* revert: remove frontend isBasicPlan changes, backend fix is sufficient
Stripping env from the URL on the frontend is the wrong approach — for
multi-env plans, an explicit env param (e.g. staging) must be preserved.
The backend fix (allowing development env through when multi-env is
disabled) is the correct and sufficient fix.
* fix: use multiEnvironment flag to gate env param in preview URLs
Plans without multi-env access (basic, pro, starter) should not include
?env= in preview URLs — it is meaningless for them and was causing the
backend to reject the request.
Plans with multi-env (team, enterprise) preserve the env param so
per-env per-version preview links continue to work correctly.
* fix: use strict equality for multiEnvironment check to preserve env when featureAccess is not yet loaded
---------
Co-authored-by: Akshay Sasidharan <akshaysasidharan93@gmail.com>
* feat(external-api): return per-workspace inviteUrl in POST /ext/users response
* test(external-api): expand POST /ext/users coverage — roles, multi-group, and failure conditions
Adds 8 new e2e tests covering role assignment, per-workspace role variance,
multiple custom groups, and all key failure paths (duplicate email, missing
workspace, default group in groups field, nonexistent group, end-user/builder
group conflict). Also seeds the builder default group in maybeCreateDefaultGroupPermissions
to unblock role-assignment tests against test orgs.
* test(external-api): clarify conflicting-permissions error shape in users spec
* feat(external-api): update default status to INVITED in user-related DTOs and add defaultOrganizationId field
* feat(external-api): enhance invited user session guard and expand user creation tests for archived status
* feat(external-api): add tests for org-invite URL behavior based on user and workspace status
* feat(external-api): update user status handling and invite URL logic in tests
* feat(external-api): update invite URL logic and OrganizationUser status handling for active users
* fix: preserve original URL on app-scoped logout redirect
The app-scoped branch in redirectToLoginPage hardcoded
/applications/:slug/login with no redirectTo, dropping the env/version
preview params. After re-login, AppLoginPage fell back to
/applications/:slug (released-app viewer URL), which 501s for unreleased
apps and shows "App URL Unavailable".
Mirror the workspace branch's behavior: honor avoidRedirection and
preserve the original URL as redirectTo when false. Update logoutAction
to pass false so the runtime Logout event returns the user to the same
preview view after sign-in.
Regression introduced in #15716.
* chore: update package-lock files after lts-3.16 merge
* fix: enhance file duplication check in FilePicker by introducing isSameFile utility function
* fix: update FilePicker to use internalId for file management and improve error handling
* refactor: move clearErrorStates function to improve code organization in useFilePicker
* fix: gate JS library loading on license fetch to fix public/released apps
JS libraries were silently skipped on public and released apps because
featureAccess?.appJsLibraries was still undefined when isComponentLayoutReady
fired. Introduces isLicenseFetched flag and handles fetch errors so the
gate is never blocked indefinitely for unauthenticated users.
* feat: remove license check for JS libraries loading in frontend and backend
* feat: gate version rename restrictions behind git sync; restore non-git-sync behavior
- Add useGitSyncConfig() hook as shared source of truth for isGitSyncEnabled
and defaultBranch (reads orgGit store, uses correct github_branch field)
- VersionDropdownItem: show branch name as display name for git-sync drafts;
show fixed description "Latest commit to main will appear here" for git-sync
drafts; hide "Edit details" only when git sync is ON (non-git-sync keeps
original cursor/tooltip/disabled behavior for module versions)
- VersionSwitcherButton: header shows "Draft" (not branch name) for git-sync
draft versions
- VersionManagerDropdown: source isGitSyncEnabled from hook; render
EditVersionModal only for non-git-sync workspaces
- CreateDraftVersionModal: show version name input only for non-git-sync;
set fixed draft name (branch name) and description when git sync is ON;
replace appGit-based effect with useGitSyncConfig hook
- CreateVersionModal: blank name/description pre-fill when git sync ON; fix
TDZ by moving effectiveIsBranchingEnabled after useStore block; add git-ref
character validation for git-sync-enabled orgs
- service.ts: block name/description edits on PUBLISHED versions only when
org-level git sync is enabled (non-git-sync orgs retain edit capability)
* feat: add immutability warning banner to Save version modal for git-sync orgs
Adds an inline info banner "Name and description cannot be edited after saving"
below the description field when git sync is enabled, matching the Figma design.
* fix: move immutability warning banner to top of Save version modal body
Figma (node 2091-172093) shows the banner above the version name input,
not below the description field.
* fix: improve error message for invalid version names in CreateVersionModal
* feat: enforce version name validation across modals and DTOs
* feat: add validation for version names to prevent spaces and special characters
* feat: refactor version selection logic in CreateVersionModal for improved clarity
* feat: enhance version name validation and update API request format
* Fixed draft version case
---------
Co-authored-by: Yukti Goyal <yuktigoyal02@gmail.com>
Co-authored-by: YuktiGoyal02 <100783212+YuktiGoyal02@users.noreply.github.com>
* feat: QueryManager - add fx and custom message for query confirmation
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Minor fix
* Design update
* Yes button same size as cancel button
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Update version to 3.20.158-lts across all components (#16409)
* feat: Show go back to modules instead of go back to apps action on Module Builder page's logo popup menu (#16406)
* 🚀 chore: update submodules to latest lts-3.16 after auto-merge (#16415)
Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>
* feat: AppCanvas - hidden widget collapses to 0px per Figma update (#16361)
* feat: AppCanvas - hidden widget collapses to 0px per Figma update
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix: AppCanvas - stack overlapping hidden widgets in drop order
* Fallback for collapseOnhide components with top alignment
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix: disable z-index override for Firefox popover styling (#16412)
* fix: disable z-index override for Firefox popover styling
* fix: remove unused Firefox-specific z-index styles from popover
* Feat/ai datasource/mysql mssql (#16403)
* generate query support for mysql and mssql
* chore: update submodules
* chore: frontend submodule update
---------
Co-authored-by: johnsoncherian <johnsonc.dev@gmail.com>
* 🚀 chore: update submodules to latest lts-3.16 after auto-merge (#16417)
Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>
* chore: update version to 3.20.159-lts across all components (#16420)
* improve openai anthropic gemini (#16296)
* improve openai anthropic gemini
* moved to dynamic form v2
* fix: Not able to add V2 plugins
* fix the overflowing of test connection error
---------
Co-authored-by: Siddharthpl <siddharthpundir73@gmail.com>
Co-authored-by: Rudhra Deep Biswas <rudra21ultra@gmail.com>
Co-authored-by: Ganesh Kumar <ganesh8056234@gmail.com>
* chore: update version to 3.20.160-lts across all components
* Feature: Add WORKSPACE_GIT_CONFIGS env var as primary source for workspace git sync config (#16379)
* feat: add parseWorkspaceGitConfigsVar() to OrganizationEnvRegistryService
* test: add beforeEach pre-clean for WORKSPACE_GIT_CONFIGS isolation
* test: add initialize() overlay tests for WORKSPACE_GIT_CONFIGS
---------
Co-authored-by: Johnson Cherian <johnsonc.dev@gmail.com>
Co-authored-by: Nishidh Jain <61869195+NishidhJain@users.noreply.github.com>
Co-authored-by: Adish M <44204658+adishM98@users.noreply.github.com>
Co-authored-by: johnsoncherian <57667706+johnsoncherian@users.noreply.github.com>
Co-authored-by: Shaurya Sharma <79473274+shaurya-sharma064@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Manish Kushare <37823141+manishkushare@users.noreply.github.com>
Co-authored-by: Swathi Hameed <42898362+swathihameed@users.noreply.github.com>
Co-authored-by: abhijeet760 <abhijeet@tooljet.com>
Co-authored-by: Siddharthpl <siddharthpundir73@gmail.com>
Co-authored-by: Rudhra Deep Biswas <rudra21ultra@gmail.com>
Co-authored-by: Ganesh Kumar <ganesh8056234@gmail.com>
Co-authored-by: Shantanu Mane <maneshantanu.20@gmail.com>