@xsolla/payment-client-core 0.2.44 → 0.2.46

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 (87) hide show
  1. package/esm2022/lib/core/agreements-group.const.mjs +17 -0
  2. package/esm2022/lib/core/extended-window.interface.mjs +1 -1
  3. package/esm2022/lib/core/payment/actions/action.interface.mjs +1 -1
  4. package/esm2022/lib/core/payment/actions/next-action.service.mjs +1 -1
  5. package/esm2022/lib/core/payment/field-names.enum.mjs +4 -1
  6. package/esm2022/lib/core/payment/field.interface.mjs +1 -1
  7. package/esm2022/lib/core/payment/finance-details/finance-details.service.mjs +4 -1
  8. package/esm2022/lib/core/payment/initialize-actions/action.interface.mjs +2 -0
  9. package/esm2022/lib/core/payment/initialize-actions/initialize-next-action.service.mjs +40 -0
  10. package/esm2022/lib/core/payment/initialize-actions/initialize-next-actions.mjs +7 -0
  11. package/esm2022/lib/core/payment/initialize-actions/next-action.interface.mjs +2 -0
  12. package/esm2022/lib/core/payment/initialize-actions/special-button/special-button.action.class.mjs +46 -0
  13. package/esm2022/lib/core/payment/initialize-actions/special-button/special-button.action.type.mjs +2 -0
  14. package/esm2022/lib/core/payment/initialized-form.inteface.mjs +1 -1
  15. package/esm2022/lib/core/payment/payment.service.mjs +72 -24
  16. package/esm2022/lib/core/payment/sync/request/sync-request.class.mjs +3 -1
  17. package/esm2022/lib/core/payment/sync/sync.service.mjs +4 -4
  18. package/esm2022/lib/core/payment/xps-error.interface.mjs +1 -1
  19. package/esm2022/lib/core/sdk-payment-systems/apple-pay/apple-pay-integration.type.mjs +6 -2
  20. package/esm2022/lib/core/sdk-payment-systems/apple-pay/apple-pay-params-builder.service.mjs +90 -0
  21. package/esm2022/lib/core/sdk-payment-systems/apple-pay/apple-pay-session.interface.mjs +2 -0
  22. package/esm2022/lib/core/sdk-payment-systems/apple-pay/apple-pay.errors.enum.mjs +6 -3
  23. package/esm2022/lib/core/sdk-payment-systems/apple-pay/apple-pay.service.mjs +64 -87
  24. package/esm2022/lib/core/sdk-payment-systems/apple-pay/checkout-params.interface.mjs +1 -1
  25. package/esm2022/lib/core/sdk-payment-systems/apple-pay/session-handlers/braintree.handler.mjs +80 -0
  26. package/esm2022/lib/core/sdk-payment-systems/apple-pay/session-handlers/checkout.handler.mjs +65 -0
  27. package/esm2022/lib/core/sdk-payment-systems/apple-pay/session-handlers/session-handler.abstract.mjs +31 -0
  28. package/esm2022/lib/core/sdk-payment-systems/apple-pay/session-handlers/session-handler.type.mjs +2 -0
  29. package/esm2022/lib/core/sdk-payment-systems/google-pay/check-payment-device-data.interface.mjs +2 -0
  30. package/esm2022/lib/core/sdk-payment-systems/google-pay/google-pay-init-params.interface.mjs +1 -1
  31. package/esm2022/lib/core/sdk-payment-systems/google-pay/google-pay-library.interface.mjs +1 -1
  32. package/esm2022/lib/core/sdk-payment-systems/google-pay/google-pay.service.mjs +70 -59
  33. package/esm2022/lib/core/sdk-payment-systems/google-pay/payment/google-pay-checkout-payment.service.mjs +75 -0
  34. package/esm2022/lib/core/sdk-payment-systems/google-pay/payment/google-pay-instant-payment.service.mjs +121 -0
  35. package/esm2022/lib/core/sdk-payment-systems/google-pay/payment/google-pay-payment-service.interface.mjs +2 -0
  36. package/esm2022/lib/core/sdk-payment-systems/google-pay/updated-price.interface.mjs +2 -0
  37. package/esm2022/lib/core/sdk-payment-systems/sdk-payment-systems-initial-data.interface.mjs +1 -1
  38. package/esm2022/lib/core/sdk-payment-systems/sdk-payment-systems.interface.mjs +1 -1
  39. package/esm2022/lib/core/settings/project.interface.mjs +1 -1
  40. package/esm2022/lib/core-library.module.mjs +18 -1
  41. package/esm2022/lib/core-library.service.mjs +16 -2
  42. package/fesm2022/xsolla-payment-client-core.mjs +920 -336
  43. package/fesm2022/xsolla-payment-client-core.mjs.map +1 -1
  44. package/lib/core/extended-window.interface.d.ts +1 -1
  45. package/lib/core/payment/actions/action.interface.d.ts +2 -2
  46. package/lib/core/payment/actions/next-action.service.d.ts +1 -1
  47. package/lib/core/payment/actions/next-actions.d.ts +1 -1
  48. package/lib/core/payment/field-names.enum.d.ts +4 -1
  49. package/lib/core/payment/field.interface.d.ts +1 -1
  50. package/lib/core/payment/finance-details/finance-details.service.d.ts +1 -0
  51. package/lib/core/payment/initialize-actions/action.interface.d.ts +11 -0
  52. package/lib/core/payment/initialize-actions/initialize-next-action.service.d.ts +16 -0
  53. package/lib/core/payment/initialize-actions/initialize-next-actions.d.ts +5 -0
  54. package/lib/core/payment/initialize-actions/next-action.interface.d.ts +2 -0
  55. package/lib/core/payment/initialize-actions/special-button/special-button.action.class.d.ts +17 -0
  56. package/lib/core/payment/initialize-actions/special-button/special-button.action.type.d.ts +6 -0
  57. package/lib/core/payment/initialized-form.inteface.d.ts +2 -0
  58. package/lib/core/payment/payment.service.d.ts +11 -2
  59. package/lib/core/payment/sync/sync.service.d.ts +1 -1
  60. package/lib/core/payment/xps-error.interface.d.ts +1 -0
  61. package/lib/core/sdk-payment-systems/apple-pay/apple-pay-integration.type.d.ts +5 -1
  62. package/lib/core/sdk-payment-systems/apple-pay/apple-pay-params-builder.service.d.ts +15 -0
  63. package/lib/core/sdk-payment-systems/apple-pay/apple-pay-session.interface.d.ts +135 -0
  64. package/lib/core/sdk-payment-systems/apple-pay/apple-pay.errors.enum.d.ts +5 -2
  65. package/lib/core/sdk-payment-systems/apple-pay/apple-pay.service.d.ts +24 -13
  66. package/lib/core/sdk-payment-systems/apple-pay/checkout-params.interface.d.ts +1 -0
  67. package/lib/core/sdk-payment-systems/apple-pay/session-handlers/braintree.handler.d.ts +16 -0
  68. package/lib/core/sdk-payment-systems/apple-pay/session-handlers/checkout.handler.d.ts +13 -0
  69. package/lib/core/sdk-payment-systems/apple-pay/session-handlers/session-handler.abstract.d.ts +13 -0
  70. package/lib/core/sdk-payment-systems/apple-pay/session-handlers/session-handler.type.d.ts +3 -0
  71. package/lib/core/sdk-payment-systems/google-pay/check-payment-device-data.interface.d.ts +9 -0
  72. package/lib/core/sdk-payment-systems/google-pay/google-pay-init-params.interface.d.ts +6 -0
  73. package/lib/core/sdk-payment-systems/google-pay/google-pay-library.interface.d.ts +170 -52
  74. package/lib/core/sdk-payment-systems/google-pay/google-pay.service.d.ts +18 -10
  75. package/lib/core/sdk-payment-systems/google-pay/payment/google-pay-checkout-payment.service.d.ts +18 -0
  76. package/lib/core/sdk-payment-systems/google-pay/payment/google-pay-instant-payment.service.d.ts +18 -0
  77. package/lib/core/sdk-payment-systems/google-pay/payment/google-pay-payment-service.interface.d.ts +14 -0
  78. package/lib/core/sdk-payment-systems/google-pay/updated-price.interface.d.ts +7 -0
  79. package/lib/core/sdk-payment-systems/sdk-payment-systems-initial-data.interface.d.ts +7 -1
  80. package/lib/core/sdk-payment-systems/sdk-payment-systems.interface.d.ts +1 -1
  81. package/lib/core/settings/project.interface.d.ts +1 -0
  82. package/lib/core-library.service.d.ts +12 -0
  83. package/package.json +1 -1
  84. package/xsolla-payment-client-core-0.2.46.tgz +0 -0
  85. package/esm2022/lib/core/agreementsGroup.const.mjs +0 -17
  86. package/xsolla-payment-client-core-0.2.44.tgz +0 -0
  87. /package/lib/core/{agreementsGroup.const.d.ts → agreements-group.const.d.ts} +0 -0
