@xsolla/payment-client-core 0.0.9 → 0.0.10-1

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.
Files changed (53) hide show
  1. package/esm2020/lib/core/payment/emit-data.service.abstract.mjs +11 -0
  2. package/esm2020/lib/core/payment/finance-details/cart-item.interface.mjs +2 -0
  3. package/esm2020/lib/core/payment/finance-details/cart-line.interface.mjs +2 -0
  4. package/esm2020/lib/core/payment/finance-details/cart-pricing.interface.mjs +2 -0
  5. package/esm2020/lib/core/payment/finance-details/default-image-patterns.const.mjs +10 -0
  6. package/esm2020/lib/core/payment/finance-details/finance-details-response.token.mjs +8 -0
  7. package/esm2020/lib/core/payment/finance-details/finance-details.class.mjs +214 -0
  8. package/esm2020/lib/core/payment/finance-details/finance-details.service.mjs +25 -0
  9. package/esm2020/lib/core/payment/finance-details/price.helpers.mjs +15 -0
  10. package/esm2020/lib/core/payment/finance-details/price.interface.mjs +2 -0
  11. package/esm2020/lib/core/payment/form/converters/converter.abstract.mjs +2 -5
  12. package/esm2020/lib/core/payment/form/converters/zip.converter.mjs +3 -3
  13. package/esm2020/lib/core/payment/initialize/initialize-request-params.interface.mjs +1 -1
  14. package/esm2020/lib/core/payment/initialize/initialize.service.mjs +4 -1
  15. package/esm2020/lib/core/payment/payment.interface.mjs +1 -1
  16. package/esm2020/lib/core/payment/payment.service.mjs +42 -8
  17. package/esm2020/lib/core/payment/sync/sync.service.mjs +13 -2
  18. package/esm2020/lib/core/payment/xps-finance.interface.mjs +2 -0
  19. package/esm2020/lib/core/payment/xps-purchase.interface.mjs +2 -0
  20. package/esm2020/lib/core/payment/xps-response.interface.mjs +1 -1
  21. package/esm2020/lib/core/payment/xps-summary.interface.mjs +2 -0
  22. package/esm2020/lib/core-library.module.mjs +4 -1
  23. package/esm2020/lib/core-library.service.mjs +9 -6
  24. package/fesm2015/xsolla-payment-client-core.mjs +347 -16
  25. package/fesm2015/xsolla-payment-client-core.mjs.map +1 -1
  26. package/fesm2020/xsolla-payment-client-core.mjs +336 -16
  27. package/fesm2020/xsolla-payment-client-core.mjs.map +1 -1
  28. package/lib/core/payment/emit-data.service.abstract.d.ts +7 -0
  29. package/lib/core/payment/finance-details/cart-item.interface.d.ts +13 -0
  30. package/lib/core/payment/finance-details/cart-line.interface.d.ts +8 -0
  31. package/lib/core/payment/finance-details/cart-pricing.interface.d.ts +10 -0
  32. package/lib/core/payment/finance-details/default-image-patterns.const.d.ts +6 -0
  33. package/lib/core/payment/finance-details/finance-details-response.token.d.ts +7 -0
  34. package/lib/core/payment/finance-details/finance-details.class.d.ts +25 -0
  35. package/lib/core/payment/finance-details/finance-details.service.d.ts +12 -0
  36. package/lib/core/payment/finance-details/price.helpers.d.ts +6 -0
  37. package/lib/core/payment/finance-details/price.interface.d.ts +4 -0
  38. package/lib/core/payment/form/converters/converter.abstract.d.ts +1 -2
  39. package/lib/core/payment/initialize/initialize-request-params.interface.d.ts +1 -0
  40. package/lib/core/payment/initialize/initialize.service.d.ts +1 -0
  41. package/lib/core/payment/payment.interface.d.ts +3 -2
  42. package/lib/core/payment/payment.service.d.ts +11 -3
  43. package/lib/core/payment/sync/sync.service.d.ts +6 -2
  44. package/lib/core/payment/xps-finance.interface.d.ts +57 -0
  45. package/lib/core/payment/xps-purchase.interface.d.ts +15 -0
  46. package/lib/core/payment/xps-response.interface.d.ts +2 -74
  47. package/lib/core/payment/xps-summary.interface.d.ts +6 -0
  48. package/lib/core-library.service.d.ts +3 -1
  49. package/package.json +1 -1
  50. package/xsolla-payment-client-core-0.0.10-1.tgz +0 -0
  51. package/esm2020/lib/core/payment/finance-details.interface.mjs +0 -2
  52. package/lib/core/payment/finance-details.interface.d.ts +0 -2
  53. package/xsolla-payment-client-core-0.0.9.tgz +0 -0
