UNPKG

@splitsoftware/splitio-commons

Version:
53 lines (52 loc) 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.impressionsSubmitterFactory = exports.fromImpressionsCollector = void 0; var lang_1 = require("../../utils/lang"); var submitter_1 = require("./submitter"); var constants_1 = require("../../logger/constants"); /** * Converts `impressions` data from cache into request payload. */ function fromImpressionsCollector(sendLabels, entityType, data) { var groupedByFeature = (0, lang_1.groupBy)(data, 'feature'); var dto = []; (0, lang_1.forOwn)(groupedByFeature, function (value, name) { dto.push({ f: name, i: value.map(function (entry) { return { k: entry.keyName, t: entry.treatment, m: entry.time, c: entry.changeNumber, r: sendLabels ? entry.label : undefined, b: entry.bucketingKey, pt: entry.pt, properties: entry.properties, et: entityType, // Definition type }; }) }); }); return dto; } exports.fromImpressionsCollector = fromImpressionsCollector; /** * Submitter that periodically posts impressions data */ function impressionsSubmitterFactory(params) { var _a = params.settings, log = _a.log, impressionsRefreshRate = _a.scheduler.impressionsRefreshRate, labelsEnabled = _a.core.labelsEnabled, postTestImpressionsBulk = params.serviceApi.postTestImpressionsBulk, impressions = params.storage.impressions, entityType = params.entityType; // retry impressions only once. var syncTask = (0, submitter_1.submitterFactory)(log, postTestImpressionsBulk, impressions, impressionsRefreshRate, fromImpressionsCollector.bind(undefined, labelsEnabled, entityType), 1); // register impressions submitter to be executed when impressions cache is full impressions.setOnFullQueueCb(function () { if (syncTask.isRunning()) { log.info(constants_1.SUBMITTERS_PUSH_FULL_QUEUE, [impressions.name]); syncTask.execute(); } // If submitter is stopped (e.g., user consent declined or unknown, or app state offline), we don't send the data. // Data will be sent when submitter is resumed. }); return syncTask; } exports.impressionsSubmitterFactory = impressionsSubmitterFactory;