Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 3 additions & 7 deletions apps/sim/app/api/chat/edit/[id]/route.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@ import { and, eq } from 'drizzle-orm'
import type { NextRequest } from 'next/server'
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 { getBaseDomain } from '@/lib/urls/utils'
import { encryptSecret } from '@/lib/utils'
Expand DownExpand Up@@ -71,9 +71,7 @@ export async function GET(_request: NextRequest, { params }: { params: Promise<{
// Create a new result object without the password
const { password, ...safeData } = chatInstance[0]

const isDevelopment = env.NODE_ENV === 'development'

const chatUrl = isDevelopment
const chatUrl = isDev
? `http://${chatInstance[0].subdomain}.${getBaseDomain()}`
: `https://${chatInstance[0].subdomain}.simstudio.ai`

Expand DownExpand Up@@ -221,9 +219,7 @@ export async function PATCH(request: NextRequest, { params }: { params: Promise<

const updatedSubdomain = subdomain || existingChat[0].subdomain

const isDevelopment = env.NODE_ENV === 'development'

const chatUrl = isDevelopment
const chatUrl = isDev
? `http://${updatedSubdomain}.${getBaseDomain()}`
: `https://${updatedSubdomain}.simstudio.ai`

Expand Down
4 changes: 2 additions & 2 deletions apps/sim/app/api/chat/route.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,6 +4,7 @@ import { v4 as uuidv4 } from 'uuid'
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 { encryptSecret } from '@/lib/utils'
import { createErrorResponse, createSuccessResponse } from '@/app/api/workflows/utils'
Expand DownExpand Up@@ -169,11 +170,10 @@ export async function POST(request: NextRequest) {

// Return successful response with chat URL
// Check if we're in development or production
const isDevelopment = env.NODE_ENV === 'development'
const baseUrl = env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000'

let chatUrl: string
if (isDevelopment) {
if (isDev) {
try {
const url = new URL(baseUrl)
chatUrl = `${url.protocol}//${subdomain}.${url.host}`
Expand Down
9 changes: 4 additions & 5 deletions apps/sim/app/api/chat/utils.ts
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
import { eq, sql } from 'drizzle-orm'
import { type NextRequest, NextResponse } from 'next/server'
import { v4 as uuidv4 } from 'uuid'
import { env } from '@/lib/env'
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'
Expand All@@ -20,7 +20,6 @@ declare global {
}

const logger = createLogger('ChatAuthUtils')
const isDevelopment = env.NODE_ENV === 'development'

export const encryptAuthToken = (subdomainId: string, type: string): string => {
return Buffer.from(`${subdomainId}:${type}:${Date.now()}`).toString('base64')
Expand DownExpand Up@@ -63,11 +62,11 @@ export const setChatAuthCookie = (
name: `chat_auth_${subdomainId}`,
value: token,
httpOnly: true,
secure: !isDevelopment,
secure: !isDev,
sameSite: 'lax',
path: '/',
// Using subdomain for the domain in production
domain: isDevelopment ? undefined : '.simstudio.ai',
domain: isDev ? undefined : '.simstudio.ai',
maxAge: 60 * 60 * 24, // 24 hours
})
}
Expand All@@ -78,7 +77,7 @@ export function addCorsHeaders(response: NextResponse, request: NextRequest) {
const origin = request.headers.get('origin') || ''

// In development, allow any localhost subdomain
if (isDevelopment && origin.includes('localhost')) {
if (isDev && origin.includes('localhost')) {
response.headers.set('Access-Control-Allow-Origin', origin)
response.headers.set('Access-Control-Allow-Credentials', 'true')
response.headers.set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/app/api/files/delete/route.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,7 +18,7 @@ import {
isBlobPath,
isCloudPath,
isS3Path,
} from '../utils'
} from '@/app/api/files/utils'

export const dynamic = 'force-dynamic'

Expand Down
8 changes: 4 additions & 4 deletions apps/sim/app/api/files/parse/route.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -447,7 +447,7 @@ async function handleCsvBuffer(
logger.info(`Parsing CSV in memory: ${filename}`)

// Use the parseBuffer function from our library
const { parseBuffer } = await import('../../../../lib/file-parsers')
const { parseBuffer } = await import('@/lib/file-parsers')
const result = await parseBuffer(fileBuffer, 'csv')

return {
Expand DownExpand Up@@ -492,7 +492,7 @@ async function handleGenericTextBuffer(

// Try to use a specialized parser if available
try {
const { parseBuffer, isSupportedFileType } = await import('../../../../lib/file-parsers')
const { parseBuffer, isSupportedFileType } = await import('@/lib/file-parsers')

if (isSupportedFileType(extension)) {
const result = await parseBuffer(fileBuffer, extension)
Expand DownExpand Up@@ -578,7 +578,7 @@ async function parseBufferAsPdf(buffer: Buffer) {
// Import parsers dynamically to avoid initialization issues in tests
// First try to use the main PDF parser
try {
const { PdfParser } = await import('../../../../lib/file-parsers/pdf-parser')
const { PdfParser } = await import('@/lib/file-parsers/pdf-parser')
const parser = new PdfParser()
logger.info('Using main PDF parser for buffer')

Expand All@@ -589,7 +589,7 @@ async function parseBufferAsPdf(buffer: Buffer) {
} catch (error) {
// Fallback to raw PDF parser
logger.warn('Main PDF parser failed, using raw parser for buffer:', error)
const { RawPdfParser } = await import('../../../../lib/file-parsers/raw-pdf-parser')
const { RawPdfParser } = await import('@/lib/file-parsers/raw-pdf-parser')
const rawParser = new RawPdfParser()

return await rawParser.parseBuffer(buffer)
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/app/api/files/presigned/route.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@ import { getStorageProvider, isUsingCloudStorage } from '@/lib/uploads'
import { getBlobServiceClient } from '@/lib/uploads/blob/blob-client'
import { getS3Client, sanitizeFilenameForMetadata } from '@/lib/uploads/s3/s3-client'
import { BLOB_CONFIG, BLOB_KB_CONFIG, S3_CONFIG, S3_KB_CONFIG } from '@/lib/uploads/setup'
import { createErrorResponse, createOptionsResponse } from '../utils'
import { createErrorResponse, createOptionsResponse } from '@/app/api/files/utils'

const logger = createLogger('PresignedUploadAPI')

Expand Down
2 changes: 1 addition & 1 deletion apps/sim/app/api/files/serve/[...path]/route.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,7 @@ import {
FileNotFoundError,
findLocalFile,
getContentType,
} from '../../utils'
} from '@/app/api/files/utils'

export const dynamic = 'force-dynamic'

Expand Down
5 changes: 3 additions & 2 deletions apps/sim/app/api/organizations/[id]/invitations/route.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -13,6 +13,7 @@ import {
} from '@/lib/billing/validation/seat-management'
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 { hasWorkspaceAdminAccess } from '@/lib/permissions/utils'
import { db } from '@/db'
Expand DownExpand Up@@ -344,7 +345,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
organizationEntry[0]?.name || 'organization',
role,
workspaceInvitationsWithNames,
`${process.env.NEXT_PUBLIC_BASE_URL}/api/organizations/invitations/accept?id=${orgInvitation.id}`
`${env.NEXT_PUBLIC_APP_URL}/api/organizations/invitations/accept?id=${orgInvitation.id}`
)

emailResult = await sendEmail({
Expand All@@ -357,7 +358,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
const emailHtml = await renderInvitationEmail(
inviter[0]?.name || 'Someone',
organizationEntry[0]?.name || 'organization',
`${process.env.NEXT_PUBLIC_BASE_URL}/api/organizations/invitations/accept?id=${orgInvitation.id}`,
`${env.NEXT_PUBLIC_APP_URL}/api/organizations/invitations/accept?id=${orgInvitation.id}`,
email
)

Expand Down
3 changes: 2 additions & 1 deletion apps/sim/app/api/organizations/[id]/members/route.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -6,6 +6,7 @@ import { getSession } from '@/lib/auth'
import { validateSeatAvailability } from '@/lib/billing/validation/seat-management'
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 { db } from '@/db'
import { invitation, member, organization, user, userStats } from '@/db/schema'
Expand DownExpand Up@@ -246,7 +247,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
const emailHtml = await renderInvitationEmail(
inviter[0]?.name || 'Someone',
organizationEntry[0]?.name || 'organization',
`${process.env.NEXT_PUBLIC_BASE_URL}/api/organizations/invitations/accept?id=${invitationId}`,
`${env.NEXT_PUBLIC_APP_URL}/api/organizations/invitations/accept?id=${invitationId}`,
normalizedEmail
)

Expand Down
5 changes: 3 additions & 2 deletions apps/sim/app/api/proxy/route.ts
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
import { NextResponse } from 'next/server'
import { isDev } from '@/lib/environment'
import { createLogger } from '@/lib/logs/console-logger'
import { executeTool } from '@/tools'
import { getTool, validateToolRequest } from '@/tools/utils'
Expand DownExpand Up@@ -51,14 +52,14 @@ const createErrorResponse = (error: any, status = 500, additionalData = {}) => {
logger.error('Creating error response', {
errorMessage,
status,
stack: process.env.NODE_ENV === 'development' ? errorStack : undefined,
stack: isDev ? errorStack : undefined,
})

return formatResponse(
{
success: false,
error: errorMessage,
stack: process.env.NODE_ENV === 'development' ? errorStack : undefined,
stack: isDev ? errorStack : undefined,
...additionalData,
},
status
Expand Down
3 changes: 2 additions & 1 deletion apps/sim/app/api/telemetry/route.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { type NextRequest, NextResponse } from 'next/server'
import { env } from '@/lib/env'
import { isProd } from '@/lib/environment'
import { createLogger } from '@/lib/logs/console-logger'

const logger = createLogger('TelemetryAPI')
Expand DownExpand Up@@ -101,7 +102,7 @@ async function forwardToCollector(data: any): Promise<boolean> {
},
{
key: 'deployment.environment',
value: { stringValue: env.NODE_ENV || 'production' },
value: { stringValue: isProd ? 'production' : 'development' },
},
]

Expand Down
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,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 { saveWorkflowToNormalizedTables } from '@/lib/workflows/db-helpers'
import { db } from '@/db'
Expand DownExpand Up@@ -88,7 +89,7 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{

// Notify socket server about the revert operation for real-time sync
try {
const socketServerUrl = process.env.SOCKET_SERVER_URL || 'http://localhost:3002'
const socketServerUrl = env.SOCKET_SERVER_URL || 'http://localhost:3002'
await fetch(`${socketServerUrl}/api/workflow-reverted`, {
method: 'POST',
headers: {
Expand Down
9 changes: 4 additions & 5 deletions apps/sim/app/telemetry-consent-dialog.tsx
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,7 @@ import {
AlertDialogTitle,
} from '@/components/ui/alert-dialog'
import { Button } from '@/components/ui/button'
import { getNodeEnv } from '@/lib/environment'
import { isDev } from '@/lib/environment'
import { createLogger } from '@/lib/logs/console-logger'
import { useGeneralStore } from '@/stores/settings/general/store'

Expand DownExpand Up@@ -50,7 +50,6 @@ export function TelemetryConsentDialog() {
const loadSettings = useGeneralStore((state) => state.loadSettings)

const hasShownDialogThisSession = useRef(false)
const isDevelopment = getNodeEnv() === 'development'

const isChatSubdomainOrPath =
typeof window !== 'undefined' &&
Expand DownExpand Up@@ -116,7 +115,7 @@ export function TelemetryConsentDialog() {
telemetryNotifiedUser,
telemetryEnabled,
hasShownInSession: hasShownDialogThisSession.current,
environment: getNodeEnv(),
environment: isDev,
})

const localStorageNotified =
Expand All@@ -134,11 +133,11 @@ export function TelemetryConsentDialog() {
!localStorageNotified &&
telemetryEnabled &&
!hasShownDialogThisSession.current &&
isDevelopment
isDev
) {
setOpen(true)
hasShownDialogThisSession.current = true
} else if (settingsLoaded && !telemetryNotifiedUser && !isDevelopment) {
} else if (settingsLoaded && !telemetryNotifiedUser && !isDev) {
// Auto-notify in non-development environments
setTelemetryNotifiedUser(true)
if (typeof window !== 'undefined') {
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -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 { env } from '@/lib/env'
import { isDev } from '@/lib/environment'
import { createLogger } from '@/lib/logs/console-logger'
import { getBaseDomain } from '@/lib/urls/utils'
import { cn } from '@/lib/utils'
Expand All@@ -55,7 +55,7 @@ interface ChatDeployProps {
type AuthType = 'public' | 'password' | 'email'

const getDomainSuffix = (() => {
const suffix = env.NODE_ENV === 'development' ? `.${getBaseDomain()}` : '.simstudio.ai'
const suffix = isDev ? `.${getBaseDomain()}` : '.simstudio.ai'
return () => suffix
})()

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,7 +7,7 @@ import { useParams, usePathname, useRouter } from 'next/navigation'
import { Skeleton } from '@/components/ui/skeleton'
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip'
import { useSession } from '@/lib/auth-client'
import { env } from '@/lib/env'
import { isDev } from '@/lib/environment'
import { createLogger } from '@/lib/logs/console-logger'
import {
getKeyboardShortcutText,
Expand All@@ -28,8 +28,6 @@ import { WorkspaceHeader } from './components/workspace-header/workspace-header'

const logger = createLogger('Sidebar')

const IS_DEV = env.NODE_ENV === 'development'

export function Sidebar() {
useGlobalShortcuts()

Expand DownExpand Up@@ -239,7 +237,7 @@ export function Sidebar() {
{isCollapsed ? (
<div className='flex-shrink-0 px-3 pt-1 pb-3'>
<div className='flex flex-col space-y-[1px]'>
{!IS_DEV && (
{!isDev && (
<Tooltip>
<TooltipTrigger asChild>
<div
Expand DownExpand Up@@ -286,7 +284,7 @@ export function Sidebar() {
</div>
) : (
<>
{!IS_DEV && (
{!isDev && (
<div className='flex-shrink-0 px-3 pt-1'>
<Tooltip>
<TooltipTrigger asChild>
Expand DownExpand Up@@ -343,7 +341,7 @@ export function Sidebar() {
{/* Modals */}
<SettingsModal open={showSettings} onOpenChange={setShowSettings} />
<HelpModal open={showHelp} onOpenChange={setShowHelp} />
{!IS_DEV && <InviteModal open={showInviteMembers} onOpenChange={setShowInviteMembers} />}
{!isDev && <InviteModal open={showInviteMembers} onOpenChange={setShowInviteMembers} />}
</aside>
)
}
4 changes: 2 additions & 2 deletions apps/sim/blocks/blocks/file.ts
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
import { DocumentIcon } from '@/components/icons'
import { env } from '@/lib/env'
import { isProd } from '@/lib/environment'
import { createLogger } from '@/lib/logs/console-logger'
import type { FileParserOutput } from '@/tools/file/types'
import type { BlockConfig, SubBlockConfig, SubBlockLayout, SubBlockType } from '../types'

const logger = createLogger('FileBlock')

const shouldEnableURLInput = env.NODE_ENV === 'production'
const shouldEnableURLInput = isProd

const inputMethodBlock: SubBlockConfig = {
id: 'inputMethod',
Expand Down
4 changes: 2 additions & 2 deletions apps/sim/blocks/blocks/mistral_parse.ts
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
import { MistralIcon } from '@/components/icons'
import { env } from '@/lib/env'
import { isProd } from '@/lib/environment'
import type { MistralParserOutput } from '@/tools/mistral/types'
import type { BlockConfig, SubBlockConfig, SubBlockLayout, SubBlockType } from '../types'

const shouldEnableFileUpload = env.NODE_ENV === 'production'
const shouldEnableFileUpload = isProd

const inputMethodBlock: SubBlockConfig = {
id: 'inputMethod',
Expand Down
3 changes: 2 additions & 1 deletion apps/sim/db/index.ts
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,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'

// In production, use the Vercel-generated POSTGRES_URL
Expand DownExpand Up@@ -38,4 +39,4 @@ declare global {
}

export const db = global.database || drizzleClient
if (env.NODE_ENV !== 'production') global.database = db
if (isDev) global.database = db
Loading