···383383 "#savedFeedsPref",
384384 "#savedFeedsPrefV2",
385385 "#personalDetailsPref",
386386+ "#declaredAgePref",
386387 "#feedViewPref",
387388 "#threadViewPref",
388389 "#interestsPref",
···485486 "type": "string",
486487 "format": "datetime",
487488 "description": "The birth date of account owner."
489489+ }
490490+ }
491491+ },
492492+ "declaredAgePref": {
493493+ "type": "object",
494494+ "description": "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.",
495495+ "properties": {
496496+ "isOverAge13": {
497497+ "type": "boolean",
498498+ "description": "Indicates if the user has declared that they are over 13 years of age."
499499+ },
500500+ "isOverAge16": {
501501+ "type": "boolean",
502502+ "description": "Indicates if the user has declared that they are over 16 years of age."
503503+ },
504504+ "isOverAge18": {
505505+ "type": "boolean",
506506+ "description": "Indicates if the user has declared that they are over 18 years of age."
488507 }
489508 }
490509 },
···11+{
22+ "lexicon": 1,
33+ "id": "app.bsky.contact.defs",
44+ "defs": {
55+ "matchAndContactIndex": {
66+ "description": "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.",
77+ "type": "object",
88+ "required": ["match", "contactIndex"],
99+ "properties": {
1010+ "match": {
1111+ "description": "Profile of the matched user.",
1212+ "type": "ref",
1313+ "ref": "app.bsky.actor.defs#profileView"
1414+ },
1515+ "contactIndex": {
1616+ "description": "The index of this match in the import contact input.",
1717+ "type": "integer",
1818+ "minimum": 0,
1919+ "maximum": 999
2020+ }
2121+ }
2222+ },
2323+ "syncStatus": {
2424+ "type": "object",
2525+ "required": ["syncedAt", "matchesCount"],
2626+ "properties": {
2727+ "syncedAt": {
2828+ "description": "Last date when contacts where imported.",
2929+ "type": "string",
3030+ "format": "datetime"
3131+ },
3232+ "matchesCount": {
3333+ "description": "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.",
3434+ "type": "integer",
3535+ "minimum": 0
3636+ }
3737+ }
3838+ },
3939+ "notification": {
4040+ "description": "A stash object to be sent via bsync representing a notification to be created.",
4141+ "type": "object",
4242+ "required": ["from", "to"],
4343+ "properties": {
4444+ "from": {
4545+ "description": "The DID of who this notification comes from.",
4646+ "type": "string",
4747+ "format": "did"
4848+ },
4949+ "to": {
5050+ "description": "The DID of who this notification should go to.",
5151+ "type": "string",
5252+ "format": "did"
5353+ }
5454+ }
5555+ }
5656+ }
5757+}
···11+{
22+ "lexicon": 1,
33+ "id": "app.bsky.contact.getSyncStatus",
44+ "defs": {
55+ "main": {
66+ "type": "query",
77+ "description": "WARNING: This is unstable and under active development, don't use it while this warning is here. Gets the user's current contact import status. Requires authentication.",
88+ "parameters": {
99+ "type": "params",
1010+ "properties": {}
1111+ },
1212+ "output": {
1313+ "encoding": "application/json",
1414+ "schema": {
1515+ "type": "object",
1616+ "properties": {
1717+ "syncStatus": {
1818+ "description": "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.",
1919+ "type": "ref",
2020+ "ref": "app.bsky.contact.defs#syncStatus"
2121+ }
2222+ }
2323+ }
2424+ },
2525+ "errors": [
2626+ {
2727+ "name": "TODO",
2828+ "description": "TODO"
2929+ }
3030+ ]
3131+ }
3232+ }
3333+}
···11+{
22+ "lexicon": 1,
33+ "id": "app.bsky.contact.importContacts",
44+ "defs": {
55+ "main": {
66+ "type": "procedure",
77+ "description": "WARNING: This is unstable and under active development, don't use it while this warning is here. Import contacts for securely matching with other users. This follows the protocol explained in https://docs.bsky.app/blog/contact-import-rfc. Requires authentication.",
88+ "input": {
99+ "encoding": "application/json",
1010+ "schema": {
1111+ "type": "object",
1212+ "required": ["token", "contacts"],
1313+ "properties": {
1414+ "token": {
1515+ "description": "JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`.",
1616+ "type": "string"
1717+ },
1818+ "contacts": {
1919+ "description": "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`.",
2020+ "type": "array",
2121+ "items": {
2222+ "type": "string"
2323+ },
2424+ "minLength": 1,
2525+ "maxLength": 1000
2626+ }
2727+ }
2828+ }
2929+ },
3030+ "output": {
3131+ "encoding": "application/json",
3232+ "schema": {
3333+ "type": "object",
3434+ "required": ["matchesAndContactIndexes"],
3535+ "properties": {
3636+ "matchesAndContactIndexes": {
3737+ "description": "The users that matched during import and their indexes on the input contacts, so the client can correlate with its local list.",
3838+ "type": "array",
3939+ "items": {
4040+ "type": "ref",
4141+ "ref": "app.bsky.contact.defs#matchAndContactIndex"
4242+ }
4343+ }
4444+ }
4545+ }
4646+ },
4747+ "errors": [
4848+ {
4949+ "name": "TODO",
5050+ "description": "TODO"
5151+ }
5252+ ]
5353+ }
5454+ }
5555+}
···11+{
22+ "lexicon": 1,
33+ "id": "app.bsky.contact.sendNotification",
44+ "defs": {
55+ "main": {
66+ "type": "procedure",
77+ "description": "WARNING: This is unstable and under active development, don't use it while this warning is here. System endpoint to send notifications related to contact imports. Requires role authentication.",
88+ "input": {
99+ "encoding": "application/json",
1010+ "schema": {
1111+ "type": "object",
1212+ "required": ["from", "to"],
1313+ "properties": {
1414+ "from": {
1515+ "description": "The DID of who this notification comes from.",
1616+ "type": "string",
1717+ "format": "did"
1818+ },
1919+ "to": {
2020+ "description": "The DID of who this notification should go to.",
2121+ "type": "string",
2222+ "format": "did"
2323+ }
2424+ }
2525+ }
2626+ },
2727+ "output": {
2828+ "encoding": "application/json",
2929+ "schema": {
3030+ "type": "object",
3131+ "properties": {}
3232+ }
3333+ }
3434+ }
3535+ }
3636+}
···11+{
22+ "lexicon": 1,
33+ "id": "app.bsky.contact.verifyPhone",
44+ "defs": {
55+ "main": {
66+ "type": "procedure",
77+ "description": "WARNING: This is unstable and under active development, don't use it while this warning is here. Verifies control over a phone number with a code received via SMS and starts a contact import session. Requires authentication.",
88+ "input": {
99+ "encoding": "application/json",
1010+ "schema": {
1111+ "type": "object",
1212+ "required": ["phone", "code"],
1313+ "properties": {
1414+ "phone": {
1515+ "description": "The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`.",
1616+ "type": "string"
1717+ },
1818+ "code": {
1919+ "description": "The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`.",
2020+ "type": "string"
2121+ }
2222+ }
2323+ }
2424+ },
2525+ "output": {
2626+ "encoding": "application/json",
2727+ "schema": {
2828+ "type": "object",
2929+ "required": ["token"],
3030+ "properties": {
3131+ "token": {
3232+ "description": "JWT to be used in a call to `app.bsky.contact.importContacts`. It is only valid for a single call.",
3333+ "type": "string"
3434+ }
3535+ }
3636+ }
3737+ },
3838+ "errors": [
3939+ {
4040+ "name": "TODO",
4141+ "description": "TODO"
4242+ }
4343+ ]
4444+ }
4545+ }
4646+}
···1616export * as AppBskyBookmarkDefs from './types/app/bsky/bookmark/defs.js';
1717export * as AppBskyBookmarkDeleteBookmark from './types/app/bsky/bookmark/deleteBookmark.js';
1818export * as AppBskyBookmarkGetBookmarks from './types/app/bsky/bookmark/getBookmarks.js';
1919+export * as AppBskyContactDefs from './types/app/bsky/contact/defs.js';
2020+export * as AppBskyContactDismissMatch from './types/app/bsky/contact/dismissMatch.js';
2121+export * as AppBskyContactGetMatches from './types/app/bsky/contact/getMatches.js';
2222+export * as AppBskyContactGetSyncStatus from './types/app/bsky/contact/getSyncStatus.js';
2323+export * as AppBskyContactImportContacts from './types/app/bsky/contact/importContacts.js';
2424+export * as AppBskyContactRemoveData from './types/app/bsky/contact/removeData.js';
2525+export * as AppBskyContactSendNotification from './types/app/bsky/contact/sendNotification.js';
2626+export * as AppBskyContactStartPhoneVerification from './types/app/bsky/contact/startPhoneVerification.js';
2727+export * as AppBskyContactVerifyPhone from './types/app/bsky/contact/verifyPhone.js';
1928export * as AppBskyEmbedDefs from './types/app/bsky/embed/defs.js';
2029export * as AppBskyEmbedExternal from './types/app/bsky/embed/external.js';
2130export * as AppBskyEmbedImages from './types/app/bsky/embed/images.js';
···11+import type {} from '@atcute/lexicons';
22+import * as v from '@atcute/lexicons/validations';
33+import * as AppBskyActorDefs from '../actor/defs.js';
44+55+const _matchAndContactIndexSchema = /*#__PURE__*/ v.object({
66+ $type: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal('app.bsky.contact.defs#matchAndContactIndex')),
77+ /**
88+ * The index of this match in the import contact input.
99+ * @minimum 0
1010+ * @maximum 999
1111+ */
1212+ contactIndex: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [/*#__PURE__*/ v.integerRange(0, 999)]),
1313+ /**
1414+ * Profile of the matched user.
1515+ */
1616+ get match() {
1717+ return AppBskyActorDefs.profileViewSchema;
1818+ },
1919+});
2020+const _notificationSchema = /*#__PURE__*/ v.object({
2121+ $type: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal('app.bsky.contact.defs#notification')),
2222+ /**
2323+ * The DID of who this notification comes from.
2424+ */
2525+ from: /*#__PURE__*/ v.didString(),
2626+ /**
2727+ * The DID of who this notification should go to.
2828+ */
2929+ to: /*#__PURE__*/ v.didString(),
3030+});
3131+const _syncStatusSchema = /*#__PURE__*/ v.object({
3232+ $type: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal('app.bsky.contact.defs#syncStatus')),
3333+ /**
3434+ * 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.
3535+ * @minimum 0
3636+ */
3737+ matchesCount: /*#__PURE__*/ v.integer(),
3838+ /**
3939+ * Last date when contacts where imported.
4040+ */
4141+ syncedAt: /*#__PURE__*/ v.datetimeString(),
4242+});
4343+4444+type matchAndContactIndex$schematype = typeof _matchAndContactIndexSchema;
4545+type notification$schematype = typeof _notificationSchema;
4646+type syncStatus$schematype = typeof _syncStatusSchema;
4747+4848+export interface matchAndContactIndexSchema extends matchAndContactIndex$schematype {}
4949+export interface notificationSchema extends notification$schematype {}
5050+export interface syncStatusSchema extends syncStatus$schematype {}
5151+5252+export const matchAndContactIndexSchema = _matchAndContactIndexSchema as matchAndContactIndexSchema;
5353+export const notificationSchema = _notificationSchema as notificationSchema;
5454+export const syncStatusSchema = _syncStatusSchema as syncStatusSchema;
5555+5656+export interface MatchAndContactIndex extends v.InferInput<typeof matchAndContactIndexSchema> {}
5757+export interface Notification extends v.InferInput<typeof notificationSchema> {}
5858+export interface SyncStatus extends v.InferInput<typeof syncStatusSchema> {}
···11+import type {} from '@atcute/lexicons';
22+import * as v from '@atcute/lexicons/validations';
33+import type {} from '@atcute/lexicons/ambient';
44+import * as AppBskyContactDefs from './defs.js';
55+66+const _mainSchema = /*#__PURE__*/ v.query('app.bsky.contact.getSyncStatus', {
77+ params: /*#__PURE__*/ v.object({}),
88+ output: {
99+ type: 'lex',
1010+ schema: /*#__PURE__*/ v.object({
1111+ /**
1212+ * 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.
1313+ */
1414+ get syncStatus() {
1515+ return /*#__PURE__*/ v.optional(AppBskyContactDefs.syncStatusSchema);
1616+ },
1717+ }),
1818+ },
1919+});
2020+2121+type main$schematype = typeof _mainSchema;
2222+2323+export interface mainSchema extends main$schematype {}
2424+2525+export const mainSchema = _mainSchema as mainSchema;
2626+2727+export interface $params extends v.InferInput<mainSchema['params']> {}
2828+export interface $output extends v.InferXRPCBodyInput<mainSchema['output']> {}
2929+3030+declare module '@atcute/lexicons/ambient' {
3131+ interface XRPCQueries {
3232+ 'app.bsky.contact.getSyncStatus': mainSchema;
3333+ }
3434+}
···11+import type {} from '@atcute/lexicons';
22+import * as v from '@atcute/lexicons/validations';
33+import type {} from '@atcute/lexicons/ambient';
44+import * as AppBskyContactDefs from './defs.js';
55+66+const _mainSchema = /*#__PURE__*/ v.procedure('app.bsky.contact.importContacts', {
77+ params: null,
88+ input: {
99+ type: 'lex',
1010+ schema: /*#__PURE__*/ v.object({
1111+ /**
1212+ * 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`.
1313+ * @minLength 1
1414+ * @maxLength 1000
1515+ */
1616+ contacts: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.array(/*#__PURE__*/ v.string()), [
1717+ /*#__PURE__*/ v.arrayLength(1, 1000),
1818+ ]),
1919+ /**
2020+ * JWT to authenticate the call. Use the JWT received as a response to the call to `app.bsky.contact.verifyPhone`.
2121+ */
2222+ token: /*#__PURE__*/ v.string(),
2323+ }),
2424+ },
2525+ output: {
2626+ type: 'lex',
2727+ schema: /*#__PURE__*/ v.object({
2828+ /**
2929+ * The users that matched during import and their indexes on the input contacts, so the client can correlate with its local list.
3030+ */
3131+ get matchesAndContactIndexes() {
3232+ return /*#__PURE__*/ v.array(AppBskyContactDefs.matchAndContactIndexSchema);
3333+ },
3434+ }),
3535+ },
3636+});
3737+3838+type main$schematype = typeof _mainSchema;
3939+4040+export interface mainSchema extends main$schematype {}
4141+4242+export const mainSchema = _mainSchema as mainSchema;
4343+4444+export interface $params {}
4545+export interface $input extends v.InferXRPCBodyInput<mainSchema['input']> {}
4646+export interface $output extends v.InferXRPCBodyInput<mainSchema['output']> {}
4747+4848+declare module '@atcute/lexicons/ambient' {
4949+ interface XRPCProcedures {
5050+ 'app.bsky.contact.importContacts': mainSchema;
5151+ }
5252+}
···11+import type {} from '@atcute/lexicons';
22+import * as v from '@atcute/lexicons/validations';
33+import type {} from '@atcute/lexicons/ambient';
44+55+const _mainSchema = /*#__PURE__*/ v.procedure('app.bsky.contact.verifyPhone', {
66+ params: null,
77+ input: {
88+ type: 'lex',
99+ schema: /*#__PURE__*/ v.object({
1010+ /**
1111+ * The code received via SMS as a result of the call to `app.bsky.contact.startPhoneVerification`.
1212+ */
1313+ code: /*#__PURE__*/ v.string(),
1414+ /**
1515+ * The phone number to verify. Should be the same as the one passed to `app.bsky.contact.startPhoneVerification`.
1616+ */
1717+ phone: /*#__PURE__*/ v.string(),
1818+ }),
1919+ },
2020+ output: {
2121+ type: 'lex',
2222+ schema: /*#__PURE__*/ v.object({
2323+ /**
2424+ * JWT to be used in a call to `app.bsky.contact.importContacts`. It is only valid for a single call.
2525+ */
2626+ token: /*#__PURE__*/ v.string(),
2727+ }),
2828+ },
2929+});
3030+3131+type main$schematype = typeof _mainSchema;
3232+3333+export interface mainSchema extends main$schematype {}
3434+3535+export const mainSchema = _mainSchema as mainSchema;
3636+3737+export interface $params {}
3838+export interface $input extends v.InferXRPCBodyInput<mainSchema['input']> {}
3939+export interface $output extends v.InferXRPCBodyInput<mainSchema['output']> {}
4040+4141+declare module '@atcute/lexicons/ambient' {
4242+ interface XRPCProcedures {
4343+ 'app.bsky.contact.verifyPhone': mainSchema;
4444+ }
4545+}