diff --git a/vendor/magento/module-customer-graph-ql/Model/GetGuestOrdersByEmail.php b/vendor/magento/module-customer-graph-ql/Model/GetGuestOrdersByEmail.php
new file mode 100644
index 0000000000000..b06ff42b7d2de
--- /dev/null
+++ b/vendor/magento/module-customer-graph-ql/Model/GetGuestOrdersByEmail.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Copyright 2024 Adobe
+ * All Rights Reserved.
+ *
+ * NOTICE: All information contained herein is, and remains
+ * the property of Adobe and its suppliers, if any. The intellectual
+ * and technical concepts contained herein are proprietary to Adobe
+ * and its suppliers and are protected by all applicable intellectual
+ * property laws, including trade secret and copyright laws.
+ * Dissemination of this information or reproduction of this material
+ * is strictly forbidden unless prior written permission is obtained from
+ * Adobe.
+ */
+declare(strict_types=1);
+
+namespace Magento\CustomerGraphQl\Model;
+
+use Magento\Framework\Api\SearchCriteriaBuilder;
+use Magento\Sales\Api\OrderRepositoryInterface;
+use Magento\Sales\Api\Data\OrderSearchResultInterface;
+
+class GetGuestOrdersByEmail
+{
+    /**
+     * @param OrderRepositoryInterface $orderRepository
+     * @param SearchCriteriaBuilder $searchCriteriaBuilder
+     */
+    public function __construct(
+        private readonly OrderRepositoryInterface $orderRepository,
+        private SearchCriteriaBuilder $searchCriteriaBuilder
+    ) {
+    }
+
+    /**
+     * Retrieve customer orders collection
+     *
+     * @param string $email
+     * @return OrderSearchResultInterface
+     */
+    public function execute(string $email): OrderSearchResultInterface
+    {
+        $this->searchCriteriaBuilder->addFilter(
+            'customer_email',
+            $email,
+            'eq'
+        )->addFilter(
+            'customer_is_guest',
+            1,
+            'eq'
+        );
+        return $this->orderRepository->getList($this->searchCriteriaBuilder->create());
+    }
+}
diff --git a/vendor/magento/module-customer-graph-ql/Plugin/Model/MergeGuestOrder.php b/vendor/magento/module-customer-graph-ql/Plugin/Model/MergeGuestOrder.php
new file mode 100644
index 0000000000000..b86c133a5da54
--- /dev/null
+++ b/vendor/magento/module-customer-graph-ql/Plugin/Model/MergeGuestOrder.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright 2024 Adobe
+ * All Rights Reserved.
+ *
+ * NOTICE: All information contained herein is, and remains
+ * the property of Adobe and its suppliers, if any. The intellectual
+ * and technical concepts contained herein are proprietary to Adobe
+ * and its suppliers and are protected by all applicable intellectual
+ * property laws, including trade secret and copyright laws.
+ * Dissemination of this information or reproduction of this material
+ * is strictly forbidden unless prior written permission is obtained from
+ * Adobe.
+ */
+declare(strict_types=1);
+
+namespace Magento\CustomerGraphQl\Plugin\Model;
+
+use Magento\Customer\Model\AccountManagement;
+use Magento\Customer\Api\Data\CustomerInterface;
+use Magento\Sales\Model\Order\CustomerAssignment;
+use Magento\CustomerGraphQl\Model\GetGuestOrdersByEmail;
+
+class MergeGuestOrder
+{
+    /**
+     * @param GetGuestOrdersByEmail $getGuestOrdersByEmail
+     * @param CustomerAssignment $customerAssignment
+     */
+    public function __construct(
+        private readonly GetGuestOrdersByEmail $getGuestOrdersByEmail,
+        private readonly CustomerAssignment $customerAssignment
+    ) {
+    }
+
+    /**
+     * Merge guest customer order after signup
+     *
+     * @param AccountManagement $subject
+     * @param CustomerInterface $customer
+     * @return CustomerInterface
+     */
+    public function afterCreateAccount(AccountManagement $subject, CustomerInterface $customer)
+    {
+        $searchResult = $this->getGuestOrdersByEmail->execute($customer->getEmail());
+        foreach ($searchResult->getItems() as $order) {
+            $this->customerAssignment->execute($order, $customer);
+        }
+        return $customer;
+    }
+}
diff --git a/vendor/magento/module-customer-graph-ql/etc/graphql/di.xml b/vendor/magento/module-customer-graph-ql/etc/graphql/di.xml
index 305e9cd12d676..22bfedf0d00cc 100644
--- a/vendor/magento/module-customer-graph-ql/etc/graphql/di.xml
+++ b/vendor/magento/module-customer-graph-ql/etc/graphql/di.xml
@@ -209,4 +209,8 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Customer\Model\AccountManagement">
+        <plugin name="merge_order_after_customer_signup"
+                type="Magento\CustomerGraphQl\Plugin\Model\MergeGuestOrder" />
+    </type>
 </config>
