@sleekio/sdk
Version:
Modern A/B Testing SDK for JavaScript Applications - Production-ready with graceful fallbacks
120 lines (107 loc) • 3.02 kB
TypeScript
/**
* Sleek SDK - TypeScript Declarations
*/
export interface SleekUserManagerOptions {
storageKey?: string;
useLocalStorage?: boolean;
useSessionStorage?: boolean;
cookieName?: string;
cookieExpireDays?: number;
useDeviceFingerprint?: boolean;
fallbackToFingerprint?: boolean;
}
export interface UserContext {
userId: string;
isAnonymous: boolean;
userProperties: Record<string, any>;
sessionId: string | null;
deviceInfo: Record<string, any>;
}
export interface AssignmentInfo {
variant: string;
assigned_at: string;
expires_at?: string;
is_expired: boolean;
expires_soon: boolean;
session_id: string | null;
}
export interface SleekSDKOptions {
apiUrl?: string;
timeout?: number;
requestTimeout?: number;
retryAttempts?: number;
batchEvents?: boolean;
batchSize?: number;
flushInterval?: number;
autoRefresh?: boolean;
gracefulFallback?: boolean;
enableLogging?: boolean;
headers?: Record<string, string>;
userManager?: SleekUserManagerOptions;
}
export interface SleekSDK {
// Core SDK methods
getVariant(experimentId: string, forceRefresh?: boolean): Promise<string>;
getVariantConfig(
experimentId: string,
forceRefresh?: boolean
): Promise<Record<string, any>>;
getAssignmentInfo(experimentId: string): AssignmentInfo | null;
isAssignmentExpired(experimentId: string): boolean;
isAssignmentExpiringSoon(
experimentId: string,
minutesBeforeExpiry?: number
): boolean;
refreshAssignment(experimentId: string): Promise<string>;
track(
experimentId: string,
eventName: string,
properties?: Record<string, any>
): void;
trackConversion(experimentId: string, properties?: Record<string, any>): void;
flushEvents(): Promise<void>;
clearAssignments(): void;
getAssignments(): Record<string, string>;
// User management methods
setUser(userId: string, properties?: Record<string, any>): string;
clearUser(): void;
getUserId(): string;
getUserContext(): UserContext;
isAnonymous(): boolean;
// Utility methods
getSessionId(): string | null;
cleanup(): void;
}
export class SleekUserManager {
constructor(options?: SleekUserManagerOptions);
setAuthenticatedUser(
userId: string,
userProperties?: Record<string, any>
): string;
getUserId(): string;
generateAnonymousId(): string;
storeUserId(userId: string): void;
getStoredUserId(): string | null;
clearUser(): void;
getUserContext(): UserContext;
getSessionId(): string | null;
getDeviceInfo(): Record<string, any>;
}
// Factory functions
export function createSleekSDK(
apiUrl: string,
userIdOrManager?: string | SleekUserManager | null,
options?: SleekSDKOptions
): SleekSDK;
export function createAnonymousSleek(
apiUrl: string,
options?: SleekSDKOptions
): SleekSDK;
export function createAuthenticatedSleek(
apiUrl: string,
userId: string,
userProperties?: Record<string, any>,
options?: SleekSDKOptions
): SleekSDK;
// Default export
export default createSleekSDK;