@splitsoftware/splitio-commons
Version:
Split JavaScript SDK common components
35 lines (27 loc) • 1.2 kB
text/typescript
import { SUBMITTERS_PUSH_FULL_QUEUE } from '../../logger/constants';
import { ISdkFactoryContextSync } from '../../sdkFactory/types';
import { submitterFactory } from './submitter';
const UNIQUE_KEYS_RATE = 900000; // 15 minutes
/**
* Submitter that periodically posts impression counts
*/
export function uniqueKeysSubmitterFactory(params: ISdkFactoryContextSync) {
const {
settings: { log, core: { key } },
serviceApi: { postUniqueKeysBulkCs, postUniqueKeysBulkSs },
storage: { uniqueKeys }
} = params;
const isClientSide = key !== undefined;
const postUniqueKeysBulk = isClientSide ? postUniqueKeysBulkCs : postUniqueKeysBulkSs;
const syncTask = submitterFactory(log, postUniqueKeysBulk, uniqueKeys, UNIQUE_KEYS_RATE);
// register unique keys submitter to be executed when uniqueKeys cache is full
uniqueKeys.setOnFullQueueCb(() => {
if (syncTask.isRunning()) {
log.info(SUBMITTERS_PUSH_FULL_QUEUE, [uniqueKeys.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;
}