Repository for storing and retrieving application-wide configuration data.

ConfigRepository provides persistent key-value storage for configuration that applies to all users across the application. Typical use cases include:

  • View configurations (card layouts, table columns, form structures)
  • Plugin-specific configuration settings

Each plugin or package typically manages its own configuration namespace, storing settings that define how components should be rendered or behave for all users.

Important: This repository is NOT for user preferences. User-specific settings should use UserPreferencesRepository instead.

Configuration data is:

  • Stored persistently in the database
  • Shared across all users and sessions
  • Read-only for non-admin users (set method requires admin privileges)

The repository extends StateRepository, providing reactive state management with automatic UI updates when configuration changes.

Access the repository through the platform service:

const repo = this.platform.get(PlatformServiceName.ConfigRepository);

Example

Read view configuration

const repo = platform.get(PlatformServiceName.ConfigRepository);

if (repo.has('webclient_view.company')) {
const cardConfig = repo.get('webclient_view.company').card;
renderCard(cardConfig);
}

Example

Read plugin configuration with type safety

const repo = platform.get(PlatformServiceName.ConfigRepository);

if (!repo.has('my_plugin_config')) {
return useDefaultConfig();
}

const pluginConfig = repo.get('my_plugin_config');
const isEnabled = pluginConfig?.enabled ?? false;

See

StateRepository for subscription patterns

Hierarchy

Methods

Methods

  • Get configuration data for a key.

    Retrieves the configuration value stored under the specified key. Returns the stored data, or undefined if the key doesn't exist.

    Use the type parameter <T> to specify the expected type of the configuration data for type safety. The repository does not validate types at runtime.

    Returns

    The stored configuration data, or undefined if not found

    Throws

    May throw if the stored data cannot be deserialized

    Example

    // Get view configuration
    const repo = platform.get(PlatformServiceName.ConfigRepository);
    const cardConfig = repo.get('webclient_view.company').card;

    See

    • has to check if a key exists
    • set to store configuration values

    Type Parameters

    • T = any

    Parameters

    • key: string

      Name of the configuration key to retrieve

    Returns T

  • Check if a configuration key exists.

    Returns true if configuration data has been stored under the specified key, false otherwise. Use this to check for the existence of optional configuration before attempting to retrieve it.

    Returns

    true if the configuration exists, false otherwise

    Example

    // Check before loading view config
    const repo = platform.get(PlatformServiceName.ConfigRepository);

    if (repo.has('person_table_columns')) {
    const columns = repo.get('person_table_columns');
    renderTable(columns);
    } else {
    // Use default columns
    renderTable(defaultColumns);
    }

    See

    • get to retrieve configuration values
    • set to store configuration values

    Parameters

    • key: string

      Name of the configuration key to check

    Returns boolean

  • Save configuration data under a key.

    Important: This method requires admin privileges. The backend endpoint is protected and will reject requests from non-admin users.

    Stores the provided data persistently under the specified key. If the key already exists, its value is overwritten. The data is serialized and saved to the database, making it available to all users across the application.

    After saving, the repository state is updated, triggering any subscriptions. The data can be any serializable JavaScript value (objects, arrays, primitives).

    Returns

    Promise that resolves when the data is saved

    Throws

    Error if save fails, data cannot be serialized, or user lacks admin privileges

    Example

    // Admin: Set plugin configuration
    const repo = platform.get(PlatformServiceName.ConfigRepository);

    const pluginConfig: PluginConfiguration = {
    enabled: true,
    apiEndpoint: 'https://api.example.com',
    settings: {
    timeout: 5000,
    retries: 3
    }
    };

    await repo.set('my_plugin_config', pluginConfig);

    See

    • get to retrieve stored configuration
    • has to check if a key exists

    Type Parameters

    • T = any

    Parameters

    • key: string

      Name of the configuration key to set

    • data: T

      Configuration data to store (must be serializable)

    Returns Promise<void>

  • Subscribe to state changes with optional transformation and filtering.

    The subscription will immediately invoke the callback with the current state (if any), then continue to call it whenever the state changes. The map and filter options allow you to transform and selectively receive updates.

    Returns

    Unsubscribe function - call this to stop receiving updates

    Remarks

    • Map functions are applied sequentially to transform the state
    • Filter functions must all return true for the callback to be invoked
    • Functions in map/filter arrays are bound to the component instance
    • Always store and call the unsubscribe function when component is destroyed

    Example

    // Basic subscription
    const unsubscribe = repository.subscribe((state) => {
    console.log('State updated:', state);
    });

    // With transformations
    const unsubscribe = repository.subscribe(
    (userName) => console.log('User:', userName),
    { map: [(state) => state.user?.name] }
    );

    Parameters

    • callback: ((...args: unknown[]) => void)

      Function called with state updates (after map/filter applied)

        • (...args: unknown[]): void
        • Parameters

          • Rest ...args: unknown[]

          Returns void

    • Optional options: StateOptions

      Optional transformations and filters for the subscription

    Returns (() => void)

      • (): void
      • Subscribe to state changes with optional transformation and filtering.

        The subscription will immediately invoke the callback with the current state (if any), then continue to call it whenever the state changes. The map and filter options allow you to transform and selectively receive updates.

        Returns

        Unsubscribe function - call this to stop receiving updates

        Remarks

        • Map functions are applied sequentially to transform the state
        • Filter functions must all return true for the callback to be invoked
        • Functions in map/filter arrays are bound to the component instance
        • Always store and call the unsubscribe function when component is destroyed

        Example

        // Basic subscription
        const unsubscribe = repository.subscribe((state) => {
        console.log('State updated:', state);
        });

        // With transformations
        const unsubscribe = repository.subscribe(
        (userName) => console.log('User:', userName),
        { map: [(state) => state.user?.name] }
        );

        Returns void