@redpennon/node-sdk
v1.0.0
Published
RedPennon feature flag evaluation API client for Node.js
Maintainers
Readme
@redpennon/node-sdk
Thin HTTP client for the RedPennon feature flag evaluation API.
Installation
npm install @redpennon/node-sdkRequires Node 20+. No runtime dependencies — uses the global fetch.
Quick start
import { RedPennonClient } from "@redpennon/node-sdk";
const client = new RedPennonClient({ apiKey: "YOUR_ENV_API_KEY" });
// Simple: get the resolved value or your default on any failure.
const enabled = await client.variableValue("dark-mode-enabled", {
default: false,
});
// With user context (for targeting rules).
const user = { id: "user_123", email: "[email protected]" };
const enabled = await client.variableValue("dark-mode-enabled", {
default: false,
user,
});
// Full result: value + variation + reason.
const result = await client.variable("dark-mode-enabled", { user });
console.log(result.value, result.variation, result.reason);
// Batch: resolve many flags in one round-trip.
const results = await client.variables(["flag-a", "flag-b"], { user });
const flagA = results["flag-a"].value;API
new RedPennonClient({ apiKey, baseUrl?, fetchImpl? })
| Option | Type | Description |
|--------|------|-------------|
| apiKey | string | Environment API key from the RedPennon dashboard. |
| baseUrl | string? | Override the API base URL (default: https://api.redpennon.dev). |
| fetchImpl | typeof fetch? | Custom fetch — useful for testing. |
client.variableValue(key, { default, user? }) → Promise<T>
Returns the resolved value or default on any failure (network error, non-2xx, value=null). Use this in production code — your default is the load-bearing contract.
client.variable(key, { user? }) → Promise<VariableResult>
Returns the full evaluation result (value, variation, reason, feature). Throws APIError on network or non-2xx errors.
client.variables(keys, { user? }) → Promise<Record<string, VariableResult>>
Batch evaluation — one HTTP round-trip for multiple flags. Unknown keys return reason: "variable_not_found" inline rather than throwing.
Local development
npm ci
npm test
npm run buildLicense
MIT © RedPennon