diff --git a/vendor/magento/module-graph-ql/Controller/GraphQl.php b/vendor/magento/module-graph-ql/Controller/GraphQl.php
index f3536b9683d4e..853d42cf3f453 100644
--- a/vendor/magento/module-graph-ql/Controller/GraphQl.php
+++ b/vendor/magento/module-graph-ql/Controller/GraphQl.php
@@ -9,6 +9,8 @@
 
 namespace Magento\GraphQl\Controller;
 
+use Exception;
+use GraphQL\Error\FormattedError;
 use GraphQL\Error\SyntaxError;
 use GraphQL\Language\Source;
 use Magento\Framework\App\Area;
@@ -21,7 +23,10 @@
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\Controller\Result\JsonFactory;
 use Magento\Framework\GraphQl\Exception\ExceptionFormatter;
+use Magento\Framework\GraphQl\Exception\GraphQlAuthenticationException;
+use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException;
 use Magento\Framework\GraphQl\Exception\GraphQlInputException;
+use Magento\Framework\GraphQl\Exception\InvalidRequestInterface;
 use Magento\Framework\GraphQl\Query\Fields as QueryFields;
 use Magento\Framework\GraphQl\Query\QueryParser;
 use Magento\Framework\GraphQl\Query\QueryProcessor;
@@ -224,10 +229,8 @@ public function dispatch(RequestInterface $request): ResponseInterface
                 $this->contextFactory->create(),
                 $data['variables'] ?? []
             );
-        } catch (\Exception $error) {
-            $result['errors'] = isset($result['errors']) ? $result['errors'] : [];
-            $result['errors'][] = $this->graphQlError->create($error);
-            $statusCode = ExceptionFormatter::HTTP_GRAPH_QL_SCHEMA_ERROR_STATUS;
+        } catch (Exception $error) {
+            [$result, $statusCode] = $this->handleGraphQlException($error);
         }
 
         $jsonResult->setHttpResponseCode($statusCode);
@@ -243,6 +246,26 @@ public function dispatch(RequestInterface $request): ResponseInterface
         return $this->httpResponse;
     }
 
