about summary refs log tree commit diff
path: root/src/lib/media/video/upload.shared.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/media/video/upload.shared.ts')
-rw-r--r--src/lib/media/video/upload.shared.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/lib/media/video/upload.shared.ts b/src/lib/media/video/upload.shared.ts
new file mode 100644
index 000000000..8c217eadc
--- /dev/null
+++ b/src/lib/media/video/upload.shared.ts
@@ -0,0 +1,61 @@
+import {BskyAgent} from '@atproto/api'
+import {I18n} from '@lingui/core'
+import {msg} from '@lingui/macro'
+
+import {VIDEO_SERVICE_DID} from '#/lib/constants'
+import {UploadLimitError} from '#/lib/media/video/errors'
+import {getServiceAuthAudFromUrl} from '#/lib/strings/url-helpers'
+import {createVideoAgent} from './util'
+
+export async function getServiceAuthToken({
+  agent,
+  aud,
+  lxm,
+  exp,
+}: {
+  agent: BskyAgent
+  aud?: string
+  lxm: string
+  exp?: number
+}) {
+  const pdsAud = getServiceAuthAudFromUrl(agent.dispatchUrl)
+  if (!pdsAud) {
+    throw new Error('Agent does not have a PDS URL')
+  }
+  const {data: serviceAuth} = await agent.com.atproto.server.getServiceAuth({
+    aud: aud ?? pdsAud,
+    lxm,
+    exp,
+  })
+  return serviceAuth.token
+}
+
+export async function getVideoUploadLimits(agent: BskyAgent, _: I18n['_']) {
+  const token = await getServiceAuthToken({
+    agent,
+    lxm: 'app.bsky.video.getUploadLimits',
+    aud: VIDEO_SERVICE_DID,
+  })
+  const videoAgent = createVideoAgent()
+  const {data: limits} = await videoAgent.app.bsky.video
+    .getUploadLimits({}, {headers: {Authorization: `Bearer ${token}`}})
+    .catch(err => {
+      if (err instanceof Error) {
+        throw new UploadLimitError(err.message)
+      } else {
+        throw err
+      }
+    })
+
+  if (!limits.canUpload) {
+    if (limits.message) {
+      throw new UploadLimitError(limits.message)
+    } else {
+      throw new UploadLimitError(
+        _(
+          msg`You have temporarily reached the limit for video uploads. Please try again later.`,
+        ),
+      )
+    }
+  }
+}