@@ -1,7 +1,7 @@
1
1
  import { __awaiter } from 'tslib';
2
2
  import * as i0 from '@angular/core';
3
3
  import { InjectionToken, Injectable, Inject, isDevMode, NgModule } from '@angular/core';
4
- import { firstValueFrom, lastValueFrom, map, BehaviorSubject, Subject, filter as filter$1, takeUntil, skip, throwError } from 'rxjs';
4
+ import { firstValueFrom, lastValueFrom, map, Subject, BehaviorSubject, filter as filter$1, takeUntil, skip, throwError } from 'rxjs';
5
5
  import * as i1 from '@angular/common/http';
6
6
  import { HttpParams, HttpHeaders, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
7
7
  import { UntypedFormGroup, Validators, UntypedFormControl, ReactiveFormsModule } from '@angular/forms';
@@ -482,12 +482,15 @@ class InitializeService {
482
482
  this.settingsService = settingsService;
483
483
  this.countryService = countryService;
484
484
  this.apiRoute = 'directpayment';
485
+ // TODO PAYMENTS-15743: replace with new refer id for headless core
486
+ this.ps4ReferId = '22';
485
487
  }
486
488
  request(config) {
487
489
  return __awaiter(this, void 0, void 0, function* () {
488
490
  const requestParams = {
489
491
  access_token: this.settingsService.token,
490
492
  pid: String(config.paymentMethodId),
493
+ refer: this.ps4ReferId,
491
494
  country: this.countryService.getCountry(),
492
495
  returnUrl: config.returnUrl,
493
496
  };
@@ -909,6 +912,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
909
912
  }] }, { type: SettingsService }, { type: DeviceFingerPrintService }, { type: SecureApiClient }];
910
913
  } });
911
914
 
915
+ class EmitDataService {
916
+ constructor() {
917
+ this.dataSubject = new Subject();
918
+ this.data$ = this.dataSubject.asObservable();
919
+ }
920
+ emit(data) {
921
+ this.dataSubject.next(data);
922
+ }
923
+ }
924
+
912
925
  class XpsRequest {
913
926
  addXpsParameters(parameters) {
914
927
  for (const key in parameters) {
@@ -973,8 +986,9 @@ const syncResponseFactoryProvider = {
973
986
  useValue: (...args) => new SyncResponse(...args),
974
987
  };
975
988
 
976
- class SyncService {
989
+ class SyncService extends EmitDataService {
977
990
  constructor(requestFactory, responseFactory, secureApi, settingsService) {
991
+ super();
978
992
  this.requestFactory = requestFactory;
979
993
  this.responseFactory = responseFactory;
980
994
  this.secureApi = secureApi;
@@ -1017,6 +1031,15 @@ class SyncService {
1017
1031
  });
1018
1032
  });
1019
1033
  }
1034
+ getSyncValidationErrors(field) {
1035
+ var _a;
1036
+ const control = this.form.get(field.name);
1037
+ if (!control) {
1038
+ return null;
1039
+ }
1040
+ const rewritableError = (_a = control.errors) === null || _a === void 0 ? void 0 : _a.rewritableError;
1041
+ return rewritableError ? { message: rewritableError.message } : null;
1042
+ }
1020
1043
  request(field) {
1021
1044
  return __awaiter(this, void 0, void 0, function* () {
1022
1045
  const requestParams = this.requestFactory({
@@ -1029,6 +1052,7 @@ class SyncService {
1029
1052
  headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8'),
1030
1053
  responseType: 'json',
1031
1054
  })).then((response) => {
1055
+ this.emit(response);
1032
1056
  return this.responseFactory(field, response);
1033
1057
  });
1034
1058
  });
@@ -1119,7 +1143,7 @@ class Converter {
1119
1143
  return config;
1120
1144
  }
1121
1145
  convertToFormControl(field) {
1122
- return new UntypedFormControl(this.getValue(field), this.getValidators(field), this.getAsyncValidators(field));
1146
+ return new UntypedFormControl(this.getValue(field), this.getValidators(field));
1123
1147
  }
1124
1148
  getValidators(field) {
1125
1149
  const validators = [];
@@ -1138,9 +1162,6 @@ class Converter {
1138
1162
  }
1139
1163
  return validators;
1140
1164
  }
1141
- getAsyncValidators(field) {
1142
- return () => __awaiter(this, void 0, void 0, function* () { return this.syncService.validate(field); });
1143
- }
1144
1165
  createDefaultControlConfig(controlConfigClass, field) {
1145
1166
  const config = new controlConfigClass();
1146
1167
  this.copyCommonOptions(config, field);
@@ -1225,8 +1246,8 @@ class ZipConverter extends Converter {
1225
1246
  const validators = super
1226
1247
  .getValidators(field)
1227
1248
  .concat([
1228
- convert(Validators.minLength(minLength), 'Enter at least ${minLength} characters'),
1229
- convert(Validators.maxLength(maxLength), 'Enter no more than ${maxLength} characters'),
1249
+ convert(Validators.minLength(minLength), `Enter at least ${minLength} characters`),
1250
+ convert(Validators.maxLength(maxLength), `Enter no more than ${maxLength} characters`),
1230
1251
  ]);
1231
1252
  if (this.isUsCountry) {
1232
1253
  validators.push(convert(restrictedValueValidator('00000'), 'Enter a valid ZIP code'));
@@ -2505,26 +2526,306 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
2505
2526
  }]
2506
2527
  }], ctorParameters: function () { return [{ type: StatusRequestService }, { type: ListenStatusService }, { type: NextActionService }]; } });
