Skip to content

Commit a54fcbc

Browse files
authored
improvement(auth): added ability to inject secrets to kubernetes, server-side ff to disable email registration (#2728)
* improvement(auth): added ability to inject secrets to kubernetes, server-side ff to disable email registration * consolidated telemetry events * comments cleanup * ack PR comment * refactor to use createEnvMock helper instead of local mocks
1 parent 05904a7 commit a54fcbc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1632
-251
lines changed

apps/sim/app/api/chat/route.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,18 @@ export async function POST(request: NextRequest) {
212212

213213
logger.info(`Chat "${title}" deployed successfully at ${chatUrl}`)
214214

215+
try {
216+
const { PlatformEvents } = await import('@/lib/core/telemetry')
217+
PlatformEvents.chatDeployed({
218+
chatId: id,
219+
workflowId,
220+
authType,
221+
hasOutputConfigs: outputConfigs.length > 0,
222+
})
223+
} catch (_e) {
224+
// Silently fail
225+
}
226+
215227
return createSuccessResponse({
216228
id,
217229
chatUrl,

apps/sim/app/api/knowledge/[id]/documents/route.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,14 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
198198
`[${requestId}] Starting controlled async processing of ${createdDocuments.length} documents`
199199
)
200200

201-
// Track bulk document upload
202201
try {
203-
const { trackPlatformEvent } = await import('@/lib/core/telemetry')
204-
trackPlatformEvent('platform.knowledge_base.documents_uploaded', {
205-
'knowledge_base.id': knowledgeBaseId,
206-
'documents.count': createdDocuments.length,
207-
'documents.upload_type': 'bulk',
208-
'processing.chunk_size': validatedData.processingOptions.chunkSize,
209-
'processing.recipe': validatedData.processingOptions.recipe,
202+
const { PlatformEvents } = await import('@/lib/core/telemetry')
203+
PlatformEvents.knowledgeBaseDocumentsUploaded({
204+
knowledgeBaseId,
205+
documentsCount: createdDocuments.length,
206+
uploadType: 'bulk',
207+
chunkSize: validatedData.processingOptions.chunkSize,
208+
recipe: validatedData.processingOptions.recipe,
210209
})
211210
} catch (_e) {
212211
// Silently fail
@@ -262,15 +261,14 @@ export async function POST(req: NextRequest, { params }: { params: Promise<{ id:
262261
userId
263262
)
264263

265-
// Track single document upload
266264
try {
267-
const { trackPlatformEvent } = await import('@/lib/core/telemetry')
268-
trackPlatformEvent('platform.knowledge_base.documents_uploaded', {
269-
'knowledge_base.id': knowledgeBaseId,
270-
'documents.count': 1,
271-
'documents.upload_type': 'single',
272-
'document.mime_type': validatedData.mimeType,
273-
'document.file_size': validatedData.fileSize,
265+
const { PlatformEvents } = await import('@/lib/core/telemetry')
266+
PlatformEvents.knowledgeBaseDocumentsUploaded({
267+
knowledgeBaseId,
268+
documentsCount: 1,
269+
uploadType: 'single',
270+
mimeType: validatedData.mimeType,
271+
fileSize: validatedData.fileSize,
274272
})
275273
} catch (_e) {
276274
// Silently fail

apps/sim/app/api/knowledge/[id]/route.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { createLogger } from '@sim/logger'
22
import { type NextRequest, NextResponse } from 'next/server'
33
import { z } from 'zod'
44
import { getSession } from '@/lib/auth'
5+
import { PlatformEvents } from '@/lib/core/telemetry'
56
import { generateRequestId } from '@/lib/core/utils/request'
67
import {
78
deleteKnowledgeBase,
@@ -183,6 +184,14 @@ export async function DELETE(
183184

184185
await deleteKnowledgeBase(id, requestId)
185186

187+
try {
188+
PlatformEvents.knowledgeBaseDeleted({
189+
knowledgeBaseId: id,
190+
})
191+
} catch {
192+
// Telemetry should not fail the operation
193+
}
194+
186195
logger.info(`[${requestId}] Knowledge base deleted: ${id} for user ${session.user.id}`)
187196

188197
return NextResponse.json({

apps/sim/app/api/knowledge/route.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { createLogger } from '@sim/logger'
22
import { type NextRequest, NextResponse } from 'next/server'
33
import { z } from 'zod'
44
import { getSession } from '@/lib/auth'
5+
import { PlatformEvents } from '@/lib/core/telemetry'
56
import { generateRequestId } from '@/lib/core/utils/request'
67
import { createKnowledgeBase, getKnowledgeBases } from '@/lib/knowledge/service'
78

@@ -94,6 +95,16 @@ export async function POST(req: NextRequest) {
9495

9596
const newKnowledgeBase = await createKnowledgeBase(createData, requestId)
9697

98+
try {
99+
PlatformEvents.knowledgeBaseCreated({
100+
knowledgeBaseId: newKnowledgeBase.id,
101+
name: validatedData.name,
102+
workspaceId: validatedData.workspaceId,
103+
})
104+
} catch {
105+
// Telemetry should not fail the operation
106+
}
107+
97108
logger.info(
98109
`[${requestId}] Knowledge base created: ${newKnowledgeBase.id} for user ${session.user.id}`
99110
)

apps/sim/app/api/knowledge/search/route.test.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*
66
* @vitest-environment node
77
*/
8+
import { createEnvMock } from '@sim/testing'
89
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
910
import {
1011
createMockRequest,
@@ -26,13 +27,7 @@ vi.mock('drizzle-orm', () => ({
2627

2728
mockKnowledgeSchemas()
2829

29-
vi.mock('@/lib/core/config/env', () => ({
30-
env: {
31-
OPENAI_API_KEY: 'test-api-key',
32-
},
33-
isTruthy: (value: string | boolean | number | undefined) =>
34-
typeof value === 'string' ? value === 'true' || value === '1' : Boolean(value),
35-
}))
30+
vi.mock('@/lib/core/config/env', () => createEnvMock({ OPENAI_API_KEY: 'test-api-key' }))
3631

3732
vi.mock('@/lib/core/utils/request', () => ({
3833
generateRequestId: vi.fn(() => 'test-request-id'),

apps/sim/app/api/knowledge/search/route.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { createLogger } from '@sim/logger'
22
import { type NextRequest, NextResponse } from 'next/server'
33
import { z } from 'zod'
4+
import { PlatformEvents } from '@/lib/core/telemetry'
45
import { generateRequestId } from '@/lib/core/utils/request'
56
import { ALL_TAG_SLOTS } from '@/lib/knowledge/constants'
67
import { getDocumentTagDefinitions } from '@/lib/knowledge/tags/service'
@@ -294,6 +295,16 @@ export async function POST(request: NextRequest) {
294295
const documentIds = results.map((result) => result.documentId)
295296
const documentNameMap = await getDocumentNamesByIds(documentIds)
296297

298+
try {
299+
PlatformEvents.knowledgeBaseSearched({
300+
knowledgeBaseId: accessibleKbIds[0],
301+
resultsCount: results.length,
302+
workspaceId: workspaceId || undefined,
303+
})
304+
} catch {
305+
// Telemetry should not fail the operation
306+
}
307+
297308
return NextResponse.json({
298309
success: true,
299310
data: {

apps/sim/app/api/knowledge/search/utils.test.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*
55
* @vitest-environment node
66
*/
7+
import { createEnvMock } from '@sim/testing'
78
import { beforeEach, describe, expect, it, vi } from 'vitest'
89

910
vi.mock('drizzle-orm')
@@ -30,12 +31,7 @@ vi.stubGlobal(
3031
})
3132
)
3233

33-
vi.mock('@/lib/core/config/env', () => ({
34-
env: {},
35-
getEnv: (key: string) => process.env[key],
36-
isTruthy: (value: string | boolean | number | undefined) =>
37-
typeof value === 'string' ? value === 'true' || value === '1' : Boolean(value),
38-
}))
34+
vi.mock('@/lib/core/config/env', () => createEnvMock())
3935

4036
import {
4137
generateSearchEmbedding,

apps/sim/app/api/knowledge/utils.test.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* This file contains unit tests for the knowledge base utility functions,
77
* including access checks, document processing, and embedding generation.
88
*/
9+
import { createEnvMock } from '@sim/testing'
910
import { beforeEach, describe, expect, it, vi } from 'vitest'
1011

1112
vi.mock('drizzle-orm', () => ({
@@ -15,12 +16,7 @@ vi.mock('drizzle-orm', () => ({
1516
sql: (strings: TemplateStringsArray, ...expr: any[]) => ({ strings, expr }),
1617
}))
1718

18-
vi.mock('@/lib/core/config/env', () => ({
19-
env: { OPENAI_API_KEY: 'test-key' },
20-
getEnv: (key: string) => process.env[key],
21-
isTruthy: (value: string | boolean | number | undefined) =>
22-
typeof value === 'string' ? value === 'true' || value === '1' : Boolean(value),
23-
}))
19+
vi.mock('@/lib/core/config/env', () => createEnvMock({ OPENAI_API_KEY: 'test-key' }))
2420

2521
vi.mock('@/lib/knowledge/documents/utils', () => ({
2622
retryWithExponentialBackoff: (fn: any) => fn(),

apps/sim/app/api/mcp/servers/route.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,12 @@ export const POST = withMcpAuth('write')(
140140
)
141141

142142
try {
143-
const { trackPlatformEvent } = await import('@/lib/core/telemetry')
144-
trackPlatformEvent('platform.mcp.server_added', {
145-
'mcp.server_id': serverId,
146-
'mcp.server_name': body.name,
147-
'mcp.transport': body.transport,
148-
'workspace.id': workspaceId,
143+
const { PlatformEvents } = await import('@/lib/core/telemetry')
144+
PlatformEvents.mcpServerAdded({
145+
serverId,
146+
serverName: body.name,
147+
transport: body.transport,
148+
workspaceId,
149149
})
150150
} catch (_e) {
151151
// Silently fail

apps/sim/app/api/mcp/tools/execute/route.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,12 @@ export const POST = withMcpAuth('read')(
194194
logger.info(`[${requestId}] Successfully executed tool ${toolName} on server ${serverId}`)
195195

196196
try {
197-
const { trackPlatformEvent } = await import('@/lib/core/telemetry')
198-
trackPlatformEvent('platform.mcp.tool_executed', {
199-
'mcp.server_id': serverId,
200-
'mcp.tool_name': toolName,
201-
'mcp.execution_status': 'success',
202-
'workspace.id': workspaceId,
197+
const { PlatformEvents } = await import('@/lib/core/telemetry')
198+
PlatformEvents.mcpToolExecuted({
199+
serverId,
200+
toolName,
201+
status: 'success',
202+
workspaceId,
203203
})
204204
} catch {
205205
// Telemetry failure is non-critical

0 commit comments

Comments
 (0)