adframe
Version:
Iframe control system designed for iframes that contain ads
1 lines • 10.1 kB
JavaScript
module.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";n.r(t);var r="content/html",o="content/url",i="security/custom",a="security/none",c="security/sandbox/nonfriendly",s="security/sandbox/sameorigin",u="write/blobURL",d="write/documentWrite",f="write/srcdoc",l=["appendChild","createElement","insertBefore","write"];function p(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=!1,i=!1,a=!1;if(r)var c=t.onMessage((function(e){"verify"===e.type&&(a=!0,s(),c())}));var s=function(){r?a?setTimeout(n,0):i||(i=!0,t.sendMessage({type:"request-verification"})):o||(o=!0,setTimeout(n,0))};e.onload=function(){!0,s()},e.onreadystatechange=function(){"complete"!==this.readyState&&"interactive"!==this.readyState||(!0,s())}}var v=["allow-forms","allow-popups","allow-popups-to-escape-sandbox","allow-scripts"];function m(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"text/html",r=new Blob([t],{type:n}),o=(URL||webkitURL).createObjectURL(r);e.setAttribute("src",o)}var b='<script type="text/javascript" data-adframe="comms">\n(function() {\n var frameID = "[FRAME_ID]",\n messageListeners = [],\n messagePrefix = "AdFrame|" + encodeURIComponent(frameID) + "|";\n window.AdFrame = window.AdFrame || {};\n window.AdFrame.onMessage = function onMessage(callback) {\n messageListeners.push(callback);\n return function remove() {\n var idx = messageListeners.indexOf(callback);\n if (idx >= 0) {\n messageListeners.splice(idx, 1);\n }\n };\n };\n var sendMessage = window.AdFrame.sendMessage = function sendMessage(payload) {\n window.parent.postMessage(messagePrefix + JSON.stringify(payload));\n };\n window.addEventListener("message", function handleMessage(event) {\n if (event.data && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) {\n var msg = JSON.parse(event.data.replace(messagePrefix, ""));\n messageListeners.forEach(function(cb) {\n try {\n cb(msg);\n } catch (err) {}\n });\n }\n });\n sendMessage({ type: "" });\n})();\n<\/script>\n',g='<script type="text/javascript" data-adframe="restorer">\n(function() {\n var DOCUMENT_BUILTINS = ["appendChild", "createElement", "insertBefore", "write"];\n if (!Object.getPrototypeOf || typeof Object.getPrototypeOf !== "function") {\n return;\n }\n var doc = document,\n docProto = Object.getPrototypeOf(doc);\n DOCUMENT_BUILTINS.forEach(function(builtIn) {\n if (docProto[builtIn] !== doc[builtIn]) {\n doc[builtIn] = docProto[builtIn];\n }\n try {\n Object.defineProperty(doc, builtIn, {\n configurable: false,\n enumerable: false,\n value: docProto[builtIn],\n writable: false\n });\n } catch (err) {}\n });\n})();\n<\/script>\n',y='<script type="text/javascript" data-adframe="verifier">\n(function() {\n window.AdFrame.onMessage(function(msg) {\n if (msg.type === "request-verification") {\n window.AdFrame.sendMessage({\n type: "verify"\n });\n }\n });\n})();\n<\/script>\n';function w(e,t){return h(e,b.replace("[FRAME_ID]",t),!0)}function h(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=n?/(<body[^>]*>)/im:/(<\/body>)/i;return r.test(e)?n?e.replace(r,"$1".concat(t)):e.replace(r,"".concat(t,"$1")):n?"".concat(t).concat(e):"".concat(e).concat(t)}function O(e){return h(e,y)}function E(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window,n=[],r=[],o="AdFrame|"+encodeURIComponent(e)+"|",i=null,a=function(e){i?i.postMessage(o+JSON.stringify(e)):r.push(e)};return t.addEventListener("message",(function(e){if(e.data&&"string"==typeof e.data&&0===e.data.indexOf(o)){i=i||e.source,r.length>0&&(r.forEach((function(e){return a(e)})),r.splice(0,1/0));var t=JSON.parse(e.data.replace(o,""));n.forEach((function(e){try{e(t)}catch(e){}}))}})),{onMessage:function(e){return n.push(e),function(){var t=n.indexOf(e);t>=0&&n.splice(t,1)}},sendMessage:a}}var I="securitypolicyviolation",M=function(){},x=null,A=null;function _(){return!0!==A&&"function"==typeof Blob&&("function"==typeof URL||"function"==typeof webkitURL)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:M,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;if(null===A){var n=function n(r){var o=r.blockedURI,i=r.violatedDirective;/^blob/.test(o)&&"frame-src"===i&&(A=!0,t.removeEventListener(I,n),e(!0))};t.addEventListener(I,n);var r=t.createElement("iframe"),o="csp_".concat(Date.now(),"_").concat(Math.floor(9e6*Math.random()));p(r,E(o),(function(){null===A&&(A=!1,t.removeEventListener(I,n),e(!1))}),!0),r.setAttribute("style","display:none"),r.setAttribute("data-adframe","csp-test");var i=O("\x3c!-- Verify CSP --\x3e");m(r,i=w(i,o)),t.body.appendChild(r)}else setTimeout((function(){return e(A)}),0)}function R(){return null===x&&(x=!!("srcdoc"in document.createElement("iframe"))),x}var L=0,T=2147483647;function j(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=e[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var C=[u,f,d],P=function(){};function U(e){var t=e.content,n=e.contentType,b=void 0===n?r:n,y=e.id,I=void 0===y?"adframe_".concat("".concat(++L,"_").concat(Math.floor(Math.random()*T))):y,M=e.injections,x=void 0===M?[]:M,A=e.onBeforeInsert,S=void 0===A?N:A,U=e.onLoadCallback,B=void 0===U?P:U,F=e.parent,k=e.position,W=void 0===k?"last":k,Y=e.restoreIframeBuiltIns,J=void 0===Y||Y,q=e.restorePageBuiltIns,X=void 0!==q&&q,$=e.sandboxFlags,G=void 0===$?[]:$,H=e.security,V=void 0===H?a:H,z=e.verifyLoad,K=void 0!==z&&z,Q=e.win,Z=void 0===Q?window:Q,ee=e.writeMethods,te=void 0===ee?[].concat(C):ee,ne=Z.document,re=t;X&&function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;if(Object.getPrototypeOf&&"function"==typeof Object.getPrototypeOf){var t=Object.getPrototypeOf(e);l.forEach((function(n){t[n]!==e[n]&&(e[n]=t[n]);try{Object.defineProperty(e,n,{configurable:!1,enumerable:!1,value:t[n],writable:!1})}catch(e){}}))}}(ne);var oe=ne.createElement("iframe");oe.setAttribute("data-adframe-id",I);var ie=E(I),ae=ie.onMessage,ce=ie.sendMessage,se=K&&b===r,ue=function(){return p(oe,ie,B,se)},de=te,fe=function(e,t){var n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(t===a)return null;if(t===i)n=r;else if(t===s)n=[].concat(v,["allow-same-origin"]);else{if(t!==c)throw new Error("Unrecognised security setting: ".concat(t));n=v}return e.setAttribute("sandbox",n.join(" ")),n}(oe,V,G);fe&&-1===fe.indexOf("allow-same-origin")&&(de=D(de,d)),_()||(de=D(de,u)),R()||(de=D(de,f));var le=j(de,1)[0];if(b===o)ue(),oe.setAttribute("src",re);else{if(b!==r)throw new Error("Invalid iframe content type: ".concat(b));if(x.forEach((function(e){re=h(re,e.content,"boolean"==typeof e.prepend&&e.prepend)})),J&&(re=h(re,g,!0)),se&&(re=O(re)),re=w(re,I),fe&&-1===fe.indexOf("allow-same-origin")&&oe.setAttribute("src","about:blank"),!le)throw new Error("No available write methods");le===f?(ue(),function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:window).btoa(encodeURIComponent(t));e.setAttribute("srcdoc","<script>document.open(); document.write(decodeURIComponent(atob('".concat(n,"'))); document.close();<\/script>"))}(oe,re,Z)):le===u&&(ue(),m(oe,re))}if(S(oe),"first"===W)F.insertBefore(oe,F.firstChild);else{if("last"!==W)throw new Error("Invalid insertion position: ".concat(W));F.appendChild(oe)}return le===d&&(ue(),function(e,t){var n=e.contentWindow.document;n.open(),n.write(t),n.close()}(oe,re)),oe.onMessage=ae,oe.sendMessage=ce,oe}function N(e){e.setAttribute("frameborder","0"),e.setAttribute("scrolling","no"),e.setAttribute("align","top"),e.setAttribute("marginwidth","0"),e.setAttribute("marginheight","0"),e.style.border="none"}function D(e,t){return e.filter((function(e){return e!==t}))}n.d(t,"createAdFrame",(function(){return U})),n.d(t,"prepareIframe",(function(){return N})),n.d(t,"blobURLSupported",(function(){return _})),n.d(t,"detectCSPBlocking",(function(){return S})),n.d(t,"srcDocSupported",(function(){return R})),n.d(t,"CONTENT_HTML",(function(){return r})),n.d(t,"CONTENT_URL",(function(){return o})),n.d(t,"SECURITY_CUSTOM",(function(){return i})),n.d(t,"SECURITY_NONE",(function(){return a})),n.d(t,"SECURITY_SANDBOX_NONFRIENDLY",(function(){return c})),n.d(t,"SECURITY_SANDBOX_SAMEORIGIN",(function(){return s})),n.d(t,"WRITE_MODE_BLOB_URL",(function(){return u})),n.d(t,"WRITE_MODE_DOC_WRITE",(function(){return d})),n.d(t,"WRITE_MODE_SRCDOC",(function(){return f}))}]);