about summary refs log tree commit diff
path: root/src/state/queries/video/video-upload.web.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/queries/video/video-upload.web.ts')
-rw-r--r--src/state/queries/video/video-upload.web.ts69
1 files changed, 33 insertions, 36 deletions
diff --git a/src/state/queries/video/video-upload.web.ts b/src/state/queries/video/video-upload.web.ts
index b9b0bacfa..09d107423 100644
--- a/src/state/queries/video/video-upload.web.ts
+++ b/src/state/queries/video/video-upload.web.ts
@@ -1,19 +1,17 @@
+import {AppBskyVideoDefs} from '@atproto/api'
 import {useMutation} from '@tanstack/react-query'
 import {nanoid} from 'nanoid/non-secure'
 
 import {CompressedVideo} from '#/lib/media/video/compress'
-import {UploadVideoResponse} from '#/lib/media/video/types'
 import {createVideoEndpointUrl} from '#/state/queries/video/util'
 import {useAgent, useSession} from '#/state/session'
 
-const UPLOAD_HEADER = process.env.EXPO_PUBLIC_VIDEO_HEADER ?? ''
-
 export const useUploadVideoMutation = ({
   onSuccess,
   onError,
   setProgress,
 }: {
-  onSuccess: (response: UploadVideoResponse) => void
+  onSuccess: (response: AppBskyVideoDefs.JobStatus) => void
   onError: (e: any) => void
   setProgress: (progress: number) => void
 }) => {
@@ -22,9 +20,9 @@ export const useUploadVideoMutation = ({
 
   return useMutation({
     mutationFn: async (video: CompressedVideo) => {
-      const uri = createVideoEndpointUrl('/upload', {
+      const uri = createVideoEndpointUrl('/xrpc/app.bsky.video.uploadVideo', {
         did: currentAccount!.did,
-        name: `${nanoid(12)}.mp4`, // @TODO what are we limiting this to?
+        name: `${nanoid(12)}.mp4`, // @TODO: make sure it's always mp4'
       })
 
       // a logged-in agent should have this set, but we'll check just in case
@@ -32,46 +30,45 @@ export const useUploadVideoMutation = ({
         throw new Error('Agent does not have a PDS URL')
       }
 
-      const {data: serviceAuth} =
-        await agent.api.com.atproto.server.getServiceAuth({
+      const {data: serviceAuth} = await agent.com.atproto.server.getServiceAuth(
+        {
           aud: `did:web:${agent.pdsUrl.hostname}`,
           lxm: 'com.atproto.repo.uploadBlob',
-        })
+        },
+      )
 
       const bytes = await fetch(video.uri).then(res => res.arrayBuffer())
 
       const xhr = new XMLHttpRequest()
-      const res = (await new Promise((resolve, reject) => {
-        xhr.upload.addEventListener('progress', e => {
-          const progress = e.loaded / e.total
-          setProgress(progress)
-        })
-        xhr.onloadend = () => {
-          if (xhr.readyState === 4) {
-            const uploadRes = JSON.parse(
-              xhr.responseText,
-            ) as UploadVideoResponse
-            resolve(uploadRes)
-            onSuccess(uploadRes)
-          } else {
+      const res = await new Promise<AppBskyVideoDefs.JobStatus>(
+        (resolve, reject) => {
+          xhr.upload.addEventListener('progress', e => {
+            const progress = e.loaded / e.total
+            setProgress(progress)
+          })
+          xhr.onloadend = () => {
+            if (xhr.readyState === 4) {
+              const uploadRes = JSON.parse(
+                xhr.responseText,
+              ) as AppBskyVideoDefs.JobStatus
+              resolve(uploadRes)
+              onSuccess(uploadRes)
+            } else {
+              reject()
+              onError(new Error('Failed to upload video'))
+            }
+          }
+          xhr.onerror = () => {
             reject()
             onError(new Error('Failed to upload video'))
           }
-        }
-        xhr.onerror = () => {
-          reject()
-          onError(new Error('Failed to upload video'))
-        }
-        xhr.open('POST', uri)
-        xhr.setRequestHeader('Content-Type', 'video/mp4') // @TODO how we we set the proper content type?
-        // @TODO remove this header for prod
-        xhr.setRequestHeader('dev-key', UPLOAD_HEADER)
-        xhr.setRequestHeader('Authorization', `Bearer ${serviceAuth.token}`)
-        xhr.send(bytes)
-      })) as UploadVideoResponse
+          xhr.open('POST', uri)
+          xhr.setRequestHeader('Content-Type', 'video/mp4')
+          xhr.setRequestHeader('Authorization', `Bearer ${serviceAuth.token}`)
+          xhr.send(bytes)
+        },
+      )
 
-      // @TODO rm for prod
-      console.log('[VIDEO]', res)
       return res
     },
     onError,