Switch to the off-spec goodstuff route

zio/stable
Paul Frazee 2023-03-17 18:38:16 -05:00
parent 8364e1a081
commit 808affc78b
2 changed files with 51 additions and 19 deletions

View File

@ -161,16 +161,6 @@ export function SUGGESTED_FOLLOWS(serviceUrl: string) {
}
}
export function GOOD_STUFF(serviceUrl: string) {
if (serviceUrl.includes('localhost')) {
return 'alice.test'
} else if (serviceUrl.includes('staging')) {
return 'paul.staging.bsky.dev'
} else {
return 'jay.bsky.social'
}
}
export const POST_IMG_MAX_WIDTH = 2000
export const POST_IMG_MAX_HEIGHT = 2000
export const POST_IMG_MAX_SIZE = 1000000

View File

@ -16,7 +16,7 @@ import {RootStoreModel} from './root-store'
import * as apilib from 'lib/api/index'
import {cleanError} from 'lib/strings/errors'
import {RichText} from 'lib/strings/rich-text'
import {SUGGESTED_FOLLOWS, GOOD_STUFF} from 'lib/constants'
import {SUGGESTED_FOLLOWS} from 'lib/constants'
import {
getCombinedCursors,
getMultipleAuthorsPosts,
@ -399,6 +399,7 @@ export class FeedModel {
params: this.params,
e,
})
this.hasMore = false
}
} finally {
this.lock.release()
@ -641,14 +642,13 @@ export class FeedModel {
params as GetTimeline.QueryParams,
)
} else if (this.feedType === 'goodstuff') {
const res = await this.rootStore.api.app.bsky.feed.getAuthorFeed({
...params,
author: GOOD_STUFF(String(this.rootStore.agent.service)),
} as GetAuthorFeed.QueryParams)
res.data.feed = mergePosts([res], {repostsOnly: true})
res.data.feed.forEach(item => {
delete item.reason
})
const res = await getGoodStuff(
this.rootStore.session.currentSession?.accessJwt || '',
params as GetTimeline.QueryParams,
)
res.data.feed = res.data.feed.filter(
item => !item.post.author.viewer?.muted,
)
return res
} else {
return this.rootStore.api.app.bsky.feed.getAuthorFeed(
@ -657,3 +657,45 @@ export class FeedModel {
}
}
}
// HACK
// temporary off-spec route to get the good stuff
// -prf
async function getGoodStuff(
accessJwt: string,
params: GetTimeline.QueryParams,
): Promise<GetTimeline.Response> {
const controller = new AbortController()
const to = setTimeout(() => controller.abort(), 15e3)
const uri = new URL('https://bsky.social/xrpc/app.bsky.unspecced.getPopular')
let k: keyof GetTimeline.QueryParams
for (k in params) {
if (typeof params[k] !== 'undefined') {
uri.searchParams.set(k, String(params[k]))
}
}
const res = await fetch(String(uri), {
method: 'get',
headers: {
accept: 'application/json',
authorization: `Bearer ${accessJwt}`,
},
signal: controller.signal,
})
const resHeaders: Record<string, string> = {}
res.headers.forEach((value: string, key: string) => {
resHeaders[key] = value
})
let resBody = await res.json()
clearTimeout(to)
return {
success: res.status === 200,
headers: resHeaders,
data: resBody,
}
}