Documentation Index
Fetch the complete documentation index at: https://docs.snackbase.dev/llms.txt
Use this file to discover all available pages before exploring further.
The SnackBase JavaScript SDK provides many configuration options to customize its behavior for your application’s needs.
Configuration Options
Required Options
baseUrl
The base URL of your SnackBase instance.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
});
Authentication Options
apiKey
Optional API key for server-to-server authentication.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
apiKey: process.env.SNACKBASE_API_KEY,
});
API keys should only be used on the server side. Never expose API keys in
client-side code.
defaultAccount
Default account slug for single-tenant applications.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
defaultAccount: "my-account",
});
When set, users don’t need to specify the account when logging in.
Request Options
timeout
Request timeout in milliseconds. Default: 30000 (30 seconds).
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
timeout: 60000, // 60 seconds
});
maxRetries
Maximum number of retry attempts for failed requests. Default: 3.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
maxRetries: 5,
});
retryDelay
Delay between retry attempts in milliseconds. Default: 1000.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
retryDelay: 2000, // 2 seconds
});
Storage Options
storageBackend
Storage backend for authentication tokens. Default: auto-detected based on platform.
import { SnackBaseClient } from "@snackbase/sdk";
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
storageBackend: "localStorage", // or "sessionStorage", "memory"
});
Available options:
| Backend | Platform | Description |
|---|
localStorage | Web | Persists across sessions |
sessionStorage | Web | Cleared when tab closes |
memory | Any | In-memory only |
asyncStorage | React Native | Uses React Native AsyncStorage |
Token Refresh Options
enableAutoRefresh
Enable automatic token refresh before expiry. Default: true.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
enableAutoRefresh: true,
});
refreshBeforeExpiry
Seconds before token expiry to refresh. Default: 300 (5 minutes).
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
refreshBeforeExpiry: 600, // 10 minutes
});
Real-Time Options
maxRealTimeRetries
Maximum reconnection attempts for real-time connections. Default: 10.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
maxRealTimeRetries: 20,
});
realTimeReconnectionDelay
Initial delay for real-time reconnection in milliseconds. Default: 1000.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
realTimeReconnectionDelay: 2000,
});
Logging Options
enableLogging
Enable request/response logging. Default: false in production.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
enableLogging: true,
});
logLevel
Logging level. Default: 'error'.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
enableLogging: true,
logLevel: "debug", // "debug" | "info" | "warn" | "error"
});
Error Callbacks
onAuthError
Callback for 401 authentication errors.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
onAuthError: (error) => {
console.error("Auth error:", error);
// Redirect to login page
window.location.href = "/login";
},
});
onNetworkError
Callback for network failures.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
onNetworkError: (error) => {
console.error("Network error:", error);
// Show offline message
},
});
onRateLimitError
Callback for 429 rate limit errors.
const client = new SnackBaseClient({
baseUrl: "https://your-project.snackbase.dev",
onRateLimitError: (error) => {
console.warn("Rate limited:", error.retryAfter);
// Show rate limit message
},
});
Complete Configuration Example
import { SnackBaseClient } from "@snackbase/sdk";
const client = new SnackBaseClient({
// Required
baseUrl: "https://your-project.snackbase.dev",
// Authentication
apiKey: process.env.SNACKBASE_API_KEY,
defaultAccount: "my-account",
// Request settings
timeout: 60000,
maxRetries: 5,
retryDelay: 2000,
// Storage
storageBackend: "localStorage",
// Token refresh
enableAutoRefresh: true,
refreshBeforeExpiry: 600,
// Real-time
maxRealTimeRetries: 20,
realTimeReconnectionDelay: 2000,
// Logging
enableLogging: process.env.NODE_ENV === "development",
logLevel: "debug",
// Error callbacks
onAuthError: (error) => {
console.error("Auth error:", error);
},
onNetworkError: (error) => {
console.error("Network error:", error);
},
onRateLimitError: (error) => {
console.warn("Rate limited:", error.retryAfter);
},
});
Accessing Configuration
You can access the current configuration at runtime:
const config = client.getConfig();
console.log("Base URL:", config.baseUrl);
console.log("Timeout:", config.timeout);
console.log("Max retries:", config.maxRetries);
Environment-Specific Configuration
Development
const client = new SnackBaseClient({
baseUrl: "http://localhost:8000",
enableLogging: true,
logLevel: "debug",
});
Production
const client = new SnackBaseClient({
baseUrl: "https://api.production.com",
enableLogging: false,
timeout: 30000,
maxRetries: 3,
});
With React
import { SnackBaseProvider } from "@snackbase/sdk/react";
function App() {
return (
<SnackBaseProvider
baseUrl={process.env.NEXT_PUBLIC_SNACKBASE_URL!}
apiKey={process.env.SNACKBASE_API_KEY}
defaultAccount="my-account"
enableLogging={process.env.NODE_ENV === "development"}
>
<YourApp />
</SnackBaseProvider>
);
}
Default Configuration
These are the default values used by the SDK:
{
timeout: 30000,
enableAutoRefresh: true,
refreshBeforeExpiry: 300,
maxRetries: 3,
retryDelay: 1000,
storageBackend: auto-detected,
logLevel: "error",
enableLogging: false,
maxRealTimeRetries: 10,
realTimeReconnectionDelay: 1000,
}