react-native-blitzllama-mmkv
Version:
Blitzllama React Native Library with mmkv
510 lines (509 loc) • 18.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.logout = exports.getActiveTriggers = exports.subscribeEvent = exports.createUser = exports.init = exports.__internal = exports.setFontFamily = exports.setSurveyLanguage = exports._fetchSurvey = exports._initTriggers = exports.setUserProperties = exports.setUserAttribute = exports.personalizeUser = exports.setUserEmail = exports.setUserName = exports._createTrigger = exports._userView = exports.addUser = exports._showSurvey = exports._dismissSurvey = exports._markComplete = exports._submitResponse = exports.executePendingArray = void 0;
const axios_1 = __importDefault(require("axios"));
const react_native_1 = require("react-native");
const utils_1 = require("./utils");
const endpoint = 'https://gameplay.blitzllama.com/api/v1';
const sdk_version = '1.4.5';
const getEndpoint = async () => {
const testing = await (0, utils_1.getData)('@blitz_testing');
if (testing) {
return endpoint.replace('gameplay', 'playground');
}
return endpoint;
};
const pushPendingArray = async (action, value) => {
let pending_queue = await (0, utils_1.getData)('@blitz_pending_queue');
let curr_pending_queue = [];
if (pending_queue) {
curr_pending_queue = JSON.parse(pending_queue);
}
curr_pending_queue.push({ action, value });
await (0, utils_1.storeData)('@blitz_pending_queue', JSON.stringify(curr_pending_queue));
};
const executePendingArray = async (source) => {
let pending_queue = await (0, utils_1.getData)('@blitz_pending_queue');
let curr_pending_queue = [];
if (pending_queue) {
curr_pending_queue = JSON.parse(pending_queue);
}
if (!curr_pending_queue || curr_pending_queue.length === 0) {
return;
}
for (const i in curr_pending_queue) {
const { action, value } = curr_pending_queue[i];
if (action === 'createUser') {
await (0, exports.createUser)(value);
}
}
//create user
const check_create = curr_pending_queue.find((q) => q.action === 'createUser');
if (check_create) {
const { value } = check_create;
await (0, exports.createUser)(value);
}
//init triggers
const check_triggers = curr_pending_queue.find((q) => q.action === 'initTriggers');
if (check_triggers) {
await _setTriggers();
}
const check_attributes = curr_pending_queue.filter((q) => q.action === 'setUserProperties');
if (check_attributes && check_attributes.length > 0) {
let property = {};
for (const c in check_attributes) {
if (check_attributes[c] &&
check_attributes[c].value !== null &&
check_attributes[c].value !== undefined) {
const new_property = JSON.parse(check_attributes[c].value);
property = { ...property, ...new_property };
}
}
await (0, exports.setUserProperties)(property);
}
if (source === 'createUser') {
await (0, utils_1.deleteData)('@blitz_pending_queue');
}
};
exports.executePendingArray = executePendingArray;
const _submitResponse = async (payload) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.post(api_endpoint + '/survey/user', payload, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then((result) => {
return result.data;
})
.catch((error) => {
console.log('BLITZ: ', error.response);
return;
});
};
exports._submitResponse = _submitResponse;
const _markComplete = async (payload) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.post(api_endpoint + '/survey/user/mark-complete', payload, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(result => {
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports._markComplete = _markComplete;
const _dismissSurvey = async (payload) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.post(api_endpoint + '/survey/user/dismiss', payload, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(result => {
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports._dismissSurvey = _dismissSurvey;
const _showSurvey = async (payload) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.post(api_endpoint + '/survey/user/shown', payload, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(result => {
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports._showSurvey = _showSurvey;
const addUser = async (user_id) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (auth_key) {
return;
}
const app_key = await (0, utils_1.getData)('@blitz_app_key');
if (!app_key) {
await pushPendingArray('createUser', user_id);
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.post(api_endpoint + '/user', { app_key, user_id }, {
headers: { 'sdk-version': sdk_version },
})
.then(result => {
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports.addUser = addUser;
const _userView = async () => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
const view_at = new Date().toISOString().split('T')[0];
const stored_view_at = await (0, utils_1.getData)('@blitz_view_updated_at');
if (stored_view_at && stored_view_at === view_at) {
return;
}
if (!auth_key) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.post(`${api_endpoint}/user/app-open`, {}, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(async (result) => {
await (0, utils_1.storeData)('@blitz_view_updated_at', view_at);
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports._userView = _userView;
const _createTrigger = async (trigger) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key || !trigger) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.post(api_endpoint + '/user/triggers', { trigger, platform: 'hybrid' }, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(result => {
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports._createTrigger = _createTrigger;
const setUserName = async (user_name) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.put(api_endpoint + '/user/name', { user_name }, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(result => {
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports.setUserName = setUserName;
const setUserEmail = async (user_email) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.put(api_endpoint + '/user/email', { user_email }, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(result => {
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports.setUserEmail = setUserEmail;
const personalizeUser = async (options) => {
if (options && options.theme && typeof options.theme === 'string') {
await (0, utils_1.storeData)('@blitz_personalize_theme', options.theme);
}
};
exports.personalizeUser = personalizeUser;
const setUserAttribute = async (filter, filter_value, data_type) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
return;
}
const attributes = await (0, utils_1.getData)('@blitz_attributes');
if (attributes) {
const parsedAtrributes = JSON.parse(attributes);
if (parsedAtrributes[filter] && parsedAtrributes[filter] === filter_value) {
return;
}
}
const api_endpoint = await getEndpoint();
return axios_1.default
.put(api_endpoint + '/user/attribute', { filter, filter_value, data_type }, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(async (result) => {
let attr = {};
if (attributes) {
const parsedAtrributes = JSON.parse(attributes);
attr = parsedAtrributes;
}
attr[filter] = filter_value;
await (0, utils_1.storeData)('@blitz_attributes', JSON.stringify(attr));
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports.setUserAttribute = setUserAttribute;
const setUserProperties = async (bulk_attributes) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
if (bulk_attributes) {
await pushPendingArray('setUserProperties', JSON.stringify(bulk_attributes));
}
return;
}
bulk_attributes = (0, utils_1.cleanAttributeObj)(bulk_attributes);
let filtered_attributes = {};
const attributes = await (0, utils_1.getData)('@blitz_attributes');
if (attributes) {
const parsedAtrributes = JSON.parse(attributes);
for (const i in bulk_attributes) {
if (i &&
bulk_attributes[i] !== undefined &&
bulk_attributes[i] !== null) {
if (!parsedAtrributes[i] ||
parsedAtrributes[i] !== bulk_attributes[i]) {
filtered_attributes[i] = bulk_attributes[i];
}
}
}
}
else {
filtered_attributes = bulk_attributes;
}
if (Object.keys(filtered_attributes).length === 0) {
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.put(api_endpoint + '/user/attributes', { properties: filtered_attributes }, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(async (result) => {
let attr = {};
if (attributes) {
const parsedAtrributes = JSON.parse(attributes);
attr = { ...parsedAtrributes, ...filtered_attributes };
}
attr = filtered_attributes;
await (0, utils_1.storeData)('@blitz_attributes', JSON.stringify(attr));
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports.setUserProperties = setUserProperties;
const _initTriggers = async () => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
if (!auth_key) {
await pushPendingArray('initTriggers', '');
return;
}
const api_endpoint = await getEndpoint();
return axios_1.default
.get(api_endpoint + '/user/triggers?platform=hybrid', {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(result => {
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports._initTriggers = _initTriggers;
const _fetchSurvey = async (trigger, event_properties) => {
const auth_key = await (0, utils_1.getData)('@blitz_auth_token');
const check_survey = await (0, utils_1.getData)('@blitz_survey_live');
let lang = await (0, utils_1.getData)('@blitz_survey_lang');
let theme = await (0, utils_1.getData)('@blitz_personalize_theme');
if (!auth_key || check_survey) {
return;
}
if (!lang) {
lang = '';
}
if (!theme) {
theme = '';
}
const enable_logs = await canPlatformLog();
if (enable_logs) {
console.log('BLITZ: TRIGGER SUCCESS - ' + trigger);
}
const api_endpoint = await getEndpoint();
const properties = JSON.stringify(event_properties);
return axios_1.default
.get(`${api_endpoint}/survey/user/${trigger}?lang_code=${lang}&platform=hybrid&theme=${theme}&properties=${properties}`, {
headers: { 'auth-token': auth_key, 'sdk-version': sdk_version },
})
.then(result => {
if (enable_logs) {
console.log('BLITZ: SURVEY - ' + JSON.stringify(result.data));
}
return result.data;
})
.catch(error => {
console.log('BLITZ: ', error.response);
return;
});
};
exports._fetchSurvey = _fetchSurvey;
const setSurveyLanguage = async (lang) => {
await (0, utils_1.storeData)('@blitz_survey_lang', lang);
};
exports.setSurveyLanguage = setSurveyLanguage;
const setFontFamily = async (regular_font, bold_font) => {
if (regular_font) {
await (0, utils_1.storeData)('@blitz_custom_font', regular_font);
if (bold_font) {
await (0, utils_1.storeData)('@blitz_custom_bold_font', bold_font);
}
else {
await (0, utils_1.storeData)('@blitz_custom_bold_font', regular_font);
}
}
};
exports.setFontFamily = setFontFamily;
const __internal = async () => {
await (0, utils_1.storeData)('@blitz_testing', 'true');
};
exports.__internal = __internal;
const canPlatformLog = async () => {
const debugging = await (0, utils_1.getData)('@blitz_enable_debugging');
return debugging && debugging === 't' ? true : false;
};
const init = async (app_key, enable_logs = false) => {
if (!app_key) {
return;
}
await (0, utils_1.deleteData)('@blitz_survey_live');
await (0, utils_1.deleteData)('@blitz_is_event_listener');
await (0, utils_1.deleteData)('@blitz_is_event_listener_display');
//await deleteData('@blitz_triggers');
if (enable_logs) {
await (0, utils_1.storeData)('@blitz_enable_debugging', 't');
console.log('BLITZ: INIT');
}
else {
await (0, utils_1.deleteData)('@blitz_enable_debugging');
}
const check_key = await (0, utils_1.getData)('@blitz_app_key');
if (!check_key) {
await (0, utils_1.storeData)('@blitz_app_key', app_key);
}
await (0, exports._userView)();
await _setTriggers();
await (0, exports.setUserAttribute)('_blitz_platform', react_native_1.Platform.OS, 'string');
};
exports.init = init;
const _setTriggers = async () => {
const triggers = await (0, exports._initTriggers)();
if (triggers && triggers.data) {
await (0, utils_1.storeData)('@blitz_triggers', JSON.stringify(triggers.data));
}
};
const createUser = async (user_id) => {
const token = await (0, exports.addUser)(user_id);
if (token && token.data && token.data.auth_token) {
await (0, utils_1.storeData)('@blitz_auth_token', token.data.auth_token);
await _setTriggers();
await (0, exports.executePendingArray)('createUser');
const enable_logs = await canPlatformLog();
if (enable_logs) {
console.log('BLITZ: CREATE USER SUCCESS');
}
}
};
exports.createUser = createUser;
const subscribeEvent = async (event_name, callback_fn) => {
if (event_name === 'survey_completed') {
const check_event_listener = await (0, utils_1.getData)('@blitz_is_event_listener');
if (!check_event_listener) {
react_native_1.DeviceEventEmitter.addListener(event_name, callback_fn);
await (0, utils_1.storeData)('@blitz_is_event_listener', 't');
}
}
if (event_name === 'survey_displayed') {
const check_event_listener = await (0, utils_1.getData)('@blitz_is_event_listener_display');
if (!check_event_listener) {
react_native_1.DeviceEventEmitter.addListener(event_name, callback_fn);
await (0, utils_1.storeData)('@blitz_is_event_listener_display', 't');
}
}
};
exports.subscribeEvent = subscribeEvent;
const getActiveTriggers = async () => {
const triggers = await (0, utils_1.getData)('@blitz_triggers');
if (!triggers) {
return [];
}
const parseTriggers = JSON.parse(triggers);
if (parseTriggers &&
parseTriggers.triggers &&
parseTriggers.triggers.length > 0) {
return parseTriggers.triggers;
}
return [];
};
exports.getActiveTriggers = getActiveTriggers;
const logout = async () => {
await (0, utils_1.deleteData)('@blitz_pending_queue');
await (0, utils_1.deleteData)('@blitz_survey_live');
await (0, utils_1.deleteData)('@blitz_triggers');
await (0, utils_1.deleteData)('@blitz_auth_token');
await (0, utils_1.deleteData)('@blitz_app_key');
await (0, utils_1.deleteData)('@blitz_view_updated_at');
await (0, utils_1.deleteData)('@blitz_attributes');
await (0, utils_1.deleteData)('@blitz_is_event_listener');
await (0, utils_1.deleteData)('@blitz_is_event_listener_display');
};
exports.logout = logout;