@@ -0,0 +1,90 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { agreementsGroup } from '../../agreements-group.const';
3
+ import { FieldNames } from '../../payment/field-names.enum';
4
+ import * as i0 from "@angular/core";
5
+ export class ApplePayParamsBuilderService {
6
+ constructor() {
7
+ this.agreementFieldsNames = agreementsGroup;
8
+ }
9
+ buildParams(paymentForm) {
10
+ const { fields, summary } = paymentForm;
11
+ if (!fields || !summary)
12
+ return null;
13
+ const formFields = fields.reduce((acc, field) => {
14
+ if (this.agreementFieldsNames.includes(field.name) &&
15
+ field.isVisible === "1" /* XpsBoolean.true */) {
16
+ acc[field.name] = field.title;
17
+ }
18
+ else {
19
+ acc[field.name] = field.value;
20
+ }
21
+ return acc;
22
+ }, {});
23
+ const agreements = this.agreementFieldsNames
24
+ .map((fieldName) => [fieldName, formFields[fieldName]])
25
+ .filter((fieldEntry) => {
26
+ const [, value] = fieldEntry;
27
+ return !!value;
28
+ });
29
+ return {
30
+ tokenKey: this.getAppleToken(fields),
31
+ totalLabel: formFields[FieldNames.labelApplePay] ?? '',
32
+ totalAmount: this.getTotalAmount(summary),
33
+ currencyCode: this.getTotalCurrency(summary),
34
+ countryCode: formFields[FieldNames.countryCode] ?? '',
35
+ merchantCapabilities: this.getJsonValueFromField(formFields, FieldNames.merchantCapabilities),
36
+ requiredBillingContactFields: this.getJsonValueFromField(formFields, FieldNames.requiredBillingContactFields),
37
+ requiredShippingContactFields: this.getJsonValueFromField(formFields, FieldNames.requiredShippingContactFields),
38
+ supportedNetworks: this.getJsonValueFromField(formFields, FieldNames.supportedNetworks),
39
+ agreements,
40
+ acquirer: formFields[FieldNames.acquirer] ?? '',
41
+ isSandbox: formFields[FieldNames.isSandbox] ?? '',
42
+ payInstanceAccountId: formFields[FieldNames.payInstanceAccountId] ?? '',
43
+ getApplePaySessionUrl: formFields[FieldNames.getApplePaySessionUrl] ?? '',
44
+ payViaCheckoutUrl: formFields[FieldNames.payViaCheckoutUrl] ?? '',
45
+ };
46
+ }
47
+ updateParams(params, summary) {
48
+ return {
49
+ ...params,
50
+ totalAmount: this.getTotalAmount(summary),
51
+ currencyCode: this.getTotalCurrency(summary),
52
+ };
53
+ }
54
+ getJsonValueFromField(fields, fieldName) {
55
+ const field = fields[fieldName];
56
+ try {
57
+ return field ? JSON.parse(field) : undefined;
58
+ }
59
+ catch (error) {
60
+ return undefined;
61
+ }
62
+ }
63
+ getAppleToken(fields) {
64
+ const appleTokenField = fields.find((field) => {
65
+ return field.name === 'token_key';
66
+ });
67
+ if (!appleTokenField) {
68
+ return '';
69
+ }
70
+ return appleTokenField.value;
71
+ }
72
+ getTotalAmount(summary) {
73
+ const finance = summary?.finance;
74
+ const total = finance?.grand_total?.amount ?? finance?.total.amount;
75
+ return total?.toString() ?? '';
76
+ }
77
+ getTotalCurrency(summary) {
78
+ const finance = summary?.finance;
79
+ return finance?.grand_total?.currency ?? finance?.total?.currency ?? '';
80
+ }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApplePayParamsBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
82
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApplePayParamsBuilderService, providedIn: 'root' }); }
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApplePayParamsBuilderService, decorators: [{
85
+ type: Injectable,
86
+ args: [{
87
+ providedIn: 'root',
88
+ }]
89
+ }] });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGUtcGF5LXBhcmFtcy1idWlsZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wYXltZW50LWNsaWVudC1jb3JlL3NyYy9saWIvY29yZS9zZGstcGF5bWVudC1zeXN0ZW1zL2FwcGxlLXBheS9hcHBsZS1wYXktcGFyYW1zLWJ1aWxkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBVTVELE1BQU0sT0FBTyw0QkFBNEI7SUFIekM7UUFJbUIseUJBQW9CLEdBQWEsZUFBZSxDQUFDO0tBOEduRTtJQTVHUSxXQUFXLENBQUMsV0FBd0I7UUFDekMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFFeEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQztRQUVyQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUM5QixDQUFDLEdBQThCLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDeEMsSUFDRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQzlDLEtBQUssQ0FBQyxTQUFTLDhCQUFvQixFQUNuQyxDQUFDO2dCQUNELEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNoQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ2hDLENBQUM7WUFFRCxPQUFP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O1FBQ1osQ0FBQztRQUVELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQW1CO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLElBQUksT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFcEUsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxPQUFtQjtRQUMxQyxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2pDLE9BQU8sT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO0lBQzFFLENBQUM7OEdBOUdVLDRCQUE0QjtrSEFBNUIsNEJBQTRCLGNBRjNCLE1BQU07OzJGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhZ3JlZW1lbnRzR3JvdXAgfSBmcm9tICcuLi8uLi9hZ3JlZW1lbnRzLWdyb3VwLmNvbnN0JztcbmltcG9ydCB7IEZpZWxkTmFtZXMgfSBmcm9tICcuLi8uLi9wYXltZW50L2ZpZWxkLW5hbWVzLmVudW0nO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi9wYXltZW50L2ZpZWxkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXltZW50Rm9ybSB9IGZyb20gJy4uLy4uL3BheW1lbnQvcGF5bWVudC1mb3JtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBYcHNTdW1tYXJ5IH0gZnJvbSAnLi4vLi4vcGF5bWVudC94cHMtc3VtbWFyeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXBwbGVQYXlQYXJhbXMgfSBmcm9tICcuL2FwcGxlLXBheS1wYXJhbXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFhwc0Jvb2xlYW4gfSBmcm9tICcuLi8uLi94cHMtYm9vbGVhbi5lbnVtJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxlUGF5UGFyYW1zQnVpbGRlclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGFncmVlbWVudEZpZWxkc05hbWVzOiBzdHJpbmdbXSA9IGFncmVlbWVudHNHcm91cDtcblxuICBwdWJsaWMgYnVpbGRQYXJhbXMocGF5bWVudEZvcm06IFBheW1lbnRGb3JtKTogQXBwbGVQYXlQYXJhbXMgfCBudWxsIHtcbiAgICBjb25zdCB7IGZpZWxkcywgc3VtbWFyeSB9ID0gcGF5bWVudEZvcm07XG5cbiAgICBpZiAoIWZpZWxkcyB8fCAhc3VtbWFyeSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBmb3JtRmllbGRzID0gZmllbGRzLnJlZHVjZShcbiAgICAgIChhY2M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmFncmVlbWVudEZpZWxkc05hbWVzLmluY2x1ZGVzKGZpZWxkLm5hbWUpICYmXG4gICAgICAgICAgZmllbGQuaXNWaXNpYmxlID09PSBYcHNCb29sZWFuLnRydWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgYWNjW2ZpZWxkLm5hbWVdID0gZmllbGQudGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjW2ZpZWxkLm5hbWVdID0gZmllbGQudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGNvbnN0IGFncmVlbWVudHMgPSB0aGlzLmFncmVlbWVudEZpZWxkc05hbWVzXG4gICAgICAubWFwKChmaWVsZE5hbWUpID0+IFtmaWVsZE5hbWUsIGZvcm1GaWVsZHNbZmllbGROYW1lXV0pXG4gICAgICAuZmlsdGVyKChmaWVsZEVudHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IFssIHZhbHVlXSA9IGZpZWxkRW50cnk7XG4gICAgICAgIHJldHVybiAhIXZhbHVlO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW5LZXk6IHRoaXMuZ2V0QXBwbGVUb2tlbihmaWVsZHMpLFxuICAgICAgdG90YWxMYWJlbDogZm9ybUZpZWxkc1tGaWVsZE5hbWVzLmxhYmVsQXBwbGVQYXldID8/ICcnLFxuICAgICAgdG90YWxBbW91bnQ6IHRoaXMuZ2V0VG90YWxBbW91bnQoc3VtbWFyeSksXG4gICAgICBjdXJyZW5jeUNvZGU6IHRoaXMuZ2V0VG90YWxDdXJyZW5jeShzdW1tYXJ5KSxcbiAgICAgIGNvdW50cnlDb2RlOiBmb3JtRmllbGRzW0ZpZWxkTmFtZXMuY291bnRyeUNvZGVdID8/ICcnLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IHRoaXMuZ2V0SnNvblZhbHVlRnJvbUZpZWxkKFxuICAgICAgICBmb3JtRmllbGRzLFxuICAgICAgICBGaWVsZE5hbWVzLm1lcmNoYW50Q2FwYWJpbGl0aWVzXG4gICAgICApLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogdGhpcy5nZXRKc29uVmFsdWVGcm9tRmllbGQoXG4gICAgICAgIGZvcm1GaWVsZHMsXG4gICAgICAgIEZpZWxkTmFtZXMucmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkc1xuICAgICAgKSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiB0aGlzLmdldEpzb25WYWx1ZUZyb21GaWVsZChcbiAgICAgICAgZm9ybUZpZWxkcyxcbiAgICAgICAgRmllbGROYW1lcy5yZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkc1xuICAgICAgKSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiB0aGlzLmdldEpzb25WYWx1ZUZyb21GaWVsZChcbiAgICAgICAgZm9ybUZpZWxkcyxcbiAgICAgICAgRmllbGROYW1lcy5zdXBwb3J0ZWROZXR3b3Jrc1xuICAgICAgKSxcbiAgICAgIGFncmVlbWVudHMsXG4gICAgICBhY3F1aXJlcjogZm9ybUZpZWxkc1tGaWVsZE5hbWVzLmFjcXVpcmVyXSA/PyAnJyxcbiAgICAgIGlzU2FuZGJveDogZm9ybUZpZWxkc1tGaWVsZE5hbWVzLmlzU2FuZGJveF0gPz8gJycsXG4gICAgICBwYXlJbnN0YW5jZUFjY291bnRJZDogZm9ybUZpZWxkc1tGaWVsZE5hbWVzLnBheUluc3RhbmNlQWNjb3VudElkXSA/PyAnJyxcbiAgICAgIGdldEFwcGxlUGF5U2Vzc2lvblVybDogZm9ybUZpZWxkc1tGaWVsZE5hbWVzLmdldEFwcGxlUGF5U2Vzc2lvblVybF0gPz8gJycsXG4gICAgICBwYXlWaWFDaGVja291dFVybDogZm9ybUZpZWxkc1tGaWVsZE5hbWVzLnBheVZpYUNoZWNrb3V0VXJsXSA/PyAnJyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVBhcmFtcyhcbiAgICBwYXJhbXM6IEFwcGxlUGF5UGFyYW1zLFxuICAgIHN1bW1hcnk6IFhwc1N1bW1hcnlcbiAgKTogQXBwbGVQYXlQYXJhbXMge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICB0b3RhbEFtb3VudDogdGhpcy5nZXRUb3RhbEFtb3VudChzdW1tYXJ5KSxcbiAgICAgIGN1cnJlbmN5Q29kZTogdGhpcy5nZXRUb3RhbEN1cnJlbmN5KHN1bW1hcnkpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEpzb25WYWx1ZUZyb21GaWVsZChcbiAgICBmaWVsZHM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9LFxuICAgIGZpZWxkTmFtZTogc3RyaW5nXG4gICk6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBmaWVsZCA9IGZpZWxkc1tmaWVsZE5hbWVdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmaWVsZCA/IChKU09OLnBhcnNlKGZpZWxkKSBhcyBzdHJpbmdbXSkgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBsZVRva2VuKGZpZWxkczogRmllbGRbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgYXBwbGVUb2tlbkZpZWxkID0gZmllbGRzLmZpbmQoKGZpZWxkKSA9PiB7XG4gICAgICByZXR1cm4gZmllbGQubmFtZSA9PT0gJ3Rva2VuX2tleSc7XG4gICAgfSk7XG5cbiAgICBpZiAoIWFwcGxlVG9rZW5GaWVsZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBhcHBsZVRva2VuRmllbGQudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldFRvdGFsQW1vdW50KHN1bW1hcnk6IFhwc1N1bW1hcnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbmFuY2UgPSBzdW1tYXJ5Py5maW5hbmNlO1xuICAgIGNvbnN0IHRvdGFsID0gZmluYW5jZT8uZ3JhbmRfdG90YWw/LmFtb3VudCA/PyBmaW5hbmNlPy50b3RhbC5hbW91bnQ7XG5cbiAgICByZXR1cm4gdG90YWw/LnRvU3RyaW5nKCkgPz8gJyc7XG4gIH1cblxuICBwcml2YXRlIGdldFRvdGFsQ3VycmVuY3koc3VtbWFyeTogWHBzU3VtbWFyeSk6IHN0cmluZyB7XG4gICAgY29uc3QgZmluYW5jZSA9IHN1bW1hcnk/LmZpbmFuY2U7XG4gICAgcmV0dXJuIGZpbmFuY2U/LmdyYW5kX3RvdGFsPy5jdXJyZW5jeSA/PyBmaW5hbmNlPy50b3RhbD8uY3VycmVuY3kgPz8gJyc7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGUtcGF5LXNlc3Npb24uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvc2RrLXBheW1lbnQtc3lzdGVtcy9hcHBsZS1wYXkvYXBwbGUtcGF5LXNlc3Npb24uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEFwcGxlUGF5U2Vzc2lvbiB7XG4gIHB1YmxpYyBzdGF0aWMgU1RBVFVTX1NVQ0NFU1M6IG51bWJlcjtcbiAgcHVibGljIHN0YXRpYyBTVEFUVVNfRkFJTFVSRTogbnVtYmVyO1xuXG4gIHB1YmxpYyBvbnZhbGlkYXRlbWVyY2hhbnQ6IChcbiAgICB0aGlzOiBBcHBsZVBheVNlc3Npb24sXG4gICAgZXZlbnQ6IEFwcGxlUGF5VmFsaWRFdmVudFxuICApID0+IHZvaWQ7XG4gIHB1YmxpYyBvbnBheW1lbnRhdXRob3JpemVkOiAoXG4gICAgdGhpczogQXBwbGVQYXlTZXNzaW9uLFxuICAgIGV2ZW50OiBBcHBsZVBheVBheW1lbnRBdXRob3JpemVkRXZlbnRcbiAgKSA9PiB2b2lkO1xuICBwdWJsaWMgb25zaGlwcGluZ2NvbnRhY3RzZWxlY3RlZDogKFxuICAgIHRoaXM6IEFwcGxlUGF5U2Vzc2lvbixcbiAgICBldmVudDogQXBwbGVQYXlPblNoaXBwaW5nQ29udGFjdFNlbGVjdGVkRXZlbnRcbiAgKSA9PiB2b2lkO1xuICBwdWJsaWMgb25zaGlwcGluZ21ldGhvZHNlbGVjdGVkOiAoXG4gICAgdGhpczogQXBwbGVQYXlTZXNzaW9uLFxuICAgIGV2ZW50OiBBcHBsZVBheU9uU2hpcHBpbmdNZXRob2RTZWxlY3RlZEV2ZW50XG4gICkgPT4gdm9pZDtcbiAgcHVibGljIGNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uOiAoXG4gICAgdGhpczogQXBwbGVQYXlTZXNzaW9uLFxuICAgIHNoaXBwaW5nQ29udGFjdFVwZGF0ZTogQXBwbGVQYXlTaGlwcGluZ0NvbnRhY3RVcGRhdGVcbiAgKSA9PiB2b2lkO1xuICBwdWJsaWMgb25jYW5jZWw6IChcbiAgICB0aGlzOiBBcHBsZVBheVNlc3Npb24sXG4gICAgZXZlbnQ/OiBBcHBsZVBheU9uQ2FuY2VsRXZlbnRcbiAgKSA9PiB2b2lkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih2ZXJzaW9uOiBudW1iZXIsIHBheW1lbnRSZXF1ZXN0OiBBcHBsZVBheVBheW1lbnRSZXF1ZXN0KTtcblxuICBwdWJsaWMgc3RhdGljIHN1cHBvcnRzVmVyc2lvbih2ZXJzaW9uOiBudW1iZXIpOiBib29sZWFuO1xuICBwdWJsaWMgc3RhdGljIGNhbk1ha2VQYXltZW50cygpOiBib29sZWFuO1xuXG4gIHB1YmxpYyBjb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihcbiAgICBtZXJjaGFudFNlc3Npb246IEFwcGxlUGF5TWVyY2hhbnRTZXNzaW9uXG4gICk6IHZvaWQ7XG4gIHB1YmxpYyBjb21wbGV0ZVBheW1lbnQoc3RhdHVzOiBudW1iZXIpOiB2b2lkO1xuXG4gIHB1YmxpYyBhYm9ydCgpOiB2b2lkO1xuICBwdWJsaWMgYmVnaW4oKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsZVBheVZhbGlkRXZlbnQge1xuICB2YWxpZGF0aW9uVVJMOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVQYXlQYXltZW50QXV0aG9yaXplZEV2ZW50IHtcbiAgcGF5bWVudDogQXBwbGVQYXlQYXltZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxlUGF5T25TaGlwcGluZ0NvbnRhY3RTZWxlY3RlZEV2ZW50IHtcbiAgc2hpcHBpbmdDb250YWN0OiB7XG4gICAgbG9jYWxpdHk6IHN0cmluZztcbiAgICBjb3VudHJ5OiBzdHJpbmc7XG4gICAgcG9zdGFsQ29kZTogc3RyaW5nO1xuICAgIGFkbWluaXN0cmF0aXZlQXJlYTogc3RyaW5nO1xuICAgIGNvdW50cnlDb2RlOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVQYXlPblNoaXBwaW5nTWV0aG9kU2VsZWN0ZWRFdmVudCB7XG4gIHNoaXBwaW5nTWV0aG9kOiB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBkZXRhaWw6IHN0cmluZztcbiAgICBhbW91bnQ6IHN0cmluZztcbiAgICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgZGF0ZUNvbXBvbmVudHNSYW5nZToge1xuICAgICAgc3RhcnREYXRlQ29tcG9uZW50czoge1xuICAgICAgICB5ZWFyczogbnVtYmVyO1xuICAgICAgICBtb250aHM6IG51bWJlcjtcbiAgICAgICAgZGF5czogbnVtYmVyO1xuICAgICAgICBob3VyczogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIGVuZERhdGVDb21wb25lbnRzOiB7XG4gICAgICAgIHllYXJzOiBudW1iZXI7XG4gICAgICAgIG1vbnRoczogbnVtYmVyO1xuICAgICAgICBkYXlzOiBudW1iZXI7XG4gICAgICAgIGhvdXJzOiBudW1iZXI7XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVQYXlTaGlwcGluZ0NvbnRhY3RVcGRhdGUge1xuICBzdGF0dXM6ICdTVEFUVVNfU1VDQ0VTUycgfCAnU1RBVFVTX0ZBSUxVUkUnO1xuICBuZXdUb3RhbDogQXBwbGVQYXlMaW5lSXRlbTtcbiAgbmV3TGluZUl0ZW1zPzogQXBwbGVQYXlMaW5lSXRlbVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxlUGF5T25DYW5jZWxFdmVudCB7XG4gIHR5cGU6IHN0cmluZztcbiAgc2Vzc2lvbkVycm9yOiB7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIGluZm8/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsZVBheVBheW1lbnQge1xuICB0b2tlbjogQXBwbGVQYXlQYXltZW50VG9rZW47XG4gIGJpbGxpbmdDb250YWN0PzogQXBwbGVQYXlQYXltZW50Q29udGFjdDtcbiAgc2hpcHBpbmdDb250YWN0PzogQXBwbGVQYXlQYXltZW50Q29udGFjdDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsZVBheVBheW1lbnRUb2tlbiB7XG4gIHBheW1lbnRNZXRob2Q6IHtcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICAgIG5ldHdvcms6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gIH07XG4gIHRyYW5zYWN0aW9uSWRlbnRpZmllcjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxlUGF5UGF5bWVudFJlcXVlc3Qge1xuICBjb3VudHJ5Q29kZTogc3RyaW5nO1xuICBjdXJyZW5jeUNvZGU6IHN0cmluZztcbiAgc3VwcG9ydGVkTmV0d29ya3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBtZXJjaGFudENhcGFiaWxpdGllczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIHRvdGFsOiBBcHBsZVBheUxpbmVJdGVtO1xuICBsaW5lSXRlbXM/OiBBcHBsZVBheUxpbmVJdGVtW107XG4gIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzPzogc3RyaW5nW107XG4gIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM/OiBzdHJpbmdbXTtcbiAgc2hpcHBpbmdNZXRob2RzPzogQXBwbGVQYXlTaGlwcGluZ01ldGhvZFtdO1xuICBzaGlwcGluZ1R5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVQYXlMaW5lSXRlbSB7XG4gIGFtb3VudDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlPzogJ2ZpbmFsJyB8ICdwZW5kaW5nJztcbiAgcGF5bWVudFRpbWluZz86ICdpbW1lZGlhdGUnIHwgJ3JlY3VycmluZycgfCAnZGVmZXJyZWQnIHwgJ2F1dG9tYXRpY1JlbG9hZCc7XG4gIHJlY3VycmluZ1BheW1lbnRTdGFydERhdGU/OiBEYXRlO1xuICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0PzogJ3llYXInIHwgJ21vbnRoJyB8ICdkYXknIHwgJ2hvdXInIHwgJ21pbnV0ZSc7XG4gIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50PzogbnVtYmVyO1xuICByZWN1cnJpbmdQYXltZW50RW5kRGF0ZT86IERhdGU7XG4gIGRlZmVycmVkUGF5bWVudERhdGU/OiBEYXRlO1xuICBhdXRvbWF0aWNSZWxvYWRQYXltZW50VGhyZXNob2xkQW1vdW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxlUGF5U2hpcHBpbmdNZXRob2Qge1xuICBpZGVudGlmaWVyOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRldGFpbDogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsZVBheU1lcmNoYW50U2Vzc2lvbiB7XG4gIG1lcmNoYW50SWRlbnRpZmllcjogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICBzaWduYXR1cmU6IHN0cmluZztcbiAgbm9uY2U6IHN0cmluZztcbiAgZXBvY2hUaW1lc3RhbXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRNZXJjaGFudFNlc3Npb25SZXNwb25zZSB7XG4gIG1lcmNoYW50U2Vzc2lvbjogQXBwbGVQYXlNZXJjaGFudFNlc3Npb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVQYXlQYXltZW50Q29udGFjdCB7XG4gIGVtYWlsQWRkcmVzcz86IHN0cmluZztcbiAgcGhvbmVOdW1iZXI/OiBzdHJpbmc7XG4gIGdpdmVuTmFtZT86IHN0cmluZztcbiAgZmFtaWx5TmFtZT86IHN0cmluZztcbiAgYWRkcmVzc0xpbmVzPzogc3RyaW5nW107XG4gIGxvY2FsaXR5Pzogc3RyaW5nO1xuICBzdWJMb2NhbGl0eT86IHN0cmluZztcbiAgYWRtaW5pc3RyYXRpdmVBcmVhPzogc3RyaW5nO1xuICBzdWJBZG1pbmlzdHJhdGl2ZUFyZWE/OiBzdHJpbmc7XG4gIHBvc3RhbENvZGU/OiBzdHJpbmc7XG4gIGNvdW50cnk/OiBzdHJpbmc7XG4gIGNvdW50cnlDb2RlPzogc3RyaW5nO1xufVxuIl19
@@ -1,6 +1,9 @@
1
1
  export var ApplePayErrors;
