Skip to content

SettingsClient

Public Settings Client

Provides read-only access to public settings for non-admin users. Access is controlled by RLS policies on the app.settings table.

const client = new FluxbaseClient(url, userToken)
// Get single public setting
const betaEnabled = await client.settings.get('features.beta_enabled')
console.log(betaEnabled) // { enabled: true }
// Get multiple public settings
const values = await client.settings.getMany([
'features.beta_enabled',
'features.dark_mode',
'public.app_version'
])
console.log(values)
// {
// 'features.beta_enabled': { enabled: true },
// 'features.dark_mode': { enabled: false },
// 'public.app_version': '1.0.0'
// }

new SettingsClient(fetch): SettingsClient

ParameterType
fetchFluxbaseFetch

SettingsClient

deleteSecret(key): Promise<void>

Delete a user secret setting

ParameterTypeDescription
keystringSecret key to delete

Promise<void>

Promise

await client.settings.deleteSecret('openai_api_key')

deleteSetting(key): Promise<void>

Delete a user setting

Removes the user’s own setting, reverting to system default (if any).

ParameterTypeDescription
keystringSetting key to delete

Promise<void>

Promise

// Remove user's theme preference, revert to system default
await client.settings.deleteSetting('theme')

get(key): Promise<any>

Get a single setting’s value

Returns only the value field of the setting. Access is controlled by RLS policies - will return 403 if the user doesn’t have permission to read the setting.

ParameterTypeDescription
keystringSetting key (e.g., ‘features.beta_enabled’)

Promise<any>

Promise resolving to the setting’s value

Error if setting doesn’t exist or user lacks permission

// Get public setting (any user)
const value = await client.settings.get('features.beta_enabled')
console.log(value) // { enabled: true }
// Get restricted setting (requires permission)
try {
const secret = await client.settings.get('internal.api_key')
} catch (error) {
console.error('Access denied:', error)
}

getMany(keys): Promise<Record<string, any>>

Get multiple settings’ values by keys

Fetches multiple settings in a single request. Only returns settings the user has permission to read based on RLS policies. Settings the user can’t access will be omitted from the result (no error thrown).

ParameterTypeDescription
keysstring[]Array of setting keys to fetch

Promise<Record<string, any>>

Promise resolving to object mapping keys to values

const values = await client.settings.getMany([
'features.beta_enabled', // public - will be returned
'features.dark_mode', // public - will be returned
'internal.api_key' // secret - will be omitted
])
console.log(values)
// {
// 'features.beta_enabled': { enabled: true },
// 'features.dark_mode': { enabled: false }
// // 'internal.api_key' is omitted (no error)
// }

getSecret(key): Promise<SecretSettingMetadata>

Get metadata for a user secret setting (never returns the value)

ParameterTypeDescription
keystringSecret key

Promise<SecretSettingMetadata>

Promise resolving to SecretSettingMetadata

const metadata = await client.settings.getSecret('openai_api_key')
console.log(metadata.key, metadata.updated_at)
// Note: The actual secret value is never returned

getSetting(key): Promise<UserSettingWithSource>

Get a setting with user -> system fallback

First checks for a user-specific setting, then falls back to system default. Returns both the value and the source (“user” or “system”).

ParameterTypeDescription
keystringSetting key (e.g., ‘theme’, ‘notifications.email’)

Promise<UserSettingWithSource>

Promise resolving to UserSettingWithSource with value and source

Error if setting doesn’t exist in either user or system

// Get theme with fallback to system default
const { value, source } = await client.settings.getSetting('theme')
console.log(value) // { mode: 'dark' }
console.log(source) // 'system' (from system default)
// After user sets their own theme
const { value, source } = await client.settings.getSetting('theme')
console.log(source) // 'user' (user's own setting)

getSystemSetting(key): Promise<object>

Get a system-level setting (no user override)

Returns the system default for this key, ignoring any user-specific value. Useful for reading default configurations.

ParameterTypeDescription
keystringSetting key

Promise<object>

Promise resolving to the setting value

NameType
keystring
valueRecord<string, unknown>

Error if system setting doesn’t exist

// Get system default theme
const { value } = await client.settings.getSystemSetting('theme')
console.log('System default theme:', value)

getUserSetting(key): Promise<UserSetting>

Get only the user’s own setting (no fallback to system)

Returns the user’s own setting for this key, or throws if not found. Use this when you specifically want to check if the user has set a value.

ParameterTypeDescription
keystringSetting key

Promise<UserSetting>

Promise resolving to UserSetting

Error if user has no setting with this key

// Check if user has set their own theme
try {
const setting = await client.settings.getUserSetting('theme')
console.log('User theme:', setting.value)
} catch (e) {
console.log('User has not set a theme')
}

listSecrets(): Promise<SecretSettingMetadata[]>

List all user’s secret settings (metadata only, never includes values)

Promise<SecretSettingMetadata[]>

Promise resolving to array of SecretSettingMetadata

const secrets = await client.settings.listSecrets()
secrets.forEach(s => console.log(s.key, s.description))

listSettings(): Promise<UserSetting[]>

List all user’s own settings

Returns all non-encrypted settings the current user has set. Does not include system defaults.

Promise<UserSetting[]>

Promise resolving to array of UserSetting

const settings = await client.settings.listSettings()
settings.forEach(s => console.log(s.key, s.value))

setSecret(key, value, options?): Promise<SecretSettingMetadata>

Set a user secret setting (encrypted)

Creates or updates an encrypted secret that belongs to the current user. The value is encrypted server-side with a user-specific key and can only be accessed by edge functions, background jobs, or custom handlers running on behalf of this user. Even admins cannot see the decrypted value.

ParameterTypeDescription
keystringSecret key
valuestringSecret value (will be encrypted server-side)
options?objectOptional description
options.description?string-

Promise<SecretSettingMetadata>

Promise resolving to SecretSettingMetadata (never includes the value)

// Store user's API key for a third-party service
await client.settings.setSecret('openai_api_key', 'sk-abc123', {
description: 'My OpenAI API key'
})

setSetting(key, value, options?): Promise<UserSetting>

Set a user setting (create or update)

Creates or updates a non-encrypted user setting. This value will override any system default when using getSetting().

ParameterTypeDescription
keystringSetting key
valueRecord<string, unknown>Setting value (any JSON-serializable object)
options?objectOptional description
options.description?string-

Promise<UserSetting>

Promise resolving to UserSetting

// Set user's theme preference
await client.settings.setSetting('theme', { mode: 'dark', accent: 'blue' })
// Set with description
await client.settings.setSetting('notifications', { email: true, push: false }, {
description: 'User notification preferences'
})