UNPKG

featurehub-javascript-client-sdk

Version:
43 lines (34 loc) 1.35 kB
import { FeatureStateUpdate } from './models'; // prevents circular deps import { FeatureHubConfig } from './feature_hub_config'; export interface FeatureUpdatePostManager { post(url: string, update: FeatureStateUpdate): Promise<boolean>; } class BrowserFeaturePostUpdater implements FeatureUpdatePostManager { post(url: string, update: FeatureStateUpdate): Promise<boolean> { return new Promise<boolean>((resolve) => { const req = new XMLHttpRequest(); req.open('PUT', url); req.setRequestHeader('Content-type', 'application/json'); req.send(JSON.stringify(update)); req.onreadystatechange = function () { if (req.readyState === 4) { resolve(req.status >= 200 && req.status < 300); } }; }); } } export type FeatureUpdaterProvider = () => FeatureUpdatePostManager; export class FeatureUpdater { private sdkUrl: string; public readonly manager: FeatureUpdatePostManager; public static featureUpdaterProvider: FeatureUpdaterProvider = () => new BrowserFeaturePostUpdater(); constructor(config: FeatureHubConfig) { this.sdkUrl = config.url(); this.manager = FeatureUpdater.featureUpdaterProvider(); } public updateKey(key: string, update: FeatureStateUpdate): Promise<boolean> { return this.manager.post(this.sdkUrl + '/' + key, update); } }