@xsolla/payment-client-core 0.2.65 → 0.2.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/core/payment/form/converters/birth-date/birth-date.converter.mjs +6 -5
- package/esm2022/lib/core/payment/form/converters/card-number/card-number.converter.mjs +5 -4
- package/esm2022/lib/core/payment/form/converters/checkbox/checkbox.converter.mjs +6 -2
- package/esm2022/lib/core/payment/form/converters/converter.abstract.mjs +6 -2
- package/esm2022/lib/core/payment/form/converters/cpf-name/cpf-name.converter.mjs +6 -5
- package/esm2022/lib/core/payment/form/converters/cvv/cvv.converter.mjs +5 -2
- package/esm2022/lib/core/payment/form/converters/street-number/street-number.converter.mjs +5 -2
- package/esm2022/lib/core/payment/form/converters/zip/zip.converter.mjs +8 -7
- package/esm2022/lib/core/payment/form/overrided-fields/fields-allowed-to-override.mjs +5 -0
- package/esm2022/lib/core/payment/form/overrided-fields/override-field-config.mjs +12 -0
- package/esm2022/lib/core/payment/form/validators/birth-date/birth-date.validator.mjs +6 -2
- package/esm2022/lib/core/payment/form/validators/card-expiration-date-validator/card-expiration-date.validator.mjs +31 -10
- package/esm2022/lib/core/payment/form/validators/card-month/card-month.validator.mjs +20 -7
- package/esm2022/lib/core/payment/form/validators/card-year/card-year.validator.mjs +20 -7
- package/esm2022/lib/core/payment/form/validators/convert.function.mjs +7 -6
- package/esm2022/lib/core/payment/form/validators/coupon/coupon-validator.mjs +6 -3
- package/esm2022/lib/core/payment/form/validators/credit-card-length/credit-card-max-length.validator.mjs +37 -0
- package/esm2022/lib/core/payment/form/validators/credit-card-length/credit-card-min-length.validator.mjs +13 -8
- package/esm2022/lib/core/payment/form/validators/email/email-validator.mjs +5 -2
- package/esm2022/lib/core/payment/form/validators/luhn-formula-validator/luhn-formula.validator.mjs +6 -2
- package/esm2022/lib/core/payment/form/validators/max-length-validator.mjs +6 -2
- package/esm2022/lib/core/payment/form/validators/min-length-validator.mjs +6 -2
- package/esm2022/lib/core/payment/form/validators/phone-validator.mjs +5 -2
- package/esm2022/lib/core/payment/form/validators/required/required.validator.mjs +5 -2
- package/esm2022/lib/core/payment/form/validators/validation-error-id.enum.mjs +24 -0
- package/esm2022/lib/core/payment/form/validators/validation-error-params.interface.mjs +2 -0
- package/esm2022/lib/core/payment/form/validators/validation-error.interface.mjs +1 -1
- package/esm2022/lib/core/payment/form/validators/validators.module.mjs +5 -4
- package/esm2022/lib/core/payment/payment-configuration.interface.mjs +1 -1
- package/esm2022/lib/core/payment/payment.service.mjs +22 -1
- package/esm2022/lib/core/type-guards/is-object.function.mjs +4 -0
- package/esm2022/lib/core/type-guards/is-xps-boolean.function.mjs +4 -0
- package/fesm2022/xsolla-payment-client-core.mjs +243 -69
- package/fesm2022/xsolla-payment-client-core.mjs.map +1 -1
- package/lib/core/payment/form/converters/card-number/card-number.converter.d.ts +2 -1
- package/lib/core/payment/form/overrided-fields/fields-allowed-to-override.d.ts +2 -0
- package/lib/core/payment/form/overrided-fields/override-field-config.d.ts +14 -0
- package/lib/core/payment/form/validators/convert.function.d.ts +2 -1
- package/lib/core/payment/form/validators/credit-card-length/credit-card-max-length.validator.d.ts +12 -0
- package/lib/core/payment/form/validators/credit-card-length/credit-card-min-length.validator.d.ts +2 -2
- package/lib/core/payment/form/validators/validation-error-id.enum.d.ts +22 -0
- package/lib/core/payment/form/validators/validation-error-params.interface.d.ts +6 -0
- package/lib/core/payment/form/validators/validation-error.interface.d.ts +2 -0
- package/lib/core/payment/payment-configuration.interface.d.ts +7 -0
- package/lib/core/payment/payment.service.d.ts +1 -0
- package/lib/core/type-guards/is-object.function.d.ts +1 -0
- package/lib/core/type-guards/is-xps-boolean.function.d.ts +2 -0
- package/package.json +1 -1
- package/xsolla-payment-client-core-0.2.67.tgz +0 -0
- package/xsolla-payment-client-core-0.2.65.tgz +0 -0
|
@@ -710,6 +710,25 @@ var ErrorTags;
|
|
|
710
710
|
ErrorTags["PAYTM"] = "paytm";
|
|
711
711
|
})(ErrorTags || (ErrorTags = {}));
|
|
712
712
|
|
|
713
|
+
const fieldsAllowedToOverride = new Set([
|
|
714
|
+
FieldNames.allowSubscription,
|
|
715
|
+
]);
|
|
716
|
+
|
|
717
|
+
function isXpsBoolean(value) {
|
|
718
|
+
return value === "1" /* XpsBoolean.true */ || value === "0" /* XpsBoolean.false */;
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* Configuration for fields that can be overridden by partner.
|
|
723
|
+
* We can extend this configuration with additional fields in the future.
|
|
724
|
+
*/
|
|
725
|
+
const overrideFieldConfigs = {
|
|
726
|
+
allowSubscription: {
|
|
727
|
+
validator: isXpsBoolean,
|
|
728
|
+
defaultValue: "0" /* XpsBoolean.false */,
|
|
729
|
+
},
|
|
730
|
+
};
|
|
731
|
+
|
|
713
732
|
class TaggedError extends Error {
|
|
714
733
|
constructor(message, tags) {
|
|
715
734
|
super(message);
|
|
@@ -3280,28 +3299,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
3280
3299
|
args: [syncResponseFactoryToken]
|
|
3281
3300
|
}] }, { type: XpsApiService }, { type: NextActionService }, { type: SettingsService }, { type: XpsResponseErrorsMappingService }, { type: EncryptCreditCardService }, { type: ShowErrorsActionCreator }, { type: UserBehaviourAnalyticsService }, { type: PaymentSettingsService }] });
|
|
3282
3301
|
|
|
3283
|
-
function
|
|
3302
|
+
function isObject(value) {
|
|
3303
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
3304
|
+
}
|
|
3305
|
+
|
|
3306
|
+
function convert(validator, message, params) {
|
|
3284
3307
|
return (control) => {
|
|
3285
3308
|
const errors = validator(control);
|
|
3286
|
-
if (!errors)
|
|
3287
|
-
return
|
|
3288
|
-
}
|
|
3309
|
+
if (!errors)
|
|
3310
|
+
return null;
|
|
3289
3311
|
const firstErrorKey = Object.keys(errors)[0];
|
|
3290
3312
|
const firstError = errors[firstErrorKey];
|
|
3291
|
-
const error =
|
|
3313
|
+
const error = isObject(firstError) ? firstError : {};
|
|
3292
3314
|
error.message = message;
|
|
3315
|
+
error.params = params;
|
|
3293
3316
|
errors[firstErrorKey] = error;
|
|
3294
3317
|
return errors;
|
|
3295
3318
|
};
|
|
3296
3319
|
}
|
|
3297
3320
|
|
|
3321
|
+
var ValidationErrorId;
|
|
3322
|
+
(function (ValidationErrorId) {
|
|
3323
|
+
ValidationErrorId["birthDatePattern"] = "birthDatePattern";
|
|
3324
|
+
ValidationErrorId["expirationLength"] = "expirationLength";
|
|
3325
|
+
ValidationErrorId["expirationMonthPattern"] = "expirationMonthPattern";
|
|
3326
|
+
ValidationErrorId["expirationMinMonth"] = "expirationMinMonth";
|
|
3327
|
+
ValidationErrorId["expirationMaxMonth"] = "expirationMaxMonth";
|
|
3328
|
+
ValidationErrorId["expirationYearPattern"] = "expirationYearPattern";
|
|
3329
|
+
ValidationErrorId["expirationMinYear"] = "expirationMinYear";
|
|
3330
|
+
ValidationErrorId["expirationMaxYear"] = "expirationMaxYear";
|
|
3331
|
+
ValidationErrorId["couponPattern"] = "couponPattern";
|
|
3332
|
+
ValidationErrorId["emailPattern"] = "emailPattern";
|
|
3333
|
+
ValidationErrorId["cardNumberPattern"] = "cardNumberPattern";
|
|
3334
|
+
ValidationErrorId["required"] = "required";
|
|
3335
|
+
ValidationErrorId["minLength"] = "minLength";
|
|
3336
|
+
ValidationErrorId["maxLength"] = "maxLength";
|
|
3337
|
+
ValidationErrorId["cpfNumberPattern"] = "cpfNumberPattern";
|
|
3338
|
+
ValidationErrorId["cvvPattern"] = "cvvPattern";
|
|
3339
|
+
ValidationErrorId["phonePattern"] = "phonePattern";
|
|
3340
|
+
ValidationErrorId["buildingNumberPattern"] = "buildingNumberPattern";
|
|
3341
|
+
ValidationErrorId["zipPattern"] = "zipPattern";
|
|
3342
|
+
ValidationErrorId["dataPattern"] = "dataPattern";
|
|
3343
|
+
})(ValidationErrorId || (ValidationErrorId = {}));
|
|
3344
|
+
|
|
3298
3345
|
const emailRegexp = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i; // eslint-disable-line
|
|
3299
3346
|
function convertedEmailValidator() {
|
|
3300
|
-
return convert(Validators.pattern(emailRegexp), 'Enter a valid email'
|
|
3347
|
+
return convert(Validators.pattern(emailRegexp), 'Enter a valid email', {
|
|
3348
|
+
id: ValidationErrorId.emailPattern,
|
|
3349
|
+
});
|
|
3301
3350
|
}
|
|
3302
3351
|
|
|
3303
3352
|
function convertedRequiredValidator() {
|
|
3304
|
-
return convert(Validators.required, 'Required'
|
|
3353
|
+
return convert(Validators.required, 'Required', {
|
|
3354
|
+
id: ValidationErrorId.required,
|
|
3355
|
+
});
|
|
3305
3356
|
}
|
|
3306
3357
|
|
|
3307
3358
|
class Converter {
|
|
@@ -3334,7 +3385,10 @@ class Converter {
|
|
|
3334
3385
|
const errorMessage = field.validation_error_msg
|
|
3335
3386
|
? field.validation_error_msg
|
|
3336
3387
|
: 'Enter valid data';
|
|
3337
|
-
validators.push(convert(Validators.pattern(pattern), errorMessage
|
|
3388
|
+
validators.push(convert(Validators.pattern(pattern), errorMessage, {
|
|
3389
|
+
id: ValidationErrorId.dataPattern,
|
|
3390
|
+
defaultMessage: field.validation_error_msg,
|
|
3391
|
+
}));
|
|
3338
3392
|
}
|
|
3339
3393
|
}
|
|
3340
3394
|
return validators;
|
|
@@ -3425,6 +3479,20 @@ class TextControlConfig extends ControlConfig {
|
|
|
3425
3479
|
}
|
|
3426
3480
|
}
|
|
3427
3481
|
|
|
3482
|
+
function minLengthValidator(minLength) {
|
|
3483
|
+
return convert(Validators.minLength(minLength), `Enter at least ${minLength} characters`, {
|
|
3484
|
+
id: ValidationErrorId.minLength,
|
|
3485
|
+
minLength,
|
|
3486
|
+
});
|
|
3487
|
+
}
|
|
3488
|
+
|
|
3489
|
+
function maxLengthValidator(maxLength) {
|
|
3490
|
+
return convert(Validators.maxLength(maxLength), `Enter no more than ${maxLength} characters`, {
|
|
3491
|
+
id: ValidationErrorId.maxLength,
|
|
3492
|
+
maxLength,
|
|
3493
|
+
});
|
|
3494
|
+
}
|
|
3495
|
+
|
|
3428
3496
|
const restrictedValueValidator = (restrictedValue) => {
|
|
3429
3497
|
return ({ value }) => {
|
|
3430
3498
|
return value !== restrictedValue ? null : { valueAllowed: false };
|
|
@@ -3447,12 +3515,11 @@ class ZipConverter extends Converter {
|
|
|
3447
3515
|
const maxLength = this.isUsCountry ? this.usCountryLength : this.maxLength;
|
|
3448
3516
|
const validators = super
|
|
3449
3517
|
.getValidators(field)
|
|
3450
|
-
.concat([
|
|
3451
|
-
convert(Validators.minLength(minLength), `Enter at least ${minLength} characters`),
|
|
3452
|
-
convert(Validators.maxLength(maxLength), `Enter no more than ${maxLength} characters`),
|
|
3453
|
-
]);
|
|
3518
|
+
.concat([minLengthValidator(minLength), maxLengthValidator(maxLength)]);
|
|
3454
3519
|
if (this.isUsCountry) {
|
|
3455
|
-
validators.push(convert(restrictedValueValidator('00000'), 'Enter a valid ZIP code'
|
|
3520
|
+
validators.push(convert(restrictedValueValidator('00000'), 'Enter a valid ZIP code', {
|
|
3521
|
+
id: ValidationErrorId.zipPattern,
|
|
3522
|
+
}));
|
|
3456
3523
|
}
|
|
3457
3524
|
return validators;
|
|
3458
3525
|
}
|
|
@@ -3505,7 +3572,10 @@ const luhnFormulaValidator = ({ value }) => {
|
|
|
3505
3572
|
}
|
|
3506
3573
|
const error = {
|
|
3507
3574
|
rewritableError: {
|
|
3508
|
-
message:
|
|
3575
|
+
message: 'Enter a valid card number',
|
|
3576
|
+
params: {
|
|
3577
|
+
id: ValidationErrorId.cardNumberPattern,
|
|
3578
|
+
},
|
|
3509
3579
|
},
|
|
3510
3580
|
};
|
|
3511
3581
|
if (/[^0-9 -]+/.test(value)) {
|
|
@@ -3542,6 +3612,37 @@ class CardNumberConfig extends ControlConfig {
|
|
|
3542
3612
|
}
|
|
3543
3613
|
}
|
|
3544
3614
|
|
|
3615
|
+
class CreditCardMaxLengthValidator {
|
|
3616
|
+
constructor(creditService) {
|
|
3617
|
+
this.creditService = creditService;
|
|
3618
|
+
this.validate = (field) => {
|
|
3619
|
+
if (isEmptyInputValue(field.value) || !isString(field.value)) {
|
|
3620
|
+
return null;
|
|
3621
|
+
}
|
|
3622
|
+
const length = field.value.length;
|
|
3623
|
+
const cardType = this.creditService.getTypeByNumber(field.value);
|
|
3624
|
+
const { maxLength } = this.creditService.getCreditCardSettings(cardType);
|
|
3625
|
+
if (length <= maxLength)
|
|
3626
|
+
return null;
|
|
3627
|
+
return {
|
|
3628
|
+
rewritableError: {
|
|
3629
|
+
message: `Enter no more than ${maxLength} characters`,
|
|
3630
|
+
number: maxLength,
|
|
3631
|
+
params: {
|
|
3632
|
+
id: ValidationErrorId.maxLength,
|
|
3633
|
+
maxLength,
|
|
3634
|
+
},
|
|
3635
|
+
},
|
|
3636
|
+
};
|
|
3637
|
+
};
|
|
3638
|
+
}
|
|
3639
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CreditCardMaxLengthValidator, deps: [{ token: CreditCardService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3640
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CreditCardMaxLengthValidator }); }
|
|
3641
|
+
}
|
|
3642
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CreditCardMaxLengthValidator, decorators: [{
|
|
3643
|
+
type: Injectable
|
|
3644
|
+
}], ctorParameters: () => [{ type: CreditCardService }] });
|
|
3645
|
+
|
|
3545
3646
|
class CreditCardMinLengthValidator {
|
|
3546
3647
|
constructor(creditService) {
|
|
3547
3648
|
this.creditService = creditService;
|
|
@@ -3552,14 +3653,18 @@ class CreditCardMinLengthValidator {
|
|
|
3552
3653
|
const length = field.value.length;
|
|
3553
3654
|
const cardType = this.creditService.getTypeByNumber(field.value);
|
|
3554
3655
|
const { minLength } = this.creditService.getCreditCardSettings(cardType);
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3656
|
+
if (length >= minLength)
|
|
3657
|
+
return null;
|
|
3658
|
+
return {
|
|
3659
|
+
rewritableError: {
|
|
3660
|
+
message: `Enter at least ${minLength} characters`,
|
|
3661
|
+
number: minLength,
|
|
3662
|
+
params: {
|
|
3663
|
+
id: ValidationErrorId.minLength,
|
|
3664
|
+
minLength,
|
|
3560
3665
|
},
|
|
3561
|
-
}
|
|
3562
|
-
|
|
3666
|
+
},
|
|
3667
|
+
};
|
|
3563
3668
|
};
|
|
3564
3669
|
}
|
|
3565
3670
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CreditCardMinLengthValidator, deps: [{ token: CreditCardService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
@@ -3600,12 +3705,12 @@ class CardNumberConverter extends Converter {
|
|
|
3600
3705
|
getDataType() {
|
|
3601
3706
|
return 'text';
|
|
3602
3707
|
}
|
|
3603
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CardNumberConverter, deps: [{ token: SyncService }, { token:
|
|
3708
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CardNumberConverter, deps: [{ token: SyncService }, { token: CreditCardMaxLengthValidator }, { token: CreditCardMinLengthValidator }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3604
3709
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CardNumberConverter }); }
|
|
3605
3710
|
}
|
|
3606
3711
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: CardNumberConverter, decorators: [{
|
|
3607
3712
|
type: Injectable
|
|
3608
|
-
}], ctorParameters: () => [{ type: SyncService }, { type:
|
|
3713
|
+
}], ctorParameters: () => [{ type: SyncService }, { type: CreditCardMaxLengthValidator }, { type: CreditCardMinLengthValidator }] });
|
|
3609
3714
|
|
|
3610
3715
|
const maxMonths$1 = 12;
|
|
3611
3716
|
const getMinMonth$1 = (parsedYear) => {
|
|
@@ -3615,9 +3720,10 @@ const getMinMonth$1 = (parsedYear) => {
|
|
|
3615
3720
|
minMonth = year === today.getFullYear() ? today.getMonth() + 1 : 1;
|
|
3616
3721
|
return minMonth;
|
|
3617
3722
|
};
|
|
3618
|
-
const sendErrMessage$2 = (
|
|
3723
|
+
const sendErrMessage$2 = (message, params) => ({
|
|
3619
3724
|
cardMonthExpiration: {
|
|
3620
|
-
message
|
|
3725
|
+
message,
|
|
3726
|
+
params,
|
|
3621
3727
|
},
|
|
3622
3728
|
});
|
|
3623
3729
|
function cardMonthValidator(formState) {
|
|
@@ -3629,16 +3735,27 @@ function cardMonthValidator(formState) {
|
|
|
3629
3735
|
const twoDigitsRegex = new RegExp(/^\d{2}$/);
|
|
3630
3736
|
const fieldCommonLength = 2;
|
|
3631
3737
|
if (value.length !== fieldCommonLength) {
|
|
3632
|
-
return sendErrMessage$2(`Enter ${fieldCommonLength} characters
|
|
3738
|
+
return sendErrMessage$2(`Enter ${fieldCommonLength} characters`, {
|
|
3739
|
+
id: ValidationErrorId.expirationLength,
|
|
3740
|
+
requiredLength: fieldCommonLength,
|
|
3741
|
+
});
|
|
3633
3742
|
}
|
|
3634
3743
|
if (!twoDigitsRegex.test(value)) {
|
|
3635
|
-
return sendErrMessage$2(
|
|
3744
|
+
return sendErrMessage$2('Enter a valid expiration month', {
|
|
3745
|
+
id: ValidationErrorId.expirationMonthPattern,
|
|
3746
|
+
});
|
|
3636
3747
|
}
|
|
3637
3748
|
if (Number(value) < minMonth) {
|
|
3638
|
-
return sendErrMessage$2(`Enter a month greater than or equal to ${minMonth}
|
|
3749
|
+
return sendErrMessage$2(`Enter a month greater than or equal to ${minMonth}`, {
|
|
3750
|
+
id: ValidationErrorId.expirationMinMonth,
|
|
3751
|
+
minMonth,
|
|
3752
|
+
});
|
|
3639
3753
|
}
|
|
3640
3754
|
if (Number(value) > maxMonths$1) {
|
|
3641
|
-
return sendErrMessage$2(`Enter a month less than or equal to ${maxMonths$1}
|
|
3755
|
+
return sendErrMessage$2(`Enter a month less than or equal to ${maxMonths$1}`, {
|
|
3756
|
+
id: ValidationErrorId.expirationMaxMonth,
|
|
3757
|
+
maxMonth: maxMonths$1,
|
|
3758
|
+
});
|
|
3642
3759
|
}
|
|
3643
3760
|
return null;
|
|
3644
3761
|
};
|
|
@@ -3685,7 +3802,9 @@ class CvvConverter extends Converter {
|
|
|
3685
3802
|
getValidators(field, formState) {
|
|
3686
3803
|
const validators = super.getValidators(field);
|
|
3687
3804
|
const activeCardType = formState ? formState.activeCardType : null;
|
|
3688
|
-
const getPatternValidator = (pattern) => convert(Validators.pattern(pattern),
|
|
3805
|
+
const getPatternValidator = (pattern) => convert(Validators.pattern(pattern), 'Enter a valid CVV/CVC', {
|
|
3806
|
+
id: ValidationErrorId.cvvPattern,
|
|
3807
|
+
});
|
|
3689
3808
|
switch (activeCardType) {
|
|
3690
3809
|
case CreditCardTypes.AMERICAN_EXPRESS: {
|
|
3691
3810
|
this.maxFieldLength = 4;
|
|
@@ -3746,7 +3865,10 @@ const birthdateValidator = ({ value }) => {
|
|
|
3746
3865
|
}
|
|
3747
3866
|
const error = {
|
|
3748
3867
|
invalidBirthDate: {
|
|
3749
|
-
message:
|
|
3868
|
+
message: 'Enter a valid birth date',
|
|
3869
|
+
params: {
|
|
3870
|
+
id: ValidationErrorId.birthDatePattern,
|
|
3871
|
+
},
|
|
3750
3872
|
},
|
|
3751
3873
|
};
|
|
3752
3874
|
const dateArr = value.split('/');
|
|
@@ -3781,10 +3903,10 @@ class BirthDateConverter extends Converter {
|
|
|
3781
3903
|
super(syncService);
|
|
3782
3904
|
}
|
|
3783
3905
|
getValidators(field) {
|
|
3784
|
-
return super
|
|
3785
|
-
.
|
|
3786
|
-
|
|
3787
|
-
|
|
3906
|
+
return super.getValidators(field).concat([
|
|
3907
|
+
convert(Validators.pattern(/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/), 'Enter a valid birth date', {
|
|
3908
|
+
id: ValidationErrorId.birthDatePattern,
|
|
3909
|
+
}),
|
|
3788
3910
|
birthdateValidator,
|
|
3789
3911
|
]);
|
|
3790
3912
|
}
|
|
@@ -3833,10 +3955,10 @@ class CpfNameConverter extends Converter {
|
|
|
3833
3955
|
super(syncService);
|
|
3834
3956
|
}
|
|
3835
3957
|
getValidators(field) {
|
|
3836
|
-
return super
|
|
3837
|
-
.
|
|
3838
|
-
|
|
3839
|
-
|
|
3958
|
+
return super.getValidators(field).concat([
|
|
3959
|
+
convert(Validators.pattern(cpfNameRegex), 'Enter a valid CPF number', {
|
|
3960
|
+
id: ValidationErrorId.cpfNumberPattern,
|
|
3961
|
+
}),
|
|
3840
3962
|
]);
|
|
3841
3963
|
}
|
|
3842
3964
|
createControlConfig(field) {
|
|
@@ -3887,7 +4009,9 @@ class StreetNumberConverter extends Converter {
|
|
|
3887
4009
|
getValidators(field, formState) {
|
|
3888
4010
|
const validators = super.getValidators(field);
|
|
3889
4011
|
if (formState?.country === 'BL') {
|
|
3890
|
-
validators.push(convert(restrictedValueValidator('0'),
|
|
4012
|
+
validators.push(convert(restrictedValueValidator('0'), 'Enter a valid building number', {
|
|
4013
|
+
id: ValidationErrorId.buildingNumberPattern,
|
|
4014
|
+
}));
|
|
3891
4015
|
}
|
|
3892
4016
|
return validators;
|
|
3893
4017
|
}
|
|
@@ -3931,7 +4055,10 @@ class CheckboxConverter extends Converter {
|
|
|
3931
4055
|
getValidators(field) {
|
|
3932
4056
|
const validators = [];
|
|
3933
4057
|
if (field.isMandatory === this.checkedValue) {
|
|
3934
|
-
validators.push(convert(restrictedValueValidator(this.uncheckedValue), '
|
|
4058
|
+
validators.push(convert(restrictedValueValidator(this.uncheckedValue), field.validation_error_msg || 'Required', {
|
|
4059
|
+
id: ValidationErrorId.required,
|
|
4060
|
+
defaultMessage: field.validation_error_msg,
|
|
4061
|
+
}));
|
|
3935
4062
|
}
|
|
3936
4063
|
return validators;
|
|
3937
4064
|
}
|
|
@@ -4044,8 +4171,10 @@ class CouponControlConfig extends ControlConfig {
|
|
|
4044
4171
|
}
|
|
4045
4172
|
}
|
|
4046
4173
|
|
|
4047
|
-
function couponValidator(message =
|
|
4048
|
-
return convert(Validators.pattern(/^[0-9a-z_-]+$/i), message
|
|
4174
|
+
function couponValidator(message = 'Enter a valid promo code') {
|
|
4175
|
+
return convert(Validators.pattern(/^[0-9a-z_-]+$/i), message, {
|
|
4176
|
+
id: ValidationErrorId.couponPattern,
|
|
4177
|
+
});
|
|
4049
4178
|
}
|
|
4050
4179
|
|
|
4051
4180
|
class CouponConverter extends Converter {
|
|
@@ -4067,9 +4196,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
4067
4196
|
type: Injectable
|
|
4068
4197
|
}], ctorParameters: () => [{ type: SyncService }] });
|
|
4069
4198
|
|
|
4070
|
-
const sendErrMessage$1 = (
|
|
4199
|
+
const sendErrMessage$1 = (message, params) => ({
|
|
4071
4200
|
cardYearExpiration: {
|
|
4072
|
-
message
|
|
4201
|
+
message,
|
|
4202
|
+
params,
|
|
4073
4203
|
},
|
|
4074
4204
|
});
|
|
4075
4205
|
const getLastCharactersInYear$1 = (str = new Date().getFullYear().toString()) => {
|
|
@@ -4086,17 +4216,28 @@ function cardYearValidator(control) {
|
|
|
4086
4216
|
const twoDigitsRegex = new RegExp(/^\d{2}$/);
|
|
4087
4217
|
const fieldCommonLength = 2;
|
|
4088
4218
|
if (value.length !== fieldCommonLength) {
|
|
4089
|
-
return sendErrMessage$1(`Enter ${fieldCommonLength} characters
|
|
4219
|
+
return sendErrMessage$1(`Enter ${fieldCommonLength} characters`, {
|
|
4220
|
+
id: ValidationErrorId.expirationLength,
|
|
4221
|
+
requiredLength: fieldCommonLength,
|
|
4222
|
+
});
|
|
4090
4223
|
}
|
|
4091
4224
|
if (!twoDigitsRegex.test(value)) {
|
|
4092
|
-
return sendErrMessage$1(
|
|
4225
|
+
return sendErrMessage$1('Enter a valid expiration year', {
|
|
4226
|
+
id: ValidationErrorId.expirationYearPattern,
|
|
4227
|
+
});
|
|
4093
4228
|
}
|
|
4094
4229
|
if (Number(value) < minYear) {
|
|
4095
|
-
return sendErrMessage$1(`Enter a year greater than or equal to ${minYear}
|
|
4230
|
+
return sendErrMessage$1(`Enter a year greater than or equal to ${minYear}`, {
|
|
4231
|
+
id: ValidationErrorId.expirationMinYear,
|
|
4232
|
+
minYear,
|
|
4233
|
+
});
|
|
4096
4234
|
}
|
|
4097
4235
|
const maxValidYear = minYear + maxYearsCount$1;
|
|
4098
4236
|
if (Number(value) > maxValidYear) {
|
|
4099
|
-
return sendErrMessage$1(`Enter a year less than or equal to ${maxValidYear}
|
|
4237
|
+
return sendErrMessage$1(`Enter a year less than or equal to ${maxValidYear}`, {
|
|
4238
|
+
id: ValidationErrorId.expirationMaxYear,
|
|
4239
|
+
maxYear: maxValidYear,
|
|
4240
|
+
});
|
|
4100
4241
|
}
|
|
4101
4242
|
return null;
|
|
4102
4243
|
}
|
|
@@ -4134,15 +4275,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
4134
4275
|
}], ctorParameters: () => [{ type: SyncService }] });
|
|
4135
4276
|
|
|
4136
4277
|
function phoneValidator() {
|
|
4137
|
-
return convert(Validators.pattern(/^\d*$/), 'Enter a valid phone'
|
|
4138
|
-
|
|
4139
|
-
|
|
4140
|
-
function minLengthValidator(minLength) {
|
|
4141
|
-
return convert(Validators.minLength(minLength), `Enter at least ${minLength} characters`);
|
|
4142
|
-
}
|
|
4143
|
-
|
|
4144
|
-
function maxLengthValidator(maxLength) {
|
|
4145
|
-
return convert(Validators.maxLength(maxLength), `Enter no more than ${maxLength} characters`);
|
|
4278
|
+
return convert(Validators.pattern(/^\d*$/), 'Enter a valid phone', {
|
|
4279
|
+
id: ValidationErrorId.phonePattern,
|
|
4280
|
+
});
|
|
4146
4281
|
}
|
|
4147
4282
|
|
|
4148
4283
|
class PhoneControlConfig extends ControlConfig {
|
|
@@ -4191,9 +4326,10 @@ const getMinMonth = (parsedYear) => {
|
|
|
4191
4326
|
}
|
|
4192
4327
|
return minMonth;
|
|
4193
4328
|
};
|
|
4194
|
-
const sendErrMessage = (
|
|
4329
|
+
const sendErrMessage = (message, params) => ({
|
|
4195
4330
|
rewritableError: {
|
|
4196
|
-
message
|
|
4331
|
+
message,
|
|
4332
|
+
params,
|
|
4197
4333
|
},
|
|
4198
4334
|
});
|
|
4199
4335
|
const getLastCharactersInYear = (str = new Date().getFullYear().toString()) => {
|
|
@@ -4218,26 +4354,45 @@ function cardExpValidator(control) {
|
|
|
4218
4354
|
const fieldCommonLength = 4;
|
|
4219
4355
|
const trickyFieldLength = fieldCommonLength + 1;
|
|
4220
4356
|
if (value.length !== trickyFieldLength) {
|
|
4221
|
-
return sendErrMessage(`Enter ${fieldCommonLength} characters
|
|
4357
|
+
return sendErrMessage(`Enter ${fieldCommonLength} characters`, {
|
|
4358
|
+
id: ValidationErrorId.expirationLength,
|
|
4359
|
+
requiredLength: fieldCommonLength,
|
|
4360
|
+
});
|
|
4222
4361
|
}
|
|
4223
4362
|
if (!twoDigitsRegex.test(month)) {
|
|
4224
|
-
return sendErrMessage('Enter a valid expiration month'
|
|
4363
|
+
return sendErrMessage('Enter a valid expiration month', {
|
|
4364
|
+
id: ValidationErrorId.expirationMonthPattern,
|
|
4365
|
+
});
|
|
4225
4366
|
}
|
|
4226
4367
|
if (Number(month) < minMonth) {
|
|
4227
|
-
return sendErrMessage(`Enter a month greater than or equal to ${minMonth}
|
|
4368
|
+
return sendErrMessage(`Enter a month greater than or equal to ${minMonth}`, {
|
|
4369
|
+
id: ValidationErrorId.expirationMinMonth,
|
|
4370
|
+
minMonth,
|
|
4371
|
+
});
|
|
4228
4372
|
}
|
|
4229
4373
|
if (Number(month) > maxMonths) {
|
|
4230
|
-
return sendErrMessage(`Enter a month less than or equal to ${maxMonths}
|
|
4374
|
+
return sendErrMessage(`Enter a month less than or equal to ${maxMonths}`, {
|
|
4375
|
+
id: ValidationErrorId.expirationMaxMonth,
|
|
4376
|
+
maxMonth: maxMonths,
|
|
4377
|
+
});
|
|
4231
4378
|
}
|
|
4232
4379
|
if (!twoDigitsRegex.test(year)) {
|
|
4233
|
-
return sendErrMessage(
|
|
4380
|
+
return sendErrMessage('Enter a valid expiration year', {
|
|
4381
|
+
id: ValidationErrorId.expirationYearPattern,
|
|
4382
|
+
});
|
|
4234
4383
|
}
|
|
4235
4384
|
if (Number(year) < minYear) {
|
|
4236
|
-
return sendErrMessage(`Enter a year greater than or equal to ${minYear}
|
|
4385
|
+
return sendErrMessage(`Enter a year greater than or equal to ${minYear}`, {
|
|
4386
|
+
id: ValidationErrorId.expirationMinYear,
|
|
4387
|
+
minYear,
|
|
4388
|
+
});
|
|
4237
4389
|
}
|
|
4238
4390
|
const maxValidYear = minYear + maxYearsCount;
|
|
4239
4391
|
if (Number(year) > maxValidYear) {
|
|
4240
|
-
return sendErrMessage(`Enter a year less than or equal to ${maxValidYear}
|
|
4392
|
+
return sendErrMessage(`Enter a year less than or equal to ${maxValidYear}`, {
|
|
4393
|
+
id: ValidationErrorId.expirationMaxYear,
|
|
4394
|
+
maxYear: maxValidYear,
|
|
4395
|
+
});
|
|
4241
4396
|
}
|
|
4242
4397
|
return null;
|
|
4243
4398
|
}
|
|
@@ -6852,6 +7007,7 @@ class PaymentService {
|
|
|
6852
7007
|
this.initializeBehaviourStrategies(config);
|
|
6853
7008
|
this.emitFormResponse(this.data);
|
|
6854
7009
|
this.fields = this.getFields();
|
|
7010
|
+
this.setupInitialFieldValues();
|
|
6855
7011
|
this.form = this.formService.createForm(this.fields);
|
|
6856
7012
|
this.updatePidConfig();
|
|
6857
7013
|
this.setupSyncService(this.form, this.fields, config);
|
|
@@ -6921,6 +7077,24 @@ class PaymentService {
|
|
|
6921
7077
|
this.syncService.setup(this.form, this.fields, this.config);
|
|
6922
7078
|
return submitResponse;
|
|
6923
7079
|
}
|
|
7080
|
+
setupInitialFieldValues() {
|
|
7081
|
+
const fieldsToOverride = this.config.overrideFormFields;
|
|
7082
|
+
if (!fieldsToOverride)
|
|
7083
|
+
return;
|
|
7084
|
+
const overridableNames = new Set(Object.keys(fieldsToOverride).filter((name) => fieldsAllowedToOverride.has(name)));
|
|
7085
|
+
for (const field of this.fields) {
|
|
7086
|
+
const fieldName = field.name;
|
|
7087
|
+
if (!overridableNames.has(fieldName))
|
|
7088
|
+
continue;
|
|
7089
|
+
const config = overrideFieldConfigs[fieldName];
|
|
7090
|
+
if (!config)
|
|
7091
|
+
continue;
|
|
7092
|
+
const overriddenValue = fieldsToOverride[fieldName]?.initialValue;
|
|
7093
|
+
field.value = String(config.validator(overriddenValue)
|
|
7094
|
+
? overriddenValue
|
|
7095
|
+
: config.defaultValue);
|
|
7096
|
+
}
|
|
7097
|
+
}
|
|
6924
7098
|
getFields() {
|
|
6925
7099
|
if (this.data instanceof SubmitResponse) {
|
|
6926
7100
|
return this.data.fields ?? [];
|
|
@@ -8119,14 +8293,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
|
|
|
8119
8293
|
class ValidatorsModule {
|
|
8120
8294
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ValidatorsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
8121
8295
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: ValidatorsModule, imports: [CommonModule] }); }
|
|
8122
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ValidatorsModule, providers: [CreditCardMinLengthValidator], imports: [CommonModule] }); }
|
|
8296
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ValidatorsModule, providers: [CreditCardMinLengthValidator, CreditCardMaxLengthValidator], imports: [CommonModule] }); }
|
|
8123
8297
|
}
|
|
8124
8298
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ValidatorsModule, decorators: [{
|
|
8125
8299
|
type: NgModule,
|
|
8126
8300
|
args: [{
|
|
8127
8301
|
declarations: [],
|
|
8128
8302
|
imports: [CommonModule],
|
|
8129
|
-
providers: [CreditCardMinLengthValidator],
|
|
8303
|
+
providers: [CreditCardMinLengthValidator, CreditCardMaxLengthValidator],
|
|
8130
8304
|
}]
|
|
8131
8305
|
}] });
|
|
8132
8306
|
|