Skip to content

Commit

Permalink
Simplify intent path logic, ensure all variations work for bluesky://…
Browse files Browse the repository at this point in the history
…, bluesky:///, and https://bsky.app/ (#3045)

* Simplify intent path logic, ensure all variations work

* use startsWith
  • Loading branch information
haileyok authored Mar 2, 2024
1 parent a7195cc commit 8bf40b4
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions src/lib/hooks/useIntentHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,20 @@ export function useIntentHandler() {

React.useEffect(() => {
const handleIncomingURL = (url: string) => {
// We want to be able to support bluesky:// deeplinks. It's unnatural for someone to use a deeplink with three
// slashes, like bluesky:///intent/follow. However, supporting just two slashes causes us to have to take care
// of two cases when parsing the url. If we ensure there is a third slash, we can always ensure the first
// path parameter is in pathname rather than in hostname.
if (url.startsWith('bluesky://') && !url.startsWith('bluesky:///')) {
url = url.replace('bluesky://', 'bluesky:///')
}

const urlp = new URL(url)
const [_, intentTypeNative, intentTypeWeb] = urlp.pathname.split('/')
const [_, intent, intentType] = urlp.pathname.split('/')

// On native, our links look like bluesky://intent/SomeIntent, so we have to check the hostname for the
// intent check. On web, we have to check the first part of the path since we have an actual hostname
const intentType = isNative ? intentTypeNative : intentTypeWeb
const isIntent = isNative
? urlp.hostname === 'intent'
: intentTypeNative === 'intent'
const isIntent = intent === 'intent'
const params = urlp.searchParams

if (!isIntent) return
Expand Down Expand Up @@ -69,10 +74,7 @@ function useComposeIntent() {
return false
}
// We also should just filter out cases that don't have all the info we need
if (!VALID_IMAGE_REGEX.test(part)) {
return false
}
return true
return VALID_IMAGE_REGEX.test(part)
})
.map(part => {
const [uri, width, height] = part.split('|')
Expand Down

0 comments on commit 8bf40b4

Please sign in to comment.