+    /**
+     * Handle GraphQL Exceptions
+     *
+     * @param Exception $e
+     * @return array
+     */
+    private function handleGraphQlException(Exception $e): array
+    {
+        [$error, $statusCode] = match (true) {
+            $e instanceof InvalidRequestInterface => [FormattedError::createFromException($e), $e->getStatusCode()],
+            $e instanceof SyntaxError => [FormattedError::createFromException($e), 400],
+            $e instanceof GraphQlAuthenticationException => [$this->graphQlError->create($e), 401],
+            $e instanceof GraphQlAuthorizationException => [$this->graphQlError->create($e), 403],
+            $e instanceof GraphQlInputException => [FormattedError::createFromException($e), 200],
+            default => [$this->graphQlError->create($e), ExceptionFormatter::HTTP_GRAPH_QL_SCHEMA_ERROR_STATUS],
+        };
+
+        return [['errors' => [$error]], $statusCode];
+    }
+
     /**
      * Get data from request body or query string
      *
@@ -267,10 +290,14 @@ private function getDataFromRequest(RequestInterface $request): array
             }
         } elseif ($request->isGet()) {
             $data = $request->getParams();
-            $data['variables'] = isset($data['variables']) ?
-                $this->jsonSerializer->unserialize($data['variables']) : null;
-            $data['variables'] = is_array($data['variables']) ?
-                $data['variables'] : null;
+            try {
+                $data['variables'] = !empty($data['variables']) && is_string($data['variables'])
+                    ? $this->jsonSerializer->unserialize($data['variables'])
+                    : null;
+            } catch (\InvalidArgumentException) {
+                $source = new Source($data['variables']);
+                throw new SyntaxError($source, 0, 'Unable to parse the variables.');
+            }
         } else {
             return [];
         }
diff --git a/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/ContentTypeValidator.php b/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/ContentTypeValidator.php
index 555048aac6771..a8e6a8478f4ce 100644
--- a/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/ContentTypeValidator.php
+++ b/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/ContentTypeValidator.php
@@ -1,14 +1,15 @@
 <?php
 /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+ * Copyright 2019 Adobe
+ * All Rights Reserved.
  */
 declare(strict_types=1);
 
 namespace Magento\GraphQl\Controller\HttpRequestValidator;
 
 use Magento\Framework\App\HttpRequestInterface;
