81f10c586f
## Summary - Add `WORKSPACE_SCHEMA_DDL_LOCKED` env-only boolean config variable that blocks all workspace schema DDL changes when set to `true`. This is intended for hot upgrades where logical replication cannot handle DDL changes. Enforced at two chokepoints: - `WorkspaceMigrationRunnerService.run` — blocks all metadata-driven DDL (object/field/index CRUD, app sync/uninstall, standard app sync, upgrade commands) - `WorkspaceDataSourceService.createWorkspaceDBSchema` / `deleteWorkspaceDBSchema` — blocks workspace creation (sign-up) and hard deletion. Uses a dedicated `WorkspaceDataSourceException` (not ForbiddenException) - Add maintenance mode feature with Admin Panel UI and user-facing banner: - **Backend**: `MaintenanceModeService` stores maintenance window (startAt, endAt, optional link) in `core.keyValuePair` as `CONFIG_VARIABLE`. Validates endAt > startAt. Uses `GraphQLISODateTime` scalar for date fields. Exposed via `clientConfig` REST endpoint and admin GraphQL mutations (`setMaintenanceMode`, `clearMaintenanceMode`) - **Admin Panel**: New "Maintenance Mode" section in Health tab with UTC datetime pickers and activate/deactivate controls - **Banner**: `InformationBannerMaintenance` displayed at the top of `DefaultLayout` for all users, using Temporal API for timezone-aware formatting with an optional "Learn more" link These two features are **independent** — the DDL lock is controlled via env var for operational use, while maintenance mode is a UI notification mechanism controlled from the admin panel.
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import { type ClientConfig } from '@/client-config/types/ClientConfig';
|
|
import { CaptchaDriverType, SupportDriver } from '~/generated-metadata/graphql';
|
|
|
|
export const mockedClientConfig: ClientConfig = {
|
|
aiModels: [],
|
|
signInPrefilled: true,
|
|
isMultiWorkspaceEnabled: false,
|
|
isEmailVerificationRequired: false,
|
|
authProviders: {
|
|
google: true,
|
|
magicLink: false,
|
|
password: true,
|
|
microsoft: false,
|
|
sso: [],
|
|
},
|
|
frontDomain: 'localhost',
|
|
defaultSubdomain: 'app',
|
|
analyticsEnabled: true,
|
|
support: {
|
|
supportDriver: SupportDriver.FRONT,
|
|
supportFrontChatId: null,
|
|
},
|
|
sentry: {
|
|
dsn: 'MOCKED_DSN',
|
|
release: 'MOCKED_RELEASE',
|
|
environment: 'MOCKED_ENVIRONMENT',
|
|
},
|
|
billing: {
|
|
isBillingEnabled: true,
|
|
billingUrl: '',
|
|
trialPeriods: [
|
|
{
|
|
duration: 30,
|
|
isCreditCardRequired: true,
|
|
},
|
|
{
|
|
duration: 7,
|
|
isCreditCardRequired: false,
|
|
},
|
|
],
|
|
},
|
|
captcha: {
|
|
provider: CaptchaDriverType.GOOGLE_RECAPTCHA,
|
|
siteKey: 'MOCKED_SITE_KEY',
|
|
},
|
|
api: { mutationMaximumAffectedRecords: 100 },
|
|
canManageFeatureFlags: true,
|
|
publicFeatureFlags: [],
|
|
isMicrosoftMessagingEnabled: true,
|
|
isMicrosoftCalendarEnabled: true,
|
|
isGoogleMessagingEnabled: true,
|
|
isGoogleCalendarEnabled: true,
|
|
isAttachmentPreviewEnabled: true,
|
|
isConfigVariablesInDbEnabled: false,
|
|
isImapSmtpCaldavEnabled: false,
|
|
isTwoFactorAuthenticationEnabled: false,
|
|
isEmailingDomainsEnabled: false,
|
|
allowRequestsToTwentyIcons: true,
|
|
isCloudflareIntegrationEnabled: false,
|
|
isClickHouseConfigured: false,
|
|
isWorkspaceSchemaDDLLocked: false,
|
|
};
|