+677
-13
lexicons/app/bsky/actor/defs.json
+677
-13
lexicons/app/bsky/actor/defs.json
···
2
"lexicon": 1,
3
"id": "app.bsky.actor.defs",
4
"defs": {
5
"profileView": {
6
"type": "object",
7
-
"required": ["did", "handle"],
8
"properties": {
9
-
"did": { "type": "string", "format": "did" },
10
-
"handle": { "type": "string", "format": "handle" },
11
"displayName": {
12
"type": "string",
13
-
"maxGraphemes": 64,
14
-
"maxLength": 640
15
},
16
-
"description": {
17
"type": "string",
18
-
"maxGraphemes": 256,
19
-
"maxLength": 2560
20
},
21
-
"avatar": { "type": "string", "format": "uri" },
22
-
"indexedAt": { "type": "string", "format": "datetime" },
23
-
"createdAt": { "type": "string", "format": "datetime" },
24
"labels": {
25
"type": "array",
26
-
"items": { "type": "ref", "ref": "com.atproto.label.defs#label" }
27
}
28
}
29
}
30
}
31
-
}
···
2
"lexicon": 1,
3
"id": "app.bsky.actor.defs",
4
"defs": {
5
+
"nux": {
6
+
"type": "object",
7
+
"required": [
8
+
"id",
9
+
"completed"
10
+
],
11
+
"properties": {
12
+
"id": {
13
+
"type": "string",
14
+
"maxLength": 100
15
+
},
16
+
"data": {
17
+
"type": "string",
18
+
"maxLength": 3000,
19
+
"description": "Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters.",
20
+
"maxGraphemes": 300
21
+
},
22
+
"completed": {
23
+
"type": "boolean",
24
+
"default": false
25
+
},
26
+
"expiresAt": {
27
+
"type": "string",
28
+
"format": "datetime",
29
+
"description": "The date and time at which the NUX will expire and should be considered completed."
30
+
}
31
+
},
32
+
"description": "A new user experiences (NUX) storage object"
33
+
},
34
+
"mutedWord": {
35
+
"type": "object",
36
+
"required": [
37
+
"value",
38
+
"targets"
39
+
],
40
+
"properties": {
41
+
"id": {
42
+
"type": "string"
43
+
},
44
+
"value": {
45
+
"type": "string",
46
+
"maxLength": 10000,
47
+
"description": "The muted word itself.",
48
+
"maxGraphemes": 1000
49
+
},
50
+
"targets": {
51
+
"type": "array",
52
+
"items": {
53
+
"ref": "app.bsky.actor.defs#mutedWordTarget",
54
+
"type": "ref"
55
+
},
56
+
"description": "The intended targets of the muted word."
57
+
},
58
+
"expiresAt": {
59
+
"type": "string",
60
+
"format": "datetime",
61
+
"description": "The date and time at which the muted word will expire and no longer be applied."
62
+
},
63
+
"actorTarget": {
64
+
"type": "string",
65
+
"default": "all",
66
+
"description": "Groups of users to apply the muted word to. If undefined, applies to all users.",
67
+
"knownValues": [
68
+
"all",
69
+
"exclude-following"
70
+
]
71
+
}
72
+
},
73
+
"description": "A word that the account owner has muted."
74
+
},
75
+
"savedFeed": {
76
+
"type": "object",
77
+
"required": [
78
+
"id",
79
+
"type",
80
+
"value",
81
+
"pinned"
82
+
],
83
+
"properties": {
84
+
"id": {
85
+
"type": "string"
86
+
},
87
+
"type": {
88
+
"type": "string",
89
+
"knownValues": [
90
+
"feed",
91
+
"list",
92
+
"timeline"
93
+
]
94
+
},
95
+
"value": {
96
+
"type": "string"
97
+
},
98
+
"pinned": {
99
+
"type": "boolean"
100
+
}
101
+
}
102
+
},
103
+
"preferences": {
104
+
"type": "array",
105
+
"items": {
106
+
"refs": [
107
+
"#adultContentPref",
108
+
"#contentLabelPref",
109
+
"#savedFeedsPref",
110
+
"#savedFeedsPrefV2",
111
+
"#personalDetailsPref",
112
+
"#feedViewPref",
113
+
"#threadViewPref",
114
+
"#interestsPref",
115
+
"#mutedWordsPref",
116
+
"#hiddenPostsPref",
117
+
"#bskyAppStatePref",
118
+
"#labelersPref",
119
+
"#postInteractionSettingsPref"
120
+
],
121
+
"type": "union"
122
+
}
123
+
},
124
"profileView": {
125
"type": "object",
126
+
"required": [
127
+
"did",
128
+
"handle"
129
+
],
130
"properties": {
131
+
"did": {
132
+
"type": "string",
133
+
"format": "did"
134
+
},
135
+
"avatar": {
136
+
"type": "string",
137
+
"format": "uri"
138
+
},
139
+
"handle": {
140
+
"type": "string",
141
+
"format": "handle"
142
+
},
143
+
"labels": {
144
+
"type": "array",
145
+
"items": {
146
+
"ref": "com.atproto.label.defs#label",
147
+
"type": "ref"
148
+
}
149
+
},
150
+
"viewer": {
151
+
"ref": "#viewerState",
152
+
"type": "ref"
153
+
},
154
+
"createdAt": {
155
+
"type": "string",
156
+
"format": "datetime"
157
+
},
158
+
"indexedAt": {
159
+
"type": "string",
160
+
"format": "datetime"
161
+
},
162
+
"associated": {
163
+
"ref": "#profileAssociated",
164
+
"type": "ref"
165
+
},
166
+
"description": {
167
+
"type": "string",
168
+
"maxLength": 2560,
169
+
"maxGraphemes": 256
170
+
},
171
"displayName": {
172
"type": "string",
173
+
"maxLength": 640,
174
+
"maxGraphemes": 64
175
+
}
176
+
}
177
+
},
178
+
"viewerState": {
179
+
"type": "object",
180
+
"properties": {
181
+
"muted": {
182
+
"type": "boolean"
183
},
184
+
"blocking": {
185
"type": "string",
186
+
"format": "at-uri"
187
+
},
188
+
"blockedBy": {
189
+
"type": "boolean"
190
+
},
191
+
"following": {
192
+
"type": "string",
193
+
"format": "at-uri"
194
+
},
195
+
"followedBy": {
196
+
"type": "string",
197
+
"format": "at-uri"
198
+
},
199
+
"mutedByList": {
200
+
"ref": "app.bsky.graph.defs#listViewBasic",
201
+
"type": "ref"
202
+
},
203
+
"blockingByList": {
204
+
"ref": "app.bsky.graph.defs#listViewBasic",
205
+
"type": "ref"
206
},
207
+
"knownFollowers": {
208
+
"ref": "#knownFollowers",
209
+
"type": "ref"
210
+
}
211
+
},
212
+
"description": "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests."
213
+
},
214
+
"feedViewPref": {
215
+
"type": "object",
216
+
"required": [
217
+
"feed"
218
+
],
219
+
"properties": {
220
+
"feed": {
221
+
"type": "string",
222
+
"description": "The URI of the feed, or an identifier which describes the feed."
223
+
},
224
+
"hideReplies": {
225
+
"type": "boolean",
226
+
"description": "Hide replies in the feed."
227
+
},
228
+
"hideReposts": {
229
+
"type": "boolean",
230
+
"description": "Hide reposts in the feed."
231
+
},
232
+
"hideQuotePosts": {
233
+
"type": "boolean",
234
+
"description": "Hide quote posts in the feed."
235
+
},
236
+
"hideRepliesByLikeCount": {
237
+
"type": "integer",
238
+
"description": "Hide replies in the feed if they do not have this number of likes."
239
+
},
240
+
"hideRepliesByUnfollowed": {
241
+
"type": "boolean",
242
+
"default": true,
243
+
"description": "Hide replies in the feed if they are not by followed users."
244
+
}
245
+
}
246
+
},
247
+
"labelersPref": {
248
+
"type": "object",
249
+
"required": [
250
+
"labelers"
251
+
],
252
+
"properties": {
253
+
"labelers": {
254
+
"type": "array",
255
+
"items": {
256
+
"ref": "#labelerPrefItem",
257
+
"type": "ref"
258
+
}
259
+
}
260
+
}
261
+
},
262
+
"interestsPref": {
263
+
"type": "object",
264
+
"required": [
265
+
"tags"
266
+
],
267
+
"properties": {
268
+
"tags": {
269
+
"type": "array",
270
+
"items": {
271
+
"type": "string",
272
+
"maxLength": 640,
273
+
"maxGraphemes": 64
274
+
},
275
+
"maxLength": 100,
276
+
"description": "A list of tags which describe the account owner's interests gathered during onboarding."
277
+
}
278
+
}
279
+
},
280
+
"knownFollowers": {
281
+
"type": "object",
282
+
"required": [
283
+
"count",
284
+
"followers"
285
+
],
286
+
"properties": {
287
+
"count": {
288
+
"type": "integer"
289
+
},
290
+
"followers": {
291
+
"type": "array",
292
+
"items": {
293
+
"ref": "#profileViewBasic",
294
+
"type": "ref"
295
+
},
296
+
"maxLength": 5,
297
+
"minLength": 0
298
+
}
299
+
},
300
+
"description": "The subject's followers whom you also follow"
301
+
},
302
+
"mutedWordsPref": {
303
+
"type": "object",
304
+
"required": [
305
+
"items"
306
+
],
307
+
"properties": {
308
+
"items": {
309
+
"type": "array",
310
+
"items": {
311
+
"ref": "app.bsky.actor.defs#mutedWord",
312
+
"type": "ref"
313
+
},
314
+
"description": "A list of words the account owner has muted."
315
+
}
316
+
}
317
+
},
318
+
"savedFeedsPref": {
319
+
"type": "object",
320
+
"required": [
321
+
"pinned",
322
+
"saved"
323
+
],
324
+
"properties": {
325
+
"saved": {
326
+
"type": "array",
327
+
"items": {
328
+
"type": "string",
329
+
"format": "at-uri"
330
+
}
331
+
},
332
+
"pinned": {
333
+
"type": "array",
334
+
"items": {
335
+
"type": "string",
336
+
"format": "at-uri"
337
+
}
338
+
},
339
+
"timelineIndex": {
340
+
"type": "integer"
341
+
}
342
+
}
343
+
},
344
+
"threadViewPref": {
345
+
"type": "object",
346
+
"properties": {
347
+
"sort": {
348
+
"type": "string",
349
+
"description": "Sorting mode for threads.",
350
+
"knownValues": [
351
+
"oldest",
352
+
"newest",
353
+
"most-likes",
354
+
"random",
355
+
"hotness"
356
+
]
357
+
},
358
+
"prioritizeFollowedUsers": {
359
+
"type": "boolean",
360
+
"description": "Show followed users at the top of all replies."
361
+
}
362
+
}
363
+
},
364
+
"hiddenPostsPref": {
365
+
"type": "object",
366
+
"required": [
367
+
"items"
368
+
],
369
+
"properties": {
370
+
"items": {
371
+
"type": "array",
372
+
"items": {
373
+
"type": "string",
374
+
"format": "at-uri"
375
+
},
376
+
"description": "A list of URIs of posts the account owner has hidden."
377
+
}
378
+
}
379
+
},
380
+
"labelerPrefItem": {
381
+
"type": "object",
382
+
"required": [
383
+
"did"
384
+
],
385
+
"properties": {
386
+
"did": {
387
+
"type": "string",
388
+
"format": "did"
389
+
}
390
+
}
391
+
},
392
+
"mutedWordTarget": {
393
+
"type": "string",
394
+
"maxLength": 640,
395
+
"knownValues": [
396
+
"content",
397
+
"tag"
398
+
],
399
+
"maxGraphemes": 64
400
+
},
401
+
"adultContentPref": {
402
+
"type": "object",
403
+
"required": [
404
+
"enabled"
405
+
],
406
+
"properties": {
407
+
"enabled": {
408
+
"type": "boolean",
409
+
"default": false
410
+
}
411
+
}
412
+
},
413
+
"bskyAppStatePref": {
414
+
"type": "object",
415
+
"properties": {
416
+
"nuxs": {
417
+
"type": "array",
418
+
"items": {
419
+
"ref": "app.bsky.actor.defs#nux",
420
+
"type": "ref"
421
+
},
422
+
"maxLength": 100,
423
+
"description": "Storage for NUXs the user has encountered."
424
+
},
425
+
"queuedNudges": {
426
+
"type": "array",
427
+
"items": {
428
+
"type": "string",
429
+
"maxLength": 100
430
+
},
431
+
"maxLength": 1000,
432
+
"description": "An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user."
433
+
},
434
+
"activeProgressGuide": {
435
+
"ref": "#bskyAppProgressGuide",
436
+
"type": "ref"
437
+
}
438
+
},
439
+
"description": "A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this."
440
+
},
441
+
"contentLabelPref": {
442
+
"type": "object",
443
+
"required": [
444
+
"label",
445
+
"visibility"
446
+
],
447
+
"properties": {
448
+
"label": {
449
+
"type": "string"
450
+
},
451
+
"labelerDid": {
452
+
"type": "string",
453
+
"format": "did",
454
+
"description": "Which labeler does this preference apply to? If undefined, applies globally."
455
+
},
456
+
"visibility": {
457
+
"type": "string",
458
+
"knownValues": [
459
+
"ignore",
460
+
"show",
461
+
"warn",
462
+
"hide"
463
+
]
464
+
}
465
+
}
466
+
},
467
+
"profileViewBasic": {
468
+
"type": "object",
469
+
"required": [
470
+
"did",
471
+
"handle"
472
+
],
473
+
"properties": {
474
+
"did": {
475
+
"type": "string",
476
+
"format": "did"
477
+
},
478
+
"avatar": {
479
+
"type": "string",
480
+
"format": "uri"
481
+
},
482
+
"handle": {
483
+
"type": "string",
484
+
"format": "handle"
485
+
},
486
"labels": {
487
"type": "array",
488
+
"items": {
489
+
"ref": "com.atproto.label.defs#label",
490
+
"type": "ref"
491
+
}
492
+
},
493
+
"viewer": {
494
+
"ref": "#viewerState",
495
+
"type": "ref"
496
+
},
497
+
"createdAt": {
498
+
"type": "string",
499
+
"format": "datetime"
500
+
},
501
+
"associated": {
502
+
"ref": "#profileAssociated",
503
+
"type": "ref"
504
+
},
505
+
"displayName": {
506
+
"type": "string",
507
+
"maxLength": 640,
508
+
"maxGraphemes": 64
509
+
}
510
+
}
511
+
},
512
+
"savedFeedsPrefV2": {
513
+
"type": "object",
514
+
"required": [
515
+
"items"
516
+
],
517
+
"properties": {
518
+
"items": {
519
+
"type": "array",
520
+
"items": {
521
+
"ref": "app.bsky.actor.defs#savedFeed",
522
+
"type": "ref"
523
+
}
524
+
}
525
+
}
526
+
},
527
+
"profileAssociated": {
528
+
"type": "object",
529
+
"properties": {
530
+
"chat": {
531
+
"ref": "#profileAssociatedChat",
532
+
"type": "ref"
533
+
},
534
+
"lists": {
535
+
"type": "integer"
536
+
},
537
+
"labeler": {
538
+
"type": "boolean"
539
+
},
540
+
"feedgens": {
541
+
"type": "integer"
542
+
},
543
+
"starterPacks": {
544
+
"type": "integer"
545
+
}
546
+
}
547
+
},
548
+
"personalDetailsPref": {
549
+
"type": "object",
550
+
"properties": {
551
+
"birthDate": {
552
+
"type": "string",
553
+
"format": "datetime",
554
+
"description": "The birth date of account owner."
555
}
556
}
557
+
},
558
+
"profileViewDetailed": {
559
+
"type": "object",
560
+
"required": [
561
+
"did",
562
+
"handle"
563
+
],
564
+
"properties": {
565
+
"did": {
566
+
"type": "string",
567
+
"format": "did"
568
+
},
569
+
"avatar": {
570
+
"type": "string",
571
+
"format": "uri"
572
+
},
573
+
"banner": {
574
+
"type": "string",
575
+
"format": "uri"
576
+
},
577
+
"handle": {
578
+
"type": "string",
579
+
"format": "handle"
580
+
},
581
+
"labels": {
582
+
"type": "array",
583
+
"items": {
584
+
"ref": "com.atproto.label.defs#label",
585
+
"type": "ref"
586
+
}
587
+
},
588
+
"viewer": {
589
+
"ref": "#viewerState",
590
+
"type": "ref"
591
+
},
592
+
"createdAt": {
593
+
"type": "string",
594
+
"format": "datetime"
595
+
},
596
+
"indexedAt": {
597
+
"type": "string",
598
+
"format": "datetime"
599
+
},
600
+
"associated": {
601
+
"ref": "#profileAssociated",
602
+
"type": "ref"
603
+
},
604
+
"pinnedPost": {
605
+
"ref": "com.atproto.repo.strongRef",
606
+
"type": "ref"
607
+
},
608
+
"postsCount": {
609
+
"type": "integer"
610
+
},
611
+
"description": {
612
+
"type": "string",
613
+
"maxLength": 2560,
614
+
"maxGraphemes": 256
615
+
},
616
+
"displayName": {
617
+
"type": "string",
618
+
"maxLength": 640,
619
+
"maxGraphemes": 64
620
+
},
621
+
"followsCount": {
622
+
"type": "integer"
623
+
},
624
+
"followersCount": {
625
+
"type": "integer"
626
+
},
627
+
"joinedViaStarterPack": {
628
+
"ref": "app.bsky.graph.defs#starterPackViewBasic",
629
+
"type": "ref"
630
+
}
631
+
}
632
+
},
633
+
"bskyAppProgressGuide": {
634
+
"type": "object",
635
+
"required": [
636
+
"guide"
637
+
],
638
+
"properties": {
639
+
"guide": {
640
+
"type": "string",
641
+
"maxLength": 100
642
+
}
643
+
},
644
+
"description": "If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress."
645
+
},
646
+
"profileAssociatedChat": {
647
+
"type": "object",
648
+
"required": [
649
+
"allowIncoming"
650
+
],
651
+
"properties": {
652
+
"allowIncoming": {
653
+
"type": "string",
654
+
"knownValues": [
655
+
"all",
656
+
"none",
657
+
"following"
658
+
]
659
+
}
660
+
}
661
+
},
662
+
"postInteractionSettingsPref": {
663
+
"type": "object",
664
+
"required": [],
665
+
"properties": {
666
+
"threadgateAllowRules": {
667
+
"type": "array",
668
+
"items": {
669
+
"refs": [
670
+
"app.bsky.feed.threadgate#mentionRule",
671
+
"app.bsky.feed.threadgate#followerRule",
672
+
"app.bsky.feed.threadgate#followingRule",
673
+
"app.bsky.feed.threadgate#listRule"
674
+
],
675
+
"type": "union"
676
+
},
677
+
"maxLength": 5,
678
+
"description": "Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply."
679
+
},
680
+
"postgateEmbeddingRules": {
681
+
"type": "array",
682
+
"items": {
683
+
"refs": [
684
+
"app.bsky.feed.postgate#disableRule"
685
+
],
686
+
"type": "union"
687
+
},
688
+
"maxLength": 5,
689
+
"description": "Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed."
690
+
}
691
+
},
692
+
"description": "Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly."
693
}
694
}
695
+
}
+24
lexicons/app/bsky/embed/defs.json
+24
lexicons/app/bsky/embed/defs.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.embed.defs",
4
+
"defs": {
5
+
"aspectRatio": {
6
+
"type": "object",
7
+
"required": [
8
+
"width",
9
+
"height"
10
+
],
11
+
"properties": {
12
+
"width": {
13
+
"type": "integer",
14
+
"minimum": 1
15
+
},
16
+
"height": {
17
+
"type": "integer",
18
+
"minimum": 1
19
+
}
20
+
},
21
+
"description": "width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit."
22
+
}
23
+
}
24
+
}
+82
lexicons/app/bsky/embed/external.json
+82
lexicons/app/bsky/embed/external.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.embed.external",
4
+
"defs": {
5
+
"main": {
6
+
"type": "object",
7
+
"required": [
8
+
"external"
9
+
],
10
+
"properties": {
11
+
"external": {
12
+
"ref": "#external",
13
+
"type": "ref"
14
+
}
15
+
},
16
+
"description": "A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post)."
17
+
},
18
+
"view": {
19
+
"type": "object",
20
+
"required": [
21
+
"external"
22
+
],
23
+
"properties": {
24
+
"external": {
25
+
"ref": "#viewExternal",
26
+
"type": "ref"
27
+
}
28
+
}
29
+
},
30
+
"external": {
31
+
"type": "object",
32
+
"required": [
33
+
"uri",
34
+
"title",
35
+
"description"
36
+
],
37
+
"properties": {
38
+
"uri": {
39
+
"type": "string",
40
+
"format": "uri"
41
+
},
42
+
"thumb": {
43
+
"type": "blob",
44
+
"accept": [
45
+
"image/*"
46
+
],
47
+
"maxSize": 1000000
48
+
},
49
+
"title": {
50
+
"type": "string"
51
+
},
52
+
"description": {
53
+
"type": "string"
54
+
}
55
+
}
56
+
},
57
+
"viewExternal": {
58
+
"type": "object",
59
+
"required": [
60
+
"uri",
61
+
"title",
62
+
"description"
63
+
],
64
+
"properties": {
65
+
"uri": {
66
+
"type": "string",
67
+
"format": "uri"
68
+
},
69
+
"thumb": {
70
+
"type": "string",
71
+
"format": "uri"
72
+
},
73
+
"title": {
74
+
"type": "string"
75
+
},
76
+
"description": {
77
+
"type": "string"
78
+
}
79
+
}
80
+
}
81
+
}
82
+
}
+91
lexicons/app/bsky/embed/images.json
+91
lexicons/app/bsky/embed/images.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.embed.images",
4
+
"description": "A set of images embedded in a Bluesky record (eg, a post).",
5
+
"defs": {
6
+
"main": {
7
+
"type": "object",
8
+
"required": [
9
+
"images"
10
+
],
11
+
"properties": {
12
+
"images": {
13
+
"type": "array",
14
+
"items": {
15
+
"ref": "#image",
16
+
"type": "ref"
17
+
},
18
+
"maxLength": 4
19
+
}
20
+
}
21
+
},
22
+
"view": {
23
+
"type": "object",
24
+
"required": [
25
+
"images"
26
+
],
27
+
"properties": {
28
+
"images": {
29
+
"type": "array",
30
+
"items": {
31
+
"ref": "#viewImage",
32
+
"type": "ref"
33
+
},
34
+
"maxLength": 4
35
+
}
36
+
}
37
+
},
38
+
"image": {
39
+
"type": "object",
40
+
"required": [
41
+
"image",
42
+
"alt"
43
+
],
44
+
"properties": {
45
+
"alt": {
46
+
"type": "string",
47
+
"description": "Alt text description of the image, for accessibility."
48
+
},
49
+
"image": {
50
+
"type": "blob",
51
+
"accept": [
52
+
"image/*"
53
+
],
54
+
"maxSize": 1000000
55
+
},
56
+
"aspectRatio": {
57
+
"ref": "app.bsky.embed.defs#aspectRatio",
58
+
"type": "ref"
59
+
}
60
+
}
61
+
},
62
+
"viewImage": {
63
+
"type": "object",
64
+
"required": [
65
+
"thumb",
66
+
"fullsize",
67
+
"alt"
68
+
],
69
+
"properties": {
70
+
"alt": {
71
+
"type": "string",
72
+
"description": "Alt text description of the image, for accessibility."
73
+
},
74
+
"thumb": {
75
+
"type": "string",
76
+
"format": "uri",
77
+
"description": "Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View."
78
+
},
79
+
"fullsize": {
80
+
"type": "string",
81
+
"format": "uri",
82
+
"description": "Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View."
83
+
},
84
+
"aspectRatio": {
85
+
"ref": "app.bsky.embed.defs#aspectRatio",
86
+
"type": "ref"
87
+
}
88
+
}
89
+
}
90
+
}
91
+
}
+160
lexicons/app/bsky/embed/record.json
+160
lexicons/app/bsky/embed/record.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.embed.record",
4
+
"description": "A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.",
5
+
"defs": {
6
+
"main": {
7
+
"type": "object",
8
+
"required": [
9
+
"record"
10
+
],
11
+
"properties": {
12
+
"record": {
13
+
"ref": "com.atproto.repo.strongRef",
14
+
"type": "ref"
15
+
}
16
+
}
17
+
},
18
+
"view": {
19
+
"type": "object",
20
+
"required": [
21
+
"record"
22
+
],
23
+
"properties": {
24
+
"record": {
25
+
"refs": [
26
+
"#viewRecord",
27
+
"#viewNotFound",
28
+
"#viewBlocked",
29
+
"#viewDetached",
30
+
"app.bsky.feed.defs#generatorView",
31
+
"app.bsky.graph.defs#listView",
32
+
"app.bsky.labeler.defs#labelerView",
33
+
"app.bsky.graph.defs#starterPackViewBasic"
34
+
],
35
+
"type": "union"
36
+
}
37
+
}
38
+
},
39
+
"viewRecord": {
40
+
"type": "object",
41
+
"required": [
42
+
"uri",
43
+
"cid",
44
+
"author",
45
+
"value",
46
+
"indexedAt"
47
+
],
48
+
"properties": {
49
+
"cid": {
50
+
"type": "string",
51
+
"format": "cid"
52
+
},
53
+
"uri": {
54
+
"type": "string",
55
+
"format": "at-uri"
56
+
},
57
+
"value": {
58
+
"type": "unknown",
59
+
"description": "The record data itself."
60
+
},
61
+
"author": {
62
+
"ref": "app.bsky.actor.defs#profileViewBasic",
63
+
"type": "ref"
64
+
},
65
+
"embeds": {
66
+
"type": "array",
67
+
"items": {
68
+
"refs": [
69
+
"app.bsky.embed.images#view",
70
+
"app.bsky.embed.video#view",
71
+
"app.bsky.embed.external#view",
72
+
"app.bsky.embed.record#view",
73
+
"app.bsky.embed.recordWithMedia#view"
74
+
],
75
+
"type": "union"
76
+
}
77
+
},
78
+
"labels": {
79
+
"type": "array",
80
+
"items": {
81
+
"ref": "com.atproto.label.defs#label",
82
+
"type": "ref"
83
+
}
84
+
},
85
+
"indexedAt": {
86
+
"type": "string",
87
+
"format": "datetime"
88
+
},
89
+
"likeCount": {
90
+
"type": "integer"
91
+
},
92
+
"quoteCount": {
93
+
"type": "integer"
94
+
},
95
+
"replyCount": {
96
+
"type": "integer"
97
+
},
98
+
"repostCount": {
99
+
"type": "integer"
100
+
}
101
+
}
102
+
},
103
+
"viewBlocked": {
104
+
"type": "object",
105
+
"required": [
106
+
"uri",
107
+
"blocked",
108
+
"author"
109
+
],
110
+
"properties": {
111
+
"uri": {
112
+
"type": "string",
113
+
"format": "at-uri"
114
+
},
115
+
"author": {
116
+
"ref": "app.bsky.feed.defs#blockedAuthor",
117
+
"type": "ref"
118
+
},
119
+
"blocked": {
120
+
"type": "boolean",
121
+
"const": true
122
+
}
123
+
}
124
+
},
125
+
"viewDetached": {
126
+
"type": "object",
127
+
"required": [
128
+
"uri",
129
+
"detached"
130
+
],
131
+
"properties": {
132
+
"uri": {
133
+
"type": "string",
134
+
"format": "at-uri"
135
+
},
136
+
"detached": {
137
+
"type": "boolean",
138
+
"const": true
139
+
}
140
+
}
141
+
},
142
+
"viewNotFound": {
143
+
"type": "object",
144
+
"required": [
145
+
"uri",
146
+
"notFound"
147
+
],
148
+
"properties": {
149
+
"uri": {
150
+
"type": "string",
151
+
"format": "at-uri"
152
+
},
153
+
"notFound": {
154
+
"type": "boolean",
155
+
"const": true
156
+
}
157
+
}
158
+
}
159
+
}
160
+
}
+49
lexicons/app/bsky/embed/recordWithMedia.json
+49
lexicons/app/bsky/embed/recordWithMedia.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.embed.recordWithMedia",
4
+
"description": "A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card.",
5
+
"defs": {
6
+
"main": {
7
+
"type": "object",
8
+
"required": [
9
+
"record",
10
+
"media"
11
+
],
12
+
"properties": {
13
+
"media": {
14
+
"refs": [
15
+
"app.bsky.embed.images",
16
+
"app.bsky.embed.video",
17
+
"app.bsky.embed.external"
18
+
],
19
+
"type": "union"
20
+
},
21
+
"record": {
22
+
"ref": "app.bsky.embed.record",
23
+
"type": "ref"
24
+
}
25
+
}
26
+
},
27
+
"view": {
28
+
"type": "object",
29
+
"required": [
30
+
"record",
31
+
"media"
32
+
],
33
+
"properties": {
34
+
"media": {
35
+
"refs": [
36
+
"app.bsky.embed.images#view",
37
+
"app.bsky.embed.video#view",
38
+
"app.bsky.embed.external#view"
39
+
],
40
+
"type": "union"
41
+
},
42
+
"record": {
43
+
"ref": "app.bsky.embed.record#view",
44
+
"type": "ref"
45
+
}
46
+
}
47
+
}
48
+
}
49
+
}
+90
lexicons/app/bsky/embed/video.json
+90
lexicons/app/bsky/embed/video.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.embed.video",
4
+
"description": "A video embedded in a Bluesky record (eg, a post).",
5
+
"defs": {
6
+
"main": {
7
+
"type": "object",
8
+
"required": [
9
+
"video"
10
+
],
11
+
"properties": {
12
+
"alt": {
13
+
"type": "string",
14
+
"maxLength": 10000,
15
+
"description": "Alt text description of the video, for accessibility.",
16
+
"maxGraphemes": 1000
17
+
},
18
+
"video": {
19
+
"type": "blob",
20
+
"accept": [
21
+
"video/mp4"
22
+
],
23
+
"maxSize": 50000000
24
+
},
25
+
"captions": {
26
+
"type": "array",
27
+
"items": {
28
+
"ref": "#caption",
29
+
"type": "ref"
30
+
},
31
+
"maxLength": 20
32
+
},
33
+
"aspectRatio": {
34
+
"ref": "app.bsky.embed.defs#aspectRatio",
35
+
"type": "ref"
36
+
}
37
+
}
38
+
},
39
+
"view": {
40
+
"type": "object",
41
+
"required": [
42
+
"cid",
43
+
"playlist"
44
+
],
45
+
"properties": {
46
+
"alt": {
47
+
"type": "string",
48
+
"maxLength": 10000,
49
+
"maxGraphemes": 1000
50
+
},
51
+
"cid": {
52
+
"type": "string",
53
+
"format": "cid"
54
+
},
55
+
"playlist": {
56
+
"type": "string",
57
+
"format": "uri"
58
+
},
59
+
"thumbnail": {
60
+
"type": "string",
61
+
"format": "uri"
62
+
},
63
+
"aspectRatio": {
64
+
"ref": "app.bsky.embed.defs#aspectRatio",
65
+
"type": "ref"
66
+
}
67
+
}
68
+
},
69
+
"caption": {
70
+
"type": "object",
71
+
"required": [
72
+
"lang",
73
+
"file"
74
+
],
75
+
"properties": {
76
+
"file": {
77
+
"type": "blob",
78
+
"accept": [
79
+
"text/vtt"
80
+
],
81
+
"maxSize": 20000
82
+
},
83
+
"lang": {
84
+
"type": "string",
85
+
"format": "language"
86
+
}
87
+
}
88
+
}
89
+
}
90
+
}
+515
lexicons/app/bsky/feed/defs.json
+515
lexicons/app/bsky/feed/defs.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.feed.defs",
4
+
"defs": {
5
+
"postView": {
6
+
"type": "object",
7
+
"required": [
8
+
"uri",
9
+
"cid",
10
+
"author",
11
+
"record",
12
+
"indexedAt"
13
+
],
14
+
"properties": {
15
+
"cid": {
16
+
"type": "string",
17
+
"format": "cid"
18
+
},
19
+
"uri": {
20
+
"type": "string",
21
+
"format": "at-uri"
22
+
},
23
+
"embed": {
24
+
"refs": [
25
+
"app.bsky.embed.images#view",
26
+
"app.bsky.embed.video#view",
27
+
"app.bsky.embed.external#view",
28
+
"app.bsky.embed.record#view",
29
+
"app.bsky.embed.recordWithMedia#view"
30
+
],
31
+
"type": "union"
32
+
},
33
+
"author": {
34
+
"ref": "app.bsky.actor.defs#profileViewBasic",
35
+
"type": "ref"
36
+
},
37
+
"labels": {
38
+
"type": "array",
39
+
"items": {
40
+
"ref": "com.atproto.label.defs#label",
41
+
"type": "ref"
42
+
}
43
+
},
44
+
"record": {
45
+
"type": "unknown"
46
+
},
47
+
"viewer": {
48
+
"ref": "#viewerState",
49
+
"type": "ref"
50
+
},
51
+
"indexedAt": {
52
+
"type": "string",
53
+
"format": "datetime"
54
+
},
55
+
"likeCount": {
56
+
"type": "integer"
57
+
},
58
+
"quoteCount": {
59
+
"type": "integer"
60
+
},
61
+
"replyCount": {
62
+
"type": "integer"
63
+
},
64
+
"threadgate": {
65
+
"ref": "#threadgateView",
66
+
"type": "ref"
67
+
},
68
+
"repostCount": {
69
+
"type": "integer"
70
+
}
71
+
}
72
+
},
73
+
"replyRef": {
74
+
"type": "object",
75
+
"required": [
76
+
"root",
77
+
"parent"
78
+
],
79
+
"properties": {
80
+
"root": {
81
+
"refs": [
82
+
"#postView",
83
+
"#notFoundPost",
84
+
"#blockedPost"
85
+
],
86
+
"type": "union"
87
+
},
88
+
"parent": {
89
+
"refs": [
90
+
"#postView",
91
+
"#notFoundPost",
92
+
"#blockedPost"
93
+
],
94
+
"type": "union"
95
+
},
96
+
"grandparentAuthor": {
97
+
"ref": "app.bsky.actor.defs#profileViewBasic",
98
+
"type": "ref",
99
+
"description": "When parent is a reply to another post, this is the author of that post."
100
+
}
101
+
}
102
+
},
103
+
"reasonPin": {
104
+
"type": "object",
105
+
"properties": {}
106
+
},
107
+
"blockedPost": {
108
+
"type": "object",
109
+
"required": [
110
+
"uri",
111
+
"blocked",
112
+
"author"
113
+
],
114
+
"properties": {
115
+
"uri": {
116
+
"type": "string",
117
+
"format": "at-uri"
118
+
},
119
+
"author": {
120
+
"ref": "#blockedAuthor",
121
+
"type": "ref"
122
+
},
123
+
"blocked": {
124
+
"type": "boolean",
125
+
"const": true
126
+
}
127
+
}
128
+
},
129
+
"interaction": {
130
+
"type": "object",
131
+
"properties": {
132
+
"item": {
133
+
"type": "string",
134
+
"format": "at-uri"
135
+
},
136
+
"event": {
137
+
"type": "string",
138
+
"knownValues": [
139
+
"app.bsky.feed.defs#requestLess",
140
+
"app.bsky.feed.defs#requestMore",
141
+
"app.bsky.feed.defs#clickthroughItem",
142
+
"app.bsky.feed.defs#clickthroughAuthor",
143
+
"app.bsky.feed.defs#clickthroughReposter",
144
+
"app.bsky.feed.defs#clickthroughEmbed",
145
+
"app.bsky.feed.defs#interactionSeen",
146
+
"app.bsky.feed.defs#interactionLike",
147
+
"app.bsky.feed.defs#interactionRepost",
148
+
"app.bsky.feed.defs#interactionReply",
149
+
"app.bsky.feed.defs#interactionQuote",
150
+
"app.bsky.feed.defs#interactionShare"
151
+
]
152
+
},
153
+
"feedContext": {
154
+
"type": "string",
155
+
"maxLength": 2000,
156
+
"description": "Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton."
157
+
}
158
+
}
159
+
},
160
+
"requestLess": {
161
+
"type": "token",
162
+
"description": "Request that less content like the given feed item be shown in the feed"
163
+
},
164
+
"requestMore": {
165
+
"type": "token",
166
+
"description": "Request that more content like the given feed item be shown in the feed"
167
+
},
168
+
"viewerState": {
169
+
"type": "object",
170
+
"properties": {
171
+
"like": {
172
+
"type": "string",
173
+
"format": "at-uri"
174
+
},
175
+
"pinned": {
176
+
"type": "boolean"
177
+
},
178
+
"repost": {
179
+
"type": "string",
180
+
"format": "at-uri"
181
+
},
182
+
"threadMuted": {
183
+
"type": "boolean"
184
+
},
185
+
"replyDisabled": {
186
+
"type": "boolean"
187
+
},
188
+
"embeddingDisabled": {
189
+
"type": "boolean"
190
+
}
191
+
},
192
+
"description": "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests."
193
+
},
194
+
"feedViewPost": {
195
+
"type": "object",
196
+
"required": [
197
+
"post"
198
+
],
199
+
"properties": {
200
+
"post": {
201
+
"ref": "#postView",
202
+
"type": "ref"
203
+
},
204
+
"reply": {
205
+
"ref": "#replyRef",
206
+
"type": "ref"
207
+
},
208
+
"reason": {
209
+
"refs": [
210
+
"#reasonRepost",
211
+
"#reasonPin"
212
+
],
213
+
"type": "union"
214
+
},
215
+
"feedContext": {
216
+
"type": "string",
217
+
"maxLength": 2000,
218
+
"description": "Context provided by feed generator that may be passed back alongside interactions."
219
+
}
220
+
}
221
+
},
222
+
"notFoundPost": {
223
+
"type": "object",
224
+
"required": [
225
+
"uri",
226
+
"notFound"
227
+
],
228
+
"properties": {
229
+
"uri": {
230
+
"type": "string",
231
+
"format": "at-uri"
232
+
},
233
+
"notFound": {
234
+
"type": "boolean",
235
+
"const": true
236
+
}
237
+
}
238
+
},
239
+
"reasonRepost": {
240
+
"type": "object",
241
+
"required": [
242
+
"by",
243
+
"indexedAt"
244
+
],
245
+
"properties": {
246
+
"by": {
247
+
"ref": "app.bsky.actor.defs#profileViewBasic",
248
+
"type": "ref"
249
+
},
250
+
"indexedAt": {
251
+
"type": "string",
252
+
"format": "datetime"
253
+
}
254
+
}
255
+
},
256
+
"blockedAuthor": {
257
+
"type": "object",
258
+
"required": [
259
+
"did"
260
+
],
261
+
"properties": {
262
+
"did": {
263
+
"type": "string",
264
+
"format": "did"
265
+
},
266
+
"viewer": {
267
+
"ref": "app.bsky.actor.defs#viewerState",
268
+
"type": "ref"
269
+
}
270
+
}
271
+
},
272
+
"generatorView": {
273
+
"type": "object",
274
+
"required": [
275
+
"uri",
276
+
"cid",
277
+
"did",
278
+
"creator",
279
+
"displayName",
280
+
"indexedAt"
281
+
],
282
+
"properties": {
283
+
"cid": {
284
+
"type": "string",
285
+
"format": "cid"
286
+
},
287
+
"did": {
288
+
"type": "string",
289
+
"format": "did"
290
+
},
291
+
"uri": {
292
+
"type": "string",
293
+
"format": "at-uri"
294
+
},
295
+
"avatar": {
296
+
"type": "string",
297
+
"format": "uri"
298
+
},
299
+
"labels": {
300
+
"type": "array",
301
+
"items": {
302
+
"ref": "com.atproto.label.defs#label",
303
+
"type": "ref"
304
+
}
305
+
},
306
+
"viewer": {
307
+
"ref": "#generatorViewerState",
308
+
"type": "ref"
309
+
},
310
+
"creator": {
311
+
"ref": "app.bsky.actor.defs#profileView",
312
+
"type": "ref"
313
+
},
314
+
"indexedAt": {
315
+
"type": "string",
316
+
"format": "datetime"
317
+
},
318
+
"likeCount": {
319
+
"type": "integer",
320
+
"minimum": 0
321
+
},
322
+
"contentMode": {
323
+
"type": "string",
324
+
"knownValues": [
325
+
"app.bsky.feed.defs#contentModeUnspecified",
326
+
"app.bsky.feed.defs#contentModeVideo"
327
+
]
328
+
},
329
+
"description": {
330
+
"type": "string",
331
+
"maxLength": 3000,
332
+
"maxGraphemes": 300
333
+
},
334
+
"displayName": {
335
+
"type": "string"
336
+
},
337
+
"descriptionFacets": {
338
+
"type": "array",
339
+
"items": {
340
+
"ref": "app.bsky.richtext.facet",
341
+
"type": "ref"
342
+
}
343
+
},
344
+
"acceptsInteractions": {
345
+
"type": "boolean"
346
+
}
347
+
}
348
+
},
349
+
"threadContext": {
350
+
"type": "object",
351
+
"properties": {
352
+
"rootAuthorLike": {
353
+
"type": "string",
354
+
"format": "at-uri"
355
+
}
356
+
},
357
+
"description": "Metadata about this post within the context of the thread it is in."
358
+
},
359
+
"threadViewPost": {
360
+
"type": "object",
361
+
"required": [
362
+
"post"
363
+
],
364
+
"properties": {
365
+
"post": {
366
+
"ref": "#postView",
367
+
"type": "ref"
368
+
},
369
+
"parent": {
370
+
"refs": [
371
+
"#threadViewPost",
372
+
"#notFoundPost",
373
+
"#blockedPost"
374
+
],
375
+
"type": "union"
376
+
},
377
+
"replies": {
378
+
"type": "array",
379
+
"items": {
380
+
"refs": [
381
+
"#threadViewPost",
382
+
"#notFoundPost",
383
+
"#blockedPost"
384
+
],
385
+
"type": "union"
386
+
}
387
+
},
388
+
"threadContext": {
389
+
"ref": "#threadContext",
390
+
"type": "ref"
391
+
}
392
+
}
393
+
},
394
+
"threadgateView": {
395
+
"type": "object",
396
+
"properties": {
397
+
"cid": {
398
+
"type": "string",
399
+
"format": "cid"
400
+
},
401
+
"uri": {
402
+
"type": "string",
403
+
"format": "at-uri"
404
+
},
405
+
"lists": {
406
+
"type": "array",
407
+
"items": {
408
+
"ref": "app.bsky.graph.defs#listViewBasic",
409
+
"type": "ref"
410
+
}
411
+
},
412
+
"record": {
413
+
"type": "unknown"
414
+
}
415
+
}
416
+
},
417
+
"interactionLike": {
418
+
"type": "token",
419
+
"description": "User liked the feed item"
420
+
},
421
+
"interactionSeen": {
422
+
"type": "token",
423
+
"description": "Feed item was seen by user"
424
+
},
425
+
"clickthroughItem": {
426
+
"type": "token",
427
+
"description": "User clicked through to the feed item"
428
+
},
429
+
"contentModeVideo": {
430
+
"type": "token",
431
+
"description": "Declares the feed generator returns posts containing app.bsky.embed.video embeds."
432
+
},
433
+
"interactionQuote": {
434
+
"type": "token",
435
+
"description": "User quoted the feed item"
436
+
},
437
+
"interactionReply": {
438
+
"type": "token",
439
+
"description": "User replied to the feed item"
440
+
},
441
+
"interactionShare": {
442
+
"type": "token",
443
+
"description": "User shared the feed item"
444
+
},
445
+
"skeletonFeedPost": {
446
+
"type": "object",
447
+
"required": [
448
+
"post"
449
+
],
450
+
"properties": {
451
+
"post": {
452
+
"type": "string",
453
+
"format": "at-uri"
454
+
},
455
+
"reason": {
456
+
"refs": [
457
+
"#skeletonReasonRepost",
458
+
"#skeletonReasonPin"
459
+
],
460
+
"type": "union"
461
+
},
462
+
"feedContext": {
463
+
"type": "string",
464
+
"maxLength": 2000,
465
+
"description": "Context that will be passed through to client and may be passed to feed generator back alongside interactions."
466
+
}
467
+
}
468
+
},
469
+
"clickthroughEmbed": {
470
+
"type": "token",
471
+
"description": "User clicked through to the embedded content of the feed item"
472
+
},
473
+
"interactionRepost": {
474
+
"type": "token",
475
+
"description": "User reposted the feed item"
476
+
},
477
+
"skeletonReasonPin": {
478
+
"type": "object",
479
+
"properties": {}
480
+
},
481
+
"clickthroughAuthor": {
482
+
"type": "token",
483
+
"description": "User clicked through to the author of the feed item"
484
+
},
485
+
"clickthroughReposter": {
486
+
"type": "token",
487
+
"description": "User clicked through to the reposter of the feed item"
488
+
},
489
+
"generatorViewerState": {
490
+
"type": "object",
491
+
"properties": {
492
+
"like": {
493
+
"type": "string",
494
+
"format": "at-uri"
495
+
}
496
+
}
497
+
},
498
+
"skeletonReasonRepost": {
499
+
"type": "object",
500
+
"required": [
501
+
"repost"
502
+
],
503
+
"properties": {
504
+
"repost": {
505
+
"type": "string",
506
+
"format": "at-uri"
507
+
}
508
+
}
509
+
},
510
+
"contentModeUnspecified": {
511
+
"type": "token",
512
+
"description": "Declares the feed generator returns any types of posts."
513
+
}
514
+
}
515
+
}
+54
lexicons/app/bsky/feed/postgate.json
+54
lexicons/app/bsky/feed/postgate.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.feed.postgate",
4
+
"defs": {
5
+
"main": {
6
+
"key": "tid",
7
+
"type": "record",
8
+
"record": {
9
+
"type": "object",
10
+
"required": [
11
+
"post",
12
+
"createdAt"
13
+
],
14
+
"properties": {
15
+
"post": {
16
+
"type": "string",
17
+
"format": "at-uri",
18
+
"description": "Reference (AT-URI) to the post record."
19
+
},
20
+
"createdAt": {
21
+
"type": "string",
22
+
"format": "datetime"
23
+
},
24
+
"embeddingRules": {
25
+
"type": "array",
26
+
"items": {
27
+
"refs": [
28
+
"#disableRule"
29
+
],
30
+
"type": "union"
31
+
},
32
+
"maxLength": 5,
33
+
"description": "List of rules defining who can embed this post. If value is an empty array or is undefined, no particular rules apply and anyone can embed."
34
+
},
35
+
"detachedEmbeddingUris": {
36
+
"type": "array",
37
+
"items": {
38
+
"type": "string",
39
+
"format": "at-uri"
40
+
},
41
+
"maxLength": 50,
42
+
"description": "List of AT-URIs embedding this post that the author has detached from."
43
+
}
44
+
}
45
+
},
46
+
"description": "Record defining interaction rules for a post. The record key (rkey) of the postgate record must match the record key of the post, and that record must be in the same repository."
47
+
},
48
+
"disableRule": {
49
+
"type": "object",
50
+
"properties": {},
51
+
"description": "Disables embedding of this post."
52
+
}
53
+
}
54
+
}
+80
lexicons/app/bsky/feed/threadgate.json
+80
lexicons/app/bsky/feed/threadgate.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.feed.threadgate",
4
+
"defs": {
5
+
"main": {
6
+
"key": "tid",
7
+
"type": "record",
8
+
"record": {
9
+
"type": "object",
10
+
"required": [
11
+
"post",
12
+
"createdAt"
13
+
],
14
+
"properties": {
15
+
"post": {
16
+
"type": "string",
17
+
"format": "at-uri",
18
+
"description": "Reference (AT-URI) to the post record."
19
+
},
20
+
"allow": {
21
+
"type": "array",
22
+
"items": {
23
+
"refs": [
24
+
"#mentionRule",
25
+
"#followerRule",
26
+
"#followingRule",
27
+
"#listRule"
28
+
],
29
+
"type": "union"
30
+
},
31
+
"maxLength": 5,
32
+
"description": "List of rules defining who can reply to this post. If value is an empty array, no one can reply. If value is undefined, anyone can reply."
33
+
},
34
+
"createdAt": {
35
+
"type": "string",
36
+
"format": "datetime"
37
+
},
38
+
"hiddenReplies": {
39
+
"type": "array",
40
+
"items": {
41
+
"type": "string",
42
+
"format": "at-uri"
43
+
},
44
+
"maxLength": 50,
45
+
"description": "List of hidden reply URIs."
46
+
}
47
+
}
48
+
},
49
+
"description": "Record defining interaction gating rules for a thread (aka, reply controls). The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository."
50
+
},
51
+
"listRule": {
52
+
"type": "object",
53
+
"required": [
54
+
"list"
55
+
],
56
+
"properties": {
57
+
"list": {
58
+
"type": "string",
59
+
"format": "at-uri"
60
+
}
61
+
},
62
+
"description": "Allow replies from actors on a list."
63
+
},
64
+
"mentionRule": {
65
+
"type": "object",
66
+
"properties": {},
67
+
"description": "Allow replies from actors mentioned in your post."
68
+
},
69
+
"followerRule": {
70
+
"type": "object",
71
+
"properties": {},
72
+
"description": "Allow replies from actors who follow you."
73
+
},
74
+
"followingRule": {
75
+
"type": "object",
76
+
"properties": {},
77
+
"description": "Allow replies from actors you follow."
78
+
}
79
+
}
80
+
}
+332
lexicons/app/bsky/graph/defs.json
+332
lexicons/app/bsky/graph/defs.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.graph.defs",
4
+
"defs": {
5
+
"modlist": {
6
+
"type": "token",
7
+
"description": "A list of actors to apply an aggregate moderation action (mute/block) on."
8
+
},
9
+
"listView": {
10
+
"type": "object",
11
+
"required": [
12
+
"uri",
13
+
"cid",
14
+
"creator",
15
+
"name",
16
+
"purpose",
17
+
"indexedAt"
18
+
],
19
+
"properties": {
20
+
"cid": {
21
+
"type": "string",
22
+
"format": "cid"
23
+
},
24
+
"uri": {
25
+
"type": "string",
26
+
"format": "at-uri"
27
+
},
28
+
"name": {
29
+
"type": "string",
30
+
"maxLength": 64,
31
+
"minLength": 1
32
+
},
33
+
"avatar": {
34
+
"type": "string",
35
+
"format": "uri"
36
+
},
37
+
"labels": {
38
+
"type": "array",
39
+
"items": {
40
+
"ref": "com.atproto.label.defs#label",
41
+
"type": "ref"
42
+
}
43
+
},
44
+
"viewer": {
45
+
"ref": "#listViewerState",
46
+
"type": "ref"
47
+
},
48
+
"creator": {
49
+
"ref": "app.bsky.actor.defs#profileView",
50
+
"type": "ref"
51
+
},
52
+
"purpose": {
53
+
"ref": "#listPurpose",
54
+
"type": "ref"
55
+
},
56
+
"indexedAt": {
57
+
"type": "string",
58
+
"format": "datetime"
59
+
},
60
+
"description": {
61
+
"type": "string",
62
+
"maxLength": 3000,
63
+
"maxGraphemes": 300
64
+
},
65
+
"listItemCount": {
66
+
"type": "integer",
67
+
"minimum": 0
68
+
},
69
+
"descriptionFacets": {
70
+
"type": "array",
71
+
"items": {
72
+
"ref": "app.bsky.richtext.facet",
73
+
"type": "ref"
74
+
}
75
+
}
76
+
}
77
+
},
78
+
"curatelist": {
79
+
"type": "token",
80
+
"description": "A list of actors used for curation purposes such as list feeds or interaction gating."
81
+
},
82
+
"listPurpose": {
83
+
"type": "string",
84
+
"knownValues": [
85
+
"app.bsky.graph.defs#modlist",
86
+
"app.bsky.graph.defs#curatelist",
87
+
"app.bsky.graph.defs#referencelist"
88
+
]
89
+
},
90
+
"listItemView": {
91
+
"type": "object",
92
+
"required": [
93
+
"uri",
94
+
"subject"
95
+
],
96
+
"properties": {
97
+
"uri": {
98
+
"type": "string",
99
+
"format": "at-uri"
100
+
},
101
+
"subject": {
102
+
"ref": "app.bsky.actor.defs#profileView",
103
+
"type": "ref"
104
+
}
105
+
}
106
+
},
107
+
"relationship": {
108
+
"type": "object",
109
+
"required": [
110
+
"did"
111
+
],
112
+
"properties": {
113
+
"did": {
114
+
"type": "string",
115
+
"format": "did"
116
+
},
117
+
"following": {
118
+
"type": "string",
119
+
"format": "at-uri",
120
+
"description": "if the actor follows this DID, this is the AT-URI of the follow record"
121
+
},
122
+
"followedBy": {
123
+
"type": "string",
124
+
"format": "at-uri",
125
+
"description": "if the actor is followed by this DID, contains the AT-URI of the follow record"
126
+
}
127
+
},
128
+
"description": "lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)"
129
+
},
130
+
"listViewBasic": {
131
+
"type": "object",
132
+
"required": [
133
+
"uri",
134
+
"cid",
135
+
"name",
136
+
"purpose"
137
+
],
138
+
"properties": {
139
+
"cid": {
140
+
"type": "string",
141
+
"format": "cid"
142
+
},
143
+
"uri": {
144
+
"type": "string",
145
+
"format": "at-uri"
146
+
},
147
+
"name": {
148
+
"type": "string",
149
+
"maxLength": 64,
150
+
"minLength": 1
151
+
},
152
+
"avatar": {
153
+
"type": "string",
154
+
"format": "uri"
155
+
},
156
+
"labels": {
157
+
"type": "array",
158
+
"items": {
159
+
"ref": "com.atproto.label.defs#label",
160
+
"type": "ref"
161
+
}
162
+
},
163
+
"viewer": {
164
+
"ref": "#listViewerState",
165
+
"type": "ref"
166
+
},
167
+
"purpose": {
168
+
"ref": "#listPurpose",
169
+
"type": "ref"
170
+
},
171
+
"indexedAt": {
172
+
"type": "string",
173
+
"format": "datetime"
174
+
},
175
+
"listItemCount": {
176
+
"type": "integer",
177
+
"minimum": 0
178
+
}
179
+
}
180
+
},
181
+
"notFoundActor": {
182
+
"type": "object",
183
+
"required": [
184
+
"actor",
185
+
"notFound"
186
+
],
187
+
"properties": {
188
+
"actor": {
189
+
"type": "string",
190
+
"format": "at-identifier"
191
+
},
192
+
"notFound": {
193
+
"type": "boolean",
194
+
"const": true
195
+
}
196
+
},
197
+
"description": "indicates that a handle or DID could not be resolved"
198
+
},
199
+
"referencelist": {
200
+
"type": "token",
201
+
"description": "A list of actors used for only for reference purposes such as within a starter pack."
202
+
},
203
+
"listViewerState": {
204
+
"type": "object",
205
+
"properties": {
206
+
"muted": {
207
+
"type": "boolean"
208
+
},
209
+
"blocked": {
210
+
"type": "string",
211
+
"format": "at-uri"
212
+
}
213
+
}
214
+
},
215
+
"starterPackView": {
216
+
"type": "object",
217
+
"required": [
218
+
"uri",
219
+
"cid",
220
+
"record",
221
+
"creator",
222
+
"indexedAt"
223
+
],
224
+
"properties": {
225
+
"cid": {
226
+
"type": "string",
227
+
"format": "cid"
228
+
},
229
+
"uri": {
230
+
"type": "string",
231
+
"format": "at-uri"
232
+
},
233
+
"list": {
234
+
"ref": "#listViewBasic",
235
+
"type": "ref"
236
+
},
237
+
"feeds": {
238
+
"type": "array",
239
+
"items": {
240
+
"ref": "app.bsky.feed.defs#generatorView",
241
+
"type": "ref"
242
+
},
243
+
"maxLength": 3
244
+
},
245
+
"labels": {
246
+
"type": "array",
247
+
"items": {
248
+
"ref": "com.atproto.label.defs#label",
249
+
"type": "ref"
250
+
}
251
+
},
252
+
"record": {
253
+
"type": "unknown"
254
+
},
255
+
"creator": {
256
+
"ref": "app.bsky.actor.defs#profileViewBasic",
257
+
"type": "ref"
258
+
},
259
+
"indexedAt": {
260
+
"type": "string",
261
+
"format": "datetime"
262
+
},
263
+
"joinedWeekCount": {
264
+
"type": "integer",
265
+
"minimum": 0
266
+
},
267
+
"listItemsSample": {
268
+
"type": "array",
269
+
"items": {
270
+
"ref": "#listItemView",
271
+
"type": "ref"
272
+
},
273
+
"maxLength": 12
274
+
},
275
+
"joinedAllTimeCount": {
276
+
"type": "integer",
277
+
"minimum": 0
278
+
}
279
+
}
280
+
},
281
+
"starterPackViewBasic": {
282
+
"type": "object",
283
+
"required": [
284
+
"uri",
285
+
"cid",
286
+
"record",
287
+
"creator",
288
+
"indexedAt"
289
+
],
290
+
"properties": {
291
+
"cid": {
292
+
"type": "string",
293
+
"format": "cid"
294
+
},
295
+
"uri": {
296
+
"type": "string",
297
+
"format": "at-uri"
298
+
},
299
+
"labels": {
300
+
"type": "array",
301
+
"items": {
302
+
"ref": "com.atproto.label.defs#label",
303
+
"type": "ref"
304
+
}
305
+
},
306
+
"record": {
307
+
"type": "unknown"
308
+
},
309
+
"creator": {
310
+
"ref": "app.bsky.actor.defs#profileViewBasic",
311
+
"type": "ref"
312
+
},
313
+
"indexedAt": {
314
+
"type": "string",
315
+
"format": "datetime"
316
+
},
317
+
"listItemCount": {
318
+
"type": "integer",
319
+
"minimum": 0
320
+
},
321
+
"joinedWeekCount": {
322
+
"type": "integer",
323
+
"minimum": 0
324
+
},
325
+
"joinedAllTimeCount": {
326
+
"type": "integer",
327
+
"minimum": 0
328
+
}
329
+
}
330
+
}
331
+
}
332
+
}
+128
lexicons/app/bsky/labeler/defs.json
+128
lexicons/app/bsky/labeler/defs.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.labeler.defs",
4
+
"defs": {
5
+
"labelerView": {
6
+
"type": "object",
7
+
"required": [
8
+
"uri",
9
+
"cid",
10
+
"creator",
11
+
"indexedAt"
12
+
],
13
+
"properties": {
14
+
"cid": {
15
+
"type": "string",
16
+
"format": "cid"
17
+
},
18
+
"uri": {
19
+
"type": "string",
20
+
"format": "at-uri"
21
+
},
22
+
"labels": {
23
+
"type": "array",
24
+
"items": {
25
+
"ref": "com.atproto.label.defs#label",
26
+
"type": "ref"
27
+
}
28
+
},
29
+
"viewer": {
30
+
"ref": "#labelerViewerState",
31
+
"type": "ref"
32
+
},
33
+
"creator": {
34
+
"ref": "app.bsky.actor.defs#profileView",
35
+
"type": "ref"
36
+
},
37
+
"indexedAt": {
38
+
"type": "string",
39
+
"format": "datetime"
40
+
},
41
+
"likeCount": {
42
+
"type": "integer",
43
+
"minimum": 0
44
+
}
45
+
}
46
+
},
47
+
"labelerPolicies": {
48
+
"type": "object",
49
+
"required": [
50
+
"labelValues"
51
+
],
52
+
"properties": {
53
+
"labelValues": {
54
+
"type": "array",
55
+
"items": {
56
+
"ref": "com.atproto.label.defs#labelValue",
57
+
"type": "ref"
58
+
},
59
+
"description": "The label values which this labeler publishes. May include global or custom labels."
60
+
},
61
+
"labelValueDefinitions": {
62
+
"type": "array",
63
+
"items": {
64
+
"ref": "com.atproto.label.defs#labelValueDefinition",
65
+
"type": "ref"
66
+
},
67
+
"description": "Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler."
68
+
}
69
+
}
70
+
},
71
+
"labelerViewerState": {
72
+
"type": "object",
73
+
"properties": {
74
+
"like": {
75
+
"type": "string",
76
+
"format": "at-uri"
77
+
}
78
+
}
79
+
},
80
+
"labelerViewDetailed": {
81
+
"type": "object",
82
+
"required": [
83
+
"uri",
84
+
"cid",
85
+
"creator",
86
+
"policies",
87
+
"indexedAt"
88
+
],
89
+
"properties": {
90
+
"cid": {
91
+
"type": "string",
92
+
"format": "cid"
93
+
},
94
+
"uri": {
95
+
"type": "string",
96
+
"format": "at-uri"
97
+
},
98
+
"labels": {
99
+
"type": "array",
100
+
"items": {
101
+
"ref": "com.atproto.label.defs#label",
102
+
"type": "ref"
103
+
}
104
+
},
105
+
"viewer": {
106
+
"ref": "#labelerViewerState",
107
+
"type": "ref"
108
+
},
109
+
"creator": {
110
+
"ref": "app.bsky.actor.defs#profileView",
111
+
"type": "ref"
112
+
},
113
+
"policies": {
114
+
"ref": "app.bsky.labeler.defs#labelerPolicies",
115
+
"type": "ref"
116
+
},
117
+
"indexedAt": {
118
+
"type": "string",
119
+
"format": "datetime"
120
+
},
121
+
"likeCount": {
122
+
"type": "integer",
123
+
"minimum": 0
124
+
}
125
+
}
126
+
}
127
+
}
128
+
}
+89
lexicons/app/bsky/richtext/facet.json
+89
lexicons/app/bsky/richtext/facet.json
···
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "app.bsky.richtext.facet",
4
+
"defs": {
5
+
"tag": {
6
+
"type": "object",
7
+
"required": [
8
+
"tag"
9
+
],
10
+
"properties": {
11
+
"tag": {
12
+
"type": "string",
13
+
"maxLength": 640,
14
+
"maxGraphemes": 64
15
+
}
16
+
},
17
+
"description": "Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags')."
18
+
},
19
+
"link": {
20
+
"type": "object",
21
+
"required": [
22
+
"uri"
23
+
],
24
+
"properties": {
25
+
"uri": {
26
+
"type": "string",
27
+
"format": "uri"
28
+
}
29
+
},
30
+
"description": "Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL."
31
+
},
32
+
"main": {
33
+
"type": "object",
34
+
"required": [
35
+
"index",
36
+
"features"
37
+
],
38
+
"properties": {
39
+
"index": {
40
+
"ref": "#byteSlice",
41
+
"type": "ref"
42
+
},
43
+
"features": {
44
+
"type": "array",
45
+
"items": {
46
+
"refs": [
47
+
"#mention",
48
+
"#link",
49
+
"#tag"
50
+
],
51
+
"type": "union"
52
+
}
53
+
}
54
+
},
55
+
"description": "Annotation of a sub-string within rich text."
56
+
},
57
+
"mention": {
58
+
"type": "object",
59
+
"required": [
60
+
"did"
61
+
],
62
+
"properties": {
63
+
"did": {
64
+
"type": "string",
65
+
"format": "did"
66
+
}
67
+
},
68
+
"description": "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID."
69
+
},
70
+
"byteSlice": {
71
+
"type": "object",
72
+
"required": [
73
+
"byteStart",
74
+
"byteEnd"
75
+
],
76
+
"properties": {
77
+
"byteEnd": {
78
+
"type": "integer",
79
+
"minimum": 0
80
+
},
81
+
"byteStart": {
82
+
"type": "integer",
83
+
"minimum": 0
84
+
}
85
+
},
86
+
"description": "Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets."
87
+
}
88
+
}
89
+
}
+124
-88
lexicons/com/atproto/label/defs.json
+124
-88
lexicons/com/atproto/label/defs.json
···
4
"defs": {
5
"label": {
6
"type": "object",
7
-
"description": "Metadata tag on an atproto resource (eg, repo or record).",
8
-
"required": ["src", "uri", "val", "cts"],
9
"properties": {
10
-
"ver": {
11
-
"type": "integer",
12
-
"description": "The AT Protocol version of the label object."
13
-
},
14
-
"src": {
15
-
"type": "string",
16
-
"format": "did",
17
-
"description": "DID of the actor who created this label."
18
-
},
19
-
"uri": {
20
-
"type": "string",
21
-
"format": "uri",
22
-
"description": "AT URI of the record, repository (account), or other resource that this label applies to."
23
-
},
24
"cid": {
25
"type": "string",
26
"format": "cid",
27
"description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to."
28
},
29
-
"val": {
30
-
"type": "string",
31
-
"maxLength": 128,
32
-
"description": "The short string name of the value or type of this label."
33
-
},
34
-
"neg": {
35
-
"type": "boolean",
36
-
"description": "If true, this is a negation label, overwriting a previous label."
37
-
},
38
"cts": {
39
"type": "string",
40
"format": "datetime",
···
45
"format": "datetime",
46
"description": "Timestamp at which this label expires (no longer applies)."
47
},
48
"sig": {
49
"type": "bytes",
50
"description": "Signature of dag-cbor encoded label."
51
-
}
52
-
}
53
-
},
54
-
"selfLabels": {
55
-
"type": "object",
56
-
"description": "Metadata tags on an atproto record, published by the author within the record.",
57
-
"required": ["values"],
58
-
"properties": {
59
-
"values": {
60
-
"type": "array",
61
-
"items": { "type": "ref", "ref": "#selfLabel" },
62
-
"maxLength": 10
63
}
64
-
}
65
},
66
"selfLabel": {
67
"type": "object",
68
-
"description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.",
69
-
"required": ["val"],
70
"properties": {
71
"val": {
72
"type": "string",
73
"maxLength": 128,
74
"description": "The short string name of the value or type of this label."
75
}
76
-
}
77
},
78
"labelValueDefinition": {
79
"type": "object",
80
-
"description": "Declares a label value and its expected interpretations and behaviors.",
81
-
"required": ["identifier", "severity", "blurs", "locales"],
82
"properties": {
83
-
"identifier": {
84
"type": "string",
85
-
"description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
86
-
"maxLength": 100,
87
-
"maxGraphemes": 100
88
},
89
"severity": {
90
"type": "string",
91
"description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
92
-
"knownValues": ["inform", "alert", "none"]
93
},
94
-
"blurs": {
95
"type": "string",
96
-
"description": "What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
97
-
"knownValues": ["content", "media", "none"]
98
},
99
"defaultSetting": {
100
"type": "string",
101
"description": "The default setting for this label.",
102
-
"knownValues": ["ignore", "warn", "hide"],
103
-
"default": "warn"
104
-
},
105
-
"adultOnly": {
106
-
"type": "boolean",
107
-
"description": "Does the user need to have adult content enabled in order to configure this label?"
108
-
},
109
-
"locales": {
110
-
"type": "array",
111
-
"items": { "type": "ref", "ref": "#labelValueDefinitionStrings" }
112
}
113
-
}
114
},
115
"labelValueDefinitionStrings": {
116
"type": "object",
117
-
"description": "Strings which describe the label in the UI, localized into a specific language.",
118
-
"required": ["lang", "name", "description"],
119
"properties": {
120
"lang": {
121
"type": "string",
122
-
"description": "The code of the language these strings are written in.",
123
-
"format": "language"
124
},
125
"name": {
126
"type": "string",
127
"description": "A short human-readable name for the label.",
128
-
"maxGraphemes": 64,
129
-
"maxLength": 640
130
},
131
"description": {
132
"type": "string",
133
"description": "A longer description of what the label means and why it might be applied.",
134
-
"maxGraphemes": 10000,
135
-
"maxLength": 100000
136
}
137
-
}
138
-
},
139
-
"labelValue": {
140
-
"type": "string",
141
-
"knownValues": [
142
-
"!hide",
143
-
"!no-promote",
144
-
"!warn",
145
-
"!no-unauthenticated",
146
-
"dmca-violation",
147
-
"doxxing",
148
-
"porn",
149
-
"sexual",
150
-
"nudity",
151
-
"nsfl",
152
-
"gore"
153
-
]
154
}
155
}
156
-
}
···
4
"defs": {
5
"label": {
6
"type": "object",
7
+
"required": [
8
+
"src",
9
+
"uri",
10
+
"val",
11
+
"cts"
12
+
],
13
"properties": {
14
"cid": {
15
"type": "string",
16
"format": "cid",
17
"description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to."
18
},
19
"cts": {
20
"type": "string",
21
"format": "datetime",
···
26
"format": "datetime",
27
"description": "Timestamp at which this label expires (no longer applies)."
28
},
29
+
"neg": {
30
+
"type": "boolean",
31
+
"description": "If true, this is a negation label, overwriting a previous label."
32
+
},
33
"sig": {
34
"type": "bytes",
35
"description": "Signature of dag-cbor encoded label."
36
+
},
37
+
"src": {
38
+
"type": "string",
39
+
"format": "did",
40
+
"description": "DID of the actor who created this label."
41
+
},
42
+
"uri": {
43
+
"type": "string",
44
+
"format": "uri",
45
+
"description": "AT URI of the record, repository (account), or other resource that this label applies to."
46
+
},
47
+
"val": {
48
+
"type": "string",
49
+
"maxLength": 128,
50
+
"description": "The short string name of the value or type of this label."
51
+
},
52
+
"ver": {
53
+
"type": "integer",
54
+
"description": "The AT Protocol version of the label object."
55
}
56
+
},
57
+
"description": "Metadata tag on an atproto resource (eg, repo or record)."
58
},
59
"selfLabel": {
60
"type": "object",
61
+
"required": [
62
+
"val"
63
+
],
64
"properties": {
65
"val": {
66
"type": "string",
67
"maxLength": 128,
68
"description": "The short string name of the value or type of this label."
69
}
70
+
},
71
+
"description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel."
72
+
},
73
+
"labelValue": {
74
+
"type": "string",
75
+
"knownValues": [
76
+
"!hide",
77
+
"!no-promote",
78
+
"!warn",
79
+
"!no-unauthenticated",
80
+
"dmca-violation",
81
+
"doxxing",
82
+
"porn",
83
+
"sexual",
84
+
"nudity",
85
+
"nsfl",
86
+
"gore"
87
+
]
88
+
},
89
+
"selfLabels": {
90
+
"type": "object",
91
+
"required": [
92
+
"values"
93
+
],
94
+
"properties": {
95
+
"values": {
96
+
"type": "array",
97
+
"items": {
98
+
"ref": "#selfLabel",
99
+
"type": "ref"
100
+
},
101
+
"maxLength": 10
102
+
}
103
+
},
104
+
"description": "Metadata tags on an atproto record, published by the author within the record."
105
},
106
"labelValueDefinition": {
107
"type": "object",
108
+
"required": [
109
+
"identifier",
110
+
"severity",
111
+
"blurs",
112
+
"locales"
113
+
],
114
"properties": {
115
+
"blurs": {
116
"type": "string",
117
+
"description": "What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
118
+
"knownValues": [
119
+
"content",
120
+
"media",
121
+
"none"
122
+
]
123
+
},
124
+
"locales": {
125
+
"type": "array",
126
+
"items": {
127
+
"ref": "#labelValueDefinitionStrings",
128
+
"type": "ref"
129
+
}
130
},
131
"severity": {
132
"type": "string",
133
"description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
134
+
"knownValues": [
135
+
"inform",
136
+
"alert",
137
+
"none"
138
+
]
139
},
140
+
"adultOnly": {
141
+
"type": "boolean",
142
+
"description": "Does the user need to have adult content enabled in order to configure this label?"
143
+
},
144
+
"identifier": {
145
"type": "string",
146
+
"maxLength": 100,
147
+
"description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
148
+
"maxGraphemes": 100
149
},
150
"defaultSetting": {
151
"type": "string",
152
+
"default": "warn",
153
"description": "The default setting for this label.",
154
+
"knownValues": [
155
+
"ignore",
156
+
"warn",
157
+
"hide"
158
+
]
159
}
160
+
},
161
+
"description": "Declares a label value and its expected interpretations and behaviors."
162
},
163
"labelValueDefinitionStrings": {
164
"type": "object",
165
+
"required": [
166
+
"lang",
167
+
"name",
168
+
"description"
169
+
],
170
"properties": {
171
"lang": {
172
"type": "string",
173
+
"format": "language",
174
+
"description": "The code of the language these strings are written in."
175
},
176
"name": {
177
"type": "string",
178
+
"maxLength": 640,
179
"description": "A short human-readable name for the label.",
180
+
"maxGraphemes": 64
181
},
182
"description": {
183
"type": "string",
184
+
"maxLength": 100000,
185
"description": "A longer description of what the label means and why it might be applied.",
186
+
"maxGraphemes": 10000
187
}
188
+
},
189
+
"description": "Strings which describe the label in the UI, localized into a specific language."
190
}
191
}
192
+
}
+119
-55
lexicons/com/atproto/repo/applyWrites.json
+119
-55
lexicons/com/atproto/repo/applyWrites.json
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
-
"description": "Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.",
8
"input": {
9
-
"encoding": "application/json",
10
"schema": {
11
"type": "object",
12
-
"required": ["repo", "writes"],
13
"properties": {
14
"repo": {
15
"type": "string",
16
"format": "at-identifier",
17
"description": "The handle or DID of the repo (aka, current account)."
18
-
},
19
-
"validate": {
20
-
"type": "boolean",
21
-
"description": "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons."
22
},
23
"writes": {
24
"type": "array",
25
"items": {
26
"type": "union",
27
-
"refs": ["#create", "#update", "#delete"],
28
"closed": true
29
}
30
},
31
"swapCommit": {
32
"type": "string",
33
-
"description": "If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.",
34
-
"format": "cid"
35
}
36
}
37
}
38
-
},
39
"output": {
40
-
"encoding": "application/json",
41
"schema": {
42
"type": "object",
43
"required": [],
44
"properties": {
45
"commit": {
46
-
"type": "ref",
47
-
"ref": "com.atproto.repo.defs#commitMeta"
48
},
49
"results": {
50
"type": "array",
51
"items": {
52
"type": "union",
53
-
"refs": ["#createResult", "#updateResult", "#deleteResult"],
54
"closed": true
55
}
56
}
57
}
58
-
}
59
},
60
-
"errors": [
61
-
{
62
-
"name": "InvalidSwap",
63
-
"description": "Indicates that the 'swapCommit' parameter did not match current commit."
64
-
}
65
-
]
66
},
67
"create": {
68
"type": "object",
69
-
"description": "Operation which creates a new record.",
70
-
"required": ["collection", "value"],
71
"properties": {
72
-
"collection": { "type": "string", "format": "nsid" },
73
"rkey": {
74
"type": "string",
75
"maxLength": 512,
76
-
"format": "record-key",
77
"description": "NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility."
78
},
79
-
"value": { "type": "unknown" }
80
-
}
81
},
82
-
"update": {
83
"type": "object",
84
-
"description": "Operation which updates an existing record.",
85
-
"required": ["collection", "rkey", "value"],
86
"properties": {
87
-
"collection": { "type": "string", "format": "nsid" },
88
-
"rkey": { "type": "string", "format": "record-key" },
89
-
"value": { "type": "unknown" }
90
-
}
91
},
92
-
"delete": {
93
"type": "object",
94
-
"description": "Operation which deletes an existing record.",
95
-
"required": ["collection", "rkey"],
96
"properties": {
97
-
"collection": { "type": "string", "format": "nsid" },
98
-
"rkey": { "type": "string", "format": "record-key" }
99
-
}
100
},
101
"createResult": {
102
"type": "object",
103
-
"required": ["uri", "cid"],
104
"properties": {
105
-
"uri": { "type": "string", "format": "at-uri" },
106
-
"cid": { "type": "string", "format": "cid" },
107
"validationStatus": {
108
"type": "string",
109
-
"knownValues": ["valid", "unknown"]
110
}
111
}
112
},
113
"updateResult": {
114
"type": "object",
115
-
"required": ["uri", "cid"],
116
"properties": {
117
-
"uri": { "type": "string", "format": "at-uri" },
118
-
"cid": { "type": "string", "format": "cid" },
119
"validationStatus": {
120
"type": "string",
121
-
"knownValues": ["valid", "unknown"]
122
}
123
}
124
-
},
125
-
"deleteResult": {
126
-
"type": "object",
127
-
"required": [],
128
-
"properties": {}
129
}
130
}
131
-
}
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
"input": {
8
"schema": {
9
"type": "object",
10
+
"required": [
11
+
"repo",
12
+
"writes"
13
+
],
14
"properties": {
15
"repo": {
16
"type": "string",
17
"format": "at-identifier",
18
"description": "The handle or DID of the repo (aka, current account)."
19
},
20
"writes": {
21
"type": "array",
22
"items": {
23
+
"refs": [
24
+
"#create",
25
+
"#update",
26
+
"#delete"
27
+
],
28
"type": "union",
29
"closed": true
30
}
31
},
32
+
"validate": {
33
+
"type": "boolean",
34
+
"description": "Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons."
35
+
},
36
"swapCommit": {
37
"type": "string",
38
+
"format": "cid",
39
+
"description": "If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations."
40
}
41
}
42
+
},
43
+
"encoding": "application/json"
44
+
},
45
+
"errors": [
46
+
{
47
+
"name": "InvalidSwap",
48
+
"description": "Indicates that the 'swapCommit' parameter did not match current commit."
49
}
50
+
],
51
"output": {
52
"schema": {
53
"type": "object",
54
"required": [],
55
"properties": {
56
"commit": {
57
+
"ref": "com.atproto.repo.defs#commitMeta",
58
+
"type": "ref"
59
},
60
"results": {
61
"type": "array",
62
"items": {
63
+
"refs": [
64
+
"#createResult",
65
+
"#updateResult",
66
+
"#deleteResult"
67
+
],
68
"type": "union",
69
"closed": true
70
}
71
}
72
}
73
+
},
74
+
"encoding": "application/json"
75
},
76
+
"description": "Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS."
77
},
78
"create": {
79
"type": "object",
80
+
"required": [
81
+
"collection",
82
+
"value"
83
+
],
84
"properties": {
85
"rkey": {
86
"type": "string",
87
+
"format": "record-key",
88
"maxLength": 512,
89
"description": "NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility."
90
},
91
+
"value": {
92
+
"type": "unknown"
93
+
},
94
+
"collection": {
95
+
"type": "string",
96
+
"format": "nsid"
97
+
}
98
+
},
99
+
"description": "Operation which creates a new record."
100
},
101
+
"delete": {
102
"type": "object",
103
+
"required": [
104
+
"collection",
105
+
"rkey"
106
+
],
107
"properties": {
108
+
"rkey": {
109
+
"type": "string",
110
+
"format": "record-key"
111
+
},
112
+
"collection": {
113
+
"type": "string",
114
+
"format": "nsid"
115
+
}
116
+
},
117
+
"description": "Operation which deletes an existing record."
118
},
119
+
"update": {
120
"type": "object",
121
+
"required": [
122
+
"collection",
123
+
"rkey",
124
+
"value"
125
+
],
126
"properties": {
127
+
"rkey": {
128
+
"type": "string",
129
+
"format": "record-key"
130
+
},
131
+
"value": {
132
+
"type": "unknown"
133
+
},
134
+
"collection": {
135
+
"type": "string",
136
+
"format": "nsid"
137
+
}
138
+
},
139
+
"description": "Operation which updates an existing record."
140
},
141
"createResult": {
142
"type": "object",
143
+
"required": [
144
+
"uri",
145
+
"cid"
146
+
],
147
"properties": {
148
+
"cid": {
149
+
"type": "string",
150
+
"format": "cid"
151
+
},
152
+
"uri": {
153
+
"type": "string",
154
+
"format": "at-uri"
155
+
},
156
"validationStatus": {
157
"type": "string",
158
+
"knownValues": [
159
+
"valid",
160
+
"unknown"
161
+
]
162
}
163
}
164
},
165
+
"deleteResult": {
166
+
"type": "object",
167
+
"required": [],
168
+
"properties": {}
169
+
},
170
"updateResult": {
171
"type": "object",
172
+
"required": [
173
+
"uri",
174
+
"cid"
175
+
],
176
"properties": {
177
+
"cid": {
178
+
"type": "string",
179
+
"format": "cid"
180
+
},
181
+
"uri": {
182
+
"type": "string",
183
+
"format": "at-uri"
184
+
},
185
"validationStatus": {
186
"type": "string",
187
+
"knownValues": [
188
+
"valid",
189
+
"unknown"
190
+
]
191
}
192
}
193
}
194
}
195
+
}
+45
-29
lexicons/com/atproto/repo/createRecord.json
+45
-29
lexicons/com/atproto/repo/createRecord.json
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
-
"description": "Create a single new repository record. Requires auth, implemented by PDS.",
8
"input": {
9
-
"encoding": "application/json",
10
"schema": {
11
"type": "object",
12
-
"required": ["repo", "collection", "record"],
13
"properties": {
14
"repo": {
15
"type": "string",
16
"format": "at-identifier",
17
"description": "The handle or DID of the repo (aka, current account)."
18
},
19
-
"collection": {
20
-
"type": "string",
21
-
"format": "nsid",
22
-
"description": "The NSID of the record collection."
23
-
},
24
"rkey": {
25
"type": "string",
26
"format": "record-key",
27
-
"description": "The Record Key.",
28
-
"maxLength": 512
29
},
30
"validate": {
31
"type": "boolean",
32
"description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons."
33
},
34
-
"record": {
35
-
"type": "unknown",
36
-
"description": "The record itself. Must contain a $type field."
37
},
38
"swapCommit": {
39
"type": "string",
···
41
"description": "Compare and swap with the previous commit by CID."
42
}
43
}
44
}
45
-
},
46
"output": {
47
-
"encoding": "application/json",
48
"schema": {
49
"type": "object",
50
-
"required": ["uri", "cid"],
51
"properties": {
52
-
"uri": { "type": "string", "format": "at-uri" },
53
-
"cid": { "type": "string", "format": "cid" },
54
"commit": {
55
-
"type": "ref",
56
-
"ref": "com.atproto.repo.defs#commitMeta"
57
},
58
"validationStatus": {
59
"type": "string",
60
-
"knownValues": ["valid", "unknown"]
61
}
62
}
63
-
}
64
},
65
-
"errors": [
66
-
{
67
-
"name": "InvalidSwap",
68
-
"description": "Indicates that 'swapCommit' didn't match current repo commit."
69
-
}
70
-
]
71
}
72
}
73
-
}
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
"input": {
8
"schema": {
9
"type": "object",
10
+
"required": [
11
+
"repo",
12
+
"collection",
13
+
"record"
14
+
],
15
"properties": {
16
"repo": {
17
"type": "string",
18
"format": "at-identifier",
19
"description": "The handle or DID of the repo (aka, current account)."
20
},
21
"rkey": {
22
"type": "string",
23
"format": "record-key",
24
+
"maxLength": 512,
25
+
"description": "The Record Key."
26
+
},
27
+
"record": {
28
+
"type": "unknown",
29
+
"description": "The record itself. Must contain a $type field."
30
},
31
"validate": {
32
"type": "boolean",
33
"description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons."
34
},
35
+
"collection": {
36
+
"type": "string",
37
+
"format": "nsid",
38
+
"description": "The NSID of the record collection."
39
},
40
"swapCommit": {
41
"type": "string",
···
43
"description": "Compare and swap with the previous commit by CID."
44
}
45
}
46
+
},
47
+
"encoding": "application/json"
48
+
},
49
+
"errors": [
50
+
{
51
+
"name": "InvalidSwap",
52
+
"description": "Indicates that 'swapCommit' didn't match current repo commit."
53
}
54
+
],
55
"output": {
56
"schema": {
57
"type": "object",
58
+
"required": [
59
+
"uri",
60
+
"cid"
61
+
],
62
"properties": {
63
+
"cid": {
64
+
"type": "string",
65
+
"format": "cid"
66
+
},
67
+
"uri": {
68
+
"type": "string",
69
+
"format": "at-uri"
70
+
},
71
"commit": {
72
+
"ref": "com.atproto.repo.defs#commitMeta",
73
+
"type": "ref"
74
},
75
"validationStatus": {
76
"type": "string",
77
+
"knownValues": [
78
+
"valid",
79
+
"unknown"
80
+
]
81
}
82
}
83
+
},
84
+
"encoding": "application/json"
85
},
86
+
"description": "Create a single new repository record. Requires auth, implemented by PDS."
87
}
88
}
89
+
}
+13
-4
lexicons/com/atproto/repo/defs.json
+13
-4
lexicons/com/atproto/repo/defs.json
+26
-18
lexicons/com/atproto/repo/deleteRecord.json
+26
-18
lexicons/com/atproto/repo/deleteRecord.json
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
-
"description": "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.",
8
"input": {
9
-
"encoding": "application/json",
10
"schema": {
11
"type": "object",
12
-
"required": ["repo", "collection", "rkey"],
13
"properties": {
14
"repo": {
15
"type": "string",
16
"format": "at-identifier",
17
"description": "The handle or DID of the repo (aka, current account)."
18
},
19
-
"collection": {
20
-
"type": "string",
21
-
"format": "nsid",
22
-
"description": "The NSID of the record collection."
23
-
},
24
"rkey": {
25
"type": "string",
26
"format": "record-key",
27
"description": "The Record Key."
28
},
29
-
"swapRecord": {
30
"type": "string",
31
-
"format": "cid",
32
-
"description": "Compare and swap with the previous record by CID."
33
},
34
"swapCommit": {
35
"type": "string",
36
"format": "cid",
37
"description": "Compare and swap with the previous commit by CID."
38
}
39
}
40
}
41
-
},
42
"output": {
43
-
"encoding": "application/json",
44
"schema": {
45
"type": "object",
46
"properties": {
47
"commit": {
48
-
"type": "ref",
49
-
"ref": "com.atproto.repo.defs#commitMeta"
50
}
51
}
52
-
}
53
},
54
-
"errors": [{ "name": "InvalidSwap" }]
55
}
56
}
57
-
}
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
"input": {
8
"schema": {
9
"type": "object",
10
+
"required": [
11
+
"repo",
12
+
"collection",
13
+
"rkey"
14
+
],
15
"properties": {
16
"repo": {
17
"type": "string",
18
"format": "at-identifier",
19
"description": "The handle or DID of the repo (aka, current account)."
20
},
21
"rkey": {
22
"type": "string",
23
"format": "record-key",
24
"description": "The Record Key."
25
},
26
+
"collection": {
27
"type": "string",
28
+
"format": "nsid",
29
+
"description": "The NSID of the record collection."
30
},
31
"swapCommit": {
32
"type": "string",
33
"format": "cid",
34
"description": "Compare and swap with the previous commit by CID."
35
+
},
36
+
"swapRecord": {
37
+
"type": "string",
38
+
"format": "cid",
39
+
"description": "Compare and swap with the previous record by CID."
40
}
41
}
42
+
},
43
+
"encoding": "application/json"
44
+
},
45
+
"errors": [
46
+
{
47
+
"name": "InvalidSwap"
48
}
49
+
],
50
"output": {
51
"schema": {
52
"type": "object",
53
"properties": {
54
"commit": {
55
+
"ref": "com.atproto.repo.defs#commitMeta",
56
+
"type": "ref"
57
}
58
}
59
+
},
60
+
"encoding": "application/json"
61
},
62
+
"description": "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS."
63
}
64
}
65
+
}
+30
-19
lexicons/com/atproto/repo/describeRepo.json
+30
-19
lexicons/com/atproto/repo/describeRepo.json
···
4
"defs": {
5
"main": {
6
"type": "query",
7
-
"description": "Get information about an account and repository, including the list of collections. Does not require auth.",
8
-
"parameters": {
9
-
"type": "params",
10
-
"required": ["repo"],
11
-
"properties": {
12
-
"repo": {
13
-
"type": "string",
14
-
"format": "at-identifier",
15
-
"description": "The handle or DID of the repo."
16
-
}
17
-
}
18
-
},
19
"output": {
20
-
"encoding": "application/json",
21
"schema": {
22
"type": "object",
23
"required": [
···
28
"handleIsCorrect"
29
],
30
"properties": {
31
-
"handle": { "type": "string", "format": "handle" },
32
-
"did": { "type": "string", "format": "did" },
33
"didDoc": {
34
"type": "unknown",
35
"description": "The complete DID document for this account."
36
},
37
"collections": {
38
"type": "array",
39
-
"description": "List of all the collections (NSIDs) for which this repo contains at least one record.",
40
-
"items": { "type": "string", "format": "nsid" }
41
},
42
"handleIsCorrect": {
43
"type": "boolean",
44
"description": "Indicates if handle is currently valid (resolves bi-directionally)"
45
}
46
}
47
}
48
-
}
49
}
50
}
51
-
}
···
4
"defs": {
5
"main": {
6
"type": "query",
7
"output": {
8
"schema": {
9
"type": "object",
10
"required": [
···
15
"handleIsCorrect"
16
],
17
"properties": {
18
+
"did": {
19
+
"type": "string",
20
+
"format": "did"
21
+
},
22
"didDoc": {
23
"type": "unknown",
24
"description": "The complete DID document for this account."
25
},
26
+
"handle": {
27
+
"type": "string",
28
+
"format": "handle"
29
+
},
30
"collections": {
31
"type": "array",
32
+
"items": {
33
+
"type": "string",
34
+
"format": "nsid"
35
+
},
36
+
"description": "List of all the collections (NSIDs) for which this repo contains at least one record."
37
},
38
"handleIsCorrect": {
39
"type": "boolean",
40
"description": "Indicates if handle is currently valid (resolves bi-directionally)"
41
}
42
}
43
+
},
44
+
"encoding": "application/json"
45
+
},
46
+
"parameters": {
47
+
"type": "params",
48
+
"required": [
49
+
"repo"
50
+
],
51
+
"properties": {
52
+
"repo": {
53
+
"type": "string",
54
+
"format": "at-identifier",
55
+
"description": "The handle or DID of the repo."
56
+
}
57
}
58
+
},
59
+
"description": "Get information about an account and repository, including the list of collections. Does not require auth."
60
}
61
}
62
+
}
+45
-26
lexicons/com/atproto/repo/getRecord.json
+45
-26
lexicons/com/atproto/repo/getRecord.json
···
4
"defs": {
5
"main": {
6
"type": "query",
7
-
"description": "Get a single record from a repository. Does not require auth.",
8
"parameters": {
9
"type": "params",
10
-
"required": ["repo", "collection", "rkey"],
11
"properties": {
12
"repo": {
13
"type": "string",
14
"format": "at-identifier",
15
"description": "The handle or DID of the repo."
16
-
},
17
-
"collection": {
18
-
"type": "string",
19
-
"format": "nsid",
20
-
"description": "The NSID of the record collection."
21
},
22
"rkey": {
23
"type": "string",
24
-
"description": "The Record Key.",
25
-
"format": "record-key"
26
},
27
-
"cid": {
28
"type": "string",
29
-
"format": "cid",
30
-
"description": "The CID of the version of the record. If not specified, then return the most recent version."
31
}
32
}
33
},
34
-
"output": {
35
-
"encoding": "application/json",
36
-
"schema": {
37
-
"type": "object",
38
-
"required": ["uri", "value"],
39
-
"properties": {
40
-
"uri": { "type": "string", "format": "at-uri" },
41
-
"cid": { "type": "string", "format": "cid" },
42
-
"value": { "type": "unknown" }
43
-
}
44
-
}
45
-
},
46
-
"errors": [{ "name": "RecordNotFound" }]
47
}
48
}
49
-
}
···
4
"defs": {
5
"main": {
6
"type": "query",
7
+
"errors": [
8
+
{
9
+
"name": "RecordNotFound"
10
+
}
11
+
],
12
+
"output": {
13
+
"schema": {
14
+
"type": "object",
15
+
"required": [
16
+
"uri",
17
+
"value"
18
+
],
19
+
"properties": {
20
+
"cid": {
21
+
"type": "string",
22
+
"format": "cid"
23
+
},
24
+
"uri": {
25
+
"type": "string",
26
+
"format": "at-uri"
27
+
},
28
+
"value": {
29
+
"type": "unknown"
30
+
}
31
+
}
32
+
},
33
+
"encoding": "application/json"
34
+
},
35
"parameters": {
36
"type": "params",
37
+
"required": [
38
+
"repo",
39
+
"collection",
40
+
"rkey"
41
+
],
42
"properties": {
43
+
"cid": {
44
+
"type": "string",
45
+
"format": "cid",
46
+
"description": "The CID of the version of the record. If not specified, then return the most recent version."
47
+
},
48
"repo": {
49
"type": "string",
50
"format": "at-identifier",
51
"description": "The handle or DID of the repo."
52
},
53
"rkey": {
54
"type": "string",
55
+
"format": "record-key",
56
+
"description": "The Record Key."
57
},
58
+
"collection": {
59
"type": "string",
60
+
"format": "nsid",
61
+
"description": "The NSID of the record collection."
62
}
63
}
64
},
65
+
"description": "Get a single record from a repository. Does not require auth."
66
}
67
}
68
+
}
+3
-3
lexicons/com/atproto/repo/importRepo.json
+3
-3
lexicons/com/atproto/repo/importRepo.json
+40
-22
lexicons/com/atproto/repo/listMissingBlobs.json
+40
-22
lexicons/com/atproto/repo/listMissingBlobs.json
···
4
"defs": {
5
"main": {
6
"type": "query",
7
-
"description": "Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.",
8
-
"parameters": {
9
-
"type": "params",
10
-
"properties": {
11
-
"limit": {
12
-
"type": "integer",
13
-
"minimum": 1,
14
-
"maximum": 1000,
15
-
"default": 500
16
-
},
17
-
"cursor": { "type": "string" }
18
-
}
19
-
},
20
"output": {
21
-
"encoding": "application/json",
22
"schema": {
23
"type": "object",
24
-
"required": ["blobs"],
25
"properties": {
26
-
"cursor": { "type": "string" },
27
"blobs": {
28
"type": "array",
29
-
"items": { "type": "ref", "ref": "#recordBlob" }
30
}
31
}
32
}
33
-
}
34
},
35
"recordBlob": {
36
"type": "object",
37
-
"required": ["cid", "recordUri"],
38
"properties": {
39
-
"cid": { "type": "string", "format": "cid" },
40
-
"recordUri": { "type": "string", "format": "at-uri" }
41
}
42
}
43
}
44
-
}
···
4
"defs": {
5
"main": {
6
"type": "query",
7
"output": {
8
"schema": {
9
"type": "object",
10
+
"required": [
11
+
"blobs"
12
+
],
13
"properties": {
14
"blobs": {
15
"type": "array",
16
+
"items": {
17
+
"ref": "#recordBlob",
18
+
"type": "ref"
19
+
}
20
+
},
21
+
"cursor": {
22
+
"type": "string"
23
}
24
}
25
+
},
26
+
"encoding": "application/json"
27
+
},
28
+
"parameters": {
29
+
"type": "params",
30
+
"properties": {
31
+
"limit": {
32
+
"type": "integer",
33
+
"default": 500,
34
+
"maximum": 1000,
35
+
"minimum": 1
36
+
},
37
+
"cursor": {
38
+
"type": "string"
39
+
}
40
}
41
+
},
42
+
"description": "Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow."
43
},
44
"recordBlob": {
45
"type": "object",
46
+
"required": [
47
+
"cid",
48
+
"recordUri"
49
+
],
50
"properties": {
51
+
"cid": {
52
+
"type": "string",
53
+
"format": "cid"
54
+
},
55
+
"recordUri": {
56
+
"type": "string",
57
+
"format": "at-uri"
58
+
}
59
}
60
}
61
}
62
+
}
+52
-36
lexicons/com/atproto/repo/listRecords.json
+52
-36
lexicons/com/atproto/repo/listRecords.json
···
4
"defs": {
5
"main": {
6
"type": "query",
7
-
"description": "List a range of records in a repository, matching a specific collection. Does not require auth.",
8
"parameters": {
9
"type": "params",
10
-
"required": ["repo", "collection"],
11
"properties": {
12
"repo": {
13
"type": "string",
14
"format": "at-identifier",
15
"description": "The handle or DID of the repo."
16
},
17
-
"collection": {
18
-
"type": "string",
19
-
"format": "nsid",
20
-
"description": "The NSID of the record type."
21
-
},
22
"limit": {
23
"type": "integer",
24
-
"minimum": 1,
25
"maximum": 100,
26
-
"default": 50,
27
"description": "The number of records to return."
28
},
29
-
"cursor": { "type": "string" },
30
-
"rkeyStart": {
31
-
"type": "string",
32
-
"description": "DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)"
33
-
},
34
-
"rkeyEnd": {
35
-
"type": "string",
36
-
"description": "DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)"
37
},
38
"reverse": {
39
"type": "boolean",
40
"description": "Flag to reverse the order of the returned records."
41
}
42
}
43
},
44
-
"output": {
45
-
"encoding": "application/json",
46
-
"schema": {
47
-
"type": "object",
48
-
"required": ["records"],
49
-
"properties": {
50
-
"cursor": { "type": "string" },
51
-
"records": {
52
-
"type": "array",
53
-
"items": { "type": "ref", "ref": "#record" }
54
-
}
55
-
}
56
-
}
57
-
}
58
},
59
"record": {
60
"type": "object",
61
-
"required": ["uri", "cid", "value"],
62
"properties": {
63
-
"uri": { "type": "string", "format": "at-uri" },
64
-
"cid": { "type": "string", "format": "cid" },
65
-
"value": { "type": "unknown" }
66
}
67
}
68
}
69
-
}
···
4
"defs": {
5
"main": {
6
"type": "query",
7
+
"output": {
8
+
"schema": {
9
+
"type": "object",
10
+
"required": [
11
+
"records"
12
+
],
13
+
"properties": {
14
+
"cursor": {
15
+
"type": "string"
16
+
},
17
+
"records": {
18
+
"type": "array",
19
+
"items": {
20
+
"ref": "#record",
21
+
"type": "ref"
22
+
}
23
+
}
24
+
}
25
+
},
26
+
"encoding": "application/json"
27
+
},
28
"parameters": {
29
"type": "params",
30
+
"required": [
31
+
"repo",
32
+
"collection"
33
+
],
34
"properties": {
35
"repo": {
36
"type": "string",
37
"format": "at-identifier",
38
"description": "The handle or DID of the repo."
39
},
40
"limit": {
41
"type": "integer",
42
+
"default": 50,
43
"maximum": 100,
44
+
"minimum": 1,
45
"description": "The number of records to return."
46
},
47
+
"cursor": {
48
+
"type": "string"
49
},
50
"reverse": {
51
"type": "boolean",
52
"description": "Flag to reverse the order of the returned records."
53
+
},
54
+
"collection": {
55
+
"type": "string",
56
+
"format": "nsid",
57
+
"description": "The NSID of the record type."
58
}
59
}
60
},
61
+
"description": "List a range of records in a repository, matching a specific collection. Does not require auth."
62
},
63
"record": {
64
"type": "object",
65
+
"required": [
66
+
"uri",
67
+
"cid",
68
+
"value"
69
+
],
70
"properties": {
71
+
"cid": {
72
+
"type": "string",
73
+
"format": "cid"
74
+
},
75
+
"uri": {
76
+
"type": "string",
77
+
"format": "at-uri"
78
+
},
79
+
"value": {
80
+
"type": "unknown"
81
+
}
82
}
83
}
84
}
85
+
}
+52
-29
lexicons/com/atproto/repo/putRecord.json
+52
-29
lexicons/com/atproto/repo/putRecord.json
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
-
"description": "Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.",
8
"input": {
9
-
"encoding": "application/json",
10
"schema": {
11
"type": "object",
12
-
"required": ["repo", "collection", "rkey", "record"],
13
-
"nullable": ["swapRecord"],
14
"properties": {
15
"repo": {
16
"type": "string",
17
"format": "at-identifier",
18
"description": "The handle or DID of the repo (aka, current account)."
19
},
20
-
"collection": {
21
-
"type": "string",
22
-
"format": "nsid",
23
-
"description": "The NSID of the record collection."
24
-
},
25
"rkey": {
26
"type": "string",
27
"format": "record-key",
28
-
"description": "The Record Key.",
29
-
"maxLength": 512
30
},
31
"validate": {
32
"type": "boolean",
33
"description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons."
34
},
35
-
"record": {
36
-
"type": "unknown",
37
-
"description": "The record to write."
38
-
},
39
-
"swapRecord": {
40
"type": "string",
41
-
"format": "cid",
42
-
"description": "Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation"
43
},
44
"swapCommit": {
45
"type": "string",
46
"format": "cid",
47
"description": "Compare and swap with the previous commit by CID."
48
}
49
}
50
-
}
51
},
52
"output": {
53
-
"encoding": "application/json",
54
"schema": {
55
"type": "object",
56
-
"required": ["uri", "cid"],
57
"properties": {
58
-
"uri": { "type": "string", "format": "at-uri" },
59
-
"cid": { "type": "string", "format": "cid" },
60
"commit": {
61
-
"type": "ref",
62
-
"ref": "com.atproto.repo.defs#commitMeta"
63
},
64
"validationStatus": {
65
"type": "string",
66
-
"knownValues": ["valid", "unknown"]
67
}
68
}
69
-
}
70
},
71
-
"errors": [{ "name": "InvalidSwap" }]
72
}
73
}
74
-
}
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
"input": {
8
"schema": {
9
"type": "object",
10
+
"nullable": [
11
+
"swapRecord"
12
+
],
13
+
"required": [
14
+
"repo",
15
+
"collection",
16
+
"rkey",
17
+
"record"
18
+
],
19
"properties": {
20
"repo": {
21
"type": "string",
22
"format": "at-identifier",
23
"description": "The handle or DID of the repo (aka, current account)."
24
},
25
"rkey": {
26
"type": "string",
27
"format": "record-key",
28
+
"maxLength": 512,
29
+
"description": "The Record Key."
30
+
},
31
+
"record": {
32
+
"type": "unknown",
33
+
"description": "The record to write."
34
},
35
"validate": {
36
"type": "boolean",
37
"description": "Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons."
38
},
39
+
"collection": {
40
"type": "string",
41
+
"format": "nsid",
42
+
"description": "The NSID of the record collection."
43
},
44
"swapCommit": {
45
"type": "string",
46
"format": "cid",
47
"description": "Compare and swap with the previous commit by CID."
48
+
},
49
+
"swapRecord": {
50
+
"type": "string",
51
+
"format": "cid",
52
+
"description": "Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation"
53
}
54
}
55
+
},
56
+
"encoding": "application/json"
57
},
58
+
"errors": [
59
+
{
60
+
"name": "InvalidSwap"
61
+
}
62
+
],
63
"output": {
64
"schema": {
65
"type": "object",
66
+
"required": [
67
+
"uri",
68
+
"cid"
69
+
],
70
"properties": {
71
+
"cid": {
72
+
"type": "string",
73
+
"format": "cid"
74
+
},
75
+
"uri": {
76
+
"type": "string",
77
+
"format": "at-uri"
78
+
},
79
"commit": {
80
+
"ref": "com.atproto.repo.defs#commitMeta",
81
+
"type": "ref"
82
},
83
"validationStatus": {
84
"type": "string",
85
+
"knownValues": [
86
+
"valid",
87
+
"unknown"
88
+
]
89
}
90
}
91
+
},
92
+
"encoding": "application/json"
93
},
94
+
"description": "Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS."
95
}
96
}
97
+
}
+13
-4
lexicons/com/atproto/repo/strongRef.json
+13
-4
lexicons/com/atproto/repo/strongRef.json
+11
-7
lexicons/com/atproto/repo/uploadBlob.json
+11
-7
lexicons/com/atproto/repo/uploadBlob.json
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
-
"description": "Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.",
8
"input": {
9
"encoding": "*/*"
10
},
11
"output": {
12
-
"encoding": "application/json",
13
"schema": {
14
"type": "object",
15
-
"required": ["blob"],
16
"properties": {
17
-
"blob": { "type": "blob" }
18
}
19
-
}
20
-
}
21
}
22
}
23
-
}
···
4
"defs": {
5
"main": {
6
"type": "procedure",
7
"input": {
8
"encoding": "*/*"
9
},
10
"output": {
11
"schema": {
12
"type": "object",
13
+
"required": [
14
+
"blob"
15
+
],
16
"properties": {
17
+
"blob": {
18
+
"type": "blob"
19
+
}
20
}
21
+
},
22
+
"encoding": "application/json"
23
+
},
24
+
"description": "Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS."
25
}
26
}
27
+
}
+17
lexicons.json
+17
lexicons.json
···
···
1
+
{
2
+
"lexicons": [
3
+
"app.bsky.actor.defs",
4
+
"com.atproto.repo.uploadBlob",
5
+
"com.atproto.repo.strongRef",
6
+
"com.atproto.repo.putRecord",
7
+
"com.atproto.repo.listRecords",
8
+
"com.atproto.repo.listMissingBlobs",
9
+
"com.atproto.repo.importRepo",
10
+
"com.atproto.repo.getRecord",
11
+
"com.atproto.repo.describeRepo",
12
+
"com.atproto.repo.deleteRecord",
13
+
"com.atproto.repo.defs",
14
+
"com.atproto.repo.createRecord",
15
+
"com.atproto.repo.applyWrites"
16
+
]
17
+
}
+6
-2
package.json
+6
-2
package.json
···
21
"start:client": "pnpm --filter @statusphere/client start",
22
"clean": "pnpm -r clean",
23
"format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"",
24
-
"typecheck": "pnpm -r typecheck"
25
},
26
"devDependencies": {
27
"@atproto/lex-cli": "^0.6.1",
···
32
"rimraf": "^6.0.1",
33
"typescript": "^5.8.2"
34
},
35
-
"packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0"
36
}
···
21
"start:client": "pnpm --filter @statusphere/client start",
22
"clean": "pnpm -r clean",
23
"format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"",
24
+
"typecheck": "pnpm -r typecheck",
25
+
"lpm": "node node_modules/@lpm/cli/bin.js"
26
},
27
"devDependencies": {
28
"@atproto/lex-cli": "^0.6.1",
···
33
"rimraf": "^6.0.1",
34
"typescript": "^5.8.2"
35
},
36
+
"packageManager": "pnpm@10.18.1",
37
+
"dependencies": {
38
+
"@lpm/cli": "jsr:0.3.0-rc.1"
39
+
}
40
}
+206
packages/lexicon/src/index.ts
+206
packages/lexicon/src/index.ts
···
7
import { schemas } from './lexicons.js'
8
import * as AppBskyActorDefs from './types/app/bsky/actor/defs.js'
9
import * as AppBskyActorProfile from './types/app/bsky/actor/profile.js'
10
import * as ComAtprotoLabelDefs from './types/com/atproto/label/defs.js'
11
import * as ComAtprotoRepoApplyWrites from './types/com/atproto/repo/applyWrites.js'
12
import * as ComAtprotoRepoCreateRecord from './types/com/atproto/repo/createRecord.js'
···
47
export * as ComAtprotoRepoUploadBlob from './types/com/atproto/repo/uploadBlob.js'
48
export * as AppBskyActorDefs from './types/app/bsky/actor/defs.js'
49
export * as AppBskyActorProfile from './types/app/bsky/actor/profile.js'
50
51
export class AtpBaseClient extends XrpcClient {
52
xyz: XyzNS
···
329
export class AppBskyNS {
330
_client: XrpcClient
331
actor: AppBskyActorNS
332
333
constructor(client: XrpcClient) {
334
this._client = client
335
this.actor = new AppBskyActorNS(client)
336
}
337
}
338
···
411
)
412
}
413
}
···
7
import { schemas } from './lexicons.js'
8
import * as AppBskyActorDefs from './types/app/bsky/actor/defs.js'
9
import * as AppBskyActorProfile from './types/app/bsky/actor/profile.js'
10
+
import * as AppBskyEmbedDefs from './types/app/bsky/embed/defs.js'
11
+
import * as AppBskyEmbedExternal from './types/app/bsky/embed/external.js'
12
+
import * as AppBskyEmbedImages from './types/app/bsky/embed/images.js'
13
+
import * as AppBskyEmbedRecord from './types/app/bsky/embed/record.js'
14
+
import * as AppBskyEmbedRecordWithMedia from './types/app/bsky/embed/recordWithMedia.js'
15
+
import * as AppBskyEmbedVideo from './types/app/bsky/embed/video.js'
16
+
import * as AppBskyFeedDefs from './types/app/bsky/feed/defs.js'
17
+
import * as AppBskyFeedPostgate from './types/app/bsky/feed/postgate.js'
18
+
import * as AppBskyFeedThreadgate from './types/app/bsky/feed/threadgate.js'
19
+
import * as AppBskyGraphDefs from './types/app/bsky/graph/defs.js'
20
+
import * as AppBskyLabelerDefs from './types/app/bsky/labeler/defs.js'
21
+
import * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet.js'
22
import * as ComAtprotoLabelDefs from './types/com/atproto/label/defs.js'
23
import * as ComAtprotoRepoApplyWrites from './types/com/atproto/repo/applyWrites.js'
24
import * as ComAtprotoRepoCreateRecord from './types/com/atproto/repo/createRecord.js'
···
59
export * as ComAtprotoRepoUploadBlob from './types/com/atproto/repo/uploadBlob.js'
60
export * as AppBskyActorDefs from './types/app/bsky/actor/defs.js'
61
export * as AppBskyActorProfile from './types/app/bsky/actor/profile.js'
62
+
export * as AppBskyEmbedDefs from './types/app/bsky/embed/defs.js'
63
+
export * as AppBskyEmbedExternal from './types/app/bsky/embed/external.js'
64
+
export * as AppBskyEmbedImages from './types/app/bsky/embed/images.js'
65
+
export * as AppBskyEmbedRecord from './types/app/bsky/embed/record.js'
66
+
export * as AppBskyEmbedRecordWithMedia from './types/app/bsky/embed/recordWithMedia.js'
67
+
export * as AppBskyEmbedVideo from './types/app/bsky/embed/video.js'
68
+
export * as AppBskyFeedDefs from './types/app/bsky/feed/defs.js'
69
+
export * as AppBskyFeedPostgate from './types/app/bsky/feed/postgate.js'
70
+
export * as AppBskyFeedThreadgate from './types/app/bsky/feed/threadgate.js'
71
+
export * as AppBskyGraphDefs from './types/app/bsky/graph/defs.js'
72
+
export * as AppBskyLabelerDefs from './types/app/bsky/labeler/defs.js'
73
+
export * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet.js'
74
+
75
+
export const APP_BSKY_FEED = {
76
+
DefsRequestLess: 'app.bsky.feed.defs#requestLess',
77
+
DefsRequestMore: 'app.bsky.feed.defs#requestMore',
78
+
DefsInteractionLike: 'app.bsky.feed.defs#interactionLike',
79
+
DefsInteractionSeen: 'app.bsky.feed.defs#interactionSeen',
80
+
DefsClickthroughItem: 'app.bsky.feed.defs#clickthroughItem',
81
+
DefsContentModeVideo: 'app.bsky.feed.defs#contentModeVideo',
82
+
DefsInteractionQuote: 'app.bsky.feed.defs#interactionQuote',
83
+
DefsInteractionReply: 'app.bsky.feed.defs#interactionReply',
84
+
DefsInteractionShare: 'app.bsky.feed.defs#interactionShare',
85
+
DefsClickthroughEmbed: 'app.bsky.feed.defs#clickthroughEmbed',
86
+
DefsInteractionRepost: 'app.bsky.feed.defs#interactionRepost',
87
+
DefsClickthroughAuthor: 'app.bsky.feed.defs#clickthroughAuthor',
88
+
DefsClickthroughReposter: 'app.bsky.feed.defs#clickthroughReposter',
89
+
DefsContentModeUnspecified: 'app.bsky.feed.defs#contentModeUnspecified',
90
+
}
91
+
export const APP_BSKY_GRAPH = {
92
+
DefsModlist: 'app.bsky.graph.defs#modlist',
93
+
DefsCuratelist: 'app.bsky.graph.defs#curatelist',
94
+
DefsReferencelist: 'app.bsky.graph.defs#referencelist',
95
+
}
96
97
export class AtpBaseClient extends XrpcClient {
98
xyz: XyzNS
···
375
export class AppBskyNS {
376
_client: XrpcClient
377
actor: AppBskyActorNS
378
+
embed: AppBskyEmbedNS
379
+
feed: AppBskyFeedNS
380
+
richtext: AppBskyRichtextNS
381
382
constructor(client: XrpcClient) {
383
this._client = client
384
this.actor = new AppBskyActorNS(client)
385
+
this.embed = new AppBskyEmbedNS(client)
386
+
this.feed = new AppBskyFeedNS(client)
387
+
this.richtext = new AppBskyRichtextNS(client)
388
}
389
}
390
···
463
)
464
}
465
}
466
+
467
+
export class AppBskyEmbedNS {
468
+
_client: XrpcClient
469
+
470
+
constructor(client: XrpcClient) {
471
+
this._client = client
472
+
}
473
+
}
474
+
475
+
export class AppBskyFeedNS {
476
+
_client: XrpcClient
477
+
postgate: PostgateRecord
478
+
threadgate: ThreadgateRecord
479
+
480
+
constructor(client: XrpcClient) {
481
+
this._client = client
482
+
this.postgate = new PostgateRecord(client)
483
+
this.threadgate = new ThreadgateRecord(client)
484
+
}
485
+
}
486
+
487
+
export class PostgateRecord {
488
+
_client: XrpcClient
489
+
490
+
constructor(client: XrpcClient) {
491
+
this._client = client
492
+
}
493
+
494
+
async list(
495
+
params: OmitKey<ComAtprotoRepoListRecords.QueryParams, 'collection'>,
496
+
): Promise<{
497
+
cursor?: string
498
+
records: { uri: string; value: AppBskyFeedPostgate.Record }[]
499
+
}> {
500
+
const res = await this._client.call('com.atproto.repo.listRecords', {
501
+
collection: 'app.bsky.feed.postgate',
502
+
...params,
503
+
})
504
+
return res.data
505
+
}
506
+
507
+
async get(
508
+
params: OmitKey<ComAtprotoRepoGetRecord.QueryParams, 'collection'>,
509
+
): Promise<{ uri: string; cid: string; value: AppBskyFeedPostgate.Record }> {
510
+
const res = await this._client.call('com.atproto.repo.getRecord', {
511
+
collection: 'app.bsky.feed.postgate',
512
+
...params,
513
+
})
514
+
return res.data
515
+
}
516
+
517
+
async create(
518
+
params: OmitKey<
519
+
ComAtprotoRepoCreateRecord.InputSchema,
520
+
'collection' | 'record'
521
+
>,
522
+
record: Un$Typed<AppBskyFeedPostgate.Record>,
523
+
headers?: Record<string, string>,
524
+
): Promise<{ uri: string; cid: string }> {
525
+
const collection = 'app.bsky.feed.postgate'
526
+
const res = await this._client.call(
527
+
'com.atproto.repo.createRecord',
528
+
undefined,
529
+
{ collection, ...params, record: { ...record, $type: collection } },
530
+
{ encoding: 'application/json', headers },
531
+
)
532
+
return res.data
533
+
}
534
+
535
+
async delete(
536
+
params: OmitKey<ComAtprotoRepoDeleteRecord.InputSchema, 'collection'>,
537
+
headers?: Record<string, string>,
538
+
): Promise<void> {
539
+
await this._client.call(
540
+
'com.atproto.repo.deleteRecord',
541
+
undefined,
542
+
{ collection: 'app.bsky.feed.postgate', ...params },
543
+
{ headers },
544
+
)
545
+
}
546
+
}
547
+
548
+
export class ThreadgateRecord {
549
+
_client: XrpcClient
550
+
551
+
constructor(client: XrpcClient) {
552
+
this._client = client
553
+
}
554
+
555
+
async list(
556
+
params: OmitKey<ComAtprotoRepoListRecords.QueryParams, 'collection'>,
557
+
): Promise<{
558
+
cursor?: string
559
+
records: { uri: string; value: AppBskyFeedThreadgate.Record }[]
560
+
}> {
561
+
const res = await this._client.call('com.atproto.repo.listRecords', {
562
+
collection: 'app.bsky.feed.threadgate',
563
+
...params,
564
+
})
565
+
return res.data
566
+
}
567
+
568
+
async get(
569
+
params: OmitKey<ComAtprotoRepoGetRecord.QueryParams, 'collection'>,
570
+
): Promise<{
571
+
uri: string
572
+
cid: string
573
+
value: AppBskyFeedThreadgate.Record
574
+
}> {
575
+
const res = await this._client.call('com.atproto.repo.getRecord', {
576
+
collection: 'app.bsky.feed.threadgate',
577
+
...params,
578
+
})
579
+
return res.data
580
+
}
581
+
582
+
async create(
583
+
params: OmitKey<
584
+
ComAtprotoRepoCreateRecord.InputSchema,
585
+
'collection' | 'record'
586
+
>,
587
+
record: Un$Typed<AppBskyFeedThreadgate.Record>,
588
+
headers?: Record<string, string>,
589
+
): Promise<{ uri: string; cid: string }> {
590
+
const collection = 'app.bsky.feed.threadgate'
591
+
const res = await this._client.call(
592
+
'com.atproto.repo.createRecord',
593
+
undefined,
594
+
{ collection, ...params, record: { ...record, $type: collection } },
595
+
{ encoding: 'application/json', headers },
596
+
)
597
+
return res.data
598
+
}
599
+
600
+
async delete(
601
+
params: OmitKey<ComAtprotoRepoDeleteRecord.InputSchema, 'collection'>,
602
+
headers?: Record<string, string>,
603
+
): Promise<void> {
604
+
await this._client.call(
605
+
'com.atproto.repo.deleteRecord',
606
+
undefined,
607
+
{ collection: 'app.bsky.feed.threadgate', ...params },
608
+
{ headers },
609
+
)
610
+
}
611
+
}
612
+
613
+
export class AppBskyRichtextNS {
614
+
_client: XrpcClient
615
+
616
+
constructor(client: XrpcClient) {
617
+
this._client = client
618
+
}
619
+
}
+2500
-346
packages/lexicon/src/lexicons.ts
+2500
-346
packages/lexicon/src/lexicons.ts
···
193
defs: {
194
label: {
195
type: 'object',
196
-
description:
197
-
'Metadata tag on an atproto resource (eg, repo or record).',
198
required: ['src', 'uri', 'val', 'cts'],
199
properties: {
200
-
ver: {
201
-
type: 'integer',
202
-
description: 'The AT Protocol version of the label object.',
203
},
204
src: {
205
type: 'string',
···
212
description:
213
'AT URI of the record, repository (account), or other resource that this label applies to.',
214
},
215
-
cid: {
216
-
type: 'string',
217
-
format: 'cid',
218
-
description:
219
-
"Optionally, CID specifying the specific version of 'uri' resource this label applies to.",
220
-
},
221
val: {
222
type: 'string',
223
maxLength: 128,
224
description:
225
'The short string name of the value or type of this label.',
226
},
227
-
neg: {
228
-
type: 'boolean',
229
-
description:
230
-
'If true, this is a negation label, overwriting a previous label.',
231
},
232
-
cts: {
233
-
type: 'string',
234
-
format: 'datetime',
235
-
description: 'Timestamp when this label was created.',
236
-
},
237
-
exp: {
238
type: 'string',
239
-
format: 'datetime',
240
description:
241
-
'Timestamp at which this label expires (no longer applies).',
242
-
},
243
-
sig: {
244
-
type: 'bytes',
245
-
description: 'Signature of dag-cbor encoded label.',
246
},
247
},
248
},
249
selfLabels: {
250
type: 'object',
251
-
description:
252
-
'Metadata tags on an atproto record, published by the author within the record.',
253
required: ['values'],
254
properties: {
255
values: {
256
type: 'array',
257
items: {
258
type: 'ref',
259
-
ref: 'lex:com.atproto.label.defs#selfLabel',
260
},
261
maxLength: 10,
262
},
263
},
264
-
},
265
-
selfLabel: {
266
-
type: 'object',
267
description:
268
-
'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.',
269
-
required: ['val'],
270
-
properties: {
271
-
val: {
272
-
type: 'string',
273
-
maxLength: 128,
274
-
description:
275
-
'The short string name of the value or type of this label.',
276
-
},
277
-
},
278
},
279
labelValueDefinition: {
280
type: 'object',
281
-
description:
282
-
'Declares a label value and its expected interpretations and behaviors.',
283
required: ['identifier', 'severity', 'blurs', 'locales'],
284
properties: {
285
-
identifier: {
286
type: 'string',
287
description:
288
-
"The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
289
-
maxLength: 100,
290
-
maxGraphemes: 100,
291
},
292
severity: {
293
type: 'string',
···
295
"How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
296
knownValues: ['inform', 'alert', 'none'],
297
},
298
-
blurs: {
299
type: 'string',
300
description:
301
-
"What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
302
-
knownValues: ['content', 'media', 'none'],
303
},
304
defaultSetting: {
305
type: 'string',
306
description: 'The default setting for this label.',
307
knownValues: ['ignore', 'warn', 'hide'],
308
-
default: 'warn',
309
-
},
310
-
adultOnly: {
311
-
type: 'boolean',
312
-
description:
313
-
'Does the user need to have adult content enabled in order to configure this label?',
314
-
},
315
-
locales: {
316
-
type: 'array',
317
-
items: {
318
-
type: 'ref',
319
-
ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings',
320
-
},
321
},
322
},
323
},
324
labelValueDefinitionStrings: {
325
type: 'object',
326
-
description:
327
-
'Strings which describe the label in the UI, localized into a specific language.',
328
required: ['lang', 'name', 'description'],
329
properties: {
330
lang: {
331
type: 'string',
332
description:
333
'The code of the language these strings are written in.',
334
-
format: 'language',
335
},
336
name: {
337
type: 'string',
338
description: 'A short human-readable name for the label.',
339
maxGraphemes: 64,
340
-
maxLength: 640,
341
},
342
description: {
343
type: 'string',
344
description:
345
'A longer description of what the label means and why it might be applied.',
346
maxGraphemes: 10000,
347
-
maxLength: 100000,
348
},
349
},
350
-
},
351
-
labelValue: {
352
-
type: 'string',
353
-
knownValues: [
354
-
'!hide',
355
-
'!no-promote',
356
-
'!warn',
357
-
'!no-unauthenticated',
358
-
'dmca-violation',
359
-
'doxxing',
360
-
'porn',
361
-
'sexual',
362
-
'nudity',
363
-
'nsfl',
364
-
'gore',
365
-
],
366
},
367
},
368
},
···
372
defs: {
373
main: {
374
type: 'procedure',
375
-
description:
376
-
'Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.',
377
input: {
378
-
encoding: 'application/json',
379
schema: {
380
type: 'object',
381
required: ['repo', 'writes'],
···
386
description:
387
'The handle or DID of the repo (aka, current account).',
388
},
389
-
validate: {
390
-
type: 'boolean',
391
-
description:
392
-
"Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons.",
393
-
},
394
writes: {
395
type: 'array',
396
items: {
397
-
type: 'union',
398
refs: [
399
'lex:com.atproto.repo.applyWrites#create',
400
'lex:com.atproto.repo.applyWrites#update',
401
'lex:com.atproto.repo.applyWrites#delete',
402
],
403
closed: true,
404
},
405
},
406
swapCommit: {
407
type: 'string',
408
description:
409
'If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.',
410
-
format: 'cid',
411
},
412
},
413
},
414
},
415
output: {
416
-
encoding: 'application/json',
417
schema: {
418
type: 'object',
419
required: [],
420
properties: {
421
commit: {
422
type: 'ref',
423
-
ref: 'lex:com.atproto.repo.defs#commitMeta',
424
},
425
results: {
426
type: 'array',
427
items: {
428
-
type: 'union',
429
refs: [
430
'lex:com.atproto.repo.applyWrites#createResult',
431
'lex:com.atproto.repo.applyWrites#updateResult',
432
'lex:com.atproto.repo.applyWrites#deleteResult',
433
],
434
closed: true,
435
},
436
},
437
},
438
},
439
},
440
-
errors: [
441
-
{
442
-
name: 'InvalidSwap',
443
-
description:
444
-
"Indicates that the 'swapCommit' parameter did not match current commit.",
445
-
},
446
-
],
447
},
448
create: {
449
type: 'object',
450
-
description: 'Operation which creates a new record.',
451
required: ['collection', 'value'],
452
properties: {
453
-
collection: {
454
-
type: 'string',
455
-
format: 'nsid',
456
-
},
457
rkey: {
458
type: 'string',
459
maxLength: 512,
460
-
format: 'record-key',
461
description:
462
'NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.',
463
},
464
value: {
465
type: 'unknown',
466
},
467
},
468
},
469
-
update: {
470
type: 'object',
471
-
description: 'Operation which updates an existing record.',
472
-
required: ['collection', 'rkey', 'value'],
473
properties: {
474
collection: {
475
type: 'string',
476
format: 'nsid',
477
},
478
rkey: {
479
type: 'string',
480
format: 'record-key',
···
482
value: {
483
type: 'unknown',
484
},
485
-
},
486
-
},
487
-
delete: {
488
-
type: 'object',
489
-
description: 'Operation which deletes an existing record.',
490
-
required: ['collection', 'rkey'],
491
-
properties: {
492
collection: {
493
type: 'string',
494
format: 'nsid',
495
-
},
496
-
rkey: {
497
-
type: 'string',
498
-
format: 'record-key',
499
},
500
},
501
},
502
createResult: {
503
type: 'object',
504
required: ['uri', 'cid'],
505
properties: {
506
-
uri: {
507
-
type: 'string',
508
-
format: 'at-uri',
509
-
},
510
cid: {
511
type: 'string',
512
format: 'cid',
513
},
514
validationStatus: {
515
type: 'string',
516
knownValues: ['valid', 'unknown'],
517
},
518
},
519
},
520
updateResult: {
521
type: 'object',
522
required: ['uri', 'cid'],
523
properties: {
524
-
uri: {
525
-
type: 'string',
526
-
format: 'at-uri',
527
-
},
528
cid: {
529
type: 'string',
530
format: 'cid',
531
},
532
validationStatus: {
533
type: 'string',
···
535
},
536
},
537
},
538
-
deleteResult: {
539
-
type: 'object',
540
-
required: [],
541
-
properties: {},
542
-
},
543
},
544
},
545
ComAtprotoRepoCreateRecord: {
···
548
defs: {
549
main: {
550
type: 'procedure',
551
-
description:
552
-
'Create a single new repository record. Requires auth, implemented by PDS.',
553
input: {
554
-
encoding: 'application/json',
555
schema: {
556
type: 'object',
557
required: ['repo', 'collection', 'record'],
···
562
description:
563
'The handle or DID of the repo (aka, current account).',
564
},
565
-
collection: {
566
-
type: 'string',
567
-
format: 'nsid',
568
-
description: 'The NSID of the record collection.',
569
-
},
570
rkey: {
571
type: 'string',
572
format: 'record-key',
573
description: 'The Record Key.',
574
-
maxLength: 512,
575
},
576
validate: {
577
type: 'boolean',
578
description:
579
"Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.",
580
},
581
-
record: {
582
-
type: 'unknown',
583
-
description: 'The record itself. Must contain a $type field.',
584
},
585
swapCommit: {
586
type: 'string',
···
590
},
591
},
592
},
593
},
594
output: {
595
-
encoding: 'application/json',
596
schema: {
597
type: 'object',
598
required: ['uri', 'cid'],
599
properties: {
600
uri: {
601
type: 'string',
602
format: 'at-uri',
603
},
604
-
cid: {
605
-
type: 'string',
606
-
format: 'cid',
607
-
},
608
commit: {
609
type: 'ref',
610
-
ref: 'lex:com.atproto.repo.defs#commitMeta',
611
},
612
validationStatus: {
613
type: 'string',
···
615
},
616
},
617
},
618
},
619
-
errors: [
620
-
{
621
-
name: 'InvalidSwap',
622
-
description:
623
-
"Indicates that 'swapCommit' didn't match current repo commit.",
624
-
},
625
-
],
626
},
627
},
628
},
···
652
defs: {
653
main: {
654
type: 'procedure',
655
-
description:
656
-
"Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.",
657
input: {
658
-
encoding: 'application/json',
659
schema: {
660
type: 'object',
661
required: ['repo', 'collection', 'rkey'],
···
666
description:
667
'The handle or DID of the repo (aka, current account).',
668
},
669
-
collection: {
670
-
type: 'string',
671
-
format: 'nsid',
672
-
description: 'The NSID of the record collection.',
673
-
},
674
rkey: {
675
type: 'string',
676
format: 'record-key',
677
description: 'The Record Key.',
678
},
679
-
swapRecord: {
680
type: 'string',
681
-
format: 'cid',
682
-
description:
683
-
'Compare and swap with the previous record by CID.',
684
},
685
swapCommit: {
686
type: 'string',
···
688
description:
689
'Compare and swap with the previous commit by CID.',
690
},
691
},
692
},
693
},
694
output: {
695
-
encoding: 'application/json',
696
schema: {
697
type: 'object',
698
properties: {
699
commit: {
700
-
type: 'ref',
701
ref: 'lex:com.atproto.repo.defs#commitMeta',
702
},
703
},
704
},
705
},
706
-
errors: [
707
-
{
708
-
name: 'InvalidSwap',
709
-
},
710
-
],
711
},
712
},
713
},
···
717
defs: {
718
main: {
719
type: 'query',
720
-
description:
721
-
'Get information about an account and repository, including the list of collections. Does not require auth.',
722
-
parameters: {
723
-
type: 'params',
724
-
required: ['repo'],
725
-
properties: {
726
-
repo: {
727
-
type: 'string',
728
-
format: 'at-identifier',
729
-
description: 'The handle or DID of the repo.',
730
-
},
731
-
},
732
-
},
733
output: {
734
-
encoding: 'application/json',
735
schema: {
736
type: 'object',
737
required: [
···
742
'handleIsCorrect',
743
],
744
properties: {
745
-
handle: {
746
-
type: 'string',
747
-
format: 'handle',
748
-
},
749
did: {
750
type: 'string',
751
format: 'did',
···
754
type: 'unknown',
755
description: 'The complete DID document for this account.',
756
},
757
collections: {
758
type: 'array',
759
-
description:
760
-
'List of all the collections (NSIDs) for which this repo contains at least one record.',
761
items: {
762
type: 'string',
763
format: 'nsid',
764
},
765
},
766
handleIsCorrect: {
767
type: 'boolean',
···
770
},
771
},
772
},
773
},
774
},
775
},
776
},
···
780
defs: {
781
main: {
782
type: 'query',
783
-
description:
784
-
'Get a single record from a repository. Does not require auth.',
785
-
parameters: {
786
-
type: 'params',
787
-
required: ['repo', 'collection', 'rkey'],
788
-
properties: {
789
-
repo: {
790
-
type: 'string',
791
-
format: 'at-identifier',
792
-
description: 'The handle or DID of the repo.',
793
-
},
794
-
collection: {
795
-
type: 'string',
796
-
format: 'nsid',
797
-
description: 'The NSID of the record collection.',
798
-
},
799
-
rkey: {
800
-
type: 'string',
801
-
description: 'The Record Key.',
802
-
format: 'record-key',
803
-
},
804
-
cid: {
805
-
type: 'string',
806
-
format: 'cid',
807
-
description:
808
-
'The CID of the version of the record. If not specified, then return the most recent version.',
809
-
},
810
},
811
-
},
812
output: {
813
-
encoding: 'application/json',
814
schema: {
815
type: 'object',
816
required: ['uri', 'value'],
817
properties: {
818
-
uri: {
819
-
type: 'string',
820
-
format: 'at-uri',
821
-
},
822
cid: {
823
type: 'string',
824
format: 'cid',
825
},
826
value: {
827
type: 'unknown',
828
},
829
},
830
},
831
},
832
-
errors: [
833
-
{
834
-
name: 'RecordNotFound',
835
},
836
-
],
837
},
838
},
839
},
···
843
defs: {
844
main: {
845
type: 'procedure',
846
-
description:
847
-
'Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.',
848
input: {
849
encoding: 'application/vnd.ipld.car',
850
},
851
},
852
},
853
},
···
857
defs: {
858
main: {
859
type: 'query',
860
-
description:
861
-
'Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.',
862
-
parameters: {
863
-
type: 'params',
864
-
properties: {
865
-
limit: {
866
-
type: 'integer',
867
-
minimum: 1,
868
-
maximum: 1000,
869
-
default: 500,
870
-
},
871
-
cursor: {
872
-
type: 'string',
873
-
},
874
-
},
875
-
},
876
output: {
877
-
encoding: 'application/json',
878
schema: {
879
type: 'object',
880
required: ['blobs'],
881
properties: {
882
-
cursor: {
883
-
type: 'string',
884
-
},
885
blobs: {
886
type: 'array',
887
items: {
888
-
type: 'ref',
889
ref: 'lex:com.atproto.repo.listMissingBlobs#recordBlob',
890
},
891
},
892
},
893
},
894
},
895
},
896
recordBlob: {
897
type: 'object',
···
915
defs: {
916
main: {
917
type: 'query',
918
-
description:
919
-
'List a range of records in a repository, matching a specific collection. Does not require auth.',
920
parameters: {
921
type: 'params',
922
required: ['repo', 'collection'],
···
925
type: 'string',
926
format: 'at-identifier',
927
description: 'The handle or DID of the repo.',
928
-
},
929
-
collection: {
930
-
type: 'string',
931
-
format: 'nsid',
932
-
description: 'The NSID of the record type.',
933
},
934
limit: {
935
type: 'integer',
936
-
minimum: 1,
937
-
maximum: 100,
938
default: 50,
939
description: 'The number of records to return.',
940
},
941
cursor: {
942
type: 'string',
943
},
944
-
rkeyStart: {
945
-
type: 'string',
946
-
description:
947
-
'DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)',
948
-
},
949
-
rkeyEnd: {
950
-
type: 'string',
951
-
description:
952
-
'DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)',
953
-
},
954
reverse: {
955
type: 'boolean',
956
description: 'Flag to reverse the order of the returned records.',
957
},
958
-
},
959
-
},
960
-
output: {
961
-
encoding: 'application/json',
962
-
schema: {
963
-
type: 'object',
964
-
required: ['records'],
965
-
properties: {
966
-
cursor: {
967
-
type: 'string',
968
-
},
969
-
records: {
970
-
type: 'array',
971
-
items: {
972
-
type: 'ref',
973
-
ref: 'lex:com.atproto.repo.listRecords#record',
974
-
},
975
-
},
976
},
977
},
978
},
979
},
980
record: {
981
type: 'object',
982
required: ['uri', 'cid', 'value'],
983
properties: {
984
-
uri: {
985
-
type: 'string',
986
-
format: 'at-uri',
987
-
},
988
cid: {
989
type: 'string',
990
format: 'cid',
991
},
992
value: {
993
type: 'unknown',
···
1002
defs: {
1003
main: {
1004
type: 'procedure',
1005
-
description:
1006
-
'Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.',
1007
input: {
1008
-
encoding: 'application/json',
1009
schema: {
1010
type: 'object',
1011
-
required: ['repo', 'collection', 'rkey', 'record'],
1012
nullable: ['swapRecord'],
1013
properties: {
1014
repo: {
1015
type: 'string',
···
1017
description:
1018
'The handle or DID of the repo (aka, current account).',
1019
},
1020
-
collection: {
1021
-
type: 'string',
1022
-
format: 'nsid',
1023
-
description: 'The NSID of the record collection.',
1024
-
},
1025
rkey: {
1026
type: 'string',
1027
format: 'record-key',
1028
-
description: 'The Record Key.',
1029
maxLength: 512,
1030
},
1031
validate: {
1032
type: 'boolean',
1033
description:
1034
"Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.",
1035
},
1036
-
record: {
1037
-
type: 'unknown',
1038
-
description: 'The record to write.',
1039
},
1040
-
swapRecord: {
1041
type: 'string',
1042
format: 'cid',
1043
description:
1044
-
'Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation',
1045
},
1046
-
swapCommit: {
1047
type: 'string',
1048
format: 'cid',
1049
description:
1050
-
'Compare and swap with the previous commit by CID.',
1051
},
1052
},
1053
},
1054
},
1055
output: {
1056
-
encoding: 'application/json',
1057
schema: {
1058
type: 'object',
1059
required: ['uri', 'cid'],
1060
properties: {
1061
uri: {
1062
type: 'string',
1063
format: 'at-uri',
1064
},
1065
-
cid: {
1066
-
type: 'string',
1067
-
format: 'cid',
1068
-
},
1069
commit: {
1070
-
type: 'ref',
1071
ref: 'lex:com.atproto.repo.defs#commitMeta',
1072
},
1073
validationStatus: {
1074
type: 'string',
···
1076
},
1077
},
1078
},
1079
},
1080
-
errors: [
1081
-
{
1082
-
name: 'InvalidSwap',
1083
-
},
1084
-
],
1085
},
1086
},
1087
},
···
1094
type: 'object',
1095
required: ['uri', 'cid'],
1096
properties: {
1097
-
uri: {
1098
-
type: 'string',
1099
-
format: 'at-uri',
1100
-
},
1101
cid: {
1102
type: 'string',
1103
format: 'cid',
1104
},
1105
},
1106
},
···
1112
defs: {
1113
main: {
1114
type: 'procedure',
1115
-
description:
1116
-
'Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.',
1117
input: {
1118
encoding: '*/*',
1119
},
1120
output: {
1121
-
encoding: 'application/json',
1122
schema: {
1123
type: 'object',
1124
required: ['blob'],
···
1128
},
1129
},
1130
},
1131
},
1132
},
1133
},
1134
},
···
1136
lexicon: 1,
1137
id: 'app.bsky.actor.defs',
1138
defs: {
1139
profileView: {
1140
type: 'object',
1141
required: ['did', 'handle'],
···
1144
type: 'string',
1145
format: 'did',
1146
},
1147
handle: {
1148
type: 'string',
1149
format: 'handle',
1150
},
1151
displayName: {
1152
type: 'string',
1153
maxGraphemes: 64,
1154
-
maxLength: 640,
1155
},
1156
-
description: {
1157
type: 'string',
1158
-
maxGraphemes: 256,
1159
-
maxLength: 2560,
1160
},
1161
avatar: {
1162
type: 'string',
1163
format: 'uri',
1164
},
1165
-
indexedAt: {
1166
type: 'string',
1167
format: 'datetime',
1168
},
1169
-
createdAt: {
1170
type: 'string',
1171
format: 'datetime',
1172
},
1173
labels: {
1174
type: 'array',
1175
items: {
1176
type: 'ref',
1177
-
ref: 'lex:com.atproto.label.defs#label',
1178
},
1179
},
1180
},
1181
},
1182
},
1183
},
···
1240
},
1241
},
1242
},
1243
} as const satisfies Record<string, LexiconDoc>
1244
1245
export const schemas = Object.values(schemaDict) satisfies LexiconDoc[]
···
1294
ComAtprotoRepoUploadBlob: 'com.atproto.repo.uploadBlob',
1295
AppBskyActorDefs: 'app.bsky.actor.defs',
1296
AppBskyActorProfile: 'app.bsky.actor.profile',
1297
} as const
···
193
defs: {
194
label: {
195
type: 'object',
196
required: ['src', 'uri', 'val', 'cts'],
197
properties: {
198
+
cid: {
199
+
type: 'string',
200
+
format: 'cid',
201
+
description:
202
+
"Optionally, CID specifying the specific version of 'uri' resource this label applies to.",
203
+
},
204
+
cts: {
205
+
type: 'string',
206
+
format: 'datetime',
207
+
description: 'Timestamp when this label was created.',
208
+
},
209
+
exp: {
210
+
type: 'string',
211
+
format: 'datetime',
212
+
description:
213
+
'Timestamp at which this label expires (no longer applies).',
214
+
},
215
+
neg: {
216
+
type: 'boolean',
217
+
description:
218
+
'If true, this is a negation label, overwriting a previous label.',
219
+
},
220
+
sig: {
221
+
type: 'bytes',
222
+
description: 'Signature of dag-cbor encoded label.',
223
},
224
src: {
225
type: 'string',
···
232
description:
233
'AT URI of the record, repository (account), or other resource that this label applies to.',
234
},
235
val: {
236
type: 'string',
237
maxLength: 128,
238
description:
239
'The short string name of the value or type of this label.',
240
},
241
+
ver: {
242
+
type: 'integer',
243
+
description: 'The AT Protocol version of the label object.',
244
},
245
+
},
246
+
description:
247
+
'Metadata tag on an atproto resource (eg, repo or record).',
248
+
},
249
+
selfLabel: {
250
+
type: 'object',
251
+
required: ['val'],
252
+
properties: {
253
+
val: {
254
type: 'string',
255
+
maxLength: 128,
256
description:
257
+
'The short string name of the value or type of this label.',
258
},
259
},
260
+
description:
261
+
'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.',
262
+
},
263
+
labelValue: {
264
+
type: 'string',
265
+
knownValues: [
266
+
'!hide',
267
+
'!no-promote',
268
+
'!warn',
269
+
'!no-unauthenticated',
270
+
'dmca-violation',
271
+
'doxxing',
272
+
'porn',
273
+
'sexual',
274
+
'nudity',
275
+
'nsfl',
276
+
'gore',
277
+
],
278
},
279
selfLabels: {
280
type: 'object',
281
required: ['values'],
282
properties: {
283
values: {
284
type: 'array',
285
items: {
286
+
ref: 'lex:com.atproto.label.defs#selfLabel',
287
type: 'ref',
288
},
289
maxLength: 10,
290
},
291
},
292
description:
293
+
'Metadata tags on an atproto record, published by the author within the record.',
294
},
295
labelValueDefinition: {
296
type: 'object',
297
required: ['identifier', 'severity', 'blurs', 'locales'],
298
properties: {
299
+
blurs: {
300
type: 'string',
301
description:
302
+
"What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.",
303
+
knownValues: ['content', 'media', 'none'],
304
+
},
305
+
locales: {
306
+
type: 'array',
307
+
items: {
308
+
ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings',
309
+
type: 'ref',
310
+
},
311
},
312
severity: {
313
type: 'string',
···
315
"How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
316
knownValues: ['inform', 'alert', 'none'],
317
},
318
+
adultOnly: {
319
+
type: 'boolean',
320
+
description:
321
+
'Does the user need to have adult content enabled in order to configure this label?',
322
+
},
323
+
identifier: {
324
type: 'string',
325
+
maxLength: 100,
326
description:
327
+
"The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
328
+
maxGraphemes: 100,
329
},
330
defaultSetting: {
331
type: 'string',
332
+
default: 'warn',
333
description: 'The default setting for this label.',
334
knownValues: ['ignore', 'warn', 'hide'],
335
},
336
},
337
+
description:
338
+
'Declares a label value and its expected interpretations and behaviors.',
339
},
340
labelValueDefinitionStrings: {
341
type: 'object',
342
required: ['lang', 'name', 'description'],
343
properties: {
344
lang: {
345
type: 'string',
346
+
format: 'language',
347
description:
348
'The code of the language these strings are written in.',
349
},
350
name: {
351
type: 'string',
352
+
maxLength: 640,
353
description: 'A short human-readable name for the label.',
354
maxGraphemes: 64,
355
},
356
description: {
357
type: 'string',
358
+
maxLength: 100000,
359
description:
360
'A longer description of what the label means and why it might be applied.',
361
maxGraphemes: 10000,
362
},
363
},
364
+
description:
365
+
'Strings which describe the label in the UI, localized into a specific language.',
366
},
367
},
368
},
···
372
defs: {
373
main: {
374
type: 'procedure',
375
input: {
376
schema: {
377
type: 'object',
378
required: ['repo', 'writes'],
···
383
description:
384
'The handle or DID of the repo (aka, current account).',
385
},
386
writes: {
387
type: 'array',
388
items: {
389
refs: [
390
'lex:com.atproto.repo.applyWrites#create',
391
'lex:com.atproto.repo.applyWrites#update',
392
'lex:com.atproto.repo.applyWrites#delete',
393
],
394
+
type: 'union',
395
closed: true,
396
},
397
},
398
+
validate: {
399
+
type: 'boolean',
400
+
description:
401
+
"Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons.",
402
+
},
403
swapCommit: {
404
type: 'string',
405
+
format: 'cid',
406
description:
407
'If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.',
408
},
409
},
410
},
411
+
encoding: 'application/json',
412
},
413
+
errors: [
414
+
{
415
+
name: 'InvalidSwap',
416
+
description:
417
+
"Indicates that the 'swapCommit' parameter did not match current commit.",
418
+
},
419
+
],
420
output: {
421
schema: {
422
type: 'object',
423
required: [],
424
properties: {
425
commit: {
426
+
ref: 'lex:com.atproto.repo.defs#commitMeta',
427
type: 'ref',
428
},
429
results: {
430
type: 'array',
431
items: {
432
refs: [
433
'lex:com.atproto.repo.applyWrites#createResult',
434
'lex:com.atproto.repo.applyWrites#updateResult',
435
'lex:com.atproto.repo.applyWrites#deleteResult',
436
],
437
+
type: 'union',
438
closed: true,
439
},
440
},
441
},
442
},
443
+
encoding: 'application/json',
444
},
445
+
description:
446
+
'Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.',
447
},
448
create: {
449
type: 'object',
450
required: ['collection', 'value'],
451
properties: {
452
rkey: {
453
type: 'string',
454
+
format: 'record-key',
455
maxLength: 512,
456
description:
457
'NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.',
458
},
459
value: {
460
type: 'unknown',
461
+
},
462
+
collection: {
463
+
type: 'string',
464
+
format: 'nsid',
465
},
466
},
467
+
description: 'Operation which creates a new record.',
468
},
469
+
delete: {
470
type: 'object',
471
+
required: ['collection', 'rkey'],
472
properties: {
473
+
rkey: {
474
+
type: 'string',
475
+
format: 'record-key',
476
+
},
477
collection: {
478
type: 'string',
479
format: 'nsid',
480
},
481
+
},
482
+
description: 'Operation which deletes an existing record.',
483
+
},
484
+
update: {
485
+
type: 'object',
486
+
required: ['collection', 'rkey', 'value'],
487
+
properties: {
488
rkey: {
489
type: 'string',
490
format: 'record-key',
···
492
value: {
493
type: 'unknown',
494
},
495
collection: {
496
type: 'string',
497
format: 'nsid',
498
},
499
},
500
+
description: 'Operation which updates an existing record.',
501
},
502
createResult: {
503
type: 'object',
504
required: ['uri', 'cid'],
505
properties: {
506
cid: {
507
type: 'string',
508
format: 'cid',
509
},
510
+
uri: {
511
+
type: 'string',
512
+
format: 'at-uri',
513
+
},
514
validationStatus: {
515
type: 'string',
516
knownValues: ['valid', 'unknown'],
517
},
518
},
519
},
520
+
deleteResult: {
521
+
type: 'object',
522
+
required: [],
523
+
properties: {},
524
+
},
525
updateResult: {
526
type: 'object',
527
required: ['uri', 'cid'],
528
properties: {
529
cid: {
530
type: 'string',
531
format: 'cid',
532
+
},
533
+
uri: {
534
+
type: 'string',
535
+
format: 'at-uri',
536
},
537
validationStatus: {
538
type: 'string',
···
540
},
541
},
542
},
543
},
544
},
545
ComAtprotoRepoCreateRecord: {
···
548
defs: {
549
main: {
550
type: 'procedure',
551
input: {
552
schema: {
553
type: 'object',
554
required: ['repo', 'collection', 'record'],
···
559
description:
560
'The handle or DID of the repo (aka, current account).',
561
},
562
rkey: {
563
type: 'string',
564
format: 'record-key',
565
+
maxLength: 512,
566
description: 'The Record Key.',
567
+
},
568
+
record: {
569
+
type: 'unknown',
570
+
description: 'The record itself. Must contain a $type field.',
571
},
572
validate: {
573
type: 'boolean',
574
description:
575
"Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.",
576
},
577
+
collection: {
578
+
type: 'string',
579
+
format: 'nsid',
580
+
description: 'The NSID of the record collection.',
581
},
582
swapCommit: {
583
type: 'string',
···
587
},
588
},
589
},
590
+
encoding: 'application/json',
591
},
592
+
errors: [
593
+
{
594
+
name: 'InvalidSwap',
595
+
description:
596
+
"Indicates that 'swapCommit' didn't match current repo commit.",
597
+
},
598
+
],
599
output: {
600
schema: {
601
type: 'object',
602
required: ['uri', 'cid'],
603
properties: {
604
+
cid: {
605
+
type: 'string',
606
+
format: 'cid',
607
+
},
608
uri: {
609
type: 'string',
610
format: 'at-uri',
611
},
612
commit: {
613
+
ref: 'lex:com.atproto.repo.defs#commitMeta',
614
type: 'ref',
615
},
616
validationStatus: {
617
type: 'string',
···
619
},
620
},
621
},
622
+
encoding: 'application/json',
623
},
624
+
description:
625
+
'Create a single new repository record. Requires auth, implemented by PDS.',
626
},
627
},
628
},
···
652
defs: {
653
main: {
654
type: 'procedure',
655
input: {
656
schema: {
657
type: 'object',
658
required: ['repo', 'collection', 'rkey'],
···
663
description:
664
'The handle or DID of the repo (aka, current account).',
665
},
666
rkey: {
667
type: 'string',
668
format: 'record-key',
669
description: 'The Record Key.',
670
},
671
+
collection: {
672
type: 'string',
673
+
format: 'nsid',
674
+
description: 'The NSID of the record collection.',
675
},
676
swapCommit: {
677
type: 'string',
···
679
description:
680
'Compare and swap with the previous commit by CID.',
681
},
682
+
swapRecord: {
683
+
type: 'string',
684
+
format: 'cid',
685
+
description:
686
+
'Compare and swap with the previous record by CID.',
687
+
},
688
},
689
},
690
+
encoding: 'application/json',
691
},
692
+
errors: [
693
+
{
694
+
name: 'InvalidSwap',
695
+
},
696
+
],
697
output: {
698
schema: {
699
type: 'object',
700
properties: {
701
commit: {
702
ref: 'lex:com.atproto.repo.defs#commitMeta',
703
+
type: 'ref',
704
},
705
},
706
},
707
+
encoding: 'application/json',
708
},
709
+
description:
710
+
"Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.",
711
},
712
},
713
},
···
717
defs: {
718
main: {
719
type: 'query',
720
output: {
721
schema: {
722
type: 'object',
723
required: [
···
728
'handleIsCorrect',
729
],
730
properties: {
731
did: {
732
type: 'string',
733
format: 'did',
···
736
type: 'unknown',
737
description: 'The complete DID document for this account.',
738
},
739
+
handle: {
740
+
type: 'string',
741
+
format: 'handle',
742
+
},
743
collections: {
744
type: 'array',
745
items: {
746
type: 'string',
747
format: 'nsid',
748
},
749
+
description:
750
+
'List of all the collections (NSIDs) for which this repo contains at least one record.',
751
},
752
handleIsCorrect: {
753
type: 'boolean',
···
756
},
757
},
758
},
759
+
encoding: 'application/json',
760
},
761
+
parameters: {
762
+
type: 'params',
763
+
required: ['repo'],
764
+
properties: {
765
+
repo: {
766
+
type: 'string',
767
+
format: 'at-identifier',
768
+
description: 'The handle or DID of the repo.',
769
+
},
770
+
},
771
+
},
772
+
description:
773
+
'Get information about an account and repository, including the list of collections. Does not require auth.',
774
},
775
},
776
},
···
780
defs: {
781
main: {
782
type: 'query',
783
+
errors: [
784
+
{
785
+
name: 'RecordNotFound',
786
},
787
+
],
788
output: {
789
schema: {
790
type: 'object',
791
required: ['uri', 'value'],
792
properties: {
793
cid: {
794
type: 'string',
795
format: 'cid',
796
},
797
+
uri: {
798
+
type: 'string',
799
+
format: 'at-uri',
800
+
},
801
value: {
802
type: 'unknown',
803
},
804
},
805
},
806
+
encoding: 'application/json',
807
},
808
+
parameters: {
809
+
type: 'params',
810
+
required: ['repo', 'collection', 'rkey'],
811
+
properties: {
812
+
cid: {
813
+
type: 'string',
814
+
format: 'cid',
815
+
description:
816
+
'The CID of the version of the record. If not specified, then return the most recent version.',
817
+
},
818
+
repo: {
819
+
type: 'string',
820
+
format: 'at-identifier',
821
+
description: 'The handle or DID of the repo.',
822
+
},
823
+
rkey: {
824
+
type: 'string',
825
+
format: 'record-key',
826
+
description: 'The Record Key.',
827
+
},
828
+
collection: {
829
+
type: 'string',
830
+
format: 'nsid',
831
+
description: 'The NSID of the record collection.',
832
+
},
833
},
834
+
},
835
+
description:
836
+
'Get a single record from a repository. Does not require auth.',
837
},
838
},
839
},
···
843
defs: {
844
main: {
845
type: 'procedure',
846
input: {
847
encoding: 'application/vnd.ipld.car',
848
},
849
+
description:
850
+
'Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.',
851
},
852
},
853
},
···
857
defs: {
858
main: {
859
type: 'query',
860
output: {
861
schema: {
862
type: 'object',
863
required: ['blobs'],
864
properties: {
865
blobs: {
866
type: 'array',
867
items: {
868
ref: 'lex:com.atproto.repo.listMissingBlobs#recordBlob',
869
+
type: 'ref',
870
},
871
},
872
+
cursor: {
873
+
type: 'string',
874
+
},
875
},
876
},
877
+
encoding: 'application/json',
878
},
879
+
parameters: {
880
+
type: 'params',
881
+
properties: {
882
+
limit: {
883
+
type: 'integer',
884
+
default: 500,
885
+
maximum: 1000,
886
+
minimum: 1,
887
+
},
888
+
cursor: {
889
+
type: 'string',
890
+
},
891
+
},
892
+
},
893
+
description:
894
+
'Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.',
895
},
896
recordBlob: {
897
type: 'object',
···
915
defs: {
916
main: {
917
type: 'query',
918
+
output: {
919
+
schema: {
920
+
type: 'object',
921
+
required: ['records'],
922
+
properties: {
923
+
cursor: {
924
+
type: 'string',
925
+
},
926
+
records: {
927
+
type: 'array',
928
+
items: {
929
+
ref: 'lex:com.atproto.repo.listRecords#record',
930
+
type: 'ref',
931
+
},
932
+
},
933
+
},
934
+
},
935
+
encoding: 'application/json',
936
+
},
937
parameters: {
938
type: 'params',
939
required: ['repo', 'collection'],
···
942
type: 'string',
943
format: 'at-identifier',
944
description: 'The handle or DID of the repo.',
945
},
946
limit: {
947
type: 'integer',
948
default: 50,
949
+
maximum: 100,
950
+
minimum: 1,
951
description: 'The number of records to return.',
952
},
953
cursor: {
954
type: 'string',
955
},
956
reverse: {
957
type: 'boolean',
958
description: 'Flag to reverse the order of the returned records.',
959
},
960
+
collection: {
961
+
type: 'string',
962
+
format: 'nsid',
963
+
description: 'The NSID of the record type.',
964
},
965
},
966
},
967
+
description:
968
+
'List a range of records in a repository, matching a specific collection. Does not require auth.',
969
},
970
record: {
971
type: 'object',
972
required: ['uri', 'cid', 'value'],
973
properties: {
974
cid: {
975
type: 'string',
976
format: 'cid',
977
+
},
978
+
uri: {
979
+
type: 'string',
980
+
format: 'at-uri',
981
},
982
value: {
983
type: 'unknown',
···
992
defs: {
993
main: {
994
type: 'procedure',
995
input: {
996
schema: {
997
type: 'object',
998
nullable: ['swapRecord'],
999
+
required: ['repo', 'collection', 'rkey', 'record'],
1000
properties: {
1001
repo: {
1002
type: 'string',
···
1004
description:
1005
'The handle or DID of the repo (aka, current account).',
1006
},
1007
rkey: {
1008
type: 'string',
1009
format: 'record-key',
1010
maxLength: 512,
1011
+
description: 'The Record Key.',
1012
+
},
1013
+
record: {
1014
+
type: 'unknown',
1015
+
description: 'The record to write.',
1016
},
1017
validate: {
1018
type: 'boolean',
1019
description:
1020
"Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons.",
1021
},
1022
+
collection: {
1023
+
type: 'string',
1024
+
format: 'nsid',
1025
+
description: 'The NSID of the record collection.',
1026
},
1027
+
swapCommit: {
1028
type: 'string',
1029
format: 'cid',
1030
description:
1031
+
'Compare and swap with the previous commit by CID.',
1032
},
1033
+
swapRecord: {
1034
type: 'string',
1035
format: 'cid',
1036
description:
1037
+
'Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation',
1038
},
1039
},
1040
},
1041
+
encoding: 'application/json',
1042
},
1043
+
errors: [
1044
+
{
1045
+
name: 'InvalidSwap',
1046
+
},
1047
+
],
1048
output: {
1049
schema: {
1050
type: 'object',
1051
required: ['uri', 'cid'],
1052
properties: {
1053
+
cid: {
1054
+
type: 'string',
1055
+
format: 'cid',
1056
+
},
1057
uri: {
1058
type: 'string',
1059
format: 'at-uri',
1060
},
1061
commit: {
1062
ref: 'lex:com.atproto.repo.defs#commitMeta',
1063
+
type: 'ref',
1064
},
1065
validationStatus: {
1066
type: 'string',
···
1068
},
1069
},
1070
},
1071
+
encoding: 'application/json',
1072
},
1073
+
description:
1074
+
'Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.',
1075
},
1076
},
1077
},
···
1084
type: 'object',
1085
required: ['uri', 'cid'],
1086
properties: {
1087
cid: {
1088
type: 'string',
1089
format: 'cid',
1090
+
},
1091
+
uri: {
1092
+
type: 'string',
1093
+
format: 'at-uri',
1094
},
1095
},
1096
},
···
1102
defs: {
1103
main: {
1104
type: 'procedure',
1105
input: {
1106
encoding: '*/*',
1107
},
1108
output: {
1109
schema: {
1110
type: 'object',
1111
required: ['blob'],
···
1115
},
1116
},
1117
},
1118
+
encoding: 'application/json',
1119
},
1120
+
description:
1121
+
'Upload a new blob, to be referenced from a repository record. The blob will be deleted if it is not referenced within a time window (eg, minutes). Blob restrictions (mimetype, size, etc) are enforced when the reference is created. Requires auth, implemented by PDS.',
1122
},
1123
},
1124
},
···
1126
lexicon: 1,
1127
id: 'app.bsky.actor.defs',
1128
defs: {
1129
+
nux: {
1130
+
type: 'object',
1131
+
required: ['id', 'completed'],
1132
+
properties: {
1133
+
id: {
1134
+
type: 'string',
1135
+
maxLength: 100,
1136
+
},
1137
+
data: {
1138
+
type: 'string',
1139
+
maxLength: 3000,
1140
+
description:
1141
+
'Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters.',
1142
+
maxGraphemes: 300,
1143
+
},
1144
+
completed: {
1145
+
type: 'boolean',
1146
+
default: false,
1147
+
},
1148
+
expiresAt: {
1149
+
type: 'string',
1150
+
format: 'datetime',
1151
+
description:
1152
+
'The date and time at which the NUX will expire and should be considered completed.',
1153
+
},
1154
+
},
1155
+
description: 'A new user experiences (NUX) storage object',
1156
+
},
1157
+
mutedWord: {
1158
+
type: 'object',
1159
+
required: ['value', 'targets'],
1160
+
properties: {
1161
+
id: {
1162
+
type: 'string',
1163
+
},
1164
+
value: {
1165
+
type: 'string',
1166
+
maxLength: 10000,
1167
+
description: 'The muted word itself.',
1168
+
maxGraphemes: 1000,
1169
+
},
1170
+
targets: {
1171
+
type: 'array',
1172
+
items: {
1173
+
ref: 'lex:app.bsky.actor.defs#mutedWordTarget',
1174
+
type: 'ref',
1175
+
},
1176
+
description: 'The intended targets of the muted word.',
1177
+
},
1178
+
expiresAt: {
1179
+
type: 'string',
1180
+
format: 'datetime',
1181
+
description:
1182
+
'The date and time at which the muted word will expire and no longer be applied.',
1183
+
},
1184
+
actorTarget: {
1185
+
type: 'string',
1186
+
default: 'all',
1187
+
description:
1188
+
'Groups of users to apply the muted word to. If undefined, applies to all users.',
1189
+
knownValues: ['all', 'exclude-following'],
1190
+
},
1191
+
},
1192
+
description: 'A word that the account owner has muted.',
1193
+
},
1194
+
savedFeed: {
1195
+
type: 'object',
1196
+
required: ['id', 'type', 'value', 'pinned'],
1197
+
properties: {
1198
+
id: {
1199
+
type: 'string',
1200
+
},
1201
+
type: {
1202
+
type: 'string',
1203
+
knownValues: ['feed', 'list', 'timeline'],
1204
+
},
1205
+
value: {
1206
+
type: 'string',
1207
+
},
1208
+
pinned: {
1209
+
type: 'boolean',
1210
+
},
1211
+
},
1212
+
},
1213
+
preferences: {
1214
+
type: 'array',
1215
+
items: {
1216
+
refs: [
1217
+
'lex:app.bsky.actor.defs#adultContentPref',
1218
+
'lex:app.bsky.actor.defs#contentLabelPref',
1219
+
'lex:app.bsky.actor.defs#savedFeedsPref',
1220
+
'lex:app.bsky.actor.defs#savedFeedsPrefV2',
1221
+
'lex:app.bsky.actor.defs#personalDetailsPref',
1222
+
'lex:app.bsky.actor.defs#feedViewPref',
1223
+
'lex:app.bsky.actor.defs#threadViewPref',
1224
+
'lex:app.bsky.actor.defs#interestsPref',
1225
+
'lex:app.bsky.actor.defs#mutedWordsPref',
1226
+
'lex:app.bsky.actor.defs#hiddenPostsPref',
1227
+
'lex:app.bsky.actor.defs#bskyAppStatePref',
1228
+
'lex:app.bsky.actor.defs#labelersPref',
1229
+
'lex:app.bsky.actor.defs#postInteractionSettingsPref',
1230
+
],
1231
+
type: 'union',
1232
+
},
1233
+
},
1234
profileView: {
1235
type: 'object',
1236
required: ['did', 'handle'],
···
1239
type: 'string',
1240
format: 'did',
1241
},
1242
+
avatar: {
1243
+
type: 'string',
1244
+
format: 'uri',
1245
+
},
1246
handle: {
1247
type: 'string',
1248
format: 'handle',
1249
},
1250
+
labels: {
1251
+
type: 'array',
1252
+
items: {
1253
+
ref: 'lex:com.atproto.label.defs#label',
1254
+
type: 'ref',
1255
+
},
1256
+
},
1257
+
viewer: {
1258
+
ref: 'lex:app.bsky.actor.defs#viewerState',
1259
+
type: 'ref',
1260
+
},
1261
+
createdAt: {
1262
+
type: 'string',
1263
+
format: 'datetime',
1264
+
},
1265
+
indexedAt: {
1266
+
type: 'string',
1267
+
format: 'datetime',
1268
+
},
1269
+
associated: {
1270
+
ref: 'lex:app.bsky.actor.defs#profileAssociated',
1271
+
type: 'ref',
1272
+
},
1273
+
description: {
1274
+
type: 'string',
1275
+
maxLength: 2560,
1276
+
maxGraphemes: 256,
1277
+
},
1278
displayName: {
1279
type: 'string',
1280
+
maxLength: 640,
1281
maxGraphemes: 64,
1282
+
},
1283
+
},
1284
+
},
1285
+
viewerState: {
1286
+
type: 'object',
1287
+
properties: {
1288
+
muted: {
1289
+
type: 'boolean',
1290
+
},
1291
+
blocking: {
1292
+
type: 'string',
1293
+
format: 'at-uri',
1294
+
},
1295
+
blockedBy: {
1296
+
type: 'boolean',
1297
+
},
1298
+
following: {
1299
+
type: 'string',
1300
+
format: 'at-uri',
1301
+
},
1302
+
followedBy: {
1303
+
type: 'string',
1304
+
format: 'at-uri',
1305
+
},
1306
+
mutedByList: {
1307
+
ref: 'lex:app.bsky.graph.defs#listViewBasic',
1308
+
type: 'ref',
1309
+
},
1310
+
blockingByList: {
1311
+
ref: 'lex:app.bsky.graph.defs#listViewBasic',
1312
+
type: 'ref',
1313
+
},
1314
+
knownFollowers: {
1315
+
ref: 'lex:app.bsky.actor.defs#knownFollowers',
1316
+
type: 'ref',
1317
+
},
1318
+
},
1319
+
description:
1320
+
"Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.",
1321
+
},
1322
+
feedViewPref: {
1323
+
type: 'object',
1324
+
required: ['feed'],
1325
+
properties: {
1326
+
feed: {
1327
+
type: 'string',
1328
+
description:
1329
+
'The URI of the feed, or an identifier which describes the feed.',
1330
+
},
1331
+
hideReplies: {
1332
+
type: 'boolean',
1333
+
description: 'Hide replies in the feed.',
1334
+
},
1335
+
hideReposts: {
1336
+
type: 'boolean',
1337
+
description: 'Hide reposts in the feed.',
1338
+
},
1339
+
hideQuotePosts: {
1340
+
type: 'boolean',
1341
+
description: 'Hide quote posts in the feed.',
1342
+
},
1343
+
hideRepliesByLikeCount: {
1344
+
type: 'integer',
1345
+
description:
1346
+
'Hide replies in the feed if they do not have this number of likes.',
1347
+
},
1348
+
hideRepliesByUnfollowed: {
1349
+
type: 'boolean',
1350
+
default: true,
1351
+
description:
1352
+
'Hide replies in the feed if they are not by followed users.',
1353
+
},
1354
+
},
1355
+
},
1356
+
labelersPref: {
1357
+
type: 'object',
1358
+
required: ['labelers'],
1359
+
properties: {
1360
+
labelers: {
1361
+
type: 'array',
1362
+
items: {
1363
+
ref: 'lex:app.bsky.actor.defs#labelerPrefItem',
1364
+
type: 'ref',
1365
+
},
1366
+
},
1367
+
},
1368
+
},
1369
+
interestsPref: {
1370
+
type: 'object',
1371
+
required: ['tags'],
1372
+
properties: {
1373
+
tags: {
1374
+
type: 'array',
1375
+
items: {
1376
+
type: 'string',
1377
+
maxLength: 640,
1378
+
maxGraphemes: 64,
1379
+
},
1380
+
maxLength: 100,
1381
+
description:
1382
+
"A list of tags which describe the account owner's interests gathered during onboarding.",
1383
+
},
1384
+
},
1385
+
},
1386
+
knownFollowers: {
1387
+
type: 'object',
1388
+
required: ['count', 'followers'],
1389
+
properties: {
1390
+
count: {
1391
+
type: 'integer',
1392
+
},
1393
+
followers: {
1394
+
type: 'array',
1395
+
items: {
1396
+
ref: 'lex:app.bsky.actor.defs#profileViewBasic',
1397
+
type: 'ref',
1398
+
},
1399
+
maxLength: 5,
1400
+
minLength: 0,
1401
+
},
1402
+
},
1403
+
description: "The subject's followers whom you also follow",
1404
+
},
1405
+
mutedWordsPref: {
1406
+
type: 'object',
1407
+
required: ['items'],
1408
+
properties: {
1409
+
items: {
1410
+
type: 'array',
1411
+
items: {
1412
+
ref: 'lex:app.bsky.actor.defs#mutedWord',
1413
+
type: 'ref',
1414
+
},
1415
+
description: 'A list of words the account owner has muted.',
1416
+
},
1417
+
},
1418
+
},
1419
+
savedFeedsPref: {
1420
+
type: 'object',
1421
+
required: ['pinned', 'saved'],
1422
+
properties: {
1423
+
saved: {
1424
+
type: 'array',
1425
+
items: {
1426
+
type: 'string',
1427
+
format: 'at-uri',
1428
+
},
1429
+
},
1430
+
pinned: {
1431
+
type: 'array',
1432
+
items: {
1433
+
type: 'string',
1434
+
format: 'at-uri',
1435
+
},
1436
+
},
1437
+
timelineIndex: {
1438
+
type: 'integer',
1439
+
},
1440
+
},
1441
+
},
1442
+
threadViewPref: {
1443
+
type: 'object',
1444
+
properties: {
1445
+
sort: {
1446
+
type: 'string',
1447
+
description: 'Sorting mode for threads.',
1448
+
knownValues: [
1449
+
'oldest',
1450
+
'newest',
1451
+
'most-likes',
1452
+
'random',
1453
+
'hotness',
1454
+
],
1455
+
},
1456
+
prioritizeFollowedUsers: {
1457
+
type: 'boolean',
1458
+
description: 'Show followed users at the top of all replies.',
1459
+
},
1460
+
},
1461
+
},
1462
+
hiddenPostsPref: {
1463
+
type: 'object',
1464
+
required: ['items'],
1465
+
properties: {
1466
+
items: {
1467
+
type: 'array',
1468
+
items: {
1469
+
type: 'string',
1470
+
format: 'at-uri',
1471
+
},
1472
+
description:
1473
+
'A list of URIs of posts the account owner has hidden.',
1474
+
},
1475
+
},
1476
+
},
1477
+
labelerPrefItem: {
1478
+
type: 'object',
1479
+
required: ['did'],
1480
+
properties: {
1481
+
did: {
1482
+
type: 'string',
1483
+
format: 'did',
1484
+
},
1485
+
},
1486
+
},
1487
+
mutedWordTarget: {
1488
+
type: 'string',
1489
+
maxLength: 640,
1490
+
knownValues: ['content', 'tag'],
1491
+
maxGraphemes: 64,
1492
+
},
1493
+
adultContentPref: {
1494
+
type: 'object',
1495
+
required: ['enabled'],
1496
+
properties: {
1497
+
enabled: {
1498
+
type: 'boolean',
1499
+
default: false,
1500
+
},
1501
+
},
1502
+
},
1503
+
bskyAppStatePref: {
1504
+
type: 'object',
1505
+
properties: {
1506
+
nuxs: {
1507
+
type: 'array',
1508
+
items: {
1509
+
ref: 'lex:app.bsky.actor.defs#nux',
1510
+
type: 'ref',
1511
+
},
1512
+
maxLength: 100,
1513
+
description: 'Storage for NUXs the user has encountered.',
1514
+
},
1515
+
queuedNudges: {
1516
+
type: 'array',
1517
+
items: {
1518
+
type: 'string',
1519
+
maxLength: 100,
1520
+
},
1521
+
maxLength: 1000,
1522
+
description:
1523
+
'An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user.',
1524
+
},
1525
+
activeProgressGuide: {
1526
+
ref: 'lex:app.bsky.actor.defs#bskyAppProgressGuide',
1527
+
type: 'ref',
1528
+
},
1529
+
},
1530
+
description:
1531
+
"A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this.",
1532
+
},
1533
+
contentLabelPref: {
1534
+
type: 'object',
1535
+
required: ['label', 'visibility'],
1536
+
properties: {
1537
+
label: {
1538
+
type: 'string',
1539
+
},
1540
+
labelerDid: {
1541
+
type: 'string',
1542
+
format: 'did',
1543
+
description:
1544
+
'Which labeler does this preference apply to? If undefined, applies globally.',
1545
+
},
1546
+
visibility: {
1547
+
type: 'string',
1548
+
knownValues: ['ignore', 'show', 'warn', 'hide'],
1549
},
1550
+
},
1551
+
},
1552
+
profileViewBasic: {
1553
+
type: 'object',
1554
+
required: ['did', 'handle'],
1555
+
properties: {
1556
+
did: {
1557
type: 'string',
1558
+
format: 'did',
1559
},
1560
avatar: {
1561
type: 'string',
1562
format: 'uri',
1563
},
1564
+
handle: {
1565
+
type: 'string',
1566
+
format: 'handle',
1567
+
},
1568
+
labels: {
1569
+
type: 'array',
1570
+
items: {
1571
+
ref: 'lex:com.atproto.label.defs#label',
1572
+
type: 'ref',
1573
+
},
1574
+
},
1575
+
viewer: {
1576
+
ref: 'lex:app.bsky.actor.defs#viewerState',
1577
+
type: 'ref',
1578
+
},
1579
+
createdAt: {
1580
type: 'string',
1581
format: 'datetime',
1582
},
1583
+
associated: {
1584
+
ref: 'lex:app.bsky.actor.defs#profileAssociated',
1585
+
type: 'ref',
1586
+
},
1587
+
displayName: {
1588
+
type: 'string',
1589
+
maxLength: 640,
1590
+
maxGraphemes: 64,
1591
+
},
1592
+
},
1593
+
},
1594
+
savedFeedsPrefV2: {
1595
+
type: 'object',
1596
+
required: ['items'],
1597
+
properties: {
1598
+
items: {
1599
+
type: 'array',
1600
+
items: {
1601
+
ref: 'lex:app.bsky.actor.defs#savedFeed',
1602
+
type: 'ref',
1603
+
},
1604
+
},
1605
+
},
1606
+
},
1607
+
profileAssociated: {
1608
+
type: 'object',
1609
+
properties: {
1610
+
chat: {
1611
+
ref: 'lex:app.bsky.actor.defs#profileAssociatedChat',
1612
+
type: 'ref',
1613
+
},
1614
+
lists: {
1615
+
type: 'integer',
1616
+
},
1617
+
labeler: {
1618
+
type: 'boolean',
1619
+
},
1620
+
feedgens: {
1621
+
type: 'integer',
1622
+
},
1623
+
starterPacks: {
1624
+
type: 'integer',
1625
+
},
1626
+
},
1627
+
},
1628
+
personalDetailsPref: {
1629
+
type: 'object',
1630
+
properties: {
1631
+
birthDate: {
1632
type: 'string',
1633
format: 'datetime',
1634
+
description: 'The birth date of account owner.',
1635
+
},
1636
+
},
1637
+
},
1638
+
profileViewDetailed: {
1639
+
type: 'object',
1640
+
required: ['did', 'handle'],
1641
+
properties: {
1642
+
did: {
1643
+
type: 'string',
1644
+
format: 'did',
1645
+
},
1646
+
avatar: {
1647
+
type: 'string',
1648
+
format: 'uri',
1649
+
},
1650
+
banner: {
1651
+
type: 'string',
1652
+
format: 'uri',
1653
+
},
1654
+
handle: {
1655
+
type: 'string',
1656
+
format: 'handle',
1657
},
1658
labels: {
1659
type: 'array',
1660
items: {
1661
+
ref: 'lex:com.atproto.label.defs#label',
1662
type: 'ref',
1663
+
},
1664
+
},
1665
+
viewer: {
1666
+
ref: 'lex:app.bsky.actor.defs#viewerState',
1667
+
type: 'ref',
1668
+
},
1669
+
createdAt: {
1670
+
type: 'string',
1671
+
format: 'datetime',
1672
+
},
1673
+
indexedAt: {
1674
+
type: 'string',
1675
+
format: 'datetime',
1676
+
},
1677
+
associated: {
1678
+
ref: 'lex:app.bsky.actor.defs#profileAssociated',
1679
+
type: 'ref',
1680
+
},
1681
+
pinnedPost: {
1682
+
ref: 'lex:com.atproto.repo.strongRef',
1683
+
type: 'ref',
1684
+
},
1685
+
postsCount: {
1686
+
type: 'integer',
1687
+
},
1688
+
description: {
1689
+
type: 'string',
1690
+
maxLength: 2560,
1691
+
maxGraphemes: 256,
1692
+
},
1693
+
displayName: {
1694
+
type: 'string',
1695
+
maxLength: 640,
1696
+
maxGraphemes: 64,
1697
+
},
1698
+
followsCount: {
1699
+
type: 'integer',
1700
+
},
1701
+
followersCount: {
1702
+
type: 'integer',
1703
+
},
1704
+
joinedViaStarterPack: {
1705
+
ref: 'lex:app.bsky.graph.defs#starterPackViewBasic',
1706
+
type: 'ref',
1707
+
},
1708
+
},
1709
+
},
1710
+
bskyAppProgressGuide: {
1711
+
type: 'object',
1712
+
required: ['guide'],
1713
+
properties: {
1714
+
guide: {
1715
+
type: 'string',
1716
+
maxLength: 100,
1717
+
},
1718
+
},
1719
+
description:
1720
+
'If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress.',
1721
+
},
1722
+
profileAssociatedChat: {
1723
+
type: 'object',
1724
+
required: ['allowIncoming'],
1725
+
properties: {
1726
+
allowIncoming: {
1727
+
type: 'string',
1728
+
knownValues: ['all', 'none', 'following'],
1729
+
},
1730
+
},
1731
+
},
1732
+
postInteractionSettingsPref: {
1733
+
type: 'object',
1734
+
required: [],
1735
+
properties: {
1736
+
threadgateAllowRules: {
1737
+
type: 'array',
1738
+
items: {
1739
+
refs: [
1740
+
'lex:app.bsky.feed.threadgate#mentionRule',
1741
+
'lex:app.bsky.feed.threadgate#followerRule',
1742
+
'lex:app.bsky.feed.threadgate#followingRule',
1743
+
'lex:app.bsky.feed.threadgate#listRule',
1744
+
],
1745
+
type: 'union',
1746
+
},
1747
+
maxLength: 5,
1748
+
description:
1749
+
'Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply.',
1750
+
},
1751
+
postgateEmbeddingRules: {
1752
+
type: 'array',
1753
+
items: {
1754
+
refs: ['lex:app.bsky.feed.postgate#disableRule'],
1755
+
type: 'union',
1756
},
1757
+
maxLength: 5,
1758
+
description:
1759
+
'Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed.',
1760
},
1761
},
1762
+
description:
1763
+
'Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly.',
1764
},
1765
},
1766
},
···
1823
},
1824
},
1825
},
1826
+
AppBskyEmbedDefs: {
1827
+
lexicon: 1,
1828
+
id: 'app.bsky.embed.defs',
1829
+
defs: {
1830
+
aspectRatio: {
1831
+
type: 'object',
1832
+
required: ['width', 'height'],
1833
+
properties: {
1834
+
width: {
1835
+
type: 'integer',
1836
+
minimum: 1,
1837
+
},
1838
+
height: {
1839
+
type: 'integer',
1840
+
minimum: 1,
1841
+
},
1842
+
},
1843
+
description:
1844
+
'width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.',
1845
+
},
1846
+
},
1847
+
},
1848
+
AppBskyEmbedExternal: {
1849
+
lexicon: 1,
1850
+
id: 'app.bsky.embed.external',
1851
+
defs: {
1852
+
main: {
1853
+
type: 'object',
1854
+
required: ['external'],
1855
+
properties: {
1856
+
external: {
1857
+
ref: 'lex:app.bsky.embed.external#external',
1858
+
type: 'ref',
1859
+
},
1860
+
},
1861
+
description:
1862
+
"A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).",
1863
+
},
1864
+
view: {
1865
+
type: 'object',
1866
+
required: ['external'],
1867
+
properties: {
1868
+
external: {
1869
+
ref: 'lex:app.bsky.embed.external#viewExternal',
1870
+
type: 'ref',
1871
+
},
1872
+
},
1873
+
},
1874
+
external: {
1875
+
type: 'object',
1876
+
required: ['uri', 'title', 'description'],
1877
+
properties: {
1878
+
uri: {
1879
+
type: 'string',
1880
+
format: 'uri',
1881
+
},
1882
+
thumb: {
1883
+
type: 'blob',
1884
+
accept: ['image/*'],
1885
+
maxSize: 1000000,
1886
+
},
1887
+
title: {
1888
+
type: 'string',
1889
+
},
1890
+
description: {
1891
+
type: 'string',
1892
+
},
1893
+
},
1894
+
},
1895
+
viewExternal: {
1896
+
type: 'object',
1897
+
required: ['uri', 'title', 'description'],
1898
+
properties: {
1899
+
uri: {
1900
+
type: 'string',
1901
+
format: 'uri',
1902
+
},
1903
+
thumb: {
1904
+
type: 'string',
1905
+
format: 'uri',
1906
+
},
1907
+
title: {
1908
+
type: 'string',
1909
+
},
1910
+
description: {
1911
+
type: 'string',
1912
+
},
1913
+
},
1914
+
},
1915
+
},
1916
+
},
1917
+
AppBskyEmbedImages: {
1918
+
lexicon: 1,
1919
+
id: 'app.bsky.embed.images',
1920
+
description: 'A set of images embedded in a Bluesky record (eg, a post).',
1921
+
defs: {
1922
+
main: {
1923
+
type: 'object',
1924
+
required: ['images'],
1925
+
properties: {
1926
+
images: {
1927
+
type: 'array',
1928
+
items: {
1929
+
ref: 'lex:app.bsky.embed.images#image',
1930
+
type: 'ref',
1931
+
},
1932
+
maxLength: 4,
1933
+
},
1934
+
},
1935
+
},
1936
+
view: {
1937
+
type: 'object',
1938
+
required: ['images'],
1939
+
properties: {
1940
+
images: {
1941
+
type: 'array',
1942
+
items: {
1943
+
ref: 'lex:app.bsky.embed.images#viewImage',
1944
+
type: 'ref',
1945
+
},
1946
+
maxLength: 4,
1947
+
},
1948
+
},
1949
+
},
1950
+
image: {
1951
+
type: 'object',
1952
+
required: ['image', 'alt'],
1953
+
properties: {
1954
+
alt: {
1955
+
type: 'string',
1956
+
description:
1957
+
'Alt text description of the image, for accessibility.',
1958
+
},
1959
+
image: {
1960
+
type: 'blob',
1961
+
accept: ['image/*'],
1962
+
maxSize: 1000000,
1963
+
},
1964
+
aspectRatio: {
1965
+
ref: 'lex:app.bsky.embed.defs#aspectRatio',
1966
+
type: 'ref',
1967
+
},
1968
+
},
1969
+
},
1970
+
viewImage: {
1971
+
type: 'object',
1972
+
required: ['thumb', 'fullsize', 'alt'],
1973
+
properties: {
1974
+
alt: {
1975
+
type: 'string',
1976
+
description:
1977
+
'Alt text description of the image, for accessibility.',
1978
+
},
1979
+
thumb: {
1980
+
type: 'string',
1981
+
format: 'uri',
1982
+
description:
1983
+
'Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.',
1984
+
},
1985
+
fullsize: {
1986
+
type: 'string',
1987
+
format: 'uri',
1988
+
description:
1989
+
'Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View.',
1990
+
},
1991
+
aspectRatio: {
1992
+
ref: 'lex:app.bsky.embed.defs#aspectRatio',
1993
+
type: 'ref',
1994
+
},
1995
+
},
1996
+
},
1997
+
},
1998
+
},
1999
+
AppBskyEmbedRecord: {
2000
+
lexicon: 1,
2001
+
id: 'app.bsky.embed.record',
2002
+
description:
2003
+
'A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.',
2004
+
defs: {
2005
+
main: {
2006
+
type: 'object',
2007
+
required: ['record'],
2008
+
properties: {
2009
+
record: {
2010
+
ref: 'lex:com.atproto.repo.strongRef',
2011
+
type: 'ref',
2012
+
},
2013
+
},
2014
+
},
2015
+
view: {
2016
+
type: 'object',
2017
+
required: ['record'],
2018
+
properties: {
2019
+
record: {
2020
+
refs: [
2021
+
'lex:app.bsky.embed.record#viewRecord',
2022
+
'lex:app.bsky.embed.record#viewNotFound',
2023
+
'lex:app.bsky.embed.record#viewBlocked',
2024
+
'lex:app.bsky.embed.record#viewDetached',
2025
+
'lex:app.bsky.feed.defs#generatorView',
2026
+
'lex:app.bsky.graph.defs#listView',
2027
+
'lex:app.bsky.labeler.defs#labelerView',
2028
+
'lex:app.bsky.graph.defs#starterPackViewBasic',
2029
+
],
2030
+
type: 'union',
2031
+
},
2032
+
},
2033
+
},
2034
+
viewRecord: {
2035
+
type: 'object',
2036
+
required: ['uri', 'cid', 'author', 'value', 'indexedAt'],
2037
+
properties: {
2038
+
cid: {
2039
+
type: 'string',
2040
+
format: 'cid',
2041
+
},
2042
+
uri: {
2043
+
type: 'string',
2044
+
format: 'at-uri',
2045
+
},
2046
+
value: {
2047
+
type: 'unknown',
2048
+
description: 'The record data itself.',
2049
+
},
2050
+
author: {
2051
+
ref: 'lex:app.bsky.actor.defs#profileViewBasic',
2052
+
type: 'ref',
2053
+
},
2054
+
embeds: {
2055
+
type: 'array',
2056
+
items: {
2057
+
refs: [
2058
+
'lex:app.bsky.embed.images#view',
2059
+
'lex:app.bsky.embed.video#view',
2060
+
'lex:app.bsky.embed.external#view',
2061
+
'lex:app.bsky.embed.record#view',
2062
+
'lex:app.bsky.embed.recordWithMedia#view',
2063
+
],
2064
+
type: 'union',
2065
+
},
2066
+
},
2067
+
labels: {
2068
+
type: 'array',
2069
+
items: {
2070
+
ref: 'lex:com.atproto.label.defs#label',
2071
+
type: 'ref',
2072
+
},
2073
+
},
2074
+
indexedAt: {
2075
+
type: 'string',
2076
+
format: 'datetime',
2077
+
},
2078
+
likeCount: {
2079
+
type: 'integer',
2080
+
},
2081
+
quoteCount: {
2082
+
type: 'integer',
2083
+
},
2084
+
replyCount: {
2085
+
type: 'integer',
2086
+
},
2087
+
repostCount: {
2088
+
type: 'integer',
2089
+
},
2090
+
},
2091
+
},
2092
+
viewBlocked: {
2093
+
type: 'object',
2094
+
required: ['uri', 'blocked', 'author'],
2095
+
properties: {
2096
+
uri: {
2097
+
type: 'string',
2098
+
format: 'at-uri',
2099
+
},
2100
+
author: {
2101
+
ref: 'lex:app.bsky.feed.defs#blockedAuthor',
2102
+
type: 'ref',
2103
+
},
2104
+
blocked: {
2105
+
type: 'boolean',
2106
+
const: true,
2107
+
},
2108
+
},
2109
+
},
2110
+
viewDetached: {
2111
+
type: 'object',
2112
+
required: ['uri', 'detached'],
2113
+
properties: {
2114
+
uri: {
2115
+
type: 'string',
2116
+
format: 'at-uri',
2117
+
},
2118
+
detached: {
2119
+
type: 'boolean',
2120
+
const: true,
2121
+
},
2122
+
},
2123
+
},
2124
+
viewNotFound: {
2125
+
type: 'object',
2126
+
required: ['uri', 'notFound'],
2127
+
properties: {
2128
+
uri: {
2129
+
type: 'string',
2130
+
format: 'at-uri',
2131
+
},
2132
+
notFound: {
2133
+
type: 'boolean',
2134
+
const: true,
2135
+
},
2136
+
},
2137
+
},
2138
+
},
2139
+
},
2140
+
AppBskyEmbedRecordWithMedia: {
2141
+
lexicon: 1,
2142
+
id: 'app.bsky.embed.recordWithMedia',
2143
+
description:
2144
+
'A representation of a record embedded in a Bluesky record (eg, a post), alongside other compatible embeds. For example, a quote post and image, or a quote post and external URL card.',
2145
+
defs: {
2146
+
main: {
2147
+
type: 'object',
2148
+
required: ['record', 'media'],
2149
+
properties: {
2150
+
media: {
2151
+
refs: [
2152
+
'lex:app.bsky.embed.images',
2153
+
'lex:app.bsky.embed.video',
2154
+
'lex:app.bsky.embed.external',
2155
+
],
2156
+
type: 'union',
2157
+
},
2158
+
record: {
2159
+
ref: 'lex:app.bsky.embed.record',
2160
+
type: 'ref',
2161
+
},
2162
+
},
2163
+
},
2164
+
view: {
2165
+
type: 'object',
2166
+
required: ['record', 'media'],
2167
+
properties: {
2168
+
media: {
2169
+
refs: [
2170
+
'lex:app.bsky.embed.images#view',
2171
+
'lex:app.bsky.embed.video#view',
2172
+
'lex:app.bsky.embed.external#view',
2173
+
],
2174
+
type: 'union',
2175
+
},
2176
+
record: {
2177
+
ref: 'lex:app.bsky.embed.record#view',
2178
+
type: 'ref',
2179
+
},
2180
+
},
2181
+
},
2182
+
},
2183
+
},
2184
+
AppBskyEmbedVideo: {
2185
+
lexicon: 1,
2186
+
id: 'app.bsky.embed.video',
2187
+
description: 'A video embedded in a Bluesky record (eg, a post).',
2188
+
defs: {
2189
+
main: {
2190
+
type: 'object',
2191
+
required: ['video'],
2192
+
properties: {
2193
+
alt: {
2194
+
type: 'string',
2195
+
maxLength: 10000,
2196
+
description:
2197
+
'Alt text description of the video, for accessibility.',
2198
+
maxGraphemes: 1000,
2199
+
},
2200
+
video: {
2201
+
type: 'blob',
2202
+
accept: ['video/mp4'],
2203
+
maxSize: 50000000,
2204
+
},
2205
+
captions: {
2206
+
type: 'array',
2207
+
items: {
2208
+
ref: 'lex:app.bsky.embed.video#caption',
2209
+
type: 'ref',
2210
+
},
2211
+
maxLength: 20,
2212
+
},
2213
+
aspectRatio: {
2214
+
ref: 'lex:app.bsky.embed.defs#aspectRatio',
2215
+
type: 'ref',
2216
+
},
2217
+
},
2218
+
},
2219
+
view: {
2220
+
type: 'object',
2221
+
required: ['cid', 'playlist'],
2222
+
properties: {
2223
+
alt: {
2224
+
type: 'string',
2225
+
maxLength: 10000,
2226
+
maxGraphemes: 1000,
2227
+
},
2228
+
cid: {
2229
+
type: 'string',
2230
+
format: 'cid',
2231
+
},
2232
+
playlist: {
2233
+
type: 'string',
2234
+
format: 'uri',
2235
+
},
2236
+
thumbnail: {
2237
+
type: 'string',
2238
+
format: 'uri',
2239
+
},
2240
+
aspectRatio: {
2241
+
ref: 'lex:app.bsky.embed.defs#aspectRatio',
2242
+
type: 'ref',
2243
+
},
2244
+
},
2245
+
},
2246
+
caption: {
2247
+
type: 'object',
2248
+
required: ['lang', 'file'],
2249
+
properties: {
2250
+
file: {
2251
+
type: 'blob',
2252
+
accept: ['text/vtt'],
2253
+
maxSize: 20000,
2254
+
},
2255
+
lang: {
2256
+
type: 'string',
2257
+
format: 'language',
2258
+
},
2259
+
},
2260
+
},
2261
+
},
2262
+
},
2263
+
AppBskyFeedDefs: {
2264
+
lexicon: 1,
2265
+
id: 'app.bsky.feed.defs',
2266
+
defs: {
2267
+
postView: {
2268
+
type: 'object',
2269
+
required: ['uri', 'cid', 'author', 'record', 'indexedAt'],
2270
+
properties: {
2271
+
cid: {
2272
+
type: 'string',
2273
+
format: 'cid',
2274
+
},
2275
+
uri: {
2276
+
type: 'string',
2277
+
format: 'at-uri',
2278
+
},
2279
+
embed: {
2280
+
refs: [
2281
+
'lex:app.bsky.embed.images#view',
2282
+
'lex:app.bsky.embed.video#view',
2283
+
'lex:app.bsky.embed.external#view',
2284
+
'lex:app.bsky.embed.record#view',
2285
+
'lex:app.bsky.embed.recordWithMedia#view',
2286
+
],
2287
+
type: 'union',
2288
+
},
2289
+
author: {
2290
+
ref: 'lex:app.bsky.actor.defs#profileViewBasic',
2291
+
type: 'ref',
2292
+
},
2293
+
labels: {
2294
+
type: 'array',
2295
+
items: {
2296
+
ref: 'lex:com.atproto.label.defs#label',
2297
+
type: 'ref',
2298
+
},
2299
+
},
2300
+
record: {
2301
+
type: 'unknown',
2302
+
},
2303
+
viewer: {
2304
+
ref: 'lex:app.bsky.feed.defs#viewerState',
2305
+
type: 'ref',
2306
+
},
2307
+
indexedAt: {
2308
+
type: 'string',
2309
+
format: 'datetime',
2310
+
},
2311
+
likeCount: {
2312
+
type: 'integer',
2313
+
},
2314
+
quoteCount: {
2315
+
type: 'integer',
2316
+
},
2317
+
replyCount: {
2318
+
type: 'integer',
2319
+
},
2320
+
threadgate: {
2321
+
ref: 'lex:app.bsky.feed.defs#threadgateView',
2322
+
type: 'ref',
2323
+
},
2324
+
repostCount: {
2325
+
type: 'integer',
2326
+
},
2327
+
},
2328
+
},
2329
+
replyRef: {
2330
+
type: 'object',
2331
+
required: ['root', 'parent'],
2332
+
properties: {
2333
+
root: {
2334
+
refs: [
2335
+
'lex:app.bsky.feed.defs#postView',
2336
+
'lex:app.bsky.feed.defs#notFoundPost',
2337
+
'lex:app.bsky.feed.defs#blockedPost',
2338
+
],
2339
+
type: 'union',
2340
+
},
2341
+
parent: {
2342
+
refs: [
2343
+
'lex:app.bsky.feed.defs#postView',
2344
+
'lex:app.bsky.feed.defs#notFoundPost',
2345
+
'lex:app.bsky.feed.defs#blockedPost',
2346
+
],
2347
+
type: 'union',
2348
+
},
2349
+
grandparentAuthor: {
2350
+
ref: 'lex:app.bsky.actor.defs#profileViewBasic',
2351
+
type: 'ref',
2352
+
description:
2353
+
'When parent is a reply to another post, this is the author of that post.',
2354
+
},
2355
+
},
2356
+
},
2357
+
reasonPin: {
2358
+
type: 'object',
2359
+
properties: {},
2360
+
},
2361
+
blockedPost: {
2362
+
type: 'object',
2363
+
required: ['uri', 'blocked', 'author'],
2364
+
properties: {
2365
+
uri: {
2366
+
type: 'string',
2367
+
format: 'at-uri',
2368
+
},
2369
+
author: {
2370
+
ref: 'lex:app.bsky.feed.defs#blockedAuthor',
2371
+
type: 'ref',
2372
+
},
2373
+
blocked: {
2374
+
type: 'boolean',
2375
+
const: true,
2376
+
},
2377
+
},
2378
+
},
2379
+
interaction: {
2380
+
type: 'object',
2381
+
properties: {
2382
+
item: {
2383
+
type: 'string',
2384
+
format: 'at-uri',
2385
+
},
2386
+
event: {
2387
+
type: 'string',
2388
+
knownValues: [
2389
+
'app.bsky.feed.defs#requestLess',
2390
+
'app.bsky.feed.defs#requestMore',
2391
+
'app.bsky.feed.defs#clickthroughItem',
2392
+
'app.bsky.feed.defs#clickthroughAuthor',
2393
+
'app.bsky.feed.defs#clickthroughReposter',
2394
+
'app.bsky.feed.defs#clickthroughEmbed',
2395
+
'app.bsky.feed.defs#interactionSeen',
2396
+
'app.bsky.feed.defs#interactionLike',
2397
+
'app.bsky.feed.defs#interactionRepost',
2398
+
'app.bsky.feed.defs#interactionReply',
2399
+
'app.bsky.feed.defs#interactionQuote',
2400
+
'app.bsky.feed.defs#interactionShare',
2401
+
],
2402
+
},
2403
+
feedContext: {
2404
+
type: 'string',
2405
+
maxLength: 2000,
2406
+
description:
2407
+
'Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton.',
2408
+
},
2409
+
},
2410
+
},
2411
+
requestLess: {
2412
+
type: 'token',
2413
+
description:
2414
+
'Request that less content like the given feed item be shown in the feed',
2415
+
},
2416
+
requestMore: {
2417
+
type: 'token',
2418
+
description:
2419
+
'Request that more content like the given feed item be shown in the feed',
2420
+
},
2421
+
viewerState: {
2422
+
type: 'object',
2423
+
properties: {
2424
+
like: {
2425
+
type: 'string',
2426
+
format: 'at-uri',
2427
+
},
2428
+
pinned: {
2429
+
type: 'boolean',
2430
+
},
2431
+
repost: {
2432
+
type: 'string',
2433
+
format: 'at-uri',
2434
+
},
2435
+
threadMuted: {
2436
+
type: 'boolean',
2437
+
},
2438
+
replyDisabled: {
2439
+
type: 'boolean',
2440
+
},
2441
+
embeddingDisabled: {
2442
+
type: 'boolean',
2443
+
},
2444
+
},
2445
+
description:
2446
+
"Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.",
2447
+
},
2448
+
feedViewPost: {
2449
+
type: 'object',
2450
+
required: ['post'],
2451
+
properties: {
2452
+
post: {
2453
+
ref: 'lex:app.bsky.feed.defs#postView',
2454
+
type: 'ref',
2455
+
},
2456
+
reply: {
2457
+
ref: 'lex:app.bsky.feed.defs#replyRef',
2458
+
type: 'ref',
2459
+
},
2460
+
reason: {
2461
+
refs: [
2462
+
'lex:app.bsky.feed.defs#reasonRepost',
2463
+
'lex:app.bsky.feed.defs#reasonPin',
2464
+
],
2465
+
type: 'union',
2466
+
},
2467
+
feedContext: {
2468
+
type: 'string',
2469
+
maxLength: 2000,
2470
+
description:
2471
+
'Context provided by feed generator that may be passed back alongside interactions.',
2472
+
},
2473
+
},
2474
+
},
2475
+
notFoundPost: {
2476
+
type: 'object',
2477
+
required: ['uri', 'notFound'],
2478
+
properties: {
2479
+
uri: {
2480
+
type: 'string',
2481
+
format: 'at-uri',
2482
+
},
2483
+
notFound: {
2484
+
type: 'boolean',
2485
+
const: true,
2486
+
},
2487
+
},
2488
+
},
2489
+
reasonRepost: {
2490
+
type: 'object',
2491
+
required: ['by', 'indexedAt'],
2492
+
properties: {
2493
+
by: {
2494
+
ref: 'lex:app.bsky.actor.defs#profileViewBasic',
2495
+
type: 'ref',
2496
+
},
2497
+
indexedAt: {
2498
+
type: 'string',
2499
+
format: 'datetime',
2500
+
},
2501
+
},
2502
+
},
2503
+
blockedAuthor: {
2504
+
type: 'object',
2505
+
required: ['did'],
2506
+
properties: {
2507
+
did: {
2508
+
type: 'string',
2509
+
format: 'did',
2510
+
},
2511
+
viewer: {
2512
+
ref: 'lex:app.bsky.actor.defs#viewerState',
2513
+
type: 'ref',
2514
+
},
2515
+
},
2516
+
},
2517
+
generatorView: {
2518
+
type: 'object',
2519
+
required: ['uri', 'cid', 'did', 'creator', 'displayName', 'indexedAt'],
2520
+
properties: {
2521
+
cid: {
2522
+
type: 'string',
2523
+
format: 'cid',
2524
+
},
2525
+
did: {
2526
+
type: 'string',
2527
+
format: 'did',
2528
+
},
2529
+
uri: {
2530
+
type: 'string',
2531
+
format: 'at-uri',
2532
+
},
2533
+
avatar: {
2534
+
type: 'string',
2535
+
format: 'uri',
2536
+
},
2537
+
labels: {
2538
+
type: 'array',
2539
+
items: {
2540
+
ref: 'lex:com.atproto.label.defs#label',
2541
+
type: 'ref',
2542
+
},
2543
+
},
2544
+
viewer: {
2545
+
ref: 'lex:app.bsky.feed.defs#generatorViewerState',
2546
+
type: 'ref',
2547
+
},
2548
+
creator: {
2549
+
ref: 'lex:app.bsky.actor.defs#profileView',
2550
+
type: 'ref',
2551
+
},
2552
+
indexedAt: {
2553
+
type: 'string',
2554
+
format: 'datetime',
2555
+
},
2556
+
likeCount: {
2557
+
type: 'integer',
2558
+
minimum: 0,
2559
+
},
2560
+
contentMode: {
2561
+
type: 'string',
2562
+
knownValues: [
2563
+
'app.bsky.feed.defs#contentModeUnspecified',
2564
+
'app.bsky.feed.defs#contentModeVideo',
2565
+
],
2566
+
},
2567
+
description: {
2568
+
type: 'string',
2569
+
maxLength: 3000,
2570
+
maxGraphemes: 300,
2571
+
},
2572
+
displayName: {
2573
+
type: 'string',
2574
+
},
2575
+
descriptionFacets: {
2576
+
type: 'array',
2577
+
items: {
2578
+
ref: 'lex:app.bsky.richtext.facet',
2579
+
type: 'ref',
2580
+
},
2581
+
},
2582
+
acceptsInteractions: {
2583
+
type: 'boolean',
2584
+
},
2585
+
},
2586
+
},
2587
+
threadContext: {
2588
+
type: 'object',
2589
+
properties: {
2590
+
rootAuthorLike: {
2591
+
type: 'string',
2592
+
format: 'at-uri',
2593
+
},
2594
+
},
2595
+
description:
2596
+
'Metadata about this post within the context of the thread it is in.',
2597
+
},
2598
+
threadViewPost: {
2599
+
type: 'object',
2600
+
required: ['post'],
2601
+
properties: {
2602
+
post: {
2603
+
ref: 'lex:app.bsky.feed.defs#postView',
2604
+
type: 'ref',
2605
+
},
2606
+
parent: {
2607
+
refs: [
2608
+
'lex:app.bsky.feed.defs#threadViewPost',
2609
+
'lex:app.bsky.feed.defs#notFoundPost',
2610
+
'lex:app.bsky.feed.defs#blockedPost',
2611
+
],
2612
+
type: 'union',
2613
+
},
2614
+
replies: {
2615
+
type: 'array',
2616
+
items: {
2617
+
refs: [
2618
+
'lex:app.bsky.feed.defs#threadViewPost',
2619
+
'lex:app.bsky.feed.defs#notFoundPost',
2620
+
'lex:app.bsky.feed.defs#blockedPost',
2621
+
],
2622
+
type: 'union',
2623
+
},
2624
+
},
2625
+
threadContext: {
2626
+
ref: 'lex:app.bsky.feed.defs#threadContext',
2627
+
type: 'ref',
2628
+
},
2629
+
},
2630
+
},
2631
+
threadgateView: {
2632
+
type: 'object',
2633
+
properties: {
2634
+
cid: {
2635
+
type: 'string',
2636
+
format: 'cid',
2637
+
},
2638
+
uri: {
2639
+
type: 'string',
2640
+
format: 'at-uri',
2641
+
},
2642
+
lists: {
2643
+
type: 'array',
2644
+
items: {
2645
+
ref: 'lex:app.bsky.graph.defs#listViewBasic',
2646
+
type: 'ref',
2647
+
},
2648
+
},
2649
+
record: {
2650
+
type: 'unknown',
2651
+
},
2652
+
},
2653
+
},
2654
+
interactionLike: {
2655
+
type: 'token',
2656
+
description: 'User liked the feed item',
2657
+
},
2658
+
interactionSeen: {
2659
+
type: 'token',
2660
+
description: 'Feed item was seen by user',
2661
+
},
2662
+
clickthroughItem: {
2663
+
type: 'token',
2664
+
description: 'User clicked through to the feed item',
2665
+
},
2666
+
contentModeVideo: {
2667
+
type: 'token',
2668
+
description:
2669
+
'Declares the feed generator returns posts containing app.bsky.embed.video embeds.',
2670
+
},
2671
+
interactionQuote: {
2672
+
type: 'token',
2673
+
description: 'User quoted the feed item',
2674
+
},
2675
+
interactionReply: {
2676
+
type: 'token',
2677
+
description: 'User replied to the feed item',
2678
+
},
2679
+
interactionShare: {
2680
+
type: 'token',
2681
+
description: 'User shared the feed item',
2682
+
},
2683
+
skeletonFeedPost: {
2684
+
type: 'object',
2685
+
required: ['post'],
2686
+
properties: {
2687
+
post: {
2688
+
type: 'string',
2689
+
format: 'at-uri',
2690
+
},
2691
+
reason: {
2692
+
refs: [
2693
+
'lex:app.bsky.feed.defs#skeletonReasonRepost',
2694
+
'lex:app.bsky.feed.defs#skeletonReasonPin',
2695
+
],
2696
+
type: 'union',
2697
+
},
2698
+
feedContext: {
2699
+
type: 'string',
2700
+
maxLength: 2000,
2701
+
description:
2702
+
'Context that will be passed through to client and may be passed to feed generator back alongside interactions.',
2703
+
},
2704
+
},
2705
+
},
2706
+
clickthroughEmbed: {
2707
+
type: 'token',
2708
+
description:
2709
+
'User clicked through to the embedded content of the feed item',
2710
+
},
2711
+
interactionRepost: {
2712
+
type: 'token',
2713
+
description: 'User reposted the feed item',
2714
+
},
2715
+
skeletonReasonPin: {
2716
+
type: 'object',
2717
+
properties: {},
2718
+
},
2719
+
clickthroughAuthor: {
2720
+
type: 'token',
2721
+
description: 'User clicked through to the author of the feed item',
2722
+
},
2723
+
clickthroughReposter: {
2724
+
type: 'token',
2725
+
description: 'User clicked through to the reposter of the feed item',
2726
+
},
2727
+
generatorViewerState: {
2728
+
type: 'object',
2729
+
properties: {
2730
+
like: {
2731
+
type: 'string',
2732
+
format: 'at-uri',
2733
+
},
2734
+
},
2735
+
},
2736
+
skeletonReasonRepost: {
2737
+
type: 'object',
2738
+
required: ['repost'],
2739
+
properties: {
2740
+
repost: {
2741
+
type: 'string',
2742
+
format: 'at-uri',
2743
+
},
2744
+
},
2745
+
},
2746
+
contentModeUnspecified: {
2747
+
type: 'token',
2748
+
description: 'Declares the feed generator returns any types of posts.',
2749
+
},
2750
+
},
2751
+
},
2752
+
AppBskyFeedPostgate: {
2753
+
lexicon: 1,
2754
+
id: 'app.bsky.feed.postgate',
2755
+
defs: {
2756
+
main: {
2757
+
key: 'tid',
2758
+
type: 'record',
2759
+
record: {
2760
+
type: 'object',
2761
+
required: ['post', 'createdAt'],
2762
+
properties: {
2763
+
post: {
2764
+
type: 'string',
2765
+
format: 'at-uri',
2766
+
description: 'Reference (AT-URI) to the post record.',
2767
+
},
2768
+
createdAt: {
2769
+
type: 'string',
2770
+
format: 'datetime',
2771
+
},
2772
+
embeddingRules: {
2773
+
type: 'array',
2774
+
items: {
2775
+
refs: ['lex:app.bsky.feed.postgate#disableRule'],
2776
+
type: 'union',
2777
+
},
2778
+
maxLength: 5,
2779
+
description:
2780
+
'List of rules defining who can embed this post. If value is an empty array or is undefined, no particular rules apply and anyone can embed.',
2781
+
},
2782
+
detachedEmbeddingUris: {
2783
+
type: 'array',
2784
+
items: {
2785
+
type: 'string',
2786
+
format: 'at-uri',
2787
+
},
2788
+
maxLength: 50,
2789
+
description:
2790
+
'List of AT-URIs embedding this post that the author has detached from.',
2791
+
},
2792
+
},
2793
+
},
2794
+
description:
2795
+
'Record defining interaction rules for a post. The record key (rkey) of the postgate record must match the record key of the post, and that record must be in the same repository.',
2796
+
},
2797
+
disableRule: {
2798
+
type: 'object',
2799
+
properties: {},
2800
+
description: 'Disables embedding of this post.',
2801
+
},
2802
+
},
2803
+
},
2804
+
AppBskyFeedThreadgate: {
2805
+
lexicon: 1,
2806
+
id: 'app.bsky.feed.threadgate',
2807
+
defs: {
2808
+
main: {
2809
+
key: 'tid',
2810
+
type: 'record',
2811
+
record: {
2812
+
type: 'object',
2813
+
required: ['post', 'createdAt'],
2814
+
properties: {
2815
+
post: {
2816
+
type: 'string',
2817
+
format: 'at-uri',
2818
+
description: 'Reference (AT-URI) to the post record.',
2819
+
},
2820
+
allow: {
2821
+
type: 'array',
2822
+
items: {
2823
+
refs: [
2824
+
'lex:app.bsky.feed.threadgate#mentionRule',
2825
+
'lex:app.bsky.feed.threadgate#followerRule',
2826
+
'lex:app.bsky.feed.threadgate#followingRule',
2827
+
'lex:app.bsky.feed.threadgate#listRule',
2828
+
],
2829
+
type: 'union',
2830
+
},
2831
+
maxLength: 5,
2832
+
description:
2833
+
'List of rules defining who can reply to this post. If value is an empty array, no one can reply. If value is undefined, anyone can reply.',
2834
+
},
2835
+
createdAt: {
2836
+
type: 'string',
2837
+
format: 'datetime',
2838
+
},
2839
+
hiddenReplies: {
2840
+
type: 'array',
2841
+
items: {
2842
+
type: 'string',
2843
+
format: 'at-uri',
2844
+
},
2845
+
maxLength: 50,
2846
+
description: 'List of hidden reply URIs.',
2847
+
},
2848
+
},
2849
+
},
2850
+
description:
2851
+
"Record defining interaction gating rules for a thread (aka, reply controls). The record key (rkey) of the threadgate record must match the record key of the thread's root post, and that record must be in the same repository.",
2852
+
},
2853
+
listRule: {
2854
+
type: 'object',
2855
+
required: ['list'],
2856
+
properties: {
2857
+
list: {
2858
+
type: 'string',
2859
+
format: 'at-uri',
2860
+
},
2861
+
},
2862
+
description: 'Allow replies from actors on a list.',
2863
+
},
2864
+
mentionRule: {
2865
+
type: 'object',
2866
+
properties: {},
2867
+
description: 'Allow replies from actors mentioned in your post.',
2868
+
},
2869
+
followerRule: {
2870
+
type: 'object',
2871
+
properties: {},
2872
+
description: 'Allow replies from actors who follow you.',
2873
+
},
2874
+
followingRule: {
2875
+
type: 'object',
2876
+
properties: {},
2877
+
description: 'Allow replies from actors you follow.',
2878
+
},
2879
+
},
2880
+
},
2881
+
AppBskyGraphDefs: {
2882
+
lexicon: 1,
2883
+
id: 'app.bsky.graph.defs',
2884
+
defs: {
2885
+
modlist: {
2886
+
type: 'token',
2887
+
description:
2888
+
'A list of actors to apply an aggregate moderation action (mute/block) on.',
2889
+
},
2890
+
listView: {
2891
+
type: 'object',
2892
+
required: ['uri', 'cid', 'creator', 'name', 'purpose', 'indexedAt'],
2893
+
properties: {
2894
+
cid: {
2895
+
type: 'string',
2896
+
format: 'cid',
2897
+
},
2898
+
uri: {
2899
+
type: 'string',
2900
+
format: 'at-uri',
2901
+
},
2902
+
name: {
2903
+
type: 'string',
2904
+
maxLength: 64,
2905
+
minLength: 1,
2906
+
},
2907
+
avatar: {
2908
+
type: 'string',
2909
+
format: 'uri',
2910
+
},
2911
+
labels: {
2912
+
type: 'array',
2913
+
items: {
2914
+
ref: 'lex:com.atproto.label.defs#label',
2915
+
type: 'ref',
2916
+
},
2917
+
},
2918
+
viewer: {
2919
+
ref: 'lex:app.bsky.graph.defs#listViewerState',
2920
+
type: 'ref',
2921
+
},
2922
+
creator: {
2923
+
ref: 'lex:app.bsky.actor.defs#profileView',
2924
+
type: 'ref',
2925
+
},
2926
+
purpose: {
2927
+
ref: 'lex:app.bsky.graph.defs#listPurpose',
2928
+
type: 'ref',
2929
+
},
2930
+
indexedAt: {
2931
+
type: 'string',
2932
+
format: 'datetime',
2933
+
},
2934
+
description: {
2935
+
type: 'string',
2936
+
maxLength: 3000,
2937
+
maxGraphemes: 300,
2938
+
},
2939
+
listItemCount: {
2940
+
type: 'integer',
2941
+
minimum: 0,
2942
+
},
2943
+
descriptionFacets: {
2944
+
type: 'array',
2945
+
items: {
2946
+
ref: 'lex:app.bsky.richtext.facet',
2947
+
type: 'ref',
2948
+
},
2949
+
},
2950
+
},
2951
+
},
2952
+
curatelist: {
2953
+
type: 'token',
2954
+
description:
2955
+
'A list of actors used for curation purposes such as list feeds or interaction gating.',
2956
+
},
2957
+
listPurpose: {
2958
+
type: 'string',
2959
+
knownValues: [
2960
+
'app.bsky.graph.defs#modlist',
2961
+
'app.bsky.graph.defs#curatelist',
2962
+
'app.bsky.graph.defs#referencelist',
2963
+
],
2964
+
},
2965
+
listItemView: {
2966
+
type: 'object',
2967
+
required: ['uri', 'subject'],
2968
+
properties: {
2969
+
uri: {
2970
+
type: 'string',
2971
+
format: 'at-uri',
2972
+
},
2973
+
subject: {
2974
+
ref: 'lex:app.bsky.actor.defs#profileView',
2975
+
type: 'ref',
2976
+
},
2977
+
},
2978
+
},
2979
+
relationship: {
2980
+
type: 'object',
2981
+
required: ['did'],
2982
+
properties: {
2983
+
did: {
2984
+
type: 'string',
2985
+
format: 'did',
2986
+
},
2987
+
following: {
2988
+
type: 'string',
2989
+
format: 'at-uri',
2990
+
description:
2991
+
'if the actor follows this DID, this is the AT-URI of the follow record',
2992
+
},
2993
+
followedBy: {
2994
+
type: 'string',
2995
+
format: 'at-uri',
2996
+
description:
2997
+
'if the actor is followed by this DID, contains the AT-URI of the follow record',
2998
+
},
2999
+
},
3000
+
description:
3001
+
'lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)',
3002
+
},
3003
+
listViewBasic: {
3004
+
type: 'object',
3005
+
required: ['uri', 'cid', 'name', 'purpose'],
3006
+
properties: {
3007
+
cid: {
3008
+
type: 'string',
3009
+
format: 'cid',
3010
+
},
3011
+
uri: {
3012
+
type: 'string',
3013
+
format: 'at-uri',
3014
+
},
3015
+
name: {
3016
+
type: 'string',
3017
+
maxLength: 64,
3018
+
minLength: 1,
3019
+
},
3020
+
avatar: {
3021
+
type: 'string',
3022
+
format: 'uri',
3023
+
},
3024
+
labels: {
3025
+
type: 'array',
3026
+
items: {
3027
+
ref: 'lex:com.atproto.label.defs#label',
3028
+
type: 'ref',
3029
+
},
3030
+
},
3031
+
viewer: {
3032
+
ref: 'lex:app.bsky.graph.defs#listViewerState',
3033
+
type: 'ref',
3034
+
},
3035
+
purpose: {
3036
+
ref: 'lex:app.bsky.graph.defs#listPurpose',
3037
+
type: 'ref',
3038
+
},
3039
+
indexedAt: {
3040
+
type: 'string',
3041
+
format: 'datetime',
3042
+
},
3043
+
listItemCount: {
3044
+
type: 'integer',
3045
+
minimum: 0,
3046
+
},
3047
+
},
3048
+
},
3049
+
notFoundActor: {
3050
+
type: 'object',
3051
+
required: ['actor', 'notFound'],
3052
+
properties: {
3053
+
actor: {
3054
+
type: 'string',
3055
+
format: 'at-identifier',
3056
+
},
3057
+
notFound: {
3058
+
type: 'boolean',
3059
+
const: true,
3060
+
},
3061
+
},
3062
+
description: 'indicates that a handle or DID could not be resolved',
3063
+
},
3064
+
referencelist: {
3065
+
type: 'token',
3066
+
description:
3067
+
'A list of actors used for only for reference purposes such as within a starter pack.',
3068
+
},
3069
+
listViewerState: {
3070
+
type: 'object',
3071
+
properties: {
3072
+
muted: {
3073
+
type: 'boolean',
3074
+
},
3075
+
blocked: {
3076
+
type: 'string',
3077
+
format: 'at-uri',
3078
+
},
3079
+
},
3080
+
},
3081
+
starterPackView: {
3082
+
type: 'object',
3083
+
required: ['uri', 'cid', 'record', 'creator', 'indexedAt'],
3084
+
properties: {
3085
+
cid: {
3086
+
type: 'string',
3087
+
format: 'cid',
3088
+
},
3089
+
uri: {
3090
+
type: 'string',
3091
+
format: 'at-uri',
3092
+
},
3093
+
list: {
3094
+
ref: 'lex:app.bsky.graph.defs#listViewBasic',
3095
+
type: 'ref',
3096
+
},
3097
+
feeds: {
3098
+
type: 'array',
3099
+
items: {
3100
+
ref: 'lex:app.bsky.feed.defs#generatorView',
3101
+
type: 'ref',
3102
+
},
3103
+
maxLength: 3,
3104
+
},
3105
+
labels: {
3106
+
type: 'array',
3107
+
items: {
3108
+
ref: 'lex:com.atproto.label.defs#label',
3109
+
type: 'ref',
3110
+
},
3111
+
},
3112
+
record: {
3113
+
type: 'unknown',
3114
+
},
3115
+
creator: {
3116
+
ref: 'lex:app.bsky.actor.defs#profileViewBasic',
3117
+
type: 'ref',
3118
+
},
3119
+
indexedAt: {
3120
+
type: 'string',
3121
+
format: 'datetime',
3122
+
},
3123
+
joinedWeekCount: {
3124
+
type: 'integer',
3125
+
minimum: 0,
3126
+
},
3127
+
listItemsSample: {
3128
+
type: 'array',
3129
+
items: {
3130
+
ref: 'lex:app.bsky.graph.defs#listItemView',
3131
+
type: 'ref',
3132
+
},
3133
+
maxLength: 12,
3134
+
},
3135
+
joinedAllTimeCount: {
3136
+
type: 'integer',
3137
+
minimum: 0,
3138
+
},
3139
+
},
3140
+
},
3141
+
starterPackViewBasic: {
3142
+
type: 'object',
3143
+
required: ['uri', 'cid', 'record', 'creator', 'indexedAt'],
3144
+
properties: {
3145
+
cid: {
3146
+
type: 'string',
3147
+
format: 'cid',
3148
+
},
3149
+
uri: {
3150
+
type: 'string',
3151
+
format: 'at-uri',
3152
+
},
3153
+
labels: {
3154
+
type: 'array',
3155
+
items: {
3156
+
ref: 'lex:com.atproto.label.defs#label',
3157
+
type: 'ref',
3158
+
},
3159
+
},
3160
+
record: {
3161
+
type: 'unknown',
3162
+
},
3163
+
creator: {
3164
+
ref: 'lex:app.bsky.actor.defs#profileViewBasic',
3165
+
type: 'ref',
3166
+
},
3167
+
indexedAt: {
3168
+
type: 'string',
3169
+
format: 'datetime',
3170
+
},
3171
+
listItemCount: {
3172
+
type: 'integer',
3173
+
minimum: 0,
3174
+
},
3175
+
joinedWeekCount: {
3176
+
type: 'integer',
3177
+
minimum: 0,
3178
+
},
3179
+
joinedAllTimeCount: {
3180
+
type: 'integer',
3181
+
minimum: 0,
3182
+
},
3183
+
},
3184
+
},
3185
+
},
3186
+
},
3187
+
AppBskyLabelerDefs: {
3188
+
lexicon: 1,
3189
+
id: 'app.bsky.labeler.defs',
3190
+
defs: {
3191
+
labelerView: {
3192
+
type: 'object',
3193
+
required: ['uri', 'cid', 'creator', 'indexedAt'],
3194
+
properties: {
3195
+
cid: {
3196
+
type: 'string',
3197
+
format: 'cid',
3198
+
},
3199
+
uri: {
3200
+
type: 'string',
3201
+
format: 'at-uri',
3202
+
},
3203
+
labels: {
3204
+
type: 'array',
3205
+
items: {
3206
+
ref: 'lex:com.atproto.label.defs#label',
3207
+
type: 'ref',
3208
+
},
3209
+
},
3210
+
viewer: {
3211
+
ref: 'lex:app.bsky.labeler.defs#labelerViewerState',
3212
+
type: 'ref',
3213
+
},
3214
+
creator: {
3215
+
ref: 'lex:app.bsky.actor.defs#profileView',
3216
+
type: 'ref',
3217
+
},
3218
+
indexedAt: {
3219
+
type: 'string',
3220
+
format: 'datetime',
3221
+
},
3222
+
likeCount: {
3223
+
type: 'integer',
3224
+
minimum: 0,
3225
+
},
3226
+
},
3227
+
},
3228
+
labelerPolicies: {
3229
+
type: 'object',
3230
+
required: ['labelValues'],
3231
+
properties: {
3232
+
labelValues: {
3233
+
type: 'array',
3234
+
items: {
3235
+
ref: 'lex:com.atproto.label.defs#labelValue',
3236
+
type: 'ref',
3237
+
},
3238
+
description:
3239
+
'The label values which this labeler publishes. May include global or custom labels.',
3240
+
},
3241
+
labelValueDefinitions: {
3242
+
type: 'array',
3243
+
items: {
3244
+
ref: 'lex:com.atproto.label.defs#labelValueDefinition',
3245
+
type: 'ref',
3246
+
},
3247
+
description:
3248
+
'Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler.',
3249
+
},
3250
+
},
3251
+
},
3252
+
labelerViewerState: {
3253
+
type: 'object',
3254
+
properties: {
3255
+
like: {
3256
+
type: 'string',
3257
+
format: 'at-uri',
3258
+
},
3259
+
},
3260
+
},
3261
+
labelerViewDetailed: {
3262
+
type: 'object',
3263
+
required: ['uri', 'cid', 'creator', 'policies', 'indexedAt'],
3264
+
properties: {
3265
+
cid: {
3266
+
type: 'string',
3267
+
format: 'cid',
3268
+
},
3269
+
uri: {
3270
+
type: 'string',
3271
+
format: 'at-uri',
3272
+
},
3273
+
labels: {
3274
+
type: 'array',
3275
+
items: {
3276
+
ref: 'lex:com.atproto.label.defs#label',
3277
+
type: 'ref',
3278
+
},
3279
+
},
3280
+
viewer: {
3281
+
ref: 'lex:app.bsky.labeler.defs#labelerViewerState',
3282
+
type: 'ref',
3283
+
},
3284
+
creator: {
3285
+
ref: 'lex:app.bsky.actor.defs#profileView',
3286
+
type: 'ref',
3287
+
},
3288
+
policies: {
3289
+
ref: 'lex:app.bsky.labeler.defs#labelerPolicies',
3290
+
type: 'ref',
3291
+
},
3292
+
indexedAt: {
3293
+
type: 'string',
3294
+
format: 'datetime',
3295
+
},
3296
+
likeCount: {
3297
+
type: 'integer',
3298
+
minimum: 0,
3299
+
},
3300
+
},
3301
+
},
3302
+
},
3303
+
},
3304
+
AppBskyRichtextFacet: {
3305
+
lexicon: 1,
3306
+
id: 'app.bsky.richtext.facet',
3307
+
defs: {
3308
+
tag: {
3309
+
type: 'object',
3310
+
required: ['tag'],
3311
+
properties: {
3312
+
tag: {
3313
+
type: 'string',
3314
+
maxLength: 640,
3315
+
maxGraphemes: 64,
3316
+
},
3317
+
},
3318
+
description:
3319
+
"Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').",
3320
+
},
3321
+
link: {
3322
+
type: 'object',
3323
+
required: ['uri'],
3324
+
properties: {
3325
+
uri: {
3326
+
type: 'string',
3327
+
format: 'uri',
3328
+
},
3329
+
},
3330
+
description:
3331
+
'Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.',
3332
+
},
3333
+
main: {
3334
+
type: 'object',
3335
+
required: ['index', 'features'],
3336
+
properties: {
3337
+
index: {
3338
+
ref: 'lex:app.bsky.richtext.facet#byteSlice',
3339
+
type: 'ref',
3340
+
},
3341
+
features: {
3342
+
type: 'array',
3343
+
items: {
3344
+
refs: [
3345
+
'lex:app.bsky.richtext.facet#mention',
3346
+
'lex:app.bsky.richtext.facet#link',
3347
+
'lex:app.bsky.richtext.facet#tag',
3348
+
],
3349
+
type: 'union',
3350
+
},
3351
+
},
3352
+
},
3353
+
description: 'Annotation of a sub-string within rich text.',
3354
+
},
3355
+
mention: {
3356
+
type: 'object',
3357
+
required: ['did'],
3358
+
properties: {
3359
+
did: {
3360
+
type: 'string',
3361
+
format: 'did',
3362
+
},
3363
+
},
3364
+
description:
3365
+
"Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.",
3366
+
},
3367
+
byteSlice: {
3368
+
type: 'object',
3369
+
required: ['byteStart', 'byteEnd'],
3370
+
properties: {
3371
+
byteEnd: {
3372
+
type: 'integer',
3373
+
minimum: 0,
3374
+
},
3375
+
byteStart: {
3376
+
type: 'integer',
3377
+
minimum: 0,
3378
+
},
3379
+
},
3380
+
description:
3381
+
'Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.',
3382
+
},
3383
+
},
3384
+
},
3385
} as const satisfies Record<string, LexiconDoc>
3386
3387
export const schemas = Object.values(schemaDict) satisfies LexiconDoc[]
···
3436
ComAtprotoRepoUploadBlob: 'com.atproto.repo.uploadBlob',
3437
AppBskyActorDefs: 'app.bsky.actor.defs',
3438
AppBskyActorProfile: 'app.bsky.actor.profile',
3439
+
AppBskyEmbedDefs: 'app.bsky.embed.defs',
3440
+
AppBskyEmbedExternal: 'app.bsky.embed.external',
3441
+
AppBskyEmbedImages: 'app.bsky.embed.images',
3442
+
AppBskyEmbedRecord: 'app.bsky.embed.record',
3443
+
AppBskyEmbedRecordWithMedia: 'app.bsky.embed.recordWithMedia',
3444
+
AppBskyEmbedVideo: 'app.bsky.embed.video',
3445
+
AppBskyFeedDefs: 'app.bsky.feed.defs',
3446
+
AppBskyFeedPostgate: 'app.bsky.feed.postgate',
3447
+
AppBskyFeedThreadgate: 'app.bsky.feed.threadgate',
3448
+
AppBskyGraphDefs: 'app.bsky.graph.defs',
3449
+
AppBskyLabelerDefs: 'app.bsky.labeler.defs',
3450
+
AppBskyRichtextFacet: 'app.bsky.richtext.facet',
3451
} as const
+496
-5
packages/lexicon/src/types/app/bsky/actor/defs.ts
+496
-5
packages/lexicon/src/types/app/bsky/actor/defs.ts
···
7
import { validate as _validate } from '../../../../lexicons'
8
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js'
10
11
const is$typed = _is$typed,
12
validate = _validate
13
const id = 'app.bsky.actor.defs'
14
15
export interface ProfileView {
16
$type?: 'app.bsky.actor.defs#profileView'
17
did: string
18
-
handle: string
19
-
displayName?: string
20
-
description?: string
21
avatar?: string
22
-
indexedAt?: string
23
createdAt?: string
24
-
labels?: ComAtprotoLabelDefs.Label[]
25
}
26
27
const hashProfileView = 'profileView'
···
33
export function validateProfileView<V>(v: V) {
34
return validate<ProfileView & V>(v, id, hashProfileView)
35
}
···
7
import { validate as _validate } from '../../../../lexicons'
8
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js'
10
+
import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js'
11
+
import type * as AppBskyFeedPostgate from '../feed/postgate.js'
12
+
import type * as AppBskyFeedThreadgate from '../feed/threadgate.js'
13
+
import type * as AppBskyGraphDefs from '../graph/defs.js'
14
15
const is$typed = _is$typed,
16
validate = _validate
17
const id = 'app.bsky.actor.defs'
18
19
+
/** A new user experiences (NUX) storage object */
20
+
export interface Nux {
21
+
$type?: 'app.bsky.actor.defs#nux'
22
+
id: string
23
+
/** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. */
24
+
data?: string
25
+
completed: boolean
26
+
/** The date and time at which the NUX will expire and should be considered completed. */
27
+
expiresAt?: string
28
+
}
29
+
30
+
const hashNux = 'nux'
31
+
32
+
export function isNux<V>(v: V) {
33
+
return is$typed(v, id, hashNux)
34
+
}
35
+
36
+
export function validateNux<V>(v: V) {
37
+
return validate<Nux & V>(v, id, hashNux)
38
+
}
39
+
40
+
/** A word that the account owner has muted. */
41
+
export interface MutedWord {
42
+
$type?: 'app.bsky.actor.defs#mutedWord'
43
+
id?: string
44
+
/** The muted word itself. */
45
+
value: string
46
+
/** The intended targets of the muted word. */
47
+
targets: MutedWordTarget[]
48
+
/** The date and time at which the muted word will expire and no longer be applied. */
49
+
expiresAt?: string
50
+
/** Groups of users to apply the muted word to. If undefined, applies to all users. */
51
+
actorTarget: 'all' | 'exclude-following' | (string & {})
52
+
}
53
+
54
+
const hashMutedWord = 'mutedWord'
55
+
56
+
export function isMutedWord<V>(v: V) {
57
+
return is$typed(v, id, hashMutedWord)
58
+
}
59
+
60
+
export function validateMutedWord<V>(v: V) {
61
+
return validate<MutedWord & V>(v, id, hashMutedWord)
62
+
}
63
+
64
+
export interface SavedFeed {
65
+
$type?: 'app.bsky.actor.defs#savedFeed'
66
+
id: string
67
+
type: 'feed' | 'list' | 'timeline' | (string & {})
68
+
value: string
69
+
pinned: boolean
70
+
}
71
+
72
+
const hashSavedFeed = 'savedFeed'
73
+
74
+
export function isSavedFeed<V>(v: V) {
75
+
return is$typed(v, id, hashSavedFeed)
76
+
}
77
+
78
+
export function validateSavedFeed<V>(v: V) {
79
+
return validate<SavedFeed & V>(v, id, hashSavedFeed)
80
+
}
81
+
82
+
export type Preferences = (
83
+
| $Typed<AdultContentPref>
84
+
| $Typed<ContentLabelPref>
85
+
| $Typed<SavedFeedsPref>
86
+
| $Typed<SavedFeedsPrefV2>
87
+
| $Typed<PersonalDetailsPref>
88
+
| $Typed<FeedViewPref>
89
+
| $Typed<ThreadViewPref>
90
+
| $Typed<InterestsPref>
91
+
| $Typed<MutedWordsPref>
92
+
| $Typed<HiddenPostsPref>
93
+
| $Typed<BskyAppStatePref>
94
+
| $Typed<LabelersPref>
95
+
| $Typed<PostInteractionSettingsPref>
96
+
| { $type: string }
97
+
)[]
98
+
99
export interface ProfileView {
100
$type?: 'app.bsky.actor.defs#profileView'
101
did: string
102
avatar?: string
103
+
handle: string
104
+
labels?: ComAtprotoLabelDefs.Label[]
105
+
viewer?: ViewerState
106
createdAt?: string
107
+
indexedAt?: string
108
+
associated?: ProfileAssociated
109
+
description?: string
110
+
displayName?: string
111
}
112
113
const hashProfileView = 'profileView'
···
119
export function validateProfileView<V>(v: V) {
120
return validate<ProfileView & V>(v, id, hashProfileView)
121
}
122
+
123
+
/** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. */
124
+
export interface ViewerState {
125
+
$type?: 'app.bsky.actor.defs#viewerState'
126
+
muted?: boolean
127
+
blocking?: string
128
+
blockedBy?: boolean
129
+
following?: string
130
+
followedBy?: string
131
+
mutedByList?: AppBskyGraphDefs.ListViewBasic
132
+
blockingByList?: AppBskyGraphDefs.ListViewBasic
133
+
knownFollowers?: KnownFollowers
134
+
}
135
+
136
+
const hashViewerState = 'viewerState'
137
+
138
+
export function isViewerState<V>(v: V) {
139
+
return is$typed(v, id, hashViewerState)
140
+
}
141
+
142
+
export function validateViewerState<V>(v: V) {
143
+
return validate<ViewerState & V>(v, id, hashViewerState)
144
+
}
145
+
146
+
export interface FeedViewPref {
147
+
$type?: 'app.bsky.actor.defs#feedViewPref'
148
+
/** The URI of the feed, or an identifier which describes the feed. */
149
+
feed: string
150
+
/** Hide replies in the feed. */
151
+
hideReplies?: boolean
152
+
/** Hide reposts in the feed. */
153
+
hideReposts?: boolean
154
+
/** Hide quote posts in the feed. */
155
+
hideQuotePosts?: boolean
156
+
/** Hide replies in the feed if they do not have this number of likes. */
157
+
hideRepliesByLikeCount?: number
158
+
/** Hide replies in the feed if they are not by followed users. */
159
+
hideRepliesByUnfollowed: boolean
160
+
}
161
+
162
+
const hashFeedViewPref = 'feedViewPref'
163
+
164
+
export function isFeedViewPref<V>(v: V) {
165
+
return is$typed(v, id, hashFeedViewPref)
166
+
}
167
+
168
+
export function validateFeedViewPref<V>(v: V) {
169
+
return validate<FeedViewPref & V>(v, id, hashFeedViewPref)
170
+
}
171
+
172
+
export interface LabelersPref {
173
+
$type?: 'app.bsky.actor.defs#labelersPref'
174
+
labelers: LabelerPrefItem[]
175
+
}
176
+
177
+
const hashLabelersPref = 'labelersPref'
178
+
179
+
export function isLabelersPref<V>(v: V) {
180
+
return is$typed(v, id, hashLabelersPref)
181
+
}
182
+
183
+
export function validateLabelersPref<V>(v: V) {
184
+
return validate<LabelersPref & V>(v, id, hashLabelersPref)
185
+
}
186
+
187
+
export interface InterestsPref {
188
+
$type?: 'app.bsky.actor.defs#interestsPref'
189
+
/** A list of tags which describe the account owner's interests gathered during onboarding. */
190
+
tags: string[]
191
+
}
192
+
193
+
const hashInterestsPref = 'interestsPref'
194
+
195
+
export function isInterestsPref<V>(v: V) {
196
+
return is$typed(v, id, hashInterestsPref)
197
+
}
198
+
199
+
export function validateInterestsPref<V>(v: V) {
200
+
return validate<InterestsPref & V>(v, id, hashInterestsPref)
201
+
}
202
+
203
+
/** The subject's followers whom you also follow */
204
+
export interface KnownFollowers {
205
+
$type?: 'app.bsky.actor.defs#knownFollowers'
206
+
count: number
207
+
followers: ProfileViewBasic[]
208
+
}
209
+
210
+
const hashKnownFollowers = 'knownFollowers'
211
+
212
+
export function isKnownFollowers<V>(v: V) {
213
+
return is$typed(v, id, hashKnownFollowers)
214
+
}
215
+
216
+
export function validateKnownFollowers<V>(v: V) {
217
+
return validate<KnownFollowers & V>(v, id, hashKnownFollowers)
218
+
}
219
+
220
+
export interface MutedWordsPref {
221
+
$type?: 'app.bsky.actor.defs#mutedWordsPref'
222
+
/** A list of words the account owner has muted. */
223
+
items: MutedWord[]
224
+
}
225
+
226
+
const hashMutedWordsPref = 'mutedWordsPref'
227
+
228
+
export function isMutedWordsPref<V>(v: V) {
229
+
return is$typed(v, id, hashMutedWordsPref)
230
+
}
231
+
232
+
export function validateMutedWordsPref<V>(v: V) {
233
+
return validate<MutedWordsPref & V>(v, id, hashMutedWordsPref)
234
+
}
235
+
236
+
export interface SavedFeedsPref {
237
+
$type?: 'app.bsky.actor.defs#savedFeedsPref'
238
+
saved: string[]
239
+
pinned: string[]
240
+
timelineIndex?: number
241
+
}
242
+
243
+
const hashSavedFeedsPref = 'savedFeedsPref'
244
+
245
+
export function isSavedFeedsPref<V>(v: V) {
246
+
return is$typed(v, id, hashSavedFeedsPref)
247
+
}
248
+
249
+
export function validateSavedFeedsPref<V>(v: V) {
250
+
return validate<SavedFeedsPref & V>(v, id, hashSavedFeedsPref)
251
+
}
252
+
253
+
export interface ThreadViewPref {
254
+
$type?: 'app.bsky.actor.defs#threadViewPref'
255
+
/** Sorting mode for threads. */
256
+
sort?:
257
+
| 'oldest'
258
+
| 'newest'
259
+
| 'most-likes'
260
+
| 'random'
261
+
| 'hotness'
262
+
| (string & {})
263
+
/** Show followed users at the top of all replies. */
264
+
prioritizeFollowedUsers?: boolean
265
+
}
266
+
267
+
const hashThreadViewPref = 'threadViewPref'
268
+
269
+
export function isThreadViewPref<V>(v: V) {
270
+
return is$typed(v, id, hashThreadViewPref)
271
+
}
272
+
273
+
export function validateThreadViewPref<V>(v: V) {
274
+
return validate<ThreadViewPref & V>(v, id, hashThreadViewPref)
275
+
}
276
+
277
+
export interface HiddenPostsPref {
278
+
$type?: 'app.bsky.actor.defs#hiddenPostsPref'
279
+
/** A list of URIs of posts the account owner has hidden. */
280
+
items: string[]
281
+
}
282
+
283
+
const hashHiddenPostsPref = 'hiddenPostsPref'
284
+
285
+
export function isHiddenPostsPref<V>(v: V) {
286
+
return is$typed(v, id, hashHiddenPostsPref)
287
+
}
288
+
289
+
export function validateHiddenPostsPref<V>(v: V) {
290
+
return validate<HiddenPostsPref & V>(v, id, hashHiddenPostsPref)
291
+
}
292
+
293
+
export interface LabelerPrefItem {
294
+
$type?: 'app.bsky.actor.defs#labelerPrefItem'
295
+
did: string
296
+
}
297
+
298
+
const hashLabelerPrefItem = 'labelerPrefItem'
299
+
300
+
export function isLabelerPrefItem<V>(v: V) {
301
+
return is$typed(v, id, hashLabelerPrefItem)
302
+
}
303
+
304
+
export function validateLabelerPrefItem<V>(v: V) {
305
+
return validate<LabelerPrefItem & V>(v, id, hashLabelerPrefItem)
306
+
}
307
+
308
+
export type MutedWordTarget = 'content' | 'tag' | (string & {})
309
+
310
+
export interface AdultContentPref {
311
+
$type?: 'app.bsky.actor.defs#adultContentPref'
312
+
enabled: boolean
313
+
}
314
+
315
+
const hashAdultContentPref = 'adultContentPref'
316
+
317
+
export function isAdultContentPref<V>(v: V) {
318
+
return is$typed(v, id, hashAdultContentPref)
319
+
}
320
+
321
+
export function validateAdultContentPref<V>(v: V) {
322
+
return validate<AdultContentPref & V>(v, id, hashAdultContentPref)
323
+
}
324
+
325
+
/** A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this. */
326
+
export interface BskyAppStatePref {
327
+
$type?: 'app.bsky.actor.defs#bskyAppStatePref'
328
+
/** Storage for NUXs the user has encountered. */
329
+
nuxs?: Nux[]
330
+
/** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. */
331
+
queuedNudges?: string[]
332
+
activeProgressGuide?: BskyAppProgressGuide
333
+
}
334
+
335
+
const hashBskyAppStatePref = 'bskyAppStatePref'
336
+
337
+
export function isBskyAppStatePref<V>(v: V) {
338
+
return is$typed(v, id, hashBskyAppStatePref)
339
+
}
340
+
341
+
export function validateBskyAppStatePref<V>(v: V) {
342
+
return validate<BskyAppStatePref & V>(v, id, hashBskyAppStatePref)
343
+
}
344
+
345
+
export interface ContentLabelPref {
346
+
$type?: 'app.bsky.actor.defs#contentLabelPref'
347
+
label: string
348
+
/** Which labeler does this preference apply to? If undefined, applies globally. */
349
+
labelerDid?: string
350
+
visibility: 'ignore' | 'show' | 'warn' | 'hide' | (string & {})
351
+
}
352
+
353
+
const hashContentLabelPref = 'contentLabelPref'
354
+
355
+
export function isContentLabelPref<V>(v: V) {
356
+
return is$typed(v, id, hashContentLabelPref)
357
+
}
358
+
359
+
export function validateContentLabelPref<V>(v: V) {
360
+
return validate<ContentLabelPref & V>(v, id, hashContentLabelPref)
361
+
}
362
+
363
+
export interface ProfileViewBasic {
364
+
$type?: 'app.bsky.actor.defs#profileViewBasic'
365
+
did: string
366
+
avatar?: string
367
+
handle: string
368
+
labels?: ComAtprotoLabelDefs.Label[]
369
+
viewer?: ViewerState
370
+
createdAt?: string
371
+
associated?: ProfileAssociated
372
+
displayName?: string
373
+
}
374
+
375
+
const hashProfileViewBasic = 'profileViewBasic'
376
+
377
+
export function isProfileViewBasic<V>(v: V) {
378
+
return is$typed(v, id, hashProfileViewBasic)
379
+
}
380
+
381
+
export function validateProfileViewBasic<V>(v: V) {
382
+
return validate<ProfileViewBasic & V>(v, id, hashProfileViewBasic)
383
+
}
384
+
385
+
export interface SavedFeedsPrefV2 {
386
+
$type?: 'app.bsky.actor.defs#savedFeedsPrefV2'
387
+
items: SavedFeed[]
388
+
}
389
+
390
+
const hashSavedFeedsPrefV2 = 'savedFeedsPrefV2'
391
+
392
+
export function isSavedFeedsPrefV2<V>(v: V) {
393
+
return is$typed(v, id, hashSavedFeedsPrefV2)
394
+
}
395
+
396
+
export function validateSavedFeedsPrefV2<V>(v: V) {
397
+
return validate<SavedFeedsPrefV2 & V>(v, id, hashSavedFeedsPrefV2)
398
+
}
399
+
400
+
export interface ProfileAssociated {
401
+
$type?: 'app.bsky.actor.defs#profileAssociated'
402
+
chat?: ProfileAssociatedChat
403
+
lists?: number
404
+
labeler?: boolean
405
+
feedgens?: number
406
+
starterPacks?: number
407
+
}
408
+
409
+
const hashProfileAssociated = 'profileAssociated'
410
+
411
+
export function isProfileAssociated<V>(v: V) {
412
+
return is$typed(v, id, hashProfileAssociated)
413
+
}
414
+
415
+
export function validateProfileAssociated<V>(v: V) {
416
+
return validate<ProfileAssociated & V>(v, id, hashProfileAssociated)
417
+
}
418
+
419
+
export interface PersonalDetailsPref {
420
+
$type?: 'app.bsky.actor.defs#personalDetailsPref'
421
+
/** The birth date of account owner. */
422
+
birthDate?: string
423
+
}
424
+
425
+
const hashPersonalDetailsPref = 'personalDetailsPref'
426
+
427
+
export function isPersonalDetailsPref<V>(v: V) {
428
+
return is$typed(v, id, hashPersonalDetailsPref)
429
+
}
430
+
431
+
export function validatePersonalDetailsPref<V>(v: V) {
432
+
return validate<PersonalDetailsPref & V>(v, id, hashPersonalDetailsPref)
433
+
}
434
+
435
+
export interface ProfileViewDetailed {
436
+
$type?: 'app.bsky.actor.defs#profileViewDetailed'
437
+
did: string
438
+
avatar?: string
439
+
banner?: string
440
+
handle: string
441
+
labels?: ComAtprotoLabelDefs.Label[]
442
+
viewer?: ViewerState
443
+
createdAt?: string
444
+
indexedAt?: string
445
+
associated?: ProfileAssociated
446
+
pinnedPost?: ComAtprotoRepoStrongRef.Main
447
+
postsCount?: number
448
+
description?: string
449
+
displayName?: string
450
+
followsCount?: number
451
+
followersCount?: number
452
+
joinedViaStarterPack?: AppBskyGraphDefs.StarterPackViewBasic
453
+
}
454
+
455
+
const hashProfileViewDetailed = 'profileViewDetailed'
456
+
457
+
export function isProfileViewDetailed<V>(v: V) {
458
+
return is$typed(v, id, hashProfileViewDetailed)
459
+
}
460
+
461
+
export function validateProfileViewDetailed<V>(v: V) {
462
+
return validate<ProfileViewDetailed & V>(v, id, hashProfileViewDetailed)
463
+
}
464
+
465
+
/** If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress. */
466
+
export interface BskyAppProgressGuide {
467
+
$type?: 'app.bsky.actor.defs#bskyAppProgressGuide'
468
+
guide: string
469
+
}
470
+
471
+
const hashBskyAppProgressGuide = 'bskyAppProgressGuide'
472
+
473
+
export function isBskyAppProgressGuide<V>(v: V) {
474
+
return is$typed(v, id, hashBskyAppProgressGuide)
475
+
}
476
+
477
+
export function validateBskyAppProgressGuide<V>(v: V) {
478
+
return validate<BskyAppProgressGuide & V>(v, id, hashBskyAppProgressGuide)
479
+
}
480
+
481
+
export interface ProfileAssociatedChat {
482
+
$type?: 'app.bsky.actor.defs#profileAssociatedChat'
483
+
allowIncoming: 'all' | 'none' | 'following' | (string & {})
484
+
}
485
+
486
+
const hashProfileAssociatedChat = 'profileAssociatedChat'
487
+
488
+
export function isProfileAssociatedChat<V>(v: V) {
489
+
return is$typed(v, id, hashProfileAssociatedChat)
490
+
}
491
+
492
+
export function validateProfileAssociatedChat<V>(v: V) {
493
+
return validate<ProfileAssociatedChat & V>(v, id, hashProfileAssociatedChat)
494
+
}
495
+
496
+
/** Default post interaction settings for the account. These values should be applied as default values when creating new posts. These refs should mirror the threadgate and postgate records exactly. */
497
+
export interface PostInteractionSettingsPref {
498
+
$type?: 'app.bsky.actor.defs#postInteractionSettingsPref'
499
+
/** Matches threadgate record. List of rules defining who can reply to this users posts. If value is an empty array, no one can reply. If value is undefined, anyone can reply. */
500
+
threadgateAllowRules?: (
501
+
| $Typed<AppBskyFeedThreadgate.MentionRule>
502
+
| $Typed<AppBskyFeedThreadgate.FollowerRule>
503
+
| $Typed<AppBskyFeedThreadgate.FollowingRule>
504
+
| $Typed<AppBskyFeedThreadgate.ListRule>
505
+
| { $type: string }
506
+
)[]
507
+
/** Matches postgate record. List of rules defining who can embed this users posts. If value is an empty array or is undefined, no particular rules apply and anyone can embed. */
508
+
postgateEmbeddingRules?: (
509
+
| $Typed<AppBskyFeedPostgate.DisableRule>
510
+
| { $type: string }
511
+
)[]
512
+
}
513
+
514
+
const hashPostInteractionSettingsPref = 'postInteractionSettingsPref'
515
+
516
+
export function isPostInteractionSettingsPref<V>(v: V) {
517
+
return is$typed(v, id, hashPostInteractionSettingsPref)
518
+
}
519
+
520
+
export function validatePostInteractionSettingsPref<V>(v: V) {
521
+
return validate<PostInteractionSettingsPref & V>(
522
+
v,
523
+
id,
524
+
hashPostInteractionSettingsPref,
525
+
)
526
+
}
+29
packages/lexicon/src/types/app/bsky/embed/defs.ts
+29
packages/lexicon/src/types/app/bsky/embed/defs.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
10
+
const is$typed = _is$typed,
11
+
validate = _validate
12
+
const id = 'app.bsky.embed.defs'
13
+
14
+
/** width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. */
15
+
export interface AspectRatio {
16
+
$type?: 'app.bsky.embed.defs#aspectRatio'
17
+
width: number
18
+
height: number
19
+
}
20
+
21
+
const hashAspectRatio = 'aspectRatio'
22
+
23
+
export function isAspectRatio<V>(v: V) {
24
+
return is$typed(v, id, hashAspectRatio)
25
+
}
26
+
27
+
export function validateAspectRatio<V>(v: V) {
28
+
return validate<AspectRatio & V>(v, id, hashAspectRatio)
29
+
}
+79
packages/lexicon/src/types/app/bsky/embed/external.ts
+79
packages/lexicon/src/types/app/bsky/embed/external.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
10
+
const is$typed = _is$typed,
11
+
validate = _validate
12
+
const id = 'app.bsky.embed.external'
13
+
14
+
/** A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post). */
15
+
export interface Main {
16
+
$type?: 'app.bsky.embed.external'
17
+
external: External
18
+
}
19
+
20
+
const hashMain = 'main'
21
+
22
+
export function isMain<V>(v: V) {
23
+
return is$typed(v, id, hashMain)
24
+
}
25
+
26
+
export function validateMain<V>(v: V) {
27
+
return validate<Main & V>(v, id, hashMain)
28
+
}
29
+
30
+
export interface View {
31
+
$type?: 'app.bsky.embed.external#view'
32
+
external: ViewExternal
33
+
}
34
+
35
+
const hashView = 'view'
36
+
37
+
export function isView<V>(v: V) {
38
+
return is$typed(v, id, hashView)
39
+
}
40
+
41
+
export function validateView<V>(v: V) {
42
+
return validate<View & V>(v, id, hashView)
43
+
}
44
+
45
+
export interface External {
46
+
$type?: 'app.bsky.embed.external#external'
47
+
uri: string
48
+
thumb?: BlobRef
49
+
title: string
50
+
description: string
51
+
}
52
+
53
+
const hashExternal = 'external'
54
+
55
+
export function isExternal<V>(v: V) {
56
+
return is$typed(v, id, hashExternal)
57
+
}
58
+
59
+
export function validateExternal<V>(v: V) {
60
+
return validate<External & V>(v, id, hashExternal)
61
+
}
62
+
63
+
export interface ViewExternal {
64
+
$type?: 'app.bsky.embed.external#viewExternal'
65
+
uri: string
66
+
thumb?: string
67
+
title: string
68
+
description: string
69
+
}
70
+
71
+
const hashViewExternal = 'viewExternal'
72
+
73
+
export function isViewExternal<V>(v: V) {
74
+
return is$typed(v, id, hashViewExternal)
75
+
}
76
+
77
+
export function validateViewExternal<V>(v: V) {
78
+
return validate<ViewExternal & V>(v, id, hashViewExternal)
79
+
}
+82
packages/lexicon/src/types/app/bsky/embed/images.ts
+82
packages/lexicon/src/types/app/bsky/embed/images.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
import type * as AppBskyEmbedDefs from './defs.js'
10
+
11
+
const is$typed = _is$typed,
12
+
validate = _validate
13
+
const id = 'app.bsky.embed.images'
14
+
15
+
export interface Main {
16
+
$type?: 'app.bsky.embed.images'
17
+
images: Image[]
18
+
}
19
+
20
+
const hashMain = 'main'
21
+
22
+
export function isMain<V>(v: V) {
23
+
return is$typed(v, id, hashMain)
24
+
}
25
+
26
+
export function validateMain<V>(v: V) {
27
+
return validate<Main & V>(v, id, hashMain)
28
+
}
29
+
30
+
export interface View {
31
+
$type?: 'app.bsky.embed.images#view'
32
+
images: ViewImage[]
33
+
}
34
+
35
+
const hashView = 'view'
36
+
37
+
export function isView<V>(v: V) {
38
+
return is$typed(v, id, hashView)
39
+
}
40
+
41
+
export function validateView<V>(v: V) {
42
+
return validate<View & V>(v, id, hashView)
43
+
}
44
+
45
+
export interface Image {
46
+
$type?: 'app.bsky.embed.images#image'
47
+
/** Alt text description of the image, for accessibility. */
48
+
alt: string
49
+
image: BlobRef
50
+
aspectRatio?: AppBskyEmbedDefs.AspectRatio
51
+
}
52
+
53
+
const hashImage = 'image'
54
+
55
+
export function isImage<V>(v: V) {
56
+
return is$typed(v, id, hashImage)
57
+
}
58
+
59
+
export function validateImage<V>(v: V) {
60
+
return validate<Image & V>(v, id, hashImage)
61
+
}
62
+
63
+
export interface ViewImage {
64
+
$type?: 'app.bsky.embed.images#viewImage'
65
+
/** Alt text description of the image, for accessibility. */
66
+
alt: string
67
+
/** Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. */
68
+
thumb: string
69
+
/** Fully-qualified URL where a large version of the image can be fetched. May or may not be the exact original blob. For example, CDN location provided by the App View. */
70
+
fullsize: string
71
+
aspectRatio?: AppBskyEmbedDefs.AspectRatio
72
+
}
73
+
74
+
const hashViewImage = 'viewImage'
75
+
76
+
export function isViewImage<V>(v: V) {
77
+
return is$typed(v, id, hashViewImage)
78
+
}
79
+
80
+
export function validateViewImage<V>(v: V) {
81
+
return validate<ViewImage & V>(v, id, hashViewImage)
82
+
}
+143
packages/lexicon/src/types/app/bsky/embed/record.ts
+143
packages/lexicon/src/types/app/bsky/embed/record.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js'
10
+
import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js'
11
+
import type * as AppBskyActorDefs from '../actor/defs.js'
12
+
import type * as AppBskyFeedDefs from '../feed/defs.js'
13
+
import type * as AppBskyGraphDefs from '../graph/defs.js'
14
+
import type * as AppBskyLabelerDefs from '../labeler/defs.js'
15
+
import type * as AppBskyEmbedExternal from './external.js'
16
+
import type * as AppBskyEmbedImages from './images.js'
17
+
import type * as AppBskyEmbedRecordWithMedia from './recordWithMedia.js'
18
+
import type * as AppBskyEmbedVideo from './video.js'
19
+
20
+
const is$typed = _is$typed,
21
+
validate = _validate
22
+
const id = 'app.bsky.embed.record'
23
+
24
+
export interface Main {
25
+
$type?: 'app.bsky.embed.record'
26
+
record: ComAtprotoRepoStrongRef.Main
27
+
}
28
+
29
+
const hashMain = 'main'
30
+
31
+
export function isMain<V>(v: V) {
32
+
return is$typed(v, id, hashMain)
33
+
}
34
+
35
+
export function validateMain<V>(v: V) {
36
+
return validate<Main & V>(v, id, hashMain)
37
+
}
38
+
39
+
export interface View {
40
+
$type?: 'app.bsky.embed.record#view'
41
+
record:
42
+
| $Typed<ViewRecord>
43
+
| $Typed<ViewNotFound>
44
+
| $Typed<ViewBlocked>
45
+
| $Typed<ViewDetached>
46
+
| $Typed<AppBskyFeedDefs.GeneratorView>
47
+
| $Typed<AppBskyGraphDefs.ListView>
48
+
| $Typed<AppBskyLabelerDefs.LabelerView>
49
+
| $Typed<AppBskyGraphDefs.StarterPackViewBasic>
50
+
| { $type: string }
51
+
}
52
+
53
+
const hashView = 'view'
54
+
55
+
export function isView<V>(v: V) {
56
+
return is$typed(v, id, hashView)
57
+
}
58
+
59
+
export function validateView<V>(v: V) {
60
+
return validate<View & V>(v, id, hashView)
61
+
}
62
+
63
+
export interface ViewRecord {
64
+
$type?: 'app.bsky.embed.record#viewRecord'
65
+
cid: string
66
+
uri: string
67
+
/** The record data itself. */
68
+
value: { [_ in string]: unknown }
69
+
author: AppBskyActorDefs.ProfileViewBasic
70
+
embeds?: (
71
+
| $Typed<AppBskyEmbedImages.View>
72
+
| $Typed<AppBskyEmbedVideo.View>
73
+
| $Typed<AppBskyEmbedExternal.View>
74
+
| $Typed<View>
75
+
| $Typed<AppBskyEmbedRecordWithMedia.View>
76
+
| { $type: string }
77
+
)[]
78
+
labels?: ComAtprotoLabelDefs.Label[]
79
+
indexedAt: string
80
+
likeCount?: number
81
+
quoteCount?: number
82
+
replyCount?: number
83
+
repostCount?: number
84
+
}
85
+
86
+
const hashViewRecord = 'viewRecord'
87
+
88
+
export function isViewRecord<V>(v: V) {
89
+
return is$typed(v, id, hashViewRecord)
90
+
}
91
+
92
+
export function validateViewRecord<V>(v: V) {
93
+
return validate<ViewRecord & V>(v, id, hashViewRecord)
94
+
}
95
+
96
+
export interface ViewBlocked {
97
+
$type?: 'app.bsky.embed.record#viewBlocked'
98
+
uri: string
99
+
author: AppBskyFeedDefs.BlockedAuthor
100
+
blocked: true
101
+
}
102
+
103
+
const hashViewBlocked = 'viewBlocked'
104
+
105
+
export function isViewBlocked<V>(v: V) {
106
+
return is$typed(v, id, hashViewBlocked)
107
+
}
108
+
109
+
export function validateViewBlocked<V>(v: V) {
110
+
return validate<ViewBlocked & V>(v, id, hashViewBlocked)
111
+
}
112
+
113
+
export interface ViewDetached {
114
+
$type?: 'app.bsky.embed.record#viewDetached'
115
+
uri: string
116
+
detached: true
117
+
}
118
+
119
+
const hashViewDetached = 'viewDetached'
120
+
121
+
export function isViewDetached<V>(v: V) {
122
+
return is$typed(v, id, hashViewDetached)
123
+
}
124
+
125
+
export function validateViewDetached<V>(v: V) {
126
+
return validate<ViewDetached & V>(v, id, hashViewDetached)
127
+
}
128
+
129
+
export interface ViewNotFound {
130
+
$type?: 'app.bsky.embed.record#viewNotFound'
131
+
uri: string
132
+
notFound: true
133
+
}
134
+
135
+
const hashViewNotFound = 'viewNotFound'
136
+
137
+
export function isViewNotFound<V>(v: V) {
138
+
return is$typed(v, id, hashViewNotFound)
139
+
}
140
+
141
+
export function validateViewNotFound<V>(v: V) {
142
+
return validate<ViewNotFound & V>(v, id, hashViewNotFound)
143
+
}
+56
packages/lexicon/src/types/app/bsky/embed/recordWithMedia.ts
+56
packages/lexicon/src/types/app/bsky/embed/recordWithMedia.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
import type * as AppBskyEmbedExternal from './external.js'
10
+
import type * as AppBskyEmbedImages from './images.js'
11
+
import type * as AppBskyEmbedRecord from './record.js'
12
+
import type * as AppBskyEmbedVideo from './video.js'
13
+
14
+
const is$typed = _is$typed,
15
+
validate = _validate
16
+
const id = 'app.bsky.embed.recordWithMedia'
17
+
18
+
export interface Main {
19
+
$type?: 'app.bsky.embed.recordWithMedia'
20
+
media:
21
+
| $Typed<AppBskyEmbedImages.Main>
22
+
| $Typed<AppBskyEmbedVideo.Main>
23
+
| $Typed<AppBskyEmbedExternal.Main>
24
+
| { $type: string }
25
+
record: AppBskyEmbedRecord.Main
26
+
}
27
+
28
+
const hashMain = 'main'
29
+
30
+
export function isMain<V>(v: V) {
31
+
return is$typed(v, id, hashMain)
32
+
}
33
+
34
+
export function validateMain<V>(v: V) {
35
+
return validate<Main & V>(v, id, hashMain)
36
+
}
37
+
38
+
export interface View {
39
+
$type?: 'app.bsky.embed.recordWithMedia#view'
40
+
media:
41
+
| $Typed<AppBskyEmbedImages.View>
42
+
| $Typed<AppBskyEmbedVideo.View>
43
+
| $Typed<AppBskyEmbedExternal.View>
44
+
| { $type: string }
45
+
record: AppBskyEmbedRecord.View
46
+
}
47
+
48
+
const hashView = 'view'
49
+
50
+
export function isView<V>(v: V) {
51
+
return is$typed(v, id, hashView)
52
+
}
53
+
54
+
export function validateView<V>(v: V) {
55
+
return validate<View & V>(v, id, hashView)
56
+
}
+67
packages/lexicon/src/types/app/bsky/embed/video.ts
+67
packages/lexicon/src/types/app/bsky/embed/video.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
import type * as AppBskyEmbedDefs from './defs.js'
10
+
11
+
const is$typed = _is$typed,
12
+
validate = _validate
13
+
const id = 'app.bsky.embed.video'
14
+
15
+
export interface Main {
16
+
$type?: 'app.bsky.embed.video'
17
+
/** Alt text description of the video, for accessibility. */
18
+
alt?: string
19
+
video: BlobRef
20
+
captions?: Caption[]
21
+
aspectRatio?: AppBskyEmbedDefs.AspectRatio
22
+
}
23
+
24
+
const hashMain = 'main'
25
+
26
+
export function isMain<V>(v: V) {
27
+
return is$typed(v, id, hashMain)
28
+
}
29
+
30
+
export function validateMain<V>(v: V) {
31
+
return validate<Main & V>(v, id, hashMain)
32
+
}
33
+
34
+
export interface View {
35
+
$type?: 'app.bsky.embed.video#view'
36
+
alt?: string
37
+
cid: string
38
+
playlist: string
39
+
thumbnail?: string
40
+
aspectRatio?: AppBskyEmbedDefs.AspectRatio
41
+
}
42
+
43
+
const hashView = 'view'
44
+
45
+
export function isView<V>(v: V) {
46
+
return is$typed(v, id, hashView)
47
+
}
48
+
49
+
export function validateView<V>(v: V) {
50
+
return validate<View & V>(v, id, hashView)
51
+
}
52
+
53
+
export interface Caption {
54
+
$type?: 'app.bsky.embed.video#caption'
55
+
file: BlobRef
56
+
lang: string
57
+
}
58
+
59
+
const hashCaption = 'caption'
60
+
61
+
export function isCaption<V>(v: V) {
62
+
return is$typed(v, id, hashCaption)
63
+
}
64
+
65
+
export function validateCaption<V>(v: V) {
66
+
return validate<Caption & V>(v, id, hashCaption)
67
+
}
+419
packages/lexicon/src/types/app/bsky/feed/defs.ts
+419
packages/lexicon/src/types/app/bsky/feed/defs.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js'
10
+
import type * as AppBskyActorDefs from '../actor/defs.js'
11
+
import type * as AppBskyEmbedExternal from '../embed/external.js'
12
+
import type * as AppBskyEmbedImages from '../embed/images.js'
13
+
import type * as AppBskyEmbedRecord from '../embed/record.js'
14
+
import type * as AppBskyEmbedRecordWithMedia from '../embed/recordWithMedia.js'
15
+
import type * as AppBskyEmbedVideo from '../embed/video.js'
16
+
import type * as AppBskyGraphDefs from '../graph/defs.js'
17
+
import type * as AppBskyRichtextFacet from '../richtext/facet.js'
18
+
19
+
const is$typed = _is$typed,
20
+
validate = _validate
21
+
const id = 'app.bsky.feed.defs'
22
+
23
+
export interface PostView {
24
+
$type?: 'app.bsky.feed.defs#postView'
25
+
cid: string
26
+
uri: string
27
+
embed?:
28
+
| $Typed<AppBskyEmbedImages.View>
29
+
| $Typed<AppBskyEmbedVideo.View>
30
+
| $Typed<AppBskyEmbedExternal.View>
31
+
| $Typed<AppBskyEmbedRecord.View>
32
+
| $Typed<AppBskyEmbedRecordWithMedia.View>
33
+
| { $type: string }
34
+
author: AppBskyActorDefs.ProfileViewBasic
35
+
labels?: ComAtprotoLabelDefs.Label[]
36
+
record: { [_ in string]: unknown }
37
+
viewer?: ViewerState
38
+
indexedAt: string
39
+
likeCount?: number
40
+
quoteCount?: number
41
+
replyCount?: number
42
+
threadgate?: ThreadgateView
43
+
repostCount?: number
44
+
}
45
+
46
+
const hashPostView = 'postView'
47
+
48
+
export function isPostView<V>(v: V) {
49
+
return is$typed(v, id, hashPostView)
50
+
}
51
+
52
+
export function validatePostView<V>(v: V) {
53
+
return validate<PostView & V>(v, id, hashPostView)
54
+
}
55
+
56
+
export interface ReplyRef {
57
+
$type?: 'app.bsky.feed.defs#replyRef'
58
+
root:
59
+
| $Typed<PostView>
60
+
| $Typed<NotFoundPost>
61
+
| $Typed<BlockedPost>
62
+
| { $type: string }
63
+
parent:
64
+
| $Typed<PostView>
65
+
| $Typed<NotFoundPost>
66
+
| $Typed<BlockedPost>
67
+
| { $type: string }
68
+
grandparentAuthor?: AppBskyActorDefs.ProfileViewBasic
69
+
}
70
+
71
+
const hashReplyRef = 'replyRef'
72
+
73
+
export function isReplyRef<V>(v: V) {
74
+
return is$typed(v, id, hashReplyRef)
75
+
}
76
+
77
+
export function validateReplyRef<V>(v: V) {
78
+
return validate<ReplyRef & V>(v, id, hashReplyRef)
79
+
}
80
+
81
+
export interface ReasonPin {
82
+
$type?: 'app.bsky.feed.defs#reasonPin'
83
+
}
84
+
85
+
const hashReasonPin = 'reasonPin'
86
+
87
+
export function isReasonPin<V>(v: V) {
88
+
return is$typed(v, id, hashReasonPin)
89
+
}
90
+
91
+
export function validateReasonPin<V>(v: V) {
92
+
return validate<ReasonPin & V>(v, id, hashReasonPin)
93
+
}
94
+
95
+
export interface BlockedPost {
96
+
$type?: 'app.bsky.feed.defs#blockedPost'
97
+
uri: string
98
+
author: BlockedAuthor
99
+
blocked: true
100
+
}
101
+
102
+
const hashBlockedPost = 'blockedPost'
103
+
104
+
export function isBlockedPost<V>(v: V) {
105
+
return is$typed(v, id, hashBlockedPost)
106
+
}
107
+
108
+
export function validateBlockedPost<V>(v: V) {
109
+
return validate<BlockedPost & V>(v, id, hashBlockedPost)
110
+
}
111
+
112
+
export interface Interaction {
113
+
$type?: 'app.bsky.feed.defs#interaction'
114
+
item?: string
115
+
event?:
116
+
| 'app.bsky.feed.defs#requestLess'
117
+
| 'app.bsky.feed.defs#requestMore'
118
+
| 'app.bsky.feed.defs#clickthroughItem'
119
+
| 'app.bsky.feed.defs#clickthroughAuthor'
120
+
| 'app.bsky.feed.defs#clickthroughReposter'
121
+
| 'app.bsky.feed.defs#clickthroughEmbed'
122
+
| 'app.bsky.feed.defs#interactionSeen'
123
+
| 'app.bsky.feed.defs#interactionLike'
124
+
| 'app.bsky.feed.defs#interactionRepost'
125
+
| 'app.bsky.feed.defs#interactionReply'
126
+
| 'app.bsky.feed.defs#interactionQuote'
127
+
| 'app.bsky.feed.defs#interactionShare'
128
+
| (string & {})
129
+
/** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. */
130
+
feedContext?: string
131
+
}
132
+
133
+
const hashInteraction = 'interaction'
134
+
135
+
export function isInteraction<V>(v: V) {
136
+
return is$typed(v, id, hashInteraction)
137
+
}
138
+
139
+
export function validateInteraction<V>(v: V) {
140
+
return validate<Interaction & V>(v, id, hashInteraction)
141
+
}
142
+
143
+
/** Request that less content like the given feed item be shown in the feed */
144
+
export const REQUESTLESS = `${id}#requestLess`
145
+
/** Request that more content like the given feed item be shown in the feed */
146
+
export const REQUESTMORE = `${id}#requestMore`
147
+
148
+
/** Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. */
149
+
export interface ViewerState {
150
+
$type?: 'app.bsky.feed.defs#viewerState'
151
+
like?: string
152
+
pinned?: boolean
153
+
repost?: string
154
+
threadMuted?: boolean
155
+
replyDisabled?: boolean
156
+
embeddingDisabled?: boolean
157
+
}
158
+
159
+
const hashViewerState = 'viewerState'
160
+
161
+
export function isViewerState<V>(v: V) {
162
+
return is$typed(v, id, hashViewerState)
163
+
}
164
+
165
+
export function validateViewerState<V>(v: V) {
166
+
return validate<ViewerState & V>(v, id, hashViewerState)
167
+
}
168
+
169
+
export interface FeedViewPost {
170
+
$type?: 'app.bsky.feed.defs#feedViewPost'
171
+
post: PostView
172
+
reply?: ReplyRef
173
+
reason?: $Typed<ReasonRepost> | $Typed<ReasonPin> | { $type: string }
174
+
/** Context provided by feed generator that may be passed back alongside interactions. */
175
+
feedContext?: string
176
+
}
177
+
178
+
const hashFeedViewPost = 'feedViewPost'
179
+
180
+
export function isFeedViewPost<V>(v: V) {
181
+
return is$typed(v, id, hashFeedViewPost)
182
+
}
183
+
184
+
export function validateFeedViewPost<V>(v: V) {
185
+
return validate<FeedViewPost & V>(v, id, hashFeedViewPost)
186
+
}
187
+
188
+
export interface NotFoundPost {
189
+
$type?: 'app.bsky.feed.defs#notFoundPost'
190
+
uri: string
191
+
notFound: true
192
+
}
193
+
194
+
const hashNotFoundPost = 'notFoundPost'
195
+
196
+
export function isNotFoundPost<V>(v: V) {
197
+
return is$typed(v, id, hashNotFoundPost)
198
+
}
199
+
200
+
export function validateNotFoundPost<V>(v: V) {
201
+
return validate<NotFoundPost & V>(v, id, hashNotFoundPost)
202
+
}
203
+
204
+
export interface ReasonRepost {
205
+
$type?: 'app.bsky.feed.defs#reasonRepost'
206
+
by: AppBskyActorDefs.ProfileViewBasic
207
+
indexedAt: string
208
+
}
209
+
210
+
const hashReasonRepost = 'reasonRepost'
211
+
212
+
export function isReasonRepost<V>(v: V) {
213
+
return is$typed(v, id, hashReasonRepost)
214
+
}
215
+
216
+
export function validateReasonRepost<V>(v: V) {
217
+
return validate<ReasonRepost & V>(v, id, hashReasonRepost)
218
+
}
219
+
220
+
export interface BlockedAuthor {
221
+
$type?: 'app.bsky.feed.defs#blockedAuthor'
222
+
did: string
223
+
viewer?: AppBskyActorDefs.ViewerState
224
+
}
225
+
226
+
const hashBlockedAuthor = 'blockedAuthor'
227
+
228
+
export function isBlockedAuthor<V>(v: V) {
229
+
return is$typed(v, id, hashBlockedAuthor)
230
+
}
231
+
232
+
export function validateBlockedAuthor<V>(v: V) {
233
+
return validate<BlockedAuthor & V>(v, id, hashBlockedAuthor)
234
+
}
235
+
236
+
export interface GeneratorView {
237
+
$type?: 'app.bsky.feed.defs#generatorView'
238
+
cid: string
239
+
did: string
240
+
uri: string
241
+
avatar?: string
242
+
labels?: ComAtprotoLabelDefs.Label[]
243
+
viewer?: GeneratorViewerState
244
+
creator: AppBskyActorDefs.ProfileView
245
+
indexedAt: string
246
+
likeCount?: number
247
+
contentMode?:
248
+
| 'app.bsky.feed.defs#contentModeUnspecified'
249
+
| 'app.bsky.feed.defs#contentModeVideo'
250
+
| (string & {})
251
+
description?: string
252
+
displayName: string
253
+
descriptionFacets?: AppBskyRichtextFacet.Main[]
254
+
acceptsInteractions?: boolean
255
+
}
256
+
257
+
const hashGeneratorView = 'generatorView'
258
+
259
+
export function isGeneratorView<V>(v: V) {
260
+
return is$typed(v, id, hashGeneratorView)
261
+
}
262
+
263
+
export function validateGeneratorView<V>(v: V) {
264
+
return validate<GeneratorView & V>(v, id, hashGeneratorView)
265
+
}
266
+
267
+
/** Metadata about this post within the context of the thread it is in. */
268
+
export interface ThreadContext {
269
+
$type?: 'app.bsky.feed.defs#threadContext'
270
+
rootAuthorLike?: string
271
+
}
272
+
273
+
const hashThreadContext = 'threadContext'
274
+
275
+
export function isThreadContext<V>(v: V) {
276
+
return is$typed(v, id, hashThreadContext)
277
+
}
278
+
279
+
export function validateThreadContext<V>(v: V) {
280
+
return validate<ThreadContext & V>(v, id, hashThreadContext)
281
+
}
282
+
283
+
export interface ThreadViewPost {
284
+
$type?: 'app.bsky.feed.defs#threadViewPost'
285
+
post: PostView
286
+
parent?:
287
+
| $Typed<ThreadViewPost>
288
+
| $Typed<NotFoundPost>
289
+
| $Typed<BlockedPost>
290
+
| { $type: string }
291
+
replies?: (
292
+
| $Typed<ThreadViewPost>
293
+
| $Typed<NotFoundPost>
294
+
| $Typed<BlockedPost>
295
+
| { $type: string }
296
+
)[]
297
+
threadContext?: ThreadContext
298
+
}
299
+
300
+
const hashThreadViewPost = 'threadViewPost'
301
+
302
+
export function isThreadViewPost<V>(v: V) {
303
+
return is$typed(v, id, hashThreadViewPost)
304
+
}
305
+
306
+
export function validateThreadViewPost<V>(v: V) {
307
+
return validate<ThreadViewPost & V>(v, id, hashThreadViewPost)
308
+
}
309
+
310
+
export interface ThreadgateView {
311
+
$type?: 'app.bsky.feed.defs#threadgateView'
312
+
cid?: string
313
+
uri?: string
314
+
lists?: AppBskyGraphDefs.ListViewBasic[]
315
+
record?: { [_ in string]: unknown }
316
+
}
317
+
318
+
const hashThreadgateView = 'threadgateView'
319
+
320
+
export function isThreadgateView<V>(v: V) {
321
+
return is$typed(v, id, hashThreadgateView)
322
+
}
323
+
324
+
export function validateThreadgateView<V>(v: V) {
325
+
return validate<ThreadgateView & V>(v, id, hashThreadgateView)
326
+
}
327
+
328
+
/** User liked the feed item */
329
+
export const INTERACTIONLIKE = `${id}#interactionLike`
330
+
/** Feed item was seen by user */
331
+
export const INTERACTIONSEEN = `${id}#interactionSeen`
332
+
/** User clicked through to the feed item */
333
+
export const CLICKTHROUGHITEM = `${id}#clickthroughItem`
334
+
/** Declares the feed generator returns posts containing app.bsky.embed.video embeds. */
335
+
export const CONTENTMODEVIDEO = `${id}#contentModeVideo`
336
+
/** User quoted the feed item */
337
+
export const INTERACTIONQUOTE = `${id}#interactionQuote`
338
+
/** User replied to the feed item */
339
+
export const INTERACTIONREPLY = `${id}#interactionReply`
340
+
/** User shared the feed item */
341
+
export const INTERACTIONSHARE = `${id}#interactionShare`
342
+
343
+
export interface SkeletonFeedPost {
344
+
$type?: 'app.bsky.feed.defs#skeletonFeedPost'
345
+
post: string
346
+
reason?:
347
+
| $Typed<SkeletonReasonRepost>
348
+
| $Typed<SkeletonReasonPin>
349
+
| { $type: string }
350
+
/** Context that will be passed through to client and may be passed to feed generator back alongside interactions. */
351
+
feedContext?: string
352
+
}
353
+
354
+
const hashSkeletonFeedPost = 'skeletonFeedPost'
355
+
356
+
export function isSkeletonFeedPost<V>(v: V) {
357
+
return is$typed(v, id, hashSkeletonFeedPost)
358
+
}
359
+
360
+
export function validateSkeletonFeedPost<V>(v: V) {
361
+
return validate<SkeletonFeedPost & V>(v, id, hashSkeletonFeedPost)
362
+
}
363
+
364
+
/** User clicked through to the embedded content of the feed item */
365
+
export const CLICKTHROUGHEMBED = `${id}#clickthroughEmbed`
366
+
/** User reposted the feed item */
367
+
export const INTERACTIONREPOST = `${id}#interactionRepost`
368
+
369
+
export interface SkeletonReasonPin {
370
+
$type?: 'app.bsky.feed.defs#skeletonReasonPin'
371
+
}
372
+
373
+
const hashSkeletonReasonPin = 'skeletonReasonPin'
374
+
375
+
export function isSkeletonReasonPin<V>(v: V) {
376
+
return is$typed(v, id, hashSkeletonReasonPin)
377
+
}
378
+
379
+
export function validateSkeletonReasonPin<V>(v: V) {
380
+
return validate<SkeletonReasonPin & V>(v, id, hashSkeletonReasonPin)
381
+
}
382
+
383
+
/** User clicked through to the author of the feed item */
384
+
export const CLICKTHROUGHAUTHOR = `${id}#clickthroughAuthor`
385
+
/** User clicked through to the reposter of the feed item */
386
+
export const CLICKTHROUGHREPOSTER = `${id}#clickthroughReposter`
387
+
388
+
export interface GeneratorViewerState {
389
+
$type?: 'app.bsky.feed.defs#generatorViewerState'
390
+
like?: string
391
+
}
392
+
393
+
const hashGeneratorViewerState = 'generatorViewerState'
394
+
395
+
export function isGeneratorViewerState<V>(v: V) {
396
+
return is$typed(v, id, hashGeneratorViewerState)
397
+
}
398
+
399
+
export function validateGeneratorViewerState<V>(v: V) {
400
+
return validate<GeneratorViewerState & V>(v, id, hashGeneratorViewerState)
401
+
}
402
+
403
+
export interface SkeletonReasonRepost {
404
+
$type?: 'app.bsky.feed.defs#skeletonReasonRepost'
405
+
repost: string
406
+
}
407
+
408
+
const hashSkeletonReasonRepost = 'skeletonReasonRepost'
409
+
410
+
export function isSkeletonReasonRepost<V>(v: V) {
411
+
return is$typed(v, id, hashSkeletonReasonRepost)
412
+
}
413
+
414
+
export function validateSkeletonReasonRepost<V>(v: V) {
415
+
return validate<SkeletonReasonRepost & V>(v, id, hashSkeletonReasonRepost)
416
+
}
417
+
418
+
/** Declares the feed generator returns any types of posts. */
419
+
export const CONTENTMODEUNSPECIFIED = `${id}#contentModeUnspecified`
+49
packages/lexicon/src/types/app/bsky/feed/postgate.ts
+49
packages/lexicon/src/types/app/bsky/feed/postgate.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
10
+
const is$typed = _is$typed,
11
+
validate = _validate
12
+
const id = 'app.bsky.feed.postgate'
13
+
14
+
export interface Record {
15
+
$type: 'app.bsky.feed.postgate'
16
+
/** Reference (AT-URI) to the post record. */
17
+
post: string
18
+
createdAt: string
19
+
/** List of rules defining who can embed this post. If value is an empty array or is undefined, no particular rules apply and anyone can embed. */
20
+
embeddingRules?: ($Typed<DisableRule> | { $type: string })[]
21
+
/** List of AT-URIs embedding this post that the author has detached from. */
22
+
detachedEmbeddingUris?: string[]
23
+
[k: string]: unknown
24
+
}
25
+
26
+
const hashRecord = 'main'
27
+
28
+
export function isRecord<V>(v: V) {
29
+
return is$typed(v, id, hashRecord)
30
+
}
31
+
32
+
export function validateRecord<V>(v: V) {
33
+
return validate<Record & V>(v, id, hashRecord, true)
34
+
}
35
+
36
+
/** Disables embedding of this post. */
37
+
export interface DisableRule {
38
+
$type?: 'app.bsky.feed.postgate#disableRule'
39
+
}
40
+
41
+
const hashDisableRule = 'disableRule'
42
+
43
+
export function isDisableRule<V>(v: V) {
44
+
return is$typed(v, id, hashDisableRule)
45
+
}
46
+
47
+
export function validateDisableRule<V>(v: V) {
48
+
return validate<DisableRule & V>(v, id, hashDisableRule)
49
+
}
+101
packages/lexicon/src/types/app/bsky/feed/threadgate.ts
+101
packages/lexicon/src/types/app/bsky/feed/threadgate.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
10
+
const is$typed = _is$typed,
11
+
validate = _validate
12
+
const id = 'app.bsky.feed.threadgate'
13
+
14
+
export interface Record {
15
+
$type: 'app.bsky.feed.threadgate'
16
+
/** Reference (AT-URI) to the post record. */
17
+
post: string
18
+
/** List of rules defining who can reply to this post. If value is an empty array, no one can reply. If value is undefined, anyone can reply. */
19
+
allow?: (
20
+
| $Typed<MentionRule>
21
+
| $Typed<FollowerRule>
22
+
| $Typed<FollowingRule>
23
+
| $Typed<ListRule>
24
+
| { $type: string }
25
+
)[]
26
+
createdAt: string
27
+
/** List of hidden reply URIs. */
28
+
hiddenReplies?: string[]
29
+
[k: string]: unknown
30
+
}
31
+
32
+
const hashRecord = 'main'
33
+
34
+
export function isRecord<V>(v: V) {
35
+
return is$typed(v, id, hashRecord)
36
+
}
37
+
38
+
export function validateRecord<V>(v: V) {
39
+
return validate<Record & V>(v, id, hashRecord, true)
40
+
}
41
+
42
+
/** Allow replies from actors on a list. */
43
+
export interface ListRule {
44
+
$type?: 'app.bsky.feed.threadgate#listRule'
45
+
list: string
46
+
}
47
+
48
+
const hashListRule = 'listRule'
49
+
50
+
export function isListRule<V>(v: V) {
51
+
return is$typed(v, id, hashListRule)
52
+
}
53
+
54
+
export function validateListRule<V>(v: V) {
55
+
return validate<ListRule & V>(v, id, hashListRule)
56
+
}
57
+
58
+
/** Allow replies from actors mentioned in your post. */
59
+
export interface MentionRule {
60
+
$type?: 'app.bsky.feed.threadgate#mentionRule'
61
+
}
62
+
63
+
const hashMentionRule = 'mentionRule'
64
+
65
+
export function isMentionRule<V>(v: V) {
66
+
return is$typed(v, id, hashMentionRule)
67
+
}
68
+
69
+
export function validateMentionRule<V>(v: V) {
70
+
return validate<MentionRule & V>(v, id, hashMentionRule)
71
+
}
72
+
73
+
/** Allow replies from actors who follow you. */
74
+
export interface FollowerRule {
75
+
$type?: 'app.bsky.feed.threadgate#followerRule'
76
+
}
77
+
78
+
const hashFollowerRule = 'followerRule'
79
+
80
+
export function isFollowerRule<V>(v: V) {
81
+
return is$typed(v, id, hashFollowerRule)
82
+
}
83
+
84
+
export function validateFollowerRule<V>(v: V) {
85
+
return validate<FollowerRule & V>(v, id, hashFollowerRule)
86
+
}
87
+
88
+
/** Allow replies from actors you follow. */
89
+
export interface FollowingRule {
90
+
$type?: 'app.bsky.feed.threadgate#followingRule'
91
+
}
92
+
93
+
const hashFollowingRule = 'followingRule'
94
+
95
+
export function isFollowingRule<V>(v: V) {
96
+
return is$typed(v, id, hashFollowingRule)
97
+
}
98
+
99
+
export function validateFollowingRule<V>(v: V) {
100
+
return validate<FollowingRule & V>(v, id, hashFollowingRule)
101
+
}
+196
packages/lexicon/src/types/app/bsky/graph/defs.ts
+196
packages/lexicon/src/types/app/bsky/graph/defs.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js'
10
+
import type * as AppBskyActorDefs from '../actor/defs.js'
11
+
import type * as AppBskyFeedDefs from '../feed/defs.js'
12
+
import type * as AppBskyRichtextFacet from '../richtext/facet.js'
13
+
14
+
const is$typed = _is$typed,
15
+
validate = _validate
16
+
const id = 'app.bsky.graph.defs'
17
+
/** A list of actors to apply an aggregate moderation action (mute/block) on. */
18
+
export const MODLIST = `${id}#modlist`
19
+
20
+
export interface ListView {
21
+
$type?: 'app.bsky.graph.defs#listView'
22
+
cid: string
23
+
uri: string
24
+
name: string
25
+
avatar?: string
26
+
labels?: ComAtprotoLabelDefs.Label[]
27
+
viewer?: ListViewerState
28
+
creator: AppBskyActorDefs.ProfileView
29
+
purpose: ListPurpose
30
+
indexedAt: string
31
+
description?: string
32
+
listItemCount?: number
33
+
descriptionFacets?: AppBskyRichtextFacet.Main[]
34
+
}
35
+
36
+
const hashListView = 'listView'
37
+
38
+
export function isListView<V>(v: V) {
39
+
return is$typed(v, id, hashListView)
40
+
}
41
+
42
+
export function validateListView<V>(v: V) {
43
+
return validate<ListView & V>(v, id, hashListView)
44
+
}
45
+
46
+
/** A list of actors used for curation purposes such as list feeds or interaction gating. */
47
+
export const CURATELIST = `${id}#curatelist`
48
+
49
+
export type ListPurpose =
50
+
| 'app.bsky.graph.defs#modlist'
51
+
| 'app.bsky.graph.defs#curatelist'
52
+
| 'app.bsky.graph.defs#referencelist'
53
+
| (string & {})
54
+
55
+
export interface ListItemView {
56
+
$type?: 'app.bsky.graph.defs#listItemView'
57
+
uri: string
58
+
subject: AppBskyActorDefs.ProfileView
59
+
}
60
+
61
+
const hashListItemView = 'listItemView'
62
+
63
+
export function isListItemView<V>(v: V) {
64
+
return is$typed(v, id, hashListItemView)
65
+
}
66
+
67
+
export function validateListItemView<V>(v: V) {
68
+
return validate<ListItemView & V>(v, id, hashListItemView)
69
+
}
70
+
71
+
/** lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) */
72
+
export interface Relationship {
73
+
$type?: 'app.bsky.graph.defs#relationship'
74
+
did: string
75
+
/** if the actor follows this DID, this is the AT-URI of the follow record */
76
+
following?: string
77
+
/** if the actor is followed by this DID, contains the AT-URI of the follow record */
78
+
followedBy?: string
79
+
}
80
+
81
+
const hashRelationship = 'relationship'
82
+
83
+
export function isRelationship<V>(v: V) {
84
+
return is$typed(v, id, hashRelationship)
85
+
}
86
+
87
+
export function validateRelationship<V>(v: V) {
88
+
return validate<Relationship & V>(v, id, hashRelationship)
89
+
}
90
+
91
+
export interface ListViewBasic {
92
+
$type?: 'app.bsky.graph.defs#listViewBasic'
93
+
cid: string
94
+
uri: string
95
+
name: string
96
+
avatar?: string
97
+
labels?: ComAtprotoLabelDefs.Label[]
98
+
viewer?: ListViewerState
99
+
purpose: ListPurpose
100
+
indexedAt?: string
101
+
listItemCount?: number
102
+
}
103
+
104
+
const hashListViewBasic = 'listViewBasic'
105
+
106
+
export function isListViewBasic<V>(v: V) {
107
+
return is$typed(v, id, hashListViewBasic)
108
+
}
109
+
110
+
export function validateListViewBasic<V>(v: V) {
111
+
return validate<ListViewBasic & V>(v, id, hashListViewBasic)
112
+
}
113
+
114
+
/** indicates that a handle or DID could not be resolved */
115
+
export interface NotFoundActor {
116
+
$type?: 'app.bsky.graph.defs#notFoundActor'
117
+
actor: string
118
+
notFound: true
119
+
}
120
+
121
+
const hashNotFoundActor = 'notFoundActor'
122
+
123
+
export function isNotFoundActor<V>(v: V) {
124
+
return is$typed(v, id, hashNotFoundActor)
125
+
}
126
+
127
+
export function validateNotFoundActor<V>(v: V) {
128
+
return validate<NotFoundActor & V>(v, id, hashNotFoundActor)
129
+
}
130
+
131
+
/** A list of actors used for only for reference purposes such as within a starter pack. */
132
+
export const REFERENCELIST = `${id}#referencelist`
133
+
134
+
export interface ListViewerState {
135
+
$type?: 'app.bsky.graph.defs#listViewerState'
136
+
muted?: boolean
137
+
blocked?: string
138
+
}
139
+
140
+
const hashListViewerState = 'listViewerState'
141
+
142
+
export function isListViewerState<V>(v: V) {
143
+
return is$typed(v, id, hashListViewerState)
144
+
}
145
+
146
+
export function validateListViewerState<V>(v: V) {
147
+
return validate<ListViewerState & V>(v, id, hashListViewerState)
148
+
}
149
+
150
+
export interface StarterPackView {
151
+
$type?: 'app.bsky.graph.defs#starterPackView'
152
+
cid: string
153
+
uri: string
154
+
list?: ListViewBasic
155
+
feeds?: AppBskyFeedDefs.GeneratorView[]
156
+
labels?: ComAtprotoLabelDefs.Label[]
157
+
record: { [_ in string]: unknown }
158
+
creator: AppBskyActorDefs.ProfileViewBasic
159
+
indexedAt: string
160
+
joinedWeekCount?: number
161
+
listItemsSample?: ListItemView[]
162
+
joinedAllTimeCount?: number
163
+
}
164
+
165
+
const hashStarterPackView = 'starterPackView'
166
+
167
+
export function isStarterPackView<V>(v: V) {
168
+
return is$typed(v, id, hashStarterPackView)
169
+
}
170
+
171
+
export function validateStarterPackView<V>(v: V) {
172
+
return validate<StarterPackView & V>(v, id, hashStarterPackView)
173
+
}
174
+
175
+
export interface StarterPackViewBasic {
176
+
$type?: 'app.bsky.graph.defs#starterPackViewBasic'
177
+
cid: string
178
+
uri: string
179
+
labels?: ComAtprotoLabelDefs.Label[]
180
+
record: { [_ in string]: unknown }
181
+
creator: AppBskyActorDefs.ProfileViewBasic
182
+
indexedAt: string
183
+
listItemCount?: number
184
+
joinedWeekCount?: number
185
+
joinedAllTimeCount?: number
186
+
}
187
+
188
+
const hashStarterPackViewBasic = 'starterPackViewBasic'
189
+
190
+
export function isStarterPackViewBasic<V>(v: V) {
191
+
return is$typed(v, id, hashStarterPackViewBasic)
192
+
}
193
+
194
+
export function validateStarterPackViewBasic<V>(v: V) {
195
+
return validate<StarterPackViewBasic & V>(v, id, hashStarterPackViewBasic)
196
+
}
+90
packages/lexicon/src/types/app/bsky/labeler/defs.ts
+90
packages/lexicon/src/types/app/bsky/labeler/defs.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js'
10
+
import type * as AppBskyActorDefs from '../actor/defs.js'
11
+
12
+
const is$typed = _is$typed,
13
+
validate = _validate
14
+
const id = 'app.bsky.labeler.defs'
15
+
16
+
export interface LabelerView {
17
+
$type?: 'app.bsky.labeler.defs#labelerView'
18
+
cid: string
19
+
uri: string
20
+
labels?: ComAtprotoLabelDefs.Label[]
21
+
viewer?: LabelerViewerState
22
+
creator: AppBskyActorDefs.ProfileView
23
+
indexedAt: string
24
+
likeCount?: number
25
+
}
26
+
27
+
const hashLabelerView = 'labelerView'
28
+
29
+
export function isLabelerView<V>(v: V) {
30
+
return is$typed(v, id, hashLabelerView)
31
+
}
32
+
33
+
export function validateLabelerView<V>(v: V) {
34
+
return validate<LabelerView & V>(v, id, hashLabelerView)
35
+
}
36
+
37
+
export interface LabelerPolicies {
38
+
$type?: 'app.bsky.labeler.defs#labelerPolicies'
39
+
/** The label values which this labeler publishes. May include global or custom labels. */
40
+
labelValues: ComAtprotoLabelDefs.LabelValue[]
41
+
/** Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler. */
42
+
labelValueDefinitions?: ComAtprotoLabelDefs.LabelValueDefinition[]
43
+
}
44
+
45
+
const hashLabelerPolicies = 'labelerPolicies'
46
+
47
+
export function isLabelerPolicies<V>(v: V) {
48
+
return is$typed(v, id, hashLabelerPolicies)
49
+
}
50
+
51
+
export function validateLabelerPolicies<V>(v: V) {
52
+
return validate<LabelerPolicies & V>(v, id, hashLabelerPolicies)
53
+
}
54
+
55
+
export interface LabelerViewerState {
56
+
$type?: 'app.bsky.labeler.defs#labelerViewerState'
57
+
like?: string
58
+
}
59
+
60
+
const hashLabelerViewerState = 'labelerViewerState'
61
+
62
+
export function isLabelerViewerState<V>(v: V) {
63
+
return is$typed(v, id, hashLabelerViewerState)
64
+
}
65
+
66
+
export function validateLabelerViewerState<V>(v: V) {
67
+
return validate<LabelerViewerState & V>(v, id, hashLabelerViewerState)
68
+
}
69
+
70
+
export interface LabelerViewDetailed {
71
+
$type?: 'app.bsky.labeler.defs#labelerViewDetailed'
72
+
cid: string
73
+
uri: string
74
+
labels?: ComAtprotoLabelDefs.Label[]
75
+
viewer?: LabelerViewerState
76
+
creator: AppBskyActorDefs.ProfileView
77
+
policies: LabelerPolicies
78
+
indexedAt: string
79
+
likeCount?: number
80
+
}
81
+
82
+
const hashLabelerViewDetailed = 'labelerViewDetailed'
83
+
84
+
export function isLabelerViewDetailed<V>(v: V) {
85
+
return is$typed(v, id, hashLabelerViewDetailed)
86
+
}
87
+
88
+
export function validateLabelerViewDetailed<V>(v: V) {
89
+
return validate<LabelerViewDetailed & V>(v, id, hashLabelerViewDetailed)
90
+
}
+94
packages/lexicon/src/types/app/bsky/richtext/facet.ts
+94
packages/lexicon/src/types/app/bsky/richtext/facet.ts
···
···
1
+
/**
2
+
* GENERATED CODE - DO NOT MODIFY
3
+
*/
4
+
import { BlobRef, ValidationResult } from '@atproto/lexicon'
5
+
import { CID } from 'multiformats/cid'
6
+
7
+
import { validate as _validate } from '../../../../lexicons'
8
+
import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
9
+
10
+
const is$typed = _is$typed,
11
+
validate = _validate
12
+
const id = 'app.bsky.richtext.facet'
13
+
14
+
/** Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags'). */
15
+
export interface Tag {
16
+
$type?: 'app.bsky.richtext.facet#tag'
17
+
tag: string
18
+
}
19
+
20
+
const hashTag = 'tag'
21
+
22
+
export function isTag<V>(v: V) {
23
+
return is$typed(v, id, hashTag)
24
+
}
25
+
26
+
export function validateTag<V>(v: V) {
27
+
return validate<Tag & V>(v, id, hashTag)
28
+
}
29
+
30
+
/** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. */
31
+
export interface Link {
32
+
$type?: 'app.bsky.richtext.facet#link'
33
+
uri: string
34
+
}
35
+
36
+
const hashLink = 'link'
37
+
38
+
export function isLink<V>(v: V) {
39
+
return is$typed(v, id, hashLink)
40
+
}
41
+
42
+
export function validateLink<V>(v: V) {
43
+
return validate<Link & V>(v, id, hashLink)
44
+
}
45
+
46
+
/** Annotation of a sub-string within rich text. */
47
+
export interface Main {
48
+
$type?: 'app.bsky.richtext.facet'
49
+
index: ByteSlice
50
+
features: ($Typed<Mention> | $Typed<Link> | $Typed<Tag> | { $type: string })[]
51
+
}
52
+
53
+
const hashMain = 'main'
54
+
55
+
export function isMain<V>(v: V) {
56
+
return is$typed(v, id, hashMain)
57
+
}
58
+
59
+
export function validateMain<V>(v: V) {
60
+
return validate<Main & V>(v, id, hashMain)
61
+
}
62
+
63
+
/** Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID. */
64
+
export interface Mention {
65
+
$type?: 'app.bsky.richtext.facet#mention'
66
+
did: string
67
+
}
68
+
69
+
const hashMention = 'mention'
70
+
71
+
export function isMention<V>(v: V) {
72
+
return is$typed(v, id, hashMention)
73
+
}
74
+
75
+
export function validateMention<V>(v: V) {
76
+
return validate<Mention & V>(v, id, hashMention)
77
+
}
78
+
79
+
/** Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets. */
80
+
export interface ByteSlice {
81
+
$type?: 'app.bsky.richtext.facet#byteSlice'
82
+
byteEnd: number
83
+
byteStart: number
84
+
}
85
+
86
+
const hashByteSlice = 'byteSlice'
87
+
88
+
export function isByteSlice<V>(v: V) {
89
+
return is$typed(v, id, hashByteSlice)
90
+
}
91
+
92
+
export function validateByteSlice<V>(v: V) {
93
+
return validate<ByteSlice & V>(v, id, hashByteSlice)
94
+
}
+47
-47
packages/lexicon/src/types/com/atproto/label/defs.ts
+47
-47
packages/lexicon/src/types/com/atproto/label/defs.ts
···
14
/** Metadata tag on an atproto resource (eg, repo or record). */
15
export interface Label {
16
$type?: 'com.atproto.label.defs#label'
17
-
/** The AT Protocol version of the label object. */
18
-
ver?: number
19
-
/** DID of the actor who created this label. */
20
-
src: string
21
-
/** AT URI of the record, repository (account), or other resource that this label applies to. */
22
-
uri: string
23
/** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */
24
cid?: string
25
-
/** The short string name of the value or type of this label. */
26
-
val: string
27
-
/** If true, this is a negation label, overwriting a previous label. */
28
-
neg?: boolean
29
/** Timestamp when this label was created. */
30
cts: string
31
/** Timestamp at which this label expires (no longer applies). */
32
exp?: string
33
/** Signature of dag-cbor encoded label. */
34
sig?: Uint8Array
35
}
36
37
const hashLabel = 'label'
···
44
return validate<Label & V>(v, id, hashLabel)
45
}
46
47
-
/** Metadata tags on an atproto record, published by the author within the record. */
48
-
export interface SelfLabels {
49
-
$type?: 'com.atproto.label.defs#selfLabels'
50
-
values: SelfLabel[]
51
-
}
52
-
53
-
const hashSelfLabels = 'selfLabels'
54
-
55
-
export function isSelfLabels<V>(v: V) {
56
-
return is$typed(v, id, hashSelfLabels)
57
-
}
58
-
59
-
export function validateSelfLabels<V>(v: V) {
60
-
return validate<SelfLabels & V>(v, id, hashSelfLabels)
61
-
}
62
-
63
/** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */
64
export interface SelfLabel {
65
$type?: 'com.atproto.label.defs#selfLabel'
···
77
return validate<SelfLabel & V>(v, id, hashSelfLabel)
78
}
79
80
/** Declares a label value and its expected interpretations and behaviors. */
81
export interface LabelValueDefinition {
82
$type?: 'com.atproto.label.defs#labelValueDefinition'
83
-
/** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */
84
-
identifier: string
85
-
/** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */
86
-
severity: 'inform' | 'alert' | 'none' | (string & {})
87
/** What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing. */
88
blurs: 'content' | 'media' | 'none' | (string & {})
89
-
/** The default setting for this label. */
90
-
defaultSetting: 'ignore' | 'warn' | 'hide' | (string & {})
91
/** Does the user need to have adult content enabled in order to configure this label? */
92
adultOnly?: boolean
93
-
locales: LabelValueDefinitionStrings[]
94
}
95
96
const hashLabelValueDefinition = 'labelValueDefinition'
···
127
hashLabelValueDefinitionStrings,
128
)
129
}
130
-
131
-
export type LabelValue =
132
-
| '!hide'
133
-
| '!no-promote'
134
-
| '!warn'
135
-
| '!no-unauthenticated'
136
-
| 'dmca-violation'
137
-
| 'doxxing'
138
-
| 'porn'
139
-
| 'sexual'
140
-
| 'nudity'
141
-
| 'nsfl'
142
-
| 'gore'
143
-
| (string & {})
···
14
/** Metadata tag on an atproto resource (eg, repo or record). */
15
export interface Label {
16
$type?: 'com.atproto.label.defs#label'
17
/** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */
18
cid?: string
19
/** Timestamp when this label was created. */
20
cts: string
21
/** Timestamp at which this label expires (no longer applies). */
22
exp?: string
23
+
/** If true, this is a negation label, overwriting a previous label. */
24
+
neg?: boolean
25
/** Signature of dag-cbor encoded label. */
26
sig?: Uint8Array
27
+
/** DID of the actor who created this label. */
28
+
src: string
29
+
/** AT URI of the record, repository (account), or other resource that this label applies to. */
30
+
uri: string
31
+
/** The short string name of the value or type of this label. */
32
+
val: string
33
+
/** The AT Protocol version of the label object. */
34
+
ver?: number
35
}
36
37
const hashLabel = 'label'
···
44
return validate<Label & V>(v, id, hashLabel)
45
}
46
47
/** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */
48
export interface SelfLabel {
49
$type?: 'com.atproto.label.defs#selfLabel'
···
61
return validate<SelfLabel & V>(v, id, hashSelfLabel)
62
}
63
64
+
export type LabelValue =
65
+
| '!hide'
66
+
| '!no-promote'
67
+
| '!warn'
68
+
| '!no-unauthenticated'
69
+
| 'dmca-violation'
70
+
| 'doxxing'
71
+
| 'porn'
72
+
| 'sexual'
73
+
| 'nudity'
74
+
| 'nsfl'
75
+
| 'gore'
76
+
| (string & {})
77
+
78
+
/** Metadata tags on an atproto record, published by the author within the record. */
79
+
export interface SelfLabels {
80
+
$type?: 'com.atproto.label.defs#selfLabels'
81
+
values: SelfLabel[]
82
+
}
83
+
84
+
const hashSelfLabels = 'selfLabels'
85
+
86
+
export function isSelfLabels<V>(v: V) {
87
+
return is$typed(v, id, hashSelfLabels)
88
+
}
89
+
90
+
export function validateSelfLabels<V>(v: V) {
91
+
return validate<SelfLabels & V>(v, id, hashSelfLabels)
92
+
}
93
+
94
/** Declares a label value and its expected interpretations and behaviors. */
95
export interface LabelValueDefinition {
96
$type?: 'com.atproto.label.defs#labelValueDefinition'
97
/** What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing. */
98
blurs: 'content' | 'media' | 'none' | (string & {})
99
+
locales: LabelValueDefinitionStrings[]
100
+
/** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */
101
+
severity: 'inform' | 'alert' | 'none' | (string & {})
102
/** Does the user need to have adult content enabled in order to configure this label? */
103
adultOnly?: boolean
104
+
/** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */
105
+
identifier: string
106
+
/** The default setting for this label. */
107
+
defaultSetting: 'ignore' | 'warn' | 'hide' | (string & {})
108
}
109
110
const hashLabelValueDefinition = 'labelValueDefinition'
···
141
hashLabelValueDefinitionStrings,
142
)
143
}
+36
-36
packages/lexicon/src/types/com/atproto/repo/applyWrites.ts
+36
-36
packages/lexicon/src/types/com/atproto/repo/applyWrites.ts
···
18
export interface InputSchema {
19
/** The handle or DID of the repo (aka, current account). */
20
repo: string
21
/** Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons. */
22
validate?: boolean
23
-
writes: ($Typed<Create> | $Typed<Update> | $Typed<Delete>)[]
24
/** If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations. */
25
swapCommit?: string
26
}
···
64
/** Operation which creates a new record. */
65
export interface Create {
66
$type?: 'com.atproto.repo.applyWrites#create'
67
-
collection: string
68
/** NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility. */
69
rkey?: string
70
value: { [_ in string]: unknown }
71
}
72
73
const hashCreate = 'create'
···
80
return validate<Create & V>(v, id, hashCreate)
81
}
82
83
/** Operation which updates an existing record. */
84
export interface Update {
85
$type?: 'com.atproto.repo.applyWrites#update'
86
-
collection: string
87
rkey: string
88
value: { [_ in string]: unknown }
89
}
90
91
const hashUpdate = 'update'
···
98
return validate<Update & V>(v, id, hashUpdate)
99
}
100
101
-
/** Operation which deletes an existing record. */
102
-
export interface Delete {
103
-
$type?: 'com.atproto.repo.applyWrites#delete'
104
-
collection: string
105
-
rkey: string
106
-
}
107
-
108
-
const hashDelete = 'delete'
109
-
110
-
export function isDelete<V>(v: V) {
111
-
return is$typed(v, id, hashDelete)
112
-
}
113
-
114
-
export function validateDelete<V>(v: V) {
115
-
return validate<Delete & V>(v, id, hashDelete)
116
-
}
117
-
118
export interface CreateResult {
119
$type?: 'com.atproto.repo.applyWrites#createResult'
120
uri: string
121
-
cid: string
122
validationStatus?: 'valid' | 'unknown' | (string & {})
123
}
124
···
132
return validate<CreateResult & V>(v, id, hashCreateResult)
133
}
134
135
export interface UpdateResult {
136
$type?: 'com.atproto.repo.applyWrites#updateResult'
137
-
uri: string
138
cid: string
139
validationStatus?: 'valid' | 'unknown' | (string & {})
140
}
141
···
148
export function validateUpdateResult<V>(v: V) {
149
return validate<UpdateResult & V>(v, id, hashUpdateResult)
150
}
151
-
152
-
export interface DeleteResult {
153
-
$type?: 'com.atproto.repo.applyWrites#deleteResult'
154
-
}
155
-
156
-
const hashDeleteResult = 'deleteResult'
157
-
158
-
export function isDeleteResult<V>(v: V) {
159
-
return is$typed(v, id, hashDeleteResult)
160
-
}
161
-
162
-
export function validateDeleteResult<V>(v: V) {
163
-
return validate<DeleteResult & V>(v, id, hashDeleteResult)
164
-
}
···
18
export interface InputSchema {
19
/** The handle or DID of the repo (aka, current account). */
20
repo: string
21
+
writes: ($Typed<Create> | $Typed<Update> | $Typed<Delete>)[]
22
/** Can be set to 'false' to skip Lexicon schema validation of record data across all operations, 'true' to require it, or leave unset to validate only for known Lexicons. */
23
validate?: boolean
24
/** If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations. */
25
swapCommit?: string
26
}
···
64
/** Operation which creates a new record. */
65
export interface Create {
66
$type?: 'com.atproto.repo.applyWrites#create'
67
/** NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility. */
68
rkey?: string
69
value: { [_ in string]: unknown }
70
+
collection: string
71
}
72
73
const hashCreate = 'create'
···
80
return validate<Create & V>(v, id, hashCreate)
81
}
82
83
+
/** Operation which deletes an existing record. */
84
+
export interface Delete {
85
+
$type?: 'com.atproto.repo.applyWrites#delete'
86
+
rkey: string
87
+
collection: string
88
+
}
89
+
90
+
const hashDelete = 'delete'
91
+
92
+
export function isDelete<V>(v: V) {
93
+
return is$typed(v, id, hashDelete)
94
+
}
95
+
96
+
export function validateDelete<V>(v: V) {
97
+
return validate<Delete & V>(v, id, hashDelete)
98
+
}
99
+
100
/** Operation which updates an existing record. */
101
export interface Update {
102
$type?: 'com.atproto.repo.applyWrites#update'
103
rkey: string
104
value: { [_ in string]: unknown }
105
+
collection: string
106
}
107
108
const hashUpdate = 'update'
···
115
return validate<Update & V>(v, id, hashUpdate)
116
}
117
118
export interface CreateResult {
119
$type?: 'com.atproto.repo.applyWrites#createResult'
120
+
cid: string
121
uri: string
122
validationStatus?: 'valid' | 'unknown' | (string & {})
123
}
124
···
132
return validate<CreateResult & V>(v, id, hashCreateResult)
133
}
134
135
+
export interface DeleteResult {
136
+
$type?: 'com.atproto.repo.applyWrites#deleteResult'
137
+
}
138
+
139
+
const hashDeleteResult = 'deleteResult'
140
+
141
+
export function isDeleteResult<V>(v: V) {
142
+
return is$typed(v, id, hashDeleteResult)
143
+
}
144
+
145
+
export function validateDeleteResult<V>(v: V) {
146
+
return validate<DeleteResult & V>(v, id, hashDeleteResult)
147
+
}
148
+
149
export interface UpdateResult {
150
$type?: 'com.atproto.repo.applyWrites#updateResult'
151
cid: string
152
+
uri: string
153
validationStatus?: 'valid' | 'unknown' | (string & {})
154
}
155
···
162
export function validateUpdateResult<V>(v: V) {
163
return validate<UpdateResult & V>(v, id, hashUpdateResult)
164
}
+5
-5
packages/lexicon/src/types/com/atproto/repo/createRecord.ts
+5
-5
packages/lexicon/src/types/com/atproto/repo/createRecord.ts
···
18
export interface InputSchema {
19
/** The handle or DID of the repo (aka, current account). */
20
repo: string
21
-
/** The NSID of the record collection. */
22
-
collection: string
23
/** The Record Key. */
24
rkey?: string
25
-
/** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */
26
-
validate?: boolean
27
/** The record itself. Must contain a $type field. */
28
record: { [_ in string]: unknown }
29
/** Compare and swap with the previous commit by CID. */
30
swapCommit?: string
31
}
32
33
export interface OutputSchema {
34
-
uri: string
35
cid: string
36
commit?: ComAtprotoRepoDefs.CommitMeta
37
validationStatus?: 'valid' | 'unknown' | (string & {})
38
}
···
18
export interface InputSchema {
19
/** The handle or DID of the repo (aka, current account). */
20
repo: string
21
/** The Record Key. */
22
rkey?: string
23
/** The record itself. Must contain a $type field. */
24
record: { [_ in string]: unknown }
25
+
/** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */
26
+
validate?: boolean
27
+
/** The NSID of the record collection. */
28
+
collection: string
29
/** Compare and swap with the previous commit by CID. */
30
swapCommit?: string
31
}
32
33
export interface OutputSchema {
34
cid: string
35
+
uri: string
36
commit?: ComAtprotoRepoDefs.CommitMeta
37
validationStatus?: 'valid' | 'unknown' | (string & {})
38
}
+4
-4
packages/lexicon/src/types/com/atproto/repo/deleteRecord.ts
+4
-4
packages/lexicon/src/types/com/atproto/repo/deleteRecord.ts
···
18
export interface InputSchema {
19
/** The handle or DID of the repo (aka, current account). */
20
repo: string
21
-
/** The NSID of the record collection. */
22
-
collection: string
23
/** The Record Key. */
24
rkey: string
25
-
/** Compare and swap with the previous record by CID. */
26
-
swapRecord?: string
27
/** Compare and swap with the previous commit by CID. */
28
swapCommit?: string
29
}
30
31
export interface OutputSchema {
···
18
export interface InputSchema {
19
/** The handle or DID of the repo (aka, current account). */
20
repo: string
21
/** The Record Key. */
22
rkey: string
23
+
/** The NSID of the record collection. */
24
+
collection: string
25
/** Compare and swap with the previous commit by CID. */
26
swapCommit?: string
27
+
/** Compare and swap with the previous record by CID. */
28
+
swapRecord?: string
29
}
30
31
export interface OutputSchema {
+1
-1
packages/lexicon/src/types/com/atproto/repo/describeRepo.ts
+1
-1
packages/lexicon/src/types/com/atproto/repo/describeRepo.ts
···
20
export type InputSchema = undefined
21
22
export interface OutputSchema {
23
-
handle: string
24
did: string
25
/** The complete DID document for this account. */
26
didDoc: { [_ in string]: unknown }
27
/** List of all the collections (NSIDs) for which this repo contains at least one record. */
28
collections: string[]
29
/** Indicates if handle is currently valid (resolves bi-directionally) */
···
20
export type InputSchema = undefined
21
22
export interface OutputSchema {
23
did: string
24
/** The complete DID document for this account. */
25
didDoc: { [_ in string]: unknown }
26
+
handle: string
27
/** List of all the collections (NSIDs) for which this repo contains at least one record. */
28
collections: string[]
29
/** Indicates if handle is currently valid (resolves bi-directionally) */
+5
-5
packages/lexicon/src/types/com/atproto/repo/getRecord.ts
+5
-5
packages/lexicon/src/types/com/atproto/repo/getRecord.ts
···
13
const id = 'com.atproto.repo.getRecord'
14
15
export interface QueryParams {
16
/** The handle or DID of the repo. */
17
repo: string
18
-
/** The NSID of the record collection. */
19
-
collection: string
20
/** The Record Key. */
21
rkey: string
22
-
/** The CID of the version of the record. If not specified, then return the most recent version. */
23
-
cid?: string
24
}
25
26
export type InputSchema = undefined
27
28
export interface OutputSchema {
29
-
uri: string
30
cid?: string
31
value: { [_ in string]: unknown }
32
}
33
···
13
const id = 'com.atproto.repo.getRecord'
14
15
export interface QueryParams {
16
+
/** The CID of the version of the record. If not specified, then return the most recent version. */
17
+
cid?: string
18
/** The handle or DID of the repo. */
19
repo: string
20
/** The Record Key. */
21
rkey: string
22
+
/** The NSID of the record collection. */
23
+
collection: string
24
}
25
26
export type InputSchema = undefined
27
28
export interface OutputSchema {
29
cid?: string
30
+
uri: string
31
value: { [_ in string]: unknown }
32
}
33
+1
-1
packages/lexicon/src/types/com/atproto/repo/listMissingBlobs.ts
+1
-1
packages/lexicon/src/types/com/atproto/repo/listMissingBlobs.ts
+3
-7
packages/lexicon/src/types/com/atproto/repo/listRecords.ts
+3
-7
packages/lexicon/src/types/com/atproto/repo/listRecords.ts
···
15
export interface QueryParams {
16
/** The handle or DID of the repo. */
17
repo: string
18
-
/** The NSID of the record type. */
19
-
collection: string
20
/** The number of records to return. */
21
limit?: number
22
cursor?: string
23
-
/** DEPRECATED: The lowest sort-ordered rkey to start from (exclusive) */
24
-
rkeyStart?: string
25
-
/** DEPRECATED: The highest sort-ordered rkey to stop at (exclusive) */
26
-
rkeyEnd?: string
27
/** Flag to reverse the order of the returned records. */
28
reverse?: boolean
29
}
30
31
export type InputSchema = undefined
···
52
53
export interface Record {
54
$type?: 'com.atproto.repo.listRecords#record'
55
-
uri: string
56
cid: string
57
value: { [_ in string]: unknown }
58
}
59
···
15
export interface QueryParams {
16
/** The handle or DID of the repo. */
17
repo: string
18
/** The number of records to return. */
19
limit?: number
20
cursor?: string
21
/** Flag to reverse the order of the returned records. */
22
reverse?: boolean
23
+
/** The NSID of the record type. */
24
+
collection: string
25
}
26
27
export type InputSchema = undefined
···
48
49
export interface Record {
50
$type?: 'com.atproto.repo.listRecords#record'
51
cid: string
52
+
uri: string
53
value: { [_ in string]: unknown }
54
}
55
+7
-7
packages/lexicon/src/types/com/atproto/repo/putRecord.ts
+7
-7
packages/lexicon/src/types/com/atproto/repo/putRecord.ts
···
18
export interface InputSchema {
19
/** The handle or DID of the repo (aka, current account). */
20
repo: string
21
-
/** The NSID of the record collection. */
22
-
collection: string
23
/** The Record Key. */
24
rkey: string
25
-
/** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */
26
-
validate?: boolean
27
/** The record to write. */
28
record: { [_ in string]: unknown }
29
-
/** Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation */
30
-
swapRecord?: string | null
31
/** Compare and swap with the previous commit by CID. */
32
swapCommit?: string
33
}
34
35
export interface OutputSchema {
36
-
uri: string
37
cid: string
38
commit?: ComAtprotoRepoDefs.CommitMeta
39
validationStatus?: 'valid' | 'unknown' | (string & {})
40
}
···
18
export interface InputSchema {
19
/** The handle or DID of the repo (aka, current account). */
20
repo: string
21
/** The Record Key. */
22
rkey: string
23
/** The record to write. */
24
record: { [_ in string]: unknown }
25
+
/** Can be set to 'false' to skip Lexicon schema validation of record data, 'true' to require it, or leave unset to validate only for known Lexicons. */
26
+
validate?: boolean
27
+
/** The NSID of the record collection. */
28
+
collection: string
29
/** Compare and swap with the previous commit by CID. */
30
swapCommit?: string
31
+
/** Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation */
32
+
swapRecord?: string | null
33
}
34
35
export interface OutputSchema {
36
cid: string
37
+
uri: string
38
commit?: ComAtprotoRepoDefs.CommitMeta
39
validationStatus?: 'valid' | 'unknown' | (string & {})
40
}
+1
-1
packages/lexicon/src/types/com/atproto/repo/strongRef.ts
+1
-1
packages/lexicon/src/types/com/atproto/repo/strongRef.ts
+82
pnpm-lock.yaml
+82
pnpm-lock.yaml
···
7
importers:
8
9
.:
10
devDependencies:
11
'@atproto/lex-cli':
12
specifier: ^0.6.1
···
735
736
'@jridgewell/trace-mapping@0.3.9':
737
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
738
739
'@noble/curves@1.8.1':
740
resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==}
···
2473
source-map@0.8.0-beta.0:
2474
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
2475
engines: {node: '>= 8'}
2476
2477
split2@4.2.0:
2478
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
···
3411
dependencies:
3412
'@jridgewell/resolve-uri': 3.1.2
3413
'@jridgewell/sourcemap-codec': 1.5.0
3414
3415
'@noble/curves@1.8.1':
3416
dependencies:
···
7
importers:
8
9
.:
10
+
dependencies:
11
+
'@lpm/cli':
12
+
specifier: jsr:0.3.0-rc.1
13
+
version: '@jsr/lpm__cli@0.3.0-rc.1'
14
devDependencies:
15
'@atproto/lex-cli':
16
specifier: ^0.6.1
···
739
740
'@jridgewell/trace-mapping@0.3.9':
741
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
742
+
743
+
'@jsr/cliffy__command@1.0.0-rc.7':
744
+
resolution: {integrity: sha512-cLmigvj0IJxMoj0FI/gAanoJNyHYW/SeaDdJUCTmu/10l4og4lrHUwbpkKISnnj2pimFQb4zVJ2hnlFrYEjjQw==, tarball: https://npm.jsr.io/~/11/@jsr/cliffy__command/1.0.0-rc.7.tgz}
745
+
746
+
'@jsr/cliffy__flags@1.0.0-rc.7':
747
+
resolution: {integrity: sha512-D0EsYP7QrzZBiap/qri//AixzFqBKPxzui99Z/Yz77DxcNthd6kafhOVr9xIBuORICzeydjNY2hVk5J7fV0iRQ==, tarball: https://npm.jsr.io/~/11/@jsr/cliffy__flags/1.0.0-rc.7.tgz}
748
+
749
+
'@jsr/cliffy__internal@1.0.0-rc.7':
750
+
resolution: {integrity: sha512-ncrAaxh4UUeV7RDvkhyGQuxU5JtSZVz38Db97mms+iNIwogM4qn9P8kNR1V6avMo+TjGMD5Z1DMkJGO9o6aHyw==, tarball: https://npm.jsr.io/~/11/@jsr/cliffy__internal/1.0.0-rc.7.tgz}
751
+
752
+
'@jsr/cliffy__table@1.0.0-rc.7':
753
+
resolution: {integrity: sha512-EWM/Jfrit8W1qxo+0c/bRqaod8jxMotOiY08Nlx2/FVMK52hJoAtzC0RhpdyXzxVuBpqIdv6UeDDbTAIRiYGug==, tarball: https://npm.jsr.io/~/11/@jsr/cliffy__table/1.0.0-rc.7.tgz}
754
+
755
+
'@jsr/lpm__cli@0.3.0-rc.1':
756
+
resolution: {integrity: sha512-KDrXMXAtcBkx6OneTUTbL9bfLxrNRnUvi6j7hJLrhby7dLjip3BCYFc6NQOgbYQELnT//a2pc+xeRY5b+l5KoA==, tarball: https://npm.jsr.io/~/11/@jsr/lpm__cli/0.3.0-rc.1.tgz}
757
+
758
+
'@jsr/lpm__core@0.3.1-rc.1':
759
+
resolution: {integrity: sha512-VHuP2IhoBQIeptRYhj2EQwcv2NDwqry8ZeKEla+SSMyKLCa0cnqdorkQgvQa86K9e6s5Znk7aEDeyAdNczTUZQ==, tarball: https://npm.jsr.io/~/11/@jsr/lpm__core/0.3.1-rc.1.tgz}
760
+
761
+
'@jsr/std__fmt@1.0.8':
762
+
resolution: {integrity: sha512-miZHzj9OgjuajrcMKzpqNVwFb9O71UHZzV/FHVq0E0Uwmv/1JqXgmXAoBNPrn+MP0fHT3mMgaZ6XvQO7dam67Q==, tarball: https://npm.jsr.io/~/11/@jsr/std__fmt/1.0.8.tgz}
763
+
764
+
'@jsr/std__regexp@1.0.1':
765
+
resolution: {integrity: sha512-AnGeP//DHpPvhCWjI5dR4o013JhCQioD8yMF8drD7PWb0X4kvmO35hbZi+NZhfSolz4Ts2cpPzJY+DUpi2XE9A==, tarball: https://npm.jsr.io/~/11/@jsr/std__regexp/1.0.1.tgz}
766
+
767
+
'@jsr/std__text@1.0.16':
768
+
resolution: {integrity: sha512-UawOIn+Vu0BBusfOpToMXHISa/z8vDUKxXntQGVM5w6e9W1XkFzylnbc0cWWa9f0dESlxDyjvReHzPNM86hYlA==, tarball: https://npm.jsr.io/~/11/@jsr/std__text/1.0.16.tgz}
769
+
770
+
'@needle-di/core@0.11.2':
771
+
resolution: {integrity: sha512-QwvlSTfpobIGGEmO/iMjMcL9lPf53cSV8mQVTzMGO4IkcyOQEK3nn7d6fkUOaaefwyiO4HGLEMl5VDaslnUuUg==}
772
773
'@noble/curves@1.8.1':
774
resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==}
···
2507
source-map@0.8.0-beta.0:
2508
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
2509
engines: {node: '>= 8'}
2510
+
deprecated: The work that was done in this beta branch won't be included in future versions
2511
2512
split2@4.2.0:
2513
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
···
3446
dependencies:
3447
'@jridgewell/resolve-uri': 3.1.2
3448
'@jridgewell/sourcemap-codec': 1.5.0
3449
+
3450
+
'@jsr/cliffy__command@1.0.0-rc.7':
3451
+
dependencies:
3452
+
'@jsr/cliffy__flags': 1.0.0-rc.7
3453
+
'@jsr/cliffy__internal': 1.0.0-rc.7
3454
+
'@jsr/cliffy__table': 1.0.0-rc.7
3455
+
'@jsr/std__fmt': 1.0.8
3456
+
'@jsr/std__text': 1.0.16
3457
+
3458
+
'@jsr/cliffy__flags@1.0.0-rc.7':
3459
+
dependencies:
3460
+
'@jsr/std__text': 1.0.16
3461
+
3462
+
'@jsr/cliffy__internal@1.0.0-rc.7':
3463
+
dependencies:
3464
+
'@jsr/std__fmt': 1.0.8
3465
+
3466
+
'@jsr/cliffy__table@1.0.0-rc.7':
3467
+
dependencies:
3468
+
'@jsr/std__fmt': 1.0.8
3469
+
3470
+
'@jsr/lpm__cli@0.3.0-rc.1':
3471
+
dependencies:
3472
+
'@atproto/syntax': 0.3.3
3473
+
'@jsr/cliffy__command': 1.0.0-rc.7
3474
+
'@jsr/lpm__core': 0.3.1-rc.1
3475
+
'@jsr/std__fmt': 1.0.8
3476
+
'@needle-di/core': 0.11.2
3477
+
zod: 3.24.2
3478
+
3479
+
'@jsr/lpm__core@0.3.1-rc.1':
3480
+
dependencies:
3481
+
'@atproto/api': 0.14.7
3482
+
'@atproto/identity': 0.4.6
3483
+
'@atproto/lexicon': 0.4.7
3484
+
'@atproto/syntax': 0.3.3
3485
+
'@needle-di/core': 0.11.2
3486
+
3487
+
'@jsr/std__fmt@1.0.8': {}
3488
+
3489
+
'@jsr/std__regexp@1.0.1': {}
3490
+
3491
+
'@jsr/std__text@1.0.16':
3492
+
dependencies:
3493
+
'@jsr/std__regexp': 1.0.1
3494
+
3495
+
'@needle-di/core@0.11.2': {}
3496
3497
'@noble/curves@1.8.1':
3498
dependencies: