chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,277 @@
|
||||
import { schema } from '@bpinternal/opapi'
|
||||
import z from 'zod'
|
||||
import { conversationSchema, conversationIdSchema } from '../models/conversation'
|
||||
import { authHeaders } from './auth'
|
||||
import { pagedResponseMeta, pagingParameters } from './paging'
|
||||
import { OperationFunc } from './types'
|
||||
|
||||
const section = 'conversation' as const
|
||||
|
||||
export const getConversationOperation: OperationFunc = (api) => ({
|
||||
name: 'getConversation',
|
||||
description: 'Retrieves the [Conversation](#schema_conversation) object for a valid identifier.',
|
||||
method: 'get',
|
||||
path: '/conversations/{id}',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
id: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'Conversation id',
|
||||
},
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns a [Conversation](#schema_conversation) object if a valid identifier was provided',
|
||||
schema: schema(
|
||||
z.object({
|
||||
conversation: api.getModelRef('Conversation'),
|
||||
})
|
||||
),
|
||||
},
|
||||
})
|
||||
|
||||
export const createConversationOperation: OperationFunc = (api) => ({
|
||||
name: 'createConversation',
|
||||
description: 'Creates a new [Conversation](#schema_conversation)',
|
||||
method: 'post',
|
||||
path: '/conversations',
|
||||
parameters: authHeaders,
|
||||
requestBody: {
|
||||
description: 'Conversation data',
|
||||
schema: z.object({
|
||||
id: conversationIdSchema.optional(),
|
||||
}),
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
status: 201,
|
||||
description: 'Returns a [Conversation](#schema_conversation)',
|
||||
schema: schema(
|
||||
z.object({
|
||||
conversation: api.getModelRef('Conversation'),
|
||||
})
|
||||
),
|
||||
},
|
||||
})
|
||||
|
||||
export const getOrCreateConversationOperation: OperationFunc = (api) => ({
|
||||
name: 'getOrCreateConversation',
|
||||
description: 'Get or create a new [Conversation](#schema_conversation)',
|
||||
method: 'post',
|
||||
path: '/conversations/get-or-create',
|
||||
parameters: authHeaders,
|
||||
requestBody: {
|
||||
description: 'Conversation data',
|
||||
schema: z.object({
|
||||
id: conversationIdSchema,
|
||||
}),
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
status: 201,
|
||||
description: 'Returns a [Conversation](#schema_conversation)',
|
||||
schema: schema(
|
||||
z.object({
|
||||
conversation: api.getModelRef('Conversation'),
|
||||
})
|
||||
),
|
||||
},
|
||||
})
|
||||
|
||||
export const deleteConversationOperation: OperationFunc = () => ({
|
||||
name: 'deleteConversation',
|
||||
description:
|
||||
'Permanently deletes a [Conversation](#schema_conversation). It cannot be undone. Also immediately deletes corresponding [Messages](#schema_message).',
|
||||
method: 'delete',
|
||||
path: '/conversations/{id}',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
id: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'Conversation id',
|
||||
},
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns the [Conversation](#schema_conversation) object that was deleted',
|
||||
schema: z.object({}),
|
||||
},
|
||||
})
|
||||
|
||||
export const listConversationsOperation: OperationFunc = () => ({
|
||||
name: 'listConversations',
|
||||
description: 'Returns a list of [Conversation](#schema_conversation) objects',
|
||||
method: 'get',
|
||||
path: '/conversations',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
...pagingParameters,
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns a list of [Conversation](#schema_conversation) objects',
|
||||
schema: z
|
||||
.object({
|
||||
conversations: z.array(conversationSchema),
|
||||
})
|
||||
.extend({ meta: pagedResponseMeta }),
|
||||
},
|
||||
})
|
||||
|
||||
export const listenConversationOperation: OperationFunc = () => ({
|
||||
name: 'listenConversation',
|
||||
description: 'Creates a SSE stream to receive messages and events from a conversation',
|
||||
method: 'get',
|
||||
path: '/conversations/{id}/listen',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
id: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'Conversation id',
|
||||
},
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns nothing but a stream',
|
||||
schema: schema(z.object({})),
|
||||
},
|
||||
})
|
||||
|
||||
export const listMessagesOperation: OperationFunc = (api) => ({
|
||||
name: 'listMessages',
|
||||
description: "Retrieves the conversation's [Messages](#schema_message)",
|
||||
method: 'get',
|
||||
path: '/conversations/{conversationId}/messages',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
...pagingParameters,
|
||||
conversationId: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'Conversation id',
|
||||
},
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns a list of [Message](#schema_message) objects',
|
||||
schema: z
|
||||
.object({
|
||||
messages: z.array(api.getModelRef('Message')),
|
||||
})
|
||||
.extend({ meta: pagedResponseMeta }),
|
||||
},
|
||||
})
|
||||
|
||||
export const addParticipantOperation: OperationFunc = (api) => ({
|
||||
name: 'addParticipant',
|
||||
description: 'Add a [Participant](#schema_user) to a [Conversation](#schema_conversation).',
|
||||
method: 'post',
|
||||
path: '/conversations/{conversationId}/participants',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
conversationId: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'Conversation id',
|
||||
},
|
||||
},
|
||||
requestBody: {
|
||||
description: 'Participant data',
|
||||
schema: schema(
|
||||
z.object({
|
||||
userId: schema(z.string(), { description: 'User id' }),
|
||||
})
|
||||
),
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns the [Participant](#schema_user) object',
|
||||
schema: schema(
|
||||
z.object({
|
||||
participant: api.getModelRef('User'),
|
||||
})
|
||||
),
|
||||
},
|
||||
})
|
||||
|
||||
export const removeParticipantOperation: OperationFunc = () => ({
|
||||
name: 'removeParticipant',
|
||||
description: 'Remove a [Participant](#schema_user) from a [Conversation](#schema_conversation).',
|
||||
method: 'delete',
|
||||
path: '/conversations/{conversationId}/participants/{userId}',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
conversationId: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'Conversation id',
|
||||
},
|
||||
userId: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'User id',
|
||||
},
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns an empty object',
|
||||
schema: z.object({}),
|
||||
},
|
||||
})
|
||||
|
||||
export const getParticipantOperation: OperationFunc = (api) => ({
|
||||
name: 'getParticipant',
|
||||
description: 'Retrieves a [Participant](#schema_user) from a [Conversation](#schema_conversation).',
|
||||
method: 'get',
|
||||
path: '/conversations/{conversationId}/participants/{userId}',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
conversationId: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'Conversation id',
|
||||
},
|
||||
userId: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'User id',
|
||||
},
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns the [Participant](#schema_user) object',
|
||||
schema: schema(
|
||||
z.object({
|
||||
participant: api.getModelRef('User'),
|
||||
})
|
||||
),
|
||||
},
|
||||
})
|
||||
|
||||
export const listParticipantsOperation: OperationFunc = (api) => ({
|
||||
name: 'listParticipants',
|
||||
description: 'Retrieves a list of [Participants](#schema_user) for a given [Conversation](#schema_conversation).',
|
||||
method: 'get',
|
||||
path: '/conversations/{conversationId}/participants',
|
||||
parameters: {
|
||||
...authHeaders,
|
||||
...pagingParameters,
|
||||
conversationId: {
|
||||
in: 'path',
|
||||
type: 'string',
|
||||
description: 'Conversation id',
|
||||
},
|
||||
},
|
||||
section,
|
||||
response: {
|
||||
description: 'Returns a list of [Participants](#schema_user) objects',
|
||||
schema: z
|
||||
.object({
|
||||
participants: z.array(api.getModelRef('User')),
|
||||
})
|
||||
.extend({ meta: pagedResponseMeta }),
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user