ai-provider-controller.ts•1.65 kB
import { AIProviderWithoutSensitiveData, CreateAIProviderRequest } from '@activepieces/common-ai'
import { PrincipalType, SeekPage } from '@activepieces/shared'
import { FastifyPluginAsyncTypebox, Type } from '@fastify/type-provider-typebox'
import { StatusCodes } from 'http-status-codes'
import { aiProviderService } from './ai-provider-service'
export const aiProviderController: FastifyPluginAsyncTypebox = async (app) => {
app.get('/', ListAIProviders, async (request) => {
const platformId = request.principal.platform.id
return aiProviderService.list(platformId)
})
app.post('/', CreateAIProvider, async (request, reply) => {
const platformId = request.principal.platform.id
await aiProviderService.upsert(platformId, request.body)
return reply.status(StatusCodes.NO_CONTENT).send()
})
app.delete('/:id', DeleteAIProvider, async (request) => {
const platformId = request.principal.platform.id
return aiProviderService.delete(platformId, request.params.id)
})
}
const ListAIProviders = {
config: {
allowedPrincipals: [PrincipalType.USER, PrincipalType.ENGINE],
},
schema: {
response: {
[StatusCodes.OK]: SeekPage(AIProviderWithoutSensitiveData),
},
},
}
const CreateAIProvider = {
config: {
allowedPrincipals: [PrincipalType.USER],
},
schema: {
body: CreateAIProviderRequest,
},
}
const DeleteAIProvider = {
config: {
allowedPrincipals: [PrincipalType.USER],
},
schema: {
params: Type.Object({
id: Type.String(),
}),
},
}