taxtank-core 0.28.66 → 0.28.68

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 (134) hide show
  1. package/bundles/taxtank-core.umd.js +611 -540
  2. package/bundles/taxtank-core.umd.js.map +1 -1
  3. package/esm2015/lib/forms/address/address.form.js +22 -1
  4. package/esm2015/lib/interceptors/basiq-client-id.interceptor.js +3 -3
  5. package/esm2015/lib/interceptors/basiq-token.interceptor.js +3 -3
  6. package/esm2015/lib/interceptors/corelogic-interceptor.js +3 -3
  7. package/esm2015/lib/interceptors/financial-year-interceptor.js +3 -3
  8. package/esm2015/lib/interceptors/interceptors.module.js +4 -4
  9. package/esm2015/lib/interceptors/jwt-interceptor.js +3 -3
  10. package/esm2015/lib/interceptors/preloader.interceptor.js +3 -3
  11. package/esm2015/lib/interceptors/user-switcher-interceptor.js +3 -3
  12. package/esm2015/lib/models/address/address.js +27 -1
  13. package/esm2015/lib/models/address/index.js +4 -0
  14. package/esm2015/lib/models/address/states.enum.js +12 -0
  15. package/esm2015/lib/models/bank/bank-login-data.js +1 -1
  16. package/esm2015/lib/models/bank/basiq/basiq-connection-data.interface.js +2 -0
  17. package/esm2015/lib/models/bank/basiq/basiq-job-response.js +1 -1
  18. package/esm2015/lib/models/bank/basiq/index.js +2 -1
  19. package/esm2015/lib/models/event/app-event-type.enum.js +60 -59
  20. package/esm2015/lib/models/index.js +2 -1
  21. package/esm2015/lib/services/account-setup/account-setup.service.js +3 -3
  22. package/esm2015/lib/services/affiliate/rewardful/rewardful.service.js +3 -3
  23. package/esm2015/lib/services/asset/assets.service.js +3 -3
  24. package/esm2015/lib/services/auth/auth.service.js +3 -3
  25. package/esm2015/lib/services/auth/jwt.service.js +3 -3
  26. package/esm2015/lib/services/bank/bank-account-calculation.service.js +3 -3
  27. package/esm2015/lib/services/bank/bank-transaction-calculation.service.js +3 -3
  28. package/esm2015/lib/services/event/event-dispatcher.service.js +3 -3
  29. package/esm2015/lib/services/event/sse.service.js +3 -3
  30. package/esm2015/lib/services/export/export-formatter.service.js +3 -3
  31. package/esm2015/lib/services/header-title/header-title.service.js +3 -3
  32. package/esm2015/lib/services/http/address/address.service.js +3 -3
  33. package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +3 -3
  34. package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +28 -8
  35. package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +3 -3
  36. package/esm2015/lib/services/http/bank/bank.service.js +3 -3
  37. package/esm2015/lib/services/http/bank/basiq/basiq-token.service.js +3 -3
  38. package/esm2015/lib/services/http/bank/basiq/basiq.service.js +50 -75
  39. package/esm2015/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.js +3 -3
  40. package/esm2015/lib/services/http/chart-accounts/chart-accounts.service.js +3 -3
  41. package/esm2015/lib/services/http/chat/chat.service.js +3 -3
  42. package/esm2015/lib/services/http/chat/message/message.service.js +3 -3
  43. package/esm2015/lib/services/http/chat/message-document/message-document.service.js +3 -3
  44. package/esm2015/lib/services/http/depreciation/depreciation-capital-project/depreciation-capital-project.service.js +3 -3
  45. package/esm2015/lib/services/http/depreciation/depreciation-receipt/depreciation-receipt.service.js +3 -3
  46. package/esm2015/lib/services/http/depreciation/depreciation.service.js +3 -3
  47. package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +3 -3
  48. package/esm2015/lib/services/http/document/document.service.js +3 -3
  49. package/esm2015/lib/services/http/facebook/facebook.service.js +3 -3
  50. package/esm2015/lib/services/http/firm/client-income/client-income-types.service.js +3 -3
  51. package/esm2015/lib/services/http/firm/client-invite/client-invite.service.js +3 -3
  52. package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +3 -3
  53. package/esm2015/lib/services/http/firm/employee/employee.service.js +3 -3
  54. package/esm2015/lib/services/http/firm/employee-invite/employee-invite.service.js +3 -3
  55. package/esm2015/lib/services/http/firm/firm.service.js +3 -3
  56. package/esm2015/lib/services/http/firm/portfolio-report/client-portfolio-report.service.js +3 -3
  57. package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +3 -3
  58. package/esm2015/lib/services/http/income-source/income-source.service.js +3 -3
  59. package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +3 -3
  60. package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +3 -3
  61. package/esm2015/lib/services/http/loan/borrowing-expense/borrowing-expense.service.js +3 -3
  62. package/esm2015/lib/services/http/loan/loan.service.js +3 -3
  63. package/esm2015/lib/services/http/property/property-category/property-category.service.js +3 -3
  64. package/esm2015/lib/services/http/property/property-category-movement/property-category-movement.service.js +3 -3
  65. package/esm2015/lib/services/http/property/property-document/property-document.service.js +3 -3
  66. package/esm2015/lib/services/http/property/property-sale/property-sale.service.js +3 -3
  67. package/esm2015/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.js +3 -3
  68. package/esm2015/lib/services/http/property/property-share/property-share.service.js +3 -3
  69. package/esm2015/lib/services/http/property/property.service.js +3 -3
  70. package/esm2015/lib/services/http/receipt/receipt.service.js +3 -3
  71. package/esm2015/lib/services/http/rest/rest.service.js +3 -3
  72. package/esm2015/lib/services/http/service-notification/service-notification.service.js +3 -3
  73. package/esm2015/lib/services/http/sole/bas-report/bas-report.service.js +3 -3
  74. package/esm2015/lib/services/http/sole/sole-business/sole-business.service.js +3 -3
  75. package/esm2015/lib/services/http/sole/sole-business-activity/sole-business-activity.service.js +3 -3
  76. package/esm2015/lib/services/http/sole/sole-business-loss/sole-business-loss-rules/sole-business-loss-offset-rule.service.js +3 -3
  77. package/esm2015/lib/services/http/sole/sole-business-loss/sole-business-loss.service.js +3 -3
  78. package/esm2015/lib/services/http/sole/sole-contact/sole-contact.service.js +3 -3
  79. package/esm2015/lib/services/http/sole/sole-depreciation-method/sole-depreciation-method.service.js +3 -3
  80. package/esm2015/lib/services/http/sole/sole-details/sole-details.service.js +3 -3
  81. package/esm2015/lib/services/http/sole/sole-invoice/sole-invoice.service.js +3 -3
  82. package/esm2015/lib/services/http/sole/sole-invoice-template/sole-invoice-template.service.js +3 -3
  83. package/esm2015/lib/services/http/subscription/service-price.service.js +3 -3
  84. package/esm2015/lib/services/http/subscription/subscription.service.js +3 -3
  85. package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +3 -3
  86. package/esm2015/lib/services/http/tax-review/tax-review.service.js +3 -3
  87. package/esm2015/lib/services/http/tax-summary/tax-summary.service.js +3 -3
  88. package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +3 -3
  89. package/esm2015/lib/services/http/transaction/transaction-receipt/transaction-receipt.service.js +3 -3
  90. package/esm2015/lib/services/http/transaction/transaction.service.js +3 -3
  91. package/esm2015/lib/services/http/tutorial-video/tutorial-video.service.js +3 -3
  92. package/esm2015/lib/services/http/user/occupation/occupation.service.js +3 -3
  93. package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +3 -3
  94. package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +3 -3
  95. package/esm2015/lib/services/http/user/user.service.js +3 -3
  96. package/esm2015/lib/services/http/user/users-invite/users-invite.service.js +3 -3
  97. package/esm2015/lib/services/http/vehicle/vehicle-claim-details.service.js +3 -3
  98. package/esm2015/lib/services/http/vehicle/vehicle-claim.service.js +3 -3
  99. package/esm2015/lib/services/http/vehicle/vehicle-logbook.service.js +3 -3
  100. package/esm2015/lib/services/http/vehicle/vehicle.service.js +3 -3
  101. package/esm2015/lib/services/intercom/intercom.service.js +3 -3
  102. package/esm2015/lib/services/kompassify/kompassify.service.js +3 -3
  103. package/esm2015/lib/services/pdf/pdf-from-dom-element/pdf-from-dom-element.service.js +3 -3
  104. package/esm2015/lib/services/pdf/pdf-from-table/pdf-from-data-table/pdf-from-data-table.service.js +3 -3
  105. package/esm2015/lib/services/pdf/pdf-from-table/pdf-from-html-table/pdf-from-html-table.service.js +3 -3
  106. package/esm2015/lib/services/pdf/pdf-from-table/pdf-from-table.service.js +3 -3
  107. package/esm2015/lib/services/preloader/preloader.service.js +3 -3
  108. package/esm2015/lib/services/property/corelogic/corelogic.service.js +3 -3
  109. package/esm2015/lib/services/property/equity-position-chart/equity-position-chart.service.js +3 -3
  110. package/esm2015/lib/services/property/property-calculation/property-calculation.service.js +3 -3
  111. package/esm2015/lib/services/report/property/property-transaction-report.service.js +3 -3
  112. package/esm2015/lib/services/toast/toast.service.js +3 -3
  113. package/esm2015/lib/services/transaction/transaction-calculation.service.js +3 -3
  114. package/esm2015/lib/services/user/user-switcher.service.js +3 -3
  115. package/esm2015/lib/services/vehicle/logbook-best-period.service.js +3 -3
  116. package/esm2015/lib/services/xlsx/xlsx.service.js +3 -3
  117. package/esm2015/lib/tt-core.module.js +4 -4
  118. package/esm2015/public-api.js +1 -3
  119. package/fesm2015/taxtank-core.js +556 -502
  120. package/fesm2015/taxtank-core.js.map +1 -1
  121. package/lib/forms/address/address.form.d.ts +11 -0
  122. package/lib/models/address/address.d.ts +16 -0
  123. package/lib/models/address/index.d.ts +3 -0
  124. package/lib/models/address/states.enum.d.ts +10 -0
  125. package/lib/models/bank/bank-login-data.d.ts +4 -0
  126. package/lib/models/bank/basiq/basiq-connection-data.interface.d.ts +8 -0
  127. package/lib/models/bank/basiq/basiq-job-response.d.ts +1 -0
  128. package/lib/models/bank/basiq/index.d.ts +1 -0
  129. package/lib/models/event/app-event-type.enum.d.ts +59 -58
  130. package/lib/models/index.d.ts +1 -0
  131. package/lib/services/http/bank/bank-connection/bank-connection.service.d.ts +3 -0
  132. package/lib/services/http/bank/basiq/basiq.service.d.ts +16 -21
  133. package/package.json +1 -1
  134. package/public-api.d.ts +0 -2
