feat: support change media upload service

This commit is contained in:
codytseng 2025-04-08 14:23:16 +08:00
parent 2e552c356c
commit bc0fa7f528
11 changed files with 198 additions and 41 deletions

View file

@ -1,7 +1,6 @@
import { useToast } from '@/hooks/use-toast'
import { useNostr } from '@/providers/NostrProvider'
import { useMediaUploadService } from '@/providers/MediaUploadServiceProvider'
import { useRef } from 'react'
import { z } from 'zod'
export default function Uploader({
children,
@ -16,41 +15,19 @@ export default function Uploader({
className?: string
accept?: string
}) {
const { signHttpAuth } = useNostr()
const { toast } = useToast()
const { upload } = useMediaUploadService()
const fileInputRef = useRef<HTMLInputElement>(null)
const handleFileChange = async (event: React.ChangeEvent<HTMLInputElement>) => {
const file = event.target.files?.[0]
if (!file) return
const formData = new FormData()
formData.append('file', file)
try {
onUploadingChange?.(true)
const url = 'https://nostr.build/api/v2/nip96/upload'
const auth = await signHttpAuth(url, 'POST')
const response = await fetch(url, {
method: 'POST',
body: formData,
headers: {
Authorization: auth
}
})
if (!response.ok) {
throw new Error(response.status.toString())
}
const data = await response.json()
const tags = z.array(z.array(z.string())).parse(data.nip94_event?.tags ?? [])
const imageUrl = tags.find(([tagName]) => tagName === 'url')?.[1]
if (imageUrl) {
onUploadSuccess({ url: imageUrl, tags })
} else {
throw new Error('No image url found')
}
const result = await upload(file)
console.log('File uploaded successfully', result)
onUploadSuccess(result)
} catch (error) {
console.error('Error uploading file', error)
toast({