From cbf17066f314fbc7f2e943127ee4a9f589f8bec2 Mon Sep 17 00:00:00 2001 From: rafael Date: Fri, 17 Jan 2025 20:26:29 -0300 Subject: [PATCH] feed generator content mode (#3389) --- .changeset/dull-zebras-prove.md | 6 + lexicons/app/bsky/feed/defs.json | 15 +++ lexicons/app/bsky/feed/generator.json | 7 ++ packages/api/src/client/index.ts | 2 + packages/api/src/client/lexicons.ts | 23 ++++ .../src/client/types/app/bsky/feed/defs.ts | 9 ++ .../client/types/app/bsky/feed/generator.ts | 4 + packages/bsky/src/lexicon/index.ts | 2 + packages/bsky/src/lexicon/lexicons.ts | 23 ++++ .../src/lexicon/types/app/bsky/feed/defs.ts | 9 ++ .../lexicon/types/app/bsky/feed/generator.ts | 4 + packages/bsky/src/views/index.ts | 1 + .../feed-generation.test.ts.snap | 113 ++++++++++++++++-- packages/bsky/tests/feed-generation.test.ts | 42 ++++++- packages/ozone/src/lexicon/index.ts | 2 + packages/ozone/src/lexicon/lexicons.ts | 23 ++++ .../src/lexicon/types/app/bsky/feed/defs.ts | 9 ++ .../lexicon/types/app/bsky/feed/generator.ts | 4 + packages/pds/src/lexicon/index.ts | 2 + packages/pds/src/lexicon/lexicons.ts | 23 ++++ .../src/lexicon/types/app/bsky/feed/defs.ts | 9 ++ .../lexicon/types/app/bsky/feed/generator.ts | 4 + 22 files changed, 320 insertions(+), 16 deletions(-) create mode 100644 .changeset/dull-zebras-prove.md diff --git a/.changeset/dull-zebras-prove.md b/.changeset/dull-zebras-prove.md new file mode 100644 index 00000000000..ba8bc98a662 --- /dev/null +++ b/.changeset/dull-zebras-prove.md @@ -0,0 +1,6 @@ +--- +"@atproto/bsky": patch +"@atproto/api": patch +--- + +add feedgen content mode lexicon spec diff --git a/lexicons/app/bsky/feed/defs.json b/lexicons/app/bsky/feed/defs.json index 341f7fbd02b..8aca402f830 100644 --- a/lexicons/app/bsky/feed/defs.json +++ b/lexicons/app/bsky/feed/defs.json @@ -162,6 +162,13 @@ "items": { "type": "ref", "ref": "com.atproto.label.defs#label" } }, "viewer": { "type": "ref", "ref": "#generatorViewerState" }, + "contentMode": { + "type": "string", + "knownValues": [ + "app.bsky.feed.defs#contentModeUnspecified", + "app.bsky.feed.defs#contentModeVideo" + ] + }, "indexedAt": { "type": "string", "format": "datetime" } } }, @@ -262,6 +269,14 @@ "type": "token", "description": "User clicked through to the embedded content of the feed item" }, + "contentModeUnspecified": { + "type": "token", + "description": "Declares the feed generator returns any types of posts." + }, + "contentModeVideo": { + "type": "token", + "description": "Declares the feed generator returns posts containing app.bsky.embed.video embeds." + }, "interactionSeen": { "type": "token", "description": "Feed item was seen by user" diff --git a/lexicons/app/bsky/feed/generator.json b/lexicons/app/bsky/feed/generator.json index 1406d542fd1..fec0c0fafe7 100644 --- a/lexicons/app/bsky/feed/generator.json +++ b/lexicons/app/bsky/feed/generator.json @@ -39,6 +39,13 @@ "description": "Self-label values", "refs": ["com.atproto.label.defs#selfLabels"] }, + "contentMode": { + "type": "string", + "knownValues": [ + "app.bsky.feed.defs#contentModeUnspecified", + "app.bsky.feed.defs#contentModeVideo" + ] + }, "createdAt": { "type": "string", "format": "datetime" } } } diff --git a/packages/api/src/client/index.ts b/packages/api/src/client/index.ts index fcced108ca1..5f46b6b277c 100644 --- a/packages/api/src/client/index.ts +++ b/packages/api/src/client/index.ts @@ -478,6 +478,8 @@ export const APP_BSKY_FEED = { DefsClickthroughAuthor: 'app.bsky.feed.defs#clickthroughAuthor', DefsClickthroughReposter: 'app.bsky.feed.defs#clickthroughReposter', DefsClickthroughEmbed: 'app.bsky.feed.defs#clickthroughEmbed', + DefsContentModeUnspecified: 'app.bsky.feed.defs#contentModeUnspecified', + DefsContentModeVideo: 'app.bsky.feed.defs#contentModeVideo', DefsInteractionSeen: 'app.bsky.feed.defs#interactionSeen', DefsInteractionLike: 'app.bsky.feed.defs#interactionLike', DefsInteractionRepost: 'app.bsky.feed.defs#interactionRepost', diff --git a/packages/api/src/client/lexicons.ts b/packages/api/src/client/lexicons.ts index 963fbee538b..154f03f9aa1 100644 --- a/packages/api/src/client/lexicons.ts +++ b/packages/api/src/client/lexicons.ts @@ -5778,6 +5778,13 @@ export const schemaDict = { type: 'ref', ref: 'lex:app.bsky.feed.defs#generatorViewerState', }, + contentMode: { + type: 'string', + knownValues: [ + 'app.bsky.feed.defs#contentModeUnspecified', + 'app.bsky.feed.defs#contentModeVideo', + ], + }, indexedAt: { type: 'string', format: 'datetime', @@ -5912,6 +5919,15 @@ export const schemaDict = { description: 'User clicked through to the embedded content of the feed item', }, + contentModeUnspecified: { + type: 'token', + description: 'Declares the feed generator returns any types of posts.', + }, + contentModeVideo: { + type: 'token', + description: + 'Declares the feed generator returns posts containing app.bsky.embed.video embeds.', + }, interactionSeen: { type: 'token', description: 'Feed item was seen by user', @@ -6043,6 +6059,13 @@ export const schemaDict = { description: 'Self-label values', refs: ['lex:com.atproto.label.defs#selfLabels'], }, + contentMode: { + type: 'string', + knownValues: [ + 'app.bsky.feed.defs#contentModeUnspecified', + 'app.bsky.feed.defs#contentModeVideo', + ], + }, createdAt: { type: 'string', format: 'datetime', diff --git a/packages/api/src/client/types/app/bsky/feed/defs.ts b/packages/api/src/client/types/app/bsky/feed/defs.ts index bc50067c1da..64c3f7247d8 100644 --- a/packages/api/src/client/types/app/bsky/feed/defs.ts +++ b/packages/api/src/client/types/app/bsky/feed/defs.ts @@ -247,6 +247,10 @@ export interface GeneratorView { acceptsInteractions?: boolean labels?: ComAtprotoLabelDefs.Label[] viewer?: GeneratorViewerState + contentMode?: + | 'app.bsky.feed.defs#contentModeUnspecified' + | 'app.bsky.feed.defs#contentModeVideo' + | (string & {}) indexedAt: string [k: string]: unknown } @@ -401,6 +405,11 @@ export const CLICKTHROUGHAUTHOR = 'app.bsky.feed.defs#clickthroughAuthor' export const CLICKTHROUGHREPOSTER = 'app.bsky.feed.defs#clickthroughReposter' /** User clicked through to the embedded content of the feed item */ export const CLICKTHROUGHEMBED = 'app.bsky.feed.defs#clickthroughEmbed' +/** Declares the feed generator returns any types of posts. */ +export const CONTENTMODEUNSPECIFIED = + 'app.bsky.feed.defs#contentModeUnspecified' +/** Declares the feed generator returns posts containing app.bsky.embed.video embeds. */ +export const CONTENTMODEVIDEO = 'app.bsky.feed.defs#contentModeVideo' /** Feed item was seen by user */ export const INTERACTIONSEEN = 'app.bsky.feed.defs#interactionSeen' /** User liked the feed item */ diff --git a/packages/api/src/client/types/app/bsky/feed/generator.ts b/packages/api/src/client/types/app/bsky/feed/generator.ts index b36796dd353..8e1dd9e9c80 100644 --- a/packages/api/src/client/types/app/bsky/feed/generator.ts +++ b/packages/api/src/client/types/app/bsky/feed/generator.ts @@ -19,6 +19,10 @@ export interface Record { labels?: | ComAtprotoLabelDefs.SelfLabels | { $type: string; [k: string]: unknown } + contentMode?: + | 'app.bsky.feed.defs#contentModeUnspecified' + | 'app.bsky.feed.defs#contentModeVideo' + | (string & {}) createdAt: string [k: string]: unknown } diff --git a/packages/bsky/src/lexicon/index.ts b/packages/bsky/src/lexicon/index.ts index 89ee5f3b2fa..27ddc898f4d 100644 --- a/packages/bsky/src/lexicon/index.ts +++ b/packages/bsky/src/lexicon/index.ts @@ -181,6 +181,8 @@ export const APP_BSKY_FEED = { DefsClickthroughAuthor: 'app.bsky.feed.defs#clickthroughAuthor', DefsClickthroughReposter: 'app.bsky.feed.defs#clickthroughReposter', DefsClickthroughEmbed: 'app.bsky.feed.defs#clickthroughEmbed', + DefsContentModeUnspecified: 'app.bsky.feed.defs#contentModeUnspecified', + DefsContentModeVideo: 'app.bsky.feed.defs#contentModeVideo', DefsInteractionSeen: 'app.bsky.feed.defs#interactionSeen', DefsInteractionLike: 'app.bsky.feed.defs#interactionLike', DefsInteractionRepost: 'app.bsky.feed.defs#interactionRepost', diff --git a/packages/bsky/src/lexicon/lexicons.ts b/packages/bsky/src/lexicon/lexicons.ts index d16b479f5ef..397370e3bc3 100644 --- a/packages/bsky/src/lexicon/lexicons.ts +++ b/packages/bsky/src/lexicon/lexicons.ts @@ -5778,6 +5778,13 @@ export const schemaDict = { type: 'ref', ref: 'lex:app.bsky.feed.defs#generatorViewerState', }, + contentMode: { + type: 'string', + knownValues: [ + 'app.bsky.feed.defs#contentModeUnspecified', + 'app.bsky.feed.defs#contentModeVideo', + ], + }, indexedAt: { type: 'string', format: 'datetime', @@ -5912,6 +5919,15 @@ export const schemaDict = { description: 'User clicked through to the embedded content of the feed item', }, + contentModeUnspecified: { + type: 'token', + description: 'Declares the feed generator returns any types of posts.', + }, + contentModeVideo: { + type: 'token', + description: + 'Declares the feed generator returns posts containing app.bsky.embed.video embeds.', + }, interactionSeen: { type: 'token', description: 'Feed item was seen by user', @@ -6043,6 +6059,13 @@ export const schemaDict = { description: 'Self-label values', refs: ['lex:com.atproto.label.defs#selfLabels'], }, + contentMode: { + type: 'string', + knownValues: [ + 'app.bsky.feed.defs#contentModeUnspecified', + 'app.bsky.feed.defs#contentModeVideo', + ], + }, createdAt: { type: 'string', format: 'datetime', diff --git a/packages/bsky/src/lexicon/types/app/bsky/feed/defs.ts b/packages/bsky/src/lexicon/types/app/bsky/feed/defs.ts index 1c6f6ce78f6..4472369375e 100644 --- a/packages/bsky/src/lexicon/types/app/bsky/feed/defs.ts +++ b/packages/bsky/src/lexicon/types/app/bsky/feed/defs.ts @@ -247,6 +247,10 @@ export interface GeneratorView { acceptsInteractions?: boolean labels?: ComAtprotoLabelDefs.Label[] viewer?: GeneratorViewerState + contentMode?: + | 'app.bsky.feed.defs#contentModeUnspecified' + | 'app.bsky.feed.defs#contentModeVideo' + | (string & {}) indexedAt: string [k: string]: unknown } @@ -401,6 +405,11 @@ export const CLICKTHROUGHAUTHOR = 'app.bsky.feed.defs#clickthroughAuthor' export const CLICKTHROUGHREPOSTER = 'app.bsky.feed.defs#clickthroughReposter' /** User clicked through to the embedded content of the feed item */ export const CLICKTHROUGHEMBED = 'app.bsky.feed.defs#clickthroughEmbed' +/** Declares the feed generator returns any types of posts. */ +export const CONTENTMODEUNSPECIFIED = + 'app.bsky.feed.defs#contentModeUnspecified' +/** Declares the feed generator returns posts containing app.bsky.embed.video embeds. */ +export const CONTENTMODEVIDEO = 'app.bsky.feed.defs#contentModeVideo' /** Feed item was seen by user */ export const INTERACTIONSEEN = 'app.bsky.feed.defs#interactionSeen' /** User liked the feed item */ diff --git a/packages/bsky/src/lexicon/types/app/bsky/feed/generator.ts b/packages/bsky/src/lexicon/types/app/bsky/feed/generator.ts index eb8e8d0f633..482c7a7444e 100644 --- a/packages/bsky/src/lexicon/types/app/bsky/feed/generator.ts +++ b/packages/bsky/src/lexicon/types/app/bsky/feed/generator.ts @@ -19,6 +19,10 @@ export interface Record { labels?: | ComAtprotoLabelDefs.SelfLabels | { $type: string; [k: string]: unknown } + contentMode?: + | 'app.bsky.feed.defs#contentModeUnspecified' + | 'app.bsky.feed.defs#contentModeVideo' + | (string & {}) createdAt: string [k: string]: unknown } diff --git a/packages/bsky/src/views/index.ts b/packages/bsky/src/views/index.ts index 7f61ec92a6b..ee511b3a9a4 100644 --- a/packages/bsky/src/views/index.ts +++ b/packages/bsky/src/views/index.ts @@ -572,6 +572,7 @@ export class Views { like: viewer.like, } : undefined, + contentMode: feedgen.record.contentMode, indexedAt: this.indexedAt(feedgen).toISOString(), } } diff --git a/packages/bsky/tests/__snapshots__/feed-generation.test.ts.snap b/packages/bsky/tests/__snapshots__/feed-generation.test.ts.snap index b69224bd3ce..da7a8fe5041 100644 --- a/packages/bsky/tests/__snapshots__/feed-generation.test.ts.snap +++ b/packages/bsky/tests/__snapshots__/feed-generation.test.ts.snap @@ -324,6 +324,7 @@ Array [ }, Object { "cid": "cids(3)", + "contentMode": "app.bsky.feed.defs#contentModeVideo", "creator": Object { "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(1)@jpeg", "createdAt": "1970-01-01T00:00:00.000Z", @@ -355,9 +356,9 @@ Array [ "muted": false, }, }, - "description": "Provides all feed candidates when authed", + "description": "Has a contentMode specified", "did": "user(0)", - "displayName": "Needs Auth", + "displayName": "Content mode video", "indexedAt": "1970-01-01T00:00:00.000Z", "labels": Array [], "likeCount": 0, @@ -397,9 +398,9 @@ Array [ "muted": false, }, }, - "description": "Echoes back the same cursor it received", + "description": "Provides all feed candidates when authed", "did": "user(0)", - "displayName": "Bad Pagination Cursor", + "displayName": "Needs Auth", "indexedAt": "1970-01-01T00:00:00.000Z", "labels": Array [], "likeCount": 0, @@ -439,9 +440,9 @@ Array [ "muted": false, }, }, - "description": "Provides all feed candidates, blindly ignoring pagination limit", + "description": "Echoes back the same cursor it received", "did": "user(0)", - "displayName": "Bad Pagination Limit", + "displayName": "Bad Pagination Cursor", "indexedAt": "1970-01-01T00:00:00.000Z", "labels": Array [], "likeCount": 0, @@ -481,9 +482,9 @@ Array [ "muted": false, }, }, - "description": "Provides even-indexed feed candidates", + "description": "Provides all feed candidates, blindly ignoring pagination limit", "did": "user(0)", - "displayName": "Even", + "displayName": "Bad Pagination Limit", "indexedAt": "1970-01-01T00:00:00.000Z", "labels": Array [], "likeCount": 0, @@ -523,15 +524,57 @@ Array [ "muted": false, }, }, + "description": "Provides even-indexed feed candidates", + "did": "user(0)", + "displayName": "Even", + "indexedAt": "1970-01-01T00:00:00.000Z", + "labels": Array [], + "likeCount": 0, + "uri": "record(8)", + "viewer": Object {}, + }, + Object { + "cid": "cids(8)", + "creator": Object { + "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(1)@jpeg", + "createdAt": "1970-01-01T00:00:00.000Z", + "description": "its me!", + "did": "user(1)", + "displayName": "ali", + "handle": "alice.test", + "indexedAt": "1970-01-01T00:00:00.000Z", + "labels": Array [ + Object { + "cid": "cids(2)", + "cts": "1970-01-01T00:00:00.000Z", + "src": "user(1)", + "uri": "record(3)", + "val": "self-label-a", + }, + Object { + "cid": "cids(2)", + "cts": "1970-01-01T00:00:00.000Z", + "src": "user(1)", + "uri": "record(3)", + "val": "self-label-b", + }, + ], + "viewer": Object { + "blockedBy": false, + "followedBy": "record(2)", + "following": "record(1)", + "muted": false, + }, + }, "description": "Provides all feed candidates", "did": "user(0)", "displayName": "All", "indexedAt": "1970-01-01T00:00:00.000Z", "labels": Array [], "likeCount": 2, - "uri": "record(8)", + "uri": "record(9)", "viewer": Object { - "like": "record(9)", + "like": "record(10)", }, }, ] @@ -1723,6 +1766,56 @@ Array [ ] `; +exports[`feed generation getFeedGenerator describes a feed gen & returns content mode 1`] = ` +Object { + "isOnline": true, + "isValid": true, + "view": Object { + "cid": "cids(0)", + "contentMode": "app.bsky.feed.defs#contentModeVideo", + "creator": Object { + "avatar": "https://bsky.public.url/img/avatar/plain/user(2)/cids(1)@jpeg", + "createdAt": "1970-01-01T00:00:00.000Z", + "description": "its me!", + "did": "user(1)", + "displayName": "ali", + "handle": "alice.test", + "indexedAt": "1970-01-01T00:00:00.000Z", + "labels": Array [ + Object { + "cid": "cids(2)", + "cts": "1970-01-01T00:00:00.000Z", + "src": "user(1)", + "uri": "record(3)", + "val": "self-label-a", + }, + Object { + "cid": "cids(2)", + "cts": "1970-01-01T00:00:00.000Z", + "src": "user(1)", + "uri": "record(3)", + "val": "self-label-b", + }, + ], + "viewer": Object { + "blockedBy": false, + "followedBy": "record(2)", + "following": "record(1)", + "muted": false, + }, + }, + "description": "Has a contentMode specified", + "did": "user(0)", + "displayName": "Content mode video", + "indexedAt": "1970-01-01T00:00:00.000Z", + "labels": Array [], + "likeCount": 0, + "uri": "record(0)", + "viewer": Object {}, + }, +} +`; + exports[`feed generation getFeedGenerator describes a feed gen & returns online status 1`] = ` Object { "isOnline": true, diff --git a/packages/bsky/tests/feed-generation.test.ts b/packages/bsky/tests/feed-generation.test.ts index 105e11c19d9..47d144ea1b5 100644 --- a/packages/bsky/tests/feed-generation.test.ts +++ b/packages/bsky/tests/feed-generation.test.ts @@ -35,6 +35,7 @@ describe('feed generation', () => { let feedUriPrime: string // Taken-down let feedUriPrimeRef: RecordRef let feedUriNeedsAuth: string + let feedUriContentModeVideo: string let starterPackRef: { uri: string; cid: string } beforeAll(async () => { @@ -173,6 +174,17 @@ describe('feed generation', () => { }, sc.getHeaders(alice), ) + const contentModeVideo = await pdsAgent.api.app.bsky.feed.generator.create( + { repo: alice, rkey: 'content-mode-video' }, + { + did: gen.did, + displayName: 'Content mode video', + description: 'Has a contentMode specified', + createdAt: new Date().toISOString(), + contentMode: 'app.bsky.feed.defs#contentModeVideo', + }, + sc.getHeaders(alice), + ) await network.processAll() await network.bsky.ctx.dataplane.takedownRecord({ recordUri: prime.uri, @@ -187,6 +199,7 @@ describe('feed generation', () => { feedUriPrime = prime.uri feedUriPrimeRef = new RecordRef(prime.uri, prime.cid) feedUriNeedsAuth = needsAuth.uri + feedUriContentModeVideo = contentModeVideo.uri }) it('feed gen records can be updated', async () => { @@ -229,13 +242,14 @@ describe('feed generation', () => { const paginatedAll = results(await paginateAll(paginator)) - expect(paginatedAll.length).toEqual(6) + expect(paginatedAll.length).toEqual(7) expect(paginatedAll[0].uri).toEqual(feedUriOdd) - expect(paginatedAll[1].uri).toEqual(feedUriNeedsAuth) - expect(paginatedAll[2].uri).toEqual(feedUriBadPaginationCursor) - expect(paginatedAll[3].uri).toEqual(feedUriBadPaginationLimit) - expect(paginatedAll[4].uri).toEqual(feedUriEven) - expect(paginatedAll[5].uri).toEqual(feedUriAll) + expect(paginatedAll[1].uri).toEqual(feedUriContentModeVideo) + expect(paginatedAll[2].uri).toEqual(feedUriNeedsAuth) + expect(paginatedAll[3].uri).toEqual(feedUriBadPaginationCursor) + expect(paginatedAll[4].uri).toEqual(feedUriBadPaginationLimit) + expect(paginatedAll[5].uri).toEqual(feedUriEven) + expect(paginatedAll[6].uri).toEqual(feedUriAll) expect(paginatedAll.map((fg) => fg.uri)).not.toContain(feedUriPrime) // taken-down expect(forSnapshot(paginatedAll)).toMatchSnapshot() }) @@ -399,6 +413,22 @@ describe('feed generation', () => { expect(resEven.data.isValid).toBe(true) }) + it('describes a feed gen & returns content mode', async () => { + const resEven = await agent.api.app.bsky.feed.getFeedGenerator( + { feed: feedUriContentModeVideo }, + { + headers: await network.serviceHeaders( + sc.dids.bob, + ids.AppBskyFeedGetFeedGenerator, + ), + }, + ) + expect(forSnapshot(resEven.data)).toMatchSnapshot() + expect(resEven.data.view.contentMode).toBe( + 'app.bsky.feed.defs#contentModeVideo', + ) + }) + it('does not describe taken-down feed', async () => { const tryGetFeed = agent.api.app.bsky.feed.getFeedGenerator( { feed: feedUriPrime }, diff --git a/packages/ozone/src/lexicon/index.ts b/packages/ozone/src/lexicon/index.ts index e5015348f6c..dc68082677f 100644 --- a/packages/ozone/src/lexicon/index.ts +++ b/packages/ozone/src/lexicon/index.ts @@ -211,6 +211,8 @@ export const APP_BSKY_FEED = { DefsClickthroughAuthor: 'app.bsky.feed.defs#clickthroughAuthor', DefsClickthroughReposter: 'app.bsky.feed.defs#clickthroughReposter', DefsClickthroughEmbed: 'app.bsky.feed.defs#clickthroughEmbed', + DefsContentModeUnspecified: 'app.bsky.feed.defs#contentModeUnspecified', + DefsContentModeVideo: 'app.bsky.feed.defs#contentModeVideo', DefsInteractionSeen: 'app.bsky.feed.defs#interactionSeen', DefsInteractionLike: 'app.bsky.feed.defs#interactionLike', DefsInteractionRepost: 'app.bsky.feed.defs#interactionRepost', diff --git a/packages/ozone/src/lexicon/lexicons.ts b/packages/ozone/src/lexicon/lexicons.ts index 963fbee538b..154f03f9aa1 100644 --- a/packages/ozone/src/lexicon/lexicons.ts +++ b/packages/ozone/src/lexicon/lexicons.ts @@ -5778,6 +5778,13 @@ export const schemaDict = { type: 'ref', ref: 'lex:app.bsky.feed.defs#generatorViewerState', }, + contentMode: { + type: 'string', + knownValues: [ + 'app.bsky.feed.defs#contentModeUnspecified', + 'app.bsky.feed.defs#contentModeVideo', + ], + }, indexedAt: { type: 'string', format: 'datetime', @@ -5912,6 +5919,15 @@ export const schemaDict = { description: 'User clicked through to the embedded content of the feed item', }, + contentModeUnspecified: { + type: 'token', + description: 'Declares the feed generator returns any types of posts.', + }, + contentModeVideo: { + type: 'token', + description: + 'Declares the feed generator returns posts containing app.bsky.embed.video embeds.', + }, interactionSeen: { type: 'token', description: 'Feed item was seen by user', @@ -6043,6 +6059,13 @@ export const schemaDict = { description: 'Self-label values', refs: ['lex:com.atproto.label.defs#selfLabels'], }, + contentMode: { + type: 'string', + knownValues: [ + 'app.bsky.feed.defs#contentModeUnspecified', + 'app.bsky.feed.defs#contentModeVideo', + ], + }, createdAt: { type: 'string', format: 'datetime', diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/defs.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/defs.ts index 1c6f6ce78f6..4472369375e 100644 --- a/packages/ozone/src/lexicon/types/app/bsky/feed/defs.ts +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/defs.ts @@ -247,6 +247,10 @@ export interface GeneratorView { acceptsInteractions?: boolean labels?: ComAtprotoLabelDefs.Label[] viewer?: GeneratorViewerState + contentMode?: + | 'app.bsky.feed.defs#contentModeUnspecified' + | 'app.bsky.feed.defs#contentModeVideo' + | (string & {}) indexedAt: string [k: string]: unknown } @@ -401,6 +405,11 @@ export const CLICKTHROUGHAUTHOR = 'app.bsky.feed.defs#clickthroughAuthor' export const CLICKTHROUGHREPOSTER = 'app.bsky.feed.defs#clickthroughReposter' /** User clicked through to the embedded content of the feed item */ export const CLICKTHROUGHEMBED = 'app.bsky.feed.defs#clickthroughEmbed' +/** Declares the feed generator returns any types of posts. */ +export const CONTENTMODEUNSPECIFIED = + 'app.bsky.feed.defs#contentModeUnspecified' +/** Declares the feed generator returns posts containing app.bsky.embed.video embeds. */ +export const CONTENTMODEVIDEO = 'app.bsky.feed.defs#contentModeVideo' /** Feed item was seen by user */ export const INTERACTIONSEEN = 'app.bsky.feed.defs#interactionSeen' /** User liked the feed item */ diff --git a/packages/ozone/src/lexicon/types/app/bsky/feed/generator.ts b/packages/ozone/src/lexicon/types/app/bsky/feed/generator.ts index eb8e8d0f633..482c7a7444e 100644 --- a/packages/ozone/src/lexicon/types/app/bsky/feed/generator.ts +++ b/packages/ozone/src/lexicon/types/app/bsky/feed/generator.ts @@ -19,6 +19,10 @@ export interface Record { labels?: | ComAtprotoLabelDefs.SelfLabels | { $type: string; [k: string]: unknown } + contentMode?: + | 'app.bsky.feed.defs#contentModeUnspecified' + | 'app.bsky.feed.defs#contentModeVideo' + | (string & {}) createdAt: string [k: string]: unknown } diff --git a/packages/pds/src/lexicon/index.ts b/packages/pds/src/lexicon/index.ts index e5015348f6c..dc68082677f 100644 --- a/packages/pds/src/lexicon/index.ts +++ b/packages/pds/src/lexicon/index.ts @@ -211,6 +211,8 @@ export const APP_BSKY_FEED = { DefsClickthroughAuthor: 'app.bsky.feed.defs#clickthroughAuthor', DefsClickthroughReposter: 'app.bsky.feed.defs#clickthroughReposter', DefsClickthroughEmbed: 'app.bsky.feed.defs#clickthroughEmbed', + DefsContentModeUnspecified: 'app.bsky.feed.defs#contentModeUnspecified', + DefsContentModeVideo: 'app.bsky.feed.defs#contentModeVideo', DefsInteractionSeen: 'app.bsky.feed.defs#interactionSeen', DefsInteractionLike: 'app.bsky.feed.defs#interactionLike', DefsInteractionRepost: 'app.bsky.feed.defs#interactionRepost', diff --git a/packages/pds/src/lexicon/lexicons.ts b/packages/pds/src/lexicon/lexicons.ts index 963fbee538b..154f03f9aa1 100644 --- a/packages/pds/src/lexicon/lexicons.ts +++ b/packages/pds/src/lexicon/lexicons.ts @@ -5778,6 +5778,13 @@ export const schemaDict = { type: 'ref', ref: 'lex:app.bsky.feed.defs#generatorViewerState', }, + contentMode: { + type: 'string', + knownValues: [ + 'app.bsky.feed.defs#contentModeUnspecified', + 'app.bsky.feed.defs#contentModeVideo', + ], + }, indexedAt: { type: 'string', format: 'datetime', @@ -5912,6 +5919,15 @@ export const schemaDict = { description: 'User clicked through to the embedded content of the feed item', }, + contentModeUnspecified: { + type: 'token', + description: 'Declares the feed generator returns any types of posts.', + }, + contentModeVideo: { + type: 'token', + description: + 'Declares the feed generator returns posts containing app.bsky.embed.video embeds.', + }, interactionSeen: { type: 'token', description: 'Feed item was seen by user', @@ -6043,6 +6059,13 @@ export const schemaDict = { description: 'Self-label values', refs: ['lex:com.atproto.label.defs#selfLabels'], }, + contentMode: { + type: 'string', + knownValues: [ + 'app.bsky.feed.defs#contentModeUnspecified', + 'app.bsky.feed.defs#contentModeVideo', + ], + }, createdAt: { type: 'string', format: 'datetime', diff --git a/packages/pds/src/lexicon/types/app/bsky/feed/defs.ts b/packages/pds/src/lexicon/types/app/bsky/feed/defs.ts index 1c6f6ce78f6..4472369375e 100644 --- a/packages/pds/src/lexicon/types/app/bsky/feed/defs.ts +++ b/packages/pds/src/lexicon/types/app/bsky/feed/defs.ts @@ -247,6 +247,10 @@ export interface GeneratorView { acceptsInteractions?: boolean labels?: ComAtprotoLabelDefs.Label[] viewer?: GeneratorViewerState + contentMode?: + | 'app.bsky.feed.defs#contentModeUnspecified' + | 'app.bsky.feed.defs#contentModeVideo' + | (string & {}) indexedAt: string [k: string]: unknown } @@ -401,6 +405,11 @@ export const CLICKTHROUGHAUTHOR = 'app.bsky.feed.defs#clickthroughAuthor' export const CLICKTHROUGHREPOSTER = 'app.bsky.feed.defs#clickthroughReposter' /** User clicked through to the embedded content of the feed item */ export const CLICKTHROUGHEMBED = 'app.bsky.feed.defs#clickthroughEmbed' +/** Declares the feed generator returns any types of posts. */ +export const CONTENTMODEUNSPECIFIED = + 'app.bsky.feed.defs#contentModeUnspecified' +/** Declares the feed generator returns posts containing app.bsky.embed.video embeds. */ +export const CONTENTMODEVIDEO = 'app.bsky.feed.defs#contentModeVideo' /** Feed item was seen by user */ export const INTERACTIONSEEN = 'app.bsky.feed.defs#interactionSeen' /** User liked the feed item */ diff --git a/packages/pds/src/lexicon/types/app/bsky/feed/generator.ts b/packages/pds/src/lexicon/types/app/bsky/feed/generator.ts index eb8e8d0f633..482c7a7444e 100644 --- a/packages/pds/src/lexicon/types/app/bsky/feed/generator.ts +++ b/packages/pds/src/lexicon/types/app/bsky/feed/generator.ts @@ -19,6 +19,10 @@ export interface Record { labels?: | ComAtprotoLabelDefs.SelfLabels | { $type: string; [k: string]: unknown } + contentMode?: + | 'app.bsky.feed.defs#contentModeUnspecified' + | 'app.bsky.feed.defs#contentModeVideo' + | (string & {}) createdAt: string [k: string]: unknown }