rn-pendo-sdk
Version:
Pendo Mobile React Native SDK
1 lines • 12.6 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.Utils=exports.Consts=void 0;var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _reactNative=require("react-native");var _pendoLogger=require("./pendoLogger");var _pendoTypes=require("./pendoTypes");var _traverseOptions=require("./traverseOptions");var Consts=exports.Consts=(0,_createClass2.default)(function Consts(){(0,_classCallCheck2.default)(this,Consts);});Consts.kOnDynamicContentRequestAnalyzer='onDynamicContentRequestAnalyzer';Consts.kOnCaptureRequestAnalyzer='onCaptureRequestAnalyzer';Consts.kOnReturnFromAlertRequestAnalyzer='onReturnFromAlertRequestAnalyzer';Consts.kOnDefaultRequestAnalyzer='onDefaultRequestAnalyzer';Consts.kOnScreenContentChange='onScreenContentChange';Consts.kOnModalStateVisible='onModalStateVisible';Consts.kOnModalStateHidden='onModalStateHidden';Consts.kOnInitComplete='onInitComplete';Consts.kOnInitFailed='onInitFailed';Consts.kRnnRegisterComponentDidAppearListener='registerComponentDidAppearListener';Consts.kOnStateChange='onStateChange';Consts.kOnReady='onReady';Consts.kDrawer='drawer';Consts.kModal='__MODAL__';Consts.kString='string';Consts.kFunction='function';Consts.kObject='object';Consts.kTouchable='touchable';Consts.kPressable='pressable';Consts.kButton='button';Consts.kLink='link';Consts.kMenuItem='menuitem';Consts.kReactModal='React';Consts.kGorhomModal='Gorhom';Consts.kModalizeModal='Modalize';Consts.kReactNativeModal='ReactNativeModal';Consts.kReactNativeModals='ReactNativeModals';Consts.kUnknownModal='Unknown';var Utils=exports.Utils=function(){function Utils(){(0,_classCallCheck2.default)(this,Utils);}return(0,_createClass2.default)(Utils,null,[{key:"reactNativeVersion",value:function reactNativeVersion(){return`${_reactNative.Platform.constants.reactNativeVersion.major}.${_reactNative.Platform.constants.reactNativeVersion.minor}.${_reactNative.Platform.constants.reactNativeVersion.patch}`;}},{key:"pluginVersion",value:function pluginVersion(){try{var response=require('../package.json');return response.version||null;}catch(error){_pendoLogger.Logger.info('Error fetching or parsing package.json:',error);return null;}}},{key:"isFabricEnabled",value:function isFabricEnabled(){var _Utils$fabricEnabled;if(Utils.fabricEnabled==null){try{Utils.fabricEnabled=global.nativeFabricUIManager!=null||global.__turboModuleProxy!=null;_pendoLogger.Logger.debug('Fabric is enabled:',Utils.fabricEnabled);}catch(error){_pendoLogger.Logger.info('Error checking if Fabric is enabled:',error);Utils.fabricEnabled=false;}}return(_Utils$fabricEnabled=Utils.fabricEnabled)!=null?_Utils$fabricEnabled:false;}},{key:"isIOS",value:function isIOS(){return _reactNative.Platform.OS===_pendoTypes.PlatformOS.ios;}},{key:"isAndroid",value:function isAndroid(){return _reactNative.Platform.OS===_pendoTypes.PlatformOS.android;}},{key:"getOS",value:function getOS(){if(Utils.platformOS===null){if(Utils.isIOS()){Utils.platformOS=_pendoTypes.PlatformOS.ios;}else if(Utils.isAndroid()){Utils.platformOS=_pendoTypes.PlatformOS.android;}}return Utils.platformOS;}},{key:"isEmpty",value:function isEmpty(object){return object===null||object===undefined||object===false||object==='';}},{key:"isNotEmpty",value:function isNotEmpty(object){return!Utils.isEmpty(object);}},{key:"getRandomInt",value:function getRandomInt(max){return Math.floor(Math.random()*max);}},{key:"isSDKInitFailed",value:function isSDKInitFailed(){return Utils.initFailed;}},{key:"registerInitCallbacks",value:function registerInitCallbacks(onInitComplete,onInitFailed){Utils.onInitCompleteCallback=onInitComplete;Utils.onInitFailedCallback=onInitFailed;}},{key:"handleInitEvent",value:function handleInitEvent(success){if(Utils.initEventReceived){return false;}Utils.initEventReceived=true;Utils.initFailed=!success;if(success){_pendoLogger.Logger.info('Pendo SDK initialized successfully');if(Utils.onInitCompleteCallback){Utils.onInitCompleteCallback();}}else{_pendoLogger.Logger.error('Pendo SDK initialization failed. Verify your app key is valid.');if(Utils.onInitFailedCallback){Utils.onInitFailedCallback();}}return true;}},{key:"isValidJWTStructure",value:function isValidJWTStructure(token){if(!token||token.trim().length===0){return false;}var parts=token.split('.');if(parts.length!==3){return false;}for(var i=0;i<2;i++){try{var decoded=Utils.base64UrlDecode(parts[i]);JSON.parse(decoded);}catch(_unused){return false;}}return true;}},{key:"base64UrlDecode",value:function base64UrlDecode(input){var base64=input.replace(/-/g,'+').replace(/_/g,'/');var remainder=base64.length%4;if(remainder>0){base64+='='.repeat(4-remainder);}if(typeof global.atob==='function'){return global.atob(base64);}var chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';var output='';var buffer=0;var bits=0;for(var i=0;i<base64.length;i++){var char=base64[i];if(char==='='){break;}var index=chars.indexOf(char);if(index===-1){throw new Error('Invalid base64 character');}buffer=buffer<<6|index;bits+=6;if(bits>=8){bits-=8;output+=String.fromCharCode(buffer>>bits&0xff);}}return output;}},{key:"isSDKOperational",value:function isSDKOperational(){var withMessage=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;if(!Utils.hasPendoNativeModule(withMessage)){return false;}if(Utils.initFailed){if(withMessage){_pendoLogger.Logger.info('Pendo SDK initialization failed. Ignoring call.');}return false;}return true;}},{key:"reportScanFailure",value:function reportScanFailure(errorMessage){var shouldSendErrorToBE=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;_pendoLogger.Logger.info(errorMessage);if(Utils.isSDKOperational(false)){_reactNative.NativeModules.ReactNativePendo.sendFailureInfo({errorMessage:errorMessage},shouldSendErrorToBE);}}},{key:"hasPendoNativeModule",value:function hasPendoNativeModule(){var withMessage=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;if(Utils.isAvailable){return true;}if(withMessage){_pendoLogger.Logger.info('Pendo native plugin is not available. Ignoring Call. Please note that if you are using Expo, Expo Go is not supported by Pendo because Pendo SDK has a native plugin that is not part of the Expo Go app.');}return false;}},{key:"addRootTag",value:function addRootTag(results,rootTag,msg){var pushAsFirstRootTag=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;if(rootTag&&!results.rootTags.includes(rootTag)){if(msg){_pendoLogger.Logger.debug(msg,rootTag);}if(pushAsFirstRootTag){results.rootTags.unshift(rootTag);}else{results.rootTags.push(rootTag);}}}},{key:"removeSpacesAndNewLine",value:function removeSpacesAndNewLine(original){if(!original||original.length===0){return'';}var removeNewLine=original.replace(/\r?\n|\r/g,' ');return removeNewLine.replace(/ /g,'');}},{key:"handleError",value:function handleError(func){try{for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key];}return func.apply(void 0,args);}catch(e){var err;if(e instanceof Error){err=e;}else{err=new Error(String(e));}_pendoLogger.Logger.error('Unexpected error',err);}}},{key:"instanceOfNavigationState",value:function instanceOfNavigationState(state){return state!=null&&typeof state==='object'&&'type'in state&&typeof state.type==='string'&&'routes'in state&&Array.isArray(state.routes)&&'index'in state&&typeof state.index==='number';}},{key:"instanceOfNavigationRoute",value:function instanceOfNavigationRoute(route){return route!=null&&typeof route==='object'&&'name'in route&&typeof route.name==='string';}},{key:"mergeWithDefaultTraverseOptions",value:function mergeWithDefaultTraverseOptions(options){var traversalOptionsObject={android:{},ios:{},nativeIDs:[],clickableElementsNativeIDsRegex:null,integrationType:_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.integrationType,debouncerTime:_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.debouncerTime,firstScreenDebouncerTime:_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.firstScreenDebouncerTime,analyzeScreenNoDebouncerTime:_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeScreenNoDebouncerTime,analyzeScreenDefaultDebouncerTime:_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeScreenDefaultDebouncerTime,analyzeContentScreenDefaultDebouncerTime:_traverseOptions.DEFAULT_TRAVERSE_OPTIONS.analyzeContentScreenDefaultDebouncerTime};traversalOptionsObject=Utils.overrideOptionsWithUserOptions(traversalOptionsObject,options);traversalOptionsObject=Utils.mergeOptionsForOS(_pendoTypes.PlatformOS.android,traversalOptionsObject,options);traversalOptionsObject=Utils.mergeOptionsForOS(_pendoTypes.PlatformOS.ios,traversalOptionsObject,options);return traversalOptionsObject;}},{key:"overrideOptionsWithUserOptions",value:function overrideOptionsWithUserOptions(currentOptions,options){if(options&&options.firstScreenDebouncerTime){currentOptions.firstScreenDebouncerTime=options.firstScreenDebouncerTime;}if(options&&options.debouncerTime){currentOptions.debouncerTime=options.debouncerTime;}if(options&&options.nativeIDs){currentOptions.nativeIDs=options.nativeIDs;}if(options&&options.clickableElementsNativeIDsRegex){currentOptions.clickableElementsNativeIDsRegex=options.clickableElementsNativeIDsRegex;}return currentOptions;}},{key:"mergeOptionsForOS",value:function mergeOptionsForOS(platform,currentOptions,options){if(options&&options[platform]){currentOptions[platform]=Object.assign({},_traverseOptions.DEFAULT_TRAVERSE_OPTIONS[platform],options[platform]);}else{currentOptions[platform]=Object.assign({},_traverseOptions.DEFAULT_TRAVERSE_OPTIONS[platform]);}if(currentOptions.clickableElementsNativeIDsRegex){currentOptions[platform].clickableElementsNativeIDsRegex=_traverseOptions.DEFAULT_TRAVERSE_OPTIONS[platform].clickableElementsNativeIDsRegex;}return currentOptions;}},{key:"retroactiveScreenId",value:function retroactiveScreenId(routeState){var result={screenId:null,key:null,routeName:null};if(routeState==null){return result;}if(Utils.instanceOfNavigationState(routeState)){var route=routeState.routes[routeState.index];if(route){var retroScreenId=Utils.retroactiveScreenId(route);var type=routeState.type;result.screenId=type.concat('/',retroScreenId.screenId==null?'':retroScreenId.screenId);result.key=retroScreenId.key;result.routeName=retroScreenId.routeName;}}else if(Utils.instanceOfNavigationRoute(routeState)){var _retroScreenId=Utils.retroactiveScreenId(routeState.state);var name=routeState.name;if(_retroScreenId.key==null){var _retroScreenId$routeN;_retroScreenId.key=routeState.key;_retroScreenId.routeName=(_retroScreenId$routeN=_retroScreenId.routeName)!=null?_retroScreenId$routeN:name;}result.screenId=_retroScreenId.screenId==null?name:name.concat('/',_retroScreenId.screenId);result.key=_retroScreenId.key;result.routeName=_retroScreenId.routeName;}else{_pendoLogger.Logger.info(`Invalid route object ${routeState}`);}return result;}},{key:"safePrint",value:function safePrint(obj){var indent=arguments.length>1&&arguments[1]!==undefined?arguments[1]:2;var seen=arguments.length>2&&arguments[2]!==undefined?arguments[2]:new WeakSet();var pad=function pad(n){return' '.repeat(n);};if(obj===null||typeof obj!=='object'){return JSON.stringify(obj);}if(seen.has(obj)){return'[Circular]';}seen.add(obj);var entries=[];for(var key of Object.keys(obj)){if(key.indexOf('debug')>=0||key.indexOf('viewConfig')>=0||key==='return'||key==='child'||key==='children'||key==='sibling'){continue;}var valueStr=void 0;try{var value=obj[key];if(typeof value==='object'&&value!==null){valueStr='\n'+Utils.safePrint(value,indent+2,seen);}else if(typeof value==='function'){valueStr=Utils.removeSpacesAndNewLine(Utils.FunctionToString.call(value));}else if(typeof value==='symbol'){valueStr='[Symbol]';}else{valueStr=JSON.stringify(value);}}catch(err){valueStr=`[Unserializable: key: ${key} error: ${err.message}]`;}if(key!=='memoizedState'&&key!=='updateQueue'&&key.indexOf('Duration')===-1&&key.indexOf('flags')===-1&&key.indexOf('Flags')===-1&&valueStr!=null&&valueStr!=='null'&&valueStr!=='undefined'&&valueStr.indexOf('[Circular]')===-1){entries.push(`${pad(indent)}${key}: ${valueStr}`);}}return`{\n${entries.join(',\n')}\n${pad(indent-2)}}`;}}]);}();Utils.FunctionToString=Function.prototype.toString;Utils.isAvailable=!!_reactNative.NativeModules.ReactNativePendo;Utils.fabricEnabled=null;Utils.initFailed=false;Utils.initEventReceived=false;Utils.platformOS=null;