@mobileaction/ui-modules
Version:
Mobile Action common modules for Vue projects
2 lines (1 loc) • 15.2 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("js-cookie"),t=require("axios");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(e),s=o(t);const r={default:{style:{marginRight:"2px",padding:"1px 3px",borderRadius:"3px"},type:"log"},log:{type:"log"},error:{style:{color:"#ffffff",backgroundColor:"#ff0000"},type:"error"},info:{style:{color:"#ffffff",backgroundColor:"#00bfff"},type:"info"},warn:{style:{color:"#ffffff",backgroundColor:"#ffa500"},type:"warn"},debug:{style:{padding:"1px 3px 1px 0",borderRight:"2px solid #333333"},type:"verbose"}};Object.keys(r).forEach((e=>{r[e].style=Object.assign({},r.default.style,r[e].style)}));const a=["log","info","warn","error","debug"],i=e=>Object.keys(e).map((t=>t.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(e=>"-"+e.toLowerCase()))+": "+e[t])).join(";"),c=(e,t)=>[`%c${t}`,i(e)];function l(e,{name:t,isDebug:o}){let n="string"==typeof e?e:t,s="boolean"==typeof o?()=>o:o;const i=(e&&e.$options&&e.$options.__file||n).replace(/^\/?client\/src\//,"").replace(/\.(js|vue)$/,""),l={};a.forEach((e=>{l[e]=s()?c(r[e].style,i):[i],this[e]=(...t)=>{if(("undefined"==typeof process||!process||!process.server)&&("debug"!==e||s())){(console[e]||console.trace||console.log)(...l[e],...t)}}}))}function d(e,t,o){return t.$log||(t.$log=new l(e,{name:o+"-logger",isDebug:()=>!1})),t.app===e?(t.$log.warn(`${o}: already added`),!1):(t.app=e,!0)}function u(e,t,o){e[o]=t,g(e)[o]=t}function g(e){return function(e){return 3===Number(e.version.split(".")[0])}(e)?e.config.globalProperties:e.prototype}class p{constructor(e,{fsParams:t,domains:o}){if(!o||!o.length)throw Error("MaFullStory: domains must be an array of at least size 1");if(!t||!t.org)throw Error("MaFullStory: fsParams.org must be given");this.Vue=e,Object.defineProperties(this,{domains:{value:o,writable:!1,enumerable:!1},fsParams:{value:Object.assign({debug:!1,host:"fullstory.com",script:"edge.fullstory.com/s/fs.js",org:"",namespace:"FS"},t),writable:!1,enumerable:!1},loaded:{value:!1,enumerable:!1}})}initialize(e,t=""){if(!e||-643103943===function(e){if("string"!=typeof e)return 0;let t=0;for(let o=0;o<e.length;o+=1)t=(t<<5)-t+e.charCodeAt(o)|0;return t}(e.username))return;if(!this.domains.includes(window.origin))return;Object.keys(this.fsParams).forEach((e=>{window[`_fs_${e}`]=this.fsParams[e]}));const o=this;window._fs_debug=!1,window._fs_host="fullstory.com",window._fs_script="edge.fullstory.com/s/fs.js",window._fs_org="3TA9V",window._fs_namespace="FS",function(e){let t="script",n="user";if(e in window)return void(window.console&&window.console.log&&o.Vue.$log.error('FullStory namespace conflict. Please set window["_fs_namespace"].'));let s=window[e]=function(e,t,o){s.q?s.q.push([e,t,o]):s._api(e,t,o)};s.q=[];let r=document.createElement(t);r.async=1,r.crossOrigin="anonymous",r.onload=()=>{this.loaded=!0},r.src="https://"+window._fs_script;let a=document.getElementsByTagName(t)[0];a.parentNode.insertBefore(r,a),s.identify=function(e,t,o){s(n,{uid:e},o),t&&s(n,t,o)},s.setUserVars=function(e,t){s(n,e,t)},s.event=function(e,t,o){s("event",{n:e,p:t},o)},s.anonymize=function(){s.identify(!1)},s.shutdown=function(){s("rec",!1)},s.restart=function(){s("rec",!0)},s.log=function(e,t){s("log",[e,t])},s.consent=function(e){s("consent",!arguments.length||e)},s.identifyAccount=function(e,t){r="account",(t=t||{}).acctId=e,s(r,t)},s.clearUserCookie=function(){},s.setVars=function(e,t){s("setVars",[e,t])},s._w={},a="XMLHttpRequest",s._w[a]=window[a],a="fetch",s._w[a]=window[a],window[a]&&(window[a]=function(){return s._w[a].apply(this,arguments)}),s._v="1.3.0"}(window._fs_namespace);const n={displayName:`${t}${e.username}`,email:`${t}${e.username}`,numberOfApps_int:e.usage.apps,keywords_int:e.usage.keywords,pricingPlan_str:e.plan,createdAt_date:new Date(1e3*+e.createdAt)},s=`${t}${e.userId}`;window.FS.identify(s,n)}fs(){return this.loaded||h.$log.warn("MaFullStory: FS is not loaded"),window.FS}}function h(e,t){if(!d(e,h,"MaFullStory"))return;const o=Object.assign({domains:[],fsParams:{}},t);u(e,new p(e,o),"$maFullStory")}class f{constructor(e,{isProduction:t=!1}){this.Vue=e,this.pUserId=!1,this.imp=null,this.isProduction="boolean"==typeof t?()=>t:t}cantSend(){return!this.isProduction()||"1"===n.default.get("MA")||!window.dataLayer}initialize(e,t=null){this.imp=t,this.pUserId=e&&e.userId,this.cantSend()||window.dataLayer.push({userId:this.pUserId})}eventSend(e,t,o=!1,n=!1,s=!1){const r=!1===o?location.pathname:o;if(this.cantSend())return void f.$log.warn("Mocked GA event:",e,t,r,this.pUserId,s,n);const a={event:"customEvent",gaEventCategory:e,gaEventAction:t,gaEventLabel:r};this.pUserId&&(a.dimension2=`${this.pUserId}`),n&&(a.dimension3=n),!1!==s&&(a.gaEventValue=s),window.dataLayer.push(a)}transactionAdd(e,t,o,n,s){this.cantSend()?f.$log.warn("Mocked GA transaction event:",...arguments):window.dataLayer.push({event:"transactionEvent",transactionId:e,transactionAffiliation:t,transactionTotal:o,dimension2:n,transactionProducts:s})}}class m{constructor(e,{appId:t,autoStart:o}){this.Vue=e,Object.defineProperties(this,{autoStart:{value:o||!1,writable:!1,enumerable:!1},appId:{value:t,writable:!1,enumerable:!1},loaded:{value:!1,writable:!0,enumerable:!1}}),!0===this.autoStart&&this.boot()}boot(e={}){w.$log.debug("[MaIntercom] booted",e);(t=>{const o=e.isProduction?"Production":"Staging";w.$log.info("[MaIntercom]",`Initializing Intercom in ${o} mode`);const n=window,s=document,r=n.Intercom;if("function"==typeof r)r("reattach_activator"),r("update",e);else{const e=function(){e.c(arguments)};e.q=[],e.c=function(t){e.q.push(t)},n.Intercom=e;const o=s.createElement("script");o.type="text/javascript",o.async=!0,o.src="https://widget.intercom.io/widget/"+this.appId,o.onload=t;const r=s.getElementsByTagName("script")[0];r&&r.parentNode.insertBefore(o,r)}})((()=>{w.$log.info("[MaIntercom] Loaded!"),this.loaded=!0;const t=Object.assign({},e,{widget:{activator:"#IntercomDefaultWidget"},app_id:this.appId});this.callIntercom("boot",t)}))}callIntercom(...e){void 0!==window.Intercom?window.Intercom(...e):w.$log.warn("[MaIntercom] Intercom not loaded yet;",...e)}track(e,t={}){w.$log.debug("[MaIntercom] track event:",e,t),this.callIntercom("trackEvent",e,t)}showMessenger(){w.$log.debug("[MaIntercom] show messenger"),this.callIntercom("show")}showIntercomWithMessage(e){w.$log.debug("[MaIntercom] show intercom with special message"),this.callIntercom("showNewMessage",e)}hideMessenger(){w.$log.debug("[MaIntercom] hide messenger"),this.callIntercom("hide")}update(e){w.$log.debug("[MaIntercom] update:",e),this.callIntercom("update",e)}showIntercomButton(){w.$log.debug("[MaIntercom] show intercom button"),this.callIntercom("update",{hide_default_launcher:!1})}hideIntercomButton(){w.$log.debug("[MaIntercom] hide intercom button"),this.callIntercom("update",{hide_default_launcher:!0})}}function w(e,t={}){if(!t.appId)throw new Error("MaIntercom: Missing app id");d(e,w,"MaIntercom")&&u(e,new m(e,t),"$maIntercom")}const b="MA_LAST_CLEARED";const y=new class{constructor(){this.storage={}}getItem(e){return e in this.storage?this.storage[e]:null}setItem(e,t){this.storage[e]=t}};class I{constructor(e,{cacheTimeout:t,cachePrefix:o,keptKeys:n,keptRawKeys:s}){const r=[...(n||[]).map((e=>`${o}${e}`)),...s||[]];this.$log=new l(null,{name:"MaStorage",isDebug:!1}),Object.defineProperties(this,{storage:{get:()=>e()||y,enumerable:!1},cacheTimeout:{value:t,writable:!1,enumerable:!1},cachePrefix:{value:o,writable:!1,enumerable:!1},keptKeys:{value:r,writable:!1,enumerable:!1}})}set(e,t){try{const o=JSON.stringify(t);return this.storage.setItem(e,o),!0}catch(e){return this.$log.error("Error: cannot set value. Possible circular data"),!1}}clear(e=!1){if(e)return void this.storage.clear();const t={};this.keptKeys.forEach((e=>{t[e]=this.storage.getItem(e)})),this.storage.clear(),Object.keys(t).forEach((e=>{this.storage.setItem(e,t[e])})),this.set(b,(new Date).getTime())}get(e){if(this.cacheTimeout>0){const e=this.storage.getItem(b);null===e?this.set(b,(new Date).getTime()):(new Date).getTime()-e>this.cacheTimeout&&this.clear()}const t=this.storage.getItem(e);try{return JSON.parse(t)}catch(e){return null}}del(e){try{this.storage.removeItem(e)}catch(t){this.$log.error("Failed to delete key from storage: ",e)}}reduce(e,t){const o=`${this.cachePrefix}${e}`;return void 0!==t?(this.set(o,t),t):this.get(o)}}function $(e,t){t.forEach((t=>{let o=t;if("string"==typeof o&&(o={name:o}),"string"!=typeof o.name||0===o.name.length)throw new Error(`Invalid reducer name given: ${o.name}`);if(o.reducer||(o.reducer=o.name),o.default&&(o.getter&&this.$log.warn(`MaStorage: "default" property will overwrite "getter" method for ${o.name}`),o.getter=e=>e||o.default),"function"!=typeof o.getter&&(o.getter=e=>e),"function"!=typeof o.setter&&(o.setter=e=>e),"string"==typeof o.reducer){let t=o.reducer;o.reducer=n=>o.getter(e.reduce(t,void 0!==n?o.setter(n):n))}if("function"!=typeof o.reducer)throw new Error(`Invalid reducer function provided: ${o.reducer}`);Object.defineProperty(e,o.name,{get:o.reducer,set:o.reducer,enumerable:!0})}))}const v=-1;const{validate:E}=require("schema-utils"),S={type:"object",properties:{name:{type:"string"},isDebug:{anyOf:[{type:"boolean"},{type:"object"}]}}},M={name:"ma-logger",isDebug:!1};const _=[..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"],P=(e=8)=>[...new Array(e)].map((()=>_[Math.floor(Math.random()*_.length)])).join(""),R={cacheEnabled:!1,cacheDelay:10,disableLoginCheck:!1,preRequestCheck:()=>!0,alreadyRetried:!1};class x{constructor(e,t){this.pools={},this.axiosCfg=Object.assign({responseType:"json",withCredentials:!0,headers:{"Access-Control-Allow-Origin":"*","Content-Type":"application/json"}},e),this.poolerAxios=s.default.create(this.axiosCfg),this.app=t.app,this.$log=new l(t.app,{name:"MaRequestPooler",isDebug:t.isDebug||!1}),this.cfg=Object.assign({REQUEST_PREFIX:"MA_REQ_",notLoggedIn:(...e)=>this.$log.error("Login failed:",...e)},t)}clearPool(e){if(!e)return void this.$log.error("Invalid id given:",e);if(!(e in this.pools))return void this.$log.error("Tried to clean non existing pool with id:",e);const t=this.pools[e];Object.keys(t).forEach((e=>{t[e].cancel()})),this.pools[e]&&delete this.pools[e]}makeRequest(e,t,o){let n=t||{};this.$log.debug("Making a request to:",e);const r=Object.assign({id:window.location.href},R,o),a=P(16),i=s.default.CancelToken.source(),c=new Promise(((t,o)=>{if(r.cacheEnabled){if(!this.app.$maSessionStorage)throw Error("MaSessionStorage plugin not enabled");const o=this.app.$maSessionStorage.get(this.cfg.REQUEST_PREFIX+e);if(o)return this.$log.debug(`Using cached data(${o.ts}) for: ${e}`),void setTimeout((()=>{t(o.data)}),r.cacheDelay)}this.pools[r.id]=this.pools[r.id]||{},this.pools[r.id][a]={id:a,cancel:i.cancel,ts:Date.now()};const s=Object.assign({},n.headers);Object.assign(n,{url:e,headers:s,cancelToken:i.token});if(!1===r.preRequestCheck(e,n,r))return o({errors:["PRE_REQUEST_CHECK_FAILED"]});this.poolerAxios.request(n).then((({data:n,status:s,statusText:a})=>{this.$log.debug(`Data received: ${s}-${a} data:`,n);let i=null;if(/\.json$/.test(e.split("?")[0])&&!Object.hasOwnProperty.bind(n)("success")&&(i={success:!0,data:n}),i=i||n,i.success){if(r.cacheEnabled){const t=(new Date).getTime();this.app.$maSessionStorage.set(this.cfg.REQUEST_PREFIX+e,{data:i.data,ts:t}),this.$log.debug(`Caching data at ${t} for: ${e}`)}t(i.data)}else{const e=i.errors||[];!r.disableLoginCheck&&e.find((e=>"NOT_LOGGED_IN"===e))&&this.cfg.notLoggedIn(),o(i)}})).catch((e=>{this.$log.error("Failed request:",e);const t=e.response?e.response.status:e.message;!r.disableLoginCheck&&(401===t||e.response&&"AUTHENTICATION_FAILED"===e.response.data.errorCode)&&this.cfg.notLoggedIn();let n=e.response&&e.response.data||e.message;n=n&&([n.errorCode]||n.errors),o({errors:[...n,"FETCH_ERROR"]},t)}))}));return c.poolId=r.id,c.reqId=a,c.cancel=i.cancel,c}clear(e){e||e in this.pools?this.clearPool(e):Object.keys(this.pools).forEach((e=>{this.clearPool(e)}))}cancelRequest(e,t){e&&t?this.pools[e]&&this.pools[e][t]?this.pools[e][t].cancel():this.$log.error("Pool or request does not exists:",e,t):this.$log.error("Received invalid poolId-reqId pair: ",e,t)}}const k=36e5;function j(e,t,o){-1===e.findIndex((e=>e===t||e.name===t))&&e.push({name:t,default:o})}exports.ALPHANUMERIC_CHARS=_,exports.DEFAULT_OPTIONS=R,exports.FALLBACK_STORAGE=y,exports.MaCommonErrorHandlers=function e(t){if(!d(t,e,"MaCommonErrorHandlers"))return;u(t,{failedRequest(...t){(this.$log||e.$log).error("Request failed:",...t)},suppressDuplicateNavigation(e){if(!e._isRouter)throw e}},"$error")},exports.MaFullStory=h,exports.MaGa=function(e,t={}){d(e,f,"MaGA")&&u(e,new f(e,t||{}),"$ga")},exports.MaGoogleRecaptcha=function e(t,{siteKey:o,h:n}){if(!d(t,e,"MaGoogleRecaptcha"))return;const s=`https://www.google.com/recaptcha/enterprise.js?render=${o}`;t.component("ma-recaptcha",{name:"ma-recaptcha",emits:["response","status-updated"],render(){return n("div",[this.$slots.default()])},data:()=>({waitingResponse:!1}),methods:{submit(){this.waitingResponse=!0,window.grecaptcha.enterprise.ready((async()=>{window.grecaptcha.enterprise.execute(o,{action:"login"}).then((e=>this.$emit("response",e))).catch((e=>Promise.reject(e))).then((()=>{this.waitingResponse=!1}))}))}},mounted(){if(Array.from(document.querySelectorAll(`script[src="${encodeURI(s)}"`)).length)return;const e=document.createElement("script");e.async=!0,e.onerror=e=>this.$log.error("Failed to load recaptcha",e),e.onload=()=>this.$log.debug("ReCaptcha loaded"),e.src=s;document.body.appendChild(e)},watch:{waitingResponse(){this.$emit("status-updated",this.waitingResponse)}}})},exports.MaIntercom=w,exports.MaLocalStorage=function e(t,o=[],n){if(!d(t,e,"MaLocalStorage"))return;const s=Object.assign({cacheTimeout:v,cachePrefix:"MA_",keptKeys:[],keptRawKeys:[],windowGlobal:!1},n),r="appVersion";s.keptKeys.push(r);const a=new I((()=>"undefined"!=typeof window&&window.localStorage),s);-1===o.findIndex((e=>e===r||e.name===r))&&o.push({name:r,default:"0.0.0"}),$(a,o),u(t,a,"$maLocalStorage"),"undefined"!=typeof window&&s.windowGlobal&&(window.$maLocalStorage=a)},exports.MaLogger=l,exports.MaLoggerPlugin=function e(t,{name:o="ma-logger",isDebug:n=!1}={}){const s={...M,name:o,isDebug:n};if(E(S,s,{name:"MaLoggerPlugin",baseDataPath:"options"}),e.app===t)return console.warn(`${s.name}: already added`),!1;e.app=t,e.options=s,s.isDebug="boolean"==typeof s.isDebug?()=>s.isDebug:s.isDebug,u(t,new l(t,s),"$log")},exports.MaRequestPooler=function e(t,o,n){d(t,e,"MaRequestPooler")&&(g(t).$req=new x(o,n))},exports.MaSessionStorage=function e(t,o=[],n){if(!d(t,e,"MaSessionStorage"))return;const s=Object.assign({cacheTimeout:k,cachePrefix:"MA_",keptKeys:[],keptRawKeys:[],windowGlobal:!1},n),r="appVersion",a="appVersionInitTime";s.keptKeys.push(r,a);const i=new I((()=>"undefined"!=typeof window&&window.sessionStorage),s);j(o,r,"0.0.0"),j(o,a,0),$(i,o),u(t,i,"$maSessionStorage"),"undefined"!=typeof window&&s.windowGlobal&&(window.$maSessionStorage=i)},exports.MaStorage=I,exports.insertReducerProps=$,exports.randomString=P;