Skip to content
24 linesCodeBlameRaw
1import { routeFor, sitePathOf } from "@/lib/links";
2
3/**
4 * Where a link that opens the app goes. `g1t://` links name a site path,
5 * as on the desktop; the app shows the ones it has screens for and opens
6 * the rest on the site (app/open.tsx). Android App Links and iOS
7 * Universal Links for https://g1t.sh come through here too once the site
8 * publishes assetlinks.json and apple-app-site-association.
9 */
10export function redirectSystemPath({ path }: { path: string; initial: boolean }): string {
11 try {
12 const sitePath = sitePathOf(path) ?? sitePathOfWeb(path) ?? path;
13 const route = routeFor(sitePath);
14 return route ?? `/open?path=${encodeURIComponent(sitePath)}`;
15 } catch {
16 return "/";
17 }
18}
19
20function sitePathOfWeb(link: string): string | null {
21 if (!/^https?:\/\//i.test(link)) return null;
22 const url = new URL(link);
23 return url.pathname + url.search;
24}