@xsolla/payment-client-core 0.1.14-test → 0.1.14-test10

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 (40) hide show
  1. package/esm2020/lib/core/payment/actions/status-updated/status-updated.action.class.mjs +17 -7
  2. package/esm2020/lib/core/payment/actions/status-updated/status-updated.action.type.mjs +1 -1
  3. package/esm2020/lib/core/payment/config/config.service.mjs +12 -6
  4. package/esm2020/lib/core/payment/initialize/initialize-request-params.interface.mjs +1 -1
  5. package/esm2020/lib/core/payment/initialize/initialize.service.mjs +8 -3
  6. package/esm2020/lib/core/payment/payment-config.interface.mjs +1 -1
  7. package/esm2020/lib/core/payment/payment.service.mjs +11 -2
  8. package/esm2020/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.interface.mjs +2 -0
  9. package/esm2020/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.service.mjs +44 -0
  10. package/esm2020/lib/core/payment/status/save-payment-method-status/api/saved-payment-account.interface.mjs +2 -0
  11. package/esm2020/lib/core/payment/status/save-payment-method-status/save-payment-method-status.enum.mjs +6 -0
  12. package/esm2020/lib/core/payment/status/save-payment-method-status/save-payment-method-status.service.mjs +71 -0
  13. package/esm2020/lib/core/payment/status/status-request/status-request-params.interface.mjs +1 -1
  14. package/esm2020/lib/core/payment/status/status-request/status-search-param.enum.mjs +2 -1
  15. package/esm2020/lib/core/payment/status/status-request/status-search-params.map.mjs +8 -1
  16. package/esm2020/lib/core/payment/status/status.service.mjs +13 -4
  17. package/esm2020/lib/core/payment-methods/payment-methods.service.mjs +1 -1
  18. package/esm2020/lib/core-library.service.mjs +1 -1
  19. package/fesm2015/xsolla-payment-client-core.mjs +303 -145
  20. package/fesm2015/xsolla-payment-client-core.mjs.map +1 -1
  21. package/fesm2020/xsolla-payment-client-core.mjs +296 -142
  22. package/fesm2020/xsolla-payment-client-core.mjs.map +1 -1
  23. package/lib/core/payment/actions/status-updated/status-updated.action.class.d.ts +3 -1
  24. package/lib/core/payment/actions/status-updated/status-updated.action.type.d.ts +3 -0
  25. package/lib/core/payment/initialize/initialize-request-params.interface.d.ts +4 -0
  26. package/lib/core/payment/payment-config.interface.d.ts +3 -0
  27. package/lib/core/payment/payment.service.d.ts +1 -0
  28. package/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.interface.d.ts +6 -0
  29. package/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.service.d.ts +16 -0
  30. package/lib/core/payment/status/save-payment-method-status/api/saved-payment-account.interface.d.ts +7 -0
  31. package/lib/core/payment/status/save-payment-method-status/save-payment-method-status.enum.d.ts +4 -0
  32. package/lib/core/payment/status/save-payment-method-status/save-payment-method-status.service.d.ts +22 -0
  33. package/lib/core/payment/status/status-request/status-request-params.interface.d.ts +1 -0
  34. package/lib/core/payment/status/status-request/status-search-param.enum.d.ts +2 -1
  35. package/lib/core/payment/status/status.service.d.ts +3 -1
  36. package/lib/core/payment-methods/payment-methods.service.d.ts +1 -1
  37. package/lib/core-library.service.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/xsolla-payment-client-core-0.1.14-test10.tgz +0 -0
  40. package/xsolla-payment-client-core-0.1.14-test.tgz +0 -0
@@ -5,7 +5,7 @@ import * as i1 from '@angular/common/http';
5
5
  import { HttpParams, HttpHeaders, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
6
6
  import JSEncrypt from 'jsencrypt';
7
7
  import { UntypedFormGroup, Validators, UntypedFormControl, ReactiveFormsModule } from '@angular/forms';
8
- import { filter, map as map$1, catchError } from 'rxjs/operators';
8
+ import { filter, map as map$1, tap, catchError } from 'rxjs/operators';
9
9
  import * as i1$1 from '@angular/router';
10
10
  import { CommonModule } from '@angular/common';
11
11
 
@@ -454,13 +454,19 @@ class PaymentConfigService {
454
454
  }
455
455
  return {
456
456
  ...config,
457
- returnUrl: this.enrichReturnUrl(config.returnUrl),
457
+ returnUrl: this.enrichReturnUrl(config.returnUrl, !!config.savePaymentMethod)
458
458
  };
459
459
  }
460
- enrichReturnUrl(returnUrl) {
461
- return this.urlService.addSearchParams(returnUrl, {
462
- token: this.settingsService.token,
460
+ enrichReturnUrl(returnUrl, savePaymentMethod) {
461
+ let enrichedUrl = this.urlService.addSearchParams(returnUrl, {
462
+ token: this.settingsService.token
463
463
  });
464
+ if (savePaymentMethod) {
465
+ enrichedUrl = this.urlService.addSearchParams(returnUrl, {
466
+ isSavePaymentAccount: "1" /* XpsBoolean.true */
467
+ });
468
+ }
469
+ return enrichedUrl;
464
470
  }
465
471
  }
466
472
  PaymentConfigService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentConfigService, deps: [{ token: UrlService }, { token: SettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -468,7 +474,7 @@ PaymentConfigService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0",
468
474
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentConfigService, decorators: [{
469
475
  type: Injectable,
470
476
  args: [{
471
- providedIn: 'root',
477
+ providedIn: 'root'
472
478
  }]
473
479
  }], ctorParameters: function () { return [{ type: UrlService }, { type: SettingsService }]; } });
474
480
 
@@ -782,15 +788,143 @@ const checkStatusActionFactoryProvider = {
782
788
  },
783
789
  };
784
790
 
791
+ class TerminalError extends AppError {
792
+ constructor(message, code) {
793
+ super(message);
794
+ this.code = code;
795
+ }
796
+ }
797
+
798
+ var StatusGroups;
799
+ (function (StatusGroups) {
800
+ StatusGroups["troubled"] = "troubled";
801
+ StatusGroups["done"] = "done";
802
+ StatusGroups["invoice"] = "invoice";
803
+ })(StatusGroups || (StatusGroups = {}));
804
+
805
+ var StatusEnum;
806
+ (function (StatusEnum) {
807
+ StatusEnum["created"] = "created";
808
+ StatusEnum["awaiting"] = "awaiting";
809
+ StatusEnum["processing"] = "processing";
810
+ StatusEnum["authorized"] = "authorized";
811
+ StatusEnum["held"] = "held";
812
+ StatusEnum["done"] = "done";
813
+ StatusEnum["error"] = "error";
814
+ StatusEnum["canceled"] = "canceled";
815
+ })(StatusEnum || (StatusEnum = {}));
816
+
817
+ class StatusResponse {
818
+ constructor(parameters) {
819
+ if (parameters.errors?.[0]) {
820
+ this.error = {
821
+ code: parameters.errors[0].code.toString(),
822
+ message: parameters.errors[0].message,
823
+ };
824
+ }
825
+ if (!parameters.status) {
826
+ throw new TerminalError(this.error?.message ?? '', this.error?.code.toString() ?? '');
827
+ }
828
+ this.status = {
829
+ statusState: parameters.status.statusData.stateText,
830
+ email: parameters.status.statusData.email,
831
+ webSocketUrl: parameters.status.statusData.webSocketChannelUrl,
832
+ webSocketChannelName: parameters.status.statusData.webSocketChannelName,
833
+ webSocketClientType: parameters.status.statusData.webSocketClientType,
834
+ financeInfo: parameters.status.text.info,
835
+ discount: parameters.status.text.info.discount
836
+ ? Math.abs(Number.parseFloat(parameters.status.text.info.discount?.value ?? ''))
837
+ : null,
838
+ isCancelUser: parameters.status.isCancelUser,
839
+ postMessageStatus: parameters.status.isCancelUser
840
+ ? StatusGroups.troubled
841
+ : parameters.status.group,
842
+ virtualCurrencyAmount: parameters.status.statusData.out,
843
+ backUrlSettings: {
844
+ backUrl: parameters.status.text.backurl,
845
+ backUrlAction: parameters.status.text.backurl_action,
846
+ backUrlCaption: parameters.status.text.backurl_caption,
847
+ returnRegion: parameters.status.return_region,
848
+ },
849
+ additionalBackButton: this.getAdditionalBackButton(parameters.status),
850
+ group: parameters.status.group,
851
+ needToCheck: parameters.status.needToCheck,
852
+ autoRedirect: parameters.status.autoredirect,
853
+ statusMessage: parameters.status.text.state,
854
+ userId: parameters.status.statusData.v1,
855
+ invoice: parameters.status.statusData.invoice,
856
+ pid: parameters.status.statusData.pid,
857
+ projectAmount: this.getProjectAmount(parameters.status),
858
+ titleClass: parameters.status.title_class,
859
+ paymentCountryIso: parameters.status.statusData.payment_country_iso,
860
+ order: parameters.status.text.order,
861
+ };
862
+ if (parameters.form) {
863
+ this.status.userReturnStatus = this.getUserReturnStatus(parameters.form);
864
+ }
865
+ if (this.status.statusState === StatusEnum.done ||
866
+ this.status.statusState === StatusEnum.authorized) {
867
+ this.status.isSuccess = true;
868
+ }
869
+ if (this.status.statusState === StatusEnum.canceled ||
870
+ this.status.isCancelUser) {
871
+ this.status.isCanceled = true;
872
+ }
873
+ }
874
+ getUserReturnStatus(form) {
875
+ const value = form['fix_userReturnStatus']?.value;
876
+ if (value === 'undefined')
877
+ return undefined;
878
+ return value;
879
+ }
880
+ getProjectAmount(status) {
881
+ if (!status.statusData.projectAmount) {
882
+ return;
883
+ }
884
+ const [amount, currency] = status.statusData.projectAmount.split(' ');
885
+ return {
886
+ amount,
887
+ currency,
888
+ };
889
+ }
890
+ getAdditionalBackButton(status) {
891
+ if (!status.text.is_additional_back_url_enabled) {
892
+ return {
893
+ link: '',
894
+ action: '',
895
+ label: '',
896
+ region: '',
897
+ isEnabled: false,
898
+ };
899
+ }
900
+ return {
901
+ link: status.text.additional_back_url_link ?? '',
902
+ action: status.text.additional_back_url_action ?? '',
903
+ label: status.text.additional_back_url_label ?? '',
904
+ region: status.additional_button_return_region ?? '',
905
+ isEnabled: status.text.is_additional_back_url_enabled,
906
+ };
907
+ }
908
+ }
909
+
785
910
  class StatusUpdatedAction {
786
- constructor(statusResponse) {
911
+ constructor(statusResponse, isSavePaymentMethodMode = false, savePaymentMethodStatus) {
787
912
  this.type = 'status_updated';
913
+ let status;
914
+ if (statusResponse instanceof StatusResponse) {
915
+ status = statusResponse.status;
916
+ }
917
+ else {
918
+ status = statusResponse;
919
+ }
788
920
  this.data = {
789
- statusState: statusResponse.status.statusState,
790
- invoice: statusResponse.status.invoice,
791
- isSuccess: statusResponse.status.isSuccess,
792
- isCanceled: statusResponse.status.isCanceled,
793
- group: statusResponse.status.group,
921
+ statusState: status.statusState,
922
+ invoice: status.invoice,
923
+ isSuccess: status.isSuccess,
924
+ isCanceled: status.isCanceled,
925
+ group: status.group,
926
+ isSavePaymentMethodMode,
927
+ savePaymentMethodStatus
794
928
  };
795
929
  }
796
930
  }
@@ -1432,6 +1566,11 @@ class InitializeService {
1432
1566
  refer: this.ps4ReferId,
1433
1567
  country: this.countryService.getCountry(),
1434
1568
  returnUrl: config.returnUrl,
1569
+ paymentWithSavedMethod: config.paymentWithSavedMethod === true
1570
+ ? "1" /* XpsBoolean.true */
1571
+ : "0" /* XpsBoolean.false */,
1572
+ saved_method_id: config.savedMethodId,
1573
+ save_payment_account_only: !!config.savePaymentMethod ? "1" /* XpsBoolean.true */ : "0" /* XpsBoolean.false */
1435
1574
  };
1436
1575
  return this.xpsApiService
1437
1576
  .directPaymentRequest(requestParams)
@@ -1463,7 +1602,7 @@ InitializeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ve
1463
1602
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: InitializeService, decorators: [{
1464
1603
  type: Injectable,
1465
1604
  args: [{
1466
- providedIn: 'root',
1605
+ providedIn: 'root'
1467
1606
  }]
1468
1607
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1469
1608
  type: Inject,
@@ -2821,6 +2960,7 @@ var StatusSearchParam;
2821
2960
  StatusSearchParam["testPs"] = "fix_testPs";
2822
2961
  StatusSearchParam["testXsolla"] = "fix_testXsolla";
2823
2962
  StatusSearchParam["userReturnStatus"] = "fix_userReturnStatus";
2963
+ StatusSearchParam["isSavePaymentAccount"] = "isSavePaymentAccount";
2824
2964
  })(StatusSearchParam || (StatusSearchParam = {}));
2825
2965
 
2826
2966
  const requiredStatusSearchParams = [
@@ -2900,15 +3040,15 @@ const statusSearchParamsMap = new Map([
2900
3040
  converter: numberConverter,
2901
3041
  },
2902
3042
  ],
3043
+ [
3044
+ StatusSearchParam.isSavePaymentAccount,
3045
+ {
3046
+ key: 'isSavePaymentAccount',
3047
+ converter: numberConverter,
3048
+ },
3049
+ ],
2903
3050
  ]);
2904
3051
 
2905
- class TerminalError extends AppError {
2906
- constructor(message, code) {
2907
- super(message);
2908
- this.code = code;
2909
- }
2910
- }
2911
-
2912
3052
  class XpsApiPart {
2913
3053
  constructor() {
2914
3054
  this.response = new BehaviorSubject(null);
@@ -2952,118 +3092,6 @@ const statusRequestFactoryProvider = {
2952
3092
  useValue: (...args) => new StatusRequest(...args),
2953
3093
  };
2954
3094
 
2955
- var StatusGroups;
2956
- (function (StatusGroups) {
2957
- StatusGroups["troubled"] = "troubled";
2958
- StatusGroups["done"] = "done";
2959
- StatusGroups["invoice"] = "invoice";
2960
- })(StatusGroups || (StatusGroups = {}));
2961
-
2962
- var StatusEnum;
2963
- (function (StatusEnum) {
2964
- StatusEnum["created"] = "created";
2965
- StatusEnum["awaiting"] = "awaiting";
2966
- StatusEnum["processing"] = "processing";
2967
- StatusEnum["authorized"] = "authorized";
2968
- StatusEnum["held"] = "held";
2969
- StatusEnum["done"] = "done";
2970
- StatusEnum["error"] = "error";
2971
- StatusEnum["canceled"] = "canceled";
2972
- })(StatusEnum || (StatusEnum = {}));
2973
-
2974
- class StatusResponse {
2975
- constructor(parameters) {
2976
- if (parameters.errors?.[0]) {
2977
- this.error = {
2978
- code: parameters.errors[0].code.toString(),
2979
- message: parameters.errors[0].message,
2980
- };
2981
- }
2982
- if (!parameters.status) {
2983
- throw new TerminalError(this.error?.message ?? '', this.error?.code.toString() ?? '');
2984
- }
2985
- this.status = {
2986
- statusState: parameters.status.statusData.stateText,
2987
- email: parameters.status.statusData.email,
2988
- webSocketUrl: parameters.status.statusData.webSocketChannelUrl,
2989
- webSocketChannelName: parameters.status.statusData.webSocketChannelName,
2990
- webSocketClientType: parameters.status.statusData.webSocketClientType,
2991
- financeInfo: parameters.status.text.info,
2992
- discount: parameters.status.text.info.discount
2993
- ? Math.abs(Number.parseFloat(parameters.status.text.info.discount?.value ?? ''))
2994
- : null,
2995
- isCancelUser: parameters.status.isCancelUser,
2996
- postMessageStatus: parameters.status.isCancelUser
2997
- ? StatusGroups.troubled
2998
- : parameters.status.group,
2999
- virtualCurrencyAmount: parameters.status.statusData.out,
3000
- backUrlSettings: {
3001
- backUrl: parameters.status.text.backurl,
3002
- backUrlAction: parameters.status.text.backurl_action,
3003
- backUrlCaption: parameters.status.text.backurl_caption,
3004
- returnRegion: parameters.status.return_region,
3005
- },
3006
- additionalBackButton: this.getAdditionalBackButton(parameters.status),
3007
- group: parameters.status.group,
3008
- needToCheck: parameters.status.needToCheck,
3009
- autoRedirect: parameters.status.autoredirect,
3010
- statusMessage: parameters.status.text.state,
3011
- userId: parameters.status.statusData.v1,
3012
- invoice: parameters.status.statusData.invoice,
3013
- pid: parameters.status.statusData.pid,
3014
- projectAmount: this.getProjectAmount(parameters.status),
3015
- titleClass: parameters.status.title_class,
3016
- paymentCountryIso: parameters.status.statusData.payment_country_iso,
3017
- order: parameters.status.text.order,
3018
- };
3019
- if (parameters.form) {
3020
- this.status.userReturnStatus = this.getUserReturnStatus(parameters.form);
3021
- }
3022
- if (this.status.statusState === StatusEnum.done ||
3023
- this.status.statusState === StatusEnum.authorized) {
3024
- this.status.isSuccess = true;
3025
- }
3026
- if (this.status.statusState === StatusEnum.canceled ||
3027
- this.status.isCancelUser) {
3028
- this.status.isCanceled = true;
3029
- }
3030
- }
3031
- getUserReturnStatus(form) {
3032
- const value = form['fix_userReturnStatus']?.value;
3033
- if (value === 'undefined')
3034
- return undefined;
3035
- return value;
3036
- }
3037
- getProjectAmount(status) {
3038
- if (!status.statusData.projectAmount) {
3039
- return;
3040
- }
3041
- const [amount, currency] = status.statusData.projectAmount.split(' ');
3042
- return {
3043
- amount,
3044
- currency,
3045
- };
3046
- }
3047
- getAdditionalBackButton(status) {
3048
- if (!status.text.is_additional_back_url_enabled) {
3049
- return {
3050
- link: '',
3051
- action: '',
3052
- label: '',
3053
- region: '',
3054
- isEnabled: false,
3055
- };
3056
- }
3057
- return {
3058
- link: status.text.additional_back_url_link ?? '',
3059
- action: status.text.additional_back_url_action ?? '',
3060
- label: status.text.additional_back_url_label ?? '',
3061
- region: status.additional_button_return_region ?? '',
3062
- isEnabled: status.text.is_additional_back_url_enabled,
3063
- };
3064
- }
3065
- }
3066
-
3067
3095
  const statusResponseFactoryToken = new InjectionToken('StatusResponse');
3068
3096
  const statusResponseFactoryProvider = {
3069
3097
  provide: statusResponseFactoryToken,
@@ -4540,15 +4568,137 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
4540
4568
  }]
4541
4569
  }], ctorParameters: function () { return [{ type: StatusRequestService }, { type: CheckStatusService }, { type: WebsocketStatusService }]; } });
4542
4570
 
4571
+ var TitleClass;
4572
+ (function (TitleClass) {
4573
+ TitleClass["done"] = "done";
4574
+ TitleClass["cancel"] = "cancel";
4575
+ TitleClass["cancelUser"] = "canceluser";
4576
+ })(TitleClass || (TitleClass = {}));
4577
+
4578
+ var SavePaymentMethodStatus;
4579
+ (function (SavePaymentMethodStatus) {
4580
+ SavePaymentMethodStatus["success"] = "success";
4581
+ SavePaymentMethodStatus["failed"] = "failed";
4582
+ })(SavePaymentMethodStatus || (SavePaymentMethodStatus = {}));
4583
+
4584
+ class XpsResponseError extends AppError {
4585
+ constructor(message) {
4586
+ super('XPS response failed' + (message ? `: "${message}".` : '.'));
4587
+ }
4588
+ }
4589
+
4590
+ class SavedPaymentAccountChangesService {
4591
+ constructor(settingsService, secureApi) {
4592
+ this.settingsService = settingsService;
4593
+ this.secureApi = secureApi;
4594
+ this.apiRoute = 'savedmethods/newaccountinfo';
4595
+ this.response = new Subject();
4596
+ }
4597
+ get response$() {
4598
+ return this.response.asObservable();
4599
+ }
4600
+ async request(invoice) {
4601
+ const requestParameters = {
4602
+ access_token: this.settingsService.token,
4603
+ invoice_id: invoice,
4604
+ };
4605
+ return lastValueFrom(this.secureApi
4606
+ .post(this.apiRoute, new URLSearchParams(requestParameters), {
4607
+ headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8'),
4608
+ responseType: 'json',
4609
+ })
4610
+ .pipe(tap((value) => {
4611
+ this.response.next(value);
4612
+ }))).catch((error) => {
4613
+ throw new XpsResponseError(error.message);
4614
+ });
4615
+ }
4616
+ }
4617
+ SavedPaymentAccountChangesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: SavedPaymentAccountChangesService, deps: [{ token: SettingsService }, { token: SecureApiClient }], target: i0.ɵɵFactoryTarget.Injectable });
4618
+ SavedPaymentAccountChangesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: SavedPaymentAccountChangesService, providedIn: 'root' });
4619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: SavedPaymentAccountChangesService, decorators: [{
4620
+ type: Injectable,
4621
+ args: [{
4622
+ providedIn: 'root'
4623
+ }]
4624
+ }], ctorParameters: function () { return [{ type: SettingsService }, { type: SecureApiClient }]; } });
4625
+
4626
+ class SavePaymentMethodStatusService {
4627
+ constructor(statusRequestService, listenStatusService, savedPaymentAccountChangesService, nextActionService) {
4628
+ this.statusRequestService = statusRequestService;
4629
+ this.listenStatusService = listenStatusService;
4630
+ this.savedPaymentAccountChangesService = savedPaymentAccountChangesService;
4631
+ this.nextActionService = nextActionService;
4632
+ }
4633
+ async getStatus(params) {
4634
+ this.statusRequestService.setRequestParams(params);
4635
+ this.startWaitingStatusUpdates(params.invoice);
4636
+ this.statusRequestService.request();
4637
+ const statusResponse = await firstValueFrom(this.statusRequestService.response$);
4638
+ if (!this.savePaymentMethodStatus) {
4639
+ statusResponse.status.statusState = StatusEnum.processing;
4640
+ }
4641
+ return statusResponse.status;
4642
+ }
4643
+ startWaitingStatusUpdates(invoice) {
4644
+ this.listenStatusService.listen(invoice);
4645
+ this.listenStatusSubscription = this.listenStatusService.statusUpdated$
4646
+ .subscribe(({ statusResponse }) => {
4647
+ if (statusResponse.status) {
4648
+ this.loadNewPaymentAccountData(statusResponse.status);
4649
+ }
4650
+ });
4651
+ }
4652
+ loadNewPaymentAccountData(status) {
4653
+ if (!status.invoice) {
4654
+ return;
4655
+ }
4656
+ void this.savedPaymentAccountChangesService
4657
+ .request(status.invoice)
4658
+ .then((accountChanges) => {
4659
+ if (accountChanges) {
4660
+ this.handleSavingStatus(status, accountChanges.new_account);
4661
+ }
4662
+ });
4663
+ }
4664
+ handleSavingStatus(status, account) {
4665
+ this.listenStatusService.stopListening();
4666
+ this.listenStatusSubscription.unsubscribe();
4667
+ const updatingIsProcessing = status?.titleClass !== TitleClass.cancel && status?.titleClass !== TitleClass.cancelUser && !account;
4668
+ if (updatingIsProcessing) {
4669
+ return;
4670
+ }
4671
+ const paymentAccountWasSaved = status?.titleClass === TitleClass.done && account !== null;
4672
+ const isSavePaymentMethod = true;
4673
+ this.savePaymentMethodStatus = paymentAccountWasSaved ? SavePaymentMethodStatus.success : SavePaymentMethodStatus.failed;
4674
+ this.nextActionService.emitFlowUpdates(new StatusUpdatedAction(status, isSavePaymentMethod, this.savePaymentMethodStatus));
4675
+ }
4676
+ }
4677
+ SavePaymentMethodStatusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: SavePaymentMethodStatusService, deps: [{ token: StatusRequestService }, { token: ListenStatusService }, { token: SavedPaymentAccountChangesService }, { token: NextActionService }], target: i0.ɵɵFactoryTarget.Injectable });
4678
+ SavePaymentMethodStatusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: SavePaymentMethodStatusService, providedIn: 'root' });
4679
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: SavePaymentMethodStatusService, decorators: [{
4680
+ type: Injectable,
4681
+ args: [{
4682
+ providedIn: 'root'
4683
+ }]
4684
+ }], ctorParameters: function () { return [{ type: StatusRequestService }, { type: ListenStatusService }, { type: SavedPaymentAccountChangesService }, { type: NextActionService }]; } });
4685
+
4543
4686
  class StatusService {
4544
- constructor(urlService, statusRequestService, financeDetailsService, listenStatusService, nextActionService) {
4687
+ constructor(urlService, statusRequestService, financeDetailsService, listenStatusService, nextActionService, savePaymentMethodStatusService) {
4545
4688
  this.urlService = urlService;
4546
4689
  this.statusRequestService = statusRequestService;
4547
4690
  this.financeDetailsService = financeDetailsService;
4548
4691
  this.listenStatusService = listenStatusService;
4549
4692
  this.nextActionService = nextActionService;
4693
+ this.savePaymentMethodStatusService = savePaymentMethodStatusService;
4550
4694
  }
4551
4695
  async getStatus(params) {
4696
+ // todo: если params.savePaymentMethod, то надо выполнить логику для
4697
+ // account status
4698
+ const isSavePaymentMethodMode = !!params?.isSavePaymentAccount;
4699
+ if (isSavePaymentMethodMode) {
4700
+ return this.savePaymentMethodStatusService.getStatus(params); // todo: saveMethodStatus.getStatus();
4701
+ }
4552
4702
  this.statusRequestService.setRequestParams(params);
4553
4703
  this.startWaitingStatusUpdates(params.invoice);
4554
4704
  this.statusRequestService.request();
@@ -4558,6 +4708,7 @@ class StatusService {
4558
4708
  }
4559
4709
  async getStatusWithUrlSearchParams(url) {
4560
4710
  const searchParams = this.getRequestParamsFromUrl(url);
4711
+ console.log('searchParams', searchParams);
4561
4712
  if (!searchParams) {
4562
4713
  throw new Error('No required search params to get status');
4563
4714
  }
@@ -4585,14 +4736,14 @@ class StatusService {
4585
4736
  });
4586
4737
  }
4587
4738
  }
4588
- StatusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StatusService, deps: [{ token: UrlService }, { token: StatusRequestService }, { token: FinanceDetailsService }, { token: ListenStatusService }, { token: NextActionService }], target: i0.ɵɵFactoryTarget.Injectable });
4739
+ StatusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StatusService, deps: [{ token: UrlService }, { token: StatusRequestService }, { token: FinanceDetailsService }, { token: ListenStatusService }, { token: NextActionService }, { token: SavePaymentMethodStatusService }], target: i0.ɵɵFactoryTarget.Injectable });
4589
4740
  StatusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StatusService, providedIn: 'root' });
4590
4741
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: StatusService, decorators: [{
4591
4742
  type: Injectable,
4592
4743
  args: [{
4593
4744
  providedIn: 'root',
4594
4745
  }]
4595
- }], ctorParameters: function () { return [{ type: UrlService }, { type: StatusRequestService }, { type: FinanceDetailsService }, { type: ListenStatusService }, { type: NextActionService }]; } });
4746
+ }], ctorParameters: function () { return [{ type: UrlService }, { type: StatusRequestService }, { type: FinanceDetailsService }, { type: ListenStatusService }, { type: NextActionService }, { type: SavePaymentMethodStatusService }]; } });
4596
4747
 
4597
4748
  class CreditCardStateService extends EmitDataService {
4598
4749
  }
@@ -4617,12 +4768,6 @@ var ThreeDsStatusTypes;
4617
4768
  ThreeDsStatusTypes["collectDfp"] = "collect_dfp";
4618
4769
  })(ThreeDsStatusTypes || (ThreeDsStatusTypes = {}));
4619
4770
 
4620
- class XpsResponseError extends AppError {
4621
- constructor(message) {
4622
- super('XPS response failed' + (message ? `: "${message}".` : '.'));
4623
- }
4624
- }
4625
-
4626
4771
  class StatusThreeDsRequest {
4627
4772
  constructor(token, threeDsId) {
4628
4773
  this.access_token = token;
@@ -5070,6 +5215,7 @@ class PaymentService {
5070
5215
  this.destroy$ = new Subject();
5071
5216
  this.formDestroy$ = new Subject();
5072
5217
  this.formFieldsStatusSubject = new BehaviorSubject(null);
5218
+ this.isSavingMethodMode = false;
5073
5219
  }
5074
5220
  async initialize(config) {
5075
5221
  this.destroy$ = new Subject();
@@ -5095,9 +5241,14 @@ class PaymentService {
5095
5241
  this.emitFormFieldsStatus(this.form);
5096
5242
  return;
5097
5243
  }
5244
+ console.log('this.fields', this.fields);
5245
+ console.log('this.form', this.form);
5246
+ this.isSavingMethodMode = this.fields.some(({ name, value }) => name === 'savePsAccountOnly' && value === "1" /* XpsBoolean.true */);
5098
5247
  const submitResponse = await this.submitService.request(this.fields, this.form);
5099
5248
  this.data = submitResponse;
5100
- this.emitFinanceDetails(submitResponse.summary);
5249
+ if (!this.isSavingMethodMode) {
5250
+ this.emitFinanceDetails(submitResponse.summary);
5251
+ }
5101
5252
  this.emitFormMessages(submitResponse.messages);
5102
5253
  // Handle 3ds flow
5103
5254
  if (submitResponse.currentCommand === XpsCommand.create) {
@@ -5146,7 +5297,10 @@ class PaymentService {
5146
5297
  signature: this.data.signature ?? '',
5147
5298
  locale: this.data.fields.find((field) => field.name === 'locale')?.value ??
5148
5299
  'en',
5300
+ isSavePaymentAccount: this.isSavingMethodMode ? 1 : 0,
5149
5301
  };
5302
+ console.log('this.data', this.data);
5303
+ console.log('getStatus', params);
5150
5304
  return this.statusService.getStatus(params);
5151
5305
  }
5152
5306
  getFieldConfig(field) {