From 4964495abbed28315546cfd744b979575d65734e Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Sat, 26 Jul 2025 12:45:44 -0700 Subject: [PATCH 1/5] fix(picker): fix docs.google.com refused to connect issue (#797) Co-authored-by: waleedlatif --- apps/sim/next.config.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/sim/next.config.ts b/apps/sim/next.config.ts index f4de6fa2ed..7e625755e5 100644 --- a/apps/sim/next.config.ts +++ b/apps/sim/next.config.ts @@ -96,8 +96,8 @@ const nextConfig: NextConfig = { ], }, { - // Exclude Vercel internal resources and static assets from strict COEP - source: '/((?!_next|_vercel|api|favicon.ico|w/.*|api/tools/drive).*)', + // Exclude Vercel internal resources and static assets from strict COEP, Google Drive Picker to prevent 'refused to connect' issue + source: '/((?!_next|_vercel|api|favicon.ico|w/.*|workspace/.*|api/tools/drive).*)', headers: [ { key: 'Cross-Origin-Embedder-Policy', @@ -119,7 +119,7 @@ const nextConfig: NextConfig = { }, { key: 'Cross-Origin-Opener-Policy', - value: 'same-origin', + value: 'same-origin-allow-popups', }, ], }, From 727e5e8763e24f91c41b51119c3a89195befcbe6 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Sat, 26 Jul 2025 12:54:08 -0700 Subject: [PATCH 2/5] feat(workflow): added cancellation after launching manual execution (#796) * feat(worfklow): added cancellation after launching manual execution * fix build error * ack PR comments --------- Co-authored-by: waleedlatif --- .../components/control-bar/control-bar.tsx | 32 +++++-- .../hooks/use-workflow-execution.ts | 38 +++++++++ apps/sim/executor/index.test.ts | 85 +++++++++++++++++++ apps/sim/executor/index.ts | 40 ++++++++- 4 files changed, 189 insertions(+), 6 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx index a103082d54..edf05cc3cc 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx @@ -91,7 +91,7 @@ export function ControlBar({ hasValidationErrors = false }: ControlBarProps) { setDeploymentStatus, isLoading: isRegistryLoading, } = useWorkflowRegistry() - const { isExecuting, handleRunWorkflow } = useWorkflowExecution() + const { isExecuting, handleRunWorkflow, handleCancelExecution } = useWorkflowExecution() const { setActiveTab, togglePanel, isOpen } = usePanelStore() const { getFolderTree, expandedFolders } = useFolderStore() @@ -785,12 +785,36 @@ export function ControlBar({ hasValidationErrors = false }: ControlBarProps) { } /** - * Render run workflow button + * Render run workflow button or cancel button when executing */ const renderRunButton = () => { const canRun = userPermissions.canRead // Running only requires read permissions const isLoadingPermissions = userPermissions.isLoading - const isButtonDisabled = isWorkflowBlocked || (!canRun && !isLoadingPermissions) + const isButtonDisabled = + !isExecuting && (isWorkflowBlocked || (!canRun && !isLoadingPermissions)) + + // If currently executing, show cancel button + if (isExecuting) { + return ( + + + + + Cancel execution + + ) + } const getTooltipContent = () => { if (hasValidationErrors) { @@ -843,8 +867,6 @@ export function ControlBar({ hasValidationErrors = false }: ControlBarProps) { 'bg-[#701FFC] hover:bg-[#6518E6]', 'shadow-[0_0_0_0_#701FFC] hover:shadow-[0_0_0_4px_rgba(127,47,255,0.15)]', 'text-white transition-all duration-200', - isExecuting && - 'relative after:absolute after:inset-0 after:animate-pulse after:bg-white/20', 'disabled:opacity-50 disabled:hover:bg-[#701FFC] disabled:hover:shadow-none', 'h-12 rounded-[11px] px-4 py-2' )} diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution.ts index 9d57249bbb..6abd90a512 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution.ts @@ -306,6 +306,21 @@ export function useWorkflowExecution() { try { const result = await executeWorkflow(workflowInput, onStream, executionId) + // Check if execution was cancelled + if ( + result && + 'success' in result && + !result.success && + result.error === 'Workflow execution was cancelled' + ) { + controller.enqueue( + encoder.encode( + `data: ${JSON.stringify({ event: 'cancelled', data: result })}\n\n` + ) + ) + return + } + await Promise.all(streamReadingPromises) if (result && 'success' in result) { @@ -737,6 +752,28 @@ export function useWorkflowExecution() { resetDebugState() }, [resetDebugState]) + /** + * Handles cancelling the current workflow execution + */ + const handleCancelExecution = useCallback(() => { + logger.info('Workflow execution cancellation requested') + + // Cancel the executor if it exists + if (executor) { + executor.cancel() + } + + // Reset execution state + setIsExecuting(false) + setIsDebugging(false) + setActiveBlocks(new Set()) + + // If in debug mode, also reset debug state + if (isDebugging) { + resetDebugState() + } + }, [executor, isDebugging, resetDebugState, setIsExecuting, setIsDebugging, setActiveBlocks]) + return { isExecuting, isDebugging, @@ -746,5 +783,6 @@ export function useWorkflowExecution() { handleStepDebug, handleResumeDebug, handleCancelDebug, + handleCancelExecution, } } diff --git a/apps/sim/executor/index.test.ts b/apps/sim/executor/index.test.ts index a6eafcf2ad..a85b06d27a 100644 --- a/apps/sim/executor/index.test.ts +++ b/apps/sim/executor/index.test.ts @@ -882,4 +882,89 @@ describe('Executor', () => { expect(result).toBe(true) }) }) + + /** + * Cancellation tests + */ + describe('workflow cancellation', () => { + test('should set cancellation flag when cancel() is called', () => { + const workflow = createMinimalWorkflow() + const executor = new Executor(workflow) + + // Initially not cancelled + expect((executor as any).isCancelled).toBe(false) + + // Cancel and check flag + executor.cancel() + expect((executor as any).isCancelled).toBe(true) + }) + + test('should handle cancellation in debug mode continueExecution', async () => { + const workflow = createMinimalWorkflow() + const executor = new Executor(workflow) + + // Create mock context + const mockContext = createMockContext() + mockContext.blockStates.set('starter', { + output: { input: {} }, + executed: true, + executionTime: 0, + }) + + // Cancel before continue execution + executor.cancel() + + const result = await executor.continueExecution(['block1'], mockContext) + + expect(result.success).toBe(false) + expect(result.error).toBe('Workflow execution was cancelled') + }) + + test('should handle multiple cancel() calls gracefully', () => { + const workflow = createMinimalWorkflow() + const executor = new Executor(workflow) + + // Multiple cancellations should not cause issues + executor.cancel() + executor.cancel() + executor.cancel() + + expect((executor as any).isCancelled).toBe(true) + }) + + test('should prevent new execution on cancelled executor', async () => { + const workflow = createMinimalWorkflow() + const executor = new Executor(workflow) + + // Cancel first + executor.cancel() + + // Try to execute + const result = await executor.execute('test-workflow-id') + + // Should immediately return cancelled result + if ('success' in result) { + expect(result.success).toBe(false) + expect(result.error).toBe('Workflow execution was cancelled') + } + }) + + test('should return cancelled result when cancellation flag is checked', async () => { + const workflow = createMinimalWorkflow() + const executor = new Executor(workflow) + + // Test cancellation during the execution loop check + // Mock the while loop condition by setting cancelled before execution + + ;(executor as any).isCancelled = true + + const result = await executor.execute('test-workflow-id') + + // Should return cancelled result + if ('success' in result) { + expect(result.success).toBe(false) + expect(result.error).toBe('Workflow execution was cancelled') + } + }) + }) }) diff --git a/apps/sim/executor/index.ts b/apps/sim/executor/index.ts index 68a90b2588..23cda89c2b 100644 --- a/apps/sim/executor/index.ts +++ b/apps/sim/executor/index.ts @@ -70,6 +70,7 @@ export class Executor { private isDebugging = false private contextExtensions: any = {} private actualWorkflow: SerializedWorkflow + private isCancelled = false constructor( private workflowParam: @@ -163,6 +164,15 @@ export class Executor { this.isDebugging = useGeneralStore.getState().isDebugModeEnabled } + /** + * Cancels the current workflow execution. + * Sets the cancellation flag to stop further execution. + */ + public cancel(): void { + logger.info('Workflow execution cancelled') + this.isCancelled = true + } + /** * Executes the workflow and returns the result. * @@ -201,7 +211,7 @@ export class Executor { let iteration = 0 const maxIterations = 100 // Safety limit for infinite loops - while (hasMoreLayers && iteration < maxIterations) { + while (hasMoreLayers && iteration < maxIterations && !this.isCancelled) { const nextLayer = this.getNextExecutionLayer(context) if (this.isDebugging) { @@ -414,6 +424,24 @@ export class Executor { iteration++ } + // Handle cancellation + if (this.isCancelled) { + trackWorkflowTelemetry('workflow_execution_cancelled', { + workflowId, + duration: Date.now() - startTime.getTime(), + blockCount: this.actualWorkflow.blocks.length, + executedBlockCount: context.executedBlocks.size, + startTime: startTime.toISOString(), + }) + + return { + success: false, + output: finalOutput, + error: 'Workflow execution was cancelled', + logs: context.blockLogs, + } + } + const endTime = new Date() context.metadata.endTime = endTime.toISOString() const duration = endTime.getTime() - startTime.getTime() @@ -478,6 +506,16 @@ export class Executor { const { setPendingBlocks } = useExecutionStore.getState() let finalOutput: NormalizedBlockOutput = {} + // Check for cancellation + if (this.isCancelled) { + return { + success: false, + output: finalOutput, + error: 'Workflow execution was cancelled', + logs: context.blockLogs, + } + } + try { // Execute the current layer - using the original context, not a clone const outputs = await this.executeLayer(blockIds, context) From 93f68a909204ff69d815bbfdaea662affc19ae6a Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Sat, 26 Jul 2025 15:05:33 -0700 Subject: [PATCH 3/5] refactor(logger): code cleanup for new execution logger (#798) * refactor(logger): code hygiene with new logger * modify remaining files * simplify code structure --------- Co-authored-by: waleedlatif --- apps/sim/app/(auth)/login/login-form.tsx | 2 +- apps/sim/app/(auth)/reset-password/page.tsx | 2 +- .../sim/app/(auth)/verify/use-verification.ts | 2 +- apps/sim/app/api/__test-utils__/utils.ts | 6 +- .../api/auth/forget-password/route.test.ts | 4 +- .../sim/app/api/auth/forget-password/route.ts | 2 +- .../api/auth/oauth/connections/route.test.ts | 2 +- .../app/api/auth/oauth/connections/route.ts | 2 +- .../api/auth/oauth/credentials/route.test.ts | 2 +- .../app/api/auth/oauth/credentials/route.ts | 2 +- .../api/auth/oauth/disconnect/route.test.ts | 2 +- .../app/api/auth/oauth/disconnect/route.ts | 2 +- .../api/auth/oauth/microsoft/file/route.ts | 2 +- .../api/auth/oauth/microsoft/files/route.ts | 2 +- .../app/api/auth/oauth/token/route.test.ts | 2 +- apps/sim/app/api/auth/oauth/token/route.ts | 2 +- apps/sim/app/api/auth/oauth/utils.test.ts | 2 +- apps/sim/app/api/auth/oauth/utils.ts | 2 +- .../api/auth/oauth/wealthbox/item/route.ts | 2 +- .../api/auth/oauth/wealthbox/items/route.ts | 2 +- .../app/api/auth/reset-password/route.test.ts | 4 +- apps/sim/app/api/auth/reset-password/route.ts | 2 +- apps/sim/app/api/billing/daily/route.ts | 2 +- apps/sim/app/api/billing/route.ts | 2 +- .../app/api/billing/webhooks/stripe/route.ts | 2 +- .../sim/app/api/chat/[subdomain]/otp/route.ts | 2 +- .../app/api/chat/[subdomain]/route.test.ts | 2 +- apps/sim/app/api/chat/[subdomain]/route.ts | 2 +- apps/sim/app/api/chat/edit/[id]/route.test.ts | 2 +- apps/sim/app/api/chat/edit/[id]/route.ts | 2 +- apps/sim/app/api/chat/route.test.ts | 2 +- apps/sim/app/api/chat/route.ts | 2 +- .../chat/subdomains/validate/route.test.ts | 2 +- .../app/api/chat/subdomains/validate/route.ts | 2 +- apps/sim/app/api/chat/utils.test.ts | 6 +- apps/sim/app/api/chat/utils.ts | 16 ++--- apps/sim/app/api/codegen/route.test.ts | 2 +- apps/sim/app/api/codegen/route.ts | 2 +- .../copilot/checkpoints/[id]/revert/route.ts | 2 +- apps/sim/app/api/copilot/checkpoints/route.ts | 2 +- apps/sim/app/api/copilot/route.ts | 2 +- apps/sim/app/api/docs/search/route.ts | 2 +- apps/sim/app/api/environment/route.ts | 2 +- apps/sim/app/api/files/delete/route.ts | 2 +- apps/sim/app/api/files/parse/route.ts | 2 +- apps/sim/app/api/files/presigned/route.ts | 2 +- .../app/api/files/serve/[...path]/route.ts | 2 +- apps/sim/app/api/files/upload/route.ts | 2 +- apps/sim/app/api/folders/[id]/route.ts | 2 +- apps/sim/app/api/folders/route.ts | 2 +- .../app/api/function/execute/route.test.ts | 4 +- apps/sim/app/api/function/execute/route.ts | 2 +- apps/sim/app/api/help/route.ts | 2 +- apps/sim/app/api/jobs/[jobId]/route.ts | 2 +- .../[documentId]/chunks/[chunkId]/route.ts | 2 +- .../documents/[documentId]/chunks/route.ts | 2 +- .../[id]/documents/[documentId]/route.ts | 2 +- .../app/api/knowledge/[id]/documents/route.ts | 2 +- apps/sim/app/api/knowledge/[id]/route.ts | 2 +- apps/sim/app/api/knowledge/route.ts | 2 +- apps/sim/app/api/knowledge/search/route.ts | 2 +- apps/sim/app/api/knowledge/utils.ts | 2 +- .../logs/[executionId]/frozen-canvas/route.ts | 2 +- apps/sim/app/api/logs/cleanup/route.ts | 4 +- apps/sim/app/api/logs/{enhanced => }/route.ts | 14 ++-- apps/sim/app/api/memory/[id]/route.ts | 2 +- apps/sim/app/api/memory/route.ts | 2 +- .../organizations/[id]/invitations/route.ts | 2 +- .../[id]/members/[memberId]/route.ts | 2 +- .../api/organizations/[id]/members/route.ts | 2 +- apps/sim/app/api/organizations/[id]/route.ts | 2 +- .../organizations/[id]/workspaces/route.ts | 2 +- .../organizations/invitations/accept/route.ts | 2 +- apps/sim/app/api/providers/route.ts | 2 +- apps/sim/app/api/proxy/image/route.ts | 2 +- apps/sim/app/api/proxy/route.ts | 2 +- apps/sim/app/api/proxy/tts/route.ts | 2 +- apps/sim/app/api/proxy/tts/stream/route.ts | 2 +- apps/sim/app/api/schedules/[id]/route.ts | 2 +- .../api/schedules/[id]/status/route.test.ts | 2 +- .../app/api/schedules/[id]/status/route.ts | 2 +- apps/sim/app/api/schedules/execute/route.ts | 18 ++--- apps/sim/app/api/schedules/route.ts | 2 +- apps/sim/app/api/telemetry/route.ts | 2 +- apps/sim/app/api/templates/[id]/route.ts | 2 +- apps/sim/app/api/templates/[id]/star/route.ts | 2 +- apps/sim/app/api/templates/[id]/use/route.ts | 2 +- apps/sim/app/api/templates/route.ts | 2 +- .../app/api/tools/confluence/pages/route.ts | 2 +- apps/sim/app/api/tools/custom/route.test.ts | 2 +- apps/sim/app/api/tools/custom/route.ts | 2 +- .../app/api/tools/discord/channels/route.ts | 2 +- .../app/api/tools/discord/servers/route.ts | 2 +- apps/sim/app/api/tools/drive/file/route.ts | 2 +- apps/sim/app/api/tools/drive/files/route.ts | 2 +- apps/sim/app/api/tools/edit-workflow/route.ts | 2 +- .../sim/app/api/tools/get-all-blocks/route.ts | 2 +- .../api/tools/get-blocks-metadata/route.ts | 2 +- .../app/api/tools/get-user-workflow/route.ts | 2 +- apps/sim/app/api/tools/gmail/label/route.ts | 2 +- apps/sim/app/api/tools/gmail/labels/route.ts | 2 +- .../tools/google_calendar/calendars/route.ts | 2 +- apps/sim/app/api/tools/jira/issue/route.ts | 2 +- apps/sim/app/api/tools/jira/issues/route.ts | 2 +- apps/sim/app/api/tools/jira/projects/route.ts | 2 +- .../app/api/tools/linear/projects/route.ts | 2 +- apps/sim/app/api/tools/linear/teams/route.ts | 2 +- .../tools/microsoft-teams/channels/route.ts | 2 +- .../api/tools/microsoft-teams/chats/route.ts | 2 +- .../api/tools/microsoft-teams/teams/route.ts | 2 +- .../app/api/tools/outlook/folders/route.ts | 2 +- .../sim/app/api/tools/slack/channels/route.ts | 2 +- .../app/api/tools/stagehand/agent/route.ts | 2 +- .../app/api/tools/stagehand/extract/route.ts | 2 +- apps/sim/app/api/tools/stagehand/utils.ts | 2 +- .../sim/app/api/tools/wealthbox/item/route.ts | 2 +- .../app/api/tools/wealthbox/items/route.ts | 2 +- apps/sim/app/api/usage-limits/route.ts | 2 +- .../app/api/users/me/api-keys/[id]/route.ts | 2 +- apps/sim/app/api/users/me/api-keys/route.ts | 2 +- apps/sim/app/api/users/me/settings/route.ts | 2 +- .../users/me/settings/unsubscribe/route.ts | 2 +- .../subscription/[id]/transfer/route.test.ts | 2 +- .../me/subscription/[id]/transfer/route.ts | 2 +- apps/sim/app/api/users/rate-limit/route.ts | 2 +- apps/sim/app/api/webhooks/[id]/route.ts | 2 +- apps/sim/app/api/webhooks/poll/gmail/route.ts | 2 +- apps/sim/app/api/webhooks/route.ts | 2 +- apps/sim/app/api/webhooks/test/route.ts | 2 +- .../app/api/webhooks/trigger/[path]/route.ts | 2 +- .../api/workflows/[id]/autolayout/route.ts | 2 +- .../api/workflows/[id]/chat/status/route.ts | 2 +- .../api/workflows/[id]/deploy/route.test.ts | 2 +- .../app/api/workflows/[id]/deploy/route.ts | 2 +- .../app/api/workflows/[id]/deployed/route.ts | 2 +- .../app/api/workflows/[id]/duplicate/route.ts | 2 +- .../api/workflows/[id]/execute/route.test.ts | 69 +++---------------- .../app/api/workflows/[id]/execute/route.ts | 10 +-- apps/sim/app/api/workflows/[id]/log/route.ts | 12 ++-- .../[id]/revert-to-deployed/route.ts | 2 +- apps/sim/app/api/workflows/[id]/route.test.ts | 2 +- apps/sim/app/api/workflows/[id]/route.ts | 2 +- .../sim/app/api/workflows/[id]/state/route.ts | 2 +- .../sim/app/api/workflows/[id]/stats/route.ts | 2 +- .../app/api/workflows/[id]/status/route.ts | 2 +- .../app/api/workflows/[id]/variables/route.ts | 2 +- apps/sim/app/api/workflows/[id]/yaml/route.ts | 2 +- apps/sim/app/api/workflows/middleware.ts | 2 +- .../app/api/workflows/public/[id]/route.ts | 2 +- apps/sim/app/api/workflows/route.ts | 2 +- apps/sim/app/api/workflows/sync/route.ts | 2 +- .../app/api/workflows/yaml/convert/route.ts | 2 +- apps/sim/app/api/workspaces/[id]/route.ts | 2 +- .../app/api/workspaces/invitations/route.ts | 2 +- apps/sim/app/api/workspaces/route.ts | 2 +- apps/sim/app/chat/[subdomain]/chat-client.tsx | 2 +- .../voice-interface/components/particles.tsx | 2 +- .../voice-interface/voice-interface.tsx | 2 +- .../[subdomain]/hooks/use-audio-streaming.ts | 2 +- .../[subdomain]/hooks/use-chat-streaming.ts | 2 +- apps/sim/app/layout.tsx | 6 +- apps/sim/app/telemetry-consent-dialog.tsx | 2 +- .../workspace-permissions-provider.tsx | 2 +- .../create-chunk-modal/create-chunk-modal.tsx | 2 +- .../delete-chunk-modal/delete-chunk-modal.tsx | 2 +- .../edit-chunk-modal/edit-chunk-modal.tsx | 2 +- .../knowledge/[id]/[documentId]/document.tsx | 2 +- .../[workspaceId]/knowledge/[id]/base.tsx | 2 +- .../components/upload-modal/upload-modal.tsx | 2 +- .../components/create-modal/create-modal.tsx | 2 +- .../workspace-selector/workspace-selector.tsx | 2 +- .../knowledge/hooks/use-knowledge-upload.ts | 2 +- .../frozen-canvas/frozen-canvas.tsx | 2 +- .../app/workspace/[workspaceId]/logs/logs.tsx | 6 +- .../[workspaceId]/templates/[id]/page.tsx | 2 +- .../[workspaceId]/templates/[id]/template.tsx | 2 +- .../templates/components/template-card.tsx | 2 +- .../[workspaceId]/templates/templates.tsx | 2 +- .../components/chat-deploy/chat-deploy.tsx | 2 +- .../components/deploy-form/deploy-form.tsx | 2 +- .../components/deploy-modal/deploy-modal.tsx | 2 +- .../components/deployed-workflow-card.tsx | 2 +- .../components/deployed-workflow-modal.tsx | 2 +- .../export-controls/export-controls.tsx | 2 +- .../template-modal/template-modal.tsx | 2 +- .../control-bar/control-bar.test.ts | 2 +- .../components/control-bar/control-bar.tsx | 2 +- .../w/[workflowId]/components/error/index.tsx | 2 +- .../components/loop-node/loop-node.test.tsx | 2 +- .../components/panel/components/chat/chat.tsx | 2 +- .../console-entry/console-entry.tsx | 2 +- .../copilot-modal/copilot-modal.tsx | 2 +- .../panel/components/copilot/copilot.tsx | 2 +- .../panel/components/variables/variables.tsx | 2 +- .../parallel-node/parallel-node.test.tsx | 2 +- .../components/sub-block/components/code.tsx | 2 +- .../sub-block/components/combobox.tsx | 2 +- .../sub-block/components/condition-input.tsx | 2 +- .../components/oauth-required-modal.tsx | 2 +- .../credential-selector.tsx | 2 +- .../components/confluence-file-selector.tsx | 2 +- .../components/discord-channel-selector.tsx | 2 +- .../components/google-calendar-selector.tsx | 2 +- .../components/google-drive-picker.tsx | 7 +- .../components/jira-issue-selector.tsx | 2 +- .../components/microsoft-file-selector.tsx | 2 +- .../components/teams-message-selector.tsx | 2 +- .../components/wealthbox-file-selector.tsx | 2 +- .../sub-block/components/file-upload.tsx | 2 +- .../folder-selector/folder-selector.tsx | 2 +- .../sub-block/components/long-input.tsx | 2 +- .../components/discord-server-selector.tsx | 2 +- .../components/jira-project-selector.tsx | 2 +- .../schedule/components/schedule-modal.tsx | 2 +- .../components/schedule/schedule-config.tsx | 2 +- .../sub-block/components/short-input.tsx | 2 +- .../custom-tool-modal/custom-tool-modal.tsx | 2 +- .../components/tool-credential-selector.tsx | 2 +- .../webhook/components/providers/gmail.tsx | 2 +- .../webhook/components/webhook-modal.tsx | 2 +- .../sub-block/components/webhook/webhook.tsx | 2 +- .../sub-block/hooks/use-sub-block-value.ts | 2 +- .../workflow-text-editor/workflow-applier.ts | 2 +- .../workflow-text-editor/workflow-exporter.ts | 2 +- .../workflow-text-editor-modal.tsx | 2 +- .../workflow-text-editor.tsx | 2 +- .../hooks/use-block-connections.ts | 2 +- .../[workflowId]/hooks/use-code-generation.ts | 2 +- .../hooks/use-workflow-execution.ts | 4 +- .../[workspaceId]/w/[workflowId]/utils.ts | 2 +- .../[workspaceId]/w/[workflowId]/workflow.tsx | 2 +- .../create-menu/import-controls.tsx | 2 +- .../folder-context-menu.tsx | 2 +- .../folder-tree/components/folder-item.tsx | 2 +- .../folder-tree/components/workflow-item.tsx | 2 +- .../components/folder-tree/folder-tree.tsx | 2 +- .../components/help-form/help-form.tsx | 2 +- .../components/account/account.tsx | 2 +- .../components/api-keys/api-keys.tsx | 2 +- .../components/credentials/credentials.tsx | 2 +- .../components/billing-summary.tsx | 2 +- .../components/cancel-subscription.tsx | 2 +- .../components/team-usage-overview.tsx | 2 +- .../components/usage-limit-editor.tsx | 2 +- .../components/subscription/subscription.tsx | 2 +- .../team-management/team-management.tsx | 2 +- .../settings-modal/settings-modal.tsx | 2 +- .../workspace-header/workspace-header.tsx | 2 +- .../components/invite-modal/invite-modal.tsx | 2 +- .../invites-sent/invites-sent.tsx | 2 +- .../workspace-selector/workspace-selector.tsx | 2 +- .../w/components/sidebar/sidebar.tsx | 2 +- .../workflow-preview/workflow-preview.tsx | 2 +- apps/sim/app/workspace/page.tsx | 2 +- apps/sim/blocks/blocks/agent.ts | 2 +- apps/sim/blocks/blocks/evaluator.ts | 2 +- apps/sim/blocks/blocks/file.ts | 2 +- apps/sim/blocks/blocks/supabase.ts | 2 +- apps/sim/blocks/blocks/workflow.ts | 2 +- apps/sim/contexts/socket-context.tsx | 2 +- .../__test-utils__/mock-dependencies.ts | 2 +- .../executor/handlers/agent/agent-handler.ts | 2 +- apps/sim/executor/handlers/api/api-handler.ts | 2 +- .../handlers/condition/condition-handler.ts | 2 +- .../handlers/evaluator/evaluator-handler.ts | 2 +- .../function/function-handler.test.ts | 2 +- .../handlers/function/function-handler.ts | 2 +- .../handlers/generic/generic-handler.ts | 2 +- .../executor/handlers/loop/loop-handler.ts | 2 +- .../handlers/parallel/parallel-handler.ts | 2 +- .../handlers/response/response-handler.ts | 2 +- .../handlers/router/router-handler.ts | 2 +- .../handlers/workflow/workflow-handler.ts | 2 +- apps/sim/executor/index.test.ts | 2 +- apps/sim/executor/index.ts | 2 +- apps/sim/executor/loops/loops.test.ts | 2 +- apps/sim/executor/loops/loops.ts | 2 +- apps/sim/executor/parallels/parallels.test.ts | 2 +- apps/sim/executor/parallels/parallels.ts | 2 +- apps/sim/executor/path/path.ts | 2 +- apps/sim/executor/resolver/resolver.ts | 2 +- apps/sim/executor/utils.test.ts | 2 +- apps/sim/executor/utils.ts | 2 +- apps/sim/hooks/use-collaborative-workflow.ts | 2 +- apps/sim/hooks/use-subscription-state.ts | 2 +- apps/sim/hooks/use-user-permissions.ts | 2 +- apps/sim/hooks/use-workspace-permissions.ts | 2 +- apps/sim/instrumentation-edge.ts | 2 +- apps/sim/instrumentation-node.ts | 2 +- apps/sim/lib/auth.ts | 2 +- apps/sim/lib/auth/internal.ts | 2 +- apps/sim/lib/autolayout/service.ts | 2 +- .../lib/billing/calculations/usage-monitor.ts | 2 +- .../lib/billing/core/billing-periods.test.ts | 2 +- apps/sim/lib/billing/core/billing-periods.ts | 2 +- apps/sim/lib/billing/core/billing.test.ts | 2 +- apps/sim/lib/billing/core/billing.ts | 2 +- .../lib/billing/core/organization-billing.ts | 2 +- apps/sim/lib/billing/core/subscription.ts | 2 +- apps/sim/lib/billing/core/usage.ts | 2 +- apps/sim/lib/billing/stripe-client.ts | 2 +- .../lib/billing/validation/seat-management.ts | 2 +- .../webhooks/stripe-invoice-webhooks.ts | 2 +- apps/sim/lib/copilot/api.ts | 2 +- apps/sim/lib/copilot/config.ts | 2 +- apps/sim/lib/copilot/service.ts | 2 +- apps/sim/lib/copilot/tools.ts | 2 +- apps/sim/lib/documents/docs-chunker.ts | 2 +- apps/sim/lib/documents/document-processor.ts | 2 +- apps/sim/lib/documents/utils.ts | 2 +- apps/sim/lib/email/mailer.ts | 2 +- apps/sim/lib/email/unsubscribe.ts | 2 +- apps/sim/lib/file-parsers/csv-parser.ts | 2 +- apps/sim/lib/file-parsers/docx-parser.ts | 2 +- apps/sim/lib/file-parsers/index.ts | 2 +- apps/sim/lib/file-parsers/md-parser.ts | 2 +- apps/sim/lib/file-parsers/pdf-parser.ts | 2 +- apps/sim/lib/file-parsers/raw-pdf-parser.ts | 2 +- apps/sim/lib/file-parsers/txt-parser.ts | 2 +- apps/sim/lib/file-parsers/xlsx-parser.ts | 2 +- apps/sim/lib/freestyle.ts | 2 +- .../{console-logger.ts => console/logger.ts} | 4 +- .../logger.test.ts} | 13 ++-- .../logger.ts} | 12 ++-- .../logging-factory.ts} | 1 - .../logging-session.ts} | 57 ++++++--------- .../snapshot/service.test.ts} | 2 +- .../snapshot/service.ts} | 2 +- .../trace-spans}/trace-spans.test.ts | 5 +- .../trace-spans}/trace-spans.ts | 2 +- apps/sim/lib/oauth/oauth.test.ts | 2 +- apps/sim/lib/oauth/oauth.ts | 2 +- apps/sim/lib/redis.ts | 2 +- apps/sim/lib/response-format.ts | 2 +- apps/sim/lib/schedules/utils.ts | 2 +- apps/sim/lib/telemetry.ts | 2 +- apps/sim/lib/tokenization/calculators.ts | 2 +- apps/sim/lib/tokenization/estimators.ts | 2 +- apps/sim/lib/tokenization/streaming.ts | 2 +- apps/sim/lib/tokenization/utils.ts | 2 +- apps/sim/lib/uploads/setup.server.ts | 2 +- apps/sim/lib/uploads/setup.ts | 2 +- apps/sim/lib/uploads/storage-client.ts | 2 +- apps/sim/lib/utils.ts | 2 +- .../sim/lib/webhooks/gmail-polling-service.ts | 2 +- apps/sim/lib/webhooks/utils.ts | 33 ++++----- apps/sim/lib/workflows/db-helpers.test.ts | 2 +- apps/sim/lib/workflows/db-helpers.ts | 2 +- apps/sim/lib/workflows/utils.ts | 2 +- apps/sim/lib/workflows/yaml-generator.ts | 2 +- apps/sim/middleware.ts | 2 +- apps/sim/providers/anthropic/index.ts | 2 +- apps/sim/providers/azure-openai/index.ts | 8 +-- apps/sim/providers/cerebras/index.ts | 2 +- apps/sim/providers/deepseek/index.ts | 2 +- apps/sim/providers/google/index.ts | 2 +- apps/sim/providers/groq/index.ts | 2 +- apps/sim/providers/index.ts | 2 +- apps/sim/providers/ollama/index.ts | 2 +- apps/sim/providers/openai/index.ts | 8 +-- apps/sim/providers/utils.ts | 2 +- apps/sim/providers/xai/index.ts | 2 +- apps/sim/scripts/chunk-docs.ts | 2 +- apps/sim/scripts/process-docs-embeddings.ts | 2 +- apps/sim/scripts/test-billing-suite.ts | 2 +- apps/sim/serializer/index.test.ts | 2 +- apps/sim/serializer/index.ts | 2 +- apps/sim/services/queue/RateLimiter.ts | 2 +- apps/sim/socket-server/config/socket.ts | 2 +- apps/sim/socket-server/database/operations.ts | 2 +- apps/sim/socket-server/handlers/connection.ts | 2 +- apps/sim/socket-server/handlers/operations.ts | 2 +- apps/sim/socket-server/handlers/presence.ts | 2 +- apps/sim/socket-server/handlers/subblocks.ts | 2 +- apps/sim/socket-server/handlers/workflow.ts | 2 +- apps/sim/socket-server/index.test.ts | 2 +- apps/sim/socket-server/index.ts | 2 +- apps/sim/socket-server/middleware/auth.ts | 2 +- .../socket-server/middleware/permissions.ts | 2 +- apps/sim/socket-server/rooms/manager.ts | 2 +- apps/sim/stores/copilot/store.ts | 2 +- apps/sim/stores/custom-tools/store.ts | 2 +- apps/sim/stores/folders/store.ts | 2 +- apps/sim/stores/index.ts | 2 +- apps/sim/stores/knowledge/store.ts | 2 +- apps/sim/stores/ollama/store.ts | 2 +- apps/sim/stores/operation-queue/store.ts | 2 +- apps/sim/stores/organization/store.ts | 2 +- apps/sim/stores/panel/variables/store.ts | 2 +- apps/sim/stores/settings/environment/store.ts | 2 +- apps/sim/stores/settings/general/store.ts | 2 +- apps/sim/stores/subscription/store.ts | 2 +- apps/sim/stores/workflows/index.ts | 2 +- apps/sim/stores/workflows/registry/store.ts | 2 +- apps/sim/stores/workflows/workflow/store.ts | 2 +- apps/sim/stores/workflows/yaml/importer.ts | 2 +- .../stores/workflows/yaml/parsing-utils.ts | 2 +- apps/sim/stores/workflows/yaml/store.ts | 2 +- apps/sim/tools/browser_use/run_task.ts | 2 +- apps/sim/tools/discord/get_messages.ts | 2 +- apps/sim/tools/discord/get_server.ts | 2 +- apps/sim/tools/discord/get_user.ts | 2 +- apps/sim/tools/discord/send_message.ts | 2 +- apps/sim/tools/elevenlabs/tts.ts | 2 +- apps/sim/tools/exa/research.ts | 2 +- apps/sim/tools/file/parser.ts | 2 +- apps/sim/tools/firecrawl/crawl.ts | 2 +- apps/sim/tools/function/execute.test.ts | 33 +++++---- apps/sim/tools/google_docs/create.ts | 2 +- apps/sim/tools/google_drive/get_content.ts | 2 +- apps/sim/tools/google_drive/upload.ts | 2 +- apps/sim/tools/http/request.ts | 2 +- apps/sim/tools/index.ts | 2 +- .../sim/tools/microsoft_teams/read_channel.ts | 2 +- apps/sim/tools/mistral/parser.ts | 2 +- apps/sim/tools/openai/image.ts | 2 +- apps/sim/tools/stagehand/agent.ts | 2 +- apps/sim/tools/stagehand/extract.ts | 2 +- apps/sim/tools/twilio/send_sms.ts | 2 +- apps/sim/tools/typeform/insights.ts | 2 +- apps/sim/tools/utils.test.ts | 2 +- apps/sim/tools/utils.ts | 2 +- apps/sim/tools/wealthbox/read_contact.ts | 2 +- apps/sim/tools/wealthbox/read_note.ts | 2 +- apps/sim/tools/wealthbox/read_task.ts | 2 +- apps/sim/tools/wealthbox/write_contact.ts | 2 +- apps/sim/tools/wealthbox/write_note.ts | 2 +- apps/sim/tools/wealthbox/write_task.ts | 2 +- apps/sim/tools/whatsapp/send_message.ts | 2 +- apps/sim/tools/workflow/executor.ts | 2 +- apps/sim/tools/x/user.ts | 2 +- apps/sim/trigger/workflow-execution.ts | 21 +++--- apps/sim/vitest.config.ts | 4 +- apps/sim/vitest.setup.ts | 2 +- 434 files changed, 563 insertions(+), 638 deletions(-) rename apps/sim/app/api/logs/{enhanced => }/route.ts (97%) rename apps/sim/lib/logs/{console-logger.ts => console/logger.ts} (99%) rename apps/sim/lib/logs/{enhanced-execution-logger.test.ts => execution/logger.test.ts} (66%) rename apps/sim/lib/logs/{enhanced-execution-logger.ts => execution/logger.ts} (97%) rename apps/sim/lib/logs/{enhanced-logging-factory.ts => execution/logging-factory.ts} (98%) rename apps/sim/lib/logs/{enhanced-logging-session.ts => execution/logging-session.ts} (65%) rename apps/sim/lib/logs/{snapshot-service.test.ts => execution/snapshot/service.test.ts} (98%) rename apps/sim/lib/logs/{snapshot-service.ts => execution/snapshot/service.ts} (99%) rename apps/sim/lib/logs/{ => execution/trace-spans}/trace-spans.test.ts (99%) rename apps/sim/lib/logs/{ => execution/trace-spans}/trace-spans.ts (99%) diff --git a/apps/sim/app/(auth)/login/login-form.tsx b/apps/sim/app/(auth)/login/login-form.tsx index 88b9e5af62..f6ca4aa458 100644 --- a/apps/sim/app/(auth)/login/login-form.tsx +++ b/apps/sim/app/(auth)/login/login-form.tsx @@ -15,7 +15,7 @@ import { import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { client } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { SocialLoginButtons } from '@/app/(auth)/components/social-login-buttons' diff --git a/apps/sim/app/(auth)/reset-password/page.tsx b/apps/sim/app/(auth)/reset-password/page.tsx index 79dbe79eb5..378c0c3b0b 100644 --- a/apps/sim/app/(auth)/reset-password/page.tsx +++ b/apps/sim/app/(auth)/reset-password/page.tsx @@ -11,7 +11,7 @@ import { CardHeader, CardTitle, } from '@/components/ui/card' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { SetNewPasswordForm } from './reset-password-form' const logger = createLogger('ResetPasswordPage') diff --git a/apps/sim/app/(auth)/verify/use-verification.ts b/apps/sim/app/(auth)/verify/use-verification.ts index 7b116d0369..549fd675e2 100644 --- a/apps/sim/app/(auth)/verify/use-verification.ts +++ b/apps/sim/app/(auth)/verify/use-verification.ts @@ -4,7 +4,7 @@ import { useEffect, useState } from 'react' import { useRouter, useSearchParams } from 'next/navigation' import { client } from '@/lib/auth-client' import { env, isTruthy } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('useVerification') diff --git a/apps/sim/app/api/__test-utils__/utils.ts b/apps/sim/app/api/__test-utils__/utils.ts index 7e2b0e47d5..8c7caa8c5d 100644 --- a/apps/sim/app/api/__test-utils__/utils.ts +++ b/apps/sim/app/api/__test-utils__/utils.ts @@ -279,7 +279,7 @@ export function mockExecutionDependencies() { } }) - vi.mock('@/lib/logs/trace-spans', () => ({ + vi.mock('@/lib/logs/execution/trace-spans/trace-spans', () => ({ buildTraceSpans: vi.fn().mockReturnValue({ traceSpans: [], totalDuration: 100, @@ -375,7 +375,7 @@ export function mockWorkflowAccessValidation(shouldSucceed = true) { export async function getMockedDependencies() { const utilsModule = await import('@/lib/utils') - const traceSpansModule = await import('@/lib/logs/trace-spans') + const traceSpansModule = await import('@/lib/logs/execution/trace-spans/trace-spans') const workflowUtilsModule = await import('@/lib/workflows/utils') const executorModule = await import('@/executor') const serializerModule = await import('@/serializer') @@ -655,7 +655,7 @@ export function mockKnowledgeSchemas() { * Mock console logger */ export function mockConsoleLogger() { - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) } diff --git a/apps/sim/app/api/auth/forget-password/route.test.ts b/apps/sim/app/api/auth/forget-password/route.test.ts index 49d7a8daec..e9467853d5 100644 --- a/apps/sim/app/api/auth/forget-password/route.test.ts +++ b/apps/sim/app/api/auth/forget-password/route.test.ts @@ -134,7 +134,7 @@ describe('Forget Password API Route', () => { expect(response.status).toBe(500) expect(data.message).toBe(errorMessage) - const logger = await import('@/lib/logs/console-logger') + const logger = await import('@/lib/logs/console/logger') const mockLogger = logger.createLogger('ForgetPasswordTest') expect(mockLogger.error).toHaveBeenCalledWith('Error requesting password reset:', { error: expect.any(Error), @@ -164,7 +164,7 @@ describe('Forget Password API Route', () => { expect(response.status).toBe(500) expect(data.message).toBe('Failed to send password reset email. Please try again later.') - const logger = await import('@/lib/logs/console-logger') + const logger = await import('@/lib/logs/console/logger') const mockLogger = logger.createLogger('ForgetPasswordTest') expect(mockLogger.error).toHaveBeenCalled() }) diff --git a/apps/sim/app/api/auth/forget-password/route.ts b/apps/sim/app/api/auth/forget-password/route.ts index ec0588fbaa..7b265ececc 100644 --- a/apps/sim/app/api/auth/forget-password/route.ts +++ b/apps/sim/app/api/auth/forget-password/route.ts @@ -1,6 +1,6 @@ import { type NextRequest, NextResponse } from 'next/server' import { auth } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/connections/route.test.ts b/apps/sim/app/api/auth/oauth/connections/route.test.ts index 0293ccead1..c038134a02 100644 --- a/apps/sim/app/api/auth/oauth/connections/route.test.ts +++ b/apps/sim/app/api/auth/oauth/connections/route.test.ts @@ -51,7 +51,7 @@ describe('OAuth Connections API Route', () => { jwtDecode: vi.fn(), })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) }) diff --git a/apps/sim/app/api/auth/oauth/connections/route.ts b/apps/sim/app/api/auth/oauth/connections/route.ts index 04d64d5cd1..b174564c3a 100644 --- a/apps/sim/app/api/auth/oauth/connections/route.ts +++ b/apps/sim/app/api/auth/oauth/connections/route.ts @@ -2,7 +2,7 @@ import { eq } from 'drizzle-orm' import { jwtDecode } from 'jwt-decode' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { account, user } from '@/db/schema' diff --git a/apps/sim/app/api/auth/oauth/credentials/route.test.ts b/apps/sim/app/api/auth/oauth/credentials/route.test.ts index a3cefe5e2c..497b668cf1 100644 --- a/apps/sim/app/api/auth/oauth/credentials/route.test.ts +++ b/apps/sim/app/api/auth/oauth/credentials/route.test.ts @@ -63,7 +63,7 @@ describe('OAuth Credentials API Route', () => { jwtDecode: vi.fn(), })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) }) diff --git a/apps/sim/app/api/auth/oauth/credentials/route.ts b/apps/sim/app/api/auth/oauth/credentials/route.ts index 8cfe86e8b2..329e4e24a9 100644 --- a/apps/sim/app/api/auth/oauth/credentials/route.ts +++ b/apps/sim/app/api/auth/oauth/credentials/route.ts @@ -2,7 +2,7 @@ import { and, eq } from 'drizzle-orm' import { jwtDecode } from 'jwt-decode' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { OAuthService } from '@/lib/oauth/oauth' import { parseProvider } from '@/lib/oauth/oauth' import { db } from '@/db' diff --git a/apps/sim/app/api/auth/oauth/disconnect/route.test.ts b/apps/sim/app/api/auth/oauth/disconnect/route.test.ts index 4cb4269d41..d368694b24 100644 --- a/apps/sim/app/api/auth/oauth/disconnect/route.test.ts +++ b/apps/sim/app/api/auth/oauth/disconnect/route.test.ts @@ -47,7 +47,7 @@ describe('OAuth Disconnect API Route', () => { or: vi.fn((...conditions) => ({ conditions, type: 'or' })), })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) }) diff --git a/apps/sim/app/api/auth/oauth/disconnect/route.ts b/apps/sim/app/api/auth/oauth/disconnect/route.ts index cd016f8f96..c2fc3cf01c 100644 --- a/apps/sim/app/api/auth/oauth/disconnect/route.ts +++ b/apps/sim/app/api/auth/oauth/disconnect/route.ts @@ -1,7 +1,7 @@ import { and, eq, like, or } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { account } from '@/db/schema' diff --git a/apps/sim/app/api/auth/oauth/microsoft/file/route.ts b/apps/sim/app/api/auth/oauth/microsoft/file/route.ts index b5e3c3aed5..a85403c6a5 100644 --- a/apps/sim/app/api/auth/oauth/microsoft/file/route.ts +++ b/apps/sim/app/api/auth/oauth/microsoft/file/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { account } from '@/db/schema' import { refreshAccessTokenIfNeeded } from '../../utils' diff --git a/apps/sim/app/api/auth/oauth/microsoft/files/route.ts b/apps/sim/app/api/auth/oauth/microsoft/files/route.ts index 2bc76a1cde..6b02f35bd1 100644 --- a/apps/sim/app/api/auth/oauth/microsoft/files/route.ts +++ b/apps/sim/app/api/auth/oauth/microsoft/files/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { account } from '@/db/schema' import { refreshAccessTokenIfNeeded } from '../../utils' diff --git a/apps/sim/app/api/auth/oauth/token/route.test.ts b/apps/sim/app/api/auth/oauth/token/route.test.ts index 71a241a815..b83ed0ee81 100644 --- a/apps/sim/app/api/auth/oauth/token/route.test.ts +++ b/apps/sim/app/api/auth/oauth/token/route.test.ts @@ -34,7 +34,7 @@ describe('OAuth Token API Routes', () => { refreshTokenIfNeeded: mockRefreshTokenIfNeeded, })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) }) diff --git a/apps/sim/app/api/auth/oauth/token/route.ts b/apps/sim/app/api/auth/oauth/token/route.ts index 7fa1a14b53..64ae988141 100644 --- a/apps/sim/app/api/auth/oauth/token/route.ts +++ b/apps/sim/app/api/auth/oauth/token/route.ts @@ -1,5 +1,5 @@ import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getCredential, getUserId, refreshTokenIfNeeded } from '../utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/utils.test.ts b/apps/sim/app/api/auth/oauth/utils.test.ts index 6d06d21b97..6fad5df7ab 100644 --- a/apps/sim/app/api/auth/oauth/utils.test.ts +++ b/apps/sim/app/api/auth/oauth/utils.test.ts @@ -39,7 +39,7 @@ describe('OAuth Utils', () => { refreshOAuthToken: mockRefreshOAuthToken, })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) }) diff --git a/apps/sim/app/api/auth/oauth/utils.ts b/apps/sim/app/api/auth/oauth/utils.ts index ac4938e34e..b9f31c2334 100644 --- a/apps/sim/app/api/auth/oauth/utils.ts +++ b/apps/sim/app/api/auth/oauth/utils.ts @@ -1,6 +1,6 @@ import { and, eq } from 'drizzle-orm' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshOAuthToken } from '@/lib/oauth/oauth' import { db } from '@/db' import { account, workflow } from '@/db/schema' diff --git a/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts b/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts index baa5dfcc77..2f9954c98a 100644 --- a/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts +++ b/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { account } from '@/db/schema' import { refreshAccessTokenIfNeeded } from '../../utils' diff --git a/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts b/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts index 3fab4d8e94..f16844e059 100644 --- a/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts +++ b/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { account } from '@/db/schema' import { refreshAccessTokenIfNeeded } from '../../utils' diff --git a/apps/sim/app/api/auth/reset-password/route.test.ts b/apps/sim/app/api/auth/reset-password/route.test.ts index 923b6f5032..36dd653c76 100644 --- a/apps/sim/app/api/auth/reset-password/route.test.ts +++ b/apps/sim/app/api/auth/reset-password/route.test.ts @@ -148,7 +148,7 @@ describe('Reset Password API Route', () => { expect(response.status).toBe(500) expect(data.message).toBe(errorMessage) - const logger = await import('@/lib/logs/console-logger') + const logger = await import('@/lib/logs/console/logger') const mockLogger = logger.createLogger('PasswordReset') expect(mockLogger.error).toHaveBeenCalledWith('Error during password reset:', { error: expect.any(Error), @@ -181,7 +181,7 @@ describe('Reset Password API Route', () => { 'Failed to reset password. Please try again or request a new reset link.' ) - const logger = await import('@/lib/logs/console-logger') + const logger = await import('@/lib/logs/console/logger') const mockLogger = logger.createLogger('PasswordReset') expect(mockLogger.error).toHaveBeenCalled() }) diff --git a/apps/sim/app/api/auth/reset-password/route.ts b/apps/sim/app/api/auth/reset-password/route.ts index 4380673c63..847ea67cc4 100644 --- a/apps/sim/app/api/auth/reset-password/route.ts +++ b/apps/sim/app/api/auth/reset-password/route.ts @@ -1,6 +1,6 @@ import { type NextRequest, NextResponse } from 'next/server' import { auth } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/billing/daily/route.ts b/apps/sim/app/api/billing/daily/route.ts index 4740e4eb49..4b88f35635 100644 --- a/apps/sim/app/api/billing/daily/route.ts +++ b/apps/sim/app/api/billing/daily/route.ts @@ -1,7 +1,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { verifyCronAuth } from '@/lib/auth/internal' import { processDailyBillingCheck } from '@/lib/billing/core/billing' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('DailyBillingCron') diff --git a/apps/sim/app/api/billing/route.ts b/apps/sim/app/api/billing/route.ts index 0c7a48dfca..bf92abd8fa 100644 --- a/apps/sim/app/api/billing/route.ts +++ b/apps/sim/app/api/billing/route.ts @@ -3,7 +3,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { getSimplifiedBillingSummary } from '@/lib/billing/core/billing' import { getOrganizationBillingData } from '@/lib/billing/core/organization-billing' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member } from '@/db/schema' diff --git a/apps/sim/app/api/billing/webhooks/stripe/route.ts b/apps/sim/app/api/billing/webhooks/stripe/route.ts index d6b03f32d3..2255bce8aa 100644 --- a/apps/sim/app/api/billing/webhooks/stripe/route.ts +++ b/apps/sim/app/api/billing/webhooks/stripe/route.ts @@ -4,7 +4,7 @@ import type Stripe from 'stripe' import { requireStripeClient } from '@/lib/billing/stripe-client' import { handleInvoiceWebhook } from '@/lib/billing/webhooks/stripe-invoice-webhooks' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('StripeInvoiceWebhook') diff --git a/apps/sim/app/api/chat/[subdomain]/otp/route.ts b/apps/sim/app/api/chat/[subdomain]/otp/route.ts index d43ff967d2..da80560c2f 100644 --- a/apps/sim/app/api/chat/[subdomain]/otp/route.ts +++ b/apps/sim/app/api/chat/[subdomain]/otp/route.ts @@ -3,7 +3,7 @@ import type { NextRequest } from 'next/server' import { z } from 'zod' import { renderOTPEmail } from '@/components/emails/render-email' import { sendEmail } from '@/lib/email/mailer' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getRedisClient, markMessageAsProcessed, releaseLock } from '@/lib/redis' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' diff --git a/apps/sim/app/api/chat/[subdomain]/route.test.ts b/apps/sim/app/api/chat/[subdomain]/route.test.ts index 538c28428c..787ca53b92 100644 --- a/apps/sim/app/api/chat/[subdomain]/route.test.ts +++ b/apps/sim/app/api/chat/[subdomain]/route.test.ts @@ -75,7 +75,7 @@ describe('Chat Subdomain API Route', () => { executeWorkflowForChat: mockExecuteWorkflowForChat, })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ debug: vi.fn(), info: vi.fn(), diff --git a/apps/sim/app/api/chat/[subdomain]/route.ts b/apps/sim/app/api/chat/[subdomain]/route.ts index 9c96e76b05..7c335270be 100644 --- a/apps/sim/app/api/chat/[subdomain]/route.ts +++ b/apps/sim/app/api/chat/[subdomain]/route.ts @@ -1,6 +1,6 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { chat, workflow } from '@/db/schema' diff --git a/apps/sim/app/api/chat/edit/[id]/route.test.ts b/apps/sim/app/api/chat/edit/[id]/route.test.ts index ee105a8850..30cdb0e0a0 100644 --- a/apps/sim/app/api/chat/edit/[id]/route.test.ts +++ b/apps/sim/app/api/chat/edit/[id]/route.test.ts @@ -42,7 +42,7 @@ describe('Chat Edit API Route', () => { chat: { id: 'id', subdomain: 'subdomain', userId: 'userId' }, })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/app/api/chat/edit/[id]/route.ts b/apps/sim/app/api/chat/edit/[id]/route.ts index e497d578e2..dcaaeee46e 100644 --- a/apps/sim/app/api/chat/edit/[id]/route.ts +++ b/apps/sim/app/api/chat/edit/[id]/route.ts @@ -3,7 +3,7 @@ import type { NextRequest } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' import { isDev } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getEmailDomain } from '@/lib/urls/utils' import { encryptSecret } from '@/lib/utils' import { checkChatAccess } from '@/app/api/chat/utils' diff --git a/apps/sim/app/api/chat/route.test.ts b/apps/sim/app/api/chat/route.test.ts index 3ab6b6b55b..462c1d9450 100644 --- a/apps/sim/app/api/chat/route.test.ts +++ b/apps/sim/app/api/chat/route.test.ts @@ -41,7 +41,7 @@ describe('Chat API Route', () => { workflow: { id: 'id', userId: 'userId', isDeployed: 'isDeployed' }, })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/app/api/chat/route.ts b/apps/sim/app/api/chat/route.ts index e802663021..3adfa92a72 100644 --- a/apps/sim/app/api/chat/route.ts +++ b/apps/sim/app/api/chat/route.ts @@ -5,7 +5,7 @@ import { z } from 'zod' import { getSession } from '@/lib/auth' import { env } from '@/lib/env' import { isDev } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { encryptSecret } from '@/lib/utils' import { checkWorkflowAccessForChatCreation } from '@/app/api/chat/utils' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' diff --git a/apps/sim/app/api/chat/subdomains/validate/route.test.ts b/apps/sim/app/api/chat/subdomains/validate/route.test.ts index 381c3550e2..24ef63a1b8 100644 --- a/apps/sim/app/api/chat/subdomains/validate/route.test.ts +++ b/apps/sim/app/api/chat/subdomains/validate/route.test.ts @@ -41,7 +41,7 @@ describe('Subdomain Validation API Route', () => { })) // Mock the logger - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/app/api/chat/subdomains/validate/route.ts b/apps/sim/app/api/chat/subdomains/validate/route.ts index 7c0c4ba689..67dbe2e065 100644 --- a/apps/sim/app/api/chat/subdomains/validate/route.ts +++ b/apps/sim/app/api/chat/subdomains/validate/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/chat/utils.test.ts b/apps/sim/app/api/chat/utils.test.ts index 0e4f25659e..0d594d9624 100644 --- a/apps/sim/app/api/chat/utils.test.ts +++ b/apps/sim/app/api/chat/utils.test.ts @@ -18,8 +18,8 @@ vi.mock('@/lib/utils', () => ({ decryptSecret: vi.fn().mockResolvedValue({ decrypted: 'test-secret' }), })) -vi.mock('@/lib/logs/enhanced-logging-session', () => ({ - EnhancedLoggingSession: vi.fn().mockImplementation(() => ({ +vi.mock('@/lib/logs/execution/logging-session', () => ({ + LoggingSession: vi.fn().mockImplementation(() => ({ safeStart: vi.fn().mockResolvedValue(undefined), safeComplete: vi.fn().mockResolvedValue(undefined), safeCompleteWithError: vi.fn().mockResolvedValue(undefined), @@ -42,7 +42,7 @@ describe('Chat API Utils', () => { beforeEach(() => { vi.resetModules() - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/app/api/chat/utils.ts b/apps/sim/app/api/chat/utils.ts index dd1e0e0140..2bab643cfd 100644 --- a/apps/sim/app/api/chat/utils.ts +++ b/apps/sim/app/api/chat/utils.ts @@ -2,9 +2,9 @@ import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { isDev } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' -import { EnhancedLoggingSession } from '@/lib/logs/enhanced-logging-session' -import { buildTraceSpans } from '@/lib/logs/trace-spans' +import { createLogger } from '@/lib/logs/console/logger' +import { LoggingSession } from '@/lib/logs/execution/logging-session' +import { buildTraceSpans } from '@/lib/logs/execution/trace-spans/trace-spans' import { hasAdminPermission } from '@/lib/permissions/utils' import { processStreamingBlockLogs } from '@/lib/tokenization' import { getEmailDomain } from '@/lib/urls/utils' @@ -330,8 +330,8 @@ export async function executeWorkflowForChat( const workflowId = deployment.workflowId const executionId = uuidv4() - // Set up enhanced logging for chat execution - const loggingSession = new EnhancedLoggingSession(workflowId, executionId, 'chat', requestId) + // Set up logging for chat execution + const loggingSession = new LoggingSession(workflowId, executionId, 'chat', requestId) // Check for multi-output configuration in customizations const customizations = (deployment.customizations || {}) as Record @@ -494,7 +494,7 @@ export async function executeWorkflowForChat( {} as Record> ) - // Start enhanced logging session + // Start logging session await loggingSession.safeStart({ userId: deployment.userId, workspaceId: '', // TODO: Get from workflow @@ -552,7 +552,7 @@ export async function executeWorkflowForChat( }, }) - // Set up enhanced logging on the executor + // Set up logging on the executor loggingSession.setupExecutor(executor) let result @@ -624,7 +624,7 @@ export async function executeWorkflowForChat( ) } - // Complete enhanced logging session (for both success and failure) + // Complete logging session (for both success and failure) if (result && 'success' in result) { const { traceSpans } = buildTraceSpans(result) await loggingSession.safeComplete({ diff --git a/apps/sim/app/api/codegen/route.test.ts b/apps/sim/app/api/codegen/route.test.ts index 38442a4576..14c1639bca 100644 --- a/apps/sim/app/api/codegen/route.test.ts +++ b/apps/sim/app/api/codegen/route.test.ts @@ -51,7 +51,7 @@ describe('Codegen API Route', () => { env: mockEnv, })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) diff --git a/apps/sim/app/api/codegen/route.ts b/apps/sim/app/api/codegen/route.ts index 71e8ff6f81..8fd3eec1a2 100644 --- a/apps/sim/app/api/codegen/route.ts +++ b/apps/sim/app/api/codegen/route.ts @@ -2,7 +2,7 @@ import { unstable_noStore as noStore } from 'next/cache' import { type NextRequest, NextResponse } from 'next/server' import OpenAI from 'openai' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' export const runtime = 'edge' diff --git a/apps/sim/app/api/copilot/checkpoints/[id]/revert/route.ts b/apps/sim/app/api/copilot/checkpoints/[id]/revert/route.ts index 3c307ef5fe..d47dbe2f3e 100644 --- a/apps/sim/app/api/copilot/checkpoints/[id]/revert/route.ts +++ b/apps/sim/app/api/copilot/checkpoints/[id]/revert/route.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { copilotCheckpoints, workflow as workflowTable } from '@/db/schema' diff --git a/apps/sim/app/api/copilot/checkpoints/route.ts b/apps/sim/app/api/copilot/checkpoints/route.ts index 2f7d97f960..c503c04975 100644 --- a/apps/sim/app/api/copilot/checkpoints/route.ts +++ b/apps/sim/app/api/copilot/checkpoints/route.ts @@ -1,7 +1,7 @@ import { and, desc, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { copilotCheckpoints } from '@/db/schema' diff --git a/apps/sim/app/api/copilot/route.ts b/apps/sim/app/api/copilot/route.ts index 189a5ddd24..cd1d101dda 100644 --- a/apps/sim/app/api/copilot/route.ts +++ b/apps/sim/app/api/copilot/route.ts @@ -10,7 +10,7 @@ import { sendMessage, updateChat, } from '@/lib/copilot/service' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('CopilotAPI') diff --git a/apps/sim/app/api/docs/search/route.ts b/apps/sim/app/api/docs/search/route.ts index 28ab0bb9ec..b167dd7cde 100644 --- a/apps/sim/app/api/docs/search/route.ts +++ b/apps/sim/app/api/docs/search/route.ts @@ -1,6 +1,6 @@ import { type NextRequest, NextResponse } from 'next/server' import { searchDocumentation } from '@/lib/copilot/service' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('DocsSearchAPI') diff --git a/apps/sim/app/api/environment/route.ts b/apps/sim/app/api/environment/route.ts index 1233ccc411..f00dc4afce 100644 --- a/apps/sim/app/api/environment/route.ts +++ b/apps/sim/app/api/environment/route.ts @@ -2,7 +2,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/files/delete/route.ts b/apps/sim/app/api/files/delete/route.ts index 0948f9a066..8fab23c2ed 100644 --- a/apps/sim/app/api/files/delete/route.ts +++ b/apps/sim/app/api/files/delete/route.ts @@ -2,7 +2,7 @@ import { existsSync } from 'fs' import { unlink } from 'fs/promises' import { join } from 'path' import type { NextRequest } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { deleteFile, isUsingCloudStorage } from '@/lib/uploads' import { UPLOAD_DIR } from '@/lib/uploads/setup' import '@/lib/uploads/setup.server' diff --git a/apps/sim/app/api/files/parse/route.ts b/apps/sim/app/api/files/parse/route.ts index 3571f1f7e7..e7a9468380 100644 --- a/apps/sim/app/api/files/parse/route.ts +++ b/apps/sim/app/api/files/parse/route.ts @@ -5,7 +5,7 @@ import path from 'path' import binaryExtensionsList from 'binary-extensions' import { type NextRequest, NextResponse } from 'next/server' import { isSupportedFileType, parseFile } from '@/lib/file-parsers' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { downloadFile, isUsingCloudStorage } from '@/lib/uploads' import { UPLOAD_DIR } from '@/lib/uploads/setup' import '@/lib/uploads/setup.server' diff --git a/apps/sim/app/api/files/presigned/route.ts b/apps/sim/app/api/files/presigned/route.ts index 0a587c9673..6ca7879773 100644 --- a/apps/sim/app/api/files/presigned/route.ts +++ b/apps/sim/app/api/files/presigned/route.ts @@ -2,7 +2,7 @@ import { PutObjectCommand } from '@aws-sdk/client-s3' import { getSignedUrl } from '@aws-sdk/s3-request-presigner' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getStorageProvider, isUsingCloudStorage } from '@/lib/uploads' import { getBlobServiceClient } from '@/lib/uploads/blob/blob-client' import { getS3Client, sanitizeFilenameForMetadata } from '@/lib/uploads/s3/s3-client' diff --git a/apps/sim/app/api/files/serve/[...path]/route.ts b/apps/sim/app/api/files/serve/[...path]/route.ts index 36550ef348..810bd58e10 100644 --- a/apps/sim/app/api/files/serve/[...path]/route.ts +++ b/apps/sim/app/api/files/serve/[...path]/route.ts @@ -1,6 +1,6 @@ import { readFile } from 'fs/promises' import type { NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { downloadFile, getStorageProvider, isUsingCloudStorage } from '@/lib/uploads' import { BLOB_KB_CONFIG, S3_KB_CONFIG } from '@/lib/uploads/setup' import '@/lib/uploads/setup.server' diff --git a/apps/sim/app/api/files/upload/route.ts b/apps/sim/app/api/files/upload/route.ts index 73ba39e5a2..bbd06e00da 100644 --- a/apps/sim/app/api/files/upload/route.ts +++ b/apps/sim/app/api/files/upload/route.ts @@ -2,7 +2,7 @@ import { writeFile } from 'fs/promises' import { join } from 'path' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { isUsingCloudStorage, uploadFile } from '@/lib/uploads' import { UPLOAD_DIR } from '@/lib/uploads/setup' // Import to ensure the uploads directory is created diff --git a/apps/sim/app/api/folders/[id]/route.ts b/apps/sim/app/api/folders/[id]/route.ts index 6beb1c383a..06ce831139 100644 --- a/apps/sim/app/api/folders/[id]/route.ts +++ b/apps/sim/app/api/folders/[id]/route.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/folders/route.ts b/apps/sim/app/api/folders/route.ts index 0465cc0a6f..c713b5a11c 100644 --- a/apps/sim/app/api/folders/route.ts +++ b/apps/sim/app/api/folders/route.ts @@ -1,7 +1,7 @@ import { and, asc, desc, eq, isNull } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { db } from '@/db' import { workflowFolder } from '@/db/schema' diff --git a/apps/sim/app/api/function/execute/route.test.ts b/apps/sim/app/api/function/execute/route.test.ts index 53e3f14b2e..13ccd662ff 100644 --- a/apps/sim/app/api/function/execute/route.test.ts +++ b/apps/sim/app/api/function/execute/route.test.ts @@ -41,7 +41,7 @@ describe('Function Execute API Route', () => { }, })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) @@ -657,7 +657,7 @@ describe('Function Execute API - Template Variable Edge Cases', () => { vi.resetModules() vi.resetAllMocks() - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) diff --git a/apps/sim/app/api/function/execute/route.ts b/apps/sim/app/api/function/execute/route.ts index dfadd365c4..142bb493b3 100644 --- a/apps/sim/app/api/function/execute/route.ts +++ b/apps/sim/app/api/function/execute/route.ts @@ -1,6 +1,6 @@ import { createContext, Script } from 'vm' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' export const runtime = 'nodejs' diff --git a/apps/sim/app/api/help/route.ts b/apps/sim/app/api/help/route.ts index 425a6afceb..10bc276302 100644 --- a/apps/sim/app/api/help/route.ts +++ b/apps/sim/app/api/help/route.ts @@ -2,7 +2,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { Resend } from 'resend' import { z } from 'zod' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getEmailDomain } from '@/lib/urls/utils' const resend = env.RESEND_API_KEY ? new Resend(env.RESEND_API_KEY) : null diff --git a/apps/sim/app/api/jobs/[jobId]/route.ts b/apps/sim/app/api/jobs/[jobId]/route.ts index 3738b4a399..f584782158 100644 --- a/apps/sim/app/api/jobs/[jobId]/route.ts +++ b/apps/sim/app/api/jobs/[jobId]/route.ts @@ -2,7 +2,7 @@ import { runs } from '@trigger.dev/sdk/v3' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/[chunkId]/route.ts b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/[chunkId]/route.ts index 2bf08b20a7..c064602e84 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/[chunkId]/route.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/[chunkId]/route.ts @@ -3,7 +3,7 @@ import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/route.ts b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/route.ts index 17632f25f2..4b0ed3c660 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/route.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/route.ts @@ -3,7 +3,7 @@ import { and, asc, eq, ilike, inArray, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.ts b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.ts index 8a92badf44..6dcc508811 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.ts @@ -2,7 +2,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/knowledge/[id]/documents/route.ts b/apps/sim/app/api/knowledge/[id]/documents/route.ts index c963989d1a..dbe49c2afd 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/route.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/route.ts @@ -3,7 +3,7 @@ import { and, desc, eq, inArray, isNull, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getUserId } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { document } from '@/db/schema' diff --git a/apps/sim/app/api/knowledge/[id]/route.ts b/apps/sim/app/api/knowledge/[id]/route.ts index 0e5e6b43d9..fe517b949f 100644 --- a/apps/sim/app/api/knowledge/[id]/route.ts +++ b/apps/sim/app/api/knowledge/[id]/route.ts @@ -2,7 +2,7 @@ import { and, eq, isNull } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { checkKnowledgeBaseAccess, checkKnowledgeBaseWriteAccess } from '@/app/api/knowledge/utils' import { db } from '@/db' import { knowledgeBase } from '@/db/schema' diff --git a/apps/sim/app/api/knowledge/route.ts b/apps/sim/app/api/knowledge/route.ts index 4bdca8f335..0f73ea5bf0 100644 --- a/apps/sim/app/api/knowledge/route.ts +++ b/apps/sim/app/api/knowledge/route.ts @@ -2,7 +2,7 @@ import { and, count, eq, isNotNull, isNull, or } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { db } from '@/db' import { document, knowledgeBase, permissions } from '@/db/schema' diff --git a/apps/sim/app/api/knowledge/search/route.ts b/apps/sim/app/api/knowledge/search/route.ts index 38be635b62..4ead4be428 100644 --- a/apps/sim/app/api/knowledge/search/route.ts +++ b/apps/sim/app/api/knowledge/search/route.ts @@ -3,7 +3,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { retryWithExponentialBackoff } from '@/lib/documents/utils' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { estimateTokenCount } from '@/lib/tokenization/estimators' import { getUserId } from '@/app/api/auth/oauth/utils' import { checkKnowledgeBaseAccess } from '@/app/api/knowledge/utils' diff --git a/apps/sim/app/api/knowledge/utils.ts b/apps/sim/app/api/knowledge/utils.ts index 917b36d7ff..4e9b1a158b 100644 --- a/apps/sim/app/api/knowledge/utils.ts +++ b/apps/sim/app/api/knowledge/utils.ts @@ -3,7 +3,7 @@ import { and, eq, isNull } from 'drizzle-orm' import { processDocument } from '@/lib/documents/document-processor' import { retryWithExponentialBackoff } from '@/lib/documents/utils' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { db } from '@/db' import { document, embedding, knowledgeBase } from '@/db/schema' diff --git a/apps/sim/app/api/logs/[executionId]/frozen-canvas/route.ts b/apps/sim/app/api/logs/[executionId]/frozen-canvas/route.ts index ab0cd77eeb..b9410b4f72 100644 --- a/apps/sim/app/api/logs/[executionId]/frozen-canvas/route.ts +++ b/apps/sim/app/api/logs/[executionId]/frozen-canvas/route.ts @@ -1,6 +1,6 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { workflowExecutionLogs, workflowExecutionSnapshots } from '@/db/schema' diff --git a/apps/sim/app/api/logs/cleanup/route.ts b/apps/sim/app/api/logs/cleanup/route.ts index 61497790af..373d2a42a6 100644 --- a/apps/sim/app/api/logs/cleanup/route.ts +++ b/apps/sim/app/api/logs/cleanup/route.ts @@ -3,8 +3,8 @@ import { and, eq, inArray, lt, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { verifyCronAuth } from '@/lib/auth/internal' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' -import { snapshotService } from '@/lib/logs/snapshot-service' +import { createLogger } from '@/lib/logs/console/logger' +import { snapshotService } from '@/lib/logs/execution/snapshot/service' import { getS3Client } from '@/lib/uploads/s3/s3-client' import { db } from '@/db' import { subscription, user, workflow, workflowExecutionLogs } from '@/db/schema' diff --git a/apps/sim/app/api/logs/enhanced/route.ts b/apps/sim/app/api/logs/route.ts similarity index 97% rename from apps/sim/app/api/logs/enhanced/route.ts rename to apps/sim/app/api/logs/route.ts index 586d49dc0f..113b1393e4 100644 --- a/apps/sim/app/api/logs/enhanced/route.ts +++ b/apps/sim/app/api/logs/route.ts @@ -2,11 +2,11 @@ import { and, desc, eq, gte, inArray, lte, or, type SQL, sql } from 'drizzle-orm import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { permissions, workflow, workflowExecutionLogs } from '@/db/schema' -const logger = createLogger('EnhancedLogsAPI') +const logger = createLogger('LogsAPI') // Helper function to extract block executions from trace spans function extractBlockExecutionsFromTraceSpans(traceSpans: any[]): any[] { @@ -65,7 +65,7 @@ export async function GET(request: NextRequest) { try { const session = await getSession() if (!session?.user?.id) { - logger.warn(`[${requestId}] Unauthorized enhanced logs access attempt`) + logger.warn(`[${requestId}] Unauthorized logs access attempt`) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } @@ -100,7 +100,7 @@ export async function GET(request: NextRequest) { return NextResponse.json({ data: [], total: 0 }, { status: 200 }) } - // Build conditions for enhanced logs + // Build conditions for logs let conditions: SQL | undefined = inArray(workflowExecutionLogs.workflowId, userWorkflowIds) // Filter by level @@ -271,7 +271,7 @@ export async function GET(request: NextRequest) { } } - // Transform to clean enhanced log format + // Transform to clean log format const enhancedLogs = logs.map((log) => { const blockExecutions = blockExecutionsByExecution[log.executionId] || [] @@ -396,7 +396,7 @@ export async function GET(request: NextRequest) { ) } catch (validationError) { if (validationError instanceof z.ZodError) { - logger.warn(`[${requestId}] Invalid enhanced logs request parameters`, { + logger.warn(`[${requestId}] Invalid logs request parameters`, { errors: validationError.errors, }) return NextResponse.json( @@ -410,7 +410,7 @@ export async function GET(request: NextRequest) { throw validationError } } catch (error: any) { - logger.error(`[${requestId}] Enhanced logs fetch error`, error) + logger.error(`[${requestId}] logs fetch error`, error) return NextResponse.json({ error: error.message }, { status: 500 }) } } diff --git a/apps/sim/app/api/memory/[id]/route.ts b/apps/sim/app/api/memory/[id]/route.ts index 0dc603b8ba..e8766a9540 100644 --- a/apps/sim/app/api/memory/[id]/route.ts +++ b/apps/sim/app/api/memory/[id]/route.ts @@ -1,6 +1,6 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { memory } from '@/db/schema' diff --git a/apps/sim/app/api/memory/route.ts b/apps/sim/app/api/memory/route.ts index 17e2c2fd9e..a2137a3ba8 100644 --- a/apps/sim/app/api/memory/route.ts +++ b/apps/sim/app/api/memory/route.ts @@ -1,6 +1,6 @@ import { and, eq, isNull, like } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { memory } from '@/db/schema' diff --git a/apps/sim/app/api/organizations/[id]/invitations/route.ts b/apps/sim/app/api/organizations/[id]/invitations/route.ts index 5eda9e9868..1acae5939b 100644 --- a/apps/sim/app/api/organizations/[id]/invitations/route.ts +++ b/apps/sim/app/api/organizations/[id]/invitations/route.ts @@ -14,7 +14,7 @@ import { import { sendEmail } from '@/lib/email/mailer' import { validateAndNormalizeEmail } from '@/lib/email/utils' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { hasWorkspaceAdminAccess } from '@/lib/permissions/utils' import { db } from '@/db' import { invitation, member, organization, user, workspace, workspaceInvitation } from '@/db/schema' diff --git a/apps/sim/app/api/organizations/[id]/members/[memberId]/route.ts b/apps/sim/app/api/organizations/[id]/members/[memberId]/route.ts index 51754ae04d..80c81d5d4b 100644 --- a/apps/sim/app/api/organizations/[id]/members/[memberId]/route.ts +++ b/apps/sim/app/api/organizations/[id]/members/[memberId]/route.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member, user, userStats } from '@/db/schema' diff --git a/apps/sim/app/api/organizations/[id]/members/route.ts b/apps/sim/app/api/organizations/[id]/members/route.ts index a0a341d104..484d0878f0 100644 --- a/apps/sim/app/api/organizations/[id]/members/route.ts +++ b/apps/sim/app/api/organizations/[id]/members/route.ts @@ -7,7 +7,7 @@ import { validateSeatAvailability } from '@/lib/billing/validation/seat-manageme import { sendEmail } from '@/lib/email/mailer' import { validateAndNormalizeEmail } from '@/lib/email/utils' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { invitation, member, organization, user, userStats } from '@/db/schema' diff --git a/apps/sim/app/api/organizations/[id]/route.ts b/apps/sim/app/api/organizations/[id]/route.ts index 2d406c61e3..b7e9314b9d 100644 --- a/apps/sim/app/api/organizations/[id]/route.ts +++ b/apps/sim/app/api/organizations/[id]/route.ts @@ -6,7 +6,7 @@ import { getOrganizationSeatInfo, updateOrganizationSeats, } from '@/lib/billing/validation/seat-management' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/organizations/[id]/workspaces/route.ts b/apps/sim/app/api/organizations/[id]/workspaces/route.ts index 8e8eba18c4..3393b60127 100644 --- a/apps/sim/app/api/organizations/[id]/workspaces/route.ts +++ b/apps/sim/app/api/organizations/[id]/workspaces/route.ts @@ -1,7 +1,7 @@ import { and, eq, or } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member, permissions, user, workspace } from '@/db/schema' diff --git a/apps/sim/app/api/organizations/invitations/accept/route.ts b/apps/sim/app/api/organizations/invitations/accept/route.ts index 6f8c52f087..b13a6f1682 100644 --- a/apps/sim/app/api/organizations/invitations/accept/route.ts +++ b/apps/sim/app/api/organizations/invitations/accept/route.ts @@ -3,7 +3,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { invitation, member, permissions, workspaceInvitation } from '@/db/schema' diff --git a/apps/sim/app/api/providers/route.ts b/apps/sim/app/api/providers/route.ts index f0962d1ba1..79dbbc87a7 100644 --- a/apps/sim/app/api/providers/route.ts +++ b/apps/sim/app/api/providers/route.ts @@ -1,5 +1,5 @@ import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeProviderRequest } from '@/providers' import { getApiKey } from '@/providers/utils' diff --git a/apps/sim/app/api/proxy/image/route.ts b/apps/sim/app/api/proxy/image/route.ts index 907d324017..639db7ddde 100644 --- a/apps/sim/app/api/proxy/image/route.ts +++ b/apps/sim/app/api/proxy/image/route.ts @@ -1,5 +1,5 @@ import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('ImageProxyAPI') diff --git a/apps/sim/app/api/proxy/route.ts b/apps/sim/app/api/proxy/route.ts index 3c6a9ef400..e40dc91cf2 100644 --- a/apps/sim/app/api/proxy/route.ts +++ b/apps/sim/app/api/proxy/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server' import { isDev } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { executeTool } from '@/tools' import { getTool, validateToolRequest } from '@/tools/utils' diff --git a/apps/sim/app/api/proxy/tts/route.ts b/apps/sim/app/api/proxy/tts/route.ts index 894caafdfc..3918ca53a3 100644 --- a/apps/sim/app/api/proxy/tts/route.ts +++ b/apps/sim/app/api/proxy/tts/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { uploadFile } from '@/lib/uploads/storage-client' import { getBaseUrl } from '@/lib/urls/utils' diff --git a/apps/sim/app/api/proxy/tts/stream/route.ts b/apps/sim/app/api/proxy/tts/stream/route.ts index dde8f7f4b5..fdf7cfea92 100644 --- a/apps/sim/app/api/proxy/tts/stream/route.ts +++ b/apps/sim/app/api/proxy/tts/stream/route.ts @@ -1,6 +1,6 @@ import type { NextRequest } from 'next/server' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('ProxyTTSStreamAPI') diff --git a/apps/sim/app/api/schedules/[id]/route.ts b/apps/sim/app/api/schedules/[id]/route.ts index 04a39a8663..28696d54b3 100644 --- a/apps/sim/app/api/schedules/[id]/route.ts +++ b/apps/sim/app/api/schedules/[id]/route.ts @@ -2,7 +2,7 @@ import crypto from 'crypto' import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { workflow, workflowSchedule } from '@/db/schema' diff --git a/apps/sim/app/api/schedules/[id]/status/route.test.ts b/apps/sim/app/api/schedules/[id]/status/route.test.ts index c11c4e93c6..3a71190fb3 100644 --- a/apps/sim/app/api/schedules/[id]/status/route.test.ts +++ b/apps/sim/app/api/schedules/[id]/status/route.test.ts @@ -20,7 +20,7 @@ const mockSchedule = { beforeEach(() => { vi.resetModules() - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: () => ({ info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() }), })) diff --git a/apps/sim/app/api/schedules/[id]/status/route.ts b/apps/sim/app/api/schedules/[id]/status/route.ts index d111b72d1c..e2df5b61a6 100644 --- a/apps/sim/app/api/schedules/[id]/status/route.ts +++ b/apps/sim/app/api/schedules/[id]/status/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/schedules/execute/route.ts b/apps/sim/app/api/schedules/execute/route.ts index 65845a5e2c..1b0b3799e8 100644 --- a/apps/sim/app/api/schedules/execute/route.ts +++ b/apps/sim/app/api/schedules/execute/route.ts @@ -4,9 +4,9 @@ import { NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { z } from 'zod' import { checkServerSideUsageLimits } from '@/lib/billing' -import { createLogger } from '@/lib/logs/console-logger' -import { EnhancedLoggingSession } from '@/lib/logs/enhanced-logging-session' -import { buildTraceSpans } from '@/lib/logs/trace-spans' +import { createLogger } from '@/lib/logs/console/logger' +import { LoggingSession } from '@/lib/logs/execution/logging-session' +import { buildTraceSpans } from '@/lib/logs/execution/trace-spans/trace-spans' import { type BlockState, calculateNextRunTime as calculateNextTime, @@ -173,7 +173,7 @@ export async function GET() { } ) - // Error logging handled by enhanced logging session + // Error logging handled by logging session const retryDelay = 24 * 60 * 60 * 1000 // 24 hour delay for exceeded limits const nextRetryAt = new Date(now.getTime() + retryDelay) @@ -202,7 +202,7 @@ export async function GET() { try { const executionSuccess = await (async () => { // Create logging session inside the execution callback - const loggingSession = new EnhancedLoggingSession( + const loggingSession = new LoggingSession( schedule.workflowId, executionId, 'schedule', @@ -386,7 +386,7 @@ export async function GET() { }, } - // Start enhanced logging with environment variables + // Start logging with environment variables await loggingSession.safeStart({ userId: workflowRecord.userId, workspaceId: workflowRecord.workspaceId || '', @@ -401,7 +401,7 @@ export async function GET() { workflowVariables ) - // Set up enhanced logging on the executor + // Set up logging on the executor loggingSession.setupExecutor(executor) const result = await executor.execute( @@ -437,7 +437,7 @@ export async function GET() { const { traceSpans, totalDuration } = buildTraceSpans(executionResult) - // Complete enhanced logging + // Complete logging await loggingSession.safeComplete({ endedAt: new Date().toISOString(), totalDurationMs: totalDuration || 0, @@ -534,7 +534,7 @@ export async function GET() { error ) - // Error logging handled by enhanced logging session inside sync executor + // Error logging handled by logging session inside sync executor let nextRunAt: Date try { diff --git a/apps/sim/app/api/schedules/route.ts b/apps/sim/app/api/schedules/route.ts index 829b666a24..d3896b92cd 100644 --- a/apps/sim/app/api/schedules/route.ts +++ b/apps/sim/app/api/schedules/route.ts @@ -3,7 +3,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type BlockState, calculateNextRunTime, diff --git a/apps/sim/app/api/telemetry/route.ts b/apps/sim/app/api/telemetry/route.ts index 2a4e6b17df..5b7b44664f 100644 --- a/apps/sim/app/api/telemetry/route.ts +++ b/apps/sim/app/api/telemetry/route.ts @@ -1,7 +1,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { env } from '@/lib/env' import { isProd } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('TelemetryAPI') diff --git a/apps/sim/app/api/templates/[id]/route.ts b/apps/sim/app/api/templates/[id]/route.ts index 2cbf89f6a3..8a4a4e181b 100644 --- a/apps/sim/app/api/templates/[id]/route.ts +++ b/apps/sim/app/api/templates/[id]/route.ts @@ -1,7 +1,7 @@ import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { templates } from '@/db/schema' diff --git a/apps/sim/app/api/templates/[id]/star/route.ts b/apps/sim/app/api/templates/[id]/star/route.ts index abf40bae1c..4b2701a7c9 100644 --- a/apps/sim/app/api/templates/[id]/star/route.ts +++ b/apps/sim/app/api/templates/[id]/star/route.ts @@ -2,7 +2,7 @@ import { and, eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { templateStars, templates } from '@/db/schema' diff --git a/apps/sim/app/api/templates/[id]/use/route.ts b/apps/sim/app/api/templates/[id]/use/route.ts index 1f1383a944..69de688be3 100644 --- a/apps/sim/app/api/templates/[id]/use/route.ts +++ b/apps/sim/app/api/templates/[id]/use/route.ts @@ -2,7 +2,7 @@ import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { templates, workflow, workflowBlocks, workflowEdges } from '@/db/schema' diff --git a/apps/sim/app/api/templates/route.ts b/apps/sim/app/api/templates/route.ts index befcdf63f7..9d87d8a7b5 100644 --- a/apps/sim/app/api/templates/route.ts +++ b/apps/sim/app/api/templates/route.ts @@ -3,7 +3,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { templateStars, templates, workflow } from '@/db/schema' diff --git a/apps/sim/app/api/tools/confluence/pages/route.ts b/apps/sim/app/api/tools/confluence/pages/route.ts index a1f8c67cda..947632eb27 100644 --- a/apps/sim/app/api/tools/confluence/pages/route.ts +++ b/apps/sim/app/api/tools/confluence/pages/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getConfluenceCloudId } from '@/tools/confluence/utils' const logger = createLogger('ConfluencePages') diff --git a/apps/sim/app/api/tools/custom/route.test.ts b/apps/sim/app/api/tools/custom/route.test.ts index d195be3516..d3c9d0321a 100644 --- a/apps/sim/app/api/tools/custom/route.test.ts +++ b/apps/sim/app/api/tools/custom/route.test.ts @@ -128,7 +128,7 @@ describe('Custom Tools API Routes', () => { })) // Mock logger - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/app/api/tools/custom/route.ts b/apps/sim/app/api/tools/custom/route.ts index fb2e9749af..2ae06d673a 100644 --- a/apps/sim/app/api/tools/custom/route.ts +++ b/apps/sim/app/api/tools/custom/route.ts @@ -2,7 +2,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getUserId } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { customTools } from '@/db/schema' diff --git a/apps/sim/app/api/tools/discord/channels/route.ts b/apps/sim/app/api/tools/discord/channels/route.ts index 3df21f79b1..f4f9d6ca1a 100644 --- a/apps/sim/app/api/tools/discord/channels/route.ts +++ b/apps/sim/app/api/tools/discord/channels/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' interface DiscordChannel { id: string diff --git a/apps/sim/app/api/tools/discord/servers/route.ts b/apps/sim/app/api/tools/discord/servers/route.ts index d3e2ce25c4..7e46de2030 100644 --- a/apps/sim/app/api/tools/discord/servers/route.ts +++ b/apps/sim/app/api/tools/discord/servers/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' interface DiscordServer { id: string diff --git a/apps/sim/app/api/tools/drive/file/route.ts b/apps/sim/app/api/tools/drive/file/route.ts index 4db83803bf..ef977cd976 100644 --- a/apps/sim/app/api/tools/drive/file/route.ts +++ b/apps/sim/app/api/tools/drive/file/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' diff --git a/apps/sim/app/api/tools/drive/files/route.ts b/apps/sim/app/api/tools/drive/files/route.ts index 98f8c8c2c6..6d016accb7 100644 --- a/apps/sim/app/api/tools/drive/files/route.ts +++ b/apps/sim/app/api/tools/drive/files/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' diff --git a/apps/sim/app/api/tools/edit-workflow/route.ts b/apps/sim/app/api/tools/edit-workflow/route.ts index 478b68cf28..f0c8503f21 100644 --- a/apps/sim/app/api/tools/edit-workflow/route.ts +++ b/apps/sim/app/api/tools/edit-workflow/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { autoLayoutWorkflow } from '@/lib/autolayout/service' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { loadWorkflowFromNormalizedTables, saveWorkflowToNormalizedTables, diff --git a/apps/sim/app/api/tools/get-all-blocks/route.ts b/apps/sim/app/api/tools/get-all-blocks/route.ts index 6cf96bf156..1e4e3d1aa5 100644 --- a/apps/sim/app/api/tools/get-all-blocks/route.ts +++ b/apps/sim/app/api/tools/get-all-blocks/route.ts @@ -1,5 +1,5 @@ import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { registry as blockRegistry } from '@/blocks/registry' const logger = createLogger('GetAllBlocksAPI') diff --git a/apps/sim/app/api/tools/get-blocks-metadata/route.ts b/apps/sim/app/api/tools/get-blocks-metadata/route.ts index aa8bffa126..b2861aee84 100644 --- a/apps/sim/app/api/tools/get-blocks-metadata/route.ts +++ b/apps/sim/app/api/tools/get-blocks-metadata/route.ts @@ -1,7 +1,7 @@ import { existsSync, readFileSync } from 'fs' import { join } from 'path' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { registry as blockRegistry } from '@/blocks/registry' import { tools as toolsRegistry } from '@/tools/registry' diff --git a/apps/sim/app/api/tools/get-user-workflow/route.ts b/apps/sim/app/api/tools/get-user-workflow/route.ts index 94889577ac..862b36715a 100644 --- a/apps/sim/app/api/tools/get-user-workflow/route.ts +++ b/apps/sim/app/api/tools/get-user-workflow/route.ts @@ -1,6 +1,6 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { generateWorkflowYaml } from '@/lib/workflows/yaml-generator' import { getBlock } from '@/blocks' diff --git a/apps/sim/app/api/tools/gmail/label/route.ts b/apps/sim/app/api/tools/gmail/label/route.ts index a691f40a57..87c1acae93 100644 --- a/apps/sim/app/api/tools/gmail/label/route.ts +++ b/apps/sim/app/api/tools/gmail/label/route.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' diff --git a/apps/sim/app/api/tools/gmail/labels/route.ts b/apps/sim/app/api/tools/gmail/labels/route.ts index 654b25668a..24d49a074b 100644 --- a/apps/sim/app/api/tools/gmail/labels/route.ts +++ b/apps/sim/app/api/tools/gmail/labels/route.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' diff --git a/apps/sim/app/api/tools/google_calendar/calendars/route.ts b/apps/sim/app/api/tools/google_calendar/calendars/route.ts index 51bbcbc3b0..76c8344dae 100644 --- a/apps/sim/app/api/tools/google_calendar/calendars/route.ts +++ b/apps/sim/app/api/tools/google_calendar/calendars/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' diff --git a/apps/sim/app/api/tools/jira/issue/route.ts b/apps/sim/app/api/tools/jira/issue/route.ts index 2f454f57da..3a8616a4c9 100644 --- a/apps/sim/app/api/tools/jira/issue/route.ts +++ b/apps/sim/app/api/tools/jira/issue/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { getJiraCloudId } from '@/tools/jira/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/jira/issues/route.ts b/apps/sim/app/api/tools/jira/issues/route.ts index 70a448fc93..42061514b4 100644 --- a/apps/sim/app/api/tools/jira/issues/route.ts +++ b/apps/sim/app/api/tools/jira/issues/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { getJiraCloudId } from '@/tools/jira/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/jira/projects/route.ts b/apps/sim/app/api/tools/jira/projects/route.ts index 7f2641a5a2..d638499d88 100644 --- a/apps/sim/app/api/tools/jira/projects/route.ts +++ b/apps/sim/app/api/tools/jira/projects/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { getJiraCloudId } from '@/tools/jira/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/linear/projects/route.ts b/apps/sim/app/api/tools/linear/projects/route.ts index f8920eddfc..90ada406ba 100644 --- a/apps/sim/app/api/tools/linear/projects/route.ts +++ b/apps/sim/app/api/tools/linear/projects/route.ts @@ -2,7 +2,7 @@ import type { Project } from '@linear/sdk' import { LinearClient } from '@linear/sdk' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/linear/teams/route.ts b/apps/sim/app/api/tools/linear/teams/route.ts index 232cfa45da..df927c0c4c 100644 --- a/apps/sim/app/api/tools/linear/teams/route.ts +++ b/apps/sim/app/api/tools/linear/teams/route.ts @@ -2,7 +2,7 @@ import type { Team } from '@linear/sdk' import { LinearClient } from '@linear/sdk' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/microsoft-teams/channels/route.ts b/apps/sim/app/api/tools/microsoft-teams/channels/route.ts index 510570efb5..81fb6686f0 100644 --- a/apps/sim/app/api/tools/microsoft-teams/channels/route.ts +++ b/apps/sim/app/api/tools/microsoft-teams/channels/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/microsoft-teams/chats/route.ts b/apps/sim/app/api/tools/microsoft-teams/chats/route.ts index da7940e96b..feedc37960 100644 --- a/apps/sim/app/api/tools/microsoft-teams/chats/route.ts +++ b/apps/sim/app/api/tools/microsoft-teams/chats/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/microsoft-teams/teams/route.ts b/apps/sim/app/api/tools/microsoft-teams/teams/route.ts index 9c8a332e9c..63c5b8b7b2 100644 --- a/apps/sim/app/api/tools/microsoft-teams/teams/route.ts +++ b/apps/sim/app/api/tools/microsoft-teams/teams/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/outlook/folders/route.ts b/apps/sim/app/api/tools/outlook/folders/route.ts index a17979327c..050f4a8679 100644 --- a/apps/sim/app/api/tools/outlook/folders/route.ts +++ b/apps/sim/app/api/tools/outlook/folders/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/slack/channels/route.ts b/apps/sim/app/api/tools/slack/channels/route.ts index dcdf8cc193..6644bccf12 100644 --- a/apps/sim/app/api/tools/slack/channels/route.ts +++ b/apps/sim/app/api/tools/slack/channels/route.ts @@ -1,6 +1,6 @@ import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/stagehand/agent/route.ts b/apps/sim/app/api/tools/stagehand/agent/route.ts index 3ef34a0664..9d01834b52 100644 --- a/apps/sim/app/api/tools/stagehand/agent/route.ts +++ b/apps/sim/app/api/tools/stagehand/agent/route.ts @@ -2,7 +2,7 @@ import { Stagehand } from '@browserbasehq/stagehand' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { ensureZodObject, normalizeUrl } from '../utils' const logger = createLogger('StagehandAgentAPI') diff --git a/apps/sim/app/api/tools/stagehand/extract/route.ts b/apps/sim/app/api/tools/stagehand/extract/route.ts index 0655042199..9368d17173 100644 --- a/apps/sim/app/api/tools/stagehand/extract/route.ts +++ b/apps/sim/app/api/tools/stagehand/extract/route.ts @@ -2,7 +2,7 @@ import { Stagehand } from '@browserbasehq/stagehand' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { ensureZodObject, normalizeUrl } from '../utils' const logger = createLogger('StagehandExtractAPI') diff --git a/apps/sim/app/api/tools/stagehand/utils.ts b/apps/sim/app/api/tools/stagehand/utils.ts index bd189349b5..a3e765c48a 100644 --- a/apps/sim/app/api/tools/stagehand/utils.ts +++ b/apps/sim/app/api/tools/stagehand/utils.ts @@ -1,5 +1,5 @@ import { z } from 'zod' -import type { Logger } from '@/lib/logs/console-logger' +import type { Logger } from '@/lib/logs/console/logger' // Convert JSON schema to Zod schema (reused from extract route) function jsonSchemaToZod(logger: Logger, jsonSchema: Record): z.ZodTypeAny { diff --git a/apps/sim/app/api/tools/wealthbox/item/route.ts b/apps/sim/app/api/tools/wealthbox/item/route.ts index 698af7e67c..d9a7b7aaae 100644 --- a/apps/sim/app/api/tools/wealthbox/item/route.ts +++ b/apps/sim/app/api/tools/wealthbox/item/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' diff --git a/apps/sim/app/api/tools/wealthbox/items/route.ts b/apps/sim/app/api/tools/wealthbox/items/route.ts index aee5449a2b..318661701b 100644 --- a/apps/sim/app/api/tools/wealthbox/items/route.ts +++ b/apps/sim/app/api/tools/wealthbox/items/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' diff --git a/apps/sim/app/api/usage-limits/route.ts b/apps/sim/app/api/usage-limits/route.ts index 7509dbd880..43d03eb3f4 100644 --- a/apps/sim/app/api/usage-limits/route.ts +++ b/apps/sim/app/api/usage-limits/route.ts @@ -2,7 +2,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { getUserUsageLimitInfo, updateUserUsageLimit } from '@/lib/billing' import { updateMemberUsageLimit } from '@/lib/billing/core/organization-billing' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { isOrganizationOwnerOrAdmin } from '@/lib/permissions/utils' const logger = createLogger('UnifiedUsageLimitsAPI') diff --git a/apps/sim/app/api/users/me/api-keys/[id]/route.ts b/apps/sim/app/api/users/me/api-keys/[id]/route.ts index a4cb4e7e95..41841f9bc2 100644 --- a/apps/sim/app/api/users/me/api-keys/[id]/route.ts +++ b/apps/sim/app/api/users/me/api-keys/[id]/route.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/users/me/api-keys/route.ts b/apps/sim/app/api/users/me/api-keys/route.ts index d4076591be..836f6018fc 100644 --- a/apps/sim/app/api/users/me/api-keys/route.ts +++ b/apps/sim/app/api/users/me/api-keys/route.ts @@ -2,7 +2,7 @@ import { eq } from 'drizzle-orm' import { nanoid } from 'nanoid' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateApiKey } from '@/lib/utils' import { db } from '@/db' import { apiKey } from '@/db/schema' diff --git a/apps/sim/app/api/users/me/settings/route.ts b/apps/sim/app/api/users/me/settings/route.ts index 7210fea518..25c20a2e64 100644 --- a/apps/sim/app/api/users/me/settings/route.ts +++ b/apps/sim/app/api/users/me/settings/route.ts @@ -3,7 +3,7 @@ import { nanoid } from 'nanoid' import { NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/users/me/settings/unsubscribe/route.ts b/apps/sim/app/api/users/me/settings/unsubscribe/route.ts index 286938ebb3..6806a581b2 100644 --- a/apps/sim/app/api/users/me/settings/unsubscribe/route.ts +++ b/apps/sim/app/api/users/me/settings/unsubscribe/route.ts @@ -8,7 +8,7 @@ import { updateEmailPreferences, verifyUnsubscribeToken, } from '@/lib/email/unsubscribe' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('UnsubscribeAPI') diff --git a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts index ab68f95211..3519e96fd7 100644 --- a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts +++ b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts @@ -25,7 +25,7 @@ describe('Subscription Transfer API Routes', () => { }), })) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) diff --git a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.ts b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.ts index 87b3238358..2598bcbfa8 100644 --- a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.ts +++ b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.ts @@ -2,7 +2,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/users/rate-limit/route.ts b/apps/sim/app/api/users/rate-limit/route.ts index de5cf656e2..5058fe0e5c 100644 --- a/apps/sim/app/api/users/rate-limit/route.ts +++ b/apps/sim/app/api/users/rate-limit/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/webhooks/[id]/route.ts b/apps/sim/app/api/webhooks/[id]/route.ts index e9d6a06ee2..36b9691abf 100644 --- a/apps/sim/app/api/webhooks/[id]/route.ts +++ b/apps/sim/app/api/webhooks/[id]/route.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { webhook, workflow } from '@/db/schema' diff --git a/apps/sim/app/api/webhooks/poll/gmail/route.ts b/apps/sim/app/api/webhooks/poll/gmail/route.ts index 231dedfbf2..304bf7cf41 100644 --- a/apps/sim/app/api/webhooks/poll/gmail/route.ts +++ b/apps/sim/app/api/webhooks/poll/gmail/route.ts @@ -1,7 +1,7 @@ import { nanoid } from 'nanoid' import { type NextRequest, NextResponse } from 'next/server' import { verifyCronAuth } from '@/lib/auth/internal' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { acquireLock, releaseLock } from '@/lib/redis' import { pollGmailWebhooks } from '@/lib/webhooks/gmail-polling-service' diff --git a/apps/sim/app/api/webhooks/route.ts b/apps/sim/app/api/webhooks/route.ts index fabf9ed3fe..db6e4a4515 100644 --- a/apps/sim/app/api/webhooks/route.ts +++ b/apps/sim/app/api/webhooks/route.ts @@ -3,7 +3,7 @@ import { nanoid } from 'nanoid' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { webhook, workflow } from '@/db/schema' import { getOAuthToken } from '../auth/oauth/utils' diff --git a/apps/sim/app/api/webhooks/test/route.ts b/apps/sim/app/api/webhooks/test/route.ts index 82182e433b..543df8af98 100644 --- a/apps/sim/app/api/webhooks/test/route.ts +++ b/apps/sim/app/api/webhooks/test/route.ts @@ -1,6 +1,6 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { webhook } from '@/db/schema' diff --git a/apps/sim/app/api/webhooks/trigger/[path]/route.ts b/apps/sim/app/api/webhooks/trigger/[path]/route.ts index 3db94b794c..0b0052fc55 100644 --- a/apps/sim/app/api/webhooks/trigger/[path]/route.ts +++ b/apps/sim/app/api/webhooks/trigger/[path]/route.ts @@ -2,7 +2,7 @@ import { and, eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { checkServerSideUsageLimits } from '@/lib/billing' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { acquireLock, hasProcessedMessage, markMessageAsProcessed } from '@/lib/redis' import { fetchAndProcessAirtablePayloads, diff --git a/apps/sim/app/api/workflows/[id]/autolayout/route.ts b/apps/sim/app/api/workflows/[id]/autolayout/route.ts index 039e84fd4a..5bc6a3e305 100644 --- a/apps/sim/app/api/workflows/[id]/autolayout/route.ts +++ b/apps/sim/app/api/workflows/[id]/autolayout/route.ts @@ -3,7 +3,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' import { autoLayoutWorkflow } from '@/lib/autolayout/service' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { loadWorkflowFromNormalizedTables, diff --git a/apps/sim/app/api/workflows/[id]/chat/status/route.ts b/apps/sim/app/api/workflows/[id]/chat/status/route.ts index 6620ad9744..1d857969a2 100644 --- a/apps/sim/app/api/workflows/[id]/chat/status/route.ts +++ b/apps/sim/app/api/workflows/[id]/chat/status/route.ts @@ -1,5 +1,5 @@ import { eq } from 'drizzle-orm' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { chat } from '@/db/schema' diff --git a/apps/sim/app/api/workflows/[id]/deploy/route.test.ts b/apps/sim/app/api/workflows/[id]/deploy/route.test.ts index ce1765e074..1d73a0fe22 100644 --- a/apps/sim/app/api/workflows/[id]/deploy/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/deploy/route.test.ts @@ -22,7 +22,7 @@ describe('Workflow Deployment API Route', () => { randomUUID: vi.fn().mockReturnValue('mock-request-id'), }) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ debug: vi.fn(), info: vi.fn(), diff --git a/apps/sim/app/api/workflows/[id]/deploy/route.ts b/apps/sim/app/api/workflows/[id]/deploy/route.ts index 449e86b708..58ad62fa4a 100644 --- a/apps/sim/app/api/workflows/[id]/deploy/route.ts +++ b/apps/sim/app/api/workflows/[id]/deploy/route.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateApiKey } from '@/lib/utils' import { db } from '@/db' import { apiKey, workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' diff --git a/apps/sim/app/api/workflows/[id]/deployed/route.ts b/apps/sim/app/api/workflows/[id]/deployed/route.ts index 7aec2f4c17..b60b973b32 100644 --- a/apps/sim/app/api/workflows/[id]/deployed/route.ts +++ b/apps/sim/app/api/workflows/[id]/deployed/route.ts @@ -1,6 +1,6 @@ import { eq } from 'drizzle-orm' import type { NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { workflow } from '@/db/schema' import { validateWorkflowAccess } from '../../middleware' diff --git a/apps/sim/app/api/workflows/[id]/duplicate/route.ts b/apps/sim/app/api/workflows/[id]/duplicate/route.ts index 5e2edece58..031b51e0b8 100644 --- a/apps/sim/app/api/workflows/[id]/duplicate/route.ts +++ b/apps/sim/app/api/workflows/[id]/duplicate/route.ts @@ -3,7 +3,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/workflows/[id]/execute/route.test.ts b/apps/sim/app/api/workflows/[id]/execute/route.test.ts index 0f415abba2..4128fa420b 100644 --- a/apps/sim/app/api/workflows/[id]/execute/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/execute/route.test.ts @@ -33,14 +33,12 @@ describe('Workflow Execution API Route', () => { }), })) - // Mock authentication vi.doMock('@/lib/auth', () => ({ getSession: vi.fn().mockResolvedValue({ user: { id: 'user-id' }, }), })) - // Mock rate limiting vi.doMock('@/services/queue', () => ({ RateLimiter: vi.fn().mockImplementation(() => ({ checkRateLimit: vi.fn().mockResolvedValue({ @@ -60,7 +58,6 @@ describe('Workflow Execution API Route', () => { }, })) - // Mock billing usage check vi.doMock('@/lib/billing', () => ({ checkServerSideUsageLimits: vi.fn().mockResolvedValue({ isExceeded: false, @@ -69,7 +66,6 @@ describe('Workflow Execution API Route', () => { }), })) - // Mock database subscription check vi.doMock('@/db/schema', () => ({ subscription: { plan: 'plan', @@ -145,7 +141,6 @@ describe('Workflow Execution API Route', () => { vi.doMock('@/executor', () => ({ Executor: vi.fn().mockImplementation(() => ({ execute: executeMock, - setEnhancedLogger: vi.fn(), })), })) @@ -157,8 +152,8 @@ describe('Workflow Execution API Route', () => { getRotatingApiKey: vi.fn().mockReturnValue('rotated-api-key'), })) - vi.doMock('@/lib/logs/enhanced-logging-session', () => ({ - EnhancedLoggingSession: vi.fn().mockImplementation(() => ({ + vi.doMock('@/lib/logs/execution/logging-session', () => ({ + LoggingSession: vi.fn().mockImplementation(() => ({ safeStart: vi.fn().mockResolvedValue(undefined), safeComplete: vi.fn().mockResolvedValue(undefined), safeCompleteWithError: vi.fn().mockResolvedValue(undefined), @@ -166,15 +161,15 @@ describe('Workflow Execution API Route', () => { })), })) - vi.doMock('@/lib/logs/enhanced-execution-logger', () => ({ - enhancedExecutionLogger: { + vi.doMock('@/lib/logs/execution/logger', () => ({ + executionLogger: { startWorkflowExecution: vi.fn().mockResolvedValue(undefined), logBlockExecution: vi.fn().mockResolvedValue(undefined), completeWorkflowExecution: vi.fn().mockResolvedValue(undefined), }, })) - vi.doMock('@/lib/logs/trace-spans', () => ({ + vi.doMock('@/lib/logs/execution/trace-spans/trace-spans', () => ({ buildTraceSpans: vi.fn().mockReturnValue({ traceSpans: [], totalDuration: 100, @@ -203,15 +198,12 @@ describe('Workflow Execution API Route', () => { from: vi.fn().mockImplementation((table) => ({ where: vi.fn().mockImplementation(() => ({ limit: vi.fn().mockImplementation(() => { - // Mock subscription queries if (table === 'subscription' || columns?.plan) { return [{ plan: 'free' }] } - // Mock API key queries if (table === 'apiKey' || columns?.userId) { return [{ userId: 'user-id' }] } - // Default environment query return [ { id: 'env-id', @@ -383,27 +375,20 @@ describe('Workflow Execution API Route', () => { * Test POST execution with empty request body */ it('should execute workflow with empty request body', async () => { - // Create a mock request with empty body const req = createMockRequest('POST') - // Create params similar to what Next.js would provide const params = Promise.resolve({ id: 'workflow-id' }) - // Import the handler after mocks are set up const { POST } = await import('./route') - // Call the handler const response = await POST(req, { params }) - // Ensure response exists and is successful expect(response).toBeDefined() expect(response.status).toBe(200) - // Parse the response body const data = await response.json() expect(data).toHaveProperty('success', true) - // Verify the executor was constructed with an empty object - updated to match implementation const Executor = (await import('@/executor')).Executor expect(Executor).toHaveBeenCalledWith( expect.anything(), // serializedWorkflow @@ -427,21 +412,16 @@ describe('Workflow Execution API Route', () => { body: 'this is not valid JSON', }) - // Create params similar to what Next.js would provide const params = Promise.resolve({ id: 'workflow-id' }) - // Import the handler after mocks are set up const { POST } = await import('./route') - // Call the handler - should throw an error when trying to parse the body const response = await POST(req, { params }) - // Updated to expect 400 as per the implementation expect(response.status).toBe(400) const data = await response.json() expect(data).toHaveProperty('error') - // Check for JSON parse error message expect(data.error).toContain('Invalid JSON') }) @@ -449,7 +429,6 @@ describe('Workflow Execution API Route', () => { * Test handling of incorrect workflow ID */ it('should return 403 for unauthorized workflow access', async () => { - // Mock the middleware to return an error vi.doMock('@/app/api/workflows/middleware', () => ({ validateWorkflowAccess: vi.fn().mockResolvedValue({ error: { @@ -459,22 +438,16 @@ describe('Workflow Execution API Route', () => { }), })) - // Create a mock request const req = createMockRequest('GET') - // Create params with an invalid workflow ID const params = Promise.resolve({ id: 'invalid-workflow-id' }) - // Import the handler after mocks are set up const { GET } = await import('./route') - // Call the handler const response = await GET(req, { params }) - // Verify status code is 403 Forbidden expect(response.status).toBe(403) - // Parse the response body and verify it contains an error message const data = await response.json() expect(data).toHaveProperty('error', 'Unauthorized') }) @@ -483,18 +456,16 @@ describe('Workflow Execution API Route', () => { * Test handling of execution errors */ it('should handle execution errors gracefully', async () => { - // Mock enhanced execution logger with spy const mockCompleteWorkflowExecution = vi.fn().mockResolvedValue({}) - vi.doMock('@/lib/logs/enhanced-execution-logger', () => ({ - enhancedExecutionLogger: { + vi.doMock('@/lib/logs/execution/logger', () => ({ + executionLogger: { completeWorkflowExecution: mockCompleteWorkflowExecution, }, })) - // Mock EnhancedLoggingSession with spy const mockSafeCompleteWithError = vi.fn().mockResolvedValue({}) - vi.doMock('@/lib/logs/enhanced-logging-session', () => ({ - EnhancedLoggingSession: vi.fn().mockImplementation(() => ({ + vi.doMock('@/lib/logs/execution/logging-session', () => ({ + LoggingSession: vi.fn().mockImplementation(() => ({ safeStart: vi.fn().mockResolvedValue({}), safeComplete: vi.fn().mockResolvedValue({}), safeCompleteWithError: mockSafeCompleteWithError, @@ -502,35 +473,26 @@ describe('Workflow Execution API Route', () => { })), })) - // Mock the executor to throw an error vi.doMock('@/executor', () => ({ Executor: vi.fn().mockImplementation(() => ({ execute: vi.fn().mockRejectedValue(new Error('Execution failed')), - setEnhancedLogger: vi.fn(), })), })) - // Create a mock request const req = createMockRequest('GET') - // Create params const params = Promise.resolve({ id: 'workflow-id' }) - // Import the handler after mocks are set up const { GET } = await import('./route') - // Call the handler const response = await GET(req, { params }) - // Verify status code is 500 Internal Server Error expect(response.status).toBe(500) - // Parse the response body and verify it contains an error message const data = await response.json() expect(data).toHaveProperty('error') expect(data.error).toContain('Execution failed') - // Verify enhanced logger was called for error completion via EnhancedLoggingSession expect(mockSafeCompleteWithError).toHaveBeenCalled() }) @@ -538,13 +500,11 @@ describe('Workflow Execution API Route', () => { * Test that workflow variables are properly passed to the Executor */ it('should pass workflow variables to the Executor', async () => { - // Create mock variables for the workflow const workflowVariables = { variable1: { id: 'var1', name: 'variable1', type: 'string', value: '"test value"' }, variable2: { id: 'var2', name: 'variable2', type: 'boolean', value: 'true' }, } - // Mock workflow with variables vi.doMock('@/app/api/workflows/middleware', () => ({ validateWorkflowAccess: vi.fn().mockResolvedValue({ workflow: { @@ -555,7 +515,6 @@ describe('Workflow Execution API Route', () => { }), })) - // Mock normalized tables helper for this specific test vi.doMock('@/lib/workflows/db-helpers', () => ({ loadWorkflowFromNormalizedTables: vi.fn().mockResolvedValue({ blocks: { @@ -595,7 +554,6 @@ describe('Workflow Execution API Route', () => { }), })) - // Create a constructor mock to capture the arguments const executorConstructorMock = vi.fn().mockImplementation(() => ({ execute: vi.fn().mockResolvedValue({ success: true, @@ -609,35 +567,26 @@ describe('Workflow Execution API Route', () => { }), })) - // Override the executor mock vi.doMock('@/executor', () => ({ Executor: executorConstructorMock, })) - // Create a mock request const req = createMockRequest('POST', { testInput: 'value' }) - // Create params similar to what Next.js would provide const params = Promise.resolve({ id: 'workflow-with-vars-id' }) - // Import the handler after mocks are set up const { POST } = await import('./route') - // Call the handler await POST(req, { params }) - // Verify the Executor was constructed with workflow variables expect(executorConstructorMock).toHaveBeenCalled() - // Check that the 5th parameter (workflow variables) was passed const executorCalls = executorConstructorMock.mock.calls expect(executorCalls.length).toBeGreaterThan(0) - // Each call to the constructor should have at least 5 parameters const lastCall = executorCalls[executorCalls.length - 1] expect(lastCall.length).toBeGreaterThanOrEqual(5) - // The 5th parameter should be the workflow variables expect(lastCall[4]).toEqual(workflowVariables) }) }) diff --git a/apps/sim/app/api/workflows/[id]/execute/route.ts b/apps/sim/app/api/workflows/[id]/execute/route.ts index 618608d04c..77efdfad50 100644 --- a/apps/sim/app/api/workflows/[id]/execute/route.ts +++ b/apps/sim/app/api/workflows/[id]/execute/route.ts @@ -5,9 +5,9 @@ import { v4 as uuidv4 } from 'uuid' import { z } from 'zod' import { getSession } from '@/lib/auth' import { checkServerSideUsageLimits } from '@/lib/billing' -import { createLogger } from '@/lib/logs/console-logger' -import { EnhancedLoggingSession } from '@/lib/logs/enhanced-logging-session' -import { buildTraceSpans } from '@/lib/logs/trace-spans' +import { createLogger } from '@/lib/logs/console/logger' +import { LoggingSession } from '@/lib/logs/execution/logging-session' +import { buildTraceSpans } from '@/lib/logs/execution/trace-spans/trace-spans' import { decryptSecret } from '@/lib/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { @@ -78,7 +78,7 @@ async function executeWorkflow(workflow: any, requestId: string, input?: any): P throw new Error('Execution is already running') } - const loggingSession = new EnhancedLoggingSession(workflowId, executionId, 'api', requestId) + const loggingSession = new LoggingSession(workflowId, executionId, 'api', requestId) // Rate limiting is now handled before entering the sync queue @@ -292,7 +292,7 @@ async function executeWorkflow(workflow: any, requestId: string, input?: any): P workflowVariables ) - // Set up enhanced logging on the executor + // Set up logging on the executor loggingSession.setupExecutor(executor) const result = await executor.execute(workflowId) diff --git a/apps/sim/app/api/workflows/[id]/log/route.ts b/apps/sim/app/api/workflows/[id]/log/route.ts index 22cfe9c5f9..9f8dc9e64e 100644 --- a/apps/sim/app/api/workflows/[id]/log/route.ts +++ b/apps/sim/app/api/workflows/[id]/log/route.ts @@ -1,7 +1,7 @@ import type { NextRequest } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' -import { EnhancedLoggingSession } from '@/lib/logs/enhanced-logging-session' -import { buildTraceSpans } from '@/lib/logs/trace-spans' +import { createLogger } from '@/lib/logs/console/logger' +import { LoggingSession } from '@/lib/logs/execution/logging-session' +import { buildTraceSpans } from '@/lib/logs/execution/trace-spans/trace-spans' import { validateWorkflowAccess } from '../../middleware' import { createErrorResponse, createSuccessResponse } from '../../utils' @@ -23,7 +23,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{ const body = await request.json() const { logs, executionId, result } = body - // If result is provided, use enhanced logging system for full tool call extraction + // If result is provided, use logging system for full tool call extraction if (result) { logger.info(`[${requestId}] Persisting execution result for workflow: ${id}`, { executionId, @@ -33,9 +33,9 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{ // Check if this execution is from chat using only the explicit source flag const isChatExecution = result.metadata?.source === 'chat' - // Also log to enhanced system + // Also log to logging system const triggerType = isChatExecution ? 'chat' : 'manual' - const loggingSession = new EnhancedLoggingSession(id, executionId, triggerType, requestId) + const loggingSession = new LoggingSession(id, executionId, triggerType, requestId) await loggingSession.safeStart({ userId: '', // TODO: Get from session diff --git a/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts b/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts index c66e9930a3..81b529e0e9 100644 --- a/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts +++ b/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts @@ -2,7 +2,7 @@ import crypto from 'crypto' import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { saveWorkflowToNormalizedTables } from '@/lib/workflows/db-helpers' import { db } from '@/db' import { workflow } from '@/db/schema' diff --git a/apps/sim/app/api/workflows/[id]/route.test.ts b/apps/sim/app/api/workflows/[id]/route.test.ts index a7447a4d7a..029af8e332 100644 --- a/apps/sim/app/api/workflows/[id]/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/route.test.ts @@ -23,7 +23,7 @@ describe('Workflow By ID API Route', () => { randomUUID: vi.fn().mockReturnValue('mock-request-id-12345678'), }) - vi.doMock('@/lib/logs/console-logger', () => ({ + vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue(mockLogger), })) diff --git a/apps/sim/app/api/workflows/[id]/route.ts b/apps/sim/app/api/workflows/[id]/route.ts index 8f36987e60..9702f1b104 100644 --- a/apps/sim/app/api/workflows/[id]/route.ts +++ b/apps/sim/app/api/workflows/[id]/route.ts @@ -4,7 +4,7 @@ import { z } from 'zod' import { getSession } from '@/lib/auth' import { verifyInternalToken } from '@/lib/auth/internal' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions, hasAdminPermission } from '@/lib/permissions/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { db } from '@/db' diff --git a/apps/sim/app/api/workflows/[id]/state/route.ts b/apps/sim/app/api/workflows/[id]/state/route.ts index dbc02929ee..8ec1d06ce8 100644 --- a/apps/sim/app/api/workflows/[id]/state/route.ts +++ b/apps/sim/app/api/workflows/[id]/state/route.ts @@ -2,7 +2,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/workflows/[id]/stats/route.ts b/apps/sim/app/api/workflows/[id]/stats/route.ts index 23fb614833..cf7da2b8f6 100644 --- a/apps/sim/app/api/workflows/[id]/stats/route.ts +++ b/apps/sim/app/api/workflows/[id]/stats/route.ts @@ -1,6 +1,6 @@ import { eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { userStats, workflow } from '@/db/schema' diff --git a/apps/sim/app/api/workflows/[id]/status/route.ts b/apps/sim/app/api/workflows/[id]/status/route.ts index c2fb40c900..25e2672906 100644 --- a/apps/sim/app/api/workflows/[id]/status/route.ts +++ b/apps/sim/app/api/workflows/[id]/status/route.ts @@ -1,6 +1,6 @@ import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { hasWorkflowChanged } from '@/lib/workflows/utils' import { db } from '@/db' import { workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' diff --git a/apps/sim/app/api/workflows/[id]/variables/route.ts b/apps/sim/app/api/workflows/[id]/variables/route.ts index 7252588d48..722e4e1aad 100644 --- a/apps/sim/app/api/workflows/[id]/variables/route.ts +++ b/apps/sim/app/api/workflows/[id]/variables/route.ts @@ -2,7 +2,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/workflows/[id]/yaml/route.ts b/apps/sim/app/api/workflows/[id]/yaml/route.ts index e85e8d8d58..9fcf6f3c52 100644 --- a/apps/sim/app/api/workflows/[id]/yaml/route.ts +++ b/apps/sim/app/api/workflows/[id]/yaml/route.ts @@ -2,7 +2,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { autoLayoutWorkflow } from '@/lib/autolayout/service' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getUserEntityPermissions } from '@/lib/permissions/utils' import { loadWorkflowFromNormalizedTables, diff --git a/apps/sim/app/api/workflows/middleware.ts b/apps/sim/app/api/workflows/middleware.ts index 9e98d4d146..87ac1c175e 100644 --- a/apps/sim/app/api/workflows/middleware.ts +++ b/apps/sim/app/api/workflows/middleware.ts @@ -1,6 +1,6 @@ import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getWorkflowById } from '@/lib/workflows/utils' import { db } from '@/db' import { apiKey } from '@/db/schema' diff --git a/apps/sim/app/api/workflows/public/[id]/route.ts b/apps/sim/app/api/workflows/public/[id]/route.ts index 9aae95192f..b253c558cb 100644 --- a/apps/sim/app/api/workflows/public/[id]/route.ts +++ b/apps/sim/app/api/workflows/public/[id]/route.ts @@ -1,6 +1,6 @@ import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { marketplace, workflow } from '@/db/schema' diff --git a/apps/sim/app/api/workflows/route.ts b/apps/sim/app/api/workflows/route.ts index d1b89c9bcc..e04c6e8e22 100644 --- a/apps/sim/app/api/workflows/route.ts +++ b/apps/sim/app/api/workflows/route.ts @@ -2,7 +2,7 @@ import crypto from 'crypto' import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { workflow, workflowBlocks } from '@/db/schema' diff --git a/apps/sim/app/api/workflows/sync/route.ts b/apps/sim/app/api/workflows/sync/route.ts index 1480d0301c..218b2bf960 100644 --- a/apps/sim/app/api/workflows/sync/route.ts +++ b/apps/sim/app/api/workflows/sync/route.ts @@ -2,7 +2,7 @@ import crypto from 'crypto' import { and, eq, isNull } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/workflows/yaml/convert/route.ts b/apps/sim/app/api/workflows/yaml/convert/route.ts index 4da955add2..8d08ad91ac 100644 --- a/apps/sim/app/api/workflows/yaml/convert/route.ts +++ b/apps/sim/app/api/workflows/yaml/convert/route.ts @@ -1,5 +1,5 @@ import { type NextRequest, NextResponse } from 'next/server' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateWorkflowYaml } from '@/lib/workflows/yaml-generator' const logger = createLogger('WorkflowYamlAPI') diff --git a/apps/sim/app/api/workspaces/[id]/route.ts b/apps/sim/app/api/workspaces/[id]/route.ts index c4e495ca0c..99e9934104 100644 --- a/apps/sim/app/api/workspaces/[id]/route.ts +++ b/apps/sim/app/api/workspaces/[id]/route.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { workflow } from '@/db/schema' const logger = createLogger('WorkspaceByIdAPI') diff --git a/apps/sim/app/api/workspaces/invitations/route.ts b/apps/sim/app/api/workspaces/invitations/route.ts index 5ffe0e0029..2c1038a9dd 100644 --- a/apps/sim/app/api/workspaces/invitations/route.ts +++ b/apps/sim/app/api/workspaces/invitations/route.ts @@ -6,7 +6,7 @@ import { Resend } from 'resend' import { WorkspaceInvitationEmail } from '@/components/emails/workspace-invitation' import { getSession } from '@/lib/auth' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getEmailDomain } from '@/lib/urls/utils' import { db } from '@/db' import { diff --git a/apps/sim/app/api/workspaces/route.ts b/apps/sim/app/api/workspaces/route.ts index dd6c59458f..e68a811fbb 100644 --- a/apps/sim/app/api/workspaces/route.ts +++ b/apps/sim/app/api/workspaces/route.ts @@ -2,7 +2,7 @@ import crypto from 'crypto' import { and, desc, eq, isNull } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/chat/[subdomain]/chat-client.tsx b/apps/sim/app/chat/[subdomain]/chat-client.tsx index 2e11d74c23..309d4b24d0 100644 --- a/apps/sim/app/chat/[subdomain]/chat-client.tsx +++ b/apps/sim/app/chat/[subdomain]/chat-client.tsx @@ -2,7 +2,7 @@ import { type RefObject, useCallback, useEffect, useRef, useState } from 'react' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { noop } from '@/lib/utils' import { getFormattedGitHubStars } from '@/app/(landing)/actions/github' import EmailAuth from './components/auth/email/email-auth' diff --git a/apps/sim/app/chat/[subdomain]/components/voice-interface/components/particles.tsx b/apps/sim/app/chat/[subdomain]/components/voice-interface/components/particles.tsx index ab698f9be2..e383e47dd1 100644 --- a/apps/sim/app/chat/[subdomain]/components/voice-interface/components/particles.tsx +++ b/apps/sim/app/chat/[subdomain]/components/voice-interface/components/particles.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect, useRef } from 'react' import * as THREE from 'three' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('Particles') diff --git a/apps/sim/app/chat/[subdomain]/components/voice-interface/voice-interface.tsx b/apps/sim/app/chat/[subdomain]/components/voice-interface/voice-interface.tsx index 6076923f10..772b025995 100644 --- a/apps/sim/app/chat/[subdomain]/components/voice-interface/voice-interface.tsx +++ b/apps/sim/app/chat/[subdomain]/components/voice-interface/voice-interface.tsx @@ -3,7 +3,7 @@ import { type RefObject, useCallback, useEffect, useRef, useState } from 'react' import { Mic, MicOff, Phone } from 'lucide-react' import { Button } from '@/components/ui/button' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { ParticlesVisualization } from './components/particles' diff --git a/apps/sim/app/chat/[subdomain]/hooks/use-audio-streaming.ts b/apps/sim/app/chat/[subdomain]/hooks/use-audio-streaming.ts index 53870e41af..0cd8ebdb42 100644 --- a/apps/sim/app/chat/[subdomain]/hooks/use-audio-streaming.ts +++ b/apps/sim/app/chat/[subdomain]/hooks/use-audio-streaming.ts @@ -1,7 +1,7 @@ 'use client' import { type RefObject, useCallback, useRef, useState } from 'react' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('UseAudioStreaming') diff --git a/apps/sim/app/chat/[subdomain]/hooks/use-chat-streaming.ts b/apps/sim/app/chat/[subdomain]/hooks/use-chat-streaming.ts index 77fa433e21..4089696aae 100644 --- a/apps/sim/app/chat/[subdomain]/hooks/use-chat-streaming.ts +++ b/apps/sim/app/chat/[subdomain]/hooks/use-chat-streaming.ts @@ -1,7 +1,7 @@ 'use client' import { useRef, useState } from 'react' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ChatMessage } from '../components/message/message' const logger = createLogger('UseChatStreaming') diff --git a/apps/sim/app/layout.tsx b/apps/sim/app/layout.tsx index 8524e40592..3f1fb43427 100644 --- a/apps/sim/app/layout.tsx +++ b/apps/sim/app/layout.tsx @@ -2,7 +2,7 @@ import { Analytics } from '@vercel/analytics/next' import { SpeedInsights } from '@vercel/speed-insights/next' import type { Metadata, Viewport } from 'next' import { PublicEnvScript } from 'next-runtime-env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { TelemetryConsentDialog } from '@/app/telemetry-consent-dialog' import './globals.css' @@ -194,7 +194,7 @@ export default function RootLayout({ children }: { children: React.ReactNode }) }} /> - {/* Enhanced meta tags for better SEO */} + {/* Meta tags for better SEO */} @@ -210,7 +210,7 @@ export default function RootLayout({ children }: { children: React.ReactNode }) - {/* Enhanced Twitter Card tags */} + {/* Twitter Card tags */} diff --git a/apps/sim/app/telemetry-consent-dialog.tsx b/apps/sim/app/telemetry-consent-dialog.tsx index 041aff44ba..f10de16995 100644 --- a/apps/sim/app/telemetry-consent-dialog.tsx +++ b/apps/sim/app/telemetry-consent-dialog.tsx @@ -12,7 +12,7 @@ import { } from '@/components/ui/alert-dialog' import { Button } from '@/components/ui/button' import { isDev } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useGeneralStore } from '@/stores/settings/general/store' declare global { diff --git a/apps/sim/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider.tsx b/apps/sim/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider.tsx index ac9cc89b0c..3c169c0a0e 100644 --- a/apps/sim/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider.tsx +++ b/apps/sim/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider.tsx @@ -3,7 +3,7 @@ import type React from 'react' import { createContext, useContext, useEffect, useMemo, useState } from 'react' import { useParams } from 'next/navigation' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' import { useUserPermissions, type WorkspaceUserPermissions } from '@/hooks/use-user-permissions' import { diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/create-chunk-modal/create-chunk-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/create-chunk-modal/create-chunk-modal.tsx index fcb04c42b8..300f62255a 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/create-chunk-modal/create-chunk-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/create-chunk-modal/create-chunk-modal.tsx @@ -16,7 +16,7 @@ import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ChunkData, DocumentData } from '@/stores/knowledge/store' const logger = createLogger('CreateChunkModal') diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/delete-chunk-modal/delete-chunk-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/delete-chunk-modal/delete-chunk-modal.tsx index cce4d62f6c..3b0bd1db77 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/delete-chunk-modal/delete-chunk-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/delete-chunk-modal/delete-chunk-modal.tsx @@ -12,7 +12,7 @@ import { AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ChunkData } from '@/stores/knowledge/store' const logger = createLogger('DeleteChunkModal') diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/edit-chunk-modal/edit-chunk-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/edit-chunk-modal/edit-chunk-modal.tsx index 0f86c86d74..f254bcbc91 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/edit-chunk-modal/edit-chunk-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/edit-chunk-modal/edit-chunk-modal.tsx @@ -17,7 +17,7 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/u import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' import type { ChunkData, DocumentData } from '@/stores/knowledge/store' diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx index b31b803bbc..3e620eaf37 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx @@ -7,7 +7,7 @@ import { Button } from '@/components/ui/button' import { Checkbox } from '@/components/ui/checkbox' import { SearchHighlight } from '@/components/ui/search-highlight' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' import { ActionBar } from '@/app/workspace/[workspaceId]/knowledge/[id]/components/action-bar/action-bar' import { SearchInput } from '@/app/workspace/[workspaceId]/knowledge/components/search-input/search-input' diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx index db4ecebe99..5e04994d17 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx @@ -29,7 +29,7 @@ import { Button } from '@/components/ui/button' import { Checkbox } from '@/components/ui/checkbox' import { SearchHighlight } from '@/components/ui/search-highlight' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { ActionBar } from '@/app/workspace/[workspaceId]/knowledge/[id]/components/action-bar/action-bar' import { getDocumentIcon } from '@/app/workspace/[workspaceId]/knowledge/components/icons/document-icons' import { PrimaryButton } from '@/app/workspace/[workspaceId]/knowledge/components/primary-button/primary-button' diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/upload-modal/upload-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/upload-modal/upload-modal.tsx index 69524157f7..25065d0240 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/upload-modal/upload-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/upload-modal/upload-modal.tsx @@ -5,7 +5,7 @@ import { X } from 'lucide-react' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Label } from '@/components/ui/label' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type TagData, TagInput } from '../../../components/tag-input/tag-input' import { useKnowledgeUpload } from '../../../hooks/use-knowledge-upload' diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-modal/create-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-modal/create-modal.tsx index e184f755f4..295c38657c 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-modal/create-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-modal/create-modal.tsx @@ -12,7 +12,7 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/u import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getDocumentIcon } from '@/app/workspace/[workspaceId]/knowledge/components/icons/document-icons' import type { KnowledgeBaseData } from '@/stores/knowledge/store' import { useKnowledgeUpload } from '../../hooks/use-knowledge-upload' diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/components/workspace-selector/workspace-selector.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/components/workspace-selector/workspace-selector.tsx index f7433b0f48..7e1f9a24ab 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/components/workspace-selector/workspace-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/components/workspace-selector/workspace-selector.tsx @@ -10,7 +10,7 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('WorkspaceSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/hooks/use-knowledge-upload.ts b/apps/sim/app/workspace/[workspaceId]/knowledge/hooks/use-knowledge-upload.ts index 5c93b02a35..77b8d54169 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/hooks/use-knowledge-upload.ts +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/hooks/use-knowledge-upload.ts @@ -1,5 +1,5 @@ import { useState } from 'react' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('KnowledgeUpload') diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas.tsx b/apps/sim/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas.tsx index 9f49f0ec72..b506bfefac 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas.tsx @@ -17,7 +17,7 @@ import { } from 'lucide-react' import { Badge } from '@/components/ui/badge' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn, redactApiKeys } from '@/lib/utils' import { WorkflowPreview } from '@/app/workspace/[workspaceId]/w/components/workflow-preview/workflow-preview' import type { WorkflowState } from '@/stores/workflows/workflow/types' diff --git a/apps/sim/app/workspace/[workspaceId]/logs/logs.tsx b/apps/sim/app/workspace/[workspaceId]/logs/logs.tsx index 4651e734b6..959e81dd55 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/logs.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/logs.tsx @@ -6,7 +6,7 @@ import { useParams } from 'next/navigation' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useDebounce } from '@/hooks/use-debounce' import { useFilterStore } from '../../../../stores/logs/filters/store' @@ -160,7 +160,7 @@ export default function Logs() { } const queryParams = buildQueryParams(pageNum, LOGS_PER_PAGE) - const response = await fetch(`/api/logs/enhanced?${queryParams}`) + const response = await fetch(`/api/logs?${queryParams}`) if (!response.ok) { throw new Error(`Error fetching logs: ${response.statusText}`) @@ -273,7 +273,7 @@ export default function Logs() { try { setLoading(true) const queryParams = buildQueryParams(1, LOGS_PER_PAGE) - const response = await fetch(`/api/logs/enhanced?${queryParams}`) + const response = await fetch(`/api/logs?${queryParams}`) if (!response.ok) { throw new Error(`Error fetching logs: ${response.statusText}`) diff --git a/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx b/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx index 1da0a8e1c4..f0dab0ad89 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { notFound } from 'next/navigation' import { getSession } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { templateStars, templates } from '@/db/schema' import type { Template } from '../templates' diff --git a/apps/sim/app/workspace/[workspaceId]/templates/[id]/template.tsx b/apps/sim/app/workspace/[workspaceId]/templates/[id]/template.tsx index 9aa8eea4ad..a7fa3d3a11 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/[id]/template.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/[id]/template.tsx @@ -47,7 +47,7 @@ import { } from 'lucide-react' import { useRouter } from 'next/navigation' import { Button } from '@/components/ui/button' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { WorkflowPreview } from '@/app/workspace/[workspaceId]/w/components/workflow-preview/workflow-preview' import type { WorkflowState } from '@/stores/workflows/workflow/types' diff --git a/apps/sim/app/workspace/[workspaceId]/templates/components/template-card.tsx b/apps/sim/app/workspace/[workspaceId]/templates/components/template-card.tsx index 4c1c88973f..b08b0fadc5 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/components/template-card.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/components/template-card.tsx @@ -42,7 +42,7 @@ import { Zap, } from 'lucide-react' import { useParams, useRouter } from 'next/navigation' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { getBlock } from '@/blocks/registry' diff --git a/apps/sim/app/workspace/[workspaceId]/templates/templates.tsx b/apps/sim/app/workspace/[workspaceId]/templates/templates.tsx index 0786d3abc5..8337447449 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/templates.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/templates.tsx @@ -4,7 +4,7 @@ import { useEffect, useRef, useState } from 'react' import { ChevronRight, Search } from 'lucide-react' import { useParams, useRouter } from 'next/navigation' import { Input } from '@/components/ui/input' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { WorkflowState } from '@/stores/workflows/workflow/types' import { NavigationTabs } from './components/navigation-tabs' import { TemplateCard, TemplateCardSkeleton } from './components/template-card' 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 5f270584af..57648ddf9d 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 @@ -30,7 +30,7 @@ import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Skeleton } from '@/components/ui/skeleton' import { Textarea } from '@/components/ui/textarea' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBaseDomain, getEmailDomain } from '@/lib/urls/utils' import { cn } from '@/lib/utils' import { OutputSelect } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/output-select/output-select' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deploy-form/deploy-form.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deploy-form/deploy-form.tsx index bedc161399..80bad23dca 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deploy-form/deploy-form.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deploy-form/deploy-form.tsx @@ -30,7 +30,7 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('DeployForm') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/deploy-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/deploy-modal.tsx index 2cf5ac229c..f9dcb0849f 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/deploy-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/deploy-modal.tsx @@ -18,7 +18,7 @@ import { Card, CardContent } from '@/components/ui/card' import { CopyButton } from '@/components/ui/copy-button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { getEnv } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { ChatDeploy } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/chat-deploy' import { DeployForm } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deploy-form/deploy-form' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-card.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-card.tsx index 500eac1ff3..879f5618c2 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-card.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-card.tsx @@ -4,7 +4,7 @@ import { useMemo, useState } from 'react' import { Card, CardContent, CardHeader } from '@/components/ui/card' import { Label } from '@/components/ui/label' import { Switch } from '@/components/ui/switch' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { WorkflowPreview } from '@/app/workspace/[workspaceId]/w/components/workflow-preview/workflow-preview' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal.tsx index d45c768178..b0e18919de 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal.tsx @@ -14,7 +14,7 @@ import { } from '@/components/ui/alert-dialog' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { mergeSubblockState } from '@/stores/workflows/utils' import { useWorkflowStore } from '@/stores/workflows/workflow/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/export-controls/export-controls.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/export-controls/export-controls.tsx index ddae263015..115d7c2565 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/export-controls/export-controls.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/export-controls/export-controls.tsx @@ -4,7 +4,7 @@ import { useState } from 'react' import { Download } from 'lucide-react' import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useWorkflowYamlStore } from '@/stores/workflows/yaml/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/template-modal/template-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/template-modal/template-modal.tsx index 36bc8f882b..1287832197 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/template-modal/template-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/template-modal/template-modal.tsx @@ -70,7 +70,7 @@ import { } from '@/components/ui/select' import { Textarea } from '@/components/ui/textarea' import { useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { buildWorkflowStateForTemplate } from '@/lib/workflows/state-builder' import { categories } from '@/app/workspace/[workspaceId]/templates/templates' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.test.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.test.ts index 68d2c785c0..340e6dd351 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.test.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.test.ts @@ -51,7 +51,7 @@ vi.mock('@/stores/workflows/utils', () => ({ mergeSubblockState: vi.fn((blocks) => blocks), })) -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: () => ({ error: vi.fn(), info: vi.fn(), diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx index edf05cc3cc..9e59e5eb76 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx @@ -30,7 +30,7 @@ import { import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' import { useFolderStore } from '@/stores/folders/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/error/index.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/error/index.tsx index e4f579ce54..dbdd7fa4b2 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/error/index.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/error/index.tsx @@ -3,7 +3,7 @@ import { Component, type ReactNode, useEffect } from 'react' import { BotIcon } from 'lucide-react' import { Card } from '@/components/ui/card' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('ErrorBoundary') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.test.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.test.tsx index 14f5343666..89bf07360a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.test.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.test.tsx @@ -6,7 +6,7 @@ vi.mock('@/stores/workflows/workflow/store', () => ({ useWorkflowStore: vi.fn(), })) -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/logger', () => ({ createLogger: vi.fn(() => ({ debug: vi.fn(), info: vi.fn(), diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx index 9c6eb0f93d..af02734302 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx @@ -5,7 +5,7 @@ import { ArrowUp } from 'lucide-react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { ScrollArea } from '@/components/ui/scroll-area' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { extractBlockIdFromOutputId, extractPathFromOutputId, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/console-entry/console-entry.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/console-entry/console-entry.tsx index 743e235ebf..d8ee59e7a8 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/console-entry/console-entry.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/console-entry/console-entry.tsx @@ -12,7 +12,7 @@ import { } from 'lucide-react' import Image from 'next/image' import { Button } from '@/components/ui/button' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' import type { ConsoleEntry as ConsoleEntryType } from '@/stores/panel/console/types' import { useGeneralStore } from '@/stores/settings/general/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/copilot-modal/copilot-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/copilot-modal/copilot-modal.tsx index 663061a797..7319698712 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/copilot-modal/copilot-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/copilot-modal/copilot-modal.tsx @@ -18,7 +18,7 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import type { CopilotChat } from '@/lib/copilot/api' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { CopilotMessage } from '@/stores/copilot/types' import { CheckpointPanel } from '../checkpoint-panel' import { ProfessionalInput } from '../professional-input/professional-input' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx index cd2a848169..69bc89f80b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx @@ -10,7 +10,7 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { ScrollArea } from '@/components/ui/scroll-area' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useCopilotStore } from '@/stores/copilot/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { CheckpointPanel } from './components/checkpoint-panel' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/variables/variables.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/variables/variables.tsx index 373925f384..cbc1bde481 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/variables/variables.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/variables/variables.tsx @@ -17,7 +17,7 @@ import { import { Input } from '@/components/ui/input' import { ScrollArea } from '@/components/ui/scroll-area' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { validateName } from '@/lib/utils' import { useVariablesStore } from '@/stores/panel/variables/store' import type { Variable, VariableType } from '@/stores/panel/variables/types' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.test.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.test.tsx index a6bf26b5f5..39ad706810 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.test.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.test.tsx @@ -6,7 +6,7 @@ vi.mock('@/stores/workflows/workflow/store', () => ({ useWorkflowStore: vi.fn(), })) -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/logger', () => ({ createLogger: vi.fn(() => ({ debug: vi.fn(), info: vi.fn(), diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/code.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/code.tsx index fb70307ea4..e7fa2686ec 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/code.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/code.tsx @@ -9,7 +9,7 @@ import Editor from 'react-simple-code-editor' import { Button } from '@/components/ui/button' import { checkEnvVarTrigger, EnvVarDropdown } from '@/components/ui/env-var-dropdown' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useCodeGeneration } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-code-generation' import { useSubBlockStore } from '@/stores/workflows/subblock/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/combobox.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/combobox.tsx index 66cdb29103..8512494917 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/combobox.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/combobox.tsx @@ -6,7 +6,7 @@ import { checkEnvVarTrigger, EnvVarDropdown } from '@/components/ui/env-var-drop import { formatDisplayText } from '@/components/ui/formatted-text' import { Input } from '@/components/ui/input' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import type { SubBlockConfig } from '@/blocks/types' import { useSubBlockValue } from '../hooks/use-sub-block-value' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/condition-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/condition-input.tsx index 75fe184a15..73f437f500 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/condition-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/condition-input.tsx @@ -11,7 +11,7 @@ import { Button } from '@/components/ui/button' import { checkEnvVarTrigger, EnvVarDropdown } from '@/components/ui/env-var-dropdown' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useWorkflowStore } from '@/stores/workflows/workflow/store' import { useSubBlockValue } from '../hooks/use-sub-block-value' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal.tsx index 8471516528..b30ad1abb5 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal.tsx @@ -11,7 +11,7 @@ import { DialogTitle, } from '@/components/ui/dialog' import { client } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getProviderIdFromServiceId, getServiceIdFromScopes, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/credential-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/credential-selector.tsx index 5c44ae324d..e9d8895f6d 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/credential-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/credential-selector.tsx @@ -12,7 +12,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx index d6f4f0ef60..e24237ef71 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/discord-channel-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/discord-channel-selector.tsx index 03053fe386..1558ab945f 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/discord-channel-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/discord-channel-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('DiscordChannelSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-calendar-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-calendar-selector.tsx index 32d2a8a7e1..11066462e0 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-calendar-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-calendar-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('GoogleCalendarSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx index 3086279393..61eeb1cfab 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx @@ -1,7 +1,7 @@ 'use client' import { useCallback, useEffect, useRef, useState } from 'react' -import { Check, ChevronDown, ExternalLink, FileIcon, RefreshCw, X } from 'lucide-react' +import { Check, ChevronDown, ExternalLink, FileIcon, FolderIcon, RefreshCw, X } from 'lucide-react' import useDrivePicker from 'react-google-drive-picker' import { GoogleDocsIcon, GoogleSheetsIcon } from '@/components/icons' import { Button } from '@/components/ui/button' @@ -14,7 +14,7 @@ import { } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { getEnv } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, @@ -414,6 +414,9 @@ export function GoogleDrivePicker({ const getFileIcon = (file: FileInfo, size: 'sm' | 'md' = 'sm') => { const iconSize = size === 'sm' ? 'h-4 w-4' : 'h-5 w-5' + if (file.mimeType === 'application/vnd.google-apps.folder') { + return + } if (file.mimeType === 'application/vnd.google-apps.spreadsheet') { return } diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx index 071e251adc..941b2d2706 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/microsoft-file-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/microsoft-file-selector.tsx index d87ed7d314..52c0183f0b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/microsoft-file-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/microsoft-file-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/teams-message-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/teams-message-selector.tsx index de6f1add0b..819a16e169 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/teams-message-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/teams-message-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/wealthbox-file-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/wealthbox-file-selector.tsx index 3fbad93c77..186468d73e 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/wealthbox-file-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/wealthbox-file-selector.tsx @@ -12,7 +12,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-upload.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-upload.tsx index 469800d777..7b7f94586a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-upload.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-upload.tsx @@ -4,7 +4,7 @@ import { useRef, useState } from 'react' import { X } from 'lucide-react' import { Button } from '@/components/ui/button' import { Progress } from '@/components/ui/progress' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useWorkflowStore } from '@/stores/workflows/workflow/store' import { useSubBlockValue } from '../hooks/use-sub-block-value' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/folder-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/folder-selector.tsx index 3a6416e200..ee5eb7e562 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/folder-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/folder-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, getServiceIdFromScopes } from '@/lib/oauth' import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/long-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/long-input.tsx index d80c8542f0..ed8fb44f89 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/long-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/long-input.tsx @@ -5,7 +5,7 @@ import { checkEnvVarTrigger, EnvVarDropdown } from '@/components/ui/env-var-drop import { formatDisplayText } from '@/components/ui/formatted-text' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { Textarea } from '@/components/ui/textarea' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import type { SubBlockConfig } from '@/blocks/types' import { useSubBlockValue } from '../hooks/use-sub-block-value' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/discord-server-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/discord-server-selector.tsx index 92dc5b88d8..d6f4900101 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/discord-server-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/discord-server-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('DiscordServerSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx index b2de534644..ec070ee86e 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx @@ -13,7 +13,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx index be4cd80dba..2d4e6e8a9d 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx @@ -21,7 +21,7 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useSubBlockStore } from '@/stores/workflows/subblock/store' import { useSubBlockValue } from '../../../hooks/use-sub-block-value' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/schedule-config.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/schedule-config.tsx index 33d9b1c192..3810087a80 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/schedule-config.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/schedule-config.tsx @@ -3,7 +3,7 @@ import { Calendar, ExternalLink } from 'lucide-react' import { useParams } from 'next/navigation' import { Button } from '@/components/ui/button' import { Dialog } from '@/components/ui/dialog' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { parseCronToHumanReadable } from '@/lib/schedules/utils' import { formatDateTime } from '@/lib/utils' import { getBlockWithValues, getWorkflowWithValues } from '@/stores/workflows' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/short-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/short-input.tsx index 76bf854a79..15bb688f3f 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/short-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/short-input.tsx @@ -4,7 +4,7 @@ import { checkEnvVarTrigger, EnvVarDropdown } from '@/components/ui/env-var-drop import { formatDisplayText } from '@/components/ui/formatted-text' import { Input } from '@/components/ui/input' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import type { SubBlockConfig } from '@/blocks/types' import { useSubBlockValue } from '../hooks/use-sub-block-value' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal.tsx index 84f74fc083..0c53307f80 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal.tsx @@ -22,7 +22,7 @@ import { import { checkEnvVarTrigger, EnvVarDropdown } from '@/components/ui/env-var-dropdown' import { Label } from '@/components/ui/label' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useCodeGeneration } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-code-generation' import { useCustomToolsStore } from '@/stores/custom-tools/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector.tsx index 19f06e5178..e7d6bd75a3 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector.tsx @@ -9,7 +9,7 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, OAUTH_PROVIDERS, diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/gmail.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/gmail.tsx index 3168af8fbf..8f08c50b1c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/gmail.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/gmail.tsx @@ -15,7 +15,7 @@ import { } from '@/components/ui/select' import { Skeleton } from '@/components/ui/skeleton' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { JSONView } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/json-view/json-view' import { ConfigSection } from '../ui/config-section' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/webhook-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/webhook-modal.tsx index 6c476e8df6..603ff7918f 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/webhook-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/webhook-modal.tsx @@ -8,7 +8,7 @@ import { DialogHeader, DialogTitle, } from '@/components/ui/dialog' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type ProviderConfig, WEBHOOK_PROVIDERS } from '../webhook' import { AirtableConfig } from './providers/airtable' import { DiscordConfig } from './providers/discord' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook.tsx index 1a0ebdbb33..3163b706ca 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook.tsx @@ -13,7 +13,7 @@ import { WhatsAppIcon, } from '@/components/icons' import { Button } from '@/components/ui/button' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useSubBlockStore } from '@/stores/workflows/subblock/store' import { useSubBlockValue } from '../../hooks/use-sub-block-value' import { ToolCredentialSelector } from '../tool-input/components/tool-credential-selector' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value.ts index 44fde169ac..69f2b3a79a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value.ts @@ -1,6 +1,6 @@ import { useCallback, useEffect, useRef } from 'react' import { isEqual } from 'lodash' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' import { getProviderFromModel } from '@/providers/utils' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-applier.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-applier.ts index 27463f5f11..662a9f2686 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-applier.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-applier.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' const logger = createLogger('WorkflowApplier') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter.ts index cb12300d04..ae70933d99 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter.ts @@ -1,5 +1,5 @@ import { dump as yamlDump, load as yamlLoad } from 'js-yaml' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateWorkflowYaml } from '@/lib/workflows/yaml-generator' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal.tsx index 420f86d685..645e450ce0 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal.tsx @@ -12,7 +12,7 @@ import { DialogTrigger, } from '@/components/ui/dialog' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { applyWorkflowDiff } from './workflow-applier' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor.tsx index 0aba867857..c96fb095c0 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor.tsx @@ -7,7 +7,7 @@ import { Alert, AlertDescription } from '@/components/ui/alert' import { Button } from '@/components/ui/button' import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { CodeEditor } from '../workflow-block/components/sub-block/components/tool-input/components/code-editor/code-editor' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-block-connections.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-block-connections.ts index 9e8f60f512..a44f55cba7 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-block-connections.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-block-connections.ts @@ -1,6 +1,6 @@ import { shallow } from 'zustand/shallow' import { BlockPathCalculator } from '@/lib/block-path-calculator' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useSubBlockStore } from '@/stores/workflows/subblock/store' import { useWorkflowStore } from '@/stores/workflows/workflow/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-code-generation.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-code-generation.ts index a5a3ce6b5d..42f4e51ff5 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-code-generation.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-code-generation.ts @@ -1,5 +1,5 @@ import { useCallback, useRef, useState } from 'react' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' interface ChatMessage { role: 'user' | 'assistant' | 'system' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution.ts index 6abd90a512..2780feff6f 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution.ts @@ -1,7 +1,7 @@ import { useCallback, useState } from 'react' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' -import { buildTraceSpans } from '@/lib/logs/trace-spans' +import { createLogger } from '@/lib/logs/console/logger' +import { buildTraceSpans } from '@/lib/logs/execution/trace-spans/trace-spans' import { processStreamingBlockLogs } from '@/lib/tokenization' import { getBlock } from '@/blocks' import type { BlockOutput } from '@/blocks/types' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils.ts index 23faa5206e..d5a9d48491 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/utils.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' const logger = createLogger('WorkflowUtils') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx index 55f9c45cd4..7ab8fd7664 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx @@ -11,7 +11,7 @@ import ReactFlow, { useReactFlow, } from 'reactflow' import 'reactflow/dist/style.css' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' import { ControlBar } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar' import { ErrorBoundary } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/error/index' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/import-controls.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/import-controls.tsx index a6852f819e..016a5d447d 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/import-controls.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/import-controls.tsx @@ -2,7 +2,7 @@ import { forwardRef, useImperativeHandle, useRef, useState } from 'react' import { useParams, useRouter } from 'next/navigation' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { parseWorkflowYaml } from '@/stores/workflows/yaml/importer' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-context-menu/folder-context-menu.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-context-menu/folder-context-menu.tsx index 66b8b40dc9..e9d2ccf02e 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-context-menu/folder-context-menu.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-context-menu/folder-context-menu.tsx @@ -11,7 +11,7 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateSubfolderName } from '@/lib/naming' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' import { useFolderStore } from '@/stores/folders/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item.tsx index f426148d13..e5937245e3 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item.tsx @@ -15,7 +15,7 @@ import { AlertDialogTitle, } from '@/components/ui/alert-dialog' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type FolderTreeNode, useFolderStore } from '@/stores/folders/store' import { FolderContextMenu } from '../../folder-context-menu/folder-context-menu' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item.tsx index 5945d69ddb..8bdac483fd 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item.tsx @@ -5,7 +5,7 @@ import clsx from 'clsx' import Link from 'next/link' import { useParams } from 'next/navigation' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useFolderStore, useIsWorkflowSelected } from '@/stores/folders/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import type { WorkflowMetadata } from '@/stores/workflows/registry/types' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/folder-tree.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/folder-tree.tsx index d92732b28a..f043ed7861 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/folder-tree.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/folder-tree.tsx @@ -4,7 +4,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react' import clsx from 'clsx' import { useParams, usePathname } from 'next/navigation' import { Skeleton } from '@/components/ui/skeleton' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type FolderTreeNode, useFolderStore } from '@/stores/folders/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import type { WorkflowMetadata } from '@/stores/workflows/registry/types' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/components/help-form/help-form.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/components/help-form/help-form.tsx index d83445990d..260b619dd9 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/components/help-form/help-form.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/components/help-form/help-form.tsx @@ -19,7 +19,7 @@ import { SelectValue, } from '@/components/ui/select' import { Textarea } from '@/components/ui/textarea' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('HelpForm') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/account/account.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/account/account.tsx index f8431d0ab9..5ef92c6942 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/account/account.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/account/account.tsx @@ -13,7 +13,7 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { signOut, useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { RequestResetForm } from '@/app/(auth)/reset-password/reset-password-form' import { clearUserData } from '@/stores' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/api-keys/api-keys.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/api-keys/api-keys.tsx index 780fdcae1b..b8a45baf56 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/api-keys/api-keys.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/api-keys/api-keys.tsx @@ -26,7 +26,7 @@ import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Skeleton } from '@/components/ui/skeleton' import { useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('ApiKeys') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/credentials/credentials.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/credentials/credentials.tsx index 21ad99b186..097c0d510d 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/credentials/credentials.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/credentials/credentials.tsx @@ -8,7 +8,7 @@ import { Card } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Skeleton } from '@/components/ui/skeleton' import { client, useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { OAUTH_PROVIDERS, type OAuthServiceConfig } from '@/lib/oauth/oauth' import { cn } from '@/lib/utils' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/billing-summary.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/billing-summary.tsx index 059a337ae6..3d223ddafd 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/billing-summary.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/billing-summary.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react' import { AlertCircle } from 'lucide-react' import { Badge } from '@/components/ui/badge' import { useActiveOrganization, useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('BillingSummary') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/cancel-subscription.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/cancel-subscription.tsx index 87bbbbd776..e31061f5e5 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/cancel-subscription.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/cancel-subscription.tsx @@ -10,7 +10,7 @@ import { DialogTitle, } from '@/components/ui/dialog' import { useSession, useSubscription } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useOrganizationStore } from '@/stores/organization' import { useSubscriptionStore } from '@/stores/subscription/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/team-usage-overview.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/team-usage-overview.tsx index e940ad1627..c64fe8c150 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/team-usage-overview.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/team-usage-overview.tsx @@ -6,7 +6,7 @@ import { Button } from '@/components/ui/button' import { Card, CardContent } from '@/components/ui/card' import { Skeleton } from '@/components/ui/skeleton' import { useActiveOrganization } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useOrganizationStore } from '@/stores/organization' import type { MemberUsageData } from '@/stores/organization/types' import { EditMemberLimitDialog } from './edit-member-limit-dialog' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/usage-limit-editor.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/usage-limit-editor.tsx index f0ffda8af3..c356c02c95 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/usage-limit-editor.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/usage-limit-editor.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { Input } from '@/components/ui/input' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useSubscriptionStore } from '@/stores/subscription/store' const logger = createLogger('UsageLimitEditor') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/subscription.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/subscription.tsx index 4462ea18ec..0803758333 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/subscription.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/subscription.tsx @@ -5,7 +5,7 @@ import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Skeleton } from '@/components/ui/skeleton' import { useSession, useSubscription } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useOrganizationStore } from '@/stores/organization' import { useSubscriptionStore } from '@/stores/subscription/store' import { BillingSummary } from './components/billing-summary' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/team-management.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/team-management.tsx index f143294f46..956d03868b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/team-management.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/team-management.tsx @@ -5,7 +5,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { useSession } from '@/lib/auth-client' import { checkEnterprisePlan } from '@/lib/billing/subscriptions/utils' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateSlug, useOrganizationStore } from '@/stores/organization' import { useSubscriptionStore } from '@/stores/subscription/store' import { TeamSeatsDialog } from '../subscription/components/team-seats-dialog' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/settings-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/settings-modal.tsx index 152e0d1edd..4dc7a07082 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/settings-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/settings-modal.tsx @@ -5,7 +5,7 @@ import { X } from 'lucide-react' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { client } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useOrganizationStore } from '@/stores/organization' import { useGeneralStore } from '@/stores/settings/general/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/workspace-header.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/workspace-header.tsx index cd07c98281..08e73e9990 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/workspace-header.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-header/workspace-header.tsx @@ -8,7 +8,7 @@ import { Button } from '@/components/ui/button' import { Skeleton } from '@/components/ui/skeleton' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' const logger = createLogger('WorkspaceHeader') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invite-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invite-modal.tsx index 127379890b..92aeb8e79c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invite-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invite-modal.tsx @@ -10,7 +10,7 @@ import { Skeleton } from '@/components/ui/skeleton' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { useSession } from '@/lib/auth-client' import { validateAndNormalizeEmail } from '@/lib/email/utils' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { PermissionType } from '@/lib/permissions/utils' import { cn } from '@/lib/utils' import { diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invites-sent/invites-sent.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invites-sent/invites-sent.tsx index 12ff428a0f..daac8d05a1 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invites-sent/invites-sent.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invites-sent/invites-sent.tsx @@ -11,7 +11,7 @@ import { TableHeader, TableRow, } from '@/components/ui/table' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('InvitesSent') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/workspace-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/workspace-selector.tsx index b068a09879..39980f2b9a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/workspace-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/workspace-selector.tsx @@ -17,7 +17,7 @@ import { Button } from '@/components/ui/button' import { ScrollArea } from '@/components/ui/scroll-area' import { Skeleton } from '@/components/ui/skeleton' import { isDev } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' import { InviteModal } from './components/invite-modal/invite-modal' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx index f8156fbda9..43798fc8a8 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx @@ -7,7 +7,7 @@ import { Button } from '@/components/ui/button' import { ScrollArea } from '@/components/ui/scroll-area' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateWorkspaceName } from '@/lib/naming' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/workflow-preview/workflow-preview.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/workflow-preview/workflow-preview.tsx index 2aeeb12bc8..b467adedd2 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/workflow-preview/workflow-preview.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/workflow-preview/workflow-preview.tsx @@ -13,7 +13,7 @@ import ReactFlow, { } from 'reactflow' import 'reactflow/dist/style.css' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { LoopNodeComponent } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node' import { ParallelNodeComponent } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node' diff --git a/apps/sim/app/workspace/page.tsx b/apps/sim/app/workspace/page.tsx index d6d6b54e62..6a28c1977f 100644 --- a/apps/sim/app/workspace/page.tsx +++ b/apps/sim/app/workspace/page.tsx @@ -4,7 +4,7 @@ import { useEffect } from 'react' import { useRouter } from 'next/navigation' import { LoadingAgent } from '@/components/ui/loading-agent' import { useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('WorkspacePage') diff --git a/apps/sim/blocks/blocks/agent.ts b/apps/sim/blocks/blocks/agent.ts index bfaaa5a0e0..7d4f813cea 100644 --- a/apps/sim/blocks/blocks/agent.ts +++ b/apps/sim/blocks/blocks/agent.ts @@ -1,6 +1,6 @@ import { AgentIcon } from '@/components/icons' import { isHosted } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockConfig } from '@/blocks/types' import { getAllModelProviders, diff --git a/apps/sim/blocks/blocks/evaluator.ts b/apps/sim/blocks/blocks/evaluator.ts index d2e559f1f8..62e94d0338 100644 --- a/apps/sim/blocks/blocks/evaluator.ts +++ b/apps/sim/blocks/blocks/evaluator.ts @@ -1,6 +1,6 @@ import { ChartBarIcon } from '@/components/icons' import { isHosted } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockConfig, ParamType } from '@/blocks/types' import type { ProviderId } from '@/providers/types' import { getAllModelProviders, getBaseModelProviders, getHostedModels } from '@/providers/utils' diff --git a/apps/sim/blocks/blocks/file.ts b/apps/sim/blocks/blocks/file.ts index 17fe150674..6a0d5e5428 100644 --- a/apps/sim/blocks/blocks/file.ts +++ b/apps/sim/blocks/blocks/file.ts @@ -1,6 +1,6 @@ import { DocumentIcon } from '@/components/icons' import { isProd } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockConfig, SubBlockConfig, SubBlockLayout, SubBlockType } from '@/blocks/types' import type { FileParserOutput } from '@/tools/file/types' diff --git a/apps/sim/blocks/blocks/supabase.ts b/apps/sim/blocks/blocks/supabase.ts index dd7c1a1dde..de13bd6748 100644 --- a/apps/sim/blocks/blocks/supabase.ts +++ b/apps/sim/blocks/blocks/supabase.ts @@ -1,5 +1,5 @@ import { SupabaseIcon } from '@/components/icons' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockConfig } from '@/blocks/types' import type { SupabaseResponse } from '@/tools/supabase/types' diff --git a/apps/sim/blocks/blocks/workflow.ts b/apps/sim/blocks/blocks/workflow.ts index 536763410a..24badc9c9c 100644 --- a/apps/sim/blocks/blocks/workflow.ts +++ b/apps/sim/blocks/blocks/workflow.ts @@ -1,5 +1,5 @@ import { WorkflowIcon } from '@/components/icons' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockConfig } from '@/blocks/types' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import type { ToolResponse } from '@/tools/types' diff --git a/apps/sim/contexts/socket-context.tsx b/apps/sim/contexts/socket-context.tsx index 214a0b7e08..c0e9115cb1 100644 --- a/apps/sim/contexts/socket-context.tsx +++ b/apps/sim/contexts/socket-context.tsx @@ -12,7 +12,7 @@ import { import { useParams } from 'next/navigation' import { io, type Socket } from 'socket.io-client' import { getEnv } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('SocketContext') diff --git a/apps/sim/executor/__test-utils__/mock-dependencies.ts b/apps/sim/executor/__test-utils__/mock-dependencies.ts index 7266a6aadb..1eafa379e7 100644 --- a/apps/sim/executor/__test-utils__/mock-dependencies.ts +++ b/apps/sim/executor/__test-utils__/mock-dependencies.ts @@ -3,7 +3,7 @@ import { vi } from 'vitest' // Mock common dependencies used across executor handler tests // Logger -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn(() => ({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/executor/handlers/agent/agent-handler.ts b/apps/sim/executor/handlers/agent/agent-handler.ts index c9c618b70f..7e04f014ef 100644 --- a/apps/sim/executor/handlers/agent/agent-handler.ts +++ b/apps/sim/executor/handlers/agent/agent-handler.ts @@ -1,5 +1,5 @@ import { getEnv } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getAllBlocks } from '@/blocks' import type { BlockOutput } from '@/blocks/types' import { BlockType } from '@/executor/consts' diff --git a/apps/sim/executor/handlers/api/api-handler.ts b/apps/sim/executor/handlers/api/api-handler.ts index acc8b76119..056e456139 100644 --- a/apps/sim/executor/handlers/api/api-handler.ts +++ b/apps/sim/executor/handlers/api/api-handler.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { BlockType } from '@/executor/consts' import type { BlockHandler, ExecutionContext } from '@/executor/types' import type { SerializedBlock } from '@/serializer/types' diff --git a/apps/sim/executor/handlers/condition/condition-handler.ts b/apps/sim/executor/handlers/condition/condition-handler.ts index 57667c25f7..b690bb282d 100644 --- a/apps/sim/executor/handlers/condition/condition-handler.ts +++ b/apps/sim/executor/handlers/condition/condition-handler.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockOutput } from '@/blocks/types' import { BlockType } from '@/executor/consts' import type { PathTracker } from '@/executor/path/path' diff --git a/apps/sim/executor/handlers/evaluator/evaluator-handler.ts b/apps/sim/executor/handlers/evaluator/evaluator-handler.ts index 9616d0d5b9..9cb7759495 100644 --- a/apps/sim/executor/handlers/evaluator/evaluator-handler.ts +++ b/apps/sim/executor/handlers/evaluator/evaluator-handler.ts @@ -1,5 +1,5 @@ import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockOutput } from '@/blocks/types' import { BlockType } from '@/executor/consts' import type { BlockHandler, ExecutionContext } from '@/executor/types' diff --git a/apps/sim/executor/handlers/function/function-handler.test.ts b/apps/sim/executor/handlers/function/function-handler.test.ts index 5d8493c1ad..9adb7304f4 100644 --- a/apps/sim/executor/handlers/function/function-handler.test.ts +++ b/apps/sim/executor/handlers/function/function-handler.test.ts @@ -5,7 +5,7 @@ import type { ExecutionContext } from '@/executor/types' import type { SerializedBlock } from '@/serializer/types' import { executeTool } from '@/tools' -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn(() => ({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/executor/handlers/function/function-handler.ts b/apps/sim/executor/handlers/function/function-handler.ts index dd84d1a652..9b52a8e5b3 100644 --- a/apps/sim/executor/handlers/function/function-handler.ts +++ b/apps/sim/executor/handlers/function/function-handler.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { BlockType } from '@/executor/consts' import type { BlockHandler, ExecutionContext } from '@/executor/types' import type { SerializedBlock } from '@/serializer/types' diff --git a/apps/sim/executor/handlers/generic/generic-handler.ts b/apps/sim/executor/handlers/generic/generic-handler.ts index 7a963950ca..df88ee5ac7 100644 --- a/apps/sim/executor/handlers/generic/generic-handler.ts +++ b/apps/sim/executor/handlers/generic/generic-handler.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockHandler, ExecutionContext } from '@/executor/types' import type { SerializedBlock } from '@/serializer/types' import { executeTool } from '@/tools' diff --git a/apps/sim/executor/handlers/loop/loop-handler.ts b/apps/sim/executor/handlers/loop/loop-handler.ts index a6713a2007..cbaf09f8b3 100644 --- a/apps/sim/executor/handlers/loop/loop-handler.ts +++ b/apps/sim/executor/handlers/loop/loop-handler.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockOutput } from '@/blocks/types' import { BlockType } from '@/executor/consts' import type { PathTracker } from '@/executor/path/path' diff --git a/apps/sim/executor/handlers/parallel/parallel-handler.ts b/apps/sim/executor/handlers/parallel/parallel-handler.ts index 0a04b770ac..20527576fb 100644 --- a/apps/sim/executor/handlers/parallel/parallel-handler.ts +++ b/apps/sim/executor/handlers/parallel/parallel-handler.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockOutput } from '@/blocks/types' import { BlockType } from '@/executor/consts' import type { PathTracker } from '@/executor/path/path' diff --git a/apps/sim/executor/handlers/response/response-handler.ts b/apps/sim/executor/handlers/response/response-handler.ts index 0e02928074..c4a2517775 100644 --- a/apps/sim/executor/handlers/response/response-handler.ts +++ b/apps/sim/executor/handlers/response/response-handler.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockOutput } from '@/blocks/types' import { BlockType } from '@/executor/consts' import type { BlockHandler } from '@/executor/types' diff --git a/apps/sim/executor/handlers/router/router-handler.ts b/apps/sim/executor/handlers/router/router-handler.ts index a92b971dd6..5225b8928e 100644 --- a/apps/sim/executor/handlers/router/router-handler.ts +++ b/apps/sim/executor/handlers/router/router-handler.ts @@ -1,5 +1,5 @@ import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateRouterPrompt } from '@/blocks/blocks/router' import type { BlockOutput } from '@/blocks/types' import { BlockType } from '@/executor/consts' diff --git a/apps/sim/executor/handlers/workflow/workflow-handler.ts b/apps/sim/executor/handlers/workflow/workflow-handler.ts index 8231bc5b98..1de48a9b49 100644 --- a/apps/sim/executor/handlers/workflow/workflow-handler.ts +++ b/apps/sim/executor/handlers/workflow/workflow-handler.ts @@ -1,5 +1,5 @@ import { generateInternalToken } from '@/lib/auth/internal' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBaseUrl } from '@/lib/urls/utils' import type { BlockOutput } from '@/blocks/types' import { Executor } from '@/executor' diff --git a/apps/sim/executor/index.test.ts b/apps/sim/executor/index.test.ts index a85b06d27a..b6d9c6e8c5 100644 --- a/apps/sim/executor/index.test.ts +++ b/apps/sim/executor/index.test.ts @@ -32,7 +32,7 @@ vi.mock('@/stores/execution/store', () => ({ }, })) -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: () => ({ error: vi.fn(), info: vi.fn(), diff --git a/apps/sim/executor/index.ts b/apps/sim/executor/index.ts index 23cda89c2b..d19243b2bb 100644 --- a/apps/sim/executor/index.ts +++ b/apps/sim/executor/index.ts @@ -1,5 +1,5 @@ import { BlockPathCalculator } from '@/lib/block-path-calculator' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BlockOutput } from '@/blocks/types' import { BlockType } from '@/executor/consts' import { diff --git a/apps/sim/executor/loops/loops.test.ts b/apps/sim/executor/loops/loops.test.ts index 511b707b9a..1a81a59d39 100644 --- a/apps/sim/executor/loops/loops.test.ts +++ b/apps/sim/executor/loops/loops.test.ts @@ -5,7 +5,7 @@ import { LoopManager } from '@/executor/loops/loops' import type { ExecutionContext } from '@/executor/types' import type { SerializedLoop, SerializedWorkflow } from '@/serializer/types' -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: () => ({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/executor/loops/loops.ts b/apps/sim/executor/loops/loops.ts index 6e4f1c8632..56c68c15dd 100644 --- a/apps/sim/executor/loops/loops.ts +++ b/apps/sim/executor/loops/loops.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { BlockType } from '@/executor/consts' import type { ExecutionContext } from '@/executor/types' import type { SerializedBlock, SerializedConnection, SerializedLoop } from '@/serializer/types' diff --git a/apps/sim/executor/parallels/parallels.test.ts b/apps/sim/executor/parallels/parallels.test.ts index c79585704a..3254ba5bf0 100644 --- a/apps/sim/executor/parallels/parallels.test.ts +++ b/apps/sim/executor/parallels/parallels.test.ts @@ -5,7 +5,7 @@ import { ParallelManager } from '@/executor/parallels/parallels' import type { ExecutionContext } from '@/executor/types' import type { SerializedWorkflow } from '@/serializer/types' -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: () => ({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/executor/parallels/parallels.ts b/apps/sim/executor/parallels/parallels.ts index dcffda3e3f..a681d3e726 100644 --- a/apps/sim/executor/parallels/parallels.ts +++ b/apps/sim/executor/parallels/parallels.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ExecutionContext, NormalizedBlockOutput } from '@/executor/types' import type { SerializedBlock, SerializedParallel, SerializedWorkflow } from '@/serializer/types' diff --git a/apps/sim/executor/path/path.ts b/apps/sim/executor/path/path.ts index 23fbb607d2..87bb69c3b8 100644 --- a/apps/sim/executor/path/path.ts +++ b/apps/sim/executor/path/path.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { BlockType } from '@/executor/consts' import { Routing } from '@/executor/routing/routing' import type { BlockState, ExecutionContext } from '@/executor/types' diff --git a/apps/sim/executor/resolver/resolver.ts b/apps/sim/executor/resolver/resolver.ts index 41a848d473..51101c3104 100644 --- a/apps/sim/executor/resolver/resolver.ts +++ b/apps/sim/executor/resolver/resolver.ts @@ -1,5 +1,5 @@ import { BlockPathCalculator } from '@/lib/block-path-calculator' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { VariableManager } from '@/lib/variables/variable-manager' import { getBlock } from '@/blocks/index' import type { LoopManager } from '@/executor/loops/loops' diff --git a/apps/sim/executor/utils.test.ts b/apps/sim/executor/utils.test.ts index 3df72a4037..4fd588a091 100644 --- a/apps/sim/executor/utils.test.ts +++ b/apps/sim/executor/utils.test.ts @@ -4,7 +4,7 @@ import { streamingResponseFormatProcessor, } from '@/executor/utils' -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ debug: vi.fn(), info: vi.fn(), diff --git a/apps/sim/executor/utils.ts b/apps/sim/executor/utils.ts index afaab5c2da..45eb394091 100644 --- a/apps/sim/executor/utils.ts +++ b/apps/sim/executor/utils.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ResponseFormatStreamProcessor } from '@/executor/types' const logger = createLogger('ExecutorUtils') diff --git a/apps/sim/hooks/use-collaborative-workflow.ts b/apps/sim/hooks/use-collaborative-workflow.ts index cd7eb6f374..67868c08f4 100644 --- a/apps/sim/hooks/use-collaborative-workflow.ts +++ b/apps/sim/hooks/use-collaborative-workflow.ts @@ -1,7 +1,7 @@ import { useCallback, useEffect, useRef } from 'react' import type { Edge } from 'reactflow' import { useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' import { resolveOutputType } from '@/blocks/utils' import { useSocket } from '@/contexts/socket-context' diff --git a/apps/sim/hooks/use-subscription-state.ts b/apps/sim/hooks/use-subscription-state.ts index 0a46208298..873fd4825e 100644 --- a/apps/sim/hooks/use-subscription-state.ts +++ b/apps/sim/hooks/use-subscription-state.ts @@ -1,6 +1,6 @@ import { useCallback, useEffect, useState } from 'react' import type { SubscriptionFeatures } from '@/lib/billing/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('useSubscriptionState') diff --git a/apps/sim/hooks/use-user-permissions.ts b/apps/sim/hooks/use-user-permissions.ts index 418da363b4..bd23012c64 100644 --- a/apps/sim/hooks/use-user-permissions.ts +++ b/apps/sim/hooks/use-user-permissions.ts @@ -1,6 +1,6 @@ import { useMemo } from 'react' import { useSession } from '@/lib/auth-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { PermissionType, WorkspacePermissions } from './use-workspace-permissions' const logger = createLogger('useUserPermissions') diff --git a/apps/sim/hooks/use-workspace-permissions.ts b/apps/sim/hooks/use-workspace-permissions.ts index c4b4941ea6..1b7337cc1c 100644 --- a/apps/sim/hooks/use-workspace-permissions.ts +++ b/apps/sim/hooks/use-workspace-permissions.ts @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { permissionTypeEnum } from '@/db/schema' import { API_ENDPOINTS } from '@/stores/constants' diff --git a/apps/sim/instrumentation-edge.ts b/apps/sim/instrumentation-edge.ts index 4b8a3703a8..454bba103a 100644 --- a/apps/sim/instrumentation-edge.ts +++ b/apps/sim/instrumentation-edge.ts @@ -5,7 +5,7 @@ * No Node.js APIs (like process.on, crypto, fs, etc.) are allowed here. */ -import { createLogger } from './lib/logs/console-logger' +import { createLogger } from './lib/logs/console/logger' const logger = createLogger('EdgeInstrumentation') diff --git a/apps/sim/instrumentation-node.ts b/apps/sim/instrumentation-node.ts index 69c147f99a..9024c823ec 100644 --- a/apps/sim/instrumentation-node.ts +++ b/apps/sim/instrumentation-node.ts @@ -6,7 +6,7 @@ import { env } from './lib/env' import { isProd } from './lib/environment' -import { createLogger } from './lib/logs/console-logger' +import { createLogger } from './lib/logs/console/logger.ts' const Sentry = isProd ? require('@sentry/nextjs') : { captureRequestError: () => {} } diff --git a/apps/sim/lib/auth.ts b/apps/sim/lib/auth.ts index 08b23d70c8..597e4c141c 100644 --- a/apps/sim/lib/auth.ts +++ b/apps/sim/lib/auth.ts @@ -22,7 +22,7 @@ import { import { getBaseURL } from '@/lib/auth-client' import { env, isTruthy } from '@/lib/env' import { isProd } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getEmailDomain } from '@/lib/urls/utils' import { db } from '@/db' import * as schema from '@/db/schema' diff --git a/apps/sim/lib/auth/internal.ts b/apps/sim/lib/auth/internal.ts index 06de16792f..29d74988ca 100644 --- a/apps/sim/lib/auth/internal.ts +++ b/apps/sim/lib/auth/internal.ts @@ -1,7 +1,7 @@ import { jwtVerify, SignJWT } from 'jose' import { type NextRequest, NextResponse } from 'next/server' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('CronAuth') diff --git a/apps/sim/lib/autolayout/service.ts b/apps/sim/lib/autolayout/service.ts index bdfb9e02ef..35723f8c2f 100644 --- a/apps/sim/lib/autolayout/service.ts +++ b/apps/sim/lib/autolayout/service.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { calculateHierarchicalLayout } from './algorithms/hierarchical' import { calculateSmartLayout } from './algorithms/smart' import type { LayoutEdge, LayoutNode, LayoutOptions, LayoutResult, WorkflowGraph } from './types' diff --git a/apps/sim/lib/billing/calculations/usage-monitor.ts b/apps/sim/lib/billing/calculations/usage-monitor.ts index 9038c07ce5..0f7759a53f 100644 --- a/apps/sim/lib/billing/calculations/usage-monitor.ts +++ b/apps/sim/lib/billing/calculations/usage-monitor.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { getUserUsageLimit } from '@/lib/billing/core/usage' import { isProd } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { userStats } from '@/db/schema' diff --git a/apps/sim/lib/billing/core/billing-periods.test.ts b/apps/sim/lib/billing/core/billing-periods.test.ts index 99fdc4a727..66ae18077c 100644 --- a/apps/sim/lib/billing/core/billing-periods.test.ts +++ b/apps/sim/lib/billing/core/billing-periods.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { calculateBillingPeriod, calculateNextBillingPeriod } from './billing-periods' -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ info: vi.fn(), warn: vi.fn(), diff --git a/apps/sim/lib/billing/core/billing-periods.ts b/apps/sim/lib/billing/core/billing-periods.ts index 1cf47194b9..c0448ac8b8 100644 --- a/apps/sim/lib/billing/core/billing-periods.ts +++ b/apps/sim/lib/billing/core/billing-periods.ts @@ -1,5 +1,5 @@ import { and, eq } from 'drizzle-orm' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member, subscription, userStats } from '@/db/schema' diff --git a/apps/sim/lib/billing/core/billing.test.ts b/apps/sim/lib/billing/core/billing.test.ts index cf9223a9f4..4d2c8aa5fb 100644 --- a/apps/sim/lib/billing/core/billing.test.ts +++ b/apps/sim/lib/billing/core/billing.test.ts @@ -11,7 +11,7 @@ vi.mock('@/db', () => ({ }, })) -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: () => ({ info: vi.fn(), warn: vi.fn(), diff --git a/apps/sim/lib/billing/core/billing.ts b/apps/sim/lib/billing/core/billing.ts index ba0dfe52eb..4de81e0d30 100644 --- a/apps/sim/lib/billing/core/billing.ts +++ b/apps/sim/lib/billing/core/billing.ts @@ -6,7 +6,7 @@ import { import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription' import { getUserUsageData } from '@/lib/billing/core/usage' import { requireStripeClient } from '@/lib/billing/stripe-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member, organization, subscription, user, userStats } from '@/db/schema' diff --git a/apps/sim/lib/billing/core/organization-billing.ts b/apps/sim/lib/billing/core/organization-billing.ts index 7d884a9e61..5f10877365 100644 --- a/apps/sim/lib/billing/core/organization-billing.ts +++ b/apps/sim/lib/billing/core/organization-billing.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { getPlanPricing } from '@/lib/billing/core/billing' import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member, organization, user, userStats } from '@/db/schema' diff --git a/apps/sim/lib/billing/core/subscription.ts b/apps/sim/lib/billing/core/subscription.ts index 739c16ac67..f1bfa10065 100644 --- a/apps/sim/lib/billing/core/subscription.ts +++ b/apps/sim/lib/billing/core/subscription.ts @@ -8,7 +8,7 @@ import { } from '@/lib/billing/subscriptions/utils' import type { UserSubscriptionState } from '@/lib/billing/types' import { isProd } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member, subscription, userStats } from '@/db/schema' diff --git a/apps/sim/lib/billing/core/usage.ts b/apps/sim/lib/billing/core/usage.ts index d6b6bc0023..25e11e9869 100644 --- a/apps/sim/lib/billing/core/usage.ts +++ b/apps/sim/lib/billing/core/usage.ts @@ -2,7 +2,7 @@ import { and, eq } from 'drizzle-orm' import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription' import { calculateDefaultUsageLimit, canEditUsageLimit } from '@/lib/billing/subscriptions/utils' import type { BillingData, UsageData, UsageLimitInfo } from '@/lib/billing/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member, user, userStats } from '@/db/schema' diff --git a/apps/sim/lib/billing/stripe-client.ts b/apps/sim/lib/billing/stripe-client.ts index ea214f0f55..047b9a6d01 100644 --- a/apps/sim/lib/billing/stripe-client.ts +++ b/apps/sim/lib/billing/stripe-client.ts @@ -1,6 +1,6 @@ import Stripe from 'stripe' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('StripeClient') diff --git a/apps/sim/lib/billing/validation/seat-management.ts b/apps/sim/lib/billing/validation/seat-management.ts index e5d4822c09..5516fd45e1 100644 --- a/apps/sim/lib/billing/validation/seat-management.ts +++ b/apps/sim/lib/billing/validation/seat-management.ts @@ -1,6 +1,6 @@ import { and, count, eq } from 'drizzle-orm' import { getHighestPrioritySubscription } from '@/lib/billing/core/subscription' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { invitation, member, organization, subscription, user, userStats } from '@/db/schema' diff --git a/apps/sim/lib/billing/webhooks/stripe-invoice-webhooks.ts b/apps/sim/lib/billing/webhooks/stripe-invoice-webhooks.ts index cbb7328738..37df50d90f 100644 --- a/apps/sim/lib/billing/webhooks/stripe-invoice-webhooks.ts +++ b/apps/sim/lib/billing/webhooks/stripe-invoice-webhooks.ts @@ -1,5 +1,5 @@ import type Stripe from 'stripe' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('StripeInvoiceWebhooks') diff --git a/apps/sim/lib/copilot/api.ts b/apps/sim/lib/copilot/api.ts index 02d9d38557..d52cdbfd64 100644 --- a/apps/sim/lib/copilot/api.ts +++ b/apps/sim/lib/copilot/api.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('CopilotAPI') diff --git a/apps/sim/lib/copilot/config.ts b/apps/sim/lib/copilot/config.ts index e678e613dc..64bc7d1e33 100644 --- a/apps/sim/lib/copilot/config.ts +++ b/apps/sim/lib/copilot/config.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getProviderDefaultModel } from '@/providers/models' import type { ProviderId } from '@/providers/types' import { AGENT_MODE_SYSTEM_PROMPT } from './prompts' diff --git a/apps/sim/lib/copilot/service.ts b/apps/sim/lib/copilot/service.ts index a53f494555..96c95dd665 100644 --- a/apps/sim/lib/copilot/service.ts +++ b/apps/sim/lib/copilot/service.ts @@ -1,5 +1,5 @@ import { and, desc, eq, sql } from 'drizzle-orm' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getRotatingApiKey } from '@/lib/utils' import { generateEmbeddings } from '@/app/api/knowledge/utils' import { db } from '@/db' diff --git a/apps/sim/lib/copilot/tools.ts b/apps/sim/lib/copilot/tools.ts index 7b8d02803a..1c3279aa1b 100644 --- a/apps/sim/lib/copilot/tools.ts +++ b/apps/sim/lib/copilot/tools.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useWorkflowYamlStore } from '@/stores/workflows/yaml/store' import { searchDocumentation } from './service' diff --git a/apps/sim/lib/documents/docs-chunker.ts b/apps/sim/lib/documents/docs-chunker.ts index f5be9ace82..abfbce7742 100644 --- a/apps/sim/lib/documents/docs-chunker.ts +++ b/apps/sim/lib/documents/docs-chunker.ts @@ -3,7 +3,7 @@ import path from 'path' import { TextChunker } from '@/lib/documents/chunker' import type { DocChunk, DocsChunkerOptions, HeaderInfo } from '@/lib/documents/types' import { isDev } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateEmbeddings } from '@/app/api/knowledge/utils' interface Frontmatter { diff --git a/apps/sim/lib/documents/document-processor.ts b/apps/sim/lib/documents/document-processor.ts index 894263c4fc..1b7639ba4c 100644 --- a/apps/sim/lib/documents/document-processor.ts +++ b/apps/sim/lib/documents/document-processor.ts @@ -2,7 +2,7 @@ import { type Chunk, TextChunker } from '@/lib/documents/chunker' import { retryWithExponentialBackoff } from '@/lib/documents/utils' import { env } from '@/lib/env' import { parseBuffer, parseFile } from '@/lib/file-parsers' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getPresignedUrlWithConfig, getStorageProvider, uploadFile } from '@/lib/uploads' import { BLOB_KB_CONFIG, S3_KB_CONFIG } from '@/lib/uploads/setup' import { mistralParserTool } from '@/tools/mistral/parser' diff --git a/apps/sim/lib/documents/utils.ts b/apps/sim/lib/documents/utils.ts index 7ee0c92c68..60aa8ec103 100644 --- a/apps/sim/lib/documents/utils.ts +++ b/apps/sim/lib/documents/utils.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('RetryUtils') diff --git a/apps/sim/lib/email/mailer.ts b/apps/sim/lib/email/mailer.ts index 8da2656261..5b56b713a2 100644 --- a/apps/sim/lib/email/mailer.ts +++ b/apps/sim/lib/email/mailer.ts @@ -1,7 +1,7 @@ import { Resend } from 'resend' import { generateUnsubscribeToken, isUnsubscribed } from '@/lib/email/unsubscribe' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getEmailDomain } from '@/lib/urls/utils' const logger = createLogger('Mailer') diff --git a/apps/sim/lib/email/unsubscribe.ts b/apps/sim/lib/email/unsubscribe.ts index 565c7865cc..a7fe3d218a 100644 --- a/apps/sim/lib/email/unsubscribe.ts +++ b/apps/sim/lib/email/unsubscribe.ts @@ -2,7 +2,7 @@ import { createHash, randomBytes } from 'crypto' import { eq } from 'drizzle-orm' import type { EmailType } from '@/lib/email/mailer' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { settings, user } from '@/db/schema' diff --git a/apps/sim/lib/file-parsers/csv-parser.ts b/apps/sim/lib/file-parsers/csv-parser.ts index 883f461ebd..d4cb9e4667 100644 --- a/apps/sim/lib/file-parsers/csv-parser.ts +++ b/apps/sim/lib/file-parsers/csv-parser.ts @@ -2,7 +2,7 @@ import { createReadStream, existsSync } from 'fs' import { Readable } from 'stream' import csvParser from 'csv-parser' import type { FileParseResult, FileParser } from '@/lib/file-parsers/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('CsvParser') diff --git a/apps/sim/lib/file-parsers/docx-parser.ts b/apps/sim/lib/file-parsers/docx-parser.ts index 3d6b61079f..c4abc10c39 100644 --- a/apps/sim/lib/file-parsers/docx-parser.ts +++ b/apps/sim/lib/file-parsers/docx-parser.ts @@ -1,7 +1,7 @@ import { readFile } from 'fs/promises' import mammoth from 'mammoth' import type { FileParseResult, FileParser } from '@/lib/file-parsers/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('DocxParser') diff --git a/apps/sim/lib/file-parsers/index.ts b/apps/sim/lib/file-parsers/index.ts index 9022316e07..9380879594 100644 --- a/apps/sim/lib/file-parsers/index.ts +++ b/apps/sim/lib/file-parsers/index.ts @@ -3,7 +3,7 @@ import { readFile } from 'fs/promises' import path from 'path' import { RawPdfParser } from '@/lib/file-parsers/raw-pdf-parser' import type { FileParseResult, FileParser, SupportedFileType } from '@/lib/file-parsers/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('FileParser') diff --git a/apps/sim/lib/file-parsers/md-parser.ts b/apps/sim/lib/file-parsers/md-parser.ts index eca76ac1bd..6c0ffd4733 100644 --- a/apps/sim/lib/file-parsers/md-parser.ts +++ b/apps/sim/lib/file-parsers/md-parser.ts @@ -1,6 +1,6 @@ import { readFile } from 'fs/promises' import type { FileParseResult, FileParser } from '@/lib/file-parsers/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('MdParser') diff --git a/apps/sim/lib/file-parsers/pdf-parser.ts b/apps/sim/lib/file-parsers/pdf-parser.ts index f220833f7b..48d74167f7 100644 --- a/apps/sim/lib/file-parsers/pdf-parser.ts +++ b/apps/sim/lib/file-parsers/pdf-parser.ts @@ -2,7 +2,7 @@ import { readFile } from 'fs/promises' // @ts-ignore import * as pdfParseLib from 'pdf-parse/lib/pdf-parse.js' import type { FileParseResult, FileParser } from '@/lib/file-parsers/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('PdfParser') diff --git a/apps/sim/lib/file-parsers/raw-pdf-parser.ts b/apps/sim/lib/file-parsers/raw-pdf-parser.ts index b8121745ad..f01c37a454 100644 --- a/apps/sim/lib/file-parsers/raw-pdf-parser.ts +++ b/apps/sim/lib/file-parsers/raw-pdf-parser.ts @@ -2,7 +2,7 @@ import { readFile } from 'fs/promises' import { promisify } from 'util' import zlib from 'zlib' import type { FileParseResult, FileParser } from '@/lib/file-parsers/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('RawPdfParser') diff --git a/apps/sim/lib/file-parsers/txt-parser.ts b/apps/sim/lib/file-parsers/txt-parser.ts index 586535af47..30388dd5e6 100644 --- a/apps/sim/lib/file-parsers/txt-parser.ts +++ b/apps/sim/lib/file-parsers/txt-parser.ts @@ -1,6 +1,6 @@ import { readFile } from 'fs/promises' import type { FileParseResult, FileParser } from '@/lib/file-parsers/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('TxtParser') diff --git a/apps/sim/lib/file-parsers/xlsx-parser.ts b/apps/sim/lib/file-parsers/xlsx-parser.ts index 49e17d5b70..08dbc0ad96 100644 --- a/apps/sim/lib/file-parsers/xlsx-parser.ts +++ b/apps/sim/lib/file-parsers/xlsx-parser.ts @@ -1,7 +1,7 @@ import { existsSync } from 'fs' import * as XLSX from 'xlsx' import type { FileParseResult, FileParser } from '@/lib/file-parsers/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('XlsxParser') diff --git a/apps/sim/lib/freestyle.ts b/apps/sim/lib/freestyle.ts index 9402412f1a..b888698971 100644 --- a/apps/sim/lib/freestyle.ts +++ b/apps/sim/lib/freestyle.ts @@ -1,6 +1,6 @@ import { FreestyleSandboxes } from 'freestyle-sandboxes' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('Freestyle') diff --git a/apps/sim/lib/logs/console-logger.ts b/apps/sim/lib/logs/console/logger.ts similarity index 99% rename from apps/sim/lib/logs/console-logger.ts rename to apps/sim/lib/logs/console/logger.ts index e29066cabc..8c77293b26 100644 --- a/apps/sim/lib/logs/console-logger.ts +++ b/apps/sim/lib/logs/console/logger.ts @@ -1,5 +1,5 @@ /** - * console-logger.ts + * logger.ts * * This module provides standardized console logging utilities for internal application logging. * It is separate from the user-facing logging system in logging.ts. @@ -256,7 +256,7 @@ export class Logger { * * Usage example: * ``` - * import { createLogger } from '@/lib/console-logger' + * import { createLogger } from '@/lib/logger' * * const logger = createLogger('MyComponent') * diff --git a/apps/sim/lib/logs/enhanced-execution-logger.test.ts b/apps/sim/lib/logs/execution/logger.test.ts similarity index 66% rename from apps/sim/lib/logs/enhanced-execution-logger.test.ts rename to apps/sim/lib/logs/execution/logger.test.ts index 1876f6352a..50ef98676e 100644 --- a/apps/sim/lib/logs/enhanced-execution-logger.test.ts +++ b/apps/sim/lib/logs/execution/logger.test.ts @@ -1,17 +1,17 @@ import { beforeEach, describe, expect, test } from 'vitest' -import { EnhancedExecutionLogger } from '@/lib/logs/enhanced-execution-logger' +import { ExecutionLogger } from '@/lib/logs/execution/logger' -describe('EnhancedExecutionLogger', () => { - let logger: EnhancedExecutionLogger +describe('ExecutionLogger', () => { + let logger: ExecutionLogger beforeEach(() => { - logger = new EnhancedExecutionLogger() + logger = new ExecutionLogger() }) describe('class instantiation', () => { test('should create logger instance', () => { expect(logger).toBeDefined() - expect(logger).toBeInstanceOf(EnhancedExecutionLogger) + expect(logger).toBeInstanceOf(ExecutionLogger) }) }) @@ -28,7 +28,4 @@ describe('EnhancedExecutionLogger', () => { expect(getTriggerPrefix('unknown' as any)).toBe('Unknown') }) }) - - // Note: Database integration tests would require proper mocking setup - // For now, we're testing the basic functionality without database calls }) diff --git a/apps/sim/lib/logs/enhanced-execution-logger.ts b/apps/sim/lib/logs/execution/logger.ts similarity index 97% rename from apps/sim/lib/logs/enhanced-execution-logger.ts rename to apps/sim/lib/logs/execution/logger.ts index 46f9bb5900..03981cce5b 100644 --- a/apps/sim/lib/logs/enhanced-execution-logger.ts +++ b/apps/sim/lib/logs/execution/logger.ts @@ -1,8 +1,8 @@ import { eq, sql } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' import { getCostMultiplier } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' -import { snapshotService } from '@/lib/logs/snapshot-service' +import { createLogger } from '@/lib/logs/console/logger' +import { snapshotService } from '@/lib/logs/execution/snapshot/service' import { db } from '@/db' import { userStats, workflow, workflowExecutionLogs } from '@/db/schema' import type { @@ -14,7 +14,7 @@ import type { WorkflowExecutionLog, WorkflowExecutionSnapshot, WorkflowState, -} from './types' +} from '../types' export interface ToolCall { name: string @@ -27,9 +27,9 @@ export interface ToolCall { error?: string } -const logger = createLogger('EnhancedExecutionLogger') +const logger = createLogger('ExecutionLogger') -export class EnhancedExecutionLogger implements IExecutionLoggerService { +export class ExecutionLogger implements IExecutionLoggerService { async startWorkflowExecution(params: { workflowId: string executionId: string @@ -411,4 +411,4 @@ export class EnhancedExecutionLogger implements IExecutionLoggerService { } } -export const enhancedExecutionLogger = new EnhancedExecutionLogger() +export const executionLogger = new ExecutionLogger() diff --git a/apps/sim/lib/logs/enhanced-logging-factory.ts b/apps/sim/lib/logs/execution/logging-factory.ts similarity index 98% rename from apps/sim/lib/logs/enhanced-logging-factory.ts rename to apps/sim/lib/logs/execution/logging-factory.ts index 727c42f54b..ed912c5b1d 100644 --- a/apps/sim/lib/logs/enhanced-logging-factory.ts +++ b/apps/sim/lib/logs/execution/logging-factory.ts @@ -133,7 +133,6 @@ export function calculateCostSummary(traceSpans: any[]): { models[model].input += span.cost.input || 0 models[model].output += span.cost.output || 0 models[model].total += span.cost.total || 0 - // Tokens are at span.tokens, not span.cost.tokens models[model].tokens.prompt += span.tokens?.prompt || 0 models[model].tokens.completion += span.tokens?.completion || 0 models[model].tokens.total += span.tokens?.total || 0 diff --git a/apps/sim/lib/logs/enhanced-logging-session.ts b/apps/sim/lib/logs/execution/logging-session.ts similarity index 65% rename from apps/sim/lib/logs/enhanced-logging-session.ts rename to apps/sim/lib/logs/execution/logging-session.ts index 246167ac99..003c2c3c2d 100644 --- a/apps/sim/lib/logs/enhanced-logging-session.ts +++ b/apps/sim/lib/logs/execution/logging-session.ts @@ -1,14 +1,14 @@ -import { createLogger } from '@/lib/logs/console-logger' -import { enhancedExecutionLogger } from '@/lib/logs/enhanced-execution-logger' +import { createLogger } from '@/lib/logs/console/logger' +import { executionLogger } from '@/lib/logs/execution/logger' import { calculateCostSummary, createEnvironmentObject, createTriggerObject, loadWorkflowStateForExecution, -} from '@/lib/logs/enhanced-logging-factory' +} from '@/lib/logs/execution/logging-factory' import type { ExecutionEnvironment, ExecutionTrigger, WorkflowState } from '@/lib/logs/types' -const logger = createLogger('EnhancedLoggingSession') +const logger = createLogger('LoggingSession') export interface SessionStartParams { userId?: string @@ -24,7 +24,7 @@ export interface SessionCompleteParams { traceSpans?: any[] } -export class EnhancedLoggingSession { +export class LoggingSession { private workflowId: string private executionId: string private triggerType: ExecutionTrigger['type'] @@ -32,7 +32,6 @@ export class EnhancedLoggingSession { private trigger?: ExecutionTrigger private environment?: ExecutionEnvironment private workflowState?: WorkflowState - private enhancedLogger = enhancedExecutionLogger constructor( workflowId: string, @@ -60,7 +59,7 @@ export class EnhancedLoggingSession { ) this.workflowState = await loadWorkflowStateForExecution(this.workflowId) - await enhancedExecutionLogger.startWorkflowExecution({ + await executionLogger.startWorkflowExecution({ workflowId: this.workflowId, executionId: this.executionId, trigger: this.trigger, @@ -69,28 +68,24 @@ export class EnhancedLoggingSession { }) if (this.requestId) { - logger.debug( - `[${this.requestId}] Started enhanced logging for execution ${this.executionId}` - ) + logger.debug(`[${this.requestId}] Started logging for execution ${this.executionId}`) } } catch (error) { if (this.requestId) { - logger.error(`[${this.requestId}] Failed to start enhanced logging:`, error) + logger.error(`[${this.requestId}] Failed to start logging:`, error) } throw error } } /** - * Set up enhanced logging on an executor instance - * Note: Enhanced logging now works through trace spans only, no direct executor integration needed + * Set up logging on an executor instance + * Note: Logging now works through trace spans only, no direct executor integration needed */ setupExecutor(executor: any): void { - // No longer setting enhanced logger on executor - trace spans handle everything + // No longer setting logger on executor - trace spans handle everything if (this.requestId) { - logger.debug( - `[${this.requestId}] Enhanced logging session ready for execution ${this.executionId}` - ) + logger.debug(`[${this.requestId}] Logging session ready for execution ${this.executionId}`) } } @@ -100,7 +95,7 @@ export class EnhancedLoggingSession { try { const costSummary = calculateCostSummary(traceSpans || []) - await enhancedExecutionLogger.completeWorkflowExecution({ + await executionLogger.completeWorkflowExecution({ executionId: this.executionId, endedAt: endedAt || new Date().toISOString(), totalDurationMs: totalDurationMs || 0, @@ -110,13 +105,11 @@ export class EnhancedLoggingSession { }) if (this.requestId) { - logger.debug( - `[${this.requestId}] Completed enhanced logging for execution ${this.executionId}` - ) + logger.debug(`[${this.requestId}] Completed logging for execution ${this.executionId}`) } } catch (error) { if (this.requestId) { - logger.error(`[${this.requestId}] Failed to complete enhanced logging:`, error) + logger.error(`[${this.requestId}] Failed to complete logging:`, error) } } } @@ -133,7 +126,7 @@ export class EnhancedLoggingSession { models: {}, } - await enhancedExecutionLogger.completeWorkflowExecution({ + await executionLogger.completeWorkflowExecution({ executionId: this.executionId, endedAt: new Date().toISOString(), totalDurationMs: 0, @@ -143,16 +136,11 @@ export class EnhancedLoggingSession { }) if (this.requestId) { - logger.debug( - `[${this.requestId}] Completed enhanced logging with error for execution ${this.executionId}` - ) + logger.debug(`[${this.requestId}] Completed logging for execution ${this.executionId}`) } } catch (enhancedError) { if (this.requestId) { - logger.error( - `[${this.requestId}] Failed to complete enhanced logging for error:`, - enhancedError - ) + logger.error(`[${this.requestId}] Failed to complete logging:`, enhancedError) } } } @@ -163,10 +151,7 @@ export class EnhancedLoggingSession { return true } catch (error) { if (this.requestId) { - logger.error( - `[${this.requestId}] Enhanced logging start failed, continuing execution:`, - error - ) + logger.error(`[${this.requestId}] Logging start failed:`, error) } return false } @@ -177,7 +162,7 @@ export class EnhancedLoggingSession { await this.complete(params) } catch (error) { if (this.requestId) { - logger.error(`[${this.requestId}] Enhanced logging completion failed:`, error) + logger.error(`[${this.requestId}] Logging completion failed:`, error) } } } @@ -187,7 +172,7 @@ export class EnhancedLoggingSession { await this.completeWithError(error) } catch (enhancedError) { if (this.requestId) { - logger.error(`[${this.requestId}] Enhanced logging error completion failed:`, enhancedError) + logger.error(`[${this.requestId}] Logging error completion failed:`, enhancedError) } } } diff --git a/apps/sim/lib/logs/snapshot-service.test.ts b/apps/sim/lib/logs/execution/snapshot/service.test.ts similarity index 98% rename from apps/sim/lib/logs/snapshot-service.test.ts rename to apps/sim/lib/logs/execution/snapshot/service.test.ts index 387ab56e91..81236ce9d7 100644 --- a/apps/sim/lib/logs/snapshot-service.test.ts +++ b/apps/sim/lib/logs/execution/snapshot/service.test.ts @@ -1,5 +1,5 @@ import { beforeEach, describe, expect, test } from 'vitest' -import { SnapshotService } from '@/lib/logs/snapshot-service' +import { SnapshotService } from '@/lib/logs/execution/snapshot/service' import type { WorkflowState } from '@/lib/logs/types' describe('SnapshotService', () => { diff --git a/apps/sim/lib/logs/snapshot-service.ts b/apps/sim/lib/logs/execution/snapshot/service.ts similarity index 99% rename from apps/sim/lib/logs/snapshot-service.ts rename to apps/sim/lib/logs/execution/snapshot/service.ts index dbdae36523..dd50bfb889 100644 --- a/apps/sim/lib/logs/snapshot-service.ts +++ b/apps/sim/lib/logs/execution/snapshot/service.ts @@ -1,7 +1,7 @@ import { createHash } from 'crypto' import { and, eq, lt } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { SnapshotService as ISnapshotService, SnapshotCreationResult, diff --git a/apps/sim/lib/logs/trace-spans.test.ts b/apps/sim/lib/logs/execution/trace-spans/trace-spans.test.ts similarity index 99% rename from apps/sim/lib/logs/trace-spans.test.ts rename to apps/sim/lib/logs/execution/trace-spans/trace-spans.test.ts index 961982e1bb..b88e5ba54a 100644 --- a/apps/sim/lib/logs/trace-spans.test.ts +++ b/apps/sim/lib/logs/execution/trace-spans/trace-spans.test.ts @@ -1,5 +1,8 @@ import { describe, expect, test } from 'vitest' -import { buildTraceSpans, stripCustomToolPrefix } from '@/lib/logs/trace-spans' +import { + buildTraceSpans, + stripCustomToolPrefix, +} from '@/lib/logs/execution/trace-spans/trace-spans' import type { ExecutionResult } from '@/executor/types' describe('buildTraceSpans', () => { diff --git a/apps/sim/lib/logs/trace-spans.ts b/apps/sim/lib/logs/execution/trace-spans/trace-spans.ts similarity index 99% rename from apps/sim/lib/logs/trace-spans.ts rename to apps/sim/lib/logs/execution/trace-spans/trace-spans.ts index 5e4fd3af88..04553f48f1 100644 --- a/apps/sim/lib/logs/trace-spans.ts +++ b/apps/sim/lib/logs/execution/trace-spans/trace-spans.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { TraceSpan } from '@/lib/logs/types' import type { ExecutionResult } from '@/executor/types' diff --git a/apps/sim/lib/oauth/oauth.test.ts b/apps/sim/lib/oauth/oauth.test.ts index 8689d05b04..6d8996c526 100644 --- a/apps/sim/lib/oauth/oauth.test.ts +++ b/apps/sim/lib/oauth/oauth.test.ts @@ -31,7 +31,7 @@ vi.mock('../env', () => ({ }, })) -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/lib/oauth/oauth.ts b/apps/sim/lib/oauth/oauth.ts index f37dbd0b59..e8b7bb9c20 100644 --- a/apps/sim/lib/oauth/oauth.ts +++ b/apps/sim/lib/oauth/oauth.ts @@ -24,7 +24,7 @@ import { xIcon, } from '@/components/icons' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('OAuth') diff --git a/apps/sim/lib/redis.ts b/apps/sim/lib/redis.ts index ef933d0e60..55bbd93b4d 100644 --- a/apps/sim/lib/redis.ts +++ b/apps/sim/lib/redis.ts @@ -1,6 +1,6 @@ import Redis from 'ioredis' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('Redis') diff --git a/apps/sim/lib/response-format.ts b/apps/sim/lib/response-format.ts index 7a319854ad..f0bde4e1ab 100644 --- a/apps/sim/lib/response-format.ts +++ b/apps/sim/lib/response-format.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('ResponseFormatUtils') diff --git a/apps/sim/lib/schedules/utils.ts b/apps/sim/lib/schedules/utils.ts index 80a6d16625..0745f8d131 100644 --- a/apps/sim/lib/schedules/utils.ts +++ b/apps/sim/lib/schedules/utils.ts @@ -1,5 +1,5 @@ import { Cron } from 'croner' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { formatDateTime } from '@/lib/utils' const logger = createLogger('ScheduleUtils') diff --git a/apps/sim/lib/telemetry.ts b/apps/sim/lib/telemetry.ts index 0d07ef9e09..e73753c373 100644 --- a/apps/sim/lib/telemetry.ts +++ b/apps/sim/lib/telemetry.ts @@ -11,7 +11,7 @@ import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api' import { env } from '@/lib/env' import { isProd } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR) diff --git a/apps/sim/lib/tokenization/calculators.ts b/apps/sim/lib/tokenization/calculators.ts index 5efb6a71f9..dba4038eb9 100644 --- a/apps/sim/lib/tokenization/calculators.ts +++ b/apps/sim/lib/tokenization/calculators.ts @@ -2,7 +2,7 @@ * Cost calculation functions for tokenization */ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { createTokenizationError } from '@/lib/tokenization/errors' import { estimateInputTokens, diff --git a/apps/sim/lib/tokenization/estimators.ts b/apps/sim/lib/tokenization/estimators.ts index b21ea7911b..e78fc0c4e2 100644 --- a/apps/sim/lib/tokenization/estimators.ts +++ b/apps/sim/lib/tokenization/estimators.ts @@ -2,7 +2,7 @@ * Token estimation functions for different providers */ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { MIN_TEXT_LENGTH_FOR_ESTIMATION, TOKENIZATION_CONFIG } from '@/lib/tokenization/constants' import type { TokenEstimate } from '@/lib/tokenization/types' import { createTextPreview, getProviderConfig } from '@/lib/tokenization/utils' diff --git a/apps/sim/lib/tokenization/streaming.ts b/apps/sim/lib/tokenization/streaming.ts index 39c9277f78..8a121cf83a 100644 --- a/apps/sim/lib/tokenization/streaming.ts +++ b/apps/sim/lib/tokenization/streaming.ts @@ -2,7 +2,7 @@ * Streaming-specific tokenization helpers */ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { calculateStreamingCost } from '@/lib/tokenization/calculators' import { TOKENIZATION_CONFIG } from '@/lib/tokenization/constants' import { diff --git a/apps/sim/lib/tokenization/utils.ts b/apps/sim/lib/tokenization/utils.ts index ce2dce50c5..db99241273 100644 --- a/apps/sim/lib/tokenization/utils.ts +++ b/apps/sim/lib/tokenization/utils.ts @@ -2,7 +2,7 @@ * Utility functions for tokenization */ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getProviderFromModel } from '@/providers/utils' import { LLM_BLOCK_TYPES, MAX_PREVIEW_LENGTH, TOKENIZATION_CONFIG } from './constants' import { createTokenizationError } from './errors' diff --git a/apps/sim/lib/uploads/setup.server.ts b/apps/sim/lib/uploads/setup.server.ts index 1e8ce907f5..b2b0b0e24b 100644 --- a/apps/sim/lib/uploads/setup.server.ts +++ b/apps/sim/lib/uploads/setup.server.ts @@ -1,5 +1,5 @@ import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { ensureUploadsDirectory, getStorageProvider, diff --git a/apps/sim/lib/uploads/setup.ts b/apps/sim/lib/uploads/setup.ts index 8a152ad4eb..eed88bcbbe 100644 --- a/apps/sim/lib/uploads/setup.ts +++ b/apps/sim/lib/uploads/setup.ts @@ -2,7 +2,7 @@ import { existsSync } from 'fs' import { mkdir } from 'fs/promises' import path, { join } from 'path' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('UploadsSetup') diff --git a/apps/sim/lib/uploads/storage-client.ts b/apps/sim/lib/uploads/storage-client.ts index 162e5f490e..0965e07dce 100644 --- a/apps/sim/lib/uploads/storage-client.ts +++ b/apps/sim/lib/uploads/storage-client.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { type FileInfo as BlobFileInfo, type CustomBlobConfig, diff --git a/apps/sim/lib/utils.ts b/apps/sim/lib/utils.ts index 5f0c3401ff..636994f5d5 100644 --- a/apps/sim/lib/utils.ts +++ b/apps/sim/lib/utils.ts @@ -3,7 +3,7 @@ import { type ClassValue, clsx } from 'clsx' import { nanoid } from 'nanoid' import { twMerge } from 'tailwind-merge' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('Utils') diff --git a/apps/sim/lib/webhooks/gmail-polling-service.ts b/apps/sim/lib/webhooks/gmail-polling-service.ts index 21510e4ca4..43cb7fa832 100644 --- a/apps/sim/lib/webhooks/gmail-polling-service.ts +++ b/apps/sim/lib/webhooks/gmail-polling-service.ts @@ -1,6 +1,6 @@ import { and, eq } from 'drizzle-orm' import { nanoid } from 'nanoid' -import { Logger } from '@/lib/logs/console-logger' +import { Logger } from '@/lib/logs/console/logger' import { hasProcessedMessage, markMessageAsProcessed } from '@/lib/redis' import { getBaseUrl } from '@/lib/urls/utils' import { getOAuthToken } from '@/app/api/auth/oauth/utils' diff --git a/apps/sim/lib/webhooks/utils.ts b/apps/sim/lib/webhooks/utils.ts index 363ae75057..763d602bc3 100644 --- a/apps/sim/lib/webhooks/utils.ts +++ b/apps/sim/lib/webhooks/utils.ts @@ -1,8 +1,8 @@ import { and, eq, sql } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' -import { EnhancedLoggingSession } from '@/lib/logs/enhanced-logging-session' +import { createLogger } from '@/lib/logs/console/logger' +import { LoggingSession } from '@/lib/logs/execution/logging-session' import { hasProcessedMessage, markMessageAsProcessed } from '@/lib/redis' import { decryptSecret } from '@/lib/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' @@ -488,12 +488,7 @@ export async function executeWorkflowFromPayload( triggerSource: 'webhook-payload', }) - const loggingSession = new EnhancedLoggingSession( - foundWorkflow.id, - executionId, - 'webhook', - requestId - ) + const loggingSession = new LoggingSession(foundWorkflow.id, executionId, 'webhook', requestId) try { // Load workflow data from normalized tables @@ -703,7 +698,7 @@ export async function executeWorkflowFromPayload( workflowVariables ) - // Set up enhanced logging on the executor + // Set up logging on the executor loggingSession.setupExecutor(executor) // Log workflow execution start time for tracking @@ -768,7 +763,7 @@ export async function executeWorkflowFromPayload( .where(eq(userStats.userId, foundWorkflow.userId)) } - // Calculate total duration for enhanced logging + // Calculate total duration for logging const totalDuration = executionResult.metadata?.duration || 0 const traceSpans = (executionResult.logs || []).map((blockLog: any, index: number) => { @@ -829,7 +824,7 @@ export async function executeWorkflowFromPayload( error: error.message, stack: error.stack, }) - // Error logging handled by enhanced logging session + // Error logging handled by logging session await loggingSession.safeCompleteWithError({ endedAt: new Date().toISOString(), @@ -1023,7 +1018,7 @@ export async function fetchAndProcessAirtablePayloads( workflowData: any, requestId: string // Original request ID from the ping, used for the final execution log ) { - // Enhanced logging handles all error logging + // Logging handles all error logging let currentCursor: number | null = null let mightHaveMore = true let payloadsFetched = 0 // Track total payloads fetched @@ -1051,7 +1046,7 @@ export async function fetchAndProcessAirtablePayloads( logger.error( `[${requestId}] Missing baseId or externalId in providerConfig for webhook ${webhookData.id}. Cannot fetch payloads.` ) - // Error logging handled by enhanced logging session + // Error logging handled by logging session return // Exit early } @@ -1087,7 +1082,7 @@ export async function fetchAndProcessAirtablePayloads( error: initError.message, stack: initError.stack, }) - // Error logging handled by enhanced logging session + // Error logging handled by logging session } } @@ -1125,7 +1120,7 @@ export async function fetchAndProcessAirtablePayloads( userId: workflowData.userId, } ) - // Error logging handled by enhanced logging session + // Error logging handled by logging session return // Exit early } @@ -1189,7 +1184,7 @@ export async function fetchAndProcessAirtablePayloads( error: errorMessage, } ) - // Error logging handled by enhanced logging session + // Error logging handled by logging session mightHaveMore = false break } @@ -1333,7 +1328,7 @@ export async function fetchAndProcessAirtablePayloads( cursor: currentCursor, error: dbError.message, }) - // Error logging handled by enhanced logging session + // Error logging handled by logging session mightHaveMore = false throw new Error('Failed to save Airtable cursor, stopping processing.') // Re-throw to break loop clearly } @@ -1353,7 +1348,7 @@ export async function fetchAndProcessAirtablePayloads( `[${requestId}] Network error calling Airtable GET /payloads (Call ${apiCallCount}) for webhook ${webhookData.id}`, fetchError ) - // Error logging handled by enhanced logging session + // Error logging handled by logging session mightHaveMore = false break } @@ -1422,7 +1417,7 @@ export async function fetchAndProcessAirtablePayloads( error: (error as Error).message, } ) - // Error logging handled by enhanced logging session + // Error logging handled by logging session } // DEBUG: Log function completion diff --git a/apps/sim/lib/workflows/db-helpers.test.ts b/apps/sim/lib/workflows/db-helpers.test.ts index c82858a1b4..7d2c6eb5f3 100644 --- a/apps/sim/lib/workflows/db-helpers.test.ts +++ b/apps/sim/lib/workflows/db-helpers.test.ts @@ -67,7 +67,7 @@ vi.doMock('drizzle-orm', () => ({ eq: vi.fn((field, value) => ({ field, value, type: 'eq' })), })) -vi.doMock('@/lib/logs/console-logger', () => ({ +vi.doMock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn(() => ({ info: vi.fn(), error: vi.fn(), diff --git a/apps/sim/lib/workflows/db-helpers.ts b/apps/sim/lib/workflows/db-helpers.ts index 3545c4c1c2..447d584e0a 100644 --- a/apps/sim/lib/workflows/db-helpers.ts +++ b/apps/sim/lib/workflows/db-helpers.ts @@ -1,5 +1,5 @@ import { eq } from 'drizzle-orm' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' import type { LoopConfig, WorkflowState } from '@/stores/workflows/workflow/types' diff --git a/apps/sim/lib/workflows/utils.ts b/apps/sim/lib/workflows/utils.ts index 8927821e13..689bdaa45e 100644 --- a/apps/sim/lib/workflows/utils.ts +++ b/apps/sim/lib/workflows/utils.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { NextResponse } from 'next/server' import { getEnv } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { userStats, workflow as workflowTable } from '@/db/schema' import type { ExecutionResult } from '@/executor/types' diff --git a/apps/sim/lib/workflows/yaml-generator.ts b/apps/sim/lib/workflows/yaml-generator.ts index 5fa5d82185..3fbf595653 100644 --- a/apps/sim/lib/workflows/yaml-generator.ts +++ b/apps/sim/lib/workflows/yaml-generator.ts @@ -1,6 +1,6 @@ import { dump as yamlDump } from 'js-yaml' import type { Edge } from 'reactflow' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' import type { SubBlockConfig } from '@/blocks/types' import type { BlockState, WorkflowState } from '@/stores/workflows/workflow/types' diff --git a/apps/sim/middleware.ts b/apps/sim/middleware.ts index 47039323a5..ac2b06ef2a 100644 --- a/apps/sim/middleware.ts +++ b/apps/sim/middleware.ts @@ -1,7 +1,7 @@ import { getSessionCookie } from 'better-auth/cookies' import { type NextRequest, NextResponse } from 'next/server' import { isDev } from './lib/environment' -import { createLogger } from './lib/logs/console-logger' +import { createLogger } from './lib/logs/console/logger' import { getBaseDomain } from './lib/urls/utils' const logger = createLogger('Middleware') diff --git a/apps/sim/providers/anthropic/index.ts b/apps/sim/providers/anthropic/index.ts index bb4384ef67..52faba9f15 100644 --- a/apps/sim/providers/anthropic/index.ts +++ b/apps/sim/providers/anthropic/index.ts @@ -1,5 +1,5 @@ import Anthropic from '@anthropic-ai/sdk' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeTool } from '@/tools' import { getProviderDefaultModel, getProviderModels } from '../models' diff --git a/apps/sim/providers/azure-openai/index.ts b/apps/sim/providers/azure-openai/index.ts index a3d65aaf64..a654792e5a 100644 --- a/apps/sim/providers/azure-openai/index.ts +++ b/apps/sim/providers/azure-openai/index.ts @@ -1,6 +1,6 @@ import { AzureOpenAI } from 'openai' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeTool } from '@/tools' import { getProviderDefaultModel, getProviderModels } from '../models' @@ -242,7 +242,7 @@ export const azureOpenAIProvider: ProviderConfig = { streamingResult.execution.output.tokens = newTokens } - // We don't need to estimate tokens here as execution-logger.ts will handle that + // We don't need to estimate tokens here as logger.ts will handle that }), execution: { success: true, @@ -314,7 +314,7 @@ export const azureOpenAIProvider: ProviderConfig = { const firstResponseTime = Date.now() - initialCallTime let content = currentResponse.choices[0]?.message?.content || '' - // Collect token information but don't calculate costs - that will be done in execution-logger.ts + // Collect token information but don't calculate costs - that will be done in logger.ts const tokens = { prompt: currentResponse.usage?.prompt_tokens || 0, completion: currentResponse.usage?.completion_tokens || 0, @@ -627,7 +627,7 @@ export const azureOpenAIProvider: ProviderConfig = { iterations: iterationCount + 1, timeSegments: timeSegments, }, - // We're not calculating cost here as it will be handled in execution-logger.ts + // We're not calculating cost here as it will be handled in logger.ts } } catch (error) { // Include timing information even for errors diff --git a/apps/sim/providers/cerebras/index.ts b/apps/sim/providers/cerebras/index.ts index df0dadb86c..4e64e4633b 100644 --- a/apps/sim/providers/cerebras/index.ts +++ b/apps/sim/providers/cerebras/index.ts @@ -1,5 +1,5 @@ import { Cerebras } from '@cerebras/cerebras_cloud_sdk' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeTool } from '@/tools' import { getProviderDefaultModel, getProviderModels } from '../models' diff --git a/apps/sim/providers/deepseek/index.ts b/apps/sim/providers/deepseek/index.ts index 09bc521349..a1c76c7882 100644 --- a/apps/sim/providers/deepseek/index.ts +++ b/apps/sim/providers/deepseek/index.ts @@ -1,5 +1,5 @@ import OpenAI from 'openai' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeTool } from '@/tools' import { getProviderDefaultModel, getProviderModels } from '../models' diff --git a/apps/sim/providers/google/index.ts b/apps/sim/providers/google/index.ts index f648e36b5c..6e8f9b42f6 100644 --- a/apps/sim/providers/google/index.ts +++ b/apps/sim/providers/google/index.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeTool } from '@/tools' import { getProviderDefaultModel, getProviderModels } from '../models' diff --git a/apps/sim/providers/groq/index.ts b/apps/sim/providers/groq/index.ts index b98b7b0936..df84c04ae9 100644 --- a/apps/sim/providers/groq/index.ts +++ b/apps/sim/providers/groq/index.ts @@ -1,5 +1,5 @@ import { Groq } from 'groq-sdk' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeTool } from '@/tools' import { getProviderDefaultModel, getProviderModels } from '../models' diff --git a/apps/sim/providers/index.ts b/apps/sim/providers/index.ts index d1d53011a0..0a766263b7 100644 --- a/apps/sim/providers/index.ts +++ b/apps/sim/providers/index.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import type { ProviderRequest, ProviderResponse } from './types' import { diff --git a/apps/sim/providers/ollama/index.ts b/apps/sim/providers/ollama/index.ts index e0947032a0..a874f0f1fc 100644 --- a/apps/sim/providers/ollama/index.ts +++ b/apps/sim/providers/ollama/index.ts @@ -1,6 +1,6 @@ import OpenAI from 'openai' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useOllamaStore } from '@/stores/ollama/store' import { executeTool } from '@/tools' import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' diff --git a/apps/sim/providers/openai/index.ts b/apps/sim/providers/openai/index.ts index 6a5faea9ae..c16ed320a0 100644 --- a/apps/sim/providers/openai/index.ts +++ b/apps/sim/providers/openai/index.ts @@ -1,5 +1,5 @@ import OpenAI from 'openai' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeTool } from '@/tools' import { getProviderDefaultModel, getProviderModels } from '../models' @@ -224,7 +224,7 @@ export const openaiProvider: ProviderConfig = { streamingResult.execution.output.tokens = newTokens } - // We don't need to estimate tokens here as execution-logger.ts will handle that + // We don't need to estimate tokens here as logger.ts will handle that }), execution: { success: true, @@ -296,7 +296,7 @@ export const openaiProvider: ProviderConfig = { const firstResponseTime = Date.now() - initialCallTime let content = currentResponse.choices[0]?.message?.content || '' - // Collect token information but don't calculate costs - that will be done in execution-logger.ts + // Collect token information but don't calculate costs - that will be done in logger.ts const tokens = { prompt: currentResponse.usage?.prompt_tokens || 0, completion: currentResponse.usage?.completion_tokens || 0, @@ -590,7 +590,7 @@ export const openaiProvider: ProviderConfig = { iterations: iterationCount + 1, timeSegments: timeSegments, }, - // We're not calculating cost here as it will be handled in execution-logger.ts + // We're not calculating cost here as it will be handled in logger.ts } } catch (error) { // Include timing information even for errors diff --git a/apps/sim/providers/utils.ts b/apps/sim/providers/utils.ts index 20cd0dc0ca..f82623bb91 100644 --- a/apps/sim/providers/utils.ts +++ b/apps/sim/providers/utils.ts @@ -1,5 +1,5 @@ import { getCostMultiplier, isHosted } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useCustomToolsStore } from '@/stores/custom-tools/store' import { anthropicProvider } from './anthropic' import { azureOpenAIProvider } from './azure-openai' diff --git a/apps/sim/providers/xai/index.ts b/apps/sim/providers/xai/index.ts index 841236845c..7be94095a8 100644 --- a/apps/sim/providers/xai/index.ts +++ b/apps/sim/providers/xai/index.ts @@ -1,5 +1,5 @@ import OpenAI from 'openai' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' import { executeTool } from '@/tools' import { getProviderDefaultModel, getProviderModels } from '../models' diff --git a/apps/sim/scripts/chunk-docs.ts b/apps/sim/scripts/chunk-docs.ts index 0ef440c054..0f108bd66d 100644 --- a/apps/sim/scripts/chunk-docs.ts +++ b/apps/sim/scripts/chunk-docs.ts @@ -3,7 +3,7 @@ import path from 'path' import { DocsChunker } from '@/lib/documents/docs-chunker' import type { DocChunk } from '@/lib/documents/types' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('ChunkDocsScript') diff --git a/apps/sim/scripts/process-docs-embeddings.ts b/apps/sim/scripts/process-docs-embeddings.ts index 4e17275627..c27ad77e01 100644 --- a/apps/sim/scripts/process-docs-embeddings.ts +++ b/apps/sim/scripts/process-docs-embeddings.ts @@ -4,7 +4,7 @@ import path from 'path' import { sql } from 'drizzle-orm' import { DocsChunker } from '@/lib/documents/docs-chunker' import { isDev } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { docsEmbeddings } from '@/db/schema' diff --git a/apps/sim/scripts/test-billing-suite.ts b/apps/sim/scripts/test-billing-suite.ts index 322c5522aa..763016d475 100644 --- a/apps/sim/scripts/test-billing-suite.ts +++ b/apps/sim/scripts/test-billing-suite.ts @@ -3,7 +3,7 @@ import { eq, like } from 'drizzle-orm' import { nanoid } from 'nanoid' import { processDailyBillingCheck } from '@/lib/billing/core/billing' import { requireStripeClient } from '@/lib/billing/stripe-client' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { member, organization, subscription, user, userStats } from '@/db/schema' diff --git a/apps/sim/serializer/index.test.ts b/apps/sim/serializer/index.test.ts index 32d664af34..c1223c3c24 100644 --- a/apps/sim/serializer/index.test.ts +++ b/apps/sim/serializer/index.test.ts @@ -127,7 +127,7 @@ vi.mock('@/blocks', () => ({ })) // Mock logger -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: () => ({ error: vi.fn(), info: vi.fn(), diff --git a/apps/sim/serializer/index.ts b/apps/sim/serializer/index.ts index ef02cf2728..0693a925f6 100644 --- a/apps/sim/serializer/index.ts +++ b/apps/sim/serializer/index.ts @@ -1,5 +1,5 @@ import type { Edge } from 'reactflow' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' import type { BlockState, Loop, Parallel } from '@/stores/workflows/workflow/types' import type { SerializedBlock, SerializedWorkflow } from './types' diff --git a/apps/sim/services/queue/RateLimiter.ts b/apps/sim/services/queue/RateLimiter.ts index ebc8ac2de1..0d891e8c8b 100644 --- a/apps/sim/services/queue/RateLimiter.ts +++ b/apps/sim/services/queue/RateLimiter.ts @@ -1,5 +1,5 @@ import { eq, sql } from 'drizzle-orm' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { userRateLimits } from '@/db/schema' import { RATE_LIMITS, type SubscriptionPlan, type TriggerType } from './types' diff --git a/apps/sim/socket-server/config/socket.ts b/apps/sim/socket-server/config/socket.ts index 947608c4d0..508881d147 100644 --- a/apps/sim/socket-server/config/socket.ts +++ b/apps/sim/socket-server/config/socket.ts @@ -2,7 +2,7 @@ import type { Server as HttpServer } from 'http' import { Server } from 'socket.io' import { env } from '@/lib/env' import { isProd } from '@/lib/environment' -import { createLogger } from '../../lib/logs/console-logger' +import { createLogger } from '../../lib/logs/console/logger' const logger = createLogger('SocketIOConfig') diff --git a/apps/sim/socket-server/database/operations.ts b/apps/sim/socket-server/database/operations.ts index 434e6829c7..e48113c534 100644 --- a/apps/sim/socket-server/database/operations.ts +++ b/apps/sim/socket-server/database/operations.ts @@ -2,7 +2,7 @@ import { and, eq, or } from 'drizzle-orm' import { drizzle } from 'drizzle-orm/postgres-js' import postgres from 'postgres' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import * as schema from '../../db/schema' import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '../../db/schema' diff --git a/apps/sim/socket-server/handlers/connection.ts b/apps/sim/socket-server/handlers/connection.ts index f140cd538e..ccaad0243f 100644 --- a/apps/sim/socket-server/handlers/connection.ts +++ b/apps/sim/socket-server/handlers/connection.ts @@ -1,4 +1,4 @@ -import { createLogger } from '../../lib/logs/console-logger' +import { createLogger } from '../../lib/logs/console/logger' import type { AuthenticatedSocket } from '../middleware/auth' import type { RoomManager } from '../rooms/manager' import type { HandlerDependencies } from './workflow' diff --git a/apps/sim/socket-server/handlers/operations.ts b/apps/sim/socket-server/handlers/operations.ts index 5ee3611823..4e956eb003 100644 --- a/apps/sim/socket-server/handlers/operations.ts +++ b/apps/sim/socket-server/handlers/operations.ts @@ -1,5 +1,5 @@ import { ZodError } from 'zod' -import { createLogger } from '../../lib/logs/console-logger' +import { createLogger } from '../../lib/logs/console/logger' import { persistWorkflowOperation } from '../database/operations' import type { AuthenticatedSocket } from '../middleware/auth' import { verifyOperationPermission } from '../middleware/permissions' diff --git a/apps/sim/socket-server/handlers/presence.ts b/apps/sim/socket-server/handlers/presence.ts index 0596a2aced..3904c87c3b 100644 --- a/apps/sim/socket-server/handlers/presence.ts +++ b/apps/sim/socket-server/handlers/presence.ts @@ -1,4 +1,4 @@ -import { createLogger } from '../../lib/logs/console-logger' +import { createLogger } from '../../lib/logs/console/logger' import type { AuthenticatedSocket } from '../middleware/auth' import type { RoomManager } from '../rooms/manager' import type { HandlerDependencies } from './workflow' diff --git a/apps/sim/socket-server/handlers/subblocks.ts b/apps/sim/socket-server/handlers/subblocks.ts index 3d5f6220ff..18ad9b707d 100644 --- a/apps/sim/socket-server/handlers/subblocks.ts +++ b/apps/sim/socket-server/handlers/subblocks.ts @@ -1,7 +1,7 @@ import { and, eq } from 'drizzle-orm' import { db } from '../../db' import { workflow, workflowBlocks } from '../../db/schema' -import { createLogger } from '../../lib/logs/console-logger' +import { createLogger } from '../../lib/logs/console/logger' import type { AuthenticatedSocket } from '../middleware/auth' import type { RoomManager } from '../rooms/manager' import type { HandlerDependencies } from './workflow' diff --git a/apps/sim/socket-server/handlers/workflow.ts b/apps/sim/socket-server/handlers/workflow.ts index 49733a6ada..300e435608 100644 --- a/apps/sim/socket-server/handlers/workflow.ts +++ b/apps/sim/socket-server/handlers/workflow.ts @@ -1,4 +1,4 @@ -import { createLogger } from '../../lib/logs/console-logger' +import { createLogger } from '../../lib/logs/console/logger' import { getWorkflowState } from '../database/operations' import type { AuthenticatedSocket } from '../middleware/auth' import { verifyWorkflowAccess } from '../middleware/permissions' diff --git a/apps/sim/socket-server/index.test.ts b/apps/sim/socket-server/index.test.ts index 323e16a14d..0f2f1257c9 100644 --- a/apps/sim/socket-server/index.test.ts +++ b/apps/sim/socket-server/index.test.ts @@ -5,7 +5,7 @@ */ import { createServer } from 'http' import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' -import { createLogger } from '../lib/logs/console-logger' +import { createLogger } from '../lib/logs/console/logger' import { createSocketIOServer } from './config/socket' import { RoomManager } from './rooms/manager' import { createHttpHandler } from './routes/http' diff --git a/apps/sim/socket-server/index.ts b/apps/sim/socket-server/index.ts index d53e3bd17a..bbe7d91373 100644 --- a/apps/sim/socket-server/index.ts +++ b/apps/sim/socket-server/index.ts @@ -1,6 +1,6 @@ import { createServer } from 'http' import { env } from '@/lib/env' -import { createLogger } from '../lib/logs/console-logger' +import { createLogger } from '../lib/logs/console/logger' import { createSocketIOServer } from './config/socket' import { setupAllHandlers } from './handlers' import { type AuthenticatedSocket, authenticateSocket } from './middleware/auth' diff --git a/apps/sim/socket-server/middleware/auth.ts b/apps/sim/socket-server/middleware/auth.ts index 5f2378efaf..5e631b297b 100644 --- a/apps/sim/socket-server/middleware/auth.ts +++ b/apps/sim/socket-server/middleware/auth.ts @@ -1,6 +1,6 @@ import type { Socket } from 'socket.io' import { auth } from '@/lib/auth' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('SocketAuth') diff --git a/apps/sim/socket-server/middleware/permissions.ts b/apps/sim/socket-server/middleware/permissions.ts index 43bcd2406b..6ae80ef8a7 100644 --- a/apps/sim/socket-server/middleware/permissions.ts +++ b/apps/sim/socket-server/middleware/permissions.ts @@ -1,7 +1,7 @@ import { eq } from 'drizzle-orm' import { db } from '../../db' import { workflow } from '../../db/schema' -import { createLogger } from '../../lib/logs/console-logger' +import { createLogger } from '../../lib/logs/console/logger' import { getUserEntityPermissions } from '../../lib/permissions/utils' const logger = createLogger('SocketPermissions') diff --git a/apps/sim/socket-server/rooms/manager.ts b/apps/sim/socket-server/rooms/manager.ts index 14e10bd885..6e76e8dc90 100644 --- a/apps/sim/socket-server/rooms/manager.ts +++ b/apps/sim/socket-server/rooms/manager.ts @@ -3,7 +3,7 @@ import { drizzle } from 'drizzle-orm/postgres-js' import postgres from 'postgres' import type { Server } from 'socket.io' import { env } from '@/lib/env' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import * as schema from '@/db/schema' import { workflowBlocks, workflowEdges } from '@/db/schema' diff --git a/apps/sim/stores/copilot/store.ts b/apps/sim/stores/copilot/store.ts index fa46b739f4..0816693ba3 100644 --- a/apps/sim/stores/copilot/store.ts +++ b/apps/sim/stores/copilot/store.ts @@ -13,7 +13,7 @@ import { sendStreamingMessage, updateChatMessages, } from '@/lib/copilot/api' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { CopilotStore } from './types' const logger = createLogger('CopilotStore') diff --git a/apps/sim/stores/custom-tools/store.ts b/apps/sim/stores/custom-tools/store.ts index 7605321532..6a7f884a7c 100644 --- a/apps/sim/stores/custom-tools/store.ts +++ b/apps/sim/stores/custom-tools/store.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { CustomToolsStore } from './types' const logger = createLogger('CustomToolsStore') diff --git a/apps/sim/stores/folders/store.ts b/apps/sim/stores/folders/store.ts index ed92e1001f..e74dac1946 100644 --- a/apps/sim/stores/folders/store.ts +++ b/apps/sim/stores/folders/store.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from '../workflows/registry/store' const logger = createLogger('FoldersStore') diff --git a/apps/sim/stores/index.ts b/apps/sim/stores/index.ts index 92696b9c5a..a5e83335ee 100644 --- a/apps/sim/stores/index.ts +++ b/apps/sim/stores/index.ts @@ -1,7 +1,7 @@ 'use client' import { useEffect } from 'react' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useCopilotStore } from './copilot/store' import { useCustomToolsStore } from './custom-tools/store' import { useExecutionStore } from './execution/store' diff --git a/apps/sim/stores/knowledge/store.ts b/apps/sim/stores/knowledge/store.ts index 8bf671ca64..3ed05cb912 100644 --- a/apps/sim/stores/knowledge/store.ts +++ b/apps/sim/stores/knowledge/store.ts @@ -1,5 +1,5 @@ import { create } from 'zustand' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('KnowledgeStore') diff --git a/apps/sim/stores/ollama/store.ts b/apps/sim/stores/ollama/store.ts index 466dd0c317..c9b3780c55 100644 --- a/apps/sim/stores/ollama/store.ts +++ b/apps/sim/stores/ollama/store.ts @@ -1,5 +1,5 @@ import { create } from 'zustand' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { updateOllamaProviderModels } from '@/providers/utils' import type { OllamaStore } from './types' diff --git a/apps/sim/stores/operation-queue/store.ts b/apps/sim/stores/operation-queue/store.ts index cfa1a08efa..d496ae13c7 100644 --- a/apps/sim/stores/operation-queue/store.ts +++ b/apps/sim/stores/operation-queue/store.ts @@ -1,5 +1,5 @@ import { create } from 'zustand' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('OperationQueue') diff --git a/apps/sim/stores/organization/store.ts b/apps/sim/stores/organization/store.ts index 5abb750976..0fe2a30c4d 100644 --- a/apps/sim/stores/organization/store.ts +++ b/apps/sim/stores/organization/store.ts @@ -2,7 +2,7 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' import { client } from '@/lib/auth-client' import { checkEnterprisePlan } from '@/lib/billing/subscriptions/utils' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { OrganizationStore, Subscription, WorkspaceInvitation } from './types' import { calculateSeatUsage, generateSlug, validateEmail, validateSlug } from './utils' diff --git a/apps/sim/stores/panel/variables/store.ts b/apps/sim/stores/panel/variables/store.ts index 30ef1d8ad8..0973a123a2 100644 --- a/apps/sim/stores/panel/variables/store.ts +++ b/apps/sim/stores/panel/variables/store.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { API_ENDPOINTS } from '@/stores/constants' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' diff --git a/apps/sim/stores/settings/environment/store.ts b/apps/sim/stores/settings/environment/store.ts index 31a4f2e1dd..1710aca7d4 100644 --- a/apps/sim/stores/settings/environment/store.ts +++ b/apps/sim/stores/settings/environment/store.ts @@ -1,5 +1,5 @@ import { create } from 'zustand' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { API_ENDPOINTS } from '../../constants' import type { EnvironmentStore, EnvironmentVariable } from './types' diff --git a/apps/sim/stores/settings/general/store.ts b/apps/sim/stores/settings/general/store.ts index fbc77ee8c2..456b0c91a3 100644 --- a/apps/sim/stores/settings/general/store.ts +++ b/apps/sim/stores/settings/general/store.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { General, GeneralStore, UserSettings } from './types' const logger = createLogger('GeneralStore') diff --git a/apps/sim/stores/subscription/store.ts b/apps/sim/stores/subscription/store.ts index a34c16a0a7..5dac7332c1 100644 --- a/apps/sim/stores/subscription/store.ts +++ b/apps/sim/stores/subscription/store.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BillingStatus, SubscriptionData, diff --git a/apps/sim/stores/workflows/index.ts b/apps/sim/stores/workflows/index.ts index 5fe909c51f..3d3d40e85e 100644 --- a/apps/sim/stores/workflows/index.ts +++ b/apps/sim/stores/workflows/index.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from './registry/store' import { mergeSubblockState } from './utils' import { useWorkflowStore } from './workflow/store' diff --git a/apps/sim/stores/workflows/registry/store.ts b/apps/sim/stores/workflows/registry/store.ts index 531d0904d0..8ce81e9f7f 100644 --- a/apps/sim/stores/workflows/registry/store.ts +++ b/apps/sim/stores/workflows/registry/store.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateCreativeWorkflowName } from '@/lib/naming' import { clearWorkflowVariablesTracking } from '@/stores/panel/variables/store' import { API_ENDPOINTS } from '../../constants' diff --git a/apps/sim/stores/workflows/workflow/store.ts b/apps/sim/stores/workflows/workflow/store.ts index 9af7799e02..056cdd8d49 100644 --- a/apps/sim/stores/workflows/workflow/store.ts +++ b/apps/sim/stores/workflows/workflow/store.ts @@ -1,7 +1,7 @@ import type { Edge } from 'reactflow' import { create } from 'zustand' import { devtools } from 'zustand/middleware' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' import { resolveOutputType } from '@/blocks/utils' import { pushHistory, type WorkflowStoreWithHistory, withHistory } from '../middleware' diff --git a/apps/sim/stores/workflows/yaml/importer.ts b/apps/sim/stores/workflows/yaml/importer.ts index c9d8931479..fe5cc11e93 100644 --- a/apps/sim/stores/workflows/yaml/importer.ts +++ b/apps/sim/stores/workflows/yaml/importer.ts @@ -1,6 +1,6 @@ import { load as yamlParse } from 'js-yaml' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' import { type ConnectionsFormat, diff --git a/apps/sim/stores/workflows/yaml/parsing-utils.ts b/apps/sim/stores/workflows/yaml/parsing-utils.ts index 2beda16820..dfa94730cf 100644 --- a/apps/sim/stores/workflows/yaml/parsing-utils.ts +++ b/apps/sim/stores/workflows/yaml/parsing-utils.ts @@ -1,5 +1,5 @@ import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('YamlParsingUtils') diff --git a/apps/sim/stores/workflows/yaml/store.ts b/apps/sim/stores/workflows/yaml/store.ts index f42330c480..9d9389a8c5 100644 --- a/apps/sim/stores/workflows/yaml/store.ts +++ b/apps/sim/stores/workflows/yaml/store.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { generateWorkflowYaml } from '@/lib/workflows/yaml-generator' import { useSubBlockStore } from '../subblock/store' import { useWorkflowStore } from '../workflow/store' diff --git a/apps/sim/tools/browser_use/run_task.ts b/apps/sim/tools/browser_use/run_task.ts index fe13d215db..8de6d20d23 100644 --- a/apps/sim/tools/browser_use/run_task.ts +++ b/apps/sim/tools/browser_use/run_task.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { BrowserUseRunTaskParams, BrowserUseRunTaskResponse } from '@/tools/browser_use/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/discord/get_messages.ts b/apps/sim/tools/discord/get_messages.ts index 51e81b0bbe..978ce84cd6 100644 --- a/apps/sim/tools/discord/get_messages.ts +++ b/apps/sim/tools/discord/get_messages.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { DiscordAPIError, DiscordGetMessagesParams, diff --git a/apps/sim/tools/discord/get_server.ts b/apps/sim/tools/discord/get_server.ts index 274478ca9c..59d7e5aead 100644 --- a/apps/sim/tools/discord/get_server.ts +++ b/apps/sim/tools/discord/get_server.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { DiscordAPIError, DiscordGetServerParams, diff --git a/apps/sim/tools/discord/get_user.ts b/apps/sim/tools/discord/get_user.ts index 917bc6ebb9..5ff612cfff 100644 --- a/apps/sim/tools/discord/get_user.ts +++ b/apps/sim/tools/discord/get_user.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { DiscordAPIError, DiscordGetUserParams, diff --git a/apps/sim/tools/discord/send_message.ts b/apps/sim/tools/discord/send_message.ts index 756260f35e..7d0bb6b7de 100644 --- a/apps/sim/tools/discord/send_message.ts +++ b/apps/sim/tools/discord/send_message.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { DiscordAPIError, DiscordMessage, diff --git a/apps/sim/tools/elevenlabs/tts.ts b/apps/sim/tools/elevenlabs/tts.ts index ba7269177c..af806364fe 100644 --- a/apps/sim/tools/elevenlabs/tts.ts +++ b/apps/sim/tools/elevenlabs/tts.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '../types' import type { ElevenLabsTtsParams, ElevenLabsTtsResponse } from './types' diff --git a/apps/sim/tools/exa/research.ts b/apps/sim/tools/exa/research.ts index 0ac57b2d25..b15c076234 100644 --- a/apps/sim/tools/exa/research.ts +++ b/apps/sim/tools/exa/research.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ExaResearchParams, ExaResearchResponse } from '@/tools/exa/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/file/parser.ts b/apps/sim/tools/file/parser.ts index e3be52e3c4..ccb0e27c02 100644 --- a/apps/sim/tools/file/parser.ts +++ b/apps/sim/tools/file/parser.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { FileParseResult, FileParserInput, diff --git a/apps/sim/tools/firecrawl/crawl.ts b/apps/sim/tools/firecrawl/crawl.ts index c0d4a684ed..5c8f0c3e8e 100644 --- a/apps/sim/tools/firecrawl/crawl.ts +++ b/apps/sim/tools/firecrawl/crawl.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { FirecrawlCrawlParams, FirecrawlCrawlResponse } from '@/tools/firecrawl/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/function/execute.test.ts b/apps/sim/tools/function/execute.test.ts index 333086a37d..b8b31b2dcd 100644 --- a/apps/sim/tools/function/execute.test.ts +++ b/apps/sim/tools/function/execute.test.ts @@ -164,9 +164,9 @@ describe('Function Execute Tool', () => { }) }) - describe('Enhanced Error Handling', () => { - test('should handle enhanced syntax error with line content', async () => { - // Setup enhanced error response with debug information + describe('Error Handling', () => { + test('should handle syntax error with line content', async () => { + // Setup error response with debug information tester.setup( { success: false, @@ -193,7 +193,7 @@ describe('Function Execute Tool', () => { code: 'const obj = {\n name: "test",\n description: "This has a missing closing quote\n};\nreturn obj;', }) - // Check enhanced error handling + // Check error handling expect(result.success).toBe(false) expect(result.error).toContain('Syntax Error') expect(result.error).toContain('Line 3') @@ -202,8 +202,8 @@ describe('Function Execute Tool', () => { expect(result.error).toContain('(Check for missing quotes, brackets, or semicolons)') }) - test('should handle enhanced runtime error with line and column', async () => { - // Setup enhanced runtime error response + test('should handle runtime error with line and column', async () => { + // Setup runtime error response tester.setup( { success: false, @@ -230,7 +230,7 @@ describe('Function Execute Tool', () => { code: 'const obj = null;\nreturn obj.someMethod();', }) - // Check enhanced error handling + // Check error handling expect(result.success).toBe(false) expect(result.error).toContain('Type Error') expect(result.error).toContain('Line 2:16') @@ -238,8 +238,8 @@ describe('Function Execute Tool', () => { expect(result.error).toContain('Cannot read properties of null') }) - test('should handle enhanced error information in tool response', async () => { - // Setup enhanced error response with full debug info + test('should handle error information in tool response', async () => { + // Setup error response with full debug info tester.setup( { success: false, @@ -265,7 +265,7 @@ describe('Function Execute Tool', () => { code: 'return undefinedVar', }) - // Check that the tool properly captures enhanced error + // Check that the tool properly captures error expect(result.success).toBe(false) expect(result.error).toBe( 'Reference Error: Line 1: `return undefinedVar` - undefinedVar is not defined' @@ -273,7 +273,7 @@ describe('Function Execute Tool', () => { }) test('should preserve debug information in error object', async () => { - // Setup enhanced error response + // Setup error response tester.setup( { success: false, @@ -294,12 +294,11 @@ describe('Function Execute Tool', () => { code: 'valid line\ninvalid syntax here', }) - // Check that enhanced error information is available + // Check that error information is available expect(result.success).toBe(false) expect(result.error).toBe('Syntax Error: Line 2 - Invalid syntax') - // Note: In this test framework, debug information would be available - // in the response object, but the tool transforms it into the error message + // Note: In this test framework, debug information would be available in the response object, but the tool transforms it into the error message }) test('should handle enhanced error without line information', async () => { @@ -321,13 +320,13 @@ describe('Function Execute Tool', () => { code: 'return "test";', }) - // Check error handling without enhanced line info + // Check error handling without line info expect(result.success).toBe(false) expect(result.error).toBe('Generic error message') }) test('should provide line-specific error message when available', async () => { - // Setup enhanced error response with line info + // Setup error response with line info tester.setup( { success: false, @@ -348,7 +347,7 @@ describe('Function Execute Tool', () => { code: 'const obj = {};\nobj.nonExistentMethod();', }) - // Check that enhanced error message is provided + // Check that error message is provided expect(result.success).toBe(false) expect(result.error).toContain('Line 5:20') expect(result.error).toContain('obj.nonExistentMethod()') diff --git a/apps/sim/tools/google_docs/create.ts b/apps/sim/tools/google_docs/create.ts index fb6c4f3b25..1b6f6fae99 100644 --- a/apps/sim/tools/google_docs/create.ts +++ b/apps/sim/tools/google_docs/create.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { GoogleDocsCreateResponse, GoogleDocsToolParams } from '@/tools/google_docs/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/google_drive/get_content.ts b/apps/sim/tools/google_drive/get_content.ts index 50af9a182b..4d188fa0ba 100644 --- a/apps/sim/tools/google_drive/get_content.ts +++ b/apps/sim/tools/google_drive/get_content.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { GoogleDriveGetContentResponse, GoogleDriveToolParams, diff --git a/apps/sim/tools/google_drive/upload.ts b/apps/sim/tools/google_drive/upload.ts index 2a5e5562ef..ab66575ddb 100644 --- a/apps/sim/tools/google_drive/upload.ts +++ b/apps/sim/tools/google_drive/upload.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { GoogleDriveToolParams, GoogleDriveUploadResponse } from '@/tools/google_drive/types' import { GOOGLE_WORKSPACE_MIME_TYPES, SOURCE_MIME_TYPES } from '@/tools/google_drive/utils' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/http/request.ts b/apps/sim/tools/http/request.ts index b51c5deccf..4c0d7c870d 100644 --- a/apps/sim/tools/http/request.ts +++ b/apps/sim/tools/http/request.ts @@ -1,6 +1,6 @@ import { getEnv } from '@/lib/env' import { isTest } from '@/lib/environment' -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBaseUrl } from '@/lib/urls/utils' import type { RequestParams, RequestResponse } from '@/tools/http/types' import type { HttpMethod, TableRow, ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/index.ts b/apps/sim/tools/index.ts index d232526bce..dffbec4e83 100644 --- a/apps/sim/tools/index.ts +++ b/apps/sim/tools/index.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBaseUrl } from '@/lib/urls/utils' import type { OAuthTokenPayload, ToolConfig, ToolResponse } from '@/tools/types' import { formatRequestParams, getTool, getToolAsync, validateToolRequest } from '@/tools/utils' diff --git a/apps/sim/tools/microsoft_teams/read_channel.ts b/apps/sim/tools/microsoft_teams/read_channel.ts index b5c1267d8e..a20854a9fb 100644 --- a/apps/sim/tools/microsoft_teams/read_channel.ts +++ b/apps/sim/tools/microsoft_teams/read_channel.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { MicrosoftTeamsReadResponse, MicrosoftTeamsToolParams, diff --git a/apps/sim/tools/mistral/parser.ts b/apps/sim/tools/mistral/parser.ts index 09b11e3e7a..b52b978ca7 100644 --- a/apps/sim/tools/mistral/parser.ts +++ b/apps/sim/tools/mistral/parser.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBaseUrl } from '@/lib/urls/utils' import type { MistralParserInput, MistralParserOutput } from '@/tools/mistral/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/openai/image.ts b/apps/sim/tools/openai/image.ts index 9a12a50239..85d0e2eef4 100644 --- a/apps/sim/tools/openai/image.ts +++ b/apps/sim/tools/openai/image.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBaseUrl } from '@/lib/urls/utils' import type { BaseImageRequestBody } from '@/tools/openai/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/stagehand/agent.ts b/apps/sim/tools/stagehand/agent.ts index c4b1883324..604586ff86 100644 --- a/apps/sim/tools/stagehand/agent.ts +++ b/apps/sim/tools/stagehand/agent.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StagehandAgentParams, StagehandAgentResponse } from '@/tools/stagehand/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/stagehand/extract.ts b/apps/sim/tools/stagehand/extract.ts index 1338e101ac..56d58b65e5 100644 --- a/apps/sim/tools/stagehand/extract.ts +++ b/apps/sim/tools/stagehand/extract.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { StagehandExtractParams, StagehandExtractResponse } from '@/tools/stagehand/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/twilio/send_sms.ts b/apps/sim/tools/twilio/send_sms.ts index a3de5f1982..c6bf31f0e5 100644 --- a/apps/sim/tools/twilio/send_sms.ts +++ b/apps/sim/tools/twilio/send_sms.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { TwilioSendSMSParams, TwilioSMSBlockOutput } from '@/tools/twilio/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/typeform/insights.ts b/apps/sim/tools/typeform/insights.ts index 52494af6c9..b56a02cf39 100644 --- a/apps/sim/tools/typeform/insights.ts +++ b/apps/sim/tools/typeform/insights.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { TypeformInsightsParams, TypeformInsightsResponse } from '@/tools/typeform/types' import type { ToolConfig } from '@/tools/types' diff --git a/apps/sim/tools/utils.test.ts b/apps/sim/tools/utils.test.ts index 10a4527580..3f5b2e3c96 100644 --- a/apps/sim/tools/utils.test.ts +++ b/apps/sim/tools/utils.test.ts @@ -10,7 +10,7 @@ import { validateToolRequest, } from '@/tools/utils' -vi.mock('@/lib/logs/console-logger', () => ({ +vi.mock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ debug: vi.fn(), info: vi.fn(), diff --git a/apps/sim/tools/utils.ts b/apps/sim/tools/utils.ts index 9f90582234..792da3372c 100644 --- a/apps/sim/tools/utils.ts +++ b/apps/sim/tools/utils.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import { getBaseUrl } from '@/lib/urls/utils' import { useCustomToolsStore } from '@/stores/custom-tools/store' import { useEnvironmentStore } from '@/stores/settings/environment/store' diff --git a/apps/sim/tools/wealthbox/read_contact.ts b/apps/sim/tools/wealthbox/read_contact.ts index d328cc70a8..7d1ceaba0a 100644 --- a/apps/sim/tools/wealthbox/read_contact.ts +++ b/apps/sim/tools/wealthbox/read_contact.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '../types' import type { WealthboxReadParams, WealthboxReadResponse } from './types' diff --git a/apps/sim/tools/wealthbox/read_note.ts b/apps/sim/tools/wealthbox/read_note.ts index 6609199f77..e6ebb6fc27 100644 --- a/apps/sim/tools/wealthbox/read_note.ts +++ b/apps/sim/tools/wealthbox/read_note.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '../types' import type { WealthboxReadParams, WealthboxReadResponse } from './types' diff --git a/apps/sim/tools/wealthbox/read_task.ts b/apps/sim/tools/wealthbox/read_task.ts index f3b087ab4f..8e43d73708 100644 --- a/apps/sim/tools/wealthbox/read_task.ts +++ b/apps/sim/tools/wealthbox/read_task.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '../types' import type { WealthboxReadParams, WealthboxReadResponse } from './types' diff --git a/apps/sim/tools/wealthbox/write_contact.ts b/apps/sim/tools/wealthbox/write_contact.ts index 0cd9d72491..84ca4574e4 100644 --- a/apps/sim/tools/wealthbox/write_contact.ts +++ b/apps/sim/tools/wealthbox/write_contact.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '../types' import type { WealthboxWriteParams, WealthboxWriteResponse } from './types' diff --git a/apps/sim/tools/wealthbox/write_note.ts b/apps/sim/tools/wealthbox/write_note.ts index 78d507d1ca..d0c4aa9bbf 100644 --- a/apps/sim/tools/wealthbox/write_note.ts +++ b/apps/sim/tools/wealthbox/write_note.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '../types' import type { WealthboxWriteParams, WealthboxWriteResponse } from './types' diff --git a/apps/sim/tools/wealthbox/write_task.ts b/apps/sim/tools/wealthbox/write_task.ts index 40cc40166e..bbea3c5634 100644 --- a/apps/sim/tools/wealthbox/write_task.ts +++ b/apps/sim/tools/wealthbox/write_task.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '../types' import type { WealthboxWriteParams, WealthboxWriteResponse } from './types' diff --git a/apps/sim/tools/whatsapp/send_message.ts b/apps/sim/tools/whatsapp/send_message.ts index 4bac6b4223..c5015f0967 100644 --- a/apps/sim/tools/whatsapp/send_message.ts +++ b/apps/sim/tools/whatsapp/send_message.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '@/tools/types' import type { WhatsAppResponse, WhatsAppSendMessageParams } from '@/tools/whatsapp/types' diff --git a/apps/sim/tools/workflow/executor.ts b/apps/sim/tools/workflow/executor.ts index 42b1a085f7..0a61f90144 100644 --- a/apps/sim/tools/workflow/executor.ts +++ b/apps/sim/tools/workflow/executor.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig, ToolResponse } from '@/tools/types' const logger = createLogger('WorkflowExecutorTool') diff --git a/apps/sim/tools/x/user.ts b/apps/sim/tools/x/user.ts index 10cb91cc76..5a19702233 100644 --- a/apps/sim/tools/x/user.ts +++ b/apps/sim/tools/x/user.ts @@ -1,4 +1,4 @@ -import { createLogger } from '@/lib/logs/console-logger' +import { createLogger } from '@/lib/logs/console/logger' import type { ToolConfig } from '@/tools/types' import type { XUser, XUserParams, XUserResponse } from '@/tools/x/types' diff --git a/apps/sim/trigger/workflow-execution.ts b/apps/sim/trigger/workflow-execution.ts index 8fae67f830..64827d976e 100644 --- a/apps/sim/trigger/workflow-execution.ts +++ b/apps/sim/trigger/workflow-execution.ts @@ -1,9 +1,9 @@ import { task } from '@trigger.dev/sdk/v3' import { eq, sql } from 'drizzle-orm' import { v4 as uuidv4 } from 'uuid' -import { createLogger } from '@/lib/logs/console-logger' -import { EnhancedLoggingSession } from '@/lib/logs/enhanced-logging-session' -import { buildTraceSpans } from '@/lib/logs/trace-spans' +import { createLogger } from '@/lib/logs/console/logger' +import { LoggingSession } from '@/lib/logs/execution/logging-session' +import { buildTraceSpans } from '@/lib/logs/execution/trace-spans/trace-spans' import { decryptSecret } from '@/lib/utils' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' import { updateWorkflowRunCounts } from '@/lib/workflows/utils' @@ -37,15 +37,10 @@ export const workflowExecution = task({ executionId, }) - // Initialize enhanced logging session + // Initialize logging session const triggerType = (payload.triggerType as 'api' | 'webhook' | 'schedule' | 'manual' | 'chat') || 'api' - const loggingSession = new EnhancedLoggingSession( - workflowId, - executionId, - triggerType, - requestId - ) + const loggingSession = new LoggingSession(workflowId, executionId, triggerType, requestId) try { // Load workflow data from normalized tables @@ -102,7 +97,7 @@ export const workflowExecution = task({ decryptedEnvVars = Object.fromEntries(decryptedPairs) } - // Start enhanced logging session + // Start logging session await loggingSession.safeStart({ userId: payload.userId, workspaceId: '', // TODO: Get from workflow if needed @@ -127,7 +122,7 @@ export const workflowExecution = task({ {} // workflow variables ) - // Set up enhanced logging on the executor + // Set up logging on the executor loggingSession.setupExecutor(executor) const result = await executor.execute(workflowId) @@ -165,7 +160,7 @@ export const workflowExecution = task({ .where(eq(userStats.userId, payload.userId)) } - // Build trace spans and complete logging session + // Build trace spans and complete logging session (for both success and failure) const { traceSpans, totalDuration } = buildTraceSpans(executionResult) await loggingSession.safeComplete({ diff --git a/apps/sim/vitest.config.ts b/apps/sim/vitest.config.ts index f1d44dc372..f9e6bea21b 100644 --- a/apps/sim/vitest.config.ts +++ b/apps/sim/vitest.config.ts @@ -24,8 +24,8 @@ export default defineConfig({ resolve: { alias: [ { - find: '@/lib/logs/console-logger', - replacement: path.resolve(__dirname, 'lib/logs/console-logger.ts'), + find: '@/lib/logs/console/logger', + replacement: path.resolve(__dirname, 'lib/logs/console/logger.ts'), }, { find: '@/stores/console/store', diff --git a/apps/sim/vitest.setup.ts b/apps/sim/vitest.setup.ts index a99e99c295..0b6e76e5fd 100644 --- a/apps/sim/vitest.setup.ts +++ b/apps/sim/vitest.setup.ts @@ -8,7 +8,7 @@ global.fetch = vi.fn(() => }) ) as any -vi.mock('@/lib/logs/console-logger', () => { +vi.mock('@/lib/logs/console/logger', () => { const createLogger = vi.fn(() => ({ debug: vi.fn(), info: vi.fn(), From 0414aa5f6d092c3767ab19937bc98eedcf01a0e4 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Sat, 26 Jul 2025 16:10:32 -0700 Subject: [PATCH 4/5] refactor(imports): added aliased imports everywhere (#799) * refactor(imports): added aliased imports everywhere * more aliased imports * add barrel exports * add more barrel exports * cleanup --------- Co-authored-by: waleedlatif --- apps/docs/components/ui/block-types.tsx | 4 +- apps/sim/app/(auth)/layout.tsx | 2 +- apps/sim/app/(auth)/login/login-form.test.tsx | 2 +- apps/sim/app/(auth)/login/page.tsx | 4 +- apps/sim/app/(auth)/reset-password/page.tsx | 2 +- apps/sim/app/(auth)/signup/page.tsx | 4 +- .../app/(auth)/signup/signup-form.test.tsx | 2 +- apps/sim/app/(auth)/verify/page.tsx | 2 +- apps/sim/app/(auth)/verify/verify-content.tsx | 2 +- .../(landing)/components/hero-workflow.tsx | 6 +- .../app/(landing)/components/nav-client.tsx | 2 +- .../app/(landing)/components/nav-wrapper.tsx | 6 +- .../(landing)/components/sections/blogs.tsx | 2 +- .../components/sections/features.tsx | 4 +- .../(landing)/components/sections/footer.tsx | 4 +- .../(landing)/components/sections/hero.tsx | 4 +- .../components/sections/integrations.tsx | 4 +- .../components/sections/testimonials.tsx | 2 +- apps/sim/app/(landing)/contributors/page.tsx | 8 +- apps/sim/app/(landing)/landing.tsx | 10 +- apps/sim/app/(landing)/privacy/page.tsx | 6 +- apps/sim/app/(landing)/terms/page.tsx | 6 +- apps/sim/app/(landing)/utils/prefetch.ts | 4 +- .../api/auth/forget-password/route.test.ts | 12 +- .../api/auth/oauth/connections/route.test.ts | 10 +- .../api/auth/oauth/credentials/route.test.ts | 12 +- .../api/auth/oauth/disconnect/route.test.ts | 10 +- .../api/auth/oauth/microsoft/file/route.ts | 2 +- .../api/auth/oauth/microsoft/files/route.ts | 2 +- .../app/api/auth/oauth/token/route.test.ts | 28 ++-- apps/sim/app/api/auth/oauth/token/route.ts | 2 +- apps/sim/app/api/auth/oauth/utils.test.ts | 28 ++-- .../api/auth/oauth/wealthbox/item/route.ts | 2 +- .../api/auth/oauth/wealthbox/items/route.ts | 2 +- .../app/api/auth/reset-password/route.test.ts | 16 +- apps/sim/app/api/auth/reset-password/route.ts | 2 +- .../sim/app/api/chat/[subdomain]/otp/route.ts | 2 +- .../app/api/chat/[subdomain]/route.test.ts | 31 ++-- apps/sim/app/api/chat/[subdomain]/route.ts | 8 +- apps/sim/app/api/chat/edit/[id]/route.test.ts | 26 ++-- apps/sim/app/api/chat/route.test.ts | 24 +-- .../chat/subdomains/validate/route.test.ts | 14 +- apps/sim/app/api/chat/utils.test.ts | 24 +-- apps/sim/app/api/codegen/route.test.ts | 20 +-- apps/sim/app/api/files/delete/route.test.ts | 12 +- apps/sim/app/api/files/parse/route.test.ts | 14 +- .../sim/app/api/files/presigned/route.test.ts | 26 ++-- .../api/files/serve/[...path]/route.test.ts | 10 +- apps/sim/app/api/files/upload/route.test.ts | 12 +- apps/sim/app/api/files/upload/route.ts | 8 +- apps/sim/app/api/folders/[id]/route.test.ts | 36 ++--- apps/sim/app/api/folders/route.test.ts | 34 ++--- .../app/api/function/execute/route.test.ts | 58 ++++---- apps/sim/app/api/jobs/[jobId]/route.ts | 2 +- .../[documentId]/chunks/[chunkId]/route.ts | 2 +- .../[documentId]/chunks/route.test.ts | 18 +-- .../[id]/documents/[documentId]/route.test.ts | 78 +++++----- .../[id]/documents/[documentId]/route.ts | 6 +- .../knowledge/[id]/documents/route.test.ts | 121 +++++++++------ .../app/api/knowledge/[id]/documents/route.ts | 6 +- apps/sim/app/api/knowledge/[id]/route.test.ts | 30 ++-- apps/sim/app/api/knowledge/route.test.ts | 16 +- .../app/api/knowledge/search/route.test.ts | 32 ++-- apps/sim/app/api/knowledge/utils.test.ts | 2 +- apps/sim/app/api/logs/cleanup/route.ts | 2 +- .../organizations/invitations/accept/route.ts | 2 +- .../api/schedules/[id]/status/route.test.ts | 12 +- .../app/api/schedules/execute/route.test.ts | 12 +- apps/sim/app/api/schedules/route.test.ts | 12 +- .../app/api/tools/confluence/pages/route.ts | 2 +- apps/sim/app/api/tools/custom/route.test.ts | 24 +-- .../app/api/tools/linear/projects/route.ts | 2 +- apps/sim/app/api/tools/linear/teams/route.ts | 2 +- .../api/tools/microsoft-teams/chats/route.ts | 2 +- .../api/tools/microsoft-teams/teams/route.ts | 2 +- .../app/api/tools/stagehand/agent/route.ts | 2 +- .../app/api/tools/stagehand/extract/route.ts | 2 +- .../subscription/[id]/transfer/route.test.ts | 16 +- apps/sim/app/api/users/rate-limit/route.ts | 2 +- apps/sim/app/api/webhooks/route.ts | 2 +- .../api/webhooks/trigger/[path]/route.test.ts | 14 +- .../api/workflows/[id]/deploy/route.test.ts | 20 +-- .../app/api/workflows/[id]/deploy/route.ts | 4 +- .../app/api/workflows/[id]/deployed/route.ts | 4 +- .../api/workflows/[id]/execute/route.test.ts | 16 +- .../app/api/workflows/[id]/execute/route.ts | 4 +- apps/sim/app/api/workflows/[id]/log/route.ts | 4 +- .../[id]/revert-to-deployed/route.ts | 4 +- apps/sim/app/api/workflows/[id]/route.test.ts | 28 ++-- .../app/api/workflows/[id]/status/route.ts | 4 +- .../workflows/[id]/variables/route.test.ts | 22 +-- .../workspaces/invitations/[id]/route.test.ts | 2 +- .../api/workspaces/invitations/route.test.ts | 24 +-- apps/sim/app/chat/[subdomain]/chat-client.tsx | 23 +-- .../components/error-state/error-state.tsx | 2 +- .../app/chat/[subdomain]/components/index.ts | 9 ++ .../[subdomain]/components/input/input.tsx | 2 +- .../message-container/message-container.tsx | 5 +- .../components/message/message.tsx | 2 +- .../voice-interface/voice-interface.tsx | 2 +- apps/sim/app/chat/[subdomain]/hooks/index.ts | 2 + .../[subdomain]/hooks/use-chat-streaming.ts | 2 +- apps/sim/app/chat/[subdomain]/page.tsx | 2 +- apps/sim/app/invite/[id]/page.tsx | 2 +- apps/sim/app/invite/invite-error/page.tsx | 3 +- apps/sim/app/layout.tsx | 4 +- apps/sim/app/page.tsx | 2 +- apps/sim/app/unsubscribe/page.tsx | 3 +- .../sim/app/workspace/[workspaceId]/error.tsx | 2 +- .../workspace/[workspaceId]/global-error.tsx | 2 +- .../components/document-loading.tsx | 6 +- .../[id]/[documentId]/components/index.ts | 4 + .../knowledge/[id]/[documentId]/document.tsx | 27 ++-- .../knowledge/[id]/[documentId]/page.tsx | 2 +- .../[workspaceId]/knowledge/[id]/base.tsx | 20 ++- .../knowledge/[id]/components/index.ts | 3 + .../knowledge-base-loading.tsx | 6 +- .../components/upload-modal/upload-modal.tsx | 4 +- .../[workspaceId]/knowledge/[id]/page.tsx | 2 +- .../components/create-modal/create-modal.tsx | 9 +- .../knowledge/components/index.ts | 11 ++ .../knowledge-header/knowledge-header.tsx | 2 +- .../[workspaceId]/knowledge/knowledge.tsx | 16 +- .../[workspaceId]/knowledge/loading.tsx | 6 +- .../[workspaceId]/knowledge/page.tsx | 2 +- .../app/workspace/[workspaceId]/layout.tsx | 4 +- .../components/filters/components/index.ts | 6 + .../components/filters/components/trigger.tsx | 2 +- .../logs/components/filters/filters.tsx | 16 +- .../frozen-canvas/frozen-canvas-modal.tsx | 2 +- .../logs/components/sidebar/sidebar.tsx | 8 +- .../tool-calls/tool-calls-display.tsx | 2 +- .../trace-spans/trace-spans-display.tsx | 2 +- .../app/workspace/[workspaceId]/logs/logs.tsx | 8 +- .../app/workspace/[workspaceId]/logs/page.tsx | 2 +- .../[workspaceId]/templates/[id]/page.tsx | 4 +- .../[workspaceId]/templates/[id]/template.tsx | 4 +- .../[workspaceId]/templates/page.tsx | 4 +- .../[workspaceId]/templates/templates.tsx | 7 +- .../components/chat-deploy/chat-deploy.tsx | 2 +- .../deployment-info/components/index.ts | 4 + .../deployment-info/deployment-info.tsx | 18 ++- .../deploy-modal/components/index.ts | 3 + .../components/deploy-modal/deploy-modal.tsx | 8 +- .../components/deployed-workflow-modal.tsx | 2 +- .../deployment-controls.tsx | 2 +- .../control-bar/components/index.ts | 5 + .../user-avatar-stack/user-avatar-stack.tsx | 6 +- .../components/control-bar/control-bar.tsx | 28 ++-- .../w/[workflowId]/components/index.ts | 10 ++ .../components/loop-node/loop-node.test.tsx | 4 +- .../components/loop-node/loop-node.tsx | 2 +- .../components/panel/components/chat/chat.tsx | 8 +- .../chat/components/chat-modal/chat-modal.tsx | 2 +- .../panel/components/chat/components/index.ts | 3 + .../console-entry/console-entry.tsx | 6 +- .../components/console/components/index.ts | 3 + .../panel/components/console/console.tsx | 2 +- .../copilot-modal/copilot-modal.tsx | 10 +- .../components/copilot/components/index.ts | 5 + .../panel/components/copilot/copilot.tsx | 18 ++- .../components/panel/components/index.ts | 4 + .../w/[workflowId]/components/panel/panel.tsx | 14 +- .../parallel-node/parallel-node.test.tsx | 11 +- .../parallel-node/parallel-node.tsx | 2 +- .../channel-selector-input.tsx | 7 +- .../sub-block/components/checkbox-list.tsx | 2 +- .../components/sub-block/components/code.tsx | 5 +- .../sub-block/components/combobox.tsx | 2 +- .../sub-block/components/condition-input.tsx | 2 +- .../credential-selector.tsx | 4 +- .../sub-block/components/date-input.tsx | 2 +- .../document-selector/document-selector.tsx | 2 +- .../sub-block/components/dropdown.tsx | 2 +- .../sub-block/components/eval-input.tsx | 2 +- .../components/confluence-file-selector.tsx | 2 +- .../components/google-drive-picker.tsx | 2 +- .../file-selector/components/index.ts | 16 ++ .../components/jira-issue-selector.tsx | 4 +- .../components/microsoft-file-selector.tsx | 2 +- .../components/teams-message-selector.tsx | 6 +- .../components/wealthbox-file-selector.tsx | 2 +- .../file-selector/file-selector-input.tsx | 36 ++--- .../sub-block/components/file-upload.tsx | 2 +- .../components/folder-selector-input.tsx | 5 +- .../components/sub-block/components/index.ts | 26 ++++ .../knowledge-base-selector.tsx | 2 +- .../sub-block/components/long-input.tsx | 2 +- .../components/jira-project-selector.tsx | 6 +- .../project-selector-input.tsx | 22 ++- .../components/response/response-format.tsx | 2 +- .../schedule/components/schedule-modal.tsx | 22 +-- .../components/schedule/schedule-config.tsx | 4 +- .../sub-block/components/short-input.tsx | 2 +- .../sub-block/components/slider-input.tsx | 2 +- .../components/starter/input-format.tsx | 2 +- .../sub-block/components/switch.tsx | 2 +- .../components/sub-block/components/table.tsx | 2 +- .../sub-block/components/time-input.tsx | 2 +- .../custom-tool-modal/custom-tool-modal.tsx | 4 +- .../components/tool-credential-selector.tsx | 2 +- .../components/tool-input/tool-input.tsx | 39 ++--- .../components/webhook/components/index.ts | 25 ++++ .../webhook/components/providers/airtable.tsx | 28 ++-- .../webhook/components/providers/discord.tsx | 14 +- .../webhook/components/providers/generic.tsx | 16 +- .../webhook/components/providers/github.tsx | 12 +- .../webhook/components/providers/gmail.tsx | 22 +-- .../webhook/components/providers/index.ts | 10 ++ .../components/providers/microsoftteams.tsx | 14 +- .../webhook/components/providers/slack.tsx | 14 +- .../webhook/components/providers/stripe.tsx | 6 +- .../webhook/components/providers/telegram.tsx | 13 +- .../webhook/components/providers/whatsapp.tsx | 14 +- .../components/webhook/components/ui/index.ts | 9 ++ .../webhook/components/webhook-modal.tsx | 34 +++-- .../sub-block/components/webhook/webhook.tsx | 6 +- .../components/sub-block/sub-block.tsx | 57 ++++---- .../workflow-block/workflow-block.tsx | 11 +- .../workflow-text-editor/workflow-exporter.ts | 2 +- .../workflow-text-editor-modal.tsx | 9 +- .../workflow-text-editor.tsx | 2 +- .../[workspaceId]/w/[workflowId]/layout.tsx | 2 +- .../[workspaceId]/w/[workflowId]/page.tsx | 2 +- .../[workspaceId]/w/[workflowId]/workflow.tsx | 34 +++-- .../w/components/providers/providers.tsx | 2 +- .../components/search-modal/search-modal.tsx | 7 +- .../components/create-menu/create-menu.tsx | 5 +- .../sidebar/components/create-menu/index.ts | 2 + .../folder-tree/components/folder-item.tsx | 2 +- .../folder-tree/components/workflow-item.tsx | 2 +- .../components/folder-tree/folder-tree.tsx | 4 +- .../components/help-modal/help-modal.tsx | 2 +- .../w/components/sidebar/components/index.ts | 11 ++ .../settings-modal/components/index.ts | 9 ++ .../subscription/components/index.ts | 6 + .../components/team-usage-overview.tsx | 2 +- .../components/subscription/subscription.tsx | 25 +++- .../team-management/components/index.ts | 8 + .../components/no-organization-view.tsx | 2 +- .../team-management/team-management.tsx | 35 +++-- .../settings-modal/settings-modal.tsx | 23 +-- .../toolbar-loop-block/toolbar-loop-block.tsx | 2 +- .../toolbar-parallel-block.tsx | 2 +- .../sidebar/components/toolbar/toolbar.tsx | 6 +- .../workspace-selector/workspace-selector.tsx | 2 +- .../w/components/sidebar/sidebar.tsx | 26 ++-- apps/sim/blocks/blocks/index.ts | 1 - apps/sim/blocks/blocks/qdrant.ts | 2 +- apps/sim/blocks/blocks/schedule.ts | 2 +- apps/sim/blocks/blocks/webhook.ts | 2 +- apps/sim/components/emails/index.ts | 8 + apps/sim/components/emails/render-email.ts | 10 +- apps/sim/components/ui/index.ts | 138 ++++++++++++++++++ apps/sim/components/ui/input-otp-form.tsx | 4 +- apps/sim/components/ui/tag-dropdown.test.tsx | 2 +- apps/sim/db/index.ts | 2 +- .../executor/__test-utils__/executor-mocks.ts | 14 +- .../__test-utils__/mock-dependencies.ts | 4 +- .../executor/__test-utils__/test-executor.ts | 4 +- .../executor/handlers/agent/agent-handler.ts | 2 +- .../executor/handlers/api/api-handler.test.ts | 2 +- .../condition/condition-handler.test.ts | 2 +- .../evaluator/evaluator-handler.test.ts | 2 +- .../handlers/generic/generic-handler.test.ts | 2 +- .../handlers/router/router-handler.test.ts | 2 +- apps/sim/executor/index.test.ts | 4 +- apps/sim/hooks/use-user-permissions.ts | 2 +- apps/sim/lib/auth.ts | 10 +- .../lib/autolayout/algorithms/hierarchical.ts | 2 +- apps/sim/lib/autolayout/algorithms/smart.ts | 4 +- apps/sim/lib/autolayout/service.ts | 14 +- .../lib/billing/core/billing-periods.test.ts | 5 +- apps/sim/lib/billing/core/billing.test.ts | 12 +- apps/sim/lib/billing/index.ts | 24 +-- apps/sim/lib/copilot/config.ts | 2 +- apps/sim/lib/copilot/service.ts | 16 +- apps/sim/lib/copilot/tools.ts | 2 +- apps/sim/lib/email/mailer.test.ts | 10 +- apps/sim/lib/email/unsubscribe.test.ts | 4 +- apps/sim/lib/file-parsers/index.test.ts | 60 +++----- apps/sim/lib/file-parsers/index.ts | 12 +- apps/sim/lib/logs/execution/logger.ts | 6 +- apps/sim/lib/oauth/oauth.test.ts | 4 +- apps/sim/lib/tokenization/utils.ts | 10 +- apps/sim/lib/uploads/blob/blob-client.test.ts | 50 ++++--- apps/sim/lib/uploads/blob/index.ts | 2 +- apps/sim/lib/uploads/index.ts | 8 +- apps/sim/lib/uploads/s3/index.ts | 2 +- apps/sim/lib/uploads/s3/s3-client.test.ts | 72 ++++++--- apps/sim/lib/utils.test.ts | 2 +- apps/sim/lib/workflows/db-helpers.test.ts | 4 +- apps/sim/providers/anthropic/index.ts | 11 +- apps/sim/providers/azure-openai/index.ts | 11 +- apps/sim/providers/cerebras/index.ts | 9 +- apps/sim/providers/deepseek/index.ts | 11 +- apps/sim/providers/google/index.ts | 15 +- apps/sim/providers/groq/index.ts | 9 +- apps/sim/providers/index.ts | 4 +- apps/sim/providers/ollama/index.ts | 9 +- apps/sim/providers/openai/index.ts | 15 +- apps/sim/providers/utils.test.ts | 2 +- apps/sim/providers/utils.ts | 26 ++-- apps/sim/providers/xai/index.ts | 11 +- apps/sim/scripts/insert-test-workflow.ts | 4 +- apps/sim/scripts/migrate-workflow-states.ts | 4 +- apps/sim/serializer/index.test.ts | 6 +- apps/sim/serializer/index.ts | 2 +- apps/sim/services/queue/RateLimiter.test.ts | 4 +- apps/sim/services/queue/RateLimiter.ts | 2 +- apps/sim/services/queue/index.ts | 6 +- apps/sim/socket-server/config/socket.ts | 2 +- apps/sim/socket-server/database/operations.ts | 4 +- apps/sim/socket-server/handlers/connection.ts | 8 +- apps/sim/socket-server/handlers/index.ts | 14 +- apps/sim/socket-server/handlers/operations.ts | 14 +- apps/sim/socket-server/handlers/presence.ts | 8 +- apps/sim/socket-server/handlers/subblocks.ts | 12 +- apps/sim/socket-server/handlers/workflow.ts | 10 +- apps/sim/socket-server/index.test.ts | 40 ++--- apps/sim/socket-server/index.ts | 12 +- .../socket-server/middleware/permissions.ts | 8 +- apps/sim/socket-server/routes/http.ts | 2 +- apps/sim/stores/constants.ts | 4 - apps/sim/stores/copilot/index.ts | 4 +- apps/sim/stores/copilot/store.ts | 2 +- apps/sim/stores/custom-tools/store.ts | 2 +- apps/sim/stores/execution/store.ts | 4 +- apps/sim/stores/folders/store.ts | 2 +- apps/sim/stores/index.ts | 20 +-- apps/sim/stores/logs/filters/store.ts | 2 +- apps/sim/stores/ollama/store.ts | 2 +- apps/sim/stores/organization/index.ts | 6 +- apps/sim/stores/organization/store.ts | 13 +- apps/sim/stores/organization/utils.ts | 2 +- apps/sim/stores/panel/chat/store.ts | 2 +- apps/sim/stores/panel/console/store.test.ts | 4 +- apps/sim/stores/panel/console/store.ts | 4 +- apps/sim/stores/panel/store.ts | 2 +- apps/sim/stores/panel/variables/store.ts | 2 +- apps/sim/stores/settings/environment/store.ts | 4 +- apps/sim/stores/settings/general/store.ts | 2 +- apps/sim/stores/subscription/store.ts | 2 +- apps/sim/stores/workflows/index.ts | 22 +-- apps/sim/stores/workflows/middleware.ts | 6 +- apps/sim/stores/workflows/registry/store.ts | 16 +- apps/sim/stores/workflows/server-utils.ts | 2 +- apps/sim/stores/workflows/subblock/store.ts | 7 +- apps/sim/stores/workflows/utils.ts | 4 +- .../stores/workflows/workflow/store.test.ts | 6 +- apps/sim/stores/workflows/workflow/store.ts | 22 ++- apps/sim/stores/workflows/workflow/types.ts | 2 +- .../stores/workflows/workflow/utils.test.ts | 4 +- apps/sim/stores/workflows/workflow/utils.ts | 2 +- apps/sim/stores/workflows/yaml/importer.ts | 2 +- apps/sim/stores/workflows/yaml/store.ts | 4 +- apps/sim/tools/__test-utils__/test-tools.ts | 2 +- apps/sim/tools/blocks/edit-workflow.ts | 2 +- apps/sim/tools/blocks/get-all.ts | 2 +- apps/sim/tools/blocks/get-metadata.ts | 2 +- apps/sim/tools/blocks/get-yaml-structure.ts | 2 +- apps/sim/tools/elevenlabs/tts.ts | 4 +- apps/sim/tools/elevenlabs/types.ts | 2 +- apps/sim/tools/params.test.ts | 2 +- apps/sim/tools/params.ts | 2 +- apps/sim/tools/qdrant/fetch_points.ts | 4 +- apps/sim/tools/qdrant/index.ts | 6 +- apps/sim/tools/qdrant/search_vector.ts | 4 +- apps/sim/tools/qdrant/types.ts | 2 +- apps/sim/tools/qdrant/upsert_points.ts | 4 +- apps/sim/tools/registry.ts | 4 +- apps/sim/tools/wealthbox/read_contact.ts | 4 +- apps/sim/tools/wealthbox/read_note.ts | 4 +- apps/sim/tools/wealthbox/read_task.ts | 4 +- apps/sim/tools/wealthbox/types.ts | 3 +- apps/sim/tools/wealthbox/write_contact.ts | 4 +- apps/sim/tools/wealthbox/write_note.ts | 4 +- apps/sim/tools/wealthbox/write_task.ts | 4 +- 378 files changed, 2046 insertions(+), 1425 deletions(-) create mode 100644 apps/sim/app/chat/[subdomain]/components/index.ts create mode 100644 apps/sim/app/chat/[subdomain]/hooks/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/knowledge/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/logs/components/filters/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/ui/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/index.ts create mode 100644 apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components/index.ts delete mode 100644 apps/sim/blocks/blocks/index.ts create mode 100644 apps/sim/components/emails/index.ts create mode 100644 apps/sim/components/ui/index.ts diff --git a/apps/docs/components/ui/block-types.tsx b/apps/docs/components/ui/block-types.tsx index 96937dc728..c76ecb92d7 100644 --- a/apps/docs/components/ui/block-types.tsx +++ b/apps/docs/components/ui/block-types.tsx @@ -1,4 +1,3 @@ -import { cn } from '@/lib/utils' import { AgentIcon, ApiIcon, @@ -7,7 +6,8 @@ import { ConditionalIcon, ConnectIcon, ResponseIcon, -} from '../icons' +} from '@/components/icons' +import { cn } from '@/lib/utils' // Custom Feature component specifically for BlockTypes to handle the 6-item layout const BlockFeature = ({ diff --git a/apps/sim/app/(auth)/layout.tsx b/apps/sim/app/(auth)/layout.tsx index cdc4f93b9c..76a3726817 100644 --- a/apps/sim/app/(auth)/layout.tsx +++ b/apps/sim/app/(auth)/layout.tsx @@ -2,7 +2,7 @@ import Image from 'next/image' import Link from 'next/link' -import { GridPattern } from '../(landing)/components/grid-pattern' +import { GridPattern } from '@/app/(landing)/components/grid-pattern' export default function AuthLayout({ children }: { children: React.ReactNode }) { return ( diff --git a/apps/sim/app/(auth)/login/login-form.test.tsx b/apps/sim/app/(auth)/login/login-form.test.tsx index a40edfd88f..6ab8cf5c96 100644 --- a/apps/sim/app/(auth)/login/login-form.test.tsx +++ b/apps/sim/app/(auth)/login/login-form.test.tsx @@ -6,7 +6,7 @@ import { act, fireEvent, render, screen, waitFor } from '@testing-library/react' import { useRouter, useSearchParams } from 'next/navigation' import { beforeEach, describe, expect, it, vi } from 'vitest' import { client } from '@/lib/auth-client' -import LoginPage from './login-form' +import LoginPage from '@/app/(auth)/login/login-form' vi.mock('next/navigation', () => ({ useRouter: vi.fn(), diff --git a/apps/sim/app/(auth)/login/page.tsx b/apps/sim/app/(auth)/login/page.tsx index 5d4ce8f7d5..91648a5e00 100644 --- a/apps/sim/app/(auth)/login/page.tsx +++ b/apps/sim/app/(auth)/login/page.tsx @@ -1,5 +1,5 @@ -import { getOAuthProviderStatus } from '../components/oauth-provider-checker' -import LoginForm from './login-form' +import { getOAuthProviderStatus } from '@/app/(auth)/components/oauth-provider-checker' +import LoginForm from '@/app/(auth)/login/login-form' // Force dynamic rendering to avoid prerender errors with search params export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/(auth)/reset-password/page.tsx b/apps/sim/app/(auth)/reset-password/page.tsx index 378c0c3b0b..d842898a3b 100644 --- a/apps/sim/app/(auth)/reset-password/page.tsx +++ b/apps/sim/app/(auth)/reset-password/page.tsx @@ -12,7 +12,7 @@ import { CardTitle, } from '@/components/ui/card' import { createLogger } from '@/lib/logs/console/logger' -import { SetNewPasswordForm } from './reset-password-form' +import { SetNewPasswordForm } from '@/app/(auth)/reset-password/reset-password-form' const logger = createLogger('ResetPasswordPage') diff --git a/apps/sim/app/(auth)/signup/page.tsx b/apps/sim/app/(auth)/signup/page.tsx index c415382ef2..3fededdd14 100644 --- a/apps/sim/app/(auth)/signup/page.tsx +++ b/apps/sim/app/(auth)/signup/page.tsx @@ -1,6 +1,6 @@ import { env, isTruthy } from '@/lib/env' -import { getOAuthProviderStatus } from '../components/oauth-provider-checker' -import SignupForm from './signup-form' +import { getOAuthProviderStatus } from '@/app/(auth)/components/oauth-provider-checker' +import SignupForm from '@/app/(auth)/signup/signup-form' // Force dynamic rendering to avoid prerender errors with search params export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/(auth)/signup/signup-form.test.tsx b/apps/sim/app/(auth)/signup/signup-form.test.tsx index e235aa7337..adb4b025fb 100644 --- a/apps/sim/app/(auth)/signup/signup-form.test.tsx +++ b/apps/sim/app/(auth)/signup/signup-form.test.tsx @@ -6,7 +6,7 @@ import { act, fireEvent, render, screen, waitFor } from '@testing-library/react' import { useRouter, useSearchParams } from 'next/navigation' import { beforeEach, describe, expect, it, vi } from 'vitest' import { client } from '@/lib/auth-client' -import SignupPage from './signup-form' +import SignupPage from '@/app/(auth)/signup/signup-form' vi.mock('next/navigation', () => ({ useRouter: vi.fn(), diff --git a/apps/sim/app/(auth)/verify/page.tsx b/apps/sim/app/(auth)/verify/page.tsx index 372c6fd040..55c185675d 100644 --- a/apps/sim/app/(auth)/verify/page.tsx +++ b/apps/sim/app/(auth)/verify/page.tsx @@ -1,7 +1,7 @@ import { env } from '@/lib/env' import { isProd } from '@/lib/environment' import { getBaseUrl } from '@/lib/urls/utils' -import { VerifyContent } from './verify-content' +import { VerifyContent } from '@/app/(auth)/verify/verify-content' // Force dynamic rendering to avoid prerender errors with search params export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/(auth)/verify/verify-content.tsx b/apps/sim/app/(auth)/verify/verify-content.tsx index 6d5d73b0f4..4e6822db16 100644 --- a/apps/sim/app/(auth)/verify/verify-content.tsx +++ b/apps/sim/app/(auth)/verify/verify-content.tsx @@ -4,7 +4,7 @@ import { Suspense, useEffect, useState } from 'react' import { Button } from '@/components/ui/button' import { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp' import { cn } from '@/lib/utils' -import { useVerification } from './use-verification' +import { useVerification } from '@/app/(auth)/verify/use-verification' interface VerifyContentProps { hasResendKey: boolean diff --git a/apps/sim/app/(landing)/components/hero-workflow.tsx b/apps/sim/app/(landing)/components/hero-workflow.tsx index 727847dff5..bb0b785ede 100644 --- a/apps/sim/app/(landing)/components/hero-workflow.tsx +++ b/apps/sim/app/(landing)/components/hero-workflow.tsx @@ -17,9 +17,9 @@ import ReactFlow, { } from 'reactflow' import 'reactflow/dist/style.css' -import { HeroBlock } from './hero-block' -import { HeroEdge } from './hero-edge' -import { useWindowSize } from './use-window-size' +import { HeroBlock } from '@/app/(landing)/components/hero-block' +import { HeroEdge } from '@/app/(landing)/components/hero-edge' +import { useWindowSize } from '@/app/(landing)/components/use-window-size' const nodeTypes: NodeTypes = { heroBlock: HeroBlock } const edgeTypes: EdgeTypes = { heroEdge: HeroEdge } diff --git a/apps/sim/app/(landing)/components/nav-client.tsx b/apps/sim/app/(landing)/components/nav-client.tsx index 9c3096108b..1765a0c264 100644 --- a/apps/sim/app/(landing)/components/nav-client.tsx +++ b/apps/sim/app/(landing)/components/nav-client.tsx @@ -15,7 +15,7 @@ import { SheetTitle, SheetTrigger, } from '@/components/ui/sheet' -import { usePrefetchOnHover } from '../utils/prefetch' +import { usePrefetchOnHover } from '@/app/(landing)/utils/prefetch' // --- Framer Motion Variants --- const desktopNavContainerVariants = { diff --git a/apps/sim/app/(landing)/components/nav-wrapper.tsx b/apps/sim/app/(landing)/components/nav-wrapper.tsx index a2a4765cc0..1cafe6e7d5 100644 --- a/apps/sim/app/(landing)/components/nav-wrapper.tsx +++ b/apps/sim/app/(landing)/components/nav-wrapper.tsx @@ -3,9 +3,9 @@ import { useEffect, useState } from 'react' import { AnimatePresence, motion } from 'framer-motion' import { usePathname } from 'next/navigation' -import { getFormattedGitHubStars } from '../actions/github' -import GitHubStarsClient from './github-stars-client' -import NavClient from './nav-client' +import { getFormattedGitHubStars } from '@/app/(landing)/actions/github' +import GitHubStarsClient from '@/app/(landing)/components/github-stars-client' +import NavClient from '@/app/(landing)/components/nav-client' interface NavWrapperProps { onOpenTypeformLink: () => void diff --git a/apps/sim/app/(landing)/components/sections/blogs.tsx b/apps/sim/app/(landing)/components/sections/blogs.tsx index 7052af57da..48ffb32d17 100644 --- a/apps/sim/app/(landing)/components/sections/blogs.tsx +++ b/apps/sim/app/(landing)/components/sections/blogs.tsx @@ -1,7 +1,7 @@ 'use client' import { motion } from 'framer-motion' -import { BlogCard } from '../blog-card' +import { BlogCard } from '@/app/(landing)/components/blog-card' function Blogs() { return ( diff --git a/apps/sim/app/(landing)/components/sections/features.tsx b/apps/sim/app/(landing)/components/sections/features.tsx index 52bbb12c78..128f0ccacb 100644 --- a/apps/sim/app/(landing)/components/sections/features.tsx +++ b/apps/sim/app/(landing)/components/sections/features.tsx @@ -18,8 +18,8 @@ import 'reactflow/dist/style.css' import { AgentIcon, ConnectIcon, StartIcon } from '@/components/icons' import { cn } from '@/lib/utils' -import { DotPattern } from '../dot-pattern' -import { HeroBlock } from '../hero-block' +import { DotPattern } from '@/app/(landing)/components/dot-pattern' +import { HeroBlock } from '@/app/(landing)/components/hero-block' // --- Types --- type Feature = { diff --git a/apps/sim/app/(landing)/components/sections/footer.tsx b/apps/sim/app/(landing)/components/sections/footer.tsx index 0a957c6011..9e2b85fe6a 100644 --- a/apps/sim/app/(landing)/components/sections/footer.tsx +++ b/apps/sim/app/(landing)/components/sections/footer.tsx @@ -6,8 +6,8 @@ import { useRouter } from 'next/navigation' import { DiscordIcon, GithubIcon, xIcon as XIcon } from '@/components/icons' import { Button } from '@/components/ui/button' import { useSession } from '@/lib/auth-client' -import { usePrefetchOnHover } from '../../utils/prefetch' -import useIsMobile from '../hooks/use-is-mobile' +import useIsMobile from '@/app/(landing)/components/hooks/use-is-mobile' +import { usePrefetchOnHover } from '@/app/(landing)/utils/prefetch' function Footer() { const router = useRouter() diff --git a/apps/sim/app/(landing)/components/sections/hero.tsx b/apps/sim/app/(landing)/components/sections/hero.tsx index e822888b7c..c33f17e914 100644 --- a/apps/sim/app/(landing)/components/sections/hero.tsx +++ b/apps/sim/app/(landing)/components/sections/hero.tsx @@ -5,8 +5,8 @@ import { Command, CornerDownLeft } from 'lucide-react' import { useRouter } from 'next/navigation' import { Button } from '@/components/ui/button' import { useSession } from '@/lib/auth-client' -import { GridPattern } from '../grid-pattern' -import HeroWorkflowProvider from '../hero-workflow' +import { GridPattern } from '@/app/(landing)/components/grid-pattern' +import HeroWorkflowProvider from '@/app/(landing)/components/hero-workflow' function Hero() { const router = useRouter() diff --git a/apps/sim/app/(landing)/components/sections/integrations.tsx b/apps/sim/app/(landing)/components/sections/integrations.tsx index ea472bef17..1ed12806fd 100644 --- a/apps/sim/app/(landing)/components/sections/integrations.tsx +++ b/apps/sim/app/(landing)/components/sections/integrations.tsx @@ -3,9 +3,9 @@ import { motion } from 'framer-motion' import { GitBranch, RefreshCcw } from 'lucide-react' import ReactFlow, { ConnectionLineType, Position, ReactFlowProvider } from 'reactflow' +import { DotPattern } from '@/app/(landing)/components/dot-pattern' +import { HeroBlock } from '@/app/(landing)/components/hero-block' import { OrbitingCircles } from '@/app/(landing)/components/magicui/orbiting-circles' -import { DotPattern } from '../dot-pattern' -import { HeroBlock } from '../hero-block' function Integrations() { return ( diff --git a/apps/sim/app/(landing)/components/sections/testimonials.tsx b/apps/sim/app/(landing)/components/sections/testimonials.tsx index 0bad46f0a5..465ce9f7aa 100644 --- a/apps/sim/app/(landing)/components/sections/testimonials.tsx +++ b/apps/sim/app/(landing)/components/sections/testimonials.tsx @@ -1,8 +1,8 @@ 'use client' import { motion } from 'framer-motion' +import useIsMobile from '@/app/(landing)/components/hooks/use-is-mobile' import { Marquee } from '@/app/(landing)/components/magicui/marquee' -import useIsMobile from '../hooks/use-is-mobile' const X_TESTIMONIALS = [ { diff --git a/apps/sim/app/(landing)/contributors/page.tsx b/apps/sim/app/(landing)/contributors/page.tsx index cd600a4b26..19e7aca157 100644 --- a/apps/sim/app/(landing)/contributors/page.tsx +++ b/apps/sim/app/(landing)/contributors/page.tsx @@ -26,10 +26,10 @@ import { import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' import { Button } from '@/components/ui/button' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' -import { GridPattern } from '../components/grid-pattern' -import NavWrapper from '../components/nav-wrapper' -import Footer from '../components/sections/footer' -import { getCachedContributorsData, prefetchContributorsData } from '../utils/prefetch' +import { GridPattern } from '@/app/(landing)/components/grid-pattern' +import NavWrapper from '@/app/(landing)/components/nav-wrapper' +import Footer from '@/app/(landing)/components/sections/footer' +import { getCachedContributorsData, prefetchContributorsData } from '@/app/(landing)/utils/prefetch' interface Contributor { login: string diff --git a/apps/sim/app/(landing)/landing.tsx b/apps/sim/app/(landing)/landing.tsx index 1965b454d2..e57ed86c19 100644 --- a/apps/sim/app/(landing)/landing.tsx +++ b/apps/sim/app/(landing)/landing.tsx @@ -1,10 +1,10 @@ 'use client' -import NavWrapper from './components/nav-wrapper' -import Footer from './components/sections/footer' -import Hero from './components/sections/hero' -import Integrations from './components/sections/integrations' -import Testimonials from './components/sections/testimonials' +import NavWrapper from '@/app/(landing)/components/nav-wrapper' +import Footer from '@/app/(landing)/components/sections/footer' +import Hero from '@/app/(landing)/components/sections/hero' +import Integrations from '@/app/(landing)/components/sections/integrations' +import Testimonials from '@/app/(landing)/components/sections/testimonials' export default function Landing() { const handleOpenTypeformLink = () => { diff --git a/apps/sim/app/(landing)/privacy/page.tsx b/apps/sim/app/(landing)/privacy/page.tsx index 09d3ba85c6..2912a2c688 100644 --- a/apps/sim/app/(landing)/privacy/page.tsx +++ b/apps/sim/app/(landing)/privacy/page.tsx @@ -1,9 +1,9 @@ 'use client' import Link from 'next/link' -import { GridPattern } from '../components/grid-pattern' -import NavWrapper from '../components/nav-wrapper' -import Footer from '../components/sections/footer' +import { GridPattern } from '@/app/(landing)/components/grid-pattern' +import NavWrapper from '@/app/(landing)/components/nav-wrapper' +import Footer from '@/app/(landing)/components/sections/footer' export default function PrivacyPolicy() { const handleOpenTypeformLink = () => { diff --git a/apps/sim/app/(landing)/terms/page.tsx b/apps/sim/app/(landing)/terms/page.tsx index 1acfbba2f6..8b730225e8 100644 --- a/apps/sim/app/(landing)/terms/page.tsx +++ b/apps/sim/app/(landing)/terms/page.tsx @@ -1,9 +1,9 @@ 'use client' import Link from 'next/link' -import { GridPattern } from '../components/grid-pattern' -import NavWrapper from '../components/nav-wrapper' -import Footer from '../components/sections/footer' +import { GridPattern } from '@/app/(landing)/components/grid-pattern' +import NavWrapper from '@/app/(landing)/components/nav-wrapper' +import Footer from '@/app/(landing)/components/sections/footer' export default function TermsOfService() { const handleOpenTypeformLink = () => { diff --git a/apps/sim/app/(landing)/utils/prefetch.ts b/apps/sim/app/(landing)/utils/prefetch.ts index db02cc9d5a..1c8e9fe379 100644 --- a/apps/sim/app/(landing)/utils/prefetch.ts +++ b/apps/sim/app/(landing)/utils/prefetch.ts @@ -1,6 +1,6 @@ // Utility for prefetching and caching contributors page data -import { getCommitsData, getContributors, getRepositoryStats } from '../actions/github' -import { generateActivityData, generateCommitTimelineData } from './github' +import { getCommitsData, getContributors, getRepositoryStats } from '@/app/(landing)/actions/github' +import { generateActivityData, generateCommitTimelineData } from '@/app/(landing)/utils/github' interface Contributor { login: string diff --git a/apps/sim/app/api/auth/forget-password/route.test.ts b/apps/sim/app/api/auth/forget-password/route.test.ts index e9467853d5..e4d54900e0 100644 --- a/apps/sim/app/api/auth/forget-password/route.test.ts +++ b/apps/sim/app/api/auth/forget-password/route.test.ts @@ -27,7 +27,7 @@ describe('Forget Password API Route', () => { redirectTo: 'https://example.com/reset', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/forget-password/route') const response = await POST(req) const data = await response.json() @@ -56,7 +56,7 @@ describe('Forget Password API Route', () => { email: 'test@example.com', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/forget-password/route') const response = await POST(req) const data = await response.json() @@ -79,7 +79,7 @@ describe('Forget Password API Route', () => { const req = createMockRequest('POST', {}) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/forget-password/route') const response = await POST(req) const data = await response.json() @@ -98,7 +98,7 @@ describe('Forget Password API Route', () => { email: '', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/forget-password/route') const response = await POST(req) const data = await response.json() @@ -126,7 +126,7 @@ describe('Forget Password API Route', () => { email: 'nonexistent@example.com', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/forget-password/route') const response = await POST(req) const data = await response.json() @@ -156,7 +156,7 @@ describe('Forget Password API Route', () => { email: 'test@example.com', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/forget-password/route') const response = await POST(req) const data = await response.json() diff --git a/apps/sim/app/api/auth/oauth/connections/route.test.ts b/apps/sim/app/api/auth/oauth/connections/route.test.ts index c038134a02..16797efb13 100644 --- a/apps/sim/app/api/auth/oauth/connections/route.test.ts +++ b/apps/sim/app/api/auth/oauth/connections/route.test.ts @@ -96,7 +96,7 @@ describe('OAuth Connections API Route', () => { mockDb.limit.mockResolvedValueOnce(mockUserRecord) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/connections/route') const response = await GET(req) const data = await response.json() @@ -121,7 +121,7 @@ describe('OAuth Connections API Route', () => { mockGetSession.mockResolvedValueOnce(null) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/connections/route') const response = await GET(req) const data = await response.json() @@ -146,7 +146,7 @@ describe('OAuth Connections API Route', () => { mockDb.limit.mockResolvedValueOnce([]) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/connections/route') const response = await GET(req) const data = await response.json() @@ -165,7 +165,7 @@ describe('OAuth Connections API Route', () => { mockDb.where.mockRejectedValueOnce(new Error('Database error')) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/connections/route') const response = await GET(req) const data = await response.json() @@ -209,7 +209,7 @@ describe('OAuth Connections API Route', () => { mockDb.limit.mockResolvedValueOnce([]) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/connections/route') const response = await GET(req) const data = await response.json() diff --git a/apps/sim/app/api/auth/oauth/credentials/route.test.ts b/apps/sim/app/api/auth/oauth/credentials/route.test.ts index 497b668cf1..30877f1744 100644 --- a/apps/sim/app/api/auth/oauth/credentials/route.test.ts +++ b/apps/sim/app/api/auth/oauth/credentials/route.test.ts @@ -111,7 +111,7 @@ describe('OAuth Credentials API Route', () => { const req = createMockRequestWithQuery('GET', '?provider=google-email') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/credentials/route') const response = await GET(req) const data = await response.json() @@ -135,7 +135,7 @@ describe('OAuth Credentials API Route', () => { const req = createMockRequestWithQuery('GET', '?provider=google') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/credentials/route') const response = await GET(req) const data = await response.json() @@ -152,7 +152,7 @@ describe('OAuth Credentials API Route', () => { const req = createMockRequestWithQuery('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/credentials/route') const response = await GET(req) const data = await response.json() @@ -177,7 +177,7 @@ describe('OAuth Credentials API Route', () => { const req = createMockRequestWithQuery('GET', '?provider=github') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/credentials/route') const response = await GET(req) const data = await response.json() @@ -220,7 +220,7 @@ describe('OAuth Credentials API Route', () => { const req = createMockRequestWithQuery('GET', '?provider=google') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/credentials/route') const response = await GET(req) const data = await response.json() @@ -244,7 +244,7 @@ describe('OAuth Credentials API Route', () => { const req = createMockRequestWithQuery('GET', '?provider=google') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/credentials/route') const response = await GET(req) const data = await response.json() diff --git a/apps/sim/app/api/auth/oauth/disconnect/route.test.ts b/apps/sim/app/api/auth/oauth/disconnect/route.test.ts index d368694b24..f4fa9cd08c 100644 --- a/apps/sim/app/api/auth/oauth/disconnect/route.test.ts +++ b/apps/sim/app/api/auth/oauth/disconnect/route.test.ts @@ -68,7 +68,7 @@ describe('OAuth Disconnect API Route', () => { provider: 'google', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/disconnect/route') const response = await POST(req) const data = await response.json() @@ -91,7 +91,7 @@ describe('OAuth Disconnect API Route', () => { providerId: 'google-email', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/disconnect/route') const response = await POST(req) const data = await response.json() @@ -108,7 +108,7 @@ describe('OAuth Disconnect API Route', () => { provider: 'google', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/disconnect/route') const response = await POST(req) const data = await response.json() @@ -125,7 +125,7 @@ describe('OAuth Disconnect API Route', () => { const req = createMockRequest('POST', {}) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/disconnect/route') const response = await POST(req) const data = await response.json() @@ -147,7 +147,7 @@ describe('OAuth Disconnect API Route', () => { provider: 'google', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/disconnect/route') const response = await POST(req) const data = await response.json() diff --git a/apps/sim/app/api/auth/oauth/microsoft/file/route.ts b/apps/sim/app/api/auth/oauth/microsoft/file/route.ts index a85403c6a5..1242c850a2 100644 --- a/apps/sim/app/api/auth/oauth/microsoft/file/route.ts +++ b/apps/sim/app/api/auth/oauth/microsoft/file/route.ts @@ -2,9 +2,9 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' +import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' -import { refreshAccessTokenIfNeeded } from '../../utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/microsoft/files/route.ts b/apps/sim/app/api/auth/oauth/microsoft/files/route.ts index 6b02f35bd1..ebcbc79703 100644 --- a/apps/sim/app/api/auth/oauth/microsoft/files/route.ts +++ b/apps/sim/app/api/auth/oauth/microsoft/files/route.ts @@ -2,9 +2,9 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' +import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' -import { refreshAccessTokenIfNeeded } from '../../utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/token/route.test.ts b/apps/sim/app/api/auth/oauth/token/route.test.ts index b83ed0ee81..01a6d483e7 100644 --- a/apps/sim/app/api/auth/oauth/token/route.test.ts +++ b/apps/sim/app/api/auth/oauth/token/route.test.ts @@ -28,7 +28,7 @@ describe('OAuth Token API Routes', () => { randomUUID: vi.fn().mockReturnValue(mockUUID), }) - vi.doMock('../utils', () => ({ + vi.doMock('@/app/api/auth/oauth/utils', () => ({ getUserId: mockGetUserId, getCredential: mockGetCredential, refreshTokenIfNeeded: mockRefreshTokenIfNeeded, @@ -67,7 +67,7 @@ describe('OAuth Token API Routes', () => { }) // Import handler after setting up mocks - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/token/route') // Call handler const response = await POST(req) @@ -102,7 +102,7 @@ describe('OAuth Token API Routes', () => { workflowId: 'workflow-id', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/token/route') const response = await POST(req) const data = await response.json() @@ -121,7 +121,7 @@ describe('OAuth Token API Routes', () => { it('should handle missing credentialId', async () => { const req = createMockRequest('POST', {}) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/token/route') const response = await POST(req) const data = await response.json() @@ -138,7 +138,7 @@ describe('OAuth Token API Routes', () => { credentialId: 'credential-id', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/token/route') const response = await POST(req) const data = await response.json() @@ -155,7 +155,7 @@ describe('OAuth Token API Routes', () => { workflowId: 'nonexistent-workflow-id', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/token/route') const response = await POST(req) const data = await response.json() @@ -172,7 +172,7 @@ describe('OAuth Token API Routes', () => { credentialId: 'nonexistent-credential-id', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/token/route') const response = await POST(req) const data = await response.json() @@ -196,7 +196,7 @@ describe('OAuth Token API Routes', () => { credentialId: 'credential-id', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/oauth/token/route') const response = await POST(req) const data = await response.json() @@ -228,7 +228,7 @@ describe('OAuth Token API Routes', () => { 'http://localhost:3000/api/auth/oauth/token?credentialId=credential-id' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/token/route') const response = await GET(req as any) const data = await response.json() @@ -244,7 +244,7 @@ describe('OAuth Token API Routes', () => { it('should handle missing credentialId', async () => { const req = new Request('http://localhost:3000/api/auth/oauth/token') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/token/route') const response = await GET(req as any) const data = await response.json() @@ -261,7 +261,7 @@ describe('OAuth Token API Routes', () => { 'http://localhost:3000/api/auth/oauth/token?credentialId=credential-id' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/token/route') const response = await GET(req as any) const data = await response.json() @@ -278,7 +278,7 @@ describe('OAuth Token API Routes', () => { 'http://localhost:3000/api/auth/oauth/token?credentialId=nonexistent-credential-id' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/token/route') const response = await GET(req as any) const data = await response.json() @@ -300,7 +300,7 @@ describe('OAuth Token API Routes', () => { 'http://localhost:3000/api/auth/oauth/token?credentialId=credential-id' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/token/route') const response = await GET(req as any) const data = await response.json() @@ -325,7 +325,7 @@ describe('OAuth Token API Routes', () => { 'http://localhost:3000/api/auth/oauth/token?credentialId=credential-id' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/auth/oauth/token/route') const response = await GET(req as any) const data = await response.json() diff --git a/apps/sim/app/api/auth/oauth/token/route.ts b/apps/sim/app/api/auth/oauth/token/route.ts index 64ae988141..d9628d2cb2 100644 --- a/apps/sim/app/api/auth/oauth/token/route.ts +++ b/apps/sim/app/api/auth/oauth/token/route.ts @@ -1,6 +1,6 @@ import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' -import { getCredential, getUserId, refreshTokenIfNeeded } from '../utils' +import { getCredential, getUserId, refreshTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/utils.test.ts b/apps/sim/app/api/auth/oauth/utils.test.ts index 6fad5df7ab..7255572948 100644 --- a/apps/sim/app/api/auth/oauth/utils.test.ts +++ b/apps/sim/app/api/auth/oauth/utils.test.ts @@ -50,7 +50,7 @@ describe('OAuth Utils', () => { describe('getUserId', () => { it('should get user ID from session when no workflowId is provided', async () => { - const { getUserId } = await import('./utils') + const { getUserId } = await import('@/app/api/auth/oauth/utils') const userId = await getUserId('request-id') @@ -60,7 +60,7 @@ describe('OAuth Utils', () => { it('should get user ID from workflow when workflowId is provided', async () => { mockDb.limit.mockReturnValueOnce([{ userId: 'workflow-owner-id' }]) - const { getUserId } = await import('./utils') + const { getUserId } = await import('@/app/api/auth/oauth/utils') const userId = await getUserId('request-id', 'workflow-id') @@ -76,7 +76,7 @@ describe('OAuth Utils', () => { getSession: vi.fn().mockResolvedValue(null), })) - const { getUserId } = await import('./utils') + const { getUserId } = await import('@/app/api/auth/oauth/utils') const userId = await getUserId('request-id') @@ -87,7 +87,7 @@ describe('OAuth Utils', () => { it('should return undefined if workflow is not found', async () => { mockDb.limit.mockReturnValueOnce([]) - const { getUserId } = await import('./utils') + const { getUserId } = await import('@/app/api/auth/oauth/utils') const userId = await getUserId('request-id', 'nonexistent-workflow-id') @@ -101,7 +101,7 @@ describe('OAuth Utils', () => { const mockCredential = { id: 'credential-id', userId: 'test-user-id' } mockDb.limit.mockReturnValueOnce([mockCredential]) - const { getCredential } = await import('./utils') + const { getCredential } = await import('@/app/api/auth/oauth/utils') const credential = await getCredential('request-id', 'credential-id', 'test-user-id') @@ -116,7 +116,7 @@ describe('OAuth Utils', () => { it('should return undefined when credential is not found', async () => { mockDb.limit.mockReturnValueOnce([]) - const { getCredential } = await import('./utils') + const { getCredential } = await import('@/app/api/auth/oauth/utils') const credential = await getCredential('request-id', 'nonexistent-id', 'test-user-id') @@ -135,7 +135,7 @@ describe('OAuth Utils', () => { providerId: 'google', } - const { refreshTokenIfNeeded } = await import('./utils') + const { refreshTokenIfNeeded } = await import('@/app/api/auth/oauth/utils') const result = await refreshTokenIfNeeded('request-id', mockCredential, 'credential-id') @@ -159,7 +159,7 @@ describe('OAuth Utils', () => { refreshToken: 'new-refresh-token', }) - const { refreshTokenIfNeeded } = await import('./utils') + const { refreshTokenIfNeeded } = await import('@/app/api/auth/oauth/utils') const result = await refreshTokenIfNeeded('request-id', mockCredential, 'credential-id') @@ -183,7 +183,7 @@ describe('OAuth Utils', () => { mockRefreshOAuthToken.mockResolvedValueOnce(null) - const { refreshTokenIfNeeded } = await import('./utils') + const { refreshTokenIfNeeded } = await import('@/app/api/auth/oauth/utils') await expect( refreshTokenIfNeeded('request-id', mockCredential, 'credential-id') @@ -201,7 +201,7 @@ describe('OAuth Utils', () => { providerId: 'google', } - const { refreshTokenIfNeeded } = await import('./utils') + const { refreshTokenIfNeeded } = await import('@/app/api/auth/oauth/utils') const result = await refreshTokenIfNeeded('request-id', mockCredential, 'credential-id') @@ -222,7 +222,7 @@ describe('OAuth Utils', () => { } mockDb.limit.mockReturnValueOnce([mockCredential]) - const { refreshAccessTokenIfNeeded } = await import('./utils') + const { refreshAccessTokenIfNeeded } = await import('@/app/api/auth/oauth/utils') const token = await refreshAccessTokenIfNeeded('credential-id', 'test-user-id', 'request-id') @@ -247,7 +247,7 @@ describe('OAuth Utils', () => { refreshToken: 'new-refresh-token', }) - const { refreshAccessTokenIfNeeded } = await import('./utils') + const { refreshAccessTokenIfNeeded } = await import('@/app/api/auth/oauth/utils') const token = await refreshAccessTokenIfNeeded('credential-id', 'test-user-id', 'request-id') @@ -260,7 +260,7 @@ describe('OAuth Utils', () => { it('should return null if credential not found', async () => { mockDb.limit.mockReturnValueOnce([]) - const { refreshAccessTokenIfNeeded } = await import('./utils') + const { refreshAccessTokenIfNeeded } = await import('@/app/api/auth/oauth/utils') const token = await refreshAccessTokenIfNeeded('nonexistent-id', 'test-user-id', 'request-id') @@ -281,7 +281,7 @@ describe('OAuth Utils', () => { mockRefreshOAuthToken.mockResolvedValueOnce(null) - const { refreshAccessTokenIfNeeded } = await import('./utils') + const { refreshAccessTokenIfNeeded } = await import('@/app/api/auth/oauth/utils') const token = await refreshAccessTokenIfNeeded('credential-id', 'test-user-id', 'request-id') diff --git a/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts b/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts index 2f9954c98a..227b0e09a8 100644 --- a/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts +++ b/apps/sim/app/api/auth/oauth/wealthbox/item/route.ts @@ -2,9 +2,9 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' +import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' -import { refreshAccessTokenIfNeeded } from '../../utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts b/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts index f16844e059..3fc90e16ba 100644 --- a/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts +++ b/apps/sim/app/api/auth/oauth/wealthbox/items/route.ts @@ -2,9 +2,9 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' +import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { account } from '@/db/schema' -import { refreshAccessTokenIfNeeded } from '../../utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/auth/reset-password/route.test.ts b/apps/sim/app/api/auth/reset-password/route.test.ts index 36dd653c76..4541c65a9e 100644 --- a/apps/sim/app/api/auth/reset-password/route.test.ts +++ b/apps/sim/app/api/auth/reset-password/route.test.ts @@ -27,7 +27,7 @@ describe('Reset Password API Route', () => { newPassword: 'newSecurePassword123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/reset-password/route') const response = await POST(req) const data = await response.json() @@ -52,7 +52,7 @@ describe('Reset Password API Route', () => { newPassword: 'newSecurePassword123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/reset-password/route') const response = await POST(req) const data = await response.json() @@ -91,7 +91,7 @@ describe('Reset Password API Route', () => { newPassword: 'newSecurePassword123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/reset-password/route') const response = await POST(req) const data = await response.json() @@ -111,7 +111,7 @@ describe('Reset Password API Route', () => { newPassword: '', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/reset-password/route') const response = await POST(req) const data = await response.json() @@ -140,7 +140,7 @@ describe('Reset Password API Route', () => { newPassword: 'newSecurePassword123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/reset-password/route') const response = await POST(req) const data = await response.json() @@ -149,7 +149,7 @@ describe('Reset Password API Route', () => { expect(data.message).toBe(errorMessage) const logger = await import('@/lib/logs/console/logger') - const mockLogger = logger.createLogger('PasswordReset') + const mockLogger = logger.createLogger('PasswordResetAPI') expect(mockLogger.error).toHaveBeenCalledWith('Error during password reset:', { error: expect.any(Error), }) @@ -171,7 +171,7 @@ describe('Reset Password API Route', () => { newPassword: 'newSecurePassword123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/auth/reset-password/route') const response = await POST(req) const data = await response.json() @@ -182,7 +182,7 @@ describe('Reset Password API Route', () => { ) const logger = await import('@/lib/logs/console/logger') - const mockLogger = logger.createLogger('PasswordReset') + const mockLogger = logger.createLogger('PasswordResetAPI') expect(mockLogger.error).toHaveBeenCalled() }) }) diff --git a/apps/sim/app/api/auth/reset-password/route.ts b/apps/sim/app/api/auth/reset-password/route.ts index 847ea67cc4..46141563d1 100644 --- a/apps/sim/app/api/auth/reset-password/route.ts +++ b/apps/sim/app/api/auth/reset-password/route.ts @@ -4,7 +4,7 @@ import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' -const logger = createLogger('PasswordReset') +const logger = createLogger('PasswordResetAPI') export async function POST(request: NextRequest) { try { diff --git a/apps/sim/app/api/chat/[subdomain]/otp/route.ts b/apps/sim/app/api/chat/[subdomain]/otp/route.ts index da80560c2f..b7063ee882 100644 --- a/apps/sim/app/api/chat/[subdomain]/otp/route.ts +++ b/apps/sim/app/api/chat/[subdomain]/otp/route.ts @@ -5,10 +5,10 @@ import { renderOTPEmail } from '@/components/emails/render-email' import { sendEmail } from '@/lib/email/mailer' import { createLogger } from '@/lib/logs/console/logger' import { getRedisClient, markMessageAsProcessed, releaseLock } from '@/lib/redis' +import { addCorsHeaders, setChatAuthCookie } from '@/app/api/chat/utils' import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { chat } from '@/db/schema' -import { addCorsHeaders, setChatAuthCookie } from '../../utils' const logger = createLogger('ChatOtpAPI') diff --git a/apps/sim/app/api/chat/[subdomain]/route.test.ts b/apps/sim/app/api/chat/[subdomain]/route.test.ts index 787ca53b92..e4dc365830 100644 --- a/apps/sim/app/api/chat/[subdomain]/route.test.ts +++ b/apps/sim/app/api/chat/[subdomain]/route.test.ts @@ -67,7 +67,7 @@ describe('Chat Subdomain API Route', () => { beforeEach(() => { vi.resetModules() - vi.doMock('../utils', () => ({ + vi.doMock('@/app/api/chat/utils', () => ({ addCorsHeaders: mockAddCorsHeaders, validateChatAuth: mockValidateChatAuth, setChatAuthCookie: mockSetChatAuthCookie, @@ -138,7 +138,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('GET') const params = Promise.resolve({ subdomain: 'test-chat' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/[subdomain]/route') const response = await GET(req, { params }) @@ -169,7 +169,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('GET') const params = Promise.resolve({ subdomain: 'nonexistent' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/[subdomain]/route') const response = await GET(req, { params }) @@ -203,7 +203,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('GET') const params = Promise.resolve({ subdomain: 'inactive-chat' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/[subdomain]/route') const response = await GET(req, { params }) @@ -224,7 +224,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('GET') const params = Promise.resolve({ subdomain: 'password-protected-chat' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/[subdomain]/route') const response = await GET(req, { params }) @@ -245,7 +245,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('POST', { password: 'test-password' }) const params = Promise.resolve({ subdomain: 'password-protected-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') const response = await POST(req, { params }) @@ -261,7 +261,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('POST', {}) const params = Promise.resolve({ subdomain: 'test-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') const response = await POST(req, { params }) @@ -282,7 +282,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('POST', { input: 'Hello' }) const params = Promise.resolve({ subdomain: 'protected-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') const response = await POST(req, { params }) @@ -345,7 +345,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('POST', { input: 'Hello' }) const params = Promise.resolve({ subdomain: 'test-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') const response = await POST(req, { params }) @@ -360,7 +360,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('POST', { input: 'Hello world', conversationId: 'conv-123' }) const params = Promise.resolve({ subdomain: 'test-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') const response = await POST(req, { params }) @@ -377,7 +377,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('POST', { input: 'Hello world' }) const params = Promise.resolve({ subdomain: 'test-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') const response = await POST(req, { params }) @@ -407,7 +407,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('POST', { input: 'Trigger error' }) const params = Promise.resolve({ subdomain: 'test-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') const response = await POST(req, { params }) @@ -426,12 +426,13 @@ describe('Chat Subdomain API Route', () => { // Create a request with invalid JSON const req = { method: 'POST', + headers: new Headers(), json: vi.fn().mockRejectedValue(new Error('Invalid JSON')), } as any const params = Promise.resolve({ subdomain: 'test-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') const response = await POST(req, { params }) @@ -449,7 +450,7 @@ describe('Chat Subdomain API Route', () => { }) const params = Promise.resolve({ subdomain: 'test-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') await POST(req, { params }) @@ -464,7 +465,7 @@ describe('Chat Subdomain API Route', () => { const req = createMockRequest('POST', { input: 'Hello world' }) const params = Promise.resolve({ subdomain: 'test-chat' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/[subdomain]/route') await POST(req, { params }) diff --git a/apps/sim/app/api/chat/[subdomain]/route.ts b/apps/sim/app/api/chat/[subdomain]/route.ts index 7c335270be..188b37a534 100644 --- a/apps/sim/app/api/chat/[subdomain]/route.ts +++ b/apps/sim/app/api/chat/[subdomain]/route.ts @@ -1,16 +1,16 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' -import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' -import { db } from '@/db' -import { chat, workflow } from '@/db/schema' import { addCorsHeaders, executeWorkflowForChat, setChatAuthCookie, validateAuthToken, validateChatAuth, -} from '../utils' +} from '@/app/api/chat/utils' +import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' +import { db } from '@/db' +import { chat, workflow } from '@/db/schema' const logger = createLogger('ChatSubdomainAPI') diff --git a/apps/sim/app/api/chat/edit/[id]/route.test.ts b/apps/sim/app/api/chat/edit/[id]/route.test.ts index 30cdb0e0a0..13367a1fbc 100644 --- a/apps/sim/app/api/chat/edit/[id]/route.test.ts +++ b/apps/sim/app/api/chat/edit/[id]/route.test.ts @@ -94,7 +94,7 @@ describe('Chat Edit API Route', () => { })) const req = new NextRequest('http://localhost:3000/api/chat/edit/chat-123') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/edit/[id]/route') const response = await GET(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(401) @@ -111,7 +111,7 @@ describe('Chat Edit API Route', () => { mockCheckChatAccess.mockResolvedValue({ hasAccess: false }) const req = new NextRequest('http://localhost:3000/api/chat/edit/chat-123') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/edit/[id]/route') const response = await GET(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(404) @@ -138,7 +138,7 @@ describe('Chat Edit API Route', () => { mockCheckChatAccess.mockResolvedValue({ hasAccess: true, chat: mockChat }) const req = new NextRequest('http://localhost:3000/api/chat/edit/chat-123') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/edit/[id]/route') const response = await GET(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(200) @@ -164,7 +164,7 @@ describe('Chat Edit API Route', () => { method: 'PATCH', body: JSON.stringify({ title: 'Updated Chat' }), }) - const { PATCH } = await import('./route') + const { PATCH } = await import('@/app/api/chat/edit/[id]/route') const response = await PATCH(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(401) @@ -184,7 +184,7 @@ describe('Chat Edit API Route', () => { method: 'PATCH', body: JSON.stringify({ title: 'Updated Chat' }), }) - const { PATCH } = await import('./route') + const { PATCH } = await import('@/app/api/chat/edit/[id]/route') const response = await PATCH(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(404) @@ -212,7 +212,7 @@ describe('Chat Edit API Route', () => { method: 'PATCH', body: JSON.stringify({ title: 'Updated Chat', description: 'Updated description' }), }) - const { PATCH } = await import('./route') + const { PATCH } = await import('@/app/api/chat/edit/[id]/route') const response = await PATCH(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(200) @@ -245,7 +245,7 @@ describe('Chat Edit API Route', () => { method: 'PATCH', body: JSON.stringify({ subdomain: 'new-subdomain' }), }) - const { PATCH } = await import('./route') + const { PATCH } = await import('@/app/api/chat/edit/[id]/route') const response = await PATCH(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(400) @@ -273,7 +273,7 @@ describe('Chat Edit API Route', () => { method: 'PATCH', body: JSON.stringify({ authType: 'password' }), // No password provided }) - const { PATCH } = await import('./route') + const { PATCH } = await import('@/app/api/chat/edit/[id]/route') const response = await PATCH(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(400) @@ -304,7 +304,7 @@ describe('Chat Edit API Route', () => { method: 'PATCH', body: JSON.stringify({ title: 'Admin Updated Chat' }), }) - const { PATCH } = await import('./route') + const { PATCH } = await import('@/app/api/chat/edit/[id]/route') const response = await PATCH(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(200) @@ -321,7 +321,7 @@ describe('Chat Edit API Route', () => { const req = new NextRequest('http://localhost:3000/api/chat/edit/chat-123', { method: 'DELETE', }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/chat/edit/[id]/route') const response = await DELETE(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(401) @@ -340,7 +340,7 @@ describe('Chat Edit API Route', () => { const req = new NextRequest('http://localhost:3000/api/chat/edit/chat-123', { method: 'DELETE', }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/chat/edit/[id]/route') const response = await DELETE(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(404) @@ -361,7 +361,7 @@ describe('Chat Edit API Route', () => { const req = new NextRequest('http://localhost:3000/api/chat/edit/chat-123', { method: 'DELETE', }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/chat/edit/[id]/route') const response = await DELETE(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(200) @@ -385,7 +385,7 @@ describe('Chat Edit API Route', () => { const req = new NextRequest('http://localhost:3000/api/chat/edit/chat-123', { method: 'DELETE', }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/chat/edit/[id]/route') const response = await DELETE(req, { params: Promise.resolve({ id: 'chat-123' }) }) expect(response.status).toBe(200) diff --git a/apps/sim/app/api/chat/route.test.ts b/apps/sim/app/api/chat/route.test.ts index 462c1d9450..63113b5a5b 100644 --- a/apps/sim/app/api/chat/route.test.ts +++ b/apps/sim/app/api/chat/route.test.ts @@ -89,7 +89,7 @@ describe('Chat API Route', () => { })) const req = new NextRequest('http://localhost:3000/api/chat') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/route') const response = await GET(req) expect(response.status).toBe(401) @@ -107,7 +107,7 @@ describe('Chat API Route', () => { mockWhere.mockResolvedValue(mockDeployments) const req = new NextRequest('http://localhost:3000/api/chat') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/route') const response = await GET(req) expect(response.status).toBe(200) @@ -125,7 +125,7 @@ describe('Chat API Route', () => { mockWhere.mockRejectedValue(new Error('Database error')) const req = new NextRequest('http://localhost:3000/api/chat') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/route') const response = await GET(req) expect(response.status).toBe(500) @@ -143,7 +143,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify({}), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(401) @@ -163,7 +163,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify(invalidData), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(400) @@ -192,7 +192,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify(validData), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(400) @@ -223,7 +223,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify(validData), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(404) @@ -268,7 +268,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify(validData), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(200) @@ -310,7 +310,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify(validData), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(200) @@ -343,7 +343,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify(validData), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(404) @@ -378,7 +378,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify(validData), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(500) @@ -412,7 +412,7 @@ describe('Chat API Route', () => { method: 'POST', body: JSON.stringify(validData), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/chat/route') const response = await POST(req) expect(response.status).toBe(400) diff --git a/apps/sim/app/api/chat/subdomains/validate/route.test.ts b/apps/sim/app/api/chat/subdomains/validate/route.test.ts index 24ef63a1b8..6887cdb889 100644 --- a/apps/sim/app/api/chat/subdomains/validate/route.test.ts +++ b/apps/sim/app/api/chat/subdomains/validate/route.test.ts @@ -93,7 +93,7 @@ describe('Subdomain Validation API Route', () => { const req = new NextRequest('http://localhost:3000/api/chat/subdomains/validate?subdomain=test') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/subdomains/validate/route') const response = await GET(req) @@ -110,7 +110,7 @@ describe('Subdomain Validation API Route', () => { const req = new NextRequest('http://localhost:3000/api/chat/subdomains/validate') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/subdomains/validate/route') const response = await GET(req) @@ -129,7 +129,7 @@ describe('Subdomain Validation API Route', () => { 'http://localhost:3000/api/chat/subdomains/validate?subdomain=Invalid_Subdomain!' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/subdomains/validate/route') const response = await GET(req) const data = await response.json() @@ -156,7 +156,7 @@ describe('Subdomain Validation API Route', () => { 'http://localhost:3000/api/chat/subdomains/validate?subdomain=available-subdomain' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/subdomains/validate/route') const response = await GET(req) @@ -178,7 +178,7 @@ describe('Subdomain Validation API Route', () => { 'http://localhost:3000/api/chat/subdomains/validate?subdomain=telemetry' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/subdomains/validate/route') const response = await GET(req) const data = await response.json() @@ -205,7 +205,7 @@ describe('Subdomain Validation API Route', () => { 'http://localhost:3000/api/chat/subdomains/validate?subdomain=used-subdomain' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/subdomains/validate/route') const response = await GET(req) @@ -229,7 +229,7 @@ describe('Subdomain Validation API Route', () => { 'http://localhost:3000/api/chat/subdomains/validate?subdomain=error-subdomain' ) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/chat/subdomains/validate/route') const response = await GET(req) diff --git a/apps/sim/app/api/chat/utils.test.ts b/apps/sim/app/api/chat/utils.test.ts index 0d594d9624..ec3321ca2e 100644 --- a/apps/sim/app/api/chat/utils.test.ts +++ b/apps/sim/app/api/chat/utils.test.ts @@ -66,7 +66,7 @@ describe('Chat API Utils', () => { describe('Auth token utils', () => { it.concurrent('should encrypt and validate auth tokens', async () => { - const { encryptAuthToken, validateAuthToken } = await import('./utils') + const { encryptAuthToken, validateAuthToken } = await import('@/app/api/chat/utils') const subdomainId = 'test-subdomain-id' const type = 'password' @@ -83,7 +83,7 @@ describe('Chat API Utils', () => { }) it.concurrent('should reject expired tokens', async () => { - const { validateAuthToken } = await import('./utils') + const { validateAuthToken } = await import('@/app/api/chat/utils') const subdomainId = 'test-subdomain-id' // Create an expired token by directly constructing it with an old timestamp @@ -98,7 +98,7 @@ describe('Chat API Utils', () => { describe('Cookie handling', () => { it.concurrent('should set auth cookie correctly', async () => { - const { setChatAuthCookie } = await import('./utils') + const { setChatAuthCookie } = await import('@/app/api/chat/utils') const mockSet = vi.fn() const mockResponse = { @@ -127,7 +127,7 @@ describe('Chat API Utils', () => { describe('CORS handling', () => { it.concurrent('should add CORS headers for localhost in development', async () => { - const { addCorsHeaders } = await import('./utils') + const { addCorsHeaders } = await import('@/app/api/chat/utils') const mockRequest = { headers: { @@ -162,7 +162,7 @@ describe('Chat API Utils', () => { }) it.concurrent('should handle OPTIONS request', async () => { - const { OPTIONS } = await import('./utils') + const { OPTIONS } = await import('@/app/api/chat/utils') const mockRequest = { headers: { @@ -178,7 +178,7 @@ describe('Chat API Utils', () => { describe('Chat auth validation', () => { beforeEach(() => { - vi.doMock('./utils', async (importOriginal) => { + vi.doMock('@/app/api/chat/utils', async (importOriginal) => { const original = (await importOriginal()) as any return { ...original, @@ -200,7 +200,7 @@ describe('Chat API Utils', () => { }) it.concurrent('should allow access to public chats', async () => { - const utils = await import('./utils') + const utils = await import('@/app/api/chat/utils') const { validateChatAuth } = utils const deployment = { @@ -220,7 +220,7 @@ describe('Chat API Utils', () => { }) it.concurrent('should request password auth for GET requests', async () => { - const { validateChatAuth } = await import('./utils') + const { validateChatAuth } = await import('@/app/api/chat/utils') const deployment = { id: 'chat-id', @@ -241,7 +241,7 @@ describe('Chat API Utils', () => { }) it('should validate password for POST requests', async () => { - const { validateChatAuth } = await import('./utils') + const { validateChatAuth } = await import('@/app/api/chat/utils') const { decryptSecret } = await import('@/lib/utils') const deployment = { @@ -268,7 +268,7 @@ describe('Chat API Utils', () => { }) it.concurrent('should reject incorrect password', async () => { - const { validateChatAuth } = await import('./utils') + const { validateChatAuth } = await import('@/app/api/chat/utils') const deployment = { id: 'chat-id', @@ -294,7 +294,7 @@ describe('Chat API Utils', () => { }) it.concurrent('should request email auth for email-protected chats', async () => { - const { validateChatAuth } = await import('./utils') + const { validateChatAuth } = await import('@/app/api/chat/utils') const deployment = { id: 'chat-id', @@ -316,7 +316,7 @@ describe('Chat API Utils', () => { }) it.concurrent('should check allowed emails for email auth', async () => { - const { validateChatAuth } = await import('./utils') + const { validateChatAuth } = await import('@/app/api/chat/utils') const deployment = { id: 'chat-id', diff --git a/apps/sim/app/api/codegen/route.test.ts b/apps/sim/app/api/codegen/route.test.ts index 14c1639bca..94d95d457a 100644 --- a/apps/sim/app/api/codegen/route.test.ts +++ b/apps/sim/app/api/codegen/route.test.ts @@ -94,7 +94,7 @@ describe('Codegen API Route', () => { generationType: 'json-schema', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) const data = await response.json() @@ -136,7 +136,7 @@ describe('Codegen API Route', () => { generationType: 'javascript-function-body', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) const data = await response.json() @@ -188,7 +188,7 @@ describe('Codegen API Route', () => { generationType: 'custom-tool-schema', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) const data = await response.json() @@ -217,7 +217,7 @@ describe('Codegen API Route', () => { context: 'existing function code here', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) @@ -260,7 +260,7 @@ describe('Codegen API Route', () => { ], }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) @@ -287,7 +287,7 @@ describe('Codegen API Route', () => { generationType: 'json-schema', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) const data = await response.json() @@ -302,7 +302,7 @@ describe('Codegen API Route', () => { prompt: '', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) const data = await response.json() @@ -319,7 +319,7 @@ describe('Codegen API Route', () => { generationType: 'invalid-type', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) const data = await response.json() @@ -348,7 +348,7 @@ describe('Codegen API Route', () => { generationType: 'javascript-function-body', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) const data = await response.json() @@ -377,7 +377,7 @@ describe('Codegen API Route', () => { generationType: 'json-schema', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/codegen/route') const response = await POST(req) const data = await response.json() diff --git a/apps/sim/app/api/files/delete/route.test.ts b/apps/sim/app/api/files/delete/route.test.ts index cadccfd3f9..5f7b26764b 100644 --- a/apps/sim/app/api/files/delete/route.test.ts +++ b/apps/sim/app/api/files/delete/route.test.ts @@ -21,7 +21,7 @@ describe('File Delete API Route', () => { filePath: '/api/files/serve/test-file.txt', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/delete/route') const response = await POST(req) const data = await response.json() @@ -42,7 +42,7 @@ describe('File Delete API Route', () => { filePath: '/api/files/serve/nonexistent.txt', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/delete/route') const response = await POST(req) const data = await response.json() @@ -74,7 +74,7 @@ describe('File Delete API Route', () => { filePath: '/api/files/serve/s3/1234567890-test-file.txt', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/delete/route') const response = await POST(req) const data = await response.json() @@ -109,7 +109,7 @@ describe('File Delete API Route', () => { filePath: '/api/files/serve/blob/1234567890-test-document.pdf', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/delete/route') const response = await POST(req) const data = await response.json() @@ -127,7 +127,7 @@ describe('File Delete API Route', () => { const req = createMockRequest('POST', {}) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/delete/route') const response = await POST(req) const data = await response.json() @@ -138,7 +138,7 @@ describe('File Delete API Route', () => { }) it('should handle CORS preflight requests', async () => { - const { OPTIONS } = await import('./route') + const { OPTIONS } = await import('@/app/api/files/delete/route') const response = await OPTIONS() diff --git a/apps/sim/app/api/files/parse/route.test.ts b/apps/sim/app/api/files/parse/route.test.ts index da05eeb088..ea57a130b9 100644 --- a/apps/sim/app/api/files/parse/route.test.ts +++ b/apps/sim/app/api/files/parse/route.test.ts @@ -7,7 +7,7 @@ import { NextRequest } from 'next/server' */ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { createMockRequest, setupFileApiMocks } from '@/app/api/__test-utils__/utils' -import { POST } from './route' +import { POST } from '@/app/api/files/parse/route' const mockJoin = vi.fn((...args: string[]): string => { if (args[0] === '/test/uploads') { @@ -53,7 +53,7 @@ describe('File Parse API Route', () => { setupFileApiMocks() const req = createMockRequest('POST', {}) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/parse/route') const response = await POST(req) const data = await response.json() @@ -72,7 +72,7 @@ describe('File Parse API Route', () => { filePath: '/api/files/serve/test-file.txt', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/parse/route') const response = await POST(req) const data = await response.json() @@ -97,7 +97,7 @@ describe('File Parse API Route', () => { filePath: '/api/files/serve/s3/test-file.pdf', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/parse/route') const response = await POST(req) const data = await response.json() @@ -120,7 +120,7 @@ describe('File Parse API Route', () => { filePath: ['/api/files/serve/file1.txt', '/api/files/serve/file2.txt'], }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/parse/route') const response = await POST(req) const data = await response.json() @@ -157,7 +157,7 @@ describe('File Parse API Route', () => { }), }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/parse/route') const response = await POST(req) const data = await response.json() @@ -184,7 +184,7 @@ describe('File Parse API Route', () => { filePath: '/api/files/serve/nonexistent.txt', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/parse/route') const response = await POST(req) const data = await response.json() diff --git a/apps/sim/app/api/files/presigned/route.test.ts b/apps/sim/app/api/files/presigned/route.test.ts index 4456863b07..a96446b005 100644 --- a/apps/sim/app/api/files/presigned/route.test.ts +++ b/apps/sim/app/api/files/presigned/route.test.ts @@ -25,7 +25,7 @@ describe('/api/files/presigned', () => { storageProvider: 's3', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -51,7 +51,7 @@ describe('/api/files/presigned', () => { storageProvider: 's3', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -75,7 +75,7 @@ describe('/api/files/presigned', () => { storageProvider: 's3', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -99,7 +99,7 @@ describe('/api/files/presigned', () => { storageProvider: 's3', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -124,7 +124,7 @@ describe('/api/files/presigned', () => { storageProvider: 's3', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const largeFileSize = 150 * 1024 * 1024 // 150MB (exceeds 100MB limit) const request = new NextRequest('http://localhost:3000/api/files/presigned', { @@ -150,7 +150,7 @@ describe('/api/files/presigned', () => { storageProvider: 's3', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -182,7 +182,7 @@ describe('/api/files/presigned', () => { storageProvider: 's3', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest( 'http://localhost:3000/api/files/presigned?type=knowledge-base', @@ -210,7 +210,7 @@ describe('/api/files/presigned', () => { storageProvider: 'blob', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -250,7 +250,7 @@ describe('/api/files/presigned', () => { isUsingCloudStorage: vi.fn().mockReturnValue(true), })) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -293,7 +293,7 @@ describe('/api/files/presigned', () => { getSignedUrl: vi.fn().mockRejectedValue(new Error('S3 service unavailable')), })) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -339,7 +339,7 @@ describe('/api/files/presigned', () => { sanitizeFilenameForMetadata: vi.fn((filename) => filename), })) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -364,7 +364,7 @@ describe('/api/files/presigned', () => { storageProvider: 's3', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/presigned/route') const request = new NextRequest('http://localhost:3000/api/files/presigned', { method: 'POST', @@ -382,7 +382,7 @@ describe('/api/files/presigned', () => { describe('OPTIONS', () => { it('should handle CORS preflight requests', async () => { - const { OPTIONS } = await import('./route') + const { OPTIONS } = await import('@/app/api/files/presigned/route') const response = await OPTIONS() diff --git a/apps/sim/app/api/files/serve/[...path]/route.test.ts b/apps/sim/app/api/files/serve/[...path]/route.test.ts index 3174879cf7..f39325201c 100644 --- a/apps/sim/app/api/files/serve/[...path]/route.test.ts +++ b/apps/sim/app/api/files/serve/[...path]/route.test.ts @@ -61,7 +61,7 @@ describe('File Serve API Route', () => { it('should serve local file successfully', async () => { const req = new NextRequest('http://localhost:3000/api/files/serve/test-file.txt') const params = { path: ['test-file.txt'] } - const { GET } = await import('./route') + const { GET } = await import('@/app/api/files/serve/[...path]/route') const response = await GET(req, { params: Promise.resolve(params) }) @@ -107,7 +107,7 @@ describe('File Serve API Route', () => { const req = new NextRequest('http://localhost:3000/api/files/serve/nested/path/file.txt') const params = { path: ['nested', 'path', 'file.txt'] } - const { GET } = await import('./route') + const { GET } = await import('@/app/api/files/serve/[...path]/route') const response = await GET(req, { params: Promise.resolve(params) }) @@ -163,7 +163,7 @@ describe('File Serve API Route', () => { const req = new NextRequest('http://localhost:3000/api/files/serve/s3/1234567890-image.png') const params = { path: ['s3', '1234567890-image.png'] } - const { GET } = await import('./route') + const { GET } = await import('@/app/api/files/serve/[...path]/route') const response = await GET(req, { params: Promise.resolve(params) }) @@ -208,7 +208,7 @@ describe('File Serve API Route', () => { const req = new NextRequest('http://localhost:3000/api/files/serve/nonexistent.txt') const params = { path: ['nonexistent.txt'] } - const { GET } = await import('./route') + const { GET } = await import('@/app/api/files/serve/[...path]/route') const response = await GET(req, { params: Promise.resolve(params) }) @@ -249,7 +249,7 @@ describe('File Serve API Route', () => { const req = new NextRequest(`http://localhost:3000/api/files/serve/file.${test.ext}`) const params = { path: [`file.${test.ext}`] } - const { GET } = await import('./route') + const { GET } = await import('@/app/api/files/serve/[...path]/route') const response = await GET(req, { params: Promise.resolve(params) }) diff --git a/apps/sim/app/api/files/upload/route.test.ts b/apps/sim/app/api/files/upload/route.test.ts index 7aa21e88bf..ec06804c4c 100644 --- a/apps/sim/app/api/files/upload/route.test.ts +++ b/apps/sim/app/api/files/upload/route.test.ts @@ -47,7 +47,7 @@ describe('File Upload API Route', () => { body: formData, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/upload/route') const response = await POST(req) const data = await response.json() @@ -77,7 +77,7 @@ describe('File Upload API Route', () => { body: formData, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/upload/route') const response = await POST(req) const data = await response.json() @@ -108,7 +108,7 @@ describe('File Upload API Route', () => { body: formData, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/upload/route') const response = await POST(req) const data = await response.json() @@ -128,7 +128,7 @@ describe('File Upload API Route', () => { body: formData, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/upload/route') const response = await POST(req) const data = await response.json() @@ -157,7 +157,7 @@ describe('File Upload API Route', () => { body: formData, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/files/upload/route') const response = await POST(req) const data = await response.json() @@ -168,7 +168,7 @@ describe('File Upload API Route', () => { }) it('should handle CORS preflight requests', async () => { - const { OPTIONS } = await import('./route') + const { OPTIONS } = await import('@/app/api/files/upload/route') const response = await OPTIONS() diff --git a/apps/sim/app/api/files/upload/route.ts b/apps/sim/app/api/files/upload/route.ts index bbd06e00da..405d5a2e96 100644 --- a/apps/sim/app/api/files/upload/route.ts +++ b/apps/sim/app/api/files/upload/route.ts @@ -5,10 +5,12 @@ import { v4 as uuidv4 } from 'uuid' import { createLogger } from '@/lib/logs/console/logger' import { isUsingCloudStorage, uploadFile } from '@/lib/uploads' import { UPLOAD_DIR } from '@/lib/uploads/setup' -// Import to ensure the uploads directory is created import '@/lib/uploads/setup.server' - -import { createErrorResponse, createOptionsResponse, InvalidRequestError } from '../utils' +import { + createErrorResponse, + createOptionsResponse, + InvalidRequestError, +} from '@/app/api/files/utils' export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/folders/[id]/route.test.ts b/apps/sim/app/api/folders/[id]/route.test.ts index 2008ccbca4..b9d26eb599 100644 --- a/apps/sim/app/api/folders/[id]/route.test.ts +++ b/apps/sim/app/api/folders/[id]/route.test.ts @@ -135,7 +135,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -160,7 +160,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -178,7 +178,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -200,7 +200,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -222,7 +222,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -244,7 +244,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -266,7 +266,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -300,7 +300,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') await PUT(req, { params }) @@ -321,7 +321,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -347,7 +347,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -372,7 +372,7 @@ describe('Individual Folder API Route', () => { const params = Promise.resolve({ id: 'folder-1' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -404,7 +404,7 @@ describe('Individual Folder API Route', () => { }) const params = Promise.resolve({ id: 'folder-3' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/folders/[id]/route') const response = await PUT(req, { params }) @@ -430,7 +430,7 @@ describe('Individual Folder API Route', () => { const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/folders/[id]/route') const response = await DELETE(req, { params }) @@ -450,7 +450,7 @@ describe('Individual Folder API Route', () => { const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/folders/[id]/route') const response = await DELETE(req, { params }) @@ -470,7 +470,7 @@ describe('Individual Folder API Route', () => { const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/folders/[id]/route') const response = await DELETE(req, { params }) @@ -490,7 +490,7 @@ describe('Individual Folder API Route', () => { const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/folders/[id]/route') const response = await DELETE(req, { params }) @@ -512,7 +512,7 @@ describe('Individual Folder API Route', () => { const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/folders/[id]/route') const response = await DELETE(req, { params }) @@ -533,7 +533,7 @@ describe('Individual Folder API Route', () => { const req = createMockRequest('DELETE') const params = Promise.resolve({ id: 'folder-1' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/folders/[id]/route') const response = await DELETE(req, { params }) diff --git a/apps/sim/app/api/folders/route.test.ts b/apps/sim/app/api/folders/route.test.ts index 3fa050167d..f05aff1e1a 100644 --- a/apps/sim/app/api/folders/route.test.ts +++ b/apps/sim/app/api/folders/route.test.ts @@ -101,7 +101,7 @@ describe('Folders API Route', () => { value: 'http://localhost:3000/api/folders?workspaceId=workspace-123', }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/folders/route') const response = await GET(mockRequest) expect(response.status).toBe(200) @@ -124,7 +124,7 @@ describe('Folders API Route', () => { value: 'http://localhost:3000/api/folders?workspaceId=workspace-123', }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/folders/route') const response = await GET(mockRequest) expect(response.status).toBe(401) @@ -141,7 +141,7 @@ describe('Folders API Route', () => { value: 'http://localhost:3000/api/folders', }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/folders/route') const response = await GET(mockRequest) expect(response.status).toBe(400) @@ -159,7 +159,7 @@ describe('Folders API Route', () => { value: 'http://localhost:3000/api/folders?workspaceId=workspace-123', }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/folders/route') const response = await GET(mockRequest) expect(response.status).toBe(403) @@ -177,7 +177,7 @@ describe('Folders API Route', () => { value: 'http://localhost:3000/api/folders?workspaceId=workspace-123', }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/folders/route') const response = await GET(mockRequest) expect(response.status).toBe(200) // Should work for read permissions @@ -198,7 +198,7 @@ describe('Folders API Route', () => { value: 'http://localhost:3000/api/folders?workspaceId=workspace-123', }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/folders/route') const response = await GET(mockRequest) expect(response.status).toBe(500) @@ -241,7 +241,7 @@ describe('Folders API Route', () => { color: '#6B7280', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(200) @@ -283,7 +283,7 @@ describe('Folders API Route', () => { workspaceId: 'workspace-123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(200) @@ -310,7 +310,7 @@ describe('Folders API Route', () => { parentId: 'folder-1', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(200) @@ -329,7 +329,7 @@ describe('Folders API Route', () => { workspaceId: 'workspace-123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(401) @@ -347,7 +347,7 @@ describe('Folders API Route', () => { workspaceId: 'workspace-123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(403) @@ -385,7 +385,7 @@ describe('Folders API Route', () => { workspaceId: 'workspace-123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(200) @@ -423,7 +423,7 @@ describe('Folders API Route', () => { workspaceId: 'workspace-123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(200) @@ -445,7 +445,7 @@ describe('Folders API Route', () => { const req = createMockRequest('POST', body) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(400) @@ -468,7 +468,7 @@ describe('Folders API Route', () => { workspaceId: 'workspace-123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') const response = await POST(req) expect(response.status).toBe(500) @@ -513,7 +513,7 @@ describe('Folders API Route', () => { workspaceId: 'workspace-123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') await POST(req) expect(capturedValues).not.toBeNull() @@ -553,7 +553,7 @@ describe('Folders API Route', () => { workspaceId: 'workspace-123', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/folders/route') await POST(req) expect(capturedValues).not.toBeNull() diff --git a/apps/sim/app/api/function/execute/route.test.ts b/apps/sim/app/api/function/execute/route.test.ts index 13ccd662ff..7ee1c5e70b 100644 --- a/apps/sim/app/api/function/execute/route.test.ts +++ b/apps/sim/app/api/function/execute/route.test.ts @@ -65,7 +65,7 @@ describe('Function Execute API Route', () => { timeout: 5000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -80,7 +80,7 @@ describe('Function Execute API Route', () => { timeout: 5000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -94,7 +94,7 @@ describe('Function Execute API Route', () => { code: 'return "test"', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -116,7 +116,7 @@ describe('Function Execute API Route', () => { }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -131,7 +131,7 @@ describe('Function Execute API Route', () => { }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -149,7 +149,7 @@ describe('Function Execute API Route', () => { }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -165,7 +165,7 @@ describe('Function Execute API Route', () => { }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -199,7 +199,7 @@ describe('Function Execute API Route', () => { params: gmailData, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -221,7 +221,7 @@ describe('Function Execute API Route', () => { params: complexEmailData, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -234,7 +234,7 @@ describe('Function Execute API Route', () => { code: 'return "freestyle test"', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') await POST(req) expect(mockFreestyleExecuteScript).toHaveBeenCalled() @@ -250,7 +250,7 @@ describe('Function Execute API Route', () => { code: 'return "fallback test"', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(mockFreestyleExecuteScript).toHaveBeenCalled() @@ -271,7 +271,7 @@ describe('Function Execute API Route', () => { code: 'return undefinedVariable', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(500) @@ -293,7 +293,7 @@ describe('Function Execute API Route', () => { code: 'return "vm test"', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') await POST(req) expect(mockFreestyleExecuteScript).not.toHaveBeenCalled() @@ -319,7 +319,7 @@ describe('Function Execute API Route', () => { code: 'return invalidCode(', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(500) @@ -339,7 +339,7 @@ describe('Function Execute API Route', () => { isCustomTool: true, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -355,7 +355,7 @@ describe('Function Execute API Route', () => { headers: { 'Content-Type': 'application/json' }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(500) @@ -367,7 +367,7 @@ describe('Function Execute API Route', () => { timeout: 10000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') await POST(req) expect(mockLogger.info).toHaveBeenCalledWith( @@ -384,7 +384,7 @@ describe('Function Execute API Route', () => { params: {}, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -417,7 +417,7 @@ SyntaxError: Invalid or unexpected token timeout: 5000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -460,7 +460,7 @@ SyntaxError: Invalid or unexpected token timeout: 5000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -501,7 +501,7 @@ SyntaxError: Invalid or unexpected token timeout: 5000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -531,7 +531,7 @@ SyntaxError: Invalid or unexpected token timeout: 5000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -567,7 +567,7 @@ SyntaxError: Invalid or unexpected token timeout: 5000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -598,7 +598,7 @@ SyntaxError: Invalid or unexpected token timeout: 5000, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -620,7 +620,7 @@ SyntaxError: Invalid or unexpected token }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -644,7 +644,7 @@ SyntaxError: Invalid or unexpected token }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) expect(response.status).toBe(200) @@ -705,7 +705,7 @@ describe('Function Execute API - Template Variable Edge Cases', () => { }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -730,7 +730,7 @@ describe('Function Execute API - Template Variable Edge Cases', () => { }, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() @@ -752,7 +752,7 @@ describe('Function Execute API - Template Variable Edge Cases', () => { params: {}, }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/function/execute/route') const response = await POST(req) const data = await response.json() diff --git a/apps/sim/app/api/jobs/[jobId]/route.ts b/apps/sim/app/api/jobs/[jobId]/route.ts index f584782158..9b3f9172b7 100644 --- a/apps/sim/app/api/jobs/[jobId]/route.ts +++ b/apps/sim/app/api/jobs/[jobId]/route.ts @@ -7,8 +7,8 @@ import { db } from '@/db' export const dynamic = 'force-dynamic' +import { createErrorResponse } from '@/app/api/workflows/utils' import { apiKey as apiKeyTable } from '@/db/schema' -import { createErrorResponse } from '../../workflows/utils' const logger = createLogger('TaskStatusAPI') diff --git a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/[chunkId]/route.ts b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/[chunkId]/route.ts index c064602e84..f453790ebe 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/[chunkId]/route.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/[chunkId]/route.ts @@ -7,9 +7,9 @@ import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' +import { checkChunkAccess } from '@/app/api/knowledge/utils' import { db } from '@/db' import { document, embedding } from '@/db/schema' -import { checkChunkAccess } from '../../../../../utils' const logger = createLogger('ChunkByIdAPI') diff --git a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/route.test.ts b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/route.test.ts index 3078a726a8..3ebd69da29 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/route.test.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/chunks/route.test.ts @@ -153,7 +153,7 @@ describe('Knowledge Document Chunks API Route', () => { }) const req = createMockRequest('POST', validChunkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -213,7 +213,7 @@ describe('Knowledge Document Chunks API Route', () => { }) const req = createMockRequest('POST', workflowData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -226,7 +226,7 @@ describe('Knowledge Document Chunks API Route', () => { mockGetUserId.mockResolvedValue(null) const req = createMockRequest('POST', validChunkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -243,7 +243,7 @@ describe('Knowledge Document Chunks API Route', () => { mockGetUserId.mockResolvedValue(null) const req = createMockRequest('POST', workflowData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -262,7 +262,7 @@ describe('Knowledge Document Chunks API Route', () => { }) const req = createMockRequest('POST', validChunkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -281,7 +281,7 @@ describe('Knowledge Document Chunks API Route', () => { }) const req = createMockRequest('POST', validChunkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -303,7 +303,7 @@ describe('Knowledge Document Chunks API Route', () => { } as any) const req = createMockRequest('POST', validChunkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -326,7 +326,7 @@ describe('Knowledge Document Chunks API Route', () => { } const req = createMockRequest('POST', invalidData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -367,7 +367,7 @@ describe('Knowledge Document Chunks API Route', () => { }) const req = createMockRequest('POST', validChunkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/[documentId]/chunks/route') await POST(req, { params: mockParams }) expect(mockTx.values).toHaveBeenCalled() diff --git a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.test.ts b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.test.ts index 42b51610db..148b793e5a 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.test.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.test.ts @@ -14,7 +14,7 @@ import { mockKnowledgeSchemas() -vi.mock('../../../utils', () => ({ +vi.mock('@/app/api/knowledge/utils', () => ({ checkKnowledgeBaseAccess: vi.fn(), checkKnowledgeBaseWriteAccess: vi.fn(), checkDocumentAccess: vi.fn(), @@ -98,7 +98,7 @@ describe('Document By ID API Route', () => { const mockParams = Promise.resolve({ id: 'kb-123', documentId: 'doc-123' }) it('should retrieve document successfully for authenticated user', async () => { - const { checkDocumentAccess } = await import('../../../utils') + const { checkDocumentAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentAccess).mockResolvedValue({ @@ -108,7 +108,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -123,7 +123,7 @@ describe('Document By ID API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -132,7 +132,7 @@ describe('Document By ID API Route', () => { }) it('should return not found for non-existent document', async () => { - const { checkDocumentAccess } = await import('../../../utils') + const { checkDocumentAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentAccess).mockResolvedValue({ @@ -142,7 +142,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -151,7 +151,7 @@ describe('Document By ID API Route', () => { }) it('should return unauthorized for document without access', async () => { - const { checkDocumentAccess } = await import('../../../utils') + const { checkDocumentAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentAccess).mockResolvedValue({ @@ -160,7 +160,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -169,13 +169,13 @@ describe('Document By ID API Route', () => { }) it('should handle database errors', async () => { - const { checkDocumentAccess } = await import('../../../utils') + const { checkDocumentAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentAccess).mockRejectedValue(new Error('Database error')) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -194,7 +194,7 @@ describe('Document By ID API Route', () => { } it('should update document successfully', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -223,7 +223,7 @@ describe('Document By ID API Route', () => { mockDbChain.select.mockReturnValue(selectChain) const req = createMockRequest('PUT', validUpdateData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -236,7 +236,7 @@ describe('Document By ID API Route', () => { }) it('should validate update data', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -252,7 +252,7 @@ describe('Document By ID API Route', () => { } const req = createMockRequest('PUT', invalidData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -266,7 +266,7 @@ describe('Document By ID API Route', () => { const mockParams = Promise.resolve({ id: 'kb-123', documentId: 'doc-123' }) it('should mark document as failed due to timeout successfully', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') const processingDocument = { ...mockDocument, @@ -303,7 +303,7 @@ describe('Document By ID API Route', () => { mockDbChain.select.mockReturnValue(selectChain) const req = createMockRequest('PUT', { markFailedDueToTimeout: true }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -320,7 +320,7 @@ describe('Document By ID API Route', () => { }) it('should reject marking failed for non-processing document', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -330,7 +330,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('PUT', { markFailedDueToTimeout: true }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -339,7 +339,7 @@ describe('Document By ID API Route', () => { }) it('should reject marking failed for recently started processing', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') const recentProcessingDocument = { ...mockDocument, @@ -355,7 +355,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('PUT', { markFailedDueToTimeout: true }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -368,7 +368,9 @@ describe('Document By ID API Route', () => { const mockParams = Promise.resolve({ id: 'kb-123', documentId: 'doc-123' }) it('should retry processing successfully', async () => { - const { checkDocumentWriteAccess, processDocumentAsync } = await import('../../../utils') + const { checkDocumentWriteAccess, processDocumentAsync } = await import( + '@/app/api/knowledge/utils' + ) const failedDocument = { ...mockDocument, @@ -401,7 +403,7 @@ describe('Document By ID API Route', () => { vi.mocked(processDocumentAsync).mockResolvedValue(undefined) const req = createMockRequest('PUT', { retryProcessing: true }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -414,7 +416,7 @@ describe('Document By ID API Route', () => { }) it('should reject retry for non-failed document', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -424,7 +426,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('PUT', { retryProcessing: true }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -441,7 +443,7 @@ describe('Document By ID API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('PUT', validUpdateData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -450,7 +452,7 @@ describe('Document By ID API Route', () => { }) it('should return not found for non-existent document', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -460,7 +462,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('PUT', validUpdateData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -469,7 +471,7 @@ describe('Document By ID API Route', () => { }) it('should handle database errors during update', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -480,7 +482,7 @@ describe('Document By ID API Route', () => { mockDbChain.set.mockRejectedValue(new Error('Database error')) const req = createMockRequest('PUT', validUpdateData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -493,7 +495,7 @@ describe('Document By ID API Route', () => { const mockParams = Promise.resolve({ id: 'kb-123', documentId: 'doc-123' }) it('should delete document successfully', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -508,7 +510,7 @@ describe('Document By ID API Route', () => { mockDbChain.where.mockResolvedValue(undefined) // Update operation resolves const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() @@ -527,7 +529,7 @@ describe('Document By ID API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() @@ -536,7 +538,7 @@ describe('Document By ID API Route', () => { }) it('should return not found for non-existent document', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -546,7 +548,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() @@ -555,7 +557,7 @@ describe('Document By ID API Route', () => { }) it('should return unauthorized for document without access', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -564,7 +566,7 @@ describe('Document By ID API Route', () => { }) const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() @@ -573,7 +575,7 @@ describe('Document By ID API Route', () => { }) it('should handle database errors during deletion', async () => { - const { checkDocumentWriteAccess } = await import('../../../utils') + const { checkDocumentWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkDocumentWriteAccess).mockResolvedValue({ @@ -584,7 +586,7 @@ describe('Document By ID API Route', () => { mockDbChain.set.mockRejectedValue(new Error('Database error')) const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/documents/[documentId]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() diff --git a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.ts b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.ts index 6dcc508811..dbf5b6fcfd 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/[documentId]/route.ts @@ -6,9 +6,13 @@ import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' +import { + checkDocumentAccess, + checkDocumentWriteAccess, + processDocumentAsync, +} from '@/app/api/knowledge/utils' import { db } from '@/db' import { document, embedding } from '@/db/schema' -import { checkDocumentAccess, checkDocumentWriteAccess, processDocumentAsync } from '../../../utils' const logger = createLogger('DocumentByIdAPI') diff --git a/apps/sim/app/api/knowledge/[id]/documents/route.test.ts b/apps/sim/app/api/knowledge/[id]/documents/route.test.ts index b42dac2bec..c27bec231d 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/route.test.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/route.test.ts @@ -14,7 +14,7 @@ import { mockKnowledgeSchemas() -vi.mock('../../utils', () => ({ +vi.mock('@/app/api/knowledge/utils', () => ({ checkKnowledgeBaseAccess: vi.fn(), checkKnowledgeBaseWriteAccess: vi.fn(), checkDocumentAccess: vi.fn(), @@ -95,10 +95,13 @@ describe('Knowledge Base Documents API Route', () => { const mockParams = Promise.resolve({ id: 'kb-123' }) it('should retrieve documents successfully for authenticated user', async () => { - const { checkKnowledgeBaseAccess } = await import('../../utils') + const { checkKnowledgeBaseAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) // Mock the count query (first query) mockDbChain.where.mockResolvedValueOnce([{ count: 1 }]) @@ -107,7 +110,7 @@ describe('Knowledge Base Documents API Route', () => { mockDbChain.offset.mockResolvedValue([mockDocument]) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -120,10 +123,13 @@ describe('Knowledge Base Documents API Route', () => { }) it('should filter disabled documents by default', async () => { - const { checkKnowledgeBaseAccess } = await import('../../utils') + const { checkKnowledgeBaseAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) // Mock the count query (first query) mockDbChain.where.mockResolvedValueOnce([{ count: 1 }]) @@ -132,7 +138,7 @@ describe('Knowledge Base Documents API Route', () => { mockDbChain.offset.mockResolvedValue([mockDocument]) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/route') const response = await GET(req, { params: mockParams }) expect(response.status).toBe(200) @@ -140,10 +146,13 @@ describe('Knowledge Base Documents API Route', () => { }) it('should include disabled documents when requested', async () => { - const { checkKnowledgeBaseAccess } = await import('../../utils') + const { checkKnowledgeBaseAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) // Mock the count query (first query) mockDbChain.where.mockResolvedValueOnce([{ count: 1 }]) @@ -154,7 +163,7 @@ describe('Knowledge Base Documents API Route', () => { const url = 'http://localhost:3000/api/knowledge/kb-123/documents?includeDisabled=true' const req = new Request(url, { method: 'GET' }) as any - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/route') const response = await GET(req, { params: mockParams }) expect(response.status).toBe(200) @@ -164,7 +173,7 @@ describe('Knowledge Base Documents API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -173,13 +182,16 @@ describe('Knowledge Base Documents API Route', () => { }) it('should return not found for non-existent knowledge base', async () => { - const { checkKnowledgeBaseAccess } = await import('../../utils') + const { checkKnowledgeBaseAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ hasAccess: false, notFound: true }) + vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ + hasAccess: false, + notFound: true, + }) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -188,13 +200,13 @@ describe('Knowledge Base Documents API Route', () => { }) it('should return unauthorized for knowledge base without access', async () => { - const { checkKnowledgeBaseAccess } = await import('../../utils') + const { checkKnowledgeBaseAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ hasAccess: false }) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -203,14 +215,17 @@ describe('Knowledge Base Documents API Route', () => { }) it('should handle database errors', async () => { - const { checkKnowledgeBaseAccess } = await import('../../utils') + const { checkKnowledgeBaseAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) mockDbChain.orderBy.mockRejectedValue(new Error('Database error')) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/documents/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -229,14 +244,17 @@ describe('Knowledge Base Documents API Route', () => { } it('should create single document successfully', async () => { - const { checkKnowledgeBaseWriteAccess } = await import('../../utils') + const { checkKnowledgeBaseWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) mockDbChain.values.mockResolvedValue(undefined) const req = createMockRequest('POST', validDocumentData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -248,10 +266,13 @@ describe('Knowledge Base Documents API Route', () => { }) it('should validate single document data', async () => { - const { checkKnowledgeBaseWriteAccess } = await import('../../utils') + const { checkKnowledgeBaseWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) const invalidData = { filename: '', // Invalid: empty filename @@ -261,7 +282,7 @@ describe('Knowledge Base Documents API Route', () => { } const req = createMockRequest('POST', invalidData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -299,10 +320,15 @@ describe('Knowledge Base Documents API Route', () => { } it('should create bulk documents successfully', async () => { - const { checkKnowledgeBaseWriteAccess, processDocumentAsync } = await import('../../utils') + const { checkKnowledgeBaseWriteAccess, processDocumentAsync } = await import( + '@/app/api/knowledge/utils' + ) mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) // Mock transaction to return the created documents mockDbChain.transaction.mockImplementation(async (callback) => { @@ -317,7 +343,7 @@ describe('Knowledge Base Documents API Route', () => { vi.mocked(processDocumentAsync).mockResolvedValue(undefined) const req = createMockRequest('POST', validBulkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -330,10 +356,13 @@ describe('Knowledge Base Documents API Route', () => { }) it('should validate bulk document data', async () => { - const { checkKnowledgeBaseWriteAccess } = await import('../../utils') + const { checkKnowledgeBaseWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) const invalidBulkData = { bulk: true, @@ -355,7 +384,7 @@ describe('Knowledge Base Documents API Route', () => { } const req = createMockRequest('POST', invalidBulkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -365,10 +394,15 @@ describe('Knowledge Base Documents API Route', () => { }) it('should handle processing errors gracefully', async () => { - const { checkKnowledgeBaseWriteAccess, processDocumentAsync } = await import('../../utils') + const { checkKnowledgeBaseWriteAccess, processDocumentAsync } = await import( + '@/app/api/knowledge/utils' + ) mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) // Mock transaction to succeed but processing to fail mockDbChain.transaction.mockImplementation(async (callback) => { @@ -384,7 +418,7 @@ describe('Knowledge Base Documents API Route', () => { vi.mocked(processDocumentAsync).mockResolvedValue(undefined) const req = createMockRequest('POST', validBulkData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -408,7 +442,7 @@ describe('Knowledge Base Documents API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('POST', validDocumentData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -417,7 +451,7 @@ describe('Knowledge Base Documents API Route', () => { }) it('should return not found for non-existent knowledge base', async () => { - const { checkKnowledgeBaseWriteAccess } = await import('../../utils') + const { checkKnowledgeBaseWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ @@ -426,7 +460,7 @@ describe('Knowledge Base Documents API Route', () => { }) const req = createMockRequest('POST', validDocumentData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -435,13 +469,13 @@ describe('Knowledge Base Documents API Route', () => { }) it('should return unauthorized for knowledge base without access', async () => { - const { checkKnowledgeBaseWriteAccess } = await import('../../utils') + const { checkKnowledgeBaseWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ hasAccess: false }) const req = createMockRequest('POST', validDocumentData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() @@ -450,14 +484,17 @@ describe('Knowledge Base Documents API Route', () => { }) it('should handle database errors during creation', async () => { - const { checkKnowledgeBaseWriteAccess } = await import('../../utils') + const { checkKnowledgeBaseWriteAccess } = await import('@/app/api/knowledge/utils') mockAuth$.mockAuthenticatedUser() - vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ hasAccess: true }) + vi.mocked(checkKnowledgeBaseWriteAccess).mockResolvedValue({ + hasAccess: true, + knowledgeBase: { id: 'kb-123', userId: 'user-123' }, + }) mockDbChain.values.mockRejectedValue(new Error('Database error')) const req = createMockRequest('POST', validDocumentData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/[id]/documents/route') const response = await POST(req, { params: mockParams }) const data = await response.json() diff --git a/apps/sim/app/api/knowledge/[id]/documents/route.ts b/apps/sim/app/api/knowledge/[id]/documents/route.ts index dbe49c2afd..330bf77aa9 100644 --- a/apps/sim/app/api/knowledge/[id]/documents/route.ts +++ b/apps/sim/app/api/knowledge/[id]/documents/route.ts @@ -5,13 +5,13 @@ import { z } from 'zod' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' import { getUserId } from '@/app/api/auth/oauth/utils' -import { db } from '@/db' -import { document } from '@/db/schema' import { checkKnowledgeBaseAccess, checkKnowledgeBaseWriteAccess, processDocumentAsync, -} from '../../utils' +} from '@/app/api/knowledge/utils' +import { db } from '@/db' +import { document } from '@/db/schema' const logger = createLogger('DocumentsAPI') diff --git a/apps/sim/app/api/knowledge/[id]/route.test.ts b/apps/sim/app/api/knowledge/[id]/route.test.ts index 97cf4c2395..33150b8a5b 100644 --- a/apps/sim/app/api/knowledge/[id]/route.test.ts +++ b/apps/sim/app/api/knowledge/[id]/route.test.ts @@ -79,7 +79,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.limit.mockResolvedValueOnce([mockKnowledgeBase]) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -94,7 +94,7 @@ describe('Knowledge Base By ID API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -108,7 +108,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.limit.mockResolvedValueOnce([]) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -122,7 +122,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.limit.mockResolvedValueOnce([{ id: 'kb-123', userId: 'different-user' }]) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -135,7 +135,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.limit.mockRejectedValueOnce(new Error('Database error')) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/[id]/route') const response = await GET(req, { params: mockParams }) const data = await response.json() @@ -165,7 +165,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.limit.mockResolvedValueOnce([{ ...mockKnowledgeBase, ...validUpdateData }]) const req = createMockRequest('PUT', validUpdateData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -179,7 +179,7 @@ describe('Knowledge Base By ID API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('PUT', validUpdateData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -196,7 +196,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.limit.mockResolvedValueOnce([]) const req = createMockRequest('PUT', validUpdateData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -217,7 +217,7 @@ describe('Knowledge Base By ID API Route', () => { } const req = createMockRequest('PUT', invalidData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -234,7 +234,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.where.mockRejectedValueOnce(new Error('Database error')) const req = createMockRequest('PUT', validUpdateData) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/knowledge/[id]/route') const response = await PUT(req, { params: mockParams }) const data = await response.json() @@ -257,7 +257,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.where.mockResolvedValueOnce(undefined) const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() @@ -271,7 +271,7 @@ describe('Knowledge Base By ID API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() @@ -288,7 +288,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.limit.mockResolvedValueOnce([]) const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() @@ -305,7 +305,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.limit.mockResolvedValueOnce([{ id: 'kb-123', userId: 'different-user' }]) const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() @@ -321,7 +321,7 @@ describe('Knowledge Base By ID API Route', () => { mockDbChain.where.mockRejectedValueOnce(new Error('Database error')) const req = createMockRequest('DELETE') - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/knowledge/[id]/route') const response = await DELETE(req, { params: mockParams }) const data = await response.json() diff --git a/apps/sim/app/api/knowledge/route.test.ts b/apps/sim/app/api/knowledge/route.test.ts index 5d19704e94..97218d77c0 100644 --- a/apps/sim/app/api/knowledge/route.test.ts +++ b/apps/sim/app/api/knowledge/route.test.ts @@ -60,7 +60,7 @@ describe('Knowledge Base API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/route') const response = await GET(req) const data = await response.json() @@ -73,7 +73,7 @@ describe('Knowledge Base API Route', () => { mockDbChain.orderBy.mockRejectedValue(new Error('Database error')) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/knowledge/route') const response = await GET(req) const data = await response.json() @@ -97,7 +97,7 @@ describe('Knowledge Base API Route', () => { mockAuth$.mockAuthenticatedUser() const req = createMockRequest('POST', validKnowledgeBaseData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/route') const response = await POST(req) const data = await response.json() @@ -112,7 +112,7 @@ describe('Knowledge Base API Route', () => { mockAuth$.mockUnauthenticated() const req = createMockRequest('POST', validKnowledgeBaseData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/route') const response = await POST(req) const data = await response.json() @@ -124,7 +124,7 @@ describe('Knowledge Base API Route', () => { mockAuth$.mockAuthenticatedUser() const req = createMockRequest('POST', { description: 'Missing name' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/route') const response = await POST(req) const data = await response.json() @@ -146,7 +146,7 @@ describe('Knowledge Base API Route', () => { } const req = createMockRequest('POST', invalidData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/route') const response = await POST(req) const data = await response.json() @@ -159,7 +159,7 @@ describe('Knowledge Base API Route', () => { const minimalData = { name: 'Test KB' } const req = createMockRequest('POST', minimalData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/route') const response = await POST(req) const data = await response.json() @@ -178,7 +178,7 @@ describe('Knowledge Base API Route', () => { mockDbChain.values.mockRejectedValue(new Error('Database error')) const req = createMockRequest('POST', validKnowledgeBaseData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/route') const response = await POST(req) const data = await response.json() diff --git a/apps/sim/app/api/knowledge/search/route.test.ts b/apps/sim/app/api/knowledge/search/route.test.ts index a1405134d7..13a3a91012 100644 --- a/apps/sim/app/api/knowledge/search/route.test.ts +++ b/apps/sim/app/api/knowledge/search/route.test.ts @@ -154,7 +154,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -200,7 +200,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', multiKbData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -234,7 +234,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', workflowData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -247,7 +247,7 @@ describe('Knowledge Search API Route', () => { mockGetUserId.mockResolvedValue(null) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -264,7 +264,7 @@ describe('Knowledge Search API Route', () => { mockGetUserId.mockResolvedValue(null) const req = createMockRequest('POST', workflowData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -282,7 +282,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -304,7 +304,7 @@ describe('Knowledge Search API Route', () => { .mockResolvedValueOnce({ hasAccess: false, notFound: true }) const req = createMockRequest('POST', multiKbData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -320,7 +320,7 @@ describe('Knowledge Search API Route', () => { } const req = createMockRequest('POST', invalidData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -354,7 +354,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', dataWithoutTopK) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -374,7 +374,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -393,7 +393,7 @@ describe('Knowledge Search API Route', () => { mockDbChain.limit.mockResolvedValueOnce(mockKnowledgeBases) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -415,7 +415,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -436,7 +436,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -465,7 +465,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() @@ -513,7 +513,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', validSearchData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') await POST(req) // Verify token estimation was called with correct parameters @@ -570,7 +570,7 @@ describe('Knowledge Search API Route', () => { }) const req = createMockRequest('POST', longQueryData) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/knowledge/search/route') const response = await POST(req) const data = await response.json() diff --git a/apps/sim/app/api/knowledge/utils.test.ts b/apps/sim/app/api/knowledge/utils.test.ts index c5f0421df6..9d9fc0d2d3 100644 --- a/apps/sim/app/api/knowledge/utils.test.ts +++ b/apps/sim/app/api/knowledge/utils.test.ts @@ -151,7 +151,7 @@ import { checkKnowledgeBaseAccess, generateEmbeddings, processDocumentAsync, -} from './utils' +} from '@/app/api/knowledge/utils' describe('Knowledge Utils', () => { beforeEach(() => { diff --git a/apps/sim/app/api/logs/cleanup/route.ts b/apps/sim/app/api/logs/cleanup/route.ts index 373d2a42a6..5e7b9257af 100644 --- a/apps/sim/app/api/logs/cleanup/route.ts +++ b/apps/sim/app/api/logs/cleanup/route.ts @@ -11,7 +11,7 @@ import { subscription, user, workflow, workflowExecutionLogs } from '@/db/schema export const dynamic = 'force-dynamic' -const logger = createLogger('LogsCleanup') +const logger = createLogger('LogsCleanupAPI') const BATCH_SIZE = 2000 const S3_CONFIG = { diff --git a/apps/sim/app/api/organizations/invitations/accept/route.ts b/apps/sim/app/api/organizations/invitations/accept/route.ts index b13a6f1682..eb995ec4bd 100644 --- a/apps/sim/app/api/organizations/invitations/accept/route.ts +++ b/apps/sim/app/api/organizations/invitations/accept/route.ts @@ -7,7 +7,7 @@ import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { invitation, member, permissions, workspaceInvitation } from '@/db/schema' -const logger = createLogger('OrganizationInvitationAcceptance') +const logger = createLogger('OrganizationInvitationAcceptanceAPI') export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/schedules/[id]/status/route.test.ts b/apps/sim/app/api/schedules/[id]/status/route.test.ts index 3a71190fb3..29d269ab0a 100644 --- a/apps/sim/app/api/schedules/[id]/status/route.test.ts +++ b/apps/sim/app/api/schedules/[id]/status/route.test.ts @@ -44,7 +44,7 @@ describe('Schedule Status API Route', () => { const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/[id]/status/route') const res = await GET(req, { params: Promise.resolve({ id: 'schedule-id' }) }) @@ -67,7 +67,7 @@ describe('Schedule Status API Route', () => { })) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/[id]/status/route') const res = await GET(req, { params: Promise.resolve({ id: 'schedule-id' }) }) expect(res.status).toBe(200) @@ -85,7 +85,7 @@ describe('Schedule Status API Route', () => { })) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/[id]/status/route') const res = await GET(req, { params: Promise.resolve({ id: 'missing-id' }) }) expect(res.status).toBe(404) @@ -101,7 +101,7 @@ describe('Schedule Status API Route', () => { })) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/[id]/status/route') const res = await GET(req, { params: Promise.resolve({ id: 'schedule-id' }) }) expect(res.status).toBe(404) @@ -117,7 +117,7 @@ describe('Schedule Status API Route', () => { })) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/[id]/status/route') const res = await GET(req, { params: Promise.resolve({ id: 'schedule-id' }) }) expect(res.status).toBe(403) @@ -133,7 +133,7 @@ describe('Schedule Status API Route', () => { })) const req = createMockRequest('GET') - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/[id]/status/route') const res = await GET(req, { params: Promise.resolve({ id: 'schedule-id' }) }) expect(res.status).toBe(401) diff --git a/apps/sim/app/api/schedules/execute/route.test.ts b/apps/sim/app/api/schedules/execute/route.test.ts index 41fad03654..c7d14b89ab 100644 --- a/apps/sim/app/api/schedules/execute/route.test.ts +++ b/apps/sim/app/api/schedules/execute/route.test.ts @@ -121,7 +121,7 @@ describe('Scheduled Workflow Execution API Route', () => { })), })) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/execute/route') const response = await GET() expect(response).toBeDefined() @@ -137,7 +137,7 @@ describe('Scheduled Workflow Execution API Route', () => { })), })) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/execute/route') const response = await GET() expect(response).toBeDefined() @@ -166,7 +166,7 @@ describe('Scheduled Workflow Execution API Route', () => { return { db: mockDb } }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/execute/route') const response = await GET() expect(response.status).toBe(200) const data = await response.json() @@ -194,7 +194,7 @@ describe('Scheduled Workflow Execution API Route', () => { return { db: mockDb } }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/execute/route') const response = await GET() expect(response.status).toBe(500) const data = await response.json() @@ -226,7 +226,7 @@ describe('Scheduled Workflow Execution API Route', () => { ], }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/execute/route') const response = await GET() expect(response.status).toBe(200) @@ -256,7 +256,7 @@ describe('Scheduled Workflow Execution API Route', () => { ], }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/schedules/execute/route') const response = await GET() expect(response.status).toBe(200) diff --git a/apps/sim/app/api/schedules/route.test.ts b/apps/sim/app/api/schedules/route.test.ts index 9879bc4d55..264a5d0932 100644 --- a/apps/sim/app/api/schedules/route.test.ts +++ b/apps/sim/app/api/schedules/route.test.ts @@ -156,7 +156,7 @@ describe('Schedule Configuration API Route', () => { }) // Import the route handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/schedules/route') // Call the handler const response = await POST(req) @@ -251,7 +251,7 @@ describe('Schedule Configuration API Route', () => { })) // Import the route handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/schedules/route') // Call the handler const response = await POST(req) @@ -328,7 +328,7 @@ describe('Schedule Configuration API Route', () => { }) // Import the route handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/schedules/route') // Call the handler const response = await POST(req) @@ -370,7 +370,7 @@ describe('Schedule Configuration API Route', () => { }) // Import the route handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/schedules/route') // Call the handler const response = await POST(req) @@ -397,7 +397,7 @@ describe('Schedule Configuration API Route', () => { }) // Import the route handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/schedules/route') // Call the handler const response = await POST(req) @@ -420,7 +420,7 @@ describe('Schedule Configuration API Route', () => { }) // Import the route handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/schedules/route') // Call the handler const response = await POST(req) diff --git a/apps/sim/app/api/tools/confluence/pages/route.ts b/apps/sim/app/api/tools/confluence/pages/route.ts index 947632eb27..934c5f61a9 100644 --- a/apps/sim/app/api/tools/confluence/pages/route.ts +++ b/apps/sim/app/api/tools/confluence/pages/route.ts @@ -2,7 +2,7 @@ import { NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { getConfluenceCloudId } from '@/tools/confluence/utils' -const logger = createLogger('ConfluencePages') +const logger = createLogger('ConfluencePagesAPI') export const dynamic = 'force-dynamic' diff --git a/apps/sim/app/api/tools/custom/route.test.ts b/apps/sim/app/api/tools/custom/route.test.ts index d3c9d0321a..949ad1e647 100644 --- a/apps/sim/app/api/tools/custom/route.test.ts +++ b/apps/sim/app/api/tools/custom/route.test.ts @@ -163,7 +163,7 @@ describe('Custom Tools API Routes', () => { mockWhere.mockReturnValueOnce(Promise.resolve(sampleTools)) // Import handler after mocks are set up - const { GET } = await import('./route') + const { GET } = await import('@/app/api/tools/custom/route') // Call the handler const response = await GET(req) @@ -190,7 +190,7 @@ describe('Custom Tools API Routes', () => { })) // Import handler after mocks are set up - const { GET } = await import('./route') + const { GET } = await import('@/app/api/tools/custom/route') // Call the handler const response = await GET(req) @@ -206,7 +206,7 @@ describe('Custom Tools API Routes', () => { const req = new NextRequest('http://localhost:3000/api/tools/custom?workflowId=workflow-123') // Import handler after mocks are set up - const { GET } = await import('./route') + const { GET } = await import('@/app/api/tools/custom/route') // Call the handler const _response = await GET(req) @@ -247,7 +247,7 @@ describe('Custom Tools API Routes', () => { const req = createMockRequest('POST', { tools: [newTool] }) // Import handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/tools/custom/route') // Call the handler const response = await POST(req) @@ -289,7 +289,7 @@ describe('Custom Tools API Routes', () => { const req = createMockRequest('POST', { tools: [updateTool] }) // Import handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/tools/custom/route') // Call the handler const response = await POST(req) @@ -315,7 +315,7 @@ describe('Custom Tools API Routes', () => { const req = createMockRequest('POST', { tools: [] }) // Import handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/tools/custom/route') // Call the handler const response = await POST(req) @@ -337,7 +337,7 @@ describe('Custom Tools API Routes', () => { const req = createMockRequest('POST', { tools: [invalidTool] }) // Import handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/tools/custom/route') // Call the handler const response = await POST(req) @@ -362,7 +362,7 @@ describe('Custom Tools API Routes', () => { const req = new NextRequest('http://localhost:3000/api/tools/custom?id=tool-1') // Import handler after mocks are set up - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/tools/custom/route') // Call the handler const response = await DELETE(req) @@ -382,7 +382,7 @@ describe('Custom Tools API Routes', () => { const req = createMockRequest('DELETE') // Import handler after mocks are set up - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/tools/custom/route') // Call the handler const response = await DELETE(req) @@ -401,7 +401,7 @@ describe('Custom Tools API Routes', () => { const req = new NextRequest('http://localhost:3000/api/tools/custom?id=non-existent') // Import handler after mocks are set up - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/tools/custom/route') // Call the handler const response = await DELETE(req) @@ -421,7 +421,7 @@ describe('Custom Tools API Routes', () => { const req = new NextRequest('http://localhost:3000/api/tools/custom?id=tool-1') // Import handler after mocks are set up - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/tools/custom/route') // Call the handler const response = await DELETE(req) @@ -442,7 +442,7 @@ describe('Custom Tools API Routes', () => { const req = new NextRequest('http://localhost:3000/api/tools/custom?id=tool-1') // Import handler after mocks are set up - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/tools/custom/route') // Call the handler const response = await DELETE(req) diff --git a/apps/sim/app/api/tools/linear/projects/route.ts b/apps/sim/app/api/tools/linear/projects/route.ts index 90ada406ba..8ebcd1ad32 100644 --- a/apps/sim/app/api/tools/linear/projects/route.ts +++ b/apps/sim/app/api/tools/linear/projects/route.ts @@ -7,7 +7,7 @@ import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' -const logger = createLogger('LinearProjects') +const logger = createLogger('LinearProjectsAPI') export async function POST(request: Request) { try { diff --git a/apps/sim/app/api/tools/linear/teams/route.ts b/apps/sim/app/api/tools/linear/teams/route.ts index df927c0c4c..334a73f5ef 100644 --- a/apps/sim/app/api/tools/linear/teams/route.ts +++ b/apps/sim/app/api/tools/linear/teams/route.ts @@ -7,7 +7,7 @@ import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' -const logger = createLogger('LinearTeams') +const logger = createLogger('LinearTeamsAPI') export async function POST(request: Request) { try { diff --git a/apps/sim/app/api/tools/microsoft-teams/chats/route.ts b/apps/sim/app/api/tools/microsoft-teams/chats/route.ts index feedc37960..0be25767ac 100644 --- a/apps/sim/app/api/tools/microsoft-teams/chats/route.ts +++ b/apps/sim/app/api/tools/microsoft-teams/chats/route.ts @@ -5,7 +5,7 @@ import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' -const logger = createLogger('teams-chats') +const logger = createLogger('TeamsChatsAPI') // Helper function to get chat members and create a meaningful name const getChatDisplayName = async ( diff --git a/apps/sim/app/api/tools/microsoft-teams/teams/route.ts b/apps/sim/app/api/tools/microsoft-teams/teams/route.ts index 63c5b8b7b2..18d796d650 100644 --- a/apps/sim/app/api/tools/microsoft-teams/teams/route.ts +++ b/apps/sim/app/api/tools/microsoft-teams/teams/route.ts @@ -5,7 +5,7 @@ import { refreshAccessTokenIfNeeded } from '@/app/api/auth/oauth/utils' export const dynamic = 'force-dynamic' -const logger = createLogger('teams-teams') +const logger = createLogger('TeamsTeamsAPI') export async function POST(request: Request) { try { diff --git a/apps/sim/app/api/tools/stagehand/agent/route.ts b/apps/sim/app/api/tools/stagehand/agent/route.ts index 9d01834b52..592b208aad 100644 --- a/apps/sim/app/api/tools/stagehand/agent/route.ts +++ b/apps/sim/app/api/tools/stagehand/agent/route.ts @@ -3,7 +3,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { ensureZodObject, normalizeUrl } from '../utils' +import { ensureZodObject, normalizeUrl } from '@/app/api/tools/stagehand/utils' const logger = createLogger('StagehandAgentAPI') diff --git a/apps/sim/app/api/tools/stagehand/extract/route.ts b/apps/sim/app/api/tools/stagehand/extract/route.ts index 9368d17173..b7a07e636c 100644 --- a/apps/sim/app/api/tools/stagehand/extract/route.ts +++ b/apps/sim/app/api/tools/stagehand/extract/route.ts @@ -3,7 +3,7 @@ import { type NextRequest, NextResponse } from 'next/server' import { z } from 'zod' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' -import { ensureZodObject, normalizeUrl } from '../utils' +import { ensureZodObject, normalizeUrl } from '@/app/api/tools/stagehand/utils' const logger = createLogger('StagehandExtractAPI') diff --git a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts index 3519e96fd7..8606665bfe 100644 --- a/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts +++ b/apps/sim/app/api/users/me/subscription/[id]/transfer/route.test.ts @@ -97,7 +97,7 @@ describe('Subscription Transfer API Routes', () => { organizationId: 'org-456', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/users/me/subscription/[id]/transfer/route') const response = await POST(req, { params: Promise.resolve({ id: 'sub-123' }) }) @@ -120,7 +120,7 @@ describe('Subscription Transfer API Routes', () => { organizationId: 'org-456', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/users/me/subscription/[id]/transfer/route') const response = await POST(req, { params: Promise.resolve({ id: 'sub-123' }) }) const data = await response.json() @@ -149,7 +149,7 @@ describe('Subscription Transfer API Routes', () => { organizationId: 'org-456', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/users/me/subscription/[id]/transfer/route') const response = await POST(req, { params: Promise.resolve({ id: 'sub-123' }) }) const data = await response.json() @@ -174,7 +174,7 @@ describe('Subscription Transfer API Routes', () => { organizationId: 'org-456', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/users/me/subscription/[id]/transfer/route') const response = await POST(req, { params: Promise.resolve({ id: 'sub-123' }) }) const data = await response.json() @@ -214,7 +214,7 @@ describe('Subscription Transfer API Routes', () => { organizationId: 'org-456', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/users/me/subscription/[id]/transfer/route') const response = await POST(req, { params: Promise.resolve({ id: 'sub-123' }) }) const data = await response.json() @@ -227,7 +227,7 @@ describe('Subscription Transfer API Routes', () => { it('should reject invalid request parameters', async () => { const req = createMockRequest('POST', {}) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/users/me/subscription/[id]/transfer/route') const response = await POST(req, { params: Promise.resolve({ id: 'sub-123' }) }) const data = await response.json() @@ -246,7 +246,7 @@ describe('Subscription Transfer API Routes', () => { organizationId: 'org-456', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/users/me/subscription/[id]/transfer/route') const response = await POST(req, { params: Promise.resolve({ id: 'sub-123' }) }) const data = await response.json() @@ -265,7 +265,7 @@ describe('Subscription Transfer API Routes', () => { organizationId: 'org-456', }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/users/me/subscription/[id]/transfer/route') const response = await POST(req, { params: Promise.resolve({ id: 'sub-123' }) }) const data = await response.json() diff --git a/apps/sim/app/api/users/rate-limit/route.ts b/apps/sim/app/api/users/rate-limit/route.ts index 5058fe0e5c..3a71ceca3b 100644 --- a/apps/sim/app/api/users/rate-limit/route.ts +++ b/apps/sim/app/api/users/rate-limit/route.ts @@ -5,10 +5,10 @@ import { createLogger } from '@/lib/logs/console/logger' export const dynamic = 'force-dynamic' +import { createErrorResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { apiKey as apiKeyTable, subscription } from '@/db/schema' import { RateLimiter } from '@/services/queue' -import { createErrorResponse } from '../../workflows/utils' const logger = createLogger('RateLimitAPI') diff --git a/apps/sim/app/api/webhooks/route.ts b/apps/sim/app/api/webhooks/route.ts index db6e4a4515..a9d646a81f 100644 --- a/apps/sim/app/api/webhooks/route.ts +++ b/apps/sim/app/api/webhooks/route.ts @@ -4,9 +4,9 @@ import { type NextRequest, NextResponse } from 'next/server' import { getSession } from '@/lib/auth' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' +import { getOAuthToken } from '@/app/api/auth/oauth/utils' import { db } from '@/db' import { webhook, workflow } from '@/db/schema' -import { getOAuthToken } from '../auth/oauth/utils' const logger = createLogger('WebhooksAPI') diff --git a/apps/sim/app/api/webhooks/trigger/[path]/route.test.ts b/apps/sim/app/api/webhooks/trigger/[path]/route.test.ts index dda7083ef5..cf6ab0a837 100644 --- a/apps/sim/app/api/webhooks/trigger/[path]/route.test.ts +++ b/apps/sim/app/api/webhooks/trigger/[path]/route.test.ts @@ -63,11 +63,11 @@ vi.mock('@/lib/webhooks/utils', () => ({ processWebhook: processWebhookMock, })) -vi.mock('./utils', () => ({ +vi.mock('@/app/api/webhooks/utils', () => ({ generateRequestHash: generateRequestHashMock, })) -vi.mock('../../utils', () => ({ +vi.mock('@/app/api/webhooks/utils', () => ({ validateSlackSignature: validateSlackSignatureMock, })) @@ -230,7 +230,7 @@ describe('Webhook Trigger API Route', () => { const params = Promise.resolve({ path: 'whatsapp' }) // Import the handler after mocks are set up - const { GET } = await import('./route') + const { GET } = await import('@/app/api/webhooks/trigger/[path]/route') // Call the handler const response = await GET(req, { params }) @@ -271,7 +271,7 @@ describe('Webhook Trigger API Route', () => { const params = Promise.resolve({ path: 'non-existent-path' }) // Import the handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/webhooks/trigger/[path]/route') // Call the handler const response = await POST(req, { params }) @@ -328,7 +328,7 @@ describe('Webhook Trigger API Route', () => { const params = Promise.resolve({ path: 'test-path' }) // Import the handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/webhooks/trigger/[path]/route') // Call the handler const response = await POST(req, { params }) @@ -398,7 +398,7 @@ describe('Webhook Trigger API Route', () => { const params = Promise.resolve({ path: 'test-path' }) // Import the handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/webhooks/trigger/[path]/route') // Call the handler const response = await POST(req, { params }) @@ -484,7 +484,7 @@ describe('Webhook Trigger API Route', () => { const params = Promise.resolve({ path: 'airtable-path' }) // Import the handler after mocks are set up - const { POST } = await import('./route') + const { POST } = await import('@/app/api/webhooks/trigger/[path]/route') // Call the handler const response = await POST(req, { params }) diff --git a/apps/sim/app/api/workflows/[id]/deploy/route.test.ts b/apps/sim/app/api/workflows/[id]/deploy/route.test.ts index 1d73a0fe22..667a50798a 100644 --- a/apps/sim/app/api/workflows/[id]/deploy/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/deploy/route.test.ts @@ -73,7 +73,7 @@ describe('Workflow Deployment API Route', () => { }), })) - vi.doMock('../../middleware', () => ({ + vi.doMock('@/app/api/workflows/middleware', () => ({ validateWorkflowAccess: vi.fn().mockResolvedValue({ workflow: { id: 'workflow-id', @@ -82,7 +82,7 @@ describe('Workflow Deployment API Route', () => { }), })) - vi.doMock('../../utils', () => ({ + vi.doMock('@/app/api/workflows/utils', () => ({ createSuccessResponse: vi.fn().mockImplementation((data) => { return new Response(JSON.stringify(data), { status: 200, @@ -203,7 +203,7 @@ describe('Workflow Deployment API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/deploy/route') const response = await GET(req, { params }) @@ -281,7 +281,7 @@ describe('Workflow Deployment API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/deploy/route') const response = await POST(req, { params }) @@ -359,7 +359,7 @@ describe('Workflow Deployment API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/deploy/route') const response = await POST(req, { params }) @@ -391,7 +391,7 @@ describe('Workflow Deployment API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/workflows/[id]/deploy/route') const response = await DELETE(req, { params }) @@ -410,7 +410,7 @@ describe('Workflow Deployment API Route', () => { * Test error handling */ it('should handle errors when workflow is not found', async () => { - vi.doMock('../../middleware', () => ({ + vi.doMock('@/app/api/workflows/middleware', () => ({ validateWorkflowAccess: vi.fn().mockResolvedValue({ error: { message: 'Workflow not found', @@ -423,7 +423,7 @@ describe('Workflow Deployment API Route', () => { const params = Promise.resolve({ id: 'invalid-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/deploy/route') const response = await POST(req, { params }) @@ -438,7 +438,7 @@ describe('Workflow Deployment API Route', () => { * Test unauthorized access */ it('should handle unauthorized access to workflow', async () => { - vi.doMock('../../middleware', () => ({ + vi.doMock('@/app/api/workflows/middleware', () => ({ validateWorkflowAccess: vi.fn().mockResolvedValue({ error: { message: 'Unauthorized access', @@ -451,7 +451,7 @@ describe('Workflow Deployment API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/deploy/route') const response = await POST(req, { params }) diff --git a/apps/sim/app/api/workflows/[id]/deploy/route.ts b/apps/sim/app/api/workflows/[id]/deploy/route.ts index 58ad62fa4a..372dee5fec 100644 --- a/apps/sim/app/api/workflows/[id]/deploy/route.ts +++ b/apps/sim/app/api/workflows/[id]/deploy/route.ts @@ -3,10 +3,10 @@ import type { NextRequest } from 'next/server' import { v4 as uuidv4 } from 'uuid' import { createLogger } from '@/lib/logs/console/logger' import { generateApiKey } from '@/lib/utils' +import { validateWorkflowAccess } from '@/app/api/workflows/middleware' +import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { apiKey, workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' -import { validateWorkflowAccess } from '../../middleware' -import { createErrorResponse, createSuccessResponse } from '../../utils' const logger = createLogger('WorkflowDeployAPI') diff --git a/apps/sim/app/api/workflows/[id]/deployed/route.ts b/apps/sim/app/api/workflows/[id]/deployed/route.ts index b60b973b32..64e2a30cdd 100644 --- a/apps/sim/app/api/workflows/[id]/deployed/route.ts +++ b/apps/sim/app/api/workflows/[id]/deployed/route.ts @@ -1,10 +1,10 @@ import { eq } from 'drizzle-orm' import type { NextRequest, NextResponse } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' +import { validateWorkflowAccess } from '@/app/api/workflows/middleware' +import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { workflow } from '@/db/schema' -import { validateWorkflowAccess } from '../../middleware' -import { createErrorResponse, createSuccessResponse } from '../../utils' const logger = createLogger('WorkflowDeployedStateAPI') diff --git a/apps/sim/app/api/workflows/[id]/execute/route.test.ts b/apps/sim/app/api/workflows/[id]/execute/route.test.ts index 4128fa420b..237ddb4cfe 100644 --- a/apps/sim/app/api/workflows/[id]/execute/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/execute/route.test.ts @@ -252,7 +252,7 @@ describe('Workflow Execution API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/execute/route') const response = await GET(req, { params }) @@ -297,7 +297,7 @@ describe('Workflow Execution API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/execute/route') const response = await POST(req, { params }) @@ -351,7 +351,7 @@ describe('Workflow Execution API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/execute/route') const response = await POST(req, { params }) @@ -379,7 +379,7 @@ describe('Workflow Execution API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/execute/route') const response = await POST(req, { params }) @@ -414,7 +414,7 @@ describe('Workflow Execution API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/execute/route') const response = await POST(req, { params }) @@ -442,7 +442,7 @@ describe('Workflow Execution API Route', () => { const params = Promise.resolve({ id: 'invalid-workflow-id' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/execute/route') const response = await GET(req, { params }) @@ -483,7 +483,7 @@ describe('Workflow Execution API Route', () => { const params = Promise.resolve({ id: 'workflow-id' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/execute/route') const response = await GET(req, { params }) @@ -575,7 +575,7 @@ describe('Workflow Execution API Route', () => { const params = Promise.resolve({ id: 'workflow-with-vars-id' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/execute/route') await POST(req, { params }) diff --git a/apps/sim/app/api/workflows/[id]/execute/route.ts b/apps/sim/app/api/workflows/[id]/execute/route.ts index 77efdfad50..bb19cefa2e 100644 --- a/apps/sim/app/api/workflows/[id]/execute/route.ts +++ b/apps/sim/app/api/workflows/[id]/execute/route.ts @@ -15,6 +15,8 @@ import { updateWorkflowRunCounts, workflowHasResponseBlock, } from '@/lib/workflows/utils' +import { validateWorkflowAccess } from '@/app/api/workflows/middleware' +import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { environment as environmentTable, subscription, userStats } from '@/db/schema' import { Executor } from '@/executor' @@ -26,8 +28,6 @@ import { type TriggerType, } from '@/services/queue' import { mergeSubblockState } from '@/stores/workflows/server-utils' -import { validateWorkflowAccess } from '../../middleware' -import { createErrorResponse, createSuccessResponse } from '../../utils' const logger = createLogger('WorkflowExecuteAPI') diff --git a/apps/sim/app/api/workflows/[id]/log/route.ts b/apps/sim/app/api/workflows/[id]/log/route.ts index 9f8dc9e64e..f6e17443ef 100644 --- a/apps/sim/app/api/workflows/[id]/log/route.ts +++ b/apps/sim/app/api/workflows/[id]/log/route.ts @@ -2,8 +2,8 @@ import type { NextRequest } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { LoggingSession } from '@/lib/logs/execution/logging-session' import { buildTraceSpans } from '@/lib/logs/execution/trace-spans/trace-spans' -import { validateWorkflowAccess } from '../../middleware' -import { createErrorResponse, createSuccessResponse } from '../../utils' +import { validateWorkflowAccess } from '@/app/api/workflows/middleware' +import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' const logger = createLogger('WorkflowLogAPI') diff --git a/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts b/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts index 81b529e0e9..1d329e0c18 100644 --- a/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts +++ b/apps/sim/app/api/workflows/[id]/revert-to-deployed/route.ts @@ -4,11 +4,11 @@ import type { NextRequest } from 'next/server' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' import { saveWorkflowToNormalizedTables } from '@/lib/workflows/db-helpers' +import { validateWorkflowAccess } from '@/app/api/workflows/middleware' +import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { workflow } from '@/db/schema' import type { WorkflowState } from '@/stores/workflows/workflow/types' -import { validateWorkflowAccess } from '../../middleware' -import { createErrorResponse, createSuccessResponse } from '../../utils' const logger = createLogger('RevertToDeployedAPI') diff --git a/apps/sim/app/api/workflows/[id]/route.test.ts b/apps/sim/app/api/workflows/[id]/route.test.ts index 029af8e332..930c3fb0d6 100644 --- a/apps/sim/app/api/workflows/[id]/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/route.test.ts @@ -45,7 +45,7 @@ describe('Workflow By ID API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/route') const response = await GET(req, { params }) expect(response.status).toBe(401) @@ -75,7 +75,7 @@ describe('Workflow By ID API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/nonexistent') const params = Promise.resolve({ id: 'nonexistent' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/route') const response = await GET(req, { params }) expect(response.status).toBe(404) @@ -113,7 +113,7 @@ describe('Workflow By ID API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/route') const response = await GET(req, { params }) expect(response.status).toBe(200) @@ -156,7 +156,7 @@ describe('Workflow By ID API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/route') const response = await GET(req, { params }) expect(response.status).toBe(200) @@ -199,7 +199,7 @@ describe('Workflow By ID API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/route') const response = await GET(req, { params }) expect(response.status).toBe(403) @@ -249,7 +249,7 @@ describe('Workflow By ID API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/route') const response = await GET(req, { params }) expect(response.status).toBe(200) @@ -298,7 +298,7 @@ describe('Workflow By ID API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/workflows/[id]/route') const response = await DELETE(req, { params }) expect(response.status).toBe(200) @@ -349,7 +349,7 @@ describe('Workflow By ID API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/workflows/[id]/route') const response = await DELETE(req, { params }) expect(response.status).toBe(200) @@ -393,7 +393,7 @@ describe('Workflow By ID API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { DELETE } = await import('./route') + const { DELETE } = await import('@/app/api/workflows/[id]/route') const response = await DELETE(req, { params }) expect(response.status).toBe(403) @@ -444,7 +444,7 @@ describe('Workflow By ID API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/workflows/[id]/route') const response = await PUT(req, { params }) expect(response.status).toBe(200) @@ -498,7 +498,7 @@ describe('Workflow By ID API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/workflows/[id]/route') const response = await PUT(req, { params }) expect(response.status).toBe(200) @@ -545,7 +545,7 @@ describe('Workflow By ID API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/workflows/[id]/route') const response = await PUT(req, { params }) expect(response.status).toBe(403) @@ -588,7 +588,7 @@ describe('Workflow By ID API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { PUT } = await import('./route') + const { PUT } = await import('@/app/api/workflows/[id]/route') const response = await PUT(req, { params }) expect(response.status).toBe(400) @@ -620,7 +620,7 @@ describe('Workflow By ID API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/route') const response = await GET(req, { params }) expect(response.status).toBe(500) diff --git a/apps/sim/app/api/workflows/[id]/status/route.ts b/apps/sim/app/api/workflows/[id]/status/route.ts index 25e2672906..5bd227b4c5 100644 --- a/apps/sim/app/api/workflows/[id]/status/route.ts +++ b/apps/sim/app/api/workflows/[id]/status/route.ts @@ -2,10 +2,10 @@ import { eq } from 'drizzle-orm' import type { NextRequest } from 'next/server' import { createLogger } from '@/lib/logs/console/logger' import { hasWorkflowChanged } from '@/lib/workflows/utils' +import { validateWorkflowAccess } from '@/app/api/workflows/middleware' +import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils' import { db } from '@/db' import { workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' -import { validateWorkflowAccess } from '../../middleware' -import { createErrorResponse, createSuccessResponse } from '../../utils' const logger = createLogger('WorkflowStatusAPI') diff --git a/apps/sim/app/api/workflows/[id]/variables/route.test.ts b/apps/sim/app/api/workflows/[id]/variables/route.test.ts index b09cbb2909..50dc3b5a86 100644 --- a/apps/sim/app/api/workflows/[id]/variables/route.test.ts +++ b/apps/sim/app/api/workflows/[id]/variables/route.test.ts @@ -37,7 +37,7 @@ describe('Workflow Variables API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123/variables') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/variables/route') const response = await GET(req, { params }) expect(response.status).toBe(401) @@ -54,7 +54,7 @@ describe('Workflow Variables API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/nonexistent/variables') const params = Promise.resolve({ id: 'nonexistent' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/variables/route') const response = await GET(req, { params }) expect(response.status).toBe(404) @@ -80,7 +80,7 @@ describe('Workflow Variables API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123/variables') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/variables/route') const response = await GET(req, { params }) expect(response.status).toBe(200) @@ -110,7 +110,7 @@ describe('Workflow Variables API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123/variables') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/variables/route') const response = await GET(req, { params }) expect(response.status).toBe(200) @@ -146,7 +146,7 @@ describe('Workflow Variables API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123/variables') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/variables/route') const response = await GET(req, { params }) expect(response.status).toBe(401) @@ -172,7 +172,7 @@ describe('Workflow Variables API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123/variables') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/variables/route') const response = await GET(req, { params }) expect(response.status).toBe(200) @@ -196,7 +196,7 @@ describe('Workflow Variables API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123/variables') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/variables/route') const response = await GET(req, { params }) expect(response.status).toBe(200) @@ -230,7 +230,7 @@ describe('Workflow Variables API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/variables/route') const response = await POST(req, { params }) expect(response.status).toBe(200) @@ -265,7 +265,7 @@ describe('Workflow Variables API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/variables/route') const response = await POST(req, { params }) expect(response.status).toBe(401) @@ -295,7 +295,7 @@ describe('Workflow Variables API Route', () => { }) const params = Promise.resolve({ id: 'workflow-123' }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workflows/[id]/variables/route') const response = await POST(req, { params }) expect(response.status).toBe(400) @@ -314,7 +314,7 @@ describe('Workflow Variables API Route', () => { const req = new NextRequest('http://localhost:3000/api/workflows/workflow-123/variables') const params = Promise.resolve({ id: 'workflow-123' }) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workflows/[id]/variables/route') const response = await GET(req, { params }) expect(response.status).toBe(500) diff --git a/apps/sim/app/api/workspaces/invitations/[id]/route.test.ts b/apps/sim/app/api/workspaces/invitations/[id]/route.test.ts index a6d3aa34d5..a4391b74ed 100644 --- a/apps/sim/app/api/workspaces/invitations/[id]/route.test.ts +++ b/apps/sim/app/api/workspaces/invitations/[id]/route.test.ts @@ -2,9 +2,9 @@ import { NextRequest, NextResponse } from 'next/server' import { beforeEach, describe, expect, it, vi } from 'vitest' import { getSession } from '@/lib/auth' import { hasWorkspaceAdminAccess } from '@/lib/permissions/utils' +import { DELETE } from '@/app/api/workspaces/invitations/[id]/route' import { db } from '@/db' import { workspaceInvitation } from '@/db/schema' -import { DELETE } from './route' vi.mock('@/lib/auth', () => ({ getSession: vi.fn(), diff --git a/apps/sim/app/api/workspaces/invitations/route.test.ts b/apps/sim/app/api/workspaces/invitations/route.test.ts index f46f218dc2..252d1881f1 100644 --- a/apps/sim/app/api/workspaces/invitations/route.test.ts +++ b/apps/sim/app/api/workspaces/invitations/route.test.ts @@ -110,7 +110,7 @@ describe('Workspace Invitations API Route', () => { it('should return 401 when user is not authenticated', async () => { mockGetSession.mockResolvedValue(null) - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('GET') const response = await GET(req) const data = await response.json() @@ -123,7 +123,7 @@ describe('Workspace Invitations API Route', () => { mockGetSession.mockResolvedValue({ user: { id: 'user-123' } }) mockDbResults = [[], []] // No workspaces, no invitations - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('GET') const response = await GET(req) const data = await response.json() @@ -141,7 +141,7 @@ describe('Workspace Invitations API Route', () => { ] mockDbResults = [mockWorkspaces, mockInvitations] - const { GET } = await import('./route') + const { GET } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('GET') const response = await GET(req) const data = await response.json() @@ -155,7 +155,7 @@ describe('Workspace Invitations API Route', () => { it('should return 401 when user is not authenticated', async () => { mockGetSession.mockResolvedValue(null) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { workspaceId: 'workspace-1', email: 'test@example.com', @@ -170,7 +170,7 @@ describe('Workspace Invitations API Route', () => { it('should return 400 when workspaceId is missing', async () => { mockGetSession.mockResolvedValue({ user: { id: 'user-123' } }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { email: 'test@example.com' }) const response = await POST(req) const data = await response.json() @@ -182,7 +182,7 @@ describe('Workspace Invitations API Route', () => { it('should return 400 when email is missing', async () => { mockGetSession.mockResolvedValue({ user: { id: 'user-123' } }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { workspaceId: 'workspace-1' }) const response = await POST(req) const data = await response.json() @@ -194,7 +194,7 @@ describe('Workspace Invitations API Route', () => { it('should return 400 when permission type is invalid', async () => { mockGetSession.mockResolvedValue({ user: { id: 'user-123' } }) - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { workspaceId: 'workspace-1', email: 'test@example.com', @@ -213,7 +213,7 @@ describe('Workspace Invitations API Route', () => { mockGetSession.mockResolvedValue({ user: { id: 'user-123' } }) mockDbResults = [[]] // No admin permissions found - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { workspaceId: 'workspace-1', email: 'test@example.com', @@ -232,7 +232,7 @@ describe('Workspace Invitations API Route', () => { [], // Workspace not found ] - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { workspaceId: 'workspace-1', email: 'test@example.com', @@ -253,7 +253,7 @@ describe('Workspace Invitations API Route', () => { [{ permissionType: 'read' }], // User already has access ] - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { workspaceId: 'workspace-1', email: 'test@example.com', @@ -277,7 +277,7 @@ describe('Workspace Invitations API Route', () => { [mockInvitation], // Invitation exists ] - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { workspaceId: 'workspace-1', email: 'test@example.com', @@ -303,7 +303,7 @@ describe('Workspace Invitations API Route', () => { [], // No existing invitation ] - const { POST } = await import('./route') + const { POST } = await import('@/app/api/workspaces/invitations/route') const req = createMockRequest('POST', { workspaceId: 'workspace-1', email: 'test@example.com', diff --git a/apps/sim/app/chat/[subdomain]/chat-client.tsx b/apps/sim/app/chat/[subdomain]/chat-client.tsx index 309d4b24d0..4eba1ab8fa 100644 --- a/apps/sim/app/chat/[subdomain]/chat-client.tsx +++ b/apps/sim/app/chat/[subdomain]/chat-client.tsx @@ -5,17 +5,18 @@ import { v4 as uuidv4 } from 'uuid' import { createLogger } from '@/lib/logs/console/logger' import { noop } from '@/lib/utils' import { getFormattedGitHubStars } from '@/app/(landing)/actions/github' -import EmailAuth from './components/auth/email/email-auth' -import PasswordAuth from './components/auth/password/password-auth' -import { ChatErrorState } from './components/error-state/error-state' -import { ChatHeader } from './components/header/header' -import { ChatInput } from './components/input/input' -import { ChatLoadingState } from './components/loading-state/loading-state' -import type { ChatMessage } from './components/message/message' -import { ChatMessageContainer } from './components/message-container/message-container' -import { VoiceInterface } from './components/voice-interface/voice-interface' -import { useAudioStreaming } from './hooks/use-audio-streaming' -import { useChatStreaming } from './hooks/use-chat-streaming' +import { + ChatErrorState, + ChatHeader, + ChatInput, + ChatLoadingState, + type ChatMessage, + ChatMessageContainer, + EmailAuth, + PasswordAuth, + VoiceInterface, +} from '@/app/chat/[subdomain]/components' +import { useAudioStreaming, useChatStreaming } from '@/app/chat/[subdomain]/hooks' const logger = createLogger('ChatClient') diff --git a/apps/sim/app/chat/[subdomain]/components/error-state/error-state.tsx b/apps/sim/app/chat/[subdomain]/components/error-state/error-state.tsx index 8cc76061bc..4ab6bddc18 100644 --- a/apps/sim/app/chat/[subdomain]/components/error-state/error-state.tsx +++ b/apps/sim/app/chat/[subdomain]/components/error-state/error-state.tsx @@ -1,6 +1,6 @@ 'use client' -import { ChatHeader } from '../header/header' +import { ChatHeader } from '../' interface ChatErrorStateProps { error: string diff --git a/apps/sim/app/chat/[subdomain]/components/index.ts b/apps/sim/app/chat/[subdomain]/components/index.ts new file mode 100644 index 0000000000..eef5a82c46 --- /dev/null +++ b/apps/sim/app/chat/[subdomain]/components/index.ts @@ -0,0 +1,9 @@ +export { default as EmailAuth } from './auth/email/email-auth' +export { default as PasswordAuth } from './auth/password/password-auth' +export { ChatErrorState } from './error-state/error-state' +export { ChatHeader } from './header/header' +export { ChatInput } from './input/input' +export { ChatLoadingState } from './loading-state/loading-state' +export type { ChatMessage } from './message/message' +export { ChatMessageContainer } from './message-container/message-container' +export { VoiceInterface } from './voice-interface/voice-interface' diff --git a/apps/sim/app/chat/[subdomain]/components/input/input.tsx b/apps/sim/app/chat/[subdomain]/components/input/input.tsx index 83a1feb4ec..d5befe2810 100644 --- a/apps/sim/app/chat/[subdomain]/components/input/input.tsx +++ b/apps/sim/app/chat/[subdomain]/components/input/input.tsx @@ -5,7 +5,7 @@ import { useEffect, useRef, useState } from 'react' import { motion } from 'framer-motion' import { Send, Square } from 'lucide-react' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' -import { VoiceInput } from './voice-input' +import { VoiceInput } from '@/app/chat/[subdomain]/components/input/voice-input' const PLACEHOLDER_MOBILE = 'Enter a message' const PLACEHOLDER_DESKTOP = 'Enter a message or click the mic to speak' diff --git a/apps/sim/app/chat/[subdomain]/components/message-container/message-container.tsx b/apps/sim/app/chat/[subdomain]/components/message-container/message-container.tsx index 6c59e578d2..286d98cc90 100644 --- a/apps/sim/app/chat/[subdomain]/components/message-container/message-container.tsx +++ b/apps/sim/app/chat/[subdomain]/components/message-container/message-container.tsx @@ -3,7 +3,10 @@ import { memo, type RefObject } from 'react' import { ArrowDown } from 'lucide-react' import { Button } from '@/components/ui/button' -import { type ChatMessage, ClientChatMessage } from '../message/message' +import { + type ChatMessage, + ClientChatMessage, +} from '@/app/chat/[subdomain]/components/message/message' interface ChatMessageContainerProps { messages: ChatMessage[] diff --git a/apps/sim/app/chat/[subdomain]/components/message/message.tsx b/apps/sim/app/chat/[subdomain]/components/message/message.tsx index 3ebdbf4d97..396fe4c79a 100644 --- a/apps/sim/app/chat/[subdomain]/components/message/message.tsx +++ b/apps/sim/app/chat/[subdomain]/components/message/message.tsx @@ -6,7 +6,7 @@ import { Button } from '@/components/ui/button' import { ToolCallCompletion, ToolCallExecution } from '@/components/ui/tool-call' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' import { parseMessageContent, stripToolCallIndicators } from '@/lib/tool-call-parser' -import MarkdownRenderer from './components/markdown-renderer' +import MarkdownRenderer from '@/app/chat/[subdomain]/components/message/components/markdown-renderer' export interface ChatMessage { id: string diff --git a/apps/sim/app/chat/[subdomain]/components/voice-interface/voice-interface.tsx b/apps/sim/app/chat/[subdomain]/components/voice-interface/voice-interface.tsx index 772b025995..15efe748fb 100644 --- a/apps/sim/app/chat/[subdomain]/components/voice-interface/voice-interface.tsx +++ b/apps/sim/app/chat/[subdomain]/components/voice-interface/voice-interface.tsx @@ -5,7 +5,7 @@ import { Mic, MicOff, Phone } from 'lucide-react' import { Button } from '@/components/ui/button' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' -import { ParticlesVisualization } from './components/particles' +import { ParticlesVisualization } from '@/app/chat/[subdomain]/components/voice-interface/components/particles' const logger = createLogger('VoiceInterface') diff --git a/apps/sim/app/chat/[subdomain]/hooks/index.ts b/apps/sim/app/chat/[subdomain]/hooks/index.ts new file mode 100644 index 0000000000..d1a9f6d293 --- /dev/null +++ b/apps/sim/app/chat/[subdomain]/hooks/index.ts @@ -0,0 +1,2 @@ +export { useAudioStreaming } from './use-audio-streaming' +export { useChatStreaming } from './use-chat-streaming' diff --git a/apps/sim/app/chat/[subdomain]/hooks/use-chat-streaming.ts b/apps/sim/app/chat/[subdomain]/hooks/use-chat-streaming.ts index 4089696aae..67718c489c 100644 --- a/apps/sim/app/chat/[subdomain]/hooks/use-chat-streaming.ts +++ b/apps/sim/app/chat/[subdomain]/hooks/use-chat-streaming.ts @@ -2,7 +2,7 @@ import { useRef, useState } from 'react' import { createLogger } from '@/lib/logs/console/logger' -import type { ChatMessage } from '../components/message/message' +import type { ChatMessage } from '@/app/chat/[subdomain]/components/message/message' const logger = createLogger('UseChatStreaming') diff --git a/apps/sim/app/chat/[subdomain]/page.tsx b/apps/sim/app/chat/[subdomain]/page.tsx index bfb9d66b3c..52162b2c9e 100644 --- a/apps/sim/app/chat/[subdomain]/page.tsx +++ b/apps/sim/app/chat/[subdomain]/page.tsx @@ -1,4 +1,4 @@ -import ChatClient from './chat-client' +import ChatClient from '@/app/chat/[subdomain]/chat-client' export default async function ChatPage({ params }: { params: Promise<{ subdomain: string }> }) { const { subdomain } = await params diff --git a/apps/sim/app/invite/[id]/page.tsx b/apps/sim/app/invite/[id]/page.tsx index cd792230aa..2f22144abc 100644 --- a/apps/sim/app/invite/[id]/page.tsx +++ b/apps/sim/app/invite/[id]/page.tsx @@ -1,3 +1,3 @@ -import Invite from './invite' +import Invite from '@/app/invite/[id]/invite' export default Invite diff --git a/apps/sim/app/invite/invite-error/page.tsx b/apps/sim/app/invite/invite-error/page.tsx index 9326826fb1..646f4a3d8e 100644 --- a/apps/sim/app/invite/invite-error/page.tsx +++ b/apps/sim/app/invite/invite-error/page.tsx @@ -1,6 +1,5 @@ -import InviteError from './invite-error' +import InviteError from '@/app/invite/invite-error/invite-error' -// Generate this page on-demand instead of at build time export const dynamic = 'force-dynamic' export default function InviteErrorPage() { diff --git a/apps/sim/app/layout.tsx b/apps/sim/app/layout.tsx index 3f1fb43427..e46684e6ca 100644 --- a/apps/sim/app/layout.tsx +++ b/apps/sim/app/layout.tsx @@ -4,9 +4,9 @@ import type { Metadata, Viewport } from 'next' import { PublicEnvScript } from 'next-runtime-env' import { createLogger } from '@/lib/logs/console/logger' import { TelemetryConsentDialog } from '@/app/telemetry-consent-dialog' -import './globals.css' +import '@/app/globals.css' -import { ZoomPrevention } from './zoom-prevention' +import { ZoomPrevention } from '@/app/zoom-prevention' const logger = createLogger('RootLayout') diff --git a/apps/sim/app/page.tsx b/apps/sim/app/page.tsx index 5195ceb433..bf563a84b8 100644 --- a/apps/sim/app/page.tsx +++ b/apps/sim/app/page.tsx @@ -1,3 +1,3 @@ -import Landing from './(landing)/landing' +import Landing from '@/app/(landing)/landing' export default Landing diff --git a/apps/sim/app/unsubscribe/page.tsx b/apps/sim/app/unsubscribe/page.tsx index d4897b63c3..ce2a6d0280 100644 --- a/apps/sim/app/unsubscribe/page.tsx +++ b/apps/sim/app/unsubscribe/page.tsx @@ -3,8 +3,7 @@ import { Suspense, useEffect, useState } from 'react' import { CheckCircle, Heart, Info, Loader2, XCircle } from 'lucide-react' import { useSearchParams } from 'next/navigation' -import { Button } from '@/components/ui/button' -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' +import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui' interface UnsubscribeData { success: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/error.tsx b/apps/sim/app/workspace/[workspaceId]/error.tsx index c5e6e668b8..2504830ecb 100644 --- a/apps/sim/app/workspace/[workspaceId]/error.tsx +++ b/apps/sim/app/workspace/[workspaceId]/error.tsx @@ -1,5 +1,5 @@ 'use client' -import { NextError } from './w/[workflowId]/components/error' +import { NextError } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/error' export default NextError diff --git a/apps/sim/app/workspace/[workspaceId]/global-error.tsx b/apps/sim/app/workspace/[workspaceId]/global-error.tsx index d92a73ce25..09e7699154 100644 --- a/apps/sim/app/workspace/[workspaceId]/global-error.tsx +++ b/apps/sim/app/workspace/[workspaceId]/global-error.tsx @@ -1,5 +1,5 @@ 'use client' -import { NextGlobalError } from './w/[workflowId]/components/error' +import { NextGlobalError } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/error' export default NextGlobalError diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/document-loading.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/document-loading.tsx index a82cb168bc..0b8fe12aaf 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/document-loading.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/document-loading.tsx @@ -3,8 +3,10 @@ import { Plus, Search } from 'lucide-react' import { useParams } from 'next/navigation' import { Button } from '@/components/ui/button' -import { KnowledgeHeader } from '../../../components/knowledge-header/knowledge-header' -import { ChunkTableSkeleton } from '../../../components/skeletons/table-skeleton' +import { + ChunkTableSkeleton, + KnowledgeHeader, +} from '@/app/workspace/[workspaceId]/knowledge/components' interface DocumentLoadingProps { knowledgeBaseId: string diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/index.ts b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/index.ts new file mode 100644 index 0000000000..a4dd9865f5 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components/index.ts @@ -0,0 +1,4 @@ +export { CreateChunkModal } from './create-chunk-modal/create-chunk-modal' +export { DeleteChunkModal } from './delete-chunk-modal/delete-chunk-modal' +export { DocumentLoading } from './document-loading' +export { EditChunkModal } from './edit-chunk-modal/edit-chunk-modal' diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx index 3e620eaf37..25ac0dad27 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document.tsx @@ -3,21 +3,26 @@ import { useCallback, useEffect, useState } from 'react' import { ChevronLeft, ChevronRight, Circle, CircleOff, FileText, Plus, Trash2 } from 'lucide-react' import { useParams, useRouter, useSearchParams } from 'next/navigation' -import { Button } from '@/components/ui/button' -import { Checkbox } from '@/components/ui/checkbox' -import { SearchHighlight } from '@/components/ui/search-highlight' -import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' +import { + Button, + Checkbox, + SearchHighlight, + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@/components/ui' import { createLogger } from '@/lib/logs/console/logger' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' -import { ActionBar } from '@/app/workspace/[workspaceId]/knowledge/[id]/components/action-bar/action-bar' -import { SearchInput } from '@/app/workspace/[workspaceId]/knowledge/components/search-input/search-input' +import { + CreateChunkModal, + DeleteChunkModal, + DocumentLoading, + EditChunkModal, +} from '@/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/components' +import { ActionBar } from '@/app/workspace/[workspaceId]/knowledge/[id]/components' +import { KnowledgeHeader, SearchInput } from '@/app/workspace/[workspaceId]/knowledge/components' import { useDocumentChunks } from '@/hooks/use-knowledge' import { type ChunkData, type DocumentData, useKnowledgeStore } from '@/stores/knowledge/store' -import { KnowledgeHeader } from '../../components/knowledge-header/knowledge-header' -import { CreateChunkModal } from './components/create-chunk-modal/create-chunk-modal' -import { DeleteChunkModal } from './components/delete-chunk-modal/delete-chunk-modal' -import { DocumentLoading } from './components/document-loading' -import { EditChunkModal } from './components/edit-chunk-modal/edit-chunk-modal' const logger = createLogger('Document') diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/page.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/page.tsx index 8649c5cce2..93d484d4d8 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/page.tsx @@ -1,4 +1,4 @@ -import { Document } from './document' +import { Document } from '@/app/workspace/[workspaceId]/knowledge/[id]/[documentId]/document' interface DocumentPageProps { params: Promise<{ diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx index 5e04994d17..7b49ceacba 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/base.tsx @@ -30,16 +30,20 @@ import { Checkbox } from '@/components/ui/checkbox' import { SearchHighlight } from '@/components/ui/search-highlight' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { createLogger } from '@/lib/logs/console/logger' -import { ActionBar } from '@/app/workspace/[workspaceId]/knowledge/[id]/components/action-bar/action-bar' -import { getDocumentIcon } from '@/app/workspace/[workspaceId]/knowledge/components/icons/document-icons' -import { PrimaryButton } from '@/app/workspace/[workspaceId]/knowledge/components/primary-button/primary-button' -import { SearchInput } from '@/app/workspace/[workspaceId]/knowledge/components/search-input/search-input' +import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' +import { + ActionBar, + KnowledgeBaseLoading, + UploadModal, +} from '@/app/workspace/[workspaceId]/knowledge/[id]/components' +import { + getDocumentIcon, + KnowledgeHeader, + PrimaryButton, + SearchInput, +} from '@/app/workspace/[workspaceId]/knowledge/components' import { useKnowledgeBase, useKnowledgeBaseDocuments } from '@/hooks/use-knowledge' import { type DocumentData, useKnowledgeStore } from '@/stores/knowledge/store' -import { useUserPermissionsContext } from '../../components/providers/workspace-permissions-provider' -import { KnowledgeHeader } from '../components/knowledge-header/knowledge-header' -import { KnowledgeBaseLoading } from './components/knowledge-base-loading/knowledge-base-loading' -import { UploadModal } from './components/upload-modal/upload-modal' const logger = createLogger('KnowledgeBase') diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/index.ts b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/index.ts new file mode 100644 index 0000000000..c4ea6586db --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/index.ts @@ -0,0 +1,3 @@ +export { ActionBar } from './action-bar/action-bar' +export { KnowledgeBaseLoading } from './knowledge-base-loading/knowledge-base-loading' +export { UploadModal } from './upload-modal/upload-modal' diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/knowledge-base-loading/knowledge-base-loading.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/knowledge-base-loading/knowledge-base-loading.tsx index f826961465..46402dde4b 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/knowledge-base-loading/knowledge-base-loading.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/knowledge-base-loading/knowledge-base-loading.tsx @@ -3,8 +3,10 @@ import { Search } from 'lucide-react' import { useParams } from 'next/navigation' import { Button } from '@/components/ui/button' -import { KnowledgeHeader } from '../../../components/knowledge-header/knowledge-header' -import { DocumentTableSkeleton } from '../../../components/skeletons/table-skeleton' +import { + DocumentTableSkeleton, + KnowledgeHeader, +} from '@/app/workspace/[workspaceId]/knowledge/components' interface KnowledgeBaseLoadingProps { knowledgeBaseName: string diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/upload-modal/upload-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/upload-modal/upload-modal.tsx index 25065d0240..c5b6ac616f 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/upload-modal/upload-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/components/upload-modal/upload-modal.tsx @@ -6,8 +6,8 @@ import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Label } from '@/components/ui/label' import { createLogger } from '@/lib/logs/console/logger' -import { type TagData, TagInput } from '../../../components/tag-input/tag-input' -import { useKnowledgeUpload } from '../../../hooks/use-knowledge-upload' +import { type TagData, TagInput } from '@/app/workspace/[workspaceId]/knowledge/components' +import { useKnowledgeUpload } from '@/app/workspace/[workspaceId]/knowledge/hooks/use-knowledge-upload' const logger = createLogger('UploadModal') diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/page.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/page.tsx index db17075138..7bb810feb4 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/[id]/page.tsx @@ -1,4 +1,4 @@ -import { KnowledgeBase } from './base' +import { KnowledgeBase } from '@/app/workspace/[workspaceId]/knowledge/[id]/base' interface PageProps { params: Promise<{ diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-modal/create-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-modal/create-modal.tsx index 295c38657c..f71d262aa5 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-modal/create-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-modal/create-modal.tsx @@ -13,10 +13,13 @@ import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { createLogger } from '@/lib/logs/console/logger' -import { getDocumentIcon } from '@/app/workspace/[workspaceId]/knowledge/components/icons/document-icons' +import { + getDocumentIcon, + type TagData, + TagInput, +} from '@/app/workspace/[workspaceId]/knowledge/components' +import { useKnowledgeUpload } from '@/app/workspace/[workspaceId]/knowledge/hooks/use-knowledge-upload' import type { KnowledgeBaseData } from '@/stores/knowledge/store' -import { useKnowledgeUpload } from '../../hooks/use-knowledge-upload' -import { type TagData, TagInput } from '../tag-input/tag-input' const logger = createLogger('CreateModal') diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/components/index.ts b/apps/sim/app/workspace/[workspaceId]/knowledge/components/index.ts new file mode 100644 index 0000000000..554bc81f16 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/components/index.ts @@ -0,0 +1,11 @@ +export { BaseOverview } from './base-overview/base-overview' +export { CreateModal } from './create-modal/create-modal' +export { EmptyStateCard } from './empty-state-card/empty-state-card' +export { getDocumentIcon } from './icons/document-icons' +export { KnowledgeHeader } from './knowledge-header/knowledge-header' +export { PrimaryButton } from './primary-button/primary-button' +export { SearchInput } from './search-input/search-input' +export { KnowledgeBaseCardSkeletonGrid } from './skeletons/knowledge-base-card-skeleton' +export { ChunkTableSkeleton, DocumentTableSkeleton } from './skeletons/table-skeleton' +export { type TagData, TagInput } from './tag-input/tag-input' +export { WorkspaceSelector } from './workspace-selector/workspace-selector' diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/components/knowledge-header/knowledge-header.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/components/knowledge-header/knowledge-header.tsx index 14842c1521..90dbf36831 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/components/knowledge-header/knowledge-header.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/components/knowledge-header/knowledge-header.tsx @@ -9,7 +9,7 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' -import { WorkspaceSelector } from '../workspace-selector/workspace-selector' +import { WorkspaceSelector } from '@/app/workspace/[workspaceId]/knowledge/components' interface BreadcrumbItem { label: string diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/knowledge.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/knowledge.tsx index c143f50119..1f400cd16f 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/knowledge.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/knowledge.tsx @@ -5,15 +5,17 @@ import { LibraryBig, Plus } from 'lucide-react' import { useParams } from 'next/navigation' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' +import { + BaseOverview, + CreateModal, + EmptyStateCard, + KnowledgeBaseCardSkeletonGrid, + KnowledgeHeader, + PrimaryButton, + SearchInput, +} from '@/app/workspace/[workspaceId]/knowledge/components' import { useKnowledgeBasesList } from '@/hooks/use-knowledge' import type { KnowledgeBaseData } from '@/stores/knowledge/store' -import { BaseOverview } from './components/base-overview/base-overview' -import { CreateModal } from './components/create-modal/create-modal' -import { EmptyStateCard } from './components/empty-state-card/empty-state-card' -import { KnowledgeHeader } from './components/knowledge-header/knowledge-header' -import { PrimaryButton } from './components/primary-button/primary-button' -import { SearchInput } from './components/search-input/search-input' -import { KnowledgeBaseCardSkeletonGrid } from './components/skeletons/knowledge-base-card-skeleton' interface KnowledgeBaseWithDocCount extends KnowledgeBaseData { docCount?: number diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/loading.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/loading.tsx index 8bd39d72cc..798d70b84d 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/loading.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/loading.tsx @@ -2,8 +2,10 @@ import { Plus, Search } from 'lucide-react' import { Button } from '@/components/ui/button' -import { KnowledgeHeader } from './components/knowledge-header/knowledge-header' -import { KnowledgeBaseCardSkeletonGrid } from './components/skeletons/knowledge-base-card-skeleton' +import { + KnowledgeBaseCardSkeletonGrid, + KnowledgeHeader, +} from '@/app/workspace/[workspaceId]/knowledge/components' export default function KnowledgeLoading() { const breadcrumbs = [{ id: 'knowledge', label: 'Knowledge' }] diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/page.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/page.tsx index 439b92d218..cfd961ffcc 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/page.tsx @@ -1,4 +1,4 @@ -import { Knowledge } from './knowledge' +import { Knowledge } from '@/app/workspace/[workspaceId]/knowledge/knowledge' export default function KnowledgePage() { return diff --git a/apps/sim/app/workspace/[workspaceId]/layout.tsx b/apps/sim/app/workspace/[workspaceId]/layout.tsx index 0391bffce9..dec79a0513 100644 --- a/apps/sim/app/workspace/[workspaceId]/layout.tsx +++ b/apps/sim/app/workspace/[workspaceId]/layout.tsx @@ -1,5 +1,5 @@ -import Providers from './w/components/providers/providers' -import { Sidebar } from './w/components/sidebar/sidebar' +import Providers from '@/app/workspace/[workspaceId]/w/components/providers/providers' +import { Sidebar } from '@/app/workspace/[workspaceId]/w/components/sidebar/sidebar' export default function WorkspaceLayout({ children }: { children: React.ReactNode }) { return ( diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/filters/components/index.ts b/apps/sim/app/workspace/[workspaceId]/logs/components/filters/components/index.ts new file mode 100644 index 0000000000..661eace1f0 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/logs/components/filters/components/index.ts @@ -0,0 +1,6 @@ +export { default as FilterSection } from './filter-section' +export { default as FolderFilter } from './folder' +export { default as Level } from './level' +export { default as Timeline } from './timeline' +export { default as Trigger } from './trigger' +export { default as Workflow } from './workflow' diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/filters/components/trigger.tsx b/apps/sim/app/workspace/[workspaceId]/logs/components/filters/components/trigger.tsx index e3e053daaa..ab5fc8994c 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/components/filters/components/trigger.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/components/filters/components/trigger.tsx @@ -8,7 +8,7 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { useFilterStore } from '@/stores/logs/filters/store' -import type { TriggerType } from '../../../../../../../stores/logs/filters/types' +import type { TriggerType } from '@/stores/logs/filters/types' export default function Trigger() { const { triggers, toggleTrigger, setTriggers } = useFilterStore() diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/filters/filters.tsx b/apps/sim/app/workspace/[workspaceId]/logs/components/filters/filters.tsx index 1b783a0518..bb32a0baaf 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/components/filters/filters.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/components/filters/filters.tsx @@ -1,15 +1,17 @@ 'use client' import { TimerOff } from 'lucide-react' -import { Button } from '@/components/ui/button' +import { Button } from '@/components/ui' import { isProd } from '@/lib/environment' +import { + FilterSection, + FolderFilter, + Level, + Timeline, + Trigger, + Workflow, +} from '@/app/workspace/[workspaceId]/logs/components/filters/components' import { useSubscriptionStore } from '@/stores/subscription/store' -import FilterSection from './components/filter-section' -import FolderFilter from './components/folder' -import Level from './components/level' -import Timeline from './components/timeline' -import Trigger from './components/trigger' -import Workflow from './components/workflow' /** * Filters component for logs page - includes timeline and other filter options diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas-modal.tsx b/apps/sim/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas-modal.tsx index 281648f3ac..4a22b5f6fd 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas-modal.tsx @@ -6,7 +6,7 @@ import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { cn } from '@/lib/utils' -import { FrozenCanvas } from './frozen-canvas' +import { FrozenCanvas } from '@/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas' interface FrozenCanvasModalProps { executionId: string diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/sidebar/sidebar.tsx b/apps/sim/app/workspace/[workspaceId]/logs/components/sidebar/sidebar.tsx index 0768cac385..c8bce63b75 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/components/sidebar/sidebar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/components/sidebar/sidebar.tsx @@ -7,13 +7,13 @@ import { CopyButton } from '@/components/ui/copy-button' import { ScrollArea } from '@/components/ui/scroll-area' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' import { redactApiKeys } from '@/lib/utils' +import { FrozenCanvasModal } from '@/app/workspace/[workspaceId]/logs/components/frozen-canvas/frozen-canvas-modal' +import LogMarkdownRenderer from '@/app/workspace/[workspaceId]/logs/components/sidebar/components/markdown-renderer' +import { ToolCallsDisplay } from '@/app/workspace/[workspaceId]/logs/components/tool-calls/tool-calls-display' +import { TraceSpansDisplay } from '@/app/workspace/[workspaceId]/logs/components/trace-spans/trace-spans-display' import { formatDate } from '@/app/workspace/[workspaceId]/logs/utils/format-date' import { formatCost } from '@/providers/utils' import type { WorkflowLog } from '@/stores/logs/filters/types' -import { FrozenCanvasModal } from '../frozen-canvas/frozen-canvas-modal' -import { ToolCallsDisplay } from '../tool-calls/tool-calls-display' -import { TraceSpansDisplay } from '../trace-spans/trace-spans-display' -import LogMarkdownRenderer from './components/markdown-renderer' interface LogSidebarProps { log: WorkflowLog | null diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/tool-calls/tool-calls-display.tsx b/apps/sim/app/workspace/[workspaceId]/logs/components/tool-calls/tool-calls-display.tsx index 39191fb373..0696b1f5f7 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/components/tool-calls/tool-calls-display.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/components/tool-calls/tool-calls-display.tsx @@ -4,7 +4,7 @@ import { useState } from 'react' import { AlertCircle, CheckCircle2, ChevronDown, ChevronRight, Clock } from 'lucide-react' import { CopyButton } from '@/components/ui/copy-button' import { cn } from '@/lib/utils' -import type { ToolCall, ToolCallMetadata } from '../../../../../../stores/logs/filters/types' +import type { ToolCall, ToolCallMetadata } from '@/stores/logs/filters/types' interface ToolCallsDisplayProps { metadata: ToolCallMetadata diff --git a/apps/sim/app/workspace/[workspaceId]/logs/components/trace-spans/trace-spans-display.tsx b/apps/sim/app/workspace/[workspaceId]/logs/components/trace-spans/trace-spans-display.tsx index 79344b8a89..092712d1e9 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/components/trace-spans/trace-spans-display.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/components/trace-spans/trace-spans-display.tsx @@ -11,7 +11,7 @@ import { ConnectIcon, } from '@/components/icons' import { cn, redactApiKeys } from '@/lib/utils' -import type { TraceSpan } from '../../../../../../stores/logs/filters/types' +import type { TraceSpan } from '@/stores/logs/filters/types' interface TraceSpansDisplayProps { traceSpans?: TraceSpan[] diff --git a/apps/sim/app/workspace/[workspaceId]/logs/logs.tsx b/apps/sim/app/workspace/[workspaceId]/logs/logs.tsx index 959e81dd55..ba126965b5 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/logs.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/logs.tsx @@ -8,11 +8,11 @@ import { Input } from '@/components/ui/input' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { Sidebar } from '@/app/workspace/[workspaceId]/logs/components/sidebar/sidebar' +import { formatDate } from '@/app/workspace/[workspaceId]/logs/utils/format-date' import { useDebounce } from '@/hooks/use-debounce' -import { useFilterStore } from '../../../../stores/logs/filters/store' -import type { LogsResponse, WorkflowLog } from '../../../../stores/logs/filters/types' -import { Sidebar } from './components/sidebar/sidebar' -import { formatDate } from './utils/format-date' +import { useFilterStore } from '@/stores/logs/filters/store' +import type { LogsResponse, WorkflowLog } from '@/stores/logs/filters/types' const logger = createLogger('Logs') const LOGS_PER_PAGE = 50 diff --git a/apps/sim/app/workspace/[workspaceId]/logs/page.tsx b/apps/sim/app/workspace/[workspaceId]/logs/page.tsx index 2c4a787eef..ee3d9c0bcf 100644 --- a/apps/sim/app/workspace/[workspaceId]/logs/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/logs/page.tsx @@ -1,3 +1,3 @@ -import Logs from './logs' +import Logs from '@/app/workspace/[workspaceId]/logs/logs' export default Logs diff --git a/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx b/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx index f0dab0ad89..ee6293106a 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/[id]/page.tsx @@ -2,10 +2,10 @@ import { and, eq } from 'drizzle-orm' import { notFound } from 'next/navigation' import { getSession } from '@/lib/auth' import { createLogger } from '@/lib/logs/console/logger' +import TemplateDetails from '@/app/workspace/[workspaceId]/templates/[id]/template' +import type { Template } from '@/app/workspace/[workspaceId]/templates/templates' import { db } from '@/db' import { templateStars, templates } from '@/db/schema' -import type { Template } from '../templates' -import TemplateDetails from './template' const logger = createLogger('TemplatePage') diff --git a/apps/sim/app/workspace/[workspaceId]/templates/[id]/template.tsx b/apps/sim/app/workspace/[workspaceId]/templates/[id]/template.tsx index a7fa3d3a11..b64b4c2e15 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/[id]/template.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/[id]/template.tsx @@ -49,10 +49,10 @@ import { useRouter } from 'next/navigation' import { Button } from '@/components/ui/button' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import type { Template } from '@/app/workspace/[workspaceId]/templates/templates' +import { categories } from '@/app/workspace/[workspaceId]/templates/templates' import { WorkflowPreview } from '@/app/workspace/[workspaceId]/w/components/workflow-preview/workflow-preview' import type { WorkflowState } from '@/stores/workflows/workflow/types' -import type { Template } from '../templates' -import { categories } from '../templates' const logger = createLogger('TemplateDetails') diff --git a/apps/sim/app/workspace/[workspaceId]/templates/page.tsx b/apps/sim/app/workspace/[workspaceId]/templates/page.tsx index 449a152578..d5e7e593b5 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/page.tsx @@ -1,9 +1,9 @@ import { and, desc, eq, sql } from 'drizzle-orm' import { getSession } from '@/lib/auth' +import type { Template } from '@/app/workspace/[workspaceId]/templates/templates' +import Templates from '@/app/workspace/[workspaceId]/templates/templates' import { db } from '@/db' import { templateStars, templates } from '@/db/schema' -import type { Template } from './templates' -import Templates from './templates' export default async function TemplatesPage() { const session = await getSession() diff --git a/apps/sim/app/workspace/[workspaceId]/templates/templates.tsx b/apps/sim/app/workspace/[workspaceId]/templates/templates.tsx index 8337447449..3067038ee3 100644 --- a/apps/sim/app/workspace/[workspaceId]/templates/templates.tsx +++ b/apps/sim/app/workspace/[workspaceId]/templates/templates.tsx @@ -5,9 +5,12 @@ import { ChevronRight, Search } from 'lucide-react' import { useParams, useRouter } from 'next/navigation' import { Input } from '@/components/ui/input' import { createLogger } from '@/lib/logs/console/logger' +import { NavigationTabs } from '@/app/workspace/[workspaceId]/templates/components/navigation-tabs' +import { + TemplateCard, + TemplateCardSkeleton, +} from '@/app/workspace/[workspaceId]/templates/components/template-card' import type { WorkflowState } from '@/stores/workflows/workflow/types' -import { NavigationTabs } from './components/navigation-tabs' -import { TemplateCard, TemplateCardSkeleton } from './components/template-card' const logger = createLogger('TemplatesPage') 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 57648ddf9d..f7c8c701ac 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 @@ -33,7 +33,7 @@ import { Textarea } from '@/components/ui/textarea' import { createLogger } from '@/lib/logs/console/logger' import { getBaseDomain, getEmailDomain } from '@/lib/urls/utils' import { cn } from '@/lib/utils' -import { OutputSelect } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/output-select/output-select' +import { OutputSelect } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components' import type { OutputConfig } from '@/stores/panel/chat/types' const logger = createLogger('ChatDeploy') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components/index.ts new file mode 100644 index 0000000000..a765b6037f --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components/index.ts @@ -0,0 +1,4 @@ +export { ApiEndpoint } from './api-endpoint/api-endpoint' +export { ApiKey } from './api-key/api-key' +export { DeployStatus } from './deploy-status/deploy-status' +export { ExampleCommand } from './example-command/example-command' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/deployment-info.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/deployment-info.tsx index 2713e84178..95a1050548 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/deployment-info.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/deployment-info.tsx @@ -12,15 +12,17 @@ import { AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, -} from '@/components/ui/alert-dialog' -import { Button } from '@/components/ui/button' -import { Skeleton } from '@/components/ui/skeleton' -import { ApiEndpoint } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components/api-endpoint/api-endpoint' -import { ApiKey } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components/api-key/api-key' -import { DeployStatus } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components/deploy-status/deploy-status' -import { ExampleCommand } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components/example-command/example-command' + Button, + Skeleton, +} from '@/components/ui' +import { + ApiEndpoint, + ApiKey, + DeployStatus, + ExampleCommand, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/components' +import { DeployedWorkflowModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal' import type { WorkflowState } from '@/stores/workflows/workflow/types' -import { DeployedWorkflowModal } from '../../../deployment-controls/components/deployed-workflow-modal' interface WorkflowDeploymentInfo { isDeployed: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/index.ts new file mode 100644 index 0000000000..b583c7b2fc --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/index.ts @@ -0,0 +1,3 @@ +export { ChatDeploy } from './chat-deploy/chat-deploy' +export { DeployForm } from './deploy-form/deploy-form' +export { DeploymentInfo } from './deployment-info/deployment-info' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/deploy-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/deploy-modal.tsx index f9dcb0849f..4857a5ced0 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/deploy-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/deploy-modal.tsx @@ -20,9 +20,11 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/u import { getEnv } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' -import { ChatDeploy } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/chat-deploy/chat-deploy' -import { DeployForm } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deploy-form/deploy-form' -import { DeploymentInfo } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components/deployment-info/deployment-info' +import { + ChatDeploy, + DeployForm, + DeploymentInfo, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deploy-modal/components' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' import { useWorkflowStore } from '@/stores/workflows/workflow/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal.tsx index b0e18919de..45500ca2a7 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-modal.tsx @@ -15,11 +15,11 @@ import { import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { createLogger } from '@/lib/logs/console/logger' +import { DeployedWorkflowCard } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/components/deployed-workflow-card' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { mergeSubblockState } from '@/stores/workflows/utils' import { useWorkflowStore } from '@/stores/workflows/workflow/store' import type { WorkflowState } from '@/stores/workflows/workflow/types' -import { DeployedWorkflowCard } from './deployed-workflow-card' const logger = createLogger('DeployedWorkflowModal') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/deployment-controls.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/deployment-controls.tsx index dc518c2ea6..74bc725f7c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/deployment-controls.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/deployment-controls/deployment-controls.tsx @@ -5,10 +5,10 @@ import { Loader2, Rocket } from 'lucide-react' import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' +import { DeployModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components' import type { WorkspaceUserPermissions } from '@/hooks/use-user-permissions' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import type { WorkflowState } from '@/stores/workflows/workflow/types' -import { DeployModal } from '../deploy-modal/deploy-modal' interface DeploymentControlsProps { activeWorkflowId: string | null diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/index.ts new file mode 100644 index 0000000000..f6ef340555 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/index.ts @@ -0,0 +1,5 @@ +export { DeployModal } from './deploy-modal/deploy-modal' +export { DeploymentControls } from './deployment-controls/deployment-controls' +export { ExportControls } from './export-controls/export-controls' +export { TemplateModal } from './template-modal/template-modal' +export { UserAvatarStack } from './user-avatar-stack/user-avatar-stack' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/user-avatar-stack/user-avatar-stack.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/user-avatar-stack/user-avatar-stack.tsx index 5ac7c5177a..a9533716ec 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/user-avatar-stack/user-avatar-stack.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/user-avatar-stack/user-avatar-stack.tsx @@ -1,10 +1,10 @@ 'use client' import { useMemo } from 'react' +import { ConnectionStatus } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/user-avatar-stack/components/connection-status/connection-status' +import { UserAvatar } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components/user-avatar-stack/components/user-avatar/user-avatar' +import { usePresence } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-presence' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' -import { usePresence } from '../../../../hooks/use-presence' -import { ConnectionStatus } from './components/connection-status/connection-status' -import { UserAvatar } from './components/user-avatar/user-avatar' interface User { connectionId: string | number diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx index 9e59e5eb76..59efae27d1 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar.tsx @@ -26,13 +26,26 @@ import { AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, -} from '@/components/ui/alert-dialog' -import { Button } from '@/components/ui/button' -import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' + Button, + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@/components/ui' import { useSession } from '@/lib/auth-client' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' +import { + DeploymentControls, + ExportControls, + TemplateModal, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/components' +import { WorkflowTextEditorModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal' +import { useWorkflowExecution } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution' +import { + getKeyboardShortcutText, + useKeyboardShortcuts, +} from '@/app/workspace/[workspaceId]/w/hooks/use-keyboard-shortcuts' import { useFolderStore } from '@/stores/folders/store' import { usePanelStore } from '@/stores/panel/store' import { useGeneralStore } from '@/stores/settings/general/store' @@ -41,15 +54,6 @@ import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' import { useWorkflowStore } from '@/stores/workflows/workflow/store' import type { WorkflowState } from '@/stores/workflows/workflow/types' -import { - getKeyboardShortcutText, - useKeyboardShortcuts, -} from '../../../hooks/use-keyboard-shortcuts' -import { useWorkflowExecution } from '../../hooks/use-workflow-execution' -import { WorkflowTextEditorModal } from '../workflow-text-editor/workflow-text-editor-modal' -import { DeploymentControls } from './components/deployment-controls/deployment-controls' -import { ExportControls } from './components/export-controls/export-controls' -import { TemplateModal } from './components/template-modal/template-modal' const logger = createLogger('ControlBar') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/index.ts new file mode 100644 index 0000000000..201496f21d --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/index.ts @@ -0,0 +1,10 @@ +export { CodePromptBar } from './code-prompt-bar/code-prompt-bar' +export { ControlBar } from './control-bar/control-bar' +export { ErrorBoundary } from './error/index' +export { LoopNodeComponent } from './loop-node/loop-node' +export { Panel } from './panel/panel' +export { ParallelNodeComponent } from './parallel-node/parallel-node' +export { SkeletonLoading } from './skeleton-loading/skeleton-loading' +export { WorkflowBlock } from './workflow-block/workflow-block' +export { WorkflowEdge } from './workflow-edge/workflow-edge' +export { WorkflowTextEditorModal } from './workflow-text-editor/workflow-text-editor-modal' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.test.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.test.tsx index 89bf07360a..27c9b7115b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.test.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.test.tsx @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' +import { LoopNodeComponent } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node' import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import { LoopNodeComponent } from './loop-node' vi.mock('@/stores/workflows/workflow/store', () => ({ useWorkflowStore: vi.fn(), @@ -56,7 +56,7 @@ vi.mock('@/lib/utils', () => ({ cn: (...classes: any[]) => classes.filter(Boolean).join(' '), })) -vi.mock('./components/loop-badges', () => ({ +vi.mock('@/app/workspace/[workspaceId]/w/[workflowId]/components/loop-badges', () => ({ LoopBadges: ({ loopId }: any) => ({ loopId }), })) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.tsx index 0131e04b79..53c5fa8b50 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node.tsx @@ -6,8 +6,8 @@ import { StartIcon } from '@/components/icons' import { Button } from '@/components/ui/button' import { Card } from '@/components/ui/card' import { cn } from '@/lib/utils' +import { LoopBadges } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/components/loop-badges' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' -import { LoopBadges } from './components/loop-badges' // Add these styles to your existing global CSS file or create a separate CSS module const LoopNodeStyles: React.FC = () => { diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx index af02734302..14923f6c69 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx @@ -11,14 +11,16 @@ import { extractPathFromOutputId, parseOutputContentSafely, } from '@/lib/response-format' +import { + ChatMessage, + OutputSelect, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components' +import { useWorkflowExecution } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution' import type { BlockLog, ExecutionResult } from '@/executor/types' import { useExecutionStore } from '@/stores/execution/store' import { useChatStore } from '@/stores/panel/chat/store' import { useConsoleStore } from '@/stores/panel/console/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' -import { useWorkflowExecution } from '../../../../hooks/use-workflow-execution' -import { ChatMessage } from './components/chat-message/chat-message' -import { OutputSelect } from './components/output-select/output-select' const logger = createLogger('ChatPanel') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/chat-modal/chat-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/chat-modal/chat-modal.tsx index c29b30882d..279ec0d725 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/chat-modal/chat-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/chat-modal/chat-modal.tsx @@ -4,7 +4,7 @@ import { type KeyboardEvent, useEffect, useMemo, useRef } from 'react' import { ArrowUp, X } from 'lucide-react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' -import { JSONView } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/json-view/json-view' +import { JSONView } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components' import { useWorkflowExecution } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-workflow-execution' import { useExecutionStore } from '@/stores/execution/store' import { useChatStore } from '@/stores/panel/chat/store' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/index.ts new file mode 100644 index 0000000000..bca270bc4b --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/index.ts @@ -0,0 +1,3 @@ +export { ChatMessage } from './chat-message/chat-message' +export { ChatModal } from './chat-modal/chat-modal' +export { OutputSelect } from './output-select/output-select' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/console-entry/console-entry.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/console-entry/console-entry.tsx index d8ee59e7a8..d9ef4fa7dc 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/console-entry/console-entry.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/console-entry/console-entry.tsx @@ -13,11 +13,13 @@ import { import Image from 'next/image' import { Button } from '@/components/ui/button' import { createLogger } from '@/lib/logs/console/logger' +import { + CodeDisplay, + JSONView, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components' import { getBlock } from '@/blocks' import type { ConsoleEntry as ConsoleEntryType } from '@/stores/panel/console/types' import { useGeneralStore } from '@/stores/settings/general/store' -import { CodeDisplay } from '../code-display/code-display' -import { JSONView } from '../json-view/json-view' const logger = createLogger('ConsoleEntry') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/index.ts new file mode 100644 index 0000000000..c8237364e6 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/index.ts @@ -0,0 +1,3 @@ +export { CodeDisplay } from './code-display/code-display' +export { ConsoleEntry } from './console-entry/console-entry' +export { JSONView } from './json-view/json-view' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/console.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/console.tsx index bb15adce33..16b41a6442 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/console.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/console.tsx @@ -2,9 +2,9 @@ import { useMemo } from 'react' import { ScrollArea } from '@/components/ui/scroll-area' +import { ConsoleEntry } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components' import { useConsoleStore } from '@/stores/panel/console/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' -import { ConsoleEntry } from './components/console-entry/console-entry' interface ConsoleProps { panelWidth: number diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/copilot-modal/copilot-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/copilot-modal/copilot-modal.tsx index 7319698712..86d51fdd10 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/copilot-modal/copilot-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/copilot-modal/copilot-modal.tsx @@ -19,11 +19,13 @@ import { } from '@/components/ui/dropdown-menu' import type { CopilotChat } from '@/lib/copilot/api' import { createLogger } from '@/lib/logs/console/logger' +import { + CheckpointPanel, + CopilotWelcome, + ProfessionalInput, + ProfessionalMessage, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components' import type { CopilotMessage } from '@/stores/copilot/types' -import { CheckpointPanel } from '../checkpoint-panel' -import { ProfessionalInput } from '../professional-input/professional-input' -import { ProfessionalMessage } from '../professional-message/professional-message' -import { CopilotWelcome } from '../welcome/welcome' const logger = createLogger('CopilotModal') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/index.ts new file mode 100644 index 0000000000..80ef5d11ef --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/index.ts @@ -0,0 +1,5 @@ +export { CheckpointPanel } from './checkpoint-panel' +export { CopilotModal } from './copilot-modal/copilot-modal' +export { ProfessionalInput } from './professional-input/professional-input' +export { ProfessionalMessage } from './professional-message/professional-message' +export { CopilotWelcome } from './welcome/welcome' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx index 69bc89f80b..8435c8f6f9 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/copilot.tsx @@ -2,22 +2,24 @@ import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react' import { Bot, ChevronDown, History, MessageSquarePlus, MoreHorizontal, Trash2 } from 'lucide-react' -import { Button } from '@/components/ui/button' import { + Button, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, -} from '@/components/ui/dropdown-menu' -import { ScrollArea } from '@/components/ui/scroll-area' + ScrollArea, +} from '@/components/ui' import { createLogger } from '@/lib/logs/console/logger' +import { + CheckpointPanel, + CopilotModal, + CopilotWelcome, + ProfessionalInput, + ProfessionalMessage, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components' import { useCopilotStore } from '@/stores/copilot/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' -import { CheckpointPanel } from './components/checkpoint-panel' -import { CopilotModal } from './components/copilot-modal/copilot-modal' -import { ProfessionalInput } from './components/professional-input/professional-input' -import { ProfessionalMessage } from './components/professional-message/professional-message' -import { CopilotWelcome } from './components/welcome/welcome' const logger = createLogger('Copilot') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/index.ts new file mode 100644 index 0000000000..6e11948900 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/index.ts @@ -0,0 +1,4 @@ +export { Chat } from './chat/chat' +export { Console } from './console/console' +export { Copilot } from './copilot/copilot' +export { Variables } from './variables/variables' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx index 5f1f477fb3..76a34dac77 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel.tsx @@ -2,16 +2,18 @@ import { useCallback, useEffect, useRef, useState } from 'react' import { ArrowDownToLine, CircleSlash, X } from 'lucide-react' -import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' +import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui' +import { + Chat, + Console, + Copilot, + Variables, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components' +import { ChatModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components' import { useChatStore } from '@/stores/panel/chat/store' import { useConsoleStore } from '@/stores/panel/console/store' import { usePanelStore } from '@/stores/panel/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' -import { Chat } from './components/chat/chat' -import { ChatModal } from './components/chat/components/chat-modal/chat-modal' -import { Console } from './components/console/console' -import { Copilot } from './components/copilot/copilot' -import { Variables } from './components/variables/variables' export function Panel() { const [chatMessage, setChatMessage] = useState('') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.test.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.test.tsx index 39ad706810..6581790ede 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.test.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.test.tsx @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' +import { ParallelNodeComponent } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node' import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import { ParallelNodeComponent } from './parallel-node' vi.mock('@/stores/workflows/workflow/store', () => ({ useWorkflowStore: vi.fn(), @@ -63,9 +63,12 @@ vi.mock('@/lib/utils', () => ({ cn: (...classes: any[]) => classes.filter(Boolean).join(' '), })) -vi.mock('./components/parallel-badges', () => ({ - ParallelBadges: ({ parallelId }: any) => ({ parallelId }), -})) +vi.mock( + '@/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/components/parallel-badges', + () => ({ + ParallelBadges: ({ parallelId }: any) => ({ parallelId }), + }) +) describe('ParallelNodeComponent', () => { const mockRemoveBlock = vi.fn() diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.tsx index 688296190d..b561f5ba5c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node.tsx @@ -6,8 +6,8 @@ import { StartIcon } from '@/components/icons' import { Button } from '@/components/ui/button' import { Card } from '@/components/ui/card' import { cn } from '@/lib/utils' +import { ParallelBadges } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/components/parallel-badges' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' -import { ParallelBadges } from './components/parallel-badges' const ParallelNodeStyles: React.FC = () => { return ( diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/channel-selector-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/channel-selector-input.tsx index 12754b70d7..eac138805e 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/channel-selector-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/channel-selector-input.tsx @@ -2,10 +2,13 @@ import { useEffect, useState } from 'react' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' +import { + type SlackChannelInfo, + SlackChannelSelector, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/channel-selector/components/slack-channel-selector' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' import { useSubBlockStore } from '@/stores/workflows/subblock/store' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' -import { type SlackChannelInfo, SlackChannelSelector } from './components/slack-channel-selector' interface ChannelSelectorInputProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/checkbox-list.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/checkbox-list.tsx index 72f0deb46b..32eb010c3e 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/checkbox-list.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/checkbox-list.tsx @@ -1,7 +1,7 @@ import { Checkbox } from '@/components/ui/checkbox' import { Label } from '@/components/ui/label' import { cn } from '@/lib/utils' -import { useSubBlockValue } from '../hooks/use-sub-block-value' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' interface CheckboxListProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/code.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/code.tsx index e7fa2686ec..ea784349b8 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/code.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/code.tsx @@ -4,17 +4,16 @@ import { Wand2 } from 'lucide-react' import { highlight, languages } from 'prismjs' import 'prismjs/components/prism-javascript' import 'prismjs/themes/prism.css' - import Editor from 'react-simple-code-editor' import { Button } from '@/components/ui/button' import { checkEnvVarTrigger, EnvVarDropdown } from '@/components/ui/env-var-dropdown' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { CodePromptBar } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/code-prompt-bar/code-prompt-bar' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import { useCodeGeneration } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-code-generation' import { useSubBlockStore } from '@/stores/workflows/subblock/store' -import { CodePromptBar } from '../../../../code-prompt-bar/code-prompt-bar' -import { useSubBlockValue } from '../hooks/use-sub-block-value' const logger = createLogger('Code') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/combobox.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/combobox.tsx index 8512494917..d0e957ff44 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/combobox.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/combobox.tsx @@ -8,8 +8,8 @@ import { Input } from '@/components/ui/input' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' -import { useSubBlockValue } from '../hooks/use-sub-block-value' const logger = createLogger('ComboBox') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/condition-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/condition-input.tsx index 73f437f500..51f5ccf051 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/condition-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/condition-input.tsx @@ -13,8 +13,8 @@ import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import { useSubBlockValue } from '../hooks/use-sub-block-value' const logger = createLogger('ConditionInput') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/credential-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/credential-selector.tsx index e9d8895f6d..4416991e19 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/credential-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/credential-selector.tsx @@ -21,9 +21,9 @@ import { type OAuthProvider, parseProvider, } from '@/lib/oauth' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' -import { OAuthRequiredModal } from './components/oauth-required-modal' const logger = createLogger('CredentialSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/date-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/date-input.tsx index 7bda3c424d..7ba4776473 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/date-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/date-input.tsx @@ -7,7 +7,7 @@ import { Button } from '@/components/ui/button' import { Calendar } from '@/components/ui/calendar' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { cn } from '@/lib/utils' -import { useSubBlockValue } from '../hooks/use-sub-block-value' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' interface DateInputProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/document-selector/document-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/document-selector/document-selector.tsx index 751d6d3e01..04cabc49f1 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/document-selector/document-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/document-selector/document-selector.tsx @@ -12,8 +12,8 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' interface DocumentData { id: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/dropdown.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/dropdown.tsx index b23445907a..108b3bcb34 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/dropdown.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/dropdown.tsx @@ -3,8 +3,8 @@ import { Check, ChevronDown } from 'lucide-react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { cn } from '@/lib/utils' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import { ResponseBlockHandler } from '@/executor/handlers/response/response-handler' -import { useSubBlockValue } from '../hooks/use-sub-block-value' interface DropdownProps { options: diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/eval-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/eval-input.tsx index 1ef0070e2b..9ef7560e9c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/eval-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/eval-input.tsx @@ -3,7 +3,7 @@ import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { useSubBlockValue } from '../hooks/use-sub-block-value' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' interface EvalMetric { id: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx index e24237ef71..c187bee201 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx @@ -20,7 +20,7 @@ import { getServiceIdFromScopes, type OAuthProvider, } from '@/lib/oauth' -import { OAuthRequiredModal } from '../../credential-selector/components/oauth-required-modal' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' const logger = createLogger('ConfluenceFileSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx index 61eeb1cfab..55ac7c4b53 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx @@ -24,7 +24,7 @@ import { type OAuthProvider, parseProvider, } from '@/lib/oauth' -import { OAuthRequiredModal } from '../../credential-selector/components/oauth-required-modal' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' const logger = createLogger('GoogleDrivePicker') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/index.ts new file mode 100644 index 0000000000..3c1c250b09 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/index.ts @@ -0,0 +1,16 @@ +export type { ConfluenceFileInfo } from './confluence-file-selector' +export { ConfluenceFileSelector } from './confluence-file-selector' +export type { DiscordChannelInfo } from './discord-channel-selector' +export { DiscordChannelSelector } from './discord-channel-selector' +export type { GoogleCalendarInfo } from './google-calendar-selector' +export { GoogleCalendarSelector } from './google-calendar-selector' +export type { FileInfo } from './google-drive-picker' +export { GoogleDrivePicker } from './google-drive-picker' +export type { JiraIssueInfo } from './jira-issue-selector' +export { JiraIssueSelector } from './jira-issue-selector' +export type { MicrosoftFileInfo } from './microsoft-file-selector' +export { MicrosoftFileSelector } from './microsoft-file-selector' +export type { TeamsMessageInfo } from './teams-message-selector' +export { TeamsMessageSelector } from './teams-message-selector' +export type { WealthboxItemInfo } from './wealthbox-file-selector' +export { WealthboxFileSelector } from './wealthbox-file-selector' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx index 941b2d2706..6421c2a999 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx @@ -20,9 +20,9 @@ import { getServiceIdFromScopes, type OAuthProvider, } from '@/lib/oauth' -import { OAuthRequiredModal } from '../../credential-selector/components/oauth-required-modal' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' -const logger = new Logger('jira_issue_selector') +const logger = new Logger('JiraIssueSelector') export interface JiraIssueInfo { id: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/microsoft-file-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/microsoft-file-selector.tsx index 52c0183f0b..9549f305ef 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/microsoft-file-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/microsoft-file-selector.tsx @@ -23,7 +23,7 @@ import { type OAuthProvider, parseProvider, } from '@/lib/oauth' -import { OAuthRequiredModal } from '../../credential-selector/components/oauth-required-modal' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' const logger = createLogger('MicrosoftFileSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/teams-message-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/teams-message-selector.tsx index 819a16e169..b121ff90d5 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/teams-message-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/teams-message-selector.tsx @@ -13,16 +13,16 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { Logger } from '@/lib/logs/console/logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, getServiceIdFromScopes, type OAuthProvider, } from '@/lib/oauth' -import { OAuthRequiredModal } from '../../credential-selector/components/oauth-required-modal' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' -const logger = new Logger('TeamsMessageSelector') +const logger = createLogger('TeamsMessageSelector') export interface TeamsMessageInfo { id: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/wealthbox-file-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/wealthbox-file-selector.tsx index 186468d73e..8bc06d7458 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/wealthbox-file-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components/wealthbox-file-selector.tsx @@ -19,7 +19,7 @@ import { getServiceIdFromScopes, type OAuthProvider, } from '@/lib/oauth' -import { OAuthRequiredModal } from '../../credential-selector/components/oauth-required-modal' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' const logger = createLogger('WealthboxFileSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/file-selector-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/file-selector-input.tsx index aa3a6ec837..73100096e4 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/file-selector-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/file-selector-input.tsx @@ -3,27 +3,29 @@ import { useEffect, useState } from 'react' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' import { getEnv } from '@/lib/env' +import { + type ConfluenceFileInfo, + ConfluenceFileSelector, + type DiscordChannelInfo, + DiscordChannelSelector, + type FileInfo, + type GoogleCalendarInfo, + GoogleCalendarSelector, + GoogleDrivePicker, + type JiraIssueInfo, + JiraIssueSelector, + type MicrosoftFileInfo, + MicrosoftFileSelector, + type TeamsMessageInfo, + TeamsMessageSelector, + WealthboxFileSelector, + type WealthboxItemInfo, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-selector/components' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' -import type { ConfluenceFileInfo } from './components/confluence-file-selector' -import { ConfluenceFileSelector } from './components/confluence-file-selector' -import type { DiscordChannelInfo } from './components/discord-channel-selector' -import { DiscordChannelSelector } from './components/discord-channel-selector' -import type { GoogleCalendarInfo } from './components/google-calendar-selector' -import { GoogleCalendarSelector } from './components/google-calendar-selector' -import type { FileInfo } from './components/google-drive-picker' -import { GoogleDrivePicker } from './components/google-drive-picker' -import type { JiraIssueInfo } from './components/jira-issue-selector' -import { JiraIssueSelector } from './components/jira-issue-selector' -import type { MicrosoftFileInfo } from './components/microsoft-file-selector' -import { MicrosoftFileSelector } from './components/microsoft-file-selector' -import type { TeamsMessageInfo } from './components/teams-message-selector' -import { TeamsMessageSelector } from './components/teams-message-selector' -import type { WealthboxItemInfo } from './components/wealthbox-file-selector' -import { WealthboxFileSelector } from './components/wealthbox-file-selector' interface FileSelectorInputProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-upload.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-upload.tsx index 7b7f94586a..bf4ab3b5d2 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-upload.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/file-upload.tsx @@ -5,9 +5,9 @@ import { X } from 'lucide-react' import { Button } from '@/components/ui/button' import { Progress } from '@/components/ui/progress' import { createLogger } from '@/lib/logs/console/logger' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import { useSubBlockValue } from '../hooks/use-sub-block-value' const logger = createLogger('FileUpload') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/components/folder-selector-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/components/folder-selector-input.tsx index b723fe9525..f207bae804 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/components/folder-selector-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/components/folder-selector-input.tsx @@ -1,9 +1,12 @@ 'use client' import { useEffect, useState } from 'react' +import { + type FolderInfo, + FolderSelector, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/folder-selector/folder-selector' import type { SubBlockConfig } from '@/blocks/types' import { useSubBlockStore } from '@/stores/workflows/subblock/store' -import { type FolderInfo, FolderSelector } from '../folder-selector' interface FolderSelectorInputProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/index.ts new file mode 100644 index 0000000000..c2f8c5d6c3 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/index.ts @@ -0,0 +1,26 @@ +export { ChannelSelectorInput } from './channel-selector/channel-selector-input' +export { CheckboxList } from './checkbox-list' +export { Code } from './code' +export { ComboBox } from './combobox' +export { ConditionInput } from './condition-input' +export { CredentialSelector } from './credential-selector/credential-selector' +export { DateInput } from './date-input' +export { DocumentSelector } from './document-selector/document-selector' +export { Dropdown } from './dropdown' +export { EvalInput } from './eval-input' +export { FileSelectorInput } from './file-selector/file-selector-input' +export { FileUpload } from './file-upload' +export { FolderSelectorInput } from './folder-selector/components/folder-selector-input' +export { KnowledgeBaseSelector } from './knowledge-base-selector/knowledge-base-selector' +export { LongInput } from './long-input' +export { ProjectSelectorInput } from './project-selector/project-selector-input' +export { ResponseFormat } from './response/response-format' +export { ScheduleConfig } from './schedule/schedule-config' +export { ShortInput } from './short-input' +export { SliderInput } from './slider-input' +export { InputFormat } from './starter/input-format' +export { Switch } from './switch' +export { Table } from './table' +export { TimeInput } from './time-input' +export { ToolInput } from './tool-input/tool-input' +export { WebhookConfig } from './webhook/webhook' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/knowledge-base-selector/knowledge-base-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/knowledge-base-selector/knowledge-base-selector.tsx index 223842c49e..9cb5ad6793 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/knowledge-base-selector/knowledge-base-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/knowledge-base-selector/knowledge-base-selector.tsx @@ -14,9 +14,9 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' import { type KnowledgeBaseData, useKnowledgeStore } from '@/stores/knowledge/store' -import { useSubBlockValue } from '../../../sub-block/hooks/use-sub-block-value' interface KnowledgeBaseSelectorProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/long-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/long-input.tsx index ed8fb44f89..1702713eba 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/long-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/long-input.tsx @@ -7,8 +7,8 @@ import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { Textarea } from '@/components/ui/textarea' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' -import { useSubBlockValue } from '../hooks/use-sub-block-value' const logger = createLogger('LongInput') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx index ec070ee86e..735f2af5a0 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx @@ -13,16 +13,16 @@ import { CommandList, } from '@/components/ui/command' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' -import { Logger } from '@/lib/logs/console/logger' +import { createLogger } from '@/lib/logs/console/logger' import { type Credential, getProviderIdFromServiceId, getServiceIdFromScopes, type OAuthProvider, } from '@/lib/oauth' -import { OAuthRequiredModal } from '../../credential-selector/components/oauth-required-modal' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' -const logger = new Logger('jira_project_selector') +const logger = createLogger('JiraProjectSelector') export interface JiraProjectInfo { id: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/project-selector-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/project-selector-input.tsx index 182048bfaf..10c63577c6 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/project-selector-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/project-selector-input.tsx @@ -2,14 +2,26 @@ import { useEffect, useState } from 'react' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' +import { + type DiscordServerInfo, + DiscordServerSelector, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/discord-server-selector' +import { + type JiraProjectInfo, + JiraProjectSelector, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector' +import { + type LinearProjectInfo, + LinearProjectSelector, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/linear-project-selector' +import { + type LinearTeamInfo, + LinearTeamSelector, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/project-selector/components/linear-team-selector' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' import { useSubBlockStore } from '@/stores/workflows/subblock/store' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' -import { type DiscordServerInfo, DiscordServerSelector } from './components/discord-server-selector' -import { type JiraProjectInfo, JiraProjectSelector } from './components/jira-project-selector' -import { type LinearProjectInfo, LinearProjectSelector } from './components/linear-project-selector' -import { type LinearTeamInfo, LinearTeamSelector } from './components/linear-team-selector' interface ProjectSelectorInputProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/response/response-format.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/response/response-format.tsx index 2f1b63b829..3f14840141 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/response/response-format.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/response/response-format.tsx @@ -1,4 +1,4 @@ -import { ResponseFormat as SharedResponseFormat } from '../starter/input-format' +import { ResponseFormat as SharedResponseFormat } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/starter/input-format' export interface JSONProperty { id: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx index 2d4e6e8a9d..e8fe9077ea 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal.tsx @@ -1,7 +1,8 @@ import { useEffect, useState } from 'react' import { Trash2, X } from 'lucide-react' -import { Alert, AlertDescription } from '@/components/ui/alert' import { + Alert, + AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, @@ -10,23 +11,24 @@ import { AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, -} from '@/components/ui/alert-dialog' -import { Button } from '@/components/ui/button' -import { DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' -import { Input } from '@/components/ui/input' -import { + Button, + DialogContent, + DialogFooter, + DialogHeader, + DialogTitle, + Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, -} from '@/components/ui/select' +} from '@/components/ui' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { TimeInput } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components' +import { UnsavedChangesDialog } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import { useSubBlockStore } from '@/stores/workflows/subblock/store' -import { useSubBlockValue } from '../../../hooks/use-sub-block-value' -import { TimeInput } from '../../time-input' -import { UnsavedChangesDialog } from '../../webhook/components/ui/confirmation' const logger = createLogger('ScheduleModal') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/schedule-config.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/schedule-config.tsx index 3810087a80..4b7ff9c99b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/schedule-config.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/schedule-config.tsx @@ -6,12 +6,12 @@ import { Dialog } from '@/components/ui/dialog' import { createLogger } from '@/lib/logs/console/logger' import { parseCronToHumanReadable } from '@/lib/schedules/utils' import { formatDateTime } from '@/lib/utils' +import { ScheduleModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/schedule/components/schedule-modal' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import { getBlockWithValues, getWorkflowWithValues } from '@/stores/workflows' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' -import { ScheduleModal } from './components/schedule-modal' const logger = createLogger('ScheduleConfig') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/short-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/short-input.tsx index 15bb688f3f..b11fe4e4c1 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/short-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/short-input.tsx @@ -6,8 +6,8 @@ import { Input } from '@/components/ui/input' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import type { SubBlockConfig } from '@/blocks/types' -import { useSubBlockValue } from '../hooks/use-sub-block-value' const logger = createLogger('ShortInput') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/slider-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/slider-input.tsx index a8eb481062..1b6e295f9a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/slider-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/slider-input.tsx @@ -1,6 +1,6 @@ import { useEffect } from 'react' import { Slider } from '@/components/ui/slider' -import { useSubBlockValue } from '../hooks/use-sub-block-value' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' interface SliderInputProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/starter/input-format.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/starter/input-format.tsx index a76fb684f8..684381858b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/starter/input-format.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/starter/input-format.tsx @@ -13,7 +13,7 @@ import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { cn } from '@/lib/utils' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' interface Field { id: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/switch.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/switch.tsx index 4812957ebe..60c2d26445 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/switch.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/switch.tsx @@ -1,6 +1,6 @@ import { Label } from '@/components/ui/label' import { Switch as UISwitch } from '@/components/ui/switch' -import { useSubBlockValue } from '../hooks/use-sub-block-value' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' interface SwitchProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/table.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/table.tsx index 510e55c352..ff1e1f5d54 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/table.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/table.tsx @@ -6,7 +6,7 @@ import { formatDisplayText } from '@/components/ui/formatted-text' import { Input } from '@/components/ui/input' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { cn } from '@/lib/utils' -import { useSubBlockValue } from '../hooks/use-sub-block-value' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' interface TableProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/time-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/time-input.tsx index 43fa61208a..412111d5fa 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/time-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/time-input.tsx @@ -6,7 +6,7 @@ import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover' import { cn } from '@/lib/utils' -import { useSubBlockValue } from '../hooks/use-sub-block-value' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' interface TimeInputProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal.tsx index 0c53307f80..fd3e9370e5 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal.tsx @@ -24,10 +24,10 @@ import { Label } from '@/components/ui/label' import { checkTagTrigger, TagDropdown } from '@/components/ui/tag-dropdown' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { CodePromptBar } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/code-prompt-bar/code-prompt-bar' +import { CodeEditor } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/code-editor/code-editor' import { useCodeGeneration } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-code-generation' import { useCustomToolsStore } from '@/stores/custom-tools/store' -import { CodePromptBar } from '../../../../../../../code-prompt-bar/code-prompt-bar' -import { CodeEditor } from '../code-editor/code-editor' const logger = createLogger('CustomToolModal') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector.tsx index e7d6bd75a3..c115b6c7d3 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector.tsx @@ -17,7 +17,7 @@ import { type OAuthService, parseProvider, } from '@/lib/oauth' -import { OAuthRequiredModal } from '../../credential-selector/components/oauth-required-modal' +import { OAuthRequiredModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/credential-selector/components/oauth-required-modal' const logger = createLogger('ToolCredentialSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/tool-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/tool-input.tsx index 66eb1cad20..e2bea17d9e 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/tool-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/tool-input.tsx @@ -15,6 +15,28 @@ import { Toggle } from '@/components/ui/toggle' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import type { OAuthProvider, OAuthService } from '@/lib/oauth/oauth' import { cn } from '@/lib/utils' +import { + ChannelSelectorInput, + CheckboxList, + Code, + ComboBox, + DateInput, + FileSelectorInput, + FileUpload, + LongInput, + ProjectSelectorInput, + ShortInput, + SliderInput, + Table, + TimeInput, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components' +import { + type CustomTool, + CustomToolModal, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/custom-tool-modal/custom-tool-modal' +import { ToolCommand } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-command/tool-command' +import { ToolCredentialSelector } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import { getAllBlocks } from '@/blocks' import { getProviderFromModel, supportsToolUsageControl } from '@/providers/utils' import { useCustomToolsStore } from '@/stores/custom-tools/store' @@ -26,23 +48,6 @@ import { isPasswordParameter, type ToolParameterConfig, } from '@/tools/params' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' -import { ChannelSelectorInput } from '../channel-selector/channel-selector-input' -import { CheckboxList } from '../checkbox-list' -import { Code } from '../code' -import { ComboBox } from '../combobox' -import { DateInput } from '../date-input' -import { FileSelectorInput } from '../file-selector/file-selector-input' -import { FileUpload } from '../file-upload' -import { LongInput } from '../long-input' -import { ProjectSelectorInput } from '../project-selector/project-selector-input' -import { ShortInput } from '../short-input' -import { SliderInput } from '../slider-input' -import { Table } from '../table' -import { TimeInput } from '../time-input' -import { type CustomTool, CustomToolModal } from './components/custom-tool-modal/custom-tool-modal' -import { ToolCommand } from './components/tool-command/tool-command' -import { ToolCredentialSelector } from './components/tool-credential-selector' interface ToolInputProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/index.ts new file mode 100644 index 0000000000..b9bb24f2ae --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/index.ts @@ -0,0 +1,25 @@ +export { + AirtableConfig, + DiscordConfig, + GenericConfig, + GithubConfig, + GmailConfig, + MicrosoftTeamsConfig, + SlackConfig, + StripeConfig, + TelegramConfig, + WhatsAppConfig, +} from './providers' +export { + ConfigField, + ConfigSection, + CopyableField, + DeleteConfirmDialog, + InstructionsSection, + TestResultDisplay, + UnsavedChangesDialog, + WebhookConfigField, + WebhookDialogFooter, + WebhookUrlField, +} from './ui' +export { WebhookModal } from './webhook-modal' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/airtable.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/airtable.tsx index 83ecba2084..1f872464c0 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/airtable.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/airtable.tsx @@ -1,15 +1,21 @@ import { Info } from 'lucide-react' -import { Button } from '@/components/ui/button' -import { Input } from '@/components/ui/input' -import { Label } from '@/components/ui/label' -import { Skeleton } from '@/components/ui/skeleton' -import { Switch } from '@/components/ui/switch' -import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' -import { ConfigField } from '../ui/config-field' -import { ConfigSection } from '../ui/config-section' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay as WebhookTestResult } from '../ui/test-result' -import { WebhookConfigField } from '../ui/webhook-config-field' +import { + Button, + Input, + Label, + Skeleton, + Switch, + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@/components/ui' +import { + ConfigField, + ConfigSection, + InstructionsSection, + WebhookConfigField, + TestResultDisplay as WebhookTestResult, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface AirtableConfigProps { baseId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/discord.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/discord.tsx index 1c0caabca5..4f9020b99c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/discord.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/discord.tsx @@ -1,11 +1,11 @@ import { Terminal } from 'lucide-react' -import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' -import { CodeBlock } from '@/components/ui/code-block' -import { Input } from '@/components/ui/input' -import { ConfigField } from '../ui/config-field' -import { ConfigSection } from '../ui/config-section' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay } from '../ui/test-result' +import { Alert, AlertDescription, AlertTitle, CodeBlock, Input } from '@/components/ui' +import { + ConfigField, + ConfigSection, + InstructionsSection, + TestResultDisplay, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface DiscordConfigProps { webhookName: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/generic.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/generic.tsx index 659bad0334..30372a23d5 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/generic.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/generic.tsx @@ -1,11 +1,11 @@ -import { Checkbox } from '@/components/ui/checkbox' -import { Input } from '@/components/ui/input' -import { Label } from '@/components/ui/label' -import { ConfigField } from '../ui/config-field' -import { ConfigSection } from '../ui/config-section' -import { CopyableField } from '../ui/copyable' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay } from '../ui/test-result' +import { Checkbox, Input, Label } from '@/components/ui' +import { + ConfigField, + ConfigSection, + CopyableField, + InstructionsSection, + TestResultDisplay, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface GenericConfigProps { requireAuth: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/github.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/github.tsx index e22912d164..bf83190ed2 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/github.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/github.tsx @@ -5,11 +5,13 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select' -import { ConfigField } from '../ui/config-field' -import { ConfigSection } from '../ui/config-section' -import { CopyableField } from '../ui/copyable' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay } from '../ui/test-result' +import { + ConfigField, + ConfigSection, + CopyableField, + InstructionsSection, + TestResultDisplay, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface GithubConfigProps { contentType: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/gmail.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/gmail.tsx index 8f08c50b1c..79b7ec6586 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/gmail.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/gmail.tsx @@ -1,23 +1,25 @@ import { useEffect, useState } from 'react' import { Info } from 'lucide-react' import { GmailIcon } from '@/components/icons' -import { Badge } from '@/components/ui/badge' -import { Button } from '@/components/ui/button' -import { Checkbox } from '@/components/ui/checkbox' -import { Label } from '@/components/ui/label' -import { Notice } from '@/components/ui/notice' import { + Badge, + Button, + Checkbox, + Label, + Notice, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, -} from '@/components/ui/select' -import { Skeleton } from '@/components/ui/skeleton' -import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' + Skeleton, + Tooltip, + TooltipContent, + TooltipTrigger, +} from '@/components/ui' import { Logger } from '@/lib/logs/console/logger' -import { JSONView } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/json-view/json-view' -import { ConfigSection } from '../ui/config-section' +import { JSONView } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components' +import { ConfigSection } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' const logger = new Logger('GmailConfig') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/index.ts new file mode 100644 index 0000000000..987395a2bd --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/index.ts @@ -0,0 +1,10 @@ +export { AirtableConfig } from './airtable' +export { DiscordConfig } from './discord' +export { GenericConfig } from './generic' +export { GithubConfig } from './github' +export { GmailConfig } from './gmail' +export { MicrosoftTeamsConfig } from './microsoftteams' +export { SlackConfig } from './slack' +export { StripeConfig } from './stripe' +export { TelegramConfig } from './telegram' +export { WhatsAppConfig } from './whatsapp' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/microsoftteams.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/microsoftteams.tsx index 163d958902..2bbacd3479 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/microsoftteams.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/microsoftteams.tsx @@ -1,11 +1,11 @@ import { Shield, Terminal } from 'lucide-react' -import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' -import { CodeBlock } from '@/components/ui/code-block' -import { Input } from '@/components/ui/input' -import { ConfigField } from '../ui/config-field' -import { ConfigSection } from '../ui/config-section' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay } from '../ui/test-result' +import { Alert, AlertDescription, AlertTitle, CodeBlock, Input } from '@/components/ui' +import { + ConfigField, + ConfigSection, + InstructionsSection, + TestResultDisplay, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface MicrosoftTeamsConfigProps { hmacSecret: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/slack.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/slack.tsx index 4bb03e252f..d3530c04c6 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/slack.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/slack.tsx @@ -1,10 +1,12 @@ import { SlackIcon } from '@/components/icons' -import { Notice } from '@/components/ui/notice' -import { JSONView } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components/json-view/json-view' -import { ConfigSection } from '../ui/config-section' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay } from '../ui/test-result' -import { WebhookConfigField } from '../ui/webhook-config-field' +import { Notice } from '@/components/ui' +import { JSONView } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/console/components' +import { + ConfigSection, + InstructionsSection, + TestResultDisplay, + WebhookConfigField, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface SlackConfigProps { signingSecret: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/stripe.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/stripe.tsx index dbe9d78e38..7949fe7be9 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/stripe.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/stripe.tsx @@ -1,7 +1,9 @@ import { ShieldCheck } from 'lucide-react' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay } from '../ui/test-result' +import { + InstructionsSection, + TestResultDisplay, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface StripeConfigProps { isLoadingToken: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/telegram.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/telegram.tsx index c143cf73f8..a37dd3d0ec 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/telegram.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/telegram.tsx @@ -1,9 +1,10 @@ -import { Input } from '@/components/ui/input' -import { Skeleton } from '@/components/ui/skeleton' -import { ConfigField } from '../ui/config-field' -import { ConfigSection } from '../ui/config-section' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay as WebhookTestResult } from '../ui/test-result' +import { Input, Skeleton } from '@/components/ui' +import { + ConfigField, + ConfigSection, + InstructionsSection, + TestResultDisplay as WebhookTestResult, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface TelegramConfigProps { botToken: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/whatsapp.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/whatsapp.tsx index 080d9c5d74..996dfecd71 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/whatsapp.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/providers/whatsapp.tsx @@ -1,10 +1,12 @@ import { Network } from 'lucide-react' -import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' -import { ConfigField } from '../ui/config-field' -import { ConfigSection } from '../ui/config-section' -import { CopyableField } from '../ui/copyable' -import { InstructionsSection } from '../ui/instructions-section' -import { TestResultDisplay } from '../ui/test-result' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui' +import { + ConfigField, + ConfigSection, + CopyableField, + InstructionsSection, + TestResultDisplay, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' interface WhatsAppConfigProps { verificationToken: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/ui/index.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/ui/index.ts new file mode 100644 index 0000000000..750428ddd8 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/ui/index.ts @@ -0,0 +1,9 @@ +export { ConfigField } from './config-field' +export { ConfigSection } from './config-section' +export { DeleteConfirmDialog, UnsavedChangesDialog } from './confirmation' +export { CopyableField } from './copyable' +export { InstructionsSection } from './instructions-section' +export { TestResultDisplay } from './test-result' +export { WebhookConfigField } from './webhook-config-field' +export { WebhookDialogFooter } from './webhook-footer' +export { WebhookUrlField } from './webhook-url' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/webhook-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/webhook-modal.tsx index 603ff7918f..4b5315129e 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/webhook-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components/webhook-modal.tsx @@ -9,20 +9,26 @@ import { DialogTitle, } from '@/components/ui/dialog' import { createLogger } from '@/lib/logs/console/logger' -import { type ProviderConfig, WEBHOOK_PROVIDERS } from '../webhook' -import { AirtableConfig } from './providers/airtable' -import { DiscordConfig } from './providers/discord' -import { GenericConfig } from './providers/generic' -import { GithubConfig } from './providers/github' -import { GmailConfig } from './providers/gmail' -import { MicrosoftTeamsConfig } from './providers/microsoftteams' -import { SlackConfig } from './providers/slack' -import { StripeConfig } from './providers/stripe' -import { TelegramConfig } from './providers/telegram' -import { WhatsAppConfig } from './providers/whatsapp' -import { DeleteConfirmDialog, UnsavedChangesDialog } from './ui/confirmation' -import { WebhookDialogFooter } from './ui/webhook-footer' -import { WebhookUrlField } from './ui/webhook-url' +import { + AirtableConfig, + DeleteConfirmDialog, + DiscordConfig, + GenericConfig, + GithubConfig, + GmailConfig, + MicrosoftTeamsConfig, + SlackConfig, + StripeConfig, + TelegramConfig, + UnsavedChangesDialog, + WebhookDialogFooter, + WebhookUrlField, + WhatsAppConfig, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' +import { + type ProviderConfig, + WEBHOOK_PROVIDERS, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook' const logger = createLogger('WebhookModal') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook.tsx index 3163b706ca..871160e2b9 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/webhook.tsx @@ -14,10 +14,10 @@ import { } from '@/components/icons' import { Button } from '@/components/ui/button' import { createLogger } from '@/lib/logs/console/logger' +import { ToolCredentialSelector } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/tool-credential-selector' +import { WebhookModal } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/webhook/components' +import { useSubBlockValue } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/hooks/use-sub-block-value' import { useSubBlockStore } from '@/stores/workflows/subblock/store' -import { useSubBlockValue } from '../../hooks/use-sub-block-value' -import { ToolCredentialSelector } from '../tool-input/components/tool-credential-selector' -import { WebhookModal } from './components/webhook-modal' const logger = createLogger('WebhookConfig') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/sub-block.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/sub-block.tsx index ef64bc7053..db826c9c46 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/sub-block.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/sub-block.tsx @@ -1,36 +1,37 @@ import { useState } from 'react' import { AlertTriangle, Info } from 'lucide-react' -import { Label } from '@/components/ui/label' -import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' +import { Label, Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui' +import { + ChannelSelectorInput, + CheckboxList, + Code, + ComboBox, + ConditionInput, + CredentialSelector, + DateInput, + DocumentSelector, + Dropdown, + EvalInput, + FileSelectorInput, + FileUpload, + FolderSelectorInput, + InputFormat, + KnowledgeBaseSelector, + LongInput, + ProjectSelectorInput, + ResponseFormat, + ScheduleConfig, + ShortInput, + SliderInput, + Switch, + Table, + TimeInput, + ToolInput, + WebhookConfig, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components' import { getBlock } from '@/blocks/index' import type { SubBlockConfig } from '@/blocks/types' import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import { ChannelSelectorInput } from './components/channel-selector/channel-selector-input' -import { CheckboxList } from './components/checkbox-list' -import { Code } from './components/code' -import { ComboBox } from './components/combobox' -import { ConditionInput } from './components/condition-input' -import { CredentialSelector } from './components/credential-selector/credential-selector' -import { DateInput } from './components/date-input' -import { DocumentSelector } from './components/document-selector/document-selector' -import { Dropdown } from './components/dropdown' -import { EvalInput } from './components/eval-input' -import { FileSelectorInput } from './components/file-selector/file-selector-input' -import { FileUpload } from './components/file-upload' -import { FolderSelectorInput } from './components/folder-selector/components/folder-selector-input' -import { KnowledgeBaseSelector } from './components/knowledge-base-selector/knowledge-base-selector' -import { LongInput } from './components/long-input' -import { ProjectSelectorInput } from './components/project-selector/project-selector-input' -import { ResponseFormat } from './components/response/response-format' -import { ScheduleConfig } from './components/schedule/schedule-config' -import { ShortInput } from './components/short-input' -import { SliderInput } from './components/slider-input' -import { InputFormat } from './components/starter/input-format' -import { Switch } from './components/switch' -import { Table } from './components/table' -import { TimeInput } from './components/time-input' -import { ToolInput } from './components/tool-input/tool-input' -import { WebhookConfig } from './components/webhook/webhook' interface SubBlockProps { blockId: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block.tsx index 0105de9784..6428e423f6 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block.tsx @@ -2,13 +2,13 @@ import { useEffect, useRef, useState } from 'react' import { BookOpen, Code, Info, RectangleHorizontal, RectangleVertical } from 'lucide-react' import { useParams } from 'next/navigation' import { Handle, type NodeProps, Position, useUpdateNodeInternals } from 'reactflow' -import { Badge } from '@/components/ui/badge' -import { Button } from '@/components/ui/button' -import { Card } from '@/components/ui/card' -import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' +import { Badge, Button, Card, Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui' import { parseCronToHumanReadable } from '@/lib/schedules/utils' import { cn, validateName } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' +import { ActionBar } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/action-bar/action-bar' +import { ConnectionBlocks } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/connection-blocks/connection-blocks' +import { SubBlock } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/sub-block' import type { BlockConfig, SubBlockConfig } from '@/blocks/types' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' import { useExecutionStore } from '@/stores/execution/store' @@ -16,9 +16,6 @@ import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' import { mergeSubblockState } from '@/stores/workflows/utils' import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import { ActionBar } from './components/action-bar/action-bar' -import { ConnectionBlocks } from './components/connection-blocks/connection-blocks' -import { SubBlock } from './components/sub-block/sub-block' interface WorkflowBlockProps { type: string diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter.ts index ae70933d99..ee68e5a4d2 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter.ts @@ -1,10 +1,10 @@ import { dump as yamlDump, load as yamlLoad } from 'js-yaml' import { createLogger } from '@/lib/logs/console/logger' import { generateWorkflowYaml } from '@/lib/workflows/yaml-generator' +import type { EditorFormat } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import type { EditorFormat } from './workflow-text-editor' const logger = createLogger('WorkflowExporter') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal.tsx index 645e450ce0..05ac535014 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor-modal.tsx @@ -14,10 +14,13 @@ import { import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { applyWorkflowDiff } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-applier' +import { exportWorkflow } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-exporter' +import { + type EditorFormat, + WorkflowTextEditor, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' -import { applyWorkflowDiff } from './workflow-applier' -import { exportWorkflow } from './workflow-exporter' -import { type EditorFormat, WorkflowTextEditor } from './workflow-text-editor' const logger = createLogger('WorkflowTextEditorModal') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor.tsx index c96fb095c0..b520e89b22 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-text-editor/workflow-text-editor.tsx @@ -9,7 +9,7 @@ import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' -import { CodeEditor } from '../workflow-block/components/sub-block/components/tool-input/components/code-editor/code-editor' +import { CodeEditor } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/sub-block/components/tool-input/components/code-editor/code-editor' const logger = createLogger('WorkflowTextEditor') diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/layout.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/layout.tsx index 53da0dbdc5..368f2a2bab 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/layout.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/layout.tsx @@ -1,4 +1,4 @@ -import { ErrorBoundary } from './components/error' +import { ErrorBoundary } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/error' export default function WorkflowLayout({ children }: { children: React.ReactNode }) { return ( diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/page.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/page.tsx index 3ffb4e2a4a..602552e00f 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/page.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/page.tsx @@ -1,3 +1,3 @@ -import WorkFlow from './workflow' +import WorkFlow from '@/app/workspace/[workspaceId]/w/[workflowId]/workflow' export default WorkFlow diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx index 7ab8fd7664..064f22e003 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx @@ -13,21 +13,15 @@ import ReactFlow, { import 'reactflow/dist/style.css' import { createLogger } from '@/lib/logs/console/logger' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' -import { ControlBar } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/control-bar/control-bar' -import { ErrorBoundary } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/error/index' -import { LoopNodeComponent } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-node' -import { Panel } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/panel/panel' -import { ParallelNodeComponent } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-node' -import { getBlock } from '@/blocks' -import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' -import { useWorkspacePermissions } from '@/hooks/use-workspace-permissions' -import { useExecutionStore } from '@/stores/execution/store' -import { useVariablesStore } from '@/stores/panel/variables/store' -import { useGeneralStore } from '@/stores/settings/general/store' -import { useWorkflowRegistry } from '@/stores/workflows/registry/store' -import { useWorkflowStore } from '@/stores/workflows/workflow/store' -import { WorkflowBlock } from './components/workflow-block/workflow-block' -import { WorkflowEdge } from './components/workflow-edge/workflow-edge' +import { + ControlBar, + ErrorBoundary, + LoopNodeComponent, + Panel, + ParallelNodeComponent, + WorkflowBlock, + WorkflowEdge, +} from '@/app/workspace/[workspaceId]/w/[workflowId]/components' import { applyAutoLayoutSmooth, detectHandleOrientation, @@ -37,7 +31,15 @@ import { isPointInLoopNode, resizeLoopNodes, updateNodeParent as updateNodeParentUtil, -} from './utils' +} from '@/app/workspace/[workspaceId]/w/[workflowId]/utils' +import { getBlock } from '@/blocks' +import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' +import { useWorkspacePermissions } from '@/hooks/use-workspace-permissions' +import { useExecutionStore } from '@/stores/execution/store' +import { useVariablesStore } from '@/stores/panel/variables/store' +import { useGeneralStore } from '@/stores/settings/general/store' +import { useWorkflowRegistry } from '@/stores/workflows/registry/store' +import { useWorkflowStore } from '@/stores/workflows/workflow/store' const logger = createLogger('Workflow') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/providers/providers.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/providers/providers.tsx index d567359f19..86ae371e65 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/providers/providers.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/providers/providers.tsx @@ -3,7 +3,7 @@ import React from 'react' import { TooltipProvider } from '@/components/ui/tooltip' import { WorkspacePermissionsProvider } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' -import { ThemeProvider } from './theme-provider' +import { ThemeProvider } from '@/app/workspace/[workspaceId]/w/components/providers/theme-provider' interface ProvidersProps { children: React.ReactNode diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/search-modal/search-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/search-modal/search-modal.tsx index 420a71e103..00dea62b07 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/search-modal/search-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/search-modal/search-modal.tsx @@ -7,9 +7,12 @@ import { BookOpen, Building2, LibraryBig, ScrollText, Search, Shapes, Workflow } import { useParams, useRouter } from 'next/navigation' import { Dialog, DialogOverlay, DialogPortal, DialogTitle } from '@/components/ui/dialog' import { Input } from '@/components/ui/input' +import { + TemplateCard, + TemplateCardSkeleton, +} from '@/app/workspace/[workspaceId]/templates/components/template-card' +import { getKeyboardShortcutText } from '@/app/workspace/[workspaceId]/w/hooks/use-keyboard-shortcuts' import { getAllBlocks } from '@/blocks' -import { TemplateCard, TemplateCardSkeleton } from '../../../templates/components/template-card' -import { getKeyboardShortcutText } from '../../hooks/use-keyboard-shortcuts' interface SearchModalProps { open: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/create-menu.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/create-menu.tsx index 881f9909ea..d2b00183c1 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/create-menu.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/create-menu.tsx @@ -9,8 +9,11 @@ import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover import { generateFolderName } from '@/lib/naming' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' +import { + ImportControls, + type ImportControlsRef, +} from '@/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu' import { useFolderStore } from '@/stores/folders/store' -import { ImportControls, type ImportControlsRef } from './import-controls' interface CreateMenuProps { onCreateWorkflow: (folderId?: string) => Promise diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/index.ts b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/index.ts new file mode 100644 index 0000000000..eadc204a42 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/create-menu/index.ts @@ -0,0 +1,2 @@ +export { CreateMenu } from './create-menu' +export { ImportControls, type ImportControlsRef } from './import-controls' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item.tsx index e5937245e3..82e88364d3 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item.tsx @@ -16,8 +16,8 @@ import { } from '@/components/ui/alert-dialog' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { createLogger } from '@/lib/logs/console/logger' +import { FolderContextMenu } from '@/app/workspace/[workspaceId]/w/components/sidebar/components' import { type FolderTreeNode, useFolderStore } from '@/stores/folders/store' -import { FolderContextMenu } from '../../folder-context-menu/folder-context-menu' const logger = createLogger('FolderItem') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item.tsx index 8bdac483fd..4c14c6c82f 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item.tsx @@ -6,10 +6,10 @@ import Link from 'next/link' import { useParams } from 'next/navigation' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { createLogger } from '@/lib/logs/console/logger' +import { WorkflowContextMenu } from '@/app/workspace/[workspaceId]/w/components/sidebar/components' import { useFolderStore, useIsWorkflowSelected } from '@/stores/folders/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import type { WorkflowMetadata } from '@/stores/workflows/registry/types' -import { WorkflowContextMenu } from '../../workflow-context-menu/workflow-context-menu' const logger = createLogger('WorkflowItem') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/folder-tree.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/folder-tree.tsx index f043ed7861..6863fc2f6c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/folder-tree.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/folder-tree.tsx @@ -5,11 +5,11 @@ import clsx from 'clsx' import { useParams, usePathname } from 'next/navigation' import { Skeleton } from '@/components/ui/skeleton' import { createLogger } from '@/lib/logs/console/logger' +import { FolderItem } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/folder-item' +import { WorkflowItem } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/folder-tree/components/workflow-item' import { type FolderTreeNode, useFolderStore } from '@/stores/folders/store' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import type { WorkflowMetadata } from '@/stores/workflows/registry/types' -import { FolderItem } from './components/folder-item' -import { WorkflowItem } from './components/workflow-item' const logger = createLogger('FolderTree') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/help-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/help-modal.tsx index 4745677d8e..fe6d3dd8cf 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/help-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/help-modal.tsx @@ -4,7 +4,7 @@ import { useEffect } from 'react' import { X } from 'lucide-react' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' -import { HelpForm } from './components/help-form/help-form' +import { HelpForm } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/help-modal/components/help-form/help-form' interface HelpModalProps { open: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/index.ts new file mode 100644 index 0000000000..ce2efeb34a --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/index.ts @@ -0,0 +1,11 @@ +export { CreateMenu } from './create-menu' +export { FolderContextMenu } from './folder-context-menu/folder-context-menu' +export { FolderTree } from './folder-tree/folder-tree' +export { HelpModal } from './help-modal/help-modal' +export { LogsFilters } from './logs-filters/logs-filters' +export { SettingsModal } from './settings-modal/settings-modal' +export { Toolbar } from './toolbar/toolbar' +export { WorkflowContextMenu } from './workflow-context-menu/workflow-context-menu' +export { WorkflowList } from './workflow-list/workflow-list' +export { WorkspaceHeader } from './workspace-header/workspace-header' +export { WorkspaceSelector } from './workspace-selector/workspace-selector' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/index.ts new file mode 100644 index 0000000000..47241b47b5 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/index.ts @@ -0,0 +1,9 @@ +export { Account } from './account/account' +export { ApiKeys } from './api-keys/api-keys' +export { Credentials } from './credentials/credentials' +export { EnvironmentVariables } from './environment/environment' +export { General } from './general/general' +export { Privacy } from './privacy/privacy' +export { SettingsNavigation } from './settings-navigation/settings-navigation' +export { Subscription } from './subscription/subscription' +export { TeamManagement } from './team-management/team-management' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/index.ts new file mode 100644 index 0000000000..17c5db87cf --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/index.ts @@ -0,0 +1,6 @@ +export { BillingSummary } from './billing-summary' +export { CancelSubscription } from './cancel-subscription' +export { EditMemberLimitDialog } from './edit-member-limit-dialog' +export { TeamSeatsDialog } from './team-seats-dialog' +export { TeamUsageOverview } from './team-usage-overview' +export { UsageLimitEditor } from './usage-limit-editor' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/team-usage-overview.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/team-usage-overview.tsx index c64fe8c150..7aeabf74f3 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/team-usage-overview.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/team-usage-overview.tsx @@ -9,7 +9,7 @@ import { useActiveOrganization } from '@/lib/auth-client' import { createLogger } from '@/lib/logs/console/logger' import { useOrganizationStore } from '@/stores/organization' import type { MemberUsageData } from '@/stores/organization/types' -import { EditMemberLimitDialog } from './edit-member-limit-dialog' +import { EditMemberLimitDialog } from './' const logger = createLogger('TeamUsageOverview') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/subscription.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/subscription.tsx index 0803758333..b5ef365263 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/subscription.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/subscription.tsx @@ -1,17 +1,26 @@ import { useCallback, useEffect, useState } from 'react' import { AlertCircle, Users } from 'lucide-react' -import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' -import { Button } from '@/components/ui/button' -import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' -import { Skeleton } from '@/components/ui/skeleton' +import { + Alert, + AlertDescription, + AlertTitle, + Button, + Card, + CardContent, + CardHeader, + CardTitle, + Skeleton, +} from '@/components/ui' import { useSession, useSubscription } from '@/lib/auth-client' import { createLogger } from '@/lib/logs/console/logger' +import { + BillingSummary, + CancelSubscription, + TeamSeatsDialog, + UsageLimitEditor, +} from '@/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components' import { useOrganizationStore } from '@/stores/organization' import { useSubscriptionStore } from '@/stores/subscription/store' -import { BillingSummary } from './components/billing-summary' -import { CancelSubscription } from './components/cancel-subscription' -import { TeamSeatsDialog } from './components/team-seats-dialog' -import { UsageLimitEditor } from './components/usage-limit-editor' const logger = createLogger('Subscription') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components/index.ts b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components/index.ts new file mode 100644 index 0000000000..3a6d760567 --- /dev/null +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components/index.ts @@ -0,0 +1,8 @@ +export { MemberInvitationCard } from './member-invitation-card' +export { NoOrganizationView } from './no-organization-view' +export { OrganizationCreationDialog } from './organization-creation-dialog' +export { OrganizationSettingsTab } from './organization-settings-tab' +export { PendingInvitationsList } from './pending-invitations-list' +export { RemoveMemberDialog } from './remove-member-dialog' +export { TeamMembersList } from './team-members-list' +export { TeamSeatsOverview } from './team-seats-overview' diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components/no-organization-view.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components/no-organization-view.tsx index 672849fbfd..a5aa8f26c4 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components/no-organization-view.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components/no-organization-view.tsx @@ -2,7 +2,7 @@ import { RefreshCw } from 'lucide-react' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' -import { OrganizationCreationDialog } from './organization-creation-dialog' +import { OrganizationCreationDialog } from './' interface NoOrganizationViewProps { hasTeamPlan: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/team-management.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/team-management.tsx index 956d03868b..1b82071e06 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/team-management.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/team-management.tsx @@ -1,22 +1,33 @@ import { useCallback, useEffect, useRef, useState } from 'react' -import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' -import { Skeleton } from '@/components/ui/skeleton' -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { + Alert, + AlertDescription, + AlertTitle, + Skeleton, + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from '@/components/ui' import { useSession } from '@/lib/auth-client' import { checkEnterprisePlan } from '@/lib/billing/subscriptions/utils' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' +import { + TeamSeatsDialog, + TeamUsageOverview, +} from '@/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components' +import { + MemberInvitationCard, + NoOrganizationView, + OrganizationSettingsTab, + PendingInvitationsList, + RemoveMemberDialog, + TeamMembersList, + TeamSeatsOverview, +} from '@/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/team-management/components' import { generateSlug, useOrganizationStore } from '@/stores/organization' import { useSubscriptionStore } from '@/stores/subscription/store' -import { TeamSeatsDialog } from '../subscription/components/team-seats-dialog' -import { TeamUsageOverview } from '../subscription/components/team-usage-overview' -import { MemberInvitationCard } from './components/member-invitation-card' -import { NoOrganizationView } from './components/no-organization-view' -import { OrganizationSettingsTab } from './components/organization-settings-tab' -import { PendingInvitationsList } from './components/pending-invitations-list' -import { RemoveMemberDialog } from './components/remove-member-dialog' -import { TeamMembersList } from './components/team-members-list' -import { TeamSeatsOverview } from './components/team-seats-overview' const logger = createLogger('TeamManagement') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/settings-modal.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/settings-modal.tsx index 4dc7a07082..d15ecbcac1 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/settings-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/settings-modal.tsx @@ -2,22 +2,23 @@ import { useEffect, useRef, useState } from 'react' import { X } from 'lucide-react' -import { Button } from '@/components/ui/button' -import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Button, Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui' import { client } from '@/lib/auth-client' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' +import { + Account, + ApiKeys, + Credentials, + EnvironmentVariables, + General, + Privacy, + SettingsNavigation, + Subscription, + TeamManagement, +} from '@/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components' import { useOrganizationStore } from '@/stores/organization' import { useGeneralStore } from '@/stores/settings/general/store' -import { Account } from './components/account/account' -import { ApiKeys } from './components/api-keys/api-keys' -import { Credentials } from './components/credentials/credentials' -import { EnvironmentVariables } from './components/environment/environment' -import { General } from './components/general/general' -import { Privacy } from './components/privacy/privacy' -import { SettingsNavigation } from './components/settings-navigation/settings-navigation' -import { Subscription } from './components/subscription/subscription' -import { TeamManagement } from './components/team-management/team-management' const logger = createLogger('SettingsModal') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-loop-block/toolbar-loop-block.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-loop-block/toolbar-loop-block.tsx index 8757a0f364..9e74719732 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-loop-block/toolbar-loop-block.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-loop-block/toolbar-loop-block.tsx @@ -2,7 +2,7 @@ import { useCallback } from 'react' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' -import { LoopTool } from '../../../../../../[workflowId]/components/loop-node/loop-config' +import { LoopTool } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/loop-node/loop-config' type LoopToolbarItemProps = { disabled?: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-parallel-block/toolbar-parallel-block.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-parallel-block/toolbar-parallel-block.tsx index ca532e9c5b..cc0e4fb578 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-parallel-block/toolbar-parallel-block.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-parallel-block/toolbar-parallel-block.tsx @@ -2,7 +2,7 @@ import { useCallback } from 'react' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' -import { ParallelTool } from '../../../../../../[workflowId]/components/parallel-node/parallel-config' +import { ParallelTool } from '@/app/workspace/[workspaceId]/w/[workflowId]/components/parallel-node/parallel-config' type ParallelToolbarItemProps = { disabled?: boolean diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/toolbar.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/toolbar.tsx index 678d3c7b4b..4555c9b5d4 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/toolbar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/toolbar.tsx @@ -4,11 +4,11 @@ import { useMemo, useState } from 'react' import { Search } from 'lucide-react' import { Input } from '@/components/ui/input' import { ScrollArea } from '@/components/ui/scroll-area' +import { ToolbarBlock } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-block/toolbar-block' +import LoopToolbarItem from '@/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-loop-block/toolbar-loop-block' +import ParallelToolbarItem from '@/app/workspace/[workspaceId]/w/components/sidebar/components/toolbar/components/toolbar-parallel-block/toolbar-parallel-block' import { getAllBlocks } from '@/blocks' import type { WorkspaceUserPermissions } from '@/hooks/use-user-permissions' -import { ToolbarBlock } from './components/toolbar-block/toolbar-block' -import LoopToolbarItem from './components/toolbar-loop-block/toolbar-loop-block' -import ParallelToolbarItem from './components/toolbar-parallel-block/toolbar-parallel-block' interface ToolbarProps { userPermissions: WorkspaceUserPermissions diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/workspace-selector.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/workspace-selector.tsx index 39980f2b9a..4ba6b5776c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/workspace-selector.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/workspace-selector.tsx @@ -20,7 +20,7 @@ import { isDev } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' -import { InviteModal } from './components/invite-modal/invite-modal' +import { InviteModal } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invite-modal' const logger = createLogger('WorkspaceSelector') diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx index 43798fc8a8..f10bbc0aaa 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx @@ -3,30 +3,30 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { HelpCircle, LibraryBig, ScrollText, Search, Settings, Shapes } from 'lucide-react' import { useParams, usePathname, useRouter } from 'next/navigation' -import { Button } from '@/components/ui/button' -import { ScrollArea } from '@/components/ui/scroll-area' -import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' +import { Button, ScrollArea, Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui' import { useSession } from '@/lib/auth-client' import { createLogger } from '@/lib/logs/console/logger' import { generateWorkspaceName } from '@/lib/naming' import { cn } from '@/lib/utils' import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/components/providers/workspace-permissions-provider' +import { SearchModal } from '@/app/workspace/[workspaceId]/w/components/search-modal/search-modal' +import { + CreateMenu, + FolderTree, + HelpModal, + LogsFilters, + SettingsModal, + Toolbar, + WorkspaceHeader, + WorkspaceSelector, +} from '@/app/workspace/[workspaceId]/w/components/sidebar/components' +import { InviteModal } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/workspace-selector/components/invite-modal/invite-modal' import { getKeyboardShortcutText, useGlobalShortcuts, } from '@/app/workspace/[workspaceId]/w/hooks/use-keyboard-shortcuts' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import type { WorkflowMetadata } from '@/stores/workflows/registry/types' -import { SearchModal } from '../search-modal/search-modal' -import { CreateMenu } from './components/create-menu/create-menu' -import { FolderTree } from './components/folder-tree/folder-tree' -import { HelpModal } from './components/help-modal/help-modal' -import { LogsFilters } from './components/logs-filters/logs-filters' -import { SettingsModal } from './components/settings-modal/settings-modal' -import { Toolbar } from './components/toolbar/toolbar' -import { WorkspaceHeader } from './components/workspace-header/workspace-header' -import { InviteModal } from './components/workspace-selector/components/invite-modal/invite-modal' -import { WorkspaceSelector } from './components/workspace-selector/workspace-selector' const logger = createLogger('Sidebar') diff --git a/apps/sim/blocks/blocks/index.ts b/apps/sim/blocks/blocks/index.ts deleted file mode 100644 index 0613bd601b..0000000000 --- a/apps/sim/blocks/blocks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './qdrant' diff --git a/apps/sim/blocks/blocks/qdrant.ts b/apps/sim/blocks/blocks/qdrant.ts index f3d7b4a210..1074fabcd5 100644 --- a/apps/sim/blocks/blocks/qdrant.ts +++ b/apps/sim/blocks/blocks/qdrant.ts @@ -1,6 +1,6 @@ import { QdrantIcon } from '@/components/icons' +import type { BlockConfig } from '@/blocks/types' import type { QdrantResponse } from '@/tools/qdrant/types' -import type { BlockConfig } from '../types' export const QdrantBlock: BlockConfig = { type: 'qdrant', diff --git a/apps/sim/blocks/blocks/schedule.ts b/apps/sim/blocks/blocks/schedule.ts index fe1af83378..3b1b6881de 100644 --- a/apps/sim/blocks/blocks/schedule.ts +++ b/apps/sim/blocks/blocks/schedule.ts @@ -1,5 +1,5 @@ import { ScheduleIcon } from '@/components/icons' -import type { BlockConfig } from '../types' +import type { BlockConfig } from '@/blocks/types' export const ScheduleBlock: BlockConfig = { type: 'schedule', diff --git a/apps/sim/blocks/blocks/webhook.ts b/apps/sim/blocks/blocks/webhook.ts index d8b3bfbac0..f9b13366b0 100644 --- a/apps/sim/blocks/blocks/webhook.ts +++ b/apps/sim/blocks/blocks/webhook.ts @@ -11,7 +11,7 @@ import { WebhookIcon, WhatsAppIcon, } from '@/components/icons' -import type { BlockConfig } from '../types' +import type { BlockConfig } from '@/blocks/types' const getWebhookProviderIcon = (provider: string) => { const iconMap: Record> = { diff --git a/apps/sim/components/emails/index.ts b/apps/sim/components/emails/index.ts new file mode 100644 index 0000000000..a58b287ad6 --- /dev/null +++ b/apps/sim/components/emails/index.ts @@ -0,0 +1,8 @@ +export * from './base-styles' +export { BatchInvitationEmail } from './batch-invitation-email' +export { default as EmailFooter } from './footer' +export { InvitationEmail } from './invitation-email' +export { OTPVerificationEmail } from './otp-verification-email' +export * from './render-email' +export { ResetPasswordEmail } from './reset-password-email' +export { WorkspaceInvitationEmail } from './workspace-invitation' diff --git a/apps/sim/components/emails/render-email.ts b/apps/sim/components/emails/render-email.ts index e57f26a226..2cd8829c41 100644 --- a/apps/sim/components/emails/render-email.ts +++ b/apps/sim/components/emails/render-email.ts @@ -1,8 +1,10 @@ import { render } from '@react-email/components' -import { BatchInvitationEmail } from './batch-invitation-email' -import { InvitationEmail } from './invitation-email' -import { OTPVerificationEmail } from './otp-verification-email' -import { ResetPasswordEmail } from './reset-password-email' +import { + BatchInvitationEmail, + InvitationEmail, + OTPVerificationEmail, + ResetPasswordEmail, +} from '@/components/emails' export async function renderOTPEmail( otp: string, diff --git a/apps/sim/components/ui/index.ts b/apps/sim/components/ui/index.ts new file mode 100644 index 0000000000..cafeccbbb1 --- /dev/null +++ b/apps/sim/components/ui/index.ts @@ -0,0 +1,138 @@ +export { Alert, AlertDescription, AlertTitle } from './alert' +export { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + AlertDialogTrigger, +} from './alert-dialog' +export { Avatar, AvatarFallback, AvatarImage } from './avatar' +export { Badge, badgeVariants } from './badge' +export { + Breadcrumb, + BreadcrumbEllipsis, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from './breadcrumb' +export { Button, buttonVariants } from './button' +export { Calendar } from './calendar' +export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from './card' +export { Checkbox } from './checkbox' +export { CodeBlock } from './code-block' +export { Collapsible, CollapsibleContent, CollapsibleTrigger } from './collapsible' +export { ColorPicker } from './color-picker' +export { + Command, + CommandDialog, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + CommandSeparator, + CommandShortcut, +} from './command' +export { CopyButton } from './copy-button' +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, +} from './dialog' +export { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuPortal, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuTrigger, +} from './dropdown-menu' +export { checkEnvVarTrigger, EnvVarDropdown } from './env-var-dropdown' +export { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, + useFormField, +} from './form' +export { formatDisplayText } from './formatted-text' +export { Input } from './input' +export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from './input-otp' +export { OTPInputForm } from './input-otp-form' +export { Label } from './label' +export { LoadingAgent } from './loading-agent' +export { Notice } from './notice' +export { Popover, PopoverContent, PopoverTrigger } from './popover' +export { Progress } from './progress' +export { RadioGroup, RadioGroupItem } from './radio-group' +export { ScrollArea, ScrollBar } from './scroll-area' +export { SearchHighlight } from './search-highlight' +export { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectLabel, + SelectScrollDownButton, + SelectScrollUpButton, + SelectSeparator, + SelectTrigger, + SelectValue, +} from './select' +export { Separator } from './separator' +export { + Sheet, + SheetClose, + SheetContent, + SheetDescription, + SheetFooter, + SheetHeader, + SheetOverlay, + SheetPortal, + SheetTitle, + SheetTrigger, +} from './sheet' +export { Skeleton } from './skeleton' +export { Slider } from './slider' +export { Switch } from './switch' +export { + Table, + TableBody, + TableCaption, + TableCell, + TableFooter, + TableHead, + TableHeader, + TableRow, +} from './table' +export { Tabs, TabsContent, TabsList, TabsTrigger } from './tabs' +export { checkTagTrigger, TagDropdown } from './tag-dropdown' +export { Textarea } from './textarea' +export { Toggle, toggleVariants } from './toggle' +export { ToolCallCompletion, ToolCallExecution } from './tool-call' +export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip' diff --git a/apps/sim/components/ui/input-otp-form.tsx b/apps/sim/components/ui/input-otp-form.tsx index 3de39e5648..1fe8a3ef0b 100644 --- a/apps/sim/components/ui/input-otp-form.tsx +++ b/apps/sim/components/ui/input-otp-form.tsx @@ -2,8 +2,8 @@ import { useState } from 'react' import { Loader2 } from 'lucide-react' -import { Button } from './button' -import { InputOTP, InputOTPGroup, InputOTPSlot } from './input-otp' +import { Button } from '@/components/ui/button' +import { InputOTP, InputOTPGroup, InputOTPSlot } from '@/components/ui/input-otp' interface OTPInputFormProps { onSubmit: (otp: string) => void diff --git a/apps/sim/components/ui/tag-dropdown.test.tsx b/apps/sim/components/ui/tag-dropdown.test.tsx index d95584d524..1af14fe9cd 100644 --- a/apps/sim/components/ui/tag-dropdown.test.tsx +++ b/apps/sim/components/ui/tag-dropdown.test.tsx @@ -1,8 +1,8 @@ import { describe, expect, test, vi } from 'vitest' +import { checkTagTrigger } from '@/components/ui/tag-dropdown' import { extractFieldsFromSchema, parseResponseFormatSafely } from '@/lib/response-format' import type { BlockState } from '@/stores/workflows/workflow/types' import { generateLoopBlocks } from '@/stores/workflows/workflow/utils' -import { checkTagTrigger } from './tag-dropdown' vi.mock('@/stores/workflows/workflow/store', () => ({ useWorkflowStore: vi.fn(() => ({ diff --git a/apps/sim/db/index.ts b/apps/sim/db/index.ts index c9b9736c4b..0ba1bd9c76 100644 --- a/apps/sim/db/index.ts +++ b/apps/sim/db/index.ts @@ -2,7 +2,7 @@ import { drizzle, type PostgresJsDatabase } from 'drizzle-orm/postgres-js' import postgres from 'postgres' import { env } from '@/lib/env' import { isDev } from '@/lib/environment' -import * as schema from './schema' +import * as schema from '@/db/schema' // In production, use the Vercel-generated POSTGRES_URL // In development, use the direct DATABASE_URL diff --git a/apps/sim/executor/__test-utils__/executor-mocks.ts b/apps/sim/executor/__test-utils__/executor-mocks.ts index 5c834d6706..94dda1279c 100644 --- a/apps/sim/executor/__test-utils__/executor-mocks.ts +++ b/apps/sim/executor/__test-utils__/executor-mocks.ts @@ -28,7 +28,7 @@ export const createMockHandler = ( * Setup all handler mocks with default behaviors */ export const setupHandlerMocks = () => { - vi.doMock('../handlers', () => ({ + vi.doMock('@/executor/handlers', () => ({ AgentBlockHandler: createMockHandler('agent'), RouterBlockHandler: createMockHandler('router'), ConditionBlockHandler: createMockHandler('condition'), @@ -99,14 +99,14 @@ export const setupStoreMocks = (options?: { * Setup core executor mocks (PathTracker, InputResolver, LoopManager, ParallelManager) */ export const setupExecutorCoreMocks = () => { - vi.doMock('../path', () => ({ + vi.doMock('@/executor/path', () => ({ PathTracker: vi.fn().mockImplementation(() => ({ updateExecutionPaths: vi.fn(), isInActivePath: vi.fn().mockReturnValue(true), })), })) - vi.doMock('../resolver', () => ({ + vi.doMock('@/executor/resolver', () => ({ InputResolver: vi.fn().mockImplementation(() => ({ resolveInputs: vi.fn().mockReturnValue({}), resolveBlockReferences: vi.fn().mockImplementation((value) => value), @@ -115,7 +115,7 @@ export const setupExecutorCoreMocks = () => { })), })) - vi.doMock('../loops', () => ({ + vi.doMock('@/executor/loops', () => ({ LoopManager: vi.fn().mockImplementation(() => ({ processLoopIterations: vi.fn().mockResolvedValue(false), getLoopIndex: vi.fn().mockImplementation((loopId, blockId, context) => { @@ -124,7 +124,7 @@ export const setupExecutorCoreMocks = () => { })), })) - vi.doMock('../parallels', () => ({ + vi.doMock('@/executor/parallels', () => ({ ParallelManager: vi.fn().mockImplementation(() => ({ processParallelIterations: vi.fn().mockResolvedValue(false), createVirtualBlockInstances: vi.fn().mockReturnValue([]), @@ -904,14 +904,14 @@ export const setupParallelTestMocks = (options?: { setupExecutorCoreMocks() // Setup parallel manager with correct relative path - vi.doMock('../parallels', () => + vi.doMock('@/executor/parallels', () => createParallelManagerMock({ maxChecks: options?.maxParallelChecks, }) ) // Setup loop manager with correct relative path - vi.doMock('../loops', () => createLoopManagerMock()) + vi.doMock('@/executor/loops', () => createLoopManagerMock()) } /** diff --git a/apps/sim/executor/__test-utils__/mock-dependencies.ts b/apps/sim/executor/__test-utils__/mock-dependencies.ts index 1eafa379e7..ed47fa99bb 100644 --- a/apps/sim/executor/__test-utils__/mock-dependencies.ts +++ b/apps/sim/executor/__test-utils__/mock-dependencies.ts @@ -55,8 +55,8 @@ vi.mock('@/providers/utils', async (importOriginal) => { }) // Executor utilities -vi.mock('../../path') -vi.mock('../../resolver', () => ({ +vi.mock('@/executor/path') +vi.mock('@/executor/resolver', () => ({ InputResolver: vi.fn(), })) diff --git a/apps/sim/executor/__test-utils__/test-executor.ts b/apps/sim/executor/__test-utils__/test-executor.ts index 973da3f0c6..281865b295 100644 --- a/apps/sim/executor/__test-utils__/test-executor.ts +++ b/apps/sim/executor/__test-utils__/test-executor.ts @@ -4,8 +4,8 @@ * A testable version of the Executor class that can be used in tests * without requiring all the complex dependencies. */ -import { Executor } from '..' -import type { ExecutionResult, NormalizedBlockOutput } from '../types' +import { Executor } from '@/executor' +import type { ExecutionResult, NormalizedBlockOutput } from '@/executor/types' /** * Test implementation of Executor for unit testing. diff --git a/apps/sim/executor/handlers/agent/agent-handler.ts b/apps/sim/executor/handlers/agent/agent-handler.ts index 7e04f014ef..9e64a95e69 100644 --- a/apps/sim/executor/handlers/agent/agent-handler.ts +++ b/apps/sim/executor/handlers/agent/agent-handler.ts @@ -149,7 +149,7 @@ export class AgentBlockHandler implements BlockHandler { const userProvidedParams = tool.params || {} // Import the utility function - const { filterSchemaForLLM, mergeToolParameters } = await import('../../../tools/params') + const { filterSchemaForLLM, mergeToolParameters } = await import('@/tools/params') // Create schema excluding user-provided parameters const filteredSchema = filterSchemaForLLM(tool.schema.function.parameters, userProvidedParams) diff --git a/apps/sim/executor/handlers/api/api-handler.test.ts b/apps/sim/executor/handlers/api/api-handler.test.ts index 74b84357da..a689eb205c 100644 --- a/apps/sim/executor/handlers/api/api-handler.test.ts +++ b/apps/sim/executor/handlers/api/api-handler.test.ts @@ -1,4 +1,4 @@ -import '../../__test-utils__/mock-dependencies' +import '@/executor/__test-utils__/mock-dependencies' import { beforeEach, describe, expect, it, type Mock, vi } from 'vitest' import { BlockType } from '@/executor/consts' diff --git a/apps/sim/executor/handlers/condition/condition-handler.test.ts b/apps/sim/executor/handlers/condition/condition-handler.test.ts index 5873bc74a5..75a399f27b 100644 --- a/apps/sim/executor/handlers/condition/condition-handler.test.ts +++ b/apps/sim/executor/handlers/condition/condition-handler.test.ts @@ -1,4 +1,4 @@ -import '../../__test-utils__/mock-dependencies' +import '@/executor/__test-utils__/mock-dependencies' import { beforeEach, describe, expect, it, type Mocked, type MockedClass, vi } from 'vitest' import { BlockType } from '@/executor/consts' diff --git a/apps/sim/executor/handlers/evaluator/evaluator-handler.test.ts b/apps/sim/executor/handlers/evaluator/evaluator-handler.test.ts index a35ff4d3a1..ce370ed53e 100644 --- a/apps/sim/executor/handlers/evaluator/evaluator-handler.test.ts +++ b/apps/sim/executor/handlers/evaluator/evaluator-handler.test.ts @@ -1,4 +1,4 @@ -import '../../__test-utils__/mock-dependencies' +import '@/executor/__test-utils__/mock-dependencies' import { beforeEach, describe, expect, it, type Mock, vi } from 'vitest' import { BlockType } from '@/executor/consts' diff --git a/apps/sim/executor/handlers/generic/generic-handler.test.ts b/apps/sim/executor/handlers/generic/generic-handler.test.ts index 22339e5b3a..ca53dbf296 100644 --- a/apps/sim/executor/handlers/generic/generic-handler.test.ts +++ b/apps/sim/executor/handlers/generic/generic-handler.test.ts @@ -1,4 +1,4 @@ -import '../../__test-utils__/mock-dependencies' +import '@/executor/__test-utils__/mock-dependencies' import { beforeEach, describe, expect, it, type Mock, vi } from 'vitest' import { BlockType } from '@/executor/consts' diff --git a/apps/sim/executor/handlers/router/router-handler.test.ts b/apps/sim/executor/handlers/router/router-handler.test.ts index b6ef6ccb92..f1badc9c01 100644 --- a/apps/sim/executor/handlers/router/router-handler.test.ts +++ b/apps/sim/executor/handlers/router/router-handler.test.ts @@ -1,4 +1,4 @@ -import '../../__test-utils__/mock-dependencies' +import '@/executor/__test-utils__/mock-dependencies' import { beforeEach, diff --git a/apps/sim/executor/index.test.ts b/apps/sim/executor/index.test.ts index b6d9c6e8c5..e9f838ecce 100644 --- a/apps/sim/executor/index.test.ts +++ b/apps/sim/executor/index.test.ts @@ -339,7 +339,7 @@ describe('Executor', () => { setupAllMocks({ isDebugModeEnabled: true }) // Import Executor AFTER setting up mocks - const { Executor } = await import('./index') + const { Executor } = await import('@/executor/index') const workflow = createMinimalWorkflow() const executor = new Executor(workflow) @@ -357,7 +357,7 @@ describe('Executor', () => { setupAllMocks({ isDebugModeEnabled: false }) // Import Executor AFTER setting up mocks - const { Executor } = await import('./index') + const { Executor } = await import('@/executor/index') const workflow = createMinimalWorkflow() const executor = new Executor(workflow) diff --git a/apps/sim/hooks/use-user-permissions.ts b/apps/sim/hooks/use-user-permissions.ts index bd23012c64..1fc2ab6016 100644 --- a/apps/sim/hooks/use-user-permissions.ts +++ b/apps/sim/hooks/use-user-permissions.ts @@ -1,7 +1,7 @@ import { useMemo } from 'react' import { useSession } from '@/lib/auth-client' import { createLogger } from '@/lib/logs/console/logger' -import type { PermissionType, WorkspacePermissions } from './use-workspace-permissions' +import type { PermissionType, WorkspacePermissions } from '@/hooks/use-workspace-permissions' const logger = createLogger('useUserPermissions') diff --git a/apps/sim/lib/auth.ts b/apps/sim/lib/auth.ts index 597e4c141c..af7cf4421f 100644 --- a/apps/sim/lib/auth.ts +++ b/apps/sim/lib/auth.ts @@ -1064,7 +1064,7 @@ export const auth = betterAuth({ // Initialize usage limits for new user try { - const { initializeUserUsageLimit } = await import('./billing') + const { initializeUserUsageLimit } = await import('@/lib/billing') await initializeUserUsageLimit(user.id) logger.info('Usage limits initialized for new user', { userId: user.id }) } catch (error) { @@ -1267,8 +1267,10 @@ export const auth = betterAuth({ // Sync usage limits and initialize billing period for the user/organization try { - const { syncUsageLimitsFromSubscription } = await import('./billing') - const { initializeBillingPeriod } = await import('./billing/core/billing-periods') + const { syncUsageLimitsFromSubscription } = await import('@/lib/billing') + const { initializeBillingPeriod } = await import( + '@/lib/billing/core/billing-periods' + ) await syncUsageLimitsFromSubscription(subscription.referenceId) logger.info('Usage limits synced after subscription creation', { @@ -1314,7 +1316,7 @@ export const auth = betterAuth({ // Sync usage limits for the user/organization try { - const { syncUsageLimitsFromSubscription } = await import('./billing') + const { syncUsageLimitsFromSubscription } = await import('@/lib/billing') await syncUsageLimitsFromSubscription(subscription.referenceId) logger.info('Usage limits synced after subscription update', { referenceId: subscription.referenceId, diff --git a/apps/sim/lib/autolayout/algorithms/hierarchical.ts b/apps/sim/lib/autolayout/algorithms/hierarchical.ts index a9cb889844..47565f55ea 100644 --- a/apps/sim/lib/autolayout/algorithms/hierarchical.ts +++ b/apps/sim/lib/autolayout/algorithms/hierarchical.ts @@ -1,4 +1,4 @@ -import type { LayoutEdge, LayoutNode, LayoutOptions, LayoutResult } from '../types' +import type { LayoutEdge, LayoutNode, LayoutOptions, LayoutResult } from '@/lib/autolayout/types' interface LayerNode { node: LayoutNode diff --git a/apps/sim/lib/autolayout/algorithms/smart.ts b/apps/sim/lib/autolayout/algorithms/smart.ts index a9e5fc5a08..35df5c275a 100644 --- a/apps/sim/lib/autolayout/algorithms/smart.ts +++ b/apps/sim/lib/autolayout/algorithms/smart.ts @@ -1,5 +1,5 @@ -import type { LayoutEdge, LayoutNode, LayoutOptions, LayoutResult } from '../types' -import { calculateHierarchicalLayout } from './hierarchical' +import { calculateHierarchicalLayout } from '@/lib/autolayout/algorithms/hierarchical' +import type { LayoutEdge, LayoutNode, LayoutOptions, LayoutResult } from '@/lib/autolayout/types' interface WorkflowAnalysis { nodeCount: number diff --git a/apps/sim/lib/autolayout/service.ts b/apps/sim/lib/autolayout/service.ts index 35723f8c2f..e019c927ba 100644 --- a/apps/sim/lib/autolayout/service.ts +++ b/apps/sim/lib/autolayout/service.ts @@ -1,8 +1,14 @@ +import { calculateHierarchicalLayout } from '@/lib/autolayout/algorithms/hierarchical' +import { calculateSmartLayout } from '@/lib/autolayout/algorithms/smart' +import type { + LayoutEdge, + LayoutNode, + LayoutOptions, + LayoutResult, + WorkflowGraph, +} from '@/lib/autolayout/types' +import { BLOCK_CATEGORIES, BLOCK_DIMENSIONS } from '@/lib/autolayout/types' import { createLogger } from '@/lib/logs/console/logger' -import { calculateHierarchicalLayout } from './algorithms/hierarchical' -import { calculateSmartLayout } from './algorithms/smart' -import type { LayoutEdge, LayoutNode, LayoutOptions, LayoutResult, WorkflowGraph } from './types' -import { BLOCK_CATEGORIES, BLOCK_DIMENSIONS } from './types' const logger = createLogger('AutoLayoutService') diff --git a/apps/sim/lib/billing/core/billing-periods.test.ts b/apps/sim/lib/billing/core/billing-periods.test.ts index 66ae18077c..9b52c90cdf 100644 --- a/apps/sim/lib/billing/core/billing-periods.test.ts +++ b/apps/sim/lib/billing/core/billing-periods.test.ts @@ -1,5 +1,8 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { calculateBillingPeriod, calculateNextBillingPeriod } from './billing-periods' +import { + calculateBillingPeriod, + calculateNextBillingPeriod, +} from '@/lib/billing/core/billing-periods' vi.mock('@/lib/logs/console/logger', () => ({ createLogger: vi.fn().mockReturnValue({ diff --git a/apps/sim/lib/billing/core/billing.test.ts b/apps/sim/lib/billing/core/billing.test.ts index 4d2c8aa5fb..3f8a8424e4 100644 --- a/apps/sim/lib/billing/core/billing.test.ts +++ b/apps/sim/lib/billing/core/billing.test.ts @@ -1,6 +1,12 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { getPlanPricing, getUsersAndOrganizationsForOverageBilling } from './billing' -import { calculateBillingPeriod, calculateNextBillingPeriod } from './billing-periods' +import { + getPlanPricing, + getUsersAndOrganizationsForOverageBilling, +} from '@/lib/billing/core/billing' +import { + calculateBillingPeriod, + calculateNextBillingPeriod, +} from '@/lib/billing/core/billing-periods' vi.mock('@/db', () => ({ db: { @@ -28,7 +34,7 @@ vi.mock('@/lib/billing/core/usage', () => ({ getUserUsageData: vi.fn(), })) -vi.mock('../stripe-client', () => ({ +vi.mock('@/lib/billing/core/stripe-client', () => ({ getStripeClient: vi.fn().mockReturnValue(null), requireStripeClient: vi.fn().mockImplementation(() => { throw new Error( diff --git a/apps/sim/lib/billing/index.ts b/apps/sim/lib/billing/index.ts index c02347e513..d2caa6935a 100644 --- a/apps/sim/lib/billing/index.ts +++ b/apps/sim/lib/billing/index.ts @@ -3,31 +3,31 @@ * Provides clean, organized exports for the billing system */ -export * from './calculations/usage-monitor' -export * from './core/billing' -export * from './core/billing-periods' -export * from './core/organization-billing' -export * from './core/subscription' +export * from '@/lib/billing/calculations/usage-monitor' +export * from '@/lib/billing/core/billing' +export * from '@/lib/billing/core/billing-periods' +export * from '@/lib/billing/core/organization-billing' +export * from '@/lib/billing/core/subscription' export { getHighestPrioritySubscription as getActiveSubscription, getUserSubscriptionState as getSubscriptionState, isEnterprisePlan as hasEnterprisePlan, isProPlan as hasProPlan, isTeamPlan as hasTeamPlan, -} from './core/subscription' -export * from './core/usage' +} from '@/lib/billing/core/subscription' +export * from '@/lib/billing/core/usage' export { checkUsageStatus, getTeamUsageLimits, getUserUsageData as getUsageData, getUserUsageLimit as getUsageLimit, updateUserUsageLimit as updateUsageLimit, -} from './core/usage' -export * from './subscriptions/utils' +} from '@/lib/billing/core/usage' +export * from '@/lib/billing/subscriptions/utils' export { calculateDefaultUsageLimit as getDefaultLimit, canEditUsageLimit as canEditLimit, getMinimumUsageLimit as getMinimumLimit, -} from './subscriptions/utils' -export * from './types' -export * from './validation/seat-management' +} from '@/lib/billing/subscriptions/utils' +export * from '@/lib/billing/types' +export * from '@/lib/billing/validation/seat-management' diff --git a/apps/sim/lib/copilot/config.ts b/apps/sim/lib/copilot/config.ts index 64bc7d1e33..2ee75fa04c 100644 --- a/apps/sim/lib/copilot/config.ts +++ b/apps/sim/lib/copilot/config.ts @@ -1,7 +1,7 @@ +import { AGENT_MODE_SYSTEM_PROMPT } from '@/lib/copilot/prompts' import { createLogger } from '@/lib/logs/console/logger' import { getProviderDefaultModel } from '@/providers/models' import type { ProviderId } from '@/providers/types' -import { AGENT_MODE_SYSTEM_PROMPT } from './prompts' const logger = createLogger('CopilotConfig') diff --git a/apps/sim/lib/copilot/service.ts b/apps/sim/lib/copilot/service.ts index 96c95dd665..4093fdd11f 100644 --- a/apps/sim/lib/copilot/service.ts +++ b/apps/sim/lib/copilot/service.ts @@ -1,4 +1,12 @@ import { and, desc, eq, sql } from 'drizzle-orm' +import { getCopilotConfig, getCopilotModel } from '@/lib/copilot/config' +import { + AGENT_MODE_SYSTEM_PROMPT, + ASK_MODE_SYSTEM_PROMPT, + TITLE_GENERATION_SYSTEM_PROMPT, + TITLE_GENERATION_USER_PROMPT, + validateSystemPrompts, +} from '@/lib/copilot/prompts' import { createLogger } from '@/lib/logs/console/logger' import { getRotatingApiKey } from '@/lib/utils' import { generateEmbeddings } from '@/app/api/knowledge/utils' @@ -7,14 +15,6 @@ import { copilotChats, docsEmbeddings } from '@/db/schema' import { executeProviderRequest } from '@/providers' import type { ProviderToolConfig } from '@/providers/types' import { getApiKey } from '@/providers/utils' -import { getCopilotConfig, getCopilotModel } from './config' -import { - AGENT_MODE_SYSTEM_PROMPT, - ASK_MODE_SYSTEM_PROMPT, - TITLE_GENERATION_SYSTEM_PROMPT, - TITLE_GENERATION_USER_PROMPT, - validateSystemPrompts, -} from './prompts' const logger = createLogger('CopilotService') diff --git a/apps/sim/lib/copilot/tools.ts b/apps/sim/lib/copilot/tools.ts index 1c3279aa1b..ca414332e4 100644 --- a/apps/sim/lib/copilot/tools.ts +++ b/apps/sim/lib/copilot/tools.ts @@ -1,7 +1,7 @@ +import { searchDocumentation } from '@/lib/copilot/service' import { createLogger } from '@/lib/logs/console/logger' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useWorkflowYamlStore } from '@/stores/workflows/yaml/store' -import { searchDocumentation } from './service' const logger = createLogger('CopilotTools') diff --git a/apps/sim/lib/email/mailer.test.ts b/apps/sim/lib/email/mailer.test.ts index f21b4e47f0..015e2989c4 100644 --- a/apps/sim/lib/email/mailer.test.ts +++ b/apps/sim/lib/email/mailer.test.ts @@ -12,24 +12,24 @@ vi.mock('resend', () => { } }) -vi.mock('./unsubscribe', () => ({ +vi.mock('@/lib/email/unsubscribe', () => ({ isUnsubscribed: vi.fn(), generateUnsubscribeToken: vi.fn(), })) -vi.mock('../env', () => ({ +vi.mock('@/lib/env', () => ({ env: { RESEND_API_KEY: 'test-api-key', NEXT_PUBLIC_APP_URL: 'https://test.simstudio.ai', }, })) -vi.mock('../urls/utils', () => ({ +vi.mock('@/lib/urls/utils', () => ({ getEmailDomain: vi.fn().mockReturnValue('simstudio.ai'), })) -import { type EmailType, sendEmail } from './mailer' -import { generateUnsubscribeToken, isUnsubscribed } from './unsubscribe' +import { type EmailType, sendEmail } from '@/lib/email/mailer' +import { generateUnsubscribeToken, isUnsubscribed } from '@/lib/email/unsubscribe' describe('mailer', () => { const testEmailOptions = { diff --git a/apps/sim/lib/email/unsubscribe.test.ts b/apps/sim/lib/email/unsubscribe.test.ts index 032c0024e1..7f1b5d4d0a 100644 --- a/apps/sim/lib/email/unsubscribe.test.ts +++ b/apps/sim/lib/email/unsubscribe.test.ts @@ -1,12 +1,12 @@ import { describe, expect, it, vi } from 'vitest' +import type { EmailType } from '@/lib/email/mailer' import { generateUnsubscribeToken, isTransactionalEmail, verifyUnsubscribeToken, } from '@/lib/email/unsubscribe' -import type { EmailType } from './mailer' -vi.mock('../env', () => ({ +vi.mock('@/lib/env', () => ({ env: { BETTER_AUTH_SECRET: 'test-secret-key', }, diff --git a/apps/sim/lib/file-parsers/index.test.ts b/apps/sim/lib/file-parsers/index.test.ts index 86d90194be..ef1f8dbae3 100644 --- a/apps/sim/lib/file-parsers/index.test.ts +++ b/apps/sim/lib/file-parsers/index.test.ts @@ -7,11 +7,9 @@ import path from 'path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import type { FileParseResult, FileParser } from '@/lib/file-parsers/types' -// Mock file system modules const mockExistsSync = vi.fn().mockReturnValue(true) const mockReadFile = vi.fn().mockResolvedValue(Buffer.from('test content')) -// Mock parser functions const mockPdfParseFile = vi.fn().mockResolvedValue({ content: 'Parsed PDF content', metadata: { @@ -53,9 +51,7 @@ const mockMdParseFile = vi.fn().mockResolvedValue({ }, }) -// Create mock module implementation const createMockModule = () => { - // Create mock parsers const mockParsers: Record = { pdf: { parseFile: mockPdfParseFile }, csv: { parseFile: mockCsvParseFile }, @@ -64,7 +60,6 @@ const createMockModule = () => { md: { parseFile: mockMdParseFile }, } - // Create the mock module implementation return { parseFile: async (filePath: string): Promise => { if (!filePath) { @@ -94,11 +89,9 @@ const createMockModule = () => { } describe('File Parsers', () => { - // Setup required mocks before each test beforeEach(() => { vi.resetModules() - // Mock file system modules vi.doMock('fs', () => ({ existsSync: mockExistsSync, })) @@ -107,29 +100,27 @@ describe('File Parsers', () => { readFile: mockReadFile, })) - // Mock the file parser module with our implementation - vi.doMock('./index', () => createMockModule()) + vi.doMock('@/lib/file-parsers/index', () => createMockModule()) - // Mock parser classes - vi.doMock('./pdf-parser', () => ({ + vi.doMock('@/lib/file-parsers/pdf-parser', () => ({ PdfParser: vi.fn().mockImplementation(() => ({ parseFile: mockPdfParseFile, })), })) - vi.doMock('./csv-parser', () => ({ + vi.doMock('@/lib/file-parsers/csv-parser', () => ({ CsvParser: vi.fn().mockImplementation(() => ({ parseFile: mockCsvParseFile, })), })) - vi.doMock('./docx-parser', () => ({ + vi.doMock('@/lib/file-parsers/docx-parser', () => ({ DocxParser: vi.fn().mockImplementation(() => ({ parseFile: mockDocxParseFile, })), })) - vi.doMock('./raw-pdf-parser', () => ({ + vi.doMock('@/lib/file-parsers/raw-pdf-parser', () => ({ RawPdfParser: vi.fn().mockImplementation(() => ({ parseFile: vi.fn().mockResolvedValue({ content: 'Raw parsed PDF content', @@ -140,19 +131,18 @@ describe('File Parsers', () => { })), })) - vi.doMock('./txt-parser', () => ({ + vi.doMock('@/lib/file-parsers/txt-parser', () => ({ TxtParser: vi.fn().mockImplementation(() => ({ parseFile: mockTxtParseFile, })), })) - vi.doMock('./md-parser', () => ({ + vi.doMock('@/lib/file-parsers/md-parser', () => ({ MdParser: vi.fn().mockImplementation(() => ({ parseFile: mockMdParseFile, })), })) - // Silence console output during tests global.console = { ...console, log: vi.fn(), @@ -170,11 +160,9 @@ describe('File Parsers', () => { describe('parseFile', () => { it('should validate file existence', async () => { - // Mock file not existing for this test only mockExistsSync.mockReturnValueOnce(false) - // Dynamically import the module after mocks are set up - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') const testFilePath = '/test/files/test.pdf' await expect(parseFile(testFilePath)).rejects.toThrow('File not found') @@ -182,7 +170,7 @@ describe('File Parsers', () => { }) it('should throw error if file path is empty', async () => { - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') await expect(parseFile('')).rejects.toThrow('No file path provided') }) @@ -199,7 +187,7 @@ describe('File Parsers', () => { mockPdfParseFile.mockResolvedValueOnce(expectedResult) mockExistsSync.mockReturnValue(true) - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') const result = await parseFile('/test/files/document.pdf') expect(result).toEqual(expectedResult) @@ -217,7 +205,7 @@ describe('File Parsers', () => { mockCsvParseFile.mockResolvedValueOnce(expectedResult) mockExistsSync.mockReturnValue(true) - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') const result = await parseFile('/test/files/data.csv') expect(result).toEqual(expectedResult) @@ -235,7 +223,7 @@ describe('File Parsers', () => { mockDocxParseFile.mockResolvedValueOnce(expectedResult) mockExistsSync.mockReturnValue(true) - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') const result = await parseFile('/test/files/document.docx') expect(result).toEqual(expectedResult) @@ -253,7 +241,7 @@ describe('File Parsers', () => { mockTxtParseFile.mockResolvedValueOnce(expectedResult) mockExistsSync.mockReturnValue(true) - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') const result = await parseFile('/test/files/document.txt') expect(result).toEqual(expectedResult) @@ -271,35 +259,33 @@ describe('File Parsers', () => { mockMdParseFile.mockResolvedValueOnce(expectedResult) mockExistsSync.mockReturnValue(true) - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') const result = await parseFile('/test/files/document.md') }) it('should throw error for unsupported file types', async () => { - // Make sure the file "exists" for this test mockExistsSync.mockReturnValue(true) - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') const unsupportedFilePath = '/test/files/image.png' await expect(parseFile(unsupportedFilePath)).rejects.toThrow('Unsupported file type') }) it('should handle errors during parsing', async () => { - // Make sure the file "exists" for this test mockExistsSync.mockReturnValue(true) const parsingError = new Error('CSV parsing failed') mockCsvParseFile.mockRejectedValueOnce(parsingError) - const { parseFile } = await import('./index') + const { parseFile } = await import('@/lib/file-parsers/index') await expect(parseFile('/test/files/data.csv')).rejects.toThrow('CSV parsing failed') }) }) describe('isSupportedFileType', () => { it('should return true for supported file types', async () => { - const { isSupportedFileType } = await import('./index') + const { isSupportedFileType } = await import('@/lib/file-parsers/index') expect(isSupportedFileType('pdf')).toBe(true) expect(isSupportedFileType('csv')).toBe(true) @@ -309,14 +295,14 @@ describe('File Parsers', () => { }) it('should return false for unsupported file types', async () => { - const { isSupportedFileType } = await import('./index') + const { isSupportedFileType } = await import('@/lib/file-parsers/index') expect(isSupportedFileType('png')).toBe(false) expect(isSupportedFileType('unknown')).toBe(false) }) it('should handle uppercase extensions', async () => { - const { isSupportedFileType } = await import('./index') + const { isSupportedFileType } = await import('@/lib/file-parsers/index') expect(isSupportedFileType('PDF')).toBe(true) expect(isSupportedFileType('CSV')).toBe(true) @@ -325,20 +311,16 @@ describe('File Parsers', () => { }) it('should handle errors gracefully', async () => { - // Create a mock that throws an error when called const errorMockModule = { isSupportedFileType: () => { throw new Error('Failed to get parsers') }, } - // Mock the module with our error-throwing implementation - vi.doMock('./index', () => errorMockModule) + vi.doMock('@/lib/file-parsers/index', () => errorMockModule) - // Import and test - const { isSupportedFileType } = await import('./index') + const { isSupportedFileType } = await import('@/lib/file-parsers/index') - // Should catch the error and return false expect(() => isSupportedFileType('pdf')).toThrow('Failed to get parsers') }) }) diff --git a/apps/sim/lib/file-parsers/index.ts b/apps/sim/lib/file-parsers/index.ts index 9380879594..0f189a29c4 100644 --- a/apps/sim/lib/file-parsers/index.ts +++ b/apps/sim/lib/file-parsers/index.ts @@ -24,7 +24,7 @@ function getParserInstances(): Record { try { // First try to use the pdf-parse library // Import the PdfParser using ES module import to avoid test file access - const { PdfParser } = require('./pdf-parser') + const { PdfParser } = require('@/lib/file-parsers/pdf-parser') parserInstances.pdf = new PdfParser() logger.info('PDF parser loaded successfully') } catch (pdfParseError) { @@ -63,35 +63,35 @@ function getParserInstances(): Record { } try { - const { CsvParser } = require('./csv-parser') + const { CsvParser } = require('@/lib/file-parsers/csv-parser') parserInstances.csv = new CsvParser() } catch (error) { logger.error('Failed to load CSV parser:', error) } try { - const { DocxParser } = require('./docx-parser') + const { DocxParser } = require('@/lib/file-parsers/docx-parser') parserInstances.docx = new DocxParser() } catch (error) { logger.error('Failed to load DOCX parser:', error) } try { - const { TxtParser } = require('./txt-parser') + const { TxtParser } = require('@/lib/file-parsers/txt-parser') parserInstances.txt = new TxtParser() } catch (error) { logger.error('Failed to load TXT parser:', error) } try { - const { MdParser } = require('./md-parser') + const { MdParser } = require('@/lib/file-parsers/md-parser') parserInstances.md = new MdParser() } catch (error) { logger.error('Failed to load MD parser:', error) } try { - const { XlsxParser } = require('./xlsx-parser') + const { XlsxParser } = require('@/lib/file-parsers/xlsx-parser') parserInstances.xlsx = new XlsxParser() parserInstances.xls = new XlsxParser() // Both xls and xlsx use the same parser } catch (error) { diff --git a/apps/sim/lib/logs/execution/logger.ts b/apps/sim/lib/logs/execution/logger.ts index 03981cce5b..8c04a58ab5 100644 --- a/apps/sim/lib/logs/execution/logger.ts +++ b/apps/sim/lib/logs/execution/logger.ts @@ -3,8 +3,6 @@ import { v4 as uuidv4 } from 'uuid' import { getCostMultiplier } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' import { snapshotService } from '@/lib/logs/execution/snapshot/service' -import { db } from '@/db' -import { userStats, workflow, workflowExecutionLogs } from '@/db/schema' import type { BlockOutputData, ExecutionEnvironment, @@ -14,7 +12,9 @@ import type { WorkflowExecutionLog, WorkflowExecutionSnapshot, WorkflowState, -} from '../types' +} from '@/lib/logs/types' +import { db } from '@/db' +import { userStats, workflow, workflowExecutionLogs } from '@/db/schema' export interface ToolCall { name: string diff --git a/apps/sim/lib/oauth/oauth.test.ts b/apps/sim/lib/oauth/oauth.test.ts index 6d8996c526..90799c80d3 100644 --- a/apps/sim/lib/oauth/oauth.test.ts +++ b/apps/sim/lib/oauth/oauth.test.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, type Mock, vi } from 'vitest' -vi.mock('../env', () => ({ +vi.mock('@/lib/env', () => ({ env: { GOOGLE_CLIENT_ID: 'google_client_id', GOOGLE_CLIENT_SECRET: 'google_client_secret', @@ -43,7 +43,7 @@ vi.mock('@/lib/logs/console/logger', () => ({ const mockFetch = vi.fn() global.fetch = mockFetch -import { refreshOAuthToken } from './oauth' +import { refreshOAuthToken } from '@/lib/oauth/oauth' describe('OAuth Token Refresh', () => { beforeEach(() => { diff --git a/apps/sim/lib/tokenization/utils.ts b/apps/sim/lib/tokenization/utils.ts index db99241273..15927fddbd 100644 --- a/apps/sim/lib/tokenization/utils.ts +++ b/apps/sim/lib/tokenization/utils.ts @@ -3,10 +3,14 @@ */ import { createLogger } from '@/lib/logs/console/logger' +import { + LLM_BLOCK_TYPES, + MAX_PREVIEW_LENGTH, + TOKENIZATION_CONFIG, +} from '@/lib/tokenization/constants' +import { createTokenizationError } from '@/lib/tokenization/errors' +import type { ProviderTokenizationConfig, TokenUsage } from '@/lib/tokenization/types' import { getProviderFromModel } from '@/providers/utils' -import { LLM_BLOCK_TYPES, MAX_PREVIEW_LENGTH, TOKENIZATION_CONFIG } from './constants' -import { createTokenizationError } from './errors' -import type { ProviderTokenizationConfig, TokenUsage } from './types' const logger = createLogger('TokenizationUtils') diff --git a/apps/sim/lib/uploads/blob/blob-client.test.ts b/apps/sim/lib/uploads/blob/blob-client.test.ts index 6f7c416fcc..52608c1be3 100644 --- a/apps/sim/lib/uploads/blob/blob-client.test.ts +++ b/apps/sim/lib/uploads/blob/blob-client.test.ts @@ -5,7 +5,6 @@ */ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -// Mock Azure Storage Blob const mockUpload = vi.fn() const mockDownload = vi.fn() const mockDelete = vi.fn() @@ -30,8 +29,8 @@ vi.mock('@azure/storage-blob', () => ({ describe('Azure Blob Storage Client', () => { beforeEach(() => { vi.resetAllMocks() + vi.resetModules() - // Mock the blob client chain mockGetBlockBlobClient.mockReturnValue({ upload: mockUpload, download: mockDownload, @@ -55,8 +54,26 @@ describe('Azure Blob Storage Client', () => { toString: () => 'sv=2021-06-08&se=2023-01-01T00%3A00%3A00Z&sr=b&sp=r&sig=test', }) - // Mock BLOB_CONFIG - vi.doMock('../setup', () => ({ + vi.doMock('@/lib/env', () => ({ + env: { + AZURE_ACCOUNT_NAME: 'testaccount', + AZURE_ACCOUNT_KEY: 'testkey', + AZURE_CONNECTION_STRING: + 'DefaultEndpointsProtocol=https;AccountName=testaccount;AccountKey=testkey;EndpointSuffix=core.windows.net', + AZURE_STORAGE_CONTAINER_NAME: 'testcontainer', + }, + })) + + vi.doMock('@/lib/logs/console/logger', () => ({ + createLogger: vi.fn().mockReturnValue({ + debug: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + error: vi.fn(), + }), + })) + + vi.doMock('@/lib/uploads/setup', () => ({ BLOB_CONFIG: { accountName: 'testaccount', accountKey: 'testkey', @@ -65,17 +82,6 @@ describe('Azure Blob Storage Client', () => { containerName: 'testcontainer', }, })) - - // Mock env - vi.doMock('../../env', () => ({ - env: { - AZURE_STORAGE_ACCOUNT_NAME: 'testaccount', - AZURE_STORAGE_ACCOUNT_KEY: 'testkey', - AZURE_STORAGE_CONNECTION_STRING: - 'DefaultEndpointsProtocol=https;AccountName=testaccount;AccountKey=testkey;EndpointSuffix=core.windows.net', - AZURE_STORAGE_CONTAINER_NAME: 'testcontainer', - }, - })) }) afterEach(() => { @@ -84,7 +90,7 @@ describe('Azure Blob Storage Client', () => { describe('uploadToBlob', () => { it('should upload a file to Azure Blob Storage', async () => { - const { uploadToBlob } = await import('./blob-client') + const { uploadToBlob } = await import('@/lib/uploads/blob/blob-client') const testBuffer = Buffer.from('test file content') const fileName = 'test-file.txt' @@ -114,7 +120,7 @@ describe('Azure Blob Storage Client', () => { }) it('should handle custom blob configuration', async () => { - const { uploadToBlob } = await import('./blob-client') + const { uploadToBlob } = await import('@/lib/uploads/blob/blob-client') const testBuffer = Buffer.from('test file content') const fileName = 'test-file.txt' @@ -129,7 +135,6 @@ describe('Azure Blob Storage Client', () => { const result = await uploadToBlob(testBuffer, fileName, contentType, customConfig) - // Verify the container client is called with correct custom configuration expect(mockGetContainerClient).toHaveBeenCalledWith('customcontainer') expect(result.name).toBe(fileName) expect(result.type).toBe(contentType) @@ -138,12 +143,11 @@ describe('Azure Blob Storage Client', () => { describe('downloadFromBlob', () => { it('should download a file from Azure Blob Storage', async () => { - const { downloadFromBlob } = await import('./blob-client') + const { downloadFromBlob } = await import('@/lib/uploads/blob/blob-client') const testKey = 'test-file-key' const testContent = Buffer.from('downloaded content') - // Mock the readable stream const mockReadableStream = { on: vi.fn((event, callback) => { if (event === 'data') { @@ -168,7 +172,7 @@ describe('Azure Blob Storage Client', () => { describe('deleteFromBlob', () => { it('should delete a file from Azure Blob Storage', async () => { - const { deleteFromBlob } = await import('./blob-client') + const { deleteFromBlob } = await import('@/lib/uploads/blob/blob-client') const testKey = 'test-file-key' @@ -183,7 +187,7 @@ describe('Azure Blob Storage Client', () => { describe('getPresignedUrl', () => { it('should generate a presigned URL for Azure Blob Storage', async () => { - const { getPresignedUrl } = await import('./blob-client') + const { getPresignedUrl } = await import('@/lib/uploads/blob/blob-client') const testKey = 'test-file-key' const expiresIn = 3600 @@ -207,7 +211,7 @@ describe('Azure Blob Storage Client', () => { ] test.each(testCases)('should sanitize "$input" to "$expected"', async ({ input, expected }) => { - const { sanitizeFilenameForMetadata } = await import('./blob-client') + const { sanitizeFilenameForMetadata } = await import('@/lib/uploads/blob/blob-client') expect(sanitizeFilenameForMetadata(input)).toBe(expected) }) }) diff --git a/apps/sim/lib/uploads/blob/index.ts b/apps/sim/lib/uploads/blob/index.ts index dd894f535d..f4be6ae119 100644 --- a/apps/sim/lib/uploads/blob/index.ts +++ b/apps/sim/lib/uploads/blob/index.ts @@ -8,4 +8,4 @@ export { getPresignedUrlWithConfig, sanitizeFilenameForMetadata, uploadToBlob, -} from './blob-client' +} from '@/lib/uploads/blob/blob-client' diff --git a/apps/sim/lib/uploads/index.ts b/apps/sim/lib/uploads/index.ts index 77c257658f..fef62fda4d 100644 --- a/apps/sim/lib/uploads/index.ts +++ b/apps/sim/lib/uploads/index.ts @@ -1,5 +1,5 @@ -export * as BlobClient from './blob/blob-client' -export * as S3Client from './s3/s3-client' +export * as BlobClient from '@/lib/uploads/blob/blob-client' +export * as S3Client from '@/lib/uploads/s3/s3-client' export { BLOB_CONFIG, BLOB_KB_CONFIG, @@ -9,7 +9,7 @@ export { UPLOAD_DIR, USE_BLOB_STORAGE, USE_S3_STORAGE, -} from './setup' +} from '@/lib/uploads/setup' export { type CustomStorageConfig, deleteFile, @@ -21,4 +21,4 @@ export { getStorageProvider, isUsingCloudStorage, uploadFile, -} from './storage-client' +} from '@/lib/uploads/storage-client' diff --git a/apps/sim/lib/uploads/s3/index.ts b/apps/sim/lib/uploads/s3/index.ts index a2b525c678..d39af344c8 100644 --- a/apps/sim/lib/uploads/s3/index.ts +++ b/apps/sim/lib/uploads/s3/index.ts @@ -8,4 +8,4 @@ export { getS3Client, sanitizeFilenameForMetadata, uploadToS3, -} from './s3-client' +} from '@/lib/uploads/s3/s3-client' diff --git a/apps/sim/lib/uploads/s3/s3-client.test.ts b/apps/sim/lib/uploads/s3/s3-client.test.ts index a842ba5ed1..7188f11aa1 100644 --- a/apps/sim/lib/uploads/s3/s3-client.test.ts +++ b/apps/sim/lib/uploads/s3/s3-client.test.ts @@ -31,7 +31,25 @@ describe('S3 Client', () => { getSignedUrl: mockGetSignedUrl, })) - vi.doMock('../setup', () => ({ + vi.doMock('@/lib/env', () => ({ + env: { + S3_BUCKET_NAME: 'test-bucket', + AWS_REGION: 'test-region', + AWS_ACCESS_KEY_ID: 'test-access-key', + AWS_SECRET_ACCESS_KEY: 'test-secret-key', + }, + })) + + vi.doMock('@/lib/logs/console/logger', () => ({ + createLogger: vi.fn().mockReturnValue({ + debug: vi.fn(), + info: vi.fn(), + warn: vi.fn(), + error: vi.fn(), + }), + })) + + vi.doMock('@/lib/uploads/setup', () => ({ S3_CONFIG: { bucket: 'test-bucket', region: 'test-region', @@ -50,7 +68,7 @@ describe('S3 Client', () => { it('should upload a file to S3 and return file info', async () => { mockSend.mockResolvedValueOnce({}) - const { uploadToS3 } = await import('./s3-client') + const { uploadToS3 } = await import('@/lib/uploads/s3/s3-client') const file = Buffer.from('test content') const fileName = 'test-file.txt' @@ -83,7 +101,7 @@ describe('S3 Client', () => { it('should handle spaces in filenames', async () => { mockSend.mockResolvedValueOnce({}) - const { uploadToS3 } = await import('./s3-client') + const { uploadToS3 } = await import('@/lib/uploads/s3/s3-client') const testFile = Buffer.from('test file content') const fileName = 'test file with spaces.txt' @@ -103,7 +121,7 @@ describe('S3 Client', () => { it('should use provided size if available', async () => { mockSend.mockResolvedValueOnce({}) - const { uploadToS3 } = await import('./s3-client') + const { uploadToS3 } = await import('@/lib/uploads/s3/s3-client') const testFile = Buffer.from('test file content') const fileName = 'test-file.txt' @@ -119,7 +137,7 @@ describe('S3 Client', () => { const error = new Error('Upload failed') mockSend.mockRejectedValueOnce(error) - const { uploadToS3 } = await import('./s3-client') + const { uploadToS3 } = await import('@/lib/uploads/s3/s3-client') const testFile = Buffer.from('test file content') const fileName = 'test-file.txt' @@ -133,7 +151,7 @@ describe('S3 Client', () => { it('should generate a presigned URL for a file', async () => { mockGetSignedUrl.mockResolvedValueOnce('https://example.com/presigned-url') - const { getPresignedUrl } = await import('./s3-client') + const { getPresignedUrl } = await import('@/lib/uploads/s3/s3-client') const key = 'test-file.txt' const expiresIn = 1800 @@ -153,7 +171,7 @@ describe('S3 Client', () => { it('should use default expiration if not provided', async () => { mockGetSignedUrl.mockResolvedValueOnce('https://example.com/presigned-url') - const { getPresignedUrl } = await import('./s3-client') + const { getPresignedUrl } = await import('@/lib/uploads/s3/s3-client') const key = 'test-file.txt' @@ -170,7 +188,7 @@ describe('S3 Client', () => { const error = new Error('Presigned URL generation failed') mockGetSignedUrl.mockRejectedValueOnce(error) - const { getPresignedUrl } = await import('./s3-client') + const { getPresignedUrl } = await import('@/lib/uploads/s3/s3-client') const key = 'test-file.txt' @@ -198,7 +216,7 @@ describe('S3 Client', () => { $metadata: { httpStatusCode: 200 }, }) - const { downloadFromS3 } = await import('./s3-client') + const { downloadFromS3 } = await import('@/lib/uploads/s3/s3-client') const key = 'test-file.txt' @@ -229,7 +247,7 @@ describe('S3 Client', () => { $metadata: { httpStatusCode: 200 }, }) - const { downloadFromS3 } = await import('./s3-client') + const { downloadFromS3 } = await import('@/lib/uploads/s3/s3-client') const key = 'test-file.txt' @@ -240,7 +258,7 @@ describe('S3 Client', () => { const error = new Error('Download failed') mockSend.mockRejectedValueOnce(error) - const { downloadFromS3 } = await import('./s3-client') + const { downloadFromS3 } = await import('@/lib/uploads/s3/s3-client') const key = 'test-file.txt' @@ -252,7 +270,7 @@ describe('S3 Client', () => { it('should delete a file from S3', async () => { mockSend.mockResolvedValueOnce({}) - const { deleteFromS3 } = await import('./s3-client') + const { deleteFromS3 } = await import('@/lib/uploads/s3/s3-client') const key = 'test-file.txt' @@ -270,7 +288,7 @@ describe('S3 Client', () => { const error = new Error('Delete failed') mockSend.mockRejectedValueOnce(error) - const { deleteFromS3 } = await import('./s3-client') + const { deleteFromS3 } = await import('@/lib/uploads/s3/s3-client') const key = 'test-file.txt' @@ -280,17 +298,24 @@ describe('S3 Client', () => { describe('s3Client initialization', () => { it('should initialize with correct configuration when credentials are available', async () => { - // Mock env with credentials - vi.doMock('../../env', () => ({ + vi.doMock('@/lib/env', () => ({ env: { + S3_BUCKET_NAME: 'test-bucket', + AWS_REGION: 'test-region', AWS_ACCESS_KEY_ID: 'test-access-key', AWS_SECRET_ACCESS_KEY: 'test-secret-key', }, })) - // Re-import to get fresh module with mocked env + vi.doMock('@/lib/uploads/setup', () => ({ + S3_CONFIG: { + bucket: 'test-bucket', + region: 'test-region', + }, + })) + vi.resetModules() - const { getS3Client } = await import('./s3-client') + const { getS3Client } = await import('@/lib/uploads/s3/s3-client') const { S3Client } = await import('@aws-sdk/client-s3') const client = getS3Client() @@ -306,15 +331,24 @@ describe('S3 Client', () => { }) it('should initialize without credentials when env vars are not available', async () => { - vi.doMock('../../env', () => ({ + vi.doMock('@/lib/env', () => ({ env: { + S3_BUCKET_NAME: 'test-bucket', + AWS_REGION: 'test-region', AWS_ACCESS_KEY_ID: undefined, AWS_SECRET_ACCESS_KEY: undefined, }, })) + vi.doMock('@/lib/uploads/setup', () => ({ + S3_CONFIG: { + bucket: 'test-bucket', + region: 'test-region', + }, + })) + vi.resetModules() - const { getS3Client } = await import('./s3-client') + const { getS3Client } = await import('@/lib/uploads/s3/s3-client') const { S3Client } = await import('@aws-sdk/client-s3') const client = getS3Client() diff --git a/apps/sim/lib/utils.test.ts b/apps/sim/lib/utils.test.ts index 361e3180a3..c0605ed49c 100644 --- a/apps/sim/lib/utils.test.ts +++ b/apps/sim/lib/utils.test.ts @@ -14,7 +14,7 @@ import { isValidName, redactApiKeys, validateName, -} from './utils' +} from '@/lib/utils' vi.mock('crypto', () => ({ createCipheriv: vi.fn().mockReturnValue({ diff --git a/apps/sim/lib/workflows/db-helpers.test.ts b/apps/sim/lib/workflows/db-helpers.test.ts index 7d2c6eb5f3..7e187a4954 100644 --- a/apps/sim/lib/workflows/db-helpers.test.ts +++ b/apps/sim/lib/workflows/db-helpers.test.ts @@ -211,12 +211,12 @@ const mockWorkflowState: WorkflowState = { } describe('Database Helpers', () => { - let dbHelpers: typeof import('./db-helpers') + let dbHelpers: typeof import('@/lib/workflows/db-helpers') beforeEach(async () => { vi.clearAllMocks() // Import the module after mocks are set up - dbHelpers = await import('./db-helpers') + dbHelpers = await import('@/lib/workflows/db-helpers') }) afterEach(() => { diff --git a/apps/sim/providers/anthropic/index.ts b/apps/sim/providers/anthropic/index.ts index 52faba9f15..5ef9d02cae 100644 --- a/apps/sim/providers/anthropic/index.ts +++ b/apps/sim/providers/anthropic/index.ts @@ -1,10 +1,15 @@ import Anthropic from '@anthropic-ai/sdk' import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' +import { getProviderDefaultModel, getProviderModels } from '@/providers/models' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' +import { prepareToolsWithUsageControl, trackForcedToolUsage } from '@/providers/utils' import { executeTool } from '@/tools' -import { getProviderDefaultModel, getProviderModels } from '../models' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' -import { prepareToolsWithUsageControl, trackForcedToolUsage } from '../utils' const logger = createLogger('AnthropicProvider') diff --git a/apps/sim/providers/azure-openai/index.ts b/apps/sim/providers/azure-openai/index.ts index a654792e5a..b000765ecb 100644 --- a/apps/sim/providers/azure-openai/index.ts +++ b/apps/sim/providers/azure-openai/index.ts @@ -2,10 +2,15 @@ import { AzureOpenAI } from 'openai' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' +import { getProviderDefaultModel, getProviderModels } from '@/providers/models' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' +import { prepareToolsWithUsageControl, trackForcedToolUsage } from '@/providers/utils' import { executeTool } from '@/tools' -import { getProviderDefaultModel, getProviderModels } from '../models' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' -import { prepareToolsWithUsageControl, trackForcedToolUsage } from '../utils' const logger = createLogger('AzureOpenAIProvider') diff --git a/apps/sim/providers/cerebras/index.ts b/apps/sim/providers/cerebras/index.ts index 4e64e4633b..380aae6277 100644 --- a/apps/sim/providers/cerebras/index.ts +++ b/apps/sim/providers/cerebras/index.ts @@ -1,9 +1,14 @@ import { Cerebras } from '@cerebras/cerebras_cloud_sdk' import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' +import { getProviderDefaultModel, getProviderModels } from '@/providers/models' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' import { executeTool } from '@/tools' -import { getProviderDefaultModel, getProviderModels } from '../models' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' const logger = createLogger('CerebrasProvider') diff --git a/apps/sim/providers/deepseek/index.ts b/apps/sim/providers/deepseek/index.ts index a1c76c7882..ad9ea15000 100644 --- a/apps/sim/providers/deepseek/index.ts +++ b/apps/sim/providers/deepseek/index.ts @@ -1,10 +1,15 @@ import OpenAI from 'openai' import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' +import { getProviderDefaultModel, getProviderModels } from '@/providers/models' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' +import { prepareToolsWithUsageControl, trackForcedToolUsage } from '@/providers/utils' import { executeTool } from '@/tools' -import { getProviderDefaultModel, getProviderModels } from '../models' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' -import { prepareToolsWithUsageControl, trackForcedToolUsage } from '../utils' const logger = createLogger('DeepseekProvider') diff --git a/apps/sim/providers/google/index.ts b/apps/sim/providers/google/index.ts index 6e8f9b42f6..0ff67344fd 100644 --- a/apps/sim/providers/google/index.ts +++ b/apps/sim/providers/google/index.ts @@ -1,9 +1,18 @@ import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' +import { getProviderDefaultModel, getProviderModels } from '@/providers/models' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' +import { + prepareToolExecution, + prepareToolsWithUsageControl, + trackForcedToolUsage, +} from '@/providers/utils' import { executeTool } from '@/tools' -import { getProviderDefaultModel, getProviderModels } from '../models' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' -import { prepareToolExecution, prepareToolsWithUsageControl, trackForcedToolUsage } from '../utils' const logger = createLogger('GoogleProvider') diff --git a/apps/sim/providers/groq/index.ts b/apps/sim/providers/groq/index.ts index df84c04ae9..a4f65d4345 100644 --- a/apps/sim/providers/groq/index.ts +++ b/apps/sim/providers/groq/index.ts @@ -1,9 +1,14 @@ import { Groq } from 'groq-sdk' import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' +import { getProviderDefaultModel, getProviderModels } from '@/providers/models' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' import { executeTool } from '@/tools' -import { getProviderDefaultModel, getProviderModels } from '../models' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' const logger = createLogger('GroqProvider') diff --git a/apps/sim/providers/index.ts b/apps/sim/providers/index.ts index 0a766263b7..95b8386a68 100644 --- a/apps/sim/providers/index.ts +++ b/apps/sim/providers/index.ts @@ -1,12 +1,12 @@ import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' -import type { ProviderRequest, ProviderResponse } from './types' +import type { ProviderRequest, ProviderResponse } from '@/providers/types' import { calculateCost, generateStructuredOutputInstructions, getProvider, supportsTemperature, -} from './utils' +} from '@/providers/utils' const logger = createLogger('Providers') diff --git a/apps/sim/providers/ollama/index.ts b/apps/sim/providers/ollama/index.ts index a874f0f1fc..7dc2bbb409 100644 --- a/apps/sim/providers/ollama/index.ts +++ b/apps/sim/providers/ollama/index.ts @@ -1,10 +1,15 @@ import OpenAI from 'openai' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' +import type { ModelsObject } from '@/providers/ollama/types' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' import { useOllamaStore } from '@/stores/ollama/store' import { executeTool } from '@/tools' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' -import type { ModelsObject } from './types' const logger = createLogger('OllamaProvider') const OLLAMA_HOST = env.OLLAMA_URL || 'http://localhost:11434' diff --git a/apps/sim/providers/openai/index.ts b/apps/sim/providers/openai/index.ts index c16ed320a0..3de716b56e 100644 --- a/apps/sim/providers/openai/index.ts +++ b/apps/sim/providers/openai/index.ts @@ -1,10 +1,19 @@ import OpenAI from 'openai' import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' +import { getProviderDefaultModel, getProviderModels } from '@/providers/models' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' +import { + prepareToolExecution, + prepareToolsWithUsageControl, + trackForcedToolUsage, +} from '@/providers/utils' import { executeTool } from '@/tools' -import { getProviderDefaultModel, getProviderModels } from '../models' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' -import { prepareToolExecution, prepareToolsWithUsageControl, trackForcedToolUsage } from '../utils' const logger = createLogger('OpenAIProvider') diff --git a/apps/sim/providers/utils.test.ts b/apps/sim/providers/utils.test.ts index 30d8e18a8c..343171fcb0 100644 --- a/apps/sim/providers/utils.test.ts +++ b/apps/sim/providers/utils.test.ts @@ -26,7 +26,7 @@ import { supportsToolUsageControl, transformCustomTool, updateOllamaProviderModels, -} from './utils' +} from '@/providers/utils' const isHostedSpy = vi.spyOn(environmentModule, 'isHosted', 'get') const mockGetRotatingApiKey = vi.fn().mockReturnValue('rotating-server-key') diff --git a/apps/sim/providers/utils.ts b/apps/sim/providers/utils.ts index f82623bb91..9bf2b35ab6 100644 --- a/apps/sim/providers/utils.ts +++ b/apps/sim/providers/utils.ts @@ -1,12 +1,11 @@ import { getCostMultiplier, isHosted } from '@/lib/environment' import { createLogger } from '@/lib/logs/console/logger' -import { useCustomToolsStore } from '@/stores/custom-tools/store' -import { anthropicProvider } from './anthropic' -import { azureOpenAIProvider } from './azure-openai' -import { cerebrasProvider } from './cerebras' -import { deepseekProvider } from './deepseek' -import { googleProvider } from './google' -import { groqProvider } from './groq' +import { anthropicProvider } from '@/providers/anthropic' +import { azureOpenAIProvider } from '@/providers/azure-openai' +import { cerebrasProvider } from '@/providers/cerebras' +import { deepseekProvider } from '@/providers/deepseek' +import { googleProvider } from '@/providers/google' +import { groqProvider } from '@/providers/groq' import { getComputerUseModels, getEmbeddingModelPricing, @@ -22,11 +21,12 @@ import { supportsTemperature as supportsTemperatureFromDefinitions, supportsToolUsageControl as supportsToolUsageControlFromDefinitions, updateOllamaModels as updateOllamaModelsInDefinitions, -} from './models' -import { ollamaProvider } from './ollama' -import { openaiProvider } from './openai' -import type { ProviderConfig, ProviderId, ProviderToolConfig } from './types' -import { xAIProvider } from './xai' +} from '@/providers/models' +import { ollamaProvider } from '@/providers/ollama' +import { openaiProvider } from '@/providers/openai' +import type { ProviderConfig, ProviderId, ProviderToolConfig } from '@/providers/types' +import { xAIProvider } from '@/providers/xai' +import { useCustomToolsStore } from '@/stores/custom-tools/store' const logger = createLogger('ProviderUtils') @@ -405,7 +405,7 @@ export async function transformBlockTool( } // Import the new tool parameter utilities - const { createLLMToolSchema } = await import('../tools/params') + const { createLLMToolSchema } = await import('@/tools/params') // Get user-provided parameters from the block const userProvidedParams = block.params || {} diff --git a/apps/sim/providers/xai/index.ts b/apps/sim/providers/xai/index.ts index 7be94095a8..814d208cc0 100644 --- a/apps/sim/providers/xai/index.ts +++ b/apps/sim/providers/xai/index.ts @@ -1,10 +1,15 @@ import OpenAI from 'openai' import { createLogger } from '@/lib/logs/console/logger' import type { StreamingExecution } from '@/executor/types' +import { getProviderDefaultModel, getProviderModels } from '@/providers/models' +import type { + ProviderConfig, + ProviderRequest, + ProviderResponse, + TimeSegment, +} from '@/providers/types' +import { prepareToolsWithUsageControl, trackForcedToolUsage } from '@/providers/utils' import { executeTool } from '@/tools' -import { getProviderDefaultModel, getProviderModels } from '../models' -import type { ProviderConfig, ProviderRequest, ProviderResponse, TimeSegment } from '../types' -import { prepareToolsWithUsageControl, trackForcedToolUsage } from '../utils' const logger = createLogger('XAIProvider') diff --git a/apps/sim/scripts/insert-test-workflow.ts b/apps/sim/scripts/insert-test-workflow.ts index 8c215d4e6e..718f2d11bc 100755 --- a/apps/sim/scripts/insert-test-workflow.ts +++ b/apps/sim/scripts/insert-test-workflow.ts @@ -1,7 +1,7 @@ #!/usr/bin/env bun -import { db } from '../db' -import { user, workflow, workspace } from '../db/schema' +import { db } from '@/db' +import { user, workflow, workspace } from '@/db/schema' const testWorkflowState = { blocks: { diff --git a/apps/sim/scripts/migrate-workflow-states.ts b/apps/sim/scripts/migrate-workflow-states.ts index 9c8f241589..f01c2f9fee 100755 --- a/apps/sim/scripts/migrate-workflow-states.ts +++ b/apps/sim/scripts/migrate-workflow-states.ts @@ -3,8 +3,8 @@ import { readFileSync } from 'fs' import { and, eq, inArray, isNotNull } from 'drizzle-orm' import { nanoid } from 'nanoid' -import { db } from '../db' -import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '../db/schema' +import { db } from '@/db' +import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' interface WorkflowState { blocks: Record diff --git a/apps/sim/serializer/index.test.ts b/apps/sim/serializer/index.test.ts index c1223c3c24..348715aa7c 100644 --- a/apps/sim/serializer/index.test.ts +++ b/apps/sim/serializer/index.test.ts @@ -18,9 +18,9 @@ import { createLoopWorkflowState, createMinimalWorkflowState, createMissingMetadataWorkflow, -} from './__test-utils__/test-workflows' -import { Serializer } from './index' -import type { SerializedWorkflow } from './types' +} from '@/serializer/__test-utils__/test-workflows' +import { Serializer } from '@/serializer/index' +import type { SerializedWorkflow } from '@/serializer/types' // Mock getBlock function vi.mock('@/blocks', () => ({ diff --git a/apps/sim/serializer/index.ts b/apps/sim/serializer/index.ts index 0693a925f6..9bf9cbdc05 100644 --- a/apps/sim/serializer/index.ts +++ b/apps/sim/serializer/index.ts @@ -1,8 +1,8 @@ import type { Edge } from 'reactflow' import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' +import type { SerializedBlock, SerializedWorkflow } from '@/serializer/types' import type { BlockState, Loop, Parallel } from '@/stores/workflows/workflow/types' -import type { SerializedBlock, SerializedWorkflow } from './types' const logger = createLogger('Serializer') diff --git a/apps/sim/services/queue/RateLimiter.test.ts b/apps/sim/services/queue/RateLimiter.test.ts index c2ad391e50..5bee99252c 100644 --- a/apps/sim/services/queue/RateLimiter.test.ts +++ b/apps/sim/services/queue/RateLimiter.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { RateLimiter } from './RateLimiter' -import { RATE_LIMITS } from './types' +import { RateLimiter } from '@/services/queue/RateLimiter' +import { RATE_LIMITS } from '@/services/queue/types' // Mock the database module vi.mock('@/db', () => ({ diff --git a/apps/sim/services/queue/RateLimiter.ts b/apps/sim/services/queue/RateLimiter.ts index 0d891e8c8b..a95a3b520f 100644 --- a/apps/sim/services/queue/RateLimiter.ts +++ b/apps/sim/services/queue/RateLimiter.ts @@ -2,7 +2,7 @@ import { eq, sql } from 'drizzle-orm' import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/db' import { userRateLimits } from '@/db/schema' -import { RATE_LIMITS, type SubscriptionPlan, type TriggerType } from './types' +import { RATE_LIMITS, type SubscriptionPlan, type TriggerType } from '@/services/queue/types' const logger = createLogger('RateLimiter') diff --git a/apps/sim/services/queue/index.ts b/apps/sim/services/queue/index.ts index bc77ad2039..beeb583f28 100644 --- a/apps/sim/services/queue/index.ts +++ b/apps/sim/services/queue/index.ts @@ -1,7 +1,7 @@ -export { RateLimiter } from './RateLimiter' +export { RateLimiter } from '@/services/queue/RateLimiter' export type { RateLimitConfig, SubscriptionPlan, TriggerType, -} from './types' -export { RATE_LIMITS, RateLimitError } from './types' +} from '@/services/queue/types' +export { RATE_LIMITS, RateLimitError } from '@/services/queue/types' diff --git a/apps/sim/socket-server/config/socket.ts b/apps/sim/socket-server/config/socket.ts index 508881d147..eeb36dbdb7 100644 --- a/apps/sim/socket-server/config/socket.ts +++ b/apps/sim/socket-server/config/socket.ts @@ -2,7 +2,7 @@ import type { Server as HttpServer } from 'http' import { Server } from 'socket.io' import { env } from '@/lib/env' import { isProd } from '@/lib/environment' -import { createLogger } from '../../lib/logs/console/logger' +import { createLogger } from '@/lib/logs/console/logger' const logger = createLogger('SocketIOConfig') diff --git a/apps/sim/socket-server/database/operations.ts b/apps/sim/socket-server/database/operations.ts index e48113c534..3270c18585 100644 --- a/apps/sim/socket-server/database/operations.ts +++ b/apps/sim/socket-server/database/operations.ts @@ -4,8 +4,8 @@ import postgres from 'postgres' import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' import { loadWorkflowFromNormalizedTables } from '@/lib/workflows/db-helpers' -import * as schema from '../../db/schema' -import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '../../db/schema' +import * as schema from '@/db/schema' +import { workflow, workflowBlocks, workflowEdges, workflowSubflows } from '@/db/schema' const logger = createLogger('SocketDatabase') diff --git a/apps/sim/socket-server/handlers/connection.ts b/apps/sim/socket-server/handlers/connection.ts index ccaad0243f..29c2e1800e 100644 --- a/apps/sim/socket-server/handlers/connection.ts +++ b/apps/sim/socket-server/handlers/connection.ts @@ -1,7 +1,7 @@ -import { createLogger } from '../../lib/logs/console/logger' -import type { AuthenticatedSocket } from '../middleware/auth' -import type { RoomManager } from '../rooms/manager' -import type { HandlerDependencies } from './workflow' +import { createLogger } from '@/lib/logs/console/logger' +import type { HandlerDependencies } from '@/socket-server/handlers/workflow' +import type { AuthenticatedSocket } from '@/socket-server/middleware/auth' +import type { RoomManager } from '@/socket-server/rooms/manager' const logger = createLogger('ConnectionHandlers') diff --git a/apps/sim/socket-server/handlers/index.ts b/apps/sim/socket-server/handlers/index.ts index cf8a2f4613..976b0aa110 100644 --- a/apps/sim/socket-server/handlers/index.ts +++ b/apps/sim/socket-server/handlers/index.ts @@ -1,10 +1,10 @@ -import type { AuthenticatedSocket } from '../middleware/auth' -import type { RoomManager, UserPresence, WorkflowRoom } from '../rooms/manager' -import { setupConnectionHandlers } from './connection' -import { setupOperationsHandlers } from './operations' -import { setupPresenceHandlers } from './presence' -import { setupSubblocksHandlers } from './subblocks' -import { setupWorkflowHandlers } from './workflow' +import { setupConnectionHandlers } from '@/socket-server/handlers/connection' +import { setupOperationsHandlers } from '@/socket-server/handlers/operations' +import { setupPresenceHandlers } from '@/socket-server/handlers/presence' +import { setupSubblocksHandlers } from '@/socket-server/handlers/subblocks' +import { setupWorkflowHandlers } from '@/socket-server/handlers/workflow' +import type { AuthenticatedSocket } from '@/socket-server/middleware/auth' +import type { RoomManager, UserPresence, WorkflowRoom } from '@/socket-server/rooms/manager' export type { UserPresence, WorkflowRoom } diff --git a/apps/sim/socket-server/handlers/operations.ts b/apps/sim/socket-server/handlers/operations.ts index 4e956eb003..11da962948 100644 --- a/apps/sim/socket-server/handlers/operations.ts +++ b/apps/sim/socket-server/handlers/operations.ts @@ -1,11 +1,11 @@ import { ZodError } from 'zod' -import { createLogger } from '../../lib/logs/console/logger' -import { persistWorkflowOperation } from '../database/operations' -import type { AuthenticatedSocket } from '../middleware/auth' -import { verifyOperationPermission } from '../middleware/permissions' -import type { RoomManager } from '../rooms/manager' -import { WorkflowOperationSchema } from '../validation/schemas' -import type { HandlerDependencies } from './workflow' +import { createLogger } from '@/lib/logs/console/logger' +import { persistWorkflowOperation } from '@/socket-server/database/operations' +import type { HandlerDependencies } from '@/socket-server/handlers/workflow' +import type { AuthenticatedSocket } from '@/socket-server/middleware/auth' +import { verifyOperationPermission } from '@/socket-server/middleware/permissions' +import type { RoomManager } from '@/socket-server/rooms/manager' +import { WorkflowOperationSchema } from '@/socket-server/validation/schemas' const logger = createLogger('OperationsHandlers') diff --git a/apps/sim/socket-server/handlers/presence.ts b/apps/sim/socket-server/handlers/presence.ts index 3904c87c3b..05462e8a37 100644 --- a/apps/sim/socket-server/handlers/presence.ts +++ b/apps/sim/socket-server/handlers/presence.ts @@ -1,7 +1,7 @@ -import { createLogger } from '../../lib/logs/console/logger' -import type { AuthenticatedSocket } from '../middleware/auth' -import type { RoomManager } from '../rooms/manager' -import type { HandlerDependencies } from './workflow' +import { createLogger } from '@/lib/logs/console/logger' +import type { HandlerDependencies } from '@/socket-server/handlers/workflow' +import type { AuthenticatedSocket } from '@/socket-server/middleware/auth' +import type { RoomManager } from '@/socket-server/rooms/manager' const logger = createLogger('PresenceHandlers') diff --git a/apps/sim/socket-server/handlers/subblocks.ts b/apps/sim/socket-server/handlers/subblocks.ts index 18ad9b707d..a71a1fee19 100644 --- a/apps/sim/socket-server/handlers/subblocks.ts +++ b/apps/sim/socket-server/handlers/subblocks.ts @@ -1,10 +1,10 @@ import { and, eq } from 'drizzle-orm' -import { db } from '../../db' -import { workflow, workflowBlocks } from '../../db/schema' -import { createLogger } from '../../lib/logs/console/logger' -import type { AuthenticatedSocket } from '../middleware/auth' -import type { RoomManager } from '../rooms/manager' -import type { HandlerDependencies } from './workflow' +import { createLogger } from '@/lib/logs/console/logger' +import { db } from '@/db' +import { workflow, workflowBlocks } from '@/db/schema' +import type { HandlerDependencies } from '@/socket-server/handlers/workflow' +import type { AuthenticatedSocket } from '@/socket-server/middleware/auth' +import type { RoomManager } from '@/socket-server/rooms/manager' const logger = createLogger('SubblocksHandlers') diff --git a/apps/sim/socket-server/handlers/workflow.ts b/apps/sim/socket-server/handlers/workflow.ts index 300e435608..23d72825e8 100644 --- a/apps/sim/socket-server/handlers/workflow.ts +++ b/apps/sim/socket-server/handlers/workflow.ts @@ -1,8 +1,8 @@ -import { createLogger } from '../../lib/logs/console/logger' -import { getWorkflowState } from '../database/operations' -import type { AuthenticatedSocket } from '../middleware/auth' -import { verifyWorkflowAccess } from '../middleware/permissions' -import type { RoomManager, UserPresence, WorkflowRoom } from '../rooms/manager' +import { createLogger } from '@/lib/logs/console/logger' +import { getWorkflowState } from '@/socket-server/database/operations' +import type { AuthenticatedSocket } from '@/socket-server/middleware/auth' +import { verifyWorkflowAccess } from '@/socket-server/middleware/permissions' +import type { RoomManager, UserPresence, WorkflowRoom } from '@/socket-server/rooms/manager' const logger = createLogger('WorkflowHandlers') diff --git a/apps/sim/socket-server/index.test.ts b/apps/sim/socket-server/index.test.ts index 0f2f1257c9..c8714eacdc 100644 --- a/apps/sim/socket-server/index.test.ts +++ b/apps/sim/socket-server/index.test.ts @@ -5,12 +5,12 @@ */ import { createServer } from 'http' import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest' -import { createLogger } from '../lib/logs/console/logger' -import { createSocketIOServer } from './config/socket' -import { RoomManager } from './rooms/manager' -import { createHttpHandler } from './routes/http' +import { createLogger } from '@/lib/logs/console/logger' +import { createSocketIOServer } from '@/socket-server/config/socket' +import { RoomManager } from '@/socket-server/rooms/manager' +import { createHttpHandler } from '@/socket-server/routes/http' -vi.mock('../lib/auth', () => ({ +vi.mock('@/lib/auth', () => ({ auth: { api: { verifyOneTimeToken: vi.fn(), @@ -18,7 +18,7 @@ vi.mock('../lib/auth', () => ({ }, })) -vi.mock('../db', () => ({ +vi.mock('@/db', () => ({ db: { select: vi.fn(), insert: vi.fn(), @@ -28,7 +28,7 @@ vi.mock('../db', () => ({ }, })) -vi.mock('./middleware/auth', () => ({ +vi.mock('@/socket-server/middleware/auth', () => ({ authenticateSocket: vi.fn((socket, next) => { socket.userId = 'test-user-id' socket.userName = 'Test User' @@ -37,7 +37,7 @@ vi.mock('./middleware/auth', () => ({ }), })) -vi.mock('./middleware/permissions', () => ({ +vi.mock('@/socket-server/middleware/permissions', () => ({ verifyWorkflowAccess: vi.fn().mockResolvedValue({ hasAccess: true, role: 'owner', @@ -47,7 +47,7 @@ vi.mock('./middleware/permissions', () => ({ }), })) -vi.mock('./database/operations', () => ({ +vi.mock('@/socket-server/database/operations', () => ({ getWorkflowState: vi.fn().mockResolvedValue({ id: 'test-workflow', name: 'Test Workflow', @@ -228,13 +228,13 @@ describe('Socket Server Index Integration', () => { describe('Module Integration', () => { it.concurrent('should properly import all extracted modules', async () => { // Test that all modules can be imported without errors - const { createSocketIOServer } = await import('./config/socket') - const { createHttpHandler } = await import('./routes/http') - const { RoomManager } = await import('./rooms/manager') - const { authenticateSocket } = await import('./middleware/auth') - const { verifyWorkflowAccess } = await import('./middleware/permissions') - const { getWorkflowState } = await import('./database/operations') - const { WorkflowOperationSchema } = await import('./validation/schemas') + const { createSocketIOServer } = await import('@/socket-server/config/socket') + const { createHttpHandler } = await import('@/socket-server/routes/http') + const { RoomManager } = await import('@/socket-server/rooms/manager') + const { authenticateSocket } = await import('@/socket-server/middleware/auth') + const { verifyWorkflowAccess } = await import('@/socket-server/middleware/permissions') + const { getWorkflowState } = await import('@/socket-server/database/operations') + const { WorkflowOperationSchema } = await import('@/socket-server/validation/schemas') expect(createSocketIOServer).toBeTypeOf('function') expect(createHttpHandler).toBeTypeOf('function') @@ -285,7 +285,7 @@ describe('Socket Server Index Integration', () => { describe('Validation and Utils', () => { it.concurrent('should validate workflow operations', async () => { - const { WorkflowOperationSchema } = await import('./validation/schemas') + const { WorkflowOperationSchema } = await import('@/socket-server/validation/schemas') const validOperation = { operation: 'add', @@ -303,7 +303,7 @@ describe('Socket Server Index Integration', () => { }) it.concurrent('should validate block operations with autoConnectEdge', async () => { - const { WorkflowOperationSchema } = await import('./validation/schemas') + const { WorkflowOperationSchema } = await import('@/socket-server/validation/schemas') const validOperationWithAutoEdge = { operation: 'add', @@ -329,7 +329,7 @@ describe('Socket Server Index Integration', () => { }) it.concurrent('should validate edge operations', async () => { - const { WorkflowOperationSchema } = await import('./validation/schemas') + const { WorkflowOperationSchema } = await import('@/socket-server/validation/schemas') const validEdgeOperation = { operation: 'add', @@ -346,7 +346,7 @@ describe('Socket Server Index Integration', () => { }) it('should validate subflow operations', async () => { - const { WorkflowOperationSchema } = await import('./validation/schemas') + const { WorkflowOperationSchema } = await import('@/socket-server/validation/schemas') const validSubflowOperation = { operation: 'update', diff --git a/apps/sim/socket-server/index.ts b/apps/sim/socket-server/index.ts index bbe7d91373..1a475ef1e1 100644 --- a/apps/sim/socket-server/index.ts +++ b/apps/sim/socket-server/index.ts @@ -1,11 +1,11 @@ import { createServer } from 'http' import { env } from '@/lib/env' -import { createLogger } from '../lib/logs/console/logger' -import { createSocketIOServer } from './config/socket' -import { setupAllHandlers } from './handlers' -import { type AuthenticatedSocket, authenticateSocket } from './middleware/auth' -import { RoomManager } from './rooms/manager' -import { createHttpHandler } from './routes/http' +import { createLogger } from '@/lib/logs/console/logger' +import { createSocketIOServer } from '@/socket-server/config/socket' +import { setupAllHandlers } from '@/socket-server/handlers' +import { type AuthenticatedSocket, authenticateSocket } from '@/socket-server/middleware/auth' +import { RoomManager } from '@/socket-server/rooms/manager' +import { createHttpHandler } from '@/socket-server/routes/http' const logger = createLogger('CollaborativeSocketServer') diff --git a/apps/sim/socket-server/middleware/permissions.ts b/apps/sim/socket-server/middleware/permissions.ts index 6ae80ef8a7..3be2c835ca 100644 --- a/apps/sim/socket-server/middleware/permissions.ts +++ b/apps/sim/socket-server/middleware/permissions.ts @@ -1,8 +1,8 @@ import { eq } from 'drizzle-orm' -import { db } from '../../db' -import { workflow } from '../../db/schema' -import { createLogger } from '../../lib/logs/console/logger' -import { getUserEntityPermissions } from '../../lib/permissions/utils' +import { createLogger } from '@/lib/logs/console/logger' +import { getUserEntityPermissions } from '@/lib/permissions/utils' +import { db } from '@/db' +import { workflow } from '@/db/schema' const logger = createLogger('SocketPermissions') diff --git a/apps/sim/socket-server/routes/http.ts b/apps/sim/socket-server/routes/http.ts index 0bb867e2ea..2a3cbd958a 100644 --- a/apps/sim/socket-server/routes/http.ts +++ b/apps/sim/socket-server/routes/http.ts @@ -1,5 +1,5 @@ import type { IncomingMessage, ServerResponse } from 'http' -import type { RoomManager } from '../rooms/manager' +import type { RoomManager } from '@/socket-server/rooms/manager' interface Logger { info: (message: string, ...args: any[]) => void diff --git a/apps/sim/stores/constants.ts b/apps/sim/stores/constants.ts index c781c1f4b5..82a5143f15 100644 --- a/apps/sim/stores/constants.ts +++ b/apps/sim/stores/constants.ts @@ -1,5 +1,3 @@ -// localStorage persistence removed - STORAGE_KEYS no longer needed - export const API_ENDPOINTS = { SYNC: '/api/workflows/sync', ENVIRONMENT: '/api/environment', @@ -8,5 +6,3 @@ export const API_ENDPOINTS = { WORKFLOWS: '/api/workflows', WORKSPACE_PERMISSIONS: (id: string) => `/api/workspaces/${id}/permissions`, } - -// Removed SYNC_INTERVALS - Socket.IO handles real-time sync diff --git a/apps/sim/stores/copilot/index.ts b/apps/sim/stores/copilot/index.ts index 11e2815ca6..472d568d9f 100644 --- a/apps/sim/stores/copilot/index.ts +++ b/apps/sim/stores/copilot/index.ts @@ -1,8 +1,8 @@ -export { useCopilotStore } from './store' +export { useCopilotStore } from '@/stores/copilot/store' export type { CopilotActions, CopilotChat, CopilotMessage, CopilotState, CopilotStore, -} from './types' +} from '@/stores/copilot/types' diff --git a/apps/sim/stores/copilot/store.ts b/apps/sim/stores/copilot/store.ts index 0816693ba3..f66fc52070 100644 --- a/apps/sim/stores/copilot/store.ts +++ b/apps/sim/stores/copilot/store.ts @@ -14,7 +14,7 @@ import { updateChatMessages, } from '@/lib/copilot/api' import { createLogger } from '@/lib/logs/console/logger' -import type { CopilotStore } from './types' +import type { CopilotStore } from '@/stores/copilot/types' const logger = createLogger('CopilotStore') diff --git a/apps/sim/stores/custom-tools/store.ts b/apps/sim/stores/custom-tools/store.ts index 6a7f884a7c..318c57e48e 100644 --- a/apps/sim/stores/custom-tools/store.ts +++ b/apps/sim/stores/custom-tools/store.ts @@ -1,7 +1,7 @@ import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' import { createLogger } from '@/lib/logs/console/logger' -import type { CustomToolsStore } from './types' +import type { CustomToolsStore } from '@/stores/custom-tools/types' const logger = createLogger('CustomToolsStore') const API_ENDPOINT = '/api/tools/custom' diff --git a/apps/sim/stores/execution/store.ts b/apps/sim/stores/execution/store.ts index 5261bacbab..fa47d9bdda 100644 --- a/apps/sim/stores/execution/store.ts +++ b/apps/sim/stores/execution/store.ts @@ -1,12 +1,12 @@ import { create } from 'zustand' -import { useGeneralStore } from '@/stores/settings/general/store' import { type ExecutionActions, type ExecutionState, initialState, type PanToBlockCallback, type SetPanToBlockCallback, -} from './types' +} from '@/stores/execution/types' +import { useGeneralStore } from '@/stores/settings/general/store' // Global callback for panning to active blocks let panToBlockCallback: PanToBlockCallback | null = null diff --git a/apps/sim/stores/folders/store.ts b/apps/sim/stores/folders/store.ts index e74dac1946..7c60fb9064 100644 --- a/apps/sim/stores/folders/store.ts +++ b/apps/sim/stores/folders/store.ts @@ -1,7 +1,7 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' import { createLogger } from '@/lib/logs/console/logger' -import { useWorkflowRegistry } from '../workflows/registry/store' +import { useWorkflowRegistry } from '@/stores/workflows/registry/store' const logger = createLogger('FoldersStore') diff --git a/apps/sim/stores/index.ts b/apps/sim/stores/index.ts index a5e83335ee..79727509ec 100644 --- a/apps/sim/stores/index.ts +++ b/apps/sim/stores/index.ts @@ -2,16 +2,16 @@ import { useEffect } from 'react' import { createLogger } from '@/lib/logs/console/logger' -import { useCopilotStore } from './copilot/store' -import { useCustomToolsStore } from './custom-tools/store' -import { useExecutionStore } from './execution/store' -import { useConsoleStore } from './panel/console/store' -import { useVariablesStore } from './panel/variables/store' -import { useEnvironmentStore } from './settings/environment/store' -import { useSubscriptionStore } from './subscription/store' -import { useWorkflowRegistry } from './workflows/registry/store' -import { useSubBlockStore } from './workflows/subblock/store' -import { useWorkflowStore } from './workflows/workflow/store' +import { useCopilotStore } from '@/stores/copilot/store' +import { useCustomToolsStore } from '@/stores/custom-tools/store' +import { useExecutionStore } from '@/stores/execution/store' +import { useConsoleStore } from '@/stores/panel/console/store' +import { useVariablesStore } from '@/stores/panel/variables/store' +import { useEnvironmentStore } from '@/stores/settings/environment/store' +import { useSubscriptionStore } from '@/stores/subscription/store' +import { useWorkflowRegistry } from '@/stores/workflows/registry/store' +import { useSubBlockStore } from '@/stores/workflows/subblock/store' +import { useWorkflowStore } from '@/stores/workflows/workflow/store' const logger = createLogger('Stores') diff --git a/apps/sim/stores/logs/filters/store.ts b/apps/sim/stores/logs/filters/store.ts index 956a37ddd6..72325833de 100644 --- a/apps/sim/stores/logs/filters/store.ts +++ b/apps/sim/stores/logs/filters/store.ts @@ -1,5 +1,5 @@ import { create } from 'zustand' -import type { FilterState, LogLevel, TimeRange, TriggerType } from './types' +import type { FilterState, LogLevel, TimeRange, TriggerType } from '@/stores/logs/filters/types' // Helper functions for URL synchronization const getSearchParams = () => { diff --git a/apps/sim/stores/ollama/store.ts b/apps/sim/stores/ollama/store.ts index c9b3780c55..abc377ae01 100644 --- a/apps/sim/stores/ollama/store.ts +++ b/apps/sim/stores/ollama/store.ts @@ -1,7 +1,7 @@ import { create } from 'zustand' import { createLogger } from '@/lib/logs/console/logger' import { updateOllamaProviderModels } from '@/providers/utils' -import type { OllamaStore } from './types' +import type { OllamaStore } from '@/stores/ollama/types' const logger = createLogger('OllamaStore') diff --git a/apps/sim/stores/organization/index.ts b/apps/sim/stores/organization/index.ts index 945de62802..f9c498fcdd 100644 --- a/apps/sim/stores/organization/index.ts +++ b/apps/sim/stores/organization/index.ts @@ -1,4 +1,4 @@ -export { useOrganizationStore } from './store' +export { useOrganizationStore } from '@/stores/organization/store' export type { Invitation, Member, @@ -12,10 +12,10 @@ export type { User, Workspace, WorkspaceInvitation, -} from './types' +} from '@/stores/organization/types' export { calculateSeatUsage, generateSlug, validateEmail, validateSlug, -} from './utils' +} from '@/stores/organization/utils' diff --git a/apps/sim/stores/organization/store.ts b/apps/sim/stores/organization/store.ts index 0fe2a30c4d..7c39880894 100644 --- a/apps/sim/stores/organization/store.ts +++ b/apps/sim/stores/organization/store.ts @@ -3,8 +3,17 @@ import { devtools } from 'zustand/middleware' import { client } from '@/lib/auth-client' import { checkEnterprisePlan } from '@/lib/billing/subscriptions/utils' import { createLogger } from '@/lib/logs/console/logger' -import type { OrganizationStore, Subscription, WorkspaceInvitation } from './types' -import { calculateSeatUsage, generateSlug, validateEmail, validateSlug } from './utils' +import type { + OrganizationStore, + Subscription, + WorkspaceInvitation, +} from '@/stores/organization/types' +import { + calculateSeatUsage, + generateSlug, + validateEmail, + validateSlug, +} from '@/stores/organization/utils' const logger = createLogger('OrganizationStore') diff --git a/apps/sim/stores/organization/utils.ts b/apps/sim/stores/organization/utils.ts index 00202cdb85..9ae629b7cd 100644 --- a/apps/sim/stores/organization/utils.ts +++ b/apps/sim/stores/organization/utils.ts @@ -1,4 +1,4 @@ -import type { Organization } from './types' +import type { Organization } from '@/stores/organization/types' /** * Calculate seat usage for an organization diff --git a/apps/sim/stores/panel/chat/store.ts b/apps/sim/stores/panel/chat/store.ts index 07e1aaddae..519b256d5e 100644 --- a/apps/sim/stores/panel/chat/store.ts +++ b/apps/sim/stores/panel/chat/store.ts @@ -1,7 +1,7 @@ import { v4 as uuidv4 } from 'uuid' import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' -import type { ChatMessage, ChatStore } from './types' +import type { ChatMessage, ChatStore } from '@/stores/panel/chat/types' // MAX across all workflows const MAX_MESSAGES = 50 diff --git a/apps/sim/stores/panel/console/store.test.ts b/apps/sim/stores/panel/console/store.test.ts index 975ac85936..6217192d96 100644 --- a/apps/sim/stores/panel/console/store.test.ts +++ b/apps/sim/stores/panel/console/store.test.ts @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { useConsoleStore } from './store' -import type { ConsoleUpdate } from './types' +import { useConsoleStore } from '@/stores/panel/console/store' +import type { ConsoleUpdate } from '@/stores/panel/console/types' vi.stubGlobal('crypto', { randomUUID: vi.fn(() => 'test-uuid-123'), diff --git a/apps/sim/stores/panel/console/store.ts b/apps/sim/stores/panel/console/store.ts index 450de87cc8..28b45e8cd8 100644 --- a/apps/sim/stores/panel/console/store.ts +++ b/apps/sim/stores/panel/console/store.ts @@ -2,7 +2,7 @@ import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' import { redactApiKeys } from '@/lib/utils' import type { NormalizedBlockOutput } from '@/executor/types' -import type { ConsoleEntry, ConsoleStore } from './types' +import type { ConsoleEntry, ConsoleStore } from '@/stores/panel/console/types' const MAX_ENTRIES = 50 // MAX across all workflows const MAX_IMAGE_DATA_SIZE = 1000 // Maximum size of image data to store (in characters) @@ -269,7 +269,7 @@ export const useConsoleStore = create()( updateConsole: ( blockId: string, - update: string | import('./types').ConsoleUpdate, + update: string | import('@/stores/panel/console/types').ConsoleUpdate, executionId?: string ) => { set((state) => { diff --git a/apps/sim/stores/panel/store.ts b/apps/sim/stores/panel/store.ts index 800f49095f..a4e9274dd4 100644 --- a/apps/sim/stores/panel/store.ts +++ b/apps/sim/stores/panel/store.ts @@ -1,6 +1,6 @@ import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' -import type { PanelStore, PanelTab } from './types' +import type { PanelStore, PanelTab } from '@/stores/panel/types' export const usePanelStore = create()( devtools( diff --git a/apps/sim/stores/panel/variables/store.ts b/apps/sim/stores/panel/variables/store.ts index 0973a123a2..01fe306c1e 100644 --- a/apps/sim/stores/panel/variables/store.ts +++ b/apps/sim/stores/panel/variables/store.ts @@ -2,9 +2,9 @@ import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' import { createLogger } from '@/lib/logs/console/logger' import { API_ENDPOINTS } from '@/stores/constants' +import type { Variable, VariablesStore } from '@/stores/panel/variables/types' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' import { useSubBlockStore } from '@/stores/workflows/subblock/store' -import type { Variable, VariablesStore } from './types' const logger = createLogger('VariablesStore') const SAVE_DEBOUNCE_DELAY = 200 // Reduced debounce for variables (not real-time collaborative) diff --git a/apps/sim/stores/settings/environment/store.ts b/apps/sim/stores/settings/environment/store.ts index 1710aca7d4..fd8e99151d 100644 --- a/apps/sim/stores/settings/environment/store.ts +++ b/apps/sim/stores/settings/environment/store.ts @@ -1,7 +1,7 @@ import { create } from 'zustand' import { createLogger } from '@/lib/logs/console/logger' -import { API_ENDPOINTS } from '../../constants' -import type { EnvironmentStore, EnvironmentVariable } from './types' +import { API_ENDPOINTS } from '@/stores/constants' +import type { EnvironmentStore, EnvironmentVariable } from '@/stores/settings/environment/types' const logger = createLogger('EnvironmentStore') diff --git a/apps/sim/stores/settings/general/store.ts b/apps/sim/stores/settings/general/store.ts index 456b0c91a3..84fc85af43 100644 --- a/apps/sim/stores/settings/general/store.ts +++ b/apps/sim/stores/settings/general/store.ts @@ -1,7 +1,7 @@ import { create } from 'zustand' import { devtools, persist } from 'zustand/middleware' import { createLogger } from '@/lib/logs/console/logger' -import type { General, GeneralStore, UserSettings } from './types' +import type { General, GeneralStore, UserSettings } from '@/stores/settings/general/types' const logger = createLogger('GeneralStore') diff --git a/apps/sim/stores/subscription/store.ts b/apps/sim/stores/subscription/store.ts index 5dac7332c1..aebb53b8d0 100644 --- a/apps/sim/stores/subscription/store.ts +++ b/apps/sim/stores/subscription/store.ts @@ -8,7 +8,7 @@ import type { SubscriptionStore, UsageData, UsageLimitData, -} from './types' +} from '@/stores/subscription/types' const logger = createLogger('SubscriptionStore') diff --git a/apps/sim/stores/workflows/index.ts b/apps/sim/stores/workflows/index.ts index 3d3d40e85e..635bdfeb83 100644 --- a/apps/sim/stores/workflows/index.ts +++ b/apps/sim/stores/workflows/index.ts @@ -1,8 +1,8 @@ import { createLogger } from '@/lib/logs/console/logger' -import { useWorkflowRegistry } from './registry/store' -import { mergeSubblockState } from './utils' -import { useWorkflowStore } from './workflow/store' -import type { BlockState, WorkflowState } from './workflow/types' +import { useWorkflowRegistry } from '@/stores/workflows/registry/store' +import { mergeSubblockState } from '@/stores/workflows/utils' +import { useWorkflowStore } from '@/stores/workflows/workflow/store' +import type { BlockState, WorkflowState } from '@/stores/workflows/workflow/types' const logger = createLogger('Workflows') @@ -149,10 +149,10 @@ export function getAllWorkflowsWithValues() { return result } -export { useWorkflowRegistry } from './registry/store' -export type { WorkflowMetadata } from './registry/types' -export { useSubBlockStore } from './subblock/store' -export type { SubBlockStore } from './subblock/types' -export { mergeSubblockState } from './utils' -export { useWorkflowStore } from './workflow/store' -export type { WorkflowState } from './workflow/types' +export { useWorkflowRegistry } from '@/stores/workflows/registry/store' +export type { WorkflowMetadata } from '@/stores/workflows/registry/types' +export { useSubBlockStore } from '@/stores/workflows/subblock/store' +export type { SubBlockStore } from '@/stores/workflows/subblock/types' +export { mergeSubblockState } from '@/stores/workflows/utils' +export { useWorkflowStore } from '@/stores/workflows/workflow/store' +export type { WorkflowState } from '@/stores/workflows/workflow/types' diff --git a/apps/sim/stores/workflows/middleware.ts b/apps/sim/stores/workflows/middleware.ts index 9ea95e0791..e8751bc1df 100644 --- a/apps/sim/stores/workflows/middleware.ts +++ b/apps/sim/stores/workflows/middleware.ts @@ -1,7 +1,7 @@ import type { StateCreator } from 'zustand' -import { useWorkflowRegistry } from './registry/store' -import { useSubBlockStore } from './subblock/store' -import type { WorkflowState, WorkflowStore } from './workflow/types' +import { useWorkflowRegistry } from '@/stores/workflows/registry/store' +import { useSubBlockStore } from '@/stores/workflows/subblock/store' +import type { WorkflowState, WorkflowStore } from '@/stores/workflows/workflow/types' interface HistoryEntry { state: WorkflowState diff --git a/apps/sim/stores/workflows/registry/store.ts b/apps/sim/stores/workflows/registry/store.ts index 8ce81e9f7f..f488d25d48 100644 --- a/apps/sim/stores/workflows/registry/store.ts +++ b/apps/sim/stores/workflows/registry/store.ts @@ -2,13 +2,17 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' import { createLogger } from '@/lib/logs/console/logger' import { generateCreativeWorkflowName } from '@/lib/naming' +import { API_ENDPOINTS } from '@/stores/constants' import { clearWorkflowVariablesTracking } from '@/stores/panel/variables/store' -import { API_ENDPOINTS } from '../../constants' -import { useSubBlockStore } from '../subblock/store' -import { useWorkflowStore } from '../workflow/store' -import type { BlockState } from '../workflow/types' -import type { DeploymentStatus, WorkflowMetadata, WorkflowRegistry } from './types' -import { getNextWorkflowColor } from './utils' +import type { + DeploymentStatus, + WorkflowMetadata, + WorkflowRegistry, +} from '@/stores/workflows/registry/types' +import { getNextWorkflowColor } from '@/stores/workflows/registry/utils' +import { useSubBlockStore } from '@/stores/workflows/subblock/store' +import { useWorkflowStore } from '@/stores/workflows/workflow/store' +import type { BlockState } from '@/stores/workflows/workflow/types' const logger = createLogger('WorkflowRegistry') diff --git a/apps/sim/stores/workflows/server-utils.ts b/apps/sim/stores/workflows/server-utils.ts index 19884bb8f8..3f4e1641ca 100644 --- a/apps/sim/stores/workflows/server-utils.ts +++ b/apps/sim/stores/workflows/server-utils.ts @@ -8,7 +8,7 @@ * or React hooks, making it safe for use in Next.js API routes. */ -import type { BlockState, SubBlockState } from './workflow/types' +import type { BlockState, SubBlockState } from '@/stores/workflows/workflow/types' /** * Server-safe version of mergeSubblockState for API routes diff --git a/apps/sim/stores/workflows/subblock/store.ts b/apps/sim/stores/workflows/subblock/store.ts index 8715b72e13..672cca20ec 100644 --- a/apps/sim/stores/workflows/subblock/store.ts +++ b/apps/sim/stores/workflows/subblock/store.ts @@ -1,11 +1,8 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' import type { SubBlockConfig } from '@/blocks/types' -import { useWorkflowRegistry } from '../registry/store' -// Removed workflowSync import - Socket.IO handles real-time sync -import type { SubBlockStore } from './types' - -// Removed debounce sync - Socket.IO handles real-time sync immediately +import { useWorkflowRegistry } from '@/stores/workflows/registry/store' +import type { SubBlockStore } from '@/stores/workflows/subblock/types' /** * SubBlockState stores values for all subblocks in workflows diff --git a/apps/sim/stores/workflows/utils.ts b/apps/sim/stores/workflows/utils.ts index d793f48c1a..b2f43af6cf 100644 --- a/apps/sim/stores/workflows/utils.ts +++ b/apps/sim/stores/workflows/utils.ts @@ -1,5 +1,5 @@ -import { useSubBlockStore } from './subblock/store' -import type { BlockState, SubBlockState } from './workflow/types' +import { useSubBlockStore } from '@/stores/workflows/subblock/store' +import type { BlockState, SubBlockState } from '@/stores/workflows/workflow/types' /** * Merges workflow block states with subblock values while maintaining block structure diff --git a/apps/sim/stores/workflows/workflow/store.test.ts b/apps/sim/stores/workflows/workflow/store.test.ts index a1bcbe146b..f2a0fe1134 100644 --- a/apps/sim/stores/workflows/workflow/store.test.ts +++ b/apps/sim/stores/workflows/workflow/store.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { useWorkflowRegistry } from '../registry/store' -import { useSubBlockStore } from '../subblock/store' -import { useWorkflowStore } from './store' +import { useWorkflowRegistry } from '@/stores/workflows/registry/store' +import { useSubBlockStore } from '@/stores/workflows/subblock/store' +import { useWorkflowStore } from '@/stores/workflows/workflow/store' describe('workflow store', () => { beforeEach(() => { diff --git a/apps/sim/stores/workflows/workflow/store.ts b/apps/sim/stores/workflows/workflow/store.ts index 056cdd8d49..f6454b4552 100644 --- a/apps/sim/stores/workflows/workflow/store.ts +++ b/apps/sim/stores/workflows/workflow/store.ts @@ -4,13 +4,21 @@ import { devtools } from 'zustand/middleware' import { createLogger } from '@/lib/logs/console/logger' import { getBlock } from '@/blocks' import { resolveOutputType } from '@/blocks/utils' -import { pushHistory, type WorkflowStoreWithHistory, withHistory } from '../middleware' -import { useWorkflowRegistry } from '../registry/store' -import { useSubBlockStore } from '../subblock/store' -// import { markWorkflowsDirty, workflowSync } from '../sync' // Disabled for socket-based sync -import { mergeSubblockState } from '../utils' -import type { Position, SubBlockState, SyncControl, WorkflowState } from './types' -import { generateLoopBlocks, generateParallelBlocks } from './utils' +import { + pushHistory, + type WorkflowStoreWithHistory, + withHistory, +} from '@/stores/workflows/middleware' +import { useWorkflowRegistry } from '@/stores/workflows/registry/store' +import { useSubBlockStore } from '@/stores/workflows/subblock/store' +import { mergeSubblockState } from '@/stores/workflows/utils' +import type { + Position, + SubBlockState, + SyncControl, + WorkflowState, +} from '@/stores/workflows/workflow/types' +import { generateLoopBlocks, generateParallelBlocks } from '@/stores/workflows/workflow/utils' const logger = createLogger('WorkflowStore') diff --git a/apps/sim/stores/workflows/workflow/types.ts b/apps/sim/stores/workflows/workflow/types.ts index 05b31bfbc2..f52b35b66c 100644 --- a/apps/sim/stores/workflows/workflow/types.ts +++ b/apps/sim/stores/workflows/workflow/types.ts @@ -1,6 +1,6 @@ import type { Edge } from 'reactflow' import type { BlockOutput, SubBlockType } from '@/blocks/types' -import type { DeploymentStatus } from '../registry/types' +import type { DeploymentStatus } from '@/stores/workflows/registry/types' export const SUBFLOW_TYPES = { LOOP: 'loop', diff --git a/apps/sim/stores/workflows/workflow/utils.test.ts b/apps/sim/stores/workflows/workflow/utils.test.ts index 96ceb41319..e2ed70db06 100644 --- a/apps/sim/stores/workflows/workflow/utils.test.ts +++ b/apps/sim/stores/workflows/workflow/utils.test.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from 'vitest' -import type { BlockState } from './types' -import { convertLoopBlockToLoop } from './utils' +import type { BlockState } from '@/stores/workflows/workflow/types' +import { convertLoopBlockToLoop } from '@/stores/workflows/workflow/utils' describe('convertLoopBlockToLoop', () => { test('should parse JSON array string for forEach loops', () => { diff --git a/apps/sim/stores/workflows/workflow/utils.ts b/apps/sim/stores/workflows/workflow/utils.ts index 8b9e8d4a37..15f0e3dcc9 100644 --- a/apps/sim/stores/workflows/workflow/utils.ts +++ b/apps/sim/stores/workflows/workflow/utils.ts @@ -1,4 +1,4 @@ -import type { BlockState, Loop, Parallel } from './types' +import type { BlockState, Loop, Parallel } from '@/stores/workflows/workflow/types' const DEFAULT_LOOP_ITERATIONS = 5 diff --git a/apps/sim/stores/workflows/yaml/importer.ts b/apps/sim/stores/workflows/yaml/importer.ts index fe5cc11e93..06b626c707 100644 --- a/apps/sim/stores/workflows/yaml/importer.ts +++ b/apps/sim/stores/workflows/yaml/importer.ts @@ -9,7 +9,7 @@ import { parseBlockConnections, validateBlockReferences, validateBlockStructure, -} from './parsing-utils' +} from '@/stores/workflows/yaml/parsing-utils' const logger = createLogger('WorkflowYamlImporter') diff --git a/apps/sim/stores/workflows/yaml/store.ts b/apps/sim/stores/workflows/yaml/store.ts index 9d9389a8c5..8076e6090c 100644 --- a/apps/sim/stores/workflows/yaml/store.ts +++ b/apps/sim/stores/workflows/yaml/store.ts @@ -2,8 +2,8 @@ import { create } from 'zustand' import { devtools } from 'zustand/middleware' import { createLogger } from '@/lib/logs/console/logger' import { generateWorkflowYaml } from '@/lib/workflows/yaml-generator' -import { useSubBlockStore } from '../subblock/store' -import { useWorkflowStore } from '../workflow/store' +import { useSubBlockStore } from '@/stores/workflows/subblock/store' +import { useWorkflowStore } from '@/stores/workflows/workflow/store' const logger = createLogger('WorkflowYamlStore') diff --git a/apps/sim/tools/__test-utils__/test-tools.ts b/apps/sim/tools/__test-utils__/test-tools.ts index 507a2d297e..436bd0537a 100644 --- a/apps/sim/tools/__test-utils__/test-tools.ts +++ b/apps/sim/tools/__test-utils__/test-tools.ts @@ -5,7 +5,7 @@ * in a controlled environment without external dependencies. */ import { type Mock, vi } from 'vitest' -import type { ToolConfig, ToolResponse } from '../types' +import type { ToolConfig, ToolResponse } from '@/tools/types' // Define a type that combines Mock with fetch properties type MockFetch = Mock & { diff --git a/apps/sim/tools/blocks/edit-workflow.ts b/apps/sim/tools/blocks/edit-workflow.ts index 36a9d8ea63..e71699f0c0 100644 --- a/apps/sim/tools/blocks/edit-workflow.ts +++ b/apps/sim/tools/blocks/edit-workflow.ts @@ -1,4 +1,4 @@ -import type { ToolConfig, ToolResponse } from '../types' +import type { ToolConfig, ToolResponse } from '@/tools/types' interface EditWorkflowParams { yamlContent: string diff --git a/apps/sim/tools/blocks/get-all.ts b/apps/sim/tools/blocks/get-all.ts index b020b2cd0a..f9176d5dea 100644 --- a/apps/sim/tools/blocks/get-all.ts +++ b/apps/sim/tools/blocks/get-all.ts @@ -1,4 +1,4 @@ -import type { ToolConfig, ToolResponse } from '../types' +import type { ToolConfig, ToolResponse } from '@/tools/types' interface GetAllBlocksParams { includeDetails?: boolean diff --git a/apps/sim/tools/blocks/get-metadata.ts b/apps/sim/tools/blocks/get-metadata.ts index dfcb029a91..c3ae2db62e 100644 --- a/apps/sim/tools/blocks/get-metadata.ts +++ b/apps/sim/tools/blocks/get-metadata.ts @@ -1,4 +1,4 @@ -import type { ToolConfig, ToolResponse } from '../types' +import type { ToolConfig, ToolResponse } from '@/tools/types' interface GetBlockMetadataParams { blockIds: string[] diff --git a/apps/sim/tools/blocks/get-yaml-structure.ts b/apps/sim/tools/blocks/get-yaml-structure.ts index cd3dc483ac..d57c03851f 100644 --- a/apps/sim/tools/blocks/get-yaml-structure.ts +++ b/apps/sim/tools/blocks/get-yaml-structure.ts @@ -1,4 +1,4 @@ -import type { ToolConfig, ToolResponse } from '../types' +import type { ToolConfig, ToolResponse } from '@/tools/types' type GetYamlStructureParams = Record diff --git a/apps/sim/tools/elevenlabs/tts.ts b/apps/sim/tools/elevenlabs/tts.ts index af806364fe..b5772459a5 100644 --- a/apps/sim/tools/elevenlabs/tts.ts +++ b/apps/sim/tools/elevenlabs/tts.ts @@ -1,6 +1,6 @@ import { createLogger } from '@/lib/logs/console/logger' -import type { ToolConfig } from '../types' -import type { ElevenLabsTtsParams, ElevenLabsTtsResponse } from './types' +import type { ElevenLabsTtsParams, ElevenLabsTtsResponse } from '@/tools/elevenlabs/types' +import type { ToolConfig } from '@/tools/types' const logger = createLogger('ElevenLabsTool') diff --git a/apps/sim/tools/elevenlabs/types.ts b/apps/sim/tools/elevenlabs/types.ts index 0648ee48cf..e029eee3f6 100644 --- a/apps/sim/tools/elevenlabs/types.ts +++ b/apps/sim/tools/elevenlabs/types.ts @@ -1,4 +1,4 @@ -import type { ToolResponse } from '../types' +import type { ToolResponse } from '@/tools/types' export interface ElevenLabsTtsParams { apiKey: string diff --git a/apps/sim/tools/params.test.ts b/apps/sim/tools/params.test.ts index 161170da3c..30667f34cf 100644 --- a/apps/sim/tools/params.test.ts +++ b/apps/sim/tools/params.test.ts @@ -53,7 +53,7 @@ const mockToolConfig = { }, } -vi.mock('./utils', () => ({ +vi.mock('@/tools/utils', () => ({ getTool: vi.fn((toolId: string) => { if (toolId === 'test_tool') { return mockToolConfig diff --git a/apps/sim/tools/params.ts b/apps/sim/tools/params.ts index d5b2fd6788..50fbc7aa55 100644 --- a/apps/sim/tools/params.ts +++ b/apps/sim/tools/params.ts @@ -108,7 +108,7 @@ let blockConfigCache: Record | null = null function getBlockConfigurations(): Record { if (!blockConfigCache) { try { - const { getAllBlocks } = require('../blocks') + const { getAllBlocks } = require('@/blocks') const allBlocks = getAllBlocks() blockConfigCache = {} allBlocks.forEach((block: BlockConfig) => { diff --git a/apps/sim/tools/qdrant/fetch_points.ts b/apps/sim/tools/qdrant/fetch_points.ts index 9cf502566a..b4a1640d49 100644 --- a/apps/sim/tools/qdrant/fetch_points.ts +++ b/apps/sim/tools/qdrant/fetch_points.ts @@ -1,5 +1,5 @@ -import type { ToolConfig } from '../types' -import type { QdrantFetchParams, QdrantResponse } from './types' +import type { QdrantFetchParams, QdrantResponse } from '@/tools/qdrant/types' +import type { ToolConfig } from '@/tools/types' export const fetchPointsTool: ToolConfig = { id: 'qdrant_fetch_points', diff --git a/apps/sim/tools/qdrant/index.ts b/apps/sim/tools/qdrant/index.ts index b991694987..82d59fb2cd 100644 --- a/apps/sim/tools/qdrant/index.ts +++ b/apps/sim/tools/qdrant/index.ts @@ -1,6 +1,6 @@ -import { fetchPointsTool } from './fetch_points' -import { searchVectorTool } from './search_vector' -import { upsertPointsTool } from './upsert_points' +import { fetchPointsTool } from '@/tools/qdrant/fetch_points' +import { searchVectorTool } from '@/tools/qdrant/search_vector' +import { upsertPointsTool } from '@/tools/qdrant/upsert_points' export const qdrantUpsertTool = upsertPointsTool export const qdrantSearchTool = searchVectorTool diff --git a/apps/sim/tools/qdrant/search_vector.ts b/apps/sim/tools/qdrant/search_vector.ts index c05bd44a45..92a8eac8ed 100644 --- a/apps/sim/tools/qdrant/search_vector.ts +++ b/apps/sim/tools/qdrant/search_vector.ts @@ -1,5 +1,5 @@ -import type { ToolConfig } from '../types' -import type { QdrantResponse, QdrantSearchParams } from './types' +import type { QdrantResponse, QdrantSearchParams } from '@/tools/qdrant/types' +import type { ToolConfig } from '@/tools/types' export const searchVectorTool: ToolConfig = { id: 'qdrant_search_vector', diff --git a/apps/sim/tools/qdrant/types.ts b/apps/sim/tools/qdrant/types.ts index f257df985b..0d85466ce5 100644 --- a/apps/sim/tools/qdrant/types.ts +++ b/apps/sim/tools/qdrant/types.ts @@ -1,4 +1,4 @@ -import type { ToolResponse } from '../types' +import type { ToolResponse } from '@/tools/types' export interface QdrantBaseParams { url: string diff --git a/apps/sim/tools/qdrant/upsert_points.ts b/apps/sim/tools/qdrant/upsert_points.ts index df46f183b8..2550707bb5 100644 --- a/apps/sim/tools/qdrant/upsert_points.ts +++ b/apps/sim/tools/qdrant/upsert_points.ts @@ -1,5 +1,5 @@ -import type { ToolConfig } from '../types' -import type { QdrantResponse, QdrantUpsertParams } from './types' +import type { QdrantResponse, QdrantUpsertParams } from '@/tools/qdrant/types' +import type { ToolConfig } from '@/tools/types' export const upsertPointsTool: ToolConfig = { id: 'qdrant_upsert_points', diff --git a/apps/sim/tools/registry.ts b/apps/sim/tools/registry.ts index 3fbf08ba9b..0210c407af 100644 --- a/apps/sim/tools/registry.ts +++ b/apps/sim/tools/registry.ts @@ -30,6 +30,8 @@ import { githubPrTool, githubRepoInfoTool, } from '@/tools/github' +import { gmailDraftTool, gmailReadTool, gmailSearchTool, gmailSendTool } from '@/tools/gmail' +import { searchTool as googleSearchTool } from '@/tools/google' import { googleCalendarCreateTool, googleCalendarGetTool, @@ -126,8 +128,6 @@ import { whatsappSendMessageTool } from '@/tools/whatsapp' import { workflowExecutorTool } from '@/tools/workflow' import { xReadTool, xSearchTool, xUserTool, xWriteTool } from '@/tools/x' import { youtubeSearchTool } from '@/tools/youtube' -import { gmailDraftTool, gmailReadTool, gmailSearchTool, gmailSendTool } from './gmail' -import { searchTool as googleSearchTool } from './google' // Registry of all available tools export const tools: Record = { diff --git a/apps/sim/tools/wealthbox/read_contact.ts b/apps/sim/tools/wealthbox/read_contact.ts index 7d1ceaba0a..8c3ead67d8 100644 --- a/apps/sim/tools/wealthbox/read_contact.ts +++ b/apps/sim/tools/wealthbox/read_contact.ts @@ -1,6 +1,6 @@ import { createLogger } from '@/lib/logs/console/logger' -import type { ToolConfig } from '../types' -import type { WealthboxReadParams, WealthboxReadResponse } from './types' +import type { ToolConfig } from '@/tools/types' +import type { WealthboxReadParams, WealthboxReadResponse } from '@/tools/wealthbox/types' const logger = createLogger('WealthboxReadContact') diff --git a/apps/sim/tools/wealthbox/read_note.ts b/apps/sim/tools/wealthbox/read_note.ts index e6ebb6fc27..a51a9044e0 100644 --- a/apps/sim/tools/wealthbox/read_note.ts +++ b/apps/sim/tools/wealthbox/read_note.ts @@ -1,6 +1,6 @@ import { createLogger } from '@/lib/logs/console/logger' -import type { ToolConfig } from '../types' -import type { WealthboxReadParams, WealthboxReadResponse } from './types' +import type { ToolConfig } from '@/tools/types' +import type { WealthboxReadParams, WealthboxReadResponse } from '@/tools/wealthbox/types' const logger = createLogger('WealthboxReadNote') diff --git a/apps/sim/tools/wealthbox/read_task.ts b/apps/sim/tools/wealthbox/read_task.ts index 8e43d73708..1b850910f1 100644 --- a/apps/sim/tools/wealthbox/read_task.ts +++ b/apps/sim/tools/wealthbox/read_task.ts @@ -1,6 +1,6 @@ import { createLogger } from '@/lib/logs/console/logger' -import type { ToolConfig } from '../types' -import type { WealthboxReadParams, WealthboxReadResponse } from './types' +import type { ToolConfig } from '@/tools/types' +import type { WealthboxReadParams, WealthboxReadResponse } from '@/tools/wealthbox/types' const logger = createLogger('WealthboxReadTask') diff --git a/apps/sim/tools/wealthbox/types.ts b/apps/sim/tools/wealthbox/types.ts index 420bb11ec6..98d7152aab 100644 --- a/apps/sim/tools/wealthbox/types.ts +++ b/apps/sim/tools/wealthbox/types.ts @@ -1,6 +1,5 @@ -import type { ToolResponse } from '../types' +import type { ToolResponse } from '@/tools/types' -// Entity type definitions based on Wealthbox API responses export interface WealthboxNote { id: number creator: number diff --git a/apps/sim/tools/wealthbox/write_contact.ts b/apps/sim/tools/wealthbox/write_contact.ts index 84ca4574e4..9f1d14e8f3 100644 --- a/apps/sim/tools/wealthbox/write_contact.ts +++ b/apps/sim/tools/wealthbox/write_contact.ts @@ -1,6 +1,6 @@ import { createLogger } from '@/lib/logs/console/logger' -import type { ToolConfig } from '../types' -import type { WealthboxWriteParams, WealthboxWriteResponse } from './types' +import type { ToolConfig } from '@/tools/types' +import type { WealthboxWriteParams, WealthboxWriteResponse } from '@/tools/wealthbox/types' const logger = createLogger('WealthboxWriteContact') diff --git a/apps/sim/tools/wealthbox/write_note.ts b/apps/sim/tools/wealthbox/write_note.ts index d0c4aa9bbf..cce0492944 100644 --- a/apps/sim/tools/wealthbox/write_note.ts +++ b/apps/sim/tools/wealthbox/write_note.ts @@ -1,6 +1,6 @@ import { createLogger } from '@/lib/logs/console/logger' -import type { ToolConfig } from '../types' -import type { WealthboxWriteParams, WealthboxWriteResponse } from './types' +import type { ToolConfig } from '@/tools/types' +import type { WealthboxWriteParams, WealthboxWriteResponse } from '@/tools/wealthbox/types' const logger = createLogger('WealthboxWriteNote') diff --git a/apps/sim/tools/wealthbox/write_task.ts b/apps/sim/tools/wealthbox/write_task.ts index bbea3c5634..9b7cc0b48c 100644 --- a/apps/sim/tools/wealthbox/write_task.ts +++ b/apps/sim/tools/wealthbox/write_task.ts @@ -1,6 +1,6 @@ import { createLogger } from '@/lib/logs/console/logger' -import type { ToolConfig } from '../types' -import type { WealthboxWriteParams, WealthboxWriteResponse } from './types' +import type { ToolConfig } from '@/tools/types' +import type { WealthboxWriteParams, WealthboxWriteResponse } from '@/tools/wealthbox/types' const logger = createLogger('WealthboxWriteTask') From 27ef45f71766fc4d6642d0ce46966586d242a841 Mon Sep 17 00:00:00 2001 From: Vikhyath Mondreti Date: Mon, 28 Jul 2025 09:21:59 -0700 Subject: [PATCH 5/5] no immediate acks for ms teams webhook (#805) --- apps/sim/lib/webhooks/utils.ts | 67 +++++++--------------------------- 1 file changed, 14 insertions(+), 53 deletions(-) diff --git a/apps/sim/lib/webhooks/utils.ts b/apps/sim/lib/webhooks/utils.ts index 763d602bc3..f978bb223b 100644 --- a/apps/sim/lib/webhooks/utils.ts +++ b/apps/sim/lib/webhooks/utils.ts @@ -698,7 +698,7 @@ export async function executeWorkflowFromPayload( workflowVariables ) - // Set up logging on the executor + // Set up logging on the executor loggingSession.setupExecutor(executor) // Log workflow execution start time for tracking @@ -1432,45 +1432,6 @@ export async function fetchAndProcessAirtablePayloads( /** * Process webhook verification and authorization */ -/** - * Handle Microsoft Teams webhooks with immediate acknowledgment - */ -async function processMicrosoftTeamsWebhook( - foundWebhook: any, - foundWorkflow: any, - input: any, - executionId: string, - requestId: string -): Promise { - logger.info( - `[${requestId}] Acknowledging Microsoft Teams webhook ${foundWebhook.id} and executing workflow ${foundWorkflow.id} asynchronously (Execution: ${executionId})` - ) - - // Execute workflow asynchronously without waiting for completion - executeWorkflowFromPayload( - foundWorkflow, - input, - executionId, - requestId, - foundWebhook.blockId - ).catch((error) => { - // Log any errors that occur during async execution - logger.error( - `[${requestId}] Error during async workflow execution for webhook ${foundWebhook.id} (Execution: ${executionId})`, - error - ) - }) - - // Return immediate acknowledgment for Microsoft Teams - return NextResponse.json( - { - type: 'message', - text: 'Sim Studio', - }, - { status: 200 } - ) -} - /** * Handle standard webhooks with synchronous execution */ @@ -1494,8 +1455,18 @@ async function processStandardWebhook( ) // Since executeWorkflowFromPayload handles logging and errors internally, - // we just need to return a standard success response for synchronous webhooks. - // Note: The actual result isn't typically returned in the webhook response itself. + // we just need to return a success response for synchronous webhooks. + // Microsoft Teams requires a specific response format. + + if (foundWebhook.provider === 'microsoftteams') { + return NextResponse.json( + { + type: 'message', + text: 'Sim Studio', + }, + { status: 200 } + ) + } return NextResponse.json({ message: 'Webhook processed' }, { status: 200 }) } @@ -1564,17 +1535,7 @@ export async function processWebhook( return new NextResponse('No messages in WhatsApp payload', { status: 200 }) } - // --- Route to appropriate processor based on provider --- - if (foundWebhook.provider === 'microsoftteams') { - return await processMicrosoftTeamsWebhook( - foundWebhook, - foundWorkflow, - input, - executionId, - requestId - ) - } - + // --- Route to standard processor for all providers --- return await processStandardWebhook(foundWebhook, foundWorkflow, input, executionId, requestId) } catch (error: any) { return handleWebhookError(error, foundWebhook, executionId, requestId)