-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Video] Check upload limits before uploading (#5153)
* DRY up video service auth code * throw error if over upload limits * use token * xmark on toast * errors with nice translatable error messages * Update src/state/queries/video/video.ts --------- Co-authored-by: Hailey <[email protected]>
- Loading branch information
Showing
8 changed files
with
146 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
import {useCallback} from 'react' | ||
import {msg} from '@lingui/macro' | ||
import {useLingui} from '@lingui/react' | ||
|
||
import {VIDEO_SERVICE_DID} from '#/lib/constants' | ||
import {UploadLimitError} from '#/lib/media/video/errors' | ||
import {getServiceAuthAudFromUrl} from '#/lib/strings/url-helpers' | ||
import {useAgent} from '#/state/session' | ||
import {useVideoAgent} from './util' | ||
|
||
export function useServiceAuthToken({ | ||
aud, | ||
lxm, | ||
exp, | ||
}: { | ||
aud?: string | ||
lxm: string | ||
exp?: number | ||
}) { | ||
const agent = useAgent() | ||
|
||
return useCallback(async () => { | ||
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 | ||
}, [agent, aud, lxm, exp]) | ||
} | ||
|
||
export function useVideoUploadLimits() { | ||
const agent = useVideoAgent() | ||
const getToken = useServiceAuthToken({ | ||
lxm: 'app.bsky.video.getUploadLimits', | ||
aud: VIDEO_SERVICE_DID, | ||
}) | ||
const {_} = useLingui() | ||
|
||
return useCallback(async () => { | ||
const {data: limits} = await agent.app.bsky.video | ||
.getUploadLimits( | ||
{}, | ||
{headers: {Authorization: `Bearer ${await getToken()}`}}, | ||
) | ||
.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.`, | ||
), | ||
) | ||
} | ||
} | ||
}, [agent, _, getToken]) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters