···77import { schemas } from './lexicons.js'
88import * as AppBskyActorDefs from './types/app/bsky/actor/defs.js'
99import * as AppBskyActorProfile from './types/app/bsky/actor/profile.js'
1010+import * as AppBskyEmbedDefs from './types/app/bsky/embed/defs.js'
1111+import * as AppBskyEmbedExternal from './types/app/bsky/embed/external.js'
1212+import * as AppBskyEmbedImages from './types/app/bsky/embed/images.js'
1313+import * as AppBskyEmbedRecord from './types/app/bsky/embed/record.js'
1414+import * as AppBskyEmbedRecordWithMedia from './types/app/bsky/embed/recordWithMedia.js'
1515+import * as AppBskyEmbedVideo from './types/app/bsky/embed/video.js'
1616+import * as AppBskyFeedDefs from './types/app/bsky/feed/defs.js'
1717+import * as AppBskyFeedPostgate from './types/app/bsky/feed/postgate.js'
1818+import * as AppBskyFeedThreadgate from './types/app/bsky/feed/threadgate.js'
1919+import * as AppBskyGraphDefs from './types/app/bsky/graph/defs.js'
2020+import * as AppBskyLabelerDefs from './types/app/bsky/labeler/defs.js'
2121+import * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet.js'
1022import * as ComAtprotoLabelDefs from './types/com/atproto/label/defs.js'
1123import * as ComAtprotoRepoApplyWrites from './types/com/atproto/repo/applyWrites.js'
1224import * as ComAtprotoRepoCreateRecord from './types/com/atproto/repo/createRecord.js'
···4759export * as ComAtprotoRepoUploadBlob from './types/com/atproto/repo/uploadBlob.js'
4860export * as AppBskyActorDefs from './types/app/bsky/actor/defs.js'
4961export * as AppBskyActorProfile from './types/app/bsky/actor/profile.js'
6262+export * as AppBskyEmbedDefs from './types/app/bsky/embed/defs.js'
6363+export * as AppBskyEmbedExternal from './types/app/bsky/embed/external.js'
6464+export * as AppBskyEmbedImages from './types/app/bsky/embed/images.js'
6565+export * as AppBskyEmbedRecord from './types/app/bsky/embed/record.js'
6666+export * as AppBskyEmbedRecordWithMedia from './types/app/bsky/embed/recordWithMedia.js'
6767+export * as AppBskyEmbedVideo from './types/app/bsky/embed/video.js'
6868+export * as AppBskyFeedDefs from './types/app/bsky/feed/defs.js'
6969+export * as AppBskyFeedPostgate from './types/app/bsky/feed/postgate.js'
7070+export * as AppBskyFeedThreadgate from './types/app/bsky/feed/threadgate.js'
7171+export * as AppBskyGraphDefs from './types/app/bsky/graph/defs.js'
7272+export * as AppBskyLabelerDefs from './types/app/bsky/labeler/defs.js'
7373+export * as AppBskyRichtextFacet from './types/app/bsky/richtext/facet.js'
7474+7575+export const APP_BSKY_FEED = {
7676+ DefsRequestLess: 'app.bsky.feed.defs#requestLess',
7777+ DefsRequestMore: 'app.bsky.feed.defs#requestMore',
7878+ DefsInteractionLike: 'app.bsky.feed.defs#interactionLike',
7979+ DefsInteractionSeen: 'app.bsky.feed.defs#interactionSeen',
8080+ DefsClickthroughItem: 'app.bsky.feed.defs#clickthroughItem',
8181+ DefsContentModeVideo: 'app.bsky.feed.defs#contentModeVideo',
8282+ DefsInteractionQuote: 'app.bsky.feed.defs#interactionQuote',
8383+ DefsInteractionReply: 'app.bsky.feed.defs#interactionReply',
8484+ DefsInteractionShare: 'app.bsky.feed.defs#interactionShare',
8585+ DefsClickthroughEmbed: 'app.bsky.feed.defs#clickthroughEmbed',
8686+ DefsInteractionRepost: 'app.bsky.feed.defs#interactionRepost',
8787+ DefsClickthroughAuthor: 'app.bsky.feed.defs#clickthroughAuthor',
8888+ DefsClickthroughReposter: 'app.bsky.feed.defs#clickthroughReposter',
8989+ DefsContentModeUnspecified: 'app.bsky.feed.defs#contentModeUnspecified',
9090+}
9191+export const APP_BSKY_GRAPH = {
9292+ DefsModlist: 'app.bsky.graph.defs#modlist',
9393+ DefsCuratelist: 'app.bsky.graph.defs#curatelist',
9494+ DefsReferencelist: 'app.bsky.graph.defs#referencelist',
9595+}
50965197export class AtpBaseClient extends XrpcClient {
5298 xyz: XyzNS
···329375export class AppBskyNS {
330376 _client: XrpcClient
331377 actor: AppBskyActorNS
378378+ embed: AppBskyEmbedNS
379379+ feed: AppBskyFeedNS
380380+ richtext: AppBskyRichtextNS
332381333382 constructor(client: XrpcClient) {
334383 this._client = client
335384 this.actor = new AppBskyActorNS(client)
385385+ this.embed = new AppBskyEmbedNS(client)
386386+ this.feed = new AppBskyFeedNS(client)
387387+ this.richtext = new AppBskyRichtextNS(client)
336388 }
337389}
338390···411463 )
412464 }
413465}
466466+467467+export class AppBskyEmbedNS {
468468+ _client: XrpcClient
469469+470470+ constructor(client: XrpcClient) {
471471+ this._client = client
472472+ }
473473+}
474474+475475+export class AppBskyFeedNS {
476476+ _client: XrpcClient
477477+ postgate: PostgateRecord
478478+ threadgate: ThreadgateRecord
479479+480480+ constructor(client: XrpcClient) {
481481+ this._client = client
482482+ this.postgate = new PostgateRecord(client)
483483+ this.threadgate = new ThreadgateRecord(client)
484484+ }
485485+}
486486+487487+export class PostgateRecord {
488488+ _client: XrpcClient
489489+490490+ constructor(client: XrpcClient) {
491491+ this._client = client
492492+ }
493493+494494+ async list(
495495+ params: OmitKey<ComAtprotoRepoListRecords.QueryParams, 'collection'>,
496496+ ): Promise<{
497497+ cursor?: string
498498+ records: { uri: string; value: AppBskyFeedPostgate.Record }[]
499499+ }> {
500500+ const res = await this._client.call('com.atproto.repo.listRecords', {
501501+ collection: 'app.bsky.feed.postgate',
502502+ ...params,
503503+ })
504504+ return res.data
505505+ }
506506+507507+ async get(
508508+ params: OmitKey<ComAtprotoRepoGetRecord.QueryParams, 'collection'>,
509509+ ): Promise<{ uri: string; cid: string; value: AppBskyFeedPostgate.Record }> {
510510+ const res = await this._client.call('com.atproto.repo.getRecord', {
511511+ collection: 'app.bsky.feed.postgate',
512512+ ...params,
513513+ })
514514+ return res.data
515515+ }
516516+517517+ async create(
518518+ params: OmitKey<
519519+ ComAtprotoRepoCreateRecord.InputSchema,
520520+ 'collection' | 'record'
521521+ >,
522522+ record: Un$Typed<AppBskyFeedPostgate.Record>,
523523+ headers?: Record<string, string>,
524524+ ): Promise<{ uri: string; cid: string }> {
525525+ const collection = 'app.bsky.feed.postgate'
526526+ const res = await this._client.call(
527527+ 'com.atproto.repo.createRecord',
528528+ undefined,
529529+ { collection, ...params, record: { ...record, $type: collection } },
530530+ { encoding: 'application/json', headers },
531531+ )
532532+ return res.data
533533+ }
534534+535535+ async delete(
536536+ params: OmitKey<ComAtprotoRepoDeleteRecord.InputSchema, 'collection'>,
537537+ headers?: Record<string, string>,
538538+ ): Promise<void> {
539539+ await this._client.call(
540540+ 'com.atproto.repo.deleteRecord',
541541+ undefined,
542542+ { collection: 'app.bsky.feed.postgate', ...params },
543543+ { headers },
544544+ )
545545+ }
546546+}
547547+548548+export class ThreadgateRecord {
549549+ _client: XrpcClient
550550+551551+ constructor(client: XrpcClient) {
552552+ this._client = client
553553+ }
554554+555555+ async list(
556556+ params: OmitKey<ComAtprotoRepoListRecords.QueryParams, 'collection'>,
557557+ ): Promise<{
558558+ cursor?: string
559559+ records: { uri: string; value: AppBskyFeedThreadgate.Record }[]
560560+ }> {
561561+ const res = await this._client.call('com.atproto.repo.listRecords', {
562562+ collection: 'app.bsky.feed.threadgate',
563563+ ...params,
564564+ })
565565+ return res.data
566566+ }
567567+568568+ async get(
569569+ params: OmitKey<ComAtprotoRepoGetRecord.QueryParams, 'collection'>,
570570+ ): Promise<{
571571+ uri: string
572572+ cid: string
573573+ value: AppBskyFeedThreadgate.Record
574574+ }> {
575575+ const res = await this._client.call('com.atproto.repo.getRecord', {
576576+ collection: 'app.bsky.feed.threadgate',
577577+ ...params,
578578+ })
579579+ return res.data
580580+ }
581581+582582+ async create(
583583+ params: OmitKey<
584584+ ComAtprotoRepoCreateRecord.InputSchema,
585585+ 'collection' | 'record'
586586+ >,
587587+ record: Un$Typed<AppBskyFeedThreadgate.Record>,
588588+ headers?: Record<string, string>,
589589+ ): Promise<{ uri: string; cid: string }> {
590590+ const collection = 'app.bsky.feed.threadgate'
591591+ const res = await this._client.call(
592592+ 'com.atproto.repo.createRecord',
593593+ undefined,
594594+ { collection, ...params, record: { ...record, $type: collection } },
595595+ { encoding: 'application/json', headers },
596596+ )
597597+ return res.data
598598+ }
599599+600600+ async delete(
601601+ params: OmitKey<ComAtprotoRepoDeleteRecord.InputSchema, 'collection'>,
602602+ headers?: Record<string, string>,
603603+ ): Promise<void> {
604604+ await this._client.call(
605605+ 'com.atproto.repo.deleteRecord',
606606+ undefined,
607607+ { collection: 'app.bsky.feed.threadgate', ...params },
608608+ { headers },
609609+ )
610610+ }
611611+}
612612+613613+export class AppBskyRichtextNS {
614614+ _client: XrpcClient
615615+616616+ constructor(client: XrpcClient) {
617617+ this._client = client
618618+ }
619619+}
+2500-346
packages/lexicon/src/lexicons.ts
···193193 defs: {
194194 label: {
195195 type: 'object',
196196- description:
197197- 'Metadata tag on an atproto resource (eg, repo or record).',
198196 required: ['src', 'uri', 'val', 'cts'],
199197 properties: {
200200- ver: {
201201- type: 'integer',
202202- description: 'The AT Protocol version of the label object.',
198198+ cid: {
199199+ type: 'string',
200200+ format: 'cid',
201201+ description:
202202+ "Optionally, CID specifying the specific version of 'uri' resource this label applies to.",
203203+ },
204204+ cts: {
205205+ type: 'string',
206206+ format: 'datetime',
207207+ description: 'Timestamp when this label was created.',
208208+ },
209209+ exp: {
210210+ type: 'string',
211211+ format: 'datetime',
212212+ description:
213213+ 'Timestamp at which this label expires (no longer applies).',
214214+ },
215215+ neg: {
216216+ type: 'boolean',
217217+ description:
218218+ 'If true, this is a negation label, overwriting a previous label.',
219219+ },
220220+ sig: {
221221+ type: 'bytes',
222222+ description: 'Signature of dag-cbor encoded label.',
203223 },
204224 src: {
205225 type: 'string',
···212232 description:
213233 'AT URI of the record, repository (account), or other resource that this label applies to.',
214234 },
215215- cid: {
216216- type: 'string',
217217- format: 'cid',
218218- description:
219219- "Optionally, CID specifying the specific version of 'uri' resource this label applies to.",
220220- },
221235 val: {
222236 type: 'string',
223237 maxLength: 128,
224238 description:
225239 'The short string name of the value or type of this label.',
226240 },
227227- neg: {
228228- type: 'boolean',
229229- description:
230230- 'If true, this is a negation label, overwriting a previous label.',
241241+ ver: {
242242+ type: 'integer',
243243+ description: 'The AT Protocol version of the label object.',
231244 },
232232- cts: {
233233- type: 'string',
234234- format: 'datetime',
235235- description: 'Timestamp when this label was created.',
236236- },
237237- exp: {
245245+ },
246246+ description:
247247+ 'Metadata tag on an atproto resource (eg, repo or record).',
248248+ },
249249+ selfLabel: {
250250+ type: 'object',
251251+ required: ['val'],
252252+ properties: {
253253+ val: {
238254 type: 'string',
239239- format: 'datetime',
255255+ maxLength: 128,
240256 description:
241241- 'Timestamp at which this label expires (no longer applies).',
242242- },
243243- sig: {
244244- type: 'bytes',
245245- description: 'Signature of dag-cbor encoded label.',
257257+ 'The short string name of the value or type of this label.',
246258 },
247259 },
260260+ description:
261261+ 'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.',
262262+ },
263263+ labelValue: {
264264+ type: 'string',
265265+ knownValues: [
266266+ '!hide',
267267+ '!no-promote',
268268+ '!warn',
269269+ '!no-unauthenticated',
270270+ 'dmca-violation',
271271+ 'doxxing',
272272+ 'porn',
273273+ 'sexual',
274274+ 'nudity',
275275+ 'nsfl',
276276+ 'gore',
277277+ ],
248278 },
249279 selfLabels: {
250280 type: 'object',
251251- description:
252252- 'Metadata tags on an atproto record, published by the author within the record.',
253281 required: ['values'],
254282 properties: {
255283 values: {
256284 type: 'array',
257285 items: {
286286+ ref: 'lex:com.atproto.label.defs#selfLabel',
258287 type: 'ref',
259259- ref: 'lex:com.atproto.label.defs#selfLabel',
260288 },
261289 maxLength: 10,
262290 },
263291 },
264264- },
265265- selfLabel: {
266266- type: 'object',
267292 description:
268268- 'Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel.',
269269- required: ['val'],
270270- properties: {
271271- val: {
272272- type: 'string',
273273- maxLength: 128,
274274- description:
275275- 'The short string name of the value or type of this label.',
276276- },
277277- },
293293+ 'Metadata tags on an atproto record, published by the author within the record.',
278294 },
279295 labelValueDefinition: {
280296 type: 'object',
281281- description:
282282- 'Declares a label value and its expected interpretations and behaviors.',
283297 required: ['identifier', 'severity', 'blurs', 'locales'],
284298 properties: {
285285- identifier: {
299299+ blurs: {
286300 type: 'string',
287301 description:
288288- "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
289289- maxLength: 100,
290290- maxGraphemes: 100,
302302+ "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.",
303303+ knownValues: ['content', 'media', 'none'],
304304+ },
305305+ locales: {
306306+ type: 'array',
307307+ items: {
308308+ ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings',
309309+ type: 'ref',
310310+ },
291311 },
292312 severity: {
293313 type: 'string',
···295315 "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.",
296316 knownValues: ['inform', 'alert', 'none'],
297317 },
298298- blurs: {
318318+ adultOnly: {
319319+ type: 'boolean',
320320+ description:
321321+ 'Does the user need to have adult content enabled in order to configure this label?',
322322+ },
323323+ identifier: {
299324 type: 'string',
325325+ maxLength: 100,
300326 description:
301301- "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.",
302302- knownValues: ['content', 'media', 'none'],
327327+ "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).",
328328+ maxGraphemes: 100,
303329 },
304330 defaultSetting: {
305331 type: 'string',
332332+ default: 'warn',
306333 description: 'The default setting for this label.',
307334 knownValues: ['ignore', 'warn', 'hide'],
308308- default: 'warn',
309309- },
310310- adultOnly: {
311311- type: 'boolean',
312312- description:
313313- 'Does the user need to have adult content enabled in order to configure this label?',
314314- },
315315- locales: {
316316- type: 'array',
317317- items: {
318318- type: 'ref',
319319- ref: 'lex:com.atproto.label.defs#labelValueDefinitionStrings',
320320- },
321335 },
322336 },
337337+ description:
338338+ 'Declares a label value and its expected interpretations and behaviors.',
323339 },
324340 labelValueDefinitionStrings: {
325341 type: 'object',
326326- description:
327327- 'Strings which describe the label in the UI, localized into a specific language.',
328342 required: ['lang', 'name', 'description'],
329343 properties: {
330344 lang: {
331345 type: 'string',
346346+ format: 'language',
332347 description:
333348 'The code of the language these strings are written in.',
334334- format: 'language',
335349 },
336350 name: {
337351 type: 'string',
352352+ maxLength: 640,
338353 description: 'A short human-readable name for the label.',
339354 maxGraphemes: 64,
340340- maxLength: 640,
341355 },
342356 description: {
343357 type: 'string',
358358+ maxLength: 100000,
344359 description:
345360 'A longer description of what the label means and why it might be applied.',
346361 maxGraphemes: 10000,
347347- maxLength: 100000,
348362 },
349363 },
350350- },
351351- labelValue: {
352352- type: 'string',
353353- knownValues: [
354354- '!hide',
355355- '!no-promote',
356356- '!warn',
357357- '!no-unauthenticated',
358358- 'dmca-violation',
359359- 'doxxing',
360360- 'porn',
361361- 'sexual',
362362- 'nudity',
363363- 'nsfl',
364364- 'gore',
365365- ],
364364+ description:
365365+ 'Strings which describe the label in the UI, localized into a specific language.',
366366 },
367367 },
368368 },
···372372 defs: {
373373 main: {
374374 type: 'procedure',
375375- description:
376376- 'Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.',
377375 input: {
378378- encoding: 'application/json',
379376 schema: {
380377 type: 'object',
381378 required: ['repo', 'writes'],
···386383 description:
387384 'The handle or DID of the repo (aka, current account).',
388385 },
389389- validate: {
390390- type: 'boolean',
391391- description:
392392- "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.",
393393- },
394386 writes: {
395387 type: 'array',
396388 items: {
397397- type: 'union',
398389 refs: [
399390 'lex:com.atproto.repo.applyWrites#create',
400391 'lex:com.atproto.repo.applyWrites#update',
401392 'lex:com.atproto.repo.applyWrites#delete',
402393 ],
394394+ type: 'union',
403395 closed: true,
404396 },
405397 },
398398+ validate: {
399399+ type: 'boolean',
400400+ description:
401401+ "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.",
402402+ },
406403 swapCommit: {
407404 type: 'string',
405405+ format: 'cid',
408406 description:
409407 'If provided, the entire operation will fail if the current repo commit CID does not match this value. Used to prevent conflicting repo mutations.',
410410- format: 'cid',
411408 },
412409 },
413410 },
411411+ encoding: 'application/json',
414412 },
413413+ errors: [
414414+ {
415415+ name: 'InvalidSwap',
416416+ description:
417417+ "Indicates that the 'swapCommit' parameter did not match current commit.",
418418+ },
419419+ ],
415420 output: {
416416- encoding: 'application/json',
417421 schema: {
418422 type: 'object',
419423 required: [],
420424 properties: {
421425 commit: {
426426+ ref: 'lex:com.atproto.repo.defs#commitMeta',
422427 type: 'ref',
423423- ref: 'lex:com.atproto.repo.defs#commitMeta',
424428 },
425429 results: {
426430 type: 'array',
427431 items: {
428428- type: 'union',
429432 refs: [
430433 'lex:com.atproto.repo.applyWrites#createResult',
431434 'lex:com.atproto.repo.applyWrites#updateResult',
432435 'lex:com.atproto.repo.applyWrites#deleteResult',
433436 ],
437437+ type: 'union',
434438 closed: true,
435439 },
436440 },
437441 },
438442 },
443443+ encoding: 'application/json',
439444 },
440440- errors: [
441441- {
442442- name: 'InvalidSwap',
443443- description:
444444- "Indicates that the 'swapCommit' parameter did not match current commit.",
445445- },
446446- ],
445445+ description:
446446+ 'Apply a batch transaction of repository creates, updates, and deletes. Requires auth, implemented by PDS.',
447447 },
448448 create: {
449449 type: 'object',
450450- description: 'Operation which creates a new record.',
451450 required: ['collection', 'value'],
452451 properties: {
453453- collection: {
454454- type: 'string',
455455- format: 'nsid',
456456- },
457452 rkey: {
458453 type: 'string',
454454+ format: 'record-key',
459455 maxLength: 512,
460460- format: 'record-key',
461456 description:
462457 'NOTE: maxLength is redundant with record-key format. Keeping it temporarily to ensure backwards compatibility.',
463458 },
464459 value: {
465460 type: 'unknown',
461461+ },
462462+ collection: {
463463+ type: 'string',
464464+ format: 'nsid',
466465 },
467466 },
467467+ description: 'Operation which creates a new record.',
468468 },
469469- update: {
469469+ delete: {
470470 type: 'object',
471471- description: 'Operation which updates an existing record.',
472472- required: ['collection', 'rkey', 'value'],
471471+ required: ['collection', 'rkey'],
473472 properties: {
473473+ rkey: {
474474+ type: 'string',
475475+ format: 'record-key',
476476+ },
474477 collection: {
475478 type: 'string',
476479 format: 'nsid',
477480 },
481481+ },
482482+ description: 'Operation which deletes an existing record.',
483483+ },
484484+ update: {
485485+ type: 'object',
486486+ required: ['collection', 'rkey', 'value'],
487487+ properties: {
478488 rkey: {
479489 type: 'string',
480490 format: 'record-key',
···482492 value: {
483493 type: 'unknown',
484494 },
485485- },
486486- },
487487- delete: {
488488- type: 'object',
489489- description: 'Operation which deletes an existing record.',
490490- required: ['collection', 'rkey'],
491491- properties: {
492495 collection: {
493496 type: 'string',
494497 format: 'nsid',
495495- },
496496- rkey: {
497497- type: 'string',
498498- format: 'record-key',
499498 },
500499 },
500500+ description: 'Operation which updates an existing record.',
501501 },
502502 createResult: {
503503 type: 'object',
504504 required: ['uri', 'cid'],
505505 properties: {
506506- uri: {
507507- type: 'string',
508508- format: 'at-uri',
509509- },
510506 cid: {
511507 type: 'string',
512508 format: 'cid',
513509 },
510510+ uri: {
511511+ type: 'string',
512512+ format: 'at-uri',
513513+ },
514514 validationStatus: {
515515 type: 'string',
516516 knownValues: ['valid', 'unknown'],
517517 },
518518 },
519519 },
520520+ deleteResult: {
521521+ type: 'object',
522522+ required: [],
523523+ properties: {},
524524+ },
520525 updateResult: {
521526 type: 'object',
522527 required: ['uri', 'cid'],
523528 properties: {
524524- uri: {
525525- type: 'string',
526526- format: 'at-uri',
527527- },
528529 cid: {
529530 type: 'string',
530531 format: 'cid',
532532+ },
533533+ uri: {
534534+ type: 'string',
535535+ format: 'at-uri',
531536 },
532537 validationStatus: {
533538 type: 'string',
···535540 },
536541 },
537542 },
538538- deleteResult: {
539539- type: 'object',
540540- required: [],
541541- properties: {},
542542- },
543543 },
544544 },
545545 ComAtprotoRepoCreateRecord: {
···548548 defs: {
549549 main: {
550550 type: 'procedure',
551551- description:
552552- 'Create a single new repository record. Requires auth, implemented by PDS.',
553551 input: {
554554- encoding: 'application/json',
555552 schema: {
556553 type: 'object',
557554 required: ['repo', 'collection', 'record'],
···562559 description:
563560 'The handle or DID of the repo (aka, current account).',
564561 },
565565- collection: {
566566- type: 'string',
567567- format: 'nsid',
568568- description: 'The NSID of the record collection.',
569569- },
570562 rkey: {
571563 type: 'string',
572564 format: 'record-key',
565565+ maxLength: 512,
573566 description: 'The Record Key.',
574574- maxLength: 512,
567567+ },
568568+ record: {
569569+ type: 'unknown',
570570+ description: 'The record itself. Must contain a $type field.',
575571 },
576572 validate: {
577573 type: 'boolean',
578574 description:
579575 "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.",
580576 },
581581- record: {
582582- type: 'unknown',
583583- description: 'The record itself. Must contain a $type field.',
577577+ collection: {
578578+ type: 'string',
579579+ format: 'nsid',
580580+ description: 'The NSID of the record collection.',
584581 },
585582 swapCommit: {
586583 type: 'string',
···590587 },
591588 },
592589 },
590590+ encoding: 'application/json',
593591 },
592592+ errors: [
593593+ {
594594+ name: 'InvalidSwap',
595595+ description:
596596+ "Indicates that 'swapCommit' didn't match current repo commit.",
597597+ },
598598+ ],
594599 output: {
595595- encoding: 'application/json',
596600 schema: {
597601 type: 'object',
598602 required: ['uri', 'cid'],
599603 properties: {
604604+ cid: {
605605+ type: 'string',
606606+ format: 'cid',
607607+ },
600608 uri: {
601609 type: 'string',
602610 format: 'at-uri',
603611 },
604604- cid: {
605605- type: 'string',
606606- format: 'cid',
607607- },
608612 commit: {
613613+ ref: 'lex:com.atproto.repo.defs#commitMeta',
609614 type: 'ref',
610610- ref: 'lex:com.atproto.repo.defs#commitMeta',
611615 },
612616 validationStatus: {
613617 type: 'string',
···615619 },
616620 },
617621 },
622622+ encoding: 'application/json',
618623 },
619619- errors: [
620620- {
621621- name: 'InvalidSwap',
622622- description:
623623- "Indicates that 'swapCommit' didn't match current repo commit.",
624624- },
625625- ],
624624+ description:
625625+ 'Create a single new repository record. Requires auth, implemented by PDS.',
626626 },
627627 },
628628 },
···652652 defs: {
653653 main: {
654654 type: 'procedure',
655655- description:
656656- "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.",
657655 input: {
658658- encoding: 'application/json',
659656 schema: {
660657 type: 'object',
661658 required: ['repo', 'collection', 'rkey'],
···666663 description:
667664 'The handle or DID of the repo (aka, current account).',
668665 },
669669- collection: {
670670- type: 'string',
671671- format: 'nsid',
672672- description: 'The NSID of the record collection.',
673673- },
674666 rkey: {
675667 type: 'string',
676668 format: 'record-key',
677669 description: 'The Record Key.',
678670 },
679679- swapRecord: {
671671+ collection: {
680672 type: 'string',
681681- format: 'cid',
682682- description:
683683- 'Compare and swap with the previous record by CID.',
673673+ format: 'nsid',
674674+ description: 'The NSID of the record collection.',
684675 },
685676 swapCommit: {
686677 type: 'string',
···688679 description:
689680 'Compare and swap with the previous commit by CID.',
690681 },
682682+ swapRecord: {
683683+ type: 'string',
684684+ format: 'cid',
685685+ description:
686686+ 'Compare and swap with the previous record by CID.',
687687+ },
691688 },
692689 },
690690+ encoding: 'application/json',
693691 },
692692+ errors: [
693693+ {
694694+ name: 'InvalidSwap',
695695+ },
696696+ ],
694697 output: {
695695- encoding: 'application/json',
696698 schema: {
697699 type: 'object',
698700 properties: {
699701 commit: {
700700- type: 'ref',
701702 ref: 'lex:com.atproto.repo.defs#commitMeta',
703703+ type: 'ref',
702704 },
703705 },
704706 },
707707+ encoding: 'application/json',
705708 },
706706- errors: [
707707- {
708708- name: 'InvalidSwap',
709709- },
710710- ],
709709+ description:
710710+ "Delete a repository record, or ensure it doesn't exist. Requires auth, implemented by PDS.",
711711 },
712712 },
713713 },
···717717 defs: {
718718 main: {
719719 type: 'query',
720720- description:
721721- 'Get information about an account and repository, including the list of collections. Does not require auth.',
722722- parameters: {
723723- type: 'params',
724724- required: ['repo'],
725725- properties: {
726726- repo: {
727727- type: 'string',
728728- format: 'at-identifier',
729729- description: 'The handle or DID of the repo.',
730730- },
731731- },
732732- },
733720 output: {
734734- encoding: 'application/json',
735721 schema: {
736722 type: 'object',
737723 required: [
···742728 'handleIsCorrect',
743729 ],
744730 properties: {
745745- handle: {
746746- type: 'string',
747747- format: 'handle',
748748- },
749731 did: {
750732 type: 'string',
751733 format: 'did',
···754736 type: 'unknown',
755737 description: 'The complete DID document for this account.',
756738 },
739739+ handle: {
740740+ type: 'string',
741741+ format: 'handle',
742742+ },
757743 collections: {
758744 type: 'array',
759759- description:
760760- 'List of all the collections (NSIDs) for which this repo contains at least one record.',
761745 items: {
762746 type: 'string',
763747 format: 'nsid',
764748 },
749749+ description:
750750+ 'List of all the collections (NSIDs) for which this repo contains at least one record.',
765751 },
766752 handleIsCorrect: {
767753 type: 'boolean',
···770756 },
771757 },
772758 },
759759+ encoding: 'application/json',
773760 },
761761+ parameters: {
762762+ type: 'params',
763763+ required: ['repo'],
764764+ properties: {
765765+ repo: {
766766+ type: 'string',
767767+ format: 'at-identifier',
768768+ description: 'The handle or DID of the repo.',
769769+ },
770770+ },
771771+ },
772772+ description:
773773+ 'Get information about an account and repository, including the list of collections. Does not require auth.',
774774 },
775775 },
776776 },
···780780 defs: {
781781 main: {
782782 type: 'query',
783783- description:
784784- 'Get a single record from a repository. Does not require auth.',
785785- parameters: {
786786- type: 'params',
787787- required: ['repo', 'collection', 'rkey'],
788788- properties: {
789789- repo: {
790790- type: 'string',
791791- format: 'at-identifier',
792792- description: 'The handle or DID of the repo.',
793793- },
794794- collection: {
795795- type: 'string',
796796- format: 'nsid',
797797- description: 'The NSID of the record collection.',
798798- },
799799- rkey: {
800800- type: 'string',
801801- description: 'The Record Key.',
802802- format: 'record-key',
803803- },
804804- cid: {
805805- type: 'string',
806806- format: 'cid',
807807- description:
808808- 'The CID of the version of the record. If not specified, then return the most recent version.',
809809- },
783783+ errors: [
784784+ {
785785+ name: 'RecordNotFound',
810786 },
811811- },
787787+ ],
812788 output: {
813813- encoding: 'application/json',
814789 schema: {
815790 type: 'object',
816791 required: ['uri', 'value'],
817792 properties: {
818818- uri: {
819819- type: 'string',
820820- format: 'at-uri',
821821- },
822793 cid: {
823794 type: 'string',
824795 format: 'cid',
825796 },
797797+ uri: {
798798+ type: 'string',
799799+ format: 'at-uri',
800800+ },
826801 value: {
827802 type: 'unknown',
828803 },
829804 },
830805 },
806806+ encoding: 'application/json',
831807 },
832832- errors: [
833833- {
834834- name: 'RecordNotFound',
808808+ parameters: {
809809+ type: 'params',
810810+ required: ['repo', 'collection', 'rkey'],
811811+ properties: {
812812+ cid: {
813813+ type: 'string',
814814+ format: 'cid',
815815+ description:
816816+ 'The CID of the version of the record. If not specified, then return the most recent version.',
817817+ },
818818+ repo: {
819819+ type: 'string',
820820+ format: 'at-identifier',
821821+ description: 'The handle or DID of the repo.',
822822+ },
823823+ rkey: {
824824+ type: 'string',
825825+ format: 'record-key',
826826+ description: 'The Record Key.',
827827+ },
828828+ collection: {
829829+ type: 'string',
830830+ format: 'nsid',
831831+ description: 'The NSID of the record collection.',
832832+ },
835833 },
836836- ],
834834+ },
835835+ description:
836836+ 'Get a single record from a repository. Does not require auth.',
837837 },
838838 },
839839 },
···843843 defs: {
844844 main: {
845845 type: 'procedure',
846846- description:
847847- 'Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.',
848846 input: {
849847 encoding: 'application/vnd.ipld.car',
850848 },
849849+ description:
850850+ 'Import a repo in the form of a CAR file. Requires Content-Length HTTP header to be set.',
851851 },
852852 },
853853 },
···857857 defs: {
858858 main: {
859859 type: 'query',
860860- description:
861861- 'Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.',
862862- parameters: {
863863- type: 'params',
864864- properties: {
865865- limit: {
866866- type: 'integer',
867867- minimum: 1,
868868- maximum: 1000,
869869- default: 500,
870870- },
871871- cursor: {
872872- type: 'string',
873873- },
874874- },
875875- },
876860 output: {
877877- encoding: 'application/json',
878861 schema: {
879862 type: 'object',
880863 required: ['blobs'],
881864 properties: {
882882- cursor: {
883883- type: 'string',
884884- },
885865 blobs: {
886866 type: 'array',
887867 items: {
888888- type: 'ref',
889868 ref: 'lex:com.atproto.repo.listMissingBlobs#recordBlob',
869869+ type: 'ref',
890870 },
891871 },
872872+ cursor: {
873873+ type: 'string',
874874+ },
892875 },
893876 },
877877+ encoding: 'application/json',
894878 },
879879+ parameters: {
880880+ type: 'params',
881881+ properties: {
882882+ limit: {
883883+ type: 'integer',
884884+ default: 500,
885885+ maximum: 1000,
886886+ minimum: 1,
887887+ },
888888+ cursor: {
889889+ type: 'string',
890890+ },
891891+ },
892892+ },
893893+ description:
894894+ 'Returns a list of missing blobs for the requesting account. Intended to be used in the account migration flow.',
895895 },
896896 recordBlob: {
897897 type: 'object',
···915915 defs: {
916916 main: {
917917 type: 'query',
918918- description:
919919- 'List a range of records in a repository, matching a specific collection. Does not require auth.',
918918+ output: {
919919+ schema: {
920920+ type: 'object',
921921+ required: ['records'],
922922+ properties: {
923923+ cursor: {
924924+ type: 'string',
925925+ },
926926+ records: {
927927+ type: 'array',
928928+ items: {
929929+ ref: 'lex:com.atproto.repo.listRecords#record',
930930+ type: 'ref',
931931+ },
932932+ },
933933+ },
934934+ },
935935+ encoding: 'application/json',
936936+ },
920937 parameters: {
921938 type: 'params',
922939 required: ['repo', 'collection'],
···925942 type: 'string',
926943 format: 'at-identifier',
927944 description: 'The handle or DID of the repo.',
928928- },
929929- collection: {
930930- type: 'string',
931931- format: 'nsid',
932932- description: 'The NSID of the record type.',
933945 },
934946 limit: {
935947 type: 'integer',
936936- minimum: 1,
937937- maximum: 100,
938948 default: 50,
949949+ maximum: 100,
950950+ minimum: 1,
939951 description: 'The number of records to return.',
940952 },
941953 cursor: {
942954 type: 'string',
943955 },
944944- rkeyStart: {
945945- type: 'string',
946946- description:
947947- 'DEPRECATED: The lowest sort-ordered rkey to start from (exclusive)',
948948- },
949949- rkeyEnd: {
950950- type: 'string',
951951- description:
952952- 'DEPRECATED: The highest sort-ordered rkey to stop at (exclusive)',
953953- },
954956 reverse: {
955957 type: 'boolean',
956958 description: 'Flag to reverse the order of the returned records.',
957959 },
958958- },
959959- },
960960- output: {
961961- encoding: 'application/json',
962962- schema: {
963963- type: 'object',
964964- required: ['records'],
965965- properties: {
966966- cursor: {
967967- type: 'string',
968968- },
969969- records: {
970970- type: 'array',
971971- items: {
972972- type: 'ref',
973973- ref: 'lex:com.atproto.repo.listRecords#record',
974974- },
975975- },
960960+ collection: {
961961+ type: 'string',
962962+ format: 'nsid',
963963+ description: 'The NSID of the record type.',
976964 },
977965 },
978966 },
967967+ description:
968968+ 'List a range of records in a repository, matching a specific collection. Does not require auth.',
979969 },
980970 record: {
981971 type: 'object',
982972 required: ['uri', 'cid', 'value'],
983973 properties: {
984984- uri: {
985985- type: 'string',
986986- format: 'at-uri',
987987- },
988974 cid: {
989975 type: 'string',
990976 format: 'cid',
977977+ },
978978+ uri: {
979979+ type: 'string',
980980+ format: 'at-uri',
991981 },
992982 value: {
993983 type: 'unknown',
···1002992 defs: {
1003993 main: {
1004994 type: 'procedure',
10051005- description:
10061006- 'Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.',
1007995 input: {
10081008- encoding: 'application/json',
1009996 schema: {
1010997 type: 'object',
10111011- required: ['repo', 'collection', 'rkey', 'record'],
1012998 nullable: ['swapRecord'],
999999+ required: ['repo', 'collection', 'rkey', 'record'],
10131000 properties: {
10141001 repo: {
10151002 type: 'string',
···10171004 description:
10181005 'The handle or DID of the repo (aka, current account).',
10191006 },
10201020- collection: {
10211021- type: 'string',
10221022- format: 'nsid',
10231023- description: 'The NSID of the record collection.',
10241024- },
10251007 rkey: {
10261008 type: 'string',
10271009 format: 'record-key',
10281028- description: 'The Record Key.',
10291010 maxLength: 512,
10111011+ description: 'The Record Key.',
10121012+ },
10131013+ record: {
10141014+ type: 'unknown',
10151015+ description: 'The record to write.',
10301016 },
10311017 validate: {
10321018 type: 'boolean',
10331019 description:
10341020 "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.",
10351021 },
10361036- record: {
10371037- type: 'unknown',
10381038- description: 'The record to write.',
10221022+ collection: {
10231023+ type: 'string',
10241024+ format: 'nsid',
10251025+ description: 'The NSID of the record collection.',
10391026 },
10401040- swapRecord: {
10271027+ swapCommit: {
10411028 type: 'string',
10421029 format: 'cid',
10431030 description:
10441044- 'Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation',
10311031+ 'Compare and swap with the previous commit by CID.',
10451032 },
10461046- swapCommit: {
10331033+ swapRecord: {
10471034 type: 'string',
10481035 format: 'cid',
10491036 description:
10501050- 'Compare and swap with the previous commit by CID.',
10371037+ 'Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation',
10511038 },
10521039 },
10531040 },
10411041+ encoding: 'application/json',
10541042 },
10431043+ errors: [
10441044+ {
10451045+ name: 'InvalidSwap',
10461046+ },
10471047+ ],
10551048 output: {
10561056- encoding: 'application/json',
10571049 schema: {
10581050 type: 'object',
10591051 required: ['uri', 'cid'],
10601052 properties: {
10531053+ cid: {
10541054+ type: 'string',
10551055+ format: 'cid',
10561056+ },
10611057 uri: {
10621058 type: 'string',
10631059 format: 'at-uri',
10641060 },
10651065- cid: {
10661066- type: 'string',
10671067- format: 'cid',
10681068- },
10691061 commit: {
10701070- type: 'ref',
10711062 ref: 'lex:com.atproto.repo.defs#commitMeta',
10631063+ type: 'ref',
10721064 },
10731065 validationStatus: {
10741066 type: 'string',
···10761068 },
10771069 },
10781070 },
10711071+ encoding: 'application/json',
10791072 },
10801080- errors: [
10811081- {
10821082- name: 'InvalidSwap',
10831083- },
10841084- ],
10731073+ description:
10741074+ 'Write a repository record, creating or updating it as needed. Requires auth, implemented by PDS.',
10851075 },
10861076 },
10871077 },
···10941084 type: 'object',
10951085 required: ['uri', 'cid'],
10961086 properties: {
10971097- uri: {
10981098- type: 'string',
10991099- format: 'at-uri',
11001100- },
11011087 cid: {
11021088 type: 'string',
11031089 format: 'cid',
10901090+ },
10911091+ uri: {
10921092+ type: 'string',
10931093+ format: 'at-uri',
11041094 },
11051095 },
11061096 },
···11121102 defs: {
11131103 main: {
11141104 type: 'procedure',
11151115- description:
11161116- '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.',
11171105 input: {
11181106 encoding: '*/*',
11191107 },
11201108 output: {
11211121- encoding: 'application/json',
11221109 schema: {
11231110 type: 'object',
11241111 required: ['blob'],
···11281115 },
11291116 },
11301117 },
11181118+ encoding: 'application/json',
11311119 },
11201120+ description:
11211121+ '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.',
11321122 },
11331123 },
11341124 },
···11361126 lexicon: 1,
11371127 id: 'app.bsky.actor.defs',
11381128 defs: {
11291129+ nux: {
11301130+ type: 'object',
11311131+ required: ['id', 'completed'],
11321132+ properties: {
11331133+ id: {
11341134+ type: 'string',
11351135+ maxLength: 100,
11361136+ },
11371137+ data: {
11381138+ type: 'string',
11391139+ maxLength: 3000,
11401140+ description:
11411141+ 'Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters.',
11421142+ maxGraphemes: 300,
11431143+ },
11441144+ completed: {
11451145+ type: 'boolean',
11461146+ default: false,
11471147+ },
11481148+ expiresAt: {
11491149+ type: 'string',
11501150+ format: 'datetime',
11511151+ description:
11521152+ 'The date and time at which the NUX will expire and should be considered completed.',
11531153+ },
11541154+ },
11551155+ description: 'A new user experiences (NUX) storage object',
11561156+ },
11571157+ mutedWord: {
11581158+ type: 'object',
11591159+ required: ['value', 'targets'],
11601160+ properties: {
11611161+ id: {
11621162+ type: 'string',
11631163+ },
11641164+ value: {
11651165+ type: 'string',
11661166+ maxLength: 10000,
11671167+ description: 'The muted word itself.',
11681168+ maxGraphemes: 1000,
11691169+ },
11701170+ targets: {
11711171+ type: 'array',
11721172+ items: {
11731173+ ref: 'lex:app.bsky.actor.defs#mutedWordTarget',
11741174+ type: 'ref',
11751175+ },
11761176+ description: 'The intended targets of the muted word.',
11771177+ },
11781178+ expiresAt: {
11791179+ type: 'string',
11801180+ format: 'datetime',
11811181+ description:
11821182+ 'The date and time at which the muted word will expire and no longer be applied.',
11831183+ },
11841184+ actorTarget: {
11851185+ type: 'string',
11861186+ default: 'all',
11871187+ description:
11881188+ 'Groups of users to apply the muted word to. If undefined, applies to all users.',
11891189+ knownValues: ['all', 'exclude-following'],
11901190+ },
11911191+ },
11921192+ description: 'A word that the account owner has muted.',
11931193+ },
11941194+ savedFeed: {
11951195+ type: 'object',
11961196+ required: ['id', 'type', 'value', 'pinned'],
11971197+ properties: {
11981198+ id: {
11991199+ type: 'string',
12001200+ },
12011201+ type: {
12021202+ type: 'string',
12031203+ knownValues: ['feed', 'list', 'timeline'],
12041204+ },
12051205+ value: {
12061206+ type: 'string',
12071207+ },
12081208+ pinned: {
12091209+ type: 'boolean',
12101210+ },
12111211+ },
12121212+ },
12131213+ preferences: {
12141214+ type: 'array',
12151215+ items: {
12161216+ refs: [
12171217+ 'lex:app.bsky.actor.defs#adultContentPref',
12181218+ 'lex:app.bsky.actor.defs#contentLabelPref',
12191219+ 'lex:app.bsky.actor.defs#savedFeedsPref',
12201220+ 'lex:app.bsky.actor.defs#savedFeedsPrefV2',
12211221+ 'lex:app.bsky.actor.defs#personalDetailsPref',
12221222+ 'lex:app.bsky.actor.defs#feedViewPref',
12231223+ 'lex:app.bsky.actor.defs#threadViewPref',
12241224+ 'lex:app.bsky.actor.defs#interestsPref',
12251225+ 'lex:app.bsky.actor.defs#mutedWordsPref',
12261226+ 'lex:app.bsky.actor.defs#hiddenPostsPref',
12271227+ 'lex:app.bsky.actor.defs#bskyAppStatePref',
12281228+ 'lex:app.bsky.actor.defs#labelersPref',
12291229+ 'lex:app.bsky.actor.defs#postInteractionSettingsPref',
12301230+ ],
12311231+ type: 'union',
12321232+ },
12331233+ },
11391234 profileView: {
11401235 type: 'object',
11411236 required: ['did', 'handle'],
···11441239 type: 'string',
11451240 format: 'did',
11461241 },
12421242+ avatar: {
12431243+ type: 'string',
12441244+ format: 'uri',
12451245+ },
11471246 handle: {
11481247 type: 'string',
11491248 format: 'handle',
11501249 },
12501250+ labels: {
12511251+ type: 'array',
12521252+ items: {
12531253+ ref: 'lex:com.atproto.label.defs#label',
12541254+ type: 'ref',
12551255+ },
12561256+ },
12571257+ viewer: {
12581258+ ref: 'lex:app.bsky.actor.defs#viewerState',
12591259+ type: 'ref',
12601260+ },
12611261+ createdAt: {
12621262+ type: 'string',
12631263+ format: 'datetime',
12641264+ },
12651265+ indexedAt: {
12661266+ type: 'string',
12671267+ format: 'datetime',
12681268+ },
12691269+ associated: {
12701270+ ref: 'lex:app.bsky.actor.defs#profileAssociated',
12711271+ type: 'ref',
12721272+ },
12731273+ description: {
12741274+ type: 'string',
12751275+ maxLength: 2560,
12761276+ maxGraphemes: 256,
12771277+ },
11511278 displayName: {
11521279 type: 'string',
12801280+ maxLength: 640,
11531281 maxGraphemes: 64,
11541154- maxLength: 640,
12821282+ },
12831283+ },
12841284+ },
12851285+ viewerState: {
12861286+ type: 'object',
12871287+ properties: {
12881288+ muted: {
12891289+ type: 'boolean',
12901290+ },
12911291+ blocking: {
12921292+ type: 'string',
12931293+ format: 'at-uri',
12941294+ },
12951295+ blockedBy: {
12961296+ type: 'boolean',
12971297+ },
12981298+ following: {
12991299+ type: 'string',
13001300+ format: 'at-uri',
13011301+ },
13021302+ followedBy: {
13031303+ type: 'string',
13041304+ format: 'at-uri',
13051305+ },
13061306+ mutedByList: {
13071307+ ref: 'lex:app.bsky.graph.defs#listViewBasic',
13081308+ type: 'ref',
13091309+ },
13101310+ blockingByList: {
13111311+ ref: 'lex:app.bsky.graph.defs#listViewBasic',
13121312+ type: 'ref',
13131313+ },
13141314+ knownFollowers: {
13151315+ ref: 'lex:app.bsky.actor.defs#knownFollowers',
13161316+ type: 'ref',
13171317+ },
13181318+ },
13191319+ description:
13201320+ "Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests.",
13211321+ },
13221322+ feedViewPref: {
13231323+ type: 'object',
13241324+ required: ['feed'],
13251325+ properties: {
13261326+ feed: {
13271327+ type: 'string',
13281328+ description:
13291329+ 'The URI of the feed, or an identifier which describes the feed.',
13301330+ },
13311331+ hideReplies: {
13321332+ type: 'boolean',
13331333+ description: 'Hide replies in the feed.',
13341334+ },
13351335+ hideReposts: {
13361336+ type: 'boolean',
13371337+ description: 'Hide reposts in the feed.',
13381338+ },
13391339+ hideQuotePosts: {
13401340+ type: 'boolean',
13411341+ description: 'Hide quote posts in the feed.',
13421342+ },
13431343+ hideRepliesByLikeCount: {
13441344+ type: 'integer',
13451345+ description:
13461346+ 'Hide replies in the feed if they do not have this number of likes.',
13471347+ },
13481348+ hideRepliesByUnfollowed: {
13491349+ type: 'boolean',
13501350+ default: true,
13511351+ description:
13521352+ 'Hide replies in the feed if they are not by followed users.',
13531353+ },
13541354+ },
13551355+ },
13561356+ labelersPref: {
13571357+ type: 'object',
13581358+ required: ['labelers'],
13591359+ properties: {
13601360+ labelers: {
13611361+ type: 'array',
13621362+ items: {
13631363+ ref: 'lex:app.bsky.actor.defs#labelerPrefItem',
13641364+ type: 'ref',
13651365+ },
13661366+ },
13671367+ },
13681368+ },
13691369+ interestsPref: {
13701370+ type: 'object',
13711371+ required: ['tags'],
13721372+ properties: {
13731373+ tags: {
13741374+ type: 'array',
13751375+ items: {
13761376+ type: 'string',
13771377+ maxLength: 640,
13781378+ maxGraphemes: 64,
13791379+ },
13801380+ maxLength: 100,
13811381+ description:
13821382+ "A list of tags which describe the account owner's interests gathered during onboarding.",
13831383+ },
13841384+ },
13851385+ },
13861386+ knownFollowers: {
13871387+ type: 'object',
13881388+ required: ['count', 'followers'],
13891389+ properties: {
13901390+ count: {
13911391+ type: 'integer',
13921392+ },
13931393+ followers: {
13941394+ type: 'array',
13951395+ items: {
13961396+ ref: 'lex:app.bsky.actor.defs#profileViewBasic',
13971397+ type: 'ref',
13981398+ },
13991399+ maxLength: 5,
14001400+ minLength: 0,
14011401+ },
14021402+ },
14031403+ description: "The subject's followers whom you also follow",
14041404+ },
14051405+ mutedWordsPref: {
14061406+ type: 'object',
14071407+ required: ['items'],
14081408+ properties: {
14091409+ items: {
14101410+ type: 'array',
14111411+ items: {
14121412+ ref: 'lex:app.bsky.actor.defs#mutedWord',
14131413+ type: 'ref',
14141414+ },
14151415+ description: 'A list of words the account owner has muted.',
14161416+ },
14171417+ },
14181418+ },
14191419+ savedFeedsPref: {
14201420+ type: 'object',
14211421+ required: ['pinned', 'saved'],
14221422+ properties: {
14231423+ saved: {
14241424+ type: 'array',
14251425+ items: {
14261426+ type: 'string',
14271427+ format: 'at-uri',
14281428+ },
14291429+ },
14301430+ pinned: {
14311431+ type: 'array',
14321432+ items: {
14331433+ type: 'string',
14341434+ format: 'at-uri',
14351435+ },
14361436+ },
14371437+ timelineIndex: {
14381438+ type: 'integer',
14391439+ },
14401440+ },
14411441+ },
14421442+ threadViewPref: {
14431443+ type: 'object',
14441444+ properties: {
14451445+ sort: {
14461446+ type: 'string',
14471447+ description: 'Sorting mode for threads.',
14481448+ knownValues: [
14491449+ 'oldest',
14501450+ 'newest',
14511451+ 'most-likes',
14521452+ 'random',
14531453+ 'hotness',
14541454+ ],
14551455+ },
14561456+ prioritizeFollowedUsers: {
14571457+ type: 'boolean',
14581458+ description: 'Show followed users at the top of all replies.',
14591459+ },
14601460+ },
14611461+ },
14621462+ hiddenPostsPref: {
14631463+ type: 'object',
14641464+ required: ['items'],
14651465+ properties: {
14661466+ items: {
14671467+ type: 'array',
14681468+ items: {
14691469+ type: 'string',
14701470+ format: 'at-uri',
14711471+ },
14721472+ description:
14731473+ 'A list of URIs of posts the account owner has hidden.',
14741474+ },
14751475+ },
14761476+ },
14771477+ labelerPrefItem: {
14781478+ type: 'object',
14791479+ required: ['did'],
14801480+ properties: {
14811481+ did: {
14821482+ type: 'string',
14831483+ format: 'did',
14841484+ },
14851485+ },
14861486+ },
14871487+ mutedWordTarget: {
14881488+ type: 'string',
14891489+ maxLength: 640,
14901490+ knownValues: ['content', 'tag'],
14911491+ maxGraphemes: 64,
14921492+ },
14931493+ adultContentPref: {
14941494+ type: 'object',
14951495+ required: ['enabled'],
14961496+ properties: {
14971497+ enabled: {
14981498+ type: 'boolean',
14991499+ default: false,
15001500+ },
15011501+ },
15021502+ },
15031503+ bskyAppStatePref: {
15041504+ type: 'object',
15051505+ properties: {
15061506+ nuxs: {
15071507+ type: 'array',
15081508+ items: {
15091509+ ref: 'lex:app.bsky.actor.defs#nux',
15101510+ type: 'ref',
15111511+ },
15121512+ maxLength: 100,
15131513+ description: 'Storage for NUXs the user has encountered.',
15141514+ },
15151515+ queuedNudges: {
15161516+ type: 'array',
15171517+ items: {
15181518+ type: 'string',
15191519+ maxLength: 100,
15201520+ },
15211521+ maxLength: 1000,
15221522+ description:
15231523+ 'An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user.',
15241524+ },
15251525+ activeProgressGuide: {
15261526+ ref: 'lex:app.bsky.actor.defs#bskyAppProgressGuide',
15271527+ type: 'ref',
15281528+ },
15291529+ },
15301530+ description:
15311531+ "A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this.",
15321532+ },
15331533+ contentLabelPref: {
15341534+ type: 'object',
15351535+ required: ['label', 'visibility'],
15361536+ properties: {
15371537+ label: {
15381538+ type: 'string',
15391539+ },
15401540+ labelerDid: {
15411541+ type: 'string',
15421542+ format: 'did',
15431543+ description:
15441544+ 'Which labeler does this preference apply to? If undefined, applies globally.',
15451545+ },
15461546+ visibility: {
15471547+ type: 'string',
15481548+ knownValues: ['ignore', 'show', 'warn', 'hide'],
11551549 },
11561156- description: {
15501550+ },
15511551+ },
15521552+ profileViewBasic: {
15531553+ type: 'object',
15541554+ required: ['did', 'handle'],
15551555+ properties: {
15561556+ did: {
11571557 type: 'string',
11581158- maxGraphemes: 256,
11591159- maxLength: 2560,
15581558+ format: 'did',
11601559 },
11611560 avatar: {
11621561 type: 'string',
11631562 format: 'uri',
11641563 },
11651165- indexedAt: {
15641564+ handle: {
15651565+ type: 'string',
15661566+ format: 'handle',
15671567+ },
15681568+ labels: {
15691569+ type: 'array',
15701570+ items: {
15711571+ ref: 'lex:com.atproto.label.defs#label',
15721572+ type: 'ref',
15731573+ },
15741574+ },
15751575+ viewer: {
15761576+ ref: 'lex:app.bsky.actor.defs#viewerState',
15771577+ type: 'ref',
15781578+ },
15791579+ createdAt: {
11661580 type: 'string',
11671581 format: 'datetime',
11681582 },
11691169- createdAt: {
15831583+ associated: {
15841584+ ref: 'lex:app.bsky.actor.defs#profileAssociated',
15851585+ type: 'ref',
15861586+ },
15871587+ displayName: {
15881588+ type: 'string',
15891589+ maxLength: 640,
15901590+ maxGraphemes: 64,
15911591+ },
15921592+ },
15931593+ },
15941594+ savedFeedsPrefV2: {
15951595+ type: 'object',
15961596+ required: ['items'],
15971597+ properties: {
15981598+ items: {
15991599+ type: 'array',
16001600+ items: {
16011601+ ref: 'lex:app.bsky.actor.defs#savedFeed',
16021602+ type: 'ref',
16031603+ },
16041604+ },
16051605+ },
16061606+ },
16071607+ profileAssociated: {
16081608+ type: 'object',
16091609+ properties: {
16101610+ chat: {
16111611+ ref: 'lex:app.bsky.actor.defs#profileAssociatedChat',
16121612+ type: 'ref',
16131613+ },
16141614+ lists: {
16151615+ type: 'integer',
16161616+ },
16171617+ labeler: {
16181618+ type: 'boolean',
16191619+ },
16201620+ feedgens: {
16211621+ type: 'integer',
16221622+ },
16231623+ starterPacks: {
16241624+ type: 'integer',
16251625+ },
16261626+ },
16271627+ },
16281628+ personalDetailsPref: {
16291629+ type: 'object',
16301630+ properties: {
16311631+ birthDate: {
11701632 type: 'string',
11711633 format: 'datetime',
16341634+ description: 'The birth date of account owner.',
16351635+ },
16361636+ },
16371637+ },
16381638+ profileViewDetailed: {
16391639+ type: 'object',
16401640+ required: ['did', 'handle'],
16411641+ properties: {
16421642+ did: {
16431643+ type: 'string',
16441644+ format: 'did',
16451645+ },
16461646+ avatar: {
16471647+ type: 'string',
16481648+ format: 'uri',
16491649+ },
16501650+ banner: {
16511651+ type: 'string',
16521652+ format: 'uri',
16531653+ },
16541654+ handle: {
16551655+ type: 'string',
16561656+ format: 'handle',
11721657 },
11731658 labels: {
11741659 type: 'array',
11751660 items: {
16611661+ ref: 'lex:com.atproto.label.defs#label',
11761662 type: 'ref',
11771177- ref: 'lex:com.atproto.label.defs#label',
16631663+ },
16641664+ },
16651665+ viewer: {
16661666+ ref: 'lex:app.bsky.actor.defs#viewerState',
16671667+ type: 'ref',
16681668+ },
16691669+ createdAt: {
16701670+ type: 'string',
16711671+ format: 'datetime',
16721672+ },
16731673+ indexedAt: {
16741674+ type: 'string',
16751675+ format: 'datetime',
16761676+ },
16771677+ associated: {
16781678+ ref: 'lex:app.bsky.actor.defs#profileAssociated',
16791679+ type: 'ref',
16801680+ },
16811681+ pinnedPost: {
16821682+ ref: 'lex:com.atproto.repo.strongRef',
16831683+ type: 'ref',
16841684+ },
16851685+ postsCount: {
16861686+ type: 'integer',
16871687+ },
16881688+ description: {
16891689+ type: 'string',
16901690+ maxLength: 2560,
16911691+ maxGraphemes: 256,
16921692+ },
16931693+ displayName: {
16941694+ type: 'string',
16951695+ maxLength: 640,
16961696+ maxGraphemes: 64,
16971697+ },
16981698+ followsCount: {
16991699+ type: 'integer',
17001700+ },
17011701+ followersCount: {
17021702+ type: 'integer',
17031703+ },
17041704+ joinedViaStarterPack: {
17051705+ ref: 'lex:app.bsky.graph.defs#starterPackViewBasic',
17061706+ type: 'ref',
17071707+ },
17081708+ },
17091709+ },
17101710+ bskyAppProgressGuide: {
17111711+ type: 'object',
17121712+ required: ['guide'],
17131713+ properties: {
17141714+ guide: {
17151715+ type: 'string',
17161716+ maxLength: 100,
17171717+ },
17181718+ },
17191719+ description:
17201720+ 'If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress.',
17211721+ },
17221722+ profileAssociatedChat: {
17231723+ type: 'object',
17241724+ required: ['allowIncoming'],
17251725+ properties: {
17261726+ allowIncoming: {
17271727+ type: 'string',
17281728+ knownValues: ['all', 'none', 'following'],
17291729+ },
17301730+ },
17311731+ },
17321732+ postInteractionSettingsPref: {
17331733+ type: 'object',
17341734+ required: [],
17351735+ properties: {
17361736+ threadgateAllowRules: {
17371737+ type: 'array',
17381738+ items: {
17391739+ refs: [
17401740+ 'lex:app.bsky.feed.threadgate#mentionRule',
17411741+ 'lex:app.bsky.feed.threadgate#followerRule',
17421742+ 'lex:app.bsky.feed.threadgate#followingRule',
17431743+ 'lex:app.bsky.feed.threadgate#listRule',
17441744+ ],
17451745+ type: 'union',
17461746+ },
17471747+ maxLength: 5,
17481748+ description:
17491749+ '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.',
17501750+ },
17511751+ postgateEmbeddingRules: {
17521752+ type: 'array',
17531753+ items: {
17541754+ refs: ['lex:app.bsky.feed.postgate#disableRule'],
17551755+ type: 'union',
11781756 },
17571757+ maxLength: 5,
17581758+ description:
17591759+ '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.',
11791760 },
11801761 },
17621762+ description:
17631763+ '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.',
11811764 },
11821765 },
11831766 },
···12401823 },
12411824 },
12421825 },
18261826+ AppBskyEmbedDefs: {
18271827+ lexicon: 1,
18281828+ id: 'app.bsky.embed.defs',
18291829+ defs: {
18301830+ aspectRatio: {
18311831+ type: 'object',
18321832+ required: ['width', 'height'],
18331833+ properties: {
18341834+ width: {
18351835+ type: 'integer',
18361836+ minimum: 1,
18371837+ },
18381838+ height: {
18391839+ type: 'integer',
18401840+ minimum: 1,
18411841+ },
18421842+ },
18431843+ description:
18441844+ 'width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit.',
18451845+ },
18461846+ },
18471847+ },
18481848+ AppBskyEmbedExternal: {
18491849+ lexicon: 1,
18501850+ id: 'app.bsky.embed.external',
18511851+ defs: {
18521852+ main: {
18531853+ type: 'object',
18541854+ required: ['external'],
18551855+ properties: {
18561856+ external: {
18571857+ ref: 'lex:app.bsky.embed.external#external',
18581858+ type: 'ref',
18591859+ },
18601860+ },
18611861+ description:
18621862+ "A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post).",
18631863+ },
18641864+ view: {
18651865+ type: 'object',
18661866+ required: ['external'],
18671867+ properties: {
18681868+ external: {
18691869+ ref: 'lex:app.bsky.embed.external#viewExternal',
18701870+ type: 'ref',
18711871+ },
18721872+ },
18731873+ },
18741874+ external: {
18751875+ type: 'object',
18761876+ required: ['uri', 'title', 'description'],
18771877+ properties: {
18781878+ uri: {
18791879+ type: 'string',
18801880+ format: 'uri',
18811881+ },
18821882+ thumb: {
18831883+ type: 'blob',
18841884+ accept: ['image/*'],
18851885+ maxSize: 1000000,
18861886+ },
18871887+ title: {
18881888+ type: 'string',
18891889+ },
18901890+ description: {
18911891+ type: 'string',
18921892+ },
18931893+ },
18941894+ },
18951895+ viewExternal: {
18961896+ type: 'object',
18971897+ required: ['uri', 'title', 'description'],
18981898+ properties: {
18991899+ uri: {
19001900+ type: 'string',
19011901+ format: 'uri',
19021902+ },
19031903+ thumb: {
19041904+ type: 'string',
19051905+ format: 'uri',
19061906+ },
19071907+ title: {
19081908+ type: 'string',
19091909+ },
19101910+ description: {
19111911+ type: 'string',
19121912+ },
19131913+ },
19141914+ },
19151915+ },
19161916+ },
19171917+ AppBskyEmbedImages: {
19181918+ lexicon: 1,
19191919+ id: 'app.bsky.embed.images',
19201920+ description: 'A set of images embedded in a Bluesky record (eg, a post).',
19211921+ defs: {
19221922+ main: {
19231923+ type: 'object',
19241924+ required: ['images'],
19251925+ properties: {
19261926+ images: {
19271927+ type: 'array',
19281928+ items: {
19291929+ ref: 'lex:app.bsky.embed.images#image',
19301930+ type: 'ref',
19311931+ },
19321932+ maxLength: 4,
19331933+ },
19341934+ },
19351935+ },
19361936+ view: {
19371937+ type: 'object',
19381938+ required: ['images'],
19391939+ properties: {
19401940+ images: {
19411941+ type: 'array',
19421942+ items: {
19431943+ ref: 'lex:app.bsky.embed.images#viewImage',
19441944+ type: 'ref',
19451945+ },
19461946+ maxLength: 4,
19471947+ },
19481948+ },
19491949+ },
19501950+ image: {
19511951+ type: 'object',
19521952+ required: ['image', 'alt'],
19531953+ properties: {
19541954+ alt: {
19551955+ type: 'string',
19561956+ description:
19571957+ 'Alt text description of the image, for accessibility.',
19581958+ },
19591959+ image: {
19601960+ type: 'blob',
19611961+ accept: ['image/*'],
19621962+ maxSize: 1000000,
19631963+ },
19641964+ aspectRatio: {
19651965+ ref: 'lex:app.bsky.embed.defs#aspectRatio',
19661966+ type: 'ref',
19671967+ },
19681968+ },
19691969+ },
19701970+ viewImage: {
19711971+ type: 'object',
19721972+ required: ['thumb', 'fullsize', 'alt'],
19731973+ properties: {
19741974+ alt: {
19751975+ type: 'string',
19761976+ description:
19771977+ 'Alt text description of the image, for accessibility.',
19781978+ },
19791979+ thumb: {
19801980+ type: 'string',
19811981+ format: 'uri',
19821982+ description:
19831983+ 'Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View.',
19841984+ },
19851985+ fullsize: {
19861986+ type: 'string',
19871987+ format: 'uri',
19881988+ description:
19891989+ '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.',
19901990+ },
19911991+ aspectRatio: {
19921992+ ref: 'lex:app.bsky.embed.defs#aspectRatio',
19931993+ type: 'ref',
19941994+ },
19951995+ },
19961996+ },
19971997+ },
19981998+ },
19991999+ AppBskyEmbedRecord: {
20002000+ lexicon: 1,
20012001+ id: 'app.bsky.embed.record',
20022002+ description:
20032003+ 'A representation of a record embedded in a Bluesky record (eg, a post). For example, a quote-post, or sharing a feed generator record.',
20042004+ defs: {
20052005+ main: {
20062006+ type: 'object',
20072007+ required: ['record'],
20082008+ properties: {
20092009+ record: {
20102010+ ref: 'lex:com.atproto.repo.strongRef',
20112011+ type: 'ref',
20122012+ },
20132013+ },
20142014+ },
20152015+ view: {
20162016+ type: 'object',
20172017+ required: ['record'],
20182018+ properties: {
20192019+ record: {
20202020+ refs: [
20212021+ 'lex:app.bsky.embed.record#viewRecord',
20222022+ 'lex:app.bsky.embed.record#viewNotFound',
20232023+ 'lex:app.bsky.embed.record#viewBlocked',
20242024+ 'lex:app.bsky.embed.record#viewDetached',
20252025+ 'lex:app.bsky.feed.defs#generatorView',
20262026+ 'lex:app.bsky.graph.defs#listView',
20272027+ 'lex:app.bsky.labeler.defs#labelerView',
20282028+ 'lex:app.bsky.graph.defs#starterPackViewBasic',
20292029+ ],
20302030+ type: 'union',
20312031+ },
20322032+ },
20332033+ },
20342034+ viewRecord: {
20352035+ type: 'object',
20362036+ required: ['uri', 'cid', 'author', 'value', 'indexedAt'],
20372037+ properties: {
20382038+ cid: {
20392039+ type: 'string',
20402040+ format: 'cid',
20412041+ },
20422042+ uri: {
20432043+ type: 'string',
20442044+ format: 'at-uri',
20452045+ },
20462046+ value: {
20472047+ type: 'unknown',
20482048+ description: 'The record data itself.',
20492049+ },
20502050+ author: {
20512051+ ref: 'lex:app.bsky.actor.defs#profileViewBasic',
20522052+ type: 'ref',
20532053+ },
20542054+ embeds: {
20552055+ type: 'array',
20562056+ items: {
20572057+ refs: [
20582058+ 'lex:app.bsky.embed.images#view',
20592059+ 'lex:app.bsky.embed.video#view',
20602060+ 'lex:app.bsky.embed.external#view',
20612061+ 'lex:app.bsky.embed.record#view',
20622062+ 'lex:app.bsky.embed.recordWithMedia#view',
20632063+ ],
20642064+ type: 'union',
20652065+ },
20662066+ },
20672067+ labels: {
20682068+ type: 'array',
20692069+ items: {
20702070+ ref: 'lex:com.atproto.label.defs#label',
20712071+ type: 'ref',
20722072+ },
20732073+ },
20742074+ indexedAt: {
20752075+ type: 'string',
20762076+ format: 'datetime',
20772077+ },
20782078+ likeCount: {
20792079+ type: 'integer',
20802080+ },
20812081+ quoteCount: {
20822082+ type: 'integer',
20832083+ },
20842084+ replyCount: {
20852085+ type: 'integer',
20862086+ },
20872087+ repostCount: {
20882088+ type: 'integer',
20892089+ },
20902090+ },
20912091+ },
20922092+ viewBlocked: {
20932093+ type: 'object',
20942094+ required: ['uri', 'blocked', 'author'],
20952095+ properties: {
20962096+ uri: {
20972097+ type: 'string',
20982098+ format: 'at-uri',
20992099+ },
21002100+ author: {
21012101+ ref: 'lex:app.bsky.feed.defs#blockedAuthor',
21022102+ type: 'ref',
21032103+ },
21042104+ blocked: {
21052105+ type: 'boolean',
21062106+ const: true,
21072107+ },
21082108+ },
21092109+ },
21102110+ viewDetached: {
21112111+ type: 'object',
21122112+ required: ['uri', 'detached'],
21132113+ properties: {
21142114+ uri: {
21152115+ type: 'string',
21162116+ format: 'at-uri',
21172117+ },
21182118+ detached: {
21192119+ type: 'boolean',
21202120+ const: true,
21212121+ },
21222122+ },
21232123+ },
21242124+ viewNotFound: {
21252125+ type: 'object',
21262126+ required: ['uri', 'notFound'],
21272127+ properties: {
21282128+ uri: {
21292129+ type: 'string',
21302130+ format: 'at-uri',
21312131+ },
21322132+ notFound: {
21332133+ type: 'boolean',
21342134+ const: true,
21352135+ },
21362136+ },
21372137+ },
21382138+ },
21392139+ },
21402140+ AppBskyEmbedRecordWithMedia: {
21412141+ lexicon: 1,
21422142+ id: 'app.bsky.embed.recordWithMedia',
21432143+ description:
21442144+ '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.',
21452145+ defs: {
21462146+ main: {
21472147+ type: 'object',
21482148+ required: ['record', 'media'],
21492149+ properties: {
21502150+ media: {
21512151+ refs: [
21522152+ 'lex:app.bsky.embed.images',
21532153+ 'lex:app.bsky.embed.video',
21542154+ 'lex:app.bsky.embed.external',
21552155+ ],
21562156+ type: 'union',
21572157+ },
21582158+ record: {
21592159+ ref: 'lex:app.bsky.embed.record',
21602160+ type: 'ref',
21612161+ },
21622162+ },
21632163+ },
21642164+ view: {
21652165+ type: 'object',
21662166+ required: ['record', 'media'],
21672167+ properties: {
21682168+ media: {
21692169+ refs: [
21702170+ 'lex:app.bsky.embed.images#view',
21712171+ 'lex:app.bsky.embed.video#view',
21722172+ 'lex:app.bsky.embed.external#view',
21732173+ ],
21742174+ type: 'union',
21752175+ },
21762176+ record: {
21772177+ ref: 'lex:app.bsky.embed.record#view',
21782178+ type: 'ref',
21792179+ },
21802180+ },
21812181+ },
21822182+ },
21832183+ },
21842184+ AppBskyEmbedVideo: {
21852185+ lexicon: 1,
21862186+ id: 'app.bsky.embed.video',
21872187+ description: 'A video embedded in a Bluesky record (eg, a post).',
21882188+ defs: {
21892189+ main: {
21902190+ type: 'object',
21912191+ required: ['video'],
21922192+ properties: {
21932193+ alt: {
21942194+ type: 'string',
21952195+ maxLength: 10000,
21962196+ description:
21972197+ 'Alt text description of the video, for accessibility.',
21982198+ maxGraphemes: 1000,
21992199+ },
22002200+ video: {
22012201+ type: 'blob',
22022202+ accept: ['video/mp4'],
22032203+ maxSize: 50000000,
22042204+ },
22052205+ captions: {
22062206+ type: 'array',
22072207+ items: {
22082208+ ref: 'lex:app.bsky.embed.video#caption',
22092209+ type: 'ref',
22102210+ },
22112211+ maxLength: 20,
22122212+ },
22132213+ aspectRatio: {
22142214+ ref: 'lex:app.bsky.embed.defs#aspectRatio',
22152215+ type: 'ref',
22162216+ },
22172217+ },
22182218+ },
22192219+ view: {
22202220+ type: 'object',
22212221+ required: ['cid', 'playlist'],
22222222+ properties: {
22232223+ alt: {
22242224+ type: 'string',
22252225+ maxLength: 10000,
22262226+ maxGraphemes: 1000,
22272227+ },
22282228+ cid: {
22292229+ type: 'string',
22302230+ format: 'cid',
22312231+ },
22322232+ playlist: {
22332233+ type: 'string',
22342234+ format: 'uri',
22352235+ },
22362236+ thumbnail: {
22372237+ type: 'string',
22382238+ format: 'uri',
22392239+ },
22402240+ aspectRatio: {
22412241+ ref: 'lex:app.bsky.embed.defs#aspectRatio',
22422242+ type: 'ref',
22432243+ },
22442244+ },
22452245+ },
22462246+ caption: {
22472247+ type: 'object',
22482248+ required: ['lang', 'file'],
22492249+ properties: {
22502250+ file: {
22512251+ type: 'blob',
22522252+ accept: ['text/vtt'],
22532253+ maxSize: 20000,
22542254+ },
22552255+ lang: {
22562256+ type: 'string',
22572257+ format: 'language',
22582258+ },
22592259+ },
22602260+ },
22612261+ },
22622262+ },
22632263+ AppBskyFeedDefs: {
22642264+ lexicon: 1,
22652265+ id: 'app.bsky.feed.defs',
22662266+ defs: {
22672267+ postView: {
22682268+ type: 'object',
22692269+ required: ['uri', 'cid', 'author', 'record', 'indexedAt'],
22702270+ properties: {
22712271+ cid: {
22722272+ type: 'string',
22732273+ format: 'cid',
22742274+ },
22752275+ uri: {
22762276+ type: 'string',
22772277+ format: 'at-uri',
22782278+ },
22792279+ embed: {
22802280+ refs: [
22812281+ 'lex:app.bsky.embed.images#view',
22822282+ 'lex:app.bsky.embed.video#view',
22832283+ 'lex:app.bsky.embed.external#view',
22842284+ 'lex:app.bsky.embed.record#view',
22852285+ 'lex:app.bsky.embed.recordWithMedia#view',
22862286+ ],
22872287+ type: 'union',
22882288+ },
22892289+ author: {
22902290+ ref: 'lex:app.bsky.actor.defs#profileViewBasic',
22912291+ type: 'ref',
22922292+ },
22932293+ labels: {
22942294+ type: 'array',
22952295+ items: {
22962296+ ref: 'lex:com.atproto.label.defs#label',
22972297+ type: 'ref',
22982298+ },
22992299+ },
23002300+ record: {
23012301+ type: 'unknown',
23022302+ },
23032303+ viewer: {
23042304+ ref: 'lex:app.bsky.feed.defs#viewerState',
23052305+ type: 'ref',
23062306+ },
23072307+ indexedAt: {
23082308+ type: 'string',
23092309+ format: 'datetime',
23102310+ },
23112311+ likeCount: {
23122312+ type: 'integer',
23132313+ },
23142314+ quoteCount: {
23152315+ type: 'integer',
23162316+ },
23172317+ replyCount: {
23182318+ type: 'integer',
23192319+ },
23202320+ threadgate: {
23212321+ ref: 'lex:app.bsky.feed.defs#threadgateView',
23222322+ type: 'ref',
23232323+ },
23242324+ repostCount: {
23252325+ type: 'integer',
23262326+ },
23272327+ },
23282328+ },
23292329+ replyRef: {
23302330+ type: 'object',
23312331+ required: ['root', 'parent'],
23322332+ properties: {
23332333+ root: {
23342334+ refs: [
23352335+ 'lex:app.bsky.feed.defs#postView',
23362336+ 'lex:app.bsky.feed.defs#notFoundPost',
23372337+ 'lex:app.bsky.feed.defs#blockedPost',
23382338+ ],
23392339+ type: 'union',
23402340+ },
23412341+ parent: {
23422342+ refs: [
23432343+ 'lex:app.bsky.feed.defs#postView',
23442344+ 'lex:app.bsky.feed.defs#notFoundPost',
23452345+ 'lex:app.bsky.feed.defs#blockedPost',
23462346+ ],
23472347+ type: 'union',
23482348+ },
23492349+ grandparentAuthor: {
23502350+ ref: 'lex:app.bsky.actor.defs#profileViewBasic',
23512351+ type: 'ref',
23522352+ description:
23532353+ 'When parent is a reply to another post, this is the author of that post.',
23542354+ },
23552355+ },
23562356+ },
23572357+ reasonPin: {
23582358+ type: 'object',
23592359+ properties: {},
23602360+ },
23612361+ blockedPost: {
23622362+ type: 'object',
23632363+ required: ['uri', 'blocked', 'author'],
23642364+ properties: {
23652365+ uri: {
23662366+ type: 'string',
23672367+ format: 'at-uri',
23682368+ },
23692369+ author: {
23702370+ ref: 'lex:app.bsky.feed.defs#blockedAuthor',
23712371+ type: 'ref',
23722372+ },
23732373+ blocked: {
23742374+ type: 'boolean',
23752375+ const: true,
23762376+ },
23772377+ },
23782378+ },
23792379+ interaction: {
23802380+ type: 'object',
23812381+ properties: {
23822382+ item: {
23832383+ type: 'string',
23842384+ format: 'at-uri',
23852385+ },
23862386+ event: {
23872387+ type: 'string',
23882388+ knownValues: [
23892389+ 'app.bsky.feed.defs#requestLess',
23902390+ 'app.bsky.feed.defs#requestMore',
23912391+ 'app.bsky.feed.defs#clickthroughItem',
23922392+ 'app.bsky.feed.defs#clickthroughAuthor',
23932393+ 'app.bsky.feed.defs#clickthroughReposter',
23942394+ 'app.bsky.feed.defs#clickthroughEmbed',
23952395+ 'app.bsky.feed.defs#interactionSeen',
23962396+ 'app.bsky.feed.defs#interactionLike',
23972397+ 'app.bsky.feed.defs#interactionRepost',
23982398+ 'app.bsky.feed.defs#interactionReply',
23992399+ 'app.bsky.feed.defs#interactionQuote',
24002400+ 'app.bsky.feed.defs#interactionShare',
24012401+ ],
24022402+ },
24032403+ feedContext: {
24042404+ type: 'string',
24052405+ maxLength: 2000,
24062406+ description:
24072407+ 'Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton.',
24082408+ },
24092409+ },
24102410+ },
24112411+ requestLess: {
24122412+ type: 'token',
24132413+ description:
24142414+ 'Request that less content like the given feed item be shown in the feed',
24152415+ },
24162416+ requestMore: {
24172417+ type: 'token',
24182418+ description:
24192419+ 'Request that more content like the given feed item be shown in the feed',
24202420+ },
24212421+ viewerState: {
24222422+ type: 'object',
24232423+ properties: {
24242424+ like: {
24252425+ type: 'string',
24262426+ format: 'at-uri',
24272427+ },
24282428+ pinned: {
24292429+ type: 'boolean',
24302430+ },
24312431+ repost: {
24322432+ type: 'string',
24332433+ format: 'at-uri',
24342434+ },
24352435+ threadMuted: {
24362436+ type: 'boolean',
24372437+ },
24382438+ replyDisabled: {
24392439+ type: 'boolean',
24402440+ },
24412441+ embeddingDisabled: {
24422442+ type: 'boolean',
24432443+ },
24442444+ },
24452445+ description:
24462446+ "Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.",
24472447+ },
24482448+ feedViewPost: {
24492449+ type: 'object',
24502450+ required: ['post'],
24512451+ properties: {
24522452+ post: {
24532453+ ref: 'lex:app.bsky.feed.defs#postView',
24542454+ type: 'ref',
24552455+ },
24562456+ reply: {
24572457+ ref: 'lex:app.bsky.feed.defs#replyRef',
24582458+ type: 'ref',
24592459+ },
24602460+ reason: {
24612461+ refs: [
24622462+ 'lex:app.bsky.feed.defs#reasonRepost',
24632463+ 'lex:app.bsky.feed.defs#reasonPin',
24642464+ ],
24652465+ type: 'union',
24662466+ },
24672467+ feedContext: {
24682468+ type: 'string',
24692469+ maxLength: 2000,
24702470+ description:
24712471+ 'Context provided by feed generator that may be passed back alongside interactions.',
24722472+ },
24732473+ },
24742474+ },
24752475+ notFoundPost: {
24762476+ type: 'object',
24772477+ required: ['uri', 'notFound'],
24782478+ properties: {
24792479+ uri: {
24802480+ type: 'string',
24812481+ format: 'at-uri',
24822482+ },
24832483+ notFound: {
24842484+ type: 'boolean',
24852485+ const: true,
24862486+ },
24872487+ },
24882488+ },
24892489+ reasonRepost: {
24902490+ type: 'object',
24912491+ required: ['by', 'indexedAt'],
24922492+ properties: {
24932493+ by: {
24942494+ ref: 'lex:app.bsky.actor.defs#profileViewBasic',
24952495+ type: 'ref',
24962496+ },
24972497+ indexedAt: {
24982498+ type: 'string',
24992499+ format: 'datetime',
25002500+ },
25012501+ },
25022502+ },
25032503+ blockedAuthor: {
25042504+ type: 'object',
25052505+ required: ['did'],
25062506+ properties: {
25072507+ did: {
25082508+ type: 'string',
25092509+ format: 'did',
25102510+ },
25112511+ viewer: {
25122512+ ref: 'lex:app.bsky.actor.defs#viewerState',
25132513+ type: 'ref',
25142514+ },
25152515+ },
25162516+ },
25172517+ generatorView: {
25182518+ type: 'object',
25192519+ required: ['uri', 'cid', 'did', 'creator', 'displayName', 'indexedAt'],
25202520+ properties: {
25212521+ cid: {
25222522+ type: 'string',
25232523+ format: 'cid',
25242524+ },
25252525+ did: {
25262526+ type: 'string',
25272527+ format: 'did',
25282528+ },
25292529+ uri: {
25302530+ type: 'string',
25312531+ format: 'at-uri',
25322532+ },
25332533+ avatar: {
25342534+ type: 'string',
25352535+ format: 'uri',
25362536+ },
25372537+ labels: {
25382538+ type: 'array',
25392539+ items: {
25402540+ ref: 'lex:com.atproto.label.defs#label',
25412541+ type: 'ref',
25422542+ },
25432543+ },
25442544+ viewer: {
25452545+ ref: 'lex:app.bsky.feed.defs#generatorViewerState',
25462546+ type: 'ref',
25472547+ },
25482548+ creator: {
25492549+ ref: 'lex:app.bsky.actor.defs#profileView',
25502550+ type: 'ref',
25512551+ },
25522552+ indexedAt: {
25532553+ type: 'string',
25542554+ format: 'datetime',
25552555+ },
25562556+ likeCount: {
25572557+ type: 'integer',
25582558+ minimum: 0,
25592559+ },
25602560+ contentMode: {
25612561+ type: 'string',
25622562+ knownValues: [
25632563+ 'app.bsky.feed.defs#contentModeUnspecified',
25642564+ 'app.bsky.feed.defs#contentModeVideo',
25652565+ ],
25662566+ },
25672567+ description: {
25682568+ type: 'string',
25692569+ maxLength: 3000,
25702570+ maxGraphemes: 300,
25712571+ },
25722572+ displayName: {
25732573+ type: 'string',
25742574+ },
25752575+ descriptionFacets: {
25762576+ type: 'array',
25772577+ items: {
25782578+ ref: 'lex:app.bsky.richtext.facet',
25792579+ type: 'ref',
25802580+ },
25812581+ },
25822582+ acceptsInteractions: {
25832583+ type: 'boolean',
25842584+ },
25852585+ },
25862586+ },
25872587+ threadContext: {
25882588+ type: 'object',
25892589+ properties: {
25902590+ rootAuthorLike: {
25912591+ type: 'string',
25922592+ format: 'at-uri',
25932593+ },
25942594+ },
25952595+ description:
25962596+ 'Metadata about this post within the context of the thread it is in.',
25972597+ },
25982598+ threadViewPost: {
25992599+ type: 'object',
26002600+ required: ['post'],
26012601+ properties: {
26022602+ post: {
26032603+ ref: 'lex:app.bsky.feed.defs#postView',
26042604+ type: 'ref',
26052605+ },
26062606+ parent: {
26072607+ refs: [
26082608+ 'lex:app.bsky.feed.defs#threadViewPost',
26092609+ 'lex:app.bsky.feed.defs#notFoundPost',
26102610+ 'lex:app.bsky.feed.defs#blockedPost',
26112611+ ],
26122612+ type: 'union',
26132613+ },
26142614+ replies: {
26152615+ type: 'array',
26162616+ items: {
26172617+ refs: [
26182618+ 'lex:app.bsky.feed.defs#threadViewPost',
26192619+ 'lex:app.bsky.feed.defs#notFoundPost',
26202620+ 'lex:app.bsky.feed.defs#blockedPost',
26212621+ ],
26222622+ type: 'union',
26232623+ },
26242624+ },
26252625+ threadContext: {
26262626+ ref: 'lex:app.bsky.feed.defs#threadContext',
26272627+ type: 'ref',
26282628+ },
26292629+ },
26302630+ },
26312631+ threadgateView: {
26322632+ type: 'object',
26332633+ properties: {
26342634+ cid: {
26352635+ type: 'string',
26362636+ format: 'cid',
26372637+ },
26382638+ uri: {
26392639+ type: 'string',
26402640+ format: 'at-uri',
26412641+ },
26422642+ lists: {
26432643+ type: 'array',
26442644+ items: {
26452645+ ref: 'lex:app.bsky.graph.defs#listViewBasic',
26462646+ type: 'ref',
26472647+ },
26482648+ },
26492649+ record: {
26502650+ type: 'unknown',
26512651+ },
26522652+ },
26532653+ },
26542654+ interactionLike: {
26552655+ type: 'token',
26562656+ description: 'User liked the feed item',
26572657+ },
26582658+ interactionSeen: {
26592659+ type: 'token',
26602660+ description: 'Feed item was seen by user',
26612661+ },
26622662+ clickthroughItem: {
26632663+ type: 'token',
26642664+ description: 'User clicked through to the feed item',
26652665+ },
26662666+ contentModeVideo: {
26672667+ type: 'token',
26682668+ description:
26692669+ 'Declares the feed generator returns posts containing app.bsky.embed.video embeds.',
26702670+ },
26712671+ interactionQuote: {
26722672+ type: 'token',
26732673+ description: 'User quoted the feed item',
26742674+ },
26752675+ interactionReply: {
26762676+ type: 'token',
26772677+ description: 'User replied to the feed item',
26782678+ },
26792679+ interactionShare: {
26802680+ type: 'token',
26812681+ description: 'User shared the feed item',
26822682+ },
26832683+ skeletonFeedPost: {
26842684+ type: 'object',
26852685+ required: ['post'],
26862686+ properties: {
26872687+ post: {
26882688+ type: 'string',
26892689+ format: 'at-uri',
26902690+ },
26912691+ reason: {
26922692+ refs: [
26932693+ 'lex:app.bsky.feed.defs#skeletonReasonRepost',
26942694+ 'lex:app.bsky.feed.defs#skeletonReasonPin',
26952695+ ],
26962696+ type: 'union',
26972697+ },
26982698+ feedContext: {
26992699+ type: 'string',
27002700+ maxLength: 2000,
27012701+ description:
27022702+ 'Context that will be passed through to client and may be passed to feed generator back alongside interactions.',
27032703+ },
27042704+ },
27052705+ },
27062706+ clickthroughEmbed: {
27072707+ type: 'token',
27082708+ description:
27092709+ 'User clicked through to the embedded content of the feed item',
27102710+ },
27112711+ interactionRepost: {
27122712+ type: 'token',
27132713+ description: 'User reposted the feed item',
27142714+ },
27152715+ skeletonReasonPin: {
27162716+ type: 'object',
27172717+ properties: {},
27182718+ },
27192719+ clickthroughAuthor: {
27202720+ type: 'token',
27212721+ description: 'User clicked through to the author of the feed item',
27222722+ },
27232723+ clickthroughReposter: {
27242724+ type: 'token',
27252725+ description: 'User clicked through to the reposter of the feed item',
27262726+ },
27272727+ generatorViewerState: {
27282728+ type: 'object',
27292729+ properties: {
27302730+ like: {
27312731+ type: 'string',
27322732+ format: 'at-uri',
27332733+ },
27342734+ },
27352735+ },
27362736+ skeletonReasonRepost: {
27372737+ type: 'object',
27382738+ required: ['repost'],
27392739+ properties: {
27402740+ repost: {
27412741+ type: 'string',
27422742+ format: 'at-uri',
27432743+ },
27442744+ },
27452745+ },
27462746+ contentModeUnspecified: {
27472747+ type: 'token',
27482748+ description: 'Declares the feed generator returns any types of posts.',
27492749+ },
27502750+ },
27512751+ },
27522752+ AppBskyFeedPostgate: {
27532753+ lexicon: 1,
27542754+ id: 'app.bsky.feed.postgate',
27552755+ defs: {
27562756+ main: {
27572757+ key: 'tid',
27582758+ type: 'record',
27592759+ record: {
27602760+ type: 'object',
27612761+ required: ['post', 'createdAt'],
27622762+ properties: {
27632763+ post: {
27642764+ type: 'string',
27652765+ format: 'at-uri',
27662766+ description: 'Reference (AT-URI) to the post record.',
27672767+ },
27682768+ createdAt: {
27692769+ type: 'string',
27702770+ format: 'datetime',
27712771+ },
27722772+ embeddingRules: {
27732773+ type: 'array',
27742774+ items: {
27752775+ refs: ['lex:app.bsky.feed.postgate#disableRule'],
27762776+ type: 'union',
27772777+ },
27782778+ maxLength: 5,
27792779+ description:
27802780+ '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.',
27812781+ },
27822782+ detachedEmbeddingUris: {
27832783+ type: 'array',
27842784+ items: {
27852785+ type: 'string',
27862786+ format: 'at-uri',
27872787+ },
27882788+ maxLength: 50,
27892789+ description:
27902790+ 'List of AT-URIs embedding this post that the author has detached from.',
27912791+ },
27922792+ },
27932793+ },
27942794+ description:
27952795+ '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.',
27962796+ },
27972797+ disableRule: {
27982798+ type: 'object',
27992799+ properties: {},
28002800+ description: 'Disables embedding of this post.',
28012801+ },
28022802+ },
28032803+ },
28042804+ AppBskyFeedThreadgate: {
28052805+ lexicon: 1,
28062806+ id: 'app.bsky.feed.threadgate',
28072807+ defs: {
28082808+ main: {
28092809+ key: 'tid',
28102810+ type: 'record',
28112811+ record: {
28122812+ type: 'object',
28132813+ required: ['post', 'createdAt'],
28142814+ properties: {
28152815+ post: {
28162816+ type: 'string',
28172817+ format: 'at-uri',
28182818+ description: 'Reference (AT-URI) to the post record.',
28192819+ },
28202820+ allow: {
28212821+ type: 'array',
28222822+ items: {
28232823+ refs: [
28242824+ 'lex:app.bsky.feed.threadgate#mentionRule',
28252825+ 'lex:app.bsky.feed.threadgate#followerRule',
28262826+ 'lex:app.bsky.feed.threadgate#followingRule',
28272827+ 'lex:app.bsky.feed.threadgate#listRule',
28282828+ ],
28292829+ type: 'union',
28302830+ },
28312831+ maxLength: 5,
28322832+ description:
28332833+ '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.',
28342834+ },
28352835+ createdAt: {
28362836+ type: 'string',
28372837+ format: 'datetime',
28382838+ },
28392839+ hiddenReplies: {
28402840+ type: 'array',
28412841+ items: {
28422842+ type: 'string',
28432843+ format: 'at-uri',
28442844+ },
28452845+ maxLength: 50,
28462846+ description: 'List of hidden reply URIs.',
28472847+ },
28482848+ },
28492849+ },
28502850+ description:
28512851+ "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.",
28522852+ },
28532853+ listRule: {
28542854+ type: 'object',
28552855+ required: ['list'],
28562856+ properties: {
28572857+ list: {
28582858+ type: 'string',
28592859+ format: 'at-uri',
28602860+ },
28612861+ },
28622862+ description: 'Allow replies from actors on a list.',
28632863+ },
28642864+ mentionRule: {
28652865+ type: 'object',
28662866+ properties: {},
28672867+ description: 'Allow replies from actors mentioned in your post.',
28682868+ },
28692869+ followerRule: {
28702870+ type: 'object',
28712871+ properties: {},
28722872+ description: 'Allow replies from actors who follow you.',
28732873+ },
28742874+ followingRule: {
28752875+ type: 'object',
28762876+ properties: {},
28772877+ description: 'Allow replies from actors you follow.',
28782878+ },
28792879+ },
28802880+ },
28812881+ AppBskyGraphDefs: {
28822882+ lexicon: 1,
28832883+ id: 'app.bsky.graph.defs',
28842884+ defs: {
28852885+ modlist: {
28862886+ type: 'token',
28872887+ description:
28882888+ 'A list of actors to apply an aggregate moderation action (mute/block) on.',
28892889+ },
28902890+ listView: {
28912891+ type: 'object',
28922892+ required: ['uri', 'cid', 'creator', 'name', 'purpose', 'indexedAt'],
28932893+ properties: {
28942894+ cid: {
28952895+ type: 'string',
28962896+ format: 'cid',
28972897+ },
28982898+ uri: {
28992899+ type: 'string',
29002900+ format: 'at-uri',
29012901+ },
29022902+ name: {
29032903+ type: 'string',
29042904+ maxLength: 64,
29052905+ minLength: 1,
29062906+ },
29072907+ avatar: {
29082908+ type: 'string',
29092909+ format: 'uri',
29102910+ },
29112911+ labels: {
29122912+ type: 'array',
29132913+ items: {
29142914+ ref: 'lex:com.atproto.label.defs#label',
29152915+ type: 'ref',
29162916+ },
29172917+ },
29182918+ viewer: {
29192919+ ref: 'lex:app.bsky.graph.defs#listViewerState',
29202920+ type: 'ref',
29212921+ },
29222922+ creator: {
29232923+ ref: 'lex:app.bsky.actor.defs#profileView',
29242924+ type: 'ref',
29252925+ },
29262926+ purpose: {
29272927+ ref: 'lex:app.bsky.graph.defs#listPurpose',
29282928+ type: 'ref',
29292929+ },
29302930+ indexedAt: {
29312931+ type: 'string',
29322932+ format: 'datetime',
29332933+ },
29342934+ description: {
29352935+ type: 'string',
29362936+ maxLength: 3000,
29372937+ maxGraphemes: 300,
29382938+ },
29392939+ listItemCount: {
29402940+ type: 'integer',
29412941+ minimum: 0,
29422942+ },
29432943+ descriptionFacets: {
29442944+ type: 'array',
29452945+ items: {
29462946+ ref: 'lex:app.bsky.richtext.facet',
29472947+ type: 'ref',
29482948+ },
29492949+ },
29502950+ },
29512951+ },
29522952+ curatelist: {
29532953+ type: 'token',
29542954+ description:
29552955+ 'A list of actors used for curation purposes such as list feeds or interaction gating.',
29562956+ },
29572957+ listPurpose: {
29582958+ type: 'string',
29592959+ knownValues: [
29602960+ 'app.bsky.graph.defs#modlist',
29612961+ 'app.bsky.graph.defs#curatelist',
29622962+ 'app.bsky.graph.defs#referencelist',
29632963+ ],
29642964+ },
29652965+ listItemView: {
29662966+ type: 'object',
29672967+ required: ['uri', 'subject'],
29682968+ properties: {
29692969+ uri: {
29702970+ type: 'string',
29712971+ format: 'at-uri',
29722972+ },
29732973+ subject: {
29742974+ ref: 'lex:app.bsky.actor.defs#profileView',
29752975+ type: 'ref',
29762976+ },
29772977+ },
29782978+ },
29792979+ relationship: {
29802980+ type: 'object',
29812981+ required: ['did'],
29822982+ properties: {
29832983+ did: {
29842984+ type: 'string',
29852985+ format: 'did',
29862986+ },
29872987+ following: {
29882988+ type: 'string',
29892989+ format: 'at-uri',
29902990+ description:
29912991+ 'if the actor follows this DID, this is the AT-URI of the follow record',
29922992+ },
29932993+ followedBy: {
29942994+ type: 'string',
29952995+ format: 'at-uri',
29962996+ description:
29972997+ 'if the actor is followed by this DID, contains the AT-URI of the follow record',
29982998+ },
29992999+ },
30003000+ description:
30013001+ 'lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object)',
30023002+ },
30033003+ listViewBasic: {
30043004+ type: 'object',
30053005+ required: ['uri', 'cid', 'name', 'purpose'],
30063006+ properties: {
30073007+ cid: {
30083008+ type: 'string',
30093009+ format: 'cid',
30103010+ },
30113011+ uri: {
30123012+ type: 'string',
30133013+ format: 'at-uri',
30143014+ },
30153015+ name: {
30163016+ type: 'string',
30173017+ maxLength: 64,
30183018+ minLength: 1,
30193019+ },
30203020+ avatar: {
30213021+ type: 'string',
30223022+ format: 'uri',
30233023+ },
30243024+ labels: {
30253025+ type: 'array',
30263026+ items: {
30273027+ ref: 'lex:com.atproto.label.defs#label',
30283028+ type: 'ref',
30293029+ },
30303030+ },
30313031+ viewer: {
30323032+ ref: 'lex:app.bsky.graph.defs#listViewerState',
30333033+ type: 'ref',
30343034+ },
30353035+ purpose: {
30363036+ ref: 'lex:app.bsky.graph.defs#listPurpose',
30373037+ type: 'ref',
30383038+ },
30393039+ indexedAt: {
30403040+ type: 'string',
30413041+ format: 'datetime',
30423042+ },
30433043+ listItemCount: {
30443044+ type: 'integer',
30453045+ minimum: 0,
30463046+ },
30473047+ },
30483048+ },
30493049+ notFoundActor: {
30503050+ type: 'object',
30513051+ required: ['actor', 'notFound'],
30523052+ properties: {
30533053+ actor: {
30543054+ type: 'string',
30553055+ format: 'at-identifier',
30563056+ },
30573057+ notFound: {
30583058+ type: 'boolean',
30593059+ const: true,
30603060+ },
30613061+ },
30623062+ description: 'indicates that a handle or DID could not be resolved',
30633063+ },
30643064+ referencelist: {
30653065+ type: 'token',
30663066+ description:
30673067+ 'A list of actors used for only for reference purposes such as within a starter pack.',
30683068+ },
30693069+ listViewerState: {
30703070+ type: 'object',
30713071+ properties: {
30723072+ muted: {
30733073+ type: 'boolean',
30743074+ },
30753075+ blocked: {
30763076+ type: 'string',
30773077+ format: 'at-uri',
30783078+ },
30793079+ },
30803080+ },
30813081+ starterPackView: {
30823082+ type: 'object',
30833083+ required: ['uri', 'cid', 'record', 'creator', 'indexedAt'],
30843084+ properties: {
30853085+ cid: {
30863086+ type: 'string',
30873087+ format: 'cid',
30883088+ },
30893089+ uri: {
30903090+ type: 'string',
30913091+ format: 'at-uri',
30923092+ },
30933093+ list: {
30943094+ ref: 'lex:app.bsky.graph.defs#listViewBasic',
30953095+ type: 'ref',
30963096+ },
30973097+ feeds: {
30983098+ type: 'array',
30993099+ items: {
31003100+ ref: 'lex:app.bsky.feed.defs#generatorView',
31013101+ type: 'ref',
31023102+ },
31033103+ maxLength: 3,
31043104+ },
31053105+ labels: {
31063106+ type: 'array',
31073107+ items: {
31083108+ ref: 'lex:com.atproto.label.defs#label',
31093109+ type: 'ref',
31103110+ },
31113111+ },
31123112+ record: {
31133113+ type: 'unknown',
31143114+ },
31153115+ creator: {
31163116+ ref: 'lex:app.bsky.actor.defs#profileViewBasic',
31173117+ type: 'ref',
31183118+ },
31193119+ indexedAt: {
31203120+ type: 'string',
31213121+ format: 'datetime',
31223122+ },
31233123+ joinedWeekCount: {
31243124+ type: 'integer',
31253125+ minimum: 0,
31263126+ },
31273127+ listItemsSample: {
31283128+ type: 'array',
31293129+ items: {
31303130+ ref: 'lex:app.bsky.graph.defs#listItemView',
31313131+ type: 'ref',
31323132+ },
31333133+ maxLength: 12,
31343134+ },
31353135+ joinedAllTimeCount: {
31363136+ type: 'integer',
31373137+ minimum: 0,
31383138+ },
31393139+ },
31403140+ },
31413141+ starterPackViewBasic: {
31423142+ type: 'object',
31433143+ required: ['uri', 'cid', 'record', 'creator', 'indexedAt'],
31443144+ properties: {
31453145+ cid: {
31463146+ type: 'string',
31473147+ format: 'cid',
31483148+ },
31493149+ uri: {
31503150+ type: 'string',
31513151+ format: 'at-uri',
31523152+ },
31533153+ labels: {
31543154+ type: 'array',
31553155+ items: {
31563156+ ref: 'lex:com.atproto.label.defs#label',
31573157+ type: 'ref',
31583158+ },
31593159+ },
31603160+ record: {
31613161+ type: 'unknown',
31623162+ },
31633163+ creator: {
31643164+ ref: 'lex:app.bsky.actor.defs#profileViewBasic',
31653165+ type: 'ref',
31663166+ },
31673167+ indexedAt: {
31683168+ type: 'string',
31693169+ format: 'datetime',
31703170+ },
31713171+ listItemCount: {
31723172+ type: 'integer',
31733173+ minimum: 0,
31743174+ },
31753175+ joinedWeekCount: {
31763176+ type: 'integer',
31773177+ minimum: 0,
31783178+ },
31793179+ joinedAllTimeCount: {
31803180+ type: 'integer',
31813181+ minimum: 0,
31823182+ },
31833183+ },
31843184+ },
31853185+ },
31863186+ },
31873187+ AppBskyLabelerDefs: {
31883188+ lexicon: 1,
31893189+ id: 'app.bsky.labeler.defs',
31903190+ defs: {
31913191+ labelerView: {
31923192+ type: 'object',
31933193+ required: ['uri', 'cid', 'creator', 'indexedAt'],
31943194+ properties: {
31953195+ cid: {
31963196+ type: 'string',
31973197+ format: 'cid',
31983198+ },
31993199+ uri: {
32003200+ type: 'string',
32013201+ format: 'at-uri',
32023202+ },
32033203+ labels: {
32043204+ type: 'array',
32053205+ items: {
32063206+ ref: 'lex:com.atproto.label.defs#label',
32073207+ type: 'ref',
32083208+ },
32093209+ },
32103210+ viewer: {
32113211+ ref: 'lex:app.bsky.labeler.defs#labelerViewerState',
32123212+ type: 'ref',
32133213+ },
32143214+ creator: {
32153215+ ref: 'lex:app.bsky.actor.defs#profileView',
32163216+ type: 'ref',
32173217+ },
32183218+ indexedAt: {
32193219+ type: 'string',
32203220+ format: 'datetime',
32213221+ },
32223222+ likeCount: {
32233223+ type: 'integer',
32243224+ minimum: 0,
32253225+ },
32263226+ },
32273227+ },
32283228+ labelerPolicies: {
32293229+ type: 'object',
32303230+ required: ['labelValues'],
32313231+ properties: {
32323232+ labelValues: {
32333233+ type: 'array',
32343234+ items: {
32353235+ ref: 'lex:com.atproto.label.defs#labelValue',
32363236+ type: 'ref',
32373237+ },
32383238+ description:
32393239+ 'The label values which this labeler publishes. May include global or custom labels.',
32403240+ },
32413241+ labelValueDefinitions: {
32423242+ type: 'array',
32433243+ items: {
32443244+ ref: 'lex:com.atproto.label.defs#labelValueDefinition',
32453245+ type: 'ref',
32463246+ },
32473247+ description:
32483248+ 'Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler.',
32493249+ },
32503250+ },
32513251+ },
32523252+ labelerViewerState: {
32533253+ type: 'object',
32543254+ properties: {
32553255+ like: {
32563256+ type: 'string',
32573257+ format: 'at-uri',
32583258+ },
32593259+ },
32603260+ },
32613261+ labelerViewDetailed: {
32623262+ type: 'object',
32633263+ required: ['uri', 'cid', 'creator', 'policies', 'indexedAt'],
32643264+ properties: {
32653265+ cid: {
32663266+ type: 'string',
32673267+ format: 'cid',
32683268+ },
32693269+ uri: {
32703270+ type: 'string',
32713271+ format: 'at-uri',
32723272+ },
32733273+ labels: {
32743274+ type: 'array',
32753275+ items: {
32763276+ ref: 'lex:com.atproto.label.defs#label',
32773277+ type: 'ref',
32783278+ },
32793279+ },
32803280+ viewer: {
32813281+ ref: 'lex:app.bsky.labeler.defs#labelerViewerState',
32823282+ type: 'ref',
32833283+ },
32843284+ creator: {
32853285+ ref: 'lex:app.bsky.actor.defs#profileView',
32863286+ type: 'ref',
32873287+ },
32883288+ policies: {
32893289+ ref: 'lex:app.bsky.labeler.defs#labelerPolicies',
32903290+ type: 'ref',
32913291+ },
32923292+ indexedAt: {
32933293+ type: 'string',
32943294+ format: 'datetime',
32953295+ },
32963296+ likeCount: {
32973297+ type: 'integer',
32983298+ minimum: 0,
32993299+ },
33003300+ },
33013301+ },
33023302+ },
33033303+ },
33043304+ AppBskyRichtextFacet: {
33053305+ lexicon: 1,
33063306+ id: 'app.bsky.richtext.facet',
33073307+ defs: {
33083308+ tag: {
33093309+ type: 'object',
33103310+ required: ['tag'],
33113311+ properties: {
33123312+ tag: {
33133313+ type: 'string',
33143314+ maxLength: 640,
33153315+ maxGraphemes: 64,
33163316+ },
33173317+ },
33183318+ description:
33193319+ "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').",
33203320+ },
33213321+ link: {
33223322+ type: 'object',
33233323+ required: ['uri'],
33243324+ properties: {
33253325+ uri: {
33263326+ type: 'string',
33273327+ format: 'uri',
33283328+ },
33293329+ },
33303330+ description:
33313331+ 'Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.',
33323332+ },
33333333+ main: {
33343334+ type: 'object',
33353335+ required: ['index', 'features'],
33363336+ properties: {
33373337+ index: {
33383338+ ref: 'lex:app.bsky.richtext.facet#byteSlice',
33393339+ type: 'ref',
33403340+ },
33413341+ features: {
33423342+ type: 'array',
33433343+ items: {
33443344+ refs: [
33453345+ 'lex:app.bsky.richtext.facet#mention',
33463346+ 'lex:app.bsky.richtext.facet#link',
33473347+ 'lex:app.bsky.richtext.facet#tag',
33483348+ ],
33493349+ type: 'union',
33503350+ },
33513351+ },
33523352+ },
33533353+ description: 'Annotation of a sub-string within rich text.',
33543354+ },
33553355+ mention: {
33563356+ type: 'object',
33573357+ required: ['did'],
33583358+ properties: {
33593359+ did: {
33603360+ type: 'string',
33613361+ format: 'did',
33623362+ },
33633363+ },
33643364+ description:
33653365+ "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.",
33663366+ },
33673367+ byteSlice: {
33683368+ type: 'object',
33693369+ required: ['byteStart', 'byteEnd'],
33703370+ properties: {
33713371+ byteEnd: {
33723372+ type: 'integer',
33733373+ minimum: 0,
33743374+ },
33753375+ byteStart: {
33763376+ type: 'integer',
33773377+ minimum: 0,
33783378+ },
33793379+ },
33803380+ description:
33813381+ '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.',
33823382+ },
33833383+ },
33843384+ },
12433385} as const satisfies Record<string, LexiconDoc>
1244338612453387export const schemas = Object.values(schemaDict) satisfies LexiconDoc[]
···12943436 ComAtprotoRepoUploadBlob: 'com.atproto.repo.uploadBlob',
12953437 AppBskyActorDefs: 'app.bsky.actor.defs',
12963438 AppBskyActorProfile: 'app.bsky.actor.profile',
34393439+ AppBskyEmbedDefs: 'app.bsky.embed.defs',
34403440+ AppBskyEmbedExternal: 'app.bsky.embed.external',
34413441+ AppBskyEmbedImages: 'app.bsky.embed.images',
34423442+ AppBskyEmbedRecord: 'app.bsky.embed.record',
34433443+ AppBskyEmbedRecordWithMedia: 'app.bsky.embed.recordWithMedia',
34443444+ AppBskyEmbedVideo: 'app.bsky.embed.video',
34453445+ AppBskyFeedDefs: 'app.bsky.feed.defs',
34463446+ AppBskyFeedPostgate: 'app.bsky.feed.postgate',
34473447+ AppBskyFeedThreadgate: 'app.bsky.feed.threadgate',
34483448+ AppBskyGraphDefs: 'app.bsky.graph.defs',
34493449+ AppBskyLabelerDefs: 'app.bsky.labeler.defs',
34503450+ AppBskyRichtextFacet: 'app.bsky.richtext.facet',
12973451} as const
+496-5
packages/lexicon/src/types/app/bsky/actor/defs.ts
···77import { validate as _validate } from '../../../../lexicons'
88import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
99import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js'
1010+import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js'
1111+import type * as AppBskyFeedPostgate from '../feed/postgate.js'
1212+import type * as AppBskyFeedThreadgate from '../feed/threadgate.js'
1313+import type * as AppBskyGraphDefs from '../graph/defs.js'
10141115const is$typed = _is$typed,
1216 validate = _validate
1317const id = 'app.bsky.actor.defs'
14181919+/** A new user experiences (NUX) storage object */
2020+export interface Nux {
2121+ $type?: 'app.bsky.actor.defs#nux'
2222+ id: string
2323+ /** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. */
2424+ data?: string
2525+ completed: boolean
2626+ /** The date and time at which the NUX will expire and should be considered completed. */
2727+ expiresAt?: string
2828+}
2929+3030+const hashNux = 'nux'
3131+3232+export function isNux<V>(v: V) {
3333+ return is$typed(v, id, hashNux)
3434+}
3535+3636+export function validateNux<V>(v: V) {
3737+ return validate<Nux & V>(v, id, hashNux)
3838+}
3939+4040+/** A word that the account owner has muted. */
4141+export interface MutedWord {
4242+ $type?: 'app.bsky.actor.defs#mutedWord'
4343+ id?: string
4444+ /** The muted word itself. */
4545+ value: string
4646+ /** The intended targets of the muted word. */
4747+ targets: MutedWordTarget[]
4848+ /** The date and time at which the muted word will expire and no longer be applied. */
4949+ expiresAt?: string
5050+ /** Groups of users to apply the muted word to. If undefined, applies to all users. */
5151+ actorTarget: 'all' | 'exclude-following' | (string & {})
5252+}
5353+5454+const hashMutedWord = 'mutedWord'
5555+5656+export function isMutedWord<V>(v: V) {
5757+ return is$typed(v, id, hashMutedWord)
5858+}
5959+6060+export function validateMutedWord<V>(v: V) {
6161+ return validate<MutedWord & V>(v, id, hashMutedWord)
6262+}
6363+6464+export interface SavedFeed {
6565+ $type?: 'app.bsky.actor.defs#savedFeed'
6666+ id: string
6767+ type: 'feed' | 'list' | 'timeline' | (string & {})
6868+ value: string
6969+ pinned: boolean
7070+}
7171+7272+const hashSavedFeed = 'savedFeed'
7373+7474+export function isSavedFeed<V>(v: V) {
7575+ return is$typed(v, id, hashSavedFeed)
7676+}
7777+7878+export function validateSavedFeed<V>(v: V) {
7979+ return validate<SavedFeed & V>(v, id, hashSavedFeed)
8080+}
8181+8282+export type Preferences = (
8383+ | $Typed<AdultContentPref>
8484+ | $Typed<ContentLabelPref>
8585+ | $Typed<SavedFeedsPref>
8686+ | $Typed<SavedFeedsPrefV2>
8787+ | $Typed<PersonalDetailsPref>
8888+ | $Typed<FeedViewPref>
8989+ | $Typed<ThreadViewPref>
9090+ | $Typed<InterestsPref>
9191+ | $Typed<MutedWordsPref>
9292+ | $Typed<HiddenPostsPref>
9393+ | $Typed<BskyAppStatePref>
9494+ | $Typed<LabelersPref>
9595+ | $Typed<PostInteractionSettingsPref>
9696+ | { $type: string }
9797+)[]
9898+1599export interface ProfileView {
16100 $type?: 'app.bsky.actor.defs#profileView'
17101 did: string
1818- handle: string
1919- displayName?: string
2020- description?: string
21102 avatar?: string
2222- indexedAt?: string
103103+ handle: string
104104+ labels?: ComAtprotoLabelDefs.Label[]
105105+ viewer?: ViewerState
23106 createdAt?: string
2424- labels?: ComAtprotoLabelDefs.Label[]
107107+ indexedAt?: string
108108+ associated?: ProfileAssociated
109109+ description?: string
110110+ displayName?: string
25111}
2611227113const hashProfileView = 'profileView'
···33119export function validateProfileView<V>(v: V) {
34120 return validate<ProfileView & V>(v, id, hashProfileView)
35121}
122122+123123+/** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. */
124124+export interface ViewerState {
125125+ $type?: 'app.bsky.actor.defs#viewerState'
126126+ muted?: boolean
127127+ blocking?: string
128128+ blockedBy?: boolean
129129+ following?: string
130130+ followedBy?: string
131131+ mutedByList?: AppBskyGraphDefs.ListViewBasic
132132+ blockingByList?: AppBskyGraphDefs.ListViewBasic
133133+ knownFollowers?: KnownFollowers
134134+}
135135+136136+const hashViewerState = 'viewerState'
137137+138138+export function isViewerState<V>(v: V) {
139139+ return is$typed(v, id, hashViewerState)
140140+}
141141+142142+export function validateViewerState<V>(v: V) {
143143+ return validate<ViewerState & V>(v, id, hashViewerState)
144144+}
145145+146146+export interface FeedViewPref {
147147+ $type?: 'app.bsky.actor.defs#feedViewPref'
148148+ /** The URI of the feed, or an identifier which describes the feed. */
149149+ feed: string
150150+ /** Hide replies in the feed. */
151151+ hideReplies?: boolean
152152+ /** Hide reposts in the feed. */
153153+ hideReposts?: boolean
154154+ /** Hide quote posts in the feed. */
155155+ hideQuotePosts?: boolean
156156+ /** Hide replies in the feed if they do not have this number of likes. */
157157+ hideRepliesByLikeCount?: number
158158+ /** Hide replies in the feed if they are not by followed users. */
159159+ hideRepliesByUnfollowed: boolean
160160+}
161161+162162+const hashFeedViewPref = 'feedViewPref'
163163+164164+export function isFeedViewPref<V>(v: V) {
165165+ return is$typed(v, id, hashFeedViewPref)
166166+}
167167+168168+export function validateFeedViewPref<V>(v: V) {
169169+ return validate<FeedViewPref & V>(v, id, hashFeedViewPref)
170170+}
171171+172172+export interface LabelersPref {
173173+ $type?: 'app.bsky.actor.defs#labelersPref'
174174+ labelers: LabelerPrefItem[]
175175+}
176176+177177+const hashLabelersPref = 'labelersPref'
178178+179179+export function isLabelersPref<V>(v: V) {
180180+ return is$typed(v, id, hashLabelersPref)
181181+}
182182+183183+export function validateLabelersPref<V>(v: V) {
184184+ return validate<LabelersPref & V>(v, id, hashLabelersPref)
185185+}
186186+187187+export interface InterestsPref {
188188+ $type?: 'app.bsky.actor.defs#interestsPref'
189189+ /** A list of tags which describe the account owner's interests gathered during onboarding. */
190190+ tags: string[]
191191+}
192192+193193+const hashInterestsPref = 'interestsPref'
194194+195195+export function isInterestsPref<V>(v: V) {
196196+ return is$typed(v, id, hashInterestsPref)
197197+}
198198+199199+export function validateInterestsPref<V>(v: V) {
200200+ return validate<InterestsPref & V>(v, id, hashInterestsPref)
201201+}
202202+203203+/** The subject's followers whom you also follow */
204204+export interface KnownFollowers {
205205+ $type?: 'app.bsky.actor.defs#knownFollowers'
206206+ count: number
207207+ followers: ProfileViewBasic[]
208208+}
209209+210210+const hashKnownFollowers = 'knownFollowers'
211211+212212+export function isKnownFollowers<V>(v: V) {
213213+ return is$typed(v, id, hashKnownFollowers)
214214+}
215215+216216+export function validateKnownFollowers<V>(v: V) {
217217+ return validate<KnownFollowers & V>(v, id, hashKnownFollowers)
218218+}
219219+220220+export interface MutedWordsPref {
221221+ $type?: 'app.bsky.actor.defs#mutedWordsPref'
222222+ /** A list of words the account owner has muted. */
223223+ items: MutedWord[]
224224+}
225225+226226+const hashMutedWordsPref = 'mutedWordsPref'
227227+228228+export function isMutedWordsPref<V>(v: V) {
229229+ return is$typed(v, id, hashMutedWordsPref)
230230+}
231231+232232+export function validateMutedWordsPref<V>(v: V) {
233233+ return validate<MutedWordsPref & V>(v, id, hashMutedWordsPref)
234234+}
235235+236236+export interface SavedFeedsPref {
237237+ $type?: 'app.bsky.actor.defs#savedFeedsPref'
238238+ saved: string[]
239239+ pinned: string[]
240240+ timelineIndex?: number
241241+}
242242+243243+const hashSavedFeedsPref = 'savedFeedsPref'
244244+245245+export function isSavedFeedsPref<V>(v: V) {
246246+ return is$typed(v, id, hashSavedFeedsPref)
247247+}
248248+249249+export function validateSavedFeedsPref<V>(v: V) {
250250+ return validate<SavedFeedsPref & V>(v, id, hashSavedFeedsPref)
251251+}
252252+253253+export interface ThreadViewPref {
254254+ $type?: 'app.bsky.actor.defs#threadViewPref'
255255+ /** Sorting mode for threads. */
256256+ sort?:
257257+ | 'oldest'
258258+ | 'newest'
259259+ | 'most-likes'
260260+ | 'random'
261261+ | 'hotness'
262262+ | (string & {})
263263+ /** Show followed users at the top of all replies. */
264264+ prioritizeFollowedUsers?: boolean
265265+}
266266+267267+const hashThreadViewPref = 'threadViewPref'
268268+269269+export function isThreadViewPref<V>(v: V) {
270270+ return is$typed(v, id, hashThreadViewPref)
271271+}
272272+273273+export function validateThreadViewPref<V>(v: V) {
274274+ return validate<ThreadViewPref & V>(v, id, hashThreadViewPref)
275275+}
276276+277277+export interface HiddenPostsPref {
278278+ $type?: 'app.bsky.actor.defs#hiddenPostsPref'
279279+ /** A list of URIs of posts the account owner has hidden. */
280280+ items: string[]
281281+}
282282+283283+const hashHiddenPostsPref = 'hiddenPostsPref'
284284+285285+export function isHiddenPostsPref<V>(v: V) {
286286+ return is$typed(v, id, hashHiddenPostsPref)
287287+}
288288+289289+export function validateHiddenPostsPref<V>(v: V) {
290290+ return validate<HiddenPostsPref & V>(v, id, hashHiddenPostsPref)
291291+}
292292+293293+export interface LabelerPrefItem {
294294+ $type?: 'app.bsky.actor.defs#labelerPrefItem'
295295+ did: string
296296+}
297297+298298+const hashLabelerPrefItem = 'labelerPrefItem'
299299+300300+export function isLabelerPrefItem<V>(v: V) {
301301+ return is$typed(v, id, hashLabelerPrefItem)
302302+}
303303+304304+export function validateLabelerPrefItem<V>(v: V) {
305305+ return validate<LabelerPrefItem & V>(v, id, hashLabelerPrefItem)
306306+}
307307+308308+export type MutedWordTarget = 'content' | 'tag' | (string & {})
309309+310310+export interface AdultContentPref {
311311+ $type?: 'app.bsky.actor.defs#adultContentPref'
312312+ enabled: boolean
313313+}
314314+315315+const hashAdultContentPref = 'adultContentPref'
316316+317317+export function isAdultContentPref<V>(v: V) {
318318+ return is$typed(v, id, hashAdultContentPref)
319319+}
320320+321321+export function validateAdultContentPref<V>(v: V) {
322322+ return validate<AdultContentPref & V>(v, id, hashAdultContentPref)
323323+}
324324+325325+/** A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this. */
326326+export interface BskyAppStatePref {
327327+ $type?: 'app.bsky.actor.defs#bskyAppStatePref'
328328+ /** Storage for NUXs the user has encountered. */
329329+ nuxs?: Nux[]
330330+ /** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. */
331331+ queuedNudges?: string[]
332332+ activeProgressGuide?: BskyAppProgressGuide
333333+}
334334+335335+const hashBskyAppStatePref = 'bskyAppStatePref'
336336+337337+export function isBskyAppStatePref<V>(v: V) {
338338+ return is$typed(v, id, hashBskyAppStatePref)
339339+}
340340+341341+export function validateBskyAppStatePref<V>(v: V) {
342342+ return validate<BskyAppStatePref & V>(v, id, hashBskyAppStatePref)
343343+}
344344+345345+export interface ContentLabelPref {
346346+ $type?: 'app.bsky.actor.defs#contentLabelPref'
347347+ label: string
348348+ /** Which labeler does this preference apply to? If undefined, applies globally. */
349349+ labelerDid?: string
350350+ visibility: 'ignore' | 'show' | 'warn' | 'hide' | (string & {})
351351+}
352352+353353+const hashContentLabelPref = 'contentLabelPref'
354354+355355+export function isContentLabelPref<V>(v: V) {
356356+ return is$typed(v, id, hashContentLabelPref)
357357+}
358358+359359+export function validateContentLabelPref<V>(v: V) {
360360+ return validate<ContentLabelPref & V>(v, id, hashContentLabelPref)
361361+}
362362+363363+export interface ProfileViewBasic {
364364+ $type?: 'app.bsky.actor.defs#profileViewBasic'
365365+ did: string
366366+ avatar?: string
367367+ handle: string
368368+ labels?: ComAtprotoLabelDefs.Label[]
369369+ viewer?: ViewerState
370370+ createdAt?: string
371371+ associated?: ProfileAssociated
372372+ displayName?: string
373373+}
374374+375375+const hashProfileViewBasic = 'profileViewBasic'
376376+377377+export function isProfileViewBasic<V>(v: V) {
378378+ return is$typed(v, id, hashProfileViewBasic)
379379+}
380380+381381+export function validateProfileViewBasic<V>(v: V) {
382382+ return validate<ProfileViewBasic & V>(v, id, hashProfileViewBasic)
383383+}
384384+385385+export interface SavedFeedsPrefV2 {
386386+ $type?: 'app.bsky.actor.defs#savedFeedsPrefV2'
387387+ items: SavedFeed[]
388388+}
389389+390390+const hashSavedFeedsPrefV2 = 'savedFeedsPrefV2'
391391+392392+export function isSavedFeedsPrefV2<V>(v: V) {
393393+ return is$typed(v, id, hashSavedFeedsPrefV2)
394394+}
395395+396396+export function validateSavedFeedsPrefV2<V>(v: V) {
397397+ return validate<SavedFeedsPrefV2 & V>(v, id, hashSavedFeedsPrefV2)
398398+}
399399+400400+export interface ProfileAssociated {
401401+ $type?: 'app.bsky.actor.defs#profileAssociated'
402402+ chat?: ProfileAssociatedChat
403403+ lists?: number
404404+ labeler?: boolean
405405+ feedgens?: number
406406+ starterPacks?: number
407407+}
408408+409409+const hashProfileAssociated = 'profileAssociated'
410410+411411+export function isProfileAssociated<V>(v: V) {
412412+ return is$typed(v, id, hashProfileAssociated)
413413+}
414414+415415+export function validateProfileAssociated<V>(v: V) {
416416+ return validate<ProfileAssociated & V>(v, id, hashProfileAssociated)
417417+}
418418+419419+export interface PersonalDetailsPref {
420420+ $type?: 'app.bsky.actor.defs#personalDetailsPref'
421421+ /** The birth date of account owner. */
422422+ birthDate?: string
423423+}
424424+425425+const hashPersonalDetailsPref = 'personalDetailsPref'
426426+427427+export function isPersonalDetailsPref<V>(v: V) {
428428+ return is$typed(v, id, hashPersonalDetailsPref)
429429+}
430430+431431+export function validatePersonalDetailsPref<V>(v: V) {
432432+ return validate<PersonalDetailsPref & V>(v, id, hashPersonalDetailsPref)
433433+}
434434+435435+export interface ProfileViewDetailed {
436436+ $type?: 'app.bsky.actor.defs#profileViewDetailed'
437437+ did: string
438438+ avatar?: string
439439+ banner?: string
440440+ handle: string
441441+ labels?: ComAtprotoLabelDefs.Label[]
442442+ viewer?: ViewerState
443443+ createdAt?: string
444444+ indexedAt?: string
445445+ associated?: ProfileAssociated
446446+ pinnedPost?: ComAtprotoRepoStrongRef.Main
447447+ postsCount?: number
448448+ description?: string
449449+ displayName?: string
450450+ followsCount?: number
451451+ followersCount?: number
452452+ joinedViaStarterPack?: AppBskyGraphDefs.StarterPackViewBasic
453453+}
454454+455455+const hashProfileViewDetailed = 'profileViewDetailed'
456456+457457+export function isProfileViewDetailed<V>(v: V) {
458458+ return is$typed(v, id, hashProfileViewDetailed)
459459+}
460460+461461+export function validateProfileViewDetailed<V>(v: V) {
462462+ return validate<ProfileViewDetailed & V>(v, id, hashProfileViewDetailed)
463463+}
464464+465465+/** If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress. */
466466+export interface BskyAppProgressGuide {
467467+ $type?: 'app.bsky.actor.defs#bskyAppProgressGuide'
468468+ guide: string
469469+}
470470+471471+const hashBskyAppProgressGuide = 'bskyAppProgressGuide'
472472+473473+export function isBskyAppProgressGuide<V>(v: V) {
474474+ return is$typed(v, id, hashBskyAppProgressGuide)
475475+}
476476+477477+export function validateBskyAppProgressGuide<V>(v: V) {
478478+ return validate<BskyAppProgressGuide & V>(v, id, hashBskyAppProgressGuide)
479479+}
480480+481481+export interface ProfileAssociatedChat {
482482+ $type?: 'app.bsky.actor.defs#profileAssociatedChat'
483483+ allowIncoming: 'all' | 'none' | 'following' | (string & {})
484484+}
485485+486486+const hashProfileAssociatedChat = 'profileAssociatedChat'
487487+488488+export function isProfileAssociatedChat<V>(v: V) {
489489+ return is$typed(v, id, hashProfileAssociatedChat)
490490+}
491491+492492+export function validateProfileAssociatedChat<V>(v: V) {
493493+ return validate<ProfileAssociatedChat & V>(v, id, hashProfileAssociatedChat)
494494+}
495495+496496+/** 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. */
497497+export interface PostInteractionSettingsPref {
498498+ $type?: 'app.bsky.actor.defs#postInteractionSettingsPref'
499499+ /** 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. */
500500+ threadgateAllowRules?: (
501501+ | $Typed<AppBskyFeedThreadgate.MentionRule>
502502+ | $Typed<AppBskyFeedThreadgate.FollowerRule>
503503+ | $Typed<AppBskyFeedThreadgate.FollowingRule>
504504+ | $Typed<AppBskyFeedThreadgate.ListRule>
505505+ | { $type: string }
506506+ )[]
507507+ /** 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. */
508508+ postgateEmbeddingRules?: (
509509+ | $Typed<AppBskyFeedPostgate.DisableRule>
510510+ | { $type: string }
511511+ )[]
512512+}
513513+514514+const hashPostInteractionSettingsPref = 'postInteractionSettingsPref'
515515+516516+export function isPostInteractionSettingsPref<V>(v: V) {
517517+ return is$typed(v, id, hashPostInteractionSettingsPref)
518518+}
519519+520520+export function validatePostInteractionSettingsPref<V>(v: V) {
521521+ return validate<PostInteractionSettingsPref & V>(
522522+ v,
523523+ id,
524524+ hashPostInteractionSettingsPref,
525525+ )
526526+}
+29
packages/lexicon/src/types/app/bsky/embed/defs.ts
···11+/**
22+ * GENERATED CODE - DO NOT MODIFY
33+ */
44+import { BlobRef, ValidationResult } from '@atproto/lexicon'
55+import { CID } from 'multiformats/cid'
66+77+import { validate as _validate } from '../../../../lexicons'
88+import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
99+1010+const is$typed = _is$typed,
1111+ validate = _validate
1212+const id = 'app.bsky.embed.defs'
1313+1414+/** width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. */
1515+export interface AspectRatio {
1616+ $type?: 'app.bsky.embed.defs#aspectRatio'
1717+ width: number
1818+ height: number
1919+}
2020+2121+const hashAspectRatio = 'aspectRatio'
2222+2323+export function isAspectRatio<V>(v: V) {
2424+ return is$typed(v, id, hashAspectRatio)
2525+}
2626+2727+export function validateAspectRatio<V>(v: V) {
2828+ return validate<AspectRatio & V>(v, id, hashAspectRatio)
2929+}
···11+/**
22+ * GENERATED CODE - DO NOT MODIFY
33+ */
44+import { BlobRef, ValidationResult } from '@atproto/lexicon'
55+import { CID } from 'multiformats/cid'
66+77+import { validate as _validate } from '../../../../lexicons'
88+import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
99+1010+const is$typed = _is$typed,
1111+ validate = _validate
1212+const id = 'app.bsky.feed.postgate'
1313+1414+export interface Record {
1515+ $type: 'app.bsky.feed.postgate'
1616+ /** Reference (AT-URI) to the post record. */
1717+ post: string
1818+ createdAt: string
1919+ /** 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. */
2020+ embeddingRules?: ($Typed<DisableRule> | { $type: string })[]
2121+ /** List of AT-URIs embedding this post that the author has detached from. */
2222+ detachedEmbeddingUris?: string[]
2323+ [k: string]: unknown
2424+}
2525+2626+const hashRecord = 'main'
2727+2828+export function isRecord<V>(v: V) {
2929+ return is$typed(v, id, hashRecord)
3030+}
3131+3232+export function validateRecord<V>(v: V) {
3333+ return validate<Record & V>(v, id, hashRecord, true)
3434+}
3535+3636+/** Disables embedding of this post. */
3737+export interface DisableRule {
3838+ $type?: 'app.bsky.feed.postgate#disableRule'
3939+}
4040+4141+const hashDisableRule = 'disableRule'
4242+4343+export function isDisableRule<V>(v: V) {
4444+ return is$typed(v, id, hashDisableRule)
4545+}
4646+4747+export function validateDisableRule<V>(v: V) {
4848+ return validate<DisableRule & V>(v, id, hashDisableRule)
4949+}
···11+/**
22+ * GENERATED CODE - DO NOT MODIFY
33+ */
44+import { BlobRef, ValidationResult } from '@atproto/lexicon'
55+import { CID } from 'multiformats/cid'
66+77+import { validate as _validate } from '../../../../lexicons'
88+import { is$typed as _is$typed, $Typed, OmitKey } from '../../../../util'
99+1010+const is$typed = _is$typed,
1111+ validate = _validate
1212+const id = 'app.bsky.richtext.facet'
1313+1414+/** 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'). */
1515+export interface Tag {
1616+ $type?: 'app.bsky.richtext.facet#tag'
1717+ tag: string
1818+}
1919+2020+const hashTag = 'tag'
2121+2222+export function isTag<V>(v: V) {
2323+ return is$typed(v, id, hashTag)
2424+}
2525+2626+export function validateTag<V>(v: V) {
2727+ return validate<Tag & V>(v, id, hashTag)
2828+}
2929+3030+/** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. */
3131+export interface Link {
3232+ $type?: 'app.bsky.richtext.facet#link'
3333+ uri: string
3434+}
3535+3636+const hashLink = 'link'
3737+3838+export function isLink<V>(v: V) {
3939+ return is$typed(v, id, hashLink)
4040+}
4141+4242+export function validateLink<V>(v: V) {
4343+ return validate<Link & V>(v, id, hashLink)
4444+}
4545+4646+/** Annotation of a sub-string within rich text. */
4747+export interface Main {
4848+ $type?: 'app.bsky.richtext.facet'
4949+ index: ByteSlice
5050+ features: ($Typed<Mention> | $Typed<Link> | $Typed<Tag> | { $type: string })[]
5151+}
5252+5353+const hashMain = 'main'
5454+5555+export function isMain<V>(v: V) {
5656+ return is$typed(v, id, hashMain)
5757+}
5858+5959+export function validateMain<V>(v: V) {
6060+ return validate<Main & V>(v, id, hashMain)
6161+}
6262+6363+/** Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID. */
6464+export interface Mention {
6565+ $type?: 'app.bsky.richtext.facet#mention'
6666+ did: string
6767+}
6868+6969+const hashMention = 'mention'
7070+7171+export function isMention<V>(v: V) {
7272+ return is$typed(v, id, hashMention)
7373+}
7474+7575+export function validateMention<V>(v: V) {
7676+ return validate<Mention & V>(v, id, hashMention)
7777+}
7878+7979+/** 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. */
8080+export interface ByteSlice {
8181+ $type?: 'app.bsky.richtext.facet#byteSlice'
8282+ byteEnd: number
8383+ byteStart: number
8484+}
8585+8686+const hashByteSlice = 'byteSlice'
8787+8888+export function isByteSlice<V>(v: V) {
8989+ return is$typed(v, id, hashByteSlice)
9090+}
9191+9292+export function validateByteSlice<V>(v: V) {
9393+ return validate<ByteSlice & V>(v, id, hashByteSlice)
9494+}
···1414/** Metadata tag on an atproto resource (eg, repo or record). */
1515export interface Label {
1616 $type?: 'com.atproto.label.defs#label'
1717- /** The AT Protocol version of the label object. */
1818- ver?: number
1919- /** DID of the actor who created this label. */
2020- src: string
2121- /** AT URI of the record, repository (account), or other resource that this label applies to. */
2222- uri: string
2317 /** Optionally, CID specifying the specific version of 'uri' resource this label applies to. */
2418 cid?: string
2525- /** The short string name of the value or type of this label. */
2626- val: string
2727- /** If true, this is a negation label, overwriting a previous label. */
2828- neg?: boolean
2919 /** Timestamp when this label was created. */
3020 cts: string
3121 /** Timestamp at which this label expires (no longer applies). */
3222 exp?: string
2323+ /** If true, this is a negation label, overwriting a previous label. */
2424+ neg?: boolean
3325 /** Signature of dag-cbor encoded label. */
3426 sig?: Uint8Array
2727+ /** DID of the actor who created this label. */
2828+ src: string
2929+ /** AT URI of the record, repository (account), or other resource that this label applies to. */
3030+ uri: string
3131+ /** The short string name of the value or type of this label. */
3232+ val: string
3333+ /** The AT Protocol version of the label object. */
3434+ ver?: number
3535}
36363737const hashLabel = 'label'
···4444 return validate<Label & V>(v, id, hashLabel)
4545}
46464747-/** Metadata tags on an atproto record, published by the author within the record. */
4848-export interface SelfLabels {
4949- $type?: 'com.atproto.label.defs#selfLabels'
5050- values: SelfLabel[]
5151-}
5252-5353-const hashSelfLabels = 'selfLabels'
5454-5555-export function isSelfLabels<V>(v: V) {
5656- return is$typed(v, id, hashSelfLabels)
5757-}
5858-5959-export function validateSelfLabels<V>(v: V) {
6060- return validate<SelfLabels & V>(v, id, hashSelfLabels)
6161-}
6262-6347/** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. */
6448export interface SelfLabel {
6549 $type?: 'com.atproto.label.defs#selfLabel'
···7761 return validate<SelfLabel & V>(v, id, hashSelfLabel)
7862}
79636464+export type LabelValue =
6565+ | '!hide'
6666+ | '!no-promote'
6767+ | '!warn'
6868+ | '!no-unauthenticated'
6969+ | 'dmca-violation'
7070+ | 'doxxing'
7171+ | 'porn'
7272+ | 'sexual'
7373+ | 'nudity'
7474+ | 'nsfl'
7575+ | 'gore'
7676+ | (string & {})
7777+7878+/** Metadata tags on an atproto record, published by the author within the record. */
7979+export interface SelfLabels {
8080+ $type?: 'com.atproto.label.defs#selfLabels'
8181+ values: SelfLabel[]
8282+}
8383+8484+const hashSelfLabels = 'selfLabels'
8585+8686+export function isSelfLabels<V>(v: V) {
8787+ return is$typed(v, id, hashSelfLabels)
8888+}
8989+9090+export function validateSelfLabels<V>(v: V) {
9191+ return validate<SelfLabels & V>(v, id, hashSelfLabels)
9292+}
9393+8094/** Declares a label value and its expected interpretations and behaviors. */
8195export interface LabelValueDefinition {
8296 $type?: 'com.atproto.label.defs#labelValueDefinition'
8383- /** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */
8484- identifier: string
8585- /** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */
8686- severity: 'inform' | 'alert' | 'none' | (string & {})
8797 /** 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. */
8898 blurs: 'content' | 'media' | 'none' | (string & {})
8989- /** The default setting for this label. */
9090- defaultSetting: 'ignore' | 'warn' | 'hide' | (string & {})
9999+ locales: LabelValueDefinitionStrings[]
100100+ /** How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing. */
101101+ severity: 'inform' | 'alert' | 'none' | (string & {})
91102 /** Does the user need to have adult content enabled in order to configure this label? */
92103 adultOnly?: boolean
9393- locales: LabelValueDefinitionStrings[]
104104+ /** The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+). */
105105+ identifier: string
106106+ /** The default setting for this label. */
107107+ defaultSetting: 'ignore' | 'warn' | 'hide' | (string & {})
94108}
9510996110const hashLabelValueDefinition = 'labelValueDefinition'
···127141 hashLabelValueDefinitionStrings,
128142 )
129143}
130130-131131-export type LabelValue =
132132- | '!hide'
133133- | '!no-promote'
134134- | '!warn'
135135- | '!no-unauthenticated'
136136- | 'dmca-violation'
137137- | 'doxxing'
138138- | 'porn'
139139- | 'sexual'
140140- | 'nudity'
141141- | 'nsfl'
142142- | 'gore'
143143- | (string & {})
···1818export interface InputSchema {
1919 /** The handle or DID of the repo (aka, current account). */
2020 repo: string
2121- /** The NSID of the record collection. */
2222- collection: string
2321 /** The Record Key. */
2422 rkey?: string
2525- /** 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. */
2626- validate?: boolean
2723 /** The record itself. Must contain a $type field. */
2824 record: { [_ in string]: unknown }
2525+ /** 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. */
2626+ validate?: boolean
2727+ /** The NSID of the record collection. */
2828+ collection: string
2929 /** Compare and swap with the previous commit by CID. */
3030 swapCommit?: string
3131}
32323333export interface OutputSchema {
3434- uri: string
3534 cid: string
3535+ uri: string
3636 commit?: ComAtprotoRepoDefs.CommitMeta
3737 validationStatus?: 'valid' | 'unknown' | (string & {})
3838}
···1818export interface InputSchema {
1919 /** The handle or DID of the repo (aka, current account). */
2020 repo: string
2121- /** The NSID of the record collection. */
2222- collection: string
2321 /** The Record Key. */
2422 rkey: string
2525- /** Compare and swap with the previous record by CID. */
2626- swapRecord?: string
2323+ /** The NSID of the record collection. */
2424+ collection: string
2725 /** Compare and swap with the previous commit by CID. */
2826 swapCommit?: string
2727+ /** Compare and swap with the previous record by CID. */
2828+ swapRecord?: string
2929}
30303131export interface OutputSchema {
···2020export type InputSchema = undefined
21212222export interface OutputSchema {
2323- handle: string
2423 did: string
2524 /** The complete DID document for this account. */
2625 didDoc: { [_ in string]: unknown }
2626+ handle: string
2727 /** List of all the collections (NSIDs) for which this repo contains at least one record. */
2828 collections: string[]
2929 /** Indicates if handle is currently valid (resolves bi-directionally) */
···1313const id = 'com.atproto.repo.getRecord'
14141515export interface QueryParams {
1616+ /** The CID of the version of the record. If not specified, then return the most recent version. */
1717+ cid?: string
1618 /** The handle or DID of the repo. */
1719 repo: string
1818- /** The NSID of the record collection. */
1919- collection: string
2020 /** The Record Key. */
2121 rkey: string
2222- /** The CID of the version of the record. If not specified, then return the most recent version. */
2323- cid?: string
2222+ /** The NSID of the record collection. */
2323+ collection: string
2424}
25252626export type InputSchema = undefined
27272828export interface OutputSchema {
2929- uri: string
3029 cid?: string
3030+ uri: string
3131 value: { [_ in string]: unknown }
3232}
3333
···1515export interface QueryParams {
1616 /** The handle or DID of the repo. */
1717 repo: string
1818- /** The NSID of the record type. */
1919- collection: string
2018 /** The number of records to return. */
2119 limit?: number
2220 cursor?: string
2323- /** DEPRECATED: The lowest sort-ordered rkey to start from (exclusive) */
2424- rkeyStart?: string
2525- /** DEPRECATED: The highest sort-ordered rkey to stop at (exclusive) */
2626- rkeyEnd?: string
2721 /** Flag to reverse the order of the returned records. */
2822 reverse?: boolean
2323+ /** The NSID of the record type. */
2424+ collection: string
2925}
30263127export type InputSchema = undefined
···52485349export interface Record {
5450 $type?: 'com.atproto.repo.listRecords#record'
5555- uri: string
5651 cid: string
5252+ uri: string
5753 value: { [_ in string]: unknown }
5854}
5955
···1818export interface InputSchema {
1919 /** The handle or DID of the repo (aka, current account). */
2020 repo: string
2121- /** The NSID of the record collection. */
2222- collection: string
2321 /** The Record Key. */
2422 rkey: string
2525- /** 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. */
2626- validate?: boolean
2723 /** The record to write. */
2824 record: { [_ in string]: unknown }
2929- /** Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation */
3030- swapRecord?: string | null
2525+ /** 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. */
2626+ validate?: boolean
2727+ /** The NSID of the record collection. */
2828+ collection: string
3129 /** Compare and swap with the previous commit by CID. */
3230 swapCommit?: string
3131+ /** Compare and swap with the previous record by CID. WARNING: nullable and optional field; may cause problems with golang implementation */
3232+ swapRecord?: string | null
3333}
34343535export interface OutputSchema {
3636- uri: string
3736 cid: string
3737+ uri: string
3838 commit?: ComAtprotoRepoDefs.CommitMeta
3939 validationStatus?: 'valid' | 'unknown' | (string & {})
4040}