featurehub-javascript-client-sdk
Version:
FeatureHub client/browser SDK
90 lines (89 loc) • 3.4 kB
TypeScript
import { FeatureEnvironmentCollection } from './models';
import { EdgeService } from './edge_service';
import { FeatureHubConfig } from './feature_hub_config';
import { InternalFeatureRepository } from './internal_feature_repository';
export interface PollingService {
get frequency(): number;
poll(): Promise<void>;
stop(): void;
attributeHeader(header: string): Promise<void>;
busy: boolean;
}
export type FeaturesFunction = (environments: Array<FeatureEnvironmentCollection>) => void;
export type PromiseLikeFunction = (value: void | PromiseLike<void>) => void;
export type RejectLikeFunction = (response?: any) => void;
interface PromiseLikeData {
resolve: PromiseLikeFunction;
reject: RejectLikeFunction;
}
export declare abstract class PollingBase implements PollingService {
protected url: string;
protected _frequency: number;
protected _callback: FeaturesFunction;
protected _stopped: boolean;
protected _header?: string;
protected _shaHeader: string;
protected _etag: string | undefined | null;
protected _busy: boolean;
protected _outstandingPromises: Array<PromiseLikeData>;
protected constructor(url: string, frequency: number, callback: FeaturesFunction);
attributeHeader(header: string): Promise<void>;
stop(): void;
get frequency(): number;
abstract poll(): Promise<void>;
parseCacheControl(cacheHeader: string | undefined | null): void;
protected delayTimer(): Promise<void>;
get busy(): boolean;
protected resolveOutstanding(): void;
rejectOutstanding(result?: any): void;
}
export interface NodejsOptions {
timeout?: number;
}
export interface BrowserOptions {
timeout?: number;
}
export declare class BrowserPollingService extends PollingBase implements PollingService {
private readonly _options;
private localStorageLastUrl;
static httpRequestor: () => XMLHttpRequest;
static localStorageRequestor: () => Storage | {
getItem: () => null;
setItem: () => void;
};
constructor(options: BrowserOptions, url: string, frequency: number, callback: FeaturesFunction);
private loadLocalState;
poll(): Promise<void>;
}
export type PollingClientProvider = (options: BrowserOptions, url: string, frequency: number, callback: FeaturesFunction) => PollingService;
export declare class FeatureHubPollingClient implements EdgeService {
private readonly _frequency;
private readonly _url;
private _repository;
private _pollingService;
private readonly _options;
private _startable;
private readonly _config;
private _xHeader;
private _pollPromiseResolve;
private _pollPromiseReject;
private _currentTimer;
static pollingClientProvider: PollingClientProvider;
constructor(repository: InternalFeatureRepository, config: FeatureHubConfig, frequency: number, options?: BrowserOptions | NodejsOptions);
private _initService;
contextChange(header: string): Promise<void>;
clientEvaluated(): boolean;
requiresReplacementOnHeaderChange(): boolean;
close(): void;
private stop;
poll(): Promise<void>;
get canStart(): boolean;
get pollingFrequency(): undefined | number;
get active(): boolean;
get awaitingFirstSuccess(): boolean;
private _restartTimer;
private _pollFunc;
private _readyNextPoll;
private response;
}
export {};