* fix: prevent clone/export crash for missing ToolJet DB tables
* chore: add backward compatibility comment for stale TJDB reference suppression
* fix: use options::text LIKE to catch nested join table references in delete guard
---------
Co-authored-by: Pratush <pratush@Pratushs-MBP.lan>
* 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: 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: 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>
* 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>
* feat: add QuickBooks Online marketplace plugin
Add a QuickBooks Online Accounting API plugin with OAuth2 authentication,
86 API operations via OpenAPI spec, and @spec/ convention for DB-stored
spec files. Includes server-side spec hosting infrastructure and a fix
for duplicate footer rendering on marketplace OAuth2 datasource config pages.
* chore: update submodule pointers
* fix: use parent transaction for spec file DB operations
storeSpecFiles and updateSpecFilesForReload were wrapping each file
insert/update in a separate dbTransactionWrap call, creating independent
transactions instead of participating in the outer install/upgrade
transaction. This could leave orphan File entities if the plugin save
failed. Now uses the parent manager directly.
* fix: use sandbox API URL, remove testConnection, add state param
- Default to sandbox-quickbooks.api.intuit.com (development apps require it)
- Remove testConnection and customTesting (OAuth flow validates connection)
- Add state parameter to auth URL (required by QuickBooks)
- Add access_token validation guard in run()
- Preserve existing refresh_token if provider doesn't reissue
- Remove environment dropdown and company_id from manifest
- Add debug logging for OAuth flow tracing
* feat: add Intercom marketplace plugin and fix path-level param rendering
Add Intercom API v2.15 marketplace plugin with 162 endpoints across 30
resource groups using react-component-api-endpoint with @spec/ convention.
Fix ApiEndpointInput widget to merge path-level OpenAPI parameters into
each operation's parameters per the OpenAPI 3.0 inheritance rule. This
ensures path params declared at the path-item level (used by Intercom,
AWS, Stripe, and many others) are rendered as input fields.
* fix: set customTesting to false so framework renders Test Connection button
customTesting: false tells the framework to render its standard Test
Connection button which calls testConnection() on the backend.
customTesting: true (counterintuitively) hides the standard button,
expecting the plugin to provide custom testing UI.
* Chore: Migrate all OpenAPI plugins from external URLs to @spec/ convention (#15904)
* chore: migrate all OpenAPI plugins from external URLs to @spec/ convention
Downloads 78 OpenAPI spec files from external URLs (7 plugins from
adishM98/base-repo-testing personal repo, 2 from official provider repos,
1 from S3) and stores them locally in openapi-specs/ directories. Updates
all operations.json files to use @spec/<kind>/<name> references, which
are resolved to DB-stored specs at install time.
Eliminates runtime dependency on external GitHub repos for spec rendering.
* chore: remove one-time spec migration script
* chore: update package-locks for intercom plugin
Adds @tooljet-marketplace/intercom workspace links and dependency
entries that were missing from the prior commits.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore: update intercom plugin description
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat: add QuickBooks Online marketplace plugin
Add a QuickBooks Online Accounting API plugin with OAuth2 authentication,
86 API operations via OpenAPI spec, and @spec/ convention for DB-stored
spec files. Includes server-side spec hosting infrastructure and a fix
for duplicate footer rendering on marketplace OAuth2 datasource config pages.
* chore: update submodule pointers
* fix: use parent transaction for spec file DB operations
storeSpecFiles and updateSpecFilesForReload were wrapping each file
insert/update in a separate dbTransactionWrap call, creating independent
transactions instead of participating in the outer install/upgrade
transaction. This could leave orphan File entities if the plugin save
failed. Now uses the parent manager directly.
* fix: use sandbox API URL, remove testConnection, add state param
- Default to sandbox-quickbooks.api.intuit.com (development apps require it)
- Remove testConnection and customTesting (OAuth flow validates connection)
- Add state parameter to auth URL (required by QuickBooks)
- Add access_token validation guard in run()
- Preserve existing refresh_token if provider doesn't reissue
- Remove environment dropdown and company_id from manifest
- Add debug logging for OAuth flow tracing
* Chore: Migrate all OpenAPI plugins from external URLs to @spec/ convention (#15904)
* chore: migrate all OpenAPI plugins from external URLs to @spec/ convention
Downloads 78 OpenAPI spec files from external URLs (7 plugins from
adishM98/base-repo-testing personal repo, 2 from official provider repos,
1 from S3) and stores them locally in openapi-specs/ directories. Updates
all operations.json files to use @spec/<kind>/<name> references, which
are resolved to DB-stored specs at install time.
Eliminates runtime dependency on external GitHub repos for spec rendering.
* chore: remove one-time spec migration script
* POST string body
---------
Co-authored-by: Rudhra Deep Biswas <rudra21ultra@gmail.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>
* feat(external-apis): add LIST_MODULES, EXPORT_MODULE, IMPORT_MODULE feature keys, DTOs, and ability grants
* feat(external-apis): add CE stub modules controller and register in module
* feat(external-apis): add end-to-end tests for ExternalApisModulesController
* refactor(external-apis): simplify exportModule method signature in ExternalApisModulesController
* feat(external-apis): enhance tests for ExternalApisModulesController with additional cases for non-existent UUIDs
* feat(external-apis): update exportModule method to include exportTjdb parameter and enhance tests for its functionality
* feat(external-apis): enhance tooljet_database import schema validation and add module import/export helpers
* feat(external-apis): add tests for ExternalApisModulesController in starter and CE plans with appropriate status checks
* feat(external-apis): add tests for module and app import endpoints to validate JSON rejection
* fix: elevate role when SSO group sync maps user to builder-level custom group
* fixed falky case
* fixed granular access case
* updated selector
---------
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>
Co-authored-by: Yukti Goyal <yuktigoyal02@gmail.com>
Co-authored-by: YuktiGoyal02 <100783212+YuktiGoyal02@users.noreply.github.com>
* feat(ai): add getThreadTokenUsage feature and related service methods
* chore: update subproject commit reference in frontend/ee
* chore: update subproject commit references in frontend and server
---------
Co-authored-by: johnsoncherian <johnsonc.dev@gmail.com>
* Fix: Change popover title and and add new cta label in component inspector for button group v2
* Fix: Remove width type field from label styles since only 'of the component' supported for new components
* Fix: Vertical spacing between radio buttons when layout is set to wrap
* feat: add auto-sort feature to AI queries and update related components
* feat: add Generate Query button and update selected query handling in data query slice
* chore: update subproject commits for frontend and server
* support to build modules with prompt
* module ai chat bug fix
* submodule update
* AI message bug fix
* module description added in ai metadata
* submodule update: update example prompts and icons
* submodule update: sync frontend and server submodules to latest commits
* submodule update: sync frontend and server submodules to latest commits
* submodule update: sync frontend and server submodules to latest commits
---------
Co-authored-by: Avinash <vavinash992@gmail.com>
Co-authored-by: johnsoncherian <johnsonc.dev@gmail.com>
* refresh token flow
* new auth with error standardisation
* Sbowflake improvements
* Snowflake invoke method made accessible
* snowflake improvement update
* dev testing bug fixes
* removed context file
* list tables and columns now use respective users token
* Snowflake bearer token field adding empty key value pair while editing
* PAT token flow authenticator updated
* Username for PAT token flow
* snowflake sdk version updated
* Updated placeholder for automation
* chore: update version to 3.20.152-lts
---------
Co-authored-by: Srimanitejas123 <mani@tooljet.com>
Co-authored-by: gsmithun4 <gsmithun4@gmail.com>