{"version":3,"sources":["../node_modules/promise-polyfill/src/finally.js","../node_modules/promise-polyfill/src/index.js","payit.js"],"names":["finallyConstructor","callback","constructor","then","value","resolve","reason","reject","Promise","setTimeoutFunc","setTimeout","noop","bind","fn","thisArg","apply","arguments","TypeError","_state","_handled","_value","undefined","_deferreds","doResolve","handle","self","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","e","promise","push","newValue","finale","length","_unhandledRejectionFn","i","len","Handler","done","ex","prototype","prom","promiseFinally","all","arr","args","Array","slice","call","remaining","res","val","race","values","setImmediate","err","console","warn","buildResponseObject","code","message","data","responseCode","responseMessage","hasOwnPropertyHelper","object","propertyName","Object","hasOwnProperty","validateConfig","config","customValidators","errors","validateEnvironment","environment","SANDBOX","TEST","PRODUCTION","LOCAL","forEach","validator","validationMessage","isArray","buildLoaderDOM","brandColor","loadingPulseOuter","document","createElement","classList","add","setAttribute","loadingPulseInner","loadingA11yLabel","container","appendChild","invokeIFrame","route","IFRAME_NAME","formToPostToFrame","getBaseURLByEnvironment","getEnvironmentNameFromPublicName","keys","key","input","JSON","stringify","iframe","body","submit","removeChild","destroyIFrame","remove","injectCSS","styleTag","innerHTML","head","exposedInterface","checkout","methodConfigValidation","configErrors","refToIframe","appName","loadingIndicator","window","onmessage","event","response","parse","paymentMethods","documents","payit"],"mappings":"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","file":"payit.map","sourceRoot":"../src","sourcesContent":["/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n return constructor.resolve(callback()).then(function() {\n return constructor.reject(reason);\n });\n }\n );\n}\n\nexport default finallyConstructor;\n","import promiseFinally from './finally';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n this._state = 0;\n /** @type {!boolean} */\n this._handled = false;\n /** @type {Promise|undefined} */\n this._value = undefined;\n /** @type {!Array} */\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(values) {\n return new Promise(function(resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n (typeof setImmediate === 'function' &&\n function(fn) {\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n","import Promise from 'promise-polyfill';\n\n(() => {\n function buildResponseObject(code, message, data) {\n return {\n responseCode: code,\n responseMessage: message,\n data,\n };\n }\n\n function injectCSS() {\n const css = `\n .pit-loader-label {\n display: none;\n }\n .pit-loader-container {\n background-color: #FFFFFF;\n border-radius: 12px;\n box-shadow: 0 2px 4px 0 rgba(0,0,0,0.2);\n height: 128px;\n left: 50%;\n position: absolute;\n padding: 64px;\n position: relative;\n top: 50vh;\n transform: translate(-50%, -50%);\n width: 128px;\n }\n .pit-loader-outer,\n .pit-loader-inner {\n border-radius: 2000px;\n animation-direction: alternate;\n animation-duration: 0.75s;\n animation-iteration-count: infinite;\n animation-name: loader;\n left: 50%;\n position: absolute;\n top: 50%;\n transform-origin: 0 0;\n }\n .pit-loader-outer {\n animation-delay: 0.125s;\n height: 64px;\n width: 64px;\n z-index: 1;\n transform: scale(1) translate(-50%, -50%);\n }\n .pit-loader-inner {\n background-color: #FFFFFF;\n height: 56px;\n width: 56px;\n z-index: 2;\n transform: scale(1) translate(-50%, -50%);\n }\n @keyframes loader {\n from {\n transform: scale(1) translate(-50%, -50%);\n }\n to {\n transform: scale(0.6) translate(-50%, -50%);\n }\n }\n .payit_iframe_container {\n background-color: #F5F5F5;\n border: 1px solid #E5E5E5;\n bottom: 0;\n box-shadow: 0 -2px 4px 0 rgba(0,0,0,0.2);\n height: 100%;\n left: 0;\n position: fixed;\n right: 0;\n transform: translateY(100%);\n transition: transform .125s;\n top: 0;\n width: 100%;\n }\n .payit_iframe_container-active {\n transform: translateY(0);\n }\n .payit_form { display: none; }\n `;\n const styleTag = document.createElement('style');\n styleTag.innerHTML = css;\n document.head.appendChild(styleTag);\n }\n\n function hasOwnPropertyHelper(object, propertyName) {\n return Object.prototype.hasOwnProperty.call(object, propertyName);\n }\n\n function validateEnvironment(environment) {\n const environments = {\n SANDBOX: 'SANDBOX',\n TEST: 'TEST',\n PRODUCTION: 'PRODUCTION',\n LOCAL: 'LOCAL',\n };\n if (!environments[environment]) {\n return `Invalid environment: ${environment} was specified`;\n }\n return undefined;\n }\n\n function getBaseConfigValidation() {\n return [\n config => hasOwnPropertyHelper(config, 'appName')\n ? undefined\n : 'appName is required',\n config => hasOwnPropertyHelper(config, 'environment')\n ? undefined\n : 'environment is required.',\n config => validateEnvironment(config.environment),\n ];\n }\n\n function validateConfig(config, customValidators) {\n const errors = [];\n const baseConfigValidation = getBaseConfigValidation();\n baseConfigValidation.forEach((validator) => {\n const validationMessage = validator(config);\n if (validationMessage) {\n errors.push(validationMessage);\n }\n });\n if (customValidators && Array.isArray(customValidators)) {\n customValidators.forEach((validator) => {\n const validationMessage = validator(config);\n if (validationMessage) {\n errors.push(validationMessage);\n }\n });\n }\n if (!errors.length) {\n return undefined;\n }\n return errors;\n }\n\n function getBaseURLByEnvironment(environment) {\n const urls = {\n SANDBOX: 'https://api-dev.mobilgov.com',\n TEST: 'https://api-staging.mobilgov.com',\n PRODUCTION: 'https://api.mobilgov.com',\n LOCAL: 'http://localhost:3000',\n };\n return urls[environment];\n }\n\n function getEnvironmentNameFromPublicName(name) {\n const environmentNames = {\n PRODUCTION: 'PROD',\n TEST: 'STAGING',\n SANDBOX: 'DEV',\n LOCAL: 'DEV',\n };\n return environmentNames[name];\n }\n\n function buildLoaderDOM(brandColor) {\n let _brandColor = brandColor;\n if (!brandColor) {\n _brandColor = '#026CFD';\n }\n const loadingPulseOuter = document.createElement('div');\n loadingPulseOuter.classList.add('pit-loader-outer');\n loadingPulseOuter.setAttribute('style', `background-color: ${brandColor}`);\n const loadingPulseInner = document.createElement('div');\n loadingPulseInner.classList.add('pit-loader-inner');\n const loadingA11yLabel = document.createElement('p');\n loadingA11yLabel.classList.add('pit-loader-label');\n const container = document.createElement('div');\n container.classList.add('pit-loader-container');\n container.appendChild(loadingPulseOuter);\n container.appendChild(loadingPulseInner);\n container.appendChild(loadingA11yLabel);\n return container;\n }\n\n function invokeIFrame(config, route) {\n const IFRAME_NAME = 'payitIFrame';\n const formToPostToFrame = document.createElement('form');\n formToPostToFrame.setAttribute('method', 'post');\n formToPostToFrame.classList.add('payit_form');\n formToPostToFrame.setAttribute(\n 'action',\n `${getBaseURLByEnvironment(config.environment)}${route}?environment=${getEnvironmentNameFromPublicName(config.environment)}`\n );\n Object.keys(config).forEach((key) => {\n const input = document.createElement('input');\n input.setAttribute('name', key);\n if (typeof config[key] !== 'string') {\n input.setAttribute('value', JSON.stringify(config[key]));\n } else {\n input.setAttribute('value', config[key]);\n }\n formToPostToFrame.appendChild(input);\n });\n formToPostToFrame.setAttribute('target', IFRAME_NAME);\n\n const iframe = document.createElement('iframe');\n iframe.setAttribute('name', IFRAME_NAME);\n iframe.classList.add('payit_iframe_container');\n setTimeout(() => {\n iframe.classList.add('payit_iframe_container-active');\n }, 125);\n document.body.appendChild(iframe);\n document.body.appendChild(formToPostToFrame);\n formToPostToFrame.submit();\n document.body.removeChild(formToPostToFrame);\n return iframe;\n }\n function destroyIFrame(iframe) {\n iframe.classList.remove('payit_iframe_container-active');\n setTimeout(\n () => document.body.removeChild(iframe),\n 125\n );\n }\n\n /*\n Invokes a checkout view within an iFrame\n Expects data = {\n authToken: string(optional),\n brandColor: string(optional),\n emailAddress: string,\n environment: string,\n lineItems: [\n {\n label: string,\n description: string,\n value: int(pennies),\n serviceOfferingId: string,\n uniqueExternalId: string,\n },\n ],\n }\n Returns a promise\n */\n function checkout(config) {\n const methodConfigValidation = [\n config => hasOwnPropertyHelper(config, 'emailAddress')\n ? undefined\n : 'emailAddress is required',\n config => hasOwnPropertyHelper(config, 'line_items')\n ? undefined\n : 'line_items are required',\n ];\n return new Promise((resolve, reject) => {\n const configErrors = validateConfig(config, methodConfigValidation);\n if (configErrors) {\n return reject(buildResponseObject(2, `Invalid configuration ${JSON.stringify(configErrors)}`));\n }\n const refToIframe = invokeIFrame(\n config,\n `/sdk/app/${config.appName}/checkout`\n );\n const loadingIndicator = buildLoaderDOM(config.brandColor);\n document.body.appendChild(loadingIndicator);\n window.onmessage = (event) => {\n const response = JSON.parse(event.data);\n if (response.responseCode === 3) {\n document.body.removeChild(loadingIndicator);\n return;\n }\n if (response.responseCode === 1) {\n resolve(response);\n } else {\n reject(response);\n }\n destroyIFrame(refToIframe);\n };\n });\n }\n\n /*\n Invokes a checkout view within an iFrame\n Expects data = {\n authToken: string,\n brandColor: string(optional),\n environment: string,\n }\n Returns a promise\n */\n function paymentMethods(config) {\n const methodConfigValidation = [\n config => hasOwnPropertyHelper(config, 'authToken')\n ? undefined\n : 'authToken is required',\n ];\n const configErrors = validateConfig(config, methodConfigValidation);\n return new Promise((resolve, reject) => {\n if (configErrors) {\n return reject(buildResponseObject(2, `Invalid configuration ${JSON.stringify(configErrors)}`));\n }\n const refToIframe = invokeIFrame(\n config,\n `/sdk/app/${config.appName}/payment-methods`\n );\n const loadingIndicator = buildLoaderDOM(config.brandColor);\n document.body.appendChild(loadingIndicator);\n window.onmessage = (event) => {\n const response = JSON.parse(event.data);\n if (response.responseCode === 3) {\n document.body.removeChild(loadingIndicator);\n return;\n } else if (response.responseCode === 1) {\n resolve(response);\n } else {\n reject(response);\n }\n destroyIFrame(refToIframe);\n };\n });\n }\n\n function documents() {\n return new Promise((resolve, reject) => {\n resolve();\n });\n }\n\n injectCSS();\n const exposedInterface = {\n checkout,\n paymentMethods,\n documents,\n };\n if (window) {\n window.payit = exposedInterface;\n }\n})();\n"]}