@product-intelligence-hub/sdk-node
v0.3.0
Published
Node.js Server SDK for Product Intelligence Hub
Maintainers
Readme
@product-intelligence-hub/sdk-node
Node.js Server SDK for Product Intelligence Hub.
Installation
npm install @product-intelligence-hub/sdk-node
# or
pnpm add @product-intelligence-hub/sdk-node
# or
yarn add @product-intelligence-hub/sdk-nodeQuick Start
import PIHNode from "@product-intelligence-hub/sdk-node";
// Initialize (once at server startup)
const pih = PIHNode.init({
apiKey: "your-environment-api-key",
projectId: "your-project-id",
environment: "prod",
tenantId: "tenant_abc", // optional, can also use setTenant()
});
// Track an event
pih.capture("user-42", "purchase_completed", {
amount: 99.99,
currency: "USD",
plan: "pro",
});
// Identify a user with traits
await pih.identify("user-42", {
name: "Jane Doe",
email: "[email protected]",
plan: "pro",
});
// Force flush queued events
await pih.flush();
// Graceful shutdown (flush + cleanup)
await pih.shutdown();API
PIHNode.init(config)
Initialize the SDK singleton. Returns a NodePIHClient instance.
| Option | Type | Default | Description |
|---|---|---|---|
| apiKey | string | required | Environment API key |
| projectId | string | required | Project identifier |
| environment | "dev" \| "staging" \| "prod" | required | Environment name |
| tenantId | string | "" | Tenant identifier |
| apiUrl | string | "https://repoingest-production.up.railway.app" | Ingest API URL |
| appVersion | string | undefined | Application version |
| debug | boolean | false | Enable debug logging |
| flushAt | number | 20 | Events before auto-flush |
| flushInterval | number | 10000 | Ms between auto-flushes |
client.capture(distinctId, event, properties?)
Track a server-side event. Queues the event internally (non-blocking).
client.identify(userId, traits?)
Identify a user and merge traits. Sends an identify call to the server.
client.flush()
Force flush all queued events to the ingest API.
client.shutdown()
Graceful shutdown: flushes the queue, detaches process listeners, and destroys the client. Call this before your server process exits.
PIHNode.getInstance()
Returns the current singleton instance, or null if not initialized.
PIHNode.resetInstance()
Destroys and resets the singleton. Useful for testing.
Graceful Shutdown
The SDK automatically listens for the beforeExit process event and flushes remaining events. For explicit control, call shutdown() in your server's cleanup handler:
process.on("SIGTERM", async () => {
await pih.shutdown();
process.exit(0);
});License
MIT