-use Magento\Framework\GraphQl\Exception\GraphQlInputException;
+use Magento\Framework\GraphQl\Exception\UnsupportedMediaTypeException;
+use Magento\Framework\Phrase;
 use Magento\GraphQl\Controller\HttpRequestValidatorInterface;
 
 /**
@@ -21,7 +22,7 @@ class ContentTypeValidator implements HttpRequestValidatorInterface
      *
      * @param HttpRequestInterface $request
      * @return void
-     * @throws GraphQlInputException
+     * @throws UnsupportedMediaTypeException
      */
     public function validate(HttpRequestInterface $request) : void
     {
@@ -32,8 +33,8 @@ public function validate(HttpRequestInterface $request) : void
         if ($request->isPost()
             && strpos($headerValue, $requiredHeaderValue) === false
         ) {
-            throw new GraphQlInputException(
-                new \Magento\Framework\Phrase('Request content type must be application/json')
+            throw new UnsupportedMediaTypeException(
+                new Phrase('Request content type must be application/json')
             );
         }
     }
diff --git a/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/HttpVerbValidator.php b/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/HttpVerbValidator.php
index 56351c7711cec..ff4cb247175f9 100644
--- a/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/HttpVerbValidator.php
+++ b/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/HttpVerbValidator.php
@@ -1,7 +1,7 @@
 <?php
 /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+ * Copyright 2019 Adobe
+ * All Rights Reserved.
  */
 declare(strict_types=1);
 
@@ -13,7 +13,7 @@
 use Magento\Framework\App\HttpRequestInterface;
 use Magento\Framework\App\ObjectManager;
 use Magento\Framework\App\Request\Http;
-use Magento\Framework\GraphQl\Exception\GraphQlInputException;
+use Magento\Framework\GraphQl\Exception\MethodNotAllowedException;
 use Magento\Framework\GraphQl\Query\QueryParser;
 use Magento\Framework\Phrase;
 use Magento\GraphQl\Controller\HttpRequestValidatorInterface;
@@ -41,7 +41,7 @@ public function __construct(QueryParser $queryParser = null)
      *
      * @param HttpRequestInterface $request
      * @return void
-     * @throws GraphQlInputException
+     * @throws MethodNotAllowedException
      */
     public function validate(HttpRequestInterface $request): void
     {
@@ -63,7 +63,7 @@ public function validate(HttpRequestInterface $request): void
                 );
 
                 if ($operationType !== null && strtolower($operationType) === 'mutation') {
-                    throw new GraphQlInputException(
+                    throw new MethodNotAllowedException(
                         new Phrase('Mutation requests allowed only for POST requests')
                     );
                 }
diff --git a/vendor/magento/module-quote-graph-ql/Plugin/Model/MergeGuestOrder.php b/vendor/magento/module-quote-graph-ql/Plugin/Model/MergeGuestOrder.php
new file mode 100644
index 0000000000000..6216bce3cc31c
--- /dev/null
+++ b/vendor/magento/module-quote-graph-ql/Plugin/Model/MergeGuestOrder.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Copyright 2024 Adobe
+ * All Rights Reserved.
+ *
+ * NOTICE: All information contained herein is, and remains
+ * the property of Adobe and its suppliers, if any. The intellectual
+ * and technical concepts contained herein are proprietary to Adobe
+ * and its suppliers and are protected by all applicable intellectual
+ * property laws, including trade secret and copyright laws.
+ * Dissemination of this information or reproduction of this material
+ * is strictly forbidden unless prior written permission is obtained from
+ * Adobe.
+ */
+declare(strict_types=1);
+
+namespace Magento\QuoteGraphQl\Plugin\Model;
+
+use Magento\Quote\Model\QuoteManagement;
+use Magento\Sales\Api\OrderRepositoryInterface;
+use Magento\Store\Model\StoreManagerInterface;
+use Magento\Sales\Model\Order\CustomerAssignment;
+use Magento\Customer\Api\CustomerRepositoryInterface;
+use Magento\Framework\Exception\NoSuchEntityException;
+
+class MergeGuestOrder
+{
+    /**
+     * @param OrderRepositoryInterface $orderRepository
+     * @param StoreManagerInterface $storeManager
+     * @param CustomerAssignment $customerAssignment
+     * @param CustomerRepositoryInterface $customerRepository
+     */
+    public function __construct(
+        private readonly OrderRepositoryInterface $orderRepository,
+        private readonly StoreManagerInterface $storeManager,
+        private readonly CustomerAssignment $customerAssignment,
+        private readonly CustomerRepositoryInterface $customerRepository
+    ) {
+    }
+
+    /**
+     * Merge guest order in  customer after place order
+     *
+     * @param QuoteManagement $subject
+     * @param int $orderId
+     * @return int
+     * @throws \Magento\Framework\Exception\LocalizedException
+     * @throws \Magento\Framework\Exception\NoSuchEntityException
+     */
+    public function afterPlaceOrder(QuoteManagement $subject, int $orderId)
+    {
+        if ($orderId) {
+            $order = $this->orderRepository->get($orderId);
+            if ($order->getCustomerIsGuest() && $order->getCustomerEmail()) {
+                try {
+                    $websiteID = $this->storeManager->getStore()->getWebsiteId();
+                    $customer = $this->customerRepository->get($order->getCustomerEmail(), $websiteID);
+                    if ($customer->getId()) {
+                        $this->customerAssignment->execute($order, $customer);
+                    }
+                    // phpcs:ignore Magento2.CodeAnalysis.EmptyBlock
+                } catch (NoSuchEntityException $e) {
+                    // Do not remove this handle as it used to check that customer
+                    // with this email not registered in the system
+                }
+            }
+        }
+        return $orderId;
+    }
+}
diff --git a/vendor/magento/module-quote-graph-ql/etc/graphql/di.xml b/vendor/magento/module-quote-graph-ql/etc/graphql/di.xml
index 83942f1daebb2..6ded0467ecd0e 100644
--- a/vendor/magento/module-quote-graph-ql/etc/graphql/di.xml
+++ b/vendor/magento/module-quote-graph-ql/etc/graphql/di.xml
@@ -73,4 +73,8 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Quote\Model\QuoteManagement">
+        <plugin name="merge_guest_orders_with_customer_after_place"
+                type="Magento\QuoteGraphQl\Plugin\Model\MergeGuestOrder" />
+    </type>
 </config>
diff --git a/vendor/magento/theme-frontend-blank/i18n/en_US.csv b/vendor/magento/theme-frontend-blank/i18n/en_US.csv
index 48f33bd2af411..f4c7b3e3f3fa2 100644
--- a/vendor/magento/theme-frontend-blank/i18n/en_US.csv
+++ b/vendor/magento/theme-frontend-blank/i18n/en_US.csv
@@ -442,3 +442,4 @@ Test,Test
 test,test
 Two,Two
 "Invalid data type","Invalid data type"
+"Unknown type ""%1"".","Unknown type ""%1""."
diff --git a/vendor/magento/theme-frontend-luma/i18n/en_US.csv b/vendor/magento/theme-frontend-luma/i18n/en_US.csv
index 09de2264af4f6..22d3d38d08f3b 100644
--- a/vendor/magento/theme-frontend-luma/i18n/en_US.csv
+++ b/vendor/magento/theme-frontend-luma/i18n/en_US.csv
@@ -492,3 +492,4 @@ Test,Test
 test,test
 Two,Two
 "Invalid data type","Invalid data type"
+"Unknown type ""%1"".","Unknown type ""%1""."
diff --git a/vendor/magento/framework/GraphQl/Exception/InvalidRequestInterface.php b/vendor/magento/framework/GraphQl/Exception/InvalidRequestInterface.php
new file mode 100644
index 0000000000000..4a6d16f32ee71
--- /dev/null
+++ b/vendor/magento/framework/GraphQl/Exception/InvalidRequestInterface.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Copyright 2025 Adobe
+ * All Rights Reserved.
+ */
+declare(strict_types=1);
+
+namespace Magento\Framework\GraphQl\Exception;
+
+use Throwable;
+
+/**
+ * Interface for providing response status code when invalid GraphQL request is detected.
+ */
+interface InvalidRequestInterface extends Throwable
+{
+    /**
+     * HTTP status code to be returned with the response.
+     *
+     * @return int
+     */
+    public function getStatusCode(): int;
+}
diff --git a/vendor/magento/framework/GraphQl/Exception/MethodNotAllowedException.php b/vendor/magento/framework/GraphQl/Exception/MethodNotAllowedException.php
new file mode 100644
index 0000000000000..5c7f279e6836c
--- /dev/null
+++ b/vendor/magento/framework/GraphQl/Exception/MethodNotAllowedException.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright 2025 Adobe
+ * All Rights Reserved.
+ */
+declare(strict_types=1);
+
+namespace Magento\Framework\GraphQl\Exception;
+
+use GraphQL\Error\ClientAware;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Phrase;
+
+class MethodNotAllowedException extends LocalizedException implements InvalidRequestInterface, ClientAware
+{
+    /**
+     * @param Phrase $phrase
+     * @param \Exception|null $cause
+     * @param int $code
+     * @param bool $isSafe
+     */
+    public function __construct(
+        Phrase $phrase,
+        ?\Exception $cause = null,
+        int $code = 0,
+        private readonly bool $isSafe = true,
+    ) {
+        parent::__construct($phrase, $cause, $code);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getStatusCode(): int
+    {
+        return 405;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function isClientSafe(): bool
+    {
+        return $this->isSafe;
+    }
+}
diff --git a/vendor/magento/framework/GraphQl/Exception/UnsupportedMediaTypeException.php b/vendor/magento/framework/GraphQl/Exception/UnsupportedMediaTypeException.php
new file mode 100644
index 0000000000000..6be650a3eb01b
--- /dev/null
+++ b/vendor/magento/framework/GraphQl/Exception/UnsupportedMediaTypeException.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright 2025 Adobe
+ * All Rights Reserved.
+ */
+declare(strict_types=1);
+
+namespace Magento\Framework\GraphQl\Exception;
+
+use GraphQL\Error\ClientAware;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Phrase;
+
+class UnsupportedMediaTypeException extends LocalizedException implements InvalidRequestInterface, ClientAware
+{
+    /**
+     * @param Phrase $phrase
+     * @param \Exception|null $cause
+     * @param int $code
+     * @param bool $isSafe
+     */
+    public function __construct(
+        Phrase $phrase,
+        ?\Exception $cause = null,
+        int $code = 0,
+        private readonly bool $isSafe = true,
+    ) {
+        parent::__construct($phrase, $cause, $code);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getStatusCode(): int
+    {
+        return 415;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function isClientSafe(): bool
+    {
+        return $this->isSafe;
+    }
+}
diff --git a/vendor/magento/framework/GraphQl/Schema/SchemaGenerator.php b/vendor/magento/framework/GraphQl/Schema/SchemaGenerator.php
index 250b80defa6dd..2a81b5d32ced2 100644
--- a/vendor/magento/framework/GraphQl/Schema/SchemaGenerator.php
+++ b/vendor/magento/framework/GraphQl/Schema/SchemaGenerator.php
@@ -1,13 +1,14 @@
 <?php
 /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+ * Copyright 2018 Adobe
+ * All Rights Reserved.
  */
 declare(strict_types=1);
 
 namespace Magento\Framework\GraphQl\Schema;
 
 use Magento\Framework\GraphQl\ConfigInterface;
+use Magento\Framework\GraphQl\Exception\GraphQlInputException;
 use Magento\Framework\GraphQl\Schema;
 use Magento\Framework\GraphQl\Schema\Type\TypeRegistry;
 use Magento\Framework\GraphQl\SchemaFactory;
@@ -57,7 +58,11 @@ public function generate() : Schema
                 'query' => $this->typeRegistry->get('Query'),
                 'mutation' => $this->typeRegistry->get('Mutation'),
                 'typeLoader' => function ($name) {
-                    return $this->typeRegistry->get($name);
+                    try {
+                        return $this->typeRegistry->get($name);
+                    } catch (GraphQlInputException) {
+                        return null;
+                    }
                 },
                 'types' => function () {
                     $typesImplementors = [];
diff --git a/vendor/magento/framework/GraphQl/Schema/Type/TypeRegistry.php b/vendor/magento/framework/GraphQl/Schema/Type/TypeRegistry.php
index 414e1eebe6531..1b8cb47e4048d 100644
--- a/vendor/magento/framework/GraphQl/Schema/Type/TypeRegistry.php
+++ b/vendor/magento/framework/GraphQl/Schema/Type/TypeRegistry.php
@@ -1,12 +1,13 @@
 <?php
 /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+ * Copyright 2019 Adobe
+ * All Rights Reserved.
  */
 declare(strict_types=1);
 
 namespace Magento\Framework\GraphQl\Schema\Type;
 
+use LogicException;
 use Magento\Framework\GraphQl\ConfigInterface;
 use Magento\Framework\GraphQl\Exception\GraphQlInputException;
 use Magento\Framework\GraphQl\Schema\TypeInterface;
@@ -66,7 +67,13 @@ public function __construct(
     public function get(string $typeName): TypeInterface
     {
         if (!isset($this->types[$typeName])) {
-            $configElement = $this->config->getConfigElement($typeName);
+            try {
+                $configElement = $this->config->getConfigElement($typeName);
+            } catch (LogicException) {
+                throw new GraphQlInputException(
+                    new Phrase('Unknown type "%1".', [$typeName])
+                );
+            }
 
             $configElementClass = get_class($configElement);
             if (!isset($this->configToTypeMap[$configElementClass])) {
