import type { PipedreamApp } from '@/hooks/react-query/pipedream/utils'; import type { PipedreamProfile } from '@/components/agents/pipedream/pipedream-types'; import { categoryEmojis, PAGINATION_CONSTANTS } from './constants'; import type { ConnectedApp } from './types'; export const getSimplifiedCategories = () => { return ['All', 'Popular']; }; export const getPopularApps = (apps: PipedreamApp[]) => { return apps .filter((app) => app.featured_weight > 0) .sort((a, b) => b.featured_weight - a.featured_weight) .slice(0, PAGINATION_CONSTANTS.POPULAR_APPS_COUNT); }; export const filterAppsByCategory = (apps: PipedreamApp[], category: string) => { if (category === 'All') return apps; return apps.filter(app => app.categories.includes(category)); }; export const getAppCategoryCount = (apps: PipedreamApp[], category: string) => { return category === 'All' ? apps.length : apps.filter(app => app.categories.includes(category)).length; }; export const createConnectedAppsFromProfiles = ( connectedProfiles: PipedreamProfile[], allApps: PipedreamApp[] ): ConnectedApp[] => { const profilesByApp = connectedProfiles.reduce((acc, profile) => { const key = profile.app_slug; if (!acc[key]) { acc[key] = []; } acc[key].push(profile); return acc; }, {} as Record); return Object.entries(profilesByApp).map(([appSlug, profiles]) => { const firstProfile = profiles[0]; const registryApp = allApps.find(app => app.name_slug === firstProfile.app_slug || app.name.toLowerCase() === firstProfile.app_name.toLowerCase() ); return { id: `app_${appSlug}`, name: firstProfile.app_name, name_slug: firstProfile.app_slug, auth_type: "keys", description: `Access your ${firstProfile.app_name} workspace and tools`, img_src: registryApp?.img_src || "", custom_fields_json: registryApp?.custom_fields_json || "[]", categories: registryApp?.categories || [], featured_weight: 0, connect: { allowed_domains: registryApp?.connect?.allowed_domains || null, base_proxy_target_url: registryApp?.connect?.base_proxy_target_url || "", proxy_enabled: registryApp?.connect?.proxy_enabled || false, }, connectedProfiles: profiles, profileCount: profiles.length } as ConnectedApp; }); }; export const getAgentPipedreamProfiles = ( agent: any, profiles: PipedreamProfile[], currentAgentId?: string, versionData?: { configured_mcps?: any[]; custom_mcps?: any[]; system_prompt?: string; agentpress_tools?: any; } ) => { if (!agent || !profiles || !currentAgentId) return []; const customMcps = versionData?.custom_mcps || agent.custom_mcps || []; const pipedreamMcps = customMcps.filter((mcp: any) => mcp.config?.profile_id && mcp.config?.url?.includes('pipedream') ); const profileIds = pipedreamMcps.map((mcp: any) => mcp.config?.profile_id).filter(Boolean); const usedProfiles = profiles.filter(profile => profileIds.includes(profile.profile_id) ); return usedProfiles.map(profile => { const mcpConfig = pipedreamMcps.find((mcp: any) => mcp.config?.profile_id === profile.profile_id); const enabledTools = mcpConfig?.enabledTools || mcpConfig?.enabled_tools || []; const toolsCount = enabledTools.length; return { ...profile, enabledTools, toolsCount }; }); }; export const getCategoryEmoji = (category: string): string => { return categoryEmojis[category] || '🔧'; };