UNPKG

react-native-blitzllama-mmkv

Version:

Blitzllama React Native Library with mmkv

510 lines (509 loc) 18.4 kB
"use strict"; 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;