@atproto/bsky 0.0.60 → 0.0.61

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 (67) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/api/app/bsky/graph/getKnownFollowers.d.ts +4 -0
  3. package/dist/api/app/bsky/graph/getKnownFollowers.d.ts.map +1 -0
  4. package/dist/api/app/bsky/graph/getKnownFollowers.js +71 -0
  5. package/dist/api/app/bsky/graph/getKnownFollowers.js.map +1 -0
  6. package/dist/api/index.d.ts.map +1 -1
  7. package/dist/api/index.js +2 -0
  8. package/dist/api/index.js.map +1 -1
  9. package/dist/data-plane/server/routes/follows.d.ts.map +1 -1
  10. package/dist/data-plane/server/routes/follows.js +34 -2
  11. package/dist/data-plane/server/routes/follows.js.map +1 -1
  12. package/dist/hydration/actor.d.ts +6 -0
  13. package/dist/hydration/actor.d.ts.map +1 -1
  14. package/dist/hydration/actor.js +17 -0
  15. package/dist/hydration/actor.js.map +1 -1
  16. package/dist/hydration/hydrator.d.ts +2 -1
  17. package/dist/hydration/hydrator.d.ts.map +1 -1
  18. package/dist/hydration/hydrator.js +15 -1
  19. package/dist/hydration/hydrator.js.map +1 -1
  20. package/dist/lexicon/index.d.ts +2 -0
  21. package/dist/lexicon/index.d.ts.map +1 -1
  22. package/dist/lexicon/index.js +4 -0
  23. package/dist/lexicon/index.js.map +1 -1
  24. package/dist/lexicon/lexicons.d.ts +76 -0
  25. package/dist/lexicon/lexicons.d.ts.map +1 -1
  26. package/dist/lexicon/lexicons.js +76 -0
  27. package/dist/lexicon/lexicons.js.map +1 -1
  28. package/dist/lexicon/types/app/bsky/actor/defs.d.ts +9 -0
  29. package/dist/lexicon/types/app/bsky/actor/defs.d.ts.map +1 -1
  30. package/dist/lexicon/types/app/bsky/actor/defs.js +11 -1
  31. package/dist/lexicon/types/app/bsky/actor/defs.js.map +1 -1
  32. package/dist/lexicon/types/app/bsky/graph/getKnownFollowers.d.ts +40 -0
  33. package/dist/lexicon/types/app/bsky/graph/getKnownFollowers.d.ts.map +1 -0
  34. package/dist/lexicon/types/app/bsky/graph/getKnownFollowers.js +3 -0
  35. package/dist/lexicon/types/app/bsky/graph/getKnownFollowers.js.map +1 -0
  36. package/dist/logger.d.ts +1 -0
  37. package/dist/logger.d.ts.map +1 -1
  38. package/dist/logger.js +2 -1
  39. package/dist/logger.js.map +1 -1
  40. package/dist/proto/bsky_pb.d.ts +25 -4
  41. package/dist/proto/bsky_pb.d.ts.map +1 -1
  42. package/dist/proto/bsky_pb.js +83 -10
  43. package/dist/proto/bsky_pb.js.map +1 -1
  44. package/dist/views/index.d.ts +5 -0
  45. package/dist/views/index.d.ts.map +1 -1
  46. package/dist/views/index.js +19 -0
  47. package/dist/views/index.js.map +1 -1
  48. package/package.json +5 -5
  49. package/proto/bsky.proto +6 -2
  50. package/src/api/app/bsky/graph/getKnownFollowers.ts +119 -0
  51. package/src/api/index.ts +2 -0
  52. package/src/data-plane/server/routes/follows.ts +45 -2
  53. package/src/hydration/actor.ts +30 -0
  54. package/src/hydration/hydrator.ts +22 -1
  55. package/src/lexicon/index.ts +12 -0
  56. package/src/lexicon/lexicons.ts +77 -0
  57. package/src/lexicon/types/app/bsky/actor/defs.ts +20 -0
  58. package/src/lexicon/types/app/bsky/graph/getKnownFollowers.ts +50 -0
  59. package/src/logger.ts +2 -0
  60. package/src/proto/bsky_pb.ts +75 -8
  61. package/src/views/index.ts +24 -0
  62. package/tests/data-plane/__snapshots__/indexing.test.ts.snap +46 -28
  63. package/tests/label-hydration.test.ts +0 -2
  64. package/tests/query-labels.test.ts +0 -3
  65. package/tests/views/__snapshots__/profile.test.ts.snap +230 -10
  66. package/tests/views/blocks.test.ts +13 -0
  67. package/tests/views/profile.test.ts +35 -0
@@ -4107,6 +4107,29 @@ export const schemaDict = {
4107
4107
  type: 'string',
4108
4108
  format: 'at-uri',
4109
4109
  },
4110
+ knownFollowers: {
4111
+ type: 'ref',
4112
+ ref: 'lex:app.bsky.actor.defs#knownFollowers',
4113
+ },
4114
+ },
4115
+ },
4116
+ knownFollowers: {
4117
+ type: 'object',
4118
+ description: "The subject's followers whom you also follow",
4119
+ required: ['count', 'followers'],
4120
+ properties: {
4121
+ count: {
4122
+ type: 'integer',
4123
+ },
4124
+ followers: {
4125
+ type: 'array',
4126
+ minLength: 0,
4127
+ maxLength: 5,
4128
+ items: {
4129
+ type: 'ref',
4130
+ ref: 'lex:app.bsky.actor.defs#profileViewBasic',
4131
+ },
4132
+ },
4110
4133
  },
4111
4134
  },
4112
4135
  preferences: {
@@ -7101,6 +7124,59 @@ export const schemaDict = {
7101
7124
  },
7102
7125
  },
7103
7126
  },
7127
+ AppBskyGraphGetKnownFollowers: {
7128
+ lexicon: 1,
7129
+ id: 'app.bsky.graph.getKnownFollowers',
7130
+ defs: {
7131
+ main: {
7132
+ type: 'query',
7133
+ description:
7134
+ 'Enumerates accounts which follow a specified account (actor) and are followed by the viewer.',
7135
+ parameters: {
7136
+ type: 'params',
7137
+ required: ['actor'],
7138
+ properties: {
7139
+ actor: {
7140
+ type: 'string',
7141
+ format: 'at-identifier',
7142
+ },
7143
+ limit: {
7144
+ type: 'integer',
7145
+ minimum: 1,
7146
+ maximum: 100,
7147
+ default: 50,
7148
+ },
7149
+ cursor: {
7150
+ type: 'string',
7151
+ },
7152
+ },
7153
+ },
7154
+ output: {
7155
+ encoding: 'application/json',
7156
+ schema: {
7157
+ type: 'object',
7158
+ required: ['subject', 'followers'],
7159
+ properties: {
7160
+ subject: {
7161
+ type: 'ref',
7162
+ ref: 'lex:app.bsky.actor.defs#profileView',
7163
+ },
7164
+ cursor: {
7165
+ type: 'string',
7166
+ },
7167
+ followers: {
7168
+ type: 'array',
7169
+ items: {
7170
+ type: 'ref',
7171
+ ref: 'lex:app.bsky.actor.defs#profileView',
7172
+ },
7173
+ },
7174
+ },
7175
+ },
7176
+ },
7177
+ },
7178
+ },
7179
+ },
7104
7180
  AppBskyGraphGetList: {
7105
7181
  lexicon: 1,
7106
7182
  id: 'app.bsky.graph.getList',
@@ -9523,6 +9599,7 @@ export const ids = {
9523
9599
  AppBskyGraphGetBlocks: 'app.bsky.graph.getBlocks',
9524
9600
  AppBskyGraphGetFollowers: 'app.bsky.graph.getFollowers',
9525
9601
  AppBskyGraphGetFollows: 'app.bsky.graph.getFollows',
9602
+ AppBskyGraphGetKnownFollowers: 'app.bsky.graph.getKnownFollowers',
9526
9603
  AppBskyGraphGetList: 'app.bsky.graph.getList',
9527
9604
  AppBskyGraphGetListBlocks: 'app.bsky.graph.getListBlocks',
9528
9605
  AppBskyGraphGetListMutes: 'app.bsky.graph.getListMutes',
@@ -133,6 +133,7 @@ export interface ViewerState {
133
133
  blockingByList?: AppBskyGraphDefs.ListViewBasic
134
134
  following?: string
135
135
  followedBy?: string
136
+ knownFollowers?: KnownFollowers
136
137
  [k: string]: unknown
137
138
  }
138
139
 
@@ -148,6 +149,25 @@ export function validateViewerState(v: unknown): ValidationResult {
148
149
  return lexicons.validate('app.bsky.actor.defs#viewerState', v)
149
150
  }
150
151
 
152
+ /** The subject's followers whom you also follow */
153
+ export interface KnownFollowers {
154
+ count: number
155
+ followers: ProfileViewBasic[]
156
+ [k: string]: unknown
157
+ }
158
+
159
+ export function isKnownFollowers(v: unknown): v is KnownFollowers {
160
+ return (
161
+ isObj(v) &&
162
+ hasProp(v, '$type') &&
163
+ v.$type === 'app.bsky.actor.defs#knownFollowers'
164
+ )
165
+ }
166
+
167
+ export function validateKnownFollowers(v: unknown): ValidationResult {
168
+ return lexicons.validate('app.bsky.actor.defs#knownFollowers', v)
169
+ }
170
+
151
171
  export type Preferences = (
152
172
  | AdultContentPref
153
173
  | ContentLabelPref
@@ -0,0 +1,50 @@
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 AppBskyActorDefs from '../actor/defs'
11
+
12
+ export interface QueryParams {
13
+ actor: string
14
+ limit: number
15
+ cursor?: string
16
+ }
17
+
18
+ export type InputSchema = undefined
19
+
20
+ export interface OutputSchema {
21
+ subject: AppBskyActorDefs.ProfileView
22
+ cursor?: string
23
+ followers: AppBskyActorDefs.ProfileView[]
24
+ [k: string]: unknown
25
+ }
26
+
27
+ export type HandlerInput = undefined
28
+
29
+ export interface HandlerSuccess {
30
+ encoding: 'application/json'
31
+ body: OutputSchema
32
+ headers?: { [key: string]: string }
33
+ }
34
+
35
+ export interface HandlerError {
36
+ status: number
37
+ message?: string
38
+ }
39
+
40
+ export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough
41
+ export type HandlerReqCtx<HA extends HandlerAuth = never> = {
42
+ auth: HA
43
+ params: QueryParams
44
+ input: HandlerInput
45
+ req: express.Request
46
+ res: express.Response
47
+ }
48
+ export type Handler<HA extends HandlerAuth = never> = (
49
+ ctx: HandlerReqCtx<HA>,
50
+ ) => Promise<HandlerOutput> | HandlerOutput
package/src/logger.ts CHANGED
@@ -12,6 +12,8 @@ export const subLogger: ReturnType<typeof subsystemLogger> =
12
12
  subsystemLogger('bsky:sub')
13
13
  export const labelerLogger: ReturnType<typeof subsystemLogger> =
14
14
  subsystemLogger('bsky:labeler')
15
+ export const hydrationLogger: ReturnType<typeof subsystemLogger> =
16
+ subsystemLogger('bsky:hydration')
15
17
  export const httpLogger: ReturnType<typeof subsystemLogger> =
16
18
  subsystemLogger('bsky')
17
19
 
@@ -9820,9 +9820,9 @@ export class GetFollowsFollowingRequest extends Message<GetFollowsFollowingReque
9820
9820
  actorDid = ''
9821
9821
 
9822
9822
  /**
9823
- * @generated from field: string target_did = 2;
9823
+ * @generated from field: repeated string target_dids = 2;
9824
9824
  */
9825
- targetDid = ''
9825
+ targetDids: string[] = []
9826
9826
 
9827
9827
  constructor(data?: PartialMessage<GetFollowsFollowingRequest>) {
9828
9828
  super()
@@ -9833,7 +9833,13 @@ export class GetFollowsFollowingRequest extends Message<GetFollowsFollowingReque
9833
9833
  static readonly typeName = 'bsky.GetFollowsFollowingRequest'
9834
9834
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
9835
9835
  { no: 1, name: 'actor_did', kind: 'scalar', T: 9 /* ScalarType.STRING */ },
9836
- { no: 2, name: 'target_did', kind: 'scalar', T: 9 /* ScalarType.STRING */ },
9836
+ {
9837
+ no: 2,
9838
+ name: 'target_dids',
9839
+ kind: 'scalar',
9840
+ T: 9 /* ScalarType.STRING */,
9841
+ repeated: true,
9842
+ },
9837
9843
  ])
9838
9844
 
9839
9845
  static fromBinary(
@@ -9871,14 +9877,75 @@ export class GetFollowsFollowingRequest extends Message<GetFollowsFollowingReque
9871
9877
  }
9872
9878
  }
9873
9879
 
9880
+ /**
9881
+ * @generated from message bsky.FollowsFollowing
9882
+ */
9883
+ export class FollowsFollowing extends Message<FollowsFollowing> {
9884
+ /**
9885
+ * @generated from field: string target_did = 1;
9886
+ */
9887
+ targetDid = ''
9888
+
9889
+ /**
9890
+ * @generated from field: repeated string dids = 2;
9891
+ */
9892
+ dids: string[] = []
9893
+
9894
+ constructor(data?: PartialMessage<FollowsFollowing>) {
9895
+ super()
9896
+ proto3.util.initPartial(data, this)
9897
+ }
9898
+
9899
+ static readonly runtime: typeof proto3 = proto3
9900
+ static readonly typeName = 'bsky.FollowsFollowing'
9901
+ static readonly fields: FieldList = proto3.util.newFieldList(() => [
9902
+ { no: 1, name: 'target_did', kind: 'scalar', T: 9 /* ScalarType.STRING */ },
9903
+ {
9904
+ no: 2,
9905
+ name: 'dids',
9906
+ kind: 'scalar',
9907
+ T: 9 /* ScalarType.STRING */,
9908
+ repeated: true,
9909
+ },
9910
+ ])
9911
+
9912
+ static fromBinary(
9913
+ bytes: Uint8Array,
9914
+ options?: Partial<BinaryReadOptions>,
9915
+ ): FollowsFollowing {
9916
+ return new FollowsFollowing().fromBinary(bytes, options)
9917
+ }
9918
+
9919
+ static fromJson(
9920
+ jsonValue: JsonValue,
9921
+ options?: Partial<JsonReadOptions>,
9922
+ ): FollowsFollowing {
9923
+ return new FollowsFollowing().fromJson(jsonValue, options)
9924
+ }
9925
+
9926
+ static fromJsonString(
9927
+ jsonString: string,
9928
+ options?: Partial<JsonReadOptions>,
9929
+ ): FollowsFollowing {
9930
+ return new FollowsFollowing().fromJsonString(jsonString, options)
9931
+ }
9932
+
9933
+ static equals(
9934
+ a: FollowsFollowing | PlainMessage<FollowsFollowing> | undefined,
9935
+ b: FollowsFollowing | PlainMessage<FollowsFollowing> | undefined,
9936
+ ): boolean {
9937
+ return proto3.util.equals(FollowsFollowing, a, b)
9938
+ }
9939
+ }
9940
+
9874
9941
  /**
9875
9942
  * @generated from message bsky.GetFollowsFollowingResponse
9876
9943
  */
9877
9944
  export class GetFollowsFollowingResponse extends Message<GetFollowsFollowingResponse> {
9878
9945
  /**
9879
- * @generated from field: repeated string dids = 1;
9946
+ * @generated from field: repeated bsky.FollowsFollowing results = 1;
9880
9947
  */
9881
- dids: string[] = []
9948
+ results: FollowsFollowing[] = []
9882
9949
 
9883
9950
  constructor(data?: PartialMessage<GetFollowsFollowingResponse>) {
9884
9951
  super()
@@ -9890,9 +9957,9 @@ export class GetFollowsFollowingResponse extends Message<GetFollowsFollowingResp
9890
9957
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
9891
9958
  {
9892
9959
  no: 1,
9893
- name: 'dids',
9894
- kind: 'scalar',
9895
- T: 9 /* ScalarType.STRING */,
9960
+ name: 'results',
9961
+ kind: 'message',
9962
+ T: FollowsFollowing,
9896
9963
  repeated: true,
9897
9964
  },
9898
9965
  ])
@@ -2,6 +2,7 @@ import { AtUri, INVALID_HANDLE, normalizeDatetimeAlways } from '@atproto/syntax'
2
2
  import { mapDefined } from '@atproto/common'
3
3
  import { ImageUriBuilder } from '../image/uri'
4
4
  import { HydrationState } from '../hydration/hydrator'
5
+ import { ProfileViewerState as HydratorProfileViewerState } from '../hydration/actor'
5
6
  import { ids } from '../lexicon/lexicons'
6
7
  import {
7
8
  ProfileViewDetailed,
@@ -107,9 +108,19 @@ export class Views {
107
108
  if (!actor) return
108
109
  const baseView = this.profile(did, state)
109
110
  if (!baseView) return
111
+ const knownFollowersSkeleton = state.knownFollowers?.get(did)
112
+ const knownFollowers = knownFollowersSkeleton
113
+ ? this.knownFollowers(knownFollowersSkeleton, state)
114
+ : undefined
110
115
  const profileAggs = state.profileAggs?.get(did)
111
116
  return {
112
117
  ...baseView,
118
+ viewer: baseView.viewer
119
+ ? {
120
+ ...baseView.viewer,
121
+ knownFollowers,
122
+ }
123
+ : undefined,
113
124
  banner: actor.profile?.banner
114
125
  ? this.imgUriBuilder.getPresetUri(
115
126
  'banner',
@@ -216,6 +227,19 @@ export class Views {
216
227
  }
217
228
  }
218
229
 
230
+ knownFollowers(
231
+ knownFollowers: Required<HydratorProfileViewerState>['knownFollowers'],
232
+ state: HydrationState,
233
+ ) {
234
+ const followers = mapDefined(knownFollowers.followers, (did) => {
235
+ if (this.viewerBlockExists(did, state)) {
236
+ return undefined
237
+ }
238
+ return this.profileBasic(did, state)
239
+ })
240
+ return { count: knownFollowers.count, followers }
241
+ }
242
+
219
243
  blockedProfileViewer(
220
244
  did: string,
221
245
  state: HydrationState,
@@ -18,6 +18,24 @@ Array [
18
18
  "postsCount": 5,
19
19
  "viewer": Object {
20
20
  "blockedBy": false,
21
+ "knownFollowers": Object {
22
+ "count": 1,
23
+ "followers": Array [
24
+ Object {
25
+ "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(0)@jpeg",
26
+ "did": "user(1)",
27
+ "displayName": "bobby",
28
+ "handle": "bob.test",
29
+ "labels": Array [],
30
+ "viewer": Object {
31
+ "blockedBy": false,
32
+ "followedBy": "record(1)",
33
+ "following": "record(0)",
34
+ "muted": false,
35
+ },
36
+ },
37
+ ],
38
+ },
21
39
  "muted": false,
22
40
  },
23
41
  },
@@ -35,7 +53,7 @@ Array [
35
53
  "muted": false,
36
54
  },
37
55
  },
38
- "cid": "cids(0)",
56
+ "cid": "cids(1)",
39
57
  "indexedAt": "1970-01-01T00:00:00.000Z",
40
58
  "labels": Array [],
41
59
  "likeCount": 0,
@@ -46,7 +64,7 @@ Array [
46
64
  },
47
65
  "replyCount": 0,
48
66
  "repostCount": 0,
49
- "uri": "record(0)",
67
+ "uri": "record(2)",
50
68
  "viewer": Object {},
51
69
  },
52
70
  },
@@ -61,7 +79,7 @@ Array [
61
79
  "muted": false,
62
80
  },
63
81
  },
64
- "cid": "cids(1)",
82
+ "cid": "cids(2)",
65
83
  "indexedAt": "1970-01-01T00:00:00.000Z",
66
84
  "labels": Array [],
67
85
  "likeCount": 0,
@@ -70,19 +88,19 @@ Array [
70
88
  "createdAt": "1970-01-01T00:00:00.000Z",
71
89
  "reply": Object {
72
90
  "parent": Object {
73
- "cid": "cids(3)",
74
- "uri": "record(3)",
91
+ "cid": "cids(4)",
92
+ "uri": "record(5)",
75
93
  },
76
94
  "root": Object {
77
- "cid": "cids(2)",
78
- "uri": "record(2)",
95
+ "cid": "cids(3)",
96
+ "uri": "record(4)",
79
97
  },
80
98
  },
81
99
  "text": "thanks bob",
82
100
  },
83
101
  "replyCount": 0,
84
102
  "repostCount": 1,
85
- "uri": "record(1)",
103
+ "uri": "record(3)",
86
104
  "viewer": Object {},
87
105
  },
88
106
  "reply": Object {
@@ -98,19 +116,19 @@ Array [
98
116
  "parent": Object {
99
117
  "$type": "app.bsky.feed.defs#postView",
100
118
  "author": Object {
101
- "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(4)@jpeg",
119
+ "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(0)@jpeg",
102
120
  "did": "user(1)",
103
121
  "displayName": "bobby",
104
122
  "handle": "bob.test",
105
123
  "labels": Array [],
106
124
  "viewer": Object {
107
125
  "blockedBy": false,
108
- "followedBy": "record(5)",
109
- "following": "record(4)",
126
+ "followedBy": "record(1)",
127
+ "following": "record(0)",
110
128
  "muted": false,
111
129
  },
112
130
  },
113
- "cid": "cids(3)",
131
+ "cid": "cids(4)",
114
132
  "embed": Object {
115
133
  "$type": "app.bsky.embed.images#view",
116
134
  "images": Array [
@@ -124,17 +142,17 @@ Array [
124
142
  "indexedAt": "1970-01-01T00:00:00.000Z",
125
143
  "labels": Array [
126
144
  Object {
127
- "cid": "cids(3)",
145
+ "cid": "cids(4)",
128
146
  "cts": "1970-01-01T00:00:00.000Z",
129
147
  "src": "did:example:labeler",
130
- "uri": "record(3)",
148
+ "uri": "record(5)",
131
149
  "val": "test-label",
132
150
  },
133
151
  Object {
134
- "cid": "cids(3)",
152
+ "cid": "cids(4)",
135
153
  "cts": "1970-01-01T00:00:00.000Z",
136
154
  "src": "did:example:labeler",
137
- "uri": "record(3)",
155
+ "uri": "record(5)",
138
156
  "val": "test-label-2",
139
157
  },
140
158
  ],
@@ -160,19 +178,19 @@ Array [
160
178
  },
161
179
  "reply": Object {
162
180
  "parent": Object {
163
- "cid": "cids(2)",
164
- "uri": "record(2)",
181
+ "cid": "cids(3)",
182
+ "uri": "record(4)",
165
183
  },
166
184
  "root": Object {
167
- "cid": "cids(2)",
168
- "uri": "record(2)",
185
+ "cid": "cids(3)",
186
+ "uri": "record(4)",
169
187
  },
170
188
  },
171
189
  "text": "hear that label_me label_me_2",
172
190
  },
173
191
  "replyCount": 1,
174
192
  "repostCount": 0,
175
- "uri": "record(3)",
193
+ "uri": "record(5)",
176
194
  "viewer": Object {},
177
195
  },
178
196
  "root": Object {
@@ -186,7 +204,7 @@ Array [
186
204
  "muted": false,
187
205
  },
188
206
  },
189
- "cid": "cids(2)",
207
+ "cid": "cids(3)",
190
208
  "indexedAt": "1970-01-01T00:00:00.000Z",
191
209
  "labels": Array [],
192
210
  "likeCount": 3,
@@ -197,7 +215,7 @@ Array [
197
215
  },
198
216
  "replyCount": 2,
199
217
  "repostCount": 1,
200
- "uri": "record(2)",
218
+ "uri": "record(4)",
201
219
  "viewer": Object {},
202
220
  },
203
221
  },
@@ -374,7 +392,7 @@ Array [
374
392
  "muted": false,
375
393
  },
376
394
  },
377
- "cid": "cids(2)",
395
+ "cid": "cids(3)",
378
396
  "indexedAt": "1970-01-01T00:00:00.000Z",
379
397
  "labels": Array [],
380
398
  "likeCount": 3,
@@ -385,7 +403,7 @@ Array [
385
403
  },
386
404
  "replyCount": 2,
387
405
  "repostCount": 1,
388
- "uri": "record(2)",
406
+ "uri": "record(4)",
389
407
  "viewer": Object {},
390
408
  },
