Skip to main content

Conversations

Workspace API


Workspace API / models/Conversations

models/Conversations

Type Aliases

AppLogger

AppLogger = Logger | FastifyBaseLogger

Defined in: models/Conversations.ts:30

Logger type for conversation operations (Pino or Fastify logger)

Functions

setRLSContext()

setRLSContext(client, userId, organizationId): Promise<void>

Defined in: models/Conversations.ts:52

Set RLS session variables for conversation isolation. MUST only be used with a dedicated client (from getClient()).

Parameters

client

any

userId

string

organizationId

string

Returns

Promise<void>


createConversation()

createConversation(data, client?, log?): Promise<Conversation>

Defined in: models/Conversations.ts:88

Create a new conversation Enforces the 100 conversation cap per user per organization

Parameters

data

CreateConversationData

client?

any

log?

AppLogger = logger

Returns

Promise<Conversation>


findConversationById()

findConversationById(conversationId, userId, organizationId): Promise<Conversation | null>

Defined in: models/Conversations.ts:170

Find conversation by ID with ownership check

Parameters

conversationId

string

userId

string

organizationId

string

Returns

Promise<Conversation | null>


findConversationWithSummary()

findConversationWithSummary(conversationId, userId, organizationId): Promise<ConversationWithSummary | null>

Defined in: models/Conversations.ts:192

Find conversation with summary (message count, last message preview)

Parameters

conversationId

string

userId

string

organizationId

string

Returns

Promise<ConversationWithSummary | null>


findConversationSummaryById()

findConversationSummaryById(conversationId, userId, organizationId): Promise<ConversationSummaryData | null>

Defined in: models/Conversations.ts:219

Find conversation summary fields for history context

Parameters

conversationId

string

userId

string

organizationId

string

Returns

Promise<ConversationSummaryData | null>


findConversationsByUser()

findConversationsByUser(filters): Promise<{ conversations: ConversationWithSummary[]; total: number; }>

Defined in: models/Conversations.ts:249

List conversations for a user in an organization

Parameters

filters

ConversationFilters

Returns

Promise<{ conversations: ConversationWithSummary[]; total: number; }>


updateConversationTitle()

updateConversationTitle(conversationId, userId, organizationId, title): Promise<Conversation | null>

Defined in: models/Conversations.ts:312

Update conversation title

Parameters

conversationId

string

userId

string

organizationId

string

title

string

Returns

Promise<Conversation | null>


updateConversation()

updateConversation(conversationId, userId, organizationId, updateData): Promise<Conversation | null>

Defined in: models/Conversations.ts:336

Update conversation (general update)

Parameters

conversationId

string

userId

string

organizationId

string

updateData

UpdateConversationData

Returns

Promise<Conversation | null>


softDeleteConversation()

softDeleteConversation(conversationId, userId, organizationId, log): Promise<boolean>

Defined in: models/Conversations.ts:402

Soft delete a conversation

Parameters

conversationId

string

userId

string

organizationId

string

log

AppLogger = logger

Returns

Promise<boolean>


hardDeleteConversation()

hardDeleteConversation(conversationId, log): Promise<boolean>

Defined in: models/Conversations.ts:434

Hard delete a conversation (for retention purge jobs) WARNING: This permanently deletes the conversation and all messages

Parameters

conversationId

string

log

AppLogger = logger

Returns

Promise<boolean>


countUserConversations()

countUserConversations(userId, organizationId): Promise<number>

Defined in: models/Conversations.ts:457

Count user conversations in an organization

Parameters

userId

string

organizationId

string

Returns

Promise<number>


generateTitleFromMessage()

generateTitleFromMessage(content, maxLength): string

Defined in: models/Conversations.ts:474

Auto-generate title from first user message

Parameters

content

string

maxLength

number = 60

Returns

string


createMessage()

createMessage(data, userId, organizationId, client, log): Promise<Message>

Defined in: models/Conversations.ts:501

Create a new message

Parameters

data

CreateMessageData

userId

string

organizationId

string

client

any

REQUIRED dedicated client for RLS context. Use getClient() or pass from transaction.

log

AppLogger = logger

Returns

Promise<Message>


createMessageStandalone()

createMessageStandalone(data, userId, organizationId, log): Promise<Message>

Defined in: models/Conversations.ts:559

Create a new message (standalone, manages its own client)

Parameters

data

CreateMessageData

userId

string

organizationId

string

log

AppLogger = logger

Returns

Promise<Message>


upsertMessages()

upsertMessages(conversationId, messages, userId, organizationId, client?, log?): Promise<{ upserted: number; conflicts: string[]; }>

Defined in: models/Conversations.ts:577

Upsert messages (for sync endpoint) Uses ON CONFLICT to handle duplicate message IDs

Parameters

conversationId

string

messages

CreateMessageData[]

userId

string

organizationId

string

client?

any

log?

AppLogger = logger

Returns

Promise<{ upserted: number; conflicts: string[]; }>


findMessagesByConversation()

findMessagesByConversation(options, userId, organizationId): Promise<{ messages: Message[]; hasMore: boolean; nextBefore?: string; }>

Defined in: models/Conversations.ts:713

Find messages by conversation with cursor-based pagination

Parameters

options

MessagePaginationOptions

userId

string

organizationId

string

Returns

Promise<{ messages: Message[]; hasMore: boolean; nextBefore?: string; }>


deleteMessages()

deleteMessages(conversationId, messageIds, userId, organizationId, client, log): Promise<number>

Defined in: models/Conversations.ts:774

Delete messages by IDs (for tombstone sync)

Parameters

conversationId

string

messageIds

string[]

userId

string

organizationId

string

client

any

REQUIRED dedicated client for RLS context

log

AppLogger = logger

Returns

Promise<number>


findConversationsForPurge()

findConversationsForPurge(retentionDays): Promise<string[]>

Defined in: models/Conversations.ts:823

Find conversations ready for hard delete (soft deleted + retention expired)

Parameters

retentionDays

number = 90

Returns

Promise<string[]>


purgeExpiredConversations()

purgeExpiredConversations(retentionDays, batchSize, log): Promise<number>

Defined in: models/Conversations.ts:837

Purge expired conversations (batch hard delete)

Parameters

retentionDays

number = 90

batchSize

number = 100

log

AppLogger = logger

Returns

Promise<number>