@uservane/langfuse-push
Server-only adapter that completes the UserVane → Langfuse round-trip.
Credential-safe by design. Runs in your server or cron. Holds the UserVane secret key (pending-scores queue) and the Langfuse write keys. UserVane never receives the Langfuse key. Never import from a client component.
Install
Section titled “Install”npm install @uservane/langfuse-pushimport { pushPendingScores } from "@uservane/langfuse-push";
const summary = await pushPendingScores({ uservane: { secretKey: process.env.USERVANE_SECRET_KEY!, // apiBase: "https://api.uservane.com", }, langfuse: { publicKey: process.env.LANGFUSE_PUBLIC_KEY!, secretKey: process.env.LANGFUSE_SECRET_KEY!, // baseUrl: "https://cloud.langfuse.com", }, // scoreName: "uservane.satisfaction", // includeFailed: true, // limit: 50,});
// { delivered: number, failed: number }Behavior
Section titled “Behavior”GET /v1/sdk/pending-scores(secret key) for linked + pending rows (this project only).- Create a Langfuse session-level score: name
uservane.satisfaction(orscoreName), value = rating, comment = text, keyed bysessionId. POST /v1/sdk/pending-scores/ackwith per-iddelivered|failed.- Session-less linked rows are acked
failed(observation-only push is not v1). - Unlinked rows never appear in the queue.
Options
Section titled “Options”| Field | Notes |
|---|---|
uservane.secretKey | Required, server-only |
uservane.apiBase | Default https://api.uservane.com |
langfuse.publicKey / secretKey | Required |
langfuse.baseUrl | Optional Langfuse host |
scoreName | Default uservane.satisfaction |
limit | Max pull per run (capped) |
includeFailed | Re-poll previously failed rows |