UNPKG

@dhanyatra/checkout-js

Version:

Check Js Module For Instant Web Checkout

1 lines 11.5 kB
{"version":3,"file":"checkout.cjs","sources":["../src/checkout.ts"],"sourcesContent":["// Create a new div element\nconst newDiv = document.createElement(\"div\");\n\n// Add some content to the div (optional)\nnewDiv.innerHTML = `<style>\n .dhanyatra-container > iframe { min-height: 100%!important; }\n @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }\n @keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } }\n @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n</style>`;\n\n// Add a class and inline styles to the div\nnewDiv.className = \"dhanyatra-container\";\nnewDiv.style.cssText =\n \"z-index: 2147483647; position: fixed; top: 0px; display: none; left: 0px; height: 100%; width: 100%; backface-visibility: hidden; overflow-y: visible;\";\n\n// Create another div element for the backdrop\nconst backdropDiv = document.createElement(\"div\");\nbackdropDiv.className = \"dhanyatra-backdrop\";\n\nconst spinnerDiv = document.createElement(\"div\");\nspinnerDiv.className = \"dhanyatra-loader\";\n\n// Add styles to the backdrop div\nconst backdropStyles = {\n \"min-height\": \"100%\",\n transition: \"0.3s ease-out\",\n position: \"fixed\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\",\n background: \"rgba(0, 0, 0, 0.6)\",\n display: \"flex\",\n \"justify-content\": \"center\",\n \"align-items\": \"center\",\n};\n\nconst loaderStyles = {\n border: \"5px solid #ffffff\" /* Light grey */,\n \"border-bottom-color\": \"transparent\",\n \"border-radius\": \"50%\",\n display: \"inline-block\",\n \"box-sizing\": \"border-box\",\n width: \"48px\",\n height: \"48px\",\n animation: \"spin 2s linear infinite\",\n};\n\nObject.assign(backdropDiv.style, backdropStyles);\nObject.assign(spinnerDiv.style, loaderStyles);\n\n// Append the backdrop div to the newDiv\nbackdropDiv.appendChild(spinnerDiv);\nnewDiv.appendChild(backdropDiv);\n\n// Append the div to the body of the HTML document\ndocument.body.appendChild(newDiv);\n\ninterface PaymentBlock {\n [key: string]: {\n name: string;\n instruments: PaymentInstrument[];\n };\n}\n\ninterface PaymentInstrument {\n method: string;\n flows: string[];\n apps: string[];\n issuer: string[];\n banks: string[];\n wallets: string[];\n}\n\ninterface DhanyatraOptions {\n key: string;\n amount: string;\n currency: string;\n order_id: string;\n organization: string;\n prefill?: {\n email?: string;\n contact?: number;\n };\n config?: {\n display: {\n blocks: PaymentBlock;\n hide: {\n method: string;\n }[];\n sequence: string[];\n preferences: {\n show_default_blocks: boolean;\n };\n };\n };\n ark?: {\n user_id: number;\n org_id: number;\n };\n modal: {\n onDismiss: (response: any) => void;\n onSuccess: (response: any) => void;\n onError: (error: any) => void;\n };\n}\n\nexport class Dhanyatra {\n options: DhanyatraOptions;\n private baseUrl: string = \"https://checkout.dhanyatra.brighthustle.in\";\n private eventListenerAttached: boolean = false;\n private onSuccessHandled: boolean = false;\n private onDismissHandled: boolean = false;\n private onErrorHandled: boolean = false;\n\n constructor(options: DhanyatraOptions) {\n if (!options) {\n throw new Error(\"Options must be provided to the Dhanyatra constructor.\");\n }\n this.options = options;\n this.attachEventListener();\n }\n\n close() {\n const iframe = document.getElementById(\n \"dhanyatraIframe\"\n ) as HTMLIFrameElement;\n if (iframe) {\n iframe.style.animation = \"fadeOut 0.5s\";\n this.removeEventListener();\n setTimeout(() => {\n iframe.parentNode?.removeChild(iframe);\n newDiv.style.display = \"none\";\n }, 500);\n }\n }\n\n open() {\n this.onSuccessHandled = false;\n this.onDismissHandled = false;\n this.onErrorHandled = false;\n spinnerDiv.style.display = \"block\";\n // When you call this method, it will display the dhanyatra-container\n newDiv.style.display = \"block\";\n // Create an iframe element\n const iframe = document.createElement(\"iframe\");\n iframe.setAttribute(\"id\", \"dhanyatraIframe\");\n Object.assign(iframe.style, {\n opacity: \"0\",\n height: \"100%\",\n position: \"relative\",\n background: \"none\",\n display: \"none\",\n border: \"0px none transparent\",\n margin: \"0px\",\n padding: \"0px\",\n zIndex: \"2\",\n width: \"100%\",\n animation: \"fadeIn 0.5s forwards\",\n });\n iframe.frameBorder = \"0\";\n iframe.setAttribute(\"allowTransparency\", \"true\");\n\n // Add a cache-busting query parameter\n const cacheBuster = `?_=${new Date().getTime()}`;\n\n // Set the source URL for the iframe\n iframe.src = `${this.baseUrl}${cacheBuster}`;\n\n // Append the iframe to the dhanyatra-container\n newDiv.appendChild(iframe);\n\n // Convert the data to a JSON string\n const messageString = JSON.stringify(this.options);\n iframe.setAttribute(\"referrerpolicy\", \"no-referrer-when-downgrade\");\n\n // Send the data to the iframe\n iframe.addEventListener(\"load\", () => {\n // This function will be called when the iframe has fully loaded\n setTimeout(() => {\n iframe.contentWindow?.postMessage(messageString, \"*\");\n }, 500);\n setTimeout(() => {\n spinnerDiv.style.display = \"none\";\n iframe.style.display = \"block\";\n }, 1000);\n // Now, you can safely send data to the iframe or perform other actions.\n });\n\n iframe.addEventListener(\"error\", () => {\n console.error(\"Iframe failed to load. Retrying...\");\n setTimeout(() => {\n iframe.src = `${this.baseUrl}${cacheBuster}`;\n }, 3000);\n });\n }\n\n private attachEventListener() {\n if (!this.eventListenerAttached) {\n window.addEventListener(\"message\", (event) => this.handleMessage(event));\n this.eventListenerAttached = true;\n }\n }\n\n private removeEventListener() {\n if (this.eventListenerAttached) {\n window.removeEventListener(\"message\", (event) =>\n this.handleMessage(event)\n );\n this.eventListenerAttached = false;\n }\n }\n\n private handleMessage = (event) => {\n const { origin, data } = event;\n\n // Check the origin of the event for security\n if (origin !== this.baseUrl) {\n return;\n }\n\n // Handle different message types\n switch (data.action) {\n case \"dismissModal\":\n this.handleDismissModal(data.data);\n break;\n case \"paymentSuccess\":\n this.handlePaymentResponse(data.data);\n break;\n case \"paymentFailed\":\n this.handleErrorResponse(data.data);\n break;\n default:\n this.handleErrorResponse(data.data);\n break;\n }\n };\n\n private handleDismissModal = (data) => {\n const iframe = document.getElementById(\n \"dhanyatraIframe\"\n ) as HTMLIFrameElement;\n if (iframe) {\n if (!this.onDismissHandled) {\n this.options.modal.onDismiss(data);\n this.onDismissHandled = true;\n }\n }\n };\n\n private handlePaymentResponse = (paymentData) => {\n if (\n !this.onSuccessHandled &&\n this.options &&\n this.options.modal &&\n typeof this.options.modal.onSuccess === \"function\"\n ) {\n this.options.modal.onSuccess(paymentData);\n this.onSuccessHandled = true;\n }\n };\n\n private handleErrorResponse = (errorData) => {\n if (\n !this.onErrorHandled &&\n this.options &&\n this.options.modal &&\n typeof this.options.modal.onError === \"function\"\n ) {\n this.options.modal.onError(errorData);\n this.onErrorHandled = true;\n }\n };\n}\n"],"names":["newDiv","document","createElement","innerHTML","className","style","cssText","backdropDiv","spinnerDiv","Object","assign","transition","position","top","left","width","height","background","display","border","animation","appendChild","body","constructor","options","this","baseUrl","eventListenerAttached","onSuccessHandled","onDismissHandled","onErrorHandled","handleMessage","event","origin","data","action","handleDismissModal","handlePaymentResponse","handleErrorResponse","getElementById","modal","onDismiss","paymentData","onSuccess","errorData","onError","Error","attachEventListener","close","iframe","removeEventListener","setTimeout","_iframe$parentNode","parentNode","removeChild","open","setAttribute","opacity","margin","padding","zIndex","frameBorder","cacheBuster","Date","getTime","src","messageString","JSON","stringify","addEventListener","_iframe$contentWindow","contentWindow","postMessage","console","error","window"],"mappings":"AACA,IAAMA,EAASC,SAASC,cAAc,OAGtCF,EAAOG,UAKE,mTAGTH,EAAOI,UAAY,sBACnBJ,EAAOK,MAAMC,QACX,yJAGF,IAAMC,EAAcN,SAASC,cAAc,OAC3CK,EAAYH,UAAY,qBAExB,IAAMI,EAAaP,SAASC,cAAc,OAC1CM,EAAWJ,UAAY,mBA4BvBK,OAAOC,OAAOH,EAAYF,MAzBH,CACrB,aAAc,OACdM,WAAY,gBACZC,SAAU,QACVC,IAAK,IACLC,KAAM,IACNC,MAAO,OACPC,OAAQ,OACRC,WAAY,qBACZC,QAAS,OACT,kBAAmB,SACnB,cAAe,WAejBT,OAAOC,OAAOF,EAAWH,MAZJ,CACnBc,OAAQ,oBACR,sBAAuB,cACvB,gBAAiB,MACjBD,QAAS,eACT,aAAc,aACdH,MAAO,OACPC,OAAQ,OACRI,UAAW,4BAObb,EAAYc,YAAYb,GACxBR,EAAOqB,YAAYd,GAGnBN,SAASqB,KAAKD,YAAYrB,qBAmDb,MAQXuB,WAAAA,CAAYC,GACV,GADmCC,KAPrCD,aAAO,EAAAC,KACCC,QAAkB,6CAClBC,KAAAA,uBAAiC,OACjCC,kBAA4B,EAAKH,KACjCI,kBAA4B,EAC5BC,KAAAA,gBAA0B,EAoG1BC,KAAAA,cAAiBC,IACvB,IAAMC,OAAEA,EAAMC,KAAEA,GAASF,EAGzB,GAAIC,IAAWR,KAAKC,QAKpB,OAAQQ,EAAKC,QACX,IAAK,eACHV,KAAKW,mBAAmBF,EAAKA,MAC7B,MACF,IAAK,iBACHT,KAAKY,sBAAsBH,EAAKA,MAChC,MAIF,QACET,KAAKa,oBAAoBJ,EAAKA,MAEjC,EAGKE,KAAAA,mBAAsBF,IACbjC,SAASsC,eACtB,qBAGKd,KAAKI,mBACRJ,KAAKD,QAAQgB,MAAMC,UAAUP,GAC7BT,KAAKI,kBAAmB,GAE3B,EAGKQ,KAAAA,sBAAyBK,KAE5BjB,KAAKG,kBACNH,KAAKD,SACLC,KAAKD,QAAQgB,OAC2B,mBAA7Bf,KAACD,QAAQgB,MAAMG,YAE1BlB,KAAKD,QAAQgB,MAAMG,UAAUD,GAC7BjB,KAAKG,kBAAmB,EACzB,EACFH,KAEOa,oBAAuBM,KAE1BnB,KAAKK,gBACNL,KAAKD,SACLC,KAAKD,QAAQgB,OACyB,mBAA/Bf,KAAKD,QAAQgB,MAAMK,UAE1BpB,KAAKD,QAAQgB,MAAMK,QAAQD,GAC3BnB,KAAKK,gBAAiB,EACvB,GA3JIN,EACH,MAAM,IAAIsB,MAAM,0DAElBrB,KAAKD,QAAUA,EACfC,KAAKsB,qBACP,CAEAC,KAAAA,GACE,IAAMC,EAAShD,SAASsC,eACtB,mBAEEU,IACFA,EAAO5C,MAAMe,UAAY,eACzBK,KAAKyB,sBACLC,WAAW,KAAKC,IAAAA,SACdA,EAAAH,EAAOI,aAAPD,EAAmBE,YAAYL,GAC/BjD,EAAOK,MAAMa,QAAU,MAAA,EACtB,KAEP,CAEAqC,IAAAA,GACE9B,KAAKG,kBAAmB,EACxBH,KAAKI,kBAAmB,EACxBJ,KAAKK,gBAAiB,EACtBtB,EAAWH,MAAMa,QAAU,QAE3BlB,EAAOK,MAAMa,QAAU,QAEvB,IAAM+B,EAAShD,SAASC,cAAc,UACtC+C,EAAOO,aAAa,KAAM,mBAC1B/C,OAAOC,OAAOuC,EAAO5C,MAAO,CAC1BoD,QAAS,IACTzC,OAAQ,OACRJ,SAAU,WACVK,WAAY,OACZC,QAAS,OACTC,OAAQ,uBACRuC,OAAQ,MACRC,QAAS,MACTC,OAAQ,IACR7C,MAAO,OACPK,UAAW,yBAEb6B,EAAOY,YAAc,IACrBZ,EAAOO,aAAa,oBAAqB,QAGzC,IAAMM,EAAoB,OAAA,IAAIC,MAAOC,UAGrCf,EAAOgB,IAAS,GAAAxC,KAAKC,QAAUoC,EAG/B9D,EAAOqB,YAAY4B,GAGnB,IAAMiB,EAAgBC,KAAKC,UAAU3C,KAAKD,SAC1CyB,EAAOO,aAAa,iBAAkB,8BAGtCP,EAAOoB,iBAAiB,OAAQ,KAE9BlB,WAAW,KAAKmB,IAAAA,EACdA,OAAAA,EAAArB,EAAOsB,gBAAPD,EAAsBE,YAAYN,EAAe,IACnD,EAAG,KACHf,WAAW,KACT3C,EAAWH,MAAMa,QAAU,OAC3B+B,EAAO5C,MAAMa,QAAU,OACzB,EAAG,OAIL+B,EAAOoB,iBAAiB,QAAS,KAC/BI,QAAQC,MAAM,sCACdvB,WAAW,KACTF,EAAOgB,IAAG,GAAMxC,KAAKC,QAAUoC,CACjC,EAAG,IAAI,EAEX,CAEQf,mBAAAA,GACDtB,KAAKE,wBACRgD,OAAON,iBAAiB,UAAYrC,GAAUP,KAAKM,cAAcC,IACjEP,KAAKE,uBAAwB,EAEjC,CAEQuB,mBAAAA,GACFzB,KAAKE,wBACPgD,OAAOzB,oBAAoB,UAAYlB,GACrCP,KAAKM,cAAcC,IAErBP,KAAKE,uBAAwB,EAEjC"}