2
2
  (function (ApplePayErrors) {
3
- ApplePayErrors["paymentError"] = "paymentError";
4
- ApplePayErrors["deviceIsNotCapableError"] = "deviceIsNotCapableError";
3
+ ApplePayErrors["paymentError"] = "Apple Pay: payment error";
4
+ ApplePayErrors["deviceIsNotCapableError"] = "Apple Pay: device is not capable";
5
+ ApplePayErrors["cancelled"] = "Apple Pay: payment cancelled";
6
+ ApplePayErrors["merchantValidationError"] = "Apple Pay: merchant validation error";
7
+ ApplePayErrors["braintreeInitializeError"] = "Apple Pay: Braintree library is not initialized";
5
8
  })(ApplePayErrors || (ApplePayErrors = {}));
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGUtcGF5LmVycm9ycy5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvc2RrLXBheW1lbnQtc3lzdGVtcy9hcHBsZS1wYXkvYXBwbGUtcGF5LmVycm9ycy5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDeEIsK0NBQTZCLENBQUE7SUFDN0IscUVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gQXBwbGVQYXlFcnJvcnMge1xuICBwYXltZW50RXJyb3IgPSAncGF5bWVudEVycm9yJyxcbiAgZGV2aWNlSXNOb3RDYXBhYmxlRXJyb3IgPSAnZGV2aWNlSXNOb3RDYXBhYmxlRXJyb3InLFxufVxuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGUtcGF5LmVycm9ycy5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvc2RrLXBheW1lbnQtc3lzdGVtcy9hcHBsZS1wYXkvYXBwbGUtcGF5LmVycm9ycy5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLGNBTVg7QUFORCxXQUFZLGNBQWM7SUFDeEIsMkRBQXlDLENBQUE7SUFDekMsOEVBQTRELENBQUE7SUFDNUQsNERBQTBDLENBQUE7SUFDMUMsa0ZBQWdFLENBQUE7SUFDaEUsOEZBQTRFLENBQUE7QUFDOUUsQ0FBQyxFQU5XLGNBQWMsS0FBZCxjQUFjLFFBTXpCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gQXBwbGVQYXlFcnJvcnMge1xuICBwYXltZW50RXJyb3IgPSAnQXBwbGUgUGF5OiBwYXltZW50IGVycm9yJyxcbiAgZGV2aWNlSXNOb3RDYXBhYmxlRXJyb3IgPSAnQXBwbGUgUGF5OiBkZXZpY2UgaXMgbm90IGNhcGFibGUnLFxuICBjYW5jZWxsZWQgPSAnQXBwbGUgUGF5OiBwYXltZW50IGNhbmNlbGxlZCcsXG4gIG1lcmNoYW50VmFsaWRhdGlvbkVycm9yID0gJ0FwcGxlIFBheTogbWVyY2hhbnQgdmFsaWRhdGlvbiBlcnJvcicsXG4gIGJyYWludHJlZUluaXRpYWxpemVFcnJvciA9ICdBcHBsZSBQYXk6IEJyYWludHJlZSBsaWJyYXJ5IGlzIG5vdCBpbml0aWFsaXplZCcsXG59XG4iXX0=
@@ -1,16 +1,21 @@
1
- import { Subject } from 'rxjs';
2
1
  import { Inject, Injectable } from '@angular/core';
3
- import { applePayVersion } from './apple-pay.const';
4
- import { agreementsGroup } from '../../agreementsGroup.const';
5
- import { windowToken } from '../../window.token';
2
+ import { Subject } from 'rxjs';
3
+ import { payStation4Url, sandboxPayStationUrl, } from '../../payment/actions/redirect/pay-station4-url.const';
4
+ import { applePayId } from '../../payment/actions/redirect/ps4-pages/pages-payment-methods-id.const';
5
+ import { pagesRoutes } from '../../payment/actions/redirect/ps4-pages/pages-routes.const';
6
6
  import { FieldNames } from '../../payment/field-names.enum';
