<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/**
 * @author Elmar Abdurayimov &lt;e.abdurayimov@gmail.com&gt;
 * @copyright 2021 PK
 *
 * https://medium.com/@ionutghisoi95/apple-pay-example-payments-1-acc2b7954b05
 * https://medium.com/@ionutghisoi95/apple-pay-example-payments-2-86ff893fdc9c
 * https://docs.checkout.com/payment-methods/wallets/apple-pay/set-up-apple-pay
 * https://aaronmastsblog.com/blog/apple-pay-certificates/
 * https://docs.spreedly.com/assets/images/apple-pay/HowApplePayWorks.png
 * https://github.com/samcorcos/apple-pay-decrypt
 * https://github.com/etsy/applepay-php
 * https://github.com/PayU-EMEA/apple-pay
 * https://aaronmastsblog.com/blog/apple-pay-certificates/
 */

var ApplePayEventMethod  = window.addEventListener ? "addEventListener" : "attachEvent";
var ApplePayEventer      = window[ ApplePayEventMethod ];
var ApplePayMessageEvent = ApplePayEventMethod == "attachEvent" ? "onmessage" : "message";

ApplePayEventer( ApplePayMessageEvent, function( evt ) {
    var data = evt.data;

    if( !data ) {
        return;
    }

    switch( data.type ) {
        case "applepay_availability":
            window.PKApplePayStripe.setFlow( 'iframe' );
            window.PKApplePayStripe.toggleUI( data.availability );
            break;

        case "applepay_result":
            window.PKApplePayStripe.setFlow( 'iframe' );
            window.PKApplePayStripe.finalize( data.result );
            break;
    }
} );

