0.0.0-beta.0 • Published 1 month ago

statsig-on-prem v0.0.0-beta.0

Weekly downloads
-
License
ISC
Repository
-
Last release
1 month ago

Statsig On-Premise (beta)

An on-premise solution for managing Statsig configs independently from Statsig Console.

Example: Bootstrap

Bootstrap Statsig SDK using Statsig on-prem to generate a specs JSON

import { StatsigOnPrem, StatsigStorageExample } from "statsig-on-prem";
import StatsigSDK from "statsig-node";

const storage = new StatsigStorageExample();
const statsig = new StatsigOnPrem(storage);
const sdkKey = "secret-key";

await statsig.initialize();
await statsig.registerSDKKey(sdkKey);
await statsig.createGate("test-gate", { enabled: true });

const configSpecs = await statsig.getConfigSpecs(sdkKey);
await StatsigSDK.initialize(sdkKey, {
  bootstrapValues: JSON.stringify(configSpecs),
});

StatsigSDK.checkGateSync({ userID: "123" }, "test-gate"));
StatsigSDK.shutdown();

Example: Data Adapter

Incorporate Statsig on-prem with a data adapter to serve updates to the Statsig SDK

import { StatsigOnPrem, StatsigStorageExample } from "statsig-on-prem";
import StatsigSDK, { IDataAdapter, AdapterResponse, DataAdapterKey } from "statsig-node";

class ExampleDataAdapter implements IDataAdapter {
  public constructor(private statsigOnPrem: StatsigOnPrem, private sdkKey: string) {}

  public async get(key: string): Promise<AdapterResponse> {
    if (key === DataAdapterKey.Rulesets) {
      return { result: JSON.stringify(statsigOnPrem.getConfigSpecs(this.sdkKey)) };
    } else if (key === DataAdapterKey.IDLists {
      return { error: new Error("ID Lists not supported") };
    } else {
      return { error: new Error("Should never occur");
    }
  }

  public supportsPollingUpdatesFor(key: string): boolean {
    if (key === DataAdapterKey.Rulesets) {
      return true;
    } else {
      return false;
    }
  }

  public async set(
    key: string,
    value: string,
    time?: number | undefined
  ): Promise<void> { /* no-op */ }

  public async initialize(): Promise<void> { /* no-op */ }

  public async shutdown(): Promise<void> { /* no-op */ }
}

const storage = new StatsigStorageExample();
const statsig = new StatsigOnPrem(storage);
const sdkKey = "secret-key";

await statsig.initialize();
await statsig.registerSDKKey(sdkKey);
await statsig.createGate("test-gate", { enabled: true });

await StatsigSDK.initialize(sdkKey, {
  dataAdapter: new ExampleDataAdapter(statsig, sdkKey),
});

StatsigSDK.checkGateSync({ userID: "123" }, "test-gate"));
StatsigSDK.shutdown();
0.0.0-beta.7

1 month ago

0.0.0-beta.5

3 months ago

0.0.0-beta.6

3 months ago

0.0.0-beta.4

4 months ago

0.0.0-beta.3

5 months ago

0.0.0-beta.2

5 months ago

0.0.0-beta.1

5 months ago

0.0.0-beta.0

5 months ago