2507
2528
 
2529
+ /**
2530
+ * default image for purchase item is set on Publisher Account side.
2531
+ * for purchase checkout items the image url is converted into base64 string.
2532
+ * to determine default image fixed templates are used
2533
+ */
2534
+ const defaultImagePatterns = [
2535
+ /^data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAAAAADmVT4XAAACMUlEQVR4Ae3YgYqdMBSE4fP/,
2536
+ /virtual_item_default_image/,
2537
+ ];
2538
+
2539
+ function extractMoneyCurrency(money, allowZero = true) {
2540
+ var _a, _b;
2541
+ return {
2542
+ amount: (_a = money === null || money === void 0 ? void 0 : money.amount) !== null && _a !== void 0 ? _a : (allowZero ? 0 : null),
2543
+ currency: (_b = money === null || money === void 0 ? void 0 : money.currency) !== null && _b !== void 0 ? _b : '',
2544
+ };
2545
+ }
2546
+ function createPriceOrUndefined(amount, currency) {
2547
+ return amount !== undefined && amount !== null
2548
+ ? {
2549
+ amount,
2550
+ currency,
2551
+ }
2552
+ : undefined;
2553
+ }
2554
+
2555
+ class FinanceDetails {
2556
+ get shouldShowZeroIndirectTaxRate() {
2557
+ var _a, _b, _c, _d;
2558
+ return !!(((_b = (_a = this.finance) === null || _a === void 0 ? void 0 : _a.vat) === null || _b === void 0 ? void 0 : _b.visible) || ((_d = (_c = this.finance) === null || _c === void 0 ? void 0 : _c.vat_user) === null || _d === void 0 ? void 0 : _d.visible));
2559
+ }
2560
+ get isSalesTaxes() {
2561
+ var _a, _b, _c, _d;
2562
+ return !!(((_b = (_a = this.finance) === null || _a === void 0 ? void 0 : _a.sales_tax) === null || _b === void 0 ? void 0 : _b.amount) || ((_d = (_c = this.finance) === null || _c === void 0 ? void 0 : _c.sales_tax_user) === null || _d === void 0 ? void 0 : _d.amount));
2563
+ }
2564
+ constructor(parameters) {
2565
+ this.purchase = parameters.purchase;
2566
+ this.finance = parameters.finance;
2567
+ }
2568
+ getFormattedPurchaseForCart() {
2569
+ var _a, _b, _c, _d;
2570
+ const checkouts = (_a = this.purchase.checkout_items) === null || _a === void 0 ? void 0 : _a.map((item) => {
2571
+ return {
2572
+ imgSrc: item.image_url,
2573
+ hasDefaultImg: this.isDefaultImage(item.image_url),
2574
+ title: item.name,
2575
+ price: extractMoneyCurrency(item, false),
2576
+ priceBeforeDiscount: createPriceOrUndefined(item.amount_before_discount, item.currency),
2577
+ quantity: item.quantity,
2578
+ description: item.description,
2579
+ tax: this.getTaxForItem(item.indirect_tax_rate),
2580
+ isBonus: item.is_bonus,
2581
+ };
2582
+ });
2583
+ const virtualCurrencies = (_b = this.purchase.virtual_currency) === null || _b === void 0 ? void 0 : _b.map((item) => {
2584
+ return {
2585
+ imgSrc: item.image_url,
2586
+ hasDefaultImg: this.isDefaultImage(item.image_url),
2587
+ title: `${item.quantity} ${item.name}`,
2588
+ price: extractMoneyCurrency(item),
2589
+ description: item.description,
2590
+ isBonus: item.is_bonus,
2591
+ };
2592
+ });
2593
+ const virtualItems = (_c = this.purchase.virtual_items) === null || _c === void 0 ? void 0 : _c.map((item) => {
2594
+ return {
2595
+ imgSrc: item.image_url,
2596
+ hasDefaultImg: this.isDefaultImage(item.image_url),
2597
+ title: item.name,
2598
+ price: extractMoneyCurrency(item),
2599
+ description: item.description,
2600
+ quantity: item.quantity,
2601
+ isBonus: item.is_bonus,
2602
+ };
2603
+ });
2604
+ let checkoutArray = undefined;
2605
+ if (this.purchase.checkout) {
2606
+ checkoutArray = [
2607
+ {
2608
+ title: this.purchase.checkout.description
2609
+ ? this.purchase.checkout.description
2610
+ : 'In-game purchase',
2611
+ price: extractMoneyCurrency(this.purchase.checkout),
2612
+ isBonus: (_d = this.purchase.checkout.is_bonus) !== null && _d !== void 0 ? _d : false,
2613
+ },
2614
+ ];
2615
+ }
2616
+ return [
2617
+ ...(checkouts !== null && checkouts !== void 0 ? checkouts : []),
2618
+ ...(virtualCurrencies !== null && virtualCurrencies !== void 0 ? virtualCurrencies : []),
2619
+ ...(virtualItems !== null && virtualItems !== void 0 ? virtualItems : []),
2620
+ ...(checkoutArray !== null && checkoutArray !== void 0 ? checkoutArray : []),
2621
+ ];
2622
+ }
2623
+ getFormattedPricingForCart() {
2624
+ // subtotal details fields
2625
+ const subtotalDetailsSorting = [
2626
+ {
2627
+ key: 'discount',
2628
+ title: 'Discount',
2629
+ },
2630
+ {
2631
+ key: 'fee',
2632
+ title: 'Payment system fee',
2633
+ },
2634
+ {
2635
+ key: 'user_balance',
2636
+ title: 'Balance',
2637
+ },
2638
+ ];
2639
+ return {
2640
+ subtotal: {
2641
+ title: 'Subtotal',
2642
+ money: createPriceOrUndefined(this.finance.sub_total.amount, this.finance.sub_total.currency),
2643
+ },
2644
+ subtotalPayment: {
2645
+ title: '',
2646
+ money: createPriceOrUndefined(this.finance.sub_total.payment_amount, this.finance.sub_total.payment_currency),
2647
+ },
2648
+ total: {
2649
+ title: 'Total',
2650
+ money: extractMoneyCurrency(this.finance.total),
2651
+ },
2652
+ totalDetails: this.getTaxesForTotalDetails(),
2653
+ subtotalDetails: [
2654
+ ...subtotalDetailsSorting.map((sorting) => {
2655
+ const field = this.finance[sorting.key];
2656
+ if (field) {
2657
+ return Object.assign(Object.assign({}, sorting), { money: {
2658
+ amount: sorting.key === 'discount' && field.amount
2659
+ ? -field.amount
2660
+ : field.amount,
2661
+ currency: field.currency,
2662
+ } });
2663
+ }
2664
+ return sorting;
2665
+ }),
2666
+ ...this.getTaxesForSubtotalDetails(),
2667
+ ],
2668
+ };
2669
+ }
2670
+ getPaymentCountry() {
2671
+ var _a;
2672
+ return (_a = this.finance) === null || _a === void 0 ? void 0 : _a.payment_country.iso;
2673
+ }
2674
+ getTaxForItem(indirectTaxRate) {
2675
+ if (indirectTaxRate ||
2676
+ (this.shouldShowZeroIndirectTaxRate && indirectTaxRate === 0)) {
2677
+ if (this.isSalesTaxes) {
2678
+ return {
2679
+ content: `Sales tax ${indirectTaxRate}%`,
2680
+ };
2681
+ }
2682
+ if (this.isIndia()) {
2683
+ return {
2684
+ content: `GST ${indirectTaxRate}%`,
2685
+ };
2686
+ }
2687
+ if (this.isGhana()) {
2688
+ return {
2689
+ content: 'VAT, NHIL, GETFund Levy, and Covid-19 Levy',
2690
+ };
2691
+ }
2692
+ return {
2693
+ content: `VAT ${indirectTaxRate}%`,
2694
+ };
2695
+ }
2696
+ return null;
2697
+ }
2698
+ getTaxesForSubtotalDetails() {
2699
+ var _a, _b, _c, _d, _e, _f;
2700
+ const ret = [];
2701
+ // subtotal. VAT %p
2702
+ if (this.finance.vat_user &&
2703
+ ((_c = (_b = (_a = this.finance) === null || _a === void 0 ? void 0 : _a.vat_user) === null || _b === void 0 ? void 0 : _b.amount) !== null && _c !== void 0 ? _c : (_e = (_d = this.finance) === null || _d === void 0 ? void 0 : _d.vat_user) === null || _e === void 0 ? void 0 : _e.visible)) {
2704
+ ret.push({
2705
+ key: 'vat_user',
2706
+ title: this.getVatLabelForSubtotalDetails(),
2707
+ money: extractMoneyCurrency(this.finance.vat_user),
2708
+ });
2709
+ }
2710
+ if ((_f = this.finance.sales_tax_user) === null || _f === void 0 ? void 0 : _f.amount) {
2711
+ ret.push({
2712
+ key: 'sales_tax_user',
2713
+ title: 'Sales tax',
2714
+ money: extractMoneyCurrency(this.finance.sales_tax_user),
2715
+ });
2716
+ }
2717
+ return ret;
2718
+ }
2719
+ getVatLabelForSubtotalDetails() {
2720
+ var _a, _b, _c, _d;
2721
+ if (this.isIndia()) {
2722
+ return `GST ${(_b = (_a = this.finance.vat_user) === null || _a === void 0 ? void 0 : _a.percent) !== null && _b !== void 0 ? _b : ''}%`;
2723
+ }
2724
+ if (this.isGhana()) {
2725
+ return `VAT, NHIL, GETFund Levy, and Covid-19 Levy`;
2726
+ }
2727
+ return `VAT ${(_d = (_c = this.finance.vat_user) === null || _c === void 0 ? void 0 : _c.percent) !== null && _d !== void 0 ? _d : ''}%`;
2728
+ }
2729
+ getTaxesForTotalDetails() {
2730
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2731
+ const ret = [];
2732
+ // for totalDetails. VAT
2733
+ if ((((_b = (_a = this.finance) === null || _a === void 0 ? void 0 : _a.vat) === null || _b === void 0 ? void 0 : _b.amount) || ((_d = (_c = this.finance) === null || _c === void 0 ? void 0 : _c.vat) === null || _d === void 0 ? void 0 : _d.visible)) &&
2734
+ !((_f = (_e = this.finance) === null || _e === void 0 ? void 0 : _e.vat_user) === null || _f === void 0 ? void 0 : _f.amount)) {
2735
+ ret.push({
2736
+ key: 'vat',
2737
+ title: this.getVatLabelForTotalDetails(),
2738
+ money: extractMoneyCurrency(this.finance.vat),
2739
+ });
2740
+ }
2741
+ if (((_h = (_g = this.finance) === null || _g === void 0 ? void 0 : _g.sales_tax) === null || _h === void 0 ? void 0 : _h.amount) &&
2742
+ !((_k = (_j = this.finance) === null || _j === void 0 ? void 0 : _j.sales_tax_user) === null || _k === void 0 ? void 0 : _k.amount)) {
2743
+ ret.push({
2744
+ key: 'sales_tax',
2745
+ title: 'Sales tax included',
2746
+ money: extractMoneyCurrency(this.finance.sales_tax),
2747
+ });
2748
+ }
2749
+ return ret;
2750
+ }
2751
+ getVatLabelForTotalDetails() {
2752
+ if (this.isIndia()) {
2753
+ return `Including ${this.finance.vat.percent}% GST`;
2754
+ }
2755
+ if (this.isGhana()) {
2756
+ return 'Including VAT, NHIL, GETFund Levy, and Covid-19 Levy';
2757
+ }
2758
+ return `Including ${this.finance.vat.percent}% VAT`;
2759
+ }
2760
+ isIndia() {
2761
+ var _a;
2762
+ return ((_a = this.finance) === null || _a === void 0 ? void 0 : _a.payment_country.iso) === 'IN';
2763
+ }
2764
+ isGhana() {
2765
+ var _a;
2766
+ return ((_a = this.finance) === null || _a === void 0 ? void 0 : _a.payment_country.iso) === 'GH';
2767
+ }
2768
+ isDefaultImage(url) {
2769
+ return defaultImagePatterns.some((regex) => regex.test(url));
2770
+ }
2771
+ }
2772
+
2773
+ const financeDetailsResponseFactoryToken = new InjectionToken('FinanceDetails');
2774
+ const financeDetailsResponseFactoryProvider = {
2775
+ provide: financeDetailsResponseFactoryToken,
2776
+ useValue: (...args) => new FinanceDetails(...args),
2777
+ };
2778
+
2779
+ class FinanceDetailsService extends EmitDataService {
2780
+ constructor(responseFactory) {
2781
+ super();
2782
+ this.responseFactory = responseFactory;
2783
+ }
2784
+ emit(summary) {
2785
+ if (summary) {
2786
+ super.emit(this.responseFactory(summary));
2787
+ }
2788
+ }
2789
+ }
2790
+ FinanceDetailsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FinanceDetailsService, deps: [{ token: financeDetailsResponseFactoryToken }], target: i0.ɵɵFactoryTarget.Injectable });
2791
+ FinanceDetailsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FinanceDetailsService, providedIn: 'root' });
2792
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: FinanceDetailsService, decorators: [{
2793
+ type: Injectable,
2794
+ args: [{ providedIn: 'root' }]
2795
+ }], ctorParameters: function () {
2796
+ return [{ type: undefined, decorators: [{
2797
+ type: Inject,
2798
+ args: [financeDetailsResponseFactoryToken]
2799
+ }] }];
2800
+ } });
2801
+
2508
2802
  class PaymentService {
2509
- constructor(initializeService, submitService, syncService, formService, statusService, nextActionService, controlConfigService) {
2803
+ constructor(initializeService, submitService, syncService, formService, statusService, financeDetailsService, nextActionService, controlConfigService) {
2510
2804
  this.initializeService = initializeService;
2511
2805
  this.submitService = submitService;
2512
2806
  this.syncService = syncService;
2513
2807
  this.formService = formService;
2514
2808
  this.statusService = statusService;
2809
+ this.financeDetailsService = financeDetailsService;
2515
2810
  this.nextActionService = nextActionService;
2516
2811
  this.controlConfigService = controlConfigService;
2517
2812
  this.form = null;
2518
2813
  this.data = null;
2814
+ this.financeDetails = null;
2519
2815
  this.fields = [];
2816
+ this.destroy$ = new Subject();
2520
2817
  }
2521
2818
  initialize(config) {
2819
+ var _a;
2522
2820
  return __awaiter(this, void 0, void 0, function* () {
2821
+ this.destroy$ = new Subject();
2822
+ this.listenFinanceDetails();
2523
2823
  this.config = config;
2524
2824
  this.data = yield this.initializeService.request(config);
2525
2825
  this.fields = this.getFields();
2526
2826
  this.form = this.formService.createForm(this.fields);
2527
- this.syncService.setup(this.form, this.fields);
2827
+ this.emitFinanceDetails((_a = this.data.paymentForm) === null || _a === void 0 ? void 0 : _a.summary);
2828
+ this.setupSyncService(this.form, this.fields);
2528
2829
  return this.fields;
2529
2830
  });
2530
2831
  }
@@ -2534,6 +2835,7 @@ class PaymentService {
2534
2835
  throw new Error('form is empty!');
2535
2836
  }
2536
2837
  const submitResponse = yield this.submitService.request(this.fields, this.form);
2838
+ this.emitFinanceDetails(submitResponse.summary);
2537
2839
  return this.nextActionService.getNextAction(submitResponse);
2538
2840
  });
2539
2841
  }
@@ -2543,6 +2845,10 @@ class PaymentService {
2543
2845
  }
2544
2846
  validate(field) {
2545
2847
  return __awaiter(this, void 0, void 0, function* () {
2848
+ const syncErrors = this.syncService.getSyncValidationErrors(field);
2849
+ if (syncErrors) {
2850
+ return Promise.resolve(syncErrors);
2851
+ }
2546
2852
  return this.syncService.validate(field);
2547
2853
  });
2548
2854
  }
@@ -2550,7 +2856,7 @@ class PaymentService {
2550
2856
  throw new Error('Method not implemented.');
2551
2857
  }
2552
2858
  getFinanceDetails() {
2553
- throw new Error('Method not implemented.');
2859
+ return this.financeDetails;
2554
2860
  }
2555
2861
  getStatus(params) {
2556
2862
  return __awaiter(this, void 0, void 0, function* () {
@@ -2565,15 +2871,36 @@ class PaymentService {
2565
2871
  const formControl = (_a = this.form) === null || _a === void 0 ? void 0 : _a.get(name);
2566
2872
  formControl === null || formControl === void 0 ? void 0 : formControl.setValue(value);
2567
2873
  }
2874
+ destroy() {
2875
+ this.data = null;
2876
+ this.financeDetails = null;
2877
+ this.form = null;
2878
+ this.fields = [];
2879
+ this.destroy$.next();
2880
+ }
2881
+ emitFinanceDetails(summary) {
2882
+ this.financeDetailsService.emit(summary);
2883
+ }
2884
+ setupSyncService(form, fields) {
2885
+ this.syncService.setup(form, fields);
2886
+ this.syncService.data$
2887
+ .pipe(takeUntil(this.destroy$))
2888
+ .subscribe((response) => this.emitFinanceDetails(response.summary));
2889
+ }
2890
+ listenFinanceDetails() {
2891
+ this.financeDetailsService.data$
2892
+ .pipe(takeUntil(this.destroy$))
2893
+ .subscribe((financeDetails) => (this.financeDetails = financeDetails));
2894
+ }
2568
2895
  }
2569
- PaymentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentService, deps: [{ token: InitializeService }, { token: SubmitService }, { token: SyncService }, { token: FormService }, { token: StatusService }, { token: NextActionService }, { token: ControlConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
2896
+ PaymentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentService, deps: [{ token: InitializeService }, { token: SubmitService }, { token: SyncService }, { token: FormService }, { token: StatusService }, { token: FinanceDetailsService }, { token: NextActionService }, { token: ControlConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
2570
2897
  PaymentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentService, providedIn: 'root' });
2571
2898
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentService, decorators: [{
2572
2899
  type: Injectable,
2573
2900
  args: [{
2574
2901
  providedIn: 'root',
2575
2902
  }]
2576
- }], ctorParameters: function () { return [{ type: InitializeService }, { type: SubmitService }, { type: SyncService }, { type: FormService }, { type: StatusService }, { type: NextActionService }, { type: ControlConfigService }]; } });
2903
+ }], ctorParameters: function () { return [{ type: InitializeService }, { type: SubmitService }, { type: SyncService }, { type: FormService }, { type: StatusService }, { type: FinanceDetailsService }, { type: NextActionService }, { type: ControlConfigService }]; } });
2577
2904
 
2578
2905
  class RefundPolicyService {
2579
2906
  constructor(settingsService) {
@@ -2681,7 +3008,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
2681
3008
  }], ctorParameters: function () { return [{ type: SettingsService }, { type: RefundPolicyService }, { type: SecureConnectionService }, { type: DisclaimerService }]; } });
2682
3009
 
2683
3010
  class CoreLibraryService {
2684
- constructor(settingsService, countryService, paymentMethodsService, savedMethodsService, userBalanceService, paymentService, deviceFingerPrintService, legalService, nextActionService) {
3011
+ constructor(settingsService, countryService, paymentMethodsService, savedMethodsService, userBalanceService, paymentService, deviceFingerPrintService, financeDetailsService, legalService, nextActionService) {
2685
3012
  this.settingsService = settingsService;
2686
3013
  this.countryService = countryService;
2687
3014
  this.paymentMethodsService = paymentMethodsService;
@@ -2689,6 +3016,7 @@ class CoreLibraryService {
2689
3016
  this.userBalanceService = userBalanceService;
2690
3017
  this.paymentService = paymentService;
2691
3018
  this.deviceFingerPrintService = deviceFingerPrintService;
3019
+ this.financeDetailsService = financeDetailsService;
2692
3020
  this.legalService = legalService;
2693
3021
  this.nextActionService = nextActionService;
2694
3022
  this.paymentMethods = {
@@ -2717,6 +3045,7 @@ class CoreLibraryService {
2717
3045
  runThreeDs: () => this.paymentService.runThreeDs(),
2718
3046
  getStatus: (params) => __awaiter(this, void 0, void 0, function* () { return this.paymentService.getStatus(params); }),
2719
3047
  flowUpdates$: this.nextActionService.flowUpdates$,
3048
+ financeDetailsUpdates$: this.financeDetailsService.data$,
2720
3049
  form: {
2721
3050
  getControlConfig: (field) => this.paymentService.getFieldConfig(field),
2722
3051
  changeFieldValue: (name, value) => this.paymentService.changeFieldValue(name, value),
@@ -2727,14 +3056,14 @@ class CoreLibraryService {
2727
3056
  return this.legalService.getLegalComponentConfig();
2728
3057
  }
2729
3058
  }
2730
- CoreLibraryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CoreLibraryService, deps: [{ token: SettingsService }, { token: CountryService }, { token: PaymentMethodsService }, { token: SavedMethodsService }, { token: UserBalanceService }, { token: PaymentService }, { token: DeviceFingerPrintService }, { token: LegalService }, { token: NextActionService }], target: i0.ɵɵFactoryTarget.Injectable });
3059
+ CoreLibraryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CoreLibraryService, deps: [{ token: SettingsService }, { token: CountryService }, { token: PaymentMethodsService }, { token: SavedMethodsService }, { token: UserBalanceService }, { token: PaymentService }, { token: DeviceFingerPrintService }, { token: FinanceDetailsService }, { token: LegalService }, { token: NextActionService }], target: i0.ɵɵFactoryTarget.Injectable });
2731
3060
  CoreLibraryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CoreLibraryService, providedIn: 'root' });
2732
3061
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: CoreLibraryService, decorators: [{
2733
3062
  type: Injectable,
2734
3063
  args: [{
2735
3064
  providedIn: 'root',
2736
3065
  }]
2737
- }], ctorParameters: function () { return [{ type: SettingsService }, { type: CountryService }, { type: PaymentMethodsService }, { type: SavedMethodsService }, { type: UserBalanceService }, { type: PaymentService }, { type: DeviceFingerPrintService }, { type: LegalService }, { type: NextActionService }]; } });
3066
+ }], ctorParameters: function () { return [{ type: SettingsService }, { type: CountryService }, { type: PaymentMethodsService }, { type: SavedMethodsService }, { type: UserBalanceService }, { type: PaymentService }, { type: DeviceFingerPrintService }, { type: FinanceDetailsService }, { type: LegalService }, { type: NextActionService }]; } });
2738
3067
 
2739
3068
  class HttpError extends AppError {
2740
3069
  constructor(error, req) {
@@ -2837,6 +3166,7 @@ CoreLibraryModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versi
2837
3166
  statusResponseFactoryProvider,
2838
3167
  checkStatusRequestFactoryProvider,
2839
3168
  checkStatusResponseFactoryProvider,
3169
+ financeDetailsResponseFactoryProvider,
2840
3170
  {
2841
3171
  provide: nextActionsToken,
2842
3172
  useValue: nextActions,
@@ -2866,6 +3196,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
2866
3196
  statusResponseFactoryProvider,
2867
3197
  checkStatusRequestFactoryProvider,
2868
3198
  checkStatusResponseFactoryProvider,
3199
+ financeDetailsResponseFactoryProvider,
2869
3200
  {
2870
3201
  provide: nextActionsToken,
2871
3202
  useValue: nextActions,