@@ -35,6 +35,25 @@ function jsonResponse(obj) {
35
35
return response ;
36
36
}
37
37
38
+ function bucketTerms ( allTerms , opts = { } ) {
39
+ let maxSearchTerms = opts [ "maxSearchTerms" ] || MAX_SEARCH_TERMS ;
40
+ let pinnedPosts = [ ] ;
41
+ let searchTerms = [ ] ;
42
+
43
+ for ( let term of allTerms ) {
44
+ if ( term . startsWith ( "at://" ) ) {
45
+ pinnedPosts . push ( term ) ;
46
+ } else {
47
+ searchTerms . push ( term ) ;
48
+ }
49
+ }
50
+
51
+ return {
52
+ pinnedPosts : pinnedPosts ,
53
+ searchTerms : searchTerms . slice ( 0 , maxSearchTerms ) ,
54
+ }
55
+ }
56
+
38
57
async function getFeedSkeleton ( request ) {
39
58
let url = new URL ( request . url ) ;
40
59
let feedAtUrl = url . searchParams . get ( "feed" ) ;
@@ -56,7 +75,11 @@ async function getFeedSkeleton(request) {
56
75
limit = DEFAULT_LIMIT ;
57
76
}
58
77
59
- let searchTerms = config . searchTerms . slice ( 0 , MAX_SEARCH_TERMS ) ;
78
+ let allTerms = bucketTerms ( config . searchTerms , {
79
+ maxSearchTerms : MAX_SEARCH_TERMS ,
80
+ } ) ;
81
+ let searchTerms = allTerms . searchTerms ;
82
+ let pinnedPosts = allTerms . pinnedPosts ;
60
83
let responsePromises = [ ] ;
61
84
62
85
for ( let searchTerm of searchTerms ) {
@@ -88,6 +111,9 @@ async function getFeedSkeleton(request) {
88
111
a === b ? 0 : a < b ? - 1 : 1
89
112
) ;
90
113
var feed = [ ] ;
114
+ for ( let pinnedPost of pinnedPosts ) {
115
+ feed . push ( { post : pinnedPost } ) ;
116
+ }
91
117
for ( let timestampUrl of timestampURLs ) {
92
118
let atUrl = timestampUrl [ 1 ] ;
93
119
feed . push ( { post : atUrl } ) ;
0 commit comments