Skip to main content

Integrations

Overview

The integrations module provides a generic configuration framework for platform-specific integrations (e.g., OBS, Discord bots). Each integration is scoped to an account with a platform identifier, a human-readable label, an enable/disable toggle, and a flexible JSONB config field for platform-specific settings.

Integrations are pre-created (typically during account setup or when a platform connection is established) and managed through update and toggle operations. There is no create or delete via the API -- lifecycle management is handled server-side.

Architecture

Dashboard UI
|
v
Next.js API Proxy (/api/integrations)
|
v
GraphQL (IntegrationQuery / IntegrationMutation)
|
v
db::integrations (PostgreSQL)

The config JSONB field stores platform-specific configuration. For example, an OBS integration might store WebSocket connection details, scene mappings, or source configurations. The API layer is agnostic to the config structure -- validation is handled by the consuming service.

API

GraphQL Queries

QueryArgsReturnsPermission
integrations--[Integration]settings:read
integrationid: UUIDIntegration?settings:read
  • integrations returns all configs for the active account, ordered by platform.
  • integration returns a single config by ID, filtered by account ownership.

GraphQL Mutations

MutationArgsReturnsPermission
updateIntegrationinput: UpdateIntegrationInputIntegrationsettings:edit
toggleIntegrationid: UUIDIntegrationsettings:edit
  • updateIntegration supports partial updates via COALESCE -- only provided fields are changed.
  • toggleIntegration flips the enabled boolean without requiring the caller to know the current state.

Both mutations verify account ownership before proceeding.

GraphQL Types

type Integration {
id: UUID!
accountId: UUID!
platform: String!
label: String!
enabled: Boolean!
config: JSON!
createdAt: String!
updatedAt: String!
}

input UpdateIntegrationInput {
id: UUID!
label: String
enabled: Boolean
config: JSON
}

Permissions

PermissionDescription
settings:readView integration configurations
settings:editUpdate integration configurations

Integrations share the settings:* permission namespace. Included in: Owner, Administrator roles.

Database

Table: integration_configs

ColumnTypeDescription
idUUID (PK)Integration config ID
account_idUUID (FK)Owning account
platformTEXTPlatform identifier (e.g., obs, discord)
labelTEXTHuman-readable label
enabledBOOLEANWhether the integration is active
configJSONBPlatform-specific configuration
created_atTIMESTAMPTZCreation timestamp
updated_atTIMESTAMPTZLast update timestamp

DB Functions

FunctionDescription
list_integrationsList all configs for an account, ordered by platform ASC
get_integrationGet a single config by ID
update_integrationPartial update using COALESCE for label, enabled, config
toggle_integrationFlip enabled to NOT enabled

Key Files

FilePurpose
apps/api/src/graphql/integrations.rsGraphQL queries, mutations, input/output types
apps/api/src/db/integrations.rsDatabase CRUD operations
crates/lo-auth/src/rbac.rsPermission constants (settings:read, settings:edit)