Add queue management dashboard (#15202)
Adds a comprehensive queue management interface to the admin panel for viewing and managing background jobs. **Features:** - Queue detail pages showing paginated job lists (50 per page) - Filter jobs by state: completed, failed, active, waiting, delayed, paused - Checkbox selection with bulk actions (delete jobs, retry failed jobs) - Per-job dropdown menu for individual retry/delete - Expandable rows showing error messages, stack traces, and job data - Relative timestamps with hover tooltips - Display attempt counts on failed jobs - Dynamic retention policy info from backend **Changes:** - Backend: New AdminPanelQueueService with GraphQL endpoints for job listing, retry, and delete - Frontend: Queue detail page with QueueJobsTable component - Updated retention policy: completed jobs kept 4 hours, failed jobs kept 7 days (max 1000 each) - Added JobState enum for type safety <img width="634" height="696" alt="Screenshot_2025-10-20_at_11 45 25" src="https://github.com/user-attachments/assets/c67bcd27-26cf-47f5-9575-3cd5684d006b" /> <img width="484" height="680" alt="Screenshot_2025-10-20_at_11 45 14" src="https://github.com/user-attachments/assets/68725cc6-b3ec-4098-99ca-f9a717d6f8f1" /> <img width="490" height="643" alt="Screenshot_2025-10-20_at_11 45 05" src="https://github.com/user-attachments/assets/b68a5809-33ff-4452-b48b-741aff7f1dd6" /> <img width="685" height="662" alt="Screenshot 2025-10-20 at 13 15 01" src="https://github.com/user-attachments/assets/eeb5207b-de5c-4b18-bdde-392892053dab" />
This commit is contained in:
+126
-126
File diff suppressed because it is too large
Load Diff
+19
-19
@@ -10,75 +10,75 @@ export const CONFIG_VARIABLES_GROUP_METADATA: Record<
|
||||
ConfigVariablesGroup,
|
||||
GroupMetadata
|
||||
> = {
|
||||
[ConfigVariablesGroup.ServerConfig]: {
|
||||
[ConfigVariablesGroup.SERVER_CONFIG]: {
|
||||
position: 100,
|
||||
description: '',
|
||||
isHiddenOnLoad: false,
|
||||
},
|
||||
[ConfigVariablesGroup.RateLimiting]: {
|
||||
[ConfigVariablesGroup.RATE_LIMITING]: {
|
||||
position: 200,
|
||||
description:
|
||||
'We use this to limit the number of requests to the server. This is useful to prevent abuse.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.StorageConfig]: {
|
||||
[ConfigVariablesGroup.STORAGE_CONFIG]: {
|
||||
position: 300,
|
||||
description:
|
||||
'By default, file uploads are stored on the local filesystem, which is suitable for traditional servers. However, for ephemeral deployment servers, it is essential to configure the variables here to set up an S3-compatible file system. This ensures that files remain unaffected by server redeploys.',
|
||||
isHiddenOnLoad: false,
|
||||
},
|
||||
[ConfigVariablesGroup.GoogleAuth]: {
|
||||
[ConfigVariablesGroup.GOOGLE_AUTH]: {
|
||||
position: 400,
|
||||
description: 'Configure Google integration (login, calendar, email)',
|
||||
isHiddenOnLoad: false,
|
||||
},
|
||||
[ConfigVariablesGroup.MicrosoftAuth]: {
|
||||
[ConfigVariablesGroup.MICROSOFT_AUTH]: {
|
||||
position: 500,
|
||||
description: 'Configure Microsoft integration (login, calendar, email)',
|
||||
isHiddenOnLoad: false,
|
||||
},
|
||||
[ConfigVariablesGroup.EmailSettings]: {
|
||||
[ConfigVariablesGroup.EMAIL_SETTINGS]: {
|
||||
position: 600,
|
||||
description:
|
||||
'This is used for emails that are sent by the app such as invitations to join a workspace. This is not used to email CRM contacts.',
|
||||
isHiddenOnLoad: false,
|
||||
},
|
||||
[ConfigVariablesGroup.Logging]: {
|
||||
[ConfigVariablesGroup.LOGGING]: {
|
||||
position: 700,
|
||||
description: '',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.ExceptionHandler]: {
|
||||
[ConfigVariablesGroup.EXCEPTION_HANDLER]: {
|
||||
position: 800,
|
||||
description:
|
||||
'By default, exceptions are sent to the logs. This should be enough for most self-hosting use-cases. For our cloud app we use Sentry.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.Metering]: {
|
||||
[ConfigVariablesGroup.METERING]: {
|
||||
position: 900,
|
||||
description:
|
||||
'By default, metrics are sent to the console. OpenTelemetry collector can be set up for self-hosting use-cases.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.Other]: {
|
||||
[ConfigVariablesGroup.OTHER]: {
|
||||
position: 1000,
|
||||
description:
|
||||
"The variables in this section are mostly used for internal purposes (running our Cloud offering), but shouldn't usually be required for a simple self-hosted instance",
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.BillingConfig]: {
|
||||
[ConfigVariablesGroup.BILLING_CONFIG]: {
|
||||
position: 1100,
|
||||
description:
|
||||
'We use Stripe in our Cloud app to charge customers. Not relevant to Self-hosters.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.CaptchaConfig]: {
|
||||
[ConfigVariablesGroup.CAPTCHA_CONFIG]: {
|
||||
position: 1200,
|
||||
description:
|
||||
'This protects critical endpoints like login and signup with a captcha to prevent bot attacks. Likely unnecessary for self-hosting scenarios.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.CloudflareConfig]: {
|
||||
[ConfigVariablesGroup.CLOUDFLARE_CONFIG]: {
|
||||
position: 1300,
|
||||
description: '',
|
||||
isHiddenOnLoad: true,
|
||||
@@ -89,7 +89,7 @@ export const CONFIG_VARIABLES_GROUP_METADATA: Record<
|
||||
'Configure the LLM provider and model to use for the app. This is experimental and not linked to any public feature.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.ServerlessConfig]: {
|
||||
[ConfigVariablesGroup.SERVERLESS_CONFIG]: {
|
||||
position: 1500,
|
||||
description:
|
||||
'In our multi-tenant cloud app, we offload untrusted custom code from workflows to a serverless system (Lambda) for enhanced security and scalability. Self-hosters with a single tenant can typically ignore this configuration.',
|
||||
@@ -101,31 +101,31 @@ export const CONFIG_VARIABLES_GROUP_METADATA: Record<
|
||||
'Configure this if you want to setup SSL on your server or full end-to-end encryption. If you just want basic HTTPS, a simple setup like Cloudflare in flexible mode might be easier.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.SupportChatConfig]: {
|
||||
[ConfigVariablesGroup.SUPPORT_CHAT_CONFIG]: {
|
||||
position: 1700,
|
||||
description:
|
||||
'We use this to setup a small support chat on the bottom left. Currently powered by Front.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.AnalyticsConfig]: {
|
||||
[ConfigVariablesGroup.ANALYTICS_CONFIG]: {
|
||||
position: 1800,
|
||||
description:
|
||||
'We’re running a test to perform analytics within the app. This will evolve.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.TokensDuration]: {
|
||||
[ConfigVariablesGroup.TOKENS_DURATION]: {
|
||||
position: 1900,
|
||||
description:
|
||||
'These have been set to sensible default so you probably don’t need to change them unless you have a specific use-case.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.TwoFactorAuthentication]: {
|
||||
[ConfigVariablesGroup.TWO_FACTOR_AUTHENTICATION]: {
|
||||
position: 2000,
|
||||
description:
|
||||
'These have been set to sensible default so you probably don’t need to change them unless you have a specific use-case.',
|
||||
isHiddenOnLoad: true,
|
||||
},
|
||||
[ConfigVariablesGroup.AwsSesSettings]: {
|
||||
[ConfigVariablesGroup.AWS_SES_SETTINGS]: {
|
||||
position: 2100,
|
||||
description: 'Configure AWS SES settings for emailing domains',
|
||||
isHiddenOnLoad: true,
|
||||
|
||||
+20
-20
@@ -101,7 +101,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
AUTH_PASSWORD_ENABLED: {
|
||||
type: ConfigVariableType.BOOLEAN,
|
||||
group: ConfigVariablesGroup.Other,
|
||||
group: ConfigVariablesGroup.OTHER,
|
||||
description: 'Enable or disable password authentication for users',
|
||||
},
|
||||
});
|
||||
@@ -124,7 +124,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
CACHE_STORAGE_TTL: {
|
||||
type: ConfigVariableType.NUMBER,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Time-to-live for cache storage in seconds',
|
||||
},
|
||||
});
|
||||
@@ -147,7 +147,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
FRONTEND_URL: {
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Frontend URL',
|
||||
},
|
||||
});
|
||||
@@ -172,7 +172,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
LOG_LEVELS: {
|
||||
type: ConfigVariableType.ARRAY,
|
||||
group: ConfigVariablesGroup.Logging,
|
||||
group: ConfigVariablesGroup.LOGGING,
|
||||
description: 'Levels of logging to be captured',
|
||||
options: ['log', 'error', 'warn', 'debug', 'verbose'],
|
||||
},
|
||||
@@ -198,7 +198,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
NODE_ENV: {
|
||||
type: ConfigVariableType.ENUM,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Node environment',
|
||||
options: ['development', 'production', 'test'],
|
||||
},
|
||||
@@ -254,7 +254,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
CACHE_STORAGE_TTL: {
|
||||
type: ConfigVariableType.NUMBER,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Time-to-live for cache storage in seconds',
|
||||
},
|
||||
});
|
||||
@@ -281,7 +281,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
AUTH_PASSWORD_ENABLED: {
|
||||
type: ConfigVariableType.BOOLEAN,
|
||||
group: ConfigVariablesGroup.Other,
|
||||
group: ConfigVariablesGroup.OTHER,
|
||||
description: 'Enable or disable password authentication for users',
|
||||
},
|
||||
});
|
||||
@@ -304,7 +304,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
CACHE_STORAGE_TTL: {
|
||||
type: ConfigVariableType.NUMBER,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Time-to-live for cache storage in seconds',
|
||||
},
|
||||
});
|
||||
@@ -327,7 +327,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
FRONTEND_URL: {
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Frontend URL',
|
||||
},
|
||||
});
|
||||
@@ -352,7 +352,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
LOG_LEVELS: {
|
||||
type: ConfigVariableType.ARRAY,
|
||||
group: ConfigVariablesGroup.Logging,
|
||||
group: ConfigVariablesGroup.LOGGING,
|
||||
description: 'Levels of logging to be captured',
|
||||
options: ['log', 'error', 'warn', 'debug', 'verbose'],
|
||||
},
|
||||
@@ -379,7 +379,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
NODE_ENV: {
|
||||
type: ConfigVariableType.ENUM,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Node environment',
|
||||
options: ['development', 'production', 'test'],
|
||||
},
|
||||
@@ -434,7 +434,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
CUSTOM_OBJECT: {
|
||||
type: 'unknown-type' as ConfigVariableType,
|
||||
group: ConfigVariablesGroup.Other,
|
||||
group: ConfigVariablesGroup.OTHER,
|
||||
description: 'Custom object',
|
||||
},
|
||||
});
|
||||
@@ -453,7 +453,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
CACHE_STORAGE_TTL: {
|
||||
type: ConfigVariableType.NUMBER,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Time-to-live for cache storage in seconds',
|
||||
},
|
||||
});
|
||||
@@ -478,7 +478,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
AUTH_PASSWORD_ENABLED: {
|
||||
type: ConfigVariableType.BOOLEAN,
|
||||
group: ConfigVariablesGroup.Other,
|
||||
group: ConfigVariablesGroup.OTHER,
|
||||
description: 'Enable or disable password authentication for users',
|
||||
},
|
||||
});
|
||||
@@ -501,7 +501,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
CACHE_STORAGE_TTL: {
|
||||
type: ConfigVariableType.NUMBER,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Time-to-live for cache storage in seconds',
|
||||
},
|
||||
});
|
||||
@@ -524,7 +524,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
FRONTEND_URL: {
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Frontend URL',
|
||||
},
|
||||
});
|
||||
@@ -547,7 +547,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
LOG_LEVELS: {
|
||||
type: ConfigVariableType.ARRAY,
|
||||
group: ConfigVariablesGroup.Logging,
|
||||
group: ConfigVariablesGroup.LOGGING,
|
||||
description: 'Levels of logging to be captured',
|
||||
options: ['log', 'error', 'warn', 'debug', 'verbose'],
|
||||
},
|
||||
@@ -571,7 +571,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
NODE_ENV: {
|
||||
type: ConfigVariableType.ENUM,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Node environment',
|
||||
options: ['development', 'production', 'test'],
|
||||
},
|
||||
@@ -595,7 +595,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
NODE_ENV: {
|
||||
type: ConfigVariableType.ENUM,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Node environment',
|
||||
options: ['development', 'production', 'test'],
|
||||
},
|
||||
@@ -630,7 +630,7 @@ describe('ConfigValueConverterService', () => {
|
||||
jest.spyOn(TypedReflect, 'getMetadata').mockReturnValueOnce({
|
||||
LOG_LEVELS: {
|
||||
type: ConfigVariableType.ARRAY,
|
||||
group: ConfigVariablesGroup.Logging,
|
||||
group: ConfigVariablesGroup.LOGGING,
|
||||
description: 'Levels of logging to be captured',
|
||||
options: ['log', 'error', 'warn', 'debug', 'verbose'],
|
||||
},
|
||||
|
||||
+21
-21
@@ -1,23 +1,23 @@
|
||||
export enum ConfigVariablesGroup {
|
||||
ServerConfig = 'server-config',
|
||||
RateLimiting = 'rate-limiting',
|
||||
StorageConfig = 'storage-config',
|
||||
GoogleAuth = 'google-auth',
|
||||
MicrosoftAuth = 'microsoft-auth',
|
||||
EmailSettings = 'email-settings',
|
||||
Logging = 'logging',
|
||||
Metering = 'metering',
|
||||
ExceptionHandler = 'exception-handler',
|
||||
Other = 'other',
|
||||
BillingConfig = 'billing-config',
|
||||
CaptchaConfig = 'captcha-config',
|
||||
CloudflareConfig = 'cloudflare-config',
|
||||
LLM = 'llm',
|
||||
ServerlessConfig = 'serverless-config',
|
||||
SSL = 'ssl',
|
||||
SupportChatConfig = 'support-chat-config',
|
||||
AnalyticsConfig = 'audit-config',
|
||||
TokensDuration = 'tokens-duration',
|
||||
TwoFactorAuthentication = 'two-factor-authentication',
|
||||
AwsSesSettings = 'aws-ses-settings',
|
||||
SERVER_CONFIG = 'SERVER_CONFIG',
|
||||
RATE_LIMITING = 'RATE_LIMITING',
|
||||
STORAGE_CONFIG = 'STORAGE_CONFIG',
|
||||
GOOGLE_AUTH = 'GOOGLE_AUTH',
|
||||
MICROSOFT_AUTH = 'MICROSOFT_AUTH',
|
||||
EMAIL_SETTINGS = 'EMAIL_SETTINGS',
|
||||
LOGGING = 'LOGGING',
|
||||
METERING = 'METERING',
|
||||
EXCEPTION_HANDLER = 'EXCEPTION_HANDLER',
|
||||
OTHER = 'OTHER',
|
||||
BILLING_CONFIG = 'BILLING_CONFIG',
|
||||
CAPTCHA_CONFIG = 'CAPTCHA_CONFIG',
|
||||
CLOUDFLARE_CONFIG = 'CLOUDFLARE_CONFIG',
|
||||
LLM = 'LLM',
|
||||
SERVERLESS_CONFIG = 'SERVERLESS_CONFIG',
|
||||
SSL = 'SSL',
|
||||
SUPPORT_CHAT_CONFIG = 'SUPPORT_CHAT_CONFIG',
|
||||
ANALYTICS_CONFIG = 'ANALYTICS_CONFIG',
|
||||
TOKENS_DURATION = 'TOKENS_DURATION',
|
||||
TWO_FACTOR_AUTHENTICATION = 'TWO_FACTOR_AUTHENTICATION',
|
||||
AWS_SES_SETTINGS = 'AWS_SES_SETTINGS',
|
||||
}
|
||||
|
||||
+7
-7
@@ -179,7 +179,7 @@ describe('ConfigStorageService', () => {
|
||||
[key]: {
|
||||
isSensitive: true,
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Test sensitive config',
|
||||
},
|
||||
});
|
||||
@@ -213,7 +213,7 @@ describe('ConfigStorageService', () => {
|
||||
[key]: {
|
||||
isSensitive: true,
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Test sensitive config',
|
||||
},
|
||||
});
|
||||
@@ -241,7 +241,7 @@ describe('ConfigStorageService', () => {
|
||||
[key]: {
|
||||
isSensitive: true,
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Test sensitive config',
|
||||
},
|
||||
});
|
||||
@@ -413,7 +413,7 @@ describe('ConfigStorageService', () => {
|
||||
[key]: {
|
||||
isSensitive: true,
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Test sensitive config',
|
||||
},
|
||||
});
|
||||
@@ -449,7 +449,7 @@ describe('ConfigStorageService', () => {
|
||||
[key]: {
|
||||
isSensitive: true,
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Test sensitive config',
|
||||
},
|
||||
});
|
||||
@@ -617,12 +617,12 @@ describe('ConfigStorageService', () => {
|
||||
SENSITIVE_CONFIG: {
|
||||
isSensitive: true,
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Test sensitive config',
|
||||
},
|
||||
NORMAL_CONFIG: {
|
||||
type: ConfigVariableType.STRING,
|
||||
group: ConfigVariablesGroup.ServerConfig,
|
||||
group: ConfigVariablesGroup.SERVER_CONFIG,
|
||||
description: 'Test normal config',
|
||||
},
|
||||
});
|
||||
|
||||
+3
-3
@@ -43,17 +43,17 @@ type TwentyConfigServicePrivateProps = {
|
||||
|
||||
const mockConfigVarMetadata = {
|
||||
TEST_VAR: {
|
||||
group: ConfigVariablesGroup.GoogleAuth,
|
||||
group: ConfigVariablesGroup.GOOGLE_AUTH,
|
||||
description: 'Test variable',
|
||||
isEnvOnly: false,
|
||||
},
|
||||
ENV_ONLY_VAR: {
|
||||
group: ConfigVariablesGroup.StorageConfig,
|
||||
group: ConfigVariablesGroup.STORAGE_CONFIG,
|
||||
description: 'Environment only variable',
|
||||
isEnvOnly: true,
|
||||
},
|
||||
SENSITIVE_VAR: {
|
||||
group: ConfigVariablesGroup.Logging,
|
||||
group: ConfigVariablesGroup.LOGGING,
|
||||
description: 'Sensitive variable',
|
||||
isSensitive: true,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user