diff --git a/vendor/magento/module-customer-segment/Observer/ProcessEventGenericObserver.php b/vendor/magento/module-customer-segment/Observer/ProcessEventGenericObserver.php
new file mode 100644
index 00000000000..34569c7b1e5
--- /dev/null
+++ b/vendor/magento/module-customer-segment/Observer/ProcessEventGenericObserver.php
@@ -0,0 +1,140 @@
+storeManager = $storeManager;
+ $this->customerSegmentCustomer = $customerSegmentCustomer;
+ $this->customerRegistry = $customerRegistry;
+ $this->userContext = $userContext;
+ $this->customerFactory = $customerFactory;
+ $this->eventDataObjectNames = $eventDataObjectNames;
+ }
+
+ /**
+ * Match customer segments on supplied event for currently logged in customer or visitor and current website.
+ *
+ * @param Observer $observer
+ * @return void
+ */
+ public function execute(Observer $observer)
+ {
+ $customer = null;
+ $customerId = null;
+ $eventName = $observer->getEvent()->getName();
+ $dataObjectName = $this->eventDataObjectNames[$eventName] ?? self::DEFAULT_EVENT_DATA_OBJECT_NAME;
+ $dataObject = $observer->getData($dataObjectName);
+ if ($dataObject !== null) {
+ if ($dataObject instanceof Customer) {
+ $customer = $dataObject;
+ } elseif ($dataObject instanceof CustomerInterface) {
+ $customerId = (int) $dataObject->getId();
+ } elseif ($dataObject instanceof AbstractModel) {
+ $customerId = (int) $dataObject->getCustomerId();
+ }
+ }
+ if ($customerId) {
+ $customer = $this->customerRegistry->retrieve($customerId);
+ }
+ if ($customer === null) {
+ $customer = $this->getAuthenticatedCustomer();
+ }
+
+ $this->customerSegmentCustomer->processEvent(
+ $eventName,
+ $customer,
+ $this->storeManager->getStore()->getWebsite()
+ );
+ }
+
+ /**
+ * Get current authenticated customer model
+ *
+ * @return Customer
+ * @throws NoSuchEntityException
+ */
+ private function getAuthenticatedCustomer(): Customer
+ {
+ if ($this->userContext->getUserId()
+ && $this->userContext->getUserType() === UserContextInterface::USER_TYPE_CUSTOMER
+ ) {
+ $customer = $this->customerRegistry->retrieve($this->userContext->getUserId());
+ } else {
+ $customer = $this->customerFactory->create();
+ }
+ return $customer;
+ }
+}
diff --git a/vendor/magento/module-customer-segment/etc/di.xml b/vendor/magento/module-customer-segment/etc/di.xml
index ed271602e8b..c4af19facfb 100644
--- a/vendor/magento/module-customer-segment/etc/di.xml
+++ b/vendor/magento/module-customer-segment/etc/di.xml
@@ -24,4 +24,11 @@
+
+
+
+ - customer
+
+
+
diff --git a/vendor/magento/module-customer-segment/etc/graphql/events.xml b/vendor/magento/module-customer-segment/etc/graphql/events.xml
new file mode 100644
index 00000000000..28909ebf206
--- /dev/null
+++ b/vendor/magento/module-customer-segment/etc/graphql/events.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+