@basis-theory/3ds-web
Advanced tools
Comparing version 1.5.0 to 1.6.0
@@ -1,1 +0,1 @@ | ||
!function(){var e,t,r,n,o,i,a,s,c,l,u,d,f={FRAME_CONTAINER_ID:"methodFrameContainer",IFRAME_NAME:"methodIframe",FORM_NAME:"threeDSMethodForm",INPUT_NAME:"threeDSMethodData"},p={FRAME_CONTAINER_ID:"challengeFrameContainer",IFRAME_NAME:"challengeIframe",FORM_NAME:"threeDSCReqForm",INPUT_NAME:"threeDSSessionData"};function h(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){r(e);return}s.done?t(c):Promise.resolve(c).then(n,o)}function m(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){h(i,n,o,a,s,"next",e)}function s(e){h(i,n,o,a,s,"throw",e)}a(void 0)})}}function v(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(c){return function(s){if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function b(e,t){if(e){if("string"==typeof e)return E(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return E(e,t)}}"function"==typeof SuppressedError&&SuppressedError;var g=(e=m(function(e,t,r){var n,o=arguments;return y(this,function(i){switch(i.label){case 0:var a,s;a=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){v(e,t,r[t])})}return e}({application:"3ds-web",ddsource:"3ds-web",service:"3ds-web"},o.length>3&&void 0!==o[3]?o[3]:{}),s=s={level:t,message:"error"===t&&r?"".concat(e,": ").concat(r.message):e},Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(s)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(s)).forEach(function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(s,e))}),n=a,i.label=1;case 1:return i.trys.push([1,3,,4]),[4,fetch("https://http-intake.logs.datadoghq.com/v1/input/".concat("pubb96b84a13912504f4354f2d794ea4fab"),{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})];case 2:if(!i.sent().ok)throw Error("Network response was not ok");return[3,4];case 3:return i.sent(),[3,4];case 4:return[2]}})}),t=function(t,r,n){return e.apply(this,arguments)},{log:{error:function(e,r,n){return t(e,"error",r,n)},info:function(e,r){return t(e,"info",void 0,r)},warn:function(e,r){return t(e,"warn",void 0,r)}}});(r=u||(u={})).ONE="01",r.TWO="02",r.THREE="03",r.FOUR="04",r.FIVE="05";var w=function(e){return null==e?"":JSON.stringify(e)},I=function(){var e,t=[1,4,8,15,16,24,32,48],r=window.screen.colorDepth,n=t.filter(function(e){return e<=r});return 0===n.length?t[0]:(e=Math).max.apply(e,function(e){if(Array.isArray(e))return E(e)}(n)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||b(n)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())},T=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"05",r=(v(e={},"01",["250px","400px"]),v(e,"02",["390px","400px"]),v(e,"03",["500px","600px"]),v(e,"04",["600px","400px"]),v(e,"05",["100%","100%"]),e)[t];if(r)return r;var n=Error("Window size ".concat(t," is not supported"));throw g.log.error("Unsupported window size",n),n},M=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"0",o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"0",i=arguments.length>5?arguments[5]:void 0;if(!(!e||e instanceof HTMLElement)||!t||!r){var a="Unable to create iframe. Container must be a HTML element ".concat(JSON.stringify(e)," ").concat(t," ").concat(r);throw g.log.error("Unable to create iframe",Error()),Error(a)}var s=document.createElement("iframe");return s.name=t,s.width=n,s.height=o,s.setAttribute("id",r),s.setAttribute("frameborder","0"),s.setAttribute("border","0"),i&&"function"==typeof i&&s.addEventListener("onload",i),e.appendChild(s),s},A=function(e,t,r){var n=document.createElement("form");return n.name=e,n.action=t,n.method="POST",n.target=r,n},O=function(e,t){var r=document.createElement("input");return r.name=e,r.value=t,r},S=function(e,t){var r=document.createElement(e);return r.appendChild(t),r},R=function(e){var t,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t=document.getElementById(e)){t.innerHTML="",r&&t.setAttribute("style","display:none;");return}(t=document.createElement("div")).id=e,r&&t.setAttribute("style","display:none;"),document.body.appendChild(t)},N=function(e){return null==e?void 0:e.map(function(e){var t;return null===(t=document.getElementById(e))||void 0===t?void 0:t.remove()})},_=function(e,t){var r=function(e){return"string"==typeof e?t(e):"object"!=typeof e||null===e?e:Array.isArray(e)?e.map(r):Object.fromEntries(Object.entries(e).map(function(e){var n=function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,s=!1;try{for(o=o.call(e);!(a=(r=o.next()).done)&&(i.push(r.value),2!==i.length);a=!0);}catch(e){s=!0,n=e}finally{try{a||null==o.return||o.return()}finally{if(s)throw n}}return i}}(e,2)||b(e,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),o=n[0],i=n[1];return[t(o),"object"==typeof i||Array.isArray(i)?r(i):i]}))};return r(e)},D=function(e){return _(e,function(e){return e.replace(/_./g,function(e){return e[1].toUpperCase()})})},C=function(e){return btoa(JSON.stringify(e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")},j={client:(n=m(function(e,t,r){var n;return y(this,function(a){switch(a.label){case 0:if(!o)throw Error("Missing api key");return i&&g.log.info("Using custom api base url in 3DS SDK ".concat(i)),[4,fetch("".concat(null!=i?i:"https://api.basistheory.com","/3ds").concat(t),{method:e,body:JSON.stringify(r),headers:(v(n={},"BT-API-KEY",o),v(n,"Content-Type","application/json"),n)})];case 1:return[2,a.sent()]}})}),function(e,t,r){return n.apply(this,arguments)}),init:function(e,t){o=e,i=t}};(a=d||(d={})).METHOD="method",a.CHALLENGE="challenge",a.METHOD_TIME_OUT="methodTimeout",a.START_METHOD_TIME_OUT="startMethodTimeout",a.ERROR="error";var U=function(e){return window.postMessage(e,"*")},F=function(e){return"object"==typeof e&&null!==e&&"isCompleted"in e&&"boolean"==typeof e.isCompleted&&"id"in e&&"string"==typeof e.id&&"type"in e&&Object.values(d).includes(e.type)},k=function(e){var t,r;return null===(t=(v(r={},d.CHALLENGE,p.IFRAME_NAME),v(r,d.METHOD,f.IFRAME_NAME),v(r,d.METHOD_TIME_OUT,f.IFRAME_NAME),v(r,d.ERROR,"".concat(f.IFRAME_NAME,",").concat(p.IFRAME_NAME)),v(r,d.START_METHOD_TIME_OUT,""),r)[e])||void 0===t?void 0:t.split(",")},P=function(e){var t;return new Promise(function(r,n){var o=function(i){if(F(i.data)&&(null===(s=i.data)||void 0===s?void 0:s.type)===d.START_METHOD_TIME_OUT)t=setTimeout(function(){U({id:i.data.id,type:d.METHOD_TIME_OUT,isCompleted:!1})},1e4);else if(F(i.data)&&i.data.type!==d.ERROR&&i.data.type!==d.CHALLENGE){window.removeEventListener("message",o);var a,s,c,l={id:i.data.id,cardBrand:e.cardBrand};g.log.info("".concat(i.data.type," notification received for session: ").concat(l.id)),r(l),N(k(null===(c=i.data)||void 0===c?void 0:c.type)),clearTimeout(t)}else i.isTrusted&&(n("Something happened during session creation, please try again."),N(k(null===(a=i.data)||void 0===a?void 0:a.type)),clearTimeout(t))};window.addEventListener("message",o)})},H={},L={"The card was not supported by any card schemes":"3DS is not supported for the provided card"},x=function(e){var t=!0,r=!1,n=void 0;if("errors"in e&&void 0!==e.errors&&"object"==typeof e.errors&&null!==e.errors)try{for(var o,i=Object.keys(e.errors)[Symbol.iterator]();!(t=(o=i.next()).done);t=!0){var a=o.value;if(L[a])throw Error(L[a])}}catch(e){r=!0,n=e}finally{try{t||null==i.return||i.return()}finally{if(r)throw n}}else if(e.title&&H[e.title])throw Error(H[e.title]);throw Error(e.title||"An unknown error occurred")},q=function(e,t,r){var n=C({threeDSServerTransID:t,threeDSMethodNotificationURL:"".concat(r,"?mode=redirect")}),o=window.open("","threeDSMethodForm");if(!o){console.error("Popup blocked or unable to open the window.");return}var i=A(f.FORM_NAME,e,"threeDSMethodForm");i.appendChild(O(f.INPUT_NAME,n)),document.body.appendChild(i),i.submit(),document.body.removeChild(i);var a=window.setInterval(function(){o.closed&&(clearInterval(a),U({isCompleted:!0,id:t,type:d.METHOD}))},500)},B=function(e,t,r){var n=C({threeDSServerTransID:t,threeDSMethodNotificationURL:r}),o=M(document.getElementById(f.FRAME_CONTAINER_ID),f.IFRAME_NAME,f.IFRAME_NAME,"0","0"),i=A(f.FORM_NAME,e,o.name);i.appendChild(O(f.INPUT_NAME,n)),o.appendChild(S("html",S("body",i))),i.submit()},z=(s=m(function(e){var t,r,n,o,i,a,s,c,l,u,f,p,h,m,E,b,T;return y(this,function(y){switch(y.label){case 0:if(t=e.tokenId,r=e.tokenIntentId,n=e.pan,i=void 0!==(o=e.skipMethodRequest)&&o,s=void 0===(a=e.methodRequestMode)?"iframe":a,0===(c=[n,t,r].filter(function(e){return void 0!==e})).length)throw Error("One of pan, tokenId, or tokenIntentId is required.");if(c.length>1)throw Error("Only one of pan, tokenId, or tokenIntentId should be provided.");return l=n?"pan":t?"tokenId":"tokenIntentId",u=n||t||r,f={browserColorDepth:w(I()),browserJavascriptEnabled:!0,browserJavaEnabled:window.navigator.javaEnabled(),browserLanguage:window.navigator.language,browserScreenHeight:w(window.screen.height),browserScreenWidth:w(window.screen.width),browserTZ:w(new Date().getTimezoneOffset()),browserUserAgent:window.navigator.userAgent},[4,j.client("POST","/sessions",_((v(p={},l,u),v(p,"device","browser"),v(p,"deviceInfo",f),p),function(e){return e.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase()}))];case 1:if((h=y.sent()).ok)return[3,6];y.label=2;case 2:return y.trys.push([2,4,,5]),[4,h.json()];case 3:return m=y.sent(),[3,5];case 4:throw y.sent(),E="Failed to parse error response. HTTP Status: ".concat(h.status),g.log.error(E),Error(E);case 5:var M;if("object"==typeof(M=m)&&null!==M&&("title"in M||"status"in M||"detail"in M))x(m);else throw b="An unknown error occurred while creating session. Status: ".concat(h.status,"."),g.log.error("".concat(b," Response: ").concat(JSON.stringify(m,null,2))),Error(b);y.label=6;case 6:return[4,h.json()];case 7:return T=D.apply(void 0,[y.sent()]),g.log.info("3DS session response received with ID ".concat(T.id)),T.methodUrl&&!i&&(U({isCompleted:!1,id:T.id,type:d.START_METHOD_TIME_OUT}),"redirect"===s?q(T.methodUrl,T.id,T.methodNotificationUrl):B(T.methodUrl,T.id,T.methodNotificationUrl)),[2,T]}})}),function(e){return s.apply(this,arguments)}),J=(c=m(function(e){var t,r,n,o,i,a,s,c;return y(this,function(l){switch(l.label){case 0:return t=e.tokenId,r=e.tokenIntentId,n=e.pan,i=void 0!==(o=e.skipMethodRequest)&&o,s=void 0===(a=e.methodRequestMode)?"iframe":a,[4,z({tokenId:t,tokenIntentId:r,pan:n,skipMethodRequest:i,methodRequestMode:s}).catch(function(e){return Promise.reject(e.message)})];case 1:if(!(c=l.sent()).methodUrl||i)return[2,{id:c.id,cardBrand:c.cardBrand}];return[4,P(c)];case 2:return[2,l.sent()]}})}),function(e){return c.apply(this,arguments)}),V=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6e4;return new Promise(function(r,n){var o=function(t){if(F(t.data)&&t.data.type===d.CHALLENGE){clearTimeout(e),window.removeEventListener("message",o);var n={id:t.data.id};g.log.info("".concat(t.data.type," notification received for session: ").concat(n.id)),r(n),N([p.IFRAME_NAME])}else t.isTrusted};window.addEventListener("message",o),e=setTimeout(function(){window.removeEventListener("message",o),n("Timed out waiting for a challenge response. Please try again."),N([p.IFRAME_NAME])},t)})},W=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=document.getElementById(p.FRAME_CONTAINER_ID),o=T(t.challengeWindowSize),i=C(t),a=C(r),s=p.IFRAME_NAME,c=document.createElement("html"),l=document.createElement("body"),u=M(n,s,s,o[0],o[1]),d=A(p.FORM_NAME,e,u.name),f=O("creq",i),h=O(p.INPUT_NAME,a);d.appendChild(f),d.appendChild(h),l.appendChild(d),c.appendChild(l),u.appendChild(c),d.submit()},G=function(e){var t,r,n,o,i,a=e.sessionId,s=e.acsTransactionId,c=e.acsChallengeUrl,l=e.threeDSVersion,d=e.windowSize;if(!a)throw Error("Session ID is required");var f={messageType:"CReq",messageVersion:l,threeDSServerTransID:a,acsTransID:s,challengeWindowSize:null!=d?d:u.THREE};if(t=f.messageType,r=f.messageVersion,n=f.threeDSServerTransID,o=f.acsTransID,i=f.challengeWindowSize,null!==f&&"string"==typeof t&&"string"==typeof r&&"string"==typeof n&&"string"==typeof o&&Object.values(u).includes(i))W(c,f);else{var p="Invalid challenge request payload for session: ".concat(a);return g.log.error(p),Promise.reject(Error(p))}return Promise.resolve({id:a})},$=(l=m(function(e){var t,r,n,o,i,a,s;return y(this,function(c){switch(c.label){case 0:return t=e.sessionId,r=e.acsTransactionId,n=e.acsChallengeUrl,o=e.threeDSVersion,i=e.windowSize,s=void 0===(a=e.timeout)?6e4:a,[4,G({sessionId:t,acsTransactionId:r,acsChallengeUrl:n,threeDSVersion:o,windowSize:i}).catch(function(e){return Promise.reject(e.message)})];case 1:return c.sent(),[2,V(s)]}})}),function(e){return l.apply(this,arguments)});window.BasisTheory3ds=function(e,t){try{var r,n;R(f.FRAME_CONTAINER_ID,!0),R(null!==(n=null==t?void 0:null===(r=t.challengeContainerOptions)||void 0===r?void 0:r.id)&&void 0!==n?n:p.FRAME_CONTAINER_ID)}catch(e){g.log.error("Unable to create iframe container",e)}return j.init(e,null==t?void 0:t.apiBaseUrl),{createSession:J,startChallenge:$}}}(); | ||
!function(){var e,t,r,n,o,i,a,c,s,l,u,d,f={FRAME_CONTAINER_ID:"methodFrameContainer",IFRAME_NAME:"methodIframe",FORM_NAME:"threeDSMethodForm",INPUT_NAME:"threeDSMethodData"},p={FRAME_CONTAINER_ID:"challengeFrameContainer",IFRAME_NAME:"challengeIframe",FORM_NAME:"threeDSCReqForm"},h={IFRAME:"iframe",REDIRECT:"redirect"};function m(e,t,r,n,o,i,a){try{var c=e[i](a),s=c.value}catch(e){r(e);return}c.done?t(s):Promise.resolve(s).then(n,o)}function v(e){return function(){var t=this,r=arguments;return new Promise(function(n,o){var i=e.apply(t,r);function a(e){m(i,n,o,a,c,"next",e)}function c(e){m(i,n,o,a,c,"throw",e)}a(void 0)})}}function y(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function E(e,t){var r,n,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=c(0),a.throw=c(1),a.return=c(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(c){return function(s){return function(c){if(r)throw TypeError("Generator is already executing.");for(;a&&(a=0,c[0]&&(i=0)),i;)try{if(r=1,n&&(o=2&c[0]?n.return:c[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,c[1])).done)return o;switch(n=0,o&&(c=[2&c[0],o.value]),c[0]){case 0:case 1:o=c;break;case 4:return i.label++,{value:c[1],done:!1};case 5:i.label++,n=c[1],c=[0];continue;case 7:c=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===c[0]||2===c[0])){i=0;continue}if(3===c[0]&&(!o||c[1]>o[0]&&c[1]<o[3])){i.label=c[1];break}if(6===c[0]&&i.label<o[1]){i.label=o[1],o=c;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(c);break}o[2]&&i.ops.pop(),i.trys.pop();continue}c=t.call(e,i)}catch(e){c=[6,e],n=0}finally{r=o=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}([c,s])}}}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function g(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return b(e,t)}}"function"==typeof SuppressedError&&SuppressedError;var w=(e=v(function(e,t,r){var n,o=arguments;return E(this,function(i){switch(i.label){case 0:var a,c;a=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){y(e,t,r[t])})}return e}({application:"3ds-web",ddsource:"3ds-web",service:"3ds-web"},o.length>3&&void 0!==o[3]?o[3]:{}),c=c={level:t,message:"error"===t&&r?"".concat(e,": ").concat(r.message):e},Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(c)):(function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r})(Object(c)).forEach(function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(c,e))}),n=a,i.label=1;case 1:return i.trys.push([1,3,,4]),[4,fetch("https://http-intake.logs.datadoghq.com/v1/input/".concat("pubb96b84a13912504f4354f2d794ea4fab"),{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})];case 2:if(!i.sent().ok)throw Error("Network response was not ok");return[3,4];case 3:return i.sent(),[3,4];case 4:return[2]}})}),t=function(t,r,n){return e.apply(this,arguments)},{log:{error:function(e,r,n){return t(e,"error",r,n)},info:function(e,r){return t(e,"info",void 0,r)},warn:function(e,r){return t(e,"warn",void 0,r)}}});(r=u||(u={})).ONE="01",r.TWO="02",r.THREE="03",r.FOUR="04",r.FIVE="05";var I=function(e){return null==e?"":JSON.stringify(e)},M=function(){var e,t=[1,4,8,15,16,24,32,48],r=window.screen.colorDepth,n=t.filter(function(e){return e<=r});return 0===n.length?t[0]:(e=Math).max.apply(e,function(e){if(Array.isArray(e))return b(e)}(n)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(n)||g(n)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())},T=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"05",r=(y(e={},"01",["250px","400px"]),y(e,"02",["390px","400px"]),y(e,"03",["500px","600px"]),y(e,"04",["600px","400px"]),y(e,"05",["100%","100%"]),e)[t];if(r)return r;var n=Error("Window size ".concat(t," is not supported"));throw w.log.error("Unsupported window size",n),n},A=function(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"0",o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"0",i=arguments.length>5?arguments[5]:void 0;if(!(!e||e instanceof HTMLElement)||!t||!r){var a="Unable to create iframe. Container must be a HTML element ".concat(JSON.stringify(e)," ").concat(t," ").concat(r);throw w.log.error("Unable to create iframe",Error()),Error(a)}var c=document.createElement("iframe");return c.name=t,c.width=n,c.height=o,c.setAttribute("id",r),c.setAttribute("frameborder","0"),c.setAttribute("border","0"),i&&"function"==typeof i&&c.addEventListener("onload",i),e.appendChild(c),c},O=function(e,t,r){var n=document.createElement("form");return n.name=e,n.action=t,n.method="POST",n.target=r,n},S=function(e,t){var r=document.createElement("input");return r.name=e,r.value=t,r},R=function(e,t){var r=document.createElement(e);return r.appendChild(t),r},D=function(e){var t,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t=document.getElementById(e)){t.innerHTML="",r&&t.setAttribute("style","display:none;");return}(t=document.createElement("div")).id=e,r&&t.setAttribute("style","display:none;"),document.body.appendChild(t)},_=function(e){return null==e?void 0:e.map(function(e){var t;return null===(t=document.getElementById(e))||void 0===t?void 0:t.remove()})},N=function(e,t){var r=function(e){return"string"==typeof e?t(e):"object"!=typeof e||null===e?e:Array.isArray(e)?e.map(r):Object.fromEntries(Object.entries(e).map(function(e){var n=function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,c=!1;try{for(o=o.call(e);!(a=(r=o.next()).done)&&(i.push(r.value),2!==i.length);a=!0);}catch(e){c=!0,n=e}finally{try{a||null==o.return||o.return()}finally{if(c)throw n}}return i}}(e,2)||g(e,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),o=n[0],i=n[1];return[t(o),"object"==typeof i||Array.isArray(i)?r(i):i]}))};return r(e)},C=function(e){return N(e,function(e){return e.replace(/_./g,function(e){return e[1].toUpperCase()})})},j=function(e){return btoa(JSON.stringify(e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")},F={client:(n=v(function(e,t,r){var n;return E(this,function(a){switch(a.label){case 0:if(!o)throw Error("Missing api key");return i&&w.log.info("Using custom api base url in 3DS SDK ".concat(i)),[4,fetch("".concat(null!=i?i:"https://api.basistheory.com","/3ds").concat(t),{method:e,body:JSON.stringify(r),headers:(y(n={},"BT-API-KEY",o),y(n,"Content-Type","application/json"),n)})];case 1:return[2,a.sent()]}})}),function(e,t,r){return n.apply(this,arguments)}),init:function(e,t){o=e,i=t}};(a=d||(d={})).METHOD="method",a.CHALLENGE="challenge",a.METHOD_TIME_OUT="methodTimeout",a.START_METHOD_TIME_OUT="startMethodTimeout",a.ERROR="error";var k=function(e){return window.postMessage(e,"*")},U=function(e){return"object"==typeof e&&null!==e&&"isCompleted"in e&&"boolean"==typeof e.isCompleted&&"id"in e&&"string"==typeof e.id&&"type"in e&&Object.values(d).includes(e.type)},P=function(e){var t,r;return null===(t=(y(r={},d.CHALLENGE,p.IFRAME_NAME),y(r,d.METHOD,f.IFRAME_NAME),y(r,d.METHOD_TIME_OUT,f.IFRAME_NAME),y(r,d.ERROR,"".concat(f.IFRAME_NAME,",").concat(p.IFRAME_NAME)),y(r,d.START_METHOD_TIME_OUT,""),r)[e])||void 0===t?void 0:t.split(",")},L=function(e){var t;return new Promise(function(r,n){var o=function(i){if(U(i.data)&&(null===(c=i.data)||void 0===c?void 0:c.type)===d.START_METHOD_TIME_OUT)t=setTimeout(function(){k({id:i.data.id,type:d.METHOD_TIME_OUT,isCompleted:!1})},1e4);else if(U(i.data)&&i.data.type!==d.ERROR&&i.data.type!==d.CHALLENGE){window.removeEventListener("message",o);var a,c,s,l={id:i.data.id,cardBrand:e.cardBrand};w.log.info("".concat(i.data.type," notification received for session: ").concat(l.id)),r(l),_(P(null===(s=i.data)||void 0===s?void 0:s.type)),clearTimeout(t)}else i.isTrusted&&(n("Something happened during session creation, please try again."),_(P(null===(a=i.data)||void 0===a?void 0:a.type)),clearTimeout(t))};window.addEventListener("message",o)})},H={},x={"The card was not supported by any card schemes":"3DS is not supported for the provided card"},q=function(e){var t=!0,r=!1,n=void 0;if("errors"in e&&void 0!==e.errors&&"object"==typeof e.errors&&null!==e.errors)try{for(var o,i=Object.keys(e.errors)[Symbol.iterator]();!(t=(o=i.next()).done);t=!0){var a=o.value;if(x[a])throw Error(x[a])}}catch(e){r=!0,n=e}finally{try{t||null==i.return||i.return()}finally{if(r)throw n}}else if(e.title&&H[e.title])throw Error(H[e.title]);throw Error(e.title||"An unknown error occurred")},z=function(e,t,r){var n=j({threeDSServerTransID:t,threeDSMethodNotificationURL:"".concat(r,"?mode=redirect")}),o=window.open("","threeDSMethodForm");if(!o){console.error("Popup blocked or unable to open the window.");return}var i=O(f.FORM_NAME,e,"threeDSMethodForm");i.appendChild(S(f.INPUT_NAME,n)),document.body.appendChild(i),i.submit();var a=window.setInterval(function(){o.closed&&(clearInterval(a),k({isCompleted:!0,id:t,type:d.METHOD}))},500)},B=function(e,t,r){var n=j({threeDSServerTransID:t,threeDSMethodNotificationURL:r}),o=A(document.getElementById(f.FRAME_CONTAINER_ID),f.IFRAME_NAME,f.IFRAME_NAME,"0","0"),i=O(f.FORM_NAME,e,o.name);i.appendChild(S(f.INPUT_NAME,n)),o.appendChild(R("html",R("body",i))),i.submit()},J=(c=v(function(e){var t,r,n,o,i,a,c,s,l,u,f,p,m,v,b,g,T;return E(this,function(E){switch(E.label){case 0:if(t=e.tokenId,r=e.tokenIntentId,n=e.pan,i=void 0!==(o=e.skipMethodRequest)&&o,a=e.methodRequestMode,c=e.challengeMode,0===(s=[n,t,r].filter(function(e){return void 0!==e})).length)throw Error("One of pan, tokenId, or tokenIntentId is required.");if(s.length>1)throw Error("Only one of pan, tokenId, or tokenIntentId should be provided.");return l=n?"pan":t?"tokenId":"tokenIntentId",u=n||t||r,f={browserColorDepth:I(M()),browserJavascriptEnabled:!0,browserJavaEnabled:window.navigator.javaEnabled(),browserLanguage:window.navigator.language,browserScreenHeight:I(window.screen.height),browserScreenWidth:I(window.screen.width),browserTZ:I(new Date().getTimezoneOffset()),browserUserAgent:window.navigator.userAgent},[4,F.client("POST","/sessions",N((y(p={},l,u),y(p,"device","browser"),y(p,"deviceInfo",f),y(p,"webChallengeMode",c),p),function(e){return e.replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase()}))];case 1:if((m=E.sent()).ok)return[3,6];E.label=2;case 2:return E.trys.push([2,4,,5]),[4,m.json()];case 3:return v=E.sent(),[3,5];case 4:throw E.sent(),b="Failed to parse error response. HTTP Status: ".concat(m.status),w.log.error(b),Error(b);case 5:var A;if("object"==typeof(A=v)&&null!==A&&("title"in A||"status"in A||"detail"in A))q(v);else throw g="An unknown error occurred while creating session. Status: ".concat(m.status,"."),w.log.error("".concat(g," Response: ").concat(JSON.stringify(v,null,2))),Error(g);E.label=6;case 6:return[4,m.json()];case 7:return T=C.apply(void 0,[E.sent()]),w.log.info("3DS session response received with ID ".concat(T.id)),T.methodUrl&&!i&&(k({isCompleted:!1,id:T.id,type:d.START_METHOD_TIME_OUT}),a===h.REDIRECT?z(T.methodUrl,T.id,T.methodNotificationUrl):B(T.methodUrl,T.id,T.methodNotificationUrl)),[2,T]}})}),function(e){return c.apply(this,arguments)}),W=(s=v(function(e){var t,r,n,o,i,a,c,s,l,u;return E(this,function(d){switch(d.label){case 0:return t=e.tokenId,r=e.tokenIntentId,n=e.pan,i=void 0!==(o=e.skipMethodRequest)&&o,c=void 0===(a=e.methodRequestMode)?h.IFRAME:a,l=void 0===(s=e.challengeMode)?h.IFRAME:s,[4,J({tokenId:t,tokenIntentId:r,pan:n,skipMethodRequest:i,methodRequestMode:c,challengeMode:l}).catch(function(e){return Promise.reject(e.message)})];case 1:if(!(u=d.sent()).methodUrl||i)return[2,{id:u.id,cardBrand:u.cardBrand}];return[4,L(u)];case 2:return[2,d.sent()]}})}),function(e){return s.apply(this,arguments)}),G=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6e4;return new Promise(function(r,n){var o=function(t){if(U(t.data)&&t.data.type===d.CHALLENGE){clearTimeout(e),window.removeEventListener("message",o);var n={id:t.data.id};w.log.info("".concat(t.data.type," notification received for session: ").concat(n.id)),r(n),_([p.IFRAME_NAME])}else t.isTrusted};window.addEventListener("message",o),e=setTimeout(function(){window.removeEventListener("message",o),n("Timed out waiting for a challenge response. Please try again."),_([p.IFRAME_NAME])},t)})},V=function(e,t){var r=document.getElementById(p.FRAME_CONTAINER_ID),n=T(t.challengeWindowSize),o=j(t),i=p.IFRAME_NAME,a=document.createElement("html"),c=document.createElement("body"),s=A(r,i,i,n[0],n[1]),l=O(p.FORM_NAME,e,s.name),u=S("creq",o);l.appendChild(u),c.appendChild(l),a.appendChild(c),s.appendChild(a),l.submit()},$=function(e,t){var r=T(t.challengeWindowSize),n=window.open("","threeDSChallenge","width=".concat(r[0],",height=").concat(r[1]));if(!n){console.error("Popup blocked or unable to open the window.");return}var o=j(t),i=O(p.FORM_NAME,e,"threeDSChallenge"),a=S("creq",o);i.appendChild(a),document.body.appendChild(i),i.submit();var c=window.setInterval(function(){n.closed&&(clearInterval(c),k({isCompleted:!0,id:t.threeDSServerTransID,type:d.CHALLENGE}))},500)},K=function(e){var t,r,n,o,i,a=e.sessionId,c=e.acsTransactionId,s=e.acsChallengeUrl,l=e.threeDSVersion,d=e.windowSize,f=e.mode;if(!a)throw Error("Session ID is required");var p={messageType:"CReq",messageVersion:l,threeDSServerTransID:a,acsTransID:c,challengeWindowSize:null!=d?d:u.THREE};if(t=p.messageType,r=p.messageVersion,n=p.threeDSServerTransID,o=p.acsTransID,i=p.challengeWindowSize,null!==p&&"string"==typeof t&&"string"==typeof r&&"string"==typeof n&&"string"==typeof o&&Object.values(u).includes(i))f===h.REDIRECT?$(s,p):V(s,p);else{var m="Invalid challenge request payload for session: ".concat(a);return w.log.error(m),Promise.reject(Error(m))}return Promise.resolve({id:a})},Z=(l=v(function(e){var t,r,n,o,i,a,c,s,l;return E(this,function(u){switch(u.label){case 0:return t=e.sessionId,r=e.acsTransactionId,n=e.acsChallengeUrl,o=e.threeDSVersion,i=e.windowSize,c=void 0===(a=e.mode)?"iframe":a,l=void 0===(s=e.timeout)?6e4:s,[4,K({sessionId:t,acsTransactionId:r,acsChallengeUrl:n,threeDSVersion:o,windowSize:i,mode:c}).catch(function(e){return Promise.reject(e.message)})];case 1:return u.sent(),[2,G(l)]}})}),function(e){return l.apply(this,arguments)});window.BasisTheory3ds=function(e,t){try{var r,n;D(f.FRAME_CONTAINER_ID,!0),D(null!==(n=null==t?void 0:null===(r=t.challengeContainerOptions)||void 0===r?void 0:r.id)&&void 0!==n?n:p.FRAME_CONTAINER_ID)}catch(e){w.log.error("Unable to create iframe container",e)}return F.init(e,null==t?void 0:t.apiBaseUrl),{createSession:W,startChallenge:Z}}}(); |
@@ -16,5 +16,8 @@ | ||
IFRAME_NAME: "challengeIframe", | ||
FORM_NAME: "threeDSCReqForm", | ||
INPUT_NAME: "threeDSSessionData" | ||
FORM_NAME: "threeDSCReqForm" | ||
}; | ||
const $d7d24f50044f5db6$export$909c260dfc8c4a = { | ||
IFRAME: "iframe", | ||
REDIRECT: "redirect" | ||
}; | ||
const $d7d24f50044f5db6$export$a831561ce8167be0 = "BT-API-KEY"; | ||
@@ -329,3 +332,2 @@ const $d7d24f50044f5db6$export$c3ee1e672e1e24e7 = "https://api.basistheory.com"; | ||
form.submit(); | ||
document.body.removeChild(form); | ||
// check periodically if method window is closed (it closes immediatelly on completion) | ||
@@ -356,3 +358,3 @@ // TODO: potentially use a middleware page for additional control | ||
}; | ||
const $18f82d365a93c819$var$makeSessionRequest = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode = "iframe" })=>{ | ||
const $18f82d365a93c819$var$makeSessionRequest = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode, challengeMode: challengeMode })=>{ | ||
const providedParams = [ | ||
@@ -371,3 +373,4 @@ pan, | ||
device: "browser", | ||
deviceInfo: deviceInfo | ||
deviceInfo: deviceInfo, | ||
webChallengeMode: challengeMode | ||
})); | ||
@@ -398,3 +401,3 @@ if (!response.ok) { | ||
}); | ||
if (methodRequestMode === "redirect") $18f82d365a93c819$var$submitMethodRequestRedirect(session.methodUrl, session.id, session.methodNotificationUrl); | ||
if (methodRequestMode === (0, $d7d24f50044f5db6$export$909c260dfc8c4a).REDIRECT) $18f82d365a93c819$var$submitMethodRequestRedirect(session.methodUrl, session.id, session.methodNotificationUrl); | ||
else $18f82d365a93c819$var$submitMethodRequest(session.methodUrl, session.id, session.methodNotificationUrl); | ||
@@ -404,3 +407,3 @@ } | ||
}; | ||
const $18f82d365a93c819$export$f7c62c73429afa28 = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode = "iframe" })=>{ | ||
const $18f82d365a93c819$export$f7c62c73429afa28 = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode = (0, $d7d24f50044f5db6$export$909c260dfc8c4a).IFRAME, challengeMode: challengeMode = (0, $d7d24f50044f5db6$export$909c260dfc8c4a).IFRAME })=>{ | ||
const session = await $18f82d365a93c819$var$makeSessionRequest({ | ||
@@ -411,3 +414,4 @@ tokenId: tokenId, | ||
skipMethodRequest: skipMethodRequest, | ||
methodRequestMode: methodRequestMode | ||
methodRequestMode: methodRequestMode, | ||
challengeMode: challengeMode | ||
}).catch((error)=>{ | ||
@@ -464,2 +468,3 @@ return Promise.reject(error.message); | ||
function $c2c737e61056e771$var$isAcsThreeDSChallengeRequest(obj) { | ||
@@ -469,7 +474,6 @@ const { messageType: messageType, messageVersion: messageVersion, threeDSServerTransID: threeDSServerTransID, acsTransID: acsTransID, challengeWindowSize: challengeWindowSize } = obj; | ||
} | ||
const $c2c737e61056e771$var$submitChallengeRequest = (acsURL, creq, session = {})=>{ | ||
const $c2c737e61056e771$var$submitChallengeRequest = (acsURL, creq)=>{ | ||
const container = document.getElementById((0, $d7d24f50044f5db6$export$9aef2de9a9febd46).FRAME_CONTAINER_ID); | ||
const windowSize = (0, $944918a4514227a1$export$d96f5f7405a82f1b)(creq.challengeWindowSize); | ||
const creqBase64 = (0, $c285d18e17e27ae4$export$c564cdbbe6da493)(creq); | ||
const sessionDataBase64 = (0, $c285d18e17e27ae4$export$c564cdbbe6da493)(session); | ||
const challengeIframeName = (0, $d7d24f50044f5db6$export$9aef2de9a9febd46).IFRAME_NAME; | ||
@@ -481,5 +485,3 @@ const html = document.createElement("html"); | ||
const creqInput = (0, $56c0ab67849851da$export$d80fffb1deb3b97e)("creq", creqBase64); | ||
const sessionDataInput = (0, $56c0ab67849851da$export$d80fffb1deb3b97e)((0, $d7d24f50044f5db6$export$9aef2de9a9febd46).INPUT_NAME, sessionDataBase64); | ||
form.appendChild(creqInput); | ||
form.appendChild(sessionDataInput); | ||
body.appendChild(form); | ||
@@ -490,3 +492,29 @@ html.appendChild(body); | ||
}; | ||
const $c2c737e61056e771$var$makeChallengeRequest = ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize })=>{ | ||
const $c2c737e61056e771$var$submitChallengeRequestRedirect = (acsURL, creq)=>{ | ||
const windowSize = (0, $944918a4514227a1$export$d96f5f7405a82f1b)(creq.challengeWindowSize); | ||
const newWindow = window.open("", "threeDSChallenge", `width=${windowSize[0]},height=${windowSize[1]}`); | ||
if (!newWindow) { | ||
console.error("Popup blocked or unable to open the window."); | ||
return; | ||
} | ||
const creqBase64 = (0, $c285d18e17e27ae4$export$c564cdbbe6da493)(creq); | ||
const form = (0, $56c0ab67849851da$export$f681a8129d2e9d28)((0, $d7d24f50044f5db6$export$9aef2de9a9febd46).FORM_NAME, acsURL, "threeDSChallenge"); | ||
const creqInput = (0, $56c0ab67849851da$export$d80fffb1deb3b97e)("creq", creqBase64); | ||
form.appendChild(creqInput); | ||
document.body.appendChild(form); | ||
form.submit(); | ||
// check periodically if method window is closed (it closes immediatelly on completion) | ||
// TODO: potentially use a middleware page for additional control | ||
const checkClosedInterval = window.setInterval(()=>{ | ||
if (newWindow.closed) { | ||
clearInterval(checkClosedInterval); | ||
(0, $d75c0ee1d2d3b495$export$5e14cdade93d6f7b)({ | ||
isCompleted: true, | ||
id: creq.threeDSServerTransID, | ||
type: (0, $d75c0ee1d2d3b495$export$9130146a86a85749).CHALLENGE | ||
}); | ||
} | ||
}, 500); | ||
}; | ||
const $c2c737e61056e771$var$makeChallengeRequest = ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize, mode: mode })=>{ | ||
if (!sessionId) throw new Error("Session ID is required"); | ||
@@ -500,4 +528,6 @@ const creq = { | ||
}; | ||
if ($c2c737e61056e771$var$isAcsThreeDSChallengeRequest(creq)) $c2c737e61056e771$var$submitChallengeRequest(acsChallengeUrl, creq); | ||
else { | ||
if ($c2c737e61056e771$var$isAcsThreeDSChallengeRequest(creq)) { | ||
if (mode === (0, $d7d24f50044f5db6$export$909c260dfc8c4a).REDIRECT) $c2c737e61056e771$var$submitChallengeRequestRedirect(acsChallengeUrl, creq); | ||
else $c2c737e61056e771$var$submitChallengeRequest(acsChallengeUrl, creq); | ||
} else { | ||
const err = `Invalid challenge request payload for session: ${sessionId}`; | ||
@@ -511,3 +541,3 @@ (0, $7eeff694ab6fbf78$export$af88d00dbe7f521).log.error(err); | ||
}; | ||
const $c2c737e61056e771$export$452d4d807a279e0d = async ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize, timeout: timeout = 60000 })=>{ | ||
const $c2c737e61056e771$export$452d4d807a279e0d = async ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize, mode: mode = "iframe", timeout: timeout = 60000 })=>{ | ||
await $c2c737e61056e771$var$makeChallengeRequest({ | ||
@@ -518,3 +548,4 @@ sessionId: sessionId, | ||
threeDSVersion: threeDSVersion, | ||
windowSize: windowSize | ||
windowSize: windowSize, | ||
mode: mode | ||
}).catch((error)=>{ | ||
@@ -521,0 +552,0 @@ return Promise.reject(error.message); |
@@ -10,5 +10,8 @@ const $ede1e6694b13a411$export$3f521420530811cf = { | ||
IFRAME_NAME: "challengeIframe", | ||
FORM_NAME: "threeDSCReqForm", | ||
INPUT_NAME: "threeDSSessionData" | ||
FORM_NAME: "threeDSCReqForm" | ||
}; | ||
const $ede1e6694b13a411$export$909c260dfc8c4a = { | ||
IFRAME: "iframe", | ||
REDIRECT: "redirect" | ||
}; | ||
const $ede1e6694b13a411$export$a831561ce8167be0 = "BT-API-KEY"; | ||
@@ -323,3 +326,2 @@ const $ede1e6694b13a411$export$c3ee1e672e1e24e7 = "https://api.basistheory.com"; | ||
form.submit(); | ||
document.body.removeChild(form); | ||
// check periodically if method window is closed (it closes immediatelly on completion) | ||
@@ -350,3 +352,3 @@ // TODO: potentially use a middleware page for additional control | ||
}; | ||
const $2bc795de5a692819$var$makeSessionRequest = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode = "iframe" })=>{ | ||
const $2bc795de5a692819$var$makeSessionRequest = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode, challengeMode: challengeMode })=>{ | ||
const providedParams = [ | ||
@@ -365,3 +367,4 @@ pan, | ||
device: "browser", | ||
deviceInfo: deviceInfo | ||
deviceInfo: deviceInfo, | ||
webChallengeMode: challengeMode | ||
})); | ||
@@ -392,3 +395,3 @@ if (!response.ok) { | ||
}); | ||
if (methodRequestMode === "redirect") $2bc795de5a692819$var$submitMethodRequestRedirect(session.methodUrl, session.id, session.methodNotificationUrl); | ||
if (methodRequestMode === (0, $ede1e6694b13a411$export$909c260dfc8c4a).REDIRECT) $2bc795de5a692819$var$submitMethodRequestRedirect(session.methodUrl, session.id, session.methodNotificationUrl); | ||
else $2bc795de5a692819$var$submitMethodRequest(session.methodUrl, session.id, session.methodNotificationUrl); | ||
@@ -398,3 +401,3 @@ } | ||
}; | ||
const $2bc795de5a692819$export$f7c62c73429afa28 = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode = "iframe" })=>{ | ||
const $2bc795de5a692819$export$f7c62c73429afa28 = async ({ tokenId: tokenId, tokenIntentId: tokenIntentId, pan: pan, skipMethodRequest: skipMethodRequest = false, methodRequestMode: methodRequestMode = (0, $ede1e6694b13a411$export$909c260dfc8c4a).IFRAME, challengeMode: challengeMode = (0, $ede1e6694b13a411$export$909c260dfc8c4a).IFRAME })=>{ | ||
const session = await $2bc795de5a692819$var$makeSessionRequest({ | ||
@@ -405,3 +408,4 @@ tokenId: tokenId, | ||
skipMethodRequest: skipMethodRequest, | ||
methodRequestMode: methodRequestMode | ||
methodRequestMode: methodRequestMode, | ||
challengeMode: challengeMode | ||
}).catch((error)=>{ | ||
@@ -458,2 +462,3 @@ return Promise.reject(error.message); | ||
function $d6091d0740832a34$var$isAcsThreeDSChallengeRequest(obj) { | ||
@@ -463,7 +468,6 @@ const { messageType: messageType, messageVersion: messageVersion, threeDSServerTransID: threeDSServerTransID, acsTransID: acsTransID, challengeWindowSize: challengeWindowSize } = obj; | ||
} | ||
const $d6091d0740832a34$var$submitChallengeRequest = (acsURL, creq, session = {})=>{ | ||
const $d6091d0740832a34$var$submitChallengeRequest = (acsURL, creq)=>{ | ||
const container = document.getElementById((0, $ede1e6694b13a411$export$9aef2de9a9febd46).FRAME_CONTAINER_ID); | ||
const windowSize = (0, $12389938bc382e86$export$d96f5f7405a82f1b)(creq.challengeWindowSize); | ||
const creqBase64 = (0, $bb80761c88de0bf5$export$c564cdbbe6da493)(creq); | ||
const sessionDataBase64 = (0, $bb80761c88de0bf5$export$c564cdbbe6da493)(session); | ||
const challengeIframeName = (0, $ede1e6694b13a411$export$9aef2de9a9febd46).IFRAME_NAME; | ||
@@ -475,5 +479,3 @@ const html = document.createElement("html"); | ||
const creqInput = (0, $c64965f72f06da5e$export$d80fffb1deb3b97e)("creq", creqBase64); | ||
const sessionDataInput = (0, $c64965f72f06da5e$export$d80fffb1deb3b97e)((0, $ede1e6694b13a411$export$9aef2de9a9febd46).INPUT_NAME, sessionDataBase64); | ||
form.appendChild(creqInput); | ||
form.appendChild(sessionDataInput); | ||
body.appendChild(form); | ||
@@ -484,3 +486,29 @@ html.appendChild(body); | ||
}; | ||
const $d6091d0740832a34$var$makeChallengeRequest = ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize })=>{ | ||
const $d6091d0740832a34$var$submitChallengeRequestRedirect = (acsURL, creq)=>{ | ||
const windowSize = (0, $12389938bc382e86$export$d96f5f7405a82f1b)(creq.challengeWindowSize); | ||
const newWindow = window.open("", "threeDSChallenge", `width=${windowSize[0]},height=${windowSize[1]}`); | ||
if (!newWindow) { | ||
console.error("Popup blocked or unable to open the window."); | ||
return; | ||
} | ||
const creqBase64 = (0, $bb80761c88de0bf5$export$c564cdbbe6da493)(creq); | ||
const form = (0, $c64965f72f06da5e$export$f681a8129d2e9d28)((0, $ede1e6694b13a411$export$9aef2de9a9febd46).FORM_NAME, acsURL, "threeDSChallenge"); | ||
const creqInput = (0, $c64965f72f06da5e$export$d80fffb1deb3b97e)("creq", creqBase64); | ||
form.appendChild(creqInput); | ||
document.body.appendChild(form); | ||
form.submit(); | ||
// check periodically if method window is closed (it closes immediatelly on completion) | ||
// TODO: potentially use a middleware page for additional control | ||
const checkClosedInterval = window.setInterval(()=>{ | ||
if (newWindow.closed) { | ||
clearInterval(checkClosedInterval); | ||
(0, $9e6eab7e85fe68ea$export$5e14cdade93d6f7b)({ | ||
isCompleted: true, | ||
id: creq.threeDSServerTransID, | ||
type: (0, $9e6eab7e85fe68ea$export$9130146a86a85749).CHALLENGE | ||
}); | ||
} | ||
}, 500); | ||
}; | ||
const $d6091d0740832a34$var$makeChallengeRequest = ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize, mode: mode })=>{ | ||
if (!sessionId) throw new Error("Session ID is required"); | ||
@@ -494,4 +522,6 @@ const creq = { | ||
}; | ||
if ($d6091d0740832a34$var$isAcsThreeDSChallengeRequest(creq)) $d6091d0740832a34$var$submitChallengeRequest(acsChallengeUrl, creq); | ||
else { | ||
if ($d6091d0740832a34$var$isAcsThreeDSChallengeRequest(creq)) { | ||
if (mode === (0, $ede1e6694b13a411$export$909c260dfc8c4a).REDIRECT) $d6091d0740832a34$var$submitChallengeRequestRedirect(acsChallengeUrl, creq); | ||
else $d6091d0740832a34$var$submitChallengeRequest(acsChallengeUrl, creq); | ||
} else { | ||
const err = `Invalid challenge request payload for session: ${sessionId}`; | ||
@@ -505,3 +535,3 @@ (0, $9baa5c7531c09ef3$export$af88d00dbe7f521).log.error(err); | ||
}; | ||
const $d6091d0740832a34$export$452d4d807a279e0d = async ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize, timeout: timeout = 60000 })=>{ | ||
const $d6091d0740832a34$export$452d4d807a279e0d = async ({ sessionId: sessionId, acsTransactionId: acsTransactionId, acsChallengeUrl: acsChallengeUrl, threeDSVersion: threeDSVersion, windowSize: windowSize, mode: mode = "iframe", timeout: timeout = 60000 })=>{ | ||
await $d6091d0740832a34$var$makeChallengeRequest({ | ||
@@ -512,3 +542,4 @@ sessionId: sessionId, | ||
threeDSVersion: threeDSVersion, | ||
windowSize: windowSize | ||
windowSize: windowSize, | ||
mode: mode | ||
}).catch((error)=>{ | ||
@@ -515,0 +546,0 @@ return Promise.reject(error.message); |
{ | ||
"name": "@basis-theory/3ds-web", | ||
"version": "1.5.0", | ||
"version": "1.6.0", | ||
"repository": "https://github.com/Basis-Theory/3ds-web", | ||
@@ -5,0 +5,0 @@ "license": "Apache-2.0", |
@@ -0,1 +1,2 @@ | ||
import { AcsMode } from './constants'; | ||
import { WindowSizeId } from './utils/browser'; | ||
@@ -17,6 +18,7 @@ type ThreeDSChallengeRequest = { | ||
timeout?: number; | ||
mode?: AcsMode; | ||
}; | ||
export declare const startChallenge: ({ sessionId, acsTransactionId, acsChallengeUrl, threeDSVersion, windowSize, timeout, }: ThreeDSChallengeRequest) => Promise<{ | ||
export declare const startChallenge: ({ sessionId, acsTransactionId, acsChallengeUrl, threeDSVersion, windowSize, mode, timeout, }: ThreeDSChallengeRequest) => Promise<{ | ||
id: string; | ||
}>; | ||
export {}; |
@@ -11,5 +11,9 @@ export declare const METHOD_REQUEST: { | ||
FORM_NAME: string; | ||
INPUT_NAME: string; | ||
}; | ||
export declare const ACS_MODE: { | ||
IFRAME: string; | ||
REDIRECT: string; | ||
}; | ||
export type AcsMode = typeof ACS_MODE[keyof typeof ACS_MODE]; | ||
export declare const BT_API_KEY_HEADER_NAME = "BT-API-KEY"; | ||
export declare const API_BASE_URL = "https://api.basistheory.com"; |
@@ -19,7 +19,7 @@ declare global { | ||
export const BasisTheory3ds: (apiKey: string, configOptions?: ConfigOptions) => { | ||
createSession: ({ tokenId, tokenIntentId, pan, skipMethodRequest, methodRequestMode, }: import("~src/session").Create3dsSessionRequest) => Promise<{ | ||
createSession: ({ tokenId, tokenIntentId, pan, skipMethodRequest, methodRequestMode, challengeMode, }: import("~src/session").Create3dsSessionRequest) => Promise<{ | ||
id: string; | ||
cardBrand?: string; | ||
}>; | ||
startChallenge: ({ sessionId, acsTransactionId, acsChallengeUrl, threeDSVersion, windowSize, timeout, }: { | ||
startChallenge: ({ sessionId, acsTransactionId, acsChallengeUrl, threeDSVersion, windowSize, mode, timeout, }: { | ||
acsChallengeUrl: string; | ||
@@ -31,2 +31,3 @@ acsTransactionId: string; | ||
timeout?: number; | ||
mode?: import("~src/constants").AcsMode; | ||
}) => Promise<{ | ||
@@ -33,0 +34,0 @@ id: string; |
@@ -0,1 +1,2 @@ | ||
import { AcsMode } from '~src/constants'; | ||
export interface Create3dsSessionRequest { | ||
@@ -9,3 +10,4 @@ tokenId?: string; | ||
skipMethodRequest?: boolean; | ||
methodRequestMode?: 'iframe' | 'redirect'; | ||
methodRequestMode?: AcsMode; | ||
challengeMode?: AcsMode; | ||
} | ||
@@ -18,5 +20,5 @@ export type Create3dsSessionResponse = { | ||
}; | ||
export declare const createSession: ({ tokenId, tokenIntentId, pan, skipMethodRequest, methodRequestMode, }: Create3dsSessionRequest) => Promise<{ | ||
export declare const createSession: ({ tokenId, tokenIntentId, pan, skipMethodRequest, methodRequestMode, challengeMode, }: Create3dsSessionRequest) => Promise<{ | ||
id: string; | ||
cardBrand?: string; | ||
}>; |
{ | ||
"name": "@basis-theory/3ds-web", | ||
"version": "1.5.0", | ||
"version": "1.6.0", | ||
"repository": "https://github.com/Basis-Theory/3ds-web", | ||
@@ -5,0 +5,0 @@ "license": "Apache-2.0", |
112809
1206