fix(local): add missing deps, fix access patterns, update dockerfiles, updated turborepo (#1895)

* fix(local): add missing deps, fix access patterns, update dockerfiles

* upgrade turborepo
This commit is contained in:
Waleed
2025-11-11 12:01:59 -08:00
committed by GitHub
parent b6139d6f6e
commit 1130befb17
8 changed files with 35 additions and 52 deletions

View File

@@ -26,17 +26,15 @@ interface UsageIndicatorProps {
}
export function UsageIndicator({ onClick }: UsageIndicatorProps) {
const { loadData, getUsage, getSubscriptionStatus, isLoading } = useSubscriptionStore()
const { getUsage, getSubscriptionStatus, isLoading } = useSubscriptionStore()
// Load subscription data on mount
useEffect(() => {
loadData()
}, [loadData])
useSubscriptionStore.getState().loadData()
}, [])
const usage = getUsage()
const subscription = getSubscriptionStatus()
// Show skeleton while loading
if (isLoading) {
return (
<div className={CONTAINER_STYLES} onClick={() => onClick?.()}>
@@ -54,10 +52,8 @@ export function UsageIndicator({ onClick }: UsageIndicatorProps) {
)
}
// Calculate progress percentage (capped at 100)
const progressPercentage = Math.min(usage.percentUsed, 100)
// Determine plan type
const planType = subscription.isEnterprise
? 'enterprise'
: subscription.isTeam
@@ -66,7 +62,6 @@ export function UsageIndicator({ onClick }: UsageIndicatorProps) {
? 'pro'
: 'free'
// Determine badge to show
const billingStatus = useSubscriptionStore.getState().getBillingStatus()
const isBlocked = billingStatus === 'blocked'
const badgeText = isBlocked ? 'Payment Failed' : planType === 'free' ? 'Upgrade' : undefined

View File

@@ -309,18 +309,11 @@ export function useDocumentChunks(
hasMore: false,
})
const [initialLoadDone, setInitialLoadDone] = useState(false)
const [isMounted, setIsMounted] = useState(false)
// Client-side search state
const [searchQuery, setSearchQuery] = useState('')
const [currentPage, setCurrentPage] = useState(urlPage)
// Handle mounting state
useEffect(() => {
setIsMounted(true)
return () => setIsMounted(false)
}, [])
// Sync with URL page changes
useEffect(() => {
setCurrentPage(urlPage)
@@ -331,7 +324,7 @@ export function useDocumentChunks(
if (enableClientSearch) {
const loadAllChunks = useCallback(async () => {
if (!knowledgeBaseId || !documentId || !isMounted) return
if (!knowledgeBaseId || !documentId) return
try {
setIsLoading(true)
@@ -342,7 +335,7 @@ export function useDocumentChunks(
let offset = 0
const limit = 50
while (hasMore && isMounted) {
while (hasMore) {
const response = await fetch(
`/api/knowledge/${knowledgeBaseId}/documents/${documentId}/chunks?limit=${limit}&offset=${offset}`
)
@@ -362,32 +355,24 @@ export function useDocumentChunks(
}
}
if (isMounted) {
setAllChunks(allChunksData)
setChunks(allChunksData) // For compatibility
}
setAllChunks(allChunksData)
setChunks(allChunksData) // For compatibility
} catch (err) {
if (isMounted) {
setError(err instanceof Error ? err.message : 'Failed to load chunks')
logger.error(`Failed to load chunks for document ${documentId}:`, err)
}
setError(err instanceof Error ? err.message : 'Failed to load chunks')
logger.error(`Failed to load chunks for document ${documentId}:`, err)
} finally {
if (isMounted) {
setIsLoading(false)
}
setIsLoading(false)
}
}, [knowledgeBaseId, documentId, isMounted])
}, [knowledgeBaseId, documentId])
// Load chunks on mount
// Load chunks when knowledgeBaseId or documentId changes
useEffect(() => {
if (isMounted) {
loadAllChunks()
}
}, [isMounted, loadAllChunks])
loadAllChunks()
}, [loadAllChunks])
// Client-side filtering with fuzzy search
const filteredChunks = useMemo(() => {
if (!isMounted || !searchQuery.trim()) return allChunks
if (!searchQuery.trim()) return allChunks
const fuse = new Fuse(allChunks, {
keys: ['content'],
@@ -400,7 +385,7 @@ export function useDocumentChunks(
const results = fuse.search(searchQuery)
return results.map((result) => result.item)
}, [allChunks, searchQuery, isMounted])
}, [allChunks, searchQuery])
// Client-side pagination
const CHUNKS_PER_PAGE = 50

View File

@@ -2,7 +2,6 @@ import { createCipheriv, createDecipheriv, randomBytes } from 'crypto'
import { db } from '@sim/db'
import { apiKey as apiKeyTable } from '@sim/db/schema'
import { and, eq } from 'drizzle-orm'
import { nanoid } from 'nanoid'
import { authenticateApiKey } from '@/lib/api-key/auth'
import { env } from '@/lib/env'
import { createLogger } from '@/lib/logs/console/logger'
@@ -266,7 +265,7 @@ export async function decryptApiKey(encryptedValue: string): Promise<{ decrypted
* @returns A new API key string
*/
export function generateApiKey(): string {
return `sim_${nanoid(32)}`
return `sim_${randomBytes(24).toString('base64url')}`
}
/**
@@ -274,7 +273,7 @@ export function generateApiKey(): string {
* @returns A new encrypted API key string
*/
export function generateEncryptedApiKey(): string {
return `sk-sim-${nanoid(32)}`
return `sk-sim-${randomBytes(24).toString('base64url')}`
}
/**

View File

@@ -88,6 +88,7 @@
"lucide-react": "^0.479.0",
"mammoth": "^1.9.0",
"mysql2": "3.14.3",
"nanoid": "^3.3.7",
"next": "^15.4.1",
"next-mdx-remote": "^5.0.0",
"next-runtime-env": "3.3.0",

View File

@@ -22,7 +22,7 @@
"drizzle-kit": "^0.31.4",
"husky": "9.1.7",
"lint-staged": "16.0.0",
"turbo": "2.6.0",
"turbo": "2.6.1",
},
},
"apps/docs": {
@@ -125,6 +125,7 @@
"lucide-react": "^0.479.0",
"mammoth": "^1.9.0",
"mysql2": "3.14.3",
"nanoid": "^3.3.7",
"next": "^15.4.1",
"next-mdx-remote": "^5.0.0",
"next-runtime-env": "3.3.0",
@@ -3005,19 +3006,19 @@
"tsyringe": ["tsyringe@4.10.0", "", { "dependencies": { "tslib": "^1.9.3" } }, "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw=="],
"turbo": ["turbo@2.6.0", "", { "optionalDependencies": { "turbo-darwin-64": "2.6.0", "turbo-darwin-arm64": "2.6.0", "turbo-linux-64": "2.6.0", "turbo-linux-arm64": "2.6.0", "turbo-windows-64": "2.6.0", "turbo-windows-arm64": "2.6.0" }, "bin": { "turbo": "bin/turbo" } }, "sha512-kC5VJqOXo50k0/0jnJDDjibLAXalqT9j7PQ56so0pN+81VR4Fwb2QgIE9dTzT3phqOTQuEXkPh3sCpnv5Isz2g=="],
"turbo": ["turbo@2.6.1", "", { "optionalDependencies": { "turbo-darwin-64": "2.6.1", "turbo-darwin-arm64": "2.6.1", "turbo-linux-64": "2.6.1", "turbo-linux-arm64": "2.6.1", "turbo-windows-64": "2.6.1", "turbo-windows-arm64": "2.6.1" }, "bin": { "turbo": "bin/turbo" } }, "sha512-qBwXXuDT3rA53kbNafGbT5r++BrhRgx3sAo0cHoDAeG9g1ItTmUMgltz3Hy7Hazy1ODqNpR+C7QwqL6DYB52yA=="],
"turbo-darwin-64": ["turbo-darwin-64@2.6.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-6vHnLAubHj8Ib45Knu+oY0ZVCLO7WcibzAvt5b1E72YHqAs4y8meMAGMZM0jLqWPh/9maHDc16/qBCMxtW4pXg=="],
"turbo-darwin-64": ["turbo-darwin-64@2.6.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-Dm0HwhyZF4J0uLqkhUyCVJvKM9Rw7M03v3J9A7drHDQW0qAbIGBrUijQ8g4Q9Cciw/BXRRd8Uzkc3oue+qn+ZQ=="],
"turbo-darwin-arm64": ["turbo-darwin-arm64@2.6.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-IU+gWMEXNBw8H0pxvE7nPEa5p6yahxbN8g/Q4Bf0AHymsAFqsScgV0peeNbWybdmY9jk1LPbALOsF2kY1I7ZiQ=="],
"turbo-darwin-arm64": ["turbo-darwin-arm64@2.6.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-U0PIPTPyxdLsrC3jN7jaJUwgzX5sVUBsKLO7+6AL+OASaa1NbT1pPdiZoTkblBAALLP76FM0LlnsVQOnmjYhyw=="],
"turbo-linux-64": ["turbo-linux-64@2.6.0", "", { "os": "linux", "cpu": "x64" }, "sha512-CKoiJ2ZFJLCDsWdRlZg+ew1BkGn8iCEGdePhISVpjsGwkJwSVhVu49z2zKdBeL1IhcSKS2YALwp9ellNZANJxw=="],
"turbo-linux-64": ["turbo-linux-64@2.6.1", "", { "os": "linux", "cpu": "x64" }, "sha512-eM1uLWgzv89bxlK29qwQEr9xYWBhmO/EGiH22UGfq+uXr+QW1OvNKKMogSN65Ry8lElMH4LZh0aX2DEc7eC0Mw=="],
"turbo-linux-arm64": ["turbo-linux-arm64@2.6.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-WroVCdCvJbrhNxNdw7XB7wHAfPPJPV+IXY+ZKNed+9VdfBu/2mQNfKnvqTuFTH7n+Pdpv8to9qwhXRTJe26upg=="],
"turbo-linux-arm64": ["turbo-linux-arm64@2.6.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-MFFh7AxAQAycXKuZDrbeutfWM5Ep0CEZ9u7zs4Hn2FvOViTCzIfEhmuJou3/a5+q5VX1zTxQrKGy+4Lf5cdpsA=="],
"turbo-windows-64": ["turbo-windows-64@2.6.0", "", { "os": "win32", "cpu": "x64" }, "sha512-7pZo5aGQPR+A7RMtWCZHusarJ6y15LQ+o3jOmpMxTic/W6Bad+jSeqo07TWNIseIWjCVzrSv27+0odiYRYtQdA=="],
"turbo-windows-64": ["turbo-windows-64@2.6.1", "", { "os": "win32", "cpu": "x64" }, "sha512-buq7/VAN7KOjMYi4tSZT5m+jpqyhbRU2EUTTvp6V0Ii8dAkY2tAAjQN1q5q2ByflYWKecbQNTqxmVploE0LVwQ=="],
"turbo-windows-arm64": ["turbo-windows-arm64@2.6.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1Ty+NwIksQY7AtFUCPrTpcKQE7zmd/f7aRjdT+qkqGFQjIjFYctEtN7qo4vpQPBgCfS1U3ka83A2u/9CfJQ3wQ=="],
"turbo-windows-arm64": ["turbo-windows-arm64@2.6.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-7w+AD5vJp3R+FB0YOj1YJcNcOOvBior7bcHTodqp90S3x3bLgpr7tE6xOea1e8JkP7GK6ciKVUpQvV7psiwU5Q=="],
"twilio": ["twilio@5.9.0", "", { "dependencies": { "axios": "^1.11.0", "dayjs": "^1.11.9", "https-proxy-agent": "^5.0.0", "jsonwebtoken": "^9.0.2", "qs": "^6.9.4", "scmp": "^2.1.0", "xmlbuilder": "^13.0.2" } }, "sha512-Ij+xT9MZZSjP64lsy+x6vYsCCb5m2Db9KffkMXBrN3zWbG3rbkXxl+MZVVzrvpwEdSbQD0vMuin+TTlQ6kR6Xg=="],

View File

@@ -13,9 +13,10 @@ WORKDIR /app
# Install turbo globally
RUN bun install -g turbo
COPY package.json bun.lock ./
RUN mkdir -p apps
COPY package.json bun.lock turbo.json ./
RUN mkdir -p apps packages/db
COPY apps/sim/package.json ./apps/sim/package.json
COPY packages/db/package.json ./packages/db/package.json
RUN bun install --omit dev --ignore-scripts

View File

@@ -13,9 +13,10 @@ WORKDIR /app
# Install turbo globally
RUN bun install -g turbo
COPY package.json bun.lock ./
RUN mkdir -p apps
COPY package.json bun.lock turbo.json ./
RUN mkdir -p apps packages/db
COPY apps/sim/package.json ./apps/sim/package.json
COPY packages/db/package.json ./packages/db/package.json
RUN bun install --omit dev --ignore-scripts

View File

@@ -52,7 +52,7 @@
"drizzle-kit": "^0.31.4",
"husky": "9.1.7",
"lint-staged": "16.0.0",
"turbo": "2.6.0"
"turbo": "2.6.1"
},
"lint-staged": {
"*.{js,jsx,ts,tsx,json,css,scss}": [