From df125fa9ce236310677d086579337b4f364111e8 Mon Sep 17 00:00:00 2001 From: Benjamin Rosenberger Date: Tue, 7 Jan 2025 18:47:05 +0100 Subject: [PATCH] :hammer: refactor sentry frontend scripts to use secureRenderer --- .../templates/script/logrocket_init.phtml | 60 +++++++ view/frontend/templates/script/sentry.phtml | 149 +++--------------- .../templates/script/sentry_init.phtml | 57 +++++++ 3 files changed, 136 insertions(+), 130 deletions(-) create mode 100644 view/frontend/templates/script/logrocket_init.phtml create mode 100644 view/frontend/templates/script/sentry_init.phtml diff --git a/view/frontend/templates/script/logrocket_init.phtml b/view/frontend/templates/script/logrocket_init.phtml new file mode 100644 index 0000000..31d1ffc --- /dev/null +++ b/view/frontend/templates/script/logrocket_init.phtml @@ -0,0 +1,60 @@ + + + +useLogRocketIdentify()): ?> + + define('customerData', + ['jquery', 'Magento_Customer/js/customer-data'], + function ($, customerData) { + 'use strict'; + + var getCustomerInfo = function () { + var customer = customerData.get('customer'); + + return customer(); + }; + + var isLoggedIn = function (customerInfo) { + return customerInfo && customerInfo.firstname; + }; + + return function () { + var deferred = $.Deferred(); + var customerInfo = getCustomerInfo(); + + if (customerInfo && customerInfo.data_id) { + deferred.resolve(isLoggedIn(customerInfo), customerInfo); + } else { + customerData.reload(['customer'], false) + .done(function () { + customerInfo = getCustomerInfo() + deferred.resolve(isLoggedIn(customerInfo), customerInfo); + }) + .fail(function () { + deferred.reject(); + }); + } + + return deferred; + }; + + } + ); + + require(["customerData"], function (customerData) { + + customerData().then(function (loggedIn, data) { + if (!loggedIn) { + return; + } + + LogRocket.identify(data.websiteId, { + name: data.fullname, + email: data.email + }); + + }); + }); + + + diff --git a/view/frontend/templates/script/sentry.phtml b/view/frontend/templates/script/sentry.phtml index 34eb70d..3ed0cf7 100644 --- a/view/frontend/templates/script/sentry.phtml +++ b/view/frontend/templates/script/sentry.phtml @@ -1,8 +1,7 @@ canUseScriptTag($block->getNameInLayout())) { return; } @@ -21,139 +20,29 @@ $bundleFile .= '.min.js'; $remoteFile = sprintf( 'https://browser.sentry-cdn.com/%s/%s', - $escaper->escapeHtmlAttr($block->getJsSdkVersion()), + $block->escapeHtmlAttr($block->getJsSdkVersion()), $bundleFile ); ?> - - +renderTag('script', ['src' => $remoteFile, 'crossorigin' => 'anonymous']) ?> +renderTag('script', [], $block->getLayout()->createBlock(\JustBetter\Sentry\Block\SentryScript::class) + ->setTemplate('JustBetter_Sentry::script/sentry_init.phtml') + ->toHtml()); ?> useLogRocket()): ?> - - - + });' + ); ?> + renderTag('script', [], $block->getLayout()->createBlock(\JustBetter\Sentry\Block\SentryScript::class) + ->setTemplate('JustBetter_Sentry::script/logrocket_init.phtml') + ->toHtml()); ?> diff --git a/view/frontend/templates/script/sentry_init.phtml b/view/frontend/templates/script/sentry_init.phtml new file mode 100644 index 0000000..8740d4e --- /dev/null +++ b/view/frontend/templates/script/sentry_init.phtml @@ -0,0 +1,57 @@ + +if (typeof Sentry !== 'undefined') { + Sentry.init({ + dsn: 'escapeUrl(trim($block->getDSN())) ?>', + release: 'escapeHtml(trim($block->getVersion())) ?>', + environment: 'escapeHtml(trim($block->getEnvironment())) ?>', + integrations: [ + isTracingEnabled()): ?> + Sentry.browserTracingIntegration({ + enableInp: true, + }), + + useSessionReplay()): ?> + Sentry.replayIntegration({ + blockAllMedia: escapeHtml($block->getReplayBlockMedia() ? 'true' : 'false') ?>, + maskAllText: escapeHtml($block->getReplayMaskText() ? 'true' : 'false') ?>, + }) + + ], + isTracingEnabled()): ?> + tracesSampleRate: escapeHtml($block->getTracingSampleRate()) ?>, + + useSessionReplay()): ?> + replaysSessionSampleRate: escapeHtml($block->getReplaySessionSampleRate()) ?>, + replaysOnErrorSampleRate: escapeHtml($block->getReplayErrorSampleRate()) ?>, + + ignoreErrors: getIgnoreJsErrors() ?>, + stripStaticContentVersion() || $block->stripStoreCode()): ?> + beforeSend: function(event) { + event.exception.values.map(function (value) { + if (value.stacktrace === undefined || ! value.stacktrace) { + return value; + } + + stripStaticContentVersion()): ?> + value.stacktrace.frames.map(function (frame) { + frame.filename = frame.filename.replace(/version[0-9]{10}\//, ''); + return frame; + }); + + + stripStoreCode()): ?> + value.stacktrace.frames.map(function (frame) { + + frame.filename = frame.filename.replace('/escapeHtml($block->getStoreCode()); ?>/', '/'); + + return frame; + }); + + + return value; + }); + return event; + } + + }); +}