import { redirect } from "next/navigation"; import { getSession } from "@/lib/auth"; import { db } from "@/lib/db"; import { PublishForm } from "./publish-form"; import { WebhookControl } from "./webhook-control";
export const dynamic="force-dynamic";
export default async function Dashboard({searchParams}:{searchParams:Promise<{error?:string;source?:string}>}){const query=await searchParams;const user=await getSession();if(!user)redirect('/login');const sources=db.prepare('SELECT s.id,s.name,s.base_url,s.sync_status,s.last_synced_at,s.last_error,s.webhook_secret_hash,s.last_webhook_at,s.user_id AS owner_id FROM sources s JOIN source_members sm ON sm.source_id=s.id WHERE sm.user_id=? ORDER BY s.id DESC').all(user.id) as any[];return <>
控制台
{query.error&&{query.error}
}{query.source==='shared'?你已加入既有的共享 Memos 來源,不會重複同步貼文。
:query.source&&來源已連接,首次同步已排入佇列。
}發佈到自己的 Memos
{sources.length?:請先連接一個 Memos 來源。
}連接 Memos
Token 會使用伺服器金鑰加密保存。同一個 Memos 帳號與網址會自動共用來源,不會建立重複貼文。
已連接來源
{sources.map(s=>{s.name}{s.sync_status}
來源 ID:{s.id}
{s.base_url}
上次同步:{s.last_synced_at||'尚未完成'}
Webhook:{s.webhook_secret_hash?(s.last_webhook_at?`最近收到:${new Date(s.last_webhook_at+'Z').toLocaleString('zh-TW')}`:'已建立 URL,尚未收到呼叫'):'尚未建立 URL'}{s.last_error&&<>
{s.last_error}>}
{s.owner_id===user.id?:這是共享來源;只有建立者可以管理 webhook。
})}>}