391
409
  },
@@ -452,7 +470,7 @@ Array [
452
470
  },
453
471
  },
454
472
  Object {
455
- "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(4)@jpeg",
473
+ "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(0)@jpeg",
456
474
  "description": "hi im bob label_me",
457
475
  "did": "user(1)",
458
476
  "displayName": "bobby",
@@ -461,8 +479,8 @@ Array [
461
479
  "labels": Array [],
462
480
  "viewer": Object {
463
481
  "blockedBy": false,
464
- "followedBy": "record(5)",
465
- "following": "record(4)",
482
+ "followedBy": "record(1)",
483
+ "following": "record(0)",
466
484
  "muted": false,
467
485
  },
468
486
  },
@@ -4,7 +4,6 @@ import axios from 'axios'
4
4
 
5
5
  describe('label hydration', () => {
6
6
  let network: TestNetwork
7
- let agent: AtpAgent
8
7
  let pdsAgent: AtpAgent
9
8
  let sc: SeedClient
10
9
 
@@ -17,7 +16,6 @@ describe('label hydration', () => {
17
16
  network = await TestNetwork.create({
18
17
  dbPostgresSchema: 'bsky_label_hydration',
19
18
  })
20
- agent = network.bsky.getClient()
21
19
  pdsAgent = network.pds.getClient()
22
20
  sc = network.getSeedClient()
23
21
  await basicSeed(sc)
@@ -1,10 +1,8 @@
1
1
  import { AtpAgent } from '@atproto/api'
2
2
  import { TestNetwork, SeedClient, basicSeed } from '@atproto/dev-env'
3
- import axios from 'axios'
4
3
 
5
4
  describe('label hydration', () => {
6
5
  let network: TestNetwork
7
- let agent: AtpAgent
8
6
  let pdsAgent: AtpAgent
9
7
  let sc: SeedClient
10
8
 
@@ -17,7 +15,6 @@ describe('label hydration', () => {
17
15
  network = await TestNetwork.create({
18
16
  dbPostgresSchema: 'bsky_label_hydration',
19
17
  })
20
- agent = network.bsky.getClient()
21
18
  pdsAgent = network.pds.getClient()
22
19
  sc = network.getSeedClient()
23
20
  await basicSeed(sc)