UNPKG

@splitsoftware/splitio-commons

Version:
65 lines (64 loc) 2.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sdkClientFactory = void 0; var objectAssign_1 = require("../utils/lang/objectAssign"); var apiKey_1 = require("../utils/inputValidation/apiKey"); var client_1 = require("./client"); var clientInputValidation_1 = require("./clientInputValidation"); var COOLDOWN_TIME_IN_MILLIS = 1000; /** * Creates an Sdk client, i.e., a base client with status and destroy interface */ function sdkClientFactory(params, isSharedClient) { var sdkReadinessManager = params.sdkReadinessManager, syncManager = params.syncManager, storage = params.storage, signalListener = params.signalListener, settings = params.settings, telemetryTracker = params.telemetryTracker, uniqueKeysTracker = params.uniqueKeysTracker; var lastActionTime = 0; function __cooldown(func, time) { var now = Date.now(); //get the actual time elapsed in ms var timeElapsed = now - lastActionTime; //check if the time elapsed is less than desired cooldown if (timeElapsed < time) { //if yes, return message with remaining time in seconds settings.log.warn("Flush cooldown, remaining time " + (time - timeElapsed) / 1000 + " seconds"); return Promise.resolve(); } else { //Do the requested action and re-assign the lastActionTime lastActionTime = now; return func(); } } function __flush() { return syncManager ? syncManager.flush() : Promise.resolve(); } return (0, objectAssign_1.objectAssign)( // Proto-linkage of the readiness Event Emitter Object.create(sdkReadinessManager.sdkStatus), // Client API (getTreatment* & track methods) (0, clientInputValidation_1.clientInputValidationDecorator)(settings, (0, client_1.clientFactory)(params), sdkReadinessManager.readinessManager), // Sdk destroy { flush: function () { // @TODO define cooldown time return __cooldown(__flush, COOLDOWN_TIME_IN_MILLIS); }, destroy: function () { // Mark the SDK as destroyed immediately sdkReadinessManager.readinessManager.destroy(); // For main client, cleanup the SDK Key, listeners and scheduled jobs, and record stat before flushing data if (!isSharedClient) { (0, apiKey_1.releaseApiKey)(settings.core.authorizationKey); telemetryTracker.sessionLength(); signalListener && signalListener.stop(); uniqueKeysTracker.stop(); } // Stop background jobs syncManager && syncManager.stop(); return __flush().then(function () { // Cleanup storage return storage.destroy(); }); } }); } exports.sdkClientFactory = sdkClientFactory;