From fc2fcf0e7931fcb7ab991a4d4fc68187a71e3a82 Mon Sep 17 00:00:00 2001 From: vineyardbovines Date: Thu, 13 Aug 2026 09:16:35 -0400 Subject: [PATCH] Update atproto API for content visibility lexicon --- package.json | 2 +- pnpm-lock.yaml | 50 +++++++++---------- .../queries/content-visibility-record.ts | 25 ++++------ 3 files changed, 36 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index 6af3698d37..dc0869d86a 100644 --- a/package.json +++ b/package.json @@ -96,7 +96,7 @@ "prettier": "prettier --check ." }, "dependencies": { - "@atproto/api": "0.20.37", + "@atproto/api": "0.20.40", "@atproto/common-web": "0.5.6", "@atproto/syntax": "0.7.2", "@bitdrift/react-native": "^0.6.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce0b6b65f5..534bf91b65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -242,8 +242,8 @@ importers: .: dependencies: '@atproto/api': - specifier: 0.20.37 - version: 0.20.37 + specifier: 0.20.40 + version: 0.20.40 '@atproto/common-web': specifier: 0.5.6 version: 0.5.6 @@ -874,16 +874,16 @@ packages: graphql: optional: true - '@atproto/api@0.20.37': - resolution: {integrity: sha512-TEt8oKMbuC+1GvqyLKDBLqmptnk1mh52FdHPQEomlPIWxh88YcNnk0g0iKNVBevaeeLtWZF1a7Am/t/q255u5Q==} + '@atproto/api@0.20.40': + resolution: {integrity: sha512-8ClSOeFEhtwLrE7G6eFOdLJLtu5K0A/joYRd+urHS3OZG2uiBrEoIU2JbYcPZjEJ5xtWMo9VJiKV5zPSH7rP3Q==} engines: {node: '>=22'} '@atproto/common-web@0.5.6': resolution: {integrity: sha512-5Y4MIK9dpkJPiKiE6u7iEHitxj+g3aAU2GfGL686JlKE2zDKD4y18BJb+uVek6nXQKb5XOdNVvw+7BHarpn8Fw==} engines: {node: '>=22'} - '@atproto/common-web@0.5.8': - resolution: {integrity: sha512-GiYY2Jgbg1aWe9QGT3TswC/wZNicipBDz0nFo4FrP6XqENEJJRxGKAf/zjvqbesfIQFhHXi1VbSFY7GStB8v8w==} + '@atproto/common-web@0.5.9': + resolution: {integrity: sha512-2c5C6YV8352JJz9Z5fNfcsstllaKGAb3cQW9aO7unMAGh/FzTGFq+xOwNMW2lTeagO6z530uxYm8AiSRM6O+DQ==} engines: {node: '>=22'} '@atproto/lex-data@0.1.5': @@ -902,20 +902,20 @@ packages: resolution: {integrity: sha512-mvrAd0lbyuecIHjyld8QN6MN6CBf4j0GCxLzegsvLh0SvDf+GbYWklkcQqmITL44yFQOwmA/QNIQj0Uvh7+R/g==} engines: {node: '>=22'} - '@atproto/lexicon@0.7.10': - resolution: {integrity: sha512-HH/3d3z5Qt0JoJ9iOuLP/YT++6lb5wWMQsvgQ2TGfgkbuzDQ6AX6X1H5uJ9luPci4/LaADfpwLZfeqyy/Hjfaw==} + '@atproto/lexicon@0.7.11': + resolution: {integrity: sha512-ukCZMCWmiu7fAlssBbLs+IMaf2K2R9mADaTKz2jEeC/xeZ3jT77Ka0S2G+ELBB+Dc9ijBACU0iPMQLhquOkuzQ==} engines: {node: '>=22'} '@atproto/syntax@0.7.2': resolution: {integrity: sha512-tZ1Tr0R9pK4bI4Zs69t29cjMlCFQvRNBeNkqJC5pGeNuCt64D0eoF7s/AlqeVmYppClmQ0xJquggGgsMDP6j7w==} engines: {node: '>=22'} - '@atproto/syntax@0.7.3': - resolution: {integrity: sha512-7LU8Ra79L5wCqVAZZst2352VMMwkU4KNagVMm6pnURrY/uS7+HrJl3XCuA4V2Gy2dEpkt1r6DBxlsP43/VjDBw==} + '@atproto/syntax@0.7.4': + resolution: {integrity: sha512-EHsEHtasH/DGPljBYecVDjweGMQ5eTu6Ns0GZ5z0qdqpOI8ipBvldWnMIxWkA+5HfZ9Dsu4V1MX0WP7wgL8cuA==} engines: {node: '>=22'} - '@atproto/xrpc@0.8.9': - resolution: {integrity: sha512-3jRiAuHCqYFoT8Nv25xFRmgrfmoo84yBnB5PfVP95JoRP+szIkwHS6mq72ZETYbWmLA1tNyR5QVEHrhHZ1LQhw==} + '@atproto/xrpc@0.8.10': + resolution: {integrity: sha512-++FNpTVF61fF8+3Kk1RYtdTO7xyUTdIc/Cmfk2CMn29Qw9tZD8bmW+M5db1Z0okYWFWK8Wqu7bc9VmF8tUB8Jg==} engines: {node: '>=22'} '@babel/code-frame@7.10.4': @@ -9415,12 +9415,12 @@ snapshots: '@0no-co/graphql.web@1.2.0': {} - '@atproto/api@0.20.37': + '@atproto/api@0.20.40': dependencies: - '@atproto/common-web': 0.5.8 - '@atproto/lexicon': 0.7.10 - '@atproto/syntax': 0.7.3 - '@atproto/xrpc': 0.8.9 + '@atproto/common-web': 0.5.9 + '@atproto/lexicon': 0.7.11 + '@atproto/syntax': 0.7.4 + '@atproto/xrpc': 0.8.10 await-lock: 3.0.0 multiformats: 13.4.2 tlds: 1.261.0 @@ -9433,11 +9433,11 @@ snapshots: '@atproto/syntax': 0.7.2 zod: 3.25.76 - '@atproto/common-web@0.5.8': + '@atproto/common-web@0.5.9': dependencies: '@atproto/lex-data': 0.1.7 '@atproto/lex-json': 0.1.6 - '@atproto/syntax': 0.7.3 + '@atproto/syntax': 0.7.4 zod: 3.25.76 '@atproto/lex-data@0.1.5': @@ -9462,10 +9462,10 @@ snapshots: '@atproto/lex-data': 0.1.7 tslib: 2.8.1 - '@atproto/lexicon@0.7.10': + '@atproto/lexicon@0.7.11': dependencies: - '@atproto/common-web': 0.5.8 - '@atproto/syntax': 0.7.3 + '@atproto/common-web': 0.5.9 + '@atproto/syntax': 0.7.4 multiformats: 13.4.2 zod: 3.25.76 @@ -9474,14 +9474,14 @@ snapshots: iso-datestring-validator: 2.2.2 tslib: 2.8.1 - '@atproto/syntax@0.7.3': + '@atproto/syntax@0.7.4': dependencies: iso-datestring-validator: 2.2.2 tslib: 2.8.1 - '@atproto/xrpc@0.8.9': + '@atproto/xrpc@0.8.10': dependencies: - '@atproto/lexicon': 0.7.10 + '@atproto/lexicon': 0.7.11 zod: 3.25.76 '@babel/code-frame@7.10.4': diff --git a/src/state/queries/content-visibility-record.ts b/src/state/queries/content-visibility-record.ts index be75f3a192..3f690daacf 100644 --- a/src/state/queries/content-visibility-record.ts +++ b/src/state/queries/content-visibility-record.ts @@ -1,11 +1,11 @@ +import {AppBskyActorContentVisibilityDeclaration} from '@atproto/api' + export const CONTENT_VISIBILITY_COLLECTION = 'app.bsky.actor.contentVisibilityDeclaration' as const export const CONTENT_VISIBILITY_RKEY = 'self' -export type ContentVisibilityRecord = { - $type: typeof CONTENT_VISIBILITY_COLLECTION - hideFromAlgorithmicRecommendations: boolean -} +export type ContentVisibilityRecord = + AppBskyActorContentVisibilityDeclaration.Record export function createContentVisibilityRecord( hideFromAlgorithmicRecommendations: boolean, @@ -19,16 +19,11 @@ export function createContentVisibilityRecord( export function parseContentVisibilityRecord( value: unknown, ): ContentVisibilityRecord { - if ( - typeof value !== 'object' || - value === null || - !('$type' in value) || - value.$type !== CONTENT_VISIBILITY_COLLECTION || - !('hideFromAlgorithmicRecommendations' in value) || - typeof value.hideFromAlgorithmicRecommendations !== 'boolean' - ) { - throw new Error('Invalid content visibility record') + const result = AppBskyActorContentVisibilityDeclaration.validateRecord(value) + if (!result.success) { + throw new Error('Invalid content visibility record', { + cause: result.error, + }) } - - return value as ContentVisibilityRecord + return result.value }