abmeter
Version:
ABMeter browser SDK — feature flags and A/B experiments with server-side pre-evaluated assignments
26 lines (22 loc) • 894 B
text/typescript
// The platform seam: everything in the SDK that is not fetch + JSON. The
// browser default lives in platform-browser.ts; other runtimes (React Native)
// supply their own adapter via ConfigInput.platform.
export interface PlatformStorage {
getItem(key: string): Promise<string | null>;
setItem(key: string, value: string): Promise<void>;
removeItem(key: string): Promise<void>;
}
export interface PlatformLifecycle {
/**
* Fires when the app enters "background" — visibility hidden + pagehide in
* browsers, AppState 'active'→'background'/'inactive' in React Native.
* Handler is invoked once per transition. Returns an unsubscribe.
*/
onBackground(handler: () => void): () => void;
}
export interface PlatformAdapter {
/** 'browser' | 'react-native' | ... — for logs. */
readonly name: string;
storage: PlatformStorage;
lifecycle: PlatformLifecycle;
}