store friendly name in composio trigger deploys

This commit is contained in:
Ramnique Singh 2025-08-19 13:34:49 +05:30
parent eab27b1206
commit 63564810e8
7 changed files with 32 additions and 20 deletions

View file

@ -135,7 +135,6 @@ export async function listComposioTriggerTypes(toolkitSlug: string, cursor?: str
export async function createComposioTriggerDeployment(request: {
projectId: string,
toolkitSlug: string,
triggerTypeSlug: string,
connectedAccountId: string,
triggerConfig?: Record<string, unknown>,
@ -146,9 +145,8 @@ export async function createComposioTriggerDeployment(request: {
return await createComposioTriggerDeploymentController.execute({
caller: 'user',
userId: user._id,
projectId: request.projectId,
data: {
projectId: request.projectId,
toolkitSlug: request.toolkitSlug,
triggerTypeSlug: request.triggerTypeSlug,
connectedAccountId: request.connectedAccountId,
triggerConfig: request.triggerConfig ?? {},

View file

@ -199,7 +199,6 @@ export function TriggersTab({ projectId }: { projectId: string }) {
// Create the trigger deployment
await createComposioTriggerDeployment({
projectId,
toolkitSlug: selectedToolkit.slug,
triggerTypeSlug: selectedTriggerType.slug,
connectedAccountId,
triggerConfig,

View file

@ -212,4 +212,9 @@ export async function listTriggersTypes(toolkitSlug: string, cursor?: string): P
// fetch
return composioApiCall(ZListResponse(ZTriggerType), url.toString());
}
export async function getTriggersType(triggerTypeSlug: string): Promise<z.infer<typeof ZTriggerType>> {
const url = new URL(`${BASE_URL}/triggers_types/${triggerTypeSlug}`);
return composioApiCall(ZTriggerType, url.toString());
}

View file

@ -14,6 +14,7 @@ export const CreateDeploymentSchema = ComposioTriggerDeployment
toolkitSlug: true,
logo: true,
triggerTypeSlug: true,
triggerTypeName: true,
triggerConfig: true,
});

View file

@ -2,18 +2,20 @@ import { BadRequestError, NotFoundError } from '@/src/entities/errors/common';
import { z } from "zod";
import { IUsageQuotaPolicy } from '../../policies/usage-quota.policy.interface';
import { IProjectActionAuthorizationPolicy } from '../../policies/project-action-authorization.policy';
import { CreateDeploymentSchema, IComposioTriggerDeploymentsRepository } from '../../repositories/composio-trigger-deployments.repository.interface';
import { IComposioTriggerDeploymentsRepository } from '../../repositories/composio-trigger-deployments.repository.interface';
import { IProjectsRepository } from '../../repositories/projects.repository.interface';
import { composio, getToolkit } from '../../lib/composio/composio';
import { composio, getTriggersType } from '../../lib/composio/composio';
import { ComposioTriggerDeployment } from '@/src/entities/models/composio-trigger-deployment';
const inputSchema = z.object({
caller: z.enum(["user", "api"]),
userId: z.string().optional(),
apiKey: z.string().optional(),
data: CreateDeploymentSchema.omit({
triggerId: true,
logo: true,
projectId: z.string(),
data: ComposioTriggerDeployment.pick({
triggerTypeSlug: true,
connectedAccountId: true,
triggerConfig: true,
}),
});
@ -46,7 +48,7 @@ export class CreateComposioTriggerDeploymentUseCase implements ICreateComposioTr
async execute(request: z.infer<typeof inputSchema>): Promise<z.infer<typeof ComposioTriggerDeployment>> {
// extract projectid from conversation
const { projectId } = request.data;
const { projectId } = request;
// authz check
await this.projectActionAuthorizationPolicy.authorize({
@ -59,8 +61,11 @@ export class CreateComposioTriggerDeploymentUseCase implements ICreateComposioTr
// assert and consume quota
await this.usageQuotaPolicy.assertAndConsume(projectId);
// get trigger type info
const triggerType = await getTriggersType(request.data.triggerTypeSlug);
// get toolkit info
const toolkit = await getToolkit(request.data.toolkitSlug);
const toolkit = triggerType.toolkit;
// ensure that connected account exists on project
const project = await this.projectsRepository.fetch(projectId);
@ -69,7 +74,7 @@ export class CreateComposioTriggerDeploymentUseCase implements ICreateComposioTr
}
// ensure connected account exists
const account = project.composioConnectedAccounts?.[request.data.toolkitSlug];
const account = project.composioConnectedAccounts?.[toolkit.slug];
if (!account || account.id !== request.data.connectedAccountId) {
throw new BadRequestError('Invalid connected account');
}
@ -81,7 +86,7 @@ export class CreateComposioTriggerDeploymentUseCase implements ICreateComposioTr
}
// create trigger on composio
const result = await composio.triggers.create(request.data.projectId, request.data.triggerTypeSlug, {
const result = await composio.triggers.create(projectId, request.data.triggerTypeSlug, {
connectedAccountId: request.data.connectedAccountId,
triggerConfig: request.data.triggerConfig,
});
@ -89,11 +94,12 @@ export class CreateComposioTriggerDeploymentUseCase implements ICreateComposioTr
// create trigger deployment in db
return await this.composioTriggerDeploymentsRepository.create({
projectId,
toolkitSlug: request.data.toolkitSlug,
logo: toolkit.meta.logo,
toolkitSlug: toolkit.slug,
logo: toolkit.logo,
triggerId: result.triggerId,
connectedAccountId: request.data.connectedAccountId,
triggerTypeSlug: request.data.triggerTypeSlug,
triggerTypeName: triggerType.name,
triggerConfig: request.data.triggerConfig,
});
}

View file

@ -6,6 +6,7 @@ export const ComposioTriggerDeployment = z.object({
triggerId: z.string(),
toolkitSlug: z.string(),
triggerTypeSlug: z.string(),
triggerTypeName: z.string(),
connectedAccountId: z.string(),
triggerConfig: z.record(z.string(), z.unknown()),
logo: z.string(),

View file

@ -2,15 +2,16 @@ import { BadRequestError } from "@/src/entities/errors/common";
import z from "zod";
import { ICreateComposioTriggerDeploymentUseCase } from "@/src/application/use-cases/composio-trigger-deployments/create-composio-trigger-deployment.use-case";
import { ComposioTriggerDeployment } from "@/src/entities/models/composio-trigger-deployment";
import { CreateDeploymentSchema } from "@/src/application/repositories/composio-trigger-deployments.repository.interface";
const inputSchema = z.object({
caller: z.enum(["user", "api"]),
userId: z.string().optional(),
apiKey: z.string().optional(),
data: CreateDeploymentSchema.omit({
triggerId: true,
logo: true,
projectId: z.string(),
data: ComposioTriggerDeployment.pick({
triggerTypeSlug: true,
connectedAccountId: true,
triggerConfig: true,
}),
});
@ -35,13 +36,14 @@ export class CreateComposioTriggerDeploymentController implements ICreateComposi
if (!result.success) {
throw new BadRequestError(`Invalid request: ${JSON.stringify(result.error)}`);
}
const { caller, userId, apiKey, data } = result.data;
const { caller, userId, apiKey, projectId, data } = result.data;
// execute use case
return await this.createComposioTriggerDeploymentUseCase.execute({
caller,
userId,
apiKey,
projectId,
data,
});
}