@atproto/bsky 0.0.244 → 0.0.245
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/api/app/bsky/feed/searchPostsV2.d.ts +4 -0
- package/dist/api/app/bsky/feed/searchPostsV2.d.ts.map +1 -0
- package/dist/api/app/bsky/feed/searchPostsV2.js +169 -0
- package/dist/api/app/bsky/feed/searchPostsV2.js.map +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/data-plane/server/routes/search.js +1 -0
- package/dist/data-plane/server/routes/search.js.map +1 -1
- package/dist/lexicons/app/bsky/authFullApp.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/authFullApp.defs.js +1 -0
- package/dist/lexicons/app/bsky/authFullApp.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/authViewAll.defs.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/authViewAll.defs.js +1 -0
- package/dist/lexicons/app/bsky/authViewAll.defs.js.map +1 -1
- package/dist/lexicons/app/bsky/feed/searchPostsV2.d.ts +3 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.defs.d.ts +158 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.defs.d.ts.map +1 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.defs.js +73 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.defs.js.map +1 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.js +6 -0
- package/dist/lexicons/app/bsky/feed/searchPostsV2.js.map +1 -0
- package/dist/lexicons/app/bsky/feed.d.ts +1 -0
- package/dist/lexicons/app/bsky/feed.d.ts.map +1 -1
- package/dist/lexicons/app/bsky/feed.js +1 -0
- package/dist/lexicons/app/bsky/feed.js.map +1 -1
- package/dist/lexicons/chat/bsky/actor/declaration.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/actor/declaration.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/actor/defs.defs.d.ts +4 -6
- package/dist/lexicons/chat/bsky/actor/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/actor/defs.defs.js +2 -3
- package/dist/lexicons/chat/bsky/actor/defs.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts +64 -70
- package/dist/lexicons/chat/bsky/convo/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/defs.defs.js +32 -35
- package/dist/lexicons/chat/bsky/convo/defs.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.js +1 -1
- package/dist/lexicons/chat/bsky/convo/getUnreadCounts.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.js +1 -1
- package/dist/lexicons/chat/bsky/convo/listConvoRequests.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/lockConvo.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/convo/lockConvo.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/lockConvo.defs.js +1 -1
- package/dist/lexicons/chat/bsky/convo/lockConvo.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.js +1 -1
- package/dist/lexicons/chat/bsky/convo/unlockConvo.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/addMembers.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/addMembers.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/addMembers.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/addMembers.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/approveJoinRequest.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/createGroup.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/createGroup.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/createGroup.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/createGroup.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/createJoinLink.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/createJoinLink.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/createJoinLink.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/createJoinLink.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/disableJoinLink.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/editGroup.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/editGroup.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/editGroup.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/editGroup.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/editJoinLink.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/editJoinLink.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/editJoinLink.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/editJoinLink.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/enableJoinLink.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/getJoinLinkPreviews.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/listJoinRequests.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/listMutualGroups.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/listMutualGroups.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/listMutualGroups.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/listMutualGroups.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/rejectJoinRequest.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/removeMembers.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/removeMembers.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/removeMembers.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/removeMembers.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/requestJoin.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/requestJoin.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/requestJoin.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/requestJoin.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/updateJoinRequestsRead.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.js +1 -1
- package/dist/lexicons/chat/bsky/group/withdrawJoinRequest.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/defs.defs.d.ts +6 -6
- package/dist/lexicons/chat/bsky/moderation/defs.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/defs.defs.js +3 -3
- package/dist/lexicons/chat/bsky/moderation/defs.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvo.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvo.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvo.defs.js +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvo.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.js +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvoMembers.defs.js.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvos.defs.d.ts +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvos.defs.d.ts.map +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvos.defs.js +1 -1
- package/dist/lexicons/chat/bsky/moderation/getConvos.defs.js.map +1 -1
- package/dist/proto/bsky_pb.d.ts +4 -2
- package/dist/proto/bsky_pb.d.ts.map +1 -1
- package/dist/proto/bsky_pb.js +5 -3
- package/dist/proto/bsky_pb.js.map +1 -1
- package/package.json +6 -6
- package/proto/bsky.proto +2 -1
- package/src/api/app/bsky/feed/searchPostsV2.ts +232 -0
- package/src/api/index.ts +2 -0
- package/src/data-plane/server/routes/search.ts +1 -0
- package/tsconfig.build.tsbuildinfo +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/bsky",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.245",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Reference implementation of app.bsky App View (Bluesky API)",
|
|
6
6
|
"keywords": [
|
|
@@ -49,16 +49,16 @@
|
|
|
49
49
|
"undici": "^8.5.0",
|
|
50
50
|
"zod": "3.23.8",
|
|
51
51
|
"@atproto-labs/fetch-node": "^0.3.2",
|
|
52
|
-
"@atproto/api": "^0.20.17",
|
|
53
|
-
"@atproto/crypto": "^0.5.1",
|
|
54
52
|
"@atproto/common": "^0.6.3",
|
|
55
|
-
"@atproto/did": "^0.5.1",
|
|
56
53
|
"@atproto-labs/xrpc-utils": "^0.1.1",
|
|
57
|
-
"@atproto/
|
|
58
|
-
"@atproto/
|
|
54
|
+
"@atproto/api": "^0.20.18",
|
|
55
|
+
"@atproto/did": "^0.5.1",
|
|
56
|
+
"@atproto/crypto": "^0.5.1",
|
|
59
57
|
"@atproto/identity": "^0.5.1",
|
|
58
|
+
"@atproto/lex": "^0.1.4",
|
|
60
59
|
"@atproto/sync": "^0.3.3",
|
|
61
60
|
"@atproto/syntax": "^0.6.2",
|
|
61
|
+
"@atproto/repo": "^0.10.1",
|
|
62
62
|
"@atproto/xrpc-server": "^0.11.2"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
package/proto/bsky.proto
CHANGED
|
@@ -1194,7 +1194,8 @@ message PostsFilters {
|
|
|
1194
1194
|
// Content filters
|
|
1195
1195
|
repeated string domains = 3;
|
|
1196
1196
|
repeated string urls = 4;
|
|
1197
|
-
|
|
1197
|
+
// Canonical request field for posts embedding these AT-URI records.
|
|
1198
|
+
repeated string embedded_at_uris = 5;
|
|
1198
1199
|
repeated string hashtags = 6;
|
|
1199
1200
|
}
|
|
1200
1201
|
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Timestamp } from '@bufbuild/protobuf'
|
|
2
|
+
import { mapDefined } from '@atproto/common'
|
|
3
|
+
import { AtUriString } from '@atproto/lex'
|
|
4
|
+
import { InvalidRequestError, Server } from '@atproto/xrpc-server'
|
|
5
|
+
import { AppContext } from '../../../../context.js'
|
|
6
|
+
import { DataPlaneClient } from '../../../../data-plane/index.js'
|
|
7
|
+
import {
|
|
8
|
+
PostSearchQuery,
|
|
9
|
+
parsePostSearchQuery,
|
|
10
|
+
} from '../../../../data-plane/server/util.js'
|
|
11
|
+
import { HydrateCtx, Hydrator } from '../../../../hydration/hydrator.js'
|
|
12
|
+
import { parseString } from '../../../../hydration/util.js'
|
|
13
|
+
import { app } from '../../../../lexicons/index.js'
|
|
14
|
+
import {
|
|
15
|
+
HydrationFnInput,
|
|
16
|
+
PresentationFnInput,
|
|
17
|
+
RulesFnInput,
|
|
18
|
+
SkeletonFnInput,
|
|
19
|
+
createPipeline,
|
|
20
|
+
} from '../../../../pipeline.js'
|
|
21
|
+
import {
|
|
22
|
+
SearchQueryLanguage,
|
|
23
|
+
SearchSortOrder,
|
|
24
|
+
} from '../../../../proto/bsky_pb.js'
|
|
25
|
+
import { uriToDid as creatorFromUri } from '../../../../util/uris.js'
|
|
26
|
+
import { Views } from '../../../../views/index.js'
|
|
27
|
+
import { resHeaders, resolveSearchV2Override } from '../../../util.js'
|
|
28
|
+
|
|
29
|
+
export default function (server: Server, ctx: AppContext) {
|
|
30
|
+
const searchPostsV2 = createPipeline(
|
|
31
|
+
skeleton,
|
|
32
|
+
hydration,
|
|
33
|
+
noBlocksOrTagged,
|
|
34
|
+
presentation,
|
|
35
|
+
)
|
|
36
|
+
server.add(app.bsky.feed.searchPostsV2, {
|
|
37
|
+
auth: ctx.authVerifier.standard,
|
|
38
|
+
handler: async ({ auth, params, req }) => {
|
|
39
|
+
const { viewer, isModService, skipViewerBlocks } =
|
|
40
|
+
ctx.authVerifier.parseCreds(auth)
|
|
41
|
+
|
|
42
|
+
const labelers = ctx.reqLabelers(req)
|
|
43
|
+
const hydrateCtx = await ctx.hydrator.createContext({
|
|
44
|
+
labelers,
|
|
45
|
+
viewer,
|
|
46
|
+
skipViewerBlocks,
|
|
47
|
+
features: ctx.featureGatesClient.scope(
|
|
48
|
+
ctx.featureGatesClient.parseUserContextFromHandler({
|
|
49
|
+
viewer,
|
|
50
|
+
req,
|
|
51
|
+
}),
|
|
52
|
+
),
|
|
53
|
+
})
|
|
54
|
+
const isV2Enabled =
|
|
55
|
+
hydrateCtx.features.checkGate(
|
|
56
|
+
hydrateCtx.features.Gate.SearchV2Enable,
|
|
57
|
+
) || resolveSearchV2Override(req, ctx.cfg)
|
|
58
|
+
if (!isV2Enabled) {
|
|
59
|
+
throw new InvalidRequestError('Search v2 is not enabled')
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const results = await searchPostsV2(
|
|
63
|
+
{
|
|
64
|
+
...params,
|
|
65
|
+
hydrateCtx,
|
|
66
|
+
isModService,
|
|
67
|
+
},
|
|
68
|
+
ctx,
|
|
69
|
+
)
|
|
70
|
+
return {
|
|
71
|
+
encoding: 'application/json',
|
|
72
|
+
body: results,
|
|
73
|
+
headers: resHeaders({ labelers: hydrateCtx.labelers }),
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const skeleton = async (
|
|
80
|
+
inputs: SkeletonFnInput<Context, Params>,
|
|
81
|
+
): Promise<Skeleton> => {
|
|
82
|
+
const { ctx, params } = inputs
|
|
83
|
+
const query = params.query ?? ''
|
|
84
|
+
const parsedQuery = parsePostSearchQuery(query, {
|
|
85
|
+
author: params.authors?.[0],
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
const res = await ctx.dataplane.searchPostsV2({
|
|
89
|
+
params: {
|
|
90
|
+
query,
|
|
91
|
+
viewer: params.hydrateCtx.viewer ?? undefined,
|
|
92
|
+
limit: params.limit,
|
|
93
|
+
cursor: params.cursor,
|
|
94
|
+
},
|
|
95
|
+
sort: postSortToV2(params.sort),
|
|
96
|
+
filters: {
|
|
97
|
+
authors: params.authors ?? [],
|
|
98
|
+
mentions: params.mentions ?? [],
|
|
99
|
+
domains: params.domains ?? [],
|
|
100
|
+
urls: params.urls ?? [],
|
|
101
|
+
embeddedAtUris: params.embeddedAtUris ?? [],
|
|
102
|
+
hashtags: params.hashtags ?? [],
|
|
103
|
+
},
|
|
104
|
+
exclude: {
|
|
105
|
+
authors: params.excludeAuthors ?? [],
|
|
106
|
+
mentions: params.excludeMentions ?? [],
|
|
107
|
+
domains: params.excludeDomains ?? [],
|
|
108
|
+
urls: params.excludeUrls ?? [],
|
|
109
|
+
embeddedAtUris: params.excludeEmbeddedAtUris ?? [],
|
|
110
|
+
hashtags: params.excludeHashtags ?? [],
|
|
111
|
+
},
|
|
112
|
+
since: parseTimestamp(params.since),
|
|
113
|
+
until: parseTimestamp(params.until),
|
|
114
|
+
allTime: params.allTime,
|
|
115
|
+
language: params.language,
|
|
116
|
+
hasMedia: params.hasMedia,
|
|
117
|
+
hasVideo: params.hasVideo,
|
|
118
|
+
replyParentUri: params.replyParentUri,
|
|
119
|
+
threadRootUri: params.threadRootUri,
|
|
120
|
+
excludeReplies: params.excludeReplies,
|
|
121
|
+
repliesOnly: params.repliesOnly,
|
|
122
|
+
following: params.following,
|
|
123
|
+
queryLanguage: queryLanguageToV2(params.queryLanguage),
|
|
124
|
+
})
|
|
125
|
+
return {
|
|
126
|
+
posts: res.posts.map(({ uri }) => uri as AtUriString),
|
|
127
|
+
cursor: parseString(res.pageInfo?.cursor),
|
|
128
|
+
hitsTotal: res.pageInfo?.hitsTotal
|
|
129
|
+
? Number(res.pageInfo.hitsTotal)
|
|
130
|
+
: undefined,
|
|
131
|
+
detectedQueryLanguages: res.detectedQueryLanguages,
|
|
132
|
+
parsedQuery,
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const hydration = async (
|
|
137
|
+
inputs: HydrationFnInput<Context, Params, Skeleton>,
|
|
138
|
+
) => {
|
|
139
|
+
const { ctx, params, skeleton } = inputs
|
|
140
|
+
return ctx.hydrator.hydratePosts(
|
|
141
|
+
skeleton.posts.map((uri) => ({ uri })),
|
|
142
|
+
params.hydrateCtx,
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const noBlocksOrTagged = (inputs: RulesFnInput<Context, Params, Skeleton>) => {
|
|
147
|
+
const { ctx, params, skeleton, hydration } = inputs
|
|
148
|
+
const { parsedQuery } = skeleton
|
|
149
|
+
|
|
150
|
+
skeleton.posts = skeleton.posts.filter((uri) => {
|
|
151
|
+
const post = hydration.posts?.get(uri)
|
|
152
|
+
if (!post) return
|
|
153
|
+
|
|
154
|
+
const creator = creatorFromUri(uri)
|
|
155
|
+
const isCuratedSearch = params.sort === 'top'
|
|
156
|
+
const isPostByViewer = creator === params.hydrateCtx.viewer
|
|
157
|
+
|
|
158
|
+
if (isPostByViewer) return true
|
|
159
|
+
if (params.isModService) return true
|
|
160
|
+
|
|
161
|
+
if (ctx.views.viewerBlockExists(creator, hydration)) return false
|
|
162
|
+
|
|
163
|
+
const tagged = [...ctx.cfg.searchTagsHide].some((t) => post.tags.has(t))
|
|
164
|
+
|
|
165
|
+
if (isCuratedSearch && tagged) return false
|
|
166
|
+
if (!(parsedQuery.author || params.authors?.length) && tagged) return false
|
|
167
|
+
return true
|
|
168
|
+
})
|
|
169
|
+
return skeleton
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const presentation = (
|
|
173
|
+
inputs: PresentationFnInput<Context, Params, Skeleton>,
|
|
174
|
+
) => {
|
|
175
|
+
const { ctx, skeleton, hydration } = inputs
|
|
176
|
+
const posts = mapDefined(skeleton.posts, (uri) => {
|
|
177
|
+
const post = hydration.posts?.get(uri)
|
|
178
|
+
if (!post) return
|
|
179
|
+
|
|
180
|
+
return ctx.views.post(uri, hydration)
|
|
181
|
+
})
|
|
182
|
+
return {
|
|
183
|
+
posts,
|
|
184
|
+
cursor: skeleton.cursor,
|
|
185
|
+
hitsTotal: skeleton.hitsTotal,
|
|
186
|
+
detectedQueryLanguages: skeleton.detectedQueryLanguages,
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
type Context = {
|
|
191
|
+
cfg: AppContext['cfg']
|
|
192
|
+
dataplane: DataPlaneClient
|
|
193
|
+
hydrator: Hydrator
|
|
194
|
+
views: Views
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
type Params = app.bsky.feed.searchPostsV2.$Params & {
|
|
198
|
+
hydrateCtx: HydrateCtx
|
|
199
|
+
isModService: boolean
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
type Skeleton = {
|
|
203
|
+
posts: AtUriString[]
|
|
204
|
+
hitsTotal?: number
|
|
205
|
+
cursor?: string
|
|
206
|
+
detectedQueryLanguages?: string[]
|
|
207
|
+
parsedQuery: PostSearchQuery
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const postSortToV2 = (sort: string): SearchSortOrder => {
|
|
211
|
+
if (sort === 'top') return SearchSortOrder.TOP
|
|
212
|
+
if (sort === 'recent') return SearchSortOrder.RECENT
|
|
213
|
+
return SearchSortOrder.UNSPECIFIED
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const queryLanguageToV2 = (
|
|
217
|
+
lang: string | undefined,
|
|
218
|
+
): SearchQueryLanguage | undefined => {
|
|
219
|
+
if (lang === 'ja') return SearchQueryLanguage.JA
|
|
220
|
+
if (lang === 'zh') return SearchQueryLanguage.ZH
|
|
221
|
+
if (lang === 'ko') return SearchQueryLanguage.KO
|
|
222
|
+
if (lang === 'th') return SearchQueryLanguage.TH
|
|
223
|
+
if (lang === 'ar') return SearchQueryLanguage.AR
|
|
224
|
+
return undefined
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
const parseTimestamp = (value: string | undefined): Timestamp | undefined => {
|
|
228
|
+
if (!value) return undefined
|
|
229
|
+
const date = new Date(value)
|
|
230
|
+
if (isNaN(date.getTime())) return undefined
|
|
231
|
+
return Timestamp.fromDate(date)
|
|
232
|
+
}
|
package/src/api/index.ts
CHANGED
|
@@ -39,6 +39,7 @@ import getRepostedBy from './app/bsky/feed/getRepostedBy.js'
|
|
|
39
39
|
import getSuggestedFeeds from './app/bsky/feed/getSuggestedFeeds.js'
|
|
40
40
|
import getTimeline from './app/bsky/feed/getTimeline.js'
|
|
41
41
|
import searchPosts from './app/bsky/feed/searchPosts.js'
|
|
42
|
+
import searchPostsV2 from './app/bsky/feed/searchPostsV2.js'
|
|
42
43
|
import getActorStarterPacks from './app/bsky/graph/getActorStarterPacks.js'
|
|
43
44
|
import getBlocks from './app/bsky/graph/getBlocks.js'
|
|
44
45
|
import getFollowers from './app/bsky/graph/getFollowers.js'
|
|
@@ -142,6 +143,7 @@ export default function (server: Server, ctx: AppContext) {
|
|
|
142
143
|
getPostThreadV2(server, ctx)
|
|
143
144
|
getPosts(server, ctx)
|
|
144
145
|
searchPosts(server, ctx)
|
|
146
|
+
searchPostsV2(server, ctx)
|
|
145
147
|
getActorLikes(server, ctx)
|
|
146
148
|
getProfile(server, ctx)
|
|
147
149
|
getProfiles(server, ctx)
|