fdback.iofdback.io

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

MethodEnvironmentDescription
createSignedLoginData(user)ServerCreate signed auth data for a user
getLoginUrl(user)ServerGet a signed login URL for redirects
open(signedData, options?)BrowserOpen feedback board in popup/tab
openDirect(user, options?)BrowserSign and open (requires secret - not recommended)
getBoardUrl()BothGet the public board URL
isServerMode()BothCheck 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 URL

open

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>

On this page