ruvector/studio/lib/upload.ts
rUv 814f595995 feat(studio): Add complete RuVector Studio application
Major additions:
- Complete Next.js studio application with 1600+ components
- Docker support (Dockerfile.combined, docker-compose.yml)
- GCP deployment documentation and benchmarks
- SQL benchmark scripts for performance testing
- Sentry integration for monitoring
- Comprehensive test suite and mocks

Studio features:
- Dashboard and admin interfaces
- Data visualization components
- Authentication and user management
- API integration with RuVector backend
- Static data and public assets

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-06 23:04:48 +00:00

45 lines
1.2 KiB
TypeScript

import { createClient } from '@supabase/supabase-js'
const SUPPORT_API_URL = process.env.NEXT_PUBLIC_SUPPORT_API_URL || ''
const SUPPORT_API_KEY = process.env.NEXT_PUBLIC_SUPPORT_ANON_KEY || ''
// [Joshen TODO] Feedback form and support attachments should use this
export const uploadAttachment = async (
bucket: string,
fileName: string,
image: File,
getUrl: boolean = true
) => {
const supabaseClient = createClient(SUPPORT_API_URL, SUPPORT_API_KEY, {
auth: {
persistSession: false,
autoRefreshToken: false,
// @ts-ignore
multiTab: false,
detectSessionInUrl: false,
localStorage: {
getItem: (key: string) => undefined,
setItem: (key: string, value: string) => {},
removeItem: (key: string) => {},
},
},
})
const options = { cacheControl: '3600' }
const { data: file, error } = await supabaseClient.storage
.from(bucket)
.upload(fileName, image, options)
if (error) {
console.error('Failed to upload:', error)
return undefined
}
if (file && getUrl) {
const { data } = await supabaseClient.storage.from(bucket).getPublicUrl(file.path)
return data?.publicUrl
}
return undefined
}