From afb99fbaf1dfb7f4b567b5bdf238bfb9ce18ca2c Mon Sep 17 00:00:00 2001 From: Waleed Date: Wed, 10 Sep 2025 09:35:28 -0700 Subject: [PATCH] fix(webhook-ui): fixed webhook ui (#1301) * update infra and remove railway * fix(webhook-ui): fixed webhook ui * Revert "update infra and remove railway" This reverts commit 88669ad0b7abf49103c6891bed7e3d0b3c464bec. * feat(control-bar): updated export controls and webhook settings * additional styling improvements to chat deploy & templates modals * fix test event --------- Co-authored-by: Emir Karabeg Co-authored-by: Vikhyath Mondreti --- .../workflows/[id]/log-webhook/test/route.ts | 25 +- .../components/chat-deploy/chat-deploy.tsx | 21 +- .../chat-deploy/components/auth-selector.tsx | 79 +- .../example-command/example-command.tsx | 4 +- .../export-controls/export-controls.tsx | 2 +- .../template-modal/template-modal.tsx | 59 +- .../webhook-settings/webhook-settings.tsx | 1260 +++++++++++------ apps/sim/lib/utils.ts | 16 + 8 files changed, 928 insertions(+), 538 deletions(-) diff --git a/apps/sim/app/api/workflows/[id]/log-webhook/test/route.ts b/apps/sim/app/api/workflows/[id]/log-webhook/test/route.ts index 1cb9e8ea4..e7497f619 100644 --- a/apps/sim/app/api/workflows/[id]/log-webhook/test/route.ts +++ b/apps/sim/app/api/workflows/[id]/log-webhook/test/route.ts @@ -124,17 +124,15 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{ if (webhook.includeRateLimits) { ;(payload.data as any).rateLimits = { - workflowExecutionRateLimit: { - sync: { - limit: 60, - remaining: 45, - resetAt: new Date(timestamp + 60000).toISOString(), - }, - async: { - limit: 60, - remaining: 50, - resetAt: new Date(timestamp + 60000).toISOString(), - }, + sync: { + limit: 150, + remaining: 45, + resetAt: new Date(timestamp + 60000).toISOString(), + }, + async: { + limit: 1000, + remaining: 50, + resetAt: new Date(timestamp + 60000).toISOString(), }, } } @@ -149,12 +147,13 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{ } const body = JSON.stringify(payload) + const deliveryId = `delivery_test_${uuidv4()}` const headers: Record = { 'Content-Type': 'application/json', 'sim-event': 'workflow.execution.completed', 'sim-timestamp': timestamp.toString(), - 'sim-delivery-id': `delivery_test_${uuidv4()}`, - 'Idempotency-Key': `delivery_test_${uuidv4()}`, + 'sim-delivery-id': deliveryId, + 'Idempotency-Key': deliveryId, } if (webhook.secret) { diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/chat-deploy.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/chat-deploy.tsx index ae6b604da..d25070893 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/chat-deploy.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/chat-deploy.tsx @@ -272,12 +272,14 @@ export function ChatDeploy({ - - Cancel + + + Cancel + {isDeleting ? ( @@ -330,6 +332,7 @@ export function ChatDeploy({ onChange={(e) => updateField('title', e.target.value)} required disabled={chatSubmitting} + className='h-10 rounded-[8px]' /> {errors.title &&

{errors.title}

} @@ -344,11 +347,12 @@ export function ChatDeploy({ onChange={(e) => updateField('description', e.target.value)} rows={3} disabled={chatSubmitting} + className='min-h-[80px] resize-none rounded-[8px]' />
- + updateField('welcomeMessage', e.target.value)} rows={3} disabled={chatSubmitting} + className='min-h-[80px] resize-none rounded-[8px]' />

This message will be displayed when users first open the chat @@ -445,12 +450,14 @@ export function ChatDeploy({ - - Cancel + + + Cancel + {isDeleting ? ( diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/components/auth-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/components/auth-selector.tsx index a228259a1..d4584b691 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/components/auth-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/components/auth-selector.tsx @@ -1,7 +1,7 @@ import { useState } from 'react' import { Check, Copy, Eye, EyeOff, Plus, RefreshCw, Trash2 } from 'lucide-react' import { Button, Card, CardContent, Input, Label } from '@/components/ui' -import { cn } from '@/lib/utils' +import { cn, generatePassword } from '@/lib/utils' import type { AuthType } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/hooks/use-chat-form' interface AuthSelectorProps { @@ -32,16 +32,9 @@ export function AuthSelector({ const [emailError, setEmailError] = useState('') const [copySuccess, setCopySuccess] = useState(false) - const generatePassword = () => { - const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_-+=' - let result = '' - const length = 24 - - for (let i = 0; i < length; i++) { - result += chars.charAt(Math.floor(Math.random() * chars.length)) - } - - onPasswordChange(result) + const handleGeneratePassword = () => { + const password = generatePassword(24) + onPasswordChange(password) } const copyToClipboard = (text: string) => { @@ -80,7 +73,7 @@ export function AuthSelector({ +

Password Settings

@@ -137,42 +130,70 @@ export function AuthSelector({ value={password} onChange={(e) => onPasswordChange(e.target.value)} disabled={disabled} - className='pr-28' + className='h-10 rounded-[8px] pr-32' required={!isExistingChat} autoComplete='new-password' /> -
+
- +
{icons.map((icon) => { @@ -444,9 +453,10 @@ export function TemplateModal({ open, onOpenChange, workflowId }: TemplateModalP setIconPopoverOpen(false) }} className={cn( - 'flex h-8 w-8 items-center justify-center rounded-md border transition-colors hover:bg-muted', + 'flex h-8 w-8 items-center justify-center rounded-md border border-border/40 transition-all duration-200', + 'hover:scale-105 hover:border-border hover:bg-muted/50 active:scale-95', field.value === icon.value && - 'bg-primary text-muted-foreground' + 'border-primary/30 bg-primary/10 text-primary' )} > @@ -475,7 +485,7 @@ export function TemplateModal({ open, onOpenChange, workflowId }: TemplateModalP value={field.value} onChange={field.onChange} onBlur={field.onBlur} - className='h-10 w-20' + className='h-10 w-20 rounded-[8px]' /> @@ -491,7 +501,11 @@ export function TemplateModal({ open, onOpenChange, workflowId }: TemplateModalP Name - + @@ -508,7 +522,11 @@ export function TemplateModal({ open, onOpenChange, workflowId }: TemplateModalP Author - + @@ -525,7 +543,7 @@ export function TemplateModal({ open, onOpenChange, workflowId }: TemplateModalP