@tef-novum/webview-bridge
Advanced tools
Comparing version 2.8.0 to 2.9.0
# CHANGELOG | ||
## v.2.9.0 - 2020-02-17 | ||
- Messages to renew webview session. | ||
## v.2.8.0 - 2020-02-04 | ||
@@ -4,0 +8,0 @@ |
@@ -8,1 +8,2 @@ export { isWebViewBridgeAvailable, onNativeEvent, NativeEventHandler, } from './src/post-message'; | ||
export { logEvent, logTiming, setScreenName, setUserProperty, CD_WEBAPP_INSTALLED, CD_NOVUM_UID, CD_EVENT_VALUE, } from './src/analytics'; | ||
export { renewSession, onSessionRenewed } from './src/sessions'; |
/** | ||
* This type map represents all the possible messages we can receive from native app | ||
* Those messages can be: | ||
* - Requests: native app initiates the dialog | ||
* - Responses: native app responds to a request initiated by the web | ||
* There are two possible kind of messages we can receive from native app: | ||
* - RequestsFromNativeApp: native app initiates the dialog | ||
* - ResponsesFromNativeApp: native app responds to a request initiated by the web | ||
*/ | ||
export declare type IncomingMessageMap = { | ||
EVENT: { | ||
declare type RequestsFromNativeApp = { | ||
NATIVE_EVENT: { | ||
type: 'NATIVE_EVENT'; | ||
@@ -15,2 +14,11 @@ id: string; | ||
}; | ||
SESSION_RENEWED: { | ||
type: 'SESSION_RENEWED'; | ||
id: string; | ||
payload: { | ||
accessToken: string; | ||
}; | ||
}; | ||
}; | ||
export declare type ResponsesFromNativeApp = { | ||
SIM_ICC: { | ||
@@ -165,3 +173,11 @@ id: string; | ||
}; | ||
RENEW_SESSION: { | ||
type: 'RENEW_SESSION'; | ||
id: string; | ||
payload: { | ||
accessToken: string; | ||
}; | ||
}; | ||
}; | ||
export declare type NativeAppResponsePayload<Type extends keyof ResponsesFromNativeApp> = ResponsesFromNativeApp[Type]['payload']; | ||
/** | ||
@@ -174,7 +190,7 @@ * Returns true if there is a WebView Bridge installed | ||
*/ | ||
export declare const postMessageToNativeApp: <T extends "SIM_ICC" | "IMEI" | "IMSI" | "ATTACH_TO_EMAIL" | "SET_TITLE" | "PAGE_LOADED" | "ALERT" | "MESSAGE" | "CONFIRM" | "CREATE_CALENDAR_EVENT" | "GET_CONTACT_DATA" | "NAVIGATION_BAR" | "SHARE" | "ERROR" | "GET_REMOTE_CONFIG" | "STATUS_REPORT" | "FETCH" | "OS_PERMISSION_STATUS" | "INTERNAL_NAVIGATION" | "DISMISS" | "VIBRATION" | "FETCH_CONTACTS_DATA" | "EVENT">({ type, id, payload }: { | ||
export declare const postMessageToNativeApp: <T extends "SIM_ICC" | "IMEI" | "IMSI" | "ATTACH_TO_EMAIL" | "SET_TITLE" | "PAGE_LOADED" | "ALERT" | "MESSAGE" | "CONFIRM" | "CREATE_CALENDAR_EVENT" | "GET_CONTACT_DATA" | "NAVIGATION_BAR" | "SHARE" | "ERROR" | "GET_REMOTE_CONFIG" | "STATUS_REPORT" | "FETCH" | "OS_PERMISSION_STATUS" | "INTERNAL_NAVIGATION" | "DISMISS" | "VIBRATION" | "FETCH_CONTACTS_DATA" | "RENEW_SESSION">({ type, id, payload }: { | ||
type: T; | ||
id?: string | undefined; | ||
payload?: Object | undefined; | ||
}, timeout?: number | undefined) => Promise<IncomingMessageMap[T]["payload"]>; | ||
}, timeout?: number | undefined) => Promise<ResponsesFromNativeApp[T]["payload"]>; | ||
export declare type NativeEventHandler = ({ event, }: { | ||
@@ -185,2 +201,7 @@ event: string; | ||
}; | ||
export declare const onNativeEvent: (handler: NativeEventHandler) => () => void; | ||
export declare const listenToNativeMessage: <T extends "NATIVE_EVENT" | "SESSION_RENEWED">(type: T, handler: (payload: RequestsFromNativeApp[T]["payload"]) => void | Object | Promise<Object>) => () => void; | ||
export declare const onNativeEvent: (eventHandler: NativeEventHandler) => () => void; | ||
export declare const onSessionRenewal: (handler: (payload: { | ||
accessToken: string; | ||
}) => void) => () => void; | ||
export {}; |
@@ -108,18 +108,15 @@ define(['exports'], function (exports) { 'use strict'; | ||
}; | ||
var onNativeEvent = function (handler) { | ||
var listenToNativeMessage = function (type, handler) { | ||
var listener = function (message) { | ||
if (message.type === 'NATIVE_EVENT') { | ||
var response = handler({ | ||
event: message.payload.event, | ||
if (message.type === type) { | ||
Promise.resolve(handler(message.payload)).then(function (responsePayload) { | ||
var postMessage = getWebViewPostMessage(); | ||
if (postMessage) { | ||
postMessage(JSON.stringify({ | ||
type: message.type, | ||
id: message.id, | ||
payload: responsePayload, | ||
})); | ||
} | ||
}); | ||
var postMessage_1 = getWebViewPostMessage(); | ||
if (postMessage_1) { | ||
postMessage_1(JSON.stringify({ | ||
type: 'NATIVE_EVENT', | ||
id: message.id, | ||
payload: { | ||
action: response.action || 'default', | ||
}, | ||
})); | ||
} | ||
} | ||
@@ -132,2 +129,13 @@ }; | ||
}; | ||
var onNativeEvent = function (eventHandler) { | ||
var handler = function (payload) { | ||
var response = eventHandler({ | ||
event: payload.event, | ||
}); | ||
return { | ||
action: response.action || 'default', | ||
}; | ||
}; | ||
return listenToNativeMessage('NATIVE_EVENT', handler); | ||
}; | ||
@@ -612,2 +620,25 @@ var nativeConfirm = function (_a) { | ||
/** | ||
* This method is used by webapp to request the native app to renew current session | ||
* When webapp (running inside a webview) receives a 401 api response from server, uses this | ||
* bridge method to renew the session. | ||
*/ | ||
var renewSession = function () { | ||
return postMessageToNativeApp({ type: 'RENEW_SESSION' }).then(function (_a) { | ||
var accessToken = _a.accessToken; | ||
return accessToken; | ||
}); | ||
}; | ||
/** | ||
* This method is used to listen for session renewals made by native app. Whenever the native app | ||
* renews the session with the api, it should notify webpp with this message. | ||
* This message is initiated by native app. | ||
*/ | ||
var onSessionRenewed = function (handler) { | ||
return listenToNativeMessage('SESSION_RENEWED', function (_a) { | ||
var accessToken = _a.accessToken; | ||
return handler(accessToken); | ||
}); | ||
}; | ||
exports.CD_EVENT_VALUE = CD_EVENT_VALUE; | ||
@@ -632,2 +663,4 @@ exports.CD_NOVUM_UID = CD_NOVUM_UID; | ||
exports.onNativeEvent = onNativeEvent; | ||
exports.onSessionRenewed = onSessionRenewed; | ||
exports.renewSession = renewSession; | ||
exports.reportStatus = reportStatus; | ||
@@ -634,0 +667,0 @@ exports.requestContact = requestContact; |
@@ -110,18 +110,15 @@ 'use strict'; | ||
}; | ||
var onNativeEvent = function (handler) { | ||
var listenToNativeMessage = function (type, handler) { | ||
var listener = function (message) { | ||
if (message.type === 'NATIVE_EVENT') { | ||
var response = handler({ | ||
event: message.payload.event, | ||
if (message.type === type) { | ||
Promise.resolve(handler(message.payload)).then(function (responsePayload) { | ||
var postMessage = getWebViewPostMessage(); | ||
if (postMessage) { | ||
postMessage(JSON.stringify({ | ||
type: message.type, | ||
id: message.id, | ||
payload: responsePayload, | ||
})); | ||
} | ||
}); | ||
var postMessage_1 = getWebViewPostMessage(); | ||
if (postMessage_1) { | ||
postMessage_1(JSON.stringify({ | ||
type: 'NATIVE_EVENT', | ||
id: message.id, | ||
payload: { | ||
action: response.action || 'default', | ||
}, | ||
})); | ||
} | ||
} | ||
@@ -134,2 +131,13 @@ }; | ||
}; | ||
var onNativeEvent = function (eventHandler) { | ||
var handler = function (payload) { | ||
var response = eventHandler({ | ||
event: payload.event, | ||
}); | ||
return { | ||
action: response.action || 'default', | ||
}; | ||
}; | ||
return listenToNativeMessage('NATIVE_EVENT', handler); | ||
}; | ||
@@ -614,2 +622,25 @@ var nativeConfirm = function (_a) { | ||
/** | ||
* This method is used by webapp to request the native app to renew current session | ||
* When webapp (running inside a webview) receives a 401 api response from server, uses this | ||
* bridge method to renew the session. | ||
*/ | ||
var renewSession = function () { | ||
return postMessageToNativeApp({ type: 'RENEW_SESSION' }).then(function (_a) { | ||
var accessToken = _a.accessToken; | ||
return accessToken; | ||
}); | ||
}; | ||
/** | ||
* This method is used to listen for session renewals made by native app. Whenever the native app | ||
* renews the session with the api, it should notify webpp with this message. | ||
* This message is initiated by native app. | ||
*/ | ||
var onSessionRenewed = function (handler) { | ||
return listenToNativeMessage('SESSION_RENEWED', function (_a) { | ||
var accessToken = _a.accessToken; | ||
return handler(accessToken); | ||
}); | ||
}; | ||
exports.CD_EVENT_VALUE = CD_EVENT_VALUE; | ||
@@ -634,2 +665,4 @@ exports.CD_NOVUM_UID = CD_NOVUM_UID; | ||
exports.onNativeEvent = onNativeEvent; | ||
exports.onSessionRenewed = onSessionRenewed; | ||
exports.renewSession = renewSession; | ||
exports.reportStatus = reportStatus; | ||
@@ -636,0 +669,0 @@ exports.requestContact = requestContact; |
@@ -109,18 +109,15 @@ var webviewBridge = (function (exports) { | ||
}; | ||
var onNativeEvent = function (handler) { | ||
var listenToNativeMessage = function (type, handler) { | ||
var listener = function (message) { | ||
if (message.type === 'NATIVE_EVENT') { | ||
var response = handler({ | ||
event: message.payload.event, | ||
if (message.type === type) { | ||
Promise.resolve(handler(message.payload)).then(function (responsePayload) { | ||
var postMessage = getWebViewPostMessage(); | ||
if (postMessage) { | ||
postMessage(JSON.stringify({ | ||
type: message.type, | ||
id: message.id, | ||
payload: responsePayload, | ||
})); | ||
} | ||
}); | ||
var postMessage_1 = getWebViewPostMessage(); | ||
if (postMessage_1) { | ||
postMessage_1(JSON.stringify({ | ||
type: 'NATIVE_EVENT', | ||
id: message.id, | ||
payload: { | ||
action: response.action || 'default', | ||
}, | ||
})); | ||
} | ||
} | ||
@@ -133,2 +130,13 @@ }; | ||
}; | ||
var onNativeEvent = function (eventHandler) { | ||
var handler = function (payload) { | ||
var response = eventHandler({ | ||
event: payload.event, | ||
}); | ||
return { | ||
action: response.action || 'default', | ||
}; | ||
}; | ||
return listenToNativeMessage('NATIVE_EVENT', handler); | ||
}; | ||
@@ -613,2 +621,25 @@ var nativeConfirm = function (_a) { | ||
/** | ||
* This method is used by webapp to request the native app to renew current session | ||
* When webapp (running inside a webview) receives a 401 api response from server, uses this | ||
* bridge method to renew the session. | ||
*/ | ||
var renewSession = function () { | ||
return postMessageToNativeApp({ type: 'RENEW_SESSION' }).then(function (_a) { | ||
var accessToken = _a.accessToken; | ||
return accessToken; | ||
}); | ||
}; | ||
/** | ||
* This method is used to listen for session renewals made by native app. Whenever the native app | ||
* renews the session with the api, it should notify webpp with this message. | ||
* This message is initiated by native app. | ||
*/ | ||
var onSessionRenewed = function (handler) { | ||
return listenToNativeMessage('SESSION_RENEWED', function (_a) { | ||
var accessToken = _a.accessToken; | ||
return handler(accessToken); | ||
}); | ||
}; | ||
exports.CD_EVENT_VALUE = CD_EVENT_VALUE; | ||
@@ -633,2 +664,4 @@ exports.CD_NOVUM_UID = CD_NOVUM_UID; | ||
exports.onNativeEvent = onNativeEvent; | ||
exports.onSessionRenewed = onSessionRenewed; | ||
exports.renewSession = renewSession; | ||
exports.reportStatus = reportStatus; | ||
@@ -635,0 +668,0 @@ exports.requestContact = requestContact; |
@@ -1,1 +0,1 @@ | ||
var webviewBridge=function(e){"use strict";var t=1,n=function(){return"webapp-"+t++},r="__tuenti_webview_bridge",o=function(){return!(!window.tuentiWebView||!window.tuentiWebView.postMessage)},i=function(){return!!(window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.tuentiWebView&&window.webkit.messageHandlers.tuentiWebView.postMessage)},a=function(){return o()?function(e){window.tuentiWebView.postMessage(e)}:i()?function(e){window.webkit.messageHandlers.tuentiWebView.postMessage(e)}:null},s=[],u=function(e){s.push(e)},c=function(e){s=s.filter(function(t){return t!==e})},l=function(){return o()||i()},d=function(e,t){var r=e.type,o=e.id,i=void 0===o?n():o,s=e.payload,l=a(),d=JSON.stringify({type:r,id:i,payload:s});return l?(setTimeout(function(){l(d)}),new Promise(function(e,n){var o=!1,a=function(t){t.id!==i||o||(t.type===r?e(t.payload):"ERROR"===t.type?n(t.payload):n({code:500,reason:"bad type: "+t.type+". Expecting "+r}),c(a))};u(a),t&&setTimeout(function(){o=!0,c(a),n({code:408,reason:"request timeout"})},t)})):Promise.reject({code:500,reason:"WebView postMessage not available"})};window[r]=window[r]||{postMessage:function(e){var t;try{t=JSON.parse(e)}catch(t){throw Error("Problem parsing webview message: "+e)}s.forEach(function(e){return e(t)})}};var f=function(e){var t=e.title,n=e.showBackButton,r=e.showReloadButton,o=e.showProfileButton,i=e.backgroundColor;return l()?d({type:"NAVIGATION_BAR",payload:{title:t,showBackButton:n,showReloadButton:r,showProfileButton:o,backgroundColor:i}}):(void 0!==t&&(document.title=t),Promise.resolve())},m=null,p=function(e){return"true"===m.result[e]},v=function(e){return Math.floor(e/1e3)},y=function(){return(y=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};var w,g=["NovumTracker","OBARGTracker"],b=function(e){return g.indexOf(e.get("name"))>=0},T=function(e){var t=e.onAndroid,n=e.onIos,r=e.onWeb;return window.AnalyticsWebInterface?t(window.AnalyticsWebInterface):window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.firebase?n(window.webkit.messageHandlers.firebase):window.ga&&window.ga.loaded?r(window.ga):Promise.resolve()},h={obIds:1,paymentModels:2,serviceWorkerStatus:3,isAdmin:5,hasIpComms:6,af_source:9,af_campaign:10,novum_uid_session:11,user_logged:12,currentSubscriptionId:13,currentSubscriptionType:14,currentPaymentModel:15,webviewBrowserVersion:16};return e.CD_EVENT_VALUE=8,e.CD_NOVUM_UID=7,e.CD_WEBAPP_INSTALLED=4,e.attachToEmail=function(e){var t=e.url,n=e.subject,r=e.fileName,o=e.recipient,i=e.body;return d({type:"ATTACH_TO_EMAIL",payload:{url:t,subject:n,fileName:r,recipient:o,body:i}})},e.checkPermissionStatus=function(e,t){return d({type:"OS_PERMISSION_STATUS",payload:{feature:e,params:t}}).then(function(e){return e.granted})},e.createCalendarEvent=function(e){var t=e.beginTime,n=e.endTime,r=e.title;return d({type:"CREATE_CALENDAR_EVENT",payload:{beginTime:v(t),endTime:v(n),title:r}})},e.dismiss=function(e){return d({type:"DISMISS",payload:{onCompletionUrl:e}})},e.fetch=function(e){var t=e.url,n=e.method,r=e.headers,o=e.body;return l()?d({type:"FETCH",payload:{url:t,method:n,headers:r,body:o}}).catch(function(){return{status:500,headers:{},body:"Bridge call failed"}}):Promise.resolve({status:500,headers:{},body:"Bridge not available"})},e.fetchContactsByPhone=function(e){return d({type:"FETCH_CONTACTS_DATA",payload:{phoneNumbers:e}})},e.internalNavigation=function(e){return d({type:"INTERNAL_NAVIGATION",payload:{feature:e}})},e.isABTestingAvailable=function(e){if(m)return Promise.resolve(p(e));var t=new Promise(function(e){setTimeout(function(){e(!1)},500)}),n=d({type:"GET_REMOTE_CONFIG"}).then(function(t){return m=t,p(e)});return Promise.race([t,n])},e.isWebViewBridgeAvailable=l,e.logEvent=function(e){var t=e.category,n=e.action,r=e.label,o=e.value,i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,["category","action","label","value"]);if(!t||!n)return console.warn('Analytics event should have "category" and "action"',{category:t,action:n}),Promise.resolve();var a=t;r||(r="null_label"),o||(o=0);var s=y({eventCategory:t,eventAction:n,eventLabel:r,eventValue:o},i);return T({onAndroid:function(e){return e.logEvent&&e.logEvent(a,JSON.stringify(s)),Promise.resolve()},onIos:function(e){return e.postMessage({command:"logEvent",name:a,parameters:s}),Promise.resolve()},onWeb:function(e){return new Promise(function(t){e("NovumTracker.send","event",y(y({},s),{hitCallback:t}))})}})},e.logTiming=function(e){var t=e.category,n=void 0===t?"performance_timer":t,r=e.variable,o=e.value,i=e.label;if(!n||!r||!o)return console.warn('Analytics timing should have "category", "variable" and "value"',{category:n,variable:r,value:o}),Promise.resolve();var a={timingCategory:n,timingVar:r,timingValue:o,timingLabel:i},s=n;return T({onAndroid:function(e){return e.logEvent&&e.logEvent(s,JSON.stringify(a)),Promise.resolve()},onIos:function(e){return e.postMessage({command:"logEvent",name:s,parameters:a}),Promise.resolve()},onWeb:function(e){return new Promise(function(t){var n;e("NovumTracker.send",y(((n={hitType:"timing",hitCallback:t}).dimension8=String(o),n),a))})}})},e.nativeAlert=function(e){var t=e.message,n=e.title,r=e.buttonText;return l()?d({type:"ALERT",payload:{title:n,message:t,buttonText:r}}):(window.alert(t),Promise.resolve())},e.nativeConfirm=function(e){var t=e.message,n=e.title,r=e.acceptText,o=e.cancelText;return l()?d({type:"CONFIRM",payload:{message:t,title:n,acceptText:r,cancelText:o}}).then(function(e){return e.result}):Promise.resolve(window.confirm(t))},e.nativeMessage=function(e){var t=e.message,n=e.duration,r=e.buttonText,o=e.type;return l()?d({type:"MESSAGE",payload:{message:t,duration:n,buttonText:r,type:o}}):(window.alert(t),Promise.resolve())},e.notifyPageLoaded=function(){return d({type:"PAGE_LOADED"})},e.onNativeEvent=function(e){var t=function(t){if("NATIVE_EVENT"===t.type){var n=e({event:t.payload.event}),r=a();r&&r(JSON.stringify({type:"NATIVE_EVENT",id:t.id,payload:{action:n.action||"default"}}))}};return u(t),function(){c(t)}},e.reportStatus=function(e){var t=e.feature,n=e.status,r=e.reason;return d({type:"STATUS_REPORT",payload:{feature:t,status:n,reason:r}})},e.requestContact=function(e){var t=(void 0===e?{}:e).filter;return d({type:"GET_CONTACT_DATA",payload:{filter:void 0===t?"phone":t}})},e.requestDeviceImei=function(){return d({type:"IMEI"},200).then(function(e){return e.imei}).catch(function(){return null})},e.requestSimIcc=function(){return d({type:"SIM_ICC"},200).then(function(e){return e.icc}).catch(function(){return null})},e.requestSimImsi=function(){return d({type:"IMSI"},200).then(function(e){return e.imsi}).catch(function(){return null})},e.requestVibration=function(e){return d({type:"VIBRATION",payload:{type:e}})},e.setScreenName=function(e,t){return e?T({onAndroid:function(t){return t.setScreenName&&t.setScreenName(e),Promise.resolve()},onIos:function(t){return t.postMessage({command:"setScreenName",name:e}),Promise.resolve()},onWeb:function(n){return new Promise(function(r){var o=e.startsWith("/")?e:"/"+e;o!==w?(w=o,n(function(){n.getAll().filter(b).forEach(function(e){e.set("page",o),e.send("pageView",y(y({},t),{hitCallback:r}))})})):r()})}}):(console.warn("Missing analytics screenName"),Promise.resolve())},e.setUserProperty=function(e,t){return e&&t?(t=String(t),T({onAndroid:function(n){return n.setUserProperty&&n.setUserProperty(e,t),Promise.resolve()},onIos:function(n){return n.postMessage({command:"setUserProperty",name:e,value:t}),Promise.resolve()},onWeb:function(n){var r,o=h[e];return o?(n("NovumTracker.set",((r={})["dimension"+o]=String(t),r)),Promise.resolve()):(console.warn("No custom dimension defined for user property",e),Promise.resolve())}})):(console.warn("Trying to set analytics user property without name or value",e,t),Promise.resolve())},e.setWebViewTitle=function(e){return l()?f({title:e}):(document.title=e,Promise.resolve())},e.share=function(e){return d({type:"SHARE",payload:e})},e.updateNavigationBar=f,e}({}); | ||
var webviewBridge=function(e){"use strict";var n=1,t=function(){return"webapp-"+n++},r="__tuenti_webview_bridge",o=function(){return!(!window.tuentiWebView||!window.tuentiWebView.postMessage)},i=function(){return!!(window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.tuentiWebView&&window.webkit.messageHandlers.tuentiWebView.postMessage)},a=function(){return o()?function(e){window.tuentiWebView.postMessage(e)}:i()?function(e){window.webkit.messageHandlers.tuentiWebView.postMessage(e)}:null},s=[],u=function(e){s.push(e)},c=function(e){s=s.filter(function(n){return n!==e})},l=function(){return o()||i()},d=function(e,n){var r=e.type,o=e.id,i=void 0===o?t():o,s=e.payload,l=a(),d=JSON.stringify({type:r,id:i,payload:s});return l?(setTimeout(function(){l(d)}),new Promise(function(e,t){var o=!1,a=function(n){n.id!==i||o||(n.type===r?e(n.payload):"ERROR"===n.type?t(n.payload):t({code:500,reason:"bad type: "+n.type+". Expecting "+r}),c(a))};u(a),n&&setTimeout(function(){o=!0,c(a),t({code:408,reason:"request timeout"})},n)})):Promise.reject({code:500,reason:"WebView postMessage not available"})};window[r]=window[r]||{postMessage:function(e){var n;try{n=JSON.parse(e)}catch(n){throw Error("Problem parsing webview message: "+e)}s.forEach(function(e){return e(n)})}};var f=function(e,n){var t=function(t){t.type===e&&Promise.resolve(n(t.payload)).then(function(e){var n=a();n&&n(JSON.stringify({type:t.type,id:t.id,payload:e}))})};return u(t),function(){c(t)}},m=function(e){var n=e.title,t=e.showBackButton,r=e.showReloadButton,o=e.showProfileButton,i=e.backgroundColor;return l()?d({type:"NAVIGATION_BAR",payload:{title:n,showBackButton:t,showReloadButton:r,showProfileButton:o,backgroundColor:i}}):(void 0!==n&&(document.title=n),Promise.resolve())},p=null,v=function(e){return"true"===p.result[e]},y=function(e){return Math.floor(e/1e3)},w=function(){return(w=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e}).apply(this,arguments)};var g,b=["NovumTracker","OBARGTracker"],T=function(e){return b.indexOf(e.get("name"))>=0},h=function(e){var n=e.onAndroid,t=e.onIos,r=e.onWeb;return window.AnalyticsWebInterface?n(window.AnalyticsWebInterface):window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.firebase?t(window.webkit.messageHandlers.firebase):window.ga&&window.ga.loaded?r(window.ga):Promise.resolve()},E={obIds:1,paymentModels:2,serviceWorkerStatus:3,isAdmin:5,hasIpComms:6,af_source:9,af_campaign:10,novum_uid_session:11,user_logged:12,currentSubscriptionId:13,currentSubscriptionType:14,currentPaymentModel:15,webviewBrowserVersion:16};return e.CD_EVENT_VALUE=8,e.CD_NOVUM_UID=7,e.CD_WEBAPP_INSTALLED=4,e.attachToEmail=function(e){var n=e.url,t=e.subject,r=e.fileName,o=e.recipient,i=e.body;return d({type:"ATTACH_TO_EMAIL",payload:{url:n,subject:t,fileName:r,recipient:o,body:i}})},e.checkPermissionStatus=function(e,n){return d({type:"OS_PERMISSION_STATUS",payload:{feature:e,params:n}}).then(function(e){return e.granted})},e.createCalendarEvent=function(e){var n=e.beginTime,t=e.endTime,r=e.title;return d({type:"CREATE_CALENDAR_EVENT",payload:{beginTime:y(n),endTime:y(t),title:r}})},e.dismiss=function(e){return d({type:"DISMISS",payload:{onCompletionUrl:e}})},e.fetch=function(e){var n=e.url,t=e.method,r=e.headers,o=e.body;return l()?d({type:"FETCH",payload:{url:n,method:t,headers:r,body:o}}).catch(function(){return{status:500,headers:{},body:"Bridge call failed"}}):Promise.resolve({status:500,headers:{},body:"Bridge not available"})},e.fetchContactsByPhone=function(e){return d({type:"FETCH_CONTACTS_DATA",payload:{phoneNumbers:e}})},e.internalNavigation=function(e){return d({type:"INTERNAL_NAVIGATION",payload:{feature:e}})},e.isABTestingAvailable=function(e){if(p)return Promise.resolve(v(e));var n=new Promise(function(e){setTimeout(function(){e(!1)},500)}),t=d({type:"GET_REMOTE_CONFIG"}).then(function(n){return p=n,v(e)});return Promise.race([n,t])},e.isWebViewBridgeAvailable=l,e.logEvent=function(e){var n=e.category,t=e.action,r=e.label,o=e.value,i=function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(t[r[o]]=e[r[o]])}return t}(e,["category","action","label","value"]);if(!n||!t)return console.warn('Analytics event should have "category" and "action"',{category:n,action:t}),Promise.resolve();var a=n;r||(r="null_label"),o||(o=0);var s=w({eventCategory:n,eventAction:t,eventLabel:r,eventValue:o},i);return h({onAndroid:function(e){return e.logEvent&&e.logEvent(a,JSON.stringify(s)),Promise.resolve()},onIos:function(e){return e.postMessage({command:"logEvent",name:a,parameters:s}),Promise.resolve()},onWeb:function(e){return new Promise(function(n){e("NovumTracker.send","event",w(w({},s),{hitCallback:n}))})}})},e.logTiming=function(e){var n=e.category,t=void 0===n?"performance_timer":n,r=e.variable,o=e.value,i=e.label;if(!t||!r||!o)return console.warn('Analytics timing should have "category", "variable" and "value"',{category:t,variable:r,value:o}),Promise.resolve();var a={timingCategory:t,timingVar:r,timingValue:o,timingLabel:i},s=t;return h({onAndroid:function(e){return e.logEvent&&e.logEvent(s,JSON.stringify(a)),Promise.resolve()},onIos:function(e){return e.postMessage({command:"logEvent",name:s,parameters:a}),Promise.resolve()},onWeb:function(e){return new Promise(function(n){var t;e("NovumTracker.send",w(((t={hitType:"timing",hitCallback:n}).dimension8=String(o),t),a))})}})},e.nativeAlert=function(e){var n=e.message,t=e.title,r=e.buttonText;return l()?d({type:"ALERT",payload:{title:t,message:n,buttonText:r}}):(window.alert(n),Promise.resolve())},e.nativeConfirm=function(e){var n=e.message,t=e.title,r=e.acceptText,o=e.cancelText;return l()?d({type:"CONFIRM",payload:{message:n,title:t,acceptText:r,cancelText:o}}).then(function(e){return e.result}):Promise.resolve(window.confirm(n))},e.nativeMessage=function(e){var n=e.message,t=e.duration,r=e.buttonText,o=e.type;return l()?d({type:"MESSAGE",payload:{message:n,duration:t,buttonText:r,type:o}}):(window.alert(n),Promise.resolve())},e.notifyPageLoaded=function(){return d({type:"PAGE_LOADED"})},e.onNativeEvent=function(e){return f("NATIVE_EVENT",function(n){return{action:e({event:n.event}).action||"default"}})},e.onSessionRenewed=function(e){return f("SESSION_RENEWED",function(n){var t=n.accessToken;return e(t)})},e.renewSession=function(){return d({type:"RENEW_SESSION"}).then(function(e){return e.accessToken})},e.reportStatus=function(e){var n=e.feature,t=e.status,r=e.reason;return d({type:"STATUS_REPORT",payload:{feature:n,status:t,reason:r}})},e.requestContact=function(e){var n=(void 0===e?{}:e).filter;return d({type:"GET_CONTACT_DATA",payload:{filter:void 0===n?"phone":n}})},e.requestDeviceImei=function(){return d({type:"IMEI"},200).then(function(e){return e.imei}).catch(function(){return null})},e.requestSimIcc=function(){return d({type:"SIM_ICC"},200).then(function(e){return e.icc}).catch(function(){return null})},e.requestSimImsi=function(){return d({type:"IMSI"},200).then(function(e){return e.imsi}).catch(function(){return null})},e.requestVibration=function(e){return d({type:"VIBRATION",payload:{type:e}})},e.setScreenName=function(e,n){return e?h({onAndroid:function(n){return n.setScreenName&&n.setScreenName(e),Promise.resolve()},onIos:function(n){return n.postMessage({command:"setScreenName",name:e}),Promise.resolve()},onWeb:function(t){return new Promise(function(r){var o=e.startsWith("/")?e:"/"+e;o!==g?(g=o,t(function(){t.getAll().filter(T).forEach(function(e){e.set("page",o),e.send("pageView",w(w({},n),{hitCallback:r}))})})):r()})}}):(console.warn("Missing analytics screenName"),Promise.resolve())},e.setUserProperty=function(e,n){return e&&n?(n=String(n),h({onAndroid:function(t){return t.setUserProperty&&t.setUserProperty(e,n),Promise.resolve()},onIos:function(t){return t.postMessage({command:"setUserProperty",name:e,value:n}),Promise.resolve()},onWeb:function(t){var r,o=E[e];return o?(t("NovumTracker.set",((r={})["dimension"+o]=String(n),r)),Promise.resolve()):(console.warn("No custom dimension defined for user property",e),Promise.resolve())}})):(console.warn("Trying to set analytics user property without name or value",e,n),Promise.resolve())},e.setWebViewTitle=function(e){return l()?m({title:e}):(document.title=e,Promise.resolve())},e.share=function(e){return d({type:"SHARE",payload:e})},e.updateNavigationBar=m,e}({}); |
@@ -112,18 +112,15 @@ (function (global, factory) { | ||
}; | ||
var onNativeEvent = function (handler) { | ||
var listenToNativeMessage = function (type, handler) { | ||
var listener = function (message) { | ||
if (message.type === 'NATIVE_EVENT') { | ||
var response = handler({ | ||
event: message.payload.event, | ||
if (message.type === type) { | ||
Promise.resolve(handler(message.payload)).then(function (responsePayload) { | ||
var postMessage = getWebViewPostMessage(); | ||
if (postMessage) { | ||
postMessage(JSON.stringify({ | ||
type: message.type, | ||
id: message.id, | ||
payload: responsePayload, | ||
})); | ||
} | ||
}); | ||
var postMessage_1 = getWebViewPostMessage(); | ||
if (postMessage_1) { | ||
postMessage_1(JSON.stringify({ | ||
type: 'NATIVE_EVENT', | ||
id: message.id, | ||
payload: { | ||
action: response.action || 'default', | ||
}, | ||
})); | ||
} | ||
} | ||
@@ -136,2 +133,13 @@ }; | ||
}; | ||
var onNativeEvent = function (eventHandler) { | ||
var handler = function (payload) { | ||
var response = eventHandler({ | ||
event: payload.event, | ||
}); | ||
return { | ||
action: response.action || 'default', | ||
}; | ||
}; | ||
return listenToNativeMessage('NATIVE_EVENT', handler); | ||
}; | ||
@@ -616,2 +624,25 @@ var nativeConfirm = function (_a) { | ||
/** | ||
* This method is used by webapp to request the native app to renew current session | ||
* When webapp (running inside a webview) receives a 401 api response from server, uses this | ||
* bridge method to renew the session. | ||
*/ | ||
var renewSession = function () { | ||
return postMessageToNativeApp({ type: 'RENEW_SESSION' }).then(function (_a) { | ||
var accessToken = _a.accessToken; | ||
return accessToken; | ||
}); | ||
}; | ||
/** | ||
* This method is used to listen for session renewals made by native app. Whenever the native app | ||
* renews the session with the api, it should notify webpp with this message. | ||
* This message is initiated by native app. | ||
*/ | ||
var onSessionRenewed = function (handler) { | ||
return listenToNativeMessage('SESSION_RENEWED', function (_a) { | ||
var accessToken = _a.accessToken; | ||
return handler(accessToken); | ||
}); | ||
}; | ||
exports.CD_EVENT_VALUE = CD_EVENT_VALUE; | ||
@@ -636,2 +667,4 @@ exports.CD_NOVUM_UID = CD_NOVUM_UID; | ||
exports.onNativeEvent = onNativeEvent; | ||
exports.onSessionRenewed = onSessionRenewed; | ||
exports.renewSession = renewSession; | ||
exports.reportStatus = reportStatus; | ||
@@ -638,0 +671,0 @@ exports.requestContact = requestContact; |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).webviewBridge={})}(this,function(e){"use strict";var t=1,n=function(){return"webapp-"+t++},r="__tuenti_webview_bridge",o=function(){return!(!window.tuentiWebView||!window.tuentiWebView.postMessage)},i=function(){return!!(window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.tuentiWebView&&window.webkit.messageHandlers.tuentiWebView.postMessage)},a=function(){return o()?function(e){window.tuentiWebView.postMessage(e)}:i()?function(e){window.webkit.messageHandlers.tuentiWebView.postMessage(e)}:null},s=[],u=function(e){s.push(e)},c=function(e){s=s.filter(function(t){return t!==e})},l=function(){return o()||i()},d=function(e,t){var r=e.type,o=e.id,i=void 0===o?n():o,s=e.payload,l=a(),d=JSON.stringify({type:r,id:i,payload:s});return l?(setTimeout(function(){l(d)}),new Promise(function(e,n){var o=!1,a=function(t){t.id!==i||o||(t.type===r?e(t.payload):"ERROR"===t.type?n(t.payload):n({code:500,reason:"bad type: "+t.type+". Expecting "+r}),c(a))};u(a),t&&setTimeout(function(){o=!0,c(a),n({code:408,reason:"request timeout"})},t)})):Promise.reject({code:500,reason:"WebView postMessage not available"})};window[r]=window[r]||{postMessage:function(e){var t;try{t=JSON.parse(e)}catch(t){throw Error("Problem parsing webview message: "+e)}s.forEach(function(e){return e(t)})}};var f=function(e){var t=e.title,n=e.showBackButton,r=e.showReloadButton,o=e.showProfileButton,i=e.backgroundColor;return l()?d({type:"NAVIGATION_BAR",payload:{title:t,showBackButton:n,showReloadButton:r,showProfileButton:o,backgroundColor:i}}):(void 0!==t&&(document.title=t),Promise.resolve())},m=null,p=function(e){return"true"===m.result[e]},v=function(e){return Math.floor(e/1e3)},y=function(){return(y=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};var w,g=["NovumTracker","OBARGTracker"],b=function(e){return g.indexOf(e.get("name"))>=0},T=function(e){var t=e.onAndroid,n=e.onIos,r=e.onWeb;return window.AnalyticsWebInterface?t(window.AnalyticsWebInterface):window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.firebase?n(window.webkit.messageHandlers.firebase):window.ga&&window.ga.loaded?r(window.ga):Promise.resolve()},h={obIds:1,paymentModels:2,serviceWorkerStatus:3,isAdmin:5,hasIpComms:6,af_source:9,af_campaign:10,novum_uid_session:11,user_logged:12,currentSubscriptionId:13,currentSubscriptionType:14,currentPaymentModel:15,webviewBrowserVersion:16};e.CD_EVENT_VALUE=8,e.CD_NOVUM_UID=7,e.CD_WEBAPP_INSTALLED=4,e.attachToEmail=function(e){var t=e.url,n=e.subject,r=e.fileName,o=e.recipient,i=e.body;return d({type:"ATTACH_TO_EMAIL",payload:{url:t,subject:n,fileName:r,recipient:o,body:i}})},e.checkPermissionStatus=function(e,t){return d({type:"OS_PERMISSION_STATUS",payload:{feature:e,params:t}}).then(function(e){return e.granted})},e.createCalendarEvent=function(e){var t=e.beginTime,n=e.endTime,r=e.title;return d({type:"CREATE_CALENDAR_EVENT",payload:{beginTime:v(t),endTime:v(n),title:r}})},e.dismiss=function(e){return d({type:"DISMISS",payload:{onCompletionUrl:e}})},e.fetch=function(e){var t=e.url,n=e.method,r=e.headers,o=e.body;return l()?d({type:"FETCH",payload:{url:t,method:n,headers:r,body:o}}).catch(function(){return{status:500,headers:{},body:"Bridge call failed"}}):Promise.resolve({status:500,headers:{},body:"Bridge not available"})},e.fetchContactsByPhone=function(e){return d({type:"FETCH_CONTACTS_DATA",payload:{phoneNumbers:e}})},e.internalNavigation=function(e){return d({type:"INTERNAL_NAVIGATION",payload:{feature:e}})},e.isABTestingAvailable=function(e){if(m)return Promise.resolve(p(e));var t=new Promise(function(e){setTimeout(function(){e(!1)},500)}),n=d({type:"GET_REMOTE_CONFIG"}).then(function(t){return m=t,p(e)});return Promise.race([t,n])},e.isWebViewBridgeAvailable=l,e.logEvent=function(e){var t=e.category,n=e.action,r=e.label,o=e.value,i=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}(e,["category","action","label","value"]);if(!t||!n)return console.warn('Analytics event should have "category" and "action"',{category:t,action:n}),Promise.resolve();var a=t;r||(r="null_label"),o||(o=0);var s=y({eventCategory:t,eventAction:n,eventLabel:r,eventValue:o},i);return T({onAndroid:function(e){return e.logEvent&&e.logEvent(a,JSON.stringify(s)),Promise.resolve()},onIos:function(e){return e.postMessage({command:"logEvent",name:a,parameters:s}),Promise.resolve()},onWeb:function(e){return new Promise(function(t){e("NovumTracker.send","event",y(y({},s),{hitCallback:t}))})}})},e.logTiming=function(e){var t=e.category,n=void 0===t?"performance_timer":t,r=e.variable,o=e.value,i=e.label;if(!n||!r||!o)return console.warn('Analytics timing should have "category", "variable" and "value"',{category:n,variable:r,value:o}),Promise.resolve();var a={timingCategory:n,timingVar:r,timingValue:o,timingLabel:i},s=n;return T({onAndroid:function(e){return e.logEvent&&e.logEvent(s,JSON.stringify(a)),Promise.resolve()},onIos:function(e){return e.postMessage({command:"logEvent",name:s,parameters:a}),Promise.resolve()},onWeb:function(e){return new Promise(function(t){var n;e("NovumTracker.send",y(((n={hitType:"timing",hitCallback:t}).dimension8=String(o),n),a))})}})},e.nativeAlert=function(e){var t=e.message,n=e.title,r=e.buttonText;return l()?d({type:"ALERT",payload:{title:n,message:t,buttonText:r}}):(window.alert(t),Promise.resolve())},e.nativeConfirm=function(e){var t=e.message,n=e.title,r=e.acceptText,o=e.cancelText;return l()?d({type:"CONFIRM",payload:{message:t,title:n,acceptText:r,cancelText:o}}).then(function(e){return e.result}):Promise.resolve(window.confirm(t))},e.nativeMessage=function(e){var t=e.message,n=e.duration,r=e.buttonText,o=e.type;return l()?d({type:"MESSAGE",payload:{message:t,duration:n,buttonText:r,type:o}}):(window.alert(t),Promise.resolve())},e.notifyPageLoaded=function(){return d({type:"PAGE_LOADED"})},e.onNativeEvent=function(e){var t=function(t){if("NATIVE_EVENT"===t.type){var n=e({event:t.payload.event}),r=a();r&&r(JSON.stringify({type:"NATIVE_EVENT",id:t.id,payload:{action:n.action||"default"}}))}};return u(t),function(){c(t)}},e.reportStatus=function(e){var t=e.feature,n=e.status,r=e.reason;return d({type:"STATUS_REPORT",payload:{feature:t,status:n,reason:r}})},e.requestContact=function(e){var t=(void 0===e?{}:e).filter;return d({type:"GET_CONTACT_DATA",payload:{filter:void 0===t?"phone":t}})},e.requestDeviceImei=function(){return d({type:"IMEI"},200).then(function(e){return e.imei}).catch(function(){return null})},e.requestSimIcc=function(){return d({type:"SIM_ICC"},200).then(function(e){return e.icc}).catch(function(){return null})},e.requestSimImsi=function(){return d({type:"IMSI"},200).then(function(e){return e.imsi}).catch(function(){return null})},e.requestVibration=function(e){return d({type:"VIBRATION",payload:{type:e}})},e.setScreenName=function(e,t){return e?T({onAndroid:function(t){return t.setScreenName&&t.setScreenName(e),Promise.resolve()},onIos:function(t){return t.postMessage({command:"setScreenName",name:e}),Promise.resolve()},onWeb:function(n){return new Promise(function(r){var o=e.startsWith("/")?e:"/"+e;o!==w?(w=o,n(function(){n.getAll().filter(b).forEach(function(e){e.set("page",o),e.send("pageView",y(y({},t),{hitCallback:r}))})})):r()})}}):(console.warn("Missing analytics screenName"),Promise.resolve())},e.setUserProperty=function(e,t){return e&&t?(t=String(t),T({onAndroid:function(n){return n.setUserProperty&&n.setUserProperty(e,t),Promise.resolve()},onIos:function(n){return n.postMessage({command:"setUserProperty",name:e,value:t}),Promise.resolve()},onWeb:function(n){var r,o=h[e];return o?(n("NovumTracker.set",((r={})["dimension"+o]=String(t),r)),Promise.resolve()):(console.warn("No custom dimension defined for user property",e),Promise.resolve())}})):(console.warn("Trying to set analytics user property without name or value",e,t),Promise.resolve())},e.setWebViewTitle=function(e){return l()?f({title:e}):(document.title=e,Promise.resolve())},e.share=function(e){return d({type:"SHARE",payload:e})},e.updateNavigationBar=f,Object.defineProperty(e,"__esModule",{value:!0})}); | ||
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).webviewBridge={})}(this,function(e){"use strict";var n=1,t=function(){return"webapp-"+n++},r="__tuenti_webview_bridge",o=function(){return!(!window.tuentiWebView||!window.tuentiWebView.postMessage)},i=function(){return!!(window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.tuentiWebView&&window.webkit.messageHandlers.tuentiWebView.postMessage)},a=function(){return o()?function(e){window.tuentiWebView.postMessage(e)}:i()?function(e){window.webkit.messageHandlers.tuentiWebView.postMessage(e)}:null},s=[],u=function(e){s.push(e)},c=function(e){s=s.filter(function(n){return n!==e})},l=function(){return o()||i()},f=function(e,n){var r=e.type,o=e.id,i=void 0===o?t():o,s=e.payload,l=a(),f=JSON.stringify({type:r,id:i,payload:s});return l?(setTimeout(function(){l(f)}),new Promise(function(e,t){var o=!1,a=function(n){n.id!==i||o||(n.type===r?e(n.payload):"ERROR"===n.type?t(n.payload):t({code:500,reason:"bad type: "+n.type+". Expecting "+r}),c(a))};u(a),n&&setTimeout(function(){o=!0,c(a),t({code:408,reason:"request timeout"})},n)})):Promise.reject({code:500,reason:"WebView postMessage not available"})};window[r]=window[r]||{postMessage:function(e){var n;try{n=JSON.parse(e)}catch(n){throw Error("Problem parsing webview message: "+e)}s.forEach(function(e){return e(n)})}};var d=function(e,n){var t=function(t){t.type===e&&Promise.resolve(n(t.payload)).then(function(e){var n=a();n&&n(JSON.stringify({type:t.type,id:t.id,payload:e}))})};return u(t),function(){c(t)}},m=function(e){var n=e.title,t=e.showBackButton,r=e.showReloadButton,o=e.showProfileButton,i=e.backgroundColor;return l()?f({type:"NAVIGATION_BAR",payload:{title:n,showBackButton:t,showReloadButton:r,showProfileButton:o,backgroundColor:i}}):(void 0!==n&&(document.title=n),Promise.resolve())},p=null,v=function(e){return"true"===p.result[e]},y=function(e){return Math.floor(e/1e3)},w=function(){return(w=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e}).apply(this,arguments)};var g,b=["NovumTracker","OBARGTracker"],T=function(e){return b.indexOf(e.get("name"))>=0},h=function(e){var n=e.onAndroid,t=e.onIos,r=e.onWeb;return window.AnalyticsWebInterface?n(window.AnalyticsWebInterface):window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.firebase?t(window.webkit.messageHandlers.firebase):window.ga&&window.ga.loaded?r(window.ga):Promise.resolve()},E={obIds:1,paymentModels:2,serviceWorkerStatus:3,isAdmin:5,hasIpComms:6,af_source:9,af_campaign:10,novum_uid_session:11,user_logged:12,currentSubscriptionId:13,currentSubscriptionType:14,currentPaymentModel:15,webviewBrowserVersion:16};e.CD_EVENT_VALUE=8,e.CD_NOVUM_UID=7,e.CD_WEBAPP_INSTALLED=4,e.attachToEmail=function(e){var n=e.url,t=e.subject,r=e.fileName,o=e.recipient,i=e.body;return f({type:"ATTACH_TO_EMAIL",payload:{url:n,subject:t,fileName:r,recipient:o,body:i}})},e.checkPermissionStatus=function(e,n){return f({type:"OS_PERMISSION_STATUS",payload:{feature:e,params:n}}).then(function(e){return e.granted})},e.createCalendarEvent=function(e){var n=e.beginTime,t=e.endTime,r=e.title;return f({type:"CREATE_CALENDAR_EVENT",payload:{beginTime:y(n),endTime:y(t),title:r}})},e.dismiss=function(e){return f({type:"DISMISS",payload:{onCompletionUrl:e}})},e.fetch=function(e){var n=e.url,t=e.method,r=e.headers,o=e.body;return l()?f({type:"FETCH",payload:{url:n,method:t,headers:r,body:o}}).catch(function(){return{status:500,headers:{},body:"Bridge call failed"}}):Promise.resolve({status:500,headers:{},body:"Bridge not available"})},e.fetchContactsByPhone=function(e){return f({type:"FETCH_CONTACTS_DATA",payload:{phoneNumbers:e}})},e.internalNavigation=function(e){return f({type:"INTERNAL_NAVIGATION",payload:{feature:e}})},e.isABTestingAvailable=function(e){if(p)return Promise.resolve(v(e));var n=new Promise(function(e){setTimeout(function(){e(!1)},500)}),t=f({type:"GET_REMOTE_CONFIG"}).then(function(n){return p=n,v(e)});return Promise.race([n,t])},e.isWebViewBridgeAvailable=l,e.logEvent=function(e){var n=e.category,t=e.action,r=e.label,o=e.value,i=function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)n.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(t[r[o]]=e[r[o]])}return t}(e,["category","action","label","value"]);if(!n||!t)return console.warn('Analytics event should have "category" and "action"',{category:n,action:t}),Promise.resolve();var a=n;r||(r="null_label"),o||(o=0);var s=w({eventCategory:n,eventAction:t,eventLabel:r,eventValue:o},i);return h({onAndroid:function(e){return e.logEvent&&e.logEvent(a,JSON.stringify(s)),Promise.resolve()},onIos:function(e){return e.postMessage({command:"logEvent",name:a,parameters:s}),Promise.resolve()},onWeb:function(e){return new Promise(function(n){e("NovumTracker.send","event",w(w({},s),{hitCallback:n}))})}})},e.logTiming=function(e){var n=e.category,t=void 0===n?"performance_timer":n,r=e.variable,o=e.value,i=e.label;if(!t||!r||!o)return console.warn('Analytics timing should have "category", "variable" and "value"',{category:t,variable:r,value:o}),Promise.resolve();var a={timingCategory:t,timingVar:r,timingValue:o,timingLabel:i},s=t;return h({onAndroid:function(e){return e.logEvent&&e.logEvent(s,JSON.stringify(a)),Promise.resolve()},onIos:function(e){return e.postMessage({command:"logEvent",name:s,parameters:a}),Promise.resolve()},onWeb:function(e){return new Promise(function(n){var t;e("NovumTracker.send",w(((t={hitType:"timing",hitCallback:n}).dimension8=String(o),t),a))})}})},e.nativeAlert=function(e){var n=e.message,t=e.title,r=e.buttonText;return l()?f({type:"ALERT",payload:{title:t,message:n,buttonText:r}}):(window.alert(n),Promise.resolve())},e.nativeConfirm=function(e){var n=e.message,t=e.title,r=e.acceptText,o=e.cancelText;return l()?f({type:"CONFIRM",payload:{message:n,title:t,acceptText:r,cancelText:o}}).then(function(e){return e.result}):Promise.resolve(window.confirm(n))},e.nativeMessage=function(e){var n=e.message,t=e.duration,r=e.buttonText,o=e.type;return l()?f({type:"MESSAGE",payload:{message:n,duration:t,buttonText:r,type:o}}):(window.alert(n),Promise.resolve())},e.notifyPageLoaded=function(){return f({type:"PAGE_LOADED"})},e.onNativeEvent=function(e){return d("NATIVE_EVENT",function(n){return{action:e({event:n.event}).action||"default"}})},e.onSessionRenewed=function(e){return d("SESSION_RENEWED",function(n){var t=n.accessToken;return e(t)})},e.renewSession=function(){return f({type:"RENEW_SESSION"}).then(function(e){return e.accessToken})},e.reportStatus=function(e){var n=e.feature,t=e.status,r=e.reason;return f({type:"STATUS_REPORT",payload:{feature:n,status:t,reason:r}})},e.requestContact=function(e){var n=(void 0===e?{}:e).filter;return f({type:"GET_CONTACT_DATA",payload:{filter:void 0===n?"phone":n}})},e.requestDeviceImei=function(){return f({type:"IMEI"},200).then(function(e){return e.imei}).catch(function(){return null})},e.requestSimIcc=function(){return f({type:"SIM_ICC"},200).then(function(e){return e.icc}).catch(function(){return null})},e.requestSimImsi=function(){return f({type:"IMSI"},200).then(function(e){return e.imsi}).catch(function(){return null})},e.requestVibration=function(e){return f({type:"VIBRATION",payload:{type:e}})},e.setScreenName=function(e,n){return e?h({onAndroid:function(n){return n.setScreenName&&n.setScreenName(e),Promise.resolve()},onIos:function(n){return n.postMessage({command:"setScreenName",name:e}),Promise.resolve()},onWeb:function(t){return new Promise(function(r){var o=e.startsWith("/")?e:"/"+e;o!==g?(g=o,t(function(){t.getAll().filter(T).forEach(function(e){e.set("page",o),e.send("pageView",w(w({},n),{hitCallback:r}))})})):r()})}}):(console.warn("Missing analytics screenName"),Promise.resolve())},e.setUserProperty=function(e,n){return e&&n?(n=String(n),h({onAndroid:function(t){return t.setUserProperty&&t.setUserProperty(e,n),Promise.resolve()},onIos:function(t){return t.postMessage({command:"setUserProperty",name:e,value:n}),Promise.resolve()},onWeb:function(t){var r,o=E[e];return o?(t("NovumTracker.set",((r={})["dimension"+o]=String(n),r)),Promise.resolve()):(console.warn("No custom dimension defined for user property",e),Promise.resolve())}})):(console.warn("Trying to set analytics user property without name or value",e,n),Promise.resolve())},e.setWebViewTitle=function(e){return l()?m({title:e}):(document.title=e,Promise.resolve())},e.share=function(e){return f({type:"SHARE",payload:e})},e.updateNavigationBar=m,Object.defineProperty(e,"__esModule",{value:!0})}); |
{ | ||
"name": "@tef-novum/webview-bridge", | ||
"version": "2.8.0", | ||
"version": "2.9.0", | ||
"description": "JavaScript library to access to native functionality. Requires a webview with a postMessage bridge.", | ||
@@ -5,0 +5,0 @@ "main": "./dist/webview-bridge-cjs.js", |
@@ -252,3 +252,3 @@ <p align="center"> | ||
- `showProfileButton`: shows or hides NavigationBar Profile button (which | ||
navigates to user profile) | ||
navigates to user profile). Only available in native app versions >= 11.7 | ||
- `backgroundColor`: change NavigationBar background color, use a hex color | ||
@@ -255,0 +255,0 @@ string (for example: `'#FF128A'`) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
2141631
3635
5