(function() {
    var ApplePayManager = function() {
        var self = this;

        self.flow = 'basic';

        self.$btn = '#action-button-applepay';
        self.$tab = 'a[href="#applepay-form"]';

        /********************************************************************
         * UI LOGIC
         ********************************************************************/

        self.showButton = function() {
            $( self.$btn ).show();
        };

        self.showTab = function() {
            $( self.$tab ).parent().show();
        };

        self.hideButton = function() {
            $( self.$btn ).hide();
        };

        self.hideTab = function() {
            $( self.$tab ).parent().hide();
        };

        self.initClick = function() {
            $( 'body' ).on( 'click', self.$btn, self.onClick );
        };

        /**
         * @param {boolean} state
         */
        self.toggleUI = function( state ) {
            self.hideButton();
            self.hideTab();

            if( state ) {
                self.showButton();
                self.showTab();
                self.initClick();
            }
        };

        /********************************************************************
         * APPLE PAY LOGIC
         ********************************************************************/

        /**
         * @param {Event} e
         */
        self.onClick = function( e ) {
            window.validateCheckoutForm();

            $( '#frmOrder' ).valid();

            if( !$( '#frmOrder' ).validate().checkForm() ) {
                return;
            }

            if( self.flow.toLowerCase() === 'basic' ) {
                self.onClickBasic();
            } else if( self.flow.toLowerCase() === 'iframe' ) {
                self.onClickIframe();
            }
        };

        self.onClickBasic = function() {
            self.start();
        };

        self.onClickIframe = function() {
            self.registerDomain( function() {
                var message = {
                    domain         : 'pk',
                    action         : 'applepay-start',
                    hash           : $( '#funnel_plan_hash' ).val(),
                    publishable_key: self.getStripeKey(),
                    config         : self.getPaymentConfig()
                };

                if( $( '[name="is_embed"]' ).val() == 1 ) {
                    window.parent.postMessage( $.extend( {}, message, { type: 'embed-form' } ), self.getLandingPageURL() );
                } else if( $( '[name="is_widget"]' ).val() == 1 ) {
                    window.parent.postMessage( $.extend( {}, message, { type: 'widget-form', funnel_plan_id: $( '#hid_funnel' ).val() } ), self.getLandingPageURL() );
                }
            } );
        };

        self.start = function() {
            var applePaySession = Stripe.applePay.buildSession( self.getPaymentConfig(), function( result, completion ) {
                completion( ApplePaySession.STATUS_SUCCESS );

                self.finalize( result );
            } );

            applePaySession.begin();
        };

        /**
         * @callback callback
         */
        self.registerDomain = function( callback ) {
            $.ajax( {
                url       : '/admin/register-applepay-domain',
                type      : 'post',
                dataType  : 'json',
                data      : {
                    product : $( '#plan' ).val(),
                    domain  : self.getHostFromUrl( self.getLandingPageURL() ),
                    currency: CheckoutPageManager.getBaseCurrency()
                },
                beforeSend: function() {
                    $( '#processingModal' ).modal( 'show' );
                },
                complete  : function() {
                    $( '#processingModal' ).modal( 'hide' );
                },
                success   : function( response ) {
                    if( response.status ) {
                        callback();
                    } else {
                        $( '#frmOrder' ).append( '&lt;div class="pk_section__notification"&gt;&lt;div class="alert alert-error alert-dismissible" role="alert"&gt;&lt;p&gt;' + response.message + '&lt;/p&gt;&lt;button aria-label="Close" class="btn btn-primary" data-dismiss="alert" type="button"&gt;&lt;i class="fa fa fa-check-circle"&gt;&lt;/i&gt; OK&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;' );
                    }
                }
            } );
        };

        /**
         * @param {Object} result
         */
        self.finalize = function( result ) {
            if( document.querySelector( '[name="stripePi"]' ) ) {
                document.querySelector( '[name="stripePi"]' ).remove();
            }

            var token = result.token;
            var card  = token.card;

            $( '#processingModal' ).modal( 'show' );

            finalize( {
                ccNum        : card.last4,
                ccExpireMonth: card.exp_month.toString().add0(),
                ccExpireYear : card.exp_year,
                stripeToken  : token.id
            } );
        };

        /**
         * @returns {boolean}
         */
        self.isAvailable = function() {
            try {
                return window.ApplePaySession &amp;&amp; ApplePaySession.canMakePayments();
            } catch( e ) {
            }

            return false;
        };

        /********************************************************************
         * GENERAL LOGIC
         ********************************************************************/

        /**
         * @returns {String}
         */
        self.getStripeKey = function() {
            return $('#stripeKey').data('value');
        };

        /**
         * @returns {String}
         */
        self.getHostFromUrl = function( url ) {
            var hostname;

            if( url.indexOf( "//" ) &gt; -1 ) {
                hostname = url.split( '/' )[ 2 ];
            } else {
                hostname = url.split( '/' )[ 0 ];
            }

            hostname = hostname.split( ':' )[ 0 ];
            hostname = hostname.split( '?' )[ 0 ];

            return hostname;
        };

        /**
         * @returns {String}
         */
        self.getLandingPageURL = function() {
            return $( '#landing_page' ).val() || document.referrer;
        };

        /**
         * @returns {Object}
         */
        self.getPaymentConfig = function() {
            let body = $('body');
            return {
                currencyCode        : CheckoutPageManager.getActiveCurrency() || CheckoutPageManager.getBaseCurrency(),
                countryCode         : body.data('base-country') || 'US',
                merchantCapabilities: [ 'supports3DS', 'supportsEMV', 'supportsCredit', 'supportsDebit' ],
                supportedNetworks   : [ 'visa', 'masterCard', 'amex', 'discover' ],
                total               : {
                    label : body.data('campaign-name'),
                    amount: +CheckoutPageManager.getTotalPriceNoFormat().toFixed(2)
                }
            };
        };

        /**
         * @param {String} flow
         */
        self.setFlow = function( flow ) {
            self.flow = flow;
        };

        /**
         * @returns {this}
         */
        self.init = function() {
            Stripe.setPublishableKey( self.getStripeKey() );

            self.toggleUI( self.isAvailable() );

            return self;
        };
    };

    window.PKApplePayStripe = (new ApplePayManager).init();
})();
</pre></body></html>