about summary refs log tree commit diff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/link-meta.ts30
-rw-r--r--src/lib/strings.ts6
2 files changed, 33 insertions, 3 deletions
diff --git a/src/lib/link-meta.ts b/src/lib/link-meta.ts
index b6cc6caec..b48d920a1 100644
--- a/src/lib/link-meta.ts
+++ b/src/lib/link-meta.ts
@@ -1,4 +1,9 @@
-import {extractHtmlMeta} from './strings'
+import {
+  extractHtmlMeta,
+  isBskyAppUrl,
+  convertBskyAppUrlIfNeeded,
+} from './strings'
+import {match as matchRoute} from '../view/routes'
 
 export enum LikelyType {
   HTML,
@@ -6,6 +11,7 @@ export enum LikelyType {
   Image,
   Video,
   Audio,
+  AtpData,
   Other,
 }
 
@@ -18,6 +24,18 @@ export interface LinkMeta {
 }
 
 export async function getLinkMeta(url: string): Promise<LinkMeta> {
+  if (isBskyAppUrl(url)) {
+    // TODO this could be better
+    url = convertBskyAppUrlIfNeeded(url)
+    const route = matchRoute(url)
+    return {
+      likelyType: LikelyType.AtpData,
+      url,
+      title: route.defaultTitle,
+      // description: ''
+    }
+  }
+
   let urlp
   try {
     urlp = new URL(url)
@@ -53,7 +71,15 @@ export async function getLinkMeta(url: string): Promise<LinkMeta> {
   return meta
 }
 
-function getLikelyType(url: URL): LikelyType {
+export function getLikelyType(url: URL | string): LikelyType {
+  if (typeof url === 'string') {
+    try {
+      url = new URL(url)
+    } catch (e) {
+      return LikelyType.Other
+    }
+  }
+
   const ext = url.pathname.split('.').pop() || ''
   if (ext === 'html' || ext === 'htm') {
     return LikelyType.HTML
diff --git a/src/lib/strings.ts b/src/lib/strings.ts
index 74f4ea6ad..032eec566 100644
--- a/src/lib/strings.ts
+++ b/src/lib/strings.ts
@@ -209,8 +209,12 @@ export function toShareUrl(url: string): string {
   return url
 }
 
+export function isBskyAppUrl(url: string): boolean {
+  return url.startsWith('https://bsky.app/')
+}
+
 export function convertBskyAppUrlIfNeeded(url: string): string {
-  if (url.startsWith('https://bsky.app/')) {
+  if (isBskyAppUrl(url)) {
     try {
       const urlp = new URL(url)
       return urlp.pathname