Plugin Directory

Changeset 3314922


Ignore:
Timestamp:
06/19/2025 11:20:57 PM (10 months ago)
Author:
weeconnectpay
Message:

Deploying version 3.14.4 from pipeline

Location:
weeconnectpay
Files:
639 added
6 edited

Legend:

Unmodified
Added
Removed
  • weeconnectpay/trunk/README.txt

    r3306759 r3314922  
    66Author: WeeConnectPay
    77Contributors: weeconnectpay
    8 Stable Tag: 3.14.2
     8Stable Tag: 3.14.4
    99Requires at least: 5.6
    1010Tested Up To: 6.8.1
     
    128128
    129129== Changelog ==
     130= 3.14.4 =
     131* Enhanced payment gateway compatibility with improved event handling for multi-gateway environments
     132* Optimized checkout flow to ensure seamless operation alongside other payment methods
     133* Improved payment method detection and processing logic for better merchant experience
     134
    130135= 3.14.2 =
    131136* Enhanced logging security with improved file protection and unpredictable naming
  • weeconnectpay/trunk/dist/js/payment-fields.js

    r3246734 r3314922  
    437437            const jQueryCheckoutForm = jQuery('form.checkout');
    438438            jQueryCheckoutForm.on('checkout_place_order', function (event) {
     439                const jQueryPaymentMethod = jQuery('input[name="payment_method"]:checked').val();
     440                if (jQueryPaymentMethod !== 'weeconnectpay') {
     441                    return true;
     442                }
    439443                if (canSubmit()) {
    440444                    return true;
     
    443447                    event.preventDefault();
    444448                }
    445                 const jQueryPaymentMethod = jQuery('input[name="payment_method"]:checked').val();
    446                 if (jQueryPaymentMethod === 'weeconnectpay') {
    447                     // TEMPORARY RATE LIMIT FAILSAFE FOR CLOVER SDK
    448                     if (canCallCreateToken()) {
    449                         // Use the iframe's tokenization method with the user-entered card details
    450                         clover.createToken()
    451                             .then(function (tokenDataEvent) {
    452                             const result = tokenDataEvent;
    453                             // console.log('Clover tokenization result: ', result);
    454                             if (result.errors) {
    455                                 handleTokenCreationErrors(result);
    456                             }
    457                             else if (result.token) {
    458                                 cloverTokenHandler(result.token);
    459                                 const cardBrand = result.card?.brand ?? '';
    460                                 const expMonth = result.card?.exp_month ?? '';
    461                                 const expYear = result.card?.exp_year ?? '';
    462                                 const last4 = result.card?.last4 ?? '';
    463                                 saveCardBrandToForm(cardBrand);
    464                                 saveCardLast4ToForm(last4);
    465                                 saveCardExpMonthToForm(expMonth);
    466                                 saveCardExpYearToForm(expYear);
    467                                 cloverTokenizedDataVerificationHandler(result);
    468                                 maybeExecuteGoogleRecaptcha(jQueryCheckoutForm, state);
    469                             }
    470                             else {
    471                                 throw new Error('Something went wrong tokenizing the card. Payment will not be processed.');
    472                             }
    473                         });
    474                     }
    475                     else {
    476                         const result = {
    477                             errors: {
    478                                 CARD_NUMBER: "Rate Limit Exceeded! Try again in 5 seconds."
    479                             }
    480                         };
    481                         handleTokenCreationErrors(result);
    482                         console.warn('Rate limit exceeded: clover.createToken() not called.');
    483                         return false;
    484                     }
     449                // TEMPORARY RATE LIMIT FAILSAFE FOR CLOVER SDK
     450                if (canCallCreateToken()) {
     451                    // Use the iframe's tokenization method with the user-entered card details
     452                    clover.createToken()
     453                        .then(function (tokenDataEvent) {
     454                        const result = tokenDataEvent;
     455                        // console.log('Clover tokenization result: ', result);
     456                        if (result.errors) {
     457                            handleTokenCreationErrors(result);
     458                        }
     459                        else if (result.token) {
     460                            cloverTokenHandler(result.token);
     461                            const cardBrand = result.card?.brand ?? '';
     462                            const expMonth = result.card?.exp_month ?? '';
     463                            const expYear = result.card?.exp_year ?? '';
     464                            const last4 = result.card?.last4 ?? '';
     465                            saveCardBrandToForm(cardBrand);
     466                            saveCardLast4ToForm(last4);
     467                            saveCardExpMonthToForm(expMonth);
     468                            saveCardExpYearToForm(expYear);
     469                            cloverTokenizedDataVerificationHandler(result);
     470                            maybeExecuteGoogleRecaptcha(jQueryCheckoutForm, state);
     471                        }
     472                        else {
     473                            throw new Error('Something went wrong tokenizing the card. Payment will not be processed.');
     474                        }
     475                    });
    485476                }
    486477                else {
    487                     return true;
     478                    const result = {
     479                        errors: {
     480                            CARD_NUMBER: "Rate Limit Exceeded! Try again in 5 seconds."
     481                        }
     482                    };
     483                    handleTokenCreationErrors(result);
     484                    console.warn('Rate limit exceeded: clover.createToken() not called.');
     485                    return false;
    488486                }
    489487                return false;
     
    493491            const jQueryOrderPayForm = jQuery('form#order_review');
    494492            jQueryOrderPayForm.on('submit', function (event) {
     493                const jQueryPaymentMethod = jQuery('input[name="payment_method"]:checked').val();
     494                if (jQueryPaymentMethod !== 'weeconnectpay') {
     495                    return true;
     496                }
    495497                if (canSubmit()) {
    496498                    return true;
     
    499501                    event.preventDefault();
    500502                }
    501                 const jQueryPaymentMethod = jQuery('input[name="payment_method"]:checked').val();
    502                 if (jQueryPaymentMethod === 'weeconnectpay') {
    503                     // TEMPORARY RATE LIMIT FAILSAFE FOR CLOVER SDK
    504                     if (canCallCreateToken()) {
    505                         clover.createToken()
    506                             .then(function (tokenDataEvent) {
    507                             const result = tokenDataEvent;
    508                             if (result.errors) {
    509                                 handleTokenCreationErrors(result);
    510                             }
    511                             else if (result.token) {
    512                                 cloverTokenHandler(result.token);
    513                                 const cardBrand = result.card?.brand ?? '';
    514                                 const expMonth = result.card?.exp_month ?? '';
    515                                 const expYear = result.card?.exp_year ?? '';
    516                                 const last4 = result.card?.last4 ?? '';
    517                                 saveCardBrandToForm(cardBrand);
    518                                 saveCardLast4ToForm(last4);
    519                                 saveCardExpMonthToForm(expMonth);
    520                                 saveCardExpYearToForm(expYear);
    521                                 cloverTokenizedDataVerificationHandler(result);
    522                                 maybeExecuteGoogleRecaptcha(jQueryOrderPayForm, state);
    523                             }
    524                             else {
    525                                 throw new Error('Something went wrong tokenizing the card. Payment will not be processed.');
    526                             }
    527                         });
    528                     }
    529                     else {
    530                         const result = {
    531                             errors: {
    532                                 CARD_NUMBER: "Rate Limit Exceeded! Try again in 5 seconds."
    533                             }
    534                         };
    535                         handleTokenCreationErrors(result);
    536                         console.warn('Rate limit exceeded: clover.createToken() not called.');
    537                     }
     503                // TEMPORARY RATE LIMIT FAILSAFE FOR CLOVER SDK
     504                if (canCallCreateToken()) {
     505                    clover.createToken()
     506                        .then(function (tokenDataEvent) {
     507                        const result = tokenDataEvent;
     508                        if (result.errors) {
     509                            handleTokenCreationErrors(result);
     510                        }
     511                        else if (result.token) {
     512                            cloverTokenHandler(result.token);
     513                            const cardBrand = result.card?.brand ?? '';
     514                            const expMonth = result.card?.exp_month ?? '';
     515                            const expYear = result.card?.exp_year ?? '';
     516                            const last4 = result.card?.last4 ?? '';
     517                            saveCardBrandToForm(cardBrand);
     518                            saveCardLast4ToForm(last4);
     519                            saveCardExpMonthToForm(expMonth);
     520                            saveCardExpYearToForm(expYear);
     521                            cloverTokenizedDataVerificationHandler(result);
     522                            maybeExecuteGoogleRecaptcha(jQueryOrderPayForm, state);
     523                        }
     524                        else {
     525                            throw new Error('Something went wrong tokenizing the card. Payment will not be processed.');
     526                        }
     527                    });
    538528                }
    539529                else {
    540                     return true;
     530                    const result = {
     531                        errors: {
     532                            CARD_NUMBER: "Rate Limit Exceeded! Try again in 5 seconds."
     533                        }
     534                    };
     535                    handleTokenCreationErrors(result);
     536                    console.warn('Rate limit exceeded: clover.createToken() not called.');
    541537                }
    542538                return false;
  • weeconnectpay/trunk/payment-fields-blocks/assets/js/frontend/blocks.asset.php

    r3246734 r3314922  
    1 <?php return array('dependencies' => array('react', 'wc-blocks-registry', 'wc-settings', 'wp-html-entities', 'wp-i18n'), 'version' => 'aea5c9b40104c8a2404f');
     1<?php return array('dependencies' => array('react', 'wc-blocks-registry', 'wc-settings', 'wp-html-entities', 'wp-i18n'), 'version' => 'f278b222d3a2cd183a4f');
  • weeconnectpay/trunk/payment-fields-blocks/assets/js/frontend/blocks.js

    r3246734 r3314922  
    1 !function(){"use strict";var e={20:function(e,t,r){var o=r(609),n=Symbol.for("react.element"),a=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),s=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function i(e,t,r){var o,i={},l=null,d=null;for(o in void 0!==r&&(l=""+r),void 0!==t.key&&(l=""+t.key),void 0!==t.ref&&(d=t.ref),t)a.call(t,o)&&!c.hasOwnProperty(o)&&(i[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps)void 0===i[o]&&(i[o]=t[o]);return{$$typeof:n,type:e,key:l,ref:d,props:i,_owner:s.current}}t.jsx=i,t.jsxs=i},609:function(e){e.exports=window.React},848:function(e,t,r){e.exports=r(20)}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}var o,n,a,s=r(848);!function(e){e.CARD="CARD",e.CVV="CARD_CVV",e.DATE="CARD_DATE",e.NUMBER="CARD_NUMBER",e.POSTAL_CODE="CARD_POSTAL_CODE",e.STREET_ADDRESS="CARD_STREET_ADDRESS",e.PAYMENT_REQUEST_BUTTON="PAYMENT_REQUEST_BUTTON"}(o||(o={})),function(e){e.NUMBER="weeconnectpay-card-number",e.DATE="weeconnectpay-card-date",e.CVV="weeconnectpay-card-cvv",e.ZIP="weeconnectpay-card-postal-code",e.PAYMENT_REQUEST_BUTTON="weeconnectpay-payment-request-button"}(n||(n={})),function(e){e.NUMBER="weeconnectpay-card-number-errors",e.DATE="weeconnectpay-card-date-errors",e.CVV="weeconnectpay-card-cvv-errors",e.ZIP="weeconnectpay-card-postal-code-errors",e.PAYMENT_REQUEST_BUTTON="weeconnectpay-payment-request-button-errors"}(a||(a={}));var c=r(609),i=window.wc.wcSettings,l=window.wc.wcBlocksRegistry,d=window.wp.htmlEntities,p=window.wp.i18n;class u{constructor(e){this.getLocalizedCvvPlaceholderStyles=e=>{let t={};if("fr-CA"===e){const e=document.getElementById(n.CVV);e?t=e.offsetWidth>=106||0===e.offsetWidth?{whiteSpace:"pre-line",position:"relative"}:{whiteSpace:"pre-line",position:"relative",top:"-7px"}:console.warn("WeeConnectPay could not detect the CVV element during Styles creation. CVV Element placeholder may look off-center depending on your locale.")}else t={};return t},this.cloverConfig=e,this.verifyCloverSdkIsLoaded(),this.getPakmsOrFail(e.pakms),this.cloverInstance=this.createCloverInstance(e.pakms,e.locale,e.merchantId)}static getInstance(e){if(!this.instance){if(!e)throw console.error("Clover settings must be provided for initialization."),new Error("Clover settings must be provided for initialization.");this.instance=new u(e)}return this.instance}createCloverInstance(e,t,r){try{return new Clover(e,{locale:t,merchantId:r})}catch(e){const t=`WeeConnectPay failed to initialize Clover instance: ${e.message}`;throw console.error(t),new Error(t)}}getCloverInstance(){return this.cloverInstance}verifyCloverSdkIsLoaded(){if("undefined"==typeof Clover)throw new Error("Clover SDK is not loaded.")}getPakmsOrFail(e){if(!e||""===e.trim()){const e="WeeConnectPay Gateway for WooCommerce Blocks cannot load the Clover iframes. Reason: Missing Clover public merchant (pakms) key, is the merchant authenticated?";throw console.error(e),new Error(e)}return e}static getWrapperId(e){switch(e){case o.NUMBER:return n.NUMBER;case o.DATE:return n.DATE;case o.CVV:return n.CVV;case o.POSTAL_CODE:return n.ZIP;case o.PAYMENT_REQUEST_BUTTON:return n.PAYMENT_REQUEST_BUTTON;default:return}}static getErrorDisplayId(e){switch(e){case o.NUMBER:return a.NUMBER;case o.DATE:return a.DATE;case o.CVV:return a.CVV;case o.POSTAL_CODE:return a.ZIP;case o.PAYMENT_REQUEST_BUTTON:return a.PAYMENT_REQUEST_BUTTON;default:return}}getDefaultStyles(){const e=this.getLocalizedCvvPlaceholderStyles(this.cloverConfig.locale);return{input:{padding:"0px",margin:"0px",height:"3.4em",width:"100%",border:"1px #C8C8C8 solid",borderRadius:"3px",textAlign:"center"},"::-webkit-input-placeholder":{textAlign:"center"},"::-moz-placeholder":{textAlign:"center"},":-ms-input-placeholder":{textAlign:"center"},":-moz-placeholder":{textAlign:"center"},"card-cvv input::-webkit-input-placeholder":e,"card-cvv input::-moz-placeholder":e,"card-cvv input:-ms-input-placeholder":e,"card-cvv input:-moz-placeholder":e}}createElements(e){const t=this.cloverInstance.elements(),r={};return e.forEach((([e,o])=>{const n={...this.getDefaultStyles(),...o};try{r[e]=t.create(e,n)}catch(t){console.error(`Error creating element for type ${e}:`,t)}})),r}mountElements(e){Object.entries(e).forEach((([e,t])=>{const r=e,o=u.getWrapperId(r);o&&t.mount&&t.mount("#"+o)}))}static createFinalValidationState(){const e={CARD_NUMBER:{error:"Card number is required",touched:!0},CARD_DATE:{error:"Card expiry is required",touched:!0},CARD_CVV:{error:"Card CVV is required",touched:!0},CARD_POSTAL_CODE:{error:"Card postal code is required",touched:!0}},t=u.getValidationState(),r={};return Object.keys(e).forEach((o=>{const n=o,a=t[n];a&&(a.touched&&!a.error||a.touched&&a.error)?r[n]=a:r[n]=e[n]})),r}attachEventListeners({elements:e,events:t,handler:r}){Object.keys(e).forEach((o=>{const n=e[o];t.forEach((e=>{n.addEventListener(e,r)}))}))}static getValidationState(){return u.validationState}static isFinalEventValid(e){return["CARD_NUMBER","CARD_DATE","CARD_CVV","CARD_POSTAL_CODE"].every((t=>{const r=e[t];return r&&r.touched&&!r.error}))}static isEventElementState(e){return e&&"object"==typeof e&&"touched"in e}static getErrorMessageOrNull(e){const t=["CARD_CVV","CARD_DATE","CARD_NUMBER","CARD_POSTAL_CODE"];let r=!1,n="";return 0===Object.keys(e).length?t.forEach((()=>{r=!0,n+="These fields are required.<br>"})):t.forEach((t=>{const a=e[t];u.isEventElementState(a)&&a.touched?a.error&&(r=!0,n+=`${a.error}<br>`):(r=!0,n+=`${o[t]}: This field is required.<br>`)})),r?n:null}}u.validationState={},u.validationEventHandler=(e,t)=>{"onPaymentSetup"!==t&&(u.validationState={...e}),Object.entries(e).forEach((([e,t])=>{const r=e,o=u.getWrapperId(r),n=u.getErrorDisplayId(r),a=o?document.getElementById(o):null,s=n?document.getElementById(n):null;a&&s?t.error&&t.touched?u.addError(a,s,t.error):t.touched&&u.removeError(a,s):console.error(`WeeConnectPay failed to handle the event for the Clover Iframe element type: ${r}. The wrapperElement or errorDisplayElement were not found. `,{wrapperElement:{id:o,element:a},errorDisplayElement:{id:n,element:s}})}))},u.addError=(e,t,r)=>{t.textContent=r,t.classList.add("error"),e.classList.remove("success"),e.classList.add("error")},u.removeError=(e,t)=>{t.textContent=null,t.classList.remove("error"),e.classList.remove("error"),e.classList.add("success")};var h=u;Error;class E{constructor(e){if(this.googleRecaptchaConfig=e,this.verifyGoogleRecaptchaSdkIsLoaded(),!E.isGoogleRecaptchaEnabled(e.isEnabled))throw console.error("Google Recaptcha is disabled in the settings but is still being constructed."),new Error("Google Recaptcha is disabled in the settings but is still being constructed.");this.getSiteKeyOrFail(e.siteKey)}static getInstance(e){if(!this.instance){if(!e)throw console.error("Clover settings must be provided for initialization."),new Error("Clover settings must be provided for initialization.");this.instance=new E(e)}return this.instance}verifyGoogleRecaptchaSdkIsLoaded(){if("undefined"==typeof grecaptcha)throw console.error("Google Recaptcha SDK is not loaded."),new Error("Google Recaptcha SDK is not loaded.")}static isGoogleRecaptchaEnabled(e){return"1"===e}getSiteKeyOrFail(e){if(!e||""===e.trim()){const e='WeeConnectPay Gateway for WooCommerce Blocks has an error while using Google Recaptcha. Reason: Missing Google Recaptcha "site key". Have you set it up in the plugin settings?';throw console.error(e),new Error(e)}return e}createToken(){return new Promise(((e,t)=>{grecaptcha.ready((()=>{try{grecaptcha.execute(this.googleRecaptchaConfig.siteKey,{action:"submit"}).then((t=>{e(t)}),(e=>{t(e.toString())}))}catch(e){t(e.toString())}}))}))}async getTokenOrExceptionJson(){return await this.createToken()}static getStringifiedErrorForPaymentMethodData(e){const t={exception:e.toString()};return JSON.stringify(t)}}const m="weeconnectpay",v=(0,i.getSetting)("weeconnectpay_data",{}),g=(0,d.decodeEntities)(v.woocommerce?.gateway?.title)||(0,p.__)("Credit Card","weeconnectpay"),f=e=>{const{eventRegistration:t,emitResponse:r}=e,{onPaymentSetup:n}=t;return(0,c.useEffect)((()=>{const e=n((async()=>{const e=h.createFinalValidationState();if(h.validationEventHandler(e,"onPaymentSetup"),!h.isFinalEventValid(e)){const t=h.getErrorMessageOrNull(e);if(null!==t)return{type:r?.responseTypes.ERROR,message:t,messageContext:r?.noticeContexts?.PAYMENTS};{const e="An unexpected validation error has occurred. Please check the console for more details.";return console.error("The final validation before tokenizing the card did not pass validation, but could not generate a proper error message."),{type:r?.responseTypes.ERROR,unhandledValidationErrorMessage:e,messageContext:r?.noticeContexts?.PAYMENTS}}}const t=h.getInstance(v.clover).getCloverInstance();try{var o,n,a,s;let e="";if(E.isGoogleRecaptchaEnabled(v.googleRecaptcha.isEnabled))try{const t=E.getInstance(v.googleRecaptcha);e=await t.getTokenOrExceptionJson()}catch(t){console.error("Error creating Google Recaptcha Token:",t),e=E.getStringifiedErrorForPaymentMethodData(t)}const c=await t.createToken();console.log("Clover Iframe Tokenization Response result: ",c);const i=c.token,l=null!==(o=c.card?.brand)&&void 0!==o?o:"",d=null!==(n=c.card?.exp_month)&&void 0!==n?n:"",p=null!==(a=c.card?.exp_year)&&void 0!==a?a:"",u=null!==(s=c.card?.last4)&&void 0!==s?s:"",h=c.card?.address_zip;return{type:r.responseTypes.SUCCESS,meta:{paymentMethodData:{token:i,"card-brand":l,"card-last4":u,"card-exp-month":d,"card-exp-year":p,"tokenized-zip":h,"recaptcha-token":e}}}}catch(e){return console.error("Error creating Clover token:",e),{type:r?.responseTypes.ERROR,message:"Error creating Clover token",messageContext:r?.noticeContexts?.PAYMENTS}}}));return()=>e()}),[r.responseTypes.ERROR,r.responseTypes.SUCCESS,n]),(0,c.useEffect)((()=>{!function(){try{const e=h.getInstance(v.clover),t=[[o.NUMBER,{}],[o.DATE,{}],[o.CVV,{}],[o.POSTAL_CODE,{}]],r=e.createElements(t);e.mountElements(r),e.attachEventListeners({elements:r,events:["change","blur"],handler:h.validationEventHandler})}catch(e){console.error("WeeConnectPay failed to setup Clover:",e.message)}}()}),[]),(0,s.jsx)("div",{id:"weeconnectpay-wc-fields",children:(0,s.jsxs)("div",{id:"form-display-no-footer",children:[(0,s.jsx)("div",{className:"top-row-wrapper",children:(0,s.jsxs)("div",{className:"form-row top-row full-width",children:[(0,s.jsx)("div",{id:"weeconnectpay-card-number",className:"field card-number-field"}),(0,s.jsx)("div",{className:"input-errors",id:"weeconnectpay-card-number-errors",role:"alert"})]})}),(0,s.jsxs)("div",{className:"bottom-row-wrapper",children:[(0,s.jsxs)("div",{className:"form-row bottom-row third-width",children:[(0,s.jsx)("div",{id:"weeconnectpay-card-date",className:"field card-date-field"}),(0,s.jsx)("div",{className:"input-errors",id:"weeconnectpay-card-date-errors",role:"alert"})]}),(0,s.jsxs)("div",{className:"form-row bottom-row third-width",children:[(0,s.jsx)("div",{id:"weeconnectpay-card-cvv",className:"field card-cvv-field"}),(0,s.jsx)("div",{className:"input-errors",id:"weeconnectpay-card-cvv-errors",role:"alert"})]}),(0,s.jsxs)("div",{className:"form-row bottom-row third-width",children:[(0,s.jsx)("div",{id:"weeconnectpay-card-postal-code",className:"field card-postal-code-field"}),(0,s.jsx)("div",{className:"input-errors",id:"weeconnectpay-card-postal-code-errors",role:"alert"})]})]}),(0,s.jsx)("div",{id:"card-response",role:"alert"}),(0,s.jsx)("div",{id:"card-errors",role:"alert"}),(0,s.jsx)("div",{className:"clover-footer"})]})})},y={name:m,paymentMethodId:m,label:g,content:(0,s.jsx)(f,{emitResponse:()=>{},eventRegistration:()=>{}}),edit:(0,s.jsx)(f,{emitResponse:()=>{},eventRegistration:()=>{}}),canMakePayment:()=>!0,ariaLabel:g,supports:{features:v.woocommerce?.gateway?.supports?v.woocommerce.gateway.supports:["products"]}};(0,l.registerPaymentMethod)(y)}();
     1!function(){"use strict";var e={20:function(e,t,r){var o=r(609),n=Symbol.for("react.element"),a=(Symbol.for("react.fragment"),Object.prototype.hasOwnProperty),s=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function i(e,t,r){var o,i={},l=null,d=null;for(o in void 0!==r&&(l=""+r),void 0!==t.key&&(l=""+t.key),void 0!==t.ref&&(d=t.ref),t)a.call(t,o)&&!c.hasOwnProperty(o)&&(i[o]=t[o]);if(e&&e.defaultProps)for(o in t=e.defaultProps)void 0===i[o]&&(i[o]=t[o]);return{$$typeof:n,type:e,key:l,ref:d,props:i,_owner:s.current}}t.jsx=i,t.jsxs=i},609:function(e){e.exports=window.React},848:function(e,t,r){e.exports=r(20)}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}var o,n,a,s=r(848);!function(e){e.CARD="CARD",e.CVV="CARD_CVV",e.DATE="CARD_DATE",e.NUMBER="CARD_NUMBER",e.POSTAL_CODE="CARD_POSTAL_CODE",e.STREET_ADDRESS="CARD_STREET_ADDRESS",e.PAYMENT_REQUEST_BUTTON="PAYMENT_REQUEST_BUTTON"}(o||(o={})),function(e){e.NUMBER="weeconnectpay-card-number",e.DATE="weeconnectpay-card-date",e.CVV="weeconnectpay-card-cvv",e.ZIP="weeconnectpay-card-postal-code",e.PAYMENT_REQUEST_BUTTON="weeconnectpay-payment-request-button"}(n||(n={})),function(e){e.NUMBER="weeconnectpay-card-number-errors",e.DATE="weeconnectpay-card-date-errors",e.CVV="weeconnectpay-card-cvv-errors",e.ZIP="weeconnectpay-card-postal-code-errors",e.PAYMENT_REQUEST_BUTTON="weeconnectpay-payment-request-button-errors"}(a||(a={}));var c=r(609),i=window.wc.wcSettings,l=window.wc.wcBlocksRegistry,d=window.wp.htmlEntities,p=window.wp.i18n;class u{constructor(e){this.getLocalizedCvvPlaceholderStyles=e=>{let t={};if("fr-CA"===e){const e=document.getElementById(n.CVV);e?t=e.offsetWidth>=106||0===e.offsetWidth?{whiteSpace:"pre-line",position:"relative"}:{whiteSpace:"pre-line",position:"relative",top:"-7px"}:console.warn("WeeConnectPay could not detect the CVV element during Styles creation. CVV Element placeholder may look off-center depending on your locale.")}else t={};return t},this.cloverConfig=e,this.verifyCloverSdkIsLoaded(),this.getPakmsOrFail(e.pakms),this.cloverInstance=this.createCloverInstance(e.pakms,e.locale,e.merchantId)}static getInstance(e){if(!this.instance){if(!e)throw console.error("Clover settings must be provided for initialization."),new Error("Clover settings must be provided for initialization.");this.instance=new u(e)}return this.instance}createCloverInstance(e,t,r){try{return new Clover(e,{locale:t,merchantId:r})}catch(e){const t=`WeeConnectPay failed to initialize Clover instance: ${e.message}`;throw console.error(t),new Error(t)}}getCloverInstance(){return this.cloverInstance}verifyCloverSdkIsLoaded(){if("undefined"==typeof Clover)throw new Error("Clover SDK is not loaded.")}getPakmsOrFail(e){if(!e||""===e.trim()){const e="WeeConnectPay Gateway for WooCommerce Blocks cannot load the Clover iframes. Reason: Missing Clover public merchant (pakms) key, is the merchant authenticated?";throw console.error(e),new Error(e)}return e}static getWrapperId(e){switch(e){case o.NUMBER:return n.NUMBER;case o.DATE:return n.DATE;case o.CVV:return n.CVV;case o.POSTAL_CODE:return n.ZIP;case o.PAYMENT_REQUEST_BUTTON:return n.PAYMENT_REQUEST_BUTTON;default:return}}static getErrorDisplayId(e){switch(e){case o.NUMBER:return a.NUMBER;case o.DATE:return a.DATE;case o.CVV:return a.CVV;case o.POSTAL_CODE:return a.ZIP;case o.PAYMENT_REQUEST_BUTTON:return a.PAYMENT_REQUEST_BUTTON;default:return}}getDefaultStyles(){const e=this.getLocalizedCvvPlaceholderStyles(this.cloverConfig.locale);return{input:{padding:"0px",margin:"0px",height:"3.4em",width:"100%",border:"1px #C8C8C8 solid",borderRadius:"3px",textAlign:"center"},"::-webkit-input-placeholder":{textAlign:"center"},"::-moz-placeholder":{textAlign:"center"},":-ms-input-placeholder":{textAlign:"center"},":-moz-placeholder":{textAlign:"center"},"card-cvv input::-webkit-input-placeholder":e,"card-cvv input::-moz-placeholder":e,"card-cvv input:-ms-input-placeholder":e,"card-cvv input:-moz-placeholder":e}}createElements(e){const t=this.cloverInstance.elements(),r={};return e.forEach(([e,o])=>{const n={...this.getDefaultStyles(),...o};try{r[e]=t.create(e,n)}catch(t){console.error(`Error creating element for type ${e}:`,t)}}),r}mountElements(e){Object.entries(e).forEach(([e,t])=>{const r=e,o=u.getWrapperId(r);o&&t.mount&&t.mount("#"+o)})}static createFinalValidationState(){const e={CARD_NUMBER:{error:"Card number is required",touched:!0},CARD_DATE:{error:"Card expiry is required",touched:!0},CARD_CVV:{error:"Card CVV is required",touched:!0},CARD_POSTAL_CODE:{error:"Card postal code is required",touched:!0}},t=u.getValidationState(),r={};return Object.keys(e).forEach(o=>{const n=o,a=t[n];a&&(a.touched&&!a.error||a.touched&&a.error)?r[n]=a:r[n]=e[n]}),r}attachEventListeners({elements:e,events:t,handler:r}){Object.keys(e).forEach(o=>{const n=e[o];t.forEach(e=>{n.addEventListener(e,r)})})}static getValidationState(){return u.validationState}static isFinalEventValid(e){return["CARD_NUMBER","CARD_DATE","CARD_CVV","CARD_POSTAL_CODE"].every(t=>{const r=e[t];return r&&r.touched&&!r.error})}static isEventElementState(e){return e&&"object"==typeof e&&"touched"in e}static getErrorMessageOrNull(e){const t=["CARD_CVV","CARD_DATE","CARD_NUMBER","CARD_POSTAL_CODE"];let r=!1,n="";return 0===Object.keys(e).length?t.forEach(()=>{r=!0,n+="These fields are required.<br>"}):t.forEach(t=>{const a=e[t];u.isEventElementState(a)&&a.touched?a.error&&(r=!0,n+=`${a.error}<br>`):(r=!0,n+=`${o[t]}: This field is required.<br>`)}),r?n:null}}u.validationState={},u.validationEventHandler=(e,t)=>{"onPaymentSetup"!==t&&(u.validationState={...e}),Object.entries(e).forEach(([e,t])=>{const r=e,o=u.getWrapperId(r),n=u.getErrorDisplayId(r),a=o?document.getElementById(o):null,s=n?document.getElementById(n):null;a&&s?t.error&&t.touched?u.addError(a,s,t.error):t.touched&&u.removeError(a,s):console.error(`WeeConnectPay failed to handle the event for the Clover Iframe element type: ${r}. The wrapperElement or errorDisplayElement were not found. `,{wrapperElement:{id:o,element:a},errorDisplayElement:{id:n,element:s}})})},u.addError=(e,t,r)=>{t.textContent=r,t.classList.add("error"),e.classList.remove("success"),e.classList.add("error")},u.removeError=(e,t)=>{t.textContent=null,t.classList.remove("error"),e.classList.remove("error"),e.classList.add("success")};var h=u;Error;class E{constructor(e){if(this.googleRecaptchaConfig=e,this.verifyGoogleRecaptchaSdkIsLoaded(),!E.isGoogleRecaptchaEnabled(e.isEnabled))throw console.error("Google Recaptcha is disabled in the settings but is still being constructed."),new Error("Google Recaptcha is disabled in the settings but is still being constructed.");this.getSiteKeyOrFail(e.siteKey)}static getInstance(e){if(!this.instance){if(!e)throw console.error("Clover settings must be provided for initialization."),new Error("Clover settings must be provided for initialization.");this.instance=new E(e)}return this.instance}verifyGoogleRecaptchaSdkIsLoaded(){if("undefined"==typeof grecaptcha)throw console.error("Google Recaptcha SDK is not loaded."),new Error("Google Recaptcha SDK is not loaded.")}static isGoogleRecaptchaEnabled(e){return"1"===e}getSiteKeyOrFail(e){if(!e||""===e.trim()){const e='WeeConnectPay Gateway for WooCommerce Blocks has an error while using Google Recaptcha. Reason: Missing Google Recaptcha "site key". Have you set it up in the plugin settings?';throw console.error(e),new Error(e)}return e}createToken(){return new Promise((e,t)=>{grecaptcha.ready(()=>{try{grecaptcha.execute(this.googleRecaptchaConfig.siteKey,{action:"submit"}).then(t=>{e(t)},e=>{t(e.toString())})}catch(e){t(e.toString())}})})}async getTokenOrExceptionJson(){return await this.createToken()}static getStringifiedErrorForPaymentMethodData(e){const t={exception:e.toString()};return JSON.stringify(t)}}const m="weeconnectpay",v=(0,i.getSetting)("weeconnectpay_data",{}),g=(0,d.decodeEntities)(v.woocommerce?.gateway?.title)||(0,p.__)("Credit Card","weeconnectpay"),f=e=>{const{eventRegistration:t,emitResponse:r}=e,{onPaymentSetup:n}=t;return(0,c.useEffect)(()=>{const e=n(async()=>{const e=h.createFinalValidationState();if(h.validationEventHandler(e,"onPaymentSetup"),!h.isFinalEventValid(e)){const t=h.getErrorMessageOrNull(e);if(null!==t)return{type:r?.responseTypes.ERROR,message:t,messageContext:r?.noticeContexts?.PAYMENTS};{const e="An unexpected validation error has occurred. Please check the console for more details.";return console.error("The final validation before tokenizing the card did not pass validation, but could not generate a proper error message."),{type:r?.responseTypes.ERROR,unhandledValidationErrorMessage:e,messageContext:r?.noticeContexts?.PAYMENTS}}}const t=h.getInstance(v.clover).getCloverInstance();try{var o,n,a,s;let e="";if(E.isGoogleRecaptchaEnabled(v.googleRecaptcha.isEnabled))try{const t=E.getInstance(v.googleRecaptcha);e=await t.getTokenOrExceptionJson()}catch(t){console.error("Error creating Google Recaptcha Token:",t),e=E.getStringifiedErrorForPaymentMethodData(t)}const c=await t.createToken();console.log("Clover Iframe Tokenization Response result: ",c);const i=c.token,l=null!==(o=c.card?.brand)&&void 0!==o?o:"",d=null!==(n=c.card?.exp_month)&&void 0!==n?n:"",p=null!==(a=c.card?.exp_year)&&void 0!==a?a:"",u=null!==(s=c.card?.last4)&&void 0!==s?s:"",h=c.card?.address_zip;return{type:r.responseTypes.SUCCESS,meta:{paymentMethodData:{token:i,"card-brand":l,"card-last4":u,"card-exp-month":d,"card-exp-year":p,"tokenized-zip":h,"recaptcha-token":e}}}}catch(e){return console.error("Error creating Clover token:",e),{type:r?.responseTypes.ERROR,message:"Error creating Clover token",messageContext:r?.noticeContexts?.PAYMENTS}}});return()=>e()},[r.responseTypes.ERROR,r.responseTypes.SUCCESS,n]),(0,c.useEffect)(()=>{!function(){try{const e=h.getInstance(v.clover),t=[[o.NUMBER,{}],[o.DATE,{}],[o.CVV,{}],[o.POSTAL_CODE,{}]],r=e.createElements(t);e.mountElements(r),e.attachEventListeners({elements:r,events:["change","blur"],handler:h.validationEventHandler})}catch(e){console.error("WeeConnectPay failed to setup Clover:",e.message)}}()},[]),(0,s.jsx)("div",{id:"weeconnectpay-wc-fields",children:(0,s.jsxs)("div",{id:"form-display-no-footer",children:[(0,s.jsx)("div",{className:"top-row-wrapper",children:(0,s.jsxs)("div",{className:"form-row top-row full-width",children:[(0,s.jsx)("div",{id:"weeconnectpay-card-number",className:"field card-number-field"}),(0,s.jsx)("div",{className:"input-errors",id:"weeconnectpay-card-number-errors",role:"alert"})]})}),(0,s.jsxs)("div",{className:"bottom-row-wrapper",children:[(0,s.jsxs)("div",{className:"form-row bottom-row third-width",children:[(0,s.jsx)("div",{id:"weeconnectpay-card-date",className:"field card-date-field"}),(0,s.jsx)("div",{className:"input-errors",id:"weeconnectpay-card-date-errors",role:"alert"})]}),(0,s.jsxs)("div",{className:"form-row bottom-row third-width",children:[(0,s.jsx)("div",{id:"weeconnectpay-card-cvv",className:"field card-cvv-field"}),(0,s.jsx)("div",{className:"input-errors",id:"weeconnectpay-card-cvv-errors",role:"alert"})]}),(0,s.jsxs)("div",{className:"form-row bottom-row third-width",children:[(0,s.jsx)("div",{id:"weeconnectpay-card-postal-code",className:"field card-postal-code-field"}),(0,s.jsx)("div",{className:"input-errors",id:"weeconnectpay-card-postal-code-errors",role:"alert"})]})]}),(0,s.jsx)("div",{id:"card-response",role:"alert"}),(0,s.jsx)("div",{id:"card-errors",role:"alert"}),(0,s.jsx)("div",{className:"clover-footer"})]})})},y={name:m,paymentMethodId:m,label:g,content:(0,s.jsx)(f,{emitResponse:()=>{},eventRegistration:()=>{}}),edit:(0,s.jsx)(f,{emitResponse:()=>{},eventRegistration:()=>{}}),canMakePayment:()=>!0,ariaLabel:g,supports:{features:v.woocommerce?.gateway?.supports?v.woocommerce.gateway.supports:["products"]}};(0,l.registerPaymentMethod)(y)}();
  • weeconnectpay/trunk/vendor/composer/installed.php

    r3306759 r3314922  
    22    'root' => array(
    33        'name' => '__root__',
    4         'pretty_version' => '3.14.2',
    5         'version' => '3.14.2.0',
    6         'reference' => '103b22dd6c3c563c23138184c84c9639fe5b1034',
     4        'pretty_version' => '3.14.3',
     5        'version' => '3.14.3.0',
     6        'reference' => '1c1bd0a9a5fd9db79ff7dda98c84bedf41944ac5',
    77        'type' => 'library',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        '__root__' => array(
    14             'pretty_version' => '3.14.2',
    15             'version' => '3.14.2.0',
    16             'reference' => '103b22dd6c3c563c23138184c84c9639fe5b1034',
     14            'pretty_version' => '3.14.3',
     15            'version' => '3.14.3.0',
     16            'reference' => '1c1bd0a9a5fd9db79ff7dda98c84bedf41944ac5',
    1717            'type' => 'library',
    1818            'install_path' => __DIR__ . '/../../',
  • weeconnectpay/trunk/weeconnectpay.php

    r3306759 r3314922  
    1818 * Description:       Integrate Clover Payments with your WooCommerce online store.
    1919 * Tags:              clover, payments, weeconnect, e-commerce, gateway
    20  * Version:           3.14.2
     20 * Version:           3.14.4
    2121 * Requires at least: 5.6
    2222 * Tested Up To:      6.8.1
     
    3838    die;
    3939}
    40 const WEECONNECT_VERSION = '3.14.2';
     40const WEECONNECT_VERSION = '3.14.4';
    4141
    4242define( 'WEECONNECTPAY_PLUGIN_URL', plugin_dir_url(__FILE__));
Note: See TracChangeset for help on using the changeset viewer.