!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.WKPostMessenger=t()}(this,function(){"use strict";var e=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t=function(){function e(e,t){for(var n=0;n1?n-1:0),s=1;s0&&void 0!==arguments[0]?arguments[0]:{},o=i.handleMessage,a=i.scriptMessageHandler,c=void 0===a?"wkPostMessage":a,u=i.handlerGlobal,f=void 0===u?"wkPostMessengerHandleMessage":u,d=i.callbackGlobal,l=void 0===d?"wkPostMessengerCallback":d,_=i.handshakeTimeout,p=void 0===_?r:_,v=i.messageTimeout,m=void 0===v?r:v,g=i.idGenerator,y=void 0===g?h():g,w=i.autoHandshake,b=void 0===w||w;e(this,n),this._connecting=!1,this._connected=!1,this._emitter=s(),this._hm=f,this._cb=l,this._handshakeTimeout=p,this._messageTimeout=m,this._idGen=y,this.handleMessage=o;try{this.parent=window.webkit.messageHandlers[c]}catch(e){throw new Error("Can't add message handler "+c)}window[f]=function(e,n,i){var s=t._handleMessage(n,i);s&&"function"==typeof s.then?s.then(function(n){return t._sendMessageCallback(e,n)}):t._sendMessageCallback(e,s)},window[l]=function(e,n){t._emitter.trigger(e,n)},b&&this.sendHandshake()}return t(n,[{key:"_handleMessage",value:function(e,t){return"function"==typeof this.handleMessage?this.handleMessage(e,t):null}},{key:"_sendMessage",value:function(e,t,n){var i=this;return new Promise(function(s,o){var r=""+i._idGen.next().value,a={type:u,callback:i._cb,id:r,action:e,data:t},c=void 0,h=function(e){clearTimeout(c),s(e)};n>0&&(c=setTimeout(function(){i._emitter.off(r,h),o("[WKPostMessenger] message acknowledgment timeout")},n)),i._emitter.on(r,h),i.parent.postMessage(a)})}},{key:"_sendMessageCallback",value:function(e,t){var n={type:u,callback:"",action:c,id:e,data:t};this.parent.postMessage(n)}},{key:"sendHandshake",value:function(){var e=this;if(this._connected)throw new Error("[WKPostMessenger] sendHandshake was already completed!!");return this._connecting||(this._connecting=!0,this._whenReady=this._sendMessage(a,this._hm,this._handshakeTimeout).then(function(){e._connected=!0}).catch(function(){return e._connecting=!1,Promise.reject("[WKPostMessenger] handshake acknowledgment timeout")})),this._whenReady}},{key:"sendMessage",value:function(e,t){var n=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._messageTimeout;return this._whenReady||this.sendHandshake(),this._whenReady.then(function(){return n._sendMessage(e,t,i)})}}]),n}();return f.VERSION=o,f});