@absmartly/javascript-sdk
Version:
A/B Smartly Javascript SDK
94 lines (93 loc) • 3.19 kB
JavaScript
require("core-js/modules/es.array.iterator.js");
require("core-js/modules/es.array.map.js");
require("core-js/modules/es.array.filter.js");
require("core-js/modules/es.object.entries.js");
require("core-js/modules/es.array.index-of.js");
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
return mod && mod.__esModule ? mod : {
"default": mod
};
};
Object.defineProperty(exports, "__esModule", {
value: true
});
const client_1 = __importDefault(require("./client"));
const context_1 = __importDefault(require("./context"));
const publisher_1 = require("./publisher");
const provider_1 = require("./provider");
const utils_1 = require("./utils");
class SDK {
constructor(options) {
const clientOptions = Object.assign({
agent: "absmartly-javascript-sdk"
}, ...Object.entries(options || {}).filter(x => ["application", "agent", "apiKey", "endpoint", "keepalive", "environment", "retries", "timeout"].indexOf(x[0]) !== -1).map(x => ({
[x[0]]: x[1]
})));
options = Object.assign({}, options);
this._client = options.client || new client_1.default(clientOptions);
this._eventLogger = options.eventLogger || SDK.defaultEventLogger;
this._publisher = options.publisher || new publisher_1.ContextPublisher();
this._provider = options.provider || new provider_1.ContextDataProvider();
}
getContextData(requestOptions) {
return this._provider.getContextData(this, requestOptions);
}
createContext(params, options, requestOptions) {
SDK._validateParams(params);
const fullOptions = SDK._contextOptions(options);
const data = this._provider.getContextData(this, requestOptions);
return new context_1.default(this, fullOptions, params, data);
}
setEventLogger(logger) {
this._eventLogger = logger;
}
getEventLogger() {
return this._eventLogger;
}
setContextPublisher(publisher) {
this._publisher = publisher;
}
getContextPublisher() {
return this._publisher;
}
setContextDataProvider(provider) {
this._provider = provider;
}
getContextDataProvider() {
return this._provider;
}
getClient() {
return this._client;
}
createContextWith(params, data, options) {
SDK._validateParams(params);
const fullOptions = SDK._contextOptions(options);
return new context_1.default(this, fullOptions, params, data);
}
static _contextOptions(options) {
return Object.assign({
publishDelay: (0, utils_1.isLongLivedApp)() ? 100 : -1,
refreshPeriod: 0
}, options || {});
}
static _validateParams(params) {
Object.entries(params.units).forEach(entry => {
const type = typeof entry[1];
if (type !== "string" && type !== "number") {
throw new Error(`Unit '${entry[0]}' UID is of unsupported type '${type}'. UID must be one of ['string', 'number']`);
}
if (typeof entry[1] === "string") {
if (entry[1].length === 0) {
throw new Error(`Unit '${entry[0]}' UID length must be >= 1`);
}
}
});
}
}
exports.default = SDK;
SDK.defaultEventLogger = (_, eventName, data) => {
if (eventName === "error") {
console.error(data);
}
};
;