about summary refs log tree commit diff
path: root/src/state/models/post-thread-view.ts
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-01-03 13:08:56 -0600
committerPaul Frazee <pfrazee@gmail.com>2023-01-03 13:08:56 -0600
commitb9b096500063a38fdf3858a362858b447103ec07 (patch)
tree1f1c8e7001cf409ea1416f0c96ea70877f861e12 /src/state/models/post-thread-view.ts
parent1acef14a1c6e342cb707620905b484fae4c53cff (diff)
downloadvoidsky-b9b096500063a38fdf3858a362858b447103ec07.tar.zst
Implement validation and proper type detection
Diffstat (limited to 'src/state/models/post-thread-view.ts')
-rw-r--r--src/state/models/post-thread-view.ts25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/state/models/post-thread-view.ts b/src/state/models/post-thread-view.ts
index b7c33cfbd..f19335539 100644
--- a/src/state/models/post-thread-view.ts
+++ b/src/state/models/post-thread-view.ts
@@ -1,5 +1,8 @@
 import {makeAutoObservable, runInAction} from 'mobx'
-import {AppBskyFeedGetPostThread as GetPostThread} from '@atproto/api'
+import {
+  AppBskyFeedGetPostThread as GetPostThread,
+  AppBskyFeedPost as FeedPost,
+} from '@atproto/api'
 import {AtUri} from '../../third-party/uri'
 import {RootStoreModel} from './root-store'
 import * as apilib from '../lib/api'
@@ -19,7 +22,8 @@ export class PostThreadViewPostModel {
   _hasMore = false
 
   // data
-  post: GetPostThread.ThreadViewPost['post']
+  post: FeedPost.View
+  postRecord?: FeedPost.Record
   parent?: PostThreadViewPostModel | GetPostThread.NotFoundPost
   replies?: (PostThreadViewPostModel | GetPostThread.NotFoundPost)[]
 
@@ -30,6 +34,22 @@ export class PostThreadViewPostModel {
   ) {
     this._reactKey = reactKey
     this.post = v.post
+    if (FeedPost.isRecord(this.post.record)) {
+      const valid = FeedPost.validateRecord(this.post.record)
+      if (valid.success) {
+        this.postRecord = this.post.record
+      } else {
+        rootStore.log.warn(
+          'Received an invalid app.bsky.feed.post record',
+          valid.error,
+        )
+      }
+    } else {
+      rootStore.log.warn(
+        'app.bsky.feed.getPostThread served an unexpected record type',
+        this.post.record,
+      )
+    }
     // replies and parent are handled via assignTreeModels
     makeAutoObservable(this, {rootStore: false})
   }
@@ -278,7 +298,6 @@ export class PostThreadViewModel {
   }
 
   private _replaceAll(res: GetPostThread.Response) {
-    // TODO: validate .record
     // sortThread(res.data.thread) TODO needed?
     const keyGen = reactKeyGenerator()
     const thread = new PostThreadViewPostModel(