···3737 let rec aux acc p =
3838 if Sys.is_directory p then
3939 Sys.readdir p |> Array.to_list
4040+ (* Sort directory entries for deterministic ordering *)
4141+ |> List.sort String.compare
4042 |> List.map (Filename.concat p)
4143 |> List.fold_left aux acc
4244 else if Filename.check_suffix p ".json" then p :: acc
4345 else acc
4446 in
4545- aux [] path
4747+ (* Sort final result for deterministic ordering *)
4848+ aux [] path |> List.sort String.compare
46494750(* generate module structure from lexicons - unified mode *)
4851let generate ~inputs ~output_dir ~module_name ~public_name =
+23-4
hermest/lib/codegen_jsont.ml
···532532 in
533533 match ready with
534534 | [] ->
535535- (* Cycle detected or external deps - just append remaining *)
536536- sorted @ remaining
537537- | _ -> sort (sorted @ ready) not_ready
535535+ (* Cycle detected or external deps - sort remaining alphabetically *)
536536+ let remaining_sorted =
537537+ List.sort
538538+ (fun (a : def_entry) (b : def_entry) ->
539539+ String.compare a.name b.name)
540540+ remaining
541541+ in
542542+ sorted @ remaining_sorted
543543+ | _ ->
544544+ (* Sort ready elements alphabetically for deterministic output *)
545545+ let ready_sorted =
546546+ List.sort
547547+ (fun (a : def_entry) (b : def_entry) ->
548548+ String.compare a.name b.name)
549549+ ready
550550+ in
551551+ sort (sorted @ ready_sorted) not_ready
538552 in
539553 (* Sort support defs first, then append primary defs *)
540554 sort [] support_defs @ primary_defs
···14611475 (* Shouldn't happen after removing cyclic deps, but fall back to alphabetical *)
14621476 List.rev sorted
14631477 @ List.sort (fun (a, _) (b, _) -> String.compare a b) not_ready
14641464- | _ -> topo_sort (ready @ sorted) not_ready
14781478+ | _ ->
14791479+ (* Sort ready elements alphabetically for deterministic output *)
14801480+ let ready_sorted =
14811481+ List.sort (fun (a, _) (b, _) -> String.compare a b) ready
14821482+ in
14831483+ topo_sort (ready_sorted @ sorted) not_ready
14651484 in
14661485 (topo_sort [] children, cyclic_nodes)
14671486
+16
hermest/lib/naming.ml
···323323 | Some ns -> ModuleWithChildren (ns, new_children)
324324 | None -> Node new_children)
325325 in
326326+ (* Sort children alphabetically to ensure deterministic output *)
327327+ let rec sort_trie = function
328328+ | Node children ->
329329+ Node
330330+ (children
331331+ |> List.map (fun (k, v) -> (k, sort_trie v))
332332+ |> List.sort (fun (a, _) (b, _) -> String.compare a b))
333333+ | Module nsid -> Module nsid
334334+ | ModuleWithChildren (nsid, children) ->
335335+ ModuleWithChildren
336336+ ( nsid,
337337+ children
338338+ |> List.map (fun (k, v) -> (k, sort_trie v))
339339+ |> List.sort (fun (a, _) (b, _) -> String.compare a b) )
340340+ in
326341 match
327342 List.fold_left
328343 (fun trie nsid ->
329344 let segments = String.split_on_char '.' nsid in
330345 insert_segments trie nsid segments)
331346 (Node []) nsids
347347+ |> sort_trie
332348 with
333349 | Node result -> result
334350 | ModuleWithChildren (_, result) -> result
···12121313module Com : sig
1414 module Atproto : sig
1515- module Label : sig
1515+ module Repo : sig
1616+ module StrongRef : sig
1717+1818+type main = {
1919+ cid : string;
2020+ uri : string;
2121+}
2222+2323+(** Jsont codec for {!type:main}. *)
2424+val main_jsont : main Jsont.t
2525+2626+ end
2727+ end
2828+ module Moderation : sig
1629 module Defs : sig
1717-(** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. *)
3030+(** Appeal a previously taken moderation action *)
3131+3232+type reason_appeal = string
3333+val reason_appeal_jsont : reason_appeal Jsont.t
3434+3535+(** Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`. *)
3636+3737+type reason_misleading = string
3838+val reason_misleading_jsont : reason_misleading Jsont.t
3939+4040+(** Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonOther`. *)
4141+4242+type reason_other = string
4343+val reason_other_jsont : reason_other Jsont.t
18441919-type self_label = {
2020- val_ : string; (** The short string name of the value or type of this label. *)
2121-}
4545+(** Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`. *)
22462323-(** Jsont codec for {!type:self_label}. *)
2424-val self_label_jsont : self_label Jsont.t
4747+type reason_rude = string
4848+val reason_rude_jsont : reason_rude Jsont.t
25492626-(** Strings which describe the label in the UI, localized into a specific language. *)
5050+(** Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`. *)
27512828-type label_value_definition_strings = {
2929- description : string; (** A longer description of what the label means and why it might be applied. *)
3030- lang : string; (** The code of the language these strings are written in. *)
3131- name : string; (** A short human-readable name for the label. *)
3232-}
5252+type reason_sexual = string
5353+val reason_sexual_jsont : reason_sexual Jsont.t
33543434-(** Jsont codec for {!type:label_value_definition_strings}. *)
3535-val label_value_definition_strings_jsont : label_value_definition_strings Jsont.t
5555+(** Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`. *)
36565757+type reason_spam = string
5858+val reason_spam_jsont : reason_spam Jsont.t
37593838-type label_value = string
3939-val label_value_jsont : label_value Jsont.t
6060+6161+type reason_type = string
6262+val reason_type_jsont : reason_type Jsont.t
40636464+(** Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`. *)
6565+6666+type reason_violation = string
6767+val reason_violation_jsont : reason_violation Jsont.t
6868+6969+(** Tag describing a type of subject that might be reported. *)
7070+7171+type subject_type = string
7272+val subject_type_jsont : subject_type Jsont.t
7373+7474+ end
7575+ end
7676+ module Label : sig
7777+ module Defs : sig
4178(** Metadata tag on an atproto resource (eg, repo or record). *)
42794380type label = {
···5592(** Jsont codec for {!type:label}. *)
5693val label_jsont : label Jsont.t
57945858-(** Metadata tags on an atproto record, published by the author within the record. *)
9595+9696+type label_value = string
9797+val label_value_jsont : label_value Jsont.t
9898+9999+(** Strings which describe the label in the UI, localized into a specific language. *)
100100+101101+type label_value_definition_strings = {
102102+ description : string; (** A longer description of what the label means and why it might be applied. *)
103103+ lang : string; (** The code of the language these strings are written in. *)
104104+ name : string; (** A short human-readable name for the label. *)
105105+}
106106+107107+(** Jsont codec for {!type:label_value_definition_strings}. *)
108108+val label_value_definition_strings_jsont : label_value_definition_strings Jsont.t
109109+110110+(** Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel. *)
591116060-type self_labels = {
6161- values : self_label list;
112112+type self_label = {
113113+ val_ : string; (** The short string name of the value or type of this label. *)
62114}
631156464-(** Jsont codec for {!type:self_labels}. *)
6565-val self_labels_jsont : self_labels Jsont.t
116116+(** Jsont codec for {!type:self_label}. *)
117117+val self_label_jsont : self_label Jsont.t
6611867119(** Declares a label value and its expected interpretations and behaviors. *)
68120···78130(** Jsont codec for {!type:label_value_definition}. *)
79131val label_value_definition_jsont : label_value_definition Jsont.t
801328181- end
8282- end
8383- module Repo : sig
8484- module StrongRef : sig
133133+(** Metadata tags on an atproto record, published by the author within the record. *)
851348686-type main = {
8787- cid : string;
8888- uri : string;
135135+type self_labels = {
136136+ values : self_label list;
89137}
901389191-(** Jsont codec for {!type:main}. *)
9292-val main_jsont : main Jsont.t
139139+(** Jsont codec for {!type:self_labels}. *)
140140+val self_labels_jsont : self_labels Jsont.t
9314194142 end
95143 end
9696- module Moderation : sig
9797- module Defs : sig
9898-(** Tag describing a type of subject that might be reported. *)
9999-100100-type subject_type = string
101101-val subject_type_jsont : subject_type Jsont.t
144144+ end
145145+end
146146+module App : sig
147147+ module Bsky : sig
148148+ module Video : sig
149149+ module GetUploadLimits : sig
150150+(** Get video upload limits for the authenticated user. *)
102151103103-(** Direct violation of server rules, laws, terms of service. Prefer new lexicon definition `tools.ozone.report.defs#reasonRuleOther`. *)
104152105105-type reason_violation = string
106106-val reason_violation_jsont : reason_violation Jsont.t
153153+type output = {
154154+ can_upload : bool;
155155+ error : string option;
156156+ message : string option;
157157+ remaining_daily_bytes : int option;
158158+ remaining_daily_videos : int option;
159159+}
107160161161+(** Jsont codec for {!type:output}. *)
162162+val output_jsont : output Jsont.t
108163109109-type reason_type = string
110110-val reason_type_jsont : reason_type Jsont.t
164164+ end
165165+ module Defs : sig
111166112112-(** Spam: frequent unwanted promotion, replies, mentions. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingSpam`. *)
113113-114114-type reason_spam = string
115115-val reason_spam_jsont : reason_spam Jsont.t
116116-117117-(** Unwanted or mislabeled sexual content. Prefer new lexicon definition `tools.ozone.report.defs#reasonSexualUnlabeled`. *)
118118-119119-type reason_sexual = string
120120-val reason_sexual_jsont : reason_sexual Jsont.t
121121-122122-(** Rude, harassing, explicit, or otherwise unwelcoming behavior. Prefer new lexicon definition `tools.ozone.report.defs#reasonHarassmentOther`. *)
167167+type job_status = {
168168+ blob : Atp.Blob_ref.t option;
169169+ did : string;
170170+ error : string option;
171171+ job_id : string;
172172+ message : string option;
173173+ progress : int option; (** Progress within the current processing state. *)
174174+ state : string; (** The state of the video processing job. All values not listed as a known value indicate that the job is in process. *)
175175+}
123176124124-type reason_rude = string
125125-val reason_rude_jsont : reason_rude Jsont.t
177177+(** Jsont codec for {!type:job_status}. *)
178178+val job_status_jsont : job_status Jsont.t
126179127127-(** Reports not falling under another report category. Prefer new lexicon definition `tools.ozone.report.defs#reasonOther`. *)
180180+ end
181181+ module UploadVideo : sig
182182+(** Upload a video to be processed then stored on the PDS. *)
128183129129-type reason_other = string
130130-val reason_other_jsont : reason_other Jsont.t
131184132132-(** Misleading identity, affiliation, or content. Prefer new lexicon definition `tools.ozone.report.defs#reasonMisleadingOther`. *)
185185+type input = unit
186186+val input_jsont : input Jsont.t
133187134134-type reason_misleading = string
135135-val reason_misleading_jsont : reason_misleading Jsont.t
136188137137-(** Appeal a previously taken moderation action *)
189189+type output = {
190190+ job_status : Defs.job_status;
191191+}
138192139139-type reason_appeal = string
140140-val reason_appeal_jsont : reason_appeal Jsont.t
193193+(** Jsont codec for {!type:output}. *)
194194+val output_jsont : output Jsont.t
141195142196 end
143143- end
144144- end
145145-end
146146-module App : sig
147147- module Bsky : sig
148148- module AuthManageLabelerService : sig
197197+ module GetJobStatus : sig
198198+(** Get status details for a video processing job. *)
149199150150-type main = unit
151151-val main_jsont : main Jsont.t
200200+(** Query/procedure parameters. *)
201201+type params = {
202202+ job_id : string;
203203+}
152204153153- end
154154- module AuthViewAll : sig
205205+(** Jsont codec for {!type:params}. *)
206206+val params_jsont : params Jsont.t
155207156156-type main = unit
157157-val main_jsont : main Jsont.t
158208159159- end
160160- module AuthManageModeration : sig
209209+type output = {
210210+ job_status : Defs.job_status;
211211+}
161212162162-type main = unit
163163-val main_jsont : main Jsont.t
213213+(** Jsont codec for {!type:output}. *)
214214+val output_jsont : output Jsont.t
164215216216+ end
165217 end
166218 module Richtext : sig
167219 module Facet : sig
168168-(** 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'). *)
220220+(** 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. *)
169221170170-type tag = {
171171- tag : string;
222222+type byte_slice = {
223223+ byte_end : int;
224224+ byte_start : int;
225225+}
226226+227227+(** Jsont codec for {!type:byte_slice}. *)
228228+val byte_slice_jsont : byte_slice Jsont.t
229229+230230+(** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. *)
231231+232232+type link = {
233233+ uri : string;
172234}
173235174174-(** Jsont codec for {!type:tag}. *)
175175-val tag_jsont : tag Jsont.t
236236+(** Jsont codec for {!type:link}. *)
237237+val link_jsont : link Jsont.t
176238177239(** Facet feature for mention of another account. The text is usually a handle, including a '\@' prefix, but the facet reference is a DID. *)
178240···183245(** Jsont codec for {!type:mention}. *)
184246val mention_jsont : mention Jsont.t
185247186186-(** Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL. *)
248248+(** 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'). *)
187249188188-type link = {
189189- uri : string;
250250+type tag = {
251251+ tag : string;
190252}
191253192192-(** Jsont codec for {!type:link}. *)
193193-val link_jsont : link Jsont.t
194194-195195-(** 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. *)
196196-197197-type byte_slice = {
198198- byte_end : int;
199199- byte_start : int;
200200-}
201201-202202-(** Jsont codec for {!type:byte_slice}. *)
203203-val byte_slice_jsont : byte_slice Jsont.t
254254+(** Jsont codec for {!type:tag}. *)
255255+val tag_jsont : tag Jsont.t
204256205257(** Annotation of a sub-string within rich text. *)
206258···214266215267 end
216268 end
217217- module AuthManageFeedDeclarations : sig
269269+ module Notification : sig
270270+ module UpdateSeen : sig
271271+(** Notify server that the requesting account has seen notifications. Requires auth. *)
218272219219-type main = unit
220220-val main_jsont : main Jsont.t
221273222222- end
223223- module AuthFullApp : sig
274274+type input = {
275275+ seen_at : string;
276276+}
224277225225-type main = unit
226226-val main_jsont : main Jsont.t
278278+(** Jsont codec for {!type:input}. *)
279279+val input_jsont : input Jsont.t
227280228228- end
229229- module AuthManageNotifications : sig
281281+ end
282282+ module UnregisterPush : sig
283283+(** 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. *)
230284231231-type main = unit
232232-val main_jsont : main Jsont.t
233285234234- end
235235- module AuthManageProfile : sig
286286+type input = {
287287+ app_id : string;
288288+ platform : string;
289289+ service_did : string;
290290+ token : string;
291291+}
236292237237-type main = unit
238238-val main_jsont : main Jsont.t
293293+(** Jsont codec for {!type:input}. *)
294294+val input_jsont : input Jsont.t
295295+296296+ end
297297+ module RegisterPush : sig
298298+(** Register to receive push notifications, via a specified service, for the requesting account. Requires auth. *)
299299+300300+301301+type input = {
302302+ age_restricted : bool option; (** Set to true when the actor is age restricted *)
303303+ app_id : string;
304304+ platform : string;
305305+ service_did : string;
306306+ token : string;
307307+}
308308+309309+(** Jsont codec for {!type:input}. *)
310310+val input_jsont : input Jsont.t
311311+312312+ end
313313+ module PutPreferences : sig
314314+(** Set notification-related preferences for an account. Requires auth. *)
315315+316316+317317+type input = {
318318+ priority : bool;
319319+}
320320+321321+(** Jsont codec for {!type:input}. *)
322322+val input_jsont : input Jsont.t
239323240240- end
241241- module Ageassurance : sig
242242- module Defs : sig
243243-(** The status of the Age Assurance process. *)
324324+ end
325325+ module ListNotifications : sig
244326245245-type status = string
246246-val status_jsont : status Jsont.t
327327+type notification = {
328328+ author : Jsont.json;
329329+ cid : string;
330330+ indexed_at : string;
331331+ is_read : bool;
332332+ labels : Com.Atproto.Label.Defs.label list option;
333333+ reason : string; (** The reason why this notification was delivered - e.g. your post was liked, or you received a new follower. *)
334334+ reason_subject : string option;
335335+ record : Jsont.json;
336336+ uri : string;
337337+}
247338248248-(** Additional metadata needed to compute Age Assurance state client-side. *)
339339+(** Jsont codec for {!type:notification}. *)
340340+val notification_jsont : notification Jsont.t
249341250250-type state_metadata = {
251251- account_created_at : string option; (** The account creation timestamp. *)
342342+(** Enumerate notifications for the requesting account. Requires auth. *)
343343+344344+(** Query/procedure parameters. *)
345345+type params = {
346346+ cursor : string option;
347347+ limit : int option;
348348+ priority : bool option;
349349+ reasons : string list option; (** Notification reasons to include in response. *)
350350+ seen_at : string option;
252351}
253352254254-(** Jsont codec for {!type:state_metadata}. *)
255255-val state_metadata_jsont : state_metadata Jsont.t
353353+(** Jsont codec for {!type:params}. *)
354354+val params_jsont : params Jsont.t
256355257257-(** Object used to store Age Assurance data in stash. *)
258356259259-type event = {
260260- access : string; (** The access level granted based on Age Assurance data we've processed. *)
261261- attempt_id : string; (** The unique identifier for this instance of the Age Assurance flow, in UUID format. *)
262262- complete_ip : string option; (** The IP address used when completing the Age Assurance flow. *)
263263- complete_ua : string option; (** The user agent used when completing the Age Assurance flow. *)
264264- country_code : string; (** The ISO 3166-1 alpha-2 country code provided when beginning the Age Assurance flow. *)
265265- created_at : string; (** The date and time of this write operation. *)
266266- email : string option; (** The email used for Age Assurance. *)
267267- init_ip : string option; (** The IP address used when initiating the Age Assurance flow. *)
268268- init_ua : string option; (** The user agent used when initiating the Age Assurance flow. *)
269269- region_code : string option; (** The ISO 3166-2 region code provided when beginning the Age Assurance flow. *)
270270- status : string; (** The status of the Age Assurance process. *)
357357+type output = {
358358+ cursor : string option;
359359+ notifications : Jsont.json list;
360360+ priority : bool option;
361361+ seen_at : string option;
271362}
272363273273-(** Jsont codec for {!type:event}. *)
274274-val event_jsont : event Jsont.t
364364+(** Jsont codec for {!type:output}. *)
365365+val output_jsont : output Jsont.t
275366276276-(** The Age Assurance configuration for a specific region. *)
367367+ end
368368+ module ListActivitySubscriptions : sig
369369+(** Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth. *)
277370278278-type config_region = {
279279- country_code : string; (** The ISO 3166-1 alpha-2 country code this configuration applies to. *)
280280- min_access_age : int; (** The minimum age (as a whole integer) required to use Bluesky in this region. *)
281281- region_code : string option; (** The ISO 3166-2 region code this configuration applies to. If omitted, the configuration applies to the entire country. *)
282282- 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. *)
371371+(** Query/procedure parameters. *)
372372+type params = {
373373+ cursor : string option;
374374+ limit : int option;
283375}
284376285285-(** Jsont codec for {!type:config_region}. *)
286286-val config_region_jsont : config_region Jsont.t
377377+(** Jsont codec for {!type:params}. *)
378378+val params_jsont : params Jsont.t
287379288288-(** The access level granted based on Age Assurance data we've processed. *)
289380290290-type access = string
291291-val access_jsont : access Jsont.t
381381+type output = {
382382+ cursor : string option;
383383+ subscriptions : Jsont.json list;
384384+}
385385+386386+(** Jsont codec for {!type:output}. *)
387387+val output_jsont : output Jsont.t
292388293293-(** The user's computed Age Assurance state. *)
389389+ end
390390+ module GetUnreadCount : sig
391391+(** Count the number of unread notifications for the requesting account. Requires auth. *)
294392295295-type state = {
296296- access : access;
297297- last_initiated_at : string option; (** The timestamp when this state was last updated. *)
298298- status : status;
393393+(** Query/procedure parameters. *)
394394+type params = {
395395+ priority : bool option;
396396+ seen_at : string option;
299397}
300398301301-(** Jsont codec for {!type:state}. *)
302302-val state_jsont : state Jsont.t
399399+(** Jsont codec for {!type:params}. *)
400400+val params_jsont : params Jsont.t
303401304304-(** Age Assurance rule that applies if the user has declared themselves under a certain age. *)
305402306306-type config_region_rule_if_declared_under_age = {
307307- access : access;
308308- age : int; (** The age threshold as a whole integer. *)
403403+type output = {
404404+ count : int;
309405}
310406311311-(** Jsont codec for {!type:config_region_rule_if_declared_under_age}. *)
312312-val config_region_rule_if_declared_under_age_jsont : config_region_rule_if_declared_under_age Jsont.t
407407+(** Jsont codec for {!type:output}. *)
408408+val output_jsont : output Jsont.t
313409314314-(** Age Assurance rule that applies if the user has declared themselves equal-to or over a certain age. *)
410410+ end
411411+ module Defs : sig
315412316316-type config_region_rule_if_declared_over_age = {
317317- access : access;
318318- age : int; (** The age threshold as a whole integer. *)
413413+type activity_subscription = {
414414+ post : bool;
415415+ reply : bool;
319416}
320417321321-(** Jsont codec for {!type:config_region_rule_if_declared_over_age}. *)
322322-val config_region_rule_if_declared_over_age_jsont : config_region_rule_if_declared_over_age Jsont.t
418418+(** Jsont codec for {!type:activity_subscription}. *)
419419+val activity_subscription_jsont : activity_subscription Jsont.t
323420324324-(** Age Assurance rule that applies if the user has been assured to be under a certain age. *)
325421326326-type config_region_rule_if_assured_under_age = {
327327- access : access;
328328- age : int; (** The age threshold as a whole integer. *)
422422+type chat_preference = {
423423+ include_ : string;
424424+ push : bool;
329425}
330426331331-(** Jsont codec for {!type:config_region_rule_if_assured_under_age}. *)
332332-val config_region_rule_if_assured_under_age_jsont : config_region_rule_if_assured_under_age Jsont.t
427427+(** Jsont codec for {!type:chat_preference}. *)
428428+val chat_preference_jsont : chat_preference Jsont.t
333429334334-(** Age Assurance rule that applies if the user has been assured to be equal-to or over a certain age. *)
335430336336-type config_region_rule_if_assured_over_age = {
337337- access : access;
338338- age : int; (** The age threshold as a whole integer. *)
431431+type filterable_preference = {
432432+ include_ : string;
433433+ list_ : bool;
434434+ push : bool;
339435}
340436341341-(** Jsont codec for {!type:config_region_rule_if_assured_over_age}. *)
342342-val config_region_rule_if_assured_over_age_jsont : config_region_rule_if_assured_over_age Jsont.t
437437+(** Jsont codec for {!type:filterable_preference}. *)
438438+val filterable_preference_jsont : filterable_preference Jsont.t
343439344344-(** Age Assurance rule that applies if the account is older than a certain date. *)
345440346346-type config_region_rule_if_account_older_than = {
347347- access : access;
348348- date : string; (** The date threshold as a datetime string. *)
441441+type preference = {
442442+ list_ : bool;
443443+ push : bool;
349444}
350445351351-(** Jsont codec for {!type:config_region_rule_if_account_older_than}. *)
352352-val config_region_rule_if_account_older_than_jsont : config_region_rule_if_account_older_than Jsont.t
446446+(** Jsont codec for {!type:preference}. *)
447447+val preference_jsont : preference Jsont.t
448448+353449354354-(** Age Assurance rule that applies if the account is equal-to or newer than a certain date. *)
450450+type record_deleted = unit
355451356356-type config_region_rule_if_account_newer_than = {
357357- access : access;
358358- date : string; (** The date threshold as a datetime string. *)
452452+(** Jsont codec for {!type:record_deleted}. *)
453453+val record_deleted_jsont : record_deleted Jsont.t
454454+455455+456456+type preferences = {
457457+ chat : Jsont.json;
458458+ follow : Jsont.json;
459459+ like : Jsont.json;
460460+ like_via_repost : Jsont.json;
461461+ mention : Jsont.json;
462462+ quote : Jsont.json;
463463+ reply : Jsont.json;
464464+ repost : Jsont.json;
465465+ repost_via_repost : Jsont.json;
466466+ starterpack_joined : Jsont.json;
467467+ subscribed_post : Jsont.json;
468468+ unverified : Jsont.json;
469469+ verified : Jsont.json;
359470}
360471361361-(** Jsont codec for {!type:config_region_rule_if_account_newer_than}. *)
362362-val config_region_rule_if_account_newer_than_jsont : config_region_rule_if_account_newer_than Jsont.t
472472+(** Jsont codec for {!type:preferences}. *)
473473+val preferences_jsont : preferences Jsont.t
363474364364-(** Age Assurance rule that applies by default. *)
475475+(** Object used to store activity subscription data in stash. *)
365476366366-type config_region_rule_default = {
367367- access : access;
477477+type subject_activity_subscription = {
478478+ activity_subscription : Jsont.json;
479479+ subject : string;
368480}
369481370370-(** Jsont codec for {!type:config_region_rule_default}. *)
371371-val config_region_rule_default_jsont : config_region_rule_default Jsont.t
482482+(** Jsont codec for {!type:subject_activity_subscription}. *)
483483+val subject_activity_subscription_jsont : subject_activity_subscription Jsont.t
372484485485+ end
486486+ module Declaration : sig
487487+(** A declaration of the user's choices related to notifications that can be produced by them. *)
373488374374-type config = {
375375- regions : config_region list; (** The per-region Age Assurance configuration. *)
489489+type main = {
490490+ allow_subscriptions : string; (** A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'. *)
376491}
377492378378-(** Jsont codec for {!type:config}. *)
379379-val config_jsont : config Jsont.t
493493+(** Jsont codec for {!type:main}. *)
494494+val main_jsont : main Jsont.t
380495381496 end
382382- module Begin : sig
383383-(** Initiate Age Assurance for an account. *)
497497+ module PutPreferencesV2 : sig
498498+(** Set notification-related preferences for an account. Requires auth. *)
384499385500386501type input = {
387387- country_code : string; (** An ISO 3166-1 alpha-2 code of the user's location. *)
388388- email : string; (** The user's email address to receive Age Assurance instructions. *)
389389- language : string; (** The user's preferred language for communication during the Age Assurance process. *)
390390- region_code : string option; (** An optional ISO 3166-2 code of the user's region or state within the country. *)
502502+ chat : Jsont.json option;
503503+ follow : Jsont.json option;
504504+ like : Jsont.json option;
505505+ like_via_repost : Jsont.json option;
506506+ mention : Jsont.json option;
507507+ quote : Jsont.json option;
508508+ reply : Jsont.json option;
509509+ repost : Jsont.json option;
510510+ repost_via_repost : Jsont.json option;
511511+ starterpack_joined : Jsont.json option;
512512+ subscribed_post : Jsont.json option;
513513+ unverified : Jsont.json option;
514514+ verified : Jsont.json option;
391515}
392516393517(** Jsont codec for {!type:input}. *)
394518val input_jsont : input Jsont.t
395519396520397397-type output = Defs.state
521521+type output = {
522522+ preferences : Jsont.json;
523523+}
398524399525(** Jsont codec for {!type:output}. *)
400526val output_jsont : output Jsont.t
401527402528 end
403403- module GetState : sig
404404-(** Returns server-computed Age Assurance state, if available, and any additional metadata needed to compute Age Assurance state client-side. *)
529529+ module PutActivitySubscription : sig
530530+(** Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth. *)
405531406406-(** Query/procedure parameters. *)
407407-type params = {
408408- country_code : string;
409409- region_code : string option;
532532+533533+type input = {
534534+ activity_subscription : Jsont.json;
535535+ subject : string;
410536}
411537412412-(** Jsont codec for {!type:params}. *)
413413-val params_jsont : params Jsont.t
538538+(** Jsont codec for {!type:input}. *)
539539+val input_jsont : input Jsont.t
414540415541416542type output = {
417417- metadata : Defs.state_metadata;
418418- state : Defs.state;
543543+ activity_subscription : Jsont.json option;
544544+ subject : string;
419545}
420546421547(** Jsont codec for {!type:output}. *)
422548val output_jsont : output Jsont.t
423549424550 end
425425- module GetConfig : sig
426426-(** Returns Age Assurance configuration for use on the client. *)
551551+ module GetPreferences : sig
552552+(** Get notification-related preferences for an account. Requires auth. *)
553553+554554+(** Query/procedure parameters. *)
555555+type params = unit
556556+557557+(** Jsont codec for {!type:params}. *)
558558+val params_jsont : params Jsont.t
427559428560429429-type output = Defs.config
561561+type output = {
562562+ preferences : Jsont.json;
563563+}
430564431565(** Jsont codec for {!type:output}. *)
432566val output_jsont : output Jsont.t
···436570 module Labeler : sig
437571 module Defs : sig
438572439439-type labeler_viewer_state = {
440440- like : string option;
441441-}
442442-443443-(** Jsont codec for {!type:labeler_viewer_state}. *)
444444-val labeler_viewer_state_jsont : labeler_viewer_state Jsont.t
445445-446446-447573type labeler_policies = {
448574 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. *)
449575 label_values : Com.Atproto.Label.Defs.label_value list; (** The label values which this labeler publishes. May include global or custom labels. *)
···453579val labeler_policies_jsont : labeler_policies Jsont.t
454580455581582582+type labeler_viewer_state = {
583583+ like : string option;
584584+}
585585+586586+(** Jsont codec for {!type:labeler_viewer_state}. *)
587587+val labeler_viewer_state_jsont : labeler_viewer_state Jsont.t
588588+589589+590590+type labeler_view = {
591591+ cid : string;
592592+ creator : Jsont.json;
593593+ indexed_at : string;
594594+ labels : Com.Atproto.Label.Defs.label list option;
595595+ like_count : int option;
596596+ uri : string;
597597+ viewer : Jsont.json option;
598598+}
599599+600600+(** Jsont codec for {!type:labeler_view}. *)
601601+val labeler_view_jsont : labeler_view Jsont.t
602602+603603+456604type labeler_view_detailed = {
457605 cid : string;
458606 creator : Jsont.json;
···469617470618(** Jsont codec for {!type:labeler_view_detailed}. *)
471619val labeler_view_detailed_jsont : labeler_view_detailed Jsont.t
472472-473473-474474-type labeler_view = {
475475- cid : string;
476476- creator : Jsont.json;
477477- indexed_at : string;
478478- labels : Com.Atproto.Label.Defs.label list option;
479479- like_count : int option;
480480- uri : string;
481481- viewer : Jsont.json option;
482482-}
483483-484484-(** Jsont codec for {!type:labeler_view}. *)
485485-val labeler_view_jsont : labeler_view Jsont.t
486620487621 end
488622 module Service : sig
···523657524658 end
525659 end
526526- module AuthCreatePosts : sig
527527-528528-type main = unit
529529-val main_jsont : main Jsont.t
530530-531531- end
532532- module Video : sig
533533- module GetUploadLimits : sig
534534-(** Get video upload limits for the authenticated user. *)
535535-536536-537537-type output = {
538538- can_upload : bool;
539539- error : string option;
540540- message : string option;
541541- remaining_daily_bytes : int option;
542542- remaining_daily_videos : int option;
543543-}
544544-545545-(** Jsont codec for {!type:output}. *)
546546-val output_jsont : output Jsont.t
547547-548548- end
549549- module Defs : sig
550550-551551-type job_status = {
552552- blob : Atp.Blob_ref.t option;
553553- did : string;
554554- error : string option;
555555- job_id : string;
556556- message : string option;
557557- progress : int option; (** Progress within the current processing state. *)
558558- state : string; (** The state of the video processing job. All values not listed as a known value indicate that the job is in process. *)
559559-}
560560-561561-(** Jsont codec for {!type:job_status}. *)
562562-val job_status_jsont : job_status Jsont.t
563563-564564- end
565565- module UploadVideo : sig
566566-(** Upload a video to be processed then stored on the PDS. *)
567567-568568-569569-type input = unit
570570-val input_jsont : input Jsont.t
571571-572572-573573-type output = {
574574- job_status : Defs.job_status;
575575-}
576576-577577-(** Jsont codec for {!type:output}. *)
578578-val output_jsont : output Jsont.t
579579-580580- end
581581- module GetJobStatus : sig
582582-(** Get status details for a video processing job. *)
583583-584584-(** Query/procedure parameters. *)
585585-type params = {
586586- job_id : string;
587587-}
588588-589589-(** Jsont codec for {!type:params}. *)
590590-val params_jsont : params Jsont.t
660660+ module Embed : sig
661661+ module External : sig
591662592592-593593-type output = {
594594- job_status : Defs.job_status;
663663+type external_ = {
664664+ description : string;
665665+ thumb : Atp.Blob_ref.t option;
666666+ title : string;
667667+ uri : string;
595668}
596669597597-(** Jsont codec for {!type:output}. *)
598598-val output_jsont : output Jsont.t
670670+(** Jsont codec for {!type:external_}. *)
671671+val external__jsont : external_ Jsont.t
599672600600- end
601601- end
602602- module Embed : sig
603603- module External : sig
604673605674type view_external = {
606675 description : string;
···612681(** Jsont codec for {!type:view_external}. *)
613682val view_external_jsont : view_external Jsont.t
614683684684+(** A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post). *)
615685616616-type external_ = {
617617- description : string;
618618- thumb : Atp.Blob_ref.t option;
619619- title : string;
620620- uri : string;
686686+type main = {
687687+ external_ : Jsont.json;
621688}
622689623623-(** Jsont codec for {!type:external_}. *)
624624-val external__jsont : external_ Jsont.t
690690+(** Jsont codec for {!type:main}. *)
691691+val main_jsont : main Jsont.t
625692626693627694type view = {
···631698(** Jsont codec for {!type:view}. *)
632699val view_jsont : view Jsont.t
633700634634-(** A representation of some externally linked content (eg, a URL and 'card'), embedded in a Bluesky record (eg, a post). *)
635635-636636-type main = {
637637- external_ : Jsont.json;
638638-}
639639-640640-(** Jsont codec for {!type:main}. *)
641641-val main_jsont : main Jsont.t
642642-643701 end
644702 module Defs : sig
645703(** width:height represents an aspect ratio. It may be approximate, and may not correspond to absolute dimensions in any given unit. *)
···653711val aspect_ratio_jsont : aspect_ratio Jsont.t
654712655713 end
656656- module Images : sig
714714+ module Video : sig
657715658658-type view_image = {
659659- alt : string; (** Alt text description of the image, for accessibility. *)
716716+type caption = {
717717+ file : Atp.Blob_ref.t;
718718+ lang : string;
719719+}
720720+721721+(** Jsont codec for {!type:caption}. *)
722722+val caption_jsont : caption Jsont.t
723723+724724+725725+type view = {
726726+ alt : string option;
660727 aspect_ratio : Jsont.json option;
661661- 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. *)
662662- thumb : string; (** Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. *)
728728+ cid : string;
729729+ playlist : string;
730730+ thumbnail : string option;
663731}
664732665665-(** Jsont codec for {!type:view_image}. *)
666666-val view_image_jsont : view_image Jsont.t
733733+(** Jsont codec for {!type:view}. *)
734734+val view_jsont : view Jsont.t
735735+736736+737737+type main = {
738738+ alt : string option; (** Alt text description of the video, for accessibility. *)
739739+ aspect_ratio : Jsont.json option;
740740+ captions : Jsont.json list option;
741741+ video : Atp.Blob_ref.t; (** The mp4 video file. May be up to 100mb, formerly limited to 50mb. *)
742742+}
743743+744744+(** Jsont codec for {!type:main}. *)
745745+val main_jsont : main Jsont.t
667746747747+ end
748748+ module Images : sig
668749669750type image = {
670751 alt : string; (** Alt text description of the image, for accessibility. *)
···676757val image_jsont : image Jsont.t
677758678759679679-type view = {
680680- images : Jsont.json list;
760760+type view_image = {
761761+ alt : string; (** Alt text description of the image, for accessibility. *)
762762+ aspect_ratio : Jsont.json option;
763763+ 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. *)
764764+ thumb : string; (** Fully-qualified URL where a thumbnail of the image can be fetched. For example, CDN location provided by the App View. *)
681765}
682766683683-(** Jsont codec for {!type:view}. *)
684684-val view_jsont : view Jsont.t
767767+(** Jsont codec for {!type:view_image}. *)
768768+val view_image_jsont : view_image Jsont.t
685769686770687771type main = {
···691775(** Jsont codec for {!type:main}. *)
692776val main_jsont : main Jsont.t
693777694694- end
695695- module Video : sig
696778697779type view = {
698698- alt : string option;
699699- aspect_ratio : Jsont.json option;
700700- cid : string;
701701- playlist : string;
702702- thumbnail : string option;
780780+ images : Jsont.json list;
703781}
704782705783(** Jsont codec for {!type:view}. *)
706784val view_jsont : view Jsont.t
707785708708-709709-type caption = {
710710- file : Atp.Blob_ref.t;
711711- lang : string;
712712-}
713713-714714-(** Jsont codec for {!type:caption}. *)
715715-val caption_jsont : caption Jsont.t
716716-786786+ end
787787+ module RecordWithMedia : sig
717788718789type main = {
719719- alt : string option; (** Alt text description of the video, for accessibility. *)
720720- aspect_ratio : Jsont.json option;
721721- captions : Jsont.json list option;
722722- video : Atp.Blob_ref.t; (** The mp4 video file. May be up to 100mb, formerly limited to 50mb. *)
790790+ media : Jsont.json;
791791+ record : Jsont.json;
723792}
724793725794(** Jsont codec for {!type:main}. *)
726795val main_jsont : main Jsont.t
727796728728- end
729729- module RecordWithMedia : sig
730797731798type view = {
732799 media : Jsont.json;
···736803(** Jsont codec for {!type:view}. *)
737804val view_jsont : view Jsont.t
738805806806+ end
807807+ module Record : sig
739808740809type main = {
741741- media : Jsont.json;
742742- record : Jsont.json;
810810+ record : Com.Atproto.Repo.StrongRef.main;
743811}
744812745813(** Jsont codec for {!type:main}. *)
746814val main_jsont : main Jsont.t
747815748748- end
749749- module Record : sig
750816751751-type view_record = {
752752- author : Jsont.json;
753753- cid : string;
754754- embeds : Jsont.json list option;
755755- indexed_at : string;
756756- labels : Com.Atproto.Label.Defs.label list option;
757757- like_count : int option;
758758- quote_count : int option;
759759- reply_count : int option;
760760- repost_count : int option;
761761- uri : string;
762762- value : Jsont.json; (** The record data itself. *)
817817+type view = {
818818+ record : Jsont.json;
763819}
764820765765-(** Jsont codec for {!type:view_record}. *)
766766-val view_record_jsont : view_record Jsont.t
821821+(** Jsont codec for {!type:view}. *)
822822+val view_jsont : view Jsont.t
767823768824769769-type view_not_found = {
770770- not_found : bool;
825825+type view_blocked = {
826826+ author : Jsont.json;
827827+ blocked : bool;
771828 uri : string;
772829}
773830774774-(** Jsont codec for {!type:view_not_found}. *)
775775-val view_not_found_jsont : view_not_found Jsont.t
831831+(** Jsont codec for {!type:view_blocked}. *)
832832+val view_blocked_jsont : view_blocked Jsont.t
776833777834778835type view_detached = {
···784841val view_detached_jsont : view_detached Jsont.t
785842786843787787-type view_blocked = {
788788- author : Jsont.json;
789789- blocked : bool;
844844+type view_not_found = {
845845+ not_found : bool;
790846 uri : string;
791847}
792848793793-(** Jsont codec for {!type:view_blocked}. *)
794794-val view_blocked_jsont : view_blocked Jsont.t
849849+(** Jsont codec for {!type:view_not_found}. *)
850850+val view_not_found_jsont : view_not_found Jsont.t
795851796852797797-type view = {
798798- record : Jsont.json;
853853+type view_record = {
854854+ author : Jsont.json;
855855+ cid : string;
856856+ embeds : Jsont.json list option;
857857+ indexed_at : string;
858858+ labels : Com.Atproto.Label.Defs.label list option;
859859+ like_count : int option;
860860+ quote_count : int option;
861861+ reply_count : int option;
862862+ repost_count : int option;
863863+ uri : string;
864864+ value : Jsont.json; (** The record data itself. *)
799865}
800866801801-(** Jsont codec for {!type:view}. *)
802802-val view_jsont : view Jsont.t
803803-804804-805805-type main = {
806806- record : Com.Atproto.Repo.StrongRef.main;
807807-}
808808-809809-(** Jsont codec for {!type:main}. *)
810810-val main_jsont : main Jsont.t
867867+(** Jsont codec for {!type:view_record}. *)
868868+val view_record_jsont : view_record Jsont.t
811869812870 end
813871 end
814814- module Notification : sig
815815- module UpdateSeen : sig
816816-(** Notify server that the requesting account has seen notifications. Requires auth. *)
817817-818818-819819-type input = {
820820- seen_at : string;
821821-}
872872+ module AuthViewAll : sig
822873823823-(** Jsont codec for {!type:input}. *)
824824-val input_jsont : input Jsont.t
874874+type main = unit
875875+val main_jsont : main Jsont.t
825876826826- end
827827- module RegisterPush : sig
828828-(** Register to receive push notifications, via a specified service, for the requesting account. Requires auth. *)
877877+ end
878878+ module AuthManageProfile : sig
829879880880+type main = unit
881881+val main_jsont : main Jsont.t
830882831831-type input = {
832832- age_restricted : bool option; (** Set to true when the actor is age restricted *)
833833- app_id : string;
834834- platform : string;
835835- service_did : string;
836836- token : string;
837837-}
883883+ end
884884+ module AuthManageNotifications : sig
838885839839-(** Jsont codec for {!type:input}. *)
840840-val input_jsont : input Jsont.t
886886+type main = unit
887887+val main_jsont : main Jsont.t
841888842842- end
843843- module ListNotifications : sig
889889+ end
890890+ module AuthManageModeration : sig
844891845845-type notification = {
846846- author : Jsont.json;
847847- cid : string;
848848- indexed_at : string;
849849- is_read : bool;
850850- labels : Com.Atproto.Label.Defs.label list option;
851851- reason : string; (** The reason why this notification was delivered - e.g. your post was liked, or you received a new follower. *)
852852- reason_subject : string option;
853853- record : Jsont.json;
854854- uri : string;
855855-}
892892+type main = unit
893893+val main_jsont : main Jsont.t
856894857857-(** Jsont codec for {!type:notification}. *)
858858-val notification_jsont : notification Jsont.t
895895+ end
896896+ module AuthManageLabelerService : sig
859897860860-(** Enumerate notifications for the requesting account. Requires auth. *)
898898+type main = unit
899899+val main_jsont : main Jsont.t
861900862862-(** Query/procedure parameters. *)
863863-type params = {
864864- cursor : string option;
865865- limit : int option;
866866- priority : bool option;
867867- reasons : string list option; (** Notification reasons to include in response. *)
868868- seen_at : string option;
869869-}
901901+ end
902902+ module AuthManageFeedDeclarations : sig
870903871871-(** Jsont codec for {!type:params}. *)
872872-val params_jsont : params Jsont.t
904904+type main = unit
905905+val main_jsont : main Jsont.t
873906907907+ end
908908+ module AuthFullApp : sig
874909875875-type output = {
876876- cursor : string option;
877877- notifications : Jsont.json list;
878878- priority : bool option;
879879- seen_at : string option;
880880-}
910910+type main = unit
911911+val main_jsont : main Jsont.t
881912882882-(** Jsont codec for {!type:output}. *)
883883-val output_jsont : output Jsont.t
913913+ end
914914+ module AuthCreatePosts : sig
884915885885- end
886886- module GetUnreadCount : sig
887887-(** Count the number of unread notifications for the requesting account. Requires auth. *)
916916+type main = unit
917917+val main_jsont : main Jsont.t
888918889889-(** Query/procedure parameters. *)
890890-type params = {
891891- priority : bool option;
892892- seen_at : string option;
893893-}
919919+ end
920920+ module Ageassurance : sig
921921+ module Defs : sig
922922+(** The access level granted based on Age Assurance data we've processed. *)
894923895895-(** Jsont codec for {!type:params}. *)
896896-val params_jsont : params Jsont.t
924924+type access = string
925925+val access_jsont : access Jsont.t
897926927927+(** The Age Assurance configuration for a specific region. *)
898928899899-type output = {
900900- count : int;
929929+type config_region = {
930930+ country_code : string; (** The ISO 3166-1 alpha-2 country code this configuration applies to. *)
931931+ min_access_age : int; (** The minimum age (as a whole integer) required to use Bluesky in this region. *)
932932+ region_code : string option; (** The ISO 3166-2 region code this configuration applies to. If omitted, the configuration applies to the entire country. *)
933933+ 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. *)
901934}
902935903903-(** Jsont codec for {!type:output}. *)
904904-val output_jsont : output Jsont.t
936936+(** Jsont codec for {!type:config_region}. *)
937937+val config_region_jsont : config_region Jsont.t
905938906906- end
907907- module UnregisterPush : sig
908908-(** 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. *)
939939+(** Object used to store Age Assurance data in stash. *)
909940910910-911911-type input = {
912912- app_id : string;
913913- platform : string;
914914- service_did : string;
915915- token : string;
941941+type event = {
942942+ access : string; (** The access level granted based on Age Assurance data we've processed. *)
943943+ attempt_id : string; (** The unique identifier for this instance of the Age Assurance flow, in UUID format. *)
944944+ complete_ip : string option; (** The IP address used when completing the Age Assurance flow. *)
945945+ complete_ua : string option; (** The user agent used when completing the Age Assurance flow. *)
946946+ country_code : string; (** The ISO 3166-1 alpha-2 country code provided when beginning the Age Assurance flow. *)
947947+ created_at : string; (** The date and time of this write operation. *)
948948+ email : string option; (** The email used for Age Assurance. *)
949949+ init_ip : string option; (** The IP address used when initiating the Age Assurance flow. *)
950950+ init_ua : string option; (** The user agent used when initiating the Age Assurance flow. *)
951951+ region_code : string option; (** The ISO 3166-2 region code provided when beginning the Age Assurance flow. *)
952952+ status : string; (** The status of the Age Assurance process. *)
916953}
917954918918-(** Jsont codec for {!type:input}. *)
919919-val input_jsont : input Jsont.t
920920-921921- end
922922- module PutPreferences : sig
923923-(** Set notification-related preferences for an account. Requires auth. *)
955955+(** Jsont codec for {!type:event}. *)
956956+val event_jsont : event Jsont.t
924957958958+(** Additional metadata needed to compute Age Assurance state client-side. *)
925959926926-type input = {
927927- priority : bool;
960960+type state_metadata = {
961961+ account_created_at : string option; (** The account creation timestamp. *)
928962}
929963930930-(** Jsont codec for {!type:input}. *)
931931-val input_jsont : input Jsont.t
932932-933933- end
934934- module Defs : sig
964964+(** Jsont codec for {!type:state_metadata}. *)
965965+val state_metadata_jsont : state_metadata Jsont.t
935966936936-type record_deleted = unit
967967+(** The status of the Age Assurance process. *)
937968938938-(** Jsont codec for {!type:record_deleted}. *)
939939-val record_deleted_jsont : record_deleted Jsont.t
969969+type status = string
970970+val status_jsont : status Jsont.t
940971941972942942-type preference = {
943943- list_ : bool;
944944- push : bool;
973973+type config = {
974974+ regions : config_region list; (** The per-region Age Assurance configuration. *)
945975}
946976947947-(** Jsont codec for {!type:preference}. *)
948948-val preference_jsont : preference Jsont.t
977977+(** Jsont codec for {!type:config}. *)
978978+val config_jsont : config Jsont.t
949979980980+(** Age Assurance rule that applies by default. *)
950981951951-type filterable_preference = {
952952- include_ : string;
953953- list_ : bool;
954954- push : bool;
982982+type config_region_rule_default = {
983983+ access : access;
955984}
956985957957-(** Jsont codec for {!type:filterable_preference}. *)
958958-val filterable_preference_jsont : filterable_preference Jsont.t
986986+(** Jsont codec for {!type:config_region_rule_default}. *)
987987+val config_region_rule_default_jsont : config_region_rule_default Jsont.t
959988989989+(** Age Assurance rule that applies if the account is equal-to or newer than a certain date. *)
960990961961-type chat_preference = {
962962- include_ : string;
963963- push : bool;
991991+type config_region_rule_if_account_newer_than = {
992992+ access : access;
993993+ date : string; (** The date threshold as a datetime string. *)
964994}
965995966966-(** Jsont codec for {!type:chat_preference}. *)
967967-val chat_preference_jsont : chat_preference Jsont.t
996996+(** Jsont codec for {!type:config_region_rule_if_account_newer_than}. *)
997997+val config_region_rule_if_account_newer_than_jsont : config_region_rule_if_account_newer_than Jsont.t
968998999999+(** Age Assurance rule that applies if the account is older than a certain date. *)
9691000970970-type activity_subscription = {
971971- post : bool;
972972- reply : bool;
10011001+type config_region_rule_if_account_older_than = {
10021002+ access : access;
10031003+ date : string; (** The date threshold as a datetime string. *)
9731004}
9741005975975-(** Jsont codec for {!type:activity_subscription}. *)
976976-val activity_subscription_jsont : activity_subscription Jsont.t
10061006+(** Jsont codec for {!type:config_region_rule_if_account_older_than}. *)
10071007+val config_region_rule_if_account_older_than_jsont : config_region_rule_if_account_older_than Jsont.t
9771008978978-(** Object used to store activity subscription data in stash. *)
10091009+(** Age Assurance rule that applies if the user has been assured to be equal-to or over a certain age. *)
9791010980980-type subject_activity_subscription = {
981981- activity_subscription : Jsont.json;
982982- subject : string;
10111011+type config_region_rule_if_assured_over_age = {
10121012+ access : access;
10131013+ age : int; (** The age threshold as a whole integer. *)
9831014}
9841015985985-(** Jsont codec for {!type:subject_activity_subscription}. *)
986986-val subject_activity_subscription_jsont : subject_activity_subscription Jsont.t
10161016+(** Jsont codec for {!type:config_region_rule_if_assured_over_age}. *)
10171017+val config_region_rule_if_assured_over_age_jsont : config_region_rule_if_assured_over_age Jsont.t
987101810191019+(** Age Assurance rule that applies if the user has been assured to be under a certain age. *)
9881020989989-type preferences = {
990990- chat : Jsont.json;
991991- follow : Jsont.json;
992992- like : Jsont.json;
993993- like_via_repost : Jsont.json;
994994- mention : Jsont.json;
995995- quote : Jsont.json;
996996- reply : Jsont.json;
997997- repost : Jsont.json;
998998- repost_via_repost : Jsont.json;
999999- starterpack_joined : Jsont.json;
10001000- subscribed_post : Jsont.json;
10011001- unverified : Jsont.json;
10021002- verified : Jsont.json;
10211021+type config_region_rule_if_assured_under_age = {
10221022+ access : access;
10231023+ age : int; (** The age threshold as a whole integer. *)
10031024}
1004102510051005-(** Jsont codec for {!type:preferences}. *)
10061006-val preferences_jsont : preferences Jsont.t
10261026+(** Jsont codec for {!type:config_region_rule_if_assured_under_age}. *)
10271027+val config_region_rule_if_assured_under_age_jsont : config_region_rule_if_assured_under_age Jsont.t
1007102810081008- end
10091009- module Declaration : sig
10101010-(** A declaration of the user's choices related to notifications that can be produced by them. *)
10291029+(** Age Assurance rule that applies if the user has declared themselves equal-to or over a certain age. *)
1011103010121012-type main = {
10131013- allow_subscriptions : string; (** A declaration of the user's preference for allowing activity subscriptions from other users. Absence of a record implies 'followers'. *)
10311031+type config_region_rule_if_declared_over_age = {
10321032+ access : access;
10331033+ age : int; (** The age threshold as a whole integer. *)
10141034}
1015103510161016-(** Jsont codec for {!type:main}. *)
10171017-val main_jsont : main Jsont.t
10361036+(** Jsont codec for {!type:config_region_rule_if_declared_over_age}. *)
10371037+val config_region_rule_if_declared_over_age_jsont : config_region_rule_if_declared_over_age Jsont.t
1018103810191019- end
10201020- module ListActivitySubscriptions : sig
10211021-(** Enumerate all accounts to which the requesting account is subscribed to receive notifications for. Requires auth. *)
10391039+(** Age Assurance rule that applies if the user has declared themselves under a certain age. *)
1022104010231023-(** Query/procedure parameters. *)
10241024-type params = {
10251025- cursor : string option;
10261026- limit : int option;
10411041+type config_region_rule_if_declared_under_age = {
10421042+ access : access;
10431043+ age : int; (** The age threshold as a whole integer. *)
10271044}
1028104510291029-(** Jsont codec for {!type:params}. *)
10301030-val params_jsont : params Jsont.t
10461046+(** Jsont codec for {!type:config_region_rule_if_declared_under_age}. *)
10471047+val config_region_rule_if_declared_under_age_jsont : config_region_rule_if_declared_under_age Jsont.t
1031104810491049+(** The user's computed Age Assurance state. *)
1032105010331033-type output = {
10341034- cursor : string option;
10351035- subscriptions : Jsont.json list;
10511051+type state = {
10521052+ access : access;
10531053+ last_initiated_at : string option; (** The timestamp when this state was last updated. *)
10541054+ status : status;
10361055}
1037105610381038-(** Jsont codec for {!type:output}. *)
10391039-val output_jsont : output Jsont.t
10571057+(** Jsont codec for {!type:state}. *)
10581058+val state_jsont : state Jsont.t
1040105910411060 end
10421042- module GetPreferences : sig
10431043-(** Get notification-related preferences for an account. Requires auth. *)
10611061+ module GetState : sig
10621062+(** Returns server-computed Age Assurance state, if available, and any additional metadata needed to compute Age Assurance state client-side. *)
1044106310451064(** Query/procedure parameters. *)
10461046-type params = unit
10651065+type params = {
10661066+ country_code : string;
10671067+ region_code : string option;
10681068+}
1047106910481070(** Jsont codec for {!type:params}. *)
10491071val params_jsont : params Jsont.t
105010721051107310521074type output = {
10531053- preferences : Jsont.json;
10751075+ metadata : Defs.state_metadata;
10761076+ state : Defs.state;
10541077}
1055107810561079(** Jsont codec for {!type:output}. *)
10571080val output_jsont : output Jsont.t
1058108110591082 end
10601060- module PutActivitySubscription : sig
10611061-(** Puts an activity subscription entry. The key should be omitted for creation and provided for updates. Requires auth. *)
10831083+ module GetConfig : sig
10841084+(** Returns Age Assurance configuration for use on the client. *)
106210851063108610641064-type input = {
10651065- activity_subscription : Jsont.json;
10661066- subject : string;
10671067-}
10681068-10691069-(** Jsont codec for {!type:input}. *)
10701070-val input_jsont : input Jsont.t
10711071-10721072-10731073-type output = {
10741074- activity_subscription : Jsont.json option;
10751075- subject : string;
10761076-}
10871087+type output = Defs.config
1077108810781089(** Jsont codec for {!type:output}. *)
10791090val output_jsont : output Jsont.t
1080109110811092 end
10821082- module PutPreferencesV2 : sig
10831083-(** Set notification-related preferences for an account. Requires auth. *)
10931093+ module Begin : sig
10941094+(** Initiate Age Assurance for an account. *)
108410951085109610861097type input = {
10871087- chat : Jsont.json option;
10881088- follow : Jsont.json option;
10891089- like : Jsont.json option;
10901090- like_via_repost : Jsont.json option;
10911091- mention : Jsont.json option;
10921092- quote : Jsont.json option;
10931093- reply : Jsont.json option;
10941094- repost : Jsont.json option;
10951095- repost_via_repost : Jsont.json option;
10961096- starterpack_joined : Jsont.json option;
10971097- subscribed_post : Jsont.json option;
10981098- unverified : Jsont.json option;
10991099- verified : Jsont.json option;
10981098+ country_code : string; (** An ISO 3166-1 alpha-2 code of the user's location. *)
10991099+ email : string; (** The user's email address to receive Age Assurance instructions. *)
11001100+ language : string; (** The user's preferred language for communication during the Age Assurance process. *)
11011101+ region_code : string option; (** An optional ISO 3166-2 code of the user's region or state within the country. *)
11001102}
1101110311021104(** Jsont codec for {!type:input}. *)
11031105val input_jsont : input Jsont.t
110411061105110711061106-type output = {
11071107- preferences : Jsont.json;
11081108-}
11081108+type output = Defs.state
1109110911101110(** Jsont codec for {!type:output}. *)
11111111val output_jsont : output Jsont.t
···1153115311541154 end
11551155 module Defs : sig
11561156-(** An individual verification for an associated subject. *)
1157115611581158-type verification_view = {
11591159- created_at : string; (** Timestamp when the verification was created. *)
11601160- is_valid : bool; (** True if the verification passes validation, otherwise false. *)
11611161- issuer : string; (** The user who issued this verification. *)
11621162- uri : string; (** The AT-URI of the verification record. *)
11571157+type adult_content_pref = {
11581158+ enabled : bool;
11631159}
1164116011651165-(** Jsont codec for {!type:verification_view}. *)
11661166-val verification_view_jsont : verification_view Jsont.t
11611161+(** Jsont codec for {!type:adult_content_pref}. *)
11621162+val adult_content_pref_jsont : adult_content_pref Jsont.t
1167116311681168-(** Preferences for how verified accounts appear in the app. *)
11641164+(** If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress. *)
1169116511701170-type verification_prefs = {
11711171- hide_badges : bool option; (** Hide the blue check badges for verified accounts and trusted verifiers. *)
11661166+type bsky_app_progress_guide = {
11671167+ guide : string;
11721168}
1173116911741174-(** Jsont codec for {!type:verification_prefs}. *)
11751175-val verification_prefs_jsont : verification_prefs Jsont.t
11701170+(** Jsont codec for {!type:bsky_app_progress_guide}. *)
11711171+val bsky_app_progress_guide_jsont : bsky_app_progress_guide Jsont.t
117611721177117311781178-type thread_view_pref = {
11791179- sort : string option; (** Sorting mode for threads. *)
11741174+type content_label_pref = {
11751175+ label : string;
11761176+ labeler_did : string option; (** Which labeler does this preference apply to? If undefined, applies globally. *)
11771177+ visibility : string;
11801178}
1181117911821182-(** Jsont codec for {!type:thread_view_pref}. *)
11831183-val thread_view_pref_jsont : thread_view_pref Jsont.t
11801180+(** Jsont codec for {!type:content_label_pref}. *)
11811181+val content_label_pref_jsont : content_label_pref Jsont.t
1184118211831183+(** 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. *)
1185118411861186-type status_view = {
11871187- cid : string option;
11881188- embed : Jsont.json option; (** An optional embed associated with the status. *)
11891189- expires_at : string option; (** The date when this status will expire. The application might choose to no longer return the status after expiration. *)
11901190- is_active : bool option; (** True if the status is not expired, false if it is expired. Only present if expiration was set. *)
11911191- is_disabled : bool option; (** True if the user's go-live access has been disabled by a moderator, false otherwise. *)
11921192- record : Jsont.json;
11931193- status : string; (** The status for the account. *)
11941194- uri : string option;
11851185+type declared_age_pref = {
11861186+ is_over_age13 : bool option; (** Indicates if the user has declared that they are over 13 years of age. *)
11871187+ is_over_age16 : bool option; (** Indicates if the user has declared that they are over 16 years of age. *)
11881188+ is_over_age18 : bool option; (** Indicates if the user has declared that they are over 18 years of age. *)
11951189}
1196119011971197-(** Jsont codec for {!type:status_view}. *)
11981198-val status_view_jsont : status_view Jsont.t
11911191+(** Jsont codec for {!type:declared_age_pref}. *)
11921192+val declared_age_pref_jsont : declared_age_pref Jsont.t
119911931200119412011201-type saved_feeds_pref = {
12021202- pinned : string list;
12031203- saved : string list;
12041204- timeline_index : int option;
11951195+type feed_view_pref = {
11961196+ feed : string; (** The URI of the feed, or an identifier which describes the feed. *)
11971197+ hide_quote_posts : bool option; (** Hide quote posts in the feed. *)
11981198+ hide_replies : bool option; (** Hide replies in the feed. *)
11991199+ hide_replies_by_like_count : int option; (** Hide replies in the feed if they do not have this number of likes. *)
12001200+ hide_replies_by_unfollowed : bool option; (** Hide replies in the feed if they are not by followed users. *)
12011201+ hide_reposts : bool option; (** Hide reposts in the feed. *)
12051202}
1206120312071207-(** Jsont codec for {!type:saved_feeds_pref}. *)
12081208-val saved_feeds_pref_jsont : saved_feeds_pref Jsont.t
12041204+(** Jsont codec for {!type:feed_view_pref}. *)
12051205+val feed_view_pref_jsont : feed_view_pref Jsont.t
120912061210120712111211-type saved_feed = {
12121212- id : string;
12131213- pinned : bool;
12141214- type_ : string;
12151215- value : string;
12081208+type hidden_posts_pref = {
12091209+ items : string list; (** A list of URIs of posts the account owner has hidden. *)
12161210}
1217121112181218-(** Jsont codec for {!type:saved_feed}. *)
12191219-val saved_feed_jsont : saved_feed Jsont.t
12121212+(** Jsont codec for {!type:hidden_posts_pref}. *)
12131213+val hidden_posts_pref_jsont : hidden_posts_pref Jsont.t
122012141221121512221222-type profile_associated_chat = {
12231223- allow_incoming : string;
12161216+type interests_pref = {
12171217+ tags : string list; (** A list of tags which describe the account owner's interests gathered during onboarding. *)
12241218}
1225121912261226-(** Jsont codec for {!type:profile_associated_chat}. *)
12271227-val profile_associated_chat_jsont : profile_associated_chat Jsont.t
12201220+(** Jsont codec for {!type:interests_pref}. *)
12211221+val interests_pref_jsont : interests_pref Jsont.t
122812221229122312301230-type profile_associated_activity_subscription = {
12311231- allow_subscriptions : string;
12241224+type labeler_pref_item = {
12251225+ did : string;
12321226}
1233122712341234-(** Jsont codec for {!type:profile_associated_activity_subscription}. *)
12351235-val profile_associated_activity_subscription_jsont : profile_associated_activity_subscription Jsont.t
12281228+(** Jsont codec for {!type:labeler_pref_item}. *)
12291229+val labeler_pref_item_jsont : labeler_pref_item Jsont.t
123612301237123112381238-type preferences = Jsont.json list
12391239-val preferences_jsont : preferences Jsont.t
12321232+type muted_word_target = string
12331233+val muted_word_target_jsont : muted_word_target Jsont.t
1240123412411241-(** 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. *)
12351235+(** A new user experiences (NUX) storage object *)
1242123612431243-type post_interaction_settings_pref = {
12441244- 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. *)
12451245- 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. *)
12371237+type nux = {
12381238+ completed : bool;
12391239+ data : string option; (** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. *)
12401240+ expires_at : string option; (** The date and time at which the NUX will expire and should be considered completed. *)
12411241+ id : string;
12461242}
1247124312481248-(** Jsont codec for {!type:post_interaction_settings_pref}. *)
12491249-val post_interaction_settings_pref_jsont : post_interaction_settings_pref Jsont.t
12441244+(** Jsont codec for {!type:nux}. *)
12451245+val nux_jsont : nux Jsont.t
125012461251124712521248type personal_details_pref = {
···12561252(** Jsont codec for {!type:personal_details_pref}. *)
12571253val personal_details_pref_jsont : personal_details_pref Jsont.t
1258125412591259-(** A new user experiences (NUX) storage object *)
12551255+(** 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. *)
1260125612611261-type nux = {
12621262- completed : bool;
12631263- data : string option; (** Arbitrary data for the NUX. The structure is defined by the NUX itself. Limited to 300 characters. *)
12641264- expires_at : string option; (** The date and time at which the NUX will expire and should be considered completed. *)
12651265- id : string;
12571257+type post_interaction_settings_pref = {
12581258+ 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. *)
12591259+ 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. *)
12661260}
1267126112681268-(** Jsont codec for {!type:nux}. *)
12691269-val nux_jsont : nux Jsont.t
12621262+(** Jsont codec for {!type:post_interaction_settings_pref}. *)
12631263+val post_interaction_settings_pref_jsont : post_interaction_settings_pref Jsont.t
127012641271126512721272-type muted_word_target = string
12731273-val muted_word_target_jsont : muted_word_target Jsont.t
12661266+type preferences = Jsont.json list
12671267+val preferences_jsont : preferences Jsont.t
127412681275126912761276-type labeler_pref_item = {
12771277- did : string;
12701270+type profile_associated_activity_subscription = {
12711271+ allow_subscriptions : string;
12781272}
1279127312801280-(** Jsont codec for {!type:labeler_pref_item}. *)
12811281-val labeler_pref_item_jsont : labeler_pref_item Jsont.t
12741274+(** Jsont codec for {!type:profile_associated_activity_subscription}. *)
12751275+val profile_associated_activity_subscription_jsont : profile_associated_activity_subscription Jsont.t
128212761283127712841284-type interests_pref = {
12851285- tags : string list; (** A list of tags which describe the account owner's interests gathered during onboarding. *)
12781278+type profile_associated_chat = {
12791279+ allow_incoming : string;
12861280}
1287128112881288-(** Jsont codec for {!type:interests_pref}. *)
12891289-val interests_pref_jsont : interests_pref Jsont.t
12821282+(** Jsont codec for {!type:profile_associated_chat}. *)
12831283+val profile_associated_chat_jsont : profile_associated_chat Jsont.t
129012841291128512921292-type hidden_posts_pref = {
12931293- items : string list; (** A list of URIs of posts the account owner has hidden. *)
12861286+type saved_feed = {
12871287+ id : string;
12881288+ pinned : bool;
12891289+ type_ : string;
12901290+ value : string;
12941291}
1295129212961296-(** Jsont codec for {!type:hidden_posts_pref}. *)
12971297-val hidden_posts_pref_jsont : hidden_posts_pref Jsont.t
12931293+(** Jsont codec for {!type:saved_feed}. *)
12941294+val saved_feed_jsont : saved_feed Jsont.t
12951295+12961296+12971297+type saved_feeds_pref = {
12981298+ pinned : string list;
12991299+ saved : string list;
13001300+ timeline_index : int option;
13011301+}
13021302+13031303+(** Jsont codec for {!type:saved_feeds_pref}. *)
13041304+val saved_feeds_pref_jsont : saved_feeds_pref Jsont.t
129813051299130613001300-type feed_view_pref = {
13011301- feed : string; (** The URI of the feed, or an identifier which describes the feed. *)
13021302- hide_quote_posts : bool option; (** Hide quote posts in the feed. *)
13031303- hide_replies : bool option; (** Hide replies in the feed. *)
13041304- hide_replies_by_like_count : int option; (** Hide replies in the feed if they do not have this number of likes. *)
13051305- hide_replies_by_unfollowed : bool option; (** Hide replies in the feed if they are not by followed users. *)
13061306- hide_reposts : bool option; (** Hide reposts in the feed. *)
13071307+type status_view = {
13081308+ cid : string option;
13091309+ embed : Jsont.json option; (** An optional embed associated with the status. *)
13101310+ expires_at : string option; (** The date when this status will expire. The application might choose to no longer return the status after expiration. *)
13111311+ is_active : bool option; (** True if the status is not expired, false if it is expired. Only present if expiration was set. *)
13121312+ is_disabled : bool option; (** True if the user's go-live access has been disabled by a moderator, false otherwise. *)
13131313+ record : Jsont.json;
13141314+ status : string; (** The status for the account. *)
13151315+ uri : string option;
13071316}
1308131713091309-(** Jsont codec for {!type:feed_view_pref}. *)
13101310-val feed_view_pref_jsont : feed_view_pref Jsont.t
13181318+(** Jsont codec for {!type:status_view}. *)
13191319+val status_view_jsont : status_view Jsont.t
1311132013121312-(** 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. *)
1313132113141314-type declared_age_pref = {
13151315- is_over_age13 : bool option; (** Indicates if the user has declared that they are over 13 years of age. *)
13161316- is_over_age16 : bool option; (** Indicates if the user has declared that they are over 16 years of age. *)
13171317- is_over_age18 : bool option; (** Indicates if the user has declared that they are over 18 years of age. *)
13221322+type thread_view_pref = {
13231323+ sort : string option; (** Sorting mode for threads. *)
13181324}
1319132513201320-(** Jsont codec for {!type:declared_age_pref}. *)
13211321-val declared_age_pref_jsont : declared_age_pref Jsont.t
13261326+(** Jsont codec for {!type:thread_view_pref}. *)
13271327+val thread_view_pref_jsont : thread_view_pref Jsont.t
1322132813291329+(** Preferences for how verified accounts appear in the app. *)
1323133013241324-type content_label_pref = {
13251325- label : string;
13261326- labeler_did : string option; (** Which labeler does this preference apply to? If undefined, applies globally. *)
13271327- visibility : string;
13311331+type verification_prefs = {
13321332+ hide_badges : bool option; (** Hide the blue check badges for verified accounts and trusted verifiers. *)
13281333}
1329133413301330-(** Jsont codec for {!type:content_label_pref}. *)
13311331-val content_label_pref_jsont : content_label_pref Jsont.t
13351335+(** Jsont codec for {!type:verification_prefs}. *)
13361336+val verification_prefs_jsont : verification_prefs Jsont.t
1332133713331333-(** If set, an active progress guide. Once completed, can be set to undefined. Should have unspecced fields tracking progress. *)
13381338+(** An individual verification for an associated subject. *)
1334133913351335-type bsky_app_progress_guide = {
13361336- guide : string;
13401340+type verification_view = {
13411341+ created_at : string; (** Timestamp when the verification was created. *)
13421342+ is_valid : bool; (** True if the verification passes validation, otherwise false. *)
13431343+ issuer : string; (** The user who issued this verification. *)
13441344+ uri : string; (** The AT-URI of the verification record. *)
13371345}
1338134613391339-(** Jsont codec for {!type:bsky_app_progress_guide}. *)
13401340-val bsky_app_progress_guide_jsont : bsky_app_progress_guide Jsont.t
13471347+(** Jsont codec for {!type:verification_view}. *)
13481348+val verification_view_jsont : verification_view Jsont.t
1341134913501350+(** A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this. *)
1342135113431343-type adult_content_pref = {
13441344- enabled : bool;
13521352+type bsky_app_state_pref = {
13531353+ active_progress_guide : Jsont.json option;
13541354+ nuxs : Jsont.json list option; (** Storage for NUXs the user has encountered. *)
13551355+ queued_nudges : string list option; (** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. *)
13451356}
1346135713471347-(** Jsont codec for {!type:adult_content_pref}. *)
13481348-val adult_content_pref_jsont : adult_content_pref Jsont.t
13581358+(** Jsont codec for {!type:bsky_app_state_pref}. *)
13591359+val bsky_app_state_pref_jsont : bsky_app_state_pref Jsont.t
1349136013501350-(** Represents the verification information about the user this object is attached to. *)
1351136113521352-type verification_state = {
13531353- trusted_verifier_status : string; (** The user's status as a trusted verifier. *)
13541354- verifications : Jsont.json list; (** All verifications issued by trusted verifiers on behalf of this user. Verifications by untrusted verifiers are not included. *)
13551355- verified_status : string; (** The user's status as a verified account. *)
13621362+type labelers_pref = {
13631363+ labelers : Jsont.json list;
13561364}
1357136513581358-(** Jsont codec for {!type:verification_state}. *)
13591359-val verification_state_jsont : verification_state Jsont.t
13661366+(** Jsont codec for {!type:labelers_pref}. *)
13671367+val labelers_pref_jsont : labelers_pref Jsont.t
1360136813691369+(** A word that the account owner has muted. *)
1361137013621362-type saved_feeds_pref_v2 = {
13631363- items : Jsont.json list;
13711371+type muted_word = {
13721372+ actor_target : string option; (** Groups of users to apply the muted word to. If undefined, applies to all users. *)
13731373+ expires_at : string option; (** The date and time at which the muted word will expire and no longer be applied. *)
13741374+ id : string option;
13751375+ targets : Jsont.json list; (** The intended targets of the muted word. *)
13761376+ value : string; (** The muted word itself. *)
13641377}
1365137813661366-(** Jsont codec for {!type:saved_feeds_pref_v2}. *)
13671367-val saved_feeds_pref_v2_jsont : saved_feeds_pref_v2 Jsont.t
13791379+(** Jsont codec for {!type:muted_word}. *)
13801380+val muted_word_jsont : muted_word Jsont.t
136813811369138213701383type profile_associated = {
···13791392(** Jsont codec for {!type:profile_associated}. *)
13801393val profile_associated_jsont : profile_associated Jsont.t
1381139413821382-(** A word that the account owner has muted. *)
1383139513841384-type muted_word = {
13851385- actor_target : string option; (** Groups of users to apply the muted word to. If undefined, applies to all users. *)
13861386- expires_at : string option; (** The date and time at which the muted word will expire and no longer be applied. *)
13871387- id : string option;
13881388- targets : Jsont.json list; (** The intended targets of the muted word. *)
13891389- value : string; (** The muted word itself. *)
13961396+type saved_feeds_pref_v2 = {
13971397+ items : Jsont.json list;
13901398}
1391139913921392-(** Jsont codec for {!type:muted_word}. *)
13931393-val muted_word_jsont : muted_word Jsont.t
14001400+(** Jsont codec for {!type:saved_feeds_pref_v2}. *)
14011401+val saved_feeds_pref_v2_jsont : saved_feeds_pref_v2 Jsont.t
1394140214031403+(** Represents the verification information about the user this object is attached to. *)
1395140413961396-type labelers_pref = {
13971397- labelers : Jsont.json list;
14051405+type verification_state = {
14061406+ trusted_verifier_status : string; (** The user's status as a trusted verifier. *)
14071407+ verifications : Jsont.json list; (** All verifications issued by trusted verifiers on behalf of this user. Verifications by untrusted verifiers are not included. *)
14081408+ verified_status : string; (** The user's status as a verified account. *)
13981409}
1399141014001400-(** Jsont codec for {!type:labelers_pref}. *)
14011401-val labelers_pref_jsont : labelers_pref Jsont.t
14021402-14031403-(** A grab bag of state that's specific to the bsky.app program. Third-party apps shouldn't use this. *)
14041404-14051405-type bsky_app_state_pref = {
14061406- active_progress_guide : Jsont.json option;
14071407- nuxs : Jsont.json list option; (** Storage for NUXs the user has encountered. *)
14081408- queued_nudges : string list option; (** An array of tokens which identify nudges (modals, popups, tours, highlight dots) that should be shown to the user. *)
14091409-}
14101410-14111411-(** Jsont codec for {!type:bsky_app_state_pref}. *)
14121412-val bsky_app_state_pref_jsont : bsky_app_state_pref Jsont.t
14111411+(** Jsont codec for {!type:verification_state}. *)
14121412+val verification_state_jsont : verification_state Jsont.t
141314131414141414151415type muted_words_pref = {
···14191419(** Jsont codec for {!type:muted_words_pref}. *)
14201420val muted_words_pref_jsont : muted_words_pref Jsont.t
1421142114221422-(** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. *)
14221422+(** The subject's followers whom you also follow *)
1423142314241424-type viewer_state = {
14251425- activity_subscription : Jsont.json option; (** This property is present only in selected cases, as an optimization. *)
14261426- blocked_by : bool option;
14271427- blocking : string option;
14281428- blocking_by_list : Jsont.json option;
14291429- followed_by : string option;
14301430- following : string option;
14311431- known_followers : Jsont.json option; (** This property is present only in selected cases, as an optimization. *)
14321432- muted : bool option;
14331433- muted_by_list : Jsont.json option;
14241424+type known_followers = {
14251425+ count : int;
14261426+ followers : Jsont.json list;
14341427}
1435142814361436-(** Jsont codec for {!type:viewer_state}. *)
14371437-val viewer_state_jsont : viewer_state Jsont.t
14291429+(** Jsont codec for {!type:known_followers}. *)
14301430+val known_followers_jsont : known_followers Jsont.t
143814311439143214401440-type profile_view_detailed = {
14331433+type profile_view = {
14411434 associated : Jsont.json option;
14421435 avatar : string option;
14431443- banner : string option;
14441436 created_at : string option;
14451437 debug : Jsont.json option; (** Debug information for internal development *)
14461438 description : string option;
14471439 did : string;
14481440 display_name : string option;
14491449- followers_count : int option;
14501450- follows_count : int option;
14511441 handle : string;
14521442 indexed_at : string option;
14531453- joined_via_starter_pack : Jsont.json option;
14541443 labels : Com.Atproto.Label.Defs.label list option;
14551455- pinned_post : Com.Atproto.Repo.StrongRef.main option;
14561456- posts_count : int option;
14571444 pronouns : string option;
14581445 status : Jsont.json option;
14591446 verification : Jsont.json option;
14601447 viewer : Jsont.json option;
14611461- website : string option;
14621448}
1463144914641464-(** Jsont codec for {!type:profile_view_detailed}. *)
14651465-val profile_view_detailed_jsont : profile_view_detailed Jsont.t
14501450+(** Jsont codec for {!type:profile_view}. *)
14511451+val profile_view_jsont : profile_view Jsont.t
146614521467145314681454type profile_view_basic = {
···14841470val profile_view_basic_jsont : profile_view_basic Jsont.t
148514711486147214871487-type profile_view = {
14731473+type profile_view_detailed = {
14881474 associated : Jsont.json option;
14891475 avatar : string option;
14761476+ banner : string option;
14901477 created_at : string option;
14911478 debug : Jsont.json option; (** Debug information for internal development *)
14921479 description : string option;
14931480 did : string;
14941481 display_name : string option;
14821482+ followers_count : int option;
14831483+ follows_count : int option;
14951484 handle : string;
14961485 indexed_at : string option;
14861486+ joined_via_starter_pack : Jsont.json option;
14971487 labels : Com.Atproto.Label.Defs.label list option;
14881488+ pinned_post : Com.Atproto.Repo.StrongRef.main option;
14891489+ posts_count : int option;
14981490 pronouns : string option;
14991491 status : Jsont.json option;
15001492 verification : Jsont.json option;
15011493 viewer : Jsont.json option;
14941494+ website : string option;
15021495}
1503149615041504-(** Jsont codec for {!type:profile_view}. *)
15051505-val profile_view_jsont : profile_view Jsont.t
14971497+(** Jsont codec for {!type:profile_view_detailed}. *)
14981498+val profile_view_detailed_jsont : profile_view_detailed Jsont.t
1506149915071507-(** The subject's followers whom you also follow *)
15081508-15091509-type known_followers = {
15101510- count : int;
15111511- followers : Jsont.json list;
15121512-}
15131513-15141514-(** Jsont codec for {!type:known_followers}. *)
15151515-val known_followers_jsont : known_followers Jsont.t
15161516-15171517- end
15181518- module GetPreferences : sig
15191519-(** Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth. *)
15201520-15211521-(** Query/procedure parameters. *)
15221522-type params = unit
15231523-15241524-(** Jsont codec for {!type:params}. *)
15251525-val params_jsont : params Jsont.t
15261526-15001500+(** Metadata about the requesting account's relationship with the subject account. Only has meaningful content for authed requests. *)
1527150115281528-type output = {
15291529- preferences : Jsont.json;
15021502+type viewer_state = {
15031503+ activity_subscription : Jsont.json option; (** This property is present only in selected cases, as an optimization. *)
15041504+ blocked_by : bool option;
15051505+ blocking : string option;
15061506+ blocking_by_list : Jsont.json option;
15071507+ followed_by : string option;
15081508+ following : string option;
15091509+ known_followers : Jsont.json option; (** This property is present only in selected cases, as an optimization. *)
15101510+ muted : bool option;
15111511+ muted_by_list : Jsont.json option;
15301512}
1531151315321532-(** Jsont codec for {!type:output}. *)
15331533-val output_jsont : output Jsont.t
15141514+(** Jsont codec for {!type:viewer_state}. *)
15151515+val viewer_state_jsont : viewer_state Jsont.t
1534151615351517 end
15361518 module SearchActorsTypeahead : sig
···15551537val output_jsont : output Jsont.t
1556153815571539 end
15581558- module GetProfile : sig
15591559-(** Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth. *)
15601560-15611561-(** Query/procedure parameters. *)
15621562-type params = {
15631563- actor : string; (** Handle or DID of account to fetch profile of. *)
15641564-}
15651565-15661566-(** Jsont codec for {!type:params}. *)
15671567-val params_jsont : params Jsont.t
15681568-15691569-15701570-type output = Jsont.json
15711571-15721572-(** Jsont codec for {!type:output}. *)
15731573-val output_jsont : output Jsont.t
15741574-15751575- end
15761540 module SearchActors : sig
15771541(** Find actors (profiles) matching search criteria. Does not require auth. *)
15781542···15971561val output_jsont : output Jsont.t
1598156215991563 end
15641564+ module PutPreferences : sig
15651565+(** Set the private preferences attached to the account. *)
15661566+15671567+15681568+type input = {
15691569+ preferences : Jsont.json;
15701570+}
15711571+15721572+(** Jsont codec for {!type:input}. *)
15731573+val input_jsont : input Jsont.t
15741574+15751575+ end
16001576 module GetSuggestions : sig
16011577(** Get a list of suggested actors. Expected use is discovery of accounts to follow during new account onboarding. *)
16021578···16401616val output_jsont : output Jsont.t
1641161716421618 end
16431643- module PutPreferences : sig
16441644-(** Set the private preferences attached to the account. *)
16451645-16461646-16471647-type input = {
16481648- preferences : Jsont.json;
16491649-}
16501650-16511651-(** Jsont codec for {!type:input}. *)
16521652-val input_jsont : input Jsont.t
16531653-16541654- end
16551655- end
16561656- module Contact : sig
16571657- module Defs : sig
16581658-16591659-type sync_status = {
16601660- 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. *)
16611661- synced_at : string; (** Last date when contacts where imported. *)
16621662-}
16631663-16641664-(** Jsont codec for {!type:sync_status}. *)
16651665-val sync_status_jsont : sync_status Jsont.t
16661666-16671667-(** A stash object to be sent via bsync representing a notification to be created. *)
16681668-16691669-type notification = {
16701670- from : string; (** The DID of who this notification comes from. *)
16711671- to_ : string; (** The DID of who this notification should go to. *)
16721672-}
16731673-16741674-(** Jsont codec for {!type:notification}. *)
16751675-val notification_jsont : notification Jsont.t
16761676-16771677-(** 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. *)
16781678-16791679-type match_and_contact_index = {
16801680- contact_index : int; (** The index of this match in the import contact input. *)
16811681- match_ : Jsont.json; (** Profile of the matched user. *)
16821682-}
16831683-16841684-(** Jsont codec for {!type:match_and_contact_index}. *)
16851685-val match_and_contact_index_jsont : match_and_contact_index Jsont.t
16861686-16871687- end
16881688- module RemoveData : sig
16891689-(** Removes all stored hashes used for contact matching, existing matches, and sync status. Requires authentication. *)
16901690-16191619+ module GetProfile : sig
16201620+(** Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth. *)
1691162116921692-type input = unit
16931693-16941694-(** Jsont codec for {!type:input}. *)
16951695-val input_jsont : input Jsont.t
16961696-16971697-16981698-type output = unit
16991699-17001700-(** Jsont codec for {!type:output}. *)
17011701-val output_jsont : output Jsont.t
17021702-17031703- end
17041704- module DismissMatch : sig
17051705-(** Removes a match that was found via contact import. It shouldn't appear again if the same contact is re-imported. Requires authentication. *)
17061706-17071707-17081708-type input = {
17091709- subject : string; (** The subject's DID to dismiss the match with. *)
16221622+(** Query/procedure parameters. *)
16231623+type params = {
16241624+ actor : string; (** Handle or DID of account to fetch profile of. *)
17101625}
1711162617121712-(** Jsont codec for {!type:input}. *)
17131713-val input_jsont : input Jsont.t
16271627+(** Jsont codec for {!type:params}. *)
16281628+val params_jsont : params Jsont.t
171416291715163017161716-type output = unit
16311631+type output = Jsont.json
1717163217181633(** Jsont codec for {!type:output}. *)
17191634val output_jsont : output Jsont.t
1720163517211636 end
17221722- module GetMatches : sig
17231723-(** Returns the matched contacts (contacts that were mutually imported). Excludes dismissed matches. Requires authentication. *)
16371637+ module GetPreferences : sig
16381638+(** Get private preferences attached to the current account. Expected use is synchronization between multiple devices, and import/export during account migration. Requires auth. *)
1724163917251640(** Query/procedure parameters. *)
17261726-type params = {
17271727- cursor : string option;
17281728- limit : int option;
17291729-}
16411641+type params = unit
1730164217311643(** Jsont codec for {!type:params}. *)
17321644val params_jsont : params Jsont.t
173316451734164617351647type output = {
17361736- cursor : string option;
17371737- matches : Jsont.json list;
16481648+ preferences : Jsont.json;
17381649}
1739165017401651(** Jsont codec for {!type:output}. *)
17411652val output_jsont : output Jsont.t
1742165317431654 end
17441744- module VerifyPhone : sig
17451745-(** Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication. *)
17461746-16551655+ end
16561656+ module Graph : sig
16571657+ module Verification : sig
16581658+(** 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. *)
1747165917481748-type input = {
17491749- code : string; (** The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`. *)
17501750- phone : string; (** The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`. *)
16601660+type main = {
16611661+ created_at : string; (** Date of when the verification was created. *)
16621662+ 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. *)
16631663+ 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. *)
16641664+ subject : string; (** DID of the subject the verification applies to. *)
17511665}
1752166617531753-(** Jsont codec for {!type:input}. *)
17541754-val input_jsont : input Jsont.t
17551755-17561756-17571757-type output = {
17581758- token : string; (** JWT to be used in a call to `app.bsky.contact.importContacts`. It is only valid for a single call. *)
17591759-}
17601760-17611761-(** Jsont codec for {!type:output}. *)
17621762-val output_jsont : output Jsont.t
16671667+(** Jsont codec for {!type:main}. *)
16681668+val main_jsont : main Jsont.t
1763166917641670 end
17651765- module StartPhoneVerification : sig
17661766-(** 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. *)
16711671+ module UnmuteThread : sig
16721672+(** Unmutes the specified thread. Requires auth. *)
176716731768167417691675type input = {
17701770- phone : string; (** The phone number to receive the code via SMS. *)
16761676+ root : string;
17711677}
1772167817731679(** Jsont codec for {!type:input}. *)
17741680val input_jsont : input Jsont.t
1775168117761776-17771777-type output = unit
17781778-17791779-(** Jsont codec for {!type:output}. *)
17801780-val output_jsont : output Jsont.t
17811781-17821682 end
17831783- module SendNotification : sig
17841784-(** System endpoint to send notifications related to contact imports. Requires role authentication. *)
16831683+ module UnmuteActorList : sig
16841684+(** Unmutes the specified list of accounts. Requires auth. *)
178516851786168617871687type input = {
17881788- from : string; (** The DID of who this notification comes from. *)
17891789- to_ : string; (** The DID of who this notification should go to. *)
16881688+ list_ : string;
17901689}
1791169017921691(** Jsont codec for {!type:input}. *)
17931692val input_jsont : input Jsont.t
1794169317951795-17961796-type output = unit
17971797-17981798-(** Jsont codec for {!type:output}. *)
17991799-val output_jsont : output Jsont.t
18001800-18011694 end
18021802- module GetSyncStatus : sig
18031803-(** Gets the user's current contact import status. Requires authentication. *)
18041804-18051805-(** Query/procedure parameters. *)
18061806-type params = unit
18071807-18081808-(** Jsont codec for {!type:params}. *)
18091809-val params_jsont : params Jsont.t
18101810-18111811-18121812-type output = {
18131813- 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. *)
18141814-}
18151815-18161816-(** Jsont codec for {!type:output}. *)
18171817-val output_jsont : output Jsont.t
18181818-18191819- end
18201820- module ImportContacts : sig
18211821-(** Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication. *)
16951695+ module UnmuteActor : sig
16961696+(** Unmutes the specified account. Requires auth. *)
182216971823169818241699type input = {
18251825- 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`. *)
18261826- token : string; (** JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`. *)
17001700+ actor : string;
18271701}
1828170218291703(** Jsont codec for {!type:input}. *)
18301704val input_jsont : input Jsont.t
18311831-18321832-18331833-type output = {
18341834- 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. *)
18351835-}
18361836-18371837-(** Jsont codec for {!type:output}. *)
18381838-val output_jsont : output Jsont.t
1839170518401706 end
18411841- end
18421842- module Graph : sig
18431707 module Starterpack : sig
1844170818451709type feed_item = {
···18641728val main_jsont : main Jsont.t
1865172918661730 end
18671867- module GetFollows : sig
18681868-(** Enumerates accounts which a specified account (actor) follows. *)
18691869-18701870-(** Query/procedure parameters. *)
18711871-type params = {
18721872- actor : string;
18731873- cursor : string option;
18741874- limit : int option;
18751875-}
18761876-18771877-(** Jsont codec for {!type:params}. *)
18781878-val params_jsont : params Jsont.t
17311731+ module MuteThread : sig
17321732+(** Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth. *)
187917331880173418811881-type output = {
18821882- cursor : string option;
18831883- follows : Jsont.json list;
18841884- subject : Jsont.json;
17351735+type input = {
17361736+ root : string;
18851737}
1886173818871887-(** Jsont codec for {!type:output}. *)
18881888-val output_jsont : output Jsont.t
17391739+(** Jsont codec for {!type:input}. *)
17401740+val input_jsont : input Jsont.t
1889174118901742 end
18911891- module GetSuggestedFollowsByActor : sig
18921892-(** Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account. *)
17431743+ module MuteActorList : sig
17441744+(** Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth. *)
1893174518941894-(** Query/procedure parameters. *)
18951895-type params = {
18961896- actor : string;
17461746+17471747+type input = {
17481748+ list_ : string;
18971749}
1898175018991899-(** Jsont codec for {!type:params}. *)
19001900-val params_jsont : params Jsont.t
17511751+(** Jsont codec for {!type:input}. *)
17521752+val input_jsont : input Jsont.t
1901175317541754+ end
17551755+ module MuteActor : sig
17561756+(** Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth. *)
1902175719031903-type output = {
19041904- is_fallback : bool option; (** If true, response has fallen-back to generic results, and is not scoped using relativeToDid *)
19051905- rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
19061906- suggestions : Jsont.json list;
17581758+17591759+type input = {
17601760+ actor : string;
19071761}
1908176219091909-(** Jsont codec for {!type:output}. *)
19101910-val output_jsont : output Jsont.t
17631763+(** Jsont codec for {!type:input}. *)
17641764+val input_jsont : input Jsont.t
1911176519121766 end
19131913- module Block : sig
19141914-(** Record declaring a 'block' relationship against another account. NOTE: blocks are public in Bluesky; see blog posts for details. *)
17671767+ module Listitem : sig
17681768+(** Record representing an account's inclusion on a specific list. The AppView will ignore duplicate listitem records. *)
1915176919161770type main = {
19171771 created_at : string;
19181918- subject : string; (** DID of the account to be blocked. *)
17721772+ list_ : string; (** Reference (AT-URI) to the list record (app.bsky.graph.list). *)
17731773+ subject : string; (** The account which is included on the list. *)
19191774}
1920177519211776(** Jsont codec for {!type:main}. *)
···19341789val main_jsont : main Jsont.t
1935179019361791 end
19371937- module MuteThread : sig
19381938-(** Mutes a thread preventing notifications from the thread and any of its children. Mutes are private in Bluesky. Requires auth. *)
17921792+ module GetSuggestedFollowsByActor : sig
17931793+(** Enumerates follows similar to a given account (actor). Expected use is to recommend additional accounts immediately after following one account. *)
17941794+17951795+(** Query/procedure parameters. *)
17961796+type params = {
17971797+ actor : string;
17981798+}
17991799+18001800+(** Jsont codec for {!type:params}. *)
18011801+val params_jsont : params Jsont.t
193918021940180319411941-type input = {
19421942- root : string;
18041804+type output = {
18051805+ is_fallback : bool option; (** If true, response has fallen-back to generic results, and is not scoped using relativeToDid *)
18061806+ rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
18071807+ suggestions : Jsont.json list;
19431808}
1944180919451945-(** Jsont codec for {!type:input}. *)
19461946-val input_jsont : input Jsont.t
18101810+(** Jsont codec for {!type:output}. *)
18111811+val output_jsont : output Jsont.t
1947181219481813 end
19491949- module GetFollowers : sig
19501950-(** Enumerates accounts which follow a specified account (actor). *)
18141814+ module GetMutes : sig
18151815+(** Enumerates accounts that the requesting account (actor) currently has muted. Requires auth. *)
1951181619521817(** Query/procedure parameters. *)
19531818type params = {
19541954- actor : string;
19551819 cursor : string option;
19561820 limit : int option;
19571821}
···1962182619631827type output = {
19641828 cursor : string option;
19651965- followers : Jsont.json list;
19661966- subject : Jsont.json;
18291829+ mutes : Jsont.json list;
19671830}
1968183119691832(** Jsont codec for {!type:output}. *)
19701833val output_jsont : output Jsont.t
1971183419721835 end
19731973- module UnmuteThread : sig
19741974-(** Unmutes the specified thread. Requires auth. *)
18361836+ module GetKnownFollowers : sig
18371837+(** Enumerates accounts which follow a specified account (actor) and are followed by the viewer. *)
1975183819761976-19771977-type input = {
19781978- root : string;
18391839+(** Query/procedure parameters. *)
18401840+type params = {
18411841+ actor : string;
18421842+ cursor : string option;
18431843+ limit : int option;
19791844}
1980184519811981-(** Jsont codec for {!type:input}. *)
19821982-val input_jsont : input Jsont.t
18461846+(** Jsont codec for {!type:params}. *)
18471847+val params_jsont : params Jsont.t
1983184819841984- end
19851985- module Follow : sig
19861986-(** Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView. *)
1987184919881988-type main = {
19891989- created_at : string;
19901990- subject : string;
19911991- via : Com.Atproto.Repo.StrongRef.main option;
18501850+type output = {
18511851+ cursor : string option;
18521852+ followers : Jsont.json list;
18531853+ subject : Jsont.json;
19921854}
1993185519941994-(** Jsont codec for {!type:main}. *)
19951995-val main_jsont : main Jsont.t
18561856+(** Jsont codec for {!type:output}. *)
18571857+val output_jsont : output Jsont.t
1996185819971859 end
19981998- module UnmuteActor : sig
19991999-(** Unmutes the specified account. Requires auth. *)
18601860+ module GetFollows : sig
18611861+(** Enumerates accounts which a specified account (actor) follows. *)
2000186220012001-20022002-type input = {
18631863+(** Query/procedure parameters. *)
18641864+type params = {
20031865 actor : string;
20042004-}
20052005-20062006-(** Jsont codec for {!type:input}. *)
20072007-val input_jsont : input Jsont.t
20082008-20092009- end
20102010- module MuteActorList : sig
20112011-(** Creates a mute relationship for the specified list of accounts. Mutes are private in Bluesky. Requires auth. *)
20122012-20132013-20142014-type input = {
20152015- list_ : string;
18661866+ cursor : string option;
18671867+ limit : int option;
20161868}
2017186920182018-(** Jsont codec for {!type:input}. *)
20192019-val input_jsont : input Jsont.t
20202020-20212021- end
20222022- module UnmuteActorList : sig
20232023-(** Unmutes the specified list of accounts. Requires auth. *)
18701870+(** Jsont codec for {!type:params}. *)
18711871+val params_jsont : params Jsont.t
202418722025187320262026-type input = {
20272027- list_ : string;
18741874+type output = {
18751875+ cursor : string option;
18761876+ follows : Jsont.json list;
18771877+ subject : Jsont.json;
20281878}
2029187920302030-(** Jsont codec for {!type:input}. *)
20312031-val input_jsont : input Jsont.t
18801880+(** Jsont codec for {!type:output}. *)
18811881+val output_jsont : output Jsont.t
2032188220331883 end
20342034- module GetKnownFollowers : sig
20352035-(** Enumerates accounts which follow a specified account (actor) and are followed by the viewer. *)
18841884+ module GetFollowers : sig
18851885+(** Enumerates accounts which follow a specified account (actor). *)
2036188620371887(** Query/procedure parameters. *)
20381888type params = {
···20551905val output_jsont : output Jsont.t
2056190620571907 end
20582058- module MuteActor : sig
20592059-(** Creates a mute relationship for the specified account. Mutes are private in Bluesky. Requires auth. *)
19081908+ module GetBlocks : sig
19091909+(** Enumerates which accounts the requesting account is currently blocking. Requires auth. *)
19101910+19111911+(** Query/procedure parameters. *)
19121912+type params = {
19131913+ cursor : string option;
19141914+ limit : int option;
19151915+}
2060191619171917+(** Jsont codec for {!type:params}. *)
19181918+val params_jsont : params Jsont.t
2061191920622062-type input = {
20632063- actor : string;
19201920+19211921+type output = {
19221922+ blocks : Jsont.json list;
19231923+ cursor : string option;
20641924}
2065192520662066-(** Jsont codec for {!type:input}. *)
20672067-val input_jsont : input Jsont.t
19261926+(** Jsont codec for {!type:output}. *)
19271927+val output_jsont : output Jsont.t
2068192820691929 end
20702070- module Listitem : sig
20712071-(** Record representing an account's inclusion on a specific list. The AppView will ignore duplicate listitem records. *)
19301930+ module Follow : sig
19311931+(** Record declaring a social 'follow' relationship of another account. Duplicate follows will be ignored by the AppView. *)
2072193220731933type main = {
20741934 created_at : string;
20752075- list_ : string; (** Reference (AT-URI) to the list record (app.bsky.graph.list). *)
20762076- subject : string; (** The account which is included on the list. *)
19351935+ subject : string;
19361936+ via : Com.Atproto.Repo.StrongRef.main option;
20771937}
2078193820791939(** Jsont codec for {!type:main}. *)
···2081194120821942 end
20831943 module Defs : sig
19441944+(** A list of actors used for curation purposes such as list feeds or interaction gating. *)
2084194520852085-type starter_pack_view_basic = {
20862086- cid : string;
20872087- creator : Jsont.json;
20882088- indexed_at : string;
20892089- joined_all_time_count : int option;
20902090- joined_week_count : int option;
20912091- labels : Com.Atproto.Label.Defs.label list option;
20922092- list_item_count : int option;
20932093- record : Jsont.json;
19461946+type curatelist = string
19471947+val curatelist_jsont : curatelist Jsont.t
19481948+19491949+19501950+type list_item_view = {
19511951+ subject : Jsont.json;
20941952 uri : string;
20951953}
2096195420972097-(** Jsont codec for {!type:starter_pack_view_basic}. *)
20982098-val starter_pack_view_basic_jsont : starter_pack_view_basic Jsont.t
19551955+(** Jsont codec for {!type:list_item_view}. *)
19561956+val list_item_view_jsont : list_item_view Jsont.t
2099195721002100-(** lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) *)
19581958+19591959+type list_purpose = string
19601960+val list_purpose_jsont : list_purpose Jsont.t
19611961+2101196221022102-type relationship = {
21032103- blocked_by : string option; (** if the actor is blocked by this DID, contains the AT-URI of the block record *)
21042104- 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 *)
21052105- blocking : string option; (** if the actor blocks this DID, this is the AT-URI of the block record *)
21062106- blocking_by_list : string option; (** if the actor blocks this DID via a block list, this is the AT-URI of the listblock record *)
21072107- did : string;
21082108- followed_by : string option; (** if the actor is followed by this DID, contains the AT-URI of the follow record *)
21092109- following : string option; (** if the actor follows this DID, this is the AT-URI of the follow record *)
19631963+type list_viewer_state = {
19641964+ blocked : string option;
19651965+ muted : bool option;
21101966}
2111196721122112-(** Jsont codec for {!type:relationship}. *)
21132113-val relationship_jsont : relationship Jsont.t
19681968+(** Jsont codec for {!type:list_viewer_state}. *)
19691969+val list_viewer_state_jsont : list_viewer_state Jsont.t
2114197021152115-(** A list of actors used for only for reference purposes such as within a starter pack. *)
19711971+(** A list of actors to apply an aggregate moderation action (mute/block) on. *)
2116197221172117-type referencelist = string
21182118-val referencelist_jsont : referencelist Jsont.t
19731973+type modlist = string
19741974+val modlist_jsont : modlist Jsont.t
2119197521201976(** indicates that a handle or DID could not be resolved *)
21211977···21271983(** Jsont codec for {!type:not_found_actor}. *)
21281984val not_found_actor_jsont : not_found_actor Jsont.t
2129198521302130-(** A list of actors to apply an aggregate moderation action (mute/block) on. *)
19861986+(** A list of actors used for only for reference purposes such as within a starter pack. *)
2131198721322132-type modlist = string
21332133-val modlist_jsont : modlist Jsont.t
19881988+type referencelist = string
19891989+val referencelist_jsont : referencelist Jsont.t
2134199019911991+(** lists the bi-directional graph relationships between one actor (not indicated in the object), and the target actors (the DID included in the object) *)
2135199221362136-type list_viewer_state = {
21372137- blocked : string option;
21382138- muted : bool option;
19931993+type relationship = {
19941994+ blocked_by : string option; (** if the actor is blocked by this DID, contains the AT-URI of the block record *)
19951995+ 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 *)
19961996+ blocking : string option; (** if the actor blocks this DID, this is the AT-URI of the block record *)
19971997+ blocking_by_list : string option; (** if the actor blocks this DID via a block list, this is the AT-URI of the listblock record *)
19981998+ did : string;
19991999+ followed_by : string option; (** if the actor is followed by this DID, contains the AT-URI of the follow record *)
20002000+ following : string option; (** if the actor follows this DID, this is the AT-URI of the follow record *)
21392001}
2140200221412141-(** Jsont codec for {!type:list_viewer_state}. *)
21422142-val list_viewer_state_jsont : list_viewer_state Jsont.t
20032003+(** Jsont codec for {!type:relationship}. *)
20042004+val relationship_jsont : relationship Jsont.t
214320052144200621452145-type list_purpose = string
21462146-val list_purpose_jsont : list_purpose Jsont.t
21472147-21482148-21492149-type list_item_view = {
21502150- subject : Jsont.json;
20072007+type starter_pack_view_basic = {
20082008+ cid : string;
20092009+ creator : Jsont.json;
20102010+ indexed_at : string;
20112011+ joined_all_time_count : int option;
20122012+ joined_week_count : int option;
20132013+ labels : Com.Atproto.Label.Defs.label list option;
20142014+ list_item_count : int option;
20152015+ record : Jsont.json;
21512016 uri : string;
21522017}
2153201821542154-(** Jsont codec for {!type:list_item_view}. *)
21552155-val list_item_view_jsont : list_item_view Jsont.t
20192019+(** Jsont codec for {!type:starter_pack_view_basic}. *)
20202020+val starter_pack_view_basic_jsont : starter_pack_view_basic Jsont.t
2156202121572157-(** A list of actors used for curation purposes such as list feeds or interaction gating. *)
2158202221592159-type curatelist = string
21602160-val curatelist_jsont : curatelist Jsont.t
21612161-21622162-21632163-type list_view_basic = {
20232023+type list_view = {
21642024 avatar : string option;
21652025 cid : string;
21662166- indexed_at : string option;
20262026+ creator : Jsont.json;
20272027+ description : string option;
20282028+ description_facets : Richtext.Facet.main list option;
20292029+ indexed_at : string;
21672030 labels : Com.Atproto.Label.Defs.label list option;
21682031 list_item_count : int option;
21692032 name : string;
···21722035 viewer : Jsont.json option;
21732036}
2174203721752175-(** Jsont codec for {!type:list_view_basic}. *)
21762176-val list_view_basic_jsont : list_view_basic Jsont.t
20382038+(** Jsont codec for {!type:list_view}. *)
20392039+val list_view_jsont : list_view Jsont.t
217720402178204121792179-type list_view = {
20422042+type list_view_basic = {
21802043 avatar : string option;
21812044 cid : string;
21822182- creator : Jsont.json;
21832183- description : string option;
21842184- description_facets : Richtext.Facet.main list option;
21852185- indexed_at : string;
20452045+ indexed_at : string option;
21862046 labels : Com.Atproto.Label.Defs.label list option;
21872047 list_item_count : int option;
21882048 name : string;
···21912051 viewer : Jsont.json option;
21922052}
2193205321942194-(** Jsont codec for {!type:list_view}. *)
21952195-val list_view_jsont : list_view Jsont.t
20542054+(** Jsont codec for {!type:list_view_basic}. *)
20552055+val list_view_basic_jsont : list_view_basic Jsont.t
219620562197205721982058type starter_pack_view = {
···22132073val starter_pack_view_jsont : starter_pack_view Jsont.t
2214207422152075 end
22162216- module GetBlocks : sig
22172217-(** Enumerates which accounts the requesting account is currently blocking. Requires auth. *)
20762076+ module Block : sig
20772077+(** Record declaring a 'block' relationship against another account. NOTE: blocks are public in Bluesky; see blog posts for details. *)
20782078+20792079+type main = {
20802080+ created_at : string;
20812081+ subject : string; (** DID of the account to be blocked. *)
20822082+}
20832083+20842084+(** Jsont codec for {!type:main}. *)
20852085+val main_jsont : main Jsont.t
20862086+20872087+ end
20882088+ module SearchStarterPacks : sig
20892089+(** Find starter packs matching search criteria. Does not require auth. *)
2218209022192091(** Query/procedure parameters. *)
22202092type params = {
22212093 cursor : string option;
22222094 limit : int option;
20952095+ q : string; (** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
22232096}
2224209722252098(** Jsont codec for {!type:params}. *)
···222721002228210122292102type output = {
22302230- blocks : Jsont.json list;
22312103 cursor : string option;
21042104+ starter_packs : Jsont.json list;
22322105}
2233210622342107(** Jsont codec for {!type:output}. *)
22352108val output_jsont : output Jsont.t
2236210922372110 end
22382238- module Verification : sig
22392239-(** 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. *)
21112111+ module List : sig
21122112+(** Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists. *)
2240211322412114type main = {
22422242- created_at : string; (** Date of when the verification was created. *)
22432243- 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. *)
22442244- 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. *)
22452245- subject : string; (** DID of the subject the verification applies to. *)
21152115+ avatar : Atp.Blob_ref.t option;
21162116+ created_at : string;
21172117+ description : string option;
21182118+ description_facets : Richtext.Facet.main list option;
21192119+ labels : Com.Atproto.Label.Defs.self_labels option;
21202120+ name : string; (** Display name for list; can not be empty. *)
21212121+ purpose : Jsont.json; (** Defines the purpose of the list (aka, moderation-oriented or curration-oriented) *)
22462122}
2247212322482124(** Jsont codec for {!type:main}. *)
22492125val main_jsont : main Jsont.t
2250212622512127 end
22522252- module GetMutes : sig
22532253-(** Enumerates accounts that the requesting account (actor) currently has muted. Requires auth. *)
21282128+ module GetStarterPacksWithMembership : sig
21292129+(** A starter pack and an optional list item indicating membership of a target user to that starter pack. *)
21302130+21312131+type starter_pack_with_membership = {
21322132+ list_item : Jsont.json option;
21332133+ starter_pack : Jsont.json;
21342134+}
21352135+21362136+(** Jsont codec for {!type:starter_pack_with_membership}. *)
21372137+val starter_pack_with_membership_jsont : starter_pack_with_membership Jsont.t
21382138+21392139+(** Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth. *)
2254214022552141(** Query/procedure parameters. *)
22562142type params = {
21432143+ actor : string; (** The account (actor) to check for membership. *)
22572144 cursor : string option;
22582145 limit : int option;
22592146}
···2264215122652152type output = {
22662153 cursor : string option;
22672267- mutes : Jsont.json list;
21542154+ starter_packs_with_membership : Jsont.json list;
22682155}
2269215622702157(** Jsont codec for {!type:output}. *)
22712158val output_jsont : output Jsont.t
2272215922732160 end
22742274- module GetRelationships : sig
22752275-(** Enumerates public relationships between one account, and a list of other accounts. Does not require auth. *)
21612161+ module GetStarterPacks : sig
21622162+(** Get views for a list of starter packs. *)
2276216322772164(** Query/procedure parameters. *)
22782165type params = {
22792279- actor : string; (** Primary account requesting relationships for. *)
22802280- others : string list option; (** List of 'other' accounts to be related back to the primary. *)
21662166+ uris : string list;
22812167}
2282216822832169(** Jsont codec for {!type:params}. *)
···228521712286217222872173type output = {
22882288- actor : string option;
22892289- relationships : Jsont.json list;
21742174+ starter_packs : Jsont.json list;
22902175}
2291217622922177(** Jsont codec for {!type:output}. *)
22932178val output_jsont : output Jsont.t
2294217922952180 end
22962296- module GetStarterPacksWithMembership : sig
22972297-(** A starter pack and an optional list item indicating membership of a target user to that starter pack. *)
22982298-22992299-type starter_pack_with_membership = {
23002300- list_item : Jsont.json option;
23012301- starter_pack : Jsont.json;
23022302-}
23032303-23042304-(** Jsont codec for {!type:starter_pack_with_membership}. *)
23052305-val starter_pack_with_membership_jsont : starter_pack_with_membership Jsont.t
23062306-23072307-(** Enumerates the starter packs created by the session user, and includes membership information about `actor` in those starter packs. Requires auth. *)
21812181+ module GetStarterPack : sig
21822182+(** Gets a view of a starter pack. *)
2308218323092184(** Query/procedure parameters. *)
23102185type params = {
23112311- actor : string; (** The account (actor) to check for membership. *)
23122312- cursor : string option;
23132313- limit : int option;
21862186+ starter_pack : string; (** Reference (AT-URI) of the starter pack record. *)
23142187}
2315218823162189(** Jsont codec for {!type:params}. *)
···231821912319219223202193type output = {
23212321- cursor : string option;
23222322- starter_packs_with_membership : Jsont.json list;
21942194+ starter_pack : Jsont.json;
23232195}
2324219623252197(** Jsont codec for {!type:output}. *)
23262198val output_jsont : output Jsont.t
2327219923282200 end
23292329- module GetActorStarterPacks : sig
23302330-(** Get a list of starter packs created by the actor. *)
22012201+ module GetRelationships : sig
22022202+(** Enumerates public relationships between one account, and a list of other accounts. Does not require auth. *)
2331220323322204(** Query/procedure parameters. *)
23332205type params = {
23342334- actor : string;
23352335- cursor : string option;
23362336- limit : int option;
22062206+ actor : string; (** Primary account requesting relationships for. *)
22072207+ others : string list option; (** List of 'other' accounts to be related back to the primary. *)
23372208}
2338220923392210(** Jsont codec for {!type:params}. *)
···234122122342221323432214type output = {
23442344- cursor : string option;
23452345- starter_packs : Jsont.json list;
22152215+ actor : string option;
22162216+ relationships : Jsont.json list;
23462217}
2347221823482219(** Jsont codec for {!type:output}. *)
23492220val output_jsont : output Jsont.t
2350222123512222 end
23522352- module List : sig
23532353-(** Record representing a list of accounts (actors). Scope includes both moderation-oriented lists and curration-oriented lists. *)
22232223+ module GetListsWithMembership : sig
22242224+(** A list and an optional list item indicating membership of a target user to that list. *)
2354222523552355-type main = {
23562356- avatar : Atp.Blob_ref.t option;
23572357- created_at : string;
23582358- description : string option;
23592359- description_facets : Richtext.Facet.main list option;
23602360- labels : Com.Atproto.Label.Defs.self_labels option;
23612361- name : string; (** Display name for list; can not be empty. *)
23622362- purpose : Jsont.json; (** Defines the purpose of the list (aka, moderation-oriented or curration-oriented) *)
22262226+type list_with_membership = {
22272227+ list_ : Jsont.json;
22282228+ list_item : Jsont.json option;
23632229}
2364223023652365-(** Jsont codec for {!type:main}. *)
23662366-val main_jsont : main Jsont.t
22312231+(** Jsont codec for {!type:list_with_membership}. *)
22322232+val list_with_membership_jsont : list_with_membership Jsont.t
2367223323682368- end
23692369- module SearchStarterPacks : sig
23702370-(** Find starter packs matching search criteria. Does not require auth. *)
22342234+(** 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. *)
2371223523722236(** Query/procedure parameters. *)
23732237type params = {
22382238+ actor : string; (** The account (actor) to check for membership. *)
23742239 cursor : string option;
23752240 limit : int option;
23762376- q : string; (** Search query string. Syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
22412241+ purposes : string list option; (** Optional filter by list purpose. If not specified, all supported types are returned. *)
23772242}
2378224323792244(** Jsont codec for {!type:params}. *)
···2382224723832248type output = {
23842249 cursor : string option;
23852385- starter_packs : Jsont.json list;
22502250+ lists_with_membership : Jsont.json list;
23862251}
2387225223882253(** Jsont codec for {!type:output}. *)
23892254val output_jsont : output Jsont.t
2390225523912256 end
23922392- module GetList : sig
23932393-(** Gets a 'view' (with additional context) of a specified list. *)
22572257+ module GetLists : sig
22582258+(** Enumerates the lists created by a specified account (actor). *)
2394225923952260(** Query/procedure parameters. *)
23962261type params = {
22622262+ actor : string; (** The account (actor) to enumerate lists from. *)
23972263 cursor : string option;
23982264 limit : int option;
23992399- list_ : string; (** Reference (AT-URI) of the list record to hydrate. *)
22652265+ purposes : string list option; (** Optional filter by list purpose. If not specified, all supported types are returned. *)
24002266}
2401226724022268(** Jsont codec for {!type:params}. *)
···2405227124062272type output = {
24072273 cursor : string option;
24082408- items : Jsont.json list;
24092409- list_ : Jsont.json;
22742274+ lists : Jsont.json list;
24102275}
2411227624122277(** Jsont codec for {!type:output}. *)
24132278val output_jsont : output Jsont.t
2414227924152280 end
24162416- module GetListBlocks : sig
24172417-(** Get mod lists that the requesting account (actor) is blocking. Requires auth. *)
22812281+ module GetListMutes : sig
22822282+(** Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth. *)
2418228324192284(** Query/procedure parameters. *)
24202285type params = {
···24352300val output_jsont : output Jsont.t
2436230124372302 end
24382438- module GetStarterPack : sig
24392439-(** Gets a view of a starter pack. *)
23032303+ module GetListBlocks : sig
23042304+(** Get mod lists that the requesting account (actor) is blocking. Requires auth. *)
2440230524412306(** Query/procedure parameters. *)
24422307type params = {
24432443- starter_pack : string; (** Reference (AT-URI) of the starter pack record. *)
23082308+ cursor : string option;
23092309+ limit : int option;
24442310}
2445231124462312(** Jsont codec for {!type:params}. *)
···244823142449231524502316type output = {
24512451- starter_pack : Jsont.json;
23172317+ cursor : string option;
23182318+ lists : Jsont.json list;
24522319}
2453232024542321(** Jsont codec for {!type:output}. *)
24552322val output_jsont : output Jsont.t
2456232324572324 end
24582458- module GetListsWithMembership : sig
24592459-(** A list and an optional list item indicating membership of a target user to that list. *)
24602460-24612461-type list_with_membership = {
24622462- list_ : Jsont.json;
24632463- list_item : Jsont.json option;
24642464-}
24652465-24662466-(** Jsont codec for {!type:list_with_membership}. *)
24672467-val list_with_membership_jsont : list_with_membership Jsont.t
24682468-24692469-(** 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. *)
23252325+ module GetList : sig
23262326+(** Gets a 'view' (with additional context) of a specified list. *)
2470232724712328(** Query/procedure parameters. *)
24722329type params = {
24732473- actor : string; (** The account (actor) to check for membership. *)
24742330 cursor : string option;
24752331 limit : int option;
24762476- purposes : string list option; (** Optional filter by list purpose. If not specified, all supported types are returned. *)
23322332+ list_ : string; (** Reference (AT-URI) of the list record to hydrate. *)
24772333}
2478233424792335(** Jsont codec for {!type:params}. *)
···2482233824832339type output = {
24842340 cursor : string option;
24852485- lists_with_membership : Jsont.json list;
23412341+ items : Jsont.json list;
23422342+ list_ : Jsont.json;
24862343}
2487234424882345(** Jsont codec for {!type:output}. *)
24892346val output_jsont : output Jsont.t
2490234724912348 end
24922492- module GetListMutes : sig
24932493-(** Enumerates mod lists that the requesting account (actor) currently has muted. Requires auth. *)
23492349+ module GetActorStarterPacks : sig
23502350+(** Get a list of starter packs created by the actor. *)
2494235124952352(** Query/procedure parameters. *)
24962353type params = {
23542354+ actor : string;
24972355 cursor : string option;
24982356 limit : int option;
24992357}
···2504236225052363type output = {
25062364 cursor : string option;
25072507- lists : Jsont.json list;
23652365+ starter_packs : Jsont.json list;
25082366}
2509236725102368(** Jsont codec for {!type:output}. *)
25112369val output_jsont : output Jsont.t
2512237025132371 end
25142514- module GetStarterPacks : sig
25152515-(** Get views for a list of starter packs. *)
23722372+ end
23732373+ module Feed : sig
23742374+ module Threadgate : sig
23752375+(** Allow replies from actors who follow you. *)
23762376+23772377+type follower_rule = unit
23782378+23792379+(** Jsont codec for {!type:follower_rule}. *)
23802380+val follower_rule_jsont : follower_rule Jsont.t
23812381+23822382+(** Allow replies from actors you follow. *)
23832383+23842384+type following_rule = unit
2516238525172517-(** Query/procedure parameters. *)
25182518-type params = {
25192519- uris : string list;
23862386+(** Jsont codec for {!type:following_rule}. *)
23872387+val following_rule_jsont : following_rule Jsont.t
23882388+23892389+(** Allow replies from actors on a list. *)
23902390+23912391+type list_rule = {
23922392+ list_ : string;
25202393}
2521239425222522-(** Jsont codec for {!type:params}. *)
25232523-val params_jsont : params Jsont.t
23952395+(** Jsont codec for {!type:list_rule}. *)
23962396+val list_rule_jsont : list_rule Jsont.t
2524239723982398+(** Allow replies from actors mentioned in your post. *)
2525239925262526-type output = {
25272527- starter_packs : Jsont.json list;
25282528-}
24002400+type mention_rule = unit
2529240125302530-(** Jsont codec for {!type:output}. *)
25312531-val output_jsont : output Jsont.t
24022402+(** Jsont codec for {!type:mention_rule}. *)
24032403+val mention_rule_jsont : mention_rule Jsont.t
2532240425332533- end
25342534- module GetLists : sig
25352535-(** Enumerates the lists created by a specified account (actor). *)
24052405+(** 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. *)
2536240625372537-(** Query/procedure parameters. *)
25382538-type params = {
25392539- actor : string; (** The account (actor) to enumerate lists from. *)
25402540- cursor : string option;
25412541- limit : int option;
25422542- purposes : string list option; (** Optional filter by list purpose. If not specified, all supported types are returned. *)
24072407+type main = {
24082408+ 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. *)
24092409+ created_at : string;
24102410+ hidden_replies : string list option; (** List of hidden reply URIs. *)
24112411+ post : string; (** Reference (AT-URI) to the post record. *)
25432412}
2544241325452545-(** Jsont codec for {!type:params}. *)
25462546-val params_jsont : params Jsont.t
24142414+(** Jsont codec for {!type:main}. *)
24152415+val main_jsont : main Jsont.t
2547241624172417+ end
24182418+ module Repost : sig
24192419+(** Record representing a 'repost' of an existing Bluesky post. *)
2548242025492549-type output = {
25502550- cursor : string option;
25512551- lists : Jsont.json list;
24212421+type main = {
24222422+ created_at : string;
24232423+ subject : Com.Atproto.Repo.StrongRef.main;
24242424+ via : Com.Atproto.Repo.StrongRef.main option;
25522425}
2553242625542554-(** Jsont codec for {!type:output}. *)
25552555-val output_jsont : output Jsont.t
24272427+(** Jsont codec for {!type:main}. *)
24282428+val main_jsont : main Jsont.t
2556242925572430 end
25582558- end
25592559- module Feed : sig
25602560- module Post : sig
25612561-(** Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings. *)
24312431+ module Postgate : sig
24322432+(** Disables embedding of this post. *)
24332433+24342434+type disable_rule = unit
24352435+24362436+(** Jsont codec for {!type:disable_rule}. *)
24372437+val disable_rule_jsont : disable_rule Jsont.t
24382438+24392439+(** 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. *)
2562244025632563-type text_slice = {
25642564- end_ : int;
25652565- start : int;
24412441+type main = {
24422442+ created_at : string;
24432443+ detached_embedding_uris : string list option; (** List of AT-URIs embedding this post that the author has detached from. *)
24442444+ 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. *)
24452445+ post : string; (** Reference (AT-URI) to the post record. *)
25662446}
2567244725682568-(** Jsont codec for {!type:text_slice}. *)
25692569-val text_slice_jsont : text_slice Jsont.t
24482448+(** Jsont codec for {!type:main}. *)
24492449+val main_jsont : main Jsont.t
2570245024512451+ end
24522452+ module Post : sig
2571245325722454type reply_ref = {
25732455 parent : Com.Atproto.Repo.StrongRef.main;
···25772459(** Jsont codec for {!type:reply_ref}. *)
25782460val reply_ref_jsont : reply_ref Jsont.t
2579246124622462+(** Deprecated. Use app.bsky.richtext instead -- A text segment. Start is inclusive, end is exclusive. Indices are for utf16-encoded strings. *)
24632463+24642464+type text_slice = {
24652465+ end_ : int;
24662466+ start : int;
24672467+}
24682468+24692469+(** Jsont codec for {!type:text_slice}. *)
24702470+val text_slice_jsont : text_slice Jsont.t
24712471+25802472(** Deprecated: use facets instead. *)
2581247325822474type entity = {
···26062498val main_jsont : main Jsont.t
2607249926082500 end
26092609- module GetLikes : sig
25012501+ module Like : sig
25022502+(** Record declaring a 'like' of a piece of subject content. *)
2610250326112611-type like = {
26122612- actor : Jsont.json;
25042504+type main = {
26132505 created_at : string;
26142614- indexed_at : string;
25062506+ subject : Com.Atproto.Repo.StrongRef.main;
25072507+ via : Com.Atproto.Repo.StrongRef.main option;
26152508}
2616250926172617-(** Jsont codec for {!type:like}. *)
26182618-val like_jsont : like Jsont.t
25102510+(** Jsont codec for {!type:main}. *)
25112511+val main_jsont : main Jsont.t
2619251226202620-(** Get like records which reference a subject (by AT-URI and CID). *)
25132513+ end
25142514+ module GetRepostedBy : sig
25152515+(** Get a list of reposts for a given post. *)
2621251626222517(** Query/procedure parameters. *)
26232518type params = {
26242624- cid : string option; (** CID of the subject record (aka, specific version of record), to filter likes. *)
25192519+ cid : string option; (** If supplied, filters to reposts of specific version (by CID) of the post record. *)
26252520 cursor : string option;
26262521 limit : int option;
26272627- uri : string; (** AT-URI of the subject (eg, a post record). *)
25222522+ uri : string; (** Reference (AT-URI) of post record *)
26282523}
2629252426302525(** Jsont codec for {!type:params}. *)
···26342529type output = {
26352530 cid : string option;
26362531 cursor : string option;
26372637- likes : Jsont.json list;
25322532+ reposted_by : Jsont.json list;
26382533 uri : string;
26392534}
26402535···26422537val output_jsont : output Jsont.t
2643253826442539 end
26452645- module Postgate : sig
26462646-(** Disables embedding of this post. *)
25402540+ module GetLikes : sig
2647254126482648-type disable_rule = unit
26492649-26502650-(** Jsont codec for {!type:disable_rule}. *)
26512651-val disable_rule_jsont : disable_rule Jsont.t
26522652-26532653-(** 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. *)
26542654-26552655-type main = {
25422542+type like = {
25432543+ actor : Jsont.json;
26562544 created_at : string;
26572657- detached_embedding_uris : string list option; (** List of AT-URIs embedding this post that the author has detached from. *)
26582658- 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. *)
26592659- post : string; (** Reference (AT-URI) to the post record. *)
25452545+ indexed_at : string;
26602546}
2661254726622662-(** Jsont codec for {!type:main}. *)
26632663-val main_jsont : main Jsont.t
25482548+(** Jsont codec for {!type:like}. *)
25492549+val like_jsont : like Jsont.t
2664255026652665- end
26662666- module GetRepostedBy : sig
26672667-(** Get a list of reposts for a given post. *)
25512551+(** Get like records which reference a subject (by AT-URI and CID). *)
2668255226692553(** Query/procedure parameters. *)
26702554type params = {
26712671- cid : string option; (** If supplied, filters to reposts of specific version (by CID) of the post record. *)
25552555+ cid : string option; (** CID of the subject record (aka, specific version of record), to filter likes. *)
26722556 cursor : string option;
26732557 limit : int option;
26742674- uri : string; (** Reference (AT-URI) of post record *)
25582558+ uri : string; (** AT-URI of the subject (eg, a post record). *)
26752559}
2676256026772561(** Jsont codec for {!type:params}. *)
···26812565type output = {
26822566 cid : string option;
26832567 cursor : string option;
26842684- reposted_by : Jsont.json list;
25682568+ likes : Jsont.json list;
26852569 uri : string;
26862570}
26872571···26892573val output_jsont : output Jsont.t
2690257426912575 end
26922692- module DescribeFeedGenerator : sig
25762576+ module Generator : sig
25772577+(** Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository. *)
2693257826942694-type links = {
26952695- privacy_policy : string option;
26962696- terms_of_service : string option;
25792579+type main = {
25802580+ accepts_interactions : bool option; (** Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions *)
25812581+ avatar : Atp.Blob_ref.t option;
25822582+ content_mode : string option;
25832583+ created_at : string;
25842584+ description : string option;
25852585+ description_facets : Richtext.Facet.main list option;
25862586+ did : string;
25872587+ display_name : string;
25882588+ labels : Com.Atproto.Label.Defs.self_labels option; (** Self-label values *)
26972589}
2698259026992699-(** Jsont codec for {!type:links}. *)
27002700-val links_jsont : links Jsont.t
25912591+(** Jsont codec for {!type:main}. *)
25922592+val main_jsont : main Jsont.t
2701259325942594+ end
25952595+ module DescribeFeedGenerator : sig
2702259627032597type feed = {
27042598 uri : string;
···27072601(** Jsont codec for {!type:feed}. *)
27082602val feed_jsont : feed Jsont.t
2709260326042604+26052605+type links = {
26062606+ privacy_policy : string option;
26072607+ terms_of_service : string option;
26082608+}
26092609+26102610+(** Jsont codec for {!type:links}. *)
26112611+val links_jsont : links Jsont.t
26122612+27102613(** Get information about a feed generator, including policies and offered feed URIs. Does not require auth; implemented by Feed Generator services (not App View). *)
2711261427122615···27202623val output_jsont : output Jsont.t
2721262427222625 end
27232723- module Threadgate : sig
27242724-(** Allow replies from actors mentioned in your post. *)
27252725-27262726-type mention_rule = unit
27272727-27282728-(** Jsont codec for {!type:mention_rule}. *)
27292729-val mention_rule_jsont : mention_rule Jsont.t
26262626+ module Defs : sig
2730262727312731-(** Allow replies from actors on a list. *)
27322732-27332733-type list_rule = {
27342734- list_ : string;
26282628+type blocked_author = {
26292629+ did : string;
26302630+ viewer : Jsont.json option;
27352631}
2736263227372737-(** Jsont codec for {!type:list_rule}. *)
27382738-val list_rule_jsont : list_rule Jsont.t
26332633+(** Jsont codec for {!type:blocked_author}. *)
26342634+val blocked_author_jsont : blocked_author Jsont.t
2739263527402740-(** Allow replies from actors you follow. *)
26362636+(** User clicked through to the author of the feed item *)
2741263727422742-type following_rule = unit
26382638+type clickthrough_author = string
26392639+val clickthrough_author_jsont : clickthrough_author Jsont.t
2743264027442744-(** Jsont codec for {!type:following_rule}. *)
27452745-val following_rule_jsont : following_rule Jsont.t
26412641+(** User clicked through to the embedded content of the feed item *)
2746264227472747-(** Allow replies from actors who follow you. *)
26432643+type clickthrough_embed = string
26442644+val clickthrough_embed_jsont : clickthrough_embed Jsont.t
2748264527492749-type follower_rule = unit
26462646+(** User clicked through to the feed item *)
2750264727512751-(** Jsont codec for {!type:follower_rule}. *)
27522752-val follower_rule_jsont : follower_rule Jsont.t
26482648+type clickthrough_item = string
26492649+val clickthrough_item_jsont : clickthrough_item Jsont.t
2753265027542754-(** 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. *)
26512651+(** User clicked through to the reposter of the feed item *)
2755265227562756-type main = {
27572757- 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. *)
27582758- created_at : string;
27592759- hidden_replies : string list option; (** List of hidden reply URIs. *)
27602760- post : string; (** Reference (AT-URI) to the post record. *)
27612761-}
26532653+type clickthrough_reposter = string
26542654+val clickthrough_reposter_jsont : clickthrough_reposter Jsont.t
2762265527632763-(** Jsont codec for {!type:main}. *)
27642764-val main_jsont : main Jsont.t
26562656+(** Declares the feed generator returns any types of posts. *)
2765265727662766- end
27672767- module Like : sig
27682768-(** Record declaring a 'like' of a piece of subject content. *)
26582658+type content_mode_unspecified = string
26592659+val content_mode_unspecified_jsont : content_mode_unspecified Jsont.t
2769266027702770-type main = {
27712771- created_at : string;
27722772- subject : Com.Atproto.Repo.StrongRef.main;
27732773- via : Com.Atproto.Repo.StrongRef.main option;
27742774-}
26612661+(** Declares the feed generator returns posts containing app.bsky.embed.video embeds. *)
2775266227762776-(** Jsont codec for {!type:main}. *)
27772777-val main_jsont : main Jsont.t
26632663+type content_mode_video = string
26642664+val content_mode_video_jsont : content_mode_video Jsont.t
2778266527792779- end
27802780- module Defs : sig
27812781-(** Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. *)
2782266627832783-type viewer_state = {
27842784- bookmarked : bool option;
27852785- embedding_disabled : bool option;
26672667+type generator_viewer_state = {
27862668 like : string option;
27872787- pinned : bool option;
27882788- reply_disabled : bool option;
27892789- repost : string option;
27902790- thread_muted : bool option;
27912669}
2792267027932793-(** Jsont codec for {!type:viewer_state}. *)
27942794-val viewer_state_jsont : viewer_state Jsont.t
26712671+(** Jsont codec for {!type:generator_viewer_state}. *)
26722672+val generator_viewer_state_jsont : generator_viewer_state Jsont.t
279526732796267427972797-type threadgate_view = {
27982798- cid : string option;
27992799- lists : Jsont.json list option;
28002800- record : Jsont.json option;
28012801- uri : string option;
26752675+type interaction = {
26762676+ event : string option;
26772677+ feed_context : string option; (** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. *)
26782678+ item : string option;
26792679+ req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
28022680}
2803268128042804-(** Jsont codec for {!type:threadgate_view}. *)
28052805-val threadgate_view_jsont : threadgate_view Jsont.t
26822682+(** Jsont codec for {!type:interaction}. *)
26832683+val interaction_jsont : interaction Jsont.t
2806268428072807-(** Metadata about this post within the context of the thread it is in. *)
28082808-28092809-type thread_context = {
28102810- root_author_like : string option;
28112811-}
26852685+(** User liked the feed item *)
2812268628132813-(** Jsont codec for {!type:thread_context}. *)
28142814-val thread_context_jsont : thread_context Jsont.t
26872687+type interaction_like = string
26882688+val interaction_like_jsont : interaction_like Jsont.t
2815268926902690+(** User quoted the feed item *)
2816269128172817-type skeleton_reason_repost = {
28182818- repost : string;
28192819-}
26922692+type interaction_quote = string
26932693+val interaction_quote_jsont : interaction_quote Jsont.t
2820269428212821-(** Jsont codec for {!type:skeleton_reason_repost}. *)
28222822-val skeleton_reason_repost_jsont : skeleton_reason_repost Jsont.t
26952695+(** User replied to the feed item *)
2823269626972697+type interaction_reply = string
26982698+val interaction_reply_jsont : interaction_reply Jsont.t
2824269928252825-type skeleton_reason_pin = unit
27002700+(** User reposted the feed item *)
2826270128272827-(** Jsont codec for {!type:skeleton_reason_pin}. *)
28282828-val skeleton_reason_pin_jsont : skeleton_reason_pin Jsont.t
27022702+type interaction_repost = string
27032703+val interaction_repost_jsont : interaction_repost Jsont.t
2829270427052705+(** Feed item was seen by user *)
2830270628312831-type skeleton_feed_post = {
28322832- feed_context : string option; (** Context that will be passed through to client and may be passed to feed generator back alongside interactions. *)
28332833- post : string;
28342834- reason : Jsont.json option;
28352835-}
27072707+type interaction_seen = string
27082708+val interaction_seen_jsont : interaction_seen Jsont.t
2836270928372837-(** Jsont codec for {!type:skeleton_feed_post}. *)
28382838-val skeleton_feed_post_jsont : skeleton_feed_post Jsont.t
27102710+(** User shared the feed item *)
2839271128402840-(** Request that more content like the given feed item be shown in the feed *)
27122712+type interaction_share = string
27132713+val interaction_share_jsont : interaction_share Jsont.t
2841271428422842-type request_more = string
28432843-val request_more_jsont : request_more Jsont.t
2844271528452845-(** Request that less content like the given feed item be shown in the feed *)
27162716+type not_found_post = {
27172717+ not_found : bool;
27182718+ uri : string;
27192719+}
2846272028472847-type request_less = string
28482848-val request_less_jsont : request_less Jsont.t
27212721+(** Jsont codec for {!type:not_found_post}. *)
27222722+val not_found_post_jsont : not_found_post Jsont.t
284927232850272428512851-type reply_ref = {
28522852- grandparent_author : Jsont.json option; (** When parent is a reply to another post, this is the author of that post. *)
28532853- parent : Jsont.json;
28542854- root : Jsont.json;
28552855-}
27252725+type reason_pin = unit
2856272628572857-(** Jsont codec for {!type:reply_ref}. *)
28582858-val reply_ref_jsont : reply_ref Jsont.t
27272727+(** Jsont codec for {!type:reason_pin}. *)
27282728+val reason_pin_jsont : reason_pin Jsont.t
285927292860273028612731type reason_repost = {
···28692739val reason_repost_jsont : reason_repost Jsont.t
287027402871274128722872-type reason_pin = unit
28732873-28742874-(** Jsont codec for {!type:reason_pin}. *)
28752875-val reason_pin_jsont : reason_pin Jsont.t
28762876-28772877-28782878-type not_found_post = {
28792879- not_found : bool;
28802880- uri : string;
27422742+type reply_ref = {
27432743+ grandparent_author : Jsont.json option; (** When parent is a reply to another post, this is the author of that post. *)
27442744+ parent : Jsont.json;
27452745+ root : Jsont.json;
28812746}
2882274728832883-(** Jsont codec for {!type:not_found_post}. *)
28842884-val not_found_post_jsont : not_found_post Jsont.t
27482748+(** Jsont codec for {!type:reply_ref}. *)
27492749+val reply_ref_jsont : reply_ref Jsont.t
2885275028862886-(** User shared the feed item *)
27512751+(** Request that less content like the given feed item be shown in the feed *)
2887275228882888-type interaction_share = string
28892889-val interaction_share_jsont : interaction_share Jsont.t
27532753+type request_less = string
27542754+val request_less_jsont : request_less Jsont.t
2890275528912891-(** Feed item was seen by user *)
27562756+(** Request that more content like the given feed item be shown in the feed *)
2892275728932893-type interaction_seen = string
28942894-val interaction_seen_jsont : interaction_seen Jsont.t
27582758+type request_more = string
27592759+val request_more_jsont : request_more Jsont.t
2895276028962896-(** User reposted the feed item *)
2897276128982898-type interaction_repost = string
28992899-val interaction_repost_jsont : interaction_repost Jsont.t
29002900-29012901-(** User replied to the feed item *)
29022902-29032903-type interaction_reply = string
29042904-val interaction_reply_jsont : interaction_reply Jsont.t
27622762+type skeleton_feed_post = {
27632763+ feed_context : string option; (** Context that will be passed through to client and may be passed to feed generator back alongside interactions. *)
27642764+ post : string;
27652765+ reason : Jsont.json option;
27662766+}
2905276729062906-(** User quoted the feed item *)
27682768+(** Jsont codec for {!type:skeleton_feed_post}. *)
27692769+val skeleton_feed_post_jsont : skeleton_feed_post Jsont.t
2907277029082908-type interaction_quote = string
29092909-val interaction_quote_jsont : interaction_quote Jsont.t
2910277129112911-(** User liked the feed item *)
27722772+type skeleton_reason_pin = unit
2912277329132913-type interaction_like = string
29142914-val interaction_like_jsont : interaction_like Jsont.t
27742774+(** Jsont codec for {!type:skeleton_reason_pin}. *)
27752775+val skeleton_reason_pin_jsont : skeleton_reason_pin Jsont.t
291527762916277729172917-type interaction = {
29182918- event : string option;
29192919- feed_context : string option; (** Context on a feed item that was originally supplied by the feed generator on getFeedSkeleton. *)
29202920- item : string option;
29212921- req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
27782778+type skeleton_reason_repost = {
27792779+ repost : string;
29222780}
2923278129242924-(** Jsont codec for {!type:interaction}. *)
29252925-val interaction_jsont : interaction Jsont.t
27822782+(** Jsont codec for {!type:skeleton_reason_repost}. *)
27832783+val skeleton_reason_repost_jsont : skeleton_reason_repost Jsont.t
2926278427852785+(** Metadata about this post within the context of the thread it is in. *)
2927278629282928-type generator_viewer_state = {
29292929- like : string option;
27872787+type thread_context = {
27882788+ root_author_like : string option;
29302789}
2931279029322932-(** Jsont codec for {!type:generator_viewer_state}. *)
29332933-val generator_viewer_state_jsont : generator_viewer_state Jsont.t
29342934-29352935-(** Declares the feed generator returns posts containing app.bsky.embed.video embeds. *)
29362936-29372937-type content_mode_video = string
29382938-val content_mode_video_jsont : content_mode_video Jsont.t
29392939-29402940-(** Declares the feed generator returns any types of posts. *)
27912791+(** Jsont codec for {!type:thread_context}. *)
27922792+val thread_context_jsont : thread_context Jsont.t
2941279329422942-type content_mode_unspecified = string
29432943-val content_mode_unspecified_jsont : content_mode_unspecified Jsont.t
2944279429452945-(** User clicked through to the reposter of the feed item *)
27952795+type threadgate_view = {
27962796+ cid : string option;
27972797+ lists : Jsont.json list option;
27982798+ record : Jsont.json option;
27992799+ uri : string option;
28002800+}
2946280129472947-type clickthrough_reposter = string
29482948-val clickthrough_reposter_jsont : clickthrough_reposter Jsont.t
28022802+(** Jsont codec for {!type:threadgate_view}. *)
28032803+val threadgate_view_jsont : threadgate_view Jsont.t
2949280429502950-(** User clicked through to the feed item *)
28052805+(** Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. *)
2951280629522952-type clickthrough_item = string
29532953-val clickthrough_item_jsont : clickthrough_item Jsont.t
28072807+type viewer_state = {
28082808+ bookmarked : bool option;
28092809+ embedding_disabled : bool option;
28102810+ like : string option;
28112811+ pinned : bool option;
28122812+ reply_disabled : bool option;
28132813+ repost : string option;
28142814+ thread_muted : bool option;
28152815+}
2954281629552955-(** User clicked through to the embedded content of the feed item *)
28172817+(** Jsont codec for {!type:viewer_state}. *)
28182818+val viewer_state_jsont : viewer_state Jsont.t
2956281929572957-type clickthrough_embed = string
29582958-val clickthrough_embed_jsont : clickthrough_embed Jsont.t
2959282029602960-(** User clicked through to the author of the feed item *)
28212821+type blocked_post = {
28222822+ author : Jsont.json;
28232823+ blocked : bool;
28242824+ uri : string;
28252825+}
2961282629622962-type clickthrough_author = string
29632963-val clickthrough_author_jsont : clickthrough_author Jsont.t
28272827+(** Jsont codec for {!type:blocked_post}. *)
28282828+val blocked_post_jsont : blocked_post Jsont.t
296428292965283029662966-type blocked_author = {
28312831+type generator_view = {
28322832+ accepts_interactions : bool option;
28332833+ avatar : string option;
28342834+ cid : string;
28352835+ content_mode : string option;
28362836+ creator : Jsont.json;
28372837+ description : string option;
28382838+ description_facets : Richtext.Facet.main list option;
29672839 did : string;
28402840+ display_name : string;
28412841+ indexed_at : string;
28422842+ labels : Com.Atproto.Label.Defs.label list option;
28432843+ like_count : int option;
28442844+ uri : string;
29682845 viewer : Jsont.json option;
29692846}
2970284729712971-(** Jsont codec for {!type:blocked_author}. *)
29722972-val blocked_author_jsont : blocked_author Jsont.t
28482848+(** Jsont codec for {!type:generator_view}. *)
28492849+val generator_view_jsont : generator_view Jsont.t
297328502974285129752852type post_view = {
···29942871val post_view_jsont : post_view Jsont.t
299528722996287329972997-type generator_view = {
29982998- accepts_interactions : bool option;
29992999- avatar : string option;
30003000- cid : string;
30013001- content_mode : string option;
30023002- creator : Jsont.json;
30033003- description : string option;
30043004- description_facets : Richtext.Facet.main list option;
30053005- did : string;
30063006- display_name : string;
30073007- indexed_at : string;
30083008- labels : Com.Atproto.Label.Defs.label list option;
30093009- like_count : int option;
30103010- uri : string;
30113011- viewer : Jsont.json option;
28742874+type feed_view_post = {
28752875+ feed_context : string option; (** Context provided by feed generator that may be passed back alongside interactions. *)
28762876+ post : Jsont.json;
28772877+ reason : Jsont.json option;
28782878+ reply : Jsont.json option;
28792879+ req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
30122880}
3013288130143014-(** Jsont codec for {!type:generator_view}. *)
30153015-val generator_view_jsont : generator_view Jsont.t
30163016-30173017-30183018-type blocked_post = {
30193019- author : Jsont.json;
30203020- blocked : bool;
30213021- uri : string;
30223022-}
30233023-30243024-(** Jsont codec for {!type:blocked_post}. *)
30253025-val blocked_post_jsont : blocked_post Jsont.t
28822882+(** Jsont codec for {!type:feed_view_post}. *)
28832883+val feed_view_post_jsont : feed_view_post Jsont.t
302628843027288530282886type thread_view_post = {
···30352893(** Jsont codec for {!type:thread_view_post}. *)
30362894val thread_view_post_jsont : thread_view_post Jsont.t
3037289528962896+ end
28972897+ module SendInteractions : sig
28982898+(** Send information about interactions with feed items back to the feed generator that served them. *)
3038289930393039-type feed_view_post = {
30403040- feed_context : string option; (** Context provided by feed generator that may be passed back alongside interactions. *)
30413041- post : Jsont.json;
30423042- reason : Jsont.json option;
30433043- reply : Jsont.json option;
30443044- req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
29002900+29012901+type input = {
29022902+ interactions : Jsont.json list;
30452903}
3046290430473047-(** Jsont codec for {!type:feed_view_post}. *)
30483048-val feed_view_post_jsont : feed_view_post Jsont.t
29052905+(** Jsont codec for {!type:input}. *)
29062906+val input_jsont : input Jsont.t
29072907+29082908+29092909+type output = unit
29102910+29112911+(** Jsont codec for {!type:output}. *)
29122912+val output_jsont : output Jsont.t
3049291330502914 end
30513051- module Repost : sig
30523052-(** Record representing a 'repost' of an existing Bluesky post. *)
29152915+ module SearchPosts : sig
29162916+(** 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. *)
3053291730543054-type main = {
30553055- created_at : string;
30563056- subject : Com.Atproto.Repo.StrongRef.main;
30573057- via : Com.Atproto.Repo.StrongRef.main option;
29182918+(** Query/procedure parameters. *)
29192919+type params = {
29202920+ author : string option; (** Filter to posts by the given account. Handles are resolved to DID before query-time. *)
29212921+ cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
29222922+ domain : string option; (** Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization. *)
29232923+ lang : string option; (** Filter to posts in the given language. Expected to be based on post language field, though server may override language detection. *)
29242924+ limit : int option;
29252925+ 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. *)
29262926+ q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
29272927+ 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). *)
29282928+ sort : string option; (** Specifies the ranking order of results. *)
29292929+ 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. *)
29302930+ 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). *)
29312931+ url : string option; (** Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. *)
30582932}
3059293330603060-(** Jsont codec for {!type:main}. *)
30613061-val main_jsont : main Jsont.t
29342934+(** Jsont codec for {!type:params}. *)
29352935+val params_jsont : params Jsont.t
3062293630633063- end
30643064- module Generator : sig
30653065-(** Record declaring of the existence of a feed generator, and containing metadata about it. The record can exist in any repository. *)
3066293730673067-type main = {
30683068- accepts_interactions : bool option; (** Declaration that a feed accepts feedback interactions from a client through app.bsky.feed.sendInteractions *)
30693069- avatar : Atp.Blob_ref.t option;
30703070- content_mode : string option;
30713071- created_at : string;
30723072- description : string option;
30733073- description_facets : Richtext.Facet.main list option;
30743074- did : string;
30753075- display_name : string;
30763076- labels : Com.Atproto.Label.Defs.self_labels option; (** Self-label values *)
29382938+type output = {
29392939+ cursor : string option;
29402940+ hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
29412941+ posts : Jsont.json list;
30772942}
3078294330793079-(** Jsont codec for {!type:main}. *)
30803080-val main_jsont : main Jsont.t
29442944+(** Jsont codec for {!type:output}. *)
29452945+val output_jsont : output Jsont.t
3081294630822947 end
30833083- module GetPostThread : sig
30843084-(** Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests. *)
29482948+ module GetTimeline : sig
29492949+(** Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed. *)
3085295030862951(** Query/procedure parameters. *)
30872952type params = {
30883088- depth : int option; (** How many levels of reply depth should be included in response. *)
30893089- parent_height : int option; (** How many levels of parent (and grandparent, etc) post to include. *)
30903090- uri : string; (** Reference (AT-URI) to post record. *)
29532953+ algorithm : string option; (** Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism. *)
29542954+ cursor : string option;
29552955+ limit : int option;
30912956}
3092295730932958(** Jsont codec for {!type:params}. *)
···309529603096296130972962type output = {
30983098- thread : Jsont.json;
30993099- threadgate : Jsont.json option;
29632963+ cursor : string option;
29642964+ feed : Jsont.json list;
31002965}
3101296631022967(** Jsont codec for {!type:output}. *)
31032968val output_jsont : output Jsont.t
3104296931052970 end
31063106- module GetFeed : sig
31073107-(** Get a hydrated feed from an actor's selected feed generator. Implemented by App View. *)
29712971+ module GetSuggestedFeeds : sig
29722972+(** Get a list of suggested feeds (feed generators) for the requesting account. *)
3108297331092974(** Query/procedure parameters. *)
31102975type params = {
31112976 cursor : string option;
31123112- feed : string;
31132977 limit : int option;
31142978}
31152979···3119298331202984type output = {
31212985 cursor : string option;
31223122- feed : Jsont.json list;
29862986+ feeds : Jsont.json list;
31232987}
3124298831252989(** Jsont codec for {!type:output}. *)
···31523016val output_jsont : output Jsont.t
3153301731543018 end
31553155- module GetListFeed : sig
31563156-(** Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth. *)
30193019+ module GetPosts : sig
30203020+(** Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'. *)
3157302131583022(** Query/procedure parameters. *)
31593023type params = {
31603160- cursor : string option;
31613161- limit : int option;
31623162- list_ : string; (** Reference (AT-URI) to the list record. *)
30243024+ uris : string list; (** List of post AT-URIs to return hydrated views for. *)
31633025}
3164302631653027(** Jsont codec for {!type:params}. *)
···316730293168303031693031type output = {
31703170- cursor : string option;
31713171- feed : Jsont.json list;
30323032+ posts : Jsont.json list;
31723033}
3173303431743035(** Jsont codec for {!type:output}. *)
31753036val output_jsont : output Jsont.t
3176303731773038 end
31783178- module GetActorLikes : sig
31793179-(** Get a list of posts liked by an actor. Requires auth, actor must be the requesting account. *)
30393039+ module GetPostThread : sig
30403040+(** Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests. *)
3180304131813042(** Query/procedure parameters. *)
31823043type params = {
31833183- actor : string;
31843184- cursor : string option;
31853185- limit : int option;
30443044+ depth : int option; (** How many levels of reply depth should be included in response. *)
30453045+ parent_height : int option; (** How many levels of parent (and grandparent, etc) post to include. *)
30463046+ uri : string; (** Reference (AT-URI) to post record. *)
31863047}
3187304831883049(** Jsont codec for {!type:params}. *)
···319030513191305231923053type output = {
31933193- cursor : string option;
31943194- feed : Jsont.json list;
30543054+ thread : Jsont.json;
30553055+ threadgate : Jsont.json option;
31953056}
3196305731973058(** Jsont codec for {!type:output}. *)
31983059val output_jsont : output Jsont.t
3199306032003061 end
32013201- module GetFeedSkeleton : sig
32023202-(** 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. *)
30623062+ module GetListFeed : sig
30633063+(** Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth. *)
3203306432043065(** Query/procedure parameters. *)
32053066type params = {
32063067 cursor : string option;
32073207- feed : string; (** Reference to feed generator record describing the specific feed being requested. *)
32083068 limit : int option;
30693069+ list_ : string; (** Reference (AT-URI) to the list record. *)
32093070}
3210307132113072(** Jsont codec for {!type:params}. *)
···32153076type output = {
32163077 cursor : string option;
32173078 feed : Jsont.json list;
32183218- req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
32193079}
3220308032213081(** Jsont codec for {!type:output}. *)
32223082val output_jsont : output Jsont.t
3223308332243084 end
32253225- module SearchPosts : sig
32263226-(** 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. *)
30853085+ module GetFeedSkeleton : sig
30863086+(** 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. *)
3227308732283088(** Query/procedure parameters. *)
32293089type params = {
32303230- author : string option; (** Filter to posts by the given account. Handles are resolved to DID before query-time. *)
32313231- cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
32323232- domain : string option; (** Filter to posts with URLs (facet links or embeds) linking to the given domain (hostname). Server may apply hostname normalization. *)
32333233- lang : string option; (** Filter to posts in the given language. Expected to be based on post language field, though server may override language detection. *)
30903090+ cursor : string option;
30913091+ feed : string; (** Reference to feed generator record describing the specific feed being requested. *)
32343092 limit : int option;
32353235- 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. *)
32363236- q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
32373237- 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). *)
32383238- sort : string option; (** Specifies the ranking order of results. *)
32393239- 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. *)
32403240- 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). *)
32413241- url : string option; (** Filter to posts with links (facet links or embeds) pointing to this URL. Server may apply URL normalization or fuzzy matching. *)
32423093}
3243309432443095(** Jsont codec for {!type:params}. *)
···3247309832483099type output = {
32493100 cursor : string option;
32503250- hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
32513251- posts : Jsont.json list;
31013101+ feed : Jsont.json list;
31023102+ req_id : string option; (** Unique identifier per request that may be passed back alongside interactions. *)
32523103}
3253310432543105(** Jsont codec for {!type:output}. *)
···32753126val output_jsont : output Jsont.t
3276312732773128 end
32783278- module SendInteractions : sig
32793279-(** Send information about interactions with feed items back to the feed generator that served them. *)
31293129+ module GetFeedGenerator : sig
31303130+(** Get information about a feed generator. Implemented by AppView. *)
3280313132813281-32823282-type input = {
32833283- interactions : Jsont.json list;
31323132+(** Query/procedure parameters. *)
31333133+type params = {
31343134+ feed : string; (** AT-URI of the feed generator record. *)
32843135}
3285313632863286-(** Jsont codec for {!type:input}. *)
32873287-val input_jsont : input Jsont.t
31373137+(** Jsont codec for {!type:params}. *)
31383138+val params_jsont : params Jsont.t
328831393289314032903290-type output = unit
31413141+type output = {
31423142+ is_online : bool; (** Indicates whether the feed generator service has been online recently, or else seems to be inactive. *)
31433143+ is_valid : bool; (** Indicates whether the feed generator service is compatible with the record declaration. *)
31443144+ view : Jsont.json;
31453145+}
3291314632923147(** Jsont codec for {!type:output}. *)
32933148val output_jsont : output Jsont.t
3294314932953150 end
32963296- module GetAuthorFeed : sig
32973297-(** Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth. *)
31513151+ module GetFeed : sig
31523152+(** Get a hydrated feed from an actor's selected feed generator. Implemented by App View. *)
3298315332993154(** Query/procedure parameters. *)
33003155type params = {
33013301- actor : string;
33023156 cursor : string option;
33033303- filter : string option; (** Combinations of post/repost types to include in response. *)
33043304- include_pins : bool option;
31573157+ feed : string;
33053158 limit : int option;
33063159}
33073160···33183171val output_jsont : output Jsont.t
3319317233203173 end
33213321- module GetFeedGenerator : sig
33223322-(** Get information about a feed generator. Implemented by AppView. *)
31743174+ module GetAuthorFeed : sig
31753175+(** Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth. *)
3323317633243177(** Query/procedure parameters. *)
33253178type params = {
33263326- feed : string; (** AT-URI of the feed generator record. *)
31793179+ actor : string;
31803180+ cursor : string option;
31813181+ filter : string option; (** Combinations of post/repost types to include in response. *)
31823182+ include_pins : bool option;
31833183+ limit : int option;
33273184}
3328318533293186(** Jsont codec for {!type:params}. *)
···333131883332318933333190type output = {
33343334- is_online : bool; (** Indicates whether the feed generator service has been online recently, or else seems to be inactive. *)
33353335- is_valid : bool; (** Indicates whether the feed generator service is compatible with the record declaration. *)
33363336- view : Jsont.json;
31913191+ cursor : string option;
31923192+ feed : Jsont.json list;
33373193}
3338319433393195(** Jsont codec for {!type:output}. *)
33403196val output_jsont : output Jsont.t
3341319733423198 end
33433343- module GetSuggestedFeeds : sig
33443344-(** Get a list of suggested feeds (feed generators) for the requesting account. *)
31993199+ module GetActorLikes : sig
32003200+(** Get a list of posts liked by an actor. Requires auth, actor must be the requesting account. *)
3345320133463202(** Query/procedure parameters. *)
33473203type params = {
32043204+ actor : string;
33483205 cursor : string option;
33493206 limit : int option;
33503207}
···3355321233563213type output = {
33573214 cursor : string option;
33583358- feeds : Jsont.json list;
32153215+ feed : Jsont.json list;
33593216}
3360321733613218(** Jsont codec for {!type:output}. *)
···33853242val output_jsont : output Jsont.t
3386324333873244 end
33883388- module GetPosts : sig
33893389-(** Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'. *)
32453245+ end
32463246+ module Contact : sig
32473247+ module VerifyPhone : sig
32483248+(** Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication. *)
32493249+3390325033913391-(** Query/procedure parameters. *)
33923392-type params = {
33933393- uris : string list; (** List of post AT-URIs to return hydrated views for. *)
32513251+type input = {
32523252+ code : string; (** The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`. *)
32533253+ phone : string; (** The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`. *)
33943254}
3395325533963396-(** Jsont codec for {!type:params}. *)
33973397-val params_jsont : params Jsont.t
32563256+(** Jsont codec for {!type:input}. *)
32573257+val input_jsont : input Jsont.t
339832583399325934003260type output = {
34013401- posts : Jsont.json list;
32613261+ token : string; (** JWT to be used in a call to `app.bsky.contact.importContacts`. It is only valid for a single call. *)
34023262}
3403326334043264(** Jsont codec for {!type:output}. *)
34053265val output_jsont : output Jsont.t
3406326634073267 end
34083408- module GetTimeline : sig
34093409-(** Get a view of the requesting account's home timeline. This is expected to be some form of reverse-chronological feed. *)
32683268+ module StartPhoneVerification : sig
32693269+(** 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. *)
32703270+32713271+32723272+type input = {
32733273+ phone : string; (** The phone number to receive the code via SMS. *)
32743274+}
32753275+32763276+(** Jsont codec for {!type:input}. *)
32773277+val input_jsont : input Jsont.t
32783278+32793279+32803280+type output = unit
32813281+32823282+(** Jsont codec for {!type:output}. *)
32833283+val output_jsont : output Jsont.t
32843284+32853285+ end
32863286+ module SendNotification : sig
32873287+(** System endpoint to send notifications related to contact imports. Requires role authentication. *)
32883288+32893289+32903290+type input = {
32913291+ from : string; (** The DID of who this notification comes from. *)
32923292+ to_ : string; (** The DID of who this notification should go to. *)
32933293+}
32943294+32953295+(** Jsont codec for {!type:input}. *)
32963296+val input_jsont : input Jsont.t
32973297+32983298+32993299+type output = unit
33003300+33013301+(** Jsont codec for {!type:output}. *)
33023302+val output_jsont : output Jsont.t
33033303+33043304+ end
33053305+ module RemoveData : sig
33063306+(** Removes all stored hashes used for contact matching, existing matches, and sync status. Requires authentication. *)
33073307+33083308+33093309+type input = unit
33103310+33113311+(** Jsont codec for {!type:input}. *)
33123312+val input_jsont : input Jsont.t
33133313+33143314+33153315+type output = unit
33163316+33173317+(** Jsont codec for {!type:output}. *)
33183318+val output_jsont : output Jsont.t
33193319+33203320+ end
33213321+ module GetMatches : sig
33223322+(** Returns the matched contacts (contacts that were mutually imported). Excludes dismissed matches. Requires authentication. *)
3410332334113324(** Query/procedure parameters. *)
34123325type params = {
34133413- algorithm : string option; (** Variant 'algorithm' for timeline. Implementation-specific. NOTE: most feed flexibility has been moved to feed generator mechanism. *)
34143326 cursor : string option;
34153327 limit : int option;
34163328}
···3421333334223334type output = {
34233335 cursor : string option;
34243424- feed : Jsont.json list;
33363336+ matches : Jsont.json list;
34253337}
3426333834273339(** Jsont codec for {!type:output}. *)
34283340val output_jsont : output Jsont.t
3429334134303342 end
34313431- end
34323432- module Bookmark : sig
34333433- module DeleteBookmark : sig
34343434-(** Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. *)
33433343+ module DismissMatch : sig
33443344+(** Removes a match that was found via contact import. It shouldn't appear again if the same contact is re-imported. Requires authentication. *)
343533453436334634373347type input = {
34383438- uri : string;
33483348+ subject : string; (** The subject's DID to dismiss the match with. *)
34393349}
3440335034413351(** Jsont codec for {!type:input}. *)
34423352val input_jsont : input Jsont.t
3443335333543354+33553355+type output = unit
33563356+33573357+(** Jsont codec for {!type:output}. *)
33583358+val output_jsont : output Jsont.t
33593359+34443360 end
34453445- module CreateBookmark : sig
34463446-(** Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. *)
33613361+ module Defs : sig
33623362+(** 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. *)
33633363+33643364+type match_and_contact_index = {
33653365+ contact_index : int; (** The index of this match in the import contact input. *)
33663366+ match_ : Jsont.json; (** Profile of the matched user. *)
33673367+}
33683368+33693369+(** Jsont codec for {!type:match_and_contact_index}. *)
33703370+val match_and_contact_index_jsont : match_and_contact_index Jsont.t
33713371+33723372+(** A stash object to be sent via bsync representing a notification to be created. *)
33733373+33743374+type notification = {
33753375+ from : string; (** The DID of who this notification comes from. *)
33763376+ to_ : string; (** The DID of who this notification should go to. *)
33773377+}
3447337833793379+(** Jsont codec for {!type:notification}. *)
33803380+val notification_jsont : notification Jsont.t
3448338134493449-type input = {
34503450- cid : string;
34513451- uri : string;
33823382+33833383+type sync_status = {
33843384+ 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. *)
33853385+ synced_at : string; (** Last date when contacts where imported. *)
34523386}
3453338734543454-(** Jsont codec for {!type:input}. *)
34553455-val input_jsont : input Jsont.t
33883388+(** Jsont codec for {!type:sync_status}. *)
33893389+val sync_status_jsont : sync_status Jsont.t
3456339034573391 end
34583458- module Defs : sig
33923392+ module ImportContacts : sig
33933393+(** Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication. *)
3459339434603460-type bookmark_view = {
34613461- created_at : string option;
34623462- item : Jsont.json;
34633463- subject : Com.Atproto.Repo.StrongRef.main; (** A strong ref to the bookmarked record. *)
33953395+33963396+type input = {
33973397+ 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`. *)
33983398+ token : string; (** JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`. *)
34643399}
3465340034663466-(** Jsont codec for {!type:bookmark_view}. *)
34673467-val bookmark_view_jsont : bookmark_view Jsont.t
34013401+(** Jsont codec for {!type:input}. *)
34023402+val input_jsont : input Jsont.t
3468340334693469-(** Object used to store bookmark data in stash. *)
3470340434713471-type bookmark = {
34723472- subject : Com.Atproto.Repo.StrongRef.main; (** A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported. *)
34053405+type output = {
34063406+ 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. *)
34733407}
3474340834753475-(** Jsont codec for {!type:bookmark}. *)
34763476-val bookmark_jsont : bookmark Jsont.t
34093409+(** Jsont codec for {!type:output}. *)
34103410+val output_jsont : output Jsont.t
3477341134783412 end
34793479- module GetBookmarks : sig
34803480-(** Gets views of records bookmarked by the authenticated user. Requires authentication. *)
34133413+ module GetSyncStatus : sig
34143414+(** Gets the user's current contact import status. Requires authentication. *)
3481341534823416(** Query/procedure parameters. *)
34833483-type params = {
34843484- cursor : string option;
34853485- limit : int option;
34863486-}
34173417+type params = unit
3487341834883419(** Jsont codec for {!type:params}. *)
34893420val params_jsont : params Jsont.t
349034213491342234923423type output = {
34933493- bookmarks : Defs.bookmark_view list;
34943494- cursor : string option;
34243424+ 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. *)
34953425}
3496342634973427(** Jsont codec for {!type:output}. *)
···35003430 end
35013431 end
35023432 module Unspecced : sig
35033503- module GetSuggestedUsersSkeleton : sig
35043504-(** Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers *)
34333433+ module GetTaggedSuggestions : sig
3505343435063506-(** Query/procedure parameters. *)
35073507-type params = {
35083508- category : string option; (** Category of users to get suggestions for. *)
35093509- limit : int option;
35103510- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
34353435+type suggestion = {
34363436+ subject : string;
34373437+ subject_type : string;
34383438+ tag : string;
35113439}
3512344034413441+(** Jsont codec for {!type:suggestion}. *)
34423442+val suggestion_jsont : suggestion Jsont.t
34433443+34443444+(** Get a list of suggestions (feeds and users) tagged with categories *)
34453445+34463446+(** Query/procedure parameters. *)
34473447+type params = unit
34483448+35133449(** Jsont codec for {!type:params}. *)
35143450val params_jsont : params Jsont.t
351534513516345235173453type output = {
35183518- dids : string list;
35193519- rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
34543454+ suggestions : suggestion list;
35203455}
3521345635223457(** Jsont codec for {!type:output}. *)
35233458val output_jsont : output Jsont.t
3524345935253460 end
35263526- module GetOnboardingSuggestedStarterPacks : sig
35273527-(** Get a list of suggested starterpacks for onboarding *)
34613461+ module GetSuggestedUsersSkeleton : sig
34623462+(** Get a skeleton of suggested users. Intended to be called and hydrated by app.bsky.unspecced.getSuggestedUsers *)
3528346335293464(** Query/procedure parameters. *)
35303465type params = {
34663466+ category : string option; (** Category of users to get suggestions for. *)
35313467 limit : int option;
34683468+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
35323469}
3533347035343471(** Jsont codec for {!type:params}. *)
···353634733537347435383475type output = {
35393539- starter_packs : Jsont.json list;
34763476+ dids : string list;
34773477+ rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
35403478}
3541347935423480(** Jsont codec for {!type:output}. *)
35433481val output_jsont : output Jsont.t
3544348235453483 end
35463546- module GetPopularFeedGenerators : sig
35473547-(** An unspecced view of globally popular feed generators. *)
34843484+ module GetSuggestedUsers : sig
34853485+(** Get a list of suggested users *)
3548348635493487(** Query/procedure parameters. *)
35503488type params = {
35513551- cursor : string option;
34893489+ category : string option; (** Category of users to get suggestions for. *)
35523490 limit : int option;
35533553- query : string option;
35543491}
3555349235563493(** Jsont codec for {!type:params}. *)
···355834953559349635603497type output = {
35613561- cursor : string option;
35623562- feeds : Jsont.json list;
34983498+ actors : Jsont.json list;
34993499+ rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
35633500}
3564350135653502(** Jsont codec for {!type:output}. *)
···35873524val output_jsont : output Jsont.t
3588352535893526 end
35903590- module GetSuggestedFeeds : sig
35913591-(** Get a list of suggested feeds *)
35273527+ module GetSuggestedStarterPacks : sig
35283528+(** Get a list of suggested starterpacks *)
3592352935933530(** Query/procedure parameters. *)
35943531type params = {
···360035373601353836023539type output = {
36033603- feeds : Jsont.json list;
35403540+ starter_packs : Jsont.json list;
36043541}
3605354236063543(** Jsont codec for {!type:output}. *)
···36283565val output_jsont : output Jsont.t
3629356636303567 end
36313631- module GetConfig : sig
35683568+ module GetSuggestedFeeds : sig
35693569+(** Get a list of suggested feeds *)
3632357036333633-type live_now_config = {
36343634- did : string;
36353635- domains : string list;
35713571+(** Query/procedure parameters. *)
35723572+type params = {
35733573+ limit : int option;
36363574}
3637357536383638-(** Jsont codec for {!type:live_now_config}. *)
36393639-val live_now_config_jsont : live_now_config Jsont.t
36403640-36413641-(** Get miscellaneous runtime configuration. *)
35763576+(** Jsont codec for {!type:params}. *)
35773577+val params_jsont : params Jsont.t
364235783643357936443580type output = {
36453645- check_email_confirmed : bool option;
36463646- live_now : live_now_config list option;
35813581+ feeds : Jsont.json list;
36473582}
3648358336493584(** Jsont codec for {!type:output}. *)
36503585val output_jsont : output Jsont.t
3651358636523587 end
36533653- module GetSuggestedStarterPacks : sig
36543654-(** Get a list of suggested starterpacks *)
35883588+ module GetPopularFeedGenerators : sig
35893589+(** An unspecced view of globally popular feed generators. *)
3655359036563591(** Query/procedure parameters. *)
36573592type params = {
35933593+ cursor : string option;
36583594 limit : int option;
35953595+ query : string option;
36593596}
3660359736613598(** Jsont codec for {!type:params}. *)
···366336003664360136653602type output = {
36663666- starter_packs : Jsont.json list;
36033603+ cursor : string option;
36043604+ feeds : Jsont.json list;
36673605}
3668360636693607(** Jsont codec for {!type:output}. *)
36703608val output_jsont : output Jsont.t
3671360936723610 end
36733673- module GetSuggestedUsers : sig
36743674-(** Get a list of suggested users *)
36113611+ module GetOnboardingSuggestedStarterPacksSkeleton : sig
36123612+(** Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks *)
3675361336763614(** Query/procedure parameters. *)
36773615type params = {
36783678- category : string option; (** Category of users to get suggestions for. *)
36793616 limit : int option;
36173617+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
36803618}
3681361936823620(** Jsont codec for {!type:params}. *)
···368436223685362336863624type output = {
36873687- actors : Jsont.json list;
36883688- rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
36253625+ starter_packs : string list;
36893626}
3690362736913628(** Jsont codec for {!type:output}. *)
36923629val output_jsont : output Jsont.t
3693363036943631 end
36953695- module GetOnboardingSuggestedStarterPacksSkeleton : sig
36963696-(** Get a skeleton of suggested starterpacks for onboarding. Intended to be called and hydrated by app.bsky.unspecced.getOnboardingSuggestedStarterPacks *)
36323632+ module GetOnboardingSuggestedStarterPacks : sig
36333633+(** Get a list of suggested starterpacks for onboarding *)
3697363436983635(** Query/procedure parameters. *)
36993636type params = {
37003637 limit : int option;
37013701- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
37023638}
3703363937043640(** Jsont codec for {!type:params}. *)
···370636423707364337083644type output = {
37093709- starter_packs : string list;
36453645+ starter_packs : Jsont.json list;
37103646}
3711364737123648(** Jsont codec for {!type:output}. *)
37133649val output_jsont : output Jsont.t
3714365037153651 end
37163716- module Defs : sig
36523652+ module GetConfig : sig
3717365337183718-type trending_topic = {
37193719- description : string option;
37203720- display_name : string option;
37213721- link : string;
37223722- topic : string;
36543654+type live_now_config = {
36553655+ did : string;
36563656+ domains : string list;
37233657}
3724365837253725-(** Jsont codec for {!type:trending_topic}. *)
37263726-val trending_topic_jsont : trending_topic Jsont.t
36593659+(** Jsont codec for {!type:live_now_config}. *)
36603660+val live_now_config_jsont : live_now_config Jsont.t
36613661+36623662+(** Get miscellaneous runtime configuration. *)
36633663+36643664+36653665+type output = {
36663666+ check_email_confirmed : bool option;
36673667+ live_now : live_now_config list option;
36683668+}
3727366936703670+(** Jsont codec for {!type:output}. *)
36713671+val output_jsont : output Jsont.t
3728367237293729-type trend_view = {
37303730- actors : Jsont.json list;
37313731- category : string option;
37323732- display_name : string;
37333733- link : string;
37343734- post_count : int;
37353735- started_at : string;
37363736- status : string option;
37373737- topic : string;
36733673+ end
36743674+ module Defs : sig
36753675+(** Object used to store age assurance data in stash. *)
36763676+36773677+type age_assurance_event = {
36783678+ attempt_id : string; (** The unique identifier for this instance of the age assurance flow, in UUID format. *)
36793679+ complete_ip : string option; (** The IP address used when completing the AA flow. *)
36803680+ complete_ua : string option; (** The user agent used when completing the AA flow. *)
36813681+ created_at : string; (** The date and time of this write operation. *)
36823682+ email : string option; (** The email used for AA. *)
36833683+ init_ip : string option; (** The IP address used when initiating the AA flow. *)
36843684+ init_ua : string option; (** The user agent used when initiating the AA flow. *)
36853685+ status : string; (** The status of the age assurance process. *)
37383686}
3739368737403740-(** Jsont codec for {!type:trend_view}. *)
37413741-val trend_view_jsont : trend_view Jsont.t
36883688+(** Jsont codec for {!type:age_assurance_event}. *)
36893689+val age_assurance_event_jsont : age_assurance_event Jsont.t
3742369036913691+(** The computed state of the age assurance process, returned to the user in question on certain authenticated requests. *)
3743369237443744-type thread_item_post = {
37453745- hidden_by_threadgate : bool; (** The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread. *)
37463746- 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. *)
37473747- 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. *)
37483748- muted_by_viewer : bool; (** This is by an account muted by the viewer requesting it. *)
37493749- 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. *)
37503750- post : Jsont.json;
36933693+type age_assurance_state = {
36943694+ last_initiated_at : string option; (** The timestamp when this state was last updated. *)
36953695+ status : string; (** The status of the age assurance process. *)
37513696}
3752369737533753-(** Jsont codec for {!type:thread_item_post}. *)
37543754-val thread_item_post_jsont : thread_item_post Jsont.t
36983698+(** Jsont codec for {!type:age_assurance_state}. *)
36993699+val age_assurance_state_jsont : age_assurance_state Jsont.t
375537003756370137573757-type thread_item_not_found = unit
37023702+type skeleton_search_actor = {
37033703+ did : string;
37043704+}
3758370537593759-(** Jsont codec for {!type:thread_item_not_found}. *)
37603760-val thread_item_not_found_jsont : thread_item_not_found Jsont.t
37063706+(** Jsont codec for {!type:skeleton_search_actor}. *)
37073707+val skeleton_search_actor_jsont : skeleton_search_actor Jsont.t
376137083762370937633763-type thread_item_no_unauthenticated = unit
37103710+type skeleton_search_post = {
37113711+ uri : string;
37123712+}
3764371337653765-(** Jsont codec for {!type:thread_item_no_unauthenticated}. *)
37663766-val thread_item_no_unauthenticated_jsont : thread_item_no_unauthenticated Jsont.t
37143714+(** Jsont codec for {!type:skeleton_search_post}. *)
37153715+val skeleton_search_post_jsont : skeleton_search_post Jsont.t
376737163768371737693769-type thread_item_blocked = {
37703770- author : Jsont.json;
37183718+type skeleton_search_starter_pack = {
37193719+ uri : string;
37713720}
3772372137733773-(** Jsont codec for {!type:thread_item_blocked}. *)
37743774-val thread_item_blocked_jsont : thread_item_blocked Jsont.t
37223722+(** Jsont codec for {!type:skeleton_search_starter_pack}. *)
37233723+val skeleton_search_starter_pack_jsont : skeleton_search_starter_pack Jsont.t
377537243776372537773726type skeleton_trend = {
···37893738val skeleton_trend_jsont : skeleton_trend Jsont.t
379037393791374037923792-type skeleton_search_starter_pack = {
37933793- uri : string;
37413741+type thread_item_blocked = {
37423742+ author : Jsont.json;
37943743}
3795374437963796-(** Jsont codec for {!type:skeleton_search_starter_pack}. *)
37973797-val skeleton_search_starter_pack_jsont : skeleton_search_starter_pack Jsont.t
37453745+(** Jsont codec for {!type:thread_item_blocked}. *)
37463746+val thread_item_blocked_jsont : thread_item_blocked Jsont.t
379837473799374838003800-type skeleton_search_post = {
38013801- uri : string;
38023802-}
37493749+type thread_item_no_unauthenticated = unit
3803375038043804-(** Jsont codec for {!type:skeleton_search_post}. *)
38053805-val skeleton_search_post_jsont : skeleton_search_post Jsont.t
37513751+(** Jsont codec for {!type:thread_item_no_unauthenticated}. *)
37523752+val thread_item_no_unauthenticated_jsont : thread_item_no_unauthenticated Jsont.t
380637533807375438083808-type skeleton_search_actor = {
38093809- did : string;
38103810-}
37553755+type thread_item_not_found = unit
3811375638123812-(** Jsont codec for {!type:skeleton_search_actor}. *)
38133813-val skeleton_search_actor_jsont : skeleton_search_actor Jsont.t
37573757+(** Jsont codec for {!type:thread_item_not_found}. *)
37583758+val thread_item_not_found_jsont : thread_item_not_found Jsont.t
3814375938153815-(** The computed state of the age assurance process, returned to the user in question on certain authenticated requests. *)
3816376038173817-type age_assurance_state = {
38183818- last_initiated_at : string option; (** The timestamp when this state was last updated. *)
38193819- status : string; (** The status of the age assurance process. *)
37613761+type thread_item_post = {
37623762+ hidden_by_threadgate : bool; (** The threadgate created by the author indicates this post as a reply to be hidden for everyone consuming the thread. *)
37633763+ 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. *)
37643764+ 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. *)
37653765+ muted_by_viewer : bool; (** This is by an account muted by the viewer requesting it. *)
37663766+ 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. *)
37673767+ post : Jsont.json;
38203768}
3821376938223822-(** Jsont codec for {!type:age_assurance_state}. *)
38233823-val age_assurance_state_jsont : age_assurance_state Jsont.t
37703770+(** Jsont codec for {!type:thread_item_post}. *)
37713771+val thread_item_post_jsont : thread_item_post Jsont.t
3824377238253825-(** Object used to store age assurance data in stash. *)
3826377338273827-type age_assurance_event = {
38283828- attempt_id : string; (** The unique identifier for this instance of the age assurance flow, in UUID format. *)
38293829- complete_ip : string option; (** The IP address used when completing the AA flow. *)
38303830- complete_ua : string option; (** The user agent used when completing the AA flow. *)
38313831- created_at : string; (** The date and time of this write operation. *)
38323832- email : string option; (** The email used for AA. *)
38333833- init_ip : string option; (** The IP address used when initiating the AA flow. *)
38343834- init_ua : string option; (** The user agent used when initiating the AA flow. *)
38353835- status : string; (** The status of the age assurance process. *)
37743774+type trend_view = {
37753775+ actors : Jsont.json list;
37763776+ category : string option;
37773777+ display_name : string;
37783778+ link : string;
37793779+ post_count : int;
37803780+ started_at : string;
37813781+ status : string option;
37823782+ topic : string;
38363783}
3837378438383838-(** Jsont codec for {!type:age_assurance_event}. *)
38393839-val age_assurance_event_jsont : age_assurance_event Jsont.t
37853785+(** Jsont codec for {!type:trend_view}. *)
37863786+val trend_view_jsont : trend_view Jsont.t
3840378738413841- end
38423842- module GetTaggedSuggestions : sig
3843378838443844-type suggestion = {
38453845- subject : string;
38463846- subject_type : string;
38473847- tag : string;
37893789+type trending_topic = {
37903790+ description : string option;
37913791+ display_name : string option;
37923792+ link : string;
37933793+ topic : string;
38483794}
3849379538503850-(** Jsont codec for {!type:suggestion}. *)
38513851-val suggestion_jsont : suggestion Jsont.t
37963796+(** Jsont codec for {!type:trending_topic}. *)
37973797+val trending_topic_jsont : trending_topic Jsont.t
3852379838533853-(** Get a list of suggestions (feeds and users) tagged with categories *)
37993799+ end
38003800+ module SearchStarterPacksSkeleton : sig
38013801+(** Backend Starter Pack search, returns only skeleton. *)
3854380238553803(** Query/procedure parameters. *)
38563856-type params = unit
38043804+type params = {
38053805+ cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
38063806+ limit : int option;
38073807+ q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
38083808+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
38093809+}
3857381038583811(** Jsont codec for {!type:params}. *)
38593812val params_jsont : params Jsont.t
386038133861381438623815type output = {
38633863- suggestions : suggestion list;
38163816+ cursor : string option;
38173817+ hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
38183818+ starter_packs : Defs.skeleton_search_starter_pack list;
38643819}
3865382038663821(** Jsont codec for {!type:output}. *)
···39013856val output_jsont : output Jsont.t
3902385739033858 end
39043904- module GetPostThreadV2 : sig
39053905-39063906-type thread_item = {
39073907- 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. *)
39083908- uri : string;
39093909- value : Jsont.json;
39103910-}
39113911-39123912-(** Jsont codec for {!type:thread_item}. *)
39133913-val thread_item_jsont : thread_item Jsont.t
39143914-39153915-(** (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. *)
38593859+ module SearchActorsSkeleton : sig
38603860+(** Backend Actors (profile) search, returns only skeleton. *)
3916386139173862(** Query/procedure parameters. *)
39183863type params = {
39193919- above : bool option; (** Whether to include parents above the anchor. *)
39203920- 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. *)
39213921- below : int option; (** How many levels of replies to include below the anchor. *)
39223922- 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). *)
39233923- sort : string option; (** Sorting for the thread replies. *)
38643864+ cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
38653865+ limit : int option;
38663866+ 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. *)
38673867+ typeahead : bool option; (** If true, acts as fast/simple 'typeahead' query. *)
38683868+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
39243869}
3925387039263871(** Jsont codec for {!type:params}. *)
···392838733929387439303875type output = {
39313931- has_other_replies : bool; (** Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them. *)
39323932- thread : thread_item list; (** A flat list of thread items. The depth of each item is indicated by the depth property inside the item. *)
39333933- threadgate : Jsont.json option;
38763876+ actors : Defs.skeleton_search_actor list;
38773877+ cursor : string option;
38783878+ hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
39343879}
3935388039363881(** Jsont codec for {!type:output}. *)
39373882val output_jsont : output Jsont.t
3938388339393884 end
39403940- module GetTrendingTopics : sig
39413941-(** Get a list of trending topics *)
38853885+ module InitAgeAssurance : sig
38863886+(** Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age. *)
3942388739433943-(** Query/procedure parameters. *)
39443944-type params = {
39453945- limit : int option;
39463946- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
38883888+38893889+type input = {
38903890+ country_code : string; (** An ISO 3166-1 alpha-2 code of the user's location. *)
38913891+ email : string; (** The user's email address to receive assurance instructions. *)
38923892+ language : string; (** The user's preferred language for communication during the assurance process. *)
39473893}
3948389439493949-(** Jsont codec for {!type:params}. *)
39503950-val params_jsont : params Jsont.t
38953895+(** Jsont codec for {!type:input}. *)
38963896+val input_jsont : input Jsont.t
395138973952389839533953-type output = {
39543954- suggested : Defs.trending_topic list;
39553955- topics : Defs.trending_topic list;
39563956-}
38993899+type output = Defs.age_assurance_state
3957390039583901(** Jsont codec for {!type:output}. *)
39593902val output_jsont : output Jsont.t
···39803923val output_jsont : output Jsont.t
3981392439823925 end
39833983- module GetPostThreadOtherV2 : sig
39263926+ module GetTrends : sig
39273927+(** Get the current trends on the network *)
3984392839853985-type thread_item = {
39863986- 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. *)
39873987- uri : string;
39883988- value : Defs.thread_item_post;
39293929+(** Query/procedure parameters. *)
39303930+type params = {
39313931+ limit : int option;
39323932+}
39333933+39343934+(** Jsont codec for {!type:params}. *)
39353935+val params_jsont : params Jsont.t
39363936+39373937+39383938+type output = {
39393939+ trends : Defs.trend_view list;
39893940}
3990394139913991-(** Jsont codec for {!type:thread_item}. *)
39923992-val thread_item_jsont : thread_item Jsont.t
39423942+(** Jsont codec for {!type:output}. *)
39433943+val output_jsont : output Jsont.t
3993394439943994-(** (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. *)
39453945+ end
39463946+ module GetTrendingTopics : sig
39473947+(** Get a list of trending topics *)
3995394839963949(** Query/procedure parameters. *)
39973950type params = {
39983998- anchor : string; (** Reference (AT-URI) to post record. This is the anchor post. *)
39513951+ limit : int option;
39523952+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
39993953}
4000395440013955(** Jsont codec for {!type:params}. *)
···400339574004395840053959type output = {
40064006- 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. *)
39603960+ suggested : Defs.trending_topic list;
39613961+ topics : Defs.trending_topic list;
40073962}
4008396340093964(** Jsont codec for {!type:output}. *)
40103965val output_jsont : output Jsont.t
4011396640123967 end
40134013- module InitAgeAssurance : sig
40144014-(** Initiate age assurance for an account. This is a one-time action that will start the process of verifying the user's age. *)
39683968+ module GetSuggestionsSkeleton : sig
39693969+(** Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions *)
4015397040164016-40174017-type input = {
40184018- country_code : string; (** An ISO 3166-1 alpha-2 code of the user's location. *)
40194019- email : string; (** The user's email address to receive assurance instructions. *)
40204020- language : string; (** The user's preferred language for communication during the assurance process. *)
39713971+(** Query/procedure parameters. *)
39723972+type params = {
39733973+ cursor : string option;
39743974+ limit : int option;
39753975+ relative_to_did : string option; (** DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer. *)
39763976+ viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
40213977}
4022397840234023-(** Jsont codec for {!type:input}. *)
40244024-val input_jsont : input Jsont.t
39793979+(** Jsont codec for {!type:params}. *)
39803980+val params_jsont : params Jsont.t
402539814026398240274027-type output = Defs.age_assurance_state
39833983+type output = {
39843984+ actors : Defs.skeleton_search_actor list;
39853985+ cursor : string option;
39863986+ rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
39873987+ 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. *)
39883988+}
4028398940293990(** Jsont codec for {!type:output}. *)
40303991val output_jsont : output Jsont.t
4031399240323993 end
40334033- module SearchStarterPacksSkeleton : sig
40344034-(** Backend Starter Pack search, returns only skeleton. *)
39943994+ module GetPostThreadV2 : sig
39953995+39963996+type thread_item = {
39973997+ 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. *)
39983998+ uri : string;
39993999+ value : Jsont.json;
40004000+}
40014001+40024002+(** Jsont codec for {!type:thread_item}. *)
40034003+val thread_item_jsont : thread_item Jsont.t
40044004+40054005+(** (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. *)
4035400640364007(** Query/procedure parameters. *)
40374008type params = {
40384038- cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
40394039- limit : int option;
40404040- q : string; (** Search query string; syntax, phrase, boolean, and faceting is unspecified, but Lucene query syntax is recommended. *)
40414041- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). *)
40094009+ above : bool option; (** Whether to include parents above the anchor. *)
40104010+ 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. *)
40114011+ below : int option; (** How many levels of replies to include below the anchor. *)
40124012+ 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). *)
40134013+ sort : string option; (** Sorting for the thread replies. *)
40424014}
4043401540444016(** Jsont codec for {!type:params}. *)
···404640184047401940484020type output = {
40494049- cursor : string option;
40504050- hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
40514051- starter_packs : Defs.skeleton_search_starter_pack list;
40214021+ has_other_replies : bool; (** Whether this thread has additional replies. If true, a call can be made to the `getPostThreadOtherV2` endpoint to retrieve them. *)
40224022+ thread : thread_item list; (** A flat list of thread items. The depth of each item is indicated by the depth property inside the item. *)
40234023+ threadgate : Jsont.json option;
40524024}
4053402540544026(** Jsont codec for {!type:output}. *)
40554027val output_jsont : output Jsont.t
4056402840574029 end
40584058- module SearchActorsSkeleton : sig
40594059-(** Backend Actors (profile) search, returns only skeleton. *)
40304030+ module GetPostThreadOtherV2 : sig
40314031+40324032+type thread_item = {
40334033+ 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. *)
40344034+ uri : string;
40354035+ value : Defs.thread_item_post;
40364036+}
40374037+40384038+(** Jsont codec for {!type:thread_item}. *)
40394039+val thread_item_jsont : thread_item Jsont.t
40404040+40414041+(** (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. *)
4060404240614043(** Query/procedure parameters. *)
40624044type params = {
40634063- cursor : string option; (** Optional pagination mechanism; may not necessarily allow scrolling through entire result set. *)
40644064- limit : int option;
40654065- 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. *)
40664066- typeahead : bool option; (** If true, acts as fast/simple 'typeahead' query. *)
40674067- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
40454045+ anchor : string; (** Reference (AT-URI) to post record. This is the anchor post. *)
40684046}
4069404740704048(** Jsont codec for {!type:params}. *)
···407240504073405140744052type output = {
40754075- actors : Defs.skeleton_search_actor list;
40764076- cursor : string option;
40774077- hits_total : int option; (** Count of search hits. Optional, may be rounded/truncated, and may not be possible to paginate through all hits. *)
40534053+ 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. *)
40784054}
4079405540804056(** Jsont codec for {!type:output}. *)
···40914067val output_jsont : output Jsont.t
4092406840934069 end
40944094- module GetSuggestionsSkeleton : sig
40954095-(** Get a skeleton of suggested actors. Intended to be called and then hydrated through app.bsky.actor.getSuggestions *)
40704070+ end
40714071+ module Bookmark : sig
40724072+ module DeleteBookmark : sig
40734073+(** Deletes a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. *)
40744074+40754075+40764076+type input = {
40774077+ uri : string;
40784078+}
4096407940974097-(** Query/procedure parameters. *)
40984098-type params = {
40994099- cursor : string option;
41004100- limit : int option;
41014101- relative_to_did : string option; (** DID of the account to get suggestions relative to. If not provided, suggestions will be based on the viewer. *)
41024102- viewer : string option; (** DID of the account making the request (not included for public/unauthenticated queries). Used to boost followed accounts in ranking. *)
40804080+(** Jsont codec for {!type:input}. *)
40814081+val input_jsont : input Jsont.t
40824082+40834083+ end
40844084+ module Defs : sig
40854085+(** Object used to store bookmark data in stash. *)
40864086+40874087+type bookmark = {
40884088+ subject : Com.Atproto.Repo.StrongRef.main; (** A strong ref to the record to be bookmarked. Currently, only `app.bsky.feed.post` records are supported. *)
41034089}
4104409041054105-(** Jsont codec for {!type:params}. *)
41064106-val params_jsont : params Jsont.t
40914091+(** Jsont codec for {!type:bookmark}. *)
40924092+val bookmark_jsont : bookmark Jsont.t
410740934108409441094109-type output = {
41104110- actors : Defs.skeleton_search_actor list;
41114111- cursor : string option;
41124112- rec_id : int option; (** Snowflake for this recommendation, use when submitting recommendation events. *)
41134113- 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. *)
40954095+type bookmark_view = {
40964096+ created_at : string option;
40974097+ item : Jsont.json;
40984098+ subject : Com.Atproto.Repo.StrongRef.main; (** A strong ref to the bookmarked record. *)
41144099}
4115410041164116-(** Jsont codec for {!type:output}. *)
41174117-val output_jsont : output Jsont.t
41014101+(** Jsont codec for {!type:bookmark_view}. *)
41024102+val bookmark_view_jsont : bookmark_view Jsont.t
4118410341194104 end
41204120- module GetTrends : sig
41214121-(** Get the current trends on the network *)
41054105+ module CreateBookmark : sig
41064106+(** Creates a private bookmark for the specified record. Currently, only `app.bsky.feed.post` records are supported. Requires authentication. *)
41074107+41084108+41094109+type input = {
41104110+ cid : string;
41114111+ uri : string;
41124112+}
41134113+41144114+(** Jsont codec for {!type:input}. *)
41154115+val input_jsont : input Jsont.t
41164116+41174117+ end
41184118+ module GetBookmarks : sig
41194119+(** Gets views of records bookmarked by the authenticated user. Requires authentication. *)
4122412041234121(** Query/procedure parameters. *)
41244122type params = {
41234123+ cursor : string option;
41254124 limit : int option;
41264125}
41274126···413041294131413041324131type output = {
41334133- trends : Defs.trend_view list;
41324132+ bookmarks : Defs.bookmark_view list;
41334133+ cursor : string option;
41344134}
4135413541364136(** Jsont codec for {!type:output}. *)
···3030end
3131module Site : sig
3232 module Standard : sig
3333+ module Theme : sig
3434+ module Color : sig
3535+3636+type rgb = {
3737+ b : int;
3838+ g : int;
3939+ r : int;
4040+}
4141+4242+(** Jsont codec for {!type:rgb}. *)
4343+val rgb_jsont : rgb Jsont.t
4444+4545+4646+type rgba = {
4747+ a : int;
4848+ b : int;
4949+ g : int;
5050+ r : int;
5151+}
5252+5353+(** Jsont codec for {!type:rgba}. *)
5454+val rgba_jsont : rgba Jsont.t
5555+5656+ end
5757+ module Basic : sig
5858+(** A simplified theme definition for publications, providing basic color customization for content display across different platforms and applications. *)
5959+6060+type main = {
6161+ accent : Color.rgb; (** Color used for links and button backgrounds. *)
6262+ accent_foreground : Color.rgb; (** Color used for button text. *)
6363+ background : Color.rgb; (** Color used for content background. *)
6464+ foreground : Color.rgb; (** Color used for content text. *)
6565+}
6666+6767+(** Jsont codec for {!type:main}. *)
6868+val main_jsont : main Jsont.t
6969+7070+ end
7171+ end
3372 module Graph : sig
3473 module Subscription : sig
3574(** Record declaring a subscription to a publication. *)
···63102(** Jsont codec for {!type:main}. *)
64103val main_jsont : main Jsont.t
651046666- end
6767- module Theme : sig
6868- module Color : sig
6969-7070-type rgba = {
7171- a : int;
7272- b : int;
7373- g : int;
7474- r : int;
7575-}
7676-7777-(** Jsont codec for {!type:rgba}. *)
7878-val rgba_jsont : rgba Jsont.t
7979-8080-8181-type rgb = {
8282- b : int;
8383- g : int;
8484- r : int;
8585-}
8686-8787-(** Jsont codec for {!type:rgb}. *)
8888-val rgb_jsont : rgb Jsont.t
8989-9090- end
9191- module Basic : sig
9292-(** A simplified theme definition for publications, providing basic color customization for content display across different platforms and applications. *)
9393-9494-type main = {
9595- accent : Color.rgb; (** Color used for links and button backgrounds. *)
9696- accent_foreground : Color.rgb; (** Color used for button text. *)
9797- background : Color.rgb; (** Color used for content background. *)
9898- foreground : Color.rgb; (** Color used for content text. *)
9999-}
100100-101101-(** Jsont codec for {!type:main}. *)
102102-val main_jsont : main Jsont.t
103103-104104- end
105105 end
106106 module Publication : sig
107107(** Platform-specific preferences for the publication, including discovery and visibility settings. *)