{"version":3,"file":"../../js/llms-stripe.min.js","sources":["llms-stripe.js"],"sourcesContent":["/**\n * LifterLMS Stripe JS payment gateway\n *\n * @package LifterLMS_Stripe/Scripts\n *\n * @since 4.0.0\n */\n\n/**\n * Stripe Payment gateway JS\n *\n * @since 4.0.0\n * @since 4.3.2 Unknown.\n * @since 5.0.0 Handle 3DS/SCA authorizations.\n */\n( function( $ ) {\n\n\tvar llms_stripe = window.llms_stripe || {},\n\t\tcustomer = llms_stripe.customer || {},\n\t\tstripe = llms_stripe.account_id ?\n\t\t\tStripe( llms_stripe.publishable_key, { stripeAccount: llms_stripe.account_id } ) :\n\t\t\tStripe( llms_stripe.publishable_key ),\n\t\telements = stripe.elements( llms_stripe.settings.elements ),\n\t\tcard = elements.create( 'card', llms_stripe.settings.card );\n\n\tllms_stripe.customer = {};\n\n\t/**\n\t * Bind DOM events\n\t *\n\t * @since 4.0.0\n\t * @since 4.3.2 Unknown.\n\t * @since 5.0.0 Handle 3DS/SCA authorizations.\n\t */\n\tllms_stripe.bind = function() {\n\n\t\tvar self = this;\n\n\t\t// add token creation & cc validation to core before submit validations.\n\t\twindow.llms.checkout.add_before_submit_event( {\n\t\t\tdata: self,\n\t\t\thandler: self.submit,\n\t\t} );\n\n\t\tif ( $( '#llms-stripe-card-element' ).length ) {\n\n\t\t\tself.mount_card();\n\n\t\t}\n\n\t\t// saved card dropdown interactions.\n\t\t$( '#llms_stripe_saved_card_id' ).on( 'change', function() {\n\n\t\t\tvar card_id = $( this ).val(),\n\t\t\t\t$card_id = $( '#llms_stripe_card_id' );\n\n\t\t\t// remove the existing card ID (if there is one) & mount the Stripe Element.\n\t\t\tif ( 'create-new' === card_id ) {\n\n\t\t\t\t$card_id.val( '' );\n\t\t\t\tcard.mount( '#llms-stripe-card-element' );\n\t\t\t\tself.toggle_submit( false );\n\n\t\t\t\t// unmount the element and set the card ID to be the selected card ID.\n\t\t\t} else {\n\n\t\t\t\t$card_id.val( card_id );\n\t\t\t\tcard.unmount();\n\t\t\t\tself.toggle_submit( true );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t$( '#llms_billing_zip' ).on( 'blur', function() {\n\n\t\t\tcard.update( {\n\t\t\t\tvalue: {\n\t\t\t\t\tpostalCode: $( '#llms_billing_zip' ).val(),\n\t\t\t\t},\n\t\t\t} );\n\n\t\t} ).trigger( 'blur' );\n\n\t\t// trigger saved card field change on pageload.\n\t\t$( '#llms_stripe_saved_card_id' ).trigger( 'change' );\n\n\t\t// when stripe is selected we should trigger a saved card change.\n\t\t$( '.llms-payment-gateways' ).on( 'llms-gateway-selected', function( e, data ) {\n\t\t\tif ( 'stripe' === data.id ) {\n\n\t\t\t\tif ( card._complete ) {\n\t\t\t\t\tself.toggle_submit( true );\n\t\t\t\t} else {\n\t\t\t\t\tself.toggle_submit( false );\n\t\t\t\t}\n\n\t\t\t\t$( '#llms_stripe_saved_card_id' ).trigger( 'change' );\n\n\t\t\t\tif ( 'create-new' !== $( '#llms_stripe_saved_card_id' ).val() ) {\n\t\t\t\t\tcard.focus();\n\t\t\t\t}\n\n\t\t\t}\n\t\t} );\n\n\t\tif ( llms.checkout.$confirm_form.length && 'stripe' === $( '#llms-payment-gateway' ).val() ) {\n\n\t\t\tllms.checkout.processing( 'start' );\n\n\t\t\t// On the order confirmation screen this hidden field will be a redirect URL.\n\t\t\tvar $intent_cs = $( '#llms-stripe-intent-cs' );\n\t\t\tif ( $intent_cs.length ) {\n\t\t\t\tself.bind_confirmation( $intent_cs.val() );\n\t\t\t} else {\n\t\t\t\tllms.checkout.$confirm_form.submit();\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t/**\n\t * Handle SCA/3DS authorization.\n\t *\n\t * @since 5.0.0\n\t *\n\t * @param {string} intent_cs Payment Intent client secret key.\n\t */\n\tllms_stripe.bind_confirmation = function( intent_cs ) {\n\n\t\tvar func;\n\t\tif ( 0 === intent_cs.indexOf( 'pi_' ) ) {\n\t\t\tfunc = 'handleCardPayment';\n\t\t} else if ( 0 === intent_cs.indexOf( 'seti_' ) ) {\n\t\t\tfunc = 'handleCardSetup';\n\t\t}\n\n\t\tstripe[ func ]( intent_cs ).then( function() {\n\n\t\t\tllms.checkout.$confirm_form.submit();\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Mount the card\n\t *\n\t * @since 4.3.2\n\t */\n\tllms_stripe.mount_card = function() {\n\n\t\t// Add an instance of the card UI component into the `card-element`
.\n\t\tcard.mount( '#llms-stripe-card-element' );\n\n\t\t// do stuff when the card is updated.\n\t\tcard.addEventListener( 'change', function( event ) {\n\n\t\t\t// show error messages when an error exists.\n\t\t\tif ( event.error ) {\n\n\t\t\t\tllms_stripe.set_error( event.error.message );\n\n\t\t\t\t// clear error messages.\n\t\t\t} else {\n\n\t\t\t\tllms_stripe.set_error( '' );\n\n\t\t\t}\n\n\t\t\t// enable the checkout button.\n\t\t\tif ( event.complete ) {\n\t\t\t\tllms_stripe.toggle_submit( true );\n\t\t\t} else {\n\t\t\t\tllms_stripe.toggle_submit( false );\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Enable/Disable the checkout/update submit button\n\t *\n\t * @since 4.3.0\n\t *\n\t * @param {boolean} toggle if truthie enables, if falsie, disables.\n\t */\n\tllms_stripe.toggle_submit = function( toggle ) {\n\n\t\tvar $btns = $( '#llms_create_pending_order, #llms_save_payment_method' );\n\n\t\tif ( toggle ) {\n\t\t\t$btns.removeAttr( 'disabled' );\n\t\t} else {\n\t\t\t$btns.attr( 'disabled', 'disabled' );\n\t\t}\n\n\t};\n\n\t/**\n\t * Retrieve an object of customer information to pass to Stripe when creating a token\n\t *\n\t * @since 4.3.3\n\t * @since 5.6.0 Added 'email' in customer data object.\n\t *\n\t * @return {Object} Customer information.\n\t */\n\tllms_stripe.get_customer_data = function() {\n\n\t\tvar params = {\n\t\t\t\tname: [ '#first_name', '#last_name' ],\n\t\t\t\taddress_line1: '#llms_billing_address_1',\n\t\t\t\taddress_line2: '#llms_billing_address_2',\n\t\t\t\taddress_city: '#llms_billing_city',\n\t\t\t\taddress_state: '#llms_billing_state',\n\t\t\t\taddress_zip: '#llms_billing_zip',\n\t\t\t\taddress_country: '#llms_billing_country',\n\t\t\t\temail: '#email_address',\n\t\t\t},\n\t\t\tobj = customer,\n\t\t\tkey;\n\n\t\tfor ( key in params ) {\n\n\t\t\tif ( ! params.hasOwnProperty( key ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar type = typeof params[ key ],\n\t\t\t\tstr = '';\n\n\t\t\tif ( 'string' === type ) {\n\n\t\t\t\tstr = get_field_val( params[ key ] );\n\n\t\t\t} else if ( 'object' === type ) {\n\n\t\t\t\tvar len = type.length;\n\t\t\t\tfor ( var i = 0; i <= len; i++ ) {\n\t\t\t\t\tvar val = get_field_val( params[ key ][ i ] );\n\t\t\t\t\tif ( false !== val ) {\n\t\t\t\t\t\tstr += ' ' + val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstr.trim();\n\n\t\t\t}\n\n\t\t\tif ( false !== str && str ) {\n\n\t\t\t\tobj[ key ] = str.trim();\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn obj;\n\n\t};\n\n\t/**\n\t * Retrieve field data by selector\n\t *\n\t * @since 4.3.3\n\t *\n\t * @param {string} selector jQuery selector.\n\t * @return {string|false} Field value or false.\n\t */\n\tvar get_field_val = function( selector ) {\n\n\t\tvar $field = $( selector );\n\t\tif ( $field.length && $field.val() ) {\n\n\t\t\treturn $field.val().trim();\n\n\t\t}\n\n\t\treturn false;\n\n\t};\n\n\t/**\n\t * Retrieve a token using Stripe.js (ASYNC)\n\t *\n\t * @since 3.0.0\n\t * @since 4.3.3 Unknown.\n\t *\n\t * @param {Function} callback callback function which 2 params: success object & error object.\n\t */\n\tllms_stripe.get_token = function( callback ) {\n\n\t\tstripe.createToken( card, this.get_customer_data() ).then( function( result ) {\n\n\t\t\t// show error.\n\t\t\tif ( result.error ) {\n\n\t\t\t\tcallback( null, result.error );\n\n\t\t\t\t// add the token to the dom.\n\t\t\t} else {\n\n\t\t\t\tcallback( result.token );\n\n\t\t\t}\n\n\t\t} );\n\n\t};\n\n\t/**\n\t * Determine if Stripe is selected on the list of available payment methods\n\t *\n\t * @since 2.0.0\n\t * @since 4.0.0 Unknown\n\t *\n\t * @return {boolean} true if Stripe is selected, false otherwise.\n\t */\n\tllms_stripe.is_selected = function() {\n\n\t\t// check the payment method radio element to see if it's checked.\n\t\treturn $( '#llms_payment_gateway_stripe' ).is( ':checked' );\n\n\t};\n\n\t/**\n\t * Add a Stripe Eleents error message\n\t *\n\t * @since 4.3.0\n\t *\n\t * @param {string} msg error message.\n\t */\n\tllms_stripe.set_error = function( msg ) {\n\n\t\tvar el = document.getElementById( 'llms-stripe-card-errors' );\n\t\tel.textContent = msg;\n\n\t};\n\n\t/**\n\t * Handle checkout submission to retrieve a token when Stripe is the selected gateway\n\t *\n\t * @since 4.0.0\n\t * @since 4.3.0 Unknown.\n\t * @since 5.0.0 Remove unused declaration for `$form` var.\n\t *\n\t * @param {Object} self LifterLMS Stripe js object.\n\t * @param {Function} callback Callback function.\n\t */\n\tllms_stripe.submit = function( self, callback ) {\n\n\t\tvar $saved = $( '#llms_stripe_saved_card_id' ),\n\t\t\tresponse = true;\n\n\t\t// don't proceed unless stripe is selected.\n\t\tif ( ! self.is_selected() ) {\n\t\t\tcallback( response );\n\t\t\treturn;\n\t\t}\n\n\t\t// skip if we're using a saved Card ID.\n\t\tif ( $saved.length && 'create-new' !== $saved.val() ) {\n\t\t\tcallback( response );\n\t\t\treturn;\n\t\t}\n\n\t\t// get a token.\n\t\tllms_stripe.get_token( function( token, err ) {\n\n\t\t\t// error.\n\t\t\tif ( ! token ) {\n\n\t\t\t\tresponse = err.message;\n\n\t\t\t\t// success.\n\t\t\t} else if ( token ) {\n\n\t\t\t\t$( '#llms_stripe_token' ).val( token.id );\n\t\t\t\t$( '#llms_stripe_card_id' ).val( token.card.id );\n\n\t\t\t}\n\n\t\t\tcallback( response );\n\n\t\t} );\n\n\t};\n\n\t// add this object to the core checkout class for future binds.\n\twindow.llms.checkout.add_gateway( llms_stripe );\n\n\tllms_stripe.bind();\n\n}( jQuery ) );\n"],"names":["$","llms_stripe","window","customer","stripe","account_id","Stripe","publishable_key","stripeAccount","card","elements","settings","create","bind","$intent_cs","self","this","llms","checkout","add_before_submit_event","data","handler","submit","length","mount_card","on","card_id","val","$card_id","mount","toggle_submit","unmount","update","value","postalCode","trigger","e","id","_complete","focus","$confirm_form","processing","bind_confirmation","intent_cs","func","indexOf","then","addEventListener","event","error","set_error","message","complete","toggle","$btns","removeAttr","attr","get_customer_data","key","params","name","address_line1","address_line2","address_city","address_state","address_zip","address_country","email","obj","hasOwnProperty","type","str","get_field_val","len","i","trim","selector","$field","get_token","callback","createToken","result","token","is_selected","is","msg","document","getElementById","textContent","$saved","response","err","add_gateway","jQuery"],"mappings":"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","sourceRoot":"../../js"}