···37 let rec aux acc p =
38 if Sys.is_directory p then
39 Sys.readdir p |> Array.to_list
0040 |> List.map (Filename.concat p)
41 |> List.fold_left aux acc
42 else if Filename.check_suffix p ".json" then p :: acc
43 else acc
44 in
45- aux [] path
04647(* generate module structure from lexicons - unified mode *)
48let generate ~inputs ~output_dir ~module_name ~public_name =
···37 let rec aux acc p =
38 if Sys.is_directory p then
39 Sys.readdir p |> Array.to_list
40+ (* Sort directory entries for deterministic ordering *)
41+ |> List.sort String.compare
42 |> List.map (Filename.concat p)
43 |> List.fold_left aux acc
44 else if Filename.check_suffix p ".json" then p :: acc
45 else acc
46 in
47+ (* Sort final result for deterministic ordering *)
48+ aux [] path |> List.sort String.compare
4950(* generate module structure from lexicons - unified mode *)
51let generate ~inputs ~output_dir ~module_name ~public_name =
+23-4
hermest/lib/codegen_jsont.ml
···532 in
533 match ready with
534 | [] ->
535- (* Cycle detected or external deps - just append remaining *)
536- sorted @ remaining
537- | _ -> sort (sorted @ ready) not_ready
00000000000000538 in
539 (* Sort support defs first, then append primary defs *)
540 sort [] support_defs @ primary_defs
···1461 (* Shouldn't happen after removing cyclic deps, but fall back to alphabetical *)
1462 List.rev sorted
1463 @ List.sort (fun (a, _) (b, _) -> String.compare a b) not_ready
1464- | _ -> topo_sort (ready @ sorted) not_ready
000001465 in
1466 (topo_sort [] children, cyclic_nodes)
1467
···532 in
533 match ready with
534 | [] ->
535+ (* Cycle detected or external deps - sort remaining alphabetically *)
536+ let remaining_sorted =
537+ List.sort
538+ (fun (a : def_entry) (b : def_entry) ->
539+ String.compare a.name b.name)
540+ remaining
541+ in
542+ sorted @ remaining_sorted
543+ | _ ->
544+ (* Sort ready elements alphabetically for deterministic output *)
545+ let ready_sorted =
546+ List.sort
547+ (fun (a : def_entry) (b : def_entry) ->
548+ String.compare a.name b.name)
549+ ready
550+ in
551+ sort (sorted @ ready_sorted) not_ready
552 in
553 (* Sort support defs first, then append primary defs *)
554 sort [] support_defs @ primary_defs
···1475 (* Shouldn't happen after removing cyclic deps, but fall back to alphabetical *)
1476 List.rev sorted
1477 @ List.sort (fun (a, _) (b, _) -> String.compare a b) not_ready
1478+ | _ ->
1479+ (* Sort ready elements alphabetically for deterministic output *)
1480+ let ready_sorted =
1481+ List.sort (fun (a, _) (b, _) -> String.compare a b) ready
1482+ in
1483+ topo_sort (ready_sorted @ sorted) not_ready
1484 in
1485 (topo_sort [] children, cyclic_nodes)
1486
+16
hermest/lib/naming.ml
···323 | Some ns -> ModuleWithChildren (ns, new_children)
324 | None -> Node new_children)
325 in
000000000000000326 match
327 List.fold_left
328 (fun trie nsid ->
329 let segments = String.split_on_char '.' nsid in
330 insert_segments trie nsid segments)
331 (Node []) nsids
0332 with
333 | Node result -> result
334 | ModuleWithChildren (_, result) -> result
···323 | Some ns -> ModuleWithChildren (ns, new_children)
324 | None -> Node new_children)
325 in
326+ (* Sort children alphabetically to ensure deterministic output *)
327+ let rec sort_trie = function
328+ | Node children ->
329+ Node
330+ (children
331+ |> List.map (fun (k, v) -> (k, sort_trie v))
332+ |> List.sort (fun (a, _) (b, _) -> String.compare a b))
333+ | Module nsid -> Module nsid
334+ | ModuleWithChildren (nsid, children) ->
335+ ModuleWithChildren
336+ ( nsid,
337+ children
338+ |> List.map (fun (k, v) -> (k, sort_trie v))
339+ |> List.sort (fun (a, _) (b, _) -> String.compare a b) )
340+ in
341 match
342 List.fold_left
343 (fun trie nsid ->
344 let segments = String.split_on_char '.' nsid in
345 insert_segments trie nsid segments)
346 (Node []) nsids
347+ |> sort_trie
348 with
349 | Node result -> result
350 | ModuleWithChildren (_, result) -> result
···1213module Com : sig
14 module Atproto : sig
15- module Label : sig
000000000000016 module Defs : sig
17-(** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. *)
00000000000001819-type self_label = {
20- val_ : string; (** The short string name of the value or type of this label. *)
21-}
2223-(** Jsont codec for {!type:self_label}. *)
24-val self_label_jsont : self_label Jsont.t
2526-(** Strings which describe the label in the UI, localized into a specific language. *)
2728-type label_value_definition_strings = {
29- description : string; (** A longer description of what the label means and why it might be applied. *)
30- lang : string; (** The code of the language these strings are written in. *)
31- name : string; (** A short human-readable name for the label. *)
32-}
3334-(** Jsont codec for {!type:label_value_definition_strings}. *)
35-val label_value_definition_strings_jsont : label_value_definition_strings Jsont.t
36003738-type label_value = string
39-val label_value_jsont : label_value Jsont.t
0400000000000000041(** Metadata tag on an atproto resource (eg, repo or record). *)
4243type label = {
···55(** Jsont codec for {!type:label}. *)
56val label_jsont : label Jsont.t
5758-(** Metadata tags on an atproto record, published by the author within the record. *)
0000000000000005960-type self_labels = {
61- values : self_label list;
62}
6364-(** Jsont codec for {!type:self_labels}. *)
65-val self_labels_jsont : self_labels Jsont.t
6667(** Declares a label value and its expected interpretations and behaviors. *)
68···78(** Jsont codec for {!type:label_value_definition}. *)
79val label_value_definition_jsont : label_value_definition Jsont.t
8081- end
82- end
83- module Repo : sig
84- module StrongRef : sig
8586-type main = {
87- cid : string;
88- uri : string;
89}
9091-(** Jsont codec for {!type:main}. *)
92-val main_jsont : main Jsont.t
9394 end
95 end
96- module Moderation : sig
97- module Defs : sig
98-(** Tag describing a type of subject that might be reported. *)
99-100-type subject_type = string
101-val subject_type_jsont : subject_type Jsont.t
0102103-(** Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`. *)
104105-type reason_violation = string
106-val reason_violation_jsont : reason_violation Jsont.t
0000010700108109-type reason_type = string
110-val reason_type_jsont : reason_type Jsont.t
111112-(** Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`. *)
113-114-type reason_spam = string
115-val reason_spam_jsont : reason_spam Jsont.t
116-117-(** Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`. *)
118-119-type reason_sexual = string
120-val reason_sexual_jsont : reason_sexual Jsont.t
121-122-(** Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`. *)
123124-type reason_rude = string
125-val reason_rude_jsont : reason_rude Jsont.t
126127-(** Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonOther`. *)
00128129-type reason_other = string
130-val reason_other_jsont : reason_other Jsont.t
131132-(** Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`. *)
0133134-type reason_misleading = string
135-val reason_misleading_jsont : reason_misleading Jsont.t
136137-(** Appeal a previously taken moderation action *)
00138139-type reason_appeal = string
140-val reason_appeal_jsont : reason_appeal Jsont.t
141142 end
143- end
144- end
145-end
146-module App : sig
147- module Bsky : sig
148- module AuthManageLabelerService : sig
149150-type main = unit
151-val main_jsont : main Jsont.t
00152153- end
154- module AuthViewAll : sig
155156-type main = unit
157-val main_jsont : main Jsont.t
158159- end
160- module AuthManageModeration : sig
0161162-type main = unit
163-val main_jsont : main Jsont.t
1640165 end
166 module Richtext : sig
167 module Facet : sig
168-(** 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'). *)
169170-type tag = {
171- tag : string;
0000000000172}
173174-(** Jsont codec for {!type:tag}. *)
175-val tag_jsont : tag Jsont.t
176177(** Facet feature for mention of another account. The text is usually a handle, including a '\@' prefix, but the facet reference is a DID. *)
178···183(** Jsont codec for {!type:mention}. *)
184val mention_jsont : mention Jsont.t
185186-(** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. *)
187188-type link = {
189- uri : string;
190}
191192-(** Jsont codec for {!type:link}. *)
193-val link_jsont : link Jsont.t
194-195-(** 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. *)
196-197-type byte_slice = {
198- byte_end : int;
199- byte_start : int;
200-}
201-202-(** Jsont codec for {!type:byte_slice}. *)
203-val byte_slice_jsont : byte_slice Jsont.t
204205(** Annotation of a sub-string within rich text. *)
206···214215 end
216 end
217- module AuthManageFeedDeclarations : sig
00218219-type main = unit
220-val main_jsont : main Jsont.t
221222- end
223- module AuthFullApp : sig
0224225-type main = unit
226-val main_jsont : main Jsont.t
227228- end
229- module AuthManageNotifications : sig
0230231-type main = unit
232-val main_jsont : main Jsont.t
233234- end
235- module AuthManageProfile : sig
0000236237-type main = unit
238-val main_jsont : main Jsont.t
0000000000000000000000000000239240- end
241- module Ageassurance : sig
242- module Defs : sig
243-(** The status of the Age Assurance process. *)
244245-type status = string
246-val status_jsont : status Jsont.t
000000000247248-(** Additional metadata needed to compute Age Assurance state client-side. *)
0249250-type state_metadata = {
251- account_created_at : string option; (** The account creation timestamp. *)
0000000252}
253254-(** Jsont codec for {!type:state_metadata}. *)
255-val state_metadata_jsont : state_metadata Jsont.t
256257-(** Object used to store Age Assurance data in stash. *)
258259-type event = {
260- access : string; (** The access level granted based on Age Assurance data we've processed. *)
261- attempt_id : string; (** The unique identifier for this instance of the Age Assurance flow, in UUID format. *)
262- complete_ip : string option; (** The IP address used when completing the Age Assurance flow. *)
263- complete_ua : string option; (** The user agent used when completing the Age Assurance flow. *)
264- country_code : string; (** The ISO 3166-1 alpha-2 country code provided when beginning the Age Assurance flow. *)
265- created_at : string; (** The date and time of this write operation. *)
266- email : string option; (** The email used for Age Assurance. *)
267- init_ip : string option; (** The IP address used when initiating the Age Assurance flow. *)
268- init_ua : string option; (** The user agent used when initiating the Age Assurance flow. *)
269- region_code : string option; (** The ISO 3166-2 region code provided when beginning the Age Assurance flow. *)
270- status : string; (** The status of the Age Assurance process. *)
271}
272273-(** Jsont codec for {!type:event}. *)
274-val event_jsont : event Jsont.t
275276-(** The Age Assurance configuration for a specific region. *)
00277278-type config_region = {
279- country_code : string; (** The ISO 3166-1 alpha-2 country code this configuration applies to. *)
280- min_access_age : int; (** The minimum age (as a whole integer) required to use Bluesky in this region. *)
281- region_code : string option; (** The ISO 3166-2 region code this configuration applies to. If omitted, the configuration applies to the entire country. *)
282- rules : Jsont.json list; (** The ordered list of Age Assurance rules that apply to this region. Rules should be applied in order, and the first matching rule determines the access level granted. The rules array should always include a default rule as the last item. *)
283}
284285-(** Jsont codec for {!type:config_region}. *)
286-val config_region_jsont : config_region Jsont.t
287288-(** The access level granted based on Age Assurance data we've processed. *)
289290-type access = string
291-val access_jsont : access Jsont.t
00000292293-(** The user's computed Age Assurance state. *)
00294295-type state = {
296- access : access;
297- last_initiated_at : string option; (** The timestamp when this state was last updated. *)
298- status : status;
299}
300301-(** Jsont codec for {!type:state}. *)
302-val state_jsont : state Jsont.t
303304-(** Age Assurance rule that applies if the user has declared themselves under a certain age. *)
305306-type config_region_rule_if_declared_under_age = {
307- access : access;
308- age : int; (** The age threshold as a whole integer. *)
309}
310311-(** Jsont codec for {!type:config_region_rule_if_declared_under_age}. *)
312-val config_region_rule_if_declared_under_age_jsont : config_region_rule_if_declared_under_age Jsont.t
313314-(** Age Assurance rule that applies if the user has declared themselves equal-to or over a certain age. *)
0315316-type config_region_rule_if_declared_over_age = {
317- access : access;
318- age : int; (** The age threshold as a whole integer. *)
319}
320321-(** Jsont codec for {!type:config_region_rule_if_declared_over_age}. *)
322-val config_region_rule_if_declared_over_age_jsont : config_region_rule_if_declared_over_age Jsont.t
323324-(** Age Assurance rule that applies if the user has been assured to be under a certain age. *)
325326-type config_region_rule_if_assured_under_age = {
327- access : access;
328- age : int; (** The age threshold as a whole integer. *)
329}
330331-(** Jsont codec for {!type:config_region_rule_if_assured_under_age}. *)
332-val config_region_rule_if_assured_under_age_jsont : config_region_rule_if_assured_under_age Jsont.t
333334-(** Age Assurance rule that applies if the user has been assured to be equal-to or over a certain age. *)
335336-type config_region_rule_if_assured_over_age = {
337- access : access;
338- age : int; (** The age threshold as a whole integer. *)
0339}
340341-(** Jsont codec for {!type:config_region_rule_if_assured_over_age}. *)
342-val config_region_rule_if_assured_over_age_jsont : config_region_rule_if_assured_over_age Jsont.t
343344-(** Age Assurance rule that applies if the account is older than a certain date. *)
345346-type config_region_rule_if_account_older_than = {
347- access : access;
348- date : string; (** The date threshold as a datetime string. *)
349}
350351-(** Jsont codec for {!type:config_region_rule_if_account_older_than}. *)
352-val config_region_rule_if_account_older_than_jsont : config_region_rule_if_account_older_than Jsont.t
0353354-(** Age Assurance rule that applies if the account is equal-to or newer than a certain date. *)
355356-type config_region_rule_if_account_newer_than = {
357- access : access;
358- date : string; (** The date threshold as a datetime string. *)
000000000000000359}
360361-(** Jsont codec for {!type:config_region_rule_if_account_newer_than}. *)
362-val config_region_rule_if_account_newer_than_jsont : config_region_rule_if_account_newer_than Jsont.t
363364-(** Age Assurance rule that applies by default. *)
365366-type config_region_rule_default = {
367- access : access;
0368}
369370-(** Jsont codec for {!type:config_region_rule_default}. *)
371-val config_region_rule_default_jsont : config_region_rule_default Jsont.t
372000373374-type config = {
375- regions : config_region list; (** The per-region Age Assurance configuration. *)
376}
377378-(** Jsont codec for {!type:config}. *)
379-val config_jsont : config Jsont.t
380381 end
382- module Begin : sig
383-(** Initiate Age Assurance for an account. *)
384385386type input = {
387- country_code : string; (** An ISO 3166-1 alpha-2 code of the user's location. *)
388- email : string; (** The user's email address to receive Age Assurance instructions. *)
389- language : string; (** The user's preferred language for communication during the Age Assurance process. *)
390- region_code : string option; (** An optional ISO 3166-2 code of the user's region or state within the country. *)
000000000391}
392393(** Jsont codec for {!type:input}. *)
394val input_jsont : input Jsont.t
395396397-type output = Defs.state
00398399(** Jsont codec for {!type:output}. *)
400val output_jsont : output Jsont.t
401402 end
403- module GetState : sig
404-(** Returns server-computed Age Assurance state, if available, and any additional metadata needed to compute Age Assurance state client-side. *)
405406-(** Query/procedure parameters. *)
407-type params = {
408- country_code : string;
409- region_code : string option;
410}
411412-(** Jsont codec for {!type:params}. *)
413-val params_jsont : params Jsont.t
414415416type output = {
417- metadata : Defs.state_metadata;
418- state : Defs.state;
419}
420421(** Jsont codec for {!type:output}. *)
422val output_jsont : output Jsont.t
423424 end
425- module GetConfig : sig
426-(** Returns Age Assurance configuration for use on the client. *)
000000427428429-type output = Defs.config
00430431(** Jsont codec for {!type:output}. *)
432val output_jsont : output Jsont.t
···436 module Labeler : sig
437 module Defs : sig
438439-type labeler_viewer_state = {
440- like : string option;
441-}
442-443-(** Jsont codec for {!type:labeler_viewer_state}. *)
444-val labeler_viewer_state_jsont : labeler_viewer_state Jsont.t
445-446-447type labeler_policies = {
448 label_value_definitions : Com.Atproto.Label.Defs.label_value_definition list option; (** Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler. *)
449 label_values : Com.Atproto.Label.Defs.label_value list; (** The label values which this labeler publishes. May include global or custom labels. *)
···453val labeler_policies_jsont : labeler_policies Jsont.t
4544550000000000000000000000456type labeler_view_detailed = {
457 cid : string;
458 creator : Jsont.json;
···469470(** Jsont codec for {!type:labeler_view_detailed}. *)
471val labeler_view_detailed_jsont : labeler_view_detailed Jsont.t
472-473-474-type labeler_view = {
475- cid : string;
476- creator : Jsont.json;
477- indexed_at : string;
478- labels : Com.Atproto.Label.Defs.label list option;
479- like_count : int option;
480- uri : string;
481- viewer : Jsont.json option;
482-}
483-484-(** Jsont codec for {!type:labeler_view}. *)
485-val labeler_view_jsont : labeler_view Jsont.t
486487 end
488 module Service : sig
···523524 end
525 end
526- module AuthCreatePosts : sig
527-528-type main = unit
529-val main_jsont : main Jsont.t
530-531- end
532- module Video : sig
533- module GetUploadLimits : sig
534-(** Get video upload limits for the authenticated user. *)
535-536-537-type output = {
538- can_upload : bool;
539- error : string option;
540- message : string option;
541- remaining_daily_bytes : int option;
542- remaining_daily_videos : int option;
543-}
544-545-(** Jsont codec for {!type:output}. *)
546-val output_jsont : output Jsont.t
547-548- end
549- module Defs : sig
550-551-type job_status = {
552- blob : Atp.Blob_ref.t option;
553- did : string;
554- error : string option;
555- job_id : string;
556- message : string option;
557- progress : int option; (** Progress within the current processing state. *)
558- state : string; (** The state of the video processing job. All values not listed as a known value indicate that the job is in process. *)
559-}
560-561-(** Jsont codec for {!type:job_status}. *)
562-val job_status_jsont : job_status Jsont.t
563-564- end
565- module UploadVideo : sig
566-(** Upload a video to be processed then stored on the PDS. *)
567-568-569-type input = unit
570-val input_jsont : input Jsont.t
571-572-573-type output = {
574- job_status : Defs.job_status;
575-}
576-577-(** Jsont codec for {!type:output}. *)
578-val output_jsont : output Jsont.t
579-580- end
581- module GetJobStatus : sig
582-(** Get status details for a video processing job. *)
583-584-(** Query/procedure parameters. *)
585-type params = {
586- job_id : string;
587-}
588-589-(** Jsont codec for {!type:params}. *)
590-val params_jsont : params Jsont.t
591592-593-type output = {
594- job_status : Defs.job_status;
00595}
596597-(** Jsont codec for {!type:output}. *)
598-val output_jsont : output Jsont.t
599600- end
601- end
602- module Embed : sig
603- module External : sig
604605type view_external = {
606 description : string;
···612(** Jsont codec for {!type:view_external}. *)
613val view_external_jsont : view_external Jsont.t
6140615616-type external_ = {
617- description : string;
618- thumb : Atp.Blob_ref.t option;
619- title : string;
620- uri : string;
621}
622623-(** Jsont codec for {!type:external_}. *)
624-val external__jsont : external_ Jsont.t
625626627type view = {
···631(** Jsont codec for {!type:view}. *)
632val view_jsont : view Jsont.t
633634-(** A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post). *)
635-636-type main = {
637- external_ : Jsont.json;
638-}
639-640-(** Jsont codec for {!type:main}. *)
641-val main_jsont : main Jsont.t
642-643 end
644 module Defs : sig
645(** width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. *)
···653val aspect_ratio_jsont : aspect_ratio Jsont.t
654655 end
656- module Images : sig
657658-type view_image = {
659- alt : string; (** Alt text description of the image, for accessibility. *)
000000000660 aspect_ratio : Jsont.json option;
661- fullsize : string; (** 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. *)
662- thumb : string; (** Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. *)
0663}
664665-(** Jsont codec for {!type:view_image}. *)
666-val view_image_jsont : view_image Jsont.t
0000000000066700668669type image = {
670 alt : string; (** Alt text description of the image, for accessibility. *)
···676val image_jsont : image Jsont.t
677678679-type view = {
680- images : Jsont.json list;
000681}
682683-(** Jsont codec for {!type:view}. *)
684-val view_jsont : view Jsont.t
685686687type main = {
···691(** Jsont codec for {!type:main}. *)
692val main_jsont : main Jsont.t
693694- end
695- module Video : sig
696697type view = {
698- alt : string option;
699- aspect_ratio : Jsont.json option;
700- cid : string;
701- playlist : string;
702- thumbnail : string option;
703}
704705(** Jsont codec for {!type:view}. *)
706val view_jsont : view Jsont.t
707708-709-type caption = {
710- file : Atp.Blob_ref.t;
711- lang : string;
712-}
713-714-(** Jsont codec for {!type:caption}. *)
715-val caption_jsont : caption Jsont.t
716-717718type main = {
719- alt : string option; (** Alt text description of the video, for accessibility. *)
720- aspect_ratio : Jsont.json option;
721- captions : Jsont.json list option;
722- video : Atp.Blob_ref.t; (** The mp4 video file. May be up to 100mb, formerly limited to 50mb. *)
723}
724725(** Jsont codec for {!type:main}. *)
726val main_jsont : main Jsont.t
727728- end
729- module RecordWithMedia : sig
730731type view = {
732 media : Jsont.json;
···736(** Jsont codec for {!type:view}. *)
737val view_jsont : view Jsont.t
73800739740type main = {
741- media : Jsont.json;
742- record : Jsont.json;
743}
744745(** Jsont codec for {!type:main}. *)
746val main_jsont : main Jsont.t
747748- end
749- module Record : sig
750751-type view_record = {
752- author : Jsont.json;
753- cid : string;
754- embeds : Jsont.json list option;
755- indexed_at : string;
756- labels : Com.Atproto.Label.Defs.label list option;
757- like_count : int option;
758- quote_count : int option;
759- reply_count : int option;
760- repost_count : int option;
761- uri : string;
762- value : Jsont.json; (** The record data itself. *)
763}
764765-(** Jsont codec for {!type:view_record}. *)
766-val view_record_jsont : view_record Jsont.t
767768769-type view_not_found = {
770- not_found : bool;
0771 uri : string;
772}
773774-(** Jsont codec for {!type:view_not_found}. *)
775-val view_not_found_jsont : view_not_found Jsont.t
776777778type view_detached = {
···784val view_detached_jsont : view_detached Jsont.t
785786787-type view_blocked = {
788- author : Jsont.json;
789- blocked : bool;
790 uri : string;
791}
792793-(** Jsont codec for {!type:view_blocked}. *)
794-val view_blocked_jsont : view_blocked Jsont.t
795796797-type view = {
798- record : Jsont.json;
0000000000799}
800801-(** Jsont codec for {!type:view}. *)
802-val view_jsont : view Jsont.t
803-804-805-type main = {
806- record : Com.Atproto.Repo.StrongRef.main;
807-}
808-809-(** Jsont codec for {!type:main}. *)
810-val main_jsont : main Jsont.t
811812 end
813 end
814- module Notification : sig
815- module UpdateSeen : sig
816-(** Notify server that the requesting account has seen notifications. Requires auth. *)
817-818-819-type input = {
820- seen_at : string;
821-}
822823-(** Jsont codec for {!type:input}. *)
824-val input_jsont : input Jsont.t
825826- end
827- module RegisterPush : sig
828-(** Register to receive push notifications, via a specified service, for the requesting account. Requires auth. *)
82900830831-type input = {
832- age_restricted : bool option; (** Set to true when the actor is age restricted *)
833- app_id : string;
834- platform : string;
835- service_did : string;
836- token : string;
837-}
838839-(** Jsont codec for {!type:input}. *)
840-val input_jsont : input Jsont.t
841842- end
843- module ListNotifications : sig
844845-type notification = {
846- author : Jsont.json;
847- cid : string;
848- indexed_at : string;
849- is_read : bool;
850- labels : Com.Atproto.Label.Defs.label list option;
851- reason : string; (** The reason why this notification was delivered - e.g. your post was liked, or you received a new follower. *)
852- reason_subject : string option;
853- record : Jsont.json;
854- uri : string;
855-}
856857-(** Jsont codec for {!type:notification}. *)
858-val notification_jsont : notification Jsont.t
859860-(** Enumerate notifications for the requesting account. Requires auth. *)
0861862-(** Query/procedure parameters. *)
863-type params = {
864- cursor : string option;
865- limit : int option;
866- priority : bool option;
867- reasons : string list option; (** Notification reasons to include in response. *)
868- seen_at : string option;
869-}
870871-(** Jsont codec for {!type:params}. *)
872-val params_jsont : params Jsont.t
87300874875-type output = {
876- cursor : string option;
877- notifications : Jsont.json list;
878- priority : bool option;
879- seen_at : string option;
880-}
881882-(** Jsont codec for {!type:output}. *)
883-val output_jsont : output Jsont.t
884885- end
886- module GetUnreadCount : sig
887-(** Count the number of unread notifications for the requesting account. Requires auth. *)
888889-(** Query/procedure parameters. *)
890-type params = {
891- priority : bool option;
892- seen_at : string option;
893-}
894895-(** Jsont codec for {!type:params}. *)
896-val params_jsont : params Jsont.t
8970898899-type output = {
900- count : int;
000901}
902903-(** Jsont codec for {!type:output}. *)
904-val output_jsont : output Jsont.t
905906- end
907- module UnregisterPush : sig
908-(** The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth. *)
909910-911-type input = {
912- app_id : string;
913- platform : string;
914- service_did : string;
915- token : string;
000000916}
917918-(** Jsont codec for {!type:input}. *)
919-val input_jsont : input Jsont.t
920-921- end
922- module PutPreferences : sig
923-(** Set notification-related preferences for an account. Requires auth. *)
9240925926-type input = {
927- priority : bool;
928}
929930-(** Jsont codec for {!type:input}. *)
931-val input_jsont : input Jsont.t
932-933- end
934- module Defs : sig
935936-type record_deleted = unit
937938-(** Jsont codec for {!type:record_deleted}. *)
939-val record_deleted_jsont : record_deleted Jsont.t
940941942-type preference = {
943- list_ : bool;
944- push : bool;
945}
946947-(** Jsont codec for {!type:preference}. *)
948-val preference_jsont : preference Jsont.t
9490950951-type filterable_preference = {
952- include_ : string;
953- list_ : bool;
954- push : bool;
955}
956957-(** Jsont codec for {!type:filterable_preference}. *)
958-val filterable_preference_jsont : filterable_preference Jsont.t
9590960961-type chat_preference = {
962- include_ : string;
963- push : bool;
964}
965966-(** Jsont codec for {!type:chat_preference}. *)
967-val chat_preference_jsont : chat_preference Jsont.t
9680969970-type activity_subscription = {
971- post : bool;
972- reply : bool;
973}
974975-(** Jsont codec for {!type:activity_subscription}. *)
976-val activity_subscription_jsont : activity_subscription Jsont.t
977978-(** Object used to store activity subscription data in stash. *)
979980-type subject_activity_subscription = {
981- activity_subscription : Jsont.json;
982- subject : string;
983}
984985-(** Jsont codec for {!type:subject_activity_subscription}. *)
986-val subject_activity_subscription_jsont : subject_activity_subscription Jsont.t
9870988989-type preferences = {
990- chat : Jsont.json;
991- follow : Jsont.json;
992- like : Jsont.json;
993- like_via_repost : Jsont.json;
994- mention : Jsont.json;
995- quote : Jsont.json;
996- reply : Jsont.json;
997- repost : Jsont.json;
998- repost_via_repost : Jsont.json;
999- starterpack_joined : Jsont.json;
1000- subscribed_post : Jsont.json;
1001- unverified : Jsont.json;
1002- verified : Jsont.json;
1003}
10041005-(** Jsont codec for {!type:preferences}. *)
1006-val preferences_jsont : preferences Jsont.t
10071008- end
1009- module Declaration : sig
1010-(** A declaration of the user's choices related to notifications that can be produced by them. *)
10111012-type main = {
1013- allow_subscriptions : string; (** A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'. *)
01014}
10151016-(** Jsont codec for {!type:main}. *)
1017-val main_jsont : main Jsont.t
10181019- end
1020- module ListActivitySubscriptions : sig
1021-(** Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth. *)
10221023-(** Query/procedure parameters. *)
1024-type params = {
1025- cursor : string option;
1026- limit : int option;
1027}
10281029-(** Jsont codec for {!type:params}. *)
1030-val params_jsont : params Jsont.t
1031010321033-type output = {
1034- cursor : string option;
1035- subscriptions : Jsont.json list;
01036}
10371038-(** Jsont codec for {!type:output}. *)
1039-val output_jsont : output Jsont.t
10401041 end
1042- module GetPreferences : sig
1043-(** Get notification-related preferences for an account. Requires auth. *)
10441045(** Query/procedure parameters. *)
1046-type params = unit
00010471048(** Jsont codec for {!type:params}. *)
1049val params_jsont : params Jsont.t
105010511052type output = {
1053- preferences : Jsont.json;
01054}
10551056(** Jsont codec for {!type:output}. *)
1057val output_jsont : output Jsont.t
10581059 end
1060- module PutActivitySubscription : sig
1061-(** Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth. *)
106210631064-type input = {
1065- activity_subscription : Jsont.json;
1066- subject : string;
1067-}
1068-1069-(** Jsont codec for {!type:input}. *)
1070-val input_jsont : input Jsont.t
1071-1072-1073-type output = {
1074- activity_subscription : Jsont.json option;
1075- subject : string;
1076-}
10771078(** Jsont codec for {!type:output}. *)
1079val output_jsont : output Jsont.t
10801081 end
1082- module PutPreferencesV2 : sig
1083-(** Set notification-related preferences for an account. Requires auth. *)
108410851086type input = {
1087- chat : Jsont.json option;
1088- follow : Jsont.json option;
1089- like : Jsont.json option;
1090- like_via_repost : Jsont.json option;
1091- mention : Jsont.json option;
1092- quote : Jsont.json option;
1093- reply : Jsont.json option;
1094- repost : Jsont.json option;
1095- repost_via_repost : Jsont.json option;
1096- starterpack_joined : Jsont.json option;
1097- subscribed_post : Jsont.json option;
1098- unverified : Jsont.json option;
1099- verified : Jsont.json option;
1100}
11011102(** Jsont codec for {!type:input}. *)
1103val input_jsont : input Jsont.t
110411051106-type output = {
1107- preferences : Jsont.json;
1108-}
11091110(** Jsont codec for {!type:output}. *)
1111val output_jsont : output Jsont.t
···11531154 end
1155 module Defs : sig
1156-(** An individual verification for an associated subject. *)
11571158-type verification_view = {
1159- created_at : string; (** Timestamp when the verification was created. *)
1160- is_valid : bool; (** True if the verification passes validation, otherwise false. *)
1161- issuer : string; (** The user who issued this verification. *)
1162- uri : string; (** The AT-URI of the verification record. *)
1163}
11641165-(** Jsont codec for {!type:verification_view}. *)
1166-val verification_view_jsont : verification_view Jsont.t
11671168-(** Preferences for how verified accounts appear in the app. *)
11691170-type verification_prefs = {
1171- hide_badges : bool option; (** Hide the blue check badges for verified accounts and trusted verifiers. *)
1172}
11731174-(** Jsont codec for {!type:verification_prefs}. *)
1175-val verification_prefs_jsont : verification_prefs Jsont.t
117611771178-type thread_view_pref = {
1179- sort : string option; (** Sorting mode for threads. *)
001180}
11811182-(** Jsont codec for {!type:thread_view_pref}. *)
1183-val thread_view_pref_jsont : thread_view_pref Jsont.t
1184011851186-type status_view = {
1187- cid : string option;
1188- embed : Jsont.json option; (** An optional embed associated with the status. *)
1189- expires_at : string option; (** The date when this status will expire. The application might choose to no longer return the status after expiration. *)
1190- is_active : bool option; (** True if the status is not expired, false if it is expired. Only present if expiration was set. *)
1191- is_disabled : bool option; (** True if the user's go-live access has been disabled by a moderator, false otherwise. *)
1192- record : Jsont.json;
1193- status : string; (** The status for the account. *)
1194- uri : string option;
1195}
11961197-(** Jsont codec for {!type:status_view}. *)
1198-val status_view_jsont : status_view Jsont.t
119912001201-type saved_feeds_pref = {
1202- pinned : string list;
1203- saved : string list;
1204- timeline_index : int option;
0001205}
12061207-(** Jsont codec for {!type:saved_feeds_pref}. *)
1208-val saved_feeds_pref_jsont : saved_feeds_pref Jsont.t
120912101211-type saved_feed = {
1212- id : string;
1213- pinned : bool;
1214- type_ : string;
1215- value : string;
1216}
12171218-(** Jsont codec for {!type:saved_feed}. *)
1219-val saved_feed_jsont : saved_feed Jsont.t
122012211222-type profile_associated_chat = {
1223- allow_incoming : string;
1224}
12251226-(** Jsont codec for {!type:profile_associated_chat}. *)
1227-val profile_associated_chat_jsont : profile_associated_chat Jsont.t
122812291230-type profile_associated_activity_subscription = {
1231- allow_subscriptions : string;
1232}
12331234-(** Jsont codec for {!type:profile_associated_activity_subscription}. *)
1235-val profile_associated_activity_subscription_jsont : profile_associated_activity_subscription Jsont.t
123612371238-type preferences = Jsont.json list
1239-val preferences_jsont : preferences Jsont.t
12401241-(** 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. *)
12421243-type post_interaction_settings_pref = {
1244- postgate_embedding_rules : Jsont.json list option; (** 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. *)
1245- threadgate_allow_rules : Jsont.json list option; (** 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. *)
001246}
12471248-(** Jsont codec for {!type:post_interaction_settings_pref}. *)
1249-val post_interaction_settings_pref_jsont : post_interaction_settings_pref Jsont.t
125012511252type personal_details_pref = {
···1256(** Jsont codec for {!type:personal_details_pref}. *)
1257val personal_details_pref_jsont : personal_details_pref Jsont.t
12581259-(** A new user experiences (NUX) storage object *)
12601261-type nux = {
1262- completed : bool;
1263- data : string option; (** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. *)
1264- expires_at : string option; (** The date and time at which the NUX will expire and should be considered completed. *)
1265- id : string;
1266}
12671268-(** Jsont codec for {!type:nux}. *)
1269-val nux_jsont : nux Jsont.t
127012711272-type muted_word_target = string
1273-val muted_word_target_jsont : muted_word_target Jsont.t
127412751276-type labeler_pref_item = {
1277- did : string;
1278}
12791280-(** Jsont codec for {!type:labeler_pref_item}. *)
1281-val labeler_pref_item_jsont : labeler_pref_item Jsont.t
128212831284-type interests_pref = {
1285- tags : string list; (** A list of tags which describe the account owner's interests gathered during onboarding. *)
1286}
12871288-(** Jsont codec for {!type:interests_pref}. *)
1289-val interests_pref_jsont : interests_pref Jsont.t
129012911292-type hidden_posts_pref = {
1293- items : string list; (** A list of URIs of posts the account owner has hidden. *)
0001294}
12951296-(** Jsont codec for {!type:hidden_posts_pref}. *)
1297-val hidden_posts_pref_jsont : hidden_posts_pref Jsont.t
0000000000129812991300-type feed_view_pref = {
1301- feed : string; (** The URI of the feed, or an identifier which describes the feed. *)
1302- hide_quote_posts : bool option; (** Hide quote posts in the feed. *)
1303- hide_replies : bool option; (** Hide replies in the feed. *)
1304- hide_replies_by_like_count : int option; (** Hide replies in the feed if they do not have this number of likes. *)
1305- hide_replies_by_unfollowed : bool option; (** Hide replies in the feed if they are not by followed users. *)
1306- hide_reposts : bool option; (** Hide reposts in the feed. *)
001307}
13081309-(** Jsont codec for {!type:feed_view_pref}. *)
1310-val feed_view_pref_jsont : feed_view_pref Jsont.t
13111312-(** Read-only preference containing value(s) inferred from the user's declared birthdate. Absence of this preference object in the response indicates that the user has not made a declaration. *)
13131314-type declared_age_pref = {
1315- is_over_age13 : bool option; (** Indicates if the user has declared that they are over 13 years of age. *)
1316- is_over_age16 : bool option; (** Indicates if the user has declared that they are over 16 years of age. *)
1317- is_over_age18 : bool option; (** Indicates if the user has declared that they are over 18 years of age. *)
1318}
13191320-(** Jsont codec for {!type:declared_age_pref}. *)
1321-val declared_age_pref_jsont : declared_age_pref Jsont.t
1322013231324-type content_label_pref = {
1325- label : string;
1326- labeler_did : string option; (** Which labeler does this preference apply to? If undefined, applies globally. *)
1327- visibility : string;
1328}
13291330-(** Jsont codec for {!type:content_label_pref}. *)
1331-val content_label_pref_jsont : content_label_pref Jsont.t
13321333-(** If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress. *)
13341335-type bsky_app_progress_guide = {
1336- guide : string;
0001337}
13381339-(** Jsont codec for {!type:bsky_app_progress_guide}. *)
1340-val bsky_app_progress_guide_jsont : bsky_app_progress_guide Jsont.t
1341013421343-type adult_content_pref = {
1344- enabled : bool;
001345}
13461347-(** Jsont codec for {!type:adult_content_pref}. *)
1348-val adult_content_pref_jsont : adult_content_pref Jsont.t
13491350-(** Represents the verification information about the user this object is attached to. *)
13511352-type verification_state = {
1353- trusted_verifier_status : string; (** The user's status as a trusted verifier. *)
1354- verifications : Jsont.json list; (** All verifications issued by trusted verifiers on behalf of this user. Verifications by untrusted verifiers are not included. *)
1355- verified_status : string; (** The user's status as a verified account. *)
1356}
13571358-(** Jsont codec for {!type:verification_state}. *)
1359-val verification_state_jsont : verification_state Jsont.t
1360013611362-type saved_feeds_pref_v2 = {
1363- items : Jsont.json list;
00001364}
13651366-(** Jsont codec for {!type:saved_feeds_pref_v2}. *)
1367-val saved_feeds_pref_v2_jsont : saved_feeds_pref_v2 Jsont.t
136813691370type profile_associated = {
···1379(** Jsont codec for {!type:profile_associated}. *)
1380val profile_associated_jsont : profile_associated Jsont.t
13811382-(** A word that the account owner has muted. *)
13831384-type muted_word = {
1385- actor_target : string option; (** Groups of users to apply the muted word to. If undefined, applies to all users. *)
1386- expires_at : string option; (** The date and time at which the muted word will expire and no longer be applied. *)
1387- id : string option;
1388- targets : Jsont.json list; (** The intended targets of the muted word. *)
1389- value : string; (** The muted word itself. *)
1390}
13911392-(** Jsont codec for {!type:muted_word}. *)
1393-val muted_word_jsont : muted_word Jsont.t
1394013951396-type labelers_pref = {
1397- labelers : Jsont.json list;
001398}
13991400-(** Jsont codec for {!type:labelers_pref}. *)
1401-val labelers_pref_jsont : labelers_pref Jsont.t
1402-1403-(** A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this. *)
1404-1405-type bsky_app_state_pref = {
1406- active_progress_guide : Jsont.json option;
1407- nuxs : Jsont.json list option; (** Storage for NUXs the user has encountered. *)
1408- queued_nudges : string list option; (** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. *)
1409-}
1410-1411-(** Jsont codec for {!type:bsky_app_state_pref}. *)
1412-val bsky_app_state_pref_jsont : bsky_app_state_pref Jsont.t
141314141415type muted_words_pref = {
···1419(** Jsont codec for {!type:muted_words_pref}. *)
1420val muted_words_pref_jsont : muted_words_pref Jsont.t
14211422-(** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. *)
14231424-type viewer_state = {
1425- activity_subscription : Jsont.json option; (** This property is present only in selected cases, as an optimization. *)
1426- blocked_by : bool option;
1427- blocking : string option;
1428- blocking_by_list : Jsont.json option;
1429- followed_by : string option;
1430- following : string option;
1431- known_followers : Jsont.json option; (** This property is present only in selected cases, as an optimization. *)
1432- muted : bool option;
1433- muted_by_list : Jsont.json option;
1434}
14351436-(** Jsont codec for {!type:viewer_state}. *)
1437-val viewer_state_jsont : viewer_state Jsont.t
143814391440-type profile_view_detailed = {
1441 associated : Jsont.json option;
1442 avatar : string option;
1443- banner : string option;
1444 created_at : string option;
1445 debug : Jsont.json option; (** Debug information for internal development *)
1446 description : string option;
1447 did : string;
1448 display_name : string option;
1449- followers_count : int option;
1450- follows_count : int option;
1451 handle : string;
1452 indexed_at : string option;
1453- joined_via_starter_pack : Jsont.json option;
1454 labels : Com.Atproto.Label.Defs.label list option;
1455- pinned_post : Com.Atproto.Repo.StrongRef.main option;
1456- posts_count : int option;
1457 pronouns : string option;
1458 status : Jsont.json option;
1459 verification : Jsont.json option;
1460 viewer : Jsont.json option;
1461- website : string option;
1462}
14631464-(** Jsont codec for {!type:profile_view_detailed}. *)
1465-val profile_view_detailed_jsont : profile_view_detailed Jsont.t
146614671468type profile_view_basic = {
···1484val profile_view_basic_jsont : profile_view_basic Jsont.t
148514861487-type profile_view = {
1488 associated : Jsont.json option;
1489 avatar : string option;
01490 created_at : string option;
1491 debug : Jsont.json option; (** Debug information for internal development *)
1492 description : string option;
1493 did : string;
1494 display_name : string option;
001495 handle : string;
1496 indexed_at : string option;
01497 labels : Com.Atproto.Label.Defs.label list option;
001498 pronouns : string option;
1499 status : Jsont.json option;
1500 verification : Jsont.json option;
1501 viewer : Jsont.json option;
01502}
15031504-(** Jsont codec for {!type:profile_view}. *)
1505-val profile_view_jsont : profile_view Jsont.t
15061507-(** The subject's followers whom you also follow *)
1508-1509-type known_followers = {
1510- count : int;
1511- followers : Jsont.json list;
1512-}
1513-1514-(** Jsont codec for {!type:known_followers}. *)
1515-val known_followers_jsont : known_followers Jsont.t
1516-1517- end
1518- module GetPreferences : sig
1519-(** Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth. *)
1520-1521-(** Query/procedure parameters. *)
1522-type params = unit
1523-1524-(** Jsont codec for {!type:params}. *)
1525-val params_jsont : params Jsont.t
1526-15271528-type output = {
1529- preferences : Jsont.json;
000000001530}
15311532-(** Jsont codec for {!type:output}. *)
1533-val output_jsont : output Jsont.t
15341535 end
1536 module SearchActorsTypeahead : sig
···1555val output_jsont : output Jsont.t
15561557 end
1558- module GetProfile : sig
1559-(** Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth. *)
1560-1561-(** Query/procedure parameters. *)
1562-type params = {
1563- actor : string; (** Handle or DID of account to fetch profile of. *)
1564-}
1565-1566-(** Jsont codec for {!type:params}. *)
1567-val params_jsont : params Jsont.t
1568-1569-1570-type output = Jsont.json
1571-1572-(** Jsont codec for {!type:output}. *)
1573-val output_jsont : output Jsont.t
1574-1575- end
1576 module SearchActors : sig
1577(** Find actors (profiles) matching search criteria. Does not require auth. *)
1578···1597val output_jsont : output Jsont.t
15981599 end
0000000000001600 module GetSuggestions : sig
1601(** Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding. *)
1602···1640val output_jsont : output Jsont.t
16411642 end
1643- module PutPreferences : sig
1644-(** Set the private preferences attached to the account. *)
1645-1646-1647-type input = {
1648- preferences : Jsont.json;
1649-}
1650-1651-(** Jsont codec for {!type:input}. *)
1652-val input_jsont : input Jsont.t
1653-1654- end
1655- end
1656- module Contact : sig
1657- module Defs : sig
1658-1659-type sync_status = {
1660- matches_count : int; (** Number of existing contact matches resulting of the user imports and of their imported contacts having imported the user. Matches stop being counted when the user either follows the matched contact or dismisses the match. *)
1661- synced_at : string; (** Last date when contacts where imported. *)
1662-}
1663-1664-(** Jsont codec for {!type:sync_status}. *)
1665-val sync_status_jsont : sync_status Jsont.t
1666-1667-(** A stash object to be sent via bsync representing a notification to be created. *)
1668-1669-type notification = {
1670- from : string; (** The DID of who this notification comes from. *)
1671- to_ : string; (** The DID of who this notification should go to. *)
1672-}
1673-1674-(** Jsont codec for {!type:notification}. *)
1675-val notification_jsont : notification Jsont.t
1676-1677-(** Associates a profile with the positional index of the contact import input in the call to `app.bsky.contact.importContacts`, so clients can know which phone caused a particular match. *)
1678-1679-type match_and_contact_index = {
1680- contact_index : int; (** The index of this match in the import contact input. *)
1681- match_ : Jsont.json; (** Profile of the matched user. *)
1682-}
1683-1684-(** Jsont codec for {!type:match_and_contact_index}. *)
1685-val match_and_contact_index_jsont : match_and_contact_index Jsont.t
1686-1687- end
1688- module RemoveData : sig
1689-(** Removes all stored hashes used for contact matching, existing matches, and sync status. Requires authentication. *)
1690-16911692-type input = unit
1693-1694-(** Jsont codec for {!type:input}. *)
1695-val input_jsont : input Jsont.t
1696-1697-1698-type output = unit
1699-1700-(** Jsont codec for {!type:output}. *)
1701-val output_jsont : output Jsont.t
1702-1703- end
1704- module DismissMatch : sig
1705-(** Removes a match that was found via contact import. It shouldn't appear again if the same contact is re-imported. Requires authentication. *)
1706-1707-1708-type input = {
1709- subject : string; (** The subject's DID to dismiss the match with. *)
1710}
17111712-(** Jsont codec for {!type:input}. *)
1713-val input_jsont : input Jsont.t
171417151716-type output = unit
17171718(** Jsont codec for {!type:output}. *)
1719val output_jsont : output Jsont.t
17201721 end
1722- module GetMatches : sig
1723-(** Returns the matched contacts (contacts that were mutually imported). Excludes dismissed matches. Requires authentication. *)
17241725(** Query/procedure parameters. *)
1726-type params = {
1727- cursor : string option;
1728- limit : int option;
1729-}
17301731(** Jsont codec for {!type:params}. *)
1732val params_jsont : params Jsont.t
173317341735type output = {
1736- cursor : string option;
1737- matches : Jsont.json list;
1738}
17391740(** Jsont codec for {!type:output}. *)
1741val output_jsont : output Jsont.t
17421743 end
1744- module VerifyPhone : sig
1745-(** Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication. *)
1746-017471748-type input = {
1749- code : string; (** The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`. *)
1750- phone : string; (** The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`. *)
001751}
17521753-(** Jsont codec for {!type:input}. *)
1754-val input_jsont : input Jsont.t
1755-1756-1757-type output = {
1758- token : string; (** JWT to be used in a call to `app.bsky.contact.importContacts`. It is only valid for a single call. *)
1759-}
1760-1761-(** Jsont codec for {!type:output}. *)
1762-val output_jsont : output Jsont.t
17631764 end
1765- module StartPhoneVerification : sig
1766-(** Starts a phone verification flow. The phone passed will receive a code via SMS that should be passed to `app.bsky.contact.verifyPhone`. Requires authentication. *)
176717681769type input = {
1770- phone : string; (** The phone number to receive the code via SMS. *)
1771}
17721773(** Jsont codec for {!type:input}. *)
1774val input_jsont : input Jsont.t
17751776-1777-type output = unit
1778-1779-(** Jsont codec for {!type:output}. *)
1780-val output_jsont : output Jsont.t
1781-1782 end
1783- module SendNotification : sig
1784-(** System endpoint to send notifications related to contact imports. Requires role authentication. *)
178517861787type input = {
1788- from : string; (** The DID of who this notification comes from. *)
1789- to_ : string; (** The DID of who this notification should go to. *)
1790}
17911792(** Jsont codec for {!type:input}. *)
1793val input_jsont : input Jsont.t
17941795-1796-type output = unit
1797-1798-(** Jsont codec for {!type:output}. *)
1799-val output_jsont : output Jsont.t
1800-1801 end
1802- module GetSyncStatus : sig
1803-(** Gets the user's current contact import status. Requires authentication. *)
1804-1805-(** Query/procedure parameters. *)
1806-type params = unit
1807-1808-(** Jsont codec for {!type:params}. *)
1809-val params_jsont : params Jsont.t
1810-1811-1812-type output = {
1813- sync_status : Defs.sync_status option; (** If present, indicates the user has imported their contacts. If not present, indicates the user never used the feature or called `app.bsky.contact.removeData` and didn't import again since. *)
1814-}
1815-1816-(** Jsont codec for {!type:output}. *)
1817-val output_jsont : output Jsont.t
1818-1819- end
1820- module ImportContacts : sig
1821-(** Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication. *)
182218231824type input = {
1825- contacts : string list; (** List of phone numbers in global E.164 format (e.g., '+12125550123'). Phone numbers that cannot be normalized into a valid phone number will be discarded. Should not repeat the 'phone' input used in `app.bsky.contact.verifyPhone`. *)
1826- token : string; (** JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`. *)
1827}
18281829(** Jsont codec for {!type:input}. *)
1830val input_jsont : input Jsont.t
1831-1832-1833-type output = {
1834- matches_and_contact_indexes : Defs.match_and_contact_index list; (** The users that matched during import and their indexes on the input contacts, so the client can correlate with its local list. *)
1835-}
1836-1837-(** Jsont codec for {!type:output}. *)
1838-val output_jsont : output Jsont.t
18391840 end
1841- end
1842- module Graph : sig
1843 module Starterpack : sig
18441845type feed_item = {
···1864val main_jsont : main Jsont.t
18651866 end
1867- module GetFollows : sig
1868-(** Enumerates accounts which a specified account (actor) follows. *)
1869-1870-(** Query/procedure parameters. *)
1871-type params = {
1872- actor : string;
1873- cursor : string option;
1874- limit : int option;
1875-}
1876-1877-(** Jsont codec for {!type:params}. *)
1878-val params_jsont : params Jsont.t
187918801881-type output = {
1882- cursor : string option;
1883- follows : Jsont.json list;
1884- subject : Jsont.json;
1885}
18861887-(** Jsont codec for {!type:output}. *)
1888-val output_jsont : output Jsont.t
18891890 end
1891- module GetSuggestedFollowsByActor : sig
1892-(** Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account. *)
18931894-(** Query/procedure parameters. *)
1895-type params = {
1896- actor : string;
1897}
18981899-(** Jsont codec for {!type:params}. *)
1900-val params_jsont : params Jsont.t
190100019021903-type output = {
1904- is_fallback : bool option; (** If true, response has fallen-back to generic results, and is not scoped using relativeToDid *)
1905- rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
1906- suggestions : Jsont.json list;
1907}
19081909-(** Jsont codec for {!type:output}. *)
1910-val output_jsont : output Jsont.t
19111912 end
1913- module Block : sig
1914-(** Record declaring a 'block' relationship against another account. NOTE: blocks are public in Bluesky; see blog posts for details. *)
19151916type main = {
1917 created_at : string;
1918- subject : string; (** DID of the account to be blocked. *)
01919}
19201921(** Jsont codec for {!type:main}. *)
···1934val main_jsont : main Jsont.t
19351936 end
1937- module MuteThread : sig
1938-(** Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth. *)
00000000193919401941-type input = {
1942- root : string;
001943}
19441945-(** Jsont codec for {!type:input}. *)
1946-val input_jsont : input Jsont.t
19471948 end
1949- module GetFollowers : sig
1950-(** Enumerates accounts which follow a specified account (actor). *)
19511952(** Query/procedure parameters. *)
1953type params = {
1954- actor : string;
1955 cursor : string option;
1956 limit : int option;
1957}
···19621963type output = {
1964 cursor : string option;
1965- followers : Jsont.json list;
1966- subject : Jsont.json;
1967}
19681969(** Jsont codec for {!type:output}. *)
1970val output_jsont : output Jsont.t
19711972 end
1973- module UnmuteThread : sig
1974-(** Unmutes the specified thread. Requires auth. *)
19751976-1977-type input = {
1978- root : string;
001979}
19801981-(** Jsont codec for {!type:input}. *)
1982-val input_jsont : input Jsont.t
19831984- end
1985- module Follow : sig
1986-(** Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView. *)
19871988-type main = {
1989- created_at : string;
1990- subject : string;
1991- via : Com.Atproto.Repo.StrongRef.main option;
1992}
19931994-(** Jsont codec for {!type:main}. *)
1995-val main_jsont : main Jsont.t
19961997 end
1998- module UnmuteActor : sig
1999-(** Unmutes the specified account. Requires auth. *)
20002001-2002-type input = {
2003 actor : string;
2004-}
2005-2006-(** Jsont codec for {!type:input}. *)
2007-val input_jsont : input Jsont.t
2008-2009- end
2010- module MuteActorList : sig
2011-(** Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth. *)
2012-2013-2014-type input = {
2015- list_ : string;
2016}
20172018-(** Jsont codec for {!type:input}. *)
2019-val input_jsont : input Jsont.t
2020-2021- end
2022- module UnmuteActorList : sig
2023-(** Unmutes the specified list of accounts. Requires auth. *)
202420252026-type input = {
2027- list_ : string;
002028}
20292030-(** Jsont codec for {!type:input}. *)
2031-val input_jsont : input Jsont.t
20322033 end
2034- module GetKnownFollowers : sig
2035-(** Enumerates accounts which follow a specified account (actor) and are followed by the viewer. *)
20362037(** Query/procedure parameters. *)
2038type params = {
···2055val output_jsont : output Jsont.t
20562057 end
2058- module MuteActor : sig
2059-(** Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth. *)
00000020600020612062-type input = {
2063- actor : string;
002064}
20652066-(** Jsont codec for {!type:input}. *)
2067-val input_jsont : input Jsont.t
20682069 end
2070- module Listitem : sig
2071-(** Record representing an account's inclusion on a specific list. The AppView will ignore duplicate listitem records. *)
20722073type main = {
2074 created_at : string;
2075- list_ : string; (** Reference (AT-URI) to the list record (app.bsky.graph.list). *)
2076- subject : string; (** The account which is included on the list. *)
2077}
20782079(** Jsont codec for {!type:main}. *)
···20812082 end
2083 module Defs : sig
020842085-type starter_pack_view_basic = {
2086- cid : string;
2087- creator : Jsont.json;
2088- indexed_at : string;
2089- joined_all_time_count : int option;
2090- joined_week_count : int option;
2091- labels : Com.Atproto.Label.Defs.label list option;
2092- list_item_count : int option;
2093- record : Jsont.json;
2094 uri : string;
2095}
20962097-(** Jsont codec for {!type:starter_pack_view_basic}. *)
2098-val starter_pack_view_basic_jsont : starter_pack_view_basic Jsont.t
20992100-(** lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) *)
00021012102-type relationship = {
2103- blocked_by : string option; (** if the actor is blocked by this DID, contains the AT-URI of the block record *)
2104- blocked_by_list : string option; (** if the actor is blocked by this DID via a block list, contains the AT-URI of the listblock record *)
2105- blocking : string option; (** if the actor blocks this DID, this is the AT-URI of the block record *)
2106- blocking_by_list : string option; (** if the actor blocks this DID via a block list, this is the AT-URI of the listblock record *)
2107- did : string;
2108- followed_by : string option; (** if the actor is followed by this DID, contains the AT-URI of the follow record *)
2109- following : string option; (** if the actor follows this DID, this is the AT-URI of the follow record *)
2110}
21112112-(** Jsont codec for {!type:relationship}. *)
2113-val relationship_jsont : relationship Jsont.t
21142115-(** A list of actors used for only for reference purposes such as within a starter pack. *)
21162117-type referencelist = string
2118-val referencelist_jsont : referencelist Jsont.t
21192120(** indicates that a handle or DID could not be resolved *)
2121···2127(** Jsont codec for {!type:not_found_actor}. *)
2128val not_found_actor_jsont : not_found_actor Jsont.t
21292130-(** A list of actors to apply an aggregate moderation action (mute/block) on. *)
21312132-type modlist = string
2133-val modlist_jsont : modlist Jsont.t
2134021352136-type list_viewer_state = {
2137- blocked : string option;
2138- muted : bool option;
000002139}
21402141-(** Jsont codec for {!type:list_viewer_state}. *)
2142-val list_viewer_state_jsont : list_viewer_state Jsont.t
214321442145-type list_purpose = string
2146-val list_purpose_jsont : list_purpose Jsont.t
2147-2148-2149-type list_item_view = {
2150- subject : Jsont.json;
0002151 uri : string;
2152}
21532154-(** Jsont codec for {!type:list_item_view}. *)
2155-val list_item_view_jsont : list_item_view Jsont.t
21562157-(** A list of actors used for curation purposes such as list feeds or interaction gating. *)
21582159-type curatelist = string
2160-val curatelist_jsont : curatelist Jsont.t
2161-2162-2163-type list_view_basic = {
2164 avatar : string option;
2165 cid : string;
2166- indexed_at : string option;
0002167 labels : Com.Atproto.Label.Defs.label list option;
2168 list_item_count : int option;
2169 name : string;
···2172 viewer : Jsont.json option;
2173}
21742175-(** Jsont codec for {!type:list_view_basic}. *)
2176-val list_view_basic_jsont : list_view_basic Jsont.t
217721782179-type list_view = {
2180 avatar : string option;
2181 cid : string;
2182- creator : Jsont.json;
2183- description : string option;
2184- description_facets : Richtext.Facet.main list option;
2185- indexed_at : string;
2186 labels : Com.Atproto.Label.Defs.label list option;
2187 list_item_count : int option;
2188 name : string;
···2191 viewer : Jsont.json option;
2192}
21932194-(** Jsont codec for {!type:list_view}. *)
2195-val list_view_jsont : list_view Jsont.t
219621972198type starter_pack_view = {
···2213val starter_pack_view_jsont : starter_pack_view Jsont.t
22142215 end
2216- module GetBlocks : sig
2217-(** Enumerates which accounts the requesting account is currently blocking. Requires auth. *)
00000000000022182219(** Query/procedure parameters. *)
2220type params = {
2221 cursor : string option;
2222 limit : int option;
02223}
22242225(** Jsont codec for {!type:params}. *)
···222722282229type output = {
2230- blocks : Jsont.json list;
2231 cursor : string option;
02232}
22332234(** Jsont codec for {!type:output}. *)
2235val output_jsont : output Jsont.t
22362237 end
2238- module Verification : sig
2239-(** Record declaring a verification relationship between two accounts. Verifications are only considered valid by an app if issued by an account the app considers trusted. *)
22402241type main = {
2242- created_at : string; (** Date of when the verification was created. *)
2243- display_name : string; (** Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying. *)
2244- handle : string; (** Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying. *)
2245- subject : string; (** DID of the subject the verification applies to. *)
0002246}
22472248(** Jsont codec for {!type:main}. *)
2249val main_jsont : main Jsont.t
22502251 end
2252- module GetMutes : sig
2253-(** Enumerates accounts that the requesting account (actor) currently has muted. Requires auth. *)
000000000022542255(** Query/procedure parameters. *)
2256type params = {
02257 cursor : string option;
2258 limit : int option;
2259}
···22642265type output = {
2266 cursor : string option;
2267- mutes : Jsont.json list;
2268}
22692270(** Jsont codec for {!type:output}. *)
2271val output_jsont : output Jsont.t
22722273 end
2274- module GetRelationships : sig
2275-(** Enumerates public relationships between one account, and a list of other accounts. Does not require auth. *)
22762277(** Query/procedure parameters. *)
2278type params = {
2279- actor : string; (** Primary account requesting relationships for. *)
2280- others : string list option; (** List of 'other' accounts to be related back to the primary. *)
2281}
22822283(** Jsont codec for {!type:params}. *)
···228522862287type output = {
2288- actor : string option;
2289- relationships : Jsont.json list;
2290}
22912292(** Jsont codec for {!type:output}. *)
2293val output_jsont : output Jsont.t
22942295 end
2296- module GetStarterPacksWithMembership : sig
2297-(** A starter pack and an optional list item indicating membership of a target user to that starter pack. *)
2298-2299-type starter_pack_with_membership = {
2300- list_item : Jsont.json option;
2301- starter_pack : Jsont.json;
2302-}
2303-2304-(** Jsont codec for {!type:starter_pack_with_membership}. *)
2305-val starter_pack_with_membership_jsont : starter_pack_with_membership Jsont.t
2306-2307-(** Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth. *)
23082309(** Query/procedure parameters. *)
2310type params = {
2311- actor : string; (** The account (actor) to check for membership. *)
2312- cursor : string option;
2313- limit : int option;
2314}
23152316(** Jsont codec for {!type:params}. *)
···231823192320type output = {
2321- cursor : string option;
2322- starter_packs_with_membership : Jsont.json list;
2323}
23242325(** Jsont codec for {!type:output}. *)
2326val output_jsont : output Jsont.t
23272328 end
2329- module GetActorStarterPacks : sig
2330-(** Get a list of starter packs created by the actor. *)
23312332(** Query/procedure parameters. *)
2333type params = {
2334- actor : string;
2335- cursor : string option;
2336- limit : int option;
2337}
23382339(** Jsont codec for {!type:params}. *)
···234123422343type output = {
2344- cursor : string option;
2345- starter_packs : Jsont.json list;
2346}
23472348(** Jsont codec for {!type:output}. *)
2349val output_jsont : output Jsont.t
23502351 end
2352- module List : sig
2353-(** Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists. *)
23542355-type main = {
2356- avatar : Atp.Blob_ref.t option;
2357- created_at : string;
2358- description : string option;
2359- description_facets : Richtext.Facet.main list option;
2360- labels : Com.Atproto.Label.Defs.self_labels option;
2361- name : string; (** Display name for list; can not be empty. *)
2362- purpose : Jsont.json; (** Defines the purpose of the list (aka, moderation-oriented or curration-oriented) *)
2363}
23642365-(** Jsont codec for {!type:main}. *)
2366-val main_jsont : main Jsont.t
23672368- end
2369- module SearchStarterPacks : sig
2370-(** Find starter packs matching search criteria. Does not require auth. *)
23712372(** Query/procedure parameters. *)
2373type params = {
02374 cursor : string option;
2375 limit : int option;
2376- q : string; (** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
2377}
23782379(** Jsont codec for {!type:params}. *)
···23822383type output = {
2384 cursor : string option;
2385- starter_packs : Jsont.json list;
2386}
23872388(** Jsont codec for {!type:output}. *)
2389val output_jsont : output Jsont.t
23902391 end
2392- module GetList : sig
2393-(** Gets a 'view' (with additional context) of a specified list. *)
23942395(** Query/procedure parameters. *)
2396type params = {
02397 cursor : string option;
2398 limit : int option;
2399- list_ : string; (** Reference (AT-URI) of the list record to hydrate. *)
2400}
24012402(** Jsont codec for {!type:params}. *)
···24052406type output = {
2407 cursor : string option;
2408- items : Jsont.json list;
2409- list_ : Jsont.json;
2410}
24112412(** Jsont codec for {!type:output}. *)
2413val output_jsont : output Jsont.t
24142415 end
2416- module GetListBlocks : sig
2417-(** Get mod lists that the requesting account (actor) is blocking. Requires auth. *)
24182419(** Query/procedure parameters. *)
2420type params = {
···2435val output_jsont : output Jsont.t
24362437 end
2438- module GetStarterPack : sig
2439-(** Gets a view of a starter pack. *)
24402441(** Query/procedure parameters. *)
2442type params = {
2443- starter_pack : string; (** Reference (AT-URI) of the starter pack record. *)
02444}
24452446(** Jsont codec for {!type:params}. *)
···244824492450type output = {
2451- starter_pack : Jsont.json;
02452}
24532454(** Jsont codec for {!type:output}. *)
2455val output_jsont : output Jsont.t
24562457 end
2458- module GetListsWithMembership : sig
2459-(** A list and an optional list item indicating membership of a target user to that list. *)
2460-2461-type list_with_membership = {
2462- list_ : Jsont.json;
2463- list_item : Jsont.json option;
2464-}
2465-2466-(** Jsont codec for {!type:list_with_membership}. *)
2467-val list_with_membership_jsont : list_with_membership Jsont.t
2468-2469-(** Enumerates the lists created by the session user, and includes membership information about `actor` in those lists. Only supports curation and moderation lists (no reference lists, used in starter packs). Requires auth. *)
24702471(** Query/procedure parameters. *)
2472type params = {
2473- actor : string; (** The account (actor) to check for membership. *)
2474 cursor : string option;
2475 limit : int option;
2476- purposes : string list option; (** Optional filter by list purpose. If not specified, all supported types are returned. *)
2477}
24782479(** Jsont codec for {!type:params}. *)
···24822483type output = {
2484 cursor : string option;
2485- lists_with_membership : Jsont.json list;
02486}
24872488(** Jsont codec for {!type:output}. *)
2489val output_jsont : output Jsont.t
24902491 end
2492- module GetListMutes : sig
2493-(** Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth. *)
24942495(** Query/procedure parameters. *)
2496type params = {
02497 cursor : string option;
2498 limit : int option;
2499}
···25042505type output = {
2506 cursor : string option;
2507- lists : Jsont.json list;
2508}
25092510(** Jsont codec for {!type:output}. *)
2511val output_jsont : output Jsont.t
25122513 end
2514- module GetStarterPacks : sig
2515-(** Get views for a list of starter packs. *)
0000000000025162517-(** Query/procedure parameters. *)
2518-type params = {
2519- uris : string list;
00002520}
25212522-(** Jsont codec for {!type:params}. *)
2523-val params_jsont : params Jsont.t
2524025252526-type output = {
2527- starter_packs : Jsont.json list;
2528-}
25292530-(** Jsont codec for {!type:output}. *)
2531-val output_jsont : output Jsont.t
25322533- end
2534- module GetLists : sig
2535-(** Enumerates the lists created by a specified account (actor). *)
25362537-(** Query/procedure parameters. *)
2538-type params = {
2539- actor : string; (** The account (actor) to enumerate lists from. *)
2540- cursor : string option;
2541- limit : int option;
2542- purposes : string list option; (** Optional filter by list purpose. If not specified, all supported types are returned. *)
2543}
25442545-(** Jsont codec for {!type:params}. *)
2546-val params_jsont : params Jsont.t
254700025482549-type output = {
2550- cursor : string option;
2551- lists : Jsont.json list;
02552}
25532554-(** Jsont codec for {!type:output}. *)
2555-val output_jsont : output Jsont.t
25562557 end
2558- end
2559- module Feed : sig
2560- module Post : sig
2561-(** Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings. *)
0000025622563-type text_slice = {
2564- end_ : int;
2565- start : int;
002566}
25672568-(** Jsont codec for {!type:text_slice}. *)
2569-val text_slice_jsont : text_slice Jsont.t
25700025712572type reply_ref = {
2573 parent : Com.Atproto.Repo.StrongRef.main;
···2577(** Jsont codec for {!type:reply_ref}. *)
2578val reply_ref_jsont : reply_ref Jsont.t
257900000000002580(** Deprecated: use facets instead. *)
25812582type entity = {
···2606val main_jsont : main Jsont.t
26072608 end
2609- module GetLikes : sig
026102611-type like = {
2612- actor : Jsont.json;
2613 created_at : string;
2614- indexed_at : string;
02615}
26162617-(** Jsont codec for {!type:like}. *)
2618-val like_jsont : like Jsont.t
26192620-(** Get like records which reference a subject (by AT-URI and CID). *)
0026212622(** Query/procedure parameters. *)
2623type params = {
2624- cid : string option; (** CID of the subject record (aka, specific version of record), to filter likes. *)
2625 cursor : string option;
2626 limit : int option;
2627- uri : string; (** AT-URI of the subject (eg, a post record). *)
2628}
26292630(** Jsont codec for {!type:params}. *)
···2634type output = {
2635 cid : string option;
2636 cursor : string option;
2637- likes : Jsont.json list;
2638 uri : string;
2639}
2640···2642val output_jsont : output Jsont.t
26432644 end
2645- module Postgate : sig
2646-(** Disables embedding of this post. *)
26472648-type disable_rule = unit
2649-2650-(** Jsont codec for {!type:disable_rule}. *)
2651-val disable_rule_jsont : disable_rule Jsont.t
2652-2653-(** 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. *)
2654-2655-type main = {
2656 created_at : string;
2657- detached_embedding_uris : string list option; (** List of AT-URIs embedding this post that the author has detached from. *)
2658- embedding_rules : Jsont.json list option; (** 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. *)
2659- post : string; (** Reference (AT-URI) to the post record. *)
2660}
26612662-(** Jsont codec for {!type:main}. *)
2663-val main_jsont : main Jsont.t
26642665- end
2666- module GetRepostedBy : sig
2667-(** Get a list of reposts for a given post. *)
26682669(** Query/procedure parameters. *)
2670type params = {
2671- cid : string option; (** If supplied, filters to reposts of specific version (by CID) of the post record. *)
2672 cursor : string option;
2673 limit : int option;
2674- uri : string; (** Reference (AT-URI) of post record *)
2675}
26762677(** Jsont codec for {!type:params}. *)
···2681type output = {
2682 cid : string option;
2683 cursor : string option;
2684- reposted_by : Jsont.json list;
2685 uri : string;
2686}
2687···2689val output_jsont : output Jsont.t
26902691 end
2692- module DescribeFeedGenerator : sig
026932694-type links = {
2695- privacy_policy : string option;
2696- terms_of_service : string option;
00000002697}
26982699-(** Jsont codec for {!type:links}. *)
2700-val links_jsont : links Jsont.t
27010027022703type feed = {
2704 uri : string;
···2707(** Jsont codec for {!type:feed}. *)
2708val feed_jsont : feed Jsont.t
27090000000002710(** Get information about a feed generator, including policies and offered feed URIs. Does not require auth; implemented by Feed Generator services (not App View). *)
27112712···2720val output_jsont : output Jsont.t
27212722 end
2723- module Threadgate : sig
2724-(** Allow replies from actors mentioned in your post. *)
2725-2726-type mention_rule = unit
2727-2728-(** Jsont codec for {!type:mention_rule}. *)
2729-val mention_rule_jsont : mention_rule Jsont.t
27302731-(** Allow replies from actors on a list. *)
2732-2733-type list_rule = {
2734- list_ : string;
2735}
27362737-(** Jsont codec for {!type:list_rule}. *)
2738-val list_rule_jsont : list_rule Jsont.t
27392740-(** Allow replies from actors you follow. *)
27412742-type following_rule = unit
027432744-(** Jsont codec for {!type:following_rule}. *)
2745-val following_rule_jsont : following_rule Jsont.t
27462747-(** Allow replies from actors who follow you. *)
027482749-type follower_rule = unit
27502751-(** Jsont codec for {!type:follower_rule}. *)
2752-val follower_rule_jsont : follower_rule Jsont.t
27532754-(** 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. *)
27552756-type main = {
2757- allow : Jsont.json list option; (** 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. *)
2758- created_at : string;
2759- hidden_replies : string list option; (** List of hidden reply URIs. *)
2760- post : string; (** Reference (AT-URI) to the post record. *)
2761-}
27622763-(** Jsont codec for {!type:main}. *)
2764-val main_jsont : main Jsont.t
27652766- end
2767- module Like : sig
2768-(** Record declaring a 'like' of a piece of subject content. *)
27692770-type main = {
2771- created_at : string;
2772- subject : Com.Atproto.Repo.StrongRef.main;
2773- via : Com.Atproto.Repo.StrongRef.main option;
2774-}
27752776-(** Jsont codec for {!type:main}. *)
2777-val main_jsont : main Jsont.t
27782779- end
2780- module Defs : sig
2781-(** Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. *)
27822783-type viewer_state = {
2784- bookmarked : bool option;
2785- embedding_disabled : bool option;
2786 like : string option;
2787- pinned : bool option;
2788- reply_disabled : bool option;
2789- repost : string option;
2790- thread_muted : bool option;
2791}
27922793-(** Jsont codec for {!type:viewer_state}. *)
2794-val viewer_state_jsont : viewer_state Jsont.t
279527962797-type threadgate_view = {
2798- cid : string option;
2799- lists : Jsont.json list option;
2800- record : Jsont.json option;
2801- uri : string option;
2802}
28032804-(** Jsont codec for {!type:threadgate_view}. *)
2805-val threadgate_view_jsont : threadgate_view Jsont.t
28062807-(** Metadata about this post within the context of the thread it is in. *)
2808-2809-type thread_context = {
2810- root_author_like : string option;
2811-}
28122813-(** Jsont codec for {!type:thread_context}. *)
2814-val thread_context_jsont : thread_context Jsont.t
2815028162817-type skeleton_reason_repost = {
2818- repost : string;
2819-}
28202821-(** Jsont codec for {!type:skeleton_reason_repost}. *)
2822-val skeleton_reason_repost_jsont : skeleton_reason_repost Jsont.t
28230028242825-type skeleton_reason_pin = unit
28262827-(** Jsont codec for {!type:skeleton_reason_pin}. *)
2828-val skeleton_reason_pin_jsont : skeleton_reason_pin Jsont.t
2829028302831-type skeleton_feed_post = {
2832- feed_context : string option; (** Context that will be passed through to client and may be passed to feed generator back alongside interactions. *)
2833- post : string;
2834- reason : Jsont.json option;
2835-}
28362837-(** Jsont codec for {!type:skeleton_feed_post}. *)
2838-val skeleton_feed_post_jsont : skeleton_feed_post Jsont.t
28392840-(** Request that more content like the given feed item be shown in the feed *)
028412842-type request_more = string
2843-val request_more_jsont : request_more Jsont.t
28442845-(** Request that less content like the given feed item be shown in the feed *)
00028462847-type request_less = string
2848-val request_less_jsont : request_less Jsont.t
284928502851-type reply_ref = {
2852- grandparent_author : Jsont.json option; (** When parent is a reply to another post, this is the author of that post. *)
2853- parent : Jsont.json;
2854- root : Jsont.json;
2855-}
28562857-(** Jsont codec for {!type:reply_ref}. *)
2858-val reply_ref_jsont : reply_ref Jsont.t
285928602861type reason_repost = {
···2869val reason_repost_jsont : reason_repost Jsont.t
287028712872-type reason_pin = unit
2873-2874-(** Jsont codec for {!type:reason_pin}. *)
2875-val reason_pin_jsont : reason_pin Jsont.t
2876-2877-2878-type not_found_post = {
2879- not_found : bool;
2880- uri : string;
2881}
28822883-(** Jsont codec for {!type:not_found_post}. *)
2884-val not_found_post_jsont : not_found_post Jsont.t
28852886-(** User shared the feed item *)
28872888-type interaction_share = string
2889-val interaction_share_jsont : interaction_share Jsont.t
28902891-(** Feed item was seen by user *)
28922893-type interaction_seen = string
2894-val interaction_seen_jsont : interaction_seen Jsont.t
28952896-(** User reposted the feed item *)
28972898-type interaction_repost = string
2899-val interaction_repost_jsont : interaction_repost Jsont.t
2900-2901-(** User replied to the feed item *)
2902-2903-type interaction_reply = string
2904-val interaction_reply_jsont : interaction_reply Jsont.t
29052906-(** User quoted the feed item *)
029072908-type interaction_quote = string
2909-val interaction_quote_jsont : interaction_quote Jsont.t
29102911-(** User liked the feed item *)
29122913-type interaction_like = string
2914-val interaction_like_jsont : interaction_like Jsont.t
291529162917-type interaction = {
2918- event : string option;
2919- feed_context : string option; (** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. *)
2920- item : string option;
2921- req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
2922}
29232924-(** Jsont codec for {!type:interaction}. *)
2925-val interaction_jsont : interaction Jsont.t
2926029272928-type generator_viewer_state = {
2929- like : string option;
2930}
29312932-(** Jsont codec for {!type:generator_viewer_state}. *)
2933-val generator_viewer_state_jsont : generator_viewer_state Jsont.t
2934-2935-(** Declares the feed generator returns posts containing app.bsky.embed.video embeds. *)
2936-2937-type content_mode_video = string
2938-val content_mode_video_jsont : content_mode_video Jsont.t
2939-2940-(** Declares the feed generator returns any types of posts. *)
29412942-type content_mode_unspecified = string
2943-val content_mode_unspecified_jsont : content_mode_unspecified Jsont.t
29442945-(** User clicked through to the reposter of the feed item *)
0000029462947-type clickthrough_reposter = string
2948-val clickthrough_reposter_jsont : clickthrough_reposter Jsont.t
29492950-(** User clicked through to the feed item *)
29512952-type clickthrough_item = string
2953-val clickthrough_item_jsont : clickthrough_item Jsont.t
000000029542955-(** User clicked through to the embedded content of the feed item *)
029562957-type clickthrough_embed = string
2958-val clickthrough_embed_jsont : clickthrough_embed Jsont.t
29592960-(** User clicked through to the author of the feed item *)
000029612962-type clickthrough_author = string
2963-val clickthrough_author_jsont : clickthrough_author Jsont.t
296429652966-type blocked_author = {
00000002967 did : string;
000002968 viewer : Jsont.json option;
2969}
29702971-(** Jsont codec for {!type:blocked_author}. *)
2972-val blocked_author_jsont : blocked_author Jsont.t
297329742975type post_view = {
···2994val post_view_jsont : post_view Jsont.t
299529962997-type generator_view = {
2998- accepts_interactions : bool option;
2999- avatar : string option;
3000- cid : string;
3001- content_mode : string option;
3002- creator : Jsont.json;
3003- description : string option;
3004- description_facets : Richtext.Facet.main list option;
3005- did : string;
3006- display_name : string;
3007- indexed_at : string;
3008- labels : Com.Atproto.Label.Defs.label list option;
3009- like_count : int option;
3010- uri : string;
3011- viewer : Jsont.json option;
3012}
30133014-(** Jsont codec for {!type:generator_view}. *)
3015-val generator_view_jsont : generator_view Jsont.t
3016-3017-3018-type blocked_post = {
3019- author : Jsont.json;
3020- blocked : bool;
3021- uri : string;
3022-}
3023-3024-(** Jsont codec for {!type:blocked_post}. *)
3025-val blocked_post_jsont : blocked_post Jsont.t
302630273028type thread_view_post = {
···3035(** Jsont codec for {!type:thread_view_post}. *)
3036val thread_view_post_jsont : thread_view_post Jsont.t
303700030383039-type feed_view_post = {
3040- feed_context : string option; (** Context provided by feed generator that may be passed back alongside interactions. *)
3041- post : Jsont.json;
3042- reason : Jsont.json option;
3043- reply : Jsont.json option;
3044- req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
3045}
30463047-(** Jsont codec for {!type:feed_view_post}. *)
3048-val feed_view_post_jsont : feed_view_post Jsont.t
00000030493050 end
3051- module Repost : sig
3052-(** Record representing a 'repost' of an existing Bluesky post. *)
30533054-type main = {
3055- created_at : string;
3056- subject : Com.Atproto.Repo.StrongRef.main;
3057- via : Com.Atproto.Repo.StrongRef.main option;
00000000003058}
30593060-(** Jsont codec for {!type:main}. *)
3061-val main_jsont : main Jsont.t
30623063- end
3064- module Generator : sig
3065-(** Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository. *)
30663067-type main = {
3068- accepts_interactions : bool option; (** Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions *)
3069- avatar : Atp.Blob_ref.t option;
3070- content_mode : string option;
3071- created_at : string;
3072- description : string option;
3073- description_facets : Richtext.Facet.main list option;
3074- did : string;
3075- display_name : string;
3076- labels : Com.Atproto.Label.Defs.self_labels option; (** Self-label values *)
3077}
30783079-(** Jsont codec for {!type:main}. *)
3080-val main_jsont : main Jsont.t
30813082 end
3083- module GetPostThread : sig
3084-(** Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests. *)
30853086(** Query/procedure parameters. *)
3087type params = {
3088- depth : int option; (** How many levels of reply depth should be included in response. *)
3089- parent_height : int option; (** How many levels of parent (and grandparent, etc) post to include. *)
3090- uri : string; (** Reference (AT-URI) to post record. *)
3091}
30923093(** Jsont codec for {!type:params}. *)
···309530963097type output = {
3098- thread : Jsont.json;
3099- threadgate : Jsont.json option;
3100}
31013102(** Jsont codec for {!type:output}. *)
3103val output_jsont : output Jsont.t
31043105 end
3106- module GetFeed : sig
3107-(** Get a hydrated feed from an actor's selected feed generator. Implemented by App View. *)
31083109(** Query/procedure parameters. *)
3110type params = {
3111 cursor : string option;
3112- feed : string;
3113 limit : int option;
3114}
3115···31193120type output = {
3121 cursor : string option;
3122- feed : Jsont.json list;
3123}
31243125(** Jsont codec for {!type:output}. *)
···3152val output_jsont : output Jsont.t
31533154 end
3155- module GetListFeed : sig
3156-(** Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth. *)
31573158(** Query/procedure parameters. *)
3159type params = {
3160- cursor : string option;
3161- limit : int option;
3162- list_ : string; (** Reference (AT-URI) to the list record. *)
3163}
31643165(** Jsont codec for {!type:params}. *)
···316731683169type output = {
3170- cursor : string option;
3171- feed : Jsont.json list;
3172}
31733174(** Jsont codec for {!type:output}. *)
3175val output_jsont : output Jsont.t
31763177 end
3178- module GetActorLikes : sig
3179-(** Get a list of posts liked by an actor. Requires auth, actor must be the requesting account. *)
31803181(** Query/procedure parameters. *)
3182type params = {
3183- actor : string;
3184- cursor : string option;
3185- limit : int option;
3186}
31873188(** Jsont codec for {!type:params}. *)
···319031913192type output = {
3193- cursor : string option;
3194- feed : Jsont.json list;
3195}
31963197(** Jsont codec for {!type:output}. *)
3198val output_jsont : output Jsont.t
31993200 end
3201- module GetFeedSkeleton : sig
3202-(** Get a skeleton of a feed provided by a feed generator. Auth is optional, depending on provider requirements, and provides the DID of the requester. Implemented by Feed Generator Service. *)
32033204(** Query/procedure parameters. *)
3205type params = {
3206 cursor : string option;
3207- feed : string; (** Reference to feed generator record describing the specific feed being requested. *)
3208 limit : int option;
03209}
32103211(** Jsont codec for {!type:params}. *)
···3215type output = {
3216 cursor : string option;
3217 feed : Jsont.json list;
3218- req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
3219}
32203221(** Jsont codec for {!type:output}. *)
3222val output_jsont : output Jsont.t
32233224 end
3225- module SearchPosts : sig
3226-(** Find posts matching search criteria, returning views of those posts. Note that this API endpoint may require authentication (eg, not public) for some service providers and implementations. *)
32273228(** Query/procedure parameters. *)
3229type params = {
3230- author : string option; (** Filter to posts by the given account. Handles are resolved to DID before query-time. *)
3231- cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
3232- domain : string option; (** Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization. *)
3233- lang : string option; (** Filter to posts in the given language. Expected to be based on post language field, though server may override language detection. *)
3234 limit : int option;
3235- mentions : string option; (** Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions. *)
3236- q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
3237- since : string option; (** Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD). *)
3238- sort : string option; (** Specifies the ranking order of results. *)
3239- tag : string list option; (** Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching. *)
3240- until : string option; (** Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD). *)
3241- url : string option; (** Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. *)
3242}
32433244(** Jsont codec for {!type:params}. *)
···32473248type output = {
3249 cursor : string option;
3250- hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
3251- posts : Jsont.json list;
3252}
32533254(** Jsont codec for {!type:output}. *)
···3275val output_jsont : output Jsont.t
32763277 end
3278- module SendInteractions : sig
3279-(** Send information about interactions with feed items back to the feed generator that served them. *)
32803281-3282-type input = {
3283- interactions : Jsont.json list;
3284}
32853286-(** Jsont codec for {!type:input}. *)
3287-val input_jsont : input Jsont.t
328832893290-type output = unit
000032913292(** Jsont codec for {!type:output}. *)
3293val output_jsont : output Jsont.t
32943295 end
3296- module GetAuthorFeed : sig
3297-(** Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth. *)
32983299(** Query/procedure parameters. *)
3300type params = {
3301- actor : string;
3302 cursor : string option;
3303- filter : string option; (** Combinations of post/repost types to include in response. *)
3304- include_pins : bool option;
3305 limit : int option;
3306}
3307···3318val output_jsont : output Jsont.t
33193320 end
3321- module GetFeedGenerator : sig
3322-(** Get information about a feed generator. Implemented by AppView. *)
33233324(** Query/procedure parameters. *)
3325type params = {
3326- feed : string; (** AT-URI of the feed generator record. *)
00003327}
33283329(** Jsont codec for {!type:params}. *)
···333133323333type output = {
3334- is_online : bool; (** Indicates whether the feed generator service has been online recently, or else seems to be inactive. *)
3335- is_valid : bool; (** Indicates whether the feed generator service is compatible with the record declaration. *)
3336- view : Jsont.json;
3337}
33383339(** Jsont codec for {!type:output}. *)
3340val output_jsont : output Jsont.t
33413342 end
3343- module GetSuggestedFeeds : sig
3344-(** Get a list of suggested feeds (feed generators) for the requesting account. *)
33453346(** Query/procedure parameters. *)
3347type params = {
03348 cursor : string option;
3349 limit : int option;
3350}
···33553356type output = {
3357 cursor : string option;
3358- feeds : Jsont.json list;
3359}
33603361(** Jsont codec for {!type:output}. *)
···3385val output_jsont : output Jsont.t
33863387 end
3388- module GetPosts : sig
3389-(** Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'. *)
00033903391-(** Query/procedure parameters. *)
3392-type params = {
3393- uris : string list; (** List of post AT-URIs to return hydrated views for. *)
3394}
33953396-(** Jsont codec for {!type:params}. *)
3397-val params_jsont : params Jsont.t
339833993400type output = {
3401- posts : Jsont.json list;
3402}
34033404(** Jsont codec for {!type:output}. *)
3405val output_jsont : output Jsont.t
34063407 end
3408- module GetTimeline : sig
3409-(** Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed. *)
0000000000000000000000000000000000000000000000000000034103411(** Query/procedure parameters. *)
3412type params = {
3413- algorithm : string option; (** Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism. *)
3414 cursor : string option;
3415 limit : int option;
3416}
···34213422type output = {
3423 cursor : string option;
3424- feed : Jsont.json list;
3425}
34263427(** Jsont codec for {!type:output}. *)
3428val output_jsont : output Jsont.t
34293430 end
3431- end
3432- module Bookmark : sig
3433- module DeleteBookmark : sig
3434-(** Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. *)
343534363437type input = {
3438- uri : string;
3439}
34403441(** Jsont codec for {!type:input}. *)
3442val input_jsont : input Jsont.t
34430000003444 end
3445- module CreateBookmark : sig
3446-(** Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. *)
00000000000000034470034483449-type input = {
3450- cid : string;
3451- uri : string;
03452}
34533454-(** Jsont codec for {!type:input}. *)
3455-val input_jsont : input Jsont.t
34563457 end
3458- module Defs : sig
034593460-type bookmark_view = {
3461- created_at : string option;
3462- item : Jsont.json;
3463- subject : Com.Atproto.Repo.StrongRef.main; (** A strong ref to the bookmarked record. *)
3464}
34653466-(** Jsont codec for {!type:bookmark_view}. *)
3467-val bookmark_view_jsont : bookmark_view Jsont.t
34683469-(** Object used to store bookmark data in stash. *)
34703471-type bookmark = {
3472- subject : Com.Atproto.Repo.StrongRef.main; (** A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported. *)
3473}
34743475-(** Jsont codec for {!type:bookmark}. *)
3476-val bookmark_jsont : bookmark Jsont.t
34773478 end
3479- module GetBookmarks : sig
3480-(** Gets views of records bookmarked by the authenticated user. Requires authentication. *)
34813482(** Query/procedure parameters. *)
3483-type params = {
3484- cursor : string option;
3485- limit : int option;
3486-}
34873488(** Jsont codec for {!type:params}. *)
3489val params_jsont : params Jsont.t
349034913492type output = {
3493- bookmarks : Defs.bookmark_view list;
3494- cursor : string option;
3495}
34963497(** Jsont codec for {!type:output}. *)
···3500 end
3501 end
3502 module Unspecced : sig
3503- module GetSuggestedUsersSkeleton : sig
3504-(** Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers *)
35053506-(** Query/procedure parameters. *)
3507-type params = {
3508- category : string option; (** Category of users to get suggestions for. *)
3509- limit : int option;
3510- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
3511}
3512000000003513(** Jsont codec for {!type:params}. *)
3514val params_jsont : params Jsont.t
351535163517type output = {
3518- dids : string list;
3519- rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
3520}
35213522(** Jsont codec for {!type:output}. *)
3523val output_jsont : output Jsont.t
35243525 end
3526- module GetOnboardingSuggestedStarterPacks : sig
3527-(** Get a list of suggested starterpacks for onboarding *)
35283529(** Query/procedure parameters. *)
3530type params = {
03531 limit : int option;
03532}
35333534(** Jsont codec for {!type:params}. *)
···353635373538type output = {
3539- starter_packs : Jsont.json list;
03540}
35413542(** Jsont codec for {!type:output}. *)
3543val output_jsont : output Jsont.t
35443545 end
3546- module GetPopularFeedGenerators : sig
3547-(** An unspecced view of globally popular feed generators. *)
35483549(** Query/procedure parameters. *)
3550type params = {
3551- cursor : string option;
3552 limit : int option;
3553- query : string option;
3554}
35553556(** Jsont codec for {!type:params}. *)
···355835593560type output = {
3561- cursor : string option;
3562- feeds : Jsont.json list;
3563}
35643565(** Jsont codec for {!type:output}. *)
···3587val output_jsont : output Jsont.t
35883589 end
3590- module GetSuggestedFeeds : sig
3591-(** Get a list of suggested feeds *)
35923593(** Query/procedure parameters. *)
3594type params = {
···360036013602type output = {
3603- feeds : Jsont.json list;
3604}
36053606(** Jsont codec for {!type:output}. *)
···3628val output_jsont : output Jsont.t
36293630 end
3631- module GetConfig : sig
036323633-type live_now_config = {
3634- did : string;
3635- domains : string list;
3636}
36373638-(** Jsont codec for {!type:live_now_config}. *)
3639-val live_now_config_jsont : live_now_config Jsont.t
3640-3641-(** Get miscellaneous runtime configuration. *)
364236433644type output = {
3645- check_email_confirmed : bool option;
3646- live_now : live_now_config list option;
3647}
36483649(** Jsont codec for {!type:output}. *)
3650val output_jsont : output Jsont.t
36513652 end
3653- module GetSuggestedStarterPacks : sig
3654-(** Get a list of suggested starterpacks *)
36553656(** Query/procedure parameters. *)
3657type params = {
03658 limit : int option;
03659}
36603661(** Jsont codec for {!type:params}. *)
···366336643665type output = {
3666- starter_packs : Jsont.json list;
03667}
36683669(** Jsont codec for {!type:output}. *)
3670val output_jsont : output Jsont.t
36713672 end
3673- module GetSuggestedUsers : sig
3674-(** Get a list of suggested users *)
36753676(** Query/procedure parameters. *)
3677type params = {
3678- category : string option; (** Category of users to get suggestions for. *)
3679 limit : int option;
03680}
36813682(** Jsont codec for {!type:params}. *)
···368436853686type output = {
3687- actors : Jsont.json list;
3688- rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
3689}
36903691(** Jsont codec for {!type:output}. *)
3692val output_jsont : output Jsont.t
36933694 end
3695- module GetOnboardingSuggestedStarterPacksSkeleton : sig
3696-(** Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks *)
36973698(** Query/procedure parameters. *)
3699type params = {
3700 limit : int option;
3701- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
3702}
37033704(** Jsont codec for {!type:params}. *)
···370637073708type output = {
3709- starter_packs : string list;
3710}
37113712(** Jsont codec for {!type:output}. *)
3713val output_jsont : output Jsont.t
37143715 end
3716- module Defs : sig
37173718-type trending_topic = {
3719- description : string option;
3720- display_name : string option;
3721- link : string;
3722- topic : string;
3723}
37243725-(** Jsont codec for {!type:trending_topic}. *)
3726-val trending_topic_jsont : trending_topic Jsont.t
0000000037270037283729-type trend_view = {
3730- actors : Jsont.json list;
3731- category : string option;
3732- display_name : string;
3733- link : string;
3734- post_count : int;
3735- started_at : string;
3736- status : string option;
3737- topic : string;
00003738}
37393740-(** Jsont codec for {!type:trend_view}. *)
3741-val trend_view_jsont : trend_view Jsont.t
3742037433744-type thread_item_post = {
3745- hidden_by_threadgate : bool; (** The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread. *)
3746- more_parents : bool; (** This post has more parents that were not present in the response. This is just a boolean, without the number of parents. *)
3747- more_replies : int; (** This post has more replies that were not present in the response. This is a numeric value, which is best-effort and might not be accurate. *)
3748- muted_by_viewer : bool; (** This is by an account muted by the viewer requesting it. *)
3749- op_thread : bool; (** This post is part of a contiguous thread by the OP from the thread root. Many different OP threads can happen in the same thread. *)
3750- post : Jsont.json;
3751}
37523753-(** Jsont codec for {!type:thread_item_post}. *)
3754-val thread_item_post_jsont : thread_item_post Jsont.t
375537563757-type thread_item_not_found = unit
0037583759-(** Jsont codec for {!type:thread_item_not_found}. *)
3760-val thread_item_not_found_jsont : thread_item_not_found Jsont.t
376137623763-type thread_item_no_unauthenticated = unit
0037643765-(** Jsont codec for {!type:thread_item_no_unauthenticated}. *)
3766-val thread_item_no_unauthenticated_jsont : thread_item_no_unauthenticated Jsont.t
376737683769-type thread_item_blocked = {
3770- author : Jsont.json;
3771}
37723773-(** Jsont codec for {!type:thread_item_blocked}. *)
3774-val thread_item_blocked_jsont : thread_item_blocked Jsont.t
377537763777type skeleton_trend = {
···3789val skeleton_trend_jsont : skeleton_trend Jsont.t
379037913792-type skeleton_search_starter_pack = {
3793- uri : string;
3794}
37953796-(** Jsont codec for {!type:skeleton_search_starter_pack}. *)
3797-val skeleton_search_starter_pack_jsont : skeleton_search_starter_pack Jsont.t
379837993800-type skeleton_search_post = {
3801- uri : string;
3802-}
38033804-(** Jsont codec for {!type:skeleton_search_post}. *)
3805-val skeleton_search_post_jsont : skeleton_search_post Jsont.t
380638073808-type skeleton_search_actor = {
3809- did : string;
3810-}
38113812-(** Jsont codec for {!type:skeleton_search_actor}. *)
3813-val skeleton_search_actor_jsont : skeleton_search_actor Jsont.t
38143815-(** The computed state of the age assurance process, returned to the user in question on certain authenticated requests. *)
38163817-type age_assurance_state = {
3818- last_initiated_at : string option; (** The timestamp when this state was last updated. *)
3819- status : string; (** The status of the age assurance process. *)
00003820}
38213822-(** Jsont codec for {!type:age_assurance_state}. *)
3823-val age_assurance_state_jsont : age_assurance_state Jsont.t
38243825-(** Object used to store age assurance data in stash. *)
38263827-type age_assurance_event = {
3828- attempt_id : string; (** The unique identifier for this instance of the age assurance flow, in UUID format. *)
3829- complete_ip : string option; (** The IP address used when completing the AA flow. *)
3830- complete_ua : string option; (** The user agent used when completing the AA flow. *)
3831- created_at : string; (** The date and time of this write operation. *)
3832- email : string option; (** The email used for AA. *)
3833- init_ip : string option; (** The IP address used when initiating the AA flow. *)
3834- init_ua : string option; (** The user agent used when initiating the AA flow. *)
3835- status : string; (** The status of the age assurance process. *)
3836}
38373838-(** Jsont codec for {!type:age_assurance_event}. *)
3839-val age_assurance_event_jsont : age_assurance_event Jsont.t
38403841- end
3842- module GetTaggedSuggestions : sig
38433844-type suggestion = {
3845- subject : string;
3846- subject_type : string;
3847- tag : string;
03848}
38493850-(** Jsont codec for {!type:suggestion}. *)
3851-val suggestion_jsont : suggestion Jsont.t
38523853-(** Get a list of suggestions (feeds and users) tagged with categories *)
0038543855(** Query/procedure parameters. *)
3856-type params = unit
0000038573858(** Jsont codec for {!type:params}. *)
3859val params_jsont : params Jsont.t
386038613862type output = {
3863- suggestions : suggestion list;
003864}
38653866(** Jsont codec for {!type:output}. *)
···3901val output_jsont : output Jsont.t
39023903 end
3904- module GetPostThreadV2 : sig
3905-3906-type thread_item = {
3907- depth : int; (** The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths. *)
3908- uri : string;
3909- value : Jsont.json;
3910-}
3911-3912-(** Jsont codec for {!type:thread_item}. *)
3913-val thread_item_jsont : thread_item Jsont.t
3914-3915-(** (NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests. *)
39163917(** Query/procedure parameters. *)
3918type params = {
3919- above : bool option; (** Whether to include parents above the anchor. *)
3920- anchor : string; (** Reference (AT-URI) to post record. This is the anchor post, and the thread will be built around it. It can be any post in the tree, not necessarily a root post. *)
3921- below : int option; (** How many levels of replies to include below the anchor. *)
3922- branching_factor : int option; (** Maximum of replies to include at each level of the thread, except for the direct replies to the anchor, which are (NOTE: currently, during unspecced phase) all returned (NOTE: later they might be paginated). *)
3923- sort : string option; (** Sorting for the thread replies. *)
3924}
39253926(** Jsont codec for {!type:params}. *)
···392839293930type output = {
3931- has_other_replies : bool; (** Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them. *)
3932- thread : thread_item list; (** A flat list of thread items. The depth of each item is indicated by the depth property inside the item. *)
3933- threadgate : Jsont.json option;
3934}
39353936(** Jsont codec for {!type:output}. *)
3937val output_jsont : output Jsont.t
39383939 end
3940- module GetTrendingTopics : sig
3941-(** Get a list of trending topics *)
39423943-(** Query/procedure parameters. *)
3944-type params = {
3945- limit : int option;
3946- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
03947}
39483949-(** Jsont codec for {!type:params}. *)
3950-val params_jsont : params Jsont.t
395139523953-type output = {
3954- suggested : Defs.trending_topic list;
3955- topics : Defs.trending_topic list;
3956-}
39573958(** Jsont codec for {!type:output}. *)
3959val output_jsont : output Jsont.t
···3980val output_jsont : output Jsont.t
39813982 end
3983- module GetPostThreadOtherV2 : sig
039843985-type thread_item = {
3986- depth : int; (** The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths. *)
3987- uri : string;
3988- value : Defs.thread_item_post;
00000003989}
39903991-(** Jsont codec for {!type:thread_item}. *)
3992-val thread_item_jsont : thread_item Jsont.t
39933994-(** (NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests. *)
0039953996(** Query/procedure parameters. *)
3997type params = {
3998- anchor : string; (** Reference (AT-URI) to post record. This is the anchor post. *)
03999}
40004001(** Jsont codec for {!type:params}. *)
···400340044005type output = {
4006- thread : thread_item list; (** A flat list of other thread items. The depth of each item is indicated by the depth property inside the item. *)
04007}
40084009(** Jsont codec for {!type:output}. *)
4010val output_jsont : output Jsont.t
40114012 end
4013- module InitAgeAssurance : sig
4014-(** Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age. *)
40154016-4017-type input = {
4018- country_code : string; (** An ISO 3166-1 alpha-2 code of the user's location. *)
4019- email : string; (** The user's email address to receive assurance instructions. *)
4020- language : string; (** The user's preferred language for communication during the assurance process. *)
04021}
40224023-(** Jsont codec for {!type:input}. *)
4024-val input_jsont : input Jsont.t
402540264027-type output = Defs.age_assurance_state
0000040284029(** Jsont codec for {!type:output}. *)
4030val output_jsont : output Jsont.t
40314032 end
4033- module SearchStarterPacksSkeleton : sig
4034-(** Backend Starter Pack search, returns only skeleton. *)
000000000040354036(** Query/procedure parameters. *)
4037type params = {
4038- cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
4039- limit : int option;
4040- q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
4041- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
04042}
40434044(** Jsont codec for {!type:params}. *)
···404640474048type output = {
4049- cursor : string option;
4050- hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
4051- starter_packs : Defs.skeleton_search_starter_pack list;
4052}
40534054(** Jsont codec for {!type:output}. *)
4055val output_jsont : output Jsont.t
40564057 end
4058- module SearchActorsSkeleton : sig
4059-(** Backend Actors (profile) search, returns only skeleton. *)
000000000040604061(** Query/procedure parameters. *)
4062type params = {
4063- cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
4064- limit : int option;
4065- q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax. *)
4066- typeahead : bool option; (** If true, acts as fast/simple 'typeahead' query. *)
4067- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
4068}
40694070(** Jsont codec for {!type:params}. *)
···407240734074type output = {
4075- actors : Defs.skeleton_search_actor list;
4076- cursor : string option;
4077- hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
4078}
40794080(** Jsont codec for {!type:output}. *)
···4091val output_jsont : output Jsont.t
40924093 end
4094- module GetSuggestionsSkeleton : sig
4095-(** Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions *)
000000040964097-(** Query/procedure parameters. *)
4098-type params = {
4099- cursor : string option;
4100- limit : int option;
4101- relative_to_did : string option; (** DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer. *)
4102- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
0004103}
41044105-(** Jsont codec for {!type:params}. *)
4106-val params_jsont : params Jsont.t
410741084109-type output = {
4110- actors : Defs.skeleton_search_actor list;
4111- cursor : string option;
4112- rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
4113- relative_to_did : string option; (** DID of the account these suggestions are relative to. If this is returned undefined, suggestions are based on the viewer. *)
4114}
41154116-(** Jsont codec for {!type:output}. *)
4117-val output_jsont : output Jsont.t
41184119 end
4120- module GetTrends : sig
4121-(** Get the current trends on the network *)
000000000000041224123(** Query/procedure parameters. *)
4124type params = {
04125 limit : int option;
4126}
4127···413041314132type output = {
4133- trends : Defs.trend_view list;
04134}
41354136(** Jsont codec for {!type:output}. *)
···1213module Com : sig
14 module Atproto : sig
15+ module Repo : sig
16+ module StrongRef : sig
17+18+type main = {
19+ cid : string;
20+ uri : string;
21+}
22+23+(** Jsont codec for {!type:main}. *)
24+val main_jsont : main Jsont.t
25+26+ end
27+ end
28+ module Moderation : sig
29 module Defs : sig
30+(** Appeal a previously taken moderation action *)
31+32+type reason_appeal = string
33+val reason_appeal_jsont : reason_appeal Jsont.t
34+35+(** Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`. *)
36+37+type reason_misleading = string
38+val reason_misleading_jsont : reason_misleading Jsont.t
39+40+(** Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonOther`. *)
41+42+type reason_other = string
43+val reason_other_jsont : reason_other Jsont.t
4445+(** Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`. *)
004647+type reason_rude = string
48+val reason_rude_jsont : reason_rude Jsont.t
4950+(** Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`. *)
5152+type reason_sexual = string
53+val reason_sexual_jsont : reason_sexual Jsont.t
0005455+(** Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`. *)
05657+type reason_spam = string
58+val reason_spam_jsont : reason_spam Jsont.t
5960+61+type reason_type = string
62+val reason_type_jsont : reason_type Jsont.t
6364+(** Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`. *)
65+66+type reason_violation = string
67+val reason_violation_jsont : reason_violation Jsont.t
68+69+(** Tag describing a type of subject that might be reported. *)
70+71+type subject_type = string
72+val subject_type_jsont : subject_type Jsont.t
73+74+ end
75+ end
76+ module Label : sig
77+ module Defs : sig
78(** Metadata tag on an atproto resource (eg, repo or record). *)
7980type label = {
···92(** Jsont codec for {!type:label}. *)
93val label_jsont : label Jsont.t
9495+96+type label_value = string
97+val label_value_jsont : label_value Jsont.t
98+99+(** Strings which describe the label in the UI, localized into a specific language. *)
100+101+type label_value_definition_strings = {
102+ description : string; (** A longer description of what the label means and why it might be applied. *)
103+ lang : string; (** The code of the language these strings are written in. *)
104+ name : string; (** A short human-readable name for the label. *)
105+}
106+107+(** Jsont codec for {!type:label_value_definition_strings}. *)
108+val label_value_definition_strings_jsont : label_value_definition_strings Jsont.t
109+110+(** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. *)
111112+type self_label = {
113+ val_ : string; (** The short string name of the value or type of this label. *)
114}
115116+(** Jsont codec for {!type:self_label}. *)
117+val self_label_jsont : self_label Jsont.t
118119(** Declares a label value and its expected interpretations and behaviors. *)
120···130(** Jsont codec for {!type:label_value_definition}. *)
131val label_value_definition_jsont : label_value_definition Jsont.t
132133+(** Metadata tags on an atproto record, published by the author within the record. *)
000134135+type self_labels = {
136+ values : self_label list;
0137}
138139+(** Jsont codec for {!type:self_labels}. *)
140+val self_labels_jsont : self_labels Jsont.t
141142 end
143 end
144+ end
145+end
146+module App : sig
147+ module Bsky : sig
148+ module Video : sig
149+ module GetUploadLimits : sig
150+(** Get video upload limits for the authenticated user. *)
1510152153+type output = {
154+ can_upload : bool;
155+ error : string option;
156+ message : string option;
157+ remaining_daily_bytes : int option;
158+ remaining_daily_videos : int option;
159+}
160161+(** Jsont codec for {!type:output}. *)
162+val output_jsont : output Jsont.t
163164+ end
165+ module Defs : sig
166167+type job_status = {
168+ blob : Atp.Blob_ref.t option;
169+ did : string;
170+ error : string option;
171+ job_id : string;
172+ message : string option;
173+ progress : int option; (** Progress within the current processing state. *)
174+ state : string; (** The state of the video processing job. All values not listed as a known value indicate that the job is in process. *)
175+}
00176177+(** Jsont codec for {!type:job_status}. *)
178+val job_status_jsont : job_status Jsont.t
179180+ end
181+ module UploadVideo : sig
182+(** Upload a video to be processed then stored on the PDS. *)
18300184185+type input = unit
186+val input_jsont : input Jsont.t
18700188189+type output = {
190+ job_status : Defs.job_status;
191+}
192193+(** Jsont codec for {!type:output}. *)
194+val output_jsont : output Jsont.t
195196 end
197+ module GetJobStatus : sig
198+(** Get status details for a video processing job. *)
0000199200+(** Query/procedure parameters. *)
201+type params = {
202+ job_id : string;
203+}
204205+(** Jsont codec for {!type:params}. *)
206+val params_jsont : params Jsont.t
20700208209+type output = {
210+ job_status : Defs.job_status;
211+}
212213+(** Jsont codec for {!type:output}. *)
214+val output_jsont : output Jsont.t
215216+ end
217 end
218 module Richtext : sig
219 module Facet : sig
220+(** 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. *)
221222+type byte_slice = {
223+ byte_end : int;
224+ byte_start : int;
225+}
226+227+(** Jsont codec for {!type:byte_slice}. *)
228+val byte_slice_jsont : byte_slice Jsont.t
229+230+(** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. *)
231+232+type link = {
233+ uri : string;
234}
235236+(** Jsont codec for {!type:link}. *)
237+val link_jsont : link Jsont.t
238239(** Facet feature for mention of another account. The text is usually a handle, including a '\@' prefix, but the facet reference is a DID. *)
240···245(** Jsont codec for {!type:mention}. *)
246val mention_jsont : mention Jsont.t
247248+(** 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'). *)
249250+type tag = {
251+ tag : string;
252}
253254+(** Jsont codec for {!type:tag}. *)
255+val tag_jsont : tag Jsont.t
0000000000256257(** Annotation of a sub-string within rich text. *)
258···266267 end
268 end
269+ module Notification : sig
270+ module UpdateSeen : sig
271+(** Notify server that the requesting account has seen notifications. Requires auth. *)
27200273274+type input = {
275+ seen_at : string;
276+}
277278+(** Jsont codec for {!type:input}. *)
279+val input_jsont : input Jsont.t
280281+ end
282+ module UnregisterPush : sig
283+(** The inverse of registerPush - inform a specified service that push notifications should no longer be sent to the given token for the requesting account. Requires auth. *)
28400285286+type input = {
287+ app_id : string;
288+ platform : string;
289+ service_did : string;
290+ token : string;
291+}
292293+(** Jsont codec for {!type:input}. *)
294+val input_jsont : input Jsont.t
295+296+ end
297+ module RegisterPush : sig
298+(** Register to receive push notifications, via a specified service, for the requesting account. Requires auth. *)
299+300+301+type input = {
302+ age_restricted : bool option; (** Set to true when the actor is age restricted *)
303+ app_id : string;
304+ platform : string;
305+ service_did : string;
306+ token : string;
307+}
308+309+(** Jsont codec for {!type:input}. *)
310+val input_jsont : input Jsont.t
311+312+ end
313+ module PutPreferences : sig
314+(** Set notification-related preferences for an account. Requires auth. *)
315+316+317+type input = {
318+ priority : bool;
319+}
320+321+(** Jsont codec for {!type:input}. *)
322+val input_jsont : input Jsont.t
323324+ end
325+ module ListNotifications : sig
00326327+type notification = {
328+ author : Jsont.json;
329+ cid : string;
330+ indexed_at : string;
331+ is_read : bool;
332+ labels : Com.Atproto.Label.Defs.label list option;
333+ reason : string; (** The reason why this notification was delivered - e.g. your post was liked, or you received a new follower. *)
334+ reason_subject : string option;
335+ record : Jsont.json;
336+ uri : string;
337+}
338339+(** Jsont codec for {!type:notification}. *)
340+val notification_jsont : notification Jsont.t
341342+(** Enumerate notifications for the requesting account. Requires auth. *)
343+344+(** Query/procedure parameters. *)
345+type params = {
346+ cursor : string option;
347+ limit : int option;
348+ priority : bool option;
349+ reasons : string list option; (** Notification reasons to include in response. *)
350+ seen_at : string option;
351}
352353+(** Jsont codec for {!type:params}. *)
354+val params_jsont : params Jsont.t
3550356357+type output = {
358+ cursor : string option;
359+ notifications : Jsont.json list;
360+ priority : bool option;
361+ seen_at : string option;
0000000362}
363364+(** Jsont codec for {!type:output}. *)
365+val output_jsont : output Jsont.t
366367+ end
368+ module ListActivitySubscriptions : sig
369+(** Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth. *)
370371+(** Query/procedure parameters. *)
372+type params = {
373+ cursor : string option;
374+ limit : int option;
0375}
376377+(** Jsont codec for {!type:params}. *)
378+val params_jsont : params Jsont.t
3790380381+type output = {
382+ cursor : string option;
383+ subscriptions : Jsont.json list;
384+}
385+386+(** Jsont codec for {!type:output}. *)
387+val output_jsont : output Jsont.t
388389+ end
390+ module GetUnreadCount : sig
391+(** Count the number of unread notifications for the requesting account. Requires auth. *)
392393+(** Query/procedure parameters. *)
394+type params = {
395+ priority : bool option;
396+ seen_at : string option;
397}
398399+(** Jsont codec for {!type:params}. *)
400+val params_jsont : params Jsont.t
4010402403+type output = {
404+ count : int;
0405}
406407+(** Jsont codec for {!type:output}. *)
408+val output_jsont : output Jsont.t
409410+ end
411+ module Defs : sig
412413+type activity_subscription = {
414+ post : bool;
415+ reply : bool;
416}
417418+(** Jsont codec for {!type:activity_subscription}. *)
419+val activity_subscription_jsont : activity_subscription Jsont.t
4200421422+type chat_preference = {
423+ include_ : string;
424+ push : bool;
425}
426427+(** Jsont codec for {!type:chat_preference}. *)
428+val chat_preference_jsont : chat_preference Jsont.t
4290430431+type filterable_preference = {
432+ include_ : string;
433+ list_ : bool;
434+ push : bool;
435}
436437+(** Jsont codec for {!type:filterable_preference}. *)
438+val filterable_preference_jsont : filterable_preference Jsont.t
4390440441+type preference = {
442+ list_ : bool;
443+ push : bool;
444}
445446+(** Jsont codec for {!type:preference}. *)
447+val preference_jsont : preference Jsont.t
448+449450+type record_deleted = unit
451452+(** Jsont codec for {!type:record_deleted}. *)
453+val record_deleted_jsont : record_deleted Jsont.t
454+455+456+type preferences = {
457+ chat : Jsont.json;
458+ follow : Jsont.json;
459+ like : Jsont.json;
460+ like_via_repost : Jsont.json;
461+ mention : Jsont.json;
462+ quote : Jsont.json;
463+ reply : Jsont.json;
464+ repost : Jsont.json;
465+ repost_via_repost : Jsont.json;
466+ starterpack_joined : Jsont.json;
467+ subscribed_post : Jsont.json;
468+ unverified : Jsont.json;
469+ verified : Jsont.json;
470}
471472+(** Jsont codec for {!type:preferences}. *)
473+val preferences_jsont : preferences Jsont.t
474475+(** Object used to store activity subscription data in stash. *)
476477+type subject_activity_subscription = {
478+ activity_subscription : Jsont.json;
479+ subject : string;
480}
481482+(** Jsont codec for {!type:subject_activity_subscription}. *)
483+val subject_activity_subscription_jsont : subject_activity_subscription Jsont.t
484485+ end
486+ module Declaration : sig
487+(** A declaration of the user's choices related to notifications that can be produced by them. *)
488489+type main = {
490+ allow_subscriptions : string; (** A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'. *)
491}
492493+(** Jsont codec for {!type:main}. *)
494+val main_jsont : main Jsont.t
495496 end
497+ module PutPreferencesV2 : sig
498+(** Set notification-related preferences for an account. Requires auth. *)
499500501type input = {
502+ chat : Jsont.json option;
503+ follow : Jsont.json option;
504+ like : Jsont.json option;
505+ like_via_repost : Jsont.json option;
506+ mention : Jsont.json option;
507+ quote : Jsont.json option;
508+ reply : Jsont.json option;
509+ repost : Jsont.json option;
510+ repost_via_repost : Jsont.json option;
511+ starterpack_joined : Jsont.json option;
512+ subscribed_post : Jsont.json option;
513+ unverified : Jsont.json option;
514+ verified : Jsont.json option;
515}
516517(** Jsont codec for {!type:input}. *)
518val input_jsont : input Jsont.t
519520521+type output = {
522+ preferences : Jsont.json;
523+}
524525(** Jsont codec for {!type:output}. *)
526val output_jsont : output Jsont.t
527528 end
529+ module PutActivitySubscription : sig
530+(** Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth. *)
531532+533+type input = {
534+ activity_subscription : Jsont.json;
535+ subject : string;
536}
537538+(** Jsont codec for {!type:input}. *)
539+val input_jsont : input Jsont.t
540541542type output = {
543+ activity_subscription : Jsont.json option;
544+ subject : string;
545}
546547(** Jsont codec for {!type:output}. *)
548val output_jsont : output Jsont.t
549550 end
551+ module GetPreferences : sig
552+(** Get notification-related preferences for an account. Requires auth. *)
553+554+(** Query/procedure parameters. *)
555+type params = unit
556+557+(** Jsont codec for {!type:params}. *)
558+val params_jsont : params Jsont.t
559560561+type output = {
562+ preferences : Jsont.json;
563+}
564565(** Jsont codec for {!type:output}. *)
566val output_jsont : output Jsont.t
···570 module Labeler : sig
571 module Defs : sig
57200000000573type labeler_policies = {
574 label_value_definitions : Com.Atproto.Label.Defs.label_value_definition list option; (** Label values created by this labeler and scoped exclusively to it. Labels defined here will override global label definitions for this labeler. *)
575 label_values : Com.Atproto.Label.Defs.label_value list; (** The label values which this labeler publishes. May include global or custom labels. *)
···579val labeler_policies_jsont : labeler_policies Jsont.t
580581582+type labeler_viewer_state = {
583+ like : string option;
584+}
585+586+(** Jsont codec for {!type:labeler_viewer_state}. *)
587+val labeler_viewer_state_jsont : labeler_viewer_state Jsont.t
588+589+590+type labeler_view = {
591+ cid : string;
592+ creator : Jsont.json;
593+ indexed_at : string;
594+ labels : Com.Atproto.Label.Defs.label list option;
595+ like_count : int option;
596+ uri : string;
597+ viewer : Jsont.json option;
598+}
599+600+(** Jsont codec for {!type:labeler_view}. *)
601+val labeler_view_jsont : labeler_view Jsont.t
602+603+604type labeler_view_detailed = {
605 cid : string;
606 creator : Jsont.json;
···617618(** Jsont codec for {!type:labeler_view_detailed}. *)
619val labeler_view_detailed_jsont : labeler_view_detailed Jsont.t
00000000000000620621 end
622 module Service : sig
···657658 end
659 end
660+ module Embed : sig
661+ module External : sig
000000000000000000000000000000000000000000000000000000000000000662663+type external_ = {
664+ description : string;
665+ thumb : Atp.Blob_ref.t option;
666+ title : string;
667+ uri : string;
668}
669670+(** Jsont codec for {!type:external_}. *)
671+val external__jsont : external_ Jsont.t
6720000673674type view_external = {
675 description : string;
···681(** Jsont codec for {!type:view_external}. *)
682val view_external_jsont : view_external Jsont.t
683684+(** A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post). *)
685686+type main = {
687+ external_ : Jsont.json;
000688}
689690+(** Jsont codec for {!type:main}. *)
691+val main_jsont : main Jsont.t
692693694type view = {
···698(** Jsont codec for {!type:view}. *)
699val view_jsont : view Jsont.t
700000000000701 end
702 module Defs : sig
703(** width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. *)
···711val aspect_ratio_jsont : aspect_ratio Jsont.t
712713 end
714+ module Video : sig
715716+type caption = {
717+ file : Atp.Blob_ref.t;
718+ lang : string;
719+}
720+721+(** Jsont codec for {!type:caption}. *)
722+val caption_jsont : caption Jsont.t
723+724+725+type view = {
726+ alt : string option;
727 aspect_ratio : Jsont.json option;
728+ cid : string;
729+ playlist : string;
730+ thumbnail : string option;
731}
732733+(** Jsont codec for {!type:view}. *)
734+val view_jsont : view Jsont.t
735+736+737+type main = {
738+ alt : string option; (** Alt text description of the video, for accessibility. *)
739+ aspect_ratio : Jsont.json option;
740+ captions : Jsont.json list option;
741+ video : Atp.Blob_ref.t; (** The mp4 video file. May be up to 100mb, formerly limited to 50mb. *)
742+}
743+744+(** Jsont codec for {!type:main}. *)
745+val main_jsont : main Jsont.t
746747+ end
748+ module Images : sig
749750type image = {
751 alt : string; (** Alt text description of the image, for accessibility. *)
···757val image_jsont : image Jsont.t
758759760+type view_image = {
761+ alt : string; (** Alt text description of the image, for accessibility. *)
762+ aspect_ratio : Jsont.json option;
763+ fullsize : string; (** 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. *)
764+ thumb : string; (** Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. *)
765}
766767+(** Jsont codec for {!type:view_image}. *)
768+val view_image_jsont : view_image Jsont.t
769770771type main = {
···775(** Jsont codec for {!type:main}. *)
776val main_jsont : main Jsont.t
77700778779type view = {
780+ images : Jsont.json list;
0000781}
782783(** Jsont codec for {!type:view}. *)
784val view_jsont : view Jsont.t
785786+ end
787+ module RecordWithMedia : sig
0000000788789type main = {
790+ media : Jsont.json;
791+ record : Jsont.json;
00792}
793794(** Jsont codec for {!type:main}. *)
795val main_jsont : main Jsont.t
79600797798type view = {
799 media : Jsont.json;
···803(** Jsont codec for {!type:view}. *)
804val view_jsont : view Jsont.t
805806+ end
807+ module Record : sig
808809type main = {
810+ record : Com.Atproto.Repo.StrongRef.main;
0811}
812813(** Jsont codec for {!type:main}. *)
814val main_jsont : main Jsont.t
81500816817+type view = {
818+ record : Jsont.json;
0000000000819}
820821+(** Jsont codec for {!type:view}. *)
822+val view_jsont : view Jsont.t
823824825+type view_blocked = {
826+ author : Jsont.json;
827+ blocked : bool;
828 uri : string;
829}
830831+(** Jsont codec for {!type:view_blocked}. *)
832+val view_blocked_jsont : view_blocked Jsont.t
833834835type view_detached = {
···841val view_detached_jsont : view_detached Jsont.t
842843844+type view_not_found = {
845+ not_found : bool;
0846 uri : string;
847}
848849+(** Jsont codec for {!type:view_not_found}. *)
850+val view_not_found_jsont : view_not_found Jsont.t
851852853+type view_record = {
854+ author : Jsont.json;
855+ cid : string;
856+ embeds : Jsont.json list option;
857+ indexed_at : string;
858+ labels : Com.Atproto.Label.Defs.label list option;
859+ like_count : int option;
860+ quote_count : int option;
861+ reply_count : int option;
862+ repost_count : int option;
863+ uri : string;
864+ value : Jsont.json; (** The record data itself. *)
865}
866867+(** Jsont codec for {!type:view_record}. *)
868+val view_record_jsont : view_record Jsont.t
00000000869870 end
871 end
872+ module AuthViewAll : sig
0000000873874+type main = unit
875+val main_jsont : main Jsont.t
876877+ end
878+ module AuthManageProfile : sig
0879880+type main = unit
881+val main_jsont : main Jsont.t
882883+ end
884+ module AuthManageNotifications : sig
00000885886+type main = unit
887+val main_jsont : main Jsont.t
888889+ end
890+ module AuthManageModeration : sig
891892+type main = unit
893+val main_jsont : main Jsont.t
000000000894895+ end
896+ module AuthManageLabelerService : sig
897898+type main = unit
899+val main_jsont : main Jsont.t
900901+ end
902+ module AuthManageFeedDeclarations : sig
000000903904+type main = unit
905+val main_jsont : main Jsont.t
906907+ end
908+ module AuthFullApp : sig
909910+type main = unit
911+val main_jsont : main Jsont.t
0000912913+ end
914+ module AuthCreatePosts : sig
915916+type main = unit
917+val main_jsont : main Jsont.t
0918919+ end
920+ module Ageassurance : sig
921+ module Defs : sig
922+(** The access level granted based on Age Assurance data we've processed. *)
0923924+type access = string
925+val access_jsont : access Jsont.t
926927+(** The Age Assurance configuration for a specific region. *)
928929+type config_region = {
930+ country_code : string; (** The ISO 3166-1 alpha-2 country code this configuration applies to. *)
931+ min_access_age : int; (** The minimum age (as a whole integer) required to use Bluesky in this region. *)
932+ region_code : string option; (** The ISO 3166-2 region code this configuration applies to. If omitted, the configuration applies to the entire country. *)
933+ rules : Jsont.json list; (** The ordered list of Age Assurance rules that apply to this region. Rules should be applied in order, and the first matching rule determines the access level granted. The rules array should always include a default rule as the last item. *)
934}
935936+(** Jsont codec for {!type:config_region}. *)
937+val config_region_jsont : config_region Jsont.t
938939+(** Object used to store Age Assurance data in stash. *)
00940941+type event = {
942+ access : string; (** The access level granted based on Age Assurance data we've processed. *)
943+ attempt_id : string; (** The unique identifier for this instance of the Age Assurance flow, in UUID format. *)
944+ complete_ip : string option; (** The IP address used when completing the Age Assurance flow. *)
945+ complete_ua : string option; (** The user agent used when completing the Age Assurance flow. *)
946+ country_code : string; (** The ISO 3166-1 alpha-2 country code provided when beginning the Age Assurance flow. *)
947+ created_at : string; (** The date and time of this write operation. *)
948+ email : string option; (** The email used for Age Assurance. *)
949+ init_ip : string option; (** The IP address used when initiating the Age Assurance flow. *)
950+ init_ua : string option; (** The user agent used when initiating the Age Assurance flow. *)
951+ region_code : string option; (** The ISO 3166-2 region code provided when beginning the Age Assurance flow. *)
952+ status : string; (** The status of the Age Assurance process. *)
953}
954955+(** Jsont codec for {!type:event}. *)
956+val event_jsont : event Jsont.t
0000957958+(** Additional metadata needed to compute Age Assurance state client-side. *)
959960+type state_metadata = {
961+ account_created_at : string option; (** The account creation timestamp. *)
962}
963964+(** Jsont codec for {!type:state_metadata}. *)
965+val state_metadata_jsont : state_metadata Jsont.t
000966967+(** The status of the Age Assurance process. *)
968969+type status = string
970+val status_jsont : status Jsont.t
971972973+type config = {
974+ regions : config_region list; (** The per-region Age Assurance configuration. *)
0975}
976977+(** Jsont codec for {!type:config}. *)
978+val config_jsont : config Jsont.t
979980+(** Age Assurance rule that applies by default. *)
981982+type config_region_rule_default = {
983+ access : access;
00984}
985986+(** Jsont codec for {!type:config_region_rule_default}. *)
987+val config_region_rule_default_jsont : config_region_rule_default Jsont.t
988989+(** Age Assurance rule that applies if the account is equal-to or newer than a certain date. *)
990991+type config_region_rule_if_account_newer_than = {
992+ access : access;
993+ date : string; (** The date threshold as a datetime string. *)
994}
995996+(** Jsont codec for {!type:config_region_rule_if_account_newer_than}. *)
997+val config_region_rule_if_account_newer_than_jsont : config_region_rule_if_account_newer_than Jsont.t
998999+(** Age Assurance rule that applies if the account is older than a certain date. *)
10001001+type config_region_rule_if_account_older_than = {
1002+ access : access;
1003+ date : string; (** The date threshold as a datetime string. *)
1004}
10051006+(** Jsont codec for {!type:config_region_rule_if_account_older_than}. *)
1007+val config_region_rule_if_account_older_than_jsont : config_region_rule_if_account_older_than Jsont.t
10081009+(** Age Assurance rule that applies if the user has been assured to be equal-to or over a certain age. *)
10101011+type config_region_rule_if_assured_over_age = {
1012+ access : access;
1013+ age : int; (** The age threshold as a whole integer. *)
1014}
10151016+(** Jsont codec for {!type:config_region_rule_if_assured_over_age}. *)
1017+val config_region_rule_if_assured_over_age_jsont : config_region_rule_if_assured_over_age Jsont.t
10181019+(** Age Assurance rule that applies if the user has been assured to be under a certain age. *)
10201021+type config_region_rule_if_assured_under_age = {
1022+ access : access;
1023+ age : int; (** The age threshold as a whole integer. *)
000000000001024}
10251026+(** Jsont codec for {!type:config_region_rule_if_assured_under_age}. *)
1027+val config_region_rule_if_assured_under_age_jsont : config_region_rule_if_assured_under_age Jsont.t
10281029+(** Age Assurance rule that applies if the user has declared themselves equal-to or over a certain age. *)
0010301031+type config_region_rule_if_declared_over_age = {
1032+ access : access;
1033+ age : int; (** The age threshold as a whole integer. *)
1034}
10351036+(** Jsont codec for {!type:config_region_rule_if_declared_over_age}. *)
1037+val config_region_rule_if_declared_over_age_jsont : config_region_rule_if_declared_over_age Jsont.t
10381039+(** Age Assurance rule that applies if the user has declared themselves under a certain age. *)
0010401041+type config_region_rule_if_declared_under_age = {
1042+ access : access;
1043+ age : int; (** The age threshold as a whole integer. *)
01044}
10451046+(** Jsont codec for {!type:config_region_rule_if_declared_under_age}. *)
1047+val config_region_rule_if_declared_under_age_jsont : config_region_rule_if_declared_under_age Jsont.t
10481049+(** The user's computed Age Assurance state. *)
10501051+type state = {
1052+ access : access;
1053+ last_initiated_at : string option; (** The timestamp when this state was last updated. *)
1054+ status : status;
1055}
10561057+(** Jsont codec for {!type:state}. *)
1058+val state_jsont : state Jsont.t
10591060 end
1061+ module GetState : sig
1062+(** Returns server-computed Age Assurance state, if available, and any additional metadata needed to compute Age Assurance state client-side. *)
10631064(** Query/procedure parameters. *)
1065+type params = {
1066+ country_code : string;
1067+ region_code : string option;
1068+}
10691070(** Jsont codec for {!type:params}. *)
1071val params_jsont : params Jsont.t
107210731074type output = {
1075+ metadata : Defs.state_metadata;
1076+ state : Defs.state;
1077}
10781079(** Jsont codec for {!type:output}. *)
1080val output_jsont : output Jsont.t
10811082 end
1083+ module GetConfig : sig
1084+(** Returns Age Assurance configuration for use on the client. *)
108510861087+type output = Defs.config
00000000000010881089(** Jsont codec for {!type:output}. *)
1090val output_jsont : output Jsont.t
10911092 end
1093+ module Begin : sig
1094+(** Initiate Age Assurance for an account. *)
109510961097type input = {
1098+ country_code : string; (** An ISO 3166-1 alpha-2 code of the user's location. *)
1099+ email : string; (** The user's email address to receive Age Assurance instructions. *)
1100+ language : string; (** The user's preferred language for communication during the Age Assurance process. *)
1101+ region_code : string option; (** An optional ISO 3166-2 code of the user's region or state within the country. *)
0000000001102}
11031104(** Jsont codec for {!type:input}. *)
1105val input_jsont : input Jsont.t
110611071108+type output = Defs.state
0011091110(** Jsont codec for {!type:output}. *)
1111val output_jsont : output Jsont.t
···11531154 end
1155 module Defs : sig
011561157+type adult_content_pref = {
1158+ enabled : bool;
0001159}
11601161+(** Jsont codec for {!type:adult_content_pref}. *)
1162+val adult_content_pref_jsont : adult_content_pref Jsont.t
11631164+(** If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress. *)
11651166+type bsky_app_progress_guide = {
1167+ guide : string;
1168}
11691170+(** Jsont codec for {!type:bsky_app_progress_guide}. *)
1171+val bsky_app_progress_guide_jsont : bsky_app_progress_guide Jsont.t
117211731174+type content_label_pref = {
1175+ label : string;
1176+ labeler_did : string option; (** Which labeler does this preference apply to? If undefined, applies globally. *)
1177+ visibility : string;
1178}
11791180+(** Jsont codec for {!type:content_label_pref}. *)
1181+val content_label_pref_jsont : content_label_pref Jsont.t
11821183+(** Read-only preference containing value(s) inferred from the user's declared birthdate. Absence of this preference object in the response indicates that the user has not made a declaration. *)
11841185+type declared_age_pref = {
1186+ is_over_age13 : bool option; (** Indicates if the user has declared that they are over 13 years of age. *)
1187+ is_over_age16 : bool option; (** Indicates if the user has declared that they are over 16 years of age. *)
1188+ is_over_age18 : bool option; (** Indicates if the user has declared that they are over 18 years of age. *)
000001189}
11901191+(** Jsont codec for {!type:declared_age_pref}. *)
1192+val declared_age_pref_jsont : declared_age_pref Jsont.t
119311941195+type feed_view_pref = {
1196+ feed : string; (** The URI of the feed, or an identifier which describes the feed. *)
1197+ hide_quote_posts : bool option; (** Hide quote posts in the feed. *)
1198+ hide_replies : bool option; (** Hide replies in the feed. *)
1199+ hide_replies_by_like_count : int option; (** Hide replies in the feed if they do not have this number of likes. *)
1200+ hide_replies_by_unfollowed : bool option; (** Hide replies in the feed if they are not by followed users. *)
1201+ hide_reposts : bool option; (** Hide reposts in the feed. *)
1202}
12031204+(** Jsont codec for {!type:feed_view_pref}. *)
1205+val feed_view_pref_jsont : feed_view_pref Jsont.t
120612071208+type hidden_posts_pref = {
1209+ items : string list; (** A list of URIs of posts the account owner has hidden. *)
0001210}
12111212+(** Jsont codec for {!type:hidden_posts_pref}. *)
1213+val hidden_posts_pref_jsont : hidden_posts_pref Jsont.t
121412151216+type interests_pref = {
1217+ tags : string list; (** A list of tags which describe the account owner's interests gathered during onboarding. *)
1218}
12191220+(** Jsont codec for {!type:interests_pref}. *)
1221+val interests_pref_jsont : interests_pref Jsont.t
122212231224+type labeler_pref_item = {
1225+ did : string;
1226}
12271228+(** Jsont codec for {!type:labeler_pref_item}. *)
1229+val labeler_pref_item_jsont : labeler_pref_item Jsont.t
123012311232+type muted_word_target = string
1233+val muted_word_target_jsont : muted_word_target Jsont.t
12341235+(** A new user experiences (NUX) storage object *)
12361237+type nux = {
1238+ completed : bool;
1239+ data : string option; (** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. *)
1240+ expires_at : string option; (** The date and time at which the NUX will expire and should be considered completed. *)
1241+ id : string;
1242}
12431244+(** Jsont codec for {!type:nux}. *)
1245+val nux_jsont : nux Jsont.t
124612471248type personal_details_pref = {
···1252(** Jsont codec for {!type:personal_details_pref}. *)
1253val personal_details_pref_jsont : personal_details_pref Jsont.t
12541255+(** 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. *)
12561257+type post_interaction_settings_pref = {
1258+ postgate_embedding_rules : Jsont.json list option; (** 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. *)
1259+ threadgate_allow_rules : Jsont.json list option; (** 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. *)
001260}
12611262+(** Jsont codec for {!type:post_interaction_settings_pref}. *)
1263+val post_interaction_settings_pref_jsont : post_interaction_settings_pref Jsont.t
126412651266+type preferences = Jsont.json list
1267+val preferences_jsont : preferences Jsont.t
126812691270+type profile_associated_activity_subscription = {
1271+ allow_subscriptions : string;
1272}
12731274+(** Jsont codec for {!type:profile_associated_activity_subscription}. *)
1275+val profile_associated_activity_subscription_jsont : profile_associated_activity_subscription Jsont.t
127612771278+type profile_associated_chat = {
1279+ allow_incoming : string;
1280}
12811282+(** Jsont codec for {!type:profile_associated_chat}. *)
1283+val profile_associated_chat_jsont : profile_associated_chat Jsont.t
128412851286+type saved_feed = {
1287+ id : string;
1288+ pinned : bool;
1289+ type_ : string;
1290+ value : string;
1291}
12921293+(** Jsont codec for {!type:saved_feed}. *)
1294+val saved_feed_jsont : saved_feed Jsont.t
1295+1296+1297+type saved_feeds_pref = {
1298+ pinned : string list;
1299+ saved : string list;
1300+ timeline_index : int option;
1301+}
1302+1303+(** Jsont codec for {!type:saved_feeds_pref}. *)
1304+val saved_feeds_pref_jsont : saved_feeds_pref Jsont.t
130513061307+type status_view = {
1308+ cid : string option;
1309+ embed : Jsont.json option; (** An optional embed associated with the status. *)
1310+ expires_at : string option; (** The date when this status will expire. The application might choose to no longer return the status after expiration. *)
1311+ is_active : bool option; (** True if the status is not expired, false if it is expired. Only present if expiration was set. *)
1312+ is_disabled : bool option; (** True if the user's go-live access has been disabled by a moderator, false otherwise. *)
1313+ record : Jsont.json;
1314+ status : string; (** The status for the account. *)
1315+ uri : string option;
1316}
13171318+(** Jsont codec for {!type:status_view}. *)
1319+val status_view_jsont : status_view Jsont.t
1320013211322+type thread_view_pref = {
1323+ sort : string option; (** Sorting mode for threads. *)
001324}
13251326+(** Jsont codec for {!type:thread_view_pref}. *)
1327+val thread_view_pref_jsont : thread_view_pref Jsont.t
13281329+(** Preferences for how verified accounts appear in the app. *)
13301331+type verification_prefs = {
1332+ hide_badges : bool option; (** Hide the blue check badges for verified accounts and trusted verifiers. *)
001333}
13341335+(** Jsont codec for {!type:verification_prefs}. *)
1336+val verification_prefs_jsont : verification_prefs Jsont.t
13371338+(** An individual verification for an associated subject. *)
13391340+type verification_view = {
1341+ created_at : string; (** Timestamp when the verification was created. *)
1342+ is_valid : bool; (** True if the verification passes validation, otherwise false. *)
1343+ issuer : string; (** The user who issued this verification. *)
1344+ uri : string; (** The AT-URI of the verification record. *)
1345}
13461347+(** Jsont codec for {!type:verification_view}. *)
1348+val verification_view_jsont : verification_view Jsont.t
13491350+(** A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this. *)
13511352+type bsky_app_state_pref = {
1353+ active_progress_guide : Jsont.json option;
1354+ nuxs : Jsont.json list option; (** Storage for NUXs the user has encountered. *)
1355+ queued_nudges : string list option; (** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. *)
1356}
13571358+(** Jsont codec for {!type:bsky_app_state_pref}. *)
1359+val bsky_app_state_pref_jsont : bsky_app_state_pref Jsont.t
1360013611362+type labelers_pref = {
1363+ labelers : Jsont.json list;
001364}
13651366+(** Jsont codec for {!type:labelers_pref}. *)
1367+val labelers_pref_jsont : labelers_pref Jsont.t
13681369+(** A word that the account owner has muted. *)
13701371+type muted_word = {
1372+ actor_target : string option; (** Groups of users to apply the muted word to. If undefined, applies to all users. *)
1373+ expires_at : string option; (** The date and time at which the muted word will expire and no longer be applied. *)
1374+ id : string option;
1375+ targets : Jsont.json list; (** The intended targets of the muted word. *)
1376+ value : string; (** The muted word itself. *)
1377}
13781379+(** Jsont codec for {!type:muted_word}. *)
1380+val muted_word_jsont : muted_word Jsont.t
138113821383type profile_associated = {
···1392(** Jsont codec for {!type:profile_associated}. *)
1393val profile_associated_jsont : profile_associated Jsont.t
1394013951396+type saved_feeds_pref_v2 = {
1397+ items : Jsont.json list;
00001398}
13991400+(** Jsont codec for {!type:saved_feeds_pref_v2}. *)
1401+val saved_feeds_pref_v2_jsont : saved_feeds_pref_v2 Jsont.t
14021403+(** Represents the verification information about the user this object is attached to. *)
14041405+type verification_state = {
1406+ trusted_verifier_status : string; (** The user's status as a trusted verifier. *)
1407+ verifications : Jsont.json list; (** All verifications issued by trusted verifiers on behalf of this user. Verifications by untrusted verifiers are not included. *)
1408+ verified_status : string; (** The user's status as a verified account. *)
1409}
14101411+(** Jsont codec for {!type:verification_state}. *)
1412+val verification_state_jsont : verification_state Jsont.t
00000000000141314141415type muted_words_pref = {
···1419(** Jsont codec for {!type:muted_words_pref}. *)
1420val muted_words_pref_jsont : muted_words_pref Jsont.t
14211422+(** The subject's followers whom you also follow *)
14231424+type known_followers = {
1425+ count : int;
1426+ followers : Jsont.json list;
00000001427}
14281429+(** Jsont codec for {!type:known_followers}. *)
1430+val known_followers_jsont : known_followers Jsont.t
143114321433+type profile_view = {
1434 associated : Jsont.json option;
1435 avatar : string option;
01436 created_at : string option;
1437 debug : Jsont.json option; (** Debug information for internal development *)
1438 description : string option;
1439 did : string;
1440 display_name : string option;
001441 handle : string;
1442 indexed_at : string option;
01443 labels : Com.Atproto.Label.Defs.label list option;
001444 pronouns : string option;
1445 status : Jsont.json option;
1446 verification : Jsont.json option;
1447 viewer : Jsont.json option;
01448}
14491450+(** Jsont codec for {!type:profile_view}. *)
1451+val profile_view_jsont : profile_view Jsont.t
145214531454type profile_view_basic = {
···1470val profile_view_basic_jsont : profile_view_basic Jsont.t
147114721473+type profile_view_detailed = {
1474 associated : Jsont.json option;
1475 avatar : string option;
1476+ banner : string option;
1477 created_at : string option;
1478 debug : Jsont.json option; (** Debug information for internal development *)
1479 description : string option;
1480 did : string;
1481 display_name : string option;
1482+ followers_count : int option;
1483+ follows_count : int option;
1484 handle : string;
1485 indexed_at : string option;
1486+ joined_via_starter_pack : Jsont.json option;
1487 labels : Com.Atproto.Label.Defs.label list option;
1488+ pinned_post : Com.Atproto.Repo.StrongRef.main option;
1489+ posts_count : int option;
1490 pronouns : string option;
1491 status : Jsont.json option;
1492 verification : Jsont.json option;
1493 viewer : Jsont.json option;
1494+ website : string option;
1495}
14961497+(** Jsont codec for {!type:profile_view_detailed}. *)
1498+val profile_view_detailed_jsont : profile_view_detailed Jsont.t
14991500+(** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. *)
000000000000000000015011502+type viewer_state = {
1503+ activity_subscription : Jsont.json option; (** This property is present only in selected cases, as an optimization. *)
1504+ blocked_by : bool option;
1505+ blocking : string option;
1506+ blocking_by_list : Jsont.json option;
1507+ followed_by : string option;
1508+ following : string option;
1509+ known_followers : Jsont.json option; (** This property is present only in selected cases, as an optimization. *)
1510+ muted : bool option;
1511+ muted_by_list : Jsont.json option;
1512}
15131514+(** Jsont codec for {!type:viewer_state}. *)
1515+val viewer_state_jsont : viewer_state Jsont.t
15161517 end
1518 module SearchActorsTypeahead : sig
···1537val output_jsont : output Jsont.t
15381539 end
0000000000000000001540 module SearchActors : sig
1541(** Find actors (profiles) matching search criteria. Does not require auth. *)
1542···1561val output_jsont : output Jsont.t
15621563 end
1564+ module PutPreferences : sig
1565+(** Set the private preferences attached to the account. *)
1566+1567+1568+type input = {
1569+ preferences : Jsont.json;
1570+}
1571+1572+(** Jsont codec for {!type:input}. *)
1573+val input_jsont : input Jsont.t
1574+1575+ end
1576 module GetSuggestions : sig
1577(** Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding. *)
1578···1616val output_jsont : output Jsont.t
16171618 end
1619+ module GetProfile : sig
1620+(** Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth. *)
000000000000000000000000000000000000000000000016211622+(** Query/procedure parameters. *)
1623+type params = {
1624+ actor : string; (** Handle or DID of account to fetch profile of. *)
0000000000000001625}
16261627+(** Jsont codec for {!type:params}. *)
1628+val params_jsont : params Jsont.t
162916301631+type output = Jsont.json
16321633(** Jsont codec for {!type:output}. *)
1634val output_jsont : output Jsont.t
16351636 end
1637+ module GetPreferences : sig
1638+(** Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth. *)
16391640(** Query/procedure parameters. *)
1641+type params = unit
00016421643(** Jsont codec for {!type:params}. *)
1644val params_jsont : params Jsont.t
164516461647type output = {
1648+ preferences : Jsont.json;
01649}
16501651(** Jsont codec for {!type:output}. *)
1652val output_jsont : output Jsont.t
16531654 end
1655+ end
1656+ module Graph : sig
1657+ module Verification : sig
1658+(** Record declaring a verification relationship between two accounts. Verifications are only considered valid by an app if issued by an account the app considers trusted. *)
16591660+type main = {
1661+ created_at : string; (** Date of when the verification was created. *)
1662+ display_name : string; (** Display name of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current displayName matches the one at the time of verifying. *)
1663+ handle : string; (** Handle of the subject the verification applies to at the moment of verifying, which might not be the same at the time of viewing. The verification is only valid if the current handle matches the one at the time of verifying. *)
1664+ subject : string; (** DID of the subject the verification applies to. *)
1665}
16661667+(** Jsont codec for {!type:main}. *)
1668+val main_jsont : main Jsont.t
0000000016691670 end
1671+ module UnmuteThread : sig
1672+(** Unmutes the specified thread. Requires auth. *)
167316741675type input = {
1676+ root : string;
1677}
16781679(** Jsont codec for {!type:input}. *)
1680val input_jsont : input Jsont.t
16810000001682 end
1683+ module UnmuteActorList : sig
1684+(** Unmutes the specified list of accounts. Requires auth. *)
168516861687type input = {
1688+ list_ : string;
01689}
16901691(** Jsont codec for {!type:input}. *)
1692val input_jsont : input Jsont.t
16930000001694 end
1695+ module UnmuteActor : sig
1696+(** Unmutes the specified account. Requires auth. *)
000000000000000000169716981699type input = {
1700+ actor : string;
01701}
17021703(** Jsont codec for {!type:input}. *)
1704val input_jsont : input Jsont.t
0000000017051706 end
001707 module Starterpack : sig
17081709type feed_item = {
···1728val main_jsont : main Jsont.t
17291730 end
1731+ module MuteThread : sig
1732+(** Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth. *)
0000000000173317341735+type input = {
1736+ root : string;
001737}
17381739+(** Jsont codec for {!type:input}. *)
1740+val input_jsont : input Jsont.t
17411742 end
1743+ module MuteActorList : sig
1744+(** Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth. *)
17451746+1747+type input = {
1748+ list_ : string;
1749}
17501751+(** Jsont codec for {!type:input}. *)
1752+val input_jsont : input Jsont.t
17531754+ end
1755+ module MuteActor : sig
1756+(** Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth. *)
17571758+1759+type input = {
1760+ actor : string;
01761}
17621763+(** Jsont codec for {!type:input}. *)
1764+val input_jsont : input Jsont.t
17651766 end
1767+ module Listitem : sig
1768+(** Record representing an account's inclusion on a specific list. The AppView will ignore duplicate listitem records. *)
17691770type main = {
1771 created_at : string;
1772+ list_ : string; (** Reference (AT-URI) to the list record (app.bsky.graph.list). *)
1773+ subject : string; (** The account which is included on the list. *)
1774}
17751776(** Jsont codec for {!type:main}. *)
···1789val main_jsont : main Jsont.t
17901791 end
1792+ module GetSuggestedFollowsByActor : sig
1793+(** Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account. *)
1794+1795+(** Query/procedure parameters. *)
1796+type params = {
1797+ actor : string;
1798+}
1799+1800+(** Jsont codec for {!type:params}. *)
1801+val params_jsont : params Jsont.t
180218031804+type output = {
1805+ is_fallback : bool option; (** If true, response has fallen-back to generic results, and is not scoped using relativeToDid *)
1806+ rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
1807+ suggestions : Jsont.json list;
1808}
18091810+(** Jsont codec for {!type:output}. *)
1811+val output_jsont : output Jsont.t
18121813 end
1814+ module GetMutes : sig
1815+(** Enumerates accounts that the requesting account (actor) currently has muted. Requires auth. *)
18161817(** Query/procedure parameters. *)
1818type params = {
01819 cursor : string option;
1820 limit : int option;
1821}
···18261827type output = {
1828 cursor : string option;
1829+ mutes : Jsont.json list;
01830}
18311832(** Jsont codec for {!type:output}. *)
1833val output_jsont : output Jsont.t
18341835 end
1836+ module GetKnownFollowers : sig
1837+(** Enumerates accounts which follow a specified account (actor) and are followed by the viewer. *)
18381839+(** Query/procedure parameters. *)
1840+type params = {
1841+ actor : string;
1842+ cursor : string option;
1843+ limit : int option;
1844}
18451846+(** Jsont codec for {!type:params}. *)
1847+val params_jsont : params Jsont.t
184800018491850+type output = {
1851+ cursor : string option;
1852+ followers : Jsont.json list;
1853+ subject : Jsont.json;
1854}
18551856+(** Jsont codec for {!type:output}. *)
1857+val output_jsont : output Jsont.t
18581859 end
1860+ module GetFollows : sig
1861+(** Enumerates accounts which a specified account (actor) follows. *)
18621863+(** Query/procedure parameters. *)
1864+type params = {
1865 actor : string;
1866+ cursor : string option;
1867+ limit : int option;
00000000001868}
18691870+(** Jsont codec for {!type:params}. *)
1871+val params_jsont : params Jsont.t
0000187218731874+type output = {
1875+ cursor : string option;
1876+ follows : Jsont.json list;
1877+ subject : Jsont.json;
1878}
18791880+(** Jsont codec for {!type:output}. *)
1881+val output_jsont : output Jsont.t
18821883 end
1884+ module GetFollowers : sig
1885+(** Enumerates accounts which follow a specified account (actor). *)
18861887(** Query/procedure parameters. *)
1888type params = {
···1905val output_jsont : output Jsont.t
19061907 end
1908+ module GetBlocks : sig
1909+(** Enumerates which accounts the requesting account is currently blocking. Requires auth. *)
1910+1911+(** Query/procedure parameters. *)
1912+type params = {
1913+ cursor : string option;
1914+ limit : int option;
1915+}
19161917+(** Jsont codec for {!type:params}. *)
1918+val params_jsont : params Jsont.t
19191920+1921+type output = {
1922+ blocks : Jsont.json list;
1923+ cursor : string option;
1924}
19251926+(** Jsont codec for {!type:output}. *)
1927+val output_jsont : output Jsont.t
19281929 end
1930+ module Follow : sig
1931+(** Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView. *)
19321933type main = {
1934 created_at : string;
1935+ subject : string;
1936+ via : Com.Atproto.Repo.StrongRef.main option;
1937}
19381939(** Jsont codec for {!type:main}. *)
···19411942 end
1943 module Defs : sig
1944+(** A list of actors used for curation purposes such as list feeds or interaction gating. *)
19451946+type curatelist = string
1947+val curatelist_jsont : curatelist Jsont.t
1948+1949+1950+type list_item_view = {
1951+ subject : Jsont.json;
0001952 uri : string;
1953}
19541955+(** Jsont codec for {!type:list_item_view}. *)
1956+val list_item_view_jsont : list_item_view Jsont.t
19571958+1959+type list_purpose = string
1960+val list_purpose_jsont : list_purpose Jsont.t
1961+19621963+type list_viewer_state = {
1964+ blocked : string option;
1965+ muted : bool option;
000001966}
19671968+(** Jsont codec for {!type:list_viewer_state}. *)
1969+val list_viewer_state_jsont : list_viewer_state Jsont.t
19701971+(** A list of actors to apply an aggregate moderation action (mute/block) on. *)
19721973+type modlist = string
1974+val modlist_jsont : modlist Jsont.t
19751976(** indicates that a handle or DID could not be resolved *)
1977···1983(** Jsont codec for {!type:not_found_actor}. *)
1984val not_found_actor_jsont : not_found_actor Jsont.t
19851986+(** A list of actors used for only for reference purposes such as within a starter pack. *)
19871988+type referencelist = string
1989+val referencelist_jsont : referencelist Jsont.t
19901991+(** lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) *)
19921993+type relationship = {
1994+ blocked_by : string option; (** if the actor is blocked by this DID, contains the AT-URI of the block record *)
1995+ blocked_by_list : string option; (** if the actor is blocked by this DID via a block list, contains the AT-URI of the listblock record *)
1996+ blocking : string option; (** if the actor blocks this DID, this is the AT-URI of the block record *)
1997+ blocking_by_list : string option; (** if the actor blocks this DID via a block list, this is the AT-URI of the listblock record *)
1998+ did : string;
1999+ followed_by : string option; (** if the actor is followed by this DID, contains the AT-URI of the follow record *)
2000+ following : string option; (** if the actor follows this DID, this is the AT-URI of the follow record *)
2001}
20022003+(** Jsont codec for {!type:relationship}. *)
2004+val relationship_jsont : relationship Jsont.t
200520062007+type starter_pack_view_basic = {
2008+ cid : string;
2009+ creator : Jsont.json;
2010+ indexed_at : string;
2011+ joined_all_time_count : int option;
2012+ joined_week_count : int option;
2013+ labels : Com.Atproto.Label.Defs.label list option;
2014+ list_item_count : int option;
2015+ record : Jsont.json;
2016 uri : string;
2017}
20182019+(** Jsont codec for {!type:starter_pack_view_basic}. *)
2020+val starter_pack_view_basic_jsont : starter_pack_view_basic Jsont.t
2021020222023+type list_view = {
00002024 avatar : string option;
2025 cid : string;
2026+ creator : Jsont.json;
2027+ description : string option;
2028+ description_facets : Richtext.Facet.main list option;
2029+ indexed_at : string;
2030 labels : Com.Atproto.Label.Defs.label list option;
2031 list_item_count : int option;
2032 name : string;
···2035 viewer : Jsont.json option;
2036}
20372038+(** Jsont codec for {!type:list_view}. *)
2039+val list_view_jsont : list_view Jsont.t
204020412042+type list_view_basic = {
2043 avatar : string option;
2044 cid : string;
2045+ indexed_at : string option;
0002046 labels : Com.Atproto.Label.Defs.label list option;
2047 list_item_count : int option;
2048 name : string;
···2051 viewer : Jsont.json option;
2052}
20532054+(** Jsont codec for {!type:list_view_basic}. *)
2055+val list_view_basic_jsont : list_view_basic Jsont.t
205620572058type starter_pack_view = {
···2073val starter_pack_view_jsont : starter_pack_view Jsont.t
20742075 end
2076+ module Block : sig
2077+(** Record declaring a 'block' relationship against another account. NOTE: blocks are public in Bluesky; see blog posts for details. *)
2078+2079+type main = {
2080+ created_at : string;
2081+ subject : string; (** DID of the account to be blocked. *)
2082+}
2083+2084+(** Jsont codec for {!type:main}. *)
2085+val main_jsont : main Jsont.t
2086+2087+ end
2088+ module SearchStarterPacks : sig
2089+(** Find starter packs matching search criteria. Does not require auth. *)
20902091(** Query/procedure parameters. *)
2092type params = {
2093 cursor : string option;
2094 limit : int option;
2095+ q : string; (** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
2096}
20972098(** Jsont codec for {!type:params}. *)
···210021012102type output = {
02103 cursor : string option;
2104+ starter_packs : Jsont.json list;
2105}
21062107(** Jsont codec for {!type:output}. *)
2108val output_jsont : output Jsont.t
21092110 end
2111+ module List : sig
2112+(** Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists. *)
21132114type main = {
2115+ avatar : Atp.Blob_ref.t option;
2116+ created_at : string;
2117+ description : string option;
2118+ description_facets : Richtext.Facet.main list option;
2119+ labels : Com.Atproto.Label.Defs.self_labels option;
2120+ name : string; (** Display name for list; can not be empty. *)
2121+ purpose : Jsont.json; (** Defines the purpose of the list (aka, moderation-oriented or curration-oriented) *)
2122}
21232124(** Jsont codec for {!type:main}. *)
2125val main_jsont : main Jsont.t
21262127 end
2128+ module GetStarterPacksWithMembership : sig
2129+(** A starter pack and an optional list item indicating membership of a target user to that starter pack. *)
2130+2131+type starter_pack_with_membership = {
2132+ list_item : Jsont.json option;
2133+ starter_pack : Jsont.json;
2134+}
2135+2136+(** Jsont codec for {!type:starter_pack_with_membership}. *)
2137+val starter_pack_with_membership_jsont : starter_pack_with_membership Jsont.t
2138+2139+(** Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth. *)
21402141(** Query/procedure parameters. *)
2142type params = {
2143+ actor : string; (** The account (actor) to check for membership. *)
2144 cursor : string option;
2145 limit : int option;
2146}
···21512152type output = {
2153 cursor : string option;
2154+ starter_packs_with_membership : Jsont.json list;
2155}
21562157(** Jsont codec for {!type:output}. *)
2158val output_jsont : output Jsont.t
21592160 end
2161+ module GetStarterPacks : sig
2162+(** Get views for a list of starter packs. *)
21632164(** Query/procedure parameters. *)
2165type params = {
2166+ uris : string list;
02167}
21682169(** Jsont codec for {!type:params}. *)
···217121722173type output = {
2174+ starter_packs : Jsont.json list;
02175}
21762177(** Jsont codec for {!type:output}. *)
2178val output_jsont : output Jsont.t
21792180 end
2181+ module GetStarterPack : sig
2182+(** Gets a view of a starter pack. *)
000000000021832184(** Query/procedure parameters. *)
2185type params = {
2186+ starter_pack : string; (** Reference (AT-URI) of the starter pack record. *)
002187}
21882189(** Jsont codec for {!type:params}. *)
···219121922193type output = {
2194+ starter_pack : Jsont.json;
02195}
21962197(** Jsont codec for {!type:output}. *)
2198val output_jsont : output Jsont.t
21992200 end
2201+ module GetRelationships : sig
2202+(** Enumerates public relationships between one account, and a list of other accounts. Does not require auth. *)
22032204(** Query/procedure parameters. *)
2205type params = {
2206+ actor : string; (** Primary account requesting relationships for. *)
2207+ others : string list option; (** List of 'other' accounts to be related back to the primary. *)
02208}
22092210(** Jsont codec for {!type:params}. *)
···221222132214type output = {
2215+ actor : string option;
2216+ relationships : Jsont.json list;
2217}
22182219(** Jsont codec for {!type:output}. *)
2220val output_jsont : output Jsont.t
22212222 end
2223+ module GetListsWithMembership : sig
2224+(** A list and an optional list item indicating membership of a target user to that list. *)
22252226+type list_with_membership = {
2227+ list_ : Jsont.json;
2228+ list_item : Jsont.json option;
000002229}
22302231+(** Jsont codec for {!type:list_with_membership}. *)
2232+val list_with_membership_jsont : list_with_membership Jsont.t
22332234+(** Enumerates the lists created by the session user, and includes membership information about `actor` in those lists. Only supports curation and moderation lists (no reference lists, used in starter packs). Requires auth. *)
0022352236(** Query/procedure parameters. *)
2237type params = {
2238+ actor : string; (** The account (actor) to check for membership. *)
2239 cursor : string option;
2240 limit : int option;
2241+ purposes : string list option; (** Optional filter by list purpose. If not specified, all supported types are returned. *)
2242}
22432244(** Jsont codec for {!type:params}. *)
···22472248type output = {
2249 cursor : string option;
2250+ lists_with_membership : Jsont.json list;
2251}
22522253(** Jsont codec for {!type:output}. *)
2254val output_jsont : output Jsont.t
22552256 end
2257+ module GetLists : sig
2258+(** Enumerates the lists created by a specified account (actor). *)
22592260(** Query/procedure parameters. *)
2261type params = {
2262+ actor : string; (** The account (actor) to enumerate lists from. *)
2263 cursor : string option;
2264 limit : int option;
2265+ purposes : string list option; (** Optional filter by list purpose. If not specified, all supported types are returned. *)
2266}
22672268(** Jsont codec for {!type:params}. *)
···22712272type output = {
2273 cursor : string option;
2274+ lists : Jsont.json list;
02275}
22762277(** Jsont codec for {!type:output}. *)
2278val output_jsont : output Jsont.t
22792280 end
2281+ module GetListMutes : sig
2282+(** Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth. *)
22832284(** Query/procedure parameters. *)
2285type params = {
···2300val output_jsont : output Jsont.t
23012302 end
2303+ module GetListBlocks : sig
2304+(** Get mod lists that the requesting account (actor) is blocking. Requires auth. *)
23052306(** Query/procedure parameters. *)
2307type params = {
2308+ cursor : string option;
2309+ limit : int option;
2310}
23112312(** Jsont codec for {!type:params}. *)
···231423152316type output = {
2317+ cursor : string option;
2318+ lists : Jsont.json list;
2319}
23202321(** Jsont codec for {!type:output}. *)
2322val output_jsont : output Jsont.t
23232324 end
2325+ module GetList : sig
2326+(** Gets a 'view' (with additional context) of a specified list. *)
000000000023272328(** Query/procedure parameters. *)
2329type params = {
02330 cursor : string option;
2331 limit : int option;
2332+ list_ : string; (** Reference (AT-URI) of the list record to hydrate. *)
2333}
23342335(** Jsont codec for {!type:params}. *)
···23382339type output = {
2340 cursor : string option;
2341+ items : Jsont.json list;
2342+ list_ : Jsont.json;
2343}
23442345(** Jsont codec for {!type:output}. *)
2346val output_jsont : output Jsont.t
23472348 end
2349+ module GetActorStarterPacks : sig
2350+(** Get a list of starter packs created by the actor. *)
23512352(** Query/procedure parameters. *)
2353type params = {
2354+ actor : string;
2355 cursor : string option;
2356 limit : int option;
2357}
···23622363type output = {
2364 cursor : string option;
2365+ starter_packs : Jsont.json list;
2366}
23672368(** Jsont codec for {!type:output}. *)
2369val output_jsont : output Jsont.t
23702371 end
2372+ end
2373+ module Feed : sig
2374+ module Threadgate : sig
2375+(** Allow replies from actors who follow you. *)
2376+2377+type follower_rule = unit
2378+2379+(** Jsont codec for {!type:follower_rule}. *)
2380+val follower_rule_jsont : follower_rule Jsont.t
2381+2382+(** Allow replies from actors you follow. *)
2383+2384+type following_rule = unit
23852386+(** Jsont codec for {!type:following_rule}. *)
2387+val following_rule_jsont : following_rule Jsont.t
2388+2389+(** Allow replies from actors on a list. *)
2390+2391+type list_rule = {
2392+ list_ : string;
2393}
23942395+(** Jsont codec for {!type:list_rule}. *)
2396+val list_rule_jsont : list_rule Jsont.t
23972398+(** Allow replies from actors mentioned in your post. *)
23992400+type mention_rule = unit
0024012402+(** Jsont codec for {!type:mention_rule}. *)
2403+val mention_rule_jsont : mention_rule Jsont.t
24042405+(** 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. *)
0024062407+type main = {
2408+ allow : Jsont.json list option; (** 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. *)
2409+ created_at : string;
2410+ hidden_replies : string list option; (** List of hidden reply URIs. *)
2411+ post : string; (** Reference (AT-URI) to the post record. *)
02412}
24132414+(** Jsont codec for {!type:main}. *)
2415+val main_jsont : main Jsont.t
24162417+ end
2418+ module Repost : sig
2419+(** Record representing a 'repost' of an existing Bluesky post. *)
24202421+type main = {
2422+ created_at : string;
2423+ subject : Com.Atproto.Repo.StrongRef.main;
2424+ via : Com.Atproto.Repo.StrongRef.main option;
2425}
24262427+(** Jsont codec for {!type:main}. *)
2428+val main_jsont : main Jsont.t
24292430 end
2431+ module Postgate : sig
2432+(** Disables embedding of this post. *)
2433+2434+type disable_rule = unit
2435+2436+(** Jsont codec for {!type:disable_rule}. *)
2437+val disable_rule_jsont : disable_rule Jsont.t
2438+2439+(** 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. *)
24402441+type main = {
2442+ created_at : string;
2443+ detached_embedding_uris : string list option; (** List of AT-URIs embedding this post that the author has detached from. *)
2444+ embedding_rules : Jsont.json list option; (** 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. *)
2445+ post : string; (** Reference (AT-URI) to the post record. *)
2446}
24472448+(** Jsont codec for {!type:main}. *)
2449+val main_jsont : main Jsont.t
24502451+ end
2452+ module Post : sig
24532454type reply_ref = {
2455 parent : Com.Atproto.Repo.StrongRef.main;
···2459(** Jsont codec for {!type:reply_ref}. *)
2460val reply_ref_jsont : reply_ref Jsont.t
24612462+(** Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings. *)
2463+2464+type text_slice = {
2465+ end_ : int;
2466+ start : int;
2467+}
2468+2469+(** Jsont codec for {!type:text_slice}. *)
2470+val text_slice_jsont : text_slice Jsont.t
2471+2472(** Deprecated: use facets instead. *)
24732474type entity = {
···2498val main_jsont : main Jsont.t
24992500 end
2501+ module Like : sig
2502+(** Record declaring a 'like' of a piece of subject content. *)
25032504+type main = {
02505 created_at : string;
2506+ subject : Com.Atproto.Repo.StrongRef.main;
2507+ via : Com.Atproto.Repo.StrongRef.main option;
2508}
25092510+(** Jsont codec for {!type:main}. *)
2511+val main_jsont : main Jsont.t
25122513+ end
2514+ module GetRepostedBy : sig
2515+(** Get a list of reposts for a given post. *)
25162517(** Query/procedure parameters. *)
2518type params = {
2519+ cid : string option; (** If supplied, filters to reposts of specific version (by CID) of the post record. *)
2520 cursor : string option;
2521 limit : int option;
2522+ uri : string; (** Reference (AT-URI) of post record *)
2523}
25242525(** Jsont codec for {!type:params}. *)
···2529type output = {
2530 cid : string option;
2531 cursor : string option;
2532+ reposted_by : Jsont.json list;
2533 uri : string;
2534}
2535···2537val output_jsont : output Jsont.t
25382539 end
2540+ module GetLikes : sig
025412542+type like = {
2543+ actor : Jsont.json;
0000002544 created_at : string;
2545+ indexed_at : string;
002546}
25472548+(** Jsont codec for {!type:like}. *)
2549+val like_jsont : like Jsont.t
25502551+(** Get like records which reference a subject (by AT-URI and CID). *)
0025522553(** Query/procedure parameters. *)
2554type params = {
2555+ cid : string option; (** CID of the subject record (aka, specific version of record), to filter likes. *)
2556 cursor : string option;
2557 limit : int option;
2558+ uri : string; (** AT-URI of the subject (eg, a post record). *)
2559}
25602561(** Jsont codec for {!type:params}. *)
···2565type output = {
2566 cid : string option;
2567 cursor : string option;
2568+ likes : Jsont.json list;
2569 uri : string;
2570}
2571···2573val output_jsont : output Jsont.t
25742575 end
2576+ module Generator : sig
2577+(** Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository. *)
25782579+type main = {
2580+ accepts_interactions : bool option; (** Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions *)
2581+ avatar : Atp.Blob_ref.t option;
2582+ content_mode : string option;
2583+ created_at : string;
2584+ description : string option;
2585+ description_facets : Richtext.Facet.main list option;
2586+ did : string;
2587+ display_name : string;
2588+ labels : Com.Atproto.Label.Defs.self_labels option; (** Self-label values *)
2589}
25902591+(** Jsont codec for {!type:main}. *)
2592+val main_jsont : main Jsont.t
25932594+ end
2595+ module DescribeFeedGenerator : sig
25962597type feed = {
2598 uri : string;
···2601(** Jsont codec for {!type:feed}. *)
2602val feed_jsont : feed Jsont.t
26032604+2605+type links = {
2606+ privacy_policy : string option;
2607+ terms_of_service : string option;
2608+}
2609+2610+(** Jsont codec for {!type:links}. *)
2611+val links_jsont : links Jsont.t
2612+2613(** Get information about a feed generator, including policies and offered feed URIs. Does not require auth; implemented by Feed Generator services (not App View). *)
26142615···2623val output_jsont : output Jsont.t
26242625 end
2626+ module Defs : sig
00000026272628+type blocked_author = {
2629+ did : string;
2630+ viewer : Jsont.json option;
02631}
26322633+(** Jsont codec for {!type:blocked_author}. *)
2634+val blocked_author_jsont : blocked_author Jsont.t
26352636+(** User clicked through to the author of the feed item *)
26372638+type clickthrough_author = string
2639+val clickthrough_author_jsont : clickthrough_author Jsont.t
26402641+(** User clicked through to the embedded content of the feed item *)
026422643+type clickthrough_embed = string
2644+val clickthrough_embed_jsont : clickthrough_embed Jsont.t
26452646+(** User clicked through to the feed item *)
26472648+type clickthrough_item = string
2649+val clickthrough_item_jsont : clickthrough_item Jsont.t
26502651+(** User clicked through to the reposter of the feed item *)
26522653+type clickthrough_reposter = string
2654+val clickthrough_reposter_jsont : clickthrough_reposter Jsont.t
000026552656+(** Declares the feed generator returns any types of posts. *)
026572658+type content_mode_unspecified = string
2659+val content_mode_unspecified_jsont : content_mode_unspecified Jsont.t
026602661+(** Declares the feed generator returns posts containing app.bsky.embed.video embeds. *)
000026622663+type content_mode_video = string
2664+val content_mode_video_jsont : content_mode_video Jsont.t
266500026662667+type generator_viewer_state = {
002668 like : string option;
00002669}
26702671+(** Jsont codec for {!type:generator_viewer_state}. *)
2672+val generator_viewer_state_jsont : generator_viewer_state Jsont.t
267326742675+type interaction = {
2676+ event : string option;
2677+ feed_context : string option; (** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. *)
2678+ item : string option;
2679+ req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
2680}
26812682+(** Jsont codec for {!type:interaction}. *)
2683+val interaction_jsont : interaction Jsont.t
26842685+(** User liked the feed item *)
000026862687+type interaction_like = string
2688+val interaction_like_jsont : interaction_like Jsont.t
26892690+(** User quoted the feed item *)
26912692+type interaction_quote = string
2693+val interaction_quote_jsont : interaction_quote Jsont.t
026942695+(** User replied to the feed item *)
026962697+type interaction_reply = string
2698+val interaction_reply_jsont : interaction_reply Jsont.t
26992700+(** User reposted the feed item *)
27012702+type interaction_repost = string
2703+val interaction_repost_jsont : interaction_repost Jsont.t
27042705+(** Feed item was seen by user *)
27062707+type interaction_seen = string
2708+val interaction_seen_jsont : interaction_seen Jsont.t
00027092710+(** User shared the feed item *)
027112712+type interaction_share = string
2713+val interaction_share_jsont : interaction_share Jsont.t
27140027152716+type not_found_post = {
2717+ not_found : bool;
2718+ uri : string;
2719+}
27202721+(** Jsont codec for {!type:not_found_post}. *)
2722+val not_found_post_jsont : not_found_post Jsont.t
272327242725+type reason_pin = unit
000027262727+(** Jsont codec for {!type:reason_pin}. *)
2728+val reason_pin_jsont : reason_pin Jsont.t
272927302731type reason_repost = {
···2739val reason_repost_jsont : reason_repost Jsont.t
274027412742+type reply_ref = {
2743+ grandparent_author : Jsont.json option; (** When parent is a reply to another post, this is the author of that post. *)
2744+ parent : Jsont.json;
2745+ root : Jsont.json;
000002746}
27472748+(** Jsont codec for {!type:reply_ref}. *)
2749+val reply_ref_jsont : reply_ref Jsont.t
27502751+(** Request that less content like the given feed item be shown in the feed *)
27522753+type request_less = string
2754+val request_less_jsont : request_less Jsont.t
27552756+(** Request that more content like the given feed item be shown in the feed *)
27572758+type request_more = string
2759+val request_more_jsont : request_more Jsont.t
2760027612762+type skeleton_feed_post = {
2763+ feed_context : string option; (** Context that will be passed through to client and may be passed to feed generator back alongside interactions. *)
2764+ post : string;
2765+ reason : Jsont.json option;
2766+}
0027672768+(** Jsont codec for {!type:skeleton_feed_post}. *)
2769+val skeleton_feed_post_jsont : skeleton_feed_post Jsont.t
27700027712772+type skeleton_reason_pin = unit
27732774+(** Jsont codec for {!type:skeleton_reason_pin}. *)
2775+val skeleton_reason_pin_jsont : skeleton_reason_pin Jsont.t
277627772778+type skeleton_reason_repost = {
2779+ repost : string;
0002780}
27812782+(** Jsont codec for {!type:skeleton_reason_repost}. *)
2783+val skeleton_reason_repost_jsont : skeleton_reason_repost Jsont.t
27842785+(** Metadata about this post within the context of the thread it is in. *)
27862787+type thread_context = {
2788+ root_author_like : string option;
2789}
27902791+(** Jsont codec for {!type:thread_context}. *)
2792+val thread_context_jsont : thread_context Jsont.t
000000027930027942795+type threadgate_view = {
2796+ cid : string option;
2797+ lists : Jsont.json list option;
2798+ record : Jsont.json option;
2799+ uri : string option;
2800+}
28012802+(** Jsont codec for {!type:threadgate_view}. *)
2803+val threadgate_view_jsont : threadgate_view Jsont.t
28042805+(** Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. *)
28062807+type viewer_state = {
2808+ bookmarked : bool option;
2809+ embedding_disabled : bool option;
2810+ like : string option;
2811+ pinned : bool option;
2812+ reply_disabled : bool option;
2813+ repost : string option;
2814+ thread_muted : bool option;
2815+}
28162817+(** Jsont codec for {!type:viewer_state}. *)
2818+val viewer_state_jsont : viewer_state Jsont.t
28190028202821+type blocked_post = {
2822+ author : Jsont.json;
2823+ blocked : bool;
2824+ uri : string;
2825+}
28262827+(** Jsont codec for {!type:blocked_post}. *)
2828+val blocked_post_jsont : blocked_post Jsont.t
282928302831+type generator_view = {
2832+ accepts_interactions : bool option;
2833+ avatar : string option;
2834+ cid : string;
2835+ content_mode : string option;
2836+ creator : Jsont.json;
2837+ description : string option;
2838+ description_facets : Richtext.Facet.main list option;
2839 did : string;
2840+ display_name : string;
2841+ indexed_at : string;
2842+ labels : Com.Atproto.Label.Defs.label list option;
2843+ like_count : int option;
2844+ uri : string;
2845 viewer : Jsont.json option;
2846}
28472848+(** Jsont codec for {!type:generator_view}. *)
2849+val generator_view_jsont : generator_view Jsont.t
285028512852type post_view = {
···2871val post_view_jsont : post_view Jsont.t
287228732874+type feed_view_post = {
2875+ feed_context : string option; (** Context provided by feed generator that may be passed back alongside interactions. *)
2876+ post : Jsont.json;
2877+ reason : Jsont.json option;
2878+ reply : Jsont.json option;
2879+ req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
0000000002880}
28812882+(** Jsont codec for {!type:feed_view_post}. *)
2883+val feed_view_post_jsont : feed_view_post Jsont.t
0000000000288428852886type thread_view_post = {
···2893(** Jsont codec for {!type:thread_view_post}. *)
2894val thread_view_post_jsont : thread_view_post Jsont.t
28952896+ end
2897+ module SendInteractions : sig
2898+(** Send information about interactions with feed items back to the feed generator that served them. *)
28992900+2901+type input = {
2902+ interactions : Jsont.json list;
0002903}
29042905+(** Jsont codec for {!type:input}. *)
2906+val input_jsont : input Jsont.t
2907+2908+2909+type output = unit
2910+2911+(** Jsont codec for {!type:output}. *)
2912+val output_jsont : output Jsont.t
29132914 end
2915+ module SearchPosts : sig
2916+(** Find posts matching search criteria, returning views of those posts. Note that this API endpoint may require authentication (eg, not public) for some service providers and implementations. *)
29172918+(** Query/procedure parameters. *)
2919+type params = {
2920+ author : string option; (** Filter to posts by the given account. Handles are resolved to DID before query-time. *)
2921+ cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
2922+ domain : string option; (** Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization. *)
2923+ lang : string option; (** Filter to posts in the given language. Expected to be based on post language field, though server may override language detection. *)
2924+ limit : int option;
2925+ mentions : string option; (** Filter to posts which mention the given account. Handles are resolved to DID before query-time. Only matches rich-text facet mentions. *)
2926+ q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
2927+ since : string option; (** Filter results for posts after the indicated datetime (inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYYY-MM-DD). *)
2928+ sort : string option; (** Specifies the ranking order of results. *)
2929+ tag : string list option; (** Filter to posts with the given tag (hashtag), based on rich-text facet or tag field. Do not include the hash (#) prefix. Multiple tags can be specified, with 'AND' matching. *)
2930+ until : string option; (** Filter results for posts before the indicated datetime (not inclusive). Expected to use 'sortAt' timestamp, which may not match 'createdAt'. Can be a datetime, or just an ISO date (YYY-MM-DD). *)
2931+ url : string option; (** Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. *)
2932}
29332934+(** Jsont codec for {!type:params}. *)
2935+val params_jsont : params Jsont.t
293600029372938+type output = {
2939+ cursor : string option;
2940+ hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
2941+ posts : Jsont.json list;
0000002942}
29432944+(** Jsont codec for {!type:output}. *)
2945+val output_jsont : output Jsont.t
29462947 end
2948+ module GetTimeline : sig
2949+(** Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed. *)
29502951(** Query/procedure parameters. *)
2952type params = {
2953+ algorithm : string option; (** Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism. *)
2954+ cursor : string option;
2955+ limit : int option;
2956}
29572958(** Jsont codec for {!type:params}. *)
···296029612962type output = {
2963+ cursor : string option;
2964+ feed : Jsont.json list;
2965}
29662967(** Jsont codec for {!type:output}. *)
2968val output_jsont : output Jsont.t
29692970 end
2971+ module GetSuggestedFeeds : sig
2972+(** Get a list of suggested feeds (feed generators) for the requesting account. *)
29732974(** Query/procedure parameters. *)
2975type params = {
2976 cursor : string option;
02977 limit : int option;
2978}
2979···29832984type output = {
2985 cursor : string option;
2986+ feeds : Jsont.json list;
2987}
29882989(** Jsont codec for {!type:output}. *)
···3016val output_jsont : output Jsont.t
30173018 end
3019+ module GetPosts : sig
3020+(** Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'. *)
30213022(** Query/procedure parameters. *)
3023type params = {
3024+ uris : string list; (** List of post AT-URIs to return hydrated views for. *)
003025}
30263027(** Jsont codec for {!type:params}. *)
···302930303031type output = {
3032+ posts : Jsont.json list;
03033}
30343035(** Jsont codec for {!type:output}. *)
3036val output_jsont : output Jsont.t
30373038 end
3039+ module GetPostThread : sig
3040+(** Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests. *)
30413042(** Query/procedure parameters. *)
3043type params = {
3044+ depth : int option; (** How many levels of reply depth should be included in response. *)
3045+ parent_height : int option; (** How many levels of parent (and grandparent, etc) post to include. *)
3046+ uri : string; (** Reference (AT-URI) to post record. *)
3047}
30483049(** Jsont codec for {!type:params}. *)
···305130523053type output = {
3054+ thread : Jsont.json;
3055+ threadgate : Jsont.json option;
3056}
30573058(** Jsont codec for {!type:output}. *)
3059val output_jsont : output Jsont.t
30603061 end
3062+ module GetListFeed : sig
3063+(** Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth. *)
30643065(** Query/procedure parameters. *)
3066type params = {
3067 cursor : string option;
03068 limit : int option;
3069+ list_ : string; (** Reference (AT-URI) to the list record. *)
3070}
30713072(** Jsont codec for {!type:params}. *)
···3076type output = {
3077 cursor : string option;
3078 feed : Jsont.json list;
03079}
30803081(** Jsont codec for {!type:output}. *)
3082val output_jsont : output Jsont.t
30833084 end
3085+ module GetFeedSkeleton : sig
3086+(** Get a skeleton of a feed provided by a feed generator. Auth is optional, depending on provider requirements, and provides the DID of the requester. Implemented by Feed Generator Service. *)
30873088(** Query/procedure parameters. *)
3089type params = {
3090+ cursor : string option;
3091+ feed : string; (** Reference to feed generator record describing the specific feed being requested. *)
003092 limit : int option;
00000003093}
30943095(** Jsont codec for {!type:params}. *)
···30983099type output = {
3100 cursor : string option;
3101+ feed : Jsont.json list;
3102+ req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
3103}
31043105(** Jsont codec for {!type:output}. *)
···3126val output_jsont : output Jsont.t
31273128 end
3129+ module GetFeedGenerator : sig
3130+(** Get information about a feed generator. Implemented by AppView. *)
31313132+(** Query/procedure parameters. *)
3133+type params = {
3134+ feed : string; (** AT-URI of the feed generator record. *)
3135}
31363137+(** Jsont codec for {!type:params}. *)
3138+val params_jsont : params Jsont.t
313931403141+type output = {
3142+ is_online : bool; (** Indicates whether the feed generator service has been online recently, or else seems to be inactive. *)
3143+ is_valid : bool; (** Indicates whether the feed generator service is compatible with the record declaration. *)
3144+ view : Jsont.json;
3145+}
31463147(** Jsont codec for {!type:output}. *)
3148val output_jsont : output Jsont.t
31493150 end
3151+ module GetFeed : sig
3152+(** Get a hydrated feed from an actor's selected feed generator. Implemented by App View. *)
31533154(** Query/procedure parameters. *)
3155type params = {
03156 cursor : string option;
3157+ feed : string;
03158 limit : int option;
3159}
3160···3171val output_jsont : output Jsont.t
31723173 end
3174+ module GetAuthorFeed : sig
3175+(** Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth. *)
31763177(** Query/procedure parameters. *)
3178type params = {
3179+ actor : string;
3180+ cursor : string option;
3181+ filter : string option; (** Combinations of post/repost types to include in response. *)
3182+ include_pins : bool option;
3183+ limit : int option;
3184}
31853186(** Jsont codec for {!type:params}. *)
···318831893190type output = {
3191+ cursor : string option;
3192+ feed : Jsont.json list;
03193}
31943195(** Jsont codec for {!type:output}. *)
3196val output_jsont : output Jsont.t
31973198 end
3199+ module GetActorLikes : sig
3200+(** Get a list of posts liked by an actor. Requires auth, actor must be the requesting account. *)
32013202(** Query/procedure parameters. *)
3203type params = {
3204+ actor : string;
3205 cursor : string option;
3206 limit : int option;
3207}
···32123213type output = {
3214 cursor : string option;
3215+ feed : Jsont.json list;
3216}
32173218(** Jsont codec for {!type:output}. *)
···3242val output_jsont : output Jsont.t
32433244 end
3245+ end
3246+ module Contact : sig
3247+ module VerifyPhone : sig
3248+(** Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication. *)
3249+32503251+type input = {
3252+ code : string; (** The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`. *)
3253+ phone : string; (** The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`. *)
3254}
32553256+(** Jsont codec for {!type:input}. *)
3257+val input_jsont : input Jsont.t
325832593260type output = {
3261+ token : string; (** JWT to be used in a call to `app.bsky.contact.importContacts`. It is only valid for a single call. *)
3262}
32633264(** Jsont codec for {!type:output}. *)
3265val output_jsont : output Jsont.t
32663267 end
3268+ module StartPhoneVerification : sig
3269+(** Starts a phone verification flow. The phone passed will receive a code via SMS that should be passed to `app.bsky.contact.verifyPhone`. Requires authentication. *)
3270+3271+3272+type input = {
3273+ phone : string; (** The phone number to receive the code via SMS. *)
3274+}
3275+3276+(** Jsont codec for {!type:input}. *)
3277+val input_jsont : input Jsont.t
3278+3279+3280+type output = unit
3281+3282+(** Jsont codec for {!type:output}. *)
3283+val output_jsont : output Jsont.t
3284+3285+ end
3286+ module SendNotification : sig
3287+(** System endpoint to send notifications related to contact imports. Requires role authentication. *)
3288+3289+3290+type input = {
3291+ from : string; (** The DID of who this notification comes from. *)
3292+ to_ : string; (** The DID of who this notification should go to. *)
3293+}
3294+3295+(** Jsont codec for {!type:input}. *)
3296+val input_jsont : input Jsont.t
3297+3298+3299+type output = unit
3300+3301+(** Jsont codec for {!type:output}. *)
3302+val output_jsont : output Jsont.t
3303+3304+ end
3305+ module RemoveData : sig
3306+(** Removes all stored hashes used for contact matching, existing matches, and sync status. Requires authentication. *)
3307+3308+3309+type input = unit
3310+3311+(** Jsont codec for {!type:input}. *)
3312+val input_jsont : input Jsont.t
3313+3314+3315+type output = unit
3316+3317+(** Jsont codec for {!type:output}. *)
3318+val output_jsont : output Jsont.t
3319+3320+ end
3321+ module GetMatches : sig
3322+(** Returns the matched contacts (contacts that were mutually imported). Excludes dismissed matches. Requires authentication. *)
33233324(** Query/procedure parameters. *)
3325type params = {
03326 cursor : string option;
3327 limit : int option;
3328}
···33333334type output = {
3335 cursor : string option;
3336+ matches : Jsont.json list;
3337}
33383339(** Jsont codec for {!type:output}. *)
3340val output_jsont : output Jsont.t
33413342 end
3343+ module DismissMatch : sig
3344+(** Removes a match that was found via contact import. It shouldn't appear again if the same contact is re-imported. Requires authentication. *)
00334533463347type input = {
3348+ subject : string; (** The subject's DID to dismiss the match with. *)
3349}
33503351(** Jsont codec for {!type:input}. *)
3352val input_jsont : input Jsont.t
33533354+3355+type output = unit
3356+3357+(** Jsont codec for {!type:output}. *)
3358+val output_jsont : output Jsont.t
3359+3360 end
3361+ module Defs : sig
3362+(** Associates a profile with the positional index of the contact import input in the call to `app.bsky.contact.importContacts`, so clients can know which phone caused a particular match. *)
3363+3364+type match_and_contact_index = {
3365+ contact_index : int; (** The index of this match in the import contact input. *)
3366+ match_ : Jsont.json; (** Profile of the matched user. *)
3367+}
3368+3369+(** Jsont codec for {!type:match_and_contact_index}. *)
3370+val match_and_contact_index_jsont : match_and_contact_index Jsont.t
3371+3372+(** A stash object to be sent via bsync representing a notification to be created. *)
3373+3374+type notification = {
3375+ from : string; (** The DID of who this notification comes from. *)
3376+ to_ : string; (** The DID of who this notification should go to. *)
3377+}
33783379+(** Jsont codec for {!type:notification}. *)
3380+val notification_jsont : notification Jsont.t
33813382+3383+type sync_status = {
3384+ matches_count : int; (** Number of existing contact matches resulting of the user imports and of their imported contacts having imported the user. Matches stop being counted when the user either follows the matched contact or dismisses the match. *)
3385+ synced_at : string; (** Last date when contacts where imported. *)
3386}
33873388+(** Jsont codec for {!type:sync_status}. *)
3389+val sync_status_jsont : sync_status Jsont.t
33903391 end
3392+ module ImportContacts : sig
3393+(** Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication. *)
33943395+3396+type input = {
3397+ contacts : string list; (** List of phone numbers in global E.164 format (e.g., '+12125550123'). Phone numbers that cannot be normalized into a valid phone number will be discarded. Should not repeat the 'phone' input used in `app.bsky.contact.verifyPhone`. *)
3398+ token : string; (** JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`. *)
3399}
34003401+(** Jsont codec for {!type:input}. *)
3402+val input_jsont : input Jsont.t
3403034043405+type output = {
3406+ matches_and_contact_indexes : Defs.match_and_contact_index list; (** The users that matched during import and their indexes on the input contacts, so the client can correlate with its local list. *)
3407}
34083409+(** Jsont codec for {!type:output}. *)
3410+val output_jsont : output Jsont.t
34113412 end
3413+ module GetSyncStatus : sig
3414+(** Gets the user's current contact import status. Requires authentication. *)
34153416(** Query/procedure parameters. *)
3417+type params = unit
00034183419(** Jsont codec for {!type:params}. *)
3420val params_jsont : params Jsont.t
342134223423type output = {
3424+ sync_status : Defs.sync_status option; (** If present, indicates the user has imported their contacts. If not present, indicates the user never used the feature or called `app.bsky.contact.removeData` and didn't import again since. *)
03425}
34263427(** Jsont codec for {!type:output}. *)
···3430 end
3431 end
3432 module Unspecced : sig
3433+ module GetTaggedSuggestions : sig
034343435+type suggestion = {
3436+ subject : string;
3437+ subject_type : string;
3438+ tag : string;
03439}
34403441+(** Jsont codec for {!type:suggestion}. *)
3442+val suggestion_jsont : suggestion Jsont.t
3443+3444+(** Get a list of suggestions (feeds and users) tagged with categories *)
3445+3446+(** Query/procedure parameters. *)
3447+type params = unit
3448+3449(** Jsont codec for {!type:params}. *)
3450val params_jsont : params Jsont.t
345134523453type output = {
3454+ suggestions : suggestion list;
03455}
34563457(** Jsont codec for {!type:output}. *)
3458val output_jsont : output Jsont.t
34593460 end
3461+ module GetSuggestedUsersSkeleton : sig
3462+(** Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers *)
34633464(** Query/procedure parameters. *)
3465type params = {
3466+ category : string option; (** Category of users to get suggestions for. *)
3467 limit : int option;
3468+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
3469}
34703471(** Jsont codec for {!type:params}. *)
···347334743475type output = {
3476+ dids : string list;
3477+ rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
3478}
34793480(** Jsont codec for {!type:output}. *)
3481val output_jsont : output Jsont.t
34823483 end
3484+ module GetSuggestedUsers : sig
3485+(** Get a list of suggested users *)
34863487(** Query/procedure parameters. *)
3488type params = {
3489+ category : string option; (** Category of users to get suggestions for. *)
3490 limit : int option;
03491}
34923493(** Jsont codec for {!type:params}. *)
···349534963497type output = {
3498+ actors : Jsont.json list;
3499+ rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
3500}
35013502(** Jsont codec for {!type:output}. *)
···3524val output_jsont : output Jsont.t
35253526 end
3527+ module GetSuggestedStarterPacks : sig
3528+(** Get a list of suggested starterpacks *)
35293530(** Query/procedure parameters. *)
3531type params = {
···353735383539type output = {
3540+ starter_packs : Jsont.json list;
3541}
35423543(** Jsont codec for {!type:output}. *)
···3565val output_jsont : output Jsont.t
35663567 end
3568+ module GetSuggestedFeeds : sig
3569+(** Get a list of suggested feeds *)
35703571+(** Query/procedure parameters. *)
3572+type params = {
3573+ limit : int option;
3574}
35753576+(** Jsont codec for {!type:params}. *)
3577+val params_jsont : params Jsont.t
00357835793580type output = {
3581+ feeds : Jsont.json list;
03582}
35833584(** Jsont codec for {!type:output}. *)
3585val output_jsont : output Jsont.t
35863587 end
3588+ module GetPopularFeedGenerators : sig
3589+(** An unspecced view of globally popular feed generators. *)
35903591(** Query/procedure parameters. *)
3592type params = {
3593+ cursor : string option;
3594 limit : int option;
3595+ query : string option;
3596}
35973598(** Jsont codec for {!type:params}. *)
···360036013602type output = {
3603+ cursor : string option;
3604+ feeds : Jsont.json list;
3605}
36063607(** Jsont codec for {!type:output}. *)
3608val output_jsont : output Jsont.t
36093610 end
3611+ module GetOnboardingSuggestedStarterPacksSkeleton : sig
3612+(** Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks *)
36133614(** Query/procedure parameters. *)
3615type params = {
03616 limit : int option;
3617+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
3618}
36193620(** Jsont codec for {!type:params}. *)
···362236233624type output = {
3625+ starter_packs : string list;
03626}
36273628(** Jsont codec for {!type:output}. *)
3629val output_jsont : output Jsont.t
36303631 end
3632+ module GetOnboardingSuggestedStarterPacks : sig
3633+(** Get a list of suggested starterpacks for onboarding *)
36343635(** Query/procedure parameters. *)
3636type params = {
3637 limit : int option;
03638}
36393640(** Jsont codec for {!type:params}. *)
···364236433644type output = {
3645+ starter_packs : Jsont.json list;
3646}
36473648(** Jsont codec for {!type:output}. *)
3649val output_jsont : output Jsont.t
36503651 end
3652+ module GetConfig : sig
36533654+type live_now_config = {
3655+ did : string;
3656+ domains : string list;
003657}
36583659+(** Jsont codec for {!type:live_now_config}. *)
3660+val live_now_config_jsont : live_now_config Jsont.t
3661+3662+(** Get miscellaneous runtime configuration. *)
3663+3664+3665+type output = {
3666+ check_email_confirmed : bool option;
3667+ live_now : live_now_config list option;
3668+}
36693670+(** Jsont codec for {!type:output}. *)
3671+val output_jsont : output Jsont.t
36723673+ end
3674+ module Defs : sig
3675+(** Object used to store age assurance data in stash. *)
3676+3677+type age_assurance_event = {
3678+ attempt_id : string; (** The unique identifier for this instance of the age assurance flow, in UUID format. *)
3679+ complete_ip : string option; (** The IP address used when completing the AA flow. *)
3680+ complete_ua : string option; (** The user agent used when completing the AA flow. *)
3681+ created_at : string; (** The date and time of this write operation. *)
3682+ email : string option; (** The email used for AA. *)
3683+ init_ip : string option; (** The IP address used when initiating the AA flow. *)
3684+ init_ua : string option; (** The user agent used when initiating the AA flow. *)
3685+ status : string; (** The status of the age assurance process. *)
3686}
36873688+(** Jsont codec for {!type:age_assurance_event}. *)
3689+val age_assurance_event_jsont : age_assurance_event Jsont.t
36903691+(** The computed state of the age assurance process, returned to the user in question on certain authenticated requests. *)
36923693+type age_assurance_state = {
3694+ last_initiated_at : string option; (** The timestamp when this state was last updated. *)
3695+ status : string; (** The status of the age assurance process. *)
00003696}
36973698+(** Jsont codec for {!type:age_assurance_state}. *)
3699+val age_assurance_state_jsont : age_assurance_state Jsont.t
370037013702+type skeleton_search_actor = {
3703+ did : string;
3704+}
37053706+(** Jsont codec for {!type:skeleton_search_actor}. *)
3707+val skeleton_search_actor_jsont : skeleton_search_actor Jsont.t
370837093710+type skeleton_search_post = {
3711+ uri : string;
3712+}
37133714+(** Jsont codec for {!type:skeleton_search_post}. *)
3715+val skeleton_search_post_jsont : skeleton_search_post Jsont.t
371637173718+type skeleton_search_starter_pack = {
3719+ uri : string;
3720}
37213722+(** Jsont codec for {!type:skeleton_search_starter_pack}. *)
3723+val skeleton_search_starter_pack_jsont : skeleton_search_starter_pack Jsont.t
372437253726type skeleton_trend = {
···3738val skeleton_trend_jsont : skeleton_trend Jsont.t
373937403741+type thread_item_blocked = {
3742+ author : Jsont.json;
3743}
37443745+(** Jsont codec for {!type:thread_item_blocked}. *)
3746+val thread_item_blocked_jsont : thread_item_blocked Jsont.t
374737483749+type thread_item_no_unauthenticated = unit
0037503751+(** Jsont codec for {!type:thread_item_no_unauthenticated}. *)
3752+val thread_item_no_unauthenticated_jsont : thread_item_no_unauthenticated Jsont.t
375337543755+type thread_item_not_found = unit
0037563757+(** Jsont codec for {!type:thread_item_not_found}. *)
3758+val thread_item_not_found_jsont : thread_item_not_found Jsont.t
3759037603761+type thread_item_post = {
3762+ hidden_by_threadgate : bool; (** The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread. *)
3763+ more_parents : bool; (** This post has more parents that were not present in the response. This is just a boolean, without the number of parents. *)
3764+ more_replies : int; (** This post has more replies that were not present in the response. This is a numeric value, which is best-effort and might not be accurate. *)
3765+ muted_by_viewer : bool; (** This is by an account muted by the viewer requesting it. *)
3766+ op_thread : bool; (** This post is part of a contiguous thread by the OP from the thread root. Many different OP threads can happen in the same thread. *)
3767+ post : Jsont.json;
3768}
37693770+(** Jsont codec for {!type:thread_item_post}. *)
3771+val thread_item_post_jsont : thread_item_post Jsont.t
3772037733774+type trend_view = {
3775+ actors : Jsont.json list;
3776+ category : string option;
3777+ display_name : string;
3778+ link : string;
3779+ post_count : int;
3780+ started_at : string;
3781+ status : string option;
3782+ topic : string;
3783}
37843785+(** Jsont codec for {!type:trend_view}. *)
3786+val trend_view_jsont : trend_view Jsont.t
37870037883789+type trending_topic = {
3790+ description : string option;
3791+ display_name : string option;
3792+ link : string;
3793+ topic : string;
3794}
37953796+(** Jsont codec for {!type:trending_topic}. *)
3797+val trending_topic_jsont : trending_topic Jsont.t
37983799+ end
3800+ module SearchStarterPacksSkeleton : sig
3801+(** Backend Starter Pack search, returns only skeleton. *)
38023803(** Query/procedure parameters. *)
3804+type params = {
3805+ cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
3806+ limit : int option;
3807+ q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
3808+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
3809+}
38103811(** Jsont codec for {!type:params}. *)
3812val params_jsont : params Jsont.t
381338143815type output = {
3816+ cursor : string option;
3817+ hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
3818+ starter_packs : Defs.skeleton_search_starter_pack list;
3819}
38203821(** Jsont codec for {!type:output}. *)
···3856val output_jsont : output Jsont.t
38573858 end
3859+ module SearchActorsSkeleton : sig
3860+(** Backend Actors (profile) search, returns only skeleton. *)
000000000038613862(** Query/procedure parameters. *)
3863type params = {
3864+ cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
3865+ limit : int option;
3866+ q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. For typeahead search, only simple term match is supported, not full syntax. *)
3867+ typeahead : bool option; (** If true, acts as fast/simple 'typeahead' query. *)
3868+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
3869}
38703871(** Jsont codec for {!type:params}. *)
···387338743875type output = {
3876+ actors : Defs.skeleton_search_actor list;
3877+ cursor : string option;
3878+ hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
3879}
38803881(** Jsont codec for {!type:output}. *)
3882val output_jsont : output Jsont.t
38833884 end
3885+ module InitAgeAssurance : sig
3886+(** Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age. *)
38873888+3889+type input = {
3890+ country_code : string; (** An ISO 3166-1 alpha-2 code of the user's location. *)
3891+ email : string; (** The user's email address to receive assurance instructions. *)
3892+ language : string; (** The user's preferred language for communication during the assurance process. *)
3893}
38943895+(** Jsont codec for {!type:input}. *)
3896+val input_jsont : input Jsont.t
389738983899+type output = Defs.age_assurance_state
00039003901(** Jsont codec for {!type:output}. *)
3902val output_jsont : output Jsont.t
···3923val output_jsont : output Jsont.t
39243925 end
3926+ module GetTrends : sig
3927+(** Get the current trends on the network *)
39283929+(** Query/procedure parameters. *)
3930+type params = {
3931+ limit : int option;
3932+}
3933+3934+(** Jsont codec for {!type:params}. *)
3935+val params_jsont : params Jsont.t
3936+3937+3938+type output = {
3939+ trends : Defs.trend_view list;
3940}
39413942+(** Jsont codec for {!type:output}. *)
3943+val output_jsont : output Jsont.t
39443945+ end
3946+ module GetTrendingTopics : sig
3947+(** Get a list of trending topics *)
39483949(** Query/procedure parameters. *)
3950type params = {
3951+ limit : int option;
3952+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
3953}
39543955(** Jsont codec for {!type:params}. *)
···395739583959type output = {
3960+ suggested : Defs.trending_topic list;
3961+ topics : Defs.trending_topic list;
3962}
39633964(** Jsont codec for {!type:output}. *)
3965val output_jsont : output Jsont.t
39663967 end
3968+ module GetSuggestionsSkeleton : sig
3969+(** Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions *)
39703971+(** Query/procedure parameters. *)
3972+type params = {
3973+ cursor : string option;
3974+ limit : int option;
3975+ relative_to_did : string option; (** DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer. *)
3976+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
3977}
39783979+(** Jsont codec for {!type:params}. *)
3980+val params_jsont : params Jsont.t
398139823983+type output = {
3984+ actors : Defs.skeleton_search_actor list;
3985+ cursor : string option;
3986+ rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
3987+ relative_to_did : string option; (** DID of the account these suggestions are relative to. If this is returned undefined, suggestions are based on the viewer. *)
3988+}
39893990(** Jsont codec for {!type:output}. *)
3991val output_jsont : output Jsont.t
39923993 end
3994+ module GetPostThreadV2 : sig
3995+3996+type thread_item = {
3997+ depth : int; (** The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths. *)
3998+ uri : string;
3999+ value : Jsont.json;
4000+}
4001+4002+(** Jsont codec for {!type:thread_item}. *)
4003+val thread_item_jsont : thread_item Jsont.t
4004+4005+(** (NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get posts in a thread. It is based in an anchor post at any depth of the tree, and returns posts above it (recursively resolving the parent, without further branching to their replies) and below it (recursive replies, with branching to their replies). Does not require auth, but additional metadata and filtering will be applied for authed requests. *)
40064007(** Query/procedure parameters. *)
4008type params = {
4009+ above : bool option; (** Whether to include parents above the anchor. *)
4010+ anchor : string; (** Reference (AT-URI) to post record. This is the anchor post, and the thread will be built around it. It can be any post in the tree, not necessarily a root post. *)
4011+ below : int option; (** How many levels of replies to include below the anchor. *)
4012+ branching_factor : int option; (** Maximum of replies to include at each level of the thread, except for the direct replies to the anchor, which are (NOTE: currently, during unspecced phase) all returned (NOTE: later they might be paginated). *)
4013+ sort : string option; (** Sorting for the thread replies. *)
4014}
40154016(** Jsont codec for {!type:params}. *)
···401840194020type output = {
4021+ has_other_replies : bool; (** Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them. *)
4022+ thread : thread_item list; (** A flat list of thread items. The depth of each item is indicated by the depth property inside the item. *)
4023+ threadgate : Jsont.json option;
4024}
40254026(** Jsont codec for {!type:output}. *)
4027val output_jsont : output Jsont.t
40284029 end
4030+ module GetPostThreadOtherV2 : sig
4031+4032+type thread_item = {
4033+ depth : int; (** The nesting level of this item in the thread. Depth 0 means the anchor item. Items above have negative depths, items below have positive depths. *)
4034+ uri : string;
4035+ value : Defs.thread_item_post;
4036+}
4037+4038+(** Jsont codec for {!type:thread_item}. *)
4039+val thread_item_jsont : thread_item Jsont.t
4040+4041+(** (NOTE: this endpoint is under development and WILL change without notice. Don't use it until it is moved out of `unspecced` or your application WILL break) Get additional posts under a thread e.g. replies hidden by threadgate. Based on an anchor post at any depth of the tree, returns top-level replies below that anchor. It does not include ancestors nor the anchor itself. This should be called after exhausting `app.bsky.unspecced.getPostThreadV2`. Does not require auth, but additional metadata and filtering will be applied for authed requests. *)
40424043(** Query/procedure parameters. *)
4044type params = {
4045+ anchor : string; (** Reference (AT-URI) to post record. This is the anchor post. *)
00004046}
40474048(** Jsont codec for {!type:params}. *)
···405040514052type output = {
4053+ thread : thread_item list; (** A flat list of other thread items. The depth of each item is indicated by the depth property inside the item. *)
004054}
40554056(** Jsont codec for {!type:output}. *)
···4067val output_jsont : output Jsont.t
40684069 end
4070+ end
4071+ module Bookmark : sig
4072+ module DeleteBookmark : sig
4073+(** Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. *)
4074+4075+4076+type input = {
4077+ uri : string;
4078+}
40794080+(** Jsont codec for {!type:input}. *)
4081+val input_jsont : input Jsont.t
4082+4083+ end
4084+ module Defs : sig
4085+(** Object used to store bookmark data in stash. *)
4086+4087+type bookmark = {
4088+ subject : Com.Atproto.Repo.StrongRef.main; (** A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported. *)
4089}
40904091+(** Jsont codec for {!type:bookmark}. *)
4092+val bookmark_jsont : bookmark Jsont.t
409340944095+type bookmark_view = {
4096+ created_at : string option;
4097+ item : Jsont.json;
4098+ subject : Com.Atproto.Repo.StrongRef.main; (** A strong ref to the bookmarked record. *)
04099}
41004101+(** Jsont codec for {!type:bookmark_view}. *)
4102+val bookmark_view_jsont : bookmark_view Jsont.t
41034104 end
4105+ module CreateBookmark : sig
4106+(** Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. *)
4107+4108+4109+type input = {
4110+ cid : string;
4111+ uri : string;
4112+}
4113+4114+(** Jsont codec for {!type:input}. *)
4115+val input_jsont : input Jsont.t
4116+4117+ end
4118+ module GetBookmarks : sig
4119+(** Gets views of records bookmarked by the authenticated user. Requires authentication. *)
41204121(** Query/procedure parameters. *)
4122type params = {
4123+ cursor : string option;
4124 limit : int option;
4125}
4126···412941304131type output = {
4132+ bookmarks : Defs.bookmark_view list;
4133+ cursor : string option;
4134}
41354136(** Jsont codec for {!type:output}. *)
···30end
31module Site : sig
32 module Standard : sig
00000000000000000000000000000000000000033 module Graph : sig
34 module Subscription : sig
35(** Record declaring a subscription to a publication. *)
···63(** Jsont codec for {!type:main}. *)
64val main_jsont : main Jsont.t
6566- end
67- module Theme : sig
68- module Color : sig
69-70-type rgba = {
71- a : int;
72- b : int;
73- g : int;
74- r : int;
75-}
76-77-(** Jsont codec for {!type:rgba}. *)
78-val rgba_jsont : rgba Jsont.t
79-80-81-type rgb = {
82- b : int;
83- g : int;
84- r : int;
85-}
86-87-(** Jsont codec for {!type:rgb}. *)
88-val rgb_jsont : rgb Jsont.t
89-90- end
91- module Basic : sig
92-(** A simplified theme definition for publications, providing basic color customization for content display across different platforms and applications. *)
93-94-type main = {
95- accent : Color.rgb; (** Color used for links and button backgrounds. *)
96- accent_foreground : Color.rgb; (** Color used for button text. *)
97- background : Color.rgb; (** Color used for content background. *)
98- foreground : Color.rgb; (** Color used for content text. *)
99-}
100-101-(** Jsont codec for {!type:main}. *)
102-val main_jsont : main Jsont.t
103-104- end
105 end
106 module Publication : sig
107(** Platform-specific preferences for the publication, including discovery and visibility settings. *)
···30end
31module Site : sig
32 module Standard : sig
33+ module Theme : sig
34+ module Color : sig
35+36+type rgb = {
37+ b : int;
38+ g : int;
39+ r : int;
40+}
41+42+(** Jsont codec for {!type:rgb}. *)
43+val rgb_jsont : rgb Jsont.t
44+45+46+type rgba = {
47+ a : int;
48+ b : int;
49+ g : int;
50+ r : int;
51+}
52+53+(** Jsont codec for {!type:rgba}. *)
54+val rgba_jsont : rgba Jsont.t
55+56+ end
57+ module Basic : sig
58+(** A simplified theme definition for publications, providing basic color customization for content display across different platforms and applications. *)
59+60+type main = {
61+ accent : Color.rgb; (** Color used for links and button backgrounds. *)
62+ accent_foreground : Color.rgb; (** Color used for button text. *)
63+ background : Color.rgb; (** Color used for content background. *)
64+ foreground : Color.rgb; (** Color used for content text. *)
65+}
66+67+(** Jsont codec for {!type:main}. *)
68+val main_jsont : main Jsont.t
69+70+ end
71+ end
72 module Graph : sig
73 module Subscription : sig
74(** Record declaring a subscription to a publication. *)
···102(** Jsont codec for {!type:main}. *)
103val main_jsont : main Jsont.t
104000000000000000000000000000000000000000105 end
106 module Publication : sig
107(** Platform-specific preferences for the publication, including discovery and visibility settings. *)