7
+ import { windowToken } from '../../window.token';
8
+ import { ApplePayIntegrationType, } from './apple-pay-integration.type';
9
+ import { applePayVersion } from './apple-pay.const';
7
10
  import { ApplePayErrors } from './apple-pay.errors.enum';
8
- import { pagesRoutes } from '../../payment/actions/redirect/ps4-pages/pages-routes.const';
9
- import { applePayId } from '../../payment/actions/redirect/ps4-pages/pages-payment-methods-id.const';
10
- import { payStation4Url, sandboxPayStationUrl, } from '../../payment/actions/redirect/pay-station4-url.const';
11
+ import { ErrorTags } from '../../exceptions-handling/errors/elk-error-types.enum';
11
12
  import * as i0 from "@angular/core";
12
13
  import * as i1 from "../../user-agent/user-agent.service";
13
14
  import * as i2 from "../../payment/finance-details/summary/summary-finance-details-adapter.service";
15
+ import * as i3 from "./session-handlers/braintree.handler";
16
+ import * as i4 from "./session-handlers/checkout.handler";
17
+ import * as i5 from "./apple-pay-params-builder.service";
18
+ import * as i6 from "../../exceptions-handling/elk/elk-logger.service";
14
19
  export class ApplePayService {
15
20
  get paymentParameters() {
16
21
  return this.applePayParams;
@@ -24,11 +29,14 @@ export class ApplePayService {
24
29
  get integrationType$() {
25
30
  return this.integrationType.asObservable();
26
31
  }
27
- constructor(window, userAgentService, summaryFinanceDetailsAdapterService) {
32
+ constructor(window, userAgentService, summaryFinanceDetailsAdapterService, braintreeHandler, checkoutHandler, appleParamsBuilder, elkLoggerService) {
28
33
  this.window = window;
29
34
  this.userAgentService = userAgentService;
30
35
  this.summaryFinanceDetailsAdapterService = summaryFinanceDetailsAdapterService;
31
- this.agreementFieldsNames = agreementsGroup;
36
+ this.braintreeHandler = braintreeHandler;
37
+ this.checkoutHandler = checkoutHandler;
38
+ this.appleParamsBuilder = appleParamsBuilder;
39
+ this.elkLoggerService = elkLoggerService;
32
40
  this.payment = new Subject();
33
41
  this.error = new Subject();
34
42
  this.integrationType = new Subject();
@@ -36,48 +44,18 @@ export class ApplePayService {
36
44
  this.applePayParams = null;
37
45
  this.order = null;
38
46
  this.api = this.loadBraintree();
47
+ this.subscribeToHandlers();
39
48
  }
40
49
  setApplePayParams(data) {
41
- const formFields = data?.paymentForm?.fields;
42
- const summary = data?.paymentForm?.summary;
50
+ const paymentForm = data?.paymentForm;
51
+ const formFields = paymentForm?.fields;
52
+ const summary = paymentForm?.summary;
43
53
  if (!formFields || !summary) {
44
54
  return;
45
55
  }
46
- const fields = formFields.reduce((acc, field) => {
47
- if (this.agreementFieldsNames.includes(field.name) &&
48
- field.isVisible === '1') {
49
- acc[field.name] = field.title;
50
- }
51
- else {
52
- acc[field.name] = field.value;
53
- }
54
- return acc;
55
- }, {});
56
- const agreements = this.agreementFieldsNames
57
- .map((fieldName) => [fieldName, fields[fieldName]])
58
- .filter((fieldEntry) => {
59
- const [, value] = fieldEntry;
60
- return !!value;
61
- });
62
- this.applePayParams = {
63
- tokenKey: this.getAppleToken(formFields),
64
- totalLabel: fields[FieldNames.labelApplePay] ?? '',
65
- totalAmount: this.getTotalAmount(summary),
66
- currencyCode: this.getTotalCurrency(summary),
67
- countryCode: fields[FieldNames.countryCode] ?? '',
68
- merchantCapabilities: this.getJsonValueFromField(fields, FieldNames.merchantCapabilities),
69
- requiredBillingContactFields: this.getJsonValueFromField(fields, FieldNames.requiredBillingContactFields),
70
- requiredShippingContactFields: this.getJsonValueFromField(fields, FieldNames.requiredShippingContactFields),
71
- supportedNetworks: this.getJsonValueFromField(fields, FieldNames.supportedNetworks),
72
- agreements: agreements,
73
- acquirer: fields[FieldNames.acquirer] ?? '',
74
- isSandbox: fields[FieldNames.isSandbox] ?? '',
75
- payInstanceAccountId: fields[FieldNames.payInstanceAccountId] ?? '',
76
- getApplePaySessionUrl: fields[FieldNames.getApplePaySessionUrl] ?? '',
77
- payViaCheckoutUrl: fields[FieldNames.payViaCheckoutUrl] ?? '',
78
- };
79
- }
80
- async initLibrary(tokenKey) {
56
+ this.applePayParams = this.appleParamsBuilder.buildParams(paymentForm);
57
+ }
58
+ async initBraintreeLibrary(tokenKey) {
81
59
  try {
82
60
  const api = await this.api;
83
61
  const clientInstance = await api.client.create({
@@ -86,12 +64,16 @@ export class ApplePayService {
86
64
  this.paymentClient = await api.applePay.create({
87
65
  client: clientInstance,
88
66
  });
67
+ this.braintreeHandler.setClient(this.paymentClient);
89
68
  }
90
69
  catch (error) {
91
- console.error('apple pay: initialize failed', error);
70
+ console.error(ApplePayErrors.braintreeInitializeError, error);
71
+ this.elkLoggerService.log(ApplePayErrors.braintreeInitializeError, [
72
+ ErrorTags.APPLEPAY,
73
+ ]);
92
74
  }
93
75
  this.emitIntegrationType();
94
- if (!this.paymentClient || !this.isDeviceCapable()) {
76
+ if (!this.paymentClient || !this.isDeviceCapable) {
95
77
  this.emitError(ApplePayErrors.deviceIsNotCapableError);
96
78
  }
97
79
  }
@@ -131,7 +113,7 @@ export class ApplePayService {
131
113
  }, '');
132
114
  }
133
115
  }
134
- isDeviceCapable() {
116
+ get isDeviceCapable() {
135
117
  // Apple SDK is used on non-Safari devices.
136
118
  // Support of ApplePay payments will be defined on the external PS4 page
137
119
  if (!this.userAgentService.isSafari)
@@ -154,54 +136,49 @@ export class ApplePayService {
154
136
  if (!this.applePayParams || !summary) {
155
137
  return;
156
138
  }
157
- this.applePayParams.totalAmount = this.getTotalAmount(summary);
158
- this.applePayParams.currencyCode = this.getTotalCurrency(summary);
159
- }
160
- async loadBraintree() {
161
- const api = await import('braintree-web');
162
- return api;
139
+ this.applePayParams = this.appleParamsBuilder.updateParams(this.applePayParams, summary);
163
140
  }
164
- getAppleToken(formFields) {
165
- const appleTokenField = formFields.find((field) => {
166
- return field.name === 'token_key';
167
- });
168
- if (!appleTokenField) {
169
- return '';
141
+ proceedCheckout(parameters, iframeIntegrationEnabled = false) {
142
+ const sessionHandler = this.getSessionHandler(parameters.acquirer);
143
+ if (!sessionHandler) {
144
+ console.error('Apple Pay: Unsupported acquirer:', parameters.acquirer);
145
+ return;
170
146
  }
171
- return appleTokenField.value;
172
- }
173
- getTotalAmount(summary) {
174
- const finance = summary?.finance;
175
- const total = finance?.grand_total?.amount ?? finance?.total.amount;
176
- return total?.toString() ?? '';
147
+ sessionHandler.startSession(parameters, iframeIntegrationEnabled);
177
148
  }
178
- getTotalCurrency(summary) {
179
- const finance = summary?.finance;
180
- return finance?.grand_total?.currency ?? finance?.total?.currency ?? '';
181
- }
182
- getJsonValueFromField(fields, fieldName) {
183
- const field = fields[fieldName];
184
- try {
185
- return field ? JSON.parse(field) : undefined;
186
- }
187
- catch (error) {
188
- return undefined;
149
+ getSessionHandler(acquirer) {
150
+ switch (acquirer) {
151
+ case 'braintree':
152
+ return this.braintreeHandler;
153
+ case 'checkout':
154
+ return this.checkoutHandler;
155
+ default:
156
+ return undefined;
189
157
  }
190
158
  }
159
+ async loadBraintree() {
160
+ const api = await import('braintree-web');
161
+ return api;
162
+ }
191
163
  emitError(error) {
192
164
  this.error.next(error);
193
165
  }
194
166
  emitIntegrationType() {
195
- let integrationType;
196
- if (this.paymentClient && this.isDeviceCapable()) {
197
- integrationType = 'redirect';
167
+ if (this.userAgentService.isSafari && this.isDeviceCapable) {
168
+ this.integrationType.next(ApplePayIntegrationType.native);
198
169
  }
199
- else {
200
- integrationType = 'none';
170
+ else if (this.paymentClient && this.isDeviceCapable) {
171
+ this.integrationType.next(ApplePayIntegrationType.redirect);
201
172
  }
202
- this.integrationType.next(integrationType);
203
173
  }
204
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApplePayService, deps: [{ token: windowToken }, { token: i1.UserAgentService }, { token: i2.SummaryFinanceDetailsAdapterService }], target: i0.ɵɵFactoryTarget.Injectable }); }
174
+ subscribeToHandlers() {
175
+ const handlers = [this.braintreeHandler, this.checkoutHandler];
176
+ handlers.forEach((handler) => {
177
+ handler.error$.subscribe((error) => this.emitError(error));
178
+ handler.payment$.subscribe((token) => this.payment.next(token));
179
+ });
180
+ }
181
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApplePayService, deps: [{ token: windowToken }, { token: i1.UserAgentService }, { token: i2.SummaryFinanceDetailsAdapterService }, { token: i3.BraintreeHandler }, { token: i4.CheckoutHandler }, { token: i5.ApplePayParamsBuilderService }, { token: i6.ElkLoggerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
205
182
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApplePayService, providedIn: 'root' }); }
206
183
  }
207
184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ApplePayService, decorators: [{
@@ -212,5 +189,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImpor
212
189
  }], ctorParameters: () => [{ type: undefined, decorators: [{
213
190
  type: Inject,
214
191
  args: [windowToken]
215
- }] }, { type: i1.UserAgentService }, { type: i2.SummaryFinanceDetailsAdapterService }] });
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGUtcGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wYXltZW50LWNsaWVudC1jb3JlL3NyYy9saWIvY29yZS9zZGstcGF5bWVudC1zeXN0ZW1zL2FwcGxlLXBheS9hcHBsZS1wYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUdyRyxPQUFPLEVBQ0wsY0FBYyxFQUNkLG9CQUFvQixHQUNyQixNQUFNLHVEQUF1RCxDQUFDOzs7O0FBSy9ELE1BQU0sT0FBTyxlQUFlO0lBZ0IxQixJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxnQkFB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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxlUGF5LCBhcHBsZVBheSwgY2xpZW50IH0gZnJvbSAnYnJhaW50cmVlLXdlYic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFwcGxlUGF5VmVyc2lvbiB9IGZyb20gJy4vYXBwbGUtcGF5LmNvbnN0JztcbmltcG9ydCB7IGFncmVlbWVudHNHcm91cCB9IGZyb20gJy4uLy4uL2FncmVlbWVudHNHcm91cC5jb25zdCc7XG5pbXBvcnQgeyBBcHBsZVBheVBhcmFtcyB9IGZyb20gJy4vYXBwbGUtcGF5LXBhcmFtcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi9wYXltZW50L2ZpZWxkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFeHRlbmRlZFdpbmRvdyB9IGZyb20gJy4uLy4uL2V4dGVuZGVkLXdpbmRvdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgd2luZG93VG9rZW4gfSBmcm9tICcuLi8uLi93aW5kb3cudG9rZW4nO1xuaW1wb3J0IHsgWHBzUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9wYXltZW50L3hwcy1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmllbGROYW1lcyB9IGZyb20gJy4uLy4uL3BheW1lbnQvZmllbGQtbmFtZXMuZW51bSc7XG5pbXBvcnQgeyBBcHBsZVBheUVycm9ycyB9IGZyb20gJy4vYXBwbGUtcGF5LmVycm9ycy5lbnVtJztcbmltcG9ydCB7IFVzZXJBZ2VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLWFnZW50L3VzZXItYWdlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsZVBheUludGVncmF0aW9uIH0gZnJvbSAnLi9hcHBsZS1wYXktaW50ZWdyYXRpb24udHlwZSc7XG5pbXBvcnQgeyBwYWdlc1JvdXRlcyB9IGZyb20gJy4uLy4uL3BheW1lbnQvYWN0aW9ucy9yZWRpcmVjdC9wczQtcGFnZXMvcGFnZXMtcm91dGVzLmNvbnN0JztcbmltcG9ydCB7IGFwcGxlUGF5SWQgfSBmcm9tICcuLi8uLi9wYXltZW50L2FjdGlvbnMvcmVkaXJlY3QvcHM0LXBhZ2VzL3BhZ2VzLXBheW1lbnQtbWV0aG9kcy1pZC5jb25zdCc7XG5pbXBvcnQgeyBJbml0aWFsaXplUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9wYXltZW50L2luaXRpYWxpemUvcmVzcG9uc2UvaW5pdGlhbGl6ZS1yZXNwb25zZS5jbGFzcyc7XG5pbXBvcnQgeyBTdW1tYXJ5RmluYW5jZURldGFpbHNBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3BheW1lbnQvZmluYW5jZS1kZXRhaWxzL3N1bW1hcnkvc3VtbWFyeS1maW5hbmNlLWRldGFpbHMtYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIHBheVN0YXRpb240VXJsLFxuICBzYW5kYm94UGF5U3RhdGlvblVybCxcbn0gZnJvbSAnLi4vLi4vcGF5bWVudC9hY3Rpb25zL3JlZGlyZWN0L3BheS1zdGF0aW9uNC11cmwuY29uc3QnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXBwbGVQYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZ3JlZW1lbnRGaWVsZHNOYW1lczogc3RyaW5nW10gPSBhZ3JlZW1lbnRzR3JvdXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGF5bWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcjogU3ViamVjdDxBcHBsZVBheUVycm9ycz4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVncmF0aW9uVHlwZTogU3ViamVjdDxBcHBsZVBheUludGVncmF0aW9uPiA9XG4gICAgbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIHBheW1lbnRDbGllbnQ6IEFwcGxlUGF5IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcGk6IFByb21pc2U8e1xuICAgIGFwcGxlUGF5OiB0eXBlb2YgYXBwbGVQYXk7XG4gICAgY2xpZW50OiB0eXBlb2YgY2xpZW50O1xuICB9PjtcbiAgcHJpdmF0ZSBhcHBsZVBheVBhcmFtczogQXBwbGVQYXlQYXJhbXMgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBvcmRlcj86IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBnZXQgcGF5bWVudFBhcmFtZXRlcnMoKTogQXBwbGVQYXlQYXJhbXMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsZVBheVBhcmFtcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGF5bWVudCQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBlcnJvciQoKTogT2JzZXJ2YWJsZTxBcHBsZVBheUVycm9ycz4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlZ3JhdGlvblR5cGUkKCk6IE9ic2VydmFibGU8QXBwbGVQYXlJbnRlZ3JhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmludGVncmF0aW9uVHlwZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KHdpbmRvd1Rva2VuKSBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogRXh0ZW5kZWRXaW5kb3csXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyQWdlbnRTZXJ2aWNlOiBVc2VyQWdlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3VtbWFyeUZpbmFuY2VEZXRhaWxzQWRhcHRlclNlcnZpY2U6IFN1bW1hcnlGaW5hbmNlRGV0YWlsc0FkYXB0ZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYXBpID0gdGhpcy5sb2FkQnJhaW50cmVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXBwbGVQYXlQYXJhbXMoZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSAoZGF0YSBhcyBJbml0aWFsaXplUmVzcG9uc2UpPy5wYXltZW50Rm9ybT8uZmllbGRzO1xuICAgIGNvbnN0IHN1bW1hcnkgPSAoZGF0YSBhcyBJbml0aWFsaXplUmVzcG9uc2UpPy5wYXltZW50Rm9ybT8uc3VtbWFyeTtcblxuICAgIGlmICghZm9ybUZpZWxkcyB8fCAhc3VtbWFyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSBmb3JtRmllbGRzLnJlZHVjZShcbiAgICAgIChhY2M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmFncmVlbWVudEZpZWxkc05hbWVzLmluY2x1ZGVzKGZpZWxkLm5hbWUpICYmXG4gICAgICAgICAgZmllbGQuaXNWaXNpYmxlID09PSAnMSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgYWNjW2ZpZWxkLm5hbWVdID0gZmllbGQudGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjW2ZpZWxkLm5hbWVdID0gZmllbGQudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGNvbnN0IGFncmVlbWVudHMgPSB0aGlzLmFncmVlbWVudEZpZWxkc05hbWVzXG4gICAgICAubWFwKChmaWVsZE5hbWUpID0+IFtmaWVsZE5hbWUsIGZpZWxkc1tmaWVsZE5hbWVdXSlcbiAgICAgIC5maWx0ZXIoKGZpZWxkRW50cnkpID0+IHtcbiAgICAgICAgY29uc3QgWywgdmFsdWVdID0gZmllbGRFbnRyeTtcbiAgICAgICAgcmV0dXJuICEhdmFsdWU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuYXBwbGVQYXlQYXJhbXMgPSB7XG4gICAgICB0b2tlbktleTogdGhpcy5nZXRBcHBsZVRva2VuKGZvcm1GaWVsZHMpLFxuICAgICAgdG90YWxMYWJlbDogZmllbGRzW0ZpZWxkTmFtZXMubGFiZWxBcHBsZVBheV0gPz8gJycsXG4gICAgICB0b3RhbEFtb3VudDogdGhpcy5nZXRUb3RhbEFtb3VudChzdW1tYXJ5KSxcbiAgICAgIGN1cnJlbmN5Q29kZTogdGhpcy5nZXRUb3RhbEN1cnJlbmN5KHN1bW1hcnkpLFxuICAgICAgY291bnRyeUNvZGU6IGZpZWxkc1tGaWVsZE5hbWVzLmNvdW50cnlDb2RlXSA/PyAnJyxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiB0aGlzLmdldEpzb25WYWx1ZUZyb21GaWVsZChcbiAgICAgICAgZmllbGRzLFxuICAgICAgICBGaWVsZE5hbWVzLm1lcmNoYW50Q2FwYWJpbGl0aWVzXG4gICAgICApLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogdGhpcy5nZXRKc29uVmFsdWVGcm9tRmllbGQoXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgRmllbGROYW1lcy5yZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzXG4gICAgICApLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IHRoaXMuZ2V0SnNvblZhbHVlRnJvbUZpZWxkKFxuICAgICAgICBmaWVsZHMsXG4gICAgICAgIEZpZWxkTmFtZXMucmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHNcbiAgICAgICksXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogdGhpcy5nZXRKc29uVmFsdWVGcm9tRmllbGQoXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgRmllbGROYW1lcy5zdXBwb3J0ZWROZXR3b3Jrc1xuICAgICAgKSxcbiAgICAgIGFncmVlbWVudHM6IGFncmVlbWVudHMsXG4gICAgICBhY3F1aXJlcjogZmllbGRzW0ZpZWxkTmFtZXMuYWNxdWlyZXJdID8/ICcnLFxuICAgICAgaXNTYW5kYm94OiBmaWVsZHNbRmllbGROYW1lcy5pc1NhbmRib3hdID8/ICcnLFxuICAgICAgcGF5SW5zdGFuY2VBY2NvdW50SWQ6IGZpZWxkc1tGaWVsZE5hbWVzLnBheUluc3RhbmNlQWNjb3VudElkXSA/PyAnJyxcbiAgICAgIGdldEFwcGxlUGF5U2Vzc2lvblVybDogZmllbGRzW0ZpZWxkTmFtZXMuZ2V0QXBwbGVQYXlTZXNzaW9uVXJsXSA/PyAnJyxcbiAgICAgIHBheVZpYUNoZWNrb3V0VXJsOiBmaWVsZHNbRmllbGROYW1lcy5wYXlWaWFDaGVja291dFVybF0gPz8gJycsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0TGlicmFyeSh0b2tlbktleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGFwaSA9IGF3YWl0IHRoaXMuYXBpO1xuICAgICAgY29uc3QgY2xpZW50SW5zdGFuY2UgPSBhd2FpdCBhcGkuY2xpZW50LmNyZWF0ZSh7XG4gICAgICAgIGF1dGhvcml6YXRpb246IHRva2VuS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucGF5bWVudENsaWVudCA9IGF3YWl0IGFwaS5hcHBsZVBheS5jcmVhdGUoe1xuICAgICAgICBjbGllbnQ6IGNsaWVudEluc3RhbmNlLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2FwcGxlIHBheTogaW5pdGlhbGl6ZSBmYWlsZWQnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0SW50ZWdyYXRpb25UeXBlKCk7XG5cbiAgICBpZiAoIXRoaXMucGF5bWVudENsaWVudCB8fCAhdGhpcy5pc0RldmljZUNhcGFibGUoKSkge1xuICAgICAgdGhpcy5lbWl0RXJyb3IoQXBwbGVQYXlFcnJvcnMuZGV2aWNlSXNOb3RDYXBhYmxlRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWRpcmVjdFRvUGF5bWVudFBhZ2UoXG4gICAgcGFyYW1ldGVyczogQXBwbGVQYXlQYXJhbXMsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBpc1NhbmRib3g/OiBib29sZWFuXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgcm91dGUgPSBwYWdlc1JvdXRlcy5nZXQoYXBwbGVQYXlJZCk7XG4gICAgaWYgKCFyb3V0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAuLi5wYXJhbWV0ZXJzLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlcnMubWVyY2hhbnRDYXBhYmlsaXRpZXMpLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlcnMuc3VwcG9ydGVkTmV0d29ya3MpLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHBhcmFtZXRlcnM/LnJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHNcbiAgICAgICksXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHBhcmFtZXRlcnM/LnJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzXG4gICAgICApLFxuICAgICAgYWdyZWVtZW50czogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycy5hZ3JlZW1lbnRzKSxcbiAgICAgIHRva2VuLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3JkZXIpIHtcbiAgICAgIHF1ZXJ5LmFwcGVuZCgnb3JkZXInLCB0aGlzLm9yZGVyKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlTdGF0aW9uVXJsID0gaXNTYW5kYm94ID8gc2FuZGJveFBheVN0YXRpb25VcmwgOiBwYXlTdGF0aW9uNFVybDtcbiAgICByZXR1cm4gYCR7cGF5U3RhdGlvblVybH0vZW4ke3JvdXRlfT8ke3F1ZXJ5LnRvU3RyaW5nKCl9YDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRPcmRlcihkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IChkYXRhIGFzIEluaXRpYWxpemVSZXNwb25zZSk/LnBheW1lbnRGb3JtPy5zdW1tYXJ5O1xuICAgIGlmICghc3VtbWFyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaW5hbmNlRGV0YWlscyA9XG4gICAgICB0aGlzLnN1bW1hcnlGaW5hbmNlRGV0YWlsc0FkYXB0ZXJTZXJ2aWNlLmdldEZpbmFuY2VEZXRhaWxzKHN1bW1hcnkpO1xuXG4gICAgaWYgKGZpbmFuY2VEZXRhaWxzPy5wdXJjaGFzZSAmJiBmaW5hbmNlRGV0YWlscz8uZmluYW5jZSkge1xuICAgICAgY29uc3QgY2FydEl0ZW1zID0gZmluYW5jZURldGFpbHMuY2FydEl0ZW1zO1xuICAgICAgdGhpcy5vcmRlciA9IGNhcnRJdGVtcz8ucmVkdWNlKChjdXJyLCBpdGVtKSA9PiB7XG4gICAgICAgIGlmIChjdXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnIgKyBgOyAke2l0ZW0udGl0bGV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXJyICsgaXRlbS50aXRsZTtcbiAgICAgIH0sICcnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNEZXZpY2VDYXBhYmxlKCk6IGJvb2xlYW4ge1xuICAgIC8vIEFwcGxlIFNESyBpcyB1c2VkIG9uIG5vbi1TYWZhcmkgZGV2aWNlcy5cbiAgICAvLyBTdXBwb3J0IG9mIEFwcGxlUGF5IHBheW1lbnRzIHdpbGwgYmUgZGVmaW5lZCBvbiB0aGUgZXh0ZXJuYWwgUFM0IHBhZ2VcbiAgICBpZiAoIXRoaXMudXNlckFnZW50U2VydmljZS5pc1NhZmFyaSkgcmV0dXJuIHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oXG4gICAgICAgIHRoaXMud2luZG93LkFwcGxlUGF5U2Vzc2lvbj8uc3VwcG9ydHNWZXJzaW9uKGFwcGxlUGF5VmVyc2lvbikgJiZcbiAgICAgICAgICB0aGlzLndpbmRvdy5BcHBsZVBheVNlc3Npb24/LmNhbk1ha2VQYXltZW50cygpXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFRva2VuTm9uY2VGaWVsZERhdGEodG9rZW5Ob25jZTogc3RyaW5nKToge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9IHtcbiAgICBjb25zdCBuYW1lID0gRmllbGROYW1lcy50b2tlbkFwcGxlUGF5O1xuICAgIGNvbnN0IHZhbHVlID0gYnRvYSh0b2tlbk5vbmNlKTtcbiAgICByZXR1cm4geyBuYW1lLCB2YWx1ZSB9O1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUFwcGxlUGF5UGFyYW1zKGRhdGE6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gKGRhdGEgYXMgWHBzUmVzcG9uc2UpPy5zdW1tYXJ5O1xuICAgIGlmICghdGhpcy5hcHBsZVBheVBhcmFtcyB8fCAhc3VtbWFyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYXBwbGVQYXlQYXJhbXMudG90YWxBbW91bnQgPSB0aGlzLmdldFRvdGFsQW1vdW50KHN1bW1hcnkpO1xuICAgIHRoaXMuYXBwbGVQYXlQYXJhbXMuY3VycmVuY3lDb2RlID0gdGhpcy5nZXRUb3RhbEN1cnJlbmN5KHN1bW1hcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQnJhaW50cmVlKCk6IFByb21pc2U8e1xuICAgIGFwcGxlUGF5OiB0eXBlb2YgYXBwbGVQYXk7XG4gICAgY2xpZW50OiB0eXBlb2YgY2xpZW50O1xuICB9PiB7XG4gICAgY29uc3QgYXBpID0gYXdhaXQgaW1wb3J0KCdicmFpbnRyZWUtd2ViJyk7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBsZVRva2VuKGZvcm1GaWVsZHM6IEZpZWxkW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGFwcGxlVG9rZW5GaWVsZCA9IGZvcm1GaWVsZHMuZmluZCgoZmllbGQpID0+IHtcbiAgICAgIHJldHVybiBmaWVsZC5uYW1lID09PSAndG9rZW5fa2V5JztcbiAgICB9KTtcblxuICAgIGlmICghYXBwbGVUb2tlbkZpZWxkKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFwcGxlVG9rZW5GaWVsZC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG90YWxBbW91bnQoc3VtbWFyeTogWHBzUmVzcG9uc2VbJ3N1bW1hcnknXSk6IHN0cmluZyB7XG4gICAgY29uc3QgZmluYW5jZSA9IHN1bW1hcnk/LmZpbmFuY2U7XG4gICAgY29uc3QgdG90YWwgPSBmaW5hbmNlPy5ncmFuZF90b3RhbD8uYW1vdW50ID8/IGZpbmFuY2U/LnRvdGFsLmFtb3VudDtcblxuICAgIHJldHVybiB0b3RhbD8udG9TdHJpbmcoKSA/PyAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VG90YWxDdXJyZW5jeShzdW1tYXJ5OiBYcHNSZXNwb25zZVsnc3VtbWFyeSddKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaW5hbmNlID0gc3VtbWFyeT8uZmluYW5jZTtcbiAgICByZXR1cm4gZmluYW5jZT8uZ3JhbmRfdG90YWw/LmN1cnJlbmN5ID8/IGZpbmFuY2U/LnRvdGFsPy5jdXJyZW5jeSA/PyAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SnNvblZhbHVlRnJvbUZpZWxkKFxuICAgIGZpZWxkczoge1xuICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgIH0sXG4gICAgZmllbGROYW1lOiBzdHJpbmdcbiAgKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2ZpZWxkTmFtZV07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZpZWxkID8gKEpTT04ucGFyc2UoZmllbGQpIGFzIHN0cmluZ1tdKSA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVtaXRFcnJvcihlcnJvcjogQXBwbGVQYXlFcnJvcnMpOiB2b2lkIHtcbiAgICB0aGlzLmVycm9yLm5leHQoZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW50ZWdyYXRpb25UeXBlKCk6IHZvaWQge1xuICAgIGxldCBpbnRlZ3JhdGlvblR5cGU6IEFwcGxlUGF5SW50ZWdyYXRpb247XG5cbiAgICBpZiAodGhpcy5wYXltZW50Q2xpZW50ICYmIHRoaXMuaXNEZXZpY2VDYXBhYmxlKCkpIHtcbiAgICAgIGludGVncmF0aW9uVHlwZSA9ICdyZWRpcmVjdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVncmF0aW9uVHlwZSA9ICdub25lJztcbiAgICB9XG5cbiAgICB0aGlzLmludGVncmF0aW9uVHlwZS5uZXh0KGludGVncmF0aW9uVHlwZSk7XG4gIH1cbn1cbiJdfQ==
192
+ }] }, { type: i1.UserAgentService }, { type: i2.SummaryFinanceDetailsAdapterService }, { type: i3.BraintreeHandler }, { type: i4.CheckoutHandler }, { type: i5.ApplePayParamsBuilderService }, { type: i6.ElkLoggerService }] });
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGUtcGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wYXltZW50LWNsaWVudC1jb3JlL3NyYy9saWIvY29yZS9zZGstcGF5bWVudC1zeXN0ZW1zL2FwcGxlLXBheS9hcHBsZS1wYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzNDLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsb0JBQW9CLEdBQ3JCLE1BQU0sdURBQXVELENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlFQUF5RSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMxRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFFTCx1QkFBdUIsR0FDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1REFBdUQsQ0FBQzs7Ozs7Ozs7QUFLbEYsTUFBTSxPQUFPLGVBQWU7SUFlMUIsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxL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QixDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRS9ELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzQixPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzNELE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FsT1UsZUFBZSxrQkFnQ2hCLFdBQVc7a0hBaENWLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBaUNJLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwbGVQYXksIGFwcGxlUGF5LCBjbGllbnQgfSBmcm9tICdicmFpbnRyZWUtd2ViJztcbmltcG9ydCB7IEV4dGVuZGVkV2luZG93IH0gZnJvbSAnLi4vLi4vZXh0ZW5kZWQtd2luZG93LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBwYXlTdGF0aW9uNFVybCxcbiAgc2FuZGJveFBheVN0YXRpb25VcmwsXG59IGZyb20gJy4uLy4uL3BheW1lbnQvYWN0aW9ucy9yZWRpcmVjdC9wYXktc3RhdGlvbjQtdXJsLmNvbnN0JztcbmltcG9ydCB7IGFwcGxlUGF5SWQgfSBmcm9tICcuLi8uLi9wYXltZW50L2FjdGlvbnMvcmVkaXJlY3QvcHM0LXBhZ2VzL3BhZ2VzLXBheW1lbnQtbWV0aG9kcy1pZC5jb25zdCc7XG5pbXBvcnQgeyBwYWdlc1JvdXRlcyB9IGZyb20gJy4uLy4uL3BheW1lbnQvYWN0aW9ucy9yZWRpcmVjdC9wczQtcGFnZXMvcGFnZXMtcm91dGVzLmNvbnN0JztcbmltcG9ydCB7IEZpZWxkTmFtZXMgfSBmcm9tICcuLi8uLi9wYXltZW50L2ZpZWxkLW5hbWVzLmVudW0nO1xuaW1wb3J0IHsgU3VtbWFyeUZpbmFuY2VEZXRhaWxzQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9wYXltZW50L2ZpbmFuY2UtZGV0YWlscy9zdW1tYXJ5L3N1bW1hcnktZmluYW5jZS1kZXRhaWxzLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBYcHNSZXNwb25zZSB9IGZyb20gJy4uLy4uL3BheW1lbnQveHBzLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVc2VyQWdlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXNlci1hZ2VudC91c2VyLWFnZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgd2luZG93VG9rZW4gfSBmcm9tICcuLi8uLi93aW5kb3cudG9rZW4nO1xuaW1wb3J0IHtcbiAgQXBwbGVQYXlJbnRlZ3JhdGlvbixcbiAgQXBwbGVQYXlJbnRlZ3JhdGlvblR5cGUsXG59IGZyb20gJy4vYXBwbGUtcGF5LWludGVncmF0aW9uLnR5cGUnO1xuaW1wb3J0IHsgQXBwbGVQYXlQYXJhbXMgfSBmcm9tICcuL2FwcGxlLXBheS1wYXJhbXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IGFwcGxlUGF5VmVyc2lvbiB9IGZyb20gJy4vYXBwbGUtcGF5LmNvbnN0JztcbmltcG9ydCB7IEFwcGxlUGF5RXJyb3JzIH0gZnJvbSAnLi9hcHBsZS1wYXkuZXJyb3JzLmVudW0nO1xuaW1wb3J0IHsgQnJhaW50cmVlSGFuZGxlciB9IGZyb20gJy4vc2Vzc2lvbi1oYW5kbGVycy9icmFpbnRyZWUuaGFuZGxlcic7XG5pbXBvcnQgeyBDaGVja291dEhhbmRsZXIgfSBmcm9tICcuL3Nlc3Npb24taGFuZGxlcnMvY2hlY2tvdXQuaGFuZGxlcic7XG5pbXBvcnQgeyBBcHBsZVBheVNlc3Npb25IYW5kbGVyIH0gZnJvbSAnLi9zZXNzaW9uLWhhbmRsZXJzL3Nlc3Npb24taGFuZGxlci50eXBlJztcbmltcG9ydCB7IFBheW1lbnRGb3JtIH0gZnJvbSAnLi4vLi4vcGF5bWVudC9wYXltZW50LWZvcm0uaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwcGxlUGF5UGFyYW1zQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL2FwcGxlLXBheS1wYXJhbXMtYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVsa0xvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9leGNlcHRpb25zLWhhbmRsaW5nL2Vsay9lbGstbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JUYWdzIH0gZnJvbSAnLi4vLi4vZXhjZXB0aW9ucy1oYW5kbGluZy9lcnJvcnMvZWxrLWVycm9yLXR5cGVzLmVudW0nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXBwbGVQYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXltZW50OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yOiBTdWJqZWN0PEFwcGxlUGF5RXJyb3JzPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZWdyYXRpb25UeXBlOiBTdWJqZWN0PEFwcGxlUGF5SW50ZWdyYXRpb24+ID1cbiAgICBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgcGF5bWVudENsaWVudDogQXBwbGVQYXkgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFwaTogUHJvbWlzZTx7XG4gICAgYXBwbGVQYXk6IHR5cGVvZiBhcHBsZVBheTtcbiAgICBjbGllbnQ6IHR5cGVvZiBjbGllbnQ7XG4gIH0+O1xuICBwcml2YXRlIGFwcGxlUGF5UGFyYW1zOiBBcHBsZVBheVBhcmFtcyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG9yZGVyPzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIGdldCBwYXltZW50UGFyYW1ldGVycygpOiBBcHBsZVBheVBhcmFtcyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmFwcGxlUGF5UGFyYW1zO1xuICB9XG5cbiAgcHVibGljIGdldCBwYXltZW50JCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnBheW1lbnQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVycm9yJCgpOiBPYnNlcnZhYmxlPEFwcGxlUGF5RXJyb3JzPiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3IuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVncmF0aW9uVHlwZSQoKTogT2JzZXJ2YWJsZTxBcHBsZVBheUludGVncmF0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZWdyYXRpb25UeXBlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3Qod2luZG93VG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgd2luZG93OiBFeHRlbmRlZFdpbmRvdyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJBZ2VudFNlcnZpY2U6IFVzZXJBZ2VudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdW1tYXJ5RmluYW5jZURldGFpbHNBZGFwdGVyU2VydmljZTogU3VtbWFyeUZpbmFuY2VEZXRhaWxzQWRhcHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBicmFpbnRyZWVIYW5kbGVyOiBCcmFpbnRyZWVIYW5kbGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hlY2tvdXRIYW5kbGVyOiBDaGVja291dEhhbmRsZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBsZVBhcmFtc0J1aWxkZXI6IEFwcGxlUGF5UGFyYW1zQnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGtMb2dnZXJTZXJ2aWNlOiBFbGtMb2dnZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYXBpID0gdGhpcy5sb2FkQnJhaW50cmVlKCk7XG5cbiAgICB0aGlzLnN1YnNjcmliZVRvSGFuZGxlcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBcHBsZVBheVBhcmFtcyhkYXRhOiB7IHBheW1lbnRGb3JtOiBQYXltZW50Rm9ybSB9KTogdm9pZCB7XG4gICAgY29uc3QgcGF5bWVudEZvcm0gPSBkYXRhPy5wYXltZW50Rm9ybTtcbiAgICBjb25zdCBmb3JtRmllbGRzID0gcGF5bWVudEZvcm0/LmZpZWxkcztcbiAgICBjb25zdCBzdW1tYXJ5ID0gcGF5bWVudEZvcm0/LnN1bW1hcnk7XG5cbiAgICBpZiAoIWZvcm1GaWVsZHMgfHwgIXN1bW1hcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGxlUGF5UGFyYW1zID0gdGhpcy5hcHBsZVBhcmFtc0J1aWxkZXIuYnVpbGRQYXJhbXMocGF5bWVudEZvcm0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRCcmFpbnRyZWVMaWJyYXJ5KHRva2VuS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBpID0gYXdhaXQgdGhpcy5hcGk7XG4gICAgICBjb25zdCBjbGllbnRJbnN0YW5jZSA9IGF3YWl0IGFwaS5jbGllbnQuY3JlYXRlKHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogdG9rZW5LZXksXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5wYXltZW50Q2xpZW50ID0gYXdhaXQgYXBpLmFwcGxlUGF5LmNyZWF0ZSh7XG4gICAgICAgIGNsaWVudDogY2xpZW50SW5zdGFuY2UsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYnJhaW50cmVlSGFuZGxlci5zZXRDbGllbnQodGhpcy5wYXltZW50Q2xpZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgY29uc29sZS5lcnJvcihBcHBsZVBheUVycm9ycy5icmFpbnRyZWVJbml0aWFsaXplRXJyb3IsIGVycm9yKTtcbiAgICAgIHRoaXMuZWxrTG9nZ2VyU2VydmljZS5sb2coQXBwbGVQYXlFcnJvcnMuYnJhaW50cmVlSW5pdGlhbGl6ZUVycm9yLCBbXG4gICAgICAgIEVycm9yVGFncy5BUFBMRVBBWSxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdEludGVncmF0aW9uVHlwZSgpO1xuXG4gICAgaWYgKCF0aGlzLnBheW1lbnRDbGllbnQgfHwgIXRoaXMuaXNEZXZpY2VDYXBhYmxlKSB7XG4gICAgICB0aGlzLmVtaXRFcnJvcihBcHBsZVBheUVycm9ycy5kZXZpY2VJc05vdENhcGFibGVFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZGlyZWN0VG9QYXltZW50UGFnZShcbiAgICBwYXJhbWV0ZXJzOiBBcHBsZVBheVBhcmFtcyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGlzU2FuZGJveD86IGJvb2xlYW5cbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb3V0ZSA9IHBhZ2VzUm91dGVzLmdldChhcHBsZVBheUlkKTtcbiAgICBpZiAoIXJvdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycy5tZXJjaGFudENhcGFiaWxpdGllcyksXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycy5zdXBwb3J0ZWROZXR3b3JrcyksXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcGFyYW1ldGVycz8ucmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkc1xuICAgICAgKSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgcGFyYW1ldGVycz8ucmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHNcbiAgICAgICksXG4gICAgICBhZ3JlZW1lbnRzOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJzLmFncmVlbWVudHMpLFxuICAgICAgdG9rZW4sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcmRlcikge1xuICAgICAgcXVlcnkuYXBwZW5kKCdvcmRlcicsIHRoaXMub3JkZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHBheVN0YXRpb25VcmwgPSBpc1NhbmRib3ggPyBzYW5kYm94UGF5U3RhdGlvblVybCA6IHBheVN0YXRpb240VXJsO1xuICAgIHJldHVybiBgJHtwYXlTdGF0aW9uVXJsfS9lbiR7cm91dGV9PyR7cXVlcnkudG9TdHJpbmcoKX1gO1xuICB9XG5cbiAgcHVibGljIHNldE9yZGVyKGRhdGE6IHsgcGF5bWVudEZvcm06IFBheW1lbnRGb3JtIH0pOiB2b2lkIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gZGF0YT8ucGF5bWVudEZvcm0/LnN1bW1hcnk7XG4gICAgaWYgKCFzdW1tYXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmluYW5jZURldGFpbHMgPVxuICAgICAgdGhpcy5zdW1tYXJ5RmluYW5jZURldGFpbHNBZGFwdGVyU2VydmljZS5nZXRGaW5hbmNlRGV0YWlscyhzdW1tYXJ5KTtcblxuICAgIGlmIChmaW5hbmNlRGV0YWlscz8ucHVyY2hhc2UgJiYgZmluYW5jZURldGFpbHM/LmZpbmFuY2UpIHtcbiAgICAgIGNvbnN0IGNhcnRJdGVtcyA9IGZpbmFuY2VEZXRhaWxzLmNhcnRJdGVtcztcbiAgICAgIHRoaXMub3JkZXIgPSBjYXJ0SXRlbXM/LnJlZHVjZSgoY3VyciwgaXRlbSkgPT4ge1xuICAgICAgICBpZiAoY3Vycikge1xuICAgICAgICAgIHJldHVybiBjdXJyICsgYDsgJHtpdGVtLnRpdGxlfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3VyciArIGl0ZW0udGl0bGU7XG4gICAgICB9LCAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBpc0RldmljZUNhcGFibGUoKTogYm9vbGVhbiB7XG4gICAgLy8gQXBwbGUgU0RLIGlzIHVzZWQgb24gbm9uLVNhZmFyaSBkZXZpY2VzLlxuICAgIC8vIFN1cHBvcnQgb2YgQXBwbGVQYXkgcGF5bWVudHMgd2lsbCBiZSBkZWZpbmVkIG9uIHRoZSBleHRlcm5hbCBQUzQgcGFnZVxuICAgIGlmICghdGhpcy51c2VyQWdlbnRTZXJ2aWNlLmlzU2FmYXJpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgICAgdGhpcy53aW5kb3cuQXBwbGVQYXlTZXNzaW9uPy5zdXBwb3J0c1ZlcnNpb24oYXBwbGVQYXlWZXJzaW9uKSAmJlxuICAgICAgICAgIHRoaXMud2luZG93LkFwcGxlUGF5U2Vzc2lvbj8uY2FuTWFrZVBheW1lbnRzKClcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW5Ob25jZUZpZWxkRGF0YSh0b2tlbk5vbmNlOiBzdHJpbmcpOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IG5hbWUgPSBGaWVsZE5hbWVzLnRva2VuQXBwbGVQYXk7XG4gICAgY29uc3QgdmFsdWUgPSBidG9hKHRva2VuTm9uY2UpO1xuICAgIHJldHVybiB7IG5hbWUsIHZhbHVlIH07XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQXBwbGVQYXlQYXJhbXMoZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IHN1bW1hcnkgPSAoZGF0YSBhcyBYcHNSZXNwb25zZSk/LnN1bW1hcnk7XG4gICAgaWYgKCF0aGlzLmFwcGxlUGF5UGFyYW1zIHx8ICFzdW1tYXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsZVBheVBhcmFtcyA9IHRoaXMuYXBwbGVQYXJhbXNCdWlsZGVyLnVwZGF0ZVBhcmFtcyhcbiAgICAgIHRoaXMuYXBwbGVQYXlQYXJhbXMsXG4gICAgICBzdW1tYXJ5XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZWVkQ2hlY2tvdXQoXG4gICAgcGFyYW1ldGVyczogQXBwbGVQYXlQYXJhbXMsXG4gICAgaWZyYW1lSW50ZWdyYXRpb25FbmFibGVkID0gZmFsc2VcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgc2Vzc2lvbkhhbmRsZXIgPSB0aGlzLmdldFNlc3Npb25IYW5kbGVyKHBhcmFtZXRlcnMuYWNxdWlyZXIpO1xuXG4gICAgaWYgKCFzZXNzaW9uSGFuZGxlcikge1xuICAgICAgY29uc29sZS5lcnJvcignQXBwbGUgUGF5OiBVbnN1cHBvcnRlZCBhY3F1aXJlcjonLCBwYXJhbWV0ZXJzLmFjcXVpcmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXNzaW9uSGFuZGxlci5zdGFydFNlc3Npb24ocGFyYW1ldGVycywgaWZyYW1lSW50ZWdyYXRpb25FbmFibGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2Vzc2lvbkhhbmRsZXIoXG4gICAgYWNxdWlyZXI6IHN0cmluZ1xuICApOiBBcHBsZVBheVNlc3Npb25IYW5kbGVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGFjcXVpcmVyKSB7XG4gICAgICBjYXNlICdicmFpbnRyZWUnOlxuICAgICAgICByZXR1cm4gdGhpcy5icmFpbnRyZWVIYW5kbGVyO1xuICAgICAgY2FzZSAnY2hlY2tvdXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja291dEhhbmRsZXI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEJyYWludHJlZSgpOiBQcm9taXNlPHtcbiAgICBhcHBsZVBheTogdHlwZW9mIGFwcGxlUGF5O1xuICAgIGNsaWVudDogdHlwZW9mIGNsaWVudDtcbiAgfT4ge1xuICAgIGNvbnN0IGFwaSA9IGF3YWl0IGltcG9ydCgnYnJhaW50cmVlLXdlYicpO1xuXG4gICAgcmV0dXJuIGFwaTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEVycm9yKGVycm9yOiBBcHBsZVBheUVycm9ycyk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3IubmV4dChlcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGVtaXRJbnRlZ3JhdGlvblR5cGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXNlckFnZW50U2VydmljZS5pc1NhZmFyaSAmJiB0aGlzLmlzRGV2aWNlQ2FwYWJsZSkge1xuICAgICAgdGhpcy5pbnRlZ3JhdGlvblR5cGUubmV4dChBcHBsZVBheUludGVncmF0aW9uVHlwZS5uYXRpdmUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wYXltZW50Q2xpZW50ICYmIHRoaXMuaXNEZXZpY2VDYXBhYmxlKSB7XG4gICAgICB0aGlzLmludGVncmF0aW9uVHlwZS5uZXh0KEFwcGxlUGF5SW50ZWdyYXRpb25UeXBlLnJlZGlyZWN0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVRvSGFuZGxlcnMoKTogdm9pZCB7XG4gICAgY29uc3QgaGFuZGxlcnMgPSBbdGhpcy5icmFpbnRyZWVIYW5kbGVyLCB0aGlzLmNoZWNrb3V0SGFuZGxlcl07XG5cbiAgICBoYW5kbGVycy5mb3JFYWNoKChoYW5kbGVyKSA9PiB7XG4gICAgICBoYW5kbGVyLmVycm9yJC5zdWJzY3JpYmUoKGVycm9yKSA9PiB0aGlzLmVtaXRFcnJvcihlcnJvcikpO1xuICAgICAgaGFuZGxlci5wYXltZW50JC5zdWJzY3JpYmUoKHRva2VuKSA9PiB0aGlzLnBheW1lbnQubmV4dCh0b2tlbikpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtcGFyYW1zLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BheW1lbnQtY2xpZW50LWNvcmUvc3JjL2xpYi9jb3JlL3Nkay1wYXltZW50LXN5c3RlbXMvYXBwbGUtcGF5L2NoZWNrb3V0LXBhcmFtcy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXBwbGVQYXlDaGVja291dFBhcmFtcyB7XG4gIHRvdGFsTGFiZWw6IHN0cmluZztcbiAgdG90YWxBbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gIGNvdW50cnlDb2RlOiBzdHJpbmc7XG4gIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgc3VwcG9ydGVkTmV0d29ya3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBhZ3JlZW1lbnRzOiBzdHJpbmdbXVtdO1xuICBhY3F1aXJlcjogc3RyaW5nO1xuICBpc1NhbmRib3g6IHN0cmluZztcbiAgcGF5SW5zdGFuY2VBY2NvdW50SWQ6IHN0cmluZztcbiAgZ2V0QXBwbGVQYXlTZXNzaW9uVXJsOiBzdHJpbmc7XG4gIHBheVZpYUNoZWNrb3V0VXJsOiBzdHJpbmc7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtcGFyYW1zLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BheW1lbnQtY2xpZW50LWNvcmUvc3JjL2xpYi9jb3JlL3Nkay1wYXltZW50LXN5c3RlbXMvYXBwbGUtcGF5L2NoZWNrb3V0LXBhcmFtcy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQXBwbGVQYXlDaGVja291dFBhcmFtcyB7XG4gIHRvdGFsTGFiZWw6IHN0cmluZztcbiAgdG90YWxBbW91bnQ6IHN0cmluZztcbiAgY3VycmVuY3lDb2RlOiBzdHJpbmc7XG4gIGNvdW50cnlDb2RlOiBzdHJpbmc7XG4gIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgc3VwcG9ydGVkTmV0d29ya3M6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBhZ3JlZW1lbnRzOiBzdHJpbmdbXVtdO1xuICBhY3F1aXJlcjogc3RyaW5nO1xuICBpc1NhbmRib3g6IHN0cmluZztcbiAgcGF5SW5zdGFuY2VBY2NvdW50SWQ6IHN0cmluZztcbiAgZ2V0QXBwbGVQYXlTZXNzaW9uVXJsOiBzdHJpbmc7XG4gIHBheVZpYUNoZWNrb3V0VXJsOiBzdHJpbmc7XG4gIHRvcExldmVsRG9tYWluPzogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,80 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ErrorTags } from '../../../exceptions-handling/errors/elk-error-types.enum';
3
+ import { windowToken } from '../../../window.token';
4
+ import { applePayVersion } from '../apple-pay.const';
5
+ import { ApplePayErrors } from '../apple-pay.errors.enum';
6
+ import { ApplePaySessionHandlerAbstract } from './session-handler.abstract';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../../exceptions-handling/elk/elk-logger.service";
9
+ export class BraintreeHandler extends ApplePaySessionHandlerAbstract {
10
+ constructor(window, elkLoggerService) {
11
+ super();
12
+ this.window = window;
13
+ this.elkLoggerService = elkLoggerService;
14
+ this.paymentClient = null;
15
+ }
16
+ setClient(client) {
17
+ this.paymentClient = client;
18
+ }
19
+ startSession(params, iframeIntegrationEnabled) {
20
+ if (!this.paymentClient) {
21
+ console.error(ApplePayErrors.braintreeInitializeError);
22
+ this.elkLoggerService.log(ApplePayErrors.braintreeInitializeError, [
23
+ ErrorTags.APPLEPAY,
24
+ ]);
25
+ return;
26
+ }
27
+ const request = this.buildPaymentRequest(params);
28
+ const applePayRequest = this.paymentClient.createPaymentRequest(request);
29
+ const session = new this.window.ApplePaySession(applePayVersion, applePayRequest);
30
+ session.onvalidatemerchant = (event) => {
31
+ const validationParams = {
32
+ validationURL: event.validationURL,
33
+ displayName: params.totalLabel,
34
+ };
35
+ if (iframeIntegrationEnabled && params.topLevelDomain) {
36
+ // @ts-expect-error unknown property
37
+ validationParams.domainName = params.topLevelDomain;
38
+ }
39
+ this.paymentClient
40
+ ?.performValidation(validationParams)
41
+ .then((merchantSession) => {
42
+ session.completeMerchantValidation(merchantSession);
43
+ })
44
+ .catch((error) => {
45
+ console.error(ApplePayErrors.merchantValidationError, error);
46
+ session.abort();
47
+ });
48
+ };
49
+ session.onpaymentauthorized = (event) => {
50
+ this.paymentClient
51
+ ?.tokenize({ token: event.payment.token })
52
+ .then((response) => {
53
+ this.payment.next(JSON.stringify({
54
+ token: response?.nonce ?? '',
55
+ email: event.payment.billingContact?.emailAddress ?? null,
56
+ postalCode: event.payment.billingContact?.postalCode ?? null,
57
+ }));
58
+ session.completePayment(this.window.ApplePaySession.STATUS_SUCCESS);
59
+ })
60
+ .catch((error) => {
61
+ console.error('Apple Pay: Tokenization error', error);
62
+ session.completePayment(this.window.ApplePaySession.STATUS_FAILURE);
63
+ });
64
+ };
65
+ session.oncancel = () => {
66
+ console.error(ApplePayErrors.cancelled);
67
+ this.emitError(ApplePayErrors.cancelled);
68
+ };
69
+ session.begin();
70
+ }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BraintreeHandler, deps: [{ token: windowToken }, { token: i1.ElkLoggerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
72
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BraintreeHandler }); }
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: BraintreeHandler, decorators: [{
75
+ type: Injectable
76
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
77
+ type: Inject,
78
+ args: [windowToken]
79
+ }] }, { type: i1.ElkLoggerService }] });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhaW50cmVlLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wYXltZW50LWNsaWVudC1jb3JlL3NyYy9saWIvY29yZS9zZGstcGF5bWVudC1zeXN0ZW1zL2FwcGxlLXBheS9zZXNzaW9uLWhhbmRsZXJzL2JyYWludHJlZS5oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUVyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBRzVFLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSw4QkFBOEI7SUFHbEUsWUFDd0MsTUFBc0IsRUFDM0MsZ0JBQWtDO1FBRW5ELEtBQUssRUFBRSxDQUFDO1FBSDhCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQzNDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFKN0Msa0JBQWEsR0FBb0IsSUFBSSxDQUFDO0lBTzlDLENBQUM7SUFFTSxTQUFTLENBQUMsTUFBZ0I7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVNLFlBQVksQ0FDakIsTUFBc0IsRUFDdEIsd0JBQWlDO1FBRWpDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsZ0JB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QkFBZ0Isa0JBSWpCLFdBQVc7a0hBSlYsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVOzswQkFLTixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxlUGF5IH0gZnJvbSAnYnJhaW50cmVlLXdlYic7XG5pbXBvcnQgeyBFbGtMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZXhjZXB0aW9ucy1oYW5kbGluZy9lbGsvZWxrLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yVGFncyB9IGZyb20gJy4uLy4uLy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzL2Vsay1lcnJvci10eXBlcy5lbnVtJztcbmltcG9ydCB7IEV4dGVuZGVkV2luZG93IH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5kZWQtd2luZG93LmludGVyZmFjZSc7XG5pbXBvcnQgeyB3aW5kb3dUb2tlbiB9IGZyb20gJy4uLy4uLy4uL3dpbmRvdy50b2tlbic7XG5pbXBvcnQgeyBBcHBsZVBheVBhcmFtcyB9IGZyb20gJy4uL2FwcGxlLXBheS1wYXJhbXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IGFwcGxlUGF5VmVyc2lvbiB9IGZyb20gJy4uL2FwcGxlLXBheS5jb25zdCc7XG5pbXBvcnQgeyBBcHBsZVBheUVycm9ycyB9IGZyb20gJy4uL2FwcGxlLXBheS5lcnJvcnMuZW51bSc7XG5pbXBvcnQgeyBBcHBsZVBheVNlc3Npb25IYW5kbGVyQWJzdHJhY3QgfSBmcm9tICcuL3Nlc3Npb24taGFuZGxlci5hYnN0cmFjdCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCcmFpbnRyZWVIYW5kbGVyIGV4dGVuZHMgQXBwbGVQYXlTZXNzaW9uSGFuZGxlckFic3RyYWN0IHtcbiAgcHJpdmF0ZSBwYXltZW50Q2xpZW50OiBBcHBsZVBheSB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KHdpbmRvd1Rva2VuKSBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogRXh0ZW5kZWRXaW5kb3csXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGtMb2dnZXJTZXJ2aWNlOiBFbGtMb2dnZXJTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xpZW50KGNsaWVudDogQXBwbGVQYXkpOiB2b2lkIHtcbiAgICB0aGlzLnBheW1lbnRDbGllbnQgPSBjbGllbnQ7XG4gIH1cblxuICBwdWJsaWMgc3RhcnRTZXNzaW9uKFxuICAgIHBhcmFtczogQXBwbGVQYXlQYXJhbXMsXG4gICAgaWZyYW1lSW50ZWdyYXRpb25FbmFibGVkOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wYXltZW50Q2xpZW50KSB7XG4gICAgICBjb25zb2xlLmVycm9yKEFwcGxlUGF5RXJyb3JzLmJyYWludHJlZUluaXRpYWxpemVFcnJvcik7XG4gICAgICB0aGlzLmVsa0xvZ2dlclNlcnZpY2UubG9nKEFwcGxlUGF5RXJyb3JzLmJyYWludHJlZUluaXRpYWxpemVFcnJvciwgW1xuICAgICAgICBFcnJvclRhZ3MuQVBQTEVQQVksXG4gICAgICBdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5idWlsZFBheW1lbnRSZXF1ZXN0KHBhcmFtcyk7XG5cbiAgICBjb25zdCBhcHBsZVBheVJlcXVlc3QgPSB0aGlzLnBheW1lbnRDbGllbnQuY3JlYXRlUGF5bWVudFJlcXVlc3QocmVxdWVzdCk7XG5cbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IHRoaXMud2luZG93LkFwcGxlUGF5U2Vzc2lvbihcbiAgICAgIGFwcGxlUGF5VmVyc2lvbixcbiAgICAgIGFwcGxlUGF5UmVxdWVzdFxuICAgICk7XG5cbiAgICBzZXNzaW9uLm9udmFsaWRhdGVtZXJjaGFudCA9IChldmVudCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGlvblBhcmFtcyA9IHtcbiAgICAgICAgdmFsaWRhdGlvblVSTDogZXZlbnQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgZGlzcGxheU5hbWU6IHBhcmFtcy50b3RhbExhYmVsLFxuICAgICAgfTtcblxuICAgICAgaWYgKGlmcmFtZUludGVncmF0aW9uRW5hYmxlZCAmJiBwYXJhbXMudG9wTGV2ZWxEb21haW4pIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIHZhbGlkYXRpb25QYXJhbXMuZG9tYWluTmFtZSA9IHBhcmFtcy50b3BMZXZlbERvbWFpbjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYXltZW50Q2xpZW50XG4gICAgICAgID8ucGVyZm9ybVZhbGlkYXRpb24odmFsaWRhdGlvblBhcmFtcylcbiAgICAgICAgLnRoZW4oKG1lcmNoYW50U2Vzc2lvbikgPT4ge1xuICAgICAgICAgIHNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24obWVyY2hhbnRTZXNzaW9uKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoQXBwbGVQYXlFcnJvcnMubWVyY2hhbnRWYWxpZGF0aW9uRXJyb3IsIGVycm9yKTtcbiAgICAgICAgICBzZXNzaW9uLmFib3J0KCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMucGF5bWVudENsaWVudFxuICAgICAgICA/LnRva2VuaXplKHsgdG9rZW46IGV2ZW50LnBheW1lbnQudG9rZW4gfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50Lm5leHQoXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIHRva2VuOiByZXNwb25zZT8ubm9uY2UgPz8gJycsXG4gICAgICAgICAgICAgIGVtYWlsOiBldmVudC5wYXltZW50LmJpbGxpbmdDb250YWN0Py5lbWFpbEFkZHJlc3MgPz8gbnVsbCxcbiAgICAgICAgICAgICAgcG9zdGFsQ29kZTogZXZlbnQucGF5bWVudC5iaWxsaW5nQ29udGFjdD8ucG9zdGFsQ29kZSA/PyBudWxsLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50KHRoaXMud2luZG93LkFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTUyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBcHBsZSBQYXk6IFRva2VuaXphdGlvbiBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh0aGlzLndpbmRvdy5BcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgc2Vzc2lvbi5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoQXBwbGVQYXlFcnJvcnMuY2FuY2VsbGVkKTtcbiAgICAgIHRoaXMuZW1pdEVycm9yKEFwcGxlUGF5RXJyb3JzLmNhbmNlbGxlZCk7XG4gICAgfTtcblxuICAgIHNlc3Npb24uYmVnaW4oKTtcbiAgfVxufVxuIl19