[READ ONLY MIRROR] Spark Social AppView Server github.com/sprksocial/server
atproto deno hono lexicon
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

update lexicon

+462 -3
+24
services/appview/src/lexicon/index.ts
··· 95 95 import * as SoSprkFeedDescribeFeedGenerator from './types/so/sprk/feed/describeFeedGenerator.js' 96 96 import * as SoSprkFeedGetActorFeeds from './types/so/sprk/feed/getActorFeeds.js' 97 97 import * as SoSprkFeedGetActorLikes from './types/so/sprk/feed/getActorLikes.js' 98 + import * as SoSprkFeedGetActorLooks from './types/so/sprk/feed/getActorLooks.js' 98 99 import * as SoSprkFeedGetAuthorFeed from './types/so/sprk/feed/getAuthorFeed.js' 99 100 import * as SoSprkFeedGetFeedGenerator from './types/so/sprk/feed/getFeedGenerator.js' 100 101 import * as SoSprkFeedGetFeedGenerators from './types/so/sprk/feed/getFeedGenerators.js' ··· 102 103 import * as SoSprkFeedGetFeedSkeleton from './types/so/sprk/feed/getFeedSkeleton.js' 103 104 import * as SoSprkFeedGetLikes from './types/so/sprk/feed/getLikes.js' 104 105 import * as SoSprkFeedGetListFeed from './types/so/sprk/feed/getListFeed.js' 106 + import * as SoSprkFeedGetLooks from './types/so/sprk/feed/getLooks.js' 105 107 import * as SoSprkFeedGetPosts from './types/so/sprk/feed/getPosts.js' 106 108 import * as SoSprkFeedGetPostThread from './types/so/sprk/feed/getPostThread.js' 107 109 import * as SoSprkFeedGetQuotes from './types/so/sprk/feed/getQuotes.js' ··· 1313 1315 return this._server.xrpc.method(nsid, cfg) 1314 1316 } 1315 1317 1318 + getActorLooks<AV extends AuthVerifier>( 1319 + cfg: ConfigOf< 1320 + AV, 1321 + SoSprkFeedGetActorLooks.Handler<ExtractAuth<AV>>, 1322 + SoSprkFeedGetActorLooks.HandlerReqCtx<ExtractAuth<AV>> 1323 + >, 1324 + ) { 1325 + const nsid = 'so.sprk.feed.getActorLooks' // @ts-ignore 1326 + return this._server.xrpc.method(nsid, cfg) 1327 + } 1328 + 1316 1329 getAuthorFeed<AV extends AuthVerifier>( 1317 1330 cfg: ConfigOf< 1318 1331 AV, ··· 1387 1400 >, 1388 1401 ) { 1389 1402 const nsid = 'so.sprk.feed.getListFeed' // @ts-ignore 1403 + return this._server.xrpc.method(nsid, cfg) 1404 + } 1405 + 1406 + getLooks<AV extends AuthVerifier>( 1407 + cfg: ConfigOf< 1408 + AV, 1409 + SoSprkFeedGetLooks.Handler<ExtractAuth<AV>>, 1410 + SoSprkFeedGetLooks.HandlerReqCtx<ExtractAuth<AV>> 1411 + >, 1412 + ) { 1413 + const nsid = 'so.sprk.feed.getLooks' // @ts-ignore 1390 1414 return this._server.xrpc.method(nsid, cfg) 1391 1415 } 1392 1416
+245 -1
services/appview/src/lexicon/lexicons.ts
··· 4569 4569 description: 4570 4570 'Hide replies in the feed if they do not have this number of likes.', 4571 4571 }, 4572 + hideRepliesByLookCount: { 4573 + type: 'integer', 4574 + description: 4575 + 'Hide replies in the feed if they do not have this number of looks.', 4576 + }, 4572 4577 hideReposts: { 4573 4578 type: 'boolean', 4574 4579 description: 'Hide reposts in the feed.', ··· 4589 4594 'oldest', 4590 4595 'newest', 4591 4596 'most-likes', 4597 + 'most-looks', 4592 4598 'random', 4593 4599 'hotness', 4594 4600 ], ··· 5268 5274 'lex:so.sprk.embed.video#view', 5269 5275 ], 5270 5276 }, 5277 + sound: { 5278 + type: 'ref', 5279 + ref: 'lex:so.sprk.feed.defs#soundView', 5280 + }, 5271 5281 replyCount: { 5272 5282 type: 'integer', 5273 5283 }, ··· 5277 5287 likeCount: { 5278 5288 type: 'integer', 5279 5289 }, 5280 - quoteCount: { 5290 + lookCount: { 5281 5291 type: 'integer', 5282 5292 }, 5283 5293 indexedAt: { ··· 5301 5311 }, 5302 5312 }, 5303 5313 }, 5314 + soundView: { 5315 + type: 'object', 5316 + required: ['uri', 'cid', 'author', 'record', 'indexedAt'], 5317 + properties: { 5318 + uri: { 5319 + type: 'string', 5320 + format: 'at-uri', 5321 + }, 5322 + cid: { 5323 + type: 'string', 5324 + format: 'cid', 5325 + }, 5326 + author: { 5327 + type: 'ref', 5328 + ref: 'lex:so.sprk.actor.defs#profileViewBasic', 5329 + }, 5330 + record: { 5331 + type: 'unknown', 5332 + }, 5333 + useCount: { 5334 + type: 'integer', 5335 + }, 5336 + likeCount: { 5337 + type: 'integer', 5338 + }, 5339 + indexedAt: { 5340 + type: 'string', 5341 + format: 'datetime', 5342 + }, 5343 + labels: { 5344 + type: 'array', 5345 + items: { 5346 + type: 'ref', 5347 + ref: 'lex:com.atproto.label.defs#label', 5348 + }, 5349 + }, 5350 + }, 5351 + }, 5304 5352 viewerState: { 5305 5353 type: 'object', 5306 5354 description: ··· 5311 5359 format: 'at-uri', 5312 5360 }, 5313 5361 like: { 5362 + type: 'string', 5363 + format: 'at-uri', 5364 + }, 5365 + look: { 5314 5366 type: 'string', 5315 5367 format: 'at-uri', 5316 5368 }, ··· 5534 5586 type: 'integer', 5535 5587 minimum: 0, 5536 5588 }, 5589 + lookCount: { 5590 + type: 'integer', 5591 + minimum: 0, 5592 + }, 5537 5593 acceptsInteractions: { 5538 5594 type: 'boolean', 5539 5595 }, ··· 5565 5621 type: 'object', 5566 5622 properties: { 5567 5623 like: { 5624 + type: 'string', 5625 + format: 'at-uri', 5626 + }, 5627 + look: { 5568 5628 type: 'string', 5569 5629 format: 'at-uri', 5570 5630 }, ··· 5951 6011 }, 5952 6012 }, 5953 6013 }, 6014 + SoSprkFeedGetActorLooks: { 6015 + lexicon: 1, 6016 + id: 'so.sprk.feed.getActorLooks', 6017 + defs: { 6018 + main: { 6019 + type: 'query', 6020 + description: 6021 + 'Get a list of posts looked by an actor. Requires auth, actor must be the requesting account.', 6022 + parameters: { 6023 + type: 'params', 6024 + required: ['actor'], 6025 + properties: { 6026 + actor: { 6027 + type: 'string', 6028 + format: 'at-identifier', 6029 + }, 6030 + limit: { 6031 + type: 'integer', 6032 + minimum: 1, 6033 + maximum: 100, 6034 + default: 50, 6035 + }, 6036 + cursor: { 6037 + type: 'string', 6038 + }, 6039 + }, 6040 + }, 6041 + output: { 6042 + encoding: 'application/json', 6043 + schema: { 6044 + type: 'object', 6045 + required: ['feed'], 6046 + properties: { 6047 + cursor: { 6048 + type: 'string', 6049 + }, 6050 + feed: { 6051 + type: 'array', 6052 + items: { 6053 + type: 'ref', 6054 + ref: 'lex:so.sprk.feed.defs#feedViewPost', 6055 + }, 6056 + }, 6057 + }, 6058 + }, 6059 + }, 6060 + errors: [ 6061 + { 6062 + name: 'BlockedActor', 6063 + }, 6064 + { 6065 + name: 'BlockedByActor', 6066 + }, 6067 + ], 6068 + }, 6069 + }, 6070 + }, 5954 6071 SoSprkFeedGetAuthorFeed: { 5955 6072 lexicon: 1, 5956 6073 id: 'so.sprk.feed.getAuthorFeed', ··· 6356 6473 }, 6357 6474 }, 6358 6475 }, 6476 + SoSprkFeedGetLooks: { 6477 + lexicon: 1, 6478 + id: 'so.sprk.feed.getLooks', 6479 + defs: { 6480 + main: { 6481 + type: 'query', 6482 + description: 6483 + 'Get look records which reference a subject (by AT-URI and CID).', 6484 + parameters: { 6485 + type: 'params', 6486 + required: ['uri'], 6487 + properties: { 6488 + uri: { 6489 + type: 'string', 6490 + format: 'at-uri', 6491 + description: 'AT-URI of the subject (eg, a post record).', 6492 + }, 6493 + cid: { 6494 + type: 'string', 6495 + format: 'cid', 6496 + description: 6497 + 'CID of the subject record (aka, specific version of record), to filter looks.', 6498 + }, 6499 + limit: { 6500 + type: 'integer', 6501 + minimum: 1, 6502 + maximum: 100, 6503 + default: 50, 6504 + }, 6505 + cursor: { 6506 + type: 'string', 6507 + }, 6508 + }, 6509 + }, 6510 + output: { 6511 + encoding: 'application/json', 6512 + schema: { 6513 + type: 'object', 6514 + required: ['uri', 'looks'], 6515 + properties: { 6516 + uri: { 6517 + type: 'string', 6518 + format: 'at-uri', 6519 + }, 6520 + cid: { 6521 + type: 'string', 6522 + format: 'cid', 6523 + }, 6524 + cursor: { 6525 + type: 'string', 6526 + }, 6527 + looks: { 6528 + type: 'array', 6529 + items: { 6530 + type: 'ref', 6531 + ref: 'lex:so.sprk.feed.getLooks#look', 6532 + }, 6533 + }, 6534 + }, 6535 + }, 6536 + }, 6537 + }, 6538 + look: { 6539 + type: 'object', 6540 + required: ['indexedAt', 'createdAt', 'actor'], 6541 + properties: { 6542 + indexedAt: { 6543 + type: 'string', 6544 + format: 'datetime', 6545 + }, 6546 + createdAt: { 6547 + type: 'string', 6548 + format: 'datetime', 6549 + }, 6550 + actor: { 6551 + type: 'ref', 6552 + ref: 'lex:so.sprk.actor.defs#profileView', 6553 + }, 6554 + }, 6555 + }, 6556 + }, 6557 + }, 6359 6558 SoSprkFeedGetPosts: { 6360 6559 lexicon: 1, 6361 6560 id: 'so.sprk.feed.getPosts', ··· 6706 6905 }, 6707 6906 }, 6708 6907 }, 6908 + SoSprkFeedLook: { 6909 + lexicon: 1, 6910 + id: 'so.sprk.feed.look', 6911 + defs: { 6912 + main: { 6913 + type: 'record', 6914 + description: 6915 + "Record declaring a 'look' of a piece of subject content. Equivalent to a 'view'", 6916 + key: 'tid', 6917 + record: { 6918 + type: 'object', 6919 + required: ['subject', 'createdAt'], 6920 + properties: { 6921 + subject: { 6922 + type: 'ref', 6923 + ref: 'lex:com.atproto.repo.strongRef', 6924 + }, 6925 + createdAt: { 6926 + type: 'string', 6927 + format: 'datetime', 6928 + }, 6929 + }, 6930 + }, 6931 + }, 6932 + }, 6933 + }, 6709 6934 SoSprkFeedPostgate: { 6710 6935 lexicon: 1, 6711 6936 id: 'so.sprk.feed.postgate', ··· 6792 7017 embed: { 6793 7018 type: 'union', 6794 7019 refs: ['lex:so.sprk.embed.images', 'lex:so.sprk.embed.video'], 7020 + }, 7021 + sound: { 7022 + type: 'ref', 7023 + ref: 'lex:com.atproto.repo.strongRef', 6795 7024 }, 6796 7025 langs: { 6797 7026 type: 'array', ··· 8523 8752 type: 'integer', 8524 8753 minimum: 0, 8525 8754 }, 8755 + lookCount: { 8756 + type: 'integer', 8757 + minimum: 0, 8758 + }, 8526 8759 viewer: { 8527 8760 type: 'ref', 8528 8761 ref: 'lex:so.sprk.labeler.defs#labelerViewerState', ··· 8564 8797 type: 'integer', 8565 8798 minimum: 0, 8566 8799 }, 8800 + lookCount: { 8801 + type: 'integer', 8802 + minimum: 0, 8803 + }, 8567 8804 viewer: { 8568 8805 type: 'ref', 8569 8806 ref: 'lex:so.sprk.labeler.defs#labelerViewerState', ··· 8585 8822 type: 'object', 8586 8823 properties: { 8587 8824 like: { 8825 + type: 'string', 8826 + format: 'at-uri', 8827 + }, 8828 + look: { 8588 8829 type: 'string', 8589 8830 format: 'at-uri', 8590 8831 }, ··· 9839 10080 SoSprkFeedGenerator: 'so.sprk.feed.generator', 9840 10081 SoSprkFeedGetActorFeeds: 'so.sprk.feed.getActorFeeds', 9841 10082 SoSprkFeedGetActorLikes: 'so.sprk.feed.getActorLikes', 10083 + SoSprkFeedGetActorLooks: 'so.sprk.feed.getActorLooks', 9842 10084 SoSprkFeedGetAuthorFeed: 'so.sprk.feed.getAuthorFeed', 9843 10085 SoSprkFeedGetFeedGenerator: 'so.sprk.feed.getFeedGenerator', 9844 10086 SoSprkFeedGetFeedGenerators: 'so.sprk.feed.getFeedGenerators', ··· 9846 10088 SoSprkFeedGetFeedSkeleton: 'so.sprk.feed.getFeedSkeleton', 9847 10089 SoSprkFeedGetLikes: 'so.sprk.feed.getLikes', 9848 10090 SoSprkFeedGetListFeed: 'so.sprk.feed.getListFeed', 10091 + SoSprkFeedGetLooks: 'so.sprk.feed.getLooks', 9849 10092 SoSprkFeedGetPosts: 'so.sprk.feed.getPosts', 9850 10093 SoSprkFeedGetPostThread: 'so.sprk.feed.getPostThread', 9851 10094 SoSprkFeedGetQuotes: 'so.sprk.feed.getQuotes', ··· 9853 10096 SoSprkFeedGetSuggestedFeeds: 'so.sprk.feed.getSuggestedFeeds', 9854 10097 SoSprkFeedGetTimeline: 'so.sprk.feed.getTimeline', 9855 10098 SoSprkFeedLike: 'so.sprk.feed.like', 10099 + SoSprkFeedLook: 'so.sprk.feed.look', 9856 10100 SoSprkFeedPostgate: 'so.sprk.feed.postgate', 9857 10101 SoSprkFeedPost: 'so.sprk.feed.post', 9858 10102 SoSprkFeedRepost: 'so.sprk.feed.repost',
+3
services/appview/src/lexicon/types/so/sprk/actor/defs.ts
··· 289 289 hideRepliesByUnfollowed: boolean 290 290 /** Hide replies in the feed if they do not have this number of likes. */ 291 291 hideRepliesByLikeCount?: number 292 + /** Hide replies in the feed if they do not have this number of looks. */ 293 + hideRepliesByLookCount?: number 292 294 /** Hide reposts in the feed. */ 293 295 hideReposts?: boolean 294 296 /** Hide quote posts in the feed. */ ··· 312 314 | 'oldest' 313 315 | 'newest' 314 316 | 'most-likes' 317 + | 'most-looks' 315 318 | 'random' 316 319 | 'hotness' 317 320 | (string & {})
+27 -1
services/appview/src/lexicon/types/so/sprk/feed/defs.ts
··· 26 26 | $Typed<SoSprkEmbedImages.View> 27 27 | $Typed<SoSprkEmbedVideo.View> 28 28 | { $type: string } 29 + sound?: SoundView 29 30 replyCount?: number 30 31 repostCount?: number 31 32 likeCount?: number 32 - quoteCount?: number 33 + lookCount?: number 33 34 indexedAt: string 34 35 viewer?: ViewerState 35 36 labels?: ComAtprotoLabelDefs.Label[] ··· 46 47 return validate<PostView & V>(v, id, hashPostView) 47 48 } 48 49 50 + export interface SoundView { 51 + $type?: 'so.sprk.feed.defs#soundView' 52 + uri: string 53 + cid: string 54 + author: SoSprkActorDefs.ProfileViewBasic 55 + record: { [_ in string]: unknown } 56 + useCount?: number 57 + likeCount?: number 58 + indexedAt: string 59 + labels?: ComAtprotoLabelDefs.Label[] 60 + } 61 + 62 + const hashSoundView = 'soundView' 63 + 64 + export function isSoundView<V>(v: V) { 65 + return is$typed(v, id, hashSoundView) 66 + } 67 + 68 + export function validateSoundView<V>(v: V) { 69 + return validate<SoundView & V>(v, id, hashSoundView) 70 + } 71 + 49 72 /** Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests. */ 50 73 export interface ViewerState { 51 74 $type?: 'so.sprk.feed.defs#viewerState' 52 75 repost?: string 53 76 like?: string 77 + look?: string 54 78 threadMuted?: boolean 55 79 replyDisabled?: boolean 56 80 embeddingDisabled?: boolean ··· 244 268 descriptionFacets?: SoSprkRichtextFacet.Main[] 245 269 avatar?: string 246 270 likeCount?: number 271 + lookCount?: number 247 272 acceptsInteractions?: boolean 248 273 labels?: ComAtprotoLabelDefs.Label[] 249 274 viewer?: GeneratorViewerState ··· 267 292 export interface GeneratorViewerState { 268 293 $type?: 'so.sprk.feed.defs#generatorViewerState' 269 294 like?: string 295 + look?: string 270 296 } 271 297 272 298 const hashGeneratorViewerState = 'generatorViewerState'
+54
services/appview/src/lexicon/types/so/sprk/feed/getActorLooks.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { $Typed, is$typed as _is$typed, OmitKey } from '../../../../util' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + import type * as SoSprkFeedDefs from './defs.js' 11 + 12 + const is$typed = _is$typed, 13 + validate = _validate 14 + const id = 'so.sprk.feed.getActorLooks' 15 + 16 + export interface QueryParams { 17 + actor: string 18 + limit: number 19 + cursor?: string 20 + } 21 + 22 + export type InputSchema = undefined 23 + 24 + export interface OutputSchema { 25 + cursor?: string 26 + feed: SoSprkFeedDefs.FeedViewPost[] 27 + } 28 + 29 + export type HandlerInput = undefined 30 + 31 + export interface HandlerSuccess { 32 + encoding: 'application/json' 33 + body: OutputSchema 34 + headers?: { [key: string]: string } 35 + } 36 + 37 + export interface HandlerError { 38 + status: number 39 + message?: string 40 + error?: 'BlockedActor' | 'BlockedByActor' 41 + } 42 + 43 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 44 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 45 + auth: HA 46 + params: QueryParams 47 + input: HandlerInput 48 + req: express.Request 49 + res: express.Response 50 + resetRouteRateLimits: () => Promise<void> 51 + } 52 + export type Handler<HA extends HandlerAuth = never> = ( 53 + ctx: HandlerReqCtx<HA>, 54 + ) => Promise<HandlerOutput> | HandlerOutput
+75
services/appview/src/lexicon/types/so/sprk/feed/getLooks.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import express from 'express' 5 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 6 + import { CID } from 'multiformats/cid' 7 + import { validate as _validate } from '../../../../lexicons' 8 + import { $Typed, is$typed as _is$typed, OmitKey } from '../../../../util' 9 + import { HandlerAuth, HandlerPipeThrough } from '@atproto/xrpc-server' 10 + import type * as SoSprkActorDefs from '../actor/defs.js' 11 + 12 + const is$typed = _is$typed, 13 + validate = _validate 14 + const id = 'so.sprk.feed.getLooks' 15 + 16 + export interface QueryParams { 17 + /** AT-URI of the subject (eg, a post record). */ 18 + uri: string 19 + /** CID of the subject record (aka, specific version of record), to filter looks. */ 20 + cid?: string 21 + limit: number 22 + cursor?: string 23 + } 24 + 25 + export type InputSchema = undefined 26 + 27 + export interface OutputSchema { 28 + uri: string 29 + cid?: string 30 + cursor?: string 31 + looks: Look[] 32 + } 33 + 34 + export type HandlerInput = undefined 35 + 36 + export interface HandlerSuccess { 37 + encoding: 'application/json' 38 + body: OutputSchema 39 + headers?: { [key: string]: string } 40 + } 41 + 42 + export interface HandlerError { 43 + status: number 44 + message?: string 45 + } 46 + 47 + export type HandlerOutput = HandlerError | HandlerSuccess | HandlerPipeThrough 48 + export type HandlerReqCtx<HA extends HandlerAuth = never> = { 49 + auth: HA 50 + params: QueryParams 51 + input: HandlerInput 52 + req: express.Request 53 + res: express.Response 54 + resetRouteRateLimits: () => Promise<void> 55 + } 56 + export type Handler<HA extends HandlerAuth = never> = ( 57 + ctx: HandlerReqCtx<HA>, 58 + ) => Promise<HandlerOutput> | HandlerOutput 59 + 60 + export interface Look { 61 + $type?: 'so.sprk.feed.getLooks#look' 62 + indexedAt: string 63 + createdAt: string 64 + actor: SoSprkActorDefs.ProfileView 65 + } 66 + 67 + const hashLook = 'look' 68 + 69 + export function isLook<V>(v: V) { 70 + return is$typed(v, id, hashLook) 71 + } 72 + 73 + export function validateLook<V>(v: V) { 74 + return validate<Look & V>(v, id, hashLook) 75 + }
+29
services/appview/src/lexicon/types/so/sprk/feed/look.ts
··· 1 + /** 2 + * GENERATED CODE - DO NOT MODIFY 3 + */ 4 + import { ValidationResult, BlobRef } from '@atproto/lexicon' 5 + import { CID } from 'multiformats/cid' 6 + import { validate as _validate } from '../../../../lexicons' 7 + import { $Typed, is$typed as _is$typed, OmitKey } from '../../../../util' 8 + import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js' 9 + 10 + const is$typed = _is$typed, 11 + validate = _validate 12 + const id = 'so.sprk.feed.look' 13 + 14 + export interface Record { 15 + $type: 'so.sprk.feed.look' 16 + subject: ComAtprotoRepoStrongRef.Main 17 + createdAt: string 18 + [k: string]: unknown 19 + } 20 + 21 + const hashRecord = 'main' 22 + 23 + export function isRecord<V>(v: V) { 24 + return is$typed(v, id, hashRecord) 25 + } 26 + 27 + export function validateRecord<V>(v: V) { 28 + return validate<Record & V>(v, id, hashRecord, true) 29 + }
+2 -1
services/appview/src/lexicon/types/so/sprk/feed/post.ts
··· 8 8 import type * as SoSprkRichtextFacet from '../richtext/facet.js' 9 9 import type * as SoSprkEmbedImages from '../embed/images.js' 10 10 import type * as SoSprkEmbedVideo from '../embed/video.js' 11 - import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 12 11 import type * as ComAtprotoRepoStrongRef from '../../../com/atproto/repo/strongRef.js' 12 + import type * as ComAtprotoLabelDefs from '../../../com/atproto/label/defs.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate ··· 26 26 | $Typed<SoSprkEmbedImages.Main> 27 27 | $Typed<SoSprkEmbedVideo.Main> 28 28 | { $type: string } 29 + sound?: ComAtprotoRepoStrongRef.Main 29 30 /** Indicates human language of post primary text content. */ 30 31 langs?: string[] 31 32 labels?: $Typed<ComAtprotoLabelDefs.SelfLabels> | { $type: string }
+3
services/appview/src/lexicon/types/so/sprk/labeler/defs.ts
··· 18 18 cid: string 19 19 creator: SoSprkActorDefs.ProfileView 20 20 likeCount?: number 21 + lookCount?: number 21 22 viewer?: LabelerViewerState 22 23 indexedAt: string 23 24 labels?: ComAtprotoLabelDefs.Label[] ··· 40 41 creator: SoSprkActorDefs.ProfileView 41 42 policies: LabelerPolicies 42 43 likeCount?: number 44 + lookCount?: number 43 45 viewer?: LabelerViewerState 44 46 indexedAt: string 45 47 labels?: ComAtprotoLabelDefs.Label[] ··· 58 60 export interface LabelerViewerState { 59 61 $type?: 'so.sprk.labeler.defs#labelerViewerState' 60 62 like?: string 63 + look?: string 61 64 } 62 65 63 66 const hashLabelerViewerState = 'labelerViewerState'