Skip to Content
SdksTypeScript / JavaScript

TypeScript & JavaScript

The @gogreenflags/sdk package targets Node.js and browsers. Use it from TypeScript (recommended) or plain JavaScript; types ship with the package. React helpers are available via gogreenflags/sdk/react.

Installation

npm install @gogreenflags/sdk

Initialization

The @gogreenflags/sdk package uses CommonJS. In TypeScript or CommonJS projects the standard import works directly. For ESM projects ("type": "module" in package.json), use createRequire:

// CommonJS / TypeScript (works out of the box) const { GoGreenClient } = require('@gogreenflags/sdk'); // ESM projects import { createRequire } from 'node:module'; const require = createRequire(import.meta.url); const { GoGreenClient } = require('@gogreenflags/sdk');
import { GoGreenClient } from '@gogreenflags/sdk'; // TypeScript with CommonJS moduleResolution const client = new GoGreenClient({ sdkKey: 'YOUR_SDK_KEY', environmentId: 'YOUR_ENV_ID', apiBaseUrl: 'https://app.gogreenflags.com', streamUrl: 'https://app.gogreenflags.com', eventsUrl: 'https://app.gogreenflags.com', enableStreaming: true, defaultContext: { key: 'user-123', custom: { plan: 'enterprise' }, }, });

Configuration Options

OptionTypeDefaultDescription
sdkKeystringrequiredSDK key from Environment Settings
environmentIdstringrequiredEnvironment ID
defaultContextEvaluationContextrequiredDefault user context
apiBaseUrlstringlocalhost:8091Evaluation API base URL
streamUrlstringoptionalStreaming service URL
eventsUrlstringoptionalEvents ingestion URL
enableStreamingbooleanfalseEnable real-time SSE updates
requestTimeoutnumber5000HTTP request timeout (ms)
flushIntervalnumber60000Event flush interval (ms)
offlinebooleanfalseOffline mode
bootstrapEvaluationResponseundefinedPre-loaded config (skip initial fetch)
allAttributesPrivatebooleanfalseRedact all user attributes
privateAttributesstring[][]Specific attributes to redact
piiKeyStrategy'hash' | 'mask' | 'drop''hash'PII redaction strategy for user key
piiAttrStrategy'hash' | 'mask' | 'drop''mask'PII redaction strategy for attributes
configRetryMaxAttemptsnumber5Max retry attempts for config fetch
apiBaseUrlsstring[]undefinedMulti-region failover URLs
streamUrlsstring[]undefinedMulti-region failover stream URLs

Evaluating Flags

// Simple evaluation const enabled = client.boolVariation('feature-x', false); const theme = client.stringVariation('ui-theme', 'light'); const limit = client.numberVariation('rate-limit', 100); const config = client.jsonVariation('feature-config', {}); // Detailed evaluation const detail = client.boolVariationDetail('feature-x', false); console.log(detail.value); // true console.log(detail.reason); // "RULE_MATCH" console.log(detail.variationIndex); // 0 console.log(detail.ruleIndex); // 1

Tracking Events

// Track custom events for experimentation client.track('purchase', { revenue: 49.99, currency: 'USD' });

Event Listeners

// Listen for flag changes client.on('configUpdated', () => { console.log('Flags updated!'); }); // Listen for errors client.on('error', (err) => { console.error('SDK error:', err); });

Testing

import { testClient } from '@gogreenflags/sdk'; // Create an offline test client const client = testClient({ 'feature-x': true, 'ui-theme': 'dark', 'rate-limit': 50, }); // Use in unit tests — no network calls const enabled = client.boolVariation('feature-x', false); // returns true

Bootstrap (SSR / Hydration)

// Server: embed config in HTML const config = await fetchConfig(); res.send(`<script>window.__GOGREEN_BOOTSTRAP__ = ${JSON.stringify(config)}</script>`); // Client: use bootstrap to avoid flash of default values const client = new GoGreenClient({ sdkKey: 'YOUR_SDK_KEY', environmentId: 'YOUR_ENV_ID', defaultContext: { key: 'user-123' }, bootstrap: window.__GOGREEN_BOOTSTRAP__, });

See also