Key-Value Store
A simple config/settings table with manual IDs (not auto-generated). Useful for app-wide settings, feature flags, or any key-value data.
Config
typescript
{
name: 'config',
autoSetUid: false, // manual IDs — the key IS the ID
fields: [
...baseFields.filter(f => f.name !== 'id'),
{ name: 'id', type: 'text', sqlType: 'text', primary: true, notNull: true,
usage: 'record_uid', noUpdate: false }, // allow ID updates (rename keys)
{ name: 'val', type: 'text', sqlType: 'text' },
{ name: 'protected', type: 'bool', sqlType: 'boolean', notNull: true,
default: sqlValue(false) },
],
triggers: [createdTrigger, updatedTrigger],
extensions: [{
name: 'rules',
// Non-protected keys are readable by everyone; protected keys require admin
listRule: '!protected | auth.role ~ "%admin"',
viewRule: '!protected | auth.role ~ "%admin"',
createRule: 'auth.role ~ "%admin"',
updateRule: 'auth.role ~ "%admin"',
deleteRule: 'auth.role ~ "%admin"',
} as TableRulesExtensionData],
}API calls
bash
# Set a config value (admin only)
curl -X POST http://localhost:8787/api/v1/table/config/edit/site_name \
-H 'Authorization: Bearer <admin-token>' \
-H 'Content-Type: application/json' \
-d '{"setValues": {"val": "My Cool App"}, "or": "INSERT"}'
# Read a config value (public, if not protected)
curl http://localhost:8787/api/v1/table/config/view/site_name