@xsolla/payment-client-core 0.2.20 → 0.2.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2022 → esm2020}/lib/core/combined-payment-methods/combined-payment-methods.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/countries-api/countries-api.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/country/country.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/credit-card/credit-card.service.mjs +4 -4
- package/esm2020/lib/core/device-finger-print/device-finger-print.service.mjs +67 -0
- package/{esm2022 → esm2020}/lib/core/edit-saved-methods/edit-saved-methods.service.mjs +5 -5
- package/esm2020/lib/core/encrypt-credit-card/encrypt-credit-card.service.mjs +72 -0
- package/esm2020/lib/core/errors-mapping/xps-response-errors-mapping.service.mjs +52 -0
- package/esm2020/lib/core/exceptions-handling/elk/elk-logger.service.mjs +120 -0
- package/esm2020/lib/core/exceptions-handling/errors/http-error.class.mjs +40 -0
- package/esm2020/lib/core/exceptions-handling/errors/tagged-error.class.mjs +16 -0
- package/{esm2022 → esm2020}/lib/core/exceptions-handling/http-interceptor/http-exceptions.interceptor.mjs +5 -5
- package/esm2020/lib/core/http/secure-api/secure-api.service.mjs +55 -0
- package/{esm2022 → esm2020}/lib/core/legal/disclaimer.service.mjs +4 -4
- package/{esm2022 → esm2020}/lib/core/legal/legal.service.mjs +5 -5
- package/esm2020/lib/core/legal/refund-policy.service.mjs +30 -0
- package/esm2020/lib/core/legal/secure-connection.service.mjs +31 -0
- package/{esm2022 → esm2020}/lib/core/payment/actions/check-status/check-status.action.class.mjs +4 -4
- package/esm2020/lib/core/payment/actions/next-action.service.mjs +61 -0
- package/esm2020/lib/core/payment/actions/redirect/redirect.action.class.mjs +60 -0
- package/{esm2022 → esm2020}/lib/core/payment/actions/show-errors/show-errors.action.class.mjs +4 -4
- package/esm2020/lib/core/payment/actions/show-fields/show-fields.action.class.mjs +37 -0
- package/{esm2022 → esm2020}/lib/core/payment/actions/show-mobile-payment-screen/show-mobile-payment-screen.action.class.mjs +4 -4
- package/{esm2022 → esm2020}/lib/core/payment/actions/show-qr-code/show-qr-code.action.class.mjs +4 -4
- package/{esm2022 → esm2020}/lib/core/payment/actions/special-button/special-button.action.class.mjs +4 -4
- package/esm2020/lib/core/payment/actions/status-updated/status-updated.action.class.mjs +38 -0
- package/{esm2022 → esm2020}/lib/core/payment/actions/three-ds/three-ds.action.class.mjs +4 -4
- package/esm2020/lib/core/payment/config/config.service.mjs +37 -0
- package/{esm2022 → esm2020}/lib/core/payment/credit-card-state/credit-card-state.service.mjs +4 -4
- package/esm2020/lib/core/payment/finance-details/finance-details.service.mjs +38 -0
- package/{esm2022 → esm2020}/lib/core/payment/finance-details/status/status-finance-details-adapter.service.mjs +5 -5
- package/esm2020/lib/core/payment/finance-details/summary/summary-finance-details-adapter.service.mjs +264 -0
- package/esm2020/lib/core/payment/form/controls/control-config.service.mjs +46 -0
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/birth-date/birth-date.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/card-month/card-month.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/card-number/card-number.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/card-year/card-year.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/cardholder-name/cardholder-name.converter.mjs +5 -5
- package/esm2020/lib/core/payment/form/converters/checkbox/checkbox.converter.mjs +33 -0
- package/esm2020/lib/core/payment/form/converters/converter.abstract.mjs +76 -0
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/coupon/coupon.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/cpf-name/cpf-name.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/cpf-number/cpf-number.converter.mjs +5 -5
- package/esm2020/lib/core/payment/form/converters/cvv/cvv.converter.mjs +72 -0
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/email/email.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/phone.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/pin/pin.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/pricepoint/pricepoint.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/radio-group/radio-group.converter.mjs +5 -5
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/select/select.converter.mjs +5 -5
- package/esm2020/lib/core/payment/form/converters/street-number/street-number.converter.mjs +28 -0
- package/{esm2022 → esm2020}/lib/core/payment/form/converters/text/text.converter.mjs +5 -5
- package/esm2020/lib/core/payment/form/converters/zip/zip.converter.mjs +64 -0
- package/{esm2022 → esm2020}/lib/core/payment/form/form.module.mjs +33 -33
- package/esm2020/lib/core/payment/form/form.service.mjs +49 -0
- package/esm2020/lib/core/payment/form/validators/birth-date/birth-date.validator.mjs +37 -0
- package/esm2020/lib/core/payment/form/validators/card-month/card-month.validator.mjs +37 -0
- package/esm2020/lib/core/payment/form/validators/card-year/card-year.validator.mjs +34 -0
- package/esm2020/lib/core/payment/form/validators/convert.function.mjs +15 -0
- package/esm2020/lib/core/payment/form/validators/credit-card-length/credit-card-min-length.validator.mjs +32 -0
- package/esm2020/lib/core/payment/form/validators/luhn-formula-validator/luhn-formula.validator.mjs +40 -0
- package/{esm2022 → esm2020}/lib/core/payment/form/validators/validators.module.mjs +5 -5
- package/esm2020/lib/core/payment/form-messages/form-messages.service.mjs +23 -0
- package/esm2020/lib/core/payment/initialize/initialize.service.mjs +85 -0
- package/esm2020/lib/core/payment/initialize/response/initialize-response.class.mjs +43 -0
- package/esm2020/lib/core/payment/payment.service.mjs +369 -0
- package/{esm2022 → esm2020}/lib/core/payment/status/check-status/check-status.service.mjs +6 -6
- package/{esm2022 → esm2020}/lib/core/payment/status/check-status/request/check-status-request.class.mjs +1 -1
- package/esm2020/lib/core/payment/status/listen-status/listen-status.service.mjs +124 -0
- package/{esm2022 → esm2020}/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.service.mjs +5 -5
- package/esm2020/lib/core/payment/status/save-payment-method-status/save-payment-method-status.service.mjs +121 -0
- package/esm2020/lib/core/payment/status/status-request/request/status-request.class.mjs +22 -0
- package/esm2020/lib/core/payment/status/status-request/response/status-response.class.mjs +98 -0
- package/{esm2022 → esm2020}/lib/core/payment/status/status-request/status-request.service.mjs +6 -6
- package/esm2020/lib/core/payment/status/status.service.mjs +75 -0
- package/esm2020/lib/core/payment/status/websocket-status/websocket-status.service.mjs +76 -0
- package/esm2020/lib/core/payment/submit/request/submit-request.class.mjs +24 -0
- package/esm2020/lib/core/payment/submit/response/submit-response.class.mjs +31 -0
- package/esm2020/lib/core/payment/submit/submit.service.mjs +78 -0
- package/esm2020/lib/core/payment/sync/request/sync-request.class.mjs +31 -0
- package/esm2020/lib/core/payment/sync/response/sync-response.class.mjs +17 -0
- package/esm2020/lib/core/payment/sync/sync.service.mjs +157 -0
- package/esm2020/lib/core/payment/three-ds/api/notify-dfp-status/notify-dfp-status.service.mjs +49 -0
- package/esm2020/lib/core/payment/three-ds/api/status-three-ds/status-three-ds.service.mjs +60 -0
- package/esm2020/lib/core/payment/three-ds/dfp-collect/dfp-collect.service.mjs +105 -0
- package/esm2020/lib/core/payment/three-ds/reinsurance-check/reinsurance-check.service.mjs +41 -0
- package/esm2020/lib/core/payment/three-ds/three-ds-20/three-ds20.service.mjs +109 -0
- package/esm2020/lib/core/payment/three-ds/three-ds.service.mjs +42 -0
- package/esm2020/lib/core/payment/xps-api/xps-api.service.mjs +85 -0
- package/esm2020/lib/core/payment/xps-api-part-request.abstract.mjs +8 -0
- package/esm2020/lib/core/payment-methods/payment-methods.service.mjs +75 -0
- package/esm2020/lib/core/performance/performance.service.mjs +111 -0
- package/esm2020/lib/core/performance/xhr-action.service.mjs +114 -0
- package/esm2020/lib/core/saved-methods/saved-methods.service.mjs +54 -0
- package/esm2020/lib/core/sdk-payment-systems/apple-pay/apple-pay.service.mjs +268 -0
- package/esm2020/lib/core/sdk-payment-systems/google-pay/google-pay.service.mjs +177 -0
- package/esm2020/lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service.mjs +84 -0
- package/esm2020/lib/core/session/session.service.mjs +57 -0
- package/esm2020/lib/core/settings/settings.service.mjs +92 -0
- package/esm2020/lib/core/url/url.service.mjs +34 -0
- package/esm2020/lib/core/user-agent/user-agent.service.mjs +211 -0
- package/esm2020/lib/core/user-balance/user-balance.service.mjs +53 -0
- package/esm2020/lib/core/user-behaviour-analytics/event-builder/event-builder.service.mjs +144 -0
- package/esm2020/lib/core/user-behaviour-analytics/user-behaviour-analytics.service.mjs +158 -0
- package/esm2020/lib/core/web-socket/centrifugo-web-socket.service.mjs +200 -0
- package/esm2020/lib/core/web-socket/nchan-web-socket.service.mjs +116 -0
- package/esm2020/lib/core/web-socket/web-socket.factory.mjs +28 -0
- package/esm2020/lib/core-library.module.mjs +92 -0
- package/{esm2022 → esm2020}/lib/core-library.service.mjs +5 -5
- package/{esm2022 → esm2020}/lib/shared/pipes/pipes.module.mjs +5 -5
- package/esm2020/lib/shared/pipes/unescape-html/unescape-html.pipe.mjs +23 -0
- package/fesm2015/xsolla-payment-client-core.mjs +8138 -0
- package/fesm2015/xsolla-payment-client-core.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/xsolla-payment-client-core.mjs +460 -460
- package/fesm2020/xsolla-payment-client-core.mjs.map +1 -0
- package/package.json +16 -10
- package/xsolla-payment-client-core-0.2.21.tgz +0 -0
- package/esm2022/lib/core/device-finger-print/device-finger-print.service.mjs +0 -67
- package/esm2022/lib/core/encrypt-credit-card/encrypt-credit-card.service.mjs +0 -72
- package/esm2022/lib/core/errors-mapping/xps-response-errors-mapping.service.mjs +0 -52
- package/esm2022/lib/core/exceptions-handling/elk/elk-logger.service.mjs +0 -120
- package/esm2022/lib/core/exceptions-handling/errors/http-error.class.mjs +0 -40
- package/esm2022/lib/core/exceptions-handling/errors/tagged-error.class.mjs +0 -16
- package/esm2022/lib/core/http/secure-api/secure-api.service.mjs +0 -55
- package/esm2022/lib/core/legal/refund-policy.service.mjs +0 -30
- package/esm2022/lib/core/legal/secure-connection.service.mjs +0 -31
- package/esm2022/lib/core/payment/actions/next-action.service.mjs +0 -61
- package/esm2022/lib/core/payment/actions/redirect/redirect.action.class.mjs +0 -60
- package/esm2022/lib/core/payment/actions/show-fields/show-fields.action.class.mjs +0 -34
- package/esm2022/lib/core/payment/actions/status-updated/status-updated.action.class.mjs +0 -38
- package/esm2022/lib/core/payment/config/config.service.mjs +0 -37
- package/esm2022/lib/core/payment/finance-details/finance-details.service.mjs +0 -38
- package/esm2022/lib/core/payment/finance-details/summary/summary-finance-details-adapter.service.mjs +0 -264
- package/esm2022/lib/core/payment/form/controls/control-config.service.mjs +0 -46
- package/esm2022/lib/core/payment/form/converters/checkbox/checkbox.converter.mjs +0 -33
- package/esm2022/lib/core/payment/form/converters/converter.abstract.mjs +0 -76
- package/esm2022/lib/core/payment/form/converters/cvv/cvv.converter.mjs +0 -72
- package/esm2022/lib/core/payment/form/converters/street-number/street-number.converter.mjs +0 -28
- package/esm2022/lib/core/payment/form/converters/zip/zip.converter.mjs +0 -64
- package/esm2022/lib/core/payment/form/form.service.mjs +0 -49
- package/esm2022/lib/core/payment/form/validators/birth-date/birth-date.validator.mjs +0 -37
- package/esm2022/lib/core/payment/form/validators/card-month/card-month.validator.mjs +0 -37
- package/esm2022/lib/core/payment/form/validators/card-year/card-year.validator.mjs +0 -34
- package/esm2022/lib/core/payment/form/validators/convert.function.mjs +0 -15
- package/esm2022/lib/core/payment/form/validators/credit-card-length/credit-card-min-length.validator.mjs +0 -32
- package/esm2022/lib/core/payment/form/validators/luhn-formula-validator/luhn-formula.validator.mjs +0 -40
- package/esm2022/lib/core/payment/form-messages/form-messages.service.mjs +0 -26
- package/esm2022/lib/core/payment/initialize/initialize.service.mjs +0 -85
- package/esm2022/lib/core/payment/initialize/response/initialize-response.class.mjs +0 -43
- package/esm2022/lib/core/payment/payment.service.mjs +0 -369
- package/esm2022/lib/core/payment/status/listen-status/listen-status.service.mjs +0 -124
- package/esm2022/lib/core/payment/status/save-payment-method-status/save-payment-method-status.service.mjs +0 -121
- package/esm2022/lib/core/payment/status/status-request/request/status-request.class.mjs +0 -22
- package/esm2022/lib/core/payment/status/status-request/response/status-response.class.mjs +0 -98
- package/esm2022/lib/core/payment/status/status.service.mjs +0 -75
- package/esm2022/lib/core/payment/status/websocket-status/websocket-status.service.mjs +0 -76
- package/esm2022/lib/core/payment/submit/request/submit-request.class.mjs +0 -24
- package/esm2022/lib/core/payment/submit/response/submit-response.class.mjs +0 -31
- package/esm2022/lib/core/payment/submit/submit.service.mjs +0 -78
- package/esm2022/lib/core/payment/sync/request/sync-request.class.mjs +0 -31
- package/esm2022/lib/core/payment/sync/response/sync-response.class.mjs +0 -17
- package/esm2022/lib/core/payment/sync/sync.service.mjs +0 -157
- package/esm2022/lib/core/payment/three-ds/api/notify-dfp-status/notify-dfp-status.service.mjs +0 -49
- package/esm2022/lib/core/payment/three-ds/api/status-three-ds/status-three-ds.service.mjs +0 -60
- package/esm2022/lib/core/payment/three-ds/dfp-collect/dfp-collect.service.mjs +0 -105
- package/esm2022/lib/core/payment/three-ds/reinsurance-check/reinsurance-check.service.mjs +0 -41
- package/esm2022/lib/core/payment/three-ds/three-ds-20/three-ds20.service.mjs +0 -109
- package/esm2022/lib/core/payment/three-ds/three-ds.service.mjs +0 -42
- package/esm2022/lib/core/payment/xps-api/xps-api.service.mjs +0 -85
- package/esm2022/lib/core/payment/xps-api-part-request.abstract.mjs +0 -8
- package/esm2022/lib/core/payment-methods/payment-methods.service.mjs +0 -75
- package/esm2022/lib/core/performance/performance.service.mjs +0 -111
- package/esm2022/lib/core/performance/xhr-action.service.mjs +0 -114
- package/esm2022/lib/core/saved-methods/saved-methods.service.mjs +0 -54
- package/esm2022/lib/core/sdk-payment-systems/apple-pay/apple-pay.service.mjs +0 -268
- package/esm2022/lib/core/sdk-payment-systems/google-pay/google-pay.service.mjs +0 -177
- package/esm2022/lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service.mjs +0 -84
- package/esm2022/lib/core/session/session.service.mjs +0 -57
- package/esm2022/lib/core/settings/settings.service.mjs +0 -92
- package/esm2022/lib/core/url/url.service.mjs +0 -34
- package/esm2022/lib/core/user-agent/user-agent.service.mjs +0 -211
- package/esm2022/lib/core/user-balance/user-balance.service.mjs +0 -53
- package/esm2022/lib/core/user-behaviour-analytics/event-builder/event-builder.service.mjs +0 -144
- package/esm2022/lib/core/user-behaviour-analytics/user-behaviour-analytics.service.mjs +0 -158
- package/esm2022/lib/core/web-socket/centrifugo-web-socket.service.mjs +0 -200
- package/esm2022/lib/core/web-socket/nchan-web-socket.service.mjs +0 -116
- package/esm2022/lib/core/web-socket/web-socket.factory.mjs +0 -28
- package/esm2022/lib/core-library.module.mjs +0 -92
- package/esm2022/lib/shared/pipes/unescape-html/unescape-html.pipe.mjs +0 -23
- package/fesm2022/xsolla-payment-client-core.mjs.map +0 -1
- package/xsolla-payment-client-core-0.2.20.tgz +0 -0
- /package/{esm2022 → esm2020}/lib/core/agreementsGroup.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/boolean-number.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/combined-payment-methods/combined-payment-methods.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/countries-api/country-response.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/countries-api/country.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/country/country-iso-code.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/credit-card-settings.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/credit-card-types.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/credit-card.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/credit-cards-map.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/default-mask.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/four-block-mask.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/ordered-cards-settings.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/american-express.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/aura.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/china-union-pay.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/dankort.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/default-card.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/diners-clubs.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/discover.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/elo.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/hipercard.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/jcb.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/maestro.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/mastercard.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/mir.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/naranja.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/postepay.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/credit-card/types/visa.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/deep-readonly.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/device-finger-print/hash.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/edit-saved-methods/delete-method-response.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/encrypt-credit-card/encrypted-card.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/encrypt-credit-card/open-card.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/errors-mapping/card-number-sanction-error-codes.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/errors-mapping/field-special-errors-map.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/elk/additional-info.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/elk/error-without-meta-fields.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/elk/log-message.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/errors/api-error.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/errors/app-error.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/errors/elk-error-types.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/errors/encrypt-card-error.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/errors/response-error.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/errors/terminal-error.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/errors/token-error.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/errors/ws-error.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/http-interceptor/http-error-data.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/exceptions-handling/http-interceptor/http-error-response-data.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/extended-window.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/http/secure-api/api-url.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/http/secure-api/options.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/legal/legal.component.config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/action.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/check-status/check-status.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/next-action.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/next-actions.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/redirect/pay-station4-url.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/redirect/ps4-pages/pages-payment-methods-id.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/redirect/ps4-pages/pages-routes.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/redirect/redirect.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/show-errors/show-errors.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/show-fields/show-fields.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/show-mobile-payment-screen/show-mobile-payment-screen.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/show-qr-code/show-qr-code.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/special-button/special-button.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/status-updated/status-updated.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/actions/three-ds/three-ds.action.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/checkout-item.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/credit-card-payment-methods-id.variable.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/credit-card-state/credit-card-state.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/emit-data.service.abstract.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/field-names.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/field.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/cart-item.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/cart-line.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/cart-summary.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/finance-details.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/price.helpers.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/price.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/status/field-with-amount-and-currency.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/status/fields-with-currency.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/status/finance-info.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/summary/default-image-patterns.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/summary/sales-tax-details-key.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/finance-details/vat-details-key.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/common-control-config.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/control-status.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/card-number/card-number-control.config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/checkbox/checkbox-control.config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/control-config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/control-type.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/coupon/coupon-control.config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/phone-control.config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/radio-control/radio-control.config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/radio-control/radio-option.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/search-select/search-select-option.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/search-select/select-control.config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/search-select/select-option.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/controls/text-control.config.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/converters/converters-map.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/converters/converters-map.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/converters/cpf-name/cpf-name-regex.variable.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/converters/cvv/cvv-form-state.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/converters/street-number/street-number-from-state.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/field-form-states.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/field-status.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/form-fields-status.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/form-state.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/input-event.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/async-validator-fn.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/coupon/coupon-validator.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/email/email-validator.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/is-empty-input-value.function.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/max-length-validator.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/min-length-validator.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/phone-validator.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/required/required.validator.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/restricted-value/restricted-value.validator.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/validation-error.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/validation-errors.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form/validators/validator-fn.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/form-response.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/initialize/initialize-request-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/initialize/response/initialize-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/invoice.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/payment-config.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/payment-form.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/payment.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/check-status/request/check-status-request.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/check-status/response/check-status-response.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/check-status/response/check-status-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/finance-info-field.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/line-item.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/save-payment-method-status/api/saved-payment-account-changes.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/save-payment-method-status/api/saved-payment-account.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/save-payment-method-status/save-payment-method-status.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-finance-info.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-groups.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-order.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-request/request/status-request.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-request/required-status-search-params.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-request/response/status-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-request/status-request-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-request/status-search-param.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-request/status-search-params.map.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-settings.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status-updated.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/status.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/title-class.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/web-socket-client-type.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/status/websocket-status/websocket-status.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/submit/request/submit-request.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/submit/response/is-submit-response.function.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/submit/response/submit-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/sync/field-async-validation.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/sync/field-sync-state.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/sync/request/sync-request.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/sync/response/sync-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/notify-dfp-status/request/notify-dfp-status-request.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/status-three-ds/request/status-three-ds-request.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/status-three-ds/response/status-three-ds-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/status-three-ds/status-three-ds-response.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/status-three-ds/status-types.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/api/status-three-ds/three-ds-checkout-form.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/reinsurance-check/timer.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/three-ds-20/status-update.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/three-ds-form.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/three-ds/three-ds-status-websocket-types.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/virtual-currency.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-api-part.abstract.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-checkout.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-comand.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-error.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-finance.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-message.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-purchase.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-request-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-request.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-response.error.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-response.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment/xps-summary.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment-methods/payment-method-api.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment-methods/payment-method.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment-methods/payment-methods-api.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment-methods/payment-methods-request-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment-methods/payment-methods-response.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment-methods/payment-methods-response.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/payment-methods/payment-methods-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/performance/xhr-action.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/properties.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/saved-methods/saved-method-api.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/saved-methods/saved-method.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/saved-methods/saved-methods-request-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/saved-methods/saved-methods-response.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/saved-methods/saved-methods-response.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/saved-methods/saved-methods-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/apple-pay/apple-pay-integration.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/apple-pay/apple-pay-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/apple-pay/apple-pay.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/apple-pay/apple-pay.errors.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/apple-pay/checkout-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/google-pay/google-pay-button-color.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/google-pay/google-pay-checkout.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/google-pay/google-pay-init-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/google-pay/google-pay-library.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/sdk-payment-methods.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/sdk-payment-systems-initial-data.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/sdk-payment-systems/sdk-payment-systems.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/auto-redirect-on-status.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/balance.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/bonus.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/configuration.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/empty-utils-response.error.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/header-type.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/offer.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/project.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/purchase.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/settings-mode.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/settings.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/status-back-show.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/tracking-info.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/user.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/settings/utils-response.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/type-guards/is-null.function.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/type-guards/is-string.function.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/type-guards/is-undefined.function.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/url/search-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-agent/browserInfo.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-agent/browsers.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-agent/device.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-agent/os.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-agent/user-agent-data.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-balance/user-balance-api.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-balance/user-balance-request-params.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-balance/user-balance-response.class.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-balance/user-balance-response.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/event-builder/event-parameter-types.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/event-builder/invoice.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/event-builder/purchase.type.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/event-builder/user-behaviour-event.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/one-time-analytics-events.const.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/user-behaviour-analytics.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-categories.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/user-behaviour-event/user-behaviour-event-types.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/user-behaviour-event-name.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/user-behaviour-analytics/user-session-options.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/web-socket/web-socket-client-type.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/web-socket/web-socket.interface.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/window.token.mjs +0 -0
- /package/{esm2022 → esm2020}/lib/core/xps-boolean.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/public-api.mjs +0 -0
- /package/{esm2022 → esm2020}/xsolla-payment-client-core.mjs +0 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { Inject, Injectable } from '@angular/core';
|
|
3
|
+
import { applePayVersion, safariVersionForIframeIntegration, } from './apple-pay.const';
|
|
4
|
+
import { agreementsGroup } from '../../agreementsGroup.const';
|
|
5
|
+
import { windowToken } from '../../window.token';
|
|
6
|
+
import { FieldNames } from '../../payment/field-names.enum';
|
|
7
|
+
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 * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../../user-agent/user-agent.service";
|
|
13
|
+
import * as i2 from "../../payment/finance-details/summary/summary-finance-details-adapter.service";
|
|
14
|
+
export class ApplePayService {
|
|
15
|
+
get paymentParameters() {
|
|
16
|
+
return this.applePayParams;
|
|
17
|
+
}
|
|
18
|
+
get payment$() {
|
|
19
|
+
return this.payment.asObservable();
|
|
20
|
+
}
|
|
21
|
+
get error$() {
|
|
22
|
+
return this.error.asObservable();
|
|
23
|
+
}
|
|
24
|
+
get integrationType$() {
|
|
25
|
+
return this.integrationType.asObservable();
|
|
26
|
+
}
|
|
27
|
+
constructor(window, userAgentService, summaryFinanceDetailsAdapterService) {
|
|
28
|
+
this.window = window;
|
|
29
|
+
this.userAgentService = userAgentService;
|
|
30
|
+
this.summaryFinanceDetailsAdapterService = summaryFinanceDetailsAdapterService;
|
|
31
|
+
this.agreementFieldsNames = agreementsGroup;
|
|
32
|
+
this.payment = new Subject();
|
|
33
|
+
this.error = new Subject();
|
|
34
|
+
this.integrationType = new Subject();
|
|
35
|
+
this.paymentClient = null;
|
|
36
|
+
this.applePayParams = null;
|
|
37
|
+
this.order = null;
|
|
38
|
+
this.api = this.loadBraintree();
|
|
39
|
+
}
|
|
40
|
+
setApplePayParams(data) {
|
|
41
|
+
const formFields = data?.paymentForm?.fields;
|
|
42
|
+
const summary = data?.paymentForm?.summary;
|
|
43
|
+
if (!formFields || !summary) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
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) => fields[fieldName])
|
|
58
|
+
.filter(Boolean);
|
|
59
|
+
this.applePayParams = {
|
|
60
|
+
tokenKey: this.getAppleToken(formFields),
|
|
61
|
+
totalLabel: fields['label_applePay'] ?? '',
|
|
62
|
+
totalAmount: this.getTotalAmount(summary),
|
|
63
|
+
currencyCode: this.getTotalCurrency(summary),
|
|
64
|
+
countryCode: fields['countryCode'] ?? '',
|
|
65
|
+
merchantCapabilities: this.getJsonValueFromField(fields, 'merchantCapabilities'),
|
|
66
|
+
supportedNetworks: this.getJsonValueFromField(fields, 'supportedNetworks'),
|
|
67
|
+
agreements: agreements,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async initLibrary(tokenKey) {
|
|
71
|
+
try {
|
|
72
|
+
const api = await this.api;
|
|
73
|
+
const clientInstance = await api.client.create({
|
|
74
|
+
authorization: tokenKey,
|
|
75
|
+
});
|
|
76
|
+
this.paymentClient = await api.applePay.create({
|
|
77
|
+
client: clientInstance,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error('apple pay: initialize failed', error);
|
|
82
|
+
}
|
|
83
|
+
this.emitIntegrationType();
|
|
84
|
+
if (!this.paymentClient || !this.isDeviceCapable()) {
|
|
85
|
+
this.emitError(ApplePayErrors.deviceIsNotCapableError);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
redirectToPaymentPage(parameters, token, isSandbox) {
|
|
89
|
+
const route = pagesRoutes.get(applePayId);
|
|
90
|
+
if (!route) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const query = new URLSearchParams({
|
|
94
|
+
...parameters,
|
|
95
|
+
merchantCapabilities: JSON.stringify(parameters.merchantCapabilities),
|
|
96
|
+
supportedNetworks: JSON.stringify(parameters.supportedNetworks),
|
|
97
|
+
token,
|
|
98
|
+
agreements: JSON.stringify(parameters.agreements),
|
|
99
|
+
});
|
|
100
|
+
if (this.order) {
|
|
101
|
+
query.append('order', this.order);
|
|
102
|
+
}
|
|
103
|
+
const payStationUrl = isSandbox ? sandboxPayStationUrl : payStation4Url;
|
|
104
|
+
return `${payStationUrl}/en${route}?${query.toString()}`;
|
|
105
|
+
}
|
|
106
|
+
setOrder(data) {
|
|
107
|
+
const summary = data?.paymentForm?.summary;
|
|
108
|
+
if (!summary) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const financeDetails = this.summaryFinanceDetailsAdapterService.getFinanceDetails(summary);
|
|
112
|
+
if (financeDetails?.purchase && financeDetails?.finance) {
|
|
113
|
+
const cartItems = financeDetails.cartItems;
|
|
114
|
+
this.order = cartItems?.reduce((curr, item) => {
|
|
115
|
+
if (curr) {
|
|
116
|
+
return curr + `; ${item.title}`;
|
|
117
|
+
}
|
|
118
|
+
return curr + item.title;
|
|
119
|
+
}, '');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
proceedCheckout(parameters) {
|
|
123
|
+
if (!parameters) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (!this.paymentClient || !this.isDeviceCapable()) {
|
|
127
|
+
console.warn('apple pay: device is not capable', this.paymentClient);
|
|
128
|
+
this.emitError(ApplePayErrors.deviceIsNotCapableError);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const paymentRequest = this.paymentClient.createPaymentRequest({
|
|
133
|
+
total: {
|
|
134
|
+
label: parameters.totalLabel,
|
|
135
|
+
amount: parameters.totalAmount,
|
|
136
|
+
},
|
|
137
|
+
currencyCode: parameters.currencyCode,
|
|
138
|
+
countryCode: parameters.countryCode,
|
|
139
|
+
merchantCapabilities: parameters.merchantCapabilities,
|
|
140
|
+
supportedNetworks: parameters.supportedNetworks,
|
|
141
|
+
});
|
|
142
|
+
const session = new this.window.ApplePaySession(applePayVersion, paymentRequest);
|
|
143
|
+
session.onvalidatemerchant = (event) => {
|
|
144
|
+
console.info('apple pay: merchant validation', event);
|
|
145
|
+
this.paymentClient
|
|
146
|
+
?.performValidation({
|
|
147
|
+
validationURL: event.validationURL,
|
|
148
|
+
displayName: parameters?.totalLabel,
|
|
149
|
+
})
|
|
150
|
+
.then((merchantSession) => {
|
|
151
|
+
session.completeMerchantValidation(merchantSession);
|
|
152
|
+
})
|
|
153
|
+
.catch((error) => {
|
|
154
|
+
console.error('apple pay: merchant validation error', error);
|
|
155
|
+
this.emitError(ApplePayErrors.paymentError);
|
|
156
|
+
session.abort();
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
session.onpaymentauthorized = (event) => {
|
|
160
|
+
console.info('apple pay: payment authorization', event);
|
|
161
|
+
this.paymentClient
|
|
162
|
+
?.tokenize({
|
|
163
|
+
token: event.payment.token,
|
|
164
|
+
})
|
|
165
|
+
.then((authorizationResponse) => {
|
|
166
|
+
this.payment.next(authorizationResponse?.nonce ?? '');
|
|
167
|
+
session.completePayment(this.window.ApplePaySession.STATUS_SUCCESS);
|
|
168
|
+
})
|
|
169
|
+
.catch((error) => {
|
|
170
|
+
console.error('apple pay: payment authorization error', error);
|
|
171
|
+
this.emitError(ApplePayErrors.paymentError);
|
|
172
|
+
session.completePayment(this.window.ApplePaySession.STATUS_FAILURE);
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
session.oncancel = (event) => {
|
|
176
|
+
this.emitError(ApplePayErrors.paymentError);
|
|
177
|
+
console.error('apple pay: user cancel payment', event);
|
|
178
|
+
};
|
|
179
|
+
session.begin();
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.error('apple pay: checkout error', error);
|
|
183
|
+
this.emitError(ApplePayErrors.paymentError);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
isDeviceCapable() {
|
|
187
|
+
try {
|
|
188
|
+
return Boolean(this.window.ApplePaySession?.supportsVersion(applePayVersion) &&
|
|
189
|
+
this.window.ApplePaySession?.canMakePayments());
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
return false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
getTokenNonceFieldData(tokenNonce) {
|
|
196
|
+
const name = FieldNames.tokenApplePay;
|
|
197
|
+
const value = btoa(tokenNonce);
|
|
198
|
+
return { name, value };
|
|
199
|
+
}
|
|
200
|
+
updateApplePayParams(data) {
|
|
201
|
+
const summary = data?.summary;
|
|
202
|
+
if (!this.applePayParams || !summary) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
this.applePayParams.totalAmount = this.getTotalAmount(summary);
|
|
206
|
+
this.applePayParams.currencyCode = this.getTotalCurrency(summary);
|
|
207
|
+
}
|
|
208
|
+
async loadBraintree() {
|
|
209
|
+
const api = await import('braintree-web');
|
|
210
|
+
return api;
|
|
211
|
+
}
|
|
212
|
+
getAppleToken(formFields) {
|
|
213
|
+
const appleTokenField = formFields.find((field) => {
|
|
214
|
+
return field.name === 'token_key';
|
|
215
|
+
});
|
|
216
|
+
if (!appleTokenField) {
|
|
217
|
+
return '';
|
|
218
|
+
}
|
|
219
|
+
return appleTokenField.value;
|
|
220
|
+
}
|
|
221
|
+
getTotalAmount(summary) {
|
|
222
|
+
const finance = summary?.finance;
|
|
223
|
+
const total = finance?.grand_total?.amount ?? finance?.total.amount;
|
|
224
|
+
return total?.toString() ?? '';
|
|
225
|
+
}
|
|
226
|
+
getTotalCurrency(summary) {
|
|
227
|
+
const finance = summary?.finance;
|
|
228
|
+
return finance?.grand_total?.currency ?? finance?.total?.currency ?? '';
|
|
229
|
+
}
|
|
230
|
+
getJsonValueFromField(fields, fieldName) {
|
|
231
|
+
const field = fields[fieldName];
|
|
232
|
+
try {
|
|
233
|
+
return field ? JSON.parse(field) : undefined;
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
emitError(error) {
|
|
240
|
+
this.error.next(error);
|
|
241
|
+
}
|
|
242
|
+
emitIntegrationType() {
|
|
243
|
+
let integrationType;
|
|
244
|
+
if (this.paymentClient && this.isDeviceCapable()) {
|
|
245
|
+
integrationType = 'redirect';
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
integrationType = 'none';
|
|
249
|
+
}
|
|
250
|
+
this.integrationType.next(integrationType);
|
|
251
|
+
}
|
|
252
|
+
canUseSdk() {
|
|
253
|
+
return !!(this.userAgentService.safariVersion &&
|
|
254
|
+
this.userAgentService.safariVersion >= safariVersionForIframeIntegration);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
ApplePayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ApplePayService, deps: [{ token: windowToken }, { token: i1.UserAgentService }, { token: i2.SummaryFinanceDetailsAdapterService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
258
|
+
ApplePayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ApplePayService, providedIn: 'root' });
|
|
259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ApplePayService, decorators: [{
|
|
260
|
+
type: Injectable,
|
|
261
|
+
args: [{
|
|
262
|
+
providedIn: 'root',
|
|
263
|
+
}]
|
|
264
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
265
|
+
type: Inject,
|
|
266
|
+
args: [windowToken]
|
|
267
|
+
}] }, { type: i1.UserAgentService }, { type: i2.SummaryFinanceDetailsAdapterService }]; } });
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGUtcGF5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wYXltZW50LWNsaWVudC1jb3JlL3NyYy9saWIvY29yZS9zZGstcGF5bWVudC1zeXN0ZW1zL2FwcGxlLXBheS9hcHBsZS1wYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUNBQWlDLEdBQ2xDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSTlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMxRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFHckcsT0FBTyxFQUNMLGNBQWMsRUFDZCxvQkFBb0IsR0FDckIsTUFBTSx1REFBdUQsQ0FBQzs7OztBQUsvRCxNQUFNLE9BQU8sZUFBZTtJQWdCMUIsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJ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QyxlQUFlLEVBQUUsRUFBRTtZQUNoRCxlQUFlLEdBQUcsVUFBVSxDQUFDO1NBQzlCO2FBQU07WUFDTCxlQUFlLEdBQUcsTUFBTSxDQUFDO1NBQzFCO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLFNBQVM7UUFDZixPQUFPLENBQUMsQ0FBQyxDQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhO1lBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLElBQUksaUNBQWlDLENBQ3pFLENBQUM7SUFDSixDQUFDOzs0R0FyVVUsZUFBZSxrQkFpQ2hCLFdBQVc7Z0hBakNWLGVBQWUsY0FGZCxNQUFNOzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFrQ0ksTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwbGVQYXksIGFwcGxlUGF5LCBjbGllbnQgfSBmcm9tICdicmFpbnRyZWUtd2ViJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYXBwbGVQYXlWZXJzaW9uLFxuICBzYWZhcmlWZXJzaW9uRm9ySWZyYW1lSW50ZWdyYXRpb24sXG59IGZyb20gJy4vYXBwbGUtcGF5LmNvbnN0JztcbmltcG9ydCB7IGFncmVlbWVudHNHcm91cCB9IGZyb20gJy4uLy4uL2FncmVlbWVudHNHcm91cC5jb25zdCc7XG5pbXBvcnQgeyBBcHBsZVBheVBhcmFtcyB9IGZyb20gJy4vYXBwbGUtcGF5LXBhcmFtcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmllbGQgfSBmcm9tICcuLi8uLi9wYXltZW50L2ZpZWxkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFeHRlbmRlZFdpbmRvdyB9IGZyb20gJy4uLy4uL2V4dGVuZGVkLXdpbmRvdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgd2luZG93VG9rZW4gfSBmcm9tICcuLi8uLi93aW5kb3cudG9rZW4nO1xuaW1wb3J0IHsgWHBzUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9wYXltZW50L3hwcy1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmllbGROYW1lcyB9IGZyb20gJy4uLy4uL3BheW1lbnQvZmllbGQtbmFtZXMuZW51bSc7XG5pbXBvcnQgeyBBcHBsZVBheUVycm9ycyB9IGZyb20gJy4vYXBwbGUtcGF5LmVycm9ycy5lbnVtJztcbmltcG9ydCB7IFVzZXJBZ2VudFNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLWFnZW50L3VzZXItYWdlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsZVBheUludGVncmF0aW9uIH0gZnJvbSAnLi9hcHBsZS1wYXktaW50ZWdyYXRpb24udHlwZSc7XG5pbXBvcnQgeyBwYWdlc1JvdXRlcyB9IGZyb20gJy4uLy4uL3BheW1lbnQvYWN0aW9ucy9yZWRpcmVjdC9wczQtcGFnZXMvcGFnZXMtcm91dGVzLmNvbnN0JztcbmltcG9ydCB7IGFwcGxlUGF5SWQgfSBmcm9tICcuLi8uLi9wYXltZW50L2FjdGlvbnMvcmVkaXJlY3QvcHM0LXBhZ2VzL3BhZ2VzLXBheW1lbnQtbWV0aG9kcy1pZC5jb25zdCc7XG5pbXBvcnQgeyBJbml0aWFsaXplUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9wYXltZW50L2luaXRpYWxpemUvcmVzcG9uc2UvaW5pdGlhbGl6ZS1yZXNwb25zZS5jbGFzcyc7XG5pbXBvcnQgeyBTdW1tYXJ5RmluYW5jZURldGFpbHNBZGFwdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3BheW1lbnQvZmluYW5jZS1kZXRhaWxzL3N1bW1hcnkvc3VtbWFyeS1maW5hbmNlLWRldGFpbHMtYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIHBheVN0YXRpb240VXJsLFxuICBzYW5kYm94UGF5U3RhdGlvblVybCxcbn0gZnJvbSAnLi4vLi4vcGF5bWVudC9hY3Rpb25zL3JlZGlyZWN0L3BheS1zdGF0aW9uNC11cmwuY29uc3QnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXBwbGVQYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhZ3JlZW1lbnRGaWVsZHNOYW1lczogc3RyaW5nW10gPSBhZ3JlZW1lbnRzR3JvdXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGF5bWVudDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcjogU3ViamVjdDxBcHBsZVBheUVycm9ycz4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVncmF0aW9uVHlwZTogU3ViamVjdDxBcHBsZVBheUludGVncmF0aW9uPiA9XG4gICAgbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIHBheW1lbnRDbGllbnQ6IEFwcGxlUGF5IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcGk6IFByb21pc2U8e1xuICAgIGFwcGxlUGF5OiB0eXBlb2YgYXBwbGVQYXk7XG4gICAgY2xpZW50OiB0eXBlb2YgY2xpZW50O1xuICB9PjtcbiAgcHJpdmF0ZSBhcHBsZVBheVBhcmFtczogQXBwbGVQYXlQYXJhbXMgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBvcmRlcj86IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyBnZXQgcGF5bWVudFBhcmFtZXRlcnMoKTogQXBwbGVQYXlQYXJhbXMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsZVBheVBhcmFtcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGF5bWVudCQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBlcnJvciQoKTogT2JzZXJ2YWJsZTxBcHBsZVBheUVycm9ycz4ge1xuICAgIHJldHVybiB0aGlzLmVycm9yLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlZ3JhdGlvblR5cGUkKCk6IE9ic2VydmFibGU8QXBwbGVQYXlJbnRlZ3JhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmludGVncmF0aW9uVHlwZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KHdpbmRvd1Rva2VuKSBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogRXh0ZW5kZWRXaW5kb3csXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyQWdlbnRTZXJ2aWNlOiBVc2VyQWdlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3VtbWFyeUZpbmFuY2VEZXRhaWxzQWRhcHRlclNlcnZpY2U6IFN1bW1hcnlGaW5hbmNlRGV0YWlsc0FkYXB0ZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYXBpID0gdGhpcy5sb2FkQnJhaW50cmVlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0QXBwbGVQYXlQYXJhbXMoZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSAoZGF0YSBhcyBJbml0aWFsaXplUmVzcG9uc2UpPy5wYXltZW50Rm9ybT8uZmllbGRzO1xuICAgIGNvbnN0IHN1bW1hcnkgPSAoZGF0YSBhcyBJbml0aWFsaXplUmVzcG9uc2UpPy5wYXltZW50Rm9ybT8uc3VtbWFyeTtcblxuICAgIGlmICghZm9ybUZpZWxkcyB8fCAhc3VtbWFyeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWVsZHMgPSBmb3JtRmllbGRzLnJlZHVjZShcbiAgICAgIChhY2M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGZpZWxkKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmFncmVlbWVudEZpZWxkc05hbWVzLmluY2x1ZGVzKGZpZWxkLm5hbWUpICYmXG4gICAgICAgICAgZmllbGQuaXNWaXNpYmxlID09PSAnMSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgYWNjW2ZpZWxkLm5hbWVdID0gZmllbGQudGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjW2ZpZWxkLm5hbWVdID0gZmllbGQudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGNvbnN0IGFncmVlbWVudHMgPSB0aGlzLmFncmVlbWVudEZpZWxkc05hbWVzXG4gICAgICAubWFwKChmaWVsZE5hbWUpID0+IGZpZWxkc1tmaWVsZE5hbWUgYXMga2V5b2YgdHlwZW9mIGZpZWxkc10gYXMgc3RyaW5nKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgIHRoaXMuYXBwbGVQYXlQYXJhbXMgPSB7XG4gICAgICB0b2tlbktleTogdGhpcy5nZXRBcHBsZVRva2VuKGZvcm1GaWVsZHMpLFxuICAgICAgdG90YWxMYWJlbDogZmllbGRzWydsYWJlbF9hcHBsZVBheSddID8/ICcnLFxuICAgICAgdG90YWxBbW91bnQ6IHRoaXMuZ2V0VG90YWxBbW91bnQoc3VtbWFyeSksXG4gICAgICBjdXJyZW5jeUNvZGU6IHRoaXMuZ2V0VG90YWxDdXJyZW5jeShzdW1tYXJ5KSxcbiAgICAgIGNvdW50cnlDb2RlOiBmaWVsZHNbJ2NvdW50cnlDb2RlJ10gPz8gJycsXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogdGhpcy5nZXRKc29uVmFsdWVGcm9tRmllbGQoXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgJ21lcmNoYW50Q2FwYWJpbGl0aWVzJ1xuICAgICAgKSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiB0aGlzLmdldEpzb25WYWx1ZUZyb21GaWVsZChcbiAgICAgICAgZmllbGRzLFxuICAgICAgICAnc3VwcG9ydGVkTmV0d29ya3MnXG4gICAgICApLFxuICAgICAgYWdyZWVtZW50czogYWdyZWVtZW50cyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGluaXRMaWJyYXJ5KHRva2VuS2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBpID0gYXdhaXQgdGhpcy5hcGk7XG4gICAgICBjb25zdCBjbGllbnRJbnN0YW5jZSA9IGF3YWl0IGFwaS5jbGllbnQuY3JlYXRlKHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogdG9rZW5LZXksXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5wYXltZW50Q2xpZW50ID0gYXdhaXQgYXBpLmFwcGxlUGF5LmNyZWF0ZSh7XG4gICAgICAgIGNsaWVudDogY2xpZW50SW5zdGFuY2UsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgY29uc29sZS5lcnJvcignYXBwbGUgcGF5OiBpbml0aWFsaXplIGZhaWxlZCcsIGVycm9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRJbnRlZ3JhdGlvblR5cGUoKTtcblxuICAgIGlmICghdGhpcy5wYXltZW50Q2xpZW50IHx8ICF0aGlzLmlzRGV2aWNlQ2FwYWJsZSgpKSB7XG4gICAgICB0aGlzLmVtaXRFcnJvcihBcHBsZVBheUVycm9ycy5kZXZpY2VJc05vdENhcGFibGVFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZGlyZWN0VG9QYXltZW50UGFnZShcbiAgICBwYXJhbWV0ZXJzOiBBcHBsZVBheVBhcmFtcyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGlzU2FuZGJveD86IGJvb2xlYW5cbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByb3V0ZSA9IHBhZ2VzUm91dGVzLmdldChhcHBsZVBheUlkKTtcbiAgICBpZiAoIXJvdXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycy5tZXJjaGFudENhcGFiaWxpdGllcyksXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVycy5zdXBwb3J0ZWROZXR3b3JrcyksXG4gICAgICB0b2tlbixcbiAgICAgIGFncmVlbWVudHM6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlcnMuYWdyZWVtZW50cyksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcmRlcikge1xuICAgICAgcXVlcnkuYXBwZW5kKCdvcmRlcicsIHRoaXMub3JkZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHBheVN0YXRpb25VcmwgPSBpc1NhbmRib3ggPyBzYW5kYm94UGF5U3RhdGlvblVybCA6IHBheVN0YXRpb240VXJsO1xuICAgIHJldHVybiBgJHtwYXlTdGF0aW9uVXJsfS9lbiR7cm91dGV9PyR7cXVlcnkudG9TdHJpbmcoKX1gO1xuICB9XG5cbiAgcHVibGljIHNldE9yZGVyKGRhdGE6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gKGRhdGEgYXMgSW5pdGlhbGl6ZVJlc3BvbnNlKT8ucGF5bWVudEZvcm0/LnN1bW1hcnk7XG4gICAgaWYgKCFzdW1tYXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbmFuY2VEZXRhaWxzID1cbiAgICAgIHRoaXMuc3VtbWFyeUZpbmFuY2VEZXRhaWxzQWRhcHRlclNlcnZpY2UuZ2V0RmluYW5jZURldGFpbHMoc3VtbWFyeSk7XG5cbiAgICBpZiAoZmluYW5jZURldGFpbHM/LnB1cmNoYXNlICYmIGZpbmFuY2VEZXRhaWxzPy5maW5hbmNlKSB7XG4gICAgICBjb25zdCBjYXJ0SXRlbXMgPSBmaW5hbmNlRGV0YWlscy5jYXJ0SXRlbXM7XG4gICAgICB0aGlzLm9yZGVyID0gY2FydEl0ZW1zPy5yZWR1Y2UoKGN1cnIsIGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKGN1cnIpIHtcbiAgICAgICAgICByZXR1cm4gY3VyciArIGA7ICR7aXRlbS50aXRsZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGN1cnIgKyBpdGVtLnRpdGxlO1xuICAgICAgfSwgJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcm9jZWVkQ2hlY2tvdXQocGFyYW1ldGVycz86IEFwcGxlUGF5UGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKCFwYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnBheW1lbnRDbGllbnQgfHwgIXRoaXMuaXNEZXZpY2VDYXBhYmxlKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybignYXBwbGUgcGF5OiBkZXZpY2UgaXMgbm90IGNhcGFibGUnLCB0aGlzLnBheW1lbnRDbGllbnQpO1xuICAgICAgdGhpcy5lbWl0RXJyb3IoQXBwbGVQYXlFcnJvcnMuZGV2aWNlSXNOb3RDYXBhYmxlRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHRoaXMucGF5bWVudENsaWVudC5jcmVhdGVQYXltZW50UmVxdWVzdCh7XG4gICAgICAgIHRvdGFsOiB7XG4gICAgICAgICAgbGFiZWw6IHBhcmFtZXRlcnMudG90YWxMYWJlbCxcbiAgICAgICAgICBhbW91bnQ6IHBhcmFtZXRlcnMudG90YWxBbW91bnQsXG4gICAgICAgIH0sXG4gICAgICAgIGN1cnJlbmN5Q29kZTogcGFyYW1ldGVycy5jdXJyZW5jeUNvZGUsXG4gICAgICAgIGNvdW50cnlDb2RlOiBwYXJhbWV0ZXJzLmNvdW50cnlDb2RlLFxuICAgICAgICBtZXJjaGFudENhcGFiaWxpdGllczogcGFyYW1ldGVycy5tZXJjaGFudENhcGFiaWxpdGllcyxcbiAgICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IHBhcmFtZXRlcnMuc3VwcG9ydGVkTmV0d29ya3MsXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyB0aGlzLndpbmRvdy5BcHBsZVBheVNlc3Npb24oXG4gICAgICAgIGFwcGxlUGF5VmVyc2lvbixcbiAgICAgICAgcGF5bWVudFJlcXVlc3RcbiAgICAgICk7XG5cbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gKGV2ZW50OiB7IHZhbGlkYXRpb25VUkw6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuaW5mbygnYXBwbGUgcGF5OiBtZXJjaGFudCB2YWxpZGF0aW9uJywgZXZlbnQpO1xuICAgICAgICB0aGlzLnBheW1lbnRDbGllbnRcbiAgICAgICAgICA/LnBlcmZvcm1WYWxpZGF0aW9uKHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25VUkw6IGV2ZW50LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogcGFyYW1ldGVycz8udG90YWxMYWJlbCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKChtZXJjaGFudFNlc3Npb24pID0+IHtcbiAgICAgICAgICAgIHNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24obWVyY2hhbnRTZXNzaW9uKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2FwcGxlIHBheTogbWVyY2hhbnQgdmFsaWRhdGlvbiBlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdEVycm9yKEFwcGxlUGF5RXJyb3JzLnBheW1lbnRFcnJvcik7XG4gICAgICAgICAgICBzZXNzaW9uLmFib3J0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBzZXNzaW9uLm9ucGF5bWVudGF1dGhvcml6ZWQgPSAoZXZlbnQ6IHsgcGF5bWVudDogeyB0b2tlbjogc3RyaW5nIH0gfSkgPT4ge1xuICAgICAgICBjb25zb2xlLmluZm8oJ2FwcGxlIHBheTogcGF5bWVudCBhdXRob3JpemF0aW9uJywgZXZlbnQpO1xuICAgICAgICB0aGlzLnBheW1lbnRDbGllbnRcbiAgICAgICAgICA/LnRva2VuaXplKHtcbiAgICAgICAgICAgIHRva2VuOiBldmVudC5wYXltZW50LnRva2VuLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oKGF1dGhvcml6YXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wYXltZW50Lm5leHQoYXV0aG9yaXphdGlvblJlc3BvbnNlPy5ub25jZSA/PyAnJyk7XG4gICAgICAgICAgICBzZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh0aGlzLndpbmRvdy5BcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1MpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignYXBwbGUgcGF5OiBwYXltZW50IGF1dGhvcml6YXRpb24gZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICB0aGlzLmVtaXRFcnJvcihBcHBsZVBheUVycm9ycy5wYXltZW50RXJyb3IpO1xuICAgICAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodGhpcy53aW5kb3cuQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHNlc3Npb24ub25jYW5jZWwgPSAoZXZlbnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgdGhpcy5lbWl0RXJyb3IoQXBwbGVQYXlFcnJvcnMucGF5bWVudEVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignYXBwbGUgcGF5OiB1c2VyIGNhbmNlbCBwYXltZW50JywgZXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgc2Vzc2lvbi5iZWdpbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdhcHBsZSBwYXk6IGNoZWNrb3V0IGVycm9yJywgZXJyb3IpO1xuICAgICAgdGhpcy5lbWl0RXJyb3IoQXBwbGVQYXlFcnJvcnMucGF5bWVudEVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNEZXZpY2VDYXBhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgICAgdGhpcy53aW5kb3cuQXBwbGVQYXlTZXNzaW9uPy5zdXBwb3J0c1ZlcnNpb24oYXBwbGVQYXlWZXJzaW9uKSAmJlxuICAgICAgICAgIHRoaXMud2luZG93LkFwcGxlUGF5U2Vzc2lvbj8uY2FuTWFrZVBheW1lbnRzKClcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW5Ob25jZUZpZWxkRGF0YSh0b2tlbk5vbmNlOiBzdHJpbmcpOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IG5hbWUgPSBGaWVsZE5hbWVzLnRva2VuQXBwbGVQYXk7XG4gICAgY29uc3QgdmFsdWUgPSBidG9hKHRva2VuTm9uY2UpO1xuICAgIHJldHVybiB7IG5hbWUsIHZhbHVlIH07XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQXBwbGVQYXlQYXJhbXMoZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IHN1bW1hcnkgPSAoZGF0YSBhcyBYcHNSZXNwb25zZSk/LnN1bW1hcnk7XG4gICAgaWYgKCF0aGlzLmFwcGxlUGF5UGFyYW1zIHx8ICFzdW1tYXJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBsZVBheVBhcmFtcy50b3RhbEFtb3VudCA9IHRoaXMuZ2V0VG90YWxBbW91bnQoc3VtbWFyeSk7XG4gICAgdGhpcy5hcHBsZVBheVBhcmFtcy5jdXJyZW5jeUNvZGUgPSB0aGlzLmdldFRvdGFsQ3VycmVuY3koc3VtbWFyeSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRCcmFpbnRyZWUoKTogUHJvbWlzZTx7XG4gICAgYXBwbGVQYXk6IHR5cGVvZiBhcHBsZVBheTtcbiAgICBjbGllbnQ6IHR5cGVvZiBjbGllbnQ7XG4gIH0+IHtcbiAgICBjb25zdCBhcGkgPSBhd2FpdCBpbXBvcnQoJ2JyYWludHJlZS13ZWInKTtcblxuICAgIHJldHVybiBhcGk7XG4gIH1cblxuICBwcml2YXRlIGdldEFwcGxlVG9rZW4oZm9ybUZpZWxkczogRmllbGRbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgYXBwbGVUb2tlbkZpZWxkID0gZm9ybUZpZWxkcy5maW5kKChmaWVsZCkgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkLm5hbWUgPT09ICd0b2tlbl9rZXknO1xuICAgIH0pO1xuXG4gICAgaWYgKCFhcHBsZVRva2VuRmllbGQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYXBwbGVUb2tlbkZpZWxkLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb3RhbEFtb3VudChzdW1tYXJ5OiBYcHNSZXNwb25zZVsnc3VtbWFyeSddKTogc3RyaW5nIHtcbiAgICBjb25zdCBmaW5hbmNlID0gc3VtbWFyeT8uZmluYW5jZTtcbiAgICBjb25zdCB0b3RhbCA9IGZpbmFuY2U/LmdyYW5kX3RvdGFsPy5hbW91bnQgPz8gZmluYW5jZT8udG90YWwuYW1vdW50O1xuXG4gICAgcmV0dXJuIHRvdGFsPy50b1N0cmluZygpID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb3RhbEN1cnJlbmN5KHN1bW1hcnk6IFhwc1Jlc3BvbnNlWydzdW1tYXJ5J10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGZpbmFuY2UgPSBzdW1tYXJ5Py5maW5hbmNlO1xuICAgIHJldHVybiBmaW5hbmNlPy5ncmFuZF90b3RhbD8uY3VycmVuY3kgPz8gZmluYW5jZT8udG90YWw/LmN1cnJlbmN5ID8/ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRKc29uVmFsdWVGcm9tRmllbGQoXG4gICAgZmllbGRzOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgfSxcbiAgICBmaWVsZE5hbWU6IHN0cmluZ1xuICApOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmllbGQgPSBmaWVsZHNbZmllbGROYW1lXTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZmllbGQgPyAoSlNPTi5wYXJzZShmaWVsZCkgYXMgc3RyaW5nW10pIDogdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdEVycm9yKGVycm9yOiBBcHBsZVBheUVycm9ycyk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3IubmV4dChlcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGVtaXRJbnRlZ3JhdGlvblR5cGUoKTogdm9pZCB7XG4gICAgbGV0IGludGVncmF0aW9uVHlwZTogQXBwbGVQYXlJbnRlZ3JhdGlvbjtcblxuICAgIGlmICh0aGlzLnBheW1lbnRDbGllbnQgJiYgdGhpcy5pc0RldmljZUNhcGFibGUoKSkge1xuICAgICAgaW50ZWdyYXRpb25UeXBlID0gJ3JlZGlyZWN0JztcbiAgICB9IGVsc2Uge1xuICAgICAgaW50ZWdyYXRpb25UeXBlID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHRoaXMuaW50ZWdyYXRpb25UeXBlLm5leHQoaW50ZWdyYXRpb25UeXBlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuVXNlU2RrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgIHRoaXMudXNlckFnZW50U2VydmljZS5zYWZhcmlWZXJzaW9uICYmXG4gICAgICB0aGlzLnVzZXJBZ2VudFNlcnZpY2Uuc2FmYXJpVmVyc2lvbiA+PSBzYWZhcmlWZXJzaW9uRm9ySWZyYW1lSW50ZWdyYXRpb25cbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, filter, take } from 'rxjs';
|
|
3
|
+
import { windowToken } from '../../window.token';
|
|
4
|
+
import { AppError } from '../../exceptions-handling/errors/app-error.class';
|
|
5
|
+
import { CheckStatusActionCreator } from '../../payment/actions/check-status/check-status.action.class';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../payment-systems/payment-system-processing.service";
|
|
8
|
+
export class GooglePayService {
|
|
9
|
+
get libraryWasInitialized() {
|
|
10
|
+
return !!this.window.google;
|
|
11
|
+
}
|
|
12
|
+
get googlePaymentClientWasInitialized() {
|
|
13
|
+
return !!this.googlePaymentClient;
|
|
14
|
+
}
|
|
15
|
+
constructor(window, paymentSystemProcessingService, injector) {
|
|
16
|
+
this.window = window;
|
|
17
|
+
this.paymentSystemProcessingService = paymentSystemProcessingService;
|
|
18
|
+
this.injector = injector;
|
|
19
|
+
this.googlePayScriptUrl = 'https://pay.google.com/gp/p/js/pay.js';
|
|
20
|
+
this.readyToPay = new BehaviorSubject(null);
|
|
21
|
+
this.checkout = null;
|
|
22
|
+
this.googlePaymentClient = null;
|
|
23
|
+
}
|
|
24
|
+
get readyToPay$() {
|
|
25
|
+
return this.readyToPay.asObservable();
|
|
26
|
+
}
|
|
27
|
+
isReadyToPay() {
|
|
28
|
+
return this.readyToPay.getValue();
|
|
29
|
+
}
|
|
30
|
+
initGooglePayLibrary(data) {
|
|
31
|
+
this.isSandbox = data.isSandbox;
|
|
32
|
+
this.country = data.country;
|
|
33
|
+
if (this.libraryWasInitialized && this.googlePaymentClientWasInitialized) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (this.libraryWasInitialized && !this.googlePaymentClientWasInitialized) {
|
|
37
|
+
this.setupGooglePayClient();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.paymentSystemProcessingService.loadScript(this.googlePayScriptUrl, this.onLoadScript.bind(this));
|
|
41
|
+
}
|
|
42
|
+
checkPaymentDevice(base64checkoutData) {
|
|
43
|
+
this.paymentSystemProcessingService.initialize$
|
|
44
|
+
.pipe(filter(Boolean), take(1))
|
|
45
|
+
.subscribe(() => {
|
|
46
|
+
this.checkout =
|
|
47
|
+
this.paymentSystemProcessingService.getDecodedCheckout(base64checkoutData);
|
|
48
|
+
if (!this.checkout || !this.googlePaymentClient) {
|
|
49
|
+
throw new AppError(`Google Pay: no checkout or google payment client, checkout - ${Boolean(this.checkout).toString()}, client - ${Boolean(this.googlePaymentClient).toString()}`);
|
|
50
|
+
}
|
|
51
|
+
const checkoutData = this.checkout.request.form.fields;
|
|
52
|
+
const isReadyToPayRequest = JSON.parse(checkoutData.isReadyToPayRequest);
|
|
53
|
+
this.googlePaymentClient
|
|
54
|
+
.isReadyToPay(isReadyToPayRequest)
|
|
55
|
+
.then((response) => {
|
|
56
|
+
if (response.result && this.googlePaymentClient) {
|
|
57
|
+
this.googlePaymentClient.prefetchPaymentData(JSON.parse(checkoutData.paymentDataRequest));
|
|
58
|
+
return this.readyToPay.next(true);
|
|
59
|
+
}
|
|
60
|
+
this.readyToPay.next(false);
|
|
61
|
+
const result = response.result?.toString() ?? '';
|
|
62
|
+
const isHavePaymentClient = Boolean(this.googlePaymentClient).toString();
|
|
63
|
+
throw new Error(`Google Pay: possibly no response.result or googlePaymentClient is missing, result - ${result}, isHavePaymentClient - ${isHavePaymentClient}`);
|
|
64
|
+
})
|
|
65
|
+
.catch((error) => {
|
|
66
|
+
this.readyToPay.next(false);
|
|
67
|
+
let message = error ?? '';
|
|
68
|
+
if (error instanceof Error) {
|
|
69
|
+
message = error.message;
|
|
70
|
+
}
|
|
71
|
+
throw new AppError(`Google Pay: device is not ready to pay, ${message}`);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
async proceedCheckout() {
|
|
76
|
+
if (!this.checkout || !this.googlePaymentClient) {
|
|
77
|
+
const isHaveCheckout = !!this.checkout;
|
|
78
|
+
const isHaveClient = !!this.googlePaymentClient;
|
|
79
|
+
throw new AppError(`Google Pay: no checkout or google payment client, checkout - ${isHaveCheckout.toString()}, client - ${isHaveClient.toString()}`);
|
|
80
|
+
}
|
|
81
|
+
const checkoutData = this.checkout.request.form.fields;
|
|
82
|
+
const paymentDataRequest = JSON.parse(checkoutData.paymentDataRequest);
|
|
83
|
+
paymentDataRequest.transactionInfo = {
|
|
84
|
+
currencyCode: checkoutData.currency,
|
|
85
|
+
totalPriceStatus: 'FINAL',
|
|
86
|
+
totalPrice: checkoutData.sum,
|
|
87
|
+
countryCode: this.country,
|
|
88
|
+
};
|
|
89
|
+
const checkStatusAction = this.injector
|
|
90
|
+
.get(CheckStatusActionCreator)
|
|
91
|
+
.getActionData();
|
|
92
|
+
try {
|
|
93
|
+
const paymentData = await this.googlePaymentClient.loadPaymentData(paymentDataRequest);
|
|
94
|
+
if (!paymentData?.paymentMethodData?.tokenizationData?.token) {
|
|
95
|
+
throw new AppError('Google Pay: token is missing');
|
|
96
|
+
}
|
|
97
|
+
if (!this.checkout) {
|
|
98
|
+
throw new AppError('Google Pay: no checkout data in then');
|
|
99
|
+
}
|
|
100
|
+
let returnUrl = this.checkout.request.form.fields.returnSuccessUrl;
|
|
101
|
+
const data = this.checkout.request.form.fields;
|
|
102
|
+
returnUrl += `&cpf_number=${data.cpf_number}&descriptor=${data.descriptor}&paymentData=${JSON.stringify(paymentData)}`;
|
|
103
|
+
this.paymentSystemProcessingService.emitStatusUrl(returnUrl);
|
|
104
|
+
return checkStatusAction;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (!this.checkout) {
|
|
108
|
+
throw new AppError(`Google Pay: no checkout data`);
|
|
109
|
+
}
|
|
110
|
+
const statusCode = error
|
|
111
|
+
?.statusCode;
|
|
112
|
+
const isStatusCanceled = statusCode && this.isCancelledStatus(statusCode);
|
|
113
|
+
if (isStatusCanceled) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const returnUrl = this.checkout.request.form.fields.returnFailUrl;
|
|
117
|
+
this.paymentSystemProcessingService.emitStatusUrl(returnUrl);
|
|
118
|
+
return checkStatusAction;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
createButton(onClickHandler, buttonColor = 'default') {
|
|
122
|
+
if (!this.checkout || !this.googlePaymentClient) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
const checkoutData = this.checkout.request.form.fields;
|
|
126
|
+
const paymentDataRequest = JSON.parse(checkoutData.paymentDataRequest);
|
|
127
|
+
return this.googlePaymentClient.createButton({
|
|
128
|
+
onClick: onClickHandler,
|
|
129
|
+
allowedPaymentMethods: paymentDataRequest.allowedPaymentMethods,
|
|
130
|
+
buttonSizeMode: 'fill',
|
|
131
|
+
buttonType: 'buy',
|
|
132
|
+
buttonColor,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
setupGooglePayClient() {
|
|
136
|
+
if (!this.window.google) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const environment = this.isSandbox ? 'TEST' : 'PRODUCTION';
|
|
140
|
+
this.googlePaymentClient =
|
|
141
|
+
new this.window.google.payments.api.PaymentsClient({
|
|
142
|
+
environment,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
onLoadScript() {
|
|
146
|
+
if (!this.window.google) {
|
|
147
|
+
const retryTimeout = 1000;
|
|
148
|
+
setTimeout(() => {
|
|
149
|
+
const isAvailableGoogleClient = !!this.window.google;
|
|
150
|
+
if (isAvailableGoogleClient) {
|
|
151
|
+
this.setupGooglePayClient();
|
|
152
|
+
this.paymentSystemProcessingService.emitInitialize(true);
|
|
153
|
+
}
|
|
154
|
+
}, retryTimeout);
|
|
155
|
+
throw new AppError('Google Pay: google library now is available');
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this.setupGooglePayClient();
|
|
159
|
+
this.paymentSystemProcessingService.emitInitialize(true);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
isCancelledStatus(statusCode) {
|
|
163
|
+
return statusCode.toLowerCase() === 'canceled';
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
GooglePayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: GooglePayService, deps: [{ token: windowToken }, { token: i1.PaymentSystemProcessingService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
167
|
+
GooglePayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: GooglePayService, providedIn: 'root' });
|
|
168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: GooglePayService, decorators: [{
|
|
169
|
+
type: Injectable,
|
|
170
|
+
args: [{
|
|
171
|
+
providedIn: 'root',
|
|
172
|
+
}]
|
|
173
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
174
|
+
type: Inject,
|
|
175
|
+
args: [windowToken]
|
|
176
|
+
}] }, { type: i1.PaymentSystemProcessingService }, { type: i0.Injector }]; } });
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLXBheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvc2RrLXBheW1lbnQtc3lzdGVtcy9nb29nbGUtcGF5L2dvb2dsZS1wYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQU03RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUc1RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQzs7O0FBT3hHLE1BQU0sT0FBTyxnQkFBZ0I7SUFXM0IsSUFBWSxxQkFBcUI7UUFDL0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVksaUNBQWlDO1FBQzNDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsWUFDd0MsTUFBc0IsRUFDNUMsOEJBQThELEVBQzlELFFBQWtCO1FBRkksV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDNUMsbUNBQThCLEdBQTlCLDhCQUE4QixDQUFnQztRQUM5RCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBckJuQix1QkFBa0IsR0FBRyx1Q0FBdUMsQ0FBQztRQUU3RCxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxDQUFDO1FBRWhFLGFBQVEsR0FBNkIsSUFBSSxDQUFDO1FBQzFDLHdCQUFtQixHQUEyQixJQUFJLENBQUM7SUFpQnhELENB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QUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFMUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztnQkFFckQsSUFBSSx1QkFBdUIsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7b0JBRTVCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzFEO1lBQ0gsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBRWpCLE1BQU0sSUFBSSxRQUFRLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUNuRTthQUFNO1lBQ0wsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxRDtJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxVQUFrQjtRQUMxQyxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxVQUFVLENBQUM7SUFDakQsQ0FBQzs7NkdBcFBVLGdCQUFnQixrQkFvQmpCLFdBQVc7aUhBcEJWLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBcUJJLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEdvb2dsZVBheUNoZWNrb3V0IH0gZnJvbSAnLi9nb29nbGUtcGF5LWNoZWNrb3V0LmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBHb29nbGVQYXlDbGllbnQsXG4gIEdvb2dsZVBheVBheW1lbnRSZXF1ZXN0LFxufSBmcm9tICcuL2dvb2dsZS1wYXktbGlicmFyeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIE9ic2VydmFibGUsIHRha2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBheW1lbnRTeXN0ZW1Qcm9jZXNzaW5nU2VydmljZSB9IGZyb20gJy4uL3BheW1lbnQtc3lzdGVtcy9wYXltZW50LXN5c3RlbS1wcm9jZXNzaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgd2luZG93VG9rZW4gfSBmcm9tICcuLi8uLi93aW5kb3cudG9rZW4nO1xuaW1wb3J0IHsgRXh0ZW5kZWRXaW5kb3cgfSBmcm9tICcuLi8uLi9leHRlbmRlZC13aW5kb3cuaW50ZXJmYWNlJztcbmltcG9ydCB7IEFwcEVycm9yIH0gZnJvbSAnLi4vLi4vZXhjZXB0aW9ucy1oYW5kbGluZy9lcnJvcnMvYXBwLWVycm9yLmNsYXNzJztcbmltcG9ydCB7IEdvb2dsZVBheUluaXRQYXJhbXMgfSBmcm9tICcuL2dvb2dsZS1wYXktaW5pdC1wYXJhbXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5leHRBY3Rpb24gfSBmcm9tICcuLi8uLi9wYXltZW50L2FjdGlvbnMvbmV4dC1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENoZWNrU3RhdHVzQWN0aW9uQ3JlYXRvciB9IGZyb20gJy4uLy4uL3BheW1lbnQvYWN0aW9ucy9jaGVjay1zdGF0dXMvY2hlY2stc3RhdHVzLmFjdGlvbi5jbGFzcyc7XG5pbXBvcnQgeyBDaGVja1N0YXR1c0FjdGlvbiB9IGZyb20gJy4uLy4uL3BheW1lbnQvYWN0aW9ucy9jaGVjay1zdGF0dXMvY2hlY2stc3RhdHVzLmFjdGlvbi50eXBlJztcbmltcG9ydCB7IEdvb2dsZVBheUJ1dHRvbkNvbG9yVHlwZSB9IGZyb20gJy4vZ29vZ2xlLXBheS1idXR0b24tY29sb3IudHlwZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHb29nbGVQYXlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBnb29nbGVQYXlTY3JpcHRVcmwgPSAnaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qcyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZWFkeVRvUGF5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSBjaGVja291dDogR29vZ2xlUGF5Q2hlY2tvdXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBnb29nbGVQYXltZW50Q2xpZW50OiBHb29nbGVQYXlDbGllbnQgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGlzU2FuZGJveCE6IGJvb2xlYW47XG4gIHByaXZhdGUgY291bnRyeSE6IHN0cmluZztcblxuICBwcml2YXRlIGdldCBsaWJyYXJ5V2FzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy53aW5kb3cuZ29vZ2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZ29vZ2xlUGF5bWVudENsaWVudFdhc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ29vZ2xlUGF5bWVudENsaWVudDtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KHdpbmRvd1Rva2VuKSBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogRXh0ZW5kZWRXaW5kb3csXG4gICAgcHVibGljIHJlYWRvbmx5IHBheW1lbnRTeXN0ZW1Qcm9jZXNzaW5nU2VydmljZTogUGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlLFxuICAgIHB1YmxpYyByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgcmVhZHlUb1BheSQoKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnJlYWR5VG9QYXkuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgaXNSZWFkeVRvUGF5KCk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkeVRvUGF5LmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdEdvb2dsZVBheUxpYnJhcnkoZGF0YTogR29vZ2xlUGF5SW5pdFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMuaXNTYW5kYm94ID0gZGF0YS5pc1NhbmRib3g7XG4gICAgdGhpcy5jb3VudHJ5ID0gZGF0YS5jb3VudHJ5O1xuXG4gICAgaWYgKHRoaXMubGlicmFyeVdhc0luaXRpYWxpemVkICYmIHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudFdhc0luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGlicmFyeVdhc0luaXRpYWxpemVkICYmICF0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRXYXNJbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5zZXR1cEdvb2dsZVBheUNsaWVudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlLmxvYWRTY3JpcHQoXG4gICAgICB0aGlzLmdvb2dsZVBheVNjcmlwdFVybCxcbiAgICAgIHRoaXMub25Mb2FkU2NyaXB0LmJpbmQodGhpcylcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNoZWNrUGF5bWVudERldmljZShiYXNlNjRjaGVja291dERhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlLmluaXRpYWxpemUkXG4gICAgICAucGlwZShmaWx0ZXIoQm9vbGVhbiksIHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dCA9XG4gICAgICAgICAgdGhpcy5wYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UuZ2V0RGVjb2RlZENoZWNrb3V0PEdvb2dsZVBheUNoZWNrb3V0PihcbiAgICAgICAgICAgIGJhc2U2NGNoZWNrb3V0RGF0YVxuICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrb3V0IHx8ICF0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoXG4gICAgICAgICAgICBgR29vZ2xlIFBheTogbm8gY2hlY2tvdXQgb3IgZ29vZ2xlIHBheW1lbnQgY2xpZW50LCBjaGVja291dCAtICR7Qm9vbGVhbihcbiAgICAgICAgICAgICAgdGhpcy5jaGVja291dFxuICAgICAgICAgICAgKS50b1N0cmluZygpfSwgY2xpZW50IC0gJHtCb29sZWFuKFxuICAgICAgICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRcbiAgICAgICAgICAgICkudG9TdHJpbmcoKX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrb3V0RGF0YSA9IHRoaXMuY2hlY2tvdXQucmVxdWVzdC5mb3JtLmZpZWxkcztcbiAgICAgICAgY29uc3QgaXNSZWFkeVRvUGF5UmVxdWVzdCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgY2hlY2tvdXREYXRhLmlzUmVhZHlUb1BheVJlcXVlc3RcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnRcbiAgICAgICAgICAuaXNSZWFkeVRvUGF5KGlzUmVhZHlUb1BheVJlcXVlc3QpXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0ICYmIHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgICAgICAgICB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQucHJlZmV0Y2hQYXltZW50RGF0YShcbiAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGNoZWNrb3V0RGF0YS5wYXltZW50RGF0YVJlcXVlc3QpXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZHlUb1BheS5uZXh0KHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlYWR5VG9QYXkubmV4dChmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ/LnRvU3RyaW5nKCkgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBpc0hhdmVQYXltZW50Q2xpZW50ID0gQm9vbGVhbihcbiAgICAgICAgICAgICAgdGhpcy5nb29nbGVQYXltZW50Q2xpZW50XG4gICAgICAgICAgICApLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEdvb2dsZSBQYXk6IHBvc3NpYmx5IG5vIHJlc3BvbnNlLnJlc3VsdCBvciBnb29nbGVQYXltZW50Q2xpZW50IGlzIG1pc3NpbmcsIHJlc3VsdCAtICR7cmVzdWx0fSwgaXNIYXZlUGF5bWVudENsaWVudCAtICR7aXNIYXZlUGF5bWVudENsaWVudH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWFkeVRvUGF5Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IChlcnJvciBhcyBzdHJpbmcpID8/ICcnO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IEFwcEVycm9yKFxuICAgICAgICAgICAgICBgR29vZ2xlIFBheTogZGV2aWNlIGlzIG5vdCByZWFkeSB0byBwYXksICR7bWVzc2FnZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJvY2VlZENoZWNrb3V0KCk6IFByb21pc2U8Q2hlY2tTdGF0dXNBY3Rpb24gfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLmNoZWNrb3V0IHx8ICF0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQpIHtcbiAgICAgIGNvbnN0IGlzSGF2ZUNoZWNrb3V0ID0gISF0aGlzLmNoZWNrb3V0O1xuICAgICAgY29uc3QgaXNIYXZlQ2xpZW50ID0gISF0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQ7XG5cbiAgICAgIHRocm93IG5ldyBBcHBFcnJvcihcbiAgICAgICAgYEdvb2dsZSBQYXk6IG5vIGNoZWNrb3V0IG9yIGdvb2dsZSBwYXltZW50IGNsaWVudCwgY2hlY2tvdXQgLSAke2lzSGF2ZUNoZWNrb3V0LnRvU3RyaW5nKCl9LCBjbGllbnQgLSAke2lzSGF2ZUNsaWVudC50b1N0cmluZygpfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tvdXREYXRhID0gdGhpcy5jaGVja291dC5yZXF1ZXN0LmZvcm0uZmllbGRzO1xuXG4gICAgY29uc3QgcGF5bWVudERhdGFSZXF1ZXN0ID0gSlNPTi5wYXJzZShcbiAgICAgIGNoZWNrb3V0RGF0YS5wYXltZW50RGF0YVJlcXVlc3RcbiAgICApIGFzIEdvb2dsZVBheVBheW1lbnRSZXF1ZXN0O1xuXG4gICAgcGF5bWVudERhdGFSZXF1ZXN0LnRyYW5zYWN0aW9uSW5mbyA9IHtcbiAgICAgIGN1cnJlbmN5Q29kZTogY2hlY2tvdXREYXRhLmN1cnJlbmN5LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogJ0ZJTkFMJyxcbiAgICAgIHRvdGFsUHJpY2U6IGNoZWNrb3V0RGF0YS5zdW0sXG4gICAgICBjb3VudHJ5Q29kZTogdGhpcy5jb3VudHJ5LFxuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1N0YXR1c0FjdGlvbjogTmV4dEFjdGlvbiA9IHRoaXMuaW5qZWN0b3JcbiAgICAgIC5nZXQ8Q2hlY2tTdGF0dXNBY3Rpb25DcmVhdG9yPihDaGVja1N0YXR1c0FjdGlvbkNyZWF0b3IpXG4gICAgICAuZ2V0QWN0aW9uRGF0YSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgdGhpcy5nb29nbGVQYXltZW50Q2xpZW50LmxvYWRQYXltZW50RGF0YShcbiAgICAgICAgcGF5bWVudERhdGFSZXF1ZXN0XG4gICAgICApO1xuXG4gICAgICBpZiAoIXBheW1lbnREYXRhPy5wYXltZW50TWV0aG9kRGF0YT8udG9rZW5pemF0aW9uRGF0YT8udG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEFwcEVycm9yKCdHb29nbGUgUGF5OiB0b2tlbiBpcyBtaXNzaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5jaGVja291dCkge1xuICAgICAgICB0aHJvdyBuZXcgQXBwRXJyb3IoJ0dvb2dsZSBQYXk6IG5vIGNoZWNrb3V0IGRhdGEgaW4gdGhlbicpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmV0dXJuVXJsID0gdGhpcy5jaGVja291dC5yZXF1ZXN0LmZvcm0uZmllbGRzLnJldHVyblN1Y2Nlc3NVcmw7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoZWNrb3V0LnJlcXVlc3QuZm9ybS5maWVsZHM7XG4gICAgICByZXR1cm5VcmwgKz0gYCZjcGZfbnVtYmVyPSR7ZGF0YS5jcGZfbnVtYmVyfSZkZXNjcmlwdG9yPSR7XG4gICAgICAgIGRhdGEuZGVzY3JpcHRvclxuICAgICAgfSZwYXltZW50RGF0YT0ke0pTT04uc3RyaW5naWZ5KHBheW1lbnREYXRhKX1gO1xuXG4gICAgICB0aGlzLnBheW1lbnRTeXN0ZW1Qcm9jZXNzaW5nU2VydmljZS5lbWl0U3RhdHVzVXJsKHJldHVyblVybCk7XG5cbiAgICAgIHJldHVybiBjaGVja1N0YXR1c0FjdGlvbjtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgaWYgKCF0aGlzLmNoZWNrb3V0KSB7XG4gICAgICAgIHRocm93IG5ldyBBcHBFcnJvcihgR29vZ2xlIFBheTogbm8gY2hlY2tvdXQgZGF0YWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0dXNDb2RlID0gKGVycm9yIGFzIHVua25vd24gYXMgeyBzdGF0dXNDb2RlPzogc3RyaW5nIH0pXG4gICAgICAgID8uc3RhdHVzQ29kZTtcblxuICAgICAgY29uc3QgaXNTdGF0dXNDYW5jZWxlZCA9IHN0YXR1c0NvZGUgJiYgdGhpcy5pc0NhbmNlbGxlZFN0YXR1cyhzdGF0dXNDb2RlKTtcblxuICAgICAgaWYgKGlzU3RhdHVzQ2FuY2VsZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJldHVyblVybCA9IHRoaXMuY2hlY2tvdXQucmVxdWVzdC5mb3JtLmZpZWxkcy5yZXR1cm5GYWlsVXJsO1xuXG4gICAgICB0aGlzLnBheW1lbnRTeXN0ZW1Qcm9jZXNzaW5nU2VydmljZS5lbWl0U3RhdHVzVXJsKHJldHVyblVybCk7XG5cbiAgICAgIHJldHVybiBjaGVja1N0YXR1c0FjdGlvbjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQnV0dG9uKFxuICAgIG9uQ2xpY2tIYW5kbGVyOiAoKSA9PiB2b2lkLFxuICAgIGJ1dHRvbkNvbG9yOiBHb29nbGVQYXlCdXR0b25Db2xvclR5cGUgPSAnZGVmYXVsdCdcbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tvdXQgfHwgIXRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tvdXREYXRhID0gdGhpcy5jaGVja291dC5yZXF1ZXN0LmZvcm0uZmllbGRzO1xuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IEpTT04ucGFyc2UoXG4gICAgICBjaGVja291dERhdGEucGF5bWVudERhdGFSZXF1ZXN0XG4gICAgKSBhcyBHb29nbGVQYXlQYXltZW50UmVxdWVzdDtcblxuICAgIHJldHVybiB0aGlzLmdvb2dsZVBheW1lbnRDbGllbnQuY3JlYXRlQnV0dG9uKHtcbiAgICAgIG9uQ2xpY2s6IG9uQ2xpY2tIYW5kbGVyLFxuICAgICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBwYXltZW50RGF0YVJlcXVlc3QuYWxsb3dlZFBheW1lbnRNZXRob2RzLFxuICAgICAgYnV0dG9uU2l6ZU1vZGU6ICdmaWxsJyxcbiAgICAgIGJ1dHRvblR5cGU6ICdidXknLFxuICAgICAgYnV0dG9uQ29sb3IsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwR29vZ2xlUGF5Q2xpZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy53aW5kb3cuZ29vZ2xlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZW52aXJvbm1lbnQgPSB0aGlzLmlzU2FuZGJveCA/ICdURVNUJyA6ICdQUk9EVUNUSU9OJztcblxuICAgIHRoaXMuZ29vZ2xlUGF5bWVudENsaWVudCA9XG4gICAgICBuZXcgdGhpcy53aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uTG9hZFNjcmlwdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMud2luZG93Lmdvb2dsZSkge1xuICAgICAgY29uc3QgcmV0cnlUaW1lb3V0ID0gMTAwMDtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQXZhaWxhYmxlR29vZ2xlQ2xpZW50ID0gISF0aGlzLndpbmRvdy5nb29nbGU7XG5cbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlR29vZ2xlQ2xpZW50KSB7XG4gICAgICAgICAgdGhpcy5zZXR1cEdvb2dsZVBheUNsaWVudCgpO1xuXG4gICAgICAgICAgdGhpcy5wYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2UuZW1pdEluaXRpYWxpemUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHJldHJ5VGltZW91dCk7XG5cbiAgICAgIHRocm93IG5ldyBBcHBFcnJvcignR29vZ2xlIFBheTogZ29vZ2xlIGxpYnJhcnkgbm93IGlzIGF2YWlsYWJsZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldHVwR29vZ2xlUGF5Q2xpZW50KCk7XG5cbiAgICAgIHRoaXMucGF5bWVudFN5c3RlbVByb2Nlc3NpbmdTZXJ2aWNlLmVtaXRJbml0aWFsaXplKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNDYW5jZWxsZWRTdGF0dXMoc3RhdHVzQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXR1c0NvZGUudG9Mb3dlckNhc2UoKSA9PT0gJ2NhbmNlbGVkJztcbiAgfVxufVxuIl19
|
package/esm2020/lib/core/sdk-payment-systems/payment-systems/payment-system-processing.service.mjs
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { filter } from 'rxjs/operators';
|
|
4
|
+
import { windowToken } from '../../window.token';
|
|
5
|
+
import { AppError } from '../../exceptions-handling/errors/app-error.class';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class PaymentSystemProcessingService {
|
|
8
|
+
constructor(window) {
|
|
9
|
+
this.window = window;
|
|
10
|
+
this.statusUrl = new BehaviorSubject('');
|
|
11
|
+
this.initialize = new BehaviorSubject(false);
|
|
12
|
+
}
|
|
13
|
+
get initialize$() {
|
|
14
|
+
return this.initialize.asObservable();
|
|
15
|
+
}
|
|
16
|
+
get status$() {
|
|
17
|
+
return this.statusUrl.asObservable().pipe(filter((status) => !!status));
|
|
18
|
+
}
|
|
19
|
+
emitStatusUrl(statusUrl) {
|
|
20
|
+
this.statusUrl.next(statusUrl);
|
|
21
|
+
}
|
|
22
|
+
emitInitialize(isInitialized) {
|
|
23
|
+
this.initialize.next(isInitialized);
|
|
24
|
+
}
|
|
25
|
+
getDecodedCheckout(base64checkoutData) {
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(atob(base64checkoutData));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
throw new AppError('load script service: decode error');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
loadScript(url, onLoad, addScriptCustomAttributes) {
|
|
34
|
+
this.initialize.next(false);
|
|
35
|
+
let script = this.window.document.createElement('script');
|
|
36
|
+
script.async = true;
|
|
37
|
+
script.src = url;
|
|
38
|
+
if (addScriptCustomAttributes) {
|
|
39
|
+
script = addScriptCustomAttributes(script);
|
|
40
|
+
}
|
|
41
|
+
this.window.document.body.append(script);
|
|
42
|
+
script.onload = () => {
|
|
43
|
+
try {
|
|
44
|
+
onLoad();
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
let message = error;
|
|
48
|
+
if (error instanceof Error) {
|
|
49
|
+
message = error.message;
|
|
50
|
+
}
|
|
51
|
+
throw new AppError(`Pages: error during script onload handler: ${message}, url - ${url}`);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
script.onerror = (event, source, lineno, colno, error) => {
|
|
55
|
+
const errorMessage = error ? error.message : '';
|
|
56
|
+
let eventMessage = event;
|
|
57
|
+
if (typeof event === 'object') {
|
|
58
|
+
eventMessage = JSON.stringify(event);
|
|
59
|
+
}
|
|
60
|
+
throw new AppError(`Pages: error during script onerror handler:
|
|
61
|
+
url - ${url},
|
|
62
|
+
event - ${eventMessage},
|
|
63
|
+
source - ${source ?? ''},
|
|
64
|
+
lineno - ${lineno ?? ''},
|
|
65
|
+
colno - ${colno ?? ''},
|
|
66
|
+
error - ${errorMessage}`);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
isInitialized() {
|
|
70
|
+
return this.initialize.getValue();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
PaymentSystemProcessingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentSystemProcessingService, deps: [{ token: windowToken }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
74
|
+
PaymentSystemProcessingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentSystemProcessingService, providedIn: 'root' });
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PaymentSystemProcessingService, decorators: [{
|
|
76
|
+
type: Injectable,
|
|
77
|
+
args: [{
|
|
78
|
+
providedIn: 'root',
|
|
79
|
+
}]
|
|
80
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
81
|
+
type: Inject,
|
|
82
|
+
args: [windowToken]
|
|
83
|
+
}] }]; } });
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC1zeXN0ZW0tcHJvY2Vzc2luZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcGF5bWVudC1jbGllbnQtY29yZS9zcmMvbGliL2NvcmUvc2RrLXBheW1lbnQtc3lzdGVtcy9wYXltZW50LXN5c3RlbXMvcGF5bWVudC1zeXN0ZW0tcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0RBQWtELENBQUM7O0FBTzVFLE1BQU0sT0FBTyw4QkFBOEI7SUFLekMsWUFDd0MsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFMN0MsY0FBUyxHQUE0QixJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3RCxlQUFVLEdBQ3pCLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBSW5DLENBQUM7SUFFSixJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTSxhQUFhLENBQUMsU0FBaUI7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxhQUFzQjtRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sa0JBQWtCLENBQ3ZCLGtCQUEwQjtRQUUxQixJQUFJO1lBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFNLENBQUM7U0FDbEQ7UUFBQyxPQUFPLEtBQWMsRUFBRTtZQUN2QixNQUFNLElBQUksUUFBUSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUNmLEdBQVcsRUFDWCxNQUFrQixFQUNsQix5QkFBNEU7UUFFNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxNQUFNLEdBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBRWpCLElBQUkseUJBQXlCLEVBQUU7WUFDN0IsTUFBTSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJO2dCQUNGLE1BQU0sRUFBRSxDQUFDO2FBQ1Y7WUFBQyxPQUFPLEtBQWMsRUFBRTtnQkFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUVwQixJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7b0JBQzFCLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2lCQUN6QjtnQkFDRCxNQUFNLElBQUksUUFBUSxDQUNoQiw4Q0FDRSxPQUNGLFdBQVcsR0FBRyxFQUFFLENBQ2pCLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FDZixLQUFxQixFQUNyQixNQUFlLEVBQ2YsTUFBZSxFQUNmLEtBQWMsRUFDZCxLQUFhLEVBQ2IsRUFBRTtZQUNGLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRWhELElBQUksWUFBWSxHQUFHLEtBQWUsQ0FBQztZQUVuQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEM7WUFFRCxNQUFNLElBQUksUUFBUSxDQUNoQjtnQkFDUSxHQUFHO2tCQUNELFlBQVk7bUJBQ1gsTUFBTSxJQUFJLEVBQUU7bUJBQ1osTUFBTSxJQUFJLEVBQUU7a0JBQ2IsS0FBSyxJQUFJLEVBQUU7a0JBQ1gsWUFBWSxFQUFFLENBQ3pCLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsQ0FBQzs7MkhBbkdVLDhCQUE4QixrQkFNL0IsV0FBVzsrSEFOViw4QkFBOEIsY0FGN0IsTUFBTTsyRkFFUCw4QkFBOEI7a0JBSDFDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPSSxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgR29vZ2xlUGF5Q2hlY2tvdXQgfSBmcm9tICcuLi9nb29nbGUtcGF5L2dvb2dsZS1wYXktY2hlY2tvdXQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEV4dGVuZGVkV2luZG93IH0gZnJvbSAnLi4vLi4vZXh0ZW5kZWQtd2luZG93LmludGVyZmFjZSc7XG5pbXBvcnQgeyB3aW5kb3dUb2tlbiB9IGZyb20gJy4uLy4uL3dpbmRvdy50b2tlbic7XG5pbXBvcnQgeyBBcHBFcnJvciB9IGZyb20gJy4uLy4uL2V4Y2VwdGlvbnMtaGFuZGxpbmcvZXJyb3JzL2FwcC1lcnJvci5jbGFzcyc7XG5cbmV4cG9ydCB0eXBlIENvbW1vbkNoZWNrb3V0ID0gR29vZ2xlUGF5Q2hlY2tvdXQ7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50U3lzdGVtUHJvY2Vzc2luZ1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXR1c1VybDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbml0aWFsaXplOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KHdpbmRvd1Rva2VuKSBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogRXh0ZW5kZWRXaW5kb3dcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXQgaW5pdGlhbGl6ZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdHVzJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1c1VybC5hc09ic2VydmFibGUoKS5waXBlKGZpbHRlcigoc3RhdHVzKSA9PiAhIXN0YXR1cykpO1xuICB9XG5cbiAgcHVibGljIGVtaXRTdGF0dXNVcmwoc3RhdHVzVXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXR1c1VybC5uZXh0KHN0YXR1c1VybCk7XG4gIH1cblxuICBwdWJsaWMgZW1pdEluaXRpYWxpemUoaXNJbml0aWFsaXplZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZS5uZXh0KGlzSW5pdGlhbGl6ZWQpO1xuICB9XG5cbiAgcHVibGljIGdldERlY29kZWRDaGVja291dDxUIGV4dGVuZHMgQ29tbW9uQ2hlY2tvdXQ+KFxuICAgIGJhc2U2NGNoZWNrb3V0RGF0YTogc3RyaW5nXG4gICk6IFQge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShhdG9iKGJhc2U2NGNoZWNrb3V0RGF0YSkpIGFzIFQ7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBBcHBFcnJvcignbG9hZCBzY3JpcHQgc2VydmljZTogZGVjb2RlIGVycm9yJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGxvYWRTY3JpcHQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb25Mb2FkOiAoKSA9PiB2b2lkLFxuICAgIGFkZFNjcmlwdEN1c3RvbUF0dHJpYnV0ZXM/OiAoc2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCkgPT4gSFRNTFNjcmlwdEVsZW1lbnRcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplLm5leHQoZmFsc2UpO1xuICAgIGxldCBzY3JpcHQ6IEhUTUxTY3JpcHRFbGVtZW50ID1cbiAgICAgIHRoaXMud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBzY3JpcHQuc3JjID0gdXJsO1xuXG4gICAgaWYgKGFkZFNjcmlwdEN1c3RvbUF0dHJpYnV0ZXMpIHtcbiAgICAgIHNjcmlwdCA9IGFkZFNjcmlwdEN1c3RvbUF0dHJpYnV0ZXMoc2NyaXB0KTtcbiAgICB9XG5cbiAgICB0aGlzLndpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZChzY3JpcHQpO1xuXG4gICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9uTG9hZCgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBlcnJvcjtcblxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBBcHBFcnJvcihcbiAgICAgICAgICBgUGFnZXM6IGVycm9yIGR1cmluZyBzY3JpcHQgb25sb2FkIGhhbmRsZXI6ICR7XG4gICAgICAgICAgICBtZXNzYWdlIGFzIHN0cmluZ1xuICAgICAgICAgIH0sIHVybCAtICR7dXJsfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2NyaXB0Lm9uZXJyb3IgPSAoXG4gICAgICBldmVudDogRXZlbnQgfCBzdHJpbmcsXG4gICAgICBzb3VyY2U/OiBzdHJpbmcsXG4gICAgICBsaW5lbm8/OiBudW1iZXIsXG4gICAgICBjb2xubz86IG51bWJlcixcbiAgICAgIGVycm9yPzogRXJyb3JcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgICBsZXQgZXZlbnRNZXNzYWdlID0gZXZlbnQgYXMgc3RyaW5nO1xuXG4gICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBldmVudE1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShldmVudCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBBcHBFcnJvcihcbiAgICAgICAgYFBhZ2VzOiBlcnJvciBkdXJpbmcgc2NyaXB0IG9uZXJyb3IgaGFuZGxlcjpcbiAgICAgICAgdXJsIC0gJHt1cmx9LFxuICAgICAgICBldmVudCAtICR7ZXZlbnRNZXNzYWdlfSxcbiAgICAgICAgc291cmNlIC0gJHtzb3VyY2UgPz8gJyd9LFxuICAgICAgICBsaW5lbm8gLSAke2xpbmVubyA/PyAnJ30sXG4gICAgICAgIGNvbG5vIC0gJHtjb2xubyA/PyAnJ30sXG4gICAgICAgIGVycm9yIC0gJHtlcnJvck1lc3NhZ2V9YFxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZS5nZXRWYWx1ZSgpO1xuICB9XG59XG4iXX0=
|