@atproto/bsky 0.0.44 → 0.0.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/api/app/bsky/actor/searchActors.js +1 -0
  3. package/dist/api/app/bsky/actor/searchActors.js.map +1 -1
  4. package/dist/api/app/bsky/actor/searchActorsTypeahead.js +1 -0
  5. package/dist/api/app/bsky/actor/searchActorsTypeahead.js.map +1 -1
  6. package/dist/api/app/bsky/feed/searchPosts.js +10 -0
  7. package/dist/api/app/bsky/feed/searchPosts.js.map +1 -1
  8. package/dist/auth-verifier.d.ts.map +1 -1
  9. package/dist/data-plane/server/db/pagination.d.ts +5 -5
  10. package/dist/data-plane/server/db/pagination.d.ts.map +1 -1
  11. package/dist/data-plane/server/routes/records.d.ts.map +1 -1
  12. package/dist/data-plane/server/util.d.ts.map +1 -1
  13. package/dist/hydration/hydrator.d.ts.map +1 -1
  14. package/dist/hydration/hydrator.js +8 -1
  15. package/dist/hydration/hydrator.js.map +1 -1
  16. package/dist/hydration/util.d.ts.map +1 -1
  17. package/dist/lexicon/index.d.ts +16 -0
  18. package/dist/lexicon/index.d.ts.map +1 -1
  19. package/dist/lexicon/index.js +19 -1
  20. package/dist/lexicon/index.js.map +1 -1
  21. package/dist/lexicon/lexicons.d.ts +230 -0
  22. package/dist/lexicon/lexicons.d.ts.map +1 -1
  23. package/dist/lexicon/lexicons.js +243 -0
  24. package/dist/lexicon/lexicons.js.map +1 -1
  25. package/dist/lexicon/types/app/bsky/embed/record.d.ts +3 -0
  26. package/dist/lexicon/types/app/bsky/embed/record.d.ts.map +1 -1
  27. package/dist/lexicon/types/app/bsky/embed/record.js.map +1 -1
  28. package/dist/lexicon/types/app/bsky/feed/defs.d.ts +38 -0
  29. package/dist/lexicon/types/app/bsky/feed/defs.d.ts.map +1 -1
  30. package/dist/lexicon/types/app/bsky/feed/defs.js +35 -1
  31. package/dist/lexicon/types/app/bsky/feed/defs.js.map +1 -1
  32. package/dist/lexicon/types/app/bsky/feed/generator.d.ts +2 -0
  33. package/dist/lexicon/types/app/bsky/feed/generator.d.ts.map +1 -1
  34. package/dist/lexicon/types/app/bsky/feed/generator.js.map +1 -1
  35. package/dist/lexicon/types/app/bsky/feed/searchPosts.d.ts +18 -0
  36. package/dist/lexicon/types/app/bsky/feed/searchPosts.d.ts.map +1 -1
  37. package/dist/lexicon/types/app/bsky/feed/sendInteractions.d.ts +40 -0
  38. package/dist/lexicon/types/app/bsky/feed/sendInteractions.d.ts.map +1 -0
  39. package/dist/lexicon/types/app/bsky/feed/sendInteractions.js +3 -0
  40. package/dist/lexicon/types/app/bsky/feed/sendInteractions.js.map +1 -0
  41. package/dist/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.d.ts +2 -0
  42. package/dist/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.d.ts.map +1 -1
  43. package/dist/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.d.ts +20 -0
  44. package/dist/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.d.ts.map +1 -1
  45. package/dist/util/debug.d.ts.map +1 -1
  46. package/dist/views/index.d.ts +2 -2
  47. package/dist/views/index.d.ts.map +1 -1
  48. package/dist/views/index.js +29 -22
  49. package/dist/views/index.js.map +1 -1
  50. package/package.json +4 -4
  51. package/src/api/app/bsky/actor/searchActors.ts +1 -0
  52. package/src/api/app/bsky/actor/searchActorsTypeahead.ts +1 -0
  53. package/src/api/app/bsky/feed/searchPosts.ts +10 -0
  54. package/src/hydration/hydrator.ts +9 -1
  55. package/src/lexicon/index.ts +26 -0
  56. package/src/lexicon/lexicons.ts +269 -0
  57. package/src/lexicon/types/app/bsky/embed/record.ts +3 -0
  58. package/src/lexicon/types/app/bsky/feed/defs.ts +63 -0
  59. package/src/lexicon/types/app/bsky/feed/generator.ts +2 -0
  60. package/src/lexicon/types/app/bsky/feed/searchPosts.ts +18 -0
  61. package/src/lexicon/types/app/bsky/feed/sendInteractions.ts +49 -0
  62. package/src/lexicon/types/app/bsky/unspecced/searchActorsSkeleton.ts +2 -0
  63. package/src/lexicon/types/app/bsky/unspecced/searchPostsSkeleton.ts +20 -0
  64. package/src/views/index.ts +27 -30
  65. package/tests/__snapshots__/feed-generation.test.ts.snap +15 -0
  66. package/tests/data-plane/__snapshots__/indexing.test.ts.snap +6 -0
  67. package/tests/views/__snapshots__/actor-search.test.ts.snap +2 -2
  68. package/tests/views/__snapshots__/author-feed.test.ts.snap +27 -0
  69. package/tests/views/__snapshots__/block-lists.test.ts.snap +3 -0
  70. package/tests/views/__snapshots__/blocks.test.ts.snap +3 -0
  71. package/tests/views/__snapshots__/list-feed.test.ts.snap +6 -0
  72. package/tests/views/__snapshots__/posts.test.ts.snap +9 -0
  73. package/tests/views/__snapshots__/timeline.test.ts.snap +259 -0
  74. package/tests/views/actor-search.test.ts +3 -3
  75. package/tests/views/blocks.test.ts +11 -2
@@ -69,6 +69,8 @@ export interface FeedViewPost {
69
69
  post: PostView
70
70
  reply?: ReplyRef
71
71
  reason?: ReasonRepost | { $type: string; [k: string]: unknown }
72
+ /** Context provided by feed generator that may be passed back alongside interactions. */
73
+ feedContext?: string
72
74
  [k: string]: unknown
73
75
  }
74
76
 
@@ -219,6 +221,7 @@ export interface GeneratorView {
219
221
  descriptionFacets?: AppBskyRichtextFacet.Main[]
220
222
  avatar?: string
221
223
  likeCount?: number
224
+ acceptsInteractions?: boolean
222
225
  labels?: ComAtprotoLabelDefs.Label[]
223
226
  viewer?: GeneratorViewerState
224
227
  indexedAt: string
@@ -257,6 +260,8 @@ export function validateGeneratorViewerState(v: unknown): ValidationResult {
257
260
  export interface SkeletonFeedPost {
258
261
  post: string
259
262
  reason?: SkeletonReasonRepost | { $type: string; [k: string]: unknown }
263
+ /** Context that will be passed through to client and may be passed to feed generator back alongside interactions. */
264
+ feedContext?: string
260
265
  [k: string]: unknown
261
266
  }
262
267
 
@@ -308,3 +313,61 @@ export function isThreadgateView(v: unknown): v is ThreadgateView {
308
313
  export function validateThreadgateView(v: unknown): ValidationResult {
309
314
  return lexicons.validate('app.bsky.feed.defs#threadgateView', v)
310
315
  }
316
+
317
+ export interface Interaction {
318
+ item?: string
319
+ event?:
320
+ | 'app.bsky.feed.defs#requestLess'
321
+ | 'app.bsky.feed.defs#requestMore'
322
+ | 'app.bsky.feed.defs#clickthroughItem'
323
+ | 'app.bsky.feed.defs#clickthroughAuthor'
324
+ | 'app.bsky.feed.defs#clickthroughReposter'
325
+ | 'app.bsky.feed.defs#clickthroughEmbed'
326
+ | 'app.bsky.feed.defs#interactionSeen'
327
+ | 'app.bsky.feed.defs#interactionLike'
328
+ | 'app.bsky.feed.defs#interactionRepost'
329
+ | 'app.bsky.feed.defs#interactionReply'
330
+ | 'app.bsky.feed.defs#interactionQuote'
331
+ | 'app.bsky.feed.defs#interactionShare'
332
+ | (string & {})
333
+ /** Context on a feed item that was orginally supplied by the feed generator on getFeedSkeleton. */
334
+ feedContext?: string
335
+ [k: string]: unknown
336
+ }
337
+
338
+ export function isInteraction(v: unknown): v is Interaction {
339
+ return (
340
+ isObj(v) &&
341
+ hasProp(v, '$type') &&
342
+ v.$type === 'app.bsky.feed.defs#interaction'
343
+ )
344
+ }
345
+
346
+ export function validateInteraction(v: unknown): ValidationResult {
347
+ return lexicons.validate('app.bsky.feed.defs#interaction', v)
348
+ }
349
+
350
+ /** Request that less content like the given feed item be shown in the feed */
351
+ export const REQUESTLESS = 'app.bsky.feed.defs#requestLess'
352
+ /** Request that more content like the given feed item be shown in the feed */
353
+ export const REQUESTMORE = 'app.bsky.feed.defs#requestMore'
354
+ /** User clicked through to the feed item */
355
+ export const CLICKTHROUGHITEM = 'app.bsky.feed.defs#clickthroughItem'
356
+ /** User clicked through to the author of the feed item */
357
+ export const CLICKTHROUGHAUTHOR = 'app.bsky.feed.defs#clickthroughAuthor'
358
+ /** User clicked through to the reposter of the feed item */
359
+ export const CLICKTHROUGHREPOSTER = 'app.bsky.feed.defs#clickthroughReposter'
360
+ /** User clicked through to the embedded content of the feed item */
361
+ export const CLICKTHROUGHEMBED = 'app.bsky.feed.defs#clickthroughEmbed'
362
+ /** Feed item was seen by user */
363
+ export const INTERACTIONSEEN = 'app.bsky.feed.defs#interactionSeen'
364
+ /** User liked the feed item */
365
+ export const INTERACTIONLIKE = 'app.bsky.feed.defs#interactionLike'
366
+ /** User reposted the feed item */
367
+ export const INTERACTIONREPOST = 'app.bsky.feed.defs#interactionRepost'
368
+ /** User replied to the feed item */
369
+ export const INTERACTIONREPLY = 'app.bsky.feed.defs#interactionReply'
370
+ /** User quoted the feed item */
371
+ export const INTERACTIONQUOTE = 'app.bsky.feed.defs#interactionQuote'
372
+ /** User shared the feed item */
373
+ export const INTERACTIONSHARE = 'app.bsky.feed.defs#interactionShare'
@@ -14,6 +14,8 @@ export interface Record {
14
14
  description?: string
15
15
  descriptionFacets?: AppBskyRichtextFacet.Main[]
16
16
  avatar?: BlobRef
17
+ /** Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions */
18
+ acceptsInteractions?: boolean
17
19
  labels?:
18
20
  | ComAtprotoLabelDefs.SelfLabels
19
21
  | { $type: string; [k: string]: unknown }
@@ -12,6 +12,24 @@ import * as AppBskyFeedDefs from './defs'
12
12
  export interface QueryParams {
13
13
  /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */
14
14
  q: string
15
+ /** Specifies the ranking order of results. */
16
+ sort: 'top' | 'latest' | (string & {})
17
+ /** Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD). */
18
+ since?: string
19
+ /** Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD). */
20
+ until?: string
21
+ /** Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions. */
22
+ mentions?: string
23
+ /** Filter to posts by the given account. Handles are resolved to DID before query-time. */
24
+ author?: string
25
+ /** Filter to posts in the given language. Expected to be based on post language field, though server may override language detection. */
26
+ lang?: string
27
+ /** Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization. */
28
+ domain?: string
29
+ /** Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. */
30
+ url?: string
31
+ /** Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching. */
32
+ tag?: string[]
15
33
  limit: number
16
34
  /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */
17
35
  cursor?: string
@@ -0,0 +1,49 @@
1
+ /**
2
+ * GENERATED CODE - DO NOT MODIFY
3
+ */
4
+ import express from 'express'
5
+ import { ValidationResult, BlobRef } from '@atproto/lexicon'
6
+ import { lexicons } from '../../../../lexicons'
7
+ import { isObj, hasProp } from '../../../../util'
8
+ import { CID } from 'multiformats/cid'
9
+ import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server'
10
+ import * as AppBskyFeedDefs from './defs'
11
+
12
+ export interface QueryParams {}
13
+
14
+ export interface InputSchema {
15
+ interactions: AppBskyFeedDefs.Interaction[]
16
+ [k: string]: unknown
17
+ }
18
+
19
+ export interface OutputSchema {
20
+ [k: string]: unknown
21
+ }
22
+
23
+ export interface HandlerInput {
24
+ encoding: 'application/json'
25
+ body: InputSchema
26
+ }
27
+
28
+ export interface HandlerSuccess {
29
+ encoding: 'application/json'
30
+ body: OutputSchema
31
+ headers?: { [key: string]: string }
32
+ }
33
+
34
+ export interface HandlerError {
35
+ status: number
36
+ message?: string
37
+ }
38
+
39
+ export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough
40
+ export type HandlerReqCtx<HA extends HandlerAuth = never> = {
41
+ auth: HA
42
+ params: QueryParams
43
+ input: HandlerInput
44
+ req: express.Request
45
+ res: express.Response
46
+ }
47
+ export type Handler<HA extends HandlerAuth = never> = (
48
+ ctx: HandlerReqCtx<HA>,
49
+ ) => Promise<HandlerOutput> | HandlerOutput
@@ -12,6 +12,8 @@ import * as AppBskyUnspeccedDefs from './defs'
12
12
  export interface QueryParams {
13
13
  /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax. */
14
14
  q: string
15
+ /** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. */
16
+ viewer?: string
15
17
  /** If true, acts as fast/simple 'typeahead' query. */
16
18
  typeahead?: boolean
17
19
  limit: number
@@ -12,6 +12,26 @@ import * as AppBskyUnspeccedDefs from './defs'
12
12
  export interface QueryParams {
13
13
  /** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. */
14
14
  q: string
15
+ /** Specifies the ranking order of results. */
16
+ sort: 'top' | 'latest' | (string & {})
17
+ /** Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD). */
18
+ since?: string
19
+ /** Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD). */
20
+ until?: string
21
+ /** Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions. */
22
+ mentions?: string
23
+ /** Filter to posts by the given account. Handles are resolved to DID before query-time. */
24
+ author?: string
25
+ /** Filter to posts in the given language. Expected to be based on post language field, though server may override language detection. */
26
+ lang?: string
27
+ /** Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization. */
28
+ domain?: string
29
+ /** Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. */
30
+ url?: string
31
+ /** Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching. */
32
+ tag?: string[]
33
+ /** DID of the account making the request (not included for public/unauthenticated queries). Used for 'from:me' queries. */
34
+ viewer?: string
15
35
  limit: number
16
36
  /** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. */
17
37
  cursor?: string
@@ -18,6 +18,7 @@ import {
18
18
  ReasonRepost,
19
19
  ThreadViewPost,
20
20
  ThreadgateView,
21
+ isPostView,
21
22
  } from '../lexicon/types/app/bsky/feed/defs'
22
23
  import { ListView, ListViewBasic } from '../lexicon/types/app/bsky/graph/defs'
23
24
  import { creatorFromUri, parseThreadGate, cidFromBlobJson } from './util'
@@ -101,9 +102,9 @@ export class Views {
101
102
  cidFromBlobJson(actor.profile.banner),
102
103
  )
103
104
  : undefined,
104
- followersCount: profileAggs?.followers,
105
- followsCount: profileAggs?.follows,
106
- postsCount: profileAggs?.posts,
105
+ followersCount: profileAggs?.followers ?? 0,
106
+ followsCount: profileAggs?.follows ?? 0,
107
+ postsCount: profileAggs?.posts ?? 0,
107
108
  associated: {
108
109
  lists: profileAggs?.lists,
109
110
  feedgens: profileAggs?.feeds,
@@ -296,7 +297,7 @@ export class Views {
296
297
  uri,
297
298
  cid: labeler.cid.toString(),
298
299
  creator,
299
- likeCount: aggs?.likes,
300
+ likeCount: aggs?.likes ?? 0,
300
301
  viewer: viewer
301
302
  ? {
302
303
  like: viewer.like,
@@ -371,7 +372,7 @@ export class Views {
371
372
  cidFromBlobJson(feedgen.record.avatar),
372
373
  )
373
374
  : undefined,
374
- likeCount: aggs?.likes,
375
+ likeCount: aggs?.likes ?? 0,
375
376
  labels,
376
377
  viewer: viewer
377
378
  ? {
@@ -427,9 +428,9 @@ export class Views {
427
428
  depth < 2 && post.record.embed
428
429
  ? this.embed(uri, post.record.embed, state, depth + 1)
429
430
  : undefined,
430
- replyCount: aggs?.replies,
431
- repostCount: aggs?.reposts,
432
- likeCount: aggs?.likes,
431
+ replyCount: aggs?.replies ?? 0,
432
+ repostCount: aggs?.reposts ?? 0,
433
+ likeCount: aggs?.likes ?? 0,
433
434
  indexedAt: post.sortedAt.toISOString(),
434
435
  viewer: viewer
435
436
  ? {
@@ -469,35 +470,28 @@ export class Views {
469
470
  }
470
471
  }
471
472
 
472
- replyRef(uri: string, state: HydrationState, usePostViewUnion = false) {
473
- // don't hydrate reply if there isn't it violates a block
474
- if (state.postBlocks?.get(uri)?.reply) return undefined
473
+ replyRef(uri: string, state: HydrationState) {
475
474
  const postRecord = state.posts?.get(uri.toString())?.record
476
475
  if (!postRecord?.reply) return
477
- const root = this.maybePost(
478
- postRecord.reply.root.uri,
479
- state,
480
- usePostViewUnion,
481
- )
482
- const parent = this.maybePost(
483
- postRecord.reply.parent.uri,
484
- state,
485
- usePostViewUnion,
486
- )
476
+ let root = this.maybePost(postRecord.reply.root.uri, state)
477
+ let parent = this.maybePost(postRecord.reply.parent.uri, state)
478
+ if (state.postBlocks?.get(uri)?.reply && isPostView(parent)) {
479
+ parent = this.blockedPost(parent.uri, parent.author.did, state)
480
+ // in a reply to the root of a thread, parent and root are the same post.
481
+ if (root.uri === parent.uri) {
482
+ root = parent
483
+ }
484
+ }
487
485
  return root && parent ? { root, parent } : undefined
488
486
  }
489
487
 
490
- maybePost(
491
- uri: string,
492
- state: HydrationState,
493
- usePostViewUnion = false,
494
- ): MaybePostView | undefined {
488
+ maybePost(uri: string, state: HydrationState): MaybePostView {
495
489
  const post = this.post(uri, state)
496
- if (!post) return usePostViewUnion ? this.notFoundPost(uri) : undefined
490
+ if (!post) {
491
+ return this.notFoundPost(uri)
492
+ }
497
493
  if (this.viewerBlockExists(post.author.did, state)) {
498
- return usePostViewUnion
499
- ? this.blockedPost(uri, post.author.did, state)
500
- : undefined
494
+ return this.blockedPost(uri, post.author.did, state)
501
495
  }
502
496
  return {
503
497
  $type: 'app.bsky.feed.defs#postView',
@@ -759,6 +753,9 @@ export class Views {
759
753
  author: postView.author,
760
754
  value: postView.record,
761
755
  labels: postView.labels,
756
+ likeCount: postView.likeCount,
757
+ replyCount: postView.replyCount,
758
+ repostCount: postView.repostCount,
762
759
  indexedAt: postView.indexedAt,
763
760
  embeds: depth > 1 ? undefined : postView.embed ? [postView.embed] : [],
764
761
  }
@@ -485,6 +485,9 @@ Array [
485
485
  "embeds": Array [],
486
486
  "indexedAt": "1970-01-01T00:00:00.000Z",
487
487
  "labels": Array [],
488
+ "likeCount": 0,
489
+ "replyCount": 0,
490
+ "repostCount": 0,
488
491
  "uri": "record(2)",
489
492
  "value": Object {
490
493
  "$type": "app.bsky.feed.post",
@@ -740,6 +743,9 @@ Array [
740
743
  "cid": "cids(3)",
741
744
  "indexedAt": "1970-01-01T00:00:00.000Z",
742
745
  "labels": Array [],
746
+ "likeCount": 0,
747
+ "replyCount": 0,
748
+ "repostCount": 0,
743
749
  "uri": "record(2)",
744
750
  "value": Object {
745
751
  "$type": "app.bsky.feed.post",
@@ -756,6 +762,9 @@ Array [
756
762
  ],
757
763
  "indexedAt": "1970-01-01T00:00:00.000Z",
758
764
  "labels": Array [],
765
+ "likeCount": 2,
766
+ "replyCount": 0,
767
+ "repostCount": 0,
759
768
  "uri": "record(5)",
760
769
  "value": Object {
761
770
  "$type": "app.bsky.feed.post",
@@ -948,6 +957,9 @@ Array [
948
957
  "embeds": Array [],
949
958
  "indexedAt": "1970-01-01T00:00:00.000Z",
950
959
  "labels": Array [],
960
+ "likeCount": 0,
961
+ "replyCount": 0,
962
+ "repostCount": 0,
951
963
  "uri": "record(3)",
952
964
  "value": Object {
953
965
  "$type": "app.bsky.feed.post",
@@ -1232,6 +1244,9 @@ Array [
1232
1244
  "embeds": Array [],
1233
1245
  "indexedAt": "1970-01-01T00:00:00.000Z",
1234
1246
  "labels": Array [],
1247
+ "likeCount": 0,
1248
+ "replyCount": 0,
1249
+ "repostCount": 0,
1235
1250
  "uri": "record(5)",
1236
1251
  "value": Object {
1237
1252
  "$type": "app.bsky.feed.post",
@@ -238,6 +238,9 @@ Array [
238
238
  "cid": "cids(8)",
239
239
  "indexedAt": "1970-01-01T00:00:00.000Z",
240
240
  "labels": Array [],
241
+ "likeCount": 2,
242
+ "replyCount": 0,
243
+ "repostCount": 0,
241
244
  "uri": "record(9)",
242
245
  "value": Object {
243
246
  "$type": "app.bsky.feed.post",
@@ -285,6 +288,9 @@ Array [
285
288
  ],
286
289
  "indexedAt": "1970-01-01T00:00:00.000Z",
287
290
  "labels": Array [],
291
+ "likeCount": 0,
292
+ "replyCount": 0,
293
+ "repostCount": 1,
288
294
  "uri": "record(7)",
289
295
  "value": Object {
290
296
  "$type": "app.bsky.feed.post",
@@ -36,7 +36,7 @@ Array [
36
36
  "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(0)@jpeg",
37
37
  "did": "user(4)",
38
38
  "displayName": "Latoya Windler",
39
- "handle": "carolina-mcdermott77.test",
39
+ "handle": "carolina-mcderm77.test",
40
40
  "indexedAt": "1970-01-01T00:00:00.000Z",
41
41
  "labels": Array [],
42
42
  "viewer": Object {
@@ -115,7 +115,7 @@ Array [
115
115
  "avatar": "https://bsky.public.url/img/avatar/plain/user(5)/cids(0)@jpeg",
116
116
  "did": "user(4)",
117
117
  "displayName": "Latoya Windler",
118
- "handle": "carolina-mcdermott77.test",
118
+ "handle": "carolina-mcderm77.test",
119
119
  "viewer": Object {
120
120
  "blockedBy": false,
121
121
  "muted": false,
@@ -242,6 +242,9 @@ Array [
242
242
  "cid": "cids(8)",
243
243
  "indexedAt": "1970-01-01T00:00:00.000Z",
244
244
  "labels": Array [],
245
+ "likeCount": 2,
246
+ "replyCount": 0,
247
+ "repostCount": 0,
245
248
  "uri": "record(9)",
246
249
  "value": Object {
247
250
  "$type": "app.bsky.feed.post",
@@ -289,6 +292,9 @@ Array [
289
292
  ],
290
293
  "indexedAt": "1970-01-01T00:00:00.000Z",
291
294
  "labels": Array [],
295
+ "likeCount": 0,
296
+ "replyCount": 0,
297
+ "repostCount": 1,
292
298
  "uri": "record(7)",
293
299
  "value": Object {
294
300
  "$type": "app.bsky.feed.post",
@@ -754,6 +760,9 @@ Array [
754
760
  "cid": "cids(4)",
755
761
  "indexedAt": "1970-01-01T00:00:00.000Z",
756
762
  "labels": Array [],
763
+ "likeCount": 0,
764
+ "replyCount": 0,
765
+ "repostCount": 0,
757
766
  "uri": "record(2)",
758
767
  "value": Object {
759
768
  "$type": "app.bsky.feed.post",
@@ -770,6 +779,9 @@ Array [
770
779
  ],
771
780
  "indexedAt": "1970-01-01T00:00:00.000Z",
772
781
  "labels": Array [],
782
+ "likeCount": 2,
783
+ "replyCount": 0,
784
+ "repostCount": 0,
773
785
  "uri": "record(1)",
774
786
  "value": Object {
775
787
  "$type": "app.bsky.feed.post",
@@ -1042,6 +1054,9 @@ Array [
1042
1054
  "embeds": Array [],
1043
1055
  "indexedAt": "1970-01-01T00:00:00.000Z",
1044
1056
  "labels": Array [],
1057
+ "likeCount": 0,
1058
+ "replyCount": 0,
1059
+ "repostCount": 0,
1045
1060
  "uri": "record(2)",
1046
1061
  "value": Object {
1047
1062
  "$type": "app.bsky.feed.post",
@@ -1428,6 +1443,9 @@ Array [
1428
1443
  "cid": "cids(9)",
1429
1444
  "indexedAt": "1970-01-01T00:00:00.000Z",
1430
1445
  "labels": Array [],
1446
+ "likeCount": 0,
1447
+ "replyCount": 0,
1448
+ "repostCount": 0,
1431
1449
  "uri": "record(11)",
1432
1450
  "value": Object {
1433
1451
  "$type": "app.bsky.feed.post",
@@ -1444,6 +1462,9 @@ Array [
1444
1462
  ],
1445
1463
  "indexedAt": "1970-01-01T00:00:00.000Z",
1446
1464
  "labels": Array [],
1465
+ "likeCount": 2,
1466
+ "replyCount": 0,
1467
+ "repostCount": 0,
1447
1468
  "uri": "record(10)",
1448
1469
  "value": Object {
1449
1470
  "$type": "app.bsky.feed.post",
@@ -1798,6 +1819,9 @@ Array [
1798
1819
  "cid": "cids(8)",
1799
1820
  "indexedAt": "1970-01-01T00:00:00.000Z",
1800
1821
  "labels": Array [],
1822
+ "likeCount": 2,
1823
+ "replyCount": 0,
1824
+ "repostCount": 0,
1801
1825
  "uri": "record(10)",
1802
1826
  "value": Object {
1803
1827
  "$type": "app.bsky.feed.post",
@@ -1845,6 +1869,9 @@ Array [
1845
1869
  ],
1846
1870
  "indexedAt": "1970-01-01T00:00:00.000Z",
1847
1871
  "labels": Array [],
1872
+ "likeCount": 0,
1873
+ "replyCount": 0,
1874
+ "repostCount": 1,
1848
1875
  "uri": "record(9)",
1849
1876
  "value": Object {
1850
1877
  "$type": "app.bsky.feed.post",
@@ -66,6 +66,9 @@ Object {
66
66
  ],
67
67
  "indexedAt": "1970-01-01T00:00:00.000Z",
68
68
  "labels": Array [],
69
+ "likeCount": 0,
70
+ "replyCount": 0,
71
+ "repostCount": 1,
69
72
  "uri": "record(3)",
70
73
  "value": Object {
71
74
  "$type": "app.bsky.feed.post",
@@ -66,6 +66,9 @@ Object {
66
66
  ],
67
67
  "indexedAt": "1970-01-01T00:00:00.000Z",
68
68
  "labels": Array [],
69
+ "likeCount": 0,
70
+ "replyCount": 0,
71
+ "repostCount": 1,
69
72
  "uri": "record(3)",
70
73
  "value": Object {
71
74
  "$type": "app.bsky.feed.post",
@@ -420,6 +420,9 @@ Array [
420
420
  "cid": "cids(8)",
421
421
  "indexedAt": "1970-01-01T00:00:00.000Z",
422
422
  "labels": Array [],
423
+ "likeCount": 2,
424
+ "replyCount": 0,
425
+ "repostCount": 0,
423
426
  "uri": "record(10)",
424
427
  "value": Object {
425
428
  "$type": "app.bsky.feed.post",
@@ -467,6 +470,9 @@ Array [
467
470
  ],
468
471
  "indexedAt": "1970-01-01T00:00:00.000Z",
469
472
  "labels": Array [],
473
+ "likeCount": 0,
474
+ "replyCount": 0,
475
+ "repostCount": 1,
470
476
  "uri": "record(9)",
471
477
  "value": Object {
472
478
  "$type": "app.bsky.feed.post",
@@ -182,6 +182,9 @@ Array [
182
182
  "embeds": Array [],
183
183
  "indexedAt": "1970-01-01T00:00:00.000Z",
184
184
  "labels": Array [],
185
+ "likeCount": 0,
186
+ "replyCount": 0,
187
+ "repostCount": 0,
185
188
  "uri": "record(3)",
186
189
  "value": Object {
187
190
  "$type": "app.bsky.feed.post",
@@ -311,6 +314,9 @@ Array [
311
314
  "cid": "cids(4)",
312
315
  "indexedAt": "1970-01-01T00:00:00.000Z",
313
316
  "labels": Array [],
317
+ "likeCount": 0,
318
+ "replyCount": 0,
319
+ "repostCount": 0,
314
320
  "uri": "record(3)",
315
321
  "value": Object {
316
322
  "$type": "app.bsky.feed.post",
@@ -327,6 +333,9 @@ Array [
327
333
  ],
328
334
  "indexedAt": "1970-01-01T00:00:00.000Z",
329
335
  "labels": Array [],
336
+ "likeCount": 2,
337
+ "replyCount": 0,
338
+ "repostCount": 0,
330
339
  "uri": "record(6)",
331
340
  "value": Object {
332
341
  "$type": "app.bsky.feed.post",