Core SDK
The Fdback class and its methods for server and client-side usage
Fdback Class
import { Fdback } from "@fdback.io/sdk";
const fdback = new Fdback({
workspaceId: string; // Required
workspaceSecret?: string; // Server-side only
baseUrl?: string; // Default: "https://app.fdback.io"
});Methods
| Method | Environment | Description |
|---|---|---|
createSignedLoginData(user) | Server | Create signed auth data for a user |
getLoginUrl(user) | Server | Get a signed login URL for redirects |
open(signedData, options?) | Browser | Open feedback board in popup/tab |
openDirect(user, options?) | Browser | Sign and open (requires secret - not recommended) |
getBoardUrl() | Both | Get the public board URL |
isServerMode() | Both | Check if secret is configured |
createSignedLoginData
Create signed authentication data for a user. This must be done server-side.
const signedData = await fdback.createSignedLoginData({
email: "user@example.com",
name: "John Doe",
avatar: "https://example.com/avatar.jpg",
});getLoginUrl
Get a signed URL for redirect-based authentication.
const url = await fdback.getLoginUrl({
email: "user@example.com",
name: "John Doe",
});
// Redirect user to this URLopen
Open the feedback board in a popup, tab, or via redirect.
fdback.open(signedData, {
mode: "popup", // "popup" | "tab" | "redirect"
width: 800, // Popup width
height: 700, // Popup height
});getBoardUrl
Get the public board URL for your workspace.
const url = fdback.getBoardUrl();
// Returns: "https://app.fdback.io/workspace-slug"Types
FdbackUser
interface FdbackUser {
email: string; // Required - user's email
name?: string; // Display name
avatar?: string; // Avatar URL
}SignedLoginData
interface SignedLoginData {
url: string;
headers: {
"x-workspace-id": string;
"x-timestamp": string;
"x-signature": string;
};
body: string;
expiresAt: number; // Expires in 5 minutes
}OpenOptions
interface OpenOptions {
mode?: "popup" | "tab" | "redirect"; // Default: "popup"
width?: number; // Default: 800
height?: number; // Default: 700
}CDN Usage
For non-bundled usage, include via CDN:
<script src="https://unpkg.com/@fdback.io/sdk"></script>
<script>
const fdback = new FdbackSDK.Fdback({
workspaceId: "your-workspace-id",
});
// Use with pre-signed data from your server
fetch("/api/fdback/sign", { method: "POST" })
.then((r) => r.json())
.then((signedData) => {
fdback.open(signedData, { mode: "popup" });
});
</script>