56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import { createServerFn } from '@tanstack/react-start'
|
|
import {
|
|
searchPageInputSchema,
|
|
threadPageInputSchema,
|
|
userPageInputSchema,
|
|
} from './inputs'
|
|
import { loadThreadPage, loadUserPage, searchPage } from './post-service'
|
|
import type { LoadFailure } from './types'
|
|
|
|
const configFailure = (diagnostic: unknown): LoadFailure => {
|
|
console.error('Bird client configuration failed:', diagnostic)
|
|
return {
|
|
ok: false,
|
|
error: {
|
|
code: 'relay-config',
|
|
message: 'TWITTER_RELAY_BASE_URL を設定してください。',
|
|
retryable: false,
|
|
},
|
|
}
|
|
}
|
|
|
|
async function reader() {
|
|
const { getBirdReader } = await import('./bird-client.server')
|
|
return getBirdReader()
|
|
}
|
|
|
|
export const loadUserPosts = createServerFn({ method: 'GET' })
|
|
.validator(userPageInputSchema)
|
|
.handler(async ({ data }) => {
|
|
try {
|
|
return await loadUserPage(await reader(), data)
|
|
} catch (error) {
|
|
return configFailure(error)
|
|
}
|
|
})
|
|
|
|
export const searchPosts = createServerFn({ method: 'GET' })
|
|
.validator(searchPageInputSchema)
|
|
.handler(async ({ data }) => {
|
|
try {
|
|
return await searchPage(await reader(), data)
|
|
} catch (error) {
|
|
return configFailure(error)
|
|
}
|
|
})
|
|
|
|
export const loadThreadPosts = createServerFn({ method: 'GET' })
|
|
.validator(threadPageInputSchema)
|
|
.handler(async ({ data }) => {
|
|
try {
|
|
return await loadThreadPage(await reader(), data)
|
|
} catch (error) {
|
|
return configFailure(error)
|
|
}
|
|
})
|