@@ -20,9 +20,9 @@ export class RewardfulService {
20
20
  });
21
21
  }
22
22
  }
23
- RewardfulService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RewardfulService, deps: [{ token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
24
- RewardfulService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RewardfulService, providedIn: 'root' });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: RewardfulService, decorators: [{
23
+ RewardfulService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: RewardfulService, deps: [{ token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
24
+ RewardfulService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: RewardfulService, providedIn: 'root' });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: RewardfulService, decorators: [{
26
26
  type: Injectable,
27
27
  args: [{
28
28
  providedIn: 'root'
@@ -37,9 +37,9 @@ export class AssetsService {
37
37
  return this.http.delete(`${this.environment.apiV2}/${asset.entityType}/${entityId}/${asset.type}/${asset.id}`);
38
38
  }
39
39
  }
40
- AssetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AssetsService, deps: [{ token: i1.HttpClient }, { token: i2.UserSwitcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
41
- AssetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AssetsService, providedIn: 'root' });
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AssetsService, decorators: [{
40
+ AssetsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AssetsService, deps: [{ token: i1.HttpClient }, { token: i2.UserSwitcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
41
+ AssetsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AssetsService, providedIn: 'root' });
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AssetsService, decorators: [{
43
43
  type: Injectable,
44
44
  args: [{
45
45
  providedIn: 'root'
@@ -48,9 +48,9 @@ export class AuthService {
48
48
  location.replace(url);
49
49
  }
50
50
  }
51
- AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, deps: [{ token: i1.HttpClient }, { token: i2.JwtService }, { token: i3.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
52
- AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, providedIn: 'root' });
53
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AuthService, decorators: [{
51
+ AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AuthService, deps: [{ token: i1.HttpClient }, { token: i2.JwtService }, { token: i3.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
52
+ AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AuthService, providedIn: 'root' });
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AuthService, decorators: [{
54
54
  type: Injectable,
55
55
  args: [{
56
56
  providedIn: 'root'
@@ -25,9 +25,9 @@ export class JwtService extends JwtHelperService {
25
25
  return this.getUser().id === userId;
26
26
  }
27
27
  }
28
- JwtService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
29
- JwtService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, providedIn: 'root' });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: JwtService, decorators: [{
28
+ JwtService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: JwtService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
29
+ JwtService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: JwtService, providedIn: 'root' });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: JwtService, decorators: [{
31
31
  type: Injectable,
32
32
  args: [{
33
33
  providedIn: 'root'
@@ -25,9 +25,9 @@ export class BankAccountCalculationService {
25
25
  return bankAccounts.currentBalance - this.getTaxTankBalance(bankAccounts.getLoanAccounts(), bankTransactions, allocations);
26
26
  }
27
27
  }
28
- BankAccountCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankAccountCalculationService, deps: [{ token: i1.BankTransactionCalculationService }], target: i0.ɵɵFactoryTarget.Injectable });
29
- BankAccountCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankAccountCalculationService, providedIn: 'root' });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankAccountCalculationService, decorators: [{
28
+ BankAccountCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankAccountCalculationService, deps: [{ token: i1.BankTransactionCalculationService }], target: i0.ɵɵFactoryTarget.Injectable });
29
+ BankAccountCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankAccountCalculationService, providedIn: 'root' });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankAccountCalculationService, decorators: [{
31
31
  type: Injectable,
32
32
  args: [{
33
33
  providedIn: 'root'
@@ -54,9 +54,9 @@ export class BankTransactionCalculationService {
54
54
  return allocations.getByBankTransactionsIds(bankTransactions.debitTransactions.getIds()).amount;
55
55
  }
56
56
  }
57
- BankTransactionCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankTransactionCalculationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
58
- BankTransactionCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankTransactionCalculationService, providedIn: 'root' });
59
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankTransactionCalculationService, decorators: [{
57
+ BankTransactionCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankTransactionCalculationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
58
+ BankTransactionCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankTransactionCalculationService, providedIn: 'root' });
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankTransactionCalculationService, decorators: [{
60
60
  type: Injectable,
61
61
  args: [{
62
62
  providedIn: 'root'
@@ -19,9 +19,9 @@ export class EventDispatcherService {
19
19
  this.eventSubject.next(event);
20
20
  }
21
21
  }
22
- EventDispatcherService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EventDispatcherService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
- EventDispatcherService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EventDispatcherService, providedIn: 'root' });
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: EventDispatcherService, decorators: [{
22
+ EventDispatcherService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EventDispatcherService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
+ EventDispatcherService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EventDispatcherService, providedIn: 'root' });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: EventDispatcherService, decorators: [{
25
25
  type: Injectable,
26
26
  args: [{
27
27
  providedIn: 'root'
@@ -36,9 +36,9 @@ export class SseService {
36
36
  }));
37
37
  }
38
38
  }
39
- SseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SseService, deps: [{ token: i0.NgZone }, { token: i1.JwtService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
40
- SseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SseService, providedIn: 'root' });
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SseService, decorators: [{
39
+ SseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SseService, deps: [{ token: i0.NgZone }, { token: i1.JwtService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
40
+ SseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SseService, providedIn: 'root' });
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SseService, decorators: [{
42
42
  type: Injectable,
43
43
  args: [{
44
44
  providedIn: 'root'
@@ -20,9 +20,9 @@ export class ExportFormatterService {
20
20
  }));
21
21
  }
22
22
  }
23
- ExportFormatterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ExportFormatterService, deps: [{ token: i1.CurrencyPipe }, { token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable });
24
- ExportFormatterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ExportFormatterService, providedIn: 'root' });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ExportFormatterService, decorators: [{
23
+ ExportFormatterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ExportFormatterService, deps: [{ token: i1.CurrencyPipe }, { token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable });
24
+ ExportFormatterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ExportFormatterService, providedIn: 'root' });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ExportFormatterService, decorators: [{
26
26
  type: Injectable,
27
27
  args: [{
28
28
  providedIn: 'root'
@@ -17,9 +17,9 @@ export class HeaderTitleService {
17
17
  }), filter((route) => route.outlet === 'primary'), mergeMap((route) => route.data));
18
18
  }
19
19
  }
20
- HeaderTitleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderTitleService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
21
- HeaderTitleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderTitleService, providedIn: 'root' });
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: HeaderTitleService, decorators: [{
20
+ HeaderTitleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeaderTitleService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
21
+ HeaderTitleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeaderTitleService, providedIn: 'root' });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeaderTitleService, decorators: [{
23
23
  type: Injectable,
24
24
  args: [{
25
25
  providedIn: 'root'
@@ -25,9 +25,9 @@ export class AddressService {
25
25
  return this.countriesSubject.asObservable();
26
26
  }
27
27
  }
28
- AddressService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AddressService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
29
- AddressService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AddressService, providedIn: 'root' });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: AddressService, decorators: [{
28
+ AddressService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AddressService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
29
+ AddressService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AddressService, providedIn: 'root' });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AddressService, decorators: [{
31
31
  type: Injectable,
32
32
  args: [{
33
33
  providedIn: 'root'
@@ -103,9 +103,9 @@ export class BankAccountService extends RestService {
103
103
  });
104
104
  }
105
105
  }
106
- BankAccountService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankAccountService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
107
- BankAccountService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankAccountService, providedIn: 'root' });
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankAccountService, decorators: [{
106
+ BankAccountService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankAccountService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
107
+ BankAccountService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankAccountService, providedIn: 'root' });
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankAccountService, decorators: [{
109
109
  type: Injectable,
110
110
  args: [{
111
111
  providedIn: 'root'
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { map } from 'rxjs/operators';
2
+ import { catchError, map } from 'rxjs/operators';
3
3
  import { plainToClass } from 'class-transformer';
4
4
  import { BankConnection } from '../../../../models/bank/bank-connection';
5
5
  import { RestService } from '../../rest/rest.service';
@@ -8,6 +8,7 @@ import cloneDeep from 'lodash/cloneDeep';
8
8
  import { replace } from '../../../../functions/array';
9
9
  import { AppEvent } from '../../../../models/event/app-event';
10
10
  import { UserEventTypeTypeEnum } from '../../../../db/Enums/user-event-type-type.enum';
11
+ import { throwError as observableThrowError } from 'rxjs/internal/observable/throwError';
11
12
  import * as i0 from "@angular/core";
12
13
  /**
13
14
  * BankConnection means user account at specific bank (usually each user has only one at the same bank)
@@ -42,8 +43,18 @@ export class BankConnectionService extends RestService {
42
43
  this.cacheSubject.next(cloneDeep(this.cache));
43
44
  }
44
45
  }
45
- this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_CONNECTION_ADDED, null));
46
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BANK_CONNECTION_ADDED, connection));
46
47
  return plainToClass(BankConnection, connection);
48
+ }), catchError((error) => {
49
+ // Show error when user provided wrong login data
50
+ if (error.status === 401) {
51
+ this.toastService.error('Invalid credentials');
52
+ }
53
+ // Show error when user provided another login (not login he used before)
54
+ if (error.status === 400) {
55
+ this.toastService.error('Please enter the login you used before');
56
+ }
57
+ return observableThrowError(error);
47
58
  }));
48
59
  }
49
60
  listenToAddedBankAccounts() {
@@ -66,9 +77,18 @@ export class BankConnectionService extends RestService {
66
77
  }
67
78
  });
68
79
  }
80
+ /**
81
+ * Create/reconnect bank connection when user successfully logged in to basiq
82
+ */
69
83
  listenBasiqLogin() {
70
- this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_LOGIN_FINISHED).subscribe(() => {
71
- this.resetCache();
84
+ this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_LOGIN_SUCCESS).subscribe((data) => {
85
+ this.add(plainToClass(BankConnection, { id: data.connectionId, basiqJob: { externalId: data.jobId } }))
86
+ .subscribe(() => { },
87
+ // When user already has some bank accounts in handling connection and trying to login with different credentials, backend can not save this connection.
88
+ // So we should handle this case as failed login
89
+ () => {
90
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_LOGIN_FAILED, null));
91
+ });
72
92
  });
73
93
  }
74
94
  }
@@ -76,12 +96,12 @@ BankConnectionService.userEventTypes = [
76
96
  UserEventTypeTypeEnum.BASIQ_NEW_ACCOUNTS,
77
97
  UserEventTypeTypeEnum.BASIQ_AUTHORIZATION_FAIL
78
98
  ];
79
- BankConnectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankConnectionService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
80
- BankConnectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankConnectionService, providedIn: 'root' });
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankConnectionService, decorators: [{
99
+ BankConnectionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankConnectionService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
100
+ BankConnectionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankConnectionService, providedIn: 'root' });
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankConnectionService, decorators: [{
82
102
  type: Injectable,
83
103
  args: [{
84
104
  providedIn: 'root'
85
105
  }]
86
106
  }] });
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuay1jb25uZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9iYW5rL2JhbmstY29ubmVjdGlvbi9iYW5rLWNvbm5lY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUVoRixPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOztBQUV2Rjs7O0dBR0c7QUFJSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBK0M7SUFIMUY7O1FBU0UsZUFBVSxHQUFHLGNBQWMsQ0FBQztRQUM1QixRQUFHLEdBQVcsa0JBQWtCLENBQUM7S0FnRWxDO0lBOURDLFlBQVk7UUFDVixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsR0FBRyxDQUFDLGNBQThCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsY0FBYyxDQUFDO2FBQzNFLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxrQkFBc0MsRUFBRSxFQUFFO1lBQzdDLE1BQU0sVUFBVSxHQUFtQixZQUFZLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFcEYseUZBQXlGO1lBQ3pGLHVFQUF1RTtZQUN2RSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxjQUFjLENBQUMsRUFBRSxFQUFFO29CQUNyQixNQUFNLFNBQVMsR0FBcUIsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUQsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFFL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDcEM7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7b0JBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDL0M7YUFDRjtZQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUVqRyxPQUFPLFlBQVksQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBMEIsRUFBRSxFQUFFO1lBQzNHLGdJQUFnSTtZQUNoSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDeEIsT0FBTzthQUNSO1lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDekUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ25CO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7QUFyRU0sb0NBQWMsR0FBNEI7SUFDL0MscUJBQXFCLENBQUMsa0JBQWtCO0lBQ3hDLHFCQUFxQixDQUFDLHdCQUF3QjtDQUMvQyxDQUFDO21IQUpTLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhbmtDb25uZWN0aW9uIGFzIEJhbmtDb25uZWN0aW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy9iYW5rL2JhbmstY29ubmVjdGlvbic7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBCYW5rQ29ubmVjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYW5rL2JhbmstY29ubmVjdGlvbic7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZXZlbnQtbGlzdGVuZXIuaW50ZXJmYWNlJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IEFwcEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudCc7XG5pbXBvcnQgeyBVc2VyRXZlbnRUeXBlVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9FbnVtcy91c2VyLWV2ZW50LXR5cGUtdHlwZS5lbnVtJztcblxuLyoqXG4gKiBCYW5rQ29ubmVjdGlvbiBtZWFucyB1c2VyIGFjY291bnQgYXQgc3BlY2lmaWMgYmFuayAodXN1YWxseSBlYWNoIHVzZXIgaGFzIG9ubHkgb25lIGF0IHRoZSBzYW1lIGJhbmspXG4gKiBzZXJ2aWNlIGhhbmRsZXMgQmFua0Nvbm5lY3Rpb24gbWFuYWdlbWVudFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCYW5rQ29ubmVjdGlvblNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxCYW5rQ29ubmVjdGlvbkJhc2UsIEJhbmtDb25uZWN0aW9uPiBpbXBsZW1lbnRzIElFdmVudExpc3RlbmVyIHtcbiAgc3RhdGljIHVzZXJFdmVudFR5cGVzOiBVc2VyRXZlbnRUeXBlVHlwZUVudW1bXSA9IFtcbiAgICBVc2VyRXZlbnRUeXBlVHlwZUVudW0uQkFTSVFfTkVXX0FDQ09VTlRTLFxuICAgIFVzZXJFdmVudFR5cGVUeXBlRW51bS5CQVNJUV9BVVRIT1JJWkFUSU9OX0ZBSUxcbiAgXTtcblxuICBtb2RlbENsYXNzID0gQmFua0Nvbm5lY3Rpb247XG4gIHVybDogc3RyaW5nID0gJ2JhbmstY29ubmVjdGlvbnMnO1xuXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlblRvQWRkZWRCYW5rQWNjb3VudHMoKTtcbiAgICB0aGlzLmxpc3Rlbk5vdGlmaWNhdGlvbnMoKTtcbiAgICB0aGlzLmxpc3RlbkJhc2lxTG9naW4oKTtcbiAgfVxuXG4gIGFkZChiYW5rQ29ubmVjdGlvbjogQmFua0Nvbm5lY3Rpb24pOiBPYnNlcnZhYmxlPEJhbmtDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9YCwgYmFua0Nvbm5lY3Rpb24pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChiYW5rQ29ubmVjdGlvbkJhc2U6IEJhbmtDb25uZWN0aW9uQmFzZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb246IEJhbmtDb25uZWN0aW9uID0gcGxhaW5Ub0NsYXNzKEJhbmtDb25uZWN0aW9uLCBiYW5rQ29ubmVjdGlvbkJhc2UpO1xuXG4gICAgICAgICAgLy8gV2UgdXNlIHRoaXMgZW5kcG9pbnQgZm9yIGNyZWF0ZSBhbmQgcmVjb25uZWN0IGJhbmsgY29ubmVjdGlvbnMgYmVjYXVzZSBvZiBiYXNpcSBsb2dpYy5cbiAgICAgICAgICAvLyBTbyB3ZSB0cnkgdG8gcmVwbGFjZSBiYW5rIGNvbm5lY3Rpb24gaW4gY2FjaGUgZm9yIHJlY29ubmVjdGlvbiBjYXNlLlxuICAgICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoYmFua0Nvbm5lY3Rpb24uaWQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGVtcENhY2hlOiBCYW5rQ29ubmVjdGlvbltdID0gY2xvbmVEZWVwKHRoaXMuY2FjaGUpO1xuICAgICAgICAgICAgICByZXBsYWNlKHRlbXBDYWNoZSwgY29ubmVjdGlvbik7XG5cbiAgICAgICAgICAgICAgdGhpcy5jYWNoZSA9IHRlbXBDYWNoZTtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZVN1YmplY3QubmV4dCh0aGlzLmNhY2hlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FjaGUucHVzaChjb25uZWN0aW9uKVxuICAgICAgICAgICAgICB0aGlzLmNhY2hlU3ViamVjdC5uZXh0KGNsb25lRGVlcCh0aGlzLmNhY2hlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLkJBTktfQ09OTkVDVElPTl9BRERFRCwgbnVsbCkpO1xuXG4gICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhCYW5rQ29ubmVjdGlvbiwgY29ubmVjdGlvbik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgbGlzdGVuVG9BZGRlZEJhbmtBY2NvdW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5CQU5LX0FDQ09VTlRfQ1JFQVRFRCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRDYWNoZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjYWNoZSB3aGVuIGJhc2lxIGFjY291bnRzIHdlcmUgcmV0cmlldmVkIG9yIGxvZ2luIHRvIGJhc2ljIHdhcyBmYWlsZWQgdG8gZ2V0IGFjdHVhbCBjb25uZWN0aW9ucyBzdGF0dXNlc1xuICAgKi9cbiAgbGlzdGVuTm90aWZpY2F0aW9ucygpOiB2b2lkIHtcbiAgICAvLyBAVE9ETyB2aWsgbGlzdGVuIHNzZSB3aGVuIGJhY2tlbmQgdXBkYXRlZFxuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLk5PVElGSUNBVElPTl9BRERFRCkuc3Vic2NyaWJlKChub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikgPT4ge1xuICAgICAgLy8gQFRvZG8gVFQtMjI4MCBBbGV4IHJlZmFjdG9yIFNlcnZpY2VOb3RpZmljYXRpb24gaXNSZWFkIGxvZ2ljLiBXZSBkb24ndCBuZWVkIHRvIGtub3cgaGVyZSB3aGV0aGVyIG5vdGlmaWNhdGlvbiB3YXMgcmVhZCBvciBub3RcbiAgICAgIGlmICghbm90aWZpY2F0aW9uLmlzUmVhZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChCYW5rQ29ubmVjdGlvblNlcnZpY2UudXNlckV2ZW50VHlwZXMuaW5jbHVkZXMobm90aWZpY2F0aW9uLmV2ZW50VHlwZSkpIHtcbiAgICAgICAgdGhpcy5yZXNldENhY2hlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsaXN0ZW5CYXNpcUxvZ2luKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLkJBU0lRX0xPR0lOX0ZJTklTSEVEKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldENhY2hlKCk7XG4gICAgfSlcbiAgfVxufVxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuay1jb25uZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9iYW5rL2JhbmstY29ubmVjdGlvbi9iYW5rLWNvbm5lY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFaEYsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUd2RixPQUFPLEVBQUUsVUFBVSxJQUFJLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBRXpGOzs7R0FHRztBQUlILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxXQUErQztJQUgxRjs7UUFTRSxlQUFVLEdBQUcsY0FBYyxDQUFDO1FBQzVCLFFBQUcsR0FBVyxrQkFBa0IsQ0FBQztLQXdGbEM7SUF0RkMsWUFBWTtRQUNWLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUks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LENBQUMsSUFBeUIsRUFBRSxFQUFFO1lBQzNHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNwRyxTQUFTLENBQ1IsR0FBRyxFQUFFLEdBQUcsQ0FBQztZQUNULHdKQUF3SjtZQUN4SixnREFBZ0Q7WUFDaEQsR0FBRyxFQUFFO2dCQUNILElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRyxDQUFDLENBQ0YsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7QUE3Rk0sb0NBQWMsR0FBNEI7SUFDL0MscUJBQXFCLENBQUMsa0JBQWtCO0lBQ3hDLHFCQUFxQixDQUFDLHdCQUF3QjtDQUMvQyxDQUFDO21IQUpTLHFCQUFxQjt1SEFBckIscUJBQXFCLGNBRnBCLE1BQU07NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJhbmtDb25uZWN0aW9uIGFzIEJhbmtDb25uZWN0aW9uQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL01vZGVscy9iYW5rL2JhbmstY29ubmVjdGlvbic7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBCYW5rQ29ubmVjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYW5rL2JhbmstY29ubmVjdGlvbic7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZXZlbnQtbGlzdGVuZXIuaW50ZXJmYWNlJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IEFwcEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudCc7XG5pbXBvcnQgeyBVc2VyRXZlbnRUeXBlVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9FbnVtcy91c2VyLWV2ZW50LXR5cGUtdHlwZS5lbnVtJztcbmltcG9ydCB7IEJhc2lxQ29ubmVjdGlvbkRhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyB0aHJvd0Vycm9yIGFzIG9ic2VydmFibGVUaHJvd0Vycm9yIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3InO1xuXG4vKipcbiAqIEJhbmtDb25uZWN0aW9uIG1lYW5zIHVzZXIgYWNjb3VudCBhdCBzcGVjaWZpYyBiYW5rICh1c3VhbGx5IGVhY2ggdXNlciBoYXMgb25seSBvbmUgYXQgdGhlIHNhbWUgYmFuaylcbiAqIHNlcnZpY2UgaGFuZGxlcyBCYW5rQ29ubmVjdGlvbiBtYW5hZ2VtZW50XG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJhbmtDb25uZWN0aW9uU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPEJhbmtDb25uZWN0aW9uQmFzZSwgQmFua0Nvbm5lY3Rpb24+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICBzdGF0aWMgdXNlckV2ZW50VHlwZXM6IFVzZXJFdmVudFR5cGVUeXBlRW51bVtdID0gW1xuICAgIFVzZXJFdmVudFR5cGVUeXBlRW51bS5CQVNJUV9ORVdfQUNDT1VOVFMsXG4gICAgVXNlckV2ZW50VHlwZVR5cGVFbnVtLkJBU0lRX0FVVEhPUklaQVRJT05fRkFJTFxuICBdO1xuXG4gIG1vZGVsQ2xhc3MgPSBCYW5rQ29ubmVjdGlvbjtcbiAgdXJsOiBzdHJpbmcgPSAnYmFuay1jb25uZWN0aW9ucyc7XG5cbiAgbGlzdGVuRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuVG9BZGRlZEJhbmtBY2NvdW50cygpO1xuICAgIHRoaXMubGlzdGVuTm90aWZpY2F0aW9ucygpO1xuICAgIHRoaXMubGlzdGVuQmFzaXFMb2dpbigpO1xuICB9XG5cbiAgYWRkKGJhbmtDb25uZWN0aW9uOiBCYW5rQ29ubmVjdGlvbik6IE9ic2VydmFibGU8QmFua0Nvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH1gLCBiYW5rQ29ubmVjdGlvbilcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGJhbmtDb25uZWN0aW9uQmFzZTogQmFua0Nvbm5lY3Rpb25CYXNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29ubmVjdGlvbjogQmFua0Nvbm5lY3Rpb24gPSBwbGFpblRvQ2xhc3MoQmFua0Nvbm5lY3Rpb24sIGJhbmtDb25uZWN0aW9uQmFzZSk7XG5cbiAgICAgICAgICAvLyBXZSB1c2UgdGhpcyBlbmRwb2ludCBmb3IgY3JlYXRlIGFuZCByZWNvbm5lY3QgYmFuayBjb25uZWN0aW9ucyBiZWNhdXNlIG9mIGJhc2lxIGxvZ2ljLlxuICAgICAgICAgIC8vIFNvIHdlIHRyeSB0byByZXBsYWNlIGJhbmsgY29ubmVjdGlvbiBpbiBjYWNoZSBmb3IgcmVjb25uZWN0aW9uIGNhc2UuXG4gICAgICAgICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIGlmIChiYW5rQ29ubmVjdGlvbi5pZCkge1xuICAgICAgICAgICAgICBjb25zdCB0ZW1wQ2FjaGU6IEJhbmtDb25uZWN0aW9uW10gPSBjbG9uZURlZXAodGhpcy5jYWNoZSk7XG4gICAgICAgICAgICAgIHJlcGxhY2UodGVtcENhY2hlLCBjb25uZWN0aW9uKTtcblxuICAgICAgICAgICAgICB0aGlzLmNhY2hlID0gdGVtcENhY2hlO1xuICAgICAgICAgICAgICB0aGlzLmNhY2hlU3ViamVjdC5uZXh0KHRoaXMuY2FjaGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jYWNoZS5wdXNoKGNvbm5lY3Rpb24pXG4gICAgICAgICAgICAgIHRoaXMuY2FjaGVTdWJqZWN0Lm5leHQoY2xvbmVEZWVwKHRoaXMuY2FjaGUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uQkFOS19DT05ORUNUSU9OX0FEREVELCBjb25uZWN0aW9uKSk7XG5cbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKEJhbmtDb25uZWN0aW9uLCBjb25uZWN0aW9uKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIC8vIFNob3cgZXJyb3Igd2hlbiB1c2VyIHByb3ZpZGVkIHdyb25nIGxvZ2luIGRhdGFcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmVycm9yKCdJbnZhbGlkIGNyZWRlbnRpYWxzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2hvdyBlcnJvciB3aGVuIHVzZXIgcHJvdmlkZWQgYW5vdGhlciBsb2dpbiAobm90IGxvZ2luIGhlIHVzZWQgYmVmb3JlKVxuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZXJyb3IoJ1BsZWFzZSBlbnRlciB0aGUgbG9naW4geW91IHVzZWQgYmVmb3JlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVUaHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBsaXN0ZW5Ub0FkZGVkQmFua0FjY291bnRzKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLkJBTktfQUNDT1VOVF9DUkVBVEVEKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldENhY2hlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNhY2hlIHdoZW4gYmFzaXEgYWNjb3VudHMgd2VyZSByZXRyaWV2ZWQgb3IgbG9naW4gdG8gYmFzaWMgd2FzIGZhaWxlZCB0byBnZXQgYWN0dWFsIGNvbm5lY3Rpb25zIHN0YXR1c2VzXG4gICAqL1xuICBsaXN0ZW5Ob3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgIC8vIEBUT0RPIHZpayBsaXN0ZW4gc3NlIHdoZW4gYmFja2VuZCB1cGRhdGVkXG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uTk9USUZJQ0FUSU9OX0FEREVEKS5zdWJzY3JpYmUoKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKSA9PiB7XG4gICAgICAvLyBAVG9kbyBUVC0yMjgwIEFsZXggcmVmYWN0b3IgU2VydmljZU5vdGlmaWNhdGlvbiBpc1JlYWQgbG9naWMuIFdlIGRvbid0IG5lZWQgdG8ga25vdyBoZXJlIHdoZXRoZXIgbm90aWZpY2F0aW9uIHdhcyByZWFkIG9yIG5vdFxuICAgICAgaWYgKCFub3RpZmljYXRpb24uaXNSZWFkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKEJhbmtDb25uZWN0aW9uU2VydmljZS51c2VyRXZlbnRUeXBlcy5pbmNsdWRlcyhub3RpZmljYXRpb24uZXZlbnRUeXBlKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q2FjaGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUvcmVjb25uZWN0IGJhbmsgY29ubmVjdGlvbiB3aGVuIHVzZXIgc3VjY2Vzc2Z1bGx5IGxvZ2dlZCBpbiB0byBiYXNpcVxuICAgKi9cbiAgbGlzdGVuQmFzaXFMb2dpbigpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5CQVNJUV9MT0dJTl9TVUNDRVNTKS5zdWJzY3JpYmUoKGRhdGE6IEJhc2lxQ29ubmVjdGlvbkRhdGEpID0+IHtcbiAgICAgIHRoaXMuYWRkKHBsYWluVG9DbGFzcyhCYW5rQ29ubmVjdGlvbiwgeyBpZDogZGF0YS5jb25uZWN0aW9uSWQsIGJhc2lxSm9iOiB7IGV4dGVybmFsSWQ6IGRhdGEuam9iSWQgfSB9KSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoKSA9PiB7IH0sXG4gICAgICAgICAgLy8gV2hlbiB1c2VyIGFscmVhZHkgaGFzIHNvbWUgYmFuayBhY2NvdW50cyBpbiBoYW5kbGluZyBjb25uZWN0aW9uIGFuZCB0cnlpbmcgdG8gbG9naW4gd2l0aCBkaWZmZXJlbnQgY3JlZGVudGlhbHMsIGJhY2tlbmQgY2FuIG5vdCBzYXZlIHRoaXMgY29ubmVjdGlvbi5cbiAgICAgICAgICAvLyBTbyB3ZSBzaG91bGQgaGFuZGxlIHRoaXMgY2FzZSBhcyBmYWlsZWQgbG9naW5cbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uQkFTSVFfTE9HSU5fRkFJTEVELCBudWxsKSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -80,9 +80,9 @@ export class BankTransactionService extends RestService {
80
80
  });
81
81
  }
82
82
  }
83
- BankTransactionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankTransactionService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
84
- BankTransactionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankTransactionService, providedIn: 'root' });
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankTransactionService, decorators: [{
83
+ BankTransactionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankTransactionService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
84
+ BankTransactionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankTransactionService, providedIn: 'root' });
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankTransactionService, decorators: [{
86
86
  type: Injectable,
87
87
  args: [{
88
88
  providedIn: 'root'
@@ -20,9 +20,9 @@ export class BankService extends RestService {
20
20
  }));
21
21
  }
22
22
  }
23
- BankService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
24
- BankService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankService, providedIn: 'root' });
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BankService, decorators: [{
23
+ BankService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
24
+ BankService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankService, providedIn: 'root' });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BankService, decorators: [{
26
26
  type: Injectable,
27
27
  args: [{
28
28
  providedIn: 'root'
@@ -28,9 +28,9 @@ export class BasiqTokenService {
28
28
  return this.cacheSubject.asObservable();
29
29
  }
30
30
  }
31
- BasiqTokenService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqTokenService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
32
- BasiqTokenService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqTokenService, providedIn: 'root' });
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqTokenService, decorators: [{
31
+ BasiqTokenService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BasiqTokenService, deps: [{ token: i1.HttpClient }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
32
+ BasiqTokenService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BasiqTokenService, providedIn: 'root' });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BasiqTokenService, decorators: [{
34
34
  type: Injectable,
35
35
  args: [{
36
36
  providedIn: 'root'
@@ -1,13 +1,12 @@
1
1
  import { Inject, Injectable } from '@angular/core';
2
- import { catchError, filter, map, mergeMap, take } from 'rxjs/operators';
2
+ import { filter, map } from 'rxjs/operators';
3
3
  import { RestService } from '../../rest/rest.service';
4
4
  import { AppEventTypeEnum } from '../../../../models/event/app-event-type.enum';
5
5
  import { BankAccountCollection } from '../../../../collections/bank-account.collection';
6
6
  import { plainToClass } from 'class-transformer';
7
- import { throwError as observableThrowError } from 'rxjs/internal/observable/throwError';
8
7
  import { UserEventTypeTypeEnum } from '../../../../db/Enums/user-event-type-type.enum';
9
8
  import { AppEvent } from '../../../../models/event/app-event';
10
- import { BankAccount, BankConnection, BasiqJobResponse } from '../../../../models';
9
+ import { BankAccount, BasiqJobResponse } from '../../../../models';
11
10
  import * as i0 from "@angular/core";
12
11
  import * as i1 from "@angular/common/http";
13
12
  import * as i2 from "../../../event/event-dispatcher.service";
@@ -18,7 +17,9 @@ import * as i4 from "../bank-connection/bank-connection.service";
18
17
  * service is responsible for fetching bank related information
19
18
  */
20
19
  export class BasiqService extends RestService {
21
- constructor(http, eventDispatcherService, environment, toastService, bankConnectionService) {
20
+ constructor(http, eventDispatcherService, environment, toastService,
21
+ // this inject required to init bank connection service and listen basiq login event
22
+ bankConnectionService) {
22
23
  super(http, eventDispatcherService, environment, toastService);
23
24
  this.http = http;
24
25
  this.eventDispatcherService = eventDispatcherService;
@@ -33,56 +34,24 @@ export class BasiqService extends RestService {
33
34
  */
34
35
  listenEvents() {
35
36
  this.listenNotifications();
36
- this.listenJobs();
37
+ this.listenJobCreated();
37
38
  }
38
39
  /**
39
- * Create a new Bank connection based on Basiq job.
40
- * Here we have nested requests because we need to get a job id before we create a bank connection.
41
- * There is no way to use event dispatcher because we expect some errors from bank-connections API, but in components
42
- * we interact with basiq service.
40
+ * Start basiq login process.
41
+ * Create a basiq job, which contain credentials verifying status.
42
+ * We can not see login result immediately, because it may take some time (average 10-20 sec)
43
43
  */
44
- createConnection(loginData, userId) {
45
- // Send login data to basiq API to create a basiq job
46
- return this.http.post(`${BasiqService.basiqApiUrl}/users/${userId}/connections`, loginData)
47
- .pipe(mergeMap((response) => {
48
- this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_JOB_CREATED, response.id));
49
- // Create bank connection based on basiq job
50
- return this.bankConnectionService.add(plainToClass(BankConnection, { basiqJob: { externalId: response.id } }));
51
- }), catchError((error) => {
52
- // Show error when user provided wrong login data
53
- if (error.status === 401) {
54
- this.toastService.error('Invalid credentials');
55
- }
56
- return observableThrowError(error);
57
- }));
58
- }
59
- /**
60
- * Update disconnected bank connection
61
- * Here we have nested requests because we need to get a job id before we create a bank connection.
62
- * There is no way to use event dispatcher because we expect some errors from bank-connections API, but in components
63
- * we interact with basiq service.
64
- */
65
- updateConnection(data, userId, connection) {
66
- // Send login data and connection id to basiq API to create a basiq job
67
- return this.http.post(`${BasiqService.basiqApiUrl}/users/${userId}/connections`, Object.assign(data, { id: connection.externalId }))
68
- .pipe(mergeMap((response) => {
69
- this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_JOB_CREATED, response.id));
70
- // Create bank connection based on basiq job
71
- return this.bankConnectionService.add(plainToClass(BankConnection, {
72
- id: connection.id,
73
- basiqJob: { externalId: response.id }
74
- }));
75
- }), catchError((error) => {
76
- // Show error when user provided wrong login data
77
- if (error.status === 401) {
78
- this.toastService.error('Invalid credentials');
79
- }
80
- // Show error when user provided another login (not login he used before)
81
- if (error.status === 400) {
82
- this.toastService.error('Please enter the login you used before');
83
- }
84
- return observableThrowError(error);
85
- }));
44
+ login(loginData, userId) {
45
+ this.http.post(`${BasiqService.basiqApiUrl}/users/${userId}/connections`, loginData)
46
+ .subscribe((response) => {
47
+ // we need jobId to check credentials verifying statis from Basiq API
48
+ // we need connectionId to know if we are creating a new connection or reconnecting existing invalid connection
49
+ const data = {
50
+ jobId: response.id,
51
+ connectionId: loginData.id
52
+ };
53
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_JOB_CREATED, data));
54
+ });
86
55
  }
87
56
  getByConnection(connection) {
88
57
  return this.get().pipe(map((bankAccounts) => {
@@ -95,31 +64,37 @@ export class BasiqService extends RestService {
95
64
  }));
96
65
  }
97
66
  /**
98
- * Get status of credentials verifying. Expected statuses: 'in-progress', 'failed' or 'success'
99
- * We send this request by interval until basiq return success or failed
100
- * @TODO Alex (TT-2431): check logic and try to remove subscribe, use pipes instead
101
- * @TODO Alex (TT-2431): implement some limit and handle (message or something) if basiq stuck
102
- * @TODO Alex (TT-2431): check logic and handle case when user cancelled loading
103
- */
104
- checkBankCredentials(jobId) {
105
- this.http.get(`${BasiqService.basiqApiUrl}/jobs/${jobId}`)
67
+ * Get status of credentials verifying. Expected statuses: 'in-progress', 'failed' or 'success'
68
+ * We send this request by interval until basiq return success or failed.
69
+ *
70
+ * Because of Basiq login may take a long time (10-20sec) we have to check job status until it seccess or failed.
71
+ *
72
+ * @TODO Alex (TT-2431): check logic and try to remove subscribe, use pipes instead
73
+ * @TODO Alex (TT-2431): implement some limit and handle (message or something) if basiq stuck
74
+ * @TODO Alex (TT-2431): check logic and handle case when user cancelled loading
75
+ */
76
+ checkLoginStatus(data) {
77
+ this.http.get(`${BasiqService.basiqApiUrl}/jobs/${data.jobId}`)
106
78
  .pipe(
107
- // unsubscribe after each request to avoid wrong requests (example: user cancelled too long login and login to another bank, then we will send 2 different requests)
108
- take(1),
109
79
  // get verify-credentials step from basiq job
110
- map((response) => plainToClass(BasiqJobResponse, response).getVerifyCredentialsStep()),
80
+ map((response) => plainToClass(BasiqJobResponse, response)),
111
81
  // check credentials status again if not finished
112
- filter((step) => {
113
- if (!step.isInProgress()) {
82
+ filter((response) => {
83
+ if (!response.getVerifyCredentialsStep().isInProgress()) {
114
84
  return true;
115
85
  }
116
86
  setTimeout(() => {
117
- this.checkBankCredentials(jobId);
87
+ this.checkLoginStatus(data);
118
88
  }, BasiqService.bankCredintialsCheckInterval);
119
89
  return false;
120
90
  }))
121
- .subscribe((step) => {
122
- this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_LOGIN_FINISHED, step.isSuccess()));
91
+ .subscribe((response) => {
92
+ if (response.getVerifyCredentialsStep().isSuccess()) {
93
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_LOGIN_SUCCESS, data));
94
+ }
95
+ else {
96
+ this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.BASIQ_LOGIN_FAILED, null));
97
+ }
123
98
  });
124
99
  }
125
100
  /**
@@ -133,11 +108,11 @@ export class BasiqService extends RestService {
133
108
  });
134
109
  }
135
110
  /**
136
- * Listen Basiq job created to check its verify credentials status
111
+ * Start check job credential status when it created
137
112
  */
138
- listenJobs() {
139
- this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_JOB_CREATED).subscribe((jobId) => {
140
- this.checkBankCredentials(jobId);
113
+ listenJobCreated() {
114
+ this.eventDispatcherService.on(AppEventTypeEnum.BASIQ_JOB_CREATED).subscribe((data) => {
115
+ this.checkLoginStatus(data);
141
116
  });
142
117
  }
143
118
  }
@@ -146,9 +121,9 @@ BasiqService.basiqApiUrl = 'https://au-api.basiq.io';
146
121
  * Basiq does not provide a hook, so we have to check job status manually every x seconds
147
122
  */
148
123
  BasiqService.bankCredintialsCheckInterval = 3000;
149
- BasiqService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }, { token: i3.ToastService }, { token: i4.BankConnectionService }], target: i0.ɵɵFactoryTarget.Injectable });
150
- BasiqService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqService, providedIn: 'root' });
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: BasiqService, decorators: [{
124
+ BasiqService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BasiqService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }, { token: i3.ToastService }, { token: i4.BankConnectionService }], target: i0.ɵɵFactoryTarget.Injectable });
125
+ BasiqService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BasiqService, providedIn: 'root' });
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BasiqService, decorators: [{
152
127
  type: Injectable,
153
128
  args: [{
154
129
  providedIn: 'root'
@@ -157,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
157
132
  type: Inject,
158
133
  args: ['environment']
159
134
  }] }, { type: i3.ToastService }, { type: i4.BankConnectionService }]; } });
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaXEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL2JhbmsvYmFzaXEvYmFzaXEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU9oRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsSUFBSSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsV0FBVyxFQUFFLGNBQWMsRUFDRCxnQkFBZ0IsRUFDM0MsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7O0FBRTVCOzs7R0FHRztBQUlILE1BQU0sT0FBTyxZQUFhLFNBQVEsV0FBeUM7SUFXekUsWUFDWSxJQUFnQixFQUNoQixzQkFBOEMsRUFDdkIsV0FBZ0IsRUFDdkMsWUFBMEIsRUFDNUIscUJBQTRDO1FBRXBELEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBTnJELFNBQUksR0FBSixJQUFJ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MEdBTnhDLFlBQVksa0ZBY2IsYUFBYTs4R0FkWixZQUFZLGNBRlgsTUFBTTs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBZUksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudCBhcyBCYW5rQWNjb3VudEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9Nb2RlbHMvYmFuay9iYW5rLWFjY291bnQnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgSUV2ZW50TGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2V2ZW50LWxpc3RlbmVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9ldmVudC9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFua0Nvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vYmFuay1jb25uZWN0aW9uL2JhbmstY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RvYXN0L3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFua0FjY291bnRDb2xsZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29sbGVjdGlvbnMvYmFuay1hY2NvdW50LmNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgdGhyb3dFcnJvciBhcyBvYnNlcnZhYmxlVGhyb3dFcnJvciB9IGZyb20gJ3J4anMvaW50ZXJuYWwvb2JzZXJ2YWJsZS90aHJvd0Vycm9yJztcbmltcG9ydCB7IFVzZXJFdmVudFR5cGVUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL2RiL0VudW1zL3VzZXItZXZlbnQtdHlwZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7XG4gIEJhbmtBY2NvdW50LCBCYW5rQ29ubmVjdGlvbiwgQmFua0xvZ2luRGF0YSxcbiAgQmFzaXFDb25uZWN0aW9uc1Jlc3BvbnNlLCBCYXNpcUpvYlJlc3BvbnNlLCBCYXNpcUpvYlN0ZXBcbn0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzJztcblxuLyoqXG4gKiBiYXNpcSBpcyBhIG1pZGRsZW1hbiBiZXR3ZWVuIGJhbmsgYW5kIHVzZXJcbiAqIHNlcnZpY2UgaXMgcmVzcG9uc2libGUgZm9yIGZldGNoaW5nIGJhbmsgcmVsYXRlZCBpbmZvcm1hdGlvblxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCYXNpcVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxCYW5rQWNjb3VudEJhc2UsIEJhbmtBY2NvdW50PiBpbXBsZW1lbnRzIElFdmVudExpc3RlbmVyIHtcbiAgc3RhdGljIGJhc2lxQXBpVXJsOiBzdHJpbmcgPSAnaHR0cHM6Ly9hdS1hcGkuYmFzaXEuaW8nO1xuXG4gIC8qKlxuICAgKiBCYXNpcSBkb2VzIG5vdCBwcm92aWRlIGEgaG9vaywgc28gd2UgaGF2ZSB0byBjaGVjayBqb2Igc3RhdHVzIG1hbnVhbGx5IGV2ZXJ5IHggc2Vjb25kc1xuICAgKi9cbiAgc3RhdGljIGJhbmtDcmVkaW50aWFsc0NoZWNrSW50ZXJ2YWw6IG51bWJlciA9IDMwMDA7XG5cbiAgdXJsOiBzdHJpbmcgPSAnYmFzaXEvYWNjb3VudHMnO1xuICBtb2RlbENsYXNzID0gQmFua0FjY291bnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IGFueSxcbiAgICBwcm90ZWN0ZWQgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBiYW5rQ29ubmVjdGlvblNlcnZpY2U6IEJhbmtDb25uZWN0aW9uU2VydmljZVxuICApIHtcbiAgICBzdXBlcihodHRwLCBldmVudERpc3BhdGNoZXJTZXJ2aWNlLCBlbnZpcm9ubWVudCwgdG9hc3RTZXJ2aWNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gZXZlbnRzIGZyb20gRXZlbnQgRGlzcGF0Y2hlciBzZXJ2aWNlXG4gICAqL1xuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5Ob3RpZmljYXRpb25zKCk7XG4gICAgdGhpcy5saXN0ZW5Kb2JzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJhbmsgY29ubmVjdGlvbiBiYXNlZCBvbiBCYXNpcSBqb2IuXG4gICAqIEhlcmUgd2UgaGF2ZSBuZXN0ZWQgcmVxdWVzdHMgYmVjYXVzZSB3ZSBuZWVkIHRvIGdldCBhIGpvYiBpZCBiZWZvcmUgd2UgY3JlYXRlIGEgYmFuayBjb25uZWN0aW9uLlxuICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gdXNlIGV2ZW50IGRpc3BhdGNoZXIgYmVjYXVzZSB3ZSBleHBlY3Qgc29tZSBlcnJvcnMgZnJvbSBiYW5rLWNvbm5lY3Rpb25zIEFQSSwgYnV0IGluIGNvbXBvbmVudHNcbiAgICogd2UgaW50ZXJhY3Qgd2l0aCBiYXNpcSBzZXJ2aWNlLlxuICAgKi9cbiAgY3JlYXRlQ29ubmVjdGlvbihsb2dpbkRhdGE6IEJhbmtMb2dpbkRhdGEsIHVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYW5rQ29ubmVjdGlvbj4ge1xuICAgIC8vIFNlbmQgbG9naW4gZGF0YSB0byBiYXNpcSBBUEkgdG8gY3JlYXRlIGEgYmFzaXEgam9iXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke0Jhc2lxU2VydmljZS5iYXNpcUFwaVVybH0vdXNlcnMvJHt1c2VySWR9L2Nvbm5lY3Rpb25zYCwgbG9naW5EYXRhKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1lcmdlTWFwKChyZXNwb25zZTogQmFzaXFDb25uZWN0aW9uc1Jlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uQkFTSVFfSk9CX0NSRUFURUQsIHJlc3BvbnNlLmlkKSk7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgYmFuayBjb25uZWN0aW9uIGJhc2VkIG9uIGJhc2lxIGpvYlxuICAgICAgICAgIHJldHVybiB0aGlzLmJhbmtDb25uZWN0aW9uU2VydmljZS5hZGQocGxhaW5Ub0NsYXNzKEJhbmtDb25uZWN0aW9uLCB7YmFzaXFKb2I6IHtleHRlcm5hbElkOiByZXNwb25zZS5pZH19KSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAvLyBTaG93IGVycm9yIHdoZW4gdXNlciBwcm92aWRlZCB3cm9uZyBsb2dpbiBkYXRhXG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5lcnJvcignSW52YWxpZCBjcmVkZW50aWFscycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlVGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkaXNjb25uZWN0ZWQgYmFuayBjb25uZWN0aW9uXG4gICAqIEhlcmUgd2UgaGF2ZSBuZXN0ZWQgcmVxdWVzdHMgYmVjYXVzZSB3ZSBuZWVkIHRvIGdldCBhIGpvYiBpZCBiZWZvcmUgd2UgY3JlYXRlIGEgYmFuayBjb25uZWN0aW9uLlxuICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gdXNlIGV2ZW50IGRpc3BhdGNoZXIgYmVjYXVzZSB3ZSBleHBlY3Qgc29tZSBlcnJvcnMgZnJvbSBiYW5rLWNvbm5lY3Rpb25zIEFQSSwgYnV0IGluIGNvbXBvbmVudHNcbiAgICogd2UgaW50ZXJhY3Qgd2l0aCBiYXNpcSBzZXJ2aWNlLlxuICAgKi9cbiAgdXBkYXRlQ29ubmVjdGlvbihkYXRhOiBCYW5rTG9naW5EYXRhLCB1c2VySWQ6IHN0cmluZywgY29ubmVjdGlvbjogQmFua0Nvbm5lY3Rpb24pOiBPYnNlcnZhYmxlPEJhbmtDb25uZWN0aW9uPiB7XG4gICAgLy8gU2VuZCBsb2dpbiBkYXRhIGFuZCBjb25uZWN0aW9uIGlkIHRvIGJhc2lxIEFQSSB0byBjcmVhdGUgYSBiYXNpcSBqb2JcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7QmFzaXFTZXJ2aWNlLmJhc2lxQXBpVXJsfS91c2Vycy8ke3VzZXJJZH0vY29ubmVjdGlvbnNgLCBPYmplY3QuYXNzaWduKGRhdGEsIHtpZDogY29ubmVjdGlvbi5leHRlcm5hbElkfSkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKHJlc3BvbnNlOiBCYXNpcUNvbm5lY3Rpb25zUmVzcG9uc2UpID0+IHtcblxuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5CQVNJUV9KT0JfQ1JFQVRFRCwgcmVzcG9uc2UuaWQpKTtcblxuICAgICAgICAgIC8vIENyZWF0ZSBiYW5rIGNvbm5lY3Rpb24gYmFzZWQgb24gYmFzaXEgam9iXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYmFua0Nvbm5lY3Rpb25TZXJ2aWNlLmFkZChwbGFpblRvQ2xhc3MoQmFua0Nvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgIGlkOiBjb25uZWN0aW9uLmlkLFxuICAgICAgICAgICAgYmFzaXFKb2I6IHtleHRlcm5hbElkOiByZXNwb25zZS5pZH1cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAvLyBTaG93IGVycm9yIHdoZW4gdXNlciBwcm92aWRlZCB3cm9uZyBsb2dpbiBkYXRhXG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5lcnJvcignSW52YWxpZCBjcmVkZW50aWFscycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNob3cgZXJyb3Igd2hlbiB1c2VyIHByb3ZpZGVkIGFub3RoZXIgbG9naW4gKG5vdCBsb2dpbiBoZSB1c2VkIGJlZm9yZSlcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmVycm9yKCdQbGVhc2UgZW50ZXIgdGhlIGxvZ2luIHlvdSB1c2VkIGJlZm9yZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlVGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZ2V0QnlDb25uZWN0aW9uKGNvbm5lY3Rpb246IEJhbmtDb25uZWN0aW9uKTogT2JzZXJ2YWJsZTxCYW5rQWNjb3VudENvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKS5waXBlKFxuICAgICAgbWFwKChiYW5rQWNjb3VudHM6IEJhbmtBY2NvdW50W10pID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCYW5rQWNjb3VudENvbGxlY3Rpb24oYmFua0FjY291bnRzKS5maWx0ZXJCeSgnYmFua0Nvbm5lY3Rpb24uaWQnLCBjb25uZWN0aW9uLmlkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldE5vdEltcG9ydGVkQnlDb25uZWN0aW9uKHNhdmVkQWNjb3VudHM6IEJhbmtBY2NvdW50Q29sbGVjdGlvbiwgY29ubmVjdGlvbjogQmFua0Nvbm5lY3Rpb24pOiBPYnNlcnZhYmxlPEJhbmtBY2NvdW50Q29sbGVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmdldEJ5Q29ubmVjdGlvbihjb25uZWN0aW9uKS5waXBlKFxuICAgICAgbWFwKChiYW5rQWNjb3VudHM6IEJhbmtBY2NvdW50Q29sbGVjdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gYmFua0FjY291bnRzLnJlbW92ZUJ5KCdhY2NvdW50SWQnLCBzYXZlZEFjY291bnRzLm1hcEJ5KCdhY2NvdW50SWQnKSk7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RhdHVzIG9mIGNyZWRlbnRpYWxzIHZlcmlmeWluZy4gRXhwZWN0ZWQgc3RhdHVzZXM6ICdpbi1wcm9ncmVzcycsICdmYWlsZWQnIG9yICdzdWNjZXNzJ1xuICAgKiBXZSBzZW5kIHRoaXMgcmVxdWVzdCBieSBpbnRlcnZhbCB1bnRpbCBiYXNpcSByZXR1cm4gc3VjY2VzcyBvciBmYWlsZWRcbiAgICogQFRPRE8gQWxleCAoVFQtMjQzMSk6IGNoZWNrIGxvZ2ljIGFuZCB0cnkgdG8gcmVtb3ZlIHN1YnNjcmliZSwgdXNlIHBpcGVzIGluc3RlYWRcbiAgICogQFRPRE8gQWxleCAoVFQtMjQzMSk6IGltcGxlbWVudCBzb21lIGxpbWl0IGFuZCBoYW5kbGUgKG1lc3NhZ2Ugb3Igc29tZXRoaW5nKSBpZiBiYXNpcSBzdHVja1xuICAgKiBAVE9ETyBBbGV4IChUVC0yNDMxKTogY2hlY2sgbG9naWMgYW5kIGhhbmRsZSBjYXNlIHdoZW4gdXNlciBjYW5jZWxsZWQgbG9hZGluZ1xuICAgKi9cbiAgY2hlY2tCYW5rQ3JlZGVudGlhbHMoam9iSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaHR0cC5nZXQoYCR7QmFzaXFTZXJ2aWNlLmJhc2lxQXBpVXJsfS9qb2JzLyR7am9iSWR9YClcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyB1bnN1YnNjcmliZSBhZnRlciBlYWNoIHJlcXVlc3QgdG8gYXZvaWQgd3JvbmcgcmVxdWVzdHMgKGV4YW1wbGU6IHVzZXIgY2FuY2VsbGVkIHRvbyBsb25nIGxvZ2luIGFuZCBsb2dpbiB0byBhbm90aGVyIGJhbmssIHRoZW4gd2Ugd2lsbCBzZW5kIDIgZGlmZmVyZW50IHJlcXVlc3RzKVxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICAvLyBnZXQgdmVyaWZ5LWNyZWRlbnRpYWxzIHN0ZXAgZnJvbSBiYXNpcSBqb2JcbiAgICAgICAgbWFwKChyZXNwb25zZTogb2JqZWN0KSA9PiBwbGFpblRvQ2xhc3MoQmFzaXFKb2JSZXNwb25zZSwgcmVzcG9uc2UpLmdldFZlcmlmeUNyZWRlbnRpYWxzU3RlcCgpKSxcbiAgICAgICAgLy8gY2hlY2sgY3JlZGVudGlhbHMgc3RhdHVzIGFnYWluIGlmIG5vdCBmaW5pc2hlZFxuICAgICAgICBmaWx0ZXIoKHN0ZXA6IEJhc2lxSm9iU3RlcCkgPT4ge1xuICAgICAgICAgIGlmICghc3RlcC5pc0luUHJvZ3Jlc3MoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQmFua0NyZWRlbnRpYWxzKGpvYklkKTtcbiAgICAgICAgICB9LCBCYXNpcVNlcnZpY2UuYmFua0NyZWRpbnRpYWxzQ2hlY2tJbnRlcnZhbCk7XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChzdGVwOiBCYXNpcUpvYlN0ZXApID0+IHtcbiAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLkJBU0lRX0xPR0lOX0ZJTklTSEVELCBzdGVwLmlzU3VjY2VzcygpKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBsaXN0ZW4gdG8gbm90aWZpY2F0aW9ucyB0byB1cGRhdGUgYmFzaXEgYWNjb3VudHMgbGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ob3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLk5PVElGSUNBVElPTl9BRERFRCkuc3Vic2NyaWJlKChub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbik6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFub3RpZmljYXRpb24uaXNSZWFkICYmIG5vdGlmaWNhdGlvbi5ldmVudFR5cGUgPT09IFVzZXJFdmVudFR5cGVUeXBlRW51bS5CQVNJUV9ORVdfQUNDT1VOVFMpIHtcbiAgICAgICAgdGhpcy5yZXNldENhY2hlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIEJhc2lxIGpvYiBjcmVhdGVkIHRvIGNoZWNrIGl0cyB2ZXJpZnkgY3JlZGVudGlhbHMgc3RhdHVzXG4gICAqL1xuICBwcml2YXRlIGxpc3RlbkpvYnMoKSB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uQkFTSVFfSk9CX0NSRUFURUQpLnN1YnNjcmliZSgoam9iSWQ6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5jaGVja0JhbmtDcmVkZW50aWFscyhqb2JJZCk7XG4gICAgfSlcbiAgfVxufVxuIl19
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaXEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL2JhbmsvYmFzaXEvYmFzaXEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQU9oRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFDTCxXQUFXLEVBQ29DLGdCQUFnQixFQUNoRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFFNUI7OztHQUdHO0FBSUgsTUFBTSxPQUFPLFlBQWEsU0FBUSxXQUF5QztJQVd6RSxZQUNZLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUN2QixXQUFnQixFQUN2QyxZQUEwQjtJQUNwQyxvRkFBb0Y7SUFDNUUscUJBQTRDO1FBRXBELEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBUHJELFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN2QixnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQUN2QyxpQkFBWSxHQUFa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O2dCQUNMLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMvRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUEwQixFQUFRLEVBQUU7WUFDakgsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLFNBQVMsS0FBSyxxQkFBcUIsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDL0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ25CO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQXlCLEVBQUUsRUFBRTtZQUN6RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOztBQXZITSx3QkFBVyxHQUFXLHlCQUF5QixDQUFDO0FBRXZEOztHQUVHO0FBQ0kseUNBQTRCLEdBQVcsSUFBSSxDQUFDOzBHQU54QyxZQUFZLGtGQWNiLGFBQWE7OEdBZFosWUFBWSxjQUZYLE1BQU07NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWVJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudCBhcyBCYW5rQWNjb3VudEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9Nb2RlbHMvYmFuay9iYW5rLWFjY291bnQnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24nO1xuaW1wb3J0IHsgSUV2ZW50TGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2V2ZW50LWxpc3RlbmVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCYW5rQ29ubmVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9iYW5rLWNvbm5lY3Rpb24vYmFuay1jb25uZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdG9hc3QvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9jb2xsZWN0aW9ucy9iYW5rLWFjY291bnQuY29sbGVjdGlvbic7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBVc2VyRXZlbnRUeXBlVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9kYi9FbnVtcy91c2VyLWV2ZW50LXR5cGUtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFwcEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudCc7XG5pbXBvcnQge1xuICBCYW5rQWNjb3VudCwgQmFua0Nvbm5lY3Rpb24sIEJhbmtMb2dpbkRhdGEsXG4gIEJhc2lxQ29ubmVjdGlvbkRhdGEsIEJhc2lxQ29ubmVjdGlvbnNSZXNwb25zZSwgQmFzaXFKb2JSZXNwb25zZVxufSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xuXG4vKipcbiAqIGJhc2lxIGlzIGEgbWlkZGxlbWFuIGJldHdlZW4gYmFuayBhbmQgdXNlclxuICogc2VydmljZSBpcyByZXNwb25zaWJsZSBmb3IgZmV0Y2hpbmcgYmFuayByZWxhdGVkIGluZm9ybWF0aW9uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJhc2lxU2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPEJhbmtBY2NvdW50QmFzZSwgQmFua0FjY291bnQ+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICBzdGF0aWMgYmFzaXFBcGlVcmw6IHN0cmluZyA9ICdodHRwczovL2F1LWFwaS5iYXNpcS5pbyc7XG5cbiAgLyoqXG4gICAqIEJhc2lxIGRvZXMgbm90IHByb3ZpZGUgYSBob29rLCBzbyB3ZSBoYXZlIHRvIGNoZWNrIGpvYiBzdGF0dXMgbWFudWFsbHkgZXZlcnkgeCBzZWNvbmRzXG4gICAqL1xuICBzdGF0aWMgYmFua0NyZWRpbnRpYWxzQ2hlY2tJbnRlcnZhbDogbnVtYmVyID0gMzAwMDtcblxuICB1cmw6IHN0cmluZyA9ICdiYXNpcS9hY2NvdW50cyc7XG4gIG1vZGVsQ2xhc3MgPSBCYW5rQWNjb3VudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgZXZlbnREaXNwYXRjaGVyU2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogYW55LFxuICAgIHByb3RlY3RlZCB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICAvLyB0aGlzIGluamVjdCByZXF1aXJlZCB0byBpbml0IGJhbmsgY29ubmVjdGlvbiBzZXJ2aWNlIGFuZCBsaXN0ZW4gYmFzaXEgbG9naW4gZXZlbnRcbiAgICBwcml2YXRlIGJhbmtDb25uZWN0aW9uU2VydmljZTogQmFua0Nvbm5lY3Rpb25TZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGh0dHAsIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsIGVudmlyb25tZW50LCB0b2FzdFNlcnZpY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBldmVudHMgZnJvbSBFdmVudCBEaXNwYXRjaGVyIHNlcnZpY2VcbiAgICovXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3Rlbk5vdGlmaWNhdGlvbnMoKTtcbiAgICB0aGlzLmxpc3RlbkpvYkNyZWF0ZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBiYXNpcSBsb2dpbiBwcm9jZXNzLlxuICAgKiBDcmVhdGUgYSBiYXNpcSBqb2IsIHdoaWNoIGNvbnRhaW4gY3JlZGVudGlhbHMgdmVyaWZ5aW5nIHN0YXR1cy5cbiAgICogV2UgY2FuIG5vdCBzZWUgbG9naW4gcmVzdWx0IGltbWVkaWF0ZWx5LCBiZWNhdXNlIGl0IG1heSB0YWtlIHNvbWUgdGltZSAoYXZlcmFnZSAxMC0yMCBzZWMpXG4gICAqL1xuICBsb2dpbihsb2dpbkRhdGE6IEJhbmtMb2dpbkRhdGEsIHVzZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5odHRwLnBvc3QoYCR7QmFzaXFTZXJ2aWNlLmJhc2lxQXBpVXJsfS91c2Vycy8ke3VzZXJJZH0vY29ubmVjdGlvbnNgLCBsb2dpbkRhdGEpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogQmFzaXFDb25uZWN0aW9uc1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vIHdlIG5lZWQgam9iSWQgdG8gY2hlY2sgY3JlZGVudGlhbHMgdmVyaWZ5aW5nIHN0YXRpcyBmcm9tIEJhc2lxIEFQSVxuICAgICAgICAvLyB3ZSBuZWVkIGNvbm5lY3Rpb25JZCB0byBrbm93IGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyBjb25uZWN0aW9uIG9yIHJlY29ubmVjdGluZyBleGlzdGluZyBpbnZhbGlkIGNvbm5lY3Rpb25cbiAgICAgICAgY29uc3QgZGF0YTogQmFzaXFDb25uZWN0aW9uRGF0YSA9IHtcbiAgICAgICAgICBqb2JJZDogcmVzcG9uc2UuaWQsXG4gICAgICAgICAgY29ubmVjdGlvbklkOiBsb2dpbkRhdGEuaWRcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uQkFTSVFfSk9CX0NSRUFURUQsIGRhdGEpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0QnlDb25uZWN0aW9uKGNvbm5lY3Rpb246IEJhbmtDb25uZWN0aW9uKTogT2JzZXJ2YWJsZTxCYW5rQWNjb3VudENvbGxlY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKS5waXBlKFxuICAgICAgbWFwKChiYW5rQWNjb3VudHM6IEJhbmtBY2NvdW50W10pID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCYW5rQWNjb3VudENvbGxlY3Rpb24oYmFua0FjY291bnRzKS5maWx0ZXJCeSgnYmFua0Nvbm5lY3Rpb24uaWQnLCBjb25uZWN0aW9uLmlkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldE5vdEltcG9ydGVkQnlDb25uZWN0aW9uKHNhdmVkQWNjb3VudHM6IEJhbmtBY2NvdW50Q29sbGVjdGlvbiwgY29ubmVjdGlvbjogQmFua0Nvbm5lY3Rpb24pOiBPYnNlcnZhYmxlPEJhbmtBY2NvdW50Q29sbGVjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmdldEJ5Q29ubmVjdGlvbihjb25uZWN0aW9uKS5waXBlKFxuICAgICAgbWFwKChiYW5rQWNjb3VudHM6IEJhbmtBY2NvdW50Q29sbGVjdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gYmFua0FjY291bnRzLnJlbW92ZUJ5KCdhY2NvdW50SWQnLCBzYXZlZEFjY291bnRzLm1hcEJ5KCdhY2NvdW50SWQnKSk7XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAqIEdldCBzdGF0dXMgb2YgY3JlZGVudGlhbHMgdmVyaWZ5aW5nLiBFeHBlY3RlZCBzdGF0dXNlczogJ2luLXByb2dyZXNzJywgJ2ZhaWxlZCcgb3IgJ3N1Y2Nlc3MnXG4gICogV2Ugc2VuZCB0aGlzIHJlcXVlc3QgYnkgaW50ZXJ2YWwgdW50aWwgYmFzaXEgcmV0dXJuIHN1Y2Nlc3Mgb3IgZmFpbGVkLlxuICAqXG4gICogQmVjYXVzZSBvZiBCYXNpcSBsb2dpbiBtYXkgdGFrZSBhIGxvbmcgdGltZSAoMTAtMjBzZWMpIHdlIGhhdmUgdG8gY2hlY2sgam9iIHN0YXR1cyB1bnRpbCBpdCBzZWNjZXNzIG9yIGZhaWxlZC5cbiAgKlxuICAqIEBUT0RPIEFsZXggKFRULTI0MzEpOiBjaGVjayBsb2dpYyBhbmQgdHJ5IHRvIHJlbW92ZSBzdWJzY3JpYmUsIHVzZSBwaXBlcyBpbnN0ZWFkXG4gICogQFRPRE8gQWxleCAoVFQtMjQzMSk6IGltcGxlbWVudCBzb21lIGxpbWl0IGFuZCBoYW5kbGUgKG1lc3NhZ2Ugb3Igc29tZXRoaW5nKSBpZiBiYXNpcSBzdHVja1xuICAqIEBUT0RPIEFsZXggKFRULTI0MzEpOiBjaGVjayBsb2dpYyBhbmQgaGFuZGxlIGNhc2Ugd2hlbiB1c2VyIGNhbmNlbGxlZCBsb2FkaW5nXG4gICovXG4gIHByaXZhdGUgY2hlY2tMb2dpblN0YXR1cyhkYXRhOiBCYXNpcUNvbm5lY3Rpb25EYXRhKTogdm9pZCB7XG4gICAgdGhpcy5odHRwLmdldChgJHtCYXNpcVNlcnZpY2UuYmFzaXFBcGlVcmx9L2pvYnMvJHtkYXRhLmpvYklkfWApXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gZ2V0IHZlcmlmeS1jcmVkZW50aWFscyBzdGVwIGZyb20gYmFzaXEgam9iXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IG9iamVjdCkgPT4gcGxhaW5Ub0NsYXNzKEJhc2lxSm9iUmVzcG9uc2UsIHJlc3BvbnNlKSksXG4gICAgICAgIC8vIGNoZWNrIGNyZWRlbnRpYWxzIHN0YXR1cyBhZ2FpbiBpZiBub3QgZmluaXNoZWRcbiAgICAgICAgZmlsdGVyKChyZXNwb25zZTogQmFzaXFKb2JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICghcmVzcG9uc2UuZ2V0VmVyaWZ5Q3JlZGVudGlhbHNTdGVwKCkuaXNJblByb2dyZXNzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja0xvZ2luU3RhdHVzKGRhdGEpO1xuICAgICAgICAgIH0sIEJhc2lxU2VydmljZS5iYW5rQ3JlZGludGlhbHNDaGVja0ludGVydmFsKTtcblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBCYXNpcUpvYlJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZS5nZXRWZXJpZnlDcmVkZW50aWFsc1N0ZXAoKS5pc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5CQVNJUV9MT0dJTl9TVUNDRVNTLCBkYXRhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLkJBU0lRX0xPR0lOX0ZBSUxFRCwgbnVsbCkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIGxpc3RlbiB0byBub3RpZmljYXRpb25zIHRvIHVwZGF0ZSBiYXNpcSBhY2NvdW50cyBsaXN0XG4gICAqL1xuICBwcml2YXRlIGxpc3Rlbk5vdGlmaWNhdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uTk9USUZJQ0FUSU9OX0FEREVEKS5zdWJzY3JpYmUoKG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIW5vdGlmaWNhdGlvbi5pc1JlYWQgJiYgbm90aWZpY2F0aW9uLmV2ZW50VHlwZSA9PT0gVXNlckV2ZW50VHlwZVR5cGVFbnVtLkJBU0lRX05FV19BQ0NPVU5UUykge1xuICAgICAgICB0aGlzLnJlc2V0Q2FjaGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBjaGVjayBqb2IgY3JlZGVudGlhbCBzdGF0dXMgd2hlbiBpdCBjcmVhdGVkXG4gICAqL1xuICBwcml2YXRlIGxpc3RlbkpvYkNyZWF0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uQkFTSVFfSk9CX0NSRUFURUQpLnN1YnNjcmliZSgoZGF0YTogQmFzaXFDb25uZWN0aW9uRGF0YSkgPT4ge1xuICAgICAgdGhpcy5jaGVja0xvZ2luU3RhdHVzKGRhdGEpO1xuICAgIH0pXG4gIH1cbn1cbiJdfQ==