VYPR
Moderate severityNVD Advisory· Published Jun 28, 2021· Updated Sep 16, 2024

Magento Commerce path traversal vulnerability in child theme store creation

CVE-2021-28584

Description

Magento versions 2.4.2 (and earlier), 2.4.1-p1 (and earlier) and 2.3.6-p1 (and earlier) are affected by a Path Traversal vulnerability when creating a store with child theme.Successful exploitation could lead to arbitrary file system write by an authenticated attacker. Access to the admin console is required for successful exploitation.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Magento 2.4.2 (and earlier) contains a path traversal in store creation with a child theme, allowing authenticated admin users to write arbitrary files.

Vulnerability

A path traversal vulnerability exists in Magento versions 2.4.2 (and earlier), 2.4.1-p1 (and earlier), and 2.3.6-p1 (and earlier) during the creation of a store with a child theme [1]. The vulnerability allows an authenticated attacker to traverse directories and write arbitrary files to the filesystem.

Exploitation

To exploit this vulnerability, an attacker must have access to the admin console [1]. The attacker can craft a malicious payload in the child theme parameter during store creation, which is then used in file path operations without proper sanitization, enabling directory traversal.

Impact

Successful exploitation leads to arbitrary file system write by an authenticated attacker [1]. This could allow the attacker to overwrite critical system files, inject malicious code, or otherwise compromise the integrity and availability of the Magento installation.

Mitigation

Adobe released patched versions 2.4.2-p1, 2.4.1-p2, and 2.3.6-p2 to address this vulnerability [3]. Users should upgrade to these or later versions. There is no evidence of this CVE being listed in CISA's Known Exploited Vulnerabilities (KEV) catalog.

AI Insight generated on May 21, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
magento/community-editionPackagist
>= 2.4.0, < 2.4.2-p12.4.2-p1
magento/community-editionPackagist
< 2.3.72.3.7
magento/project-community-editionPackagist
<= 2.0.2

Affected products

4

Patches

1
1bd5cb8c065e

Magento Release 2.4.2-p1

https://github.com/magento/magento2magento packaging serviceMay 7, 2021via ghsa
251 files changed · +4510 2735
  • app/code/Magento/AdminAnalytics/composer.json+13 11 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-admin-analytics",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-release-notification": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-release-notification": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/AdminNotification/composer.json+13 11 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-admin-notification",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-config": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/AdvancedPricingImportExport/composer.json+15 13 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-advanced-pricing-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-import-export": "101.1.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-import-export": "101.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/AdvancedSearch/composer.json+15 13 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-advanced-search",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-search": "102.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-search": "101.1.*",
    +        "magento/module-store": "101.1.*",
             "php": "~7.3.0||~7.4.0"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Amqp/composer.json+10 8 modified
    @@ -1,20 +1,21 @@
     {
         "name": "magento/module-amqp",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
    -        "magento/framework": "*",
    -        "magento/framework-amqp": "*",
    -        "magento/framework-message-queue": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/framework-amqp": "100.4.*",
    +        "magento/framework-message-queue": "100.4.*",
             "php": "~7.3.0||~7.4.0"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/AmqpStore/composer.json+12 10 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-amqp-store",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
    -        "magento/framework": "*",
    -        "magento/framework-amqp": "*",
    -        "magento/module-store": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/framework-amqp": "100.4.*",
    +        "magento/module-store": "101.1.*",
             "php": "~7.3.0||~7.4.0"
         },
         "suggest": {
    -        "magento/module-asynchronous-operations": "*",
    -        "magento/framework-message-queue": "*"
    +        "magento/module-asynchronous-operations": "100.4.*",
    +        "magento/framework-message-queue": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Analytics/composer.json+10 8 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-analytics",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-store": "*",
    -        "magento/framework": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-integration": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/AsynchronousOperations/composer.json+14 12 modified
    @@ -1,27 +1,28 @@
     {
         "name": "magento/module-asynchronous-operations",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
    -        "magento/framework": "*",
    -        "magento/framework-message-queue": "*",
    -        "magento/framework-bulk": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-ui": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/framework-message-queue": "100.4.*",
    +        "magento/framework-bulk": "101.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-ui": "101.2.*",
             "php": "~7.3.0||~7.4.0"
         },
         "suggest": {
    -        "magento/module-admin-notification": "*",
    +        "magento/module-admin-notification": "100.4.*",
             "magento/module-logging": "*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -31,3 +32,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Authorization/composer.json+9 7 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-authorization",
         "description": "Authorization module provides access to Magento ACL functionality.",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/AwsS3/composer.json+8 6 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-aws-s3",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "proprietary"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-remote-storage": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/module-remote-storage": "100.4.*",
             "league/flysystem": "^1.0",
             "league/flysystem-aws-s3-v3": "^1.0",
             "league/flysystem-cached-adapter": "^1.0"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "proprietary"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Backend/composer.json+26 24 modified
    @@ -1,38 +1,39 @@
     {
         "name": "magento/module-backend",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "102.0.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backup": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-developer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-reports": "*",
    -        "magento/module-require-js": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-security": "*",
    -        "magento/module-store": "*",
    -        "magento/module-translation": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-user": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backup": "100.4.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-developer": "100.4.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-reports": "100.4.*",
    +        "magento/module-require-js": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-security": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-translation": "100.4.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-user": "101.2.*"
         },
         "suggest": {
    -        "magento/module-theme": "*"
    +        "magento/module-theme": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php",
    @@ -43,3 +44,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Backup/composer.json+11 9 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-backup",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cron": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-cron": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Bundle/composer.json+26 24 modified
    @@ -1,38 +1,39 @@
     {
         "name": "magento/module-bundle",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.0.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-catalog-rule": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-gift-message": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-catalog-rule": "101.2.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-gift-message": "100.4.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-webapi": "*",
    -        "magento/module-bundle-sample-data": "*",
    -        "magento/module-sales-rule": "*"
    +        "magento/module-webapi": "100.4.*",
    +        "magento/module-bundle-sample-data": "Sample Data version: 100.4.*",
    +        "magento/module-sales-rule": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -42,3 +43,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/BundleGraphQl/composer.json+14 12 modified
    @@ -2,22 +2,23 @@
         "name": "magento/module-bundle-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-catalog": "*",
    -        "magento/module-bundle": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/module-store": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-graph-ql": "*",
    -        "magento/framework": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-bundle": "101.0.*",
    +        "magento/module-catalog-graph-ql": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-quote-graph-ql": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-sales-graph-ql": "100.4.*",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/BundleImportExport/composer.json+14 12 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-bundle-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-bundle": "*",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-bundle": "101.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-import-export": "101.1.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-import-export": "101.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CacheInvalidate/composer.json+9 7 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-cache-invalidate",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-page-cache": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-page-cache": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Captcha/composer.json+13 11 modified
    @@ -1,26 +1,27 @@
     {
         "name": "magento/module-captcha",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*",
    -        "magento/module-authorization": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-authorization": "100.4.*",
             "laminas/laminas-captcha": "^2.7.1",
             "laminas/laminas-db": "^2.8.2",
             "laminas/laminas-session": "^2.7.3"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -30,3 +31,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CardinalCommerce/composer.json+11 9 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-cardinal-commerce",
         "description": "Provides a possibility to enable 3-D Secure 2.0 support for payment methods.",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogAnalytics/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-catalog-analytics",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-analytics": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-analytics": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogCmsGraphQl/composer.json+12 10 modified
    @@ -2,21 +2,22 @@
         "name": "magento/module-catalog-cms-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-cms-graph-ql": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-cms-graph-ql": "100.4.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-catalog-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Catalog/composer.json+36 34 modified
    @@ -1,48 +1,49 @@
     {
         "name": "magento/module-catalog",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "104.0.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-asynchronous-operations": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-catalog-rule": "*",
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-indexer": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-product-alert": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-url-rewrite": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-wishlist": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-asynchronous-operations": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-catalog-rule": "101.2.*",
    +        "magento/module-catalog-url-rewrite": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-indexer": "100.4.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-msrp": "100.4.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-product-alert": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-url-rewrite": "102.0.*",
    +        "magento/module-widget": "101.2.*",
    +        "magento/module-wishlist": "101.2.*"
         },
         "suggest": {
    -        "magento/module-cookie": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-catalog-sample-data": "*"
    +        "magento/module-cookie": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-catalog-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -52,3 +53,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Catalog/Controller/Adminhtml/Product/Gallery/Upload.php+4 2 modified
    @@ -11,7 +11,7 @@
     use Magento\Framework\Exception\LocalizedException;
     
     /**
    - * Class Upload
    + * Class Upload image(s)
      */
     class Upload extends \Magento\Backend\App\Action implements HttpPostActionInterface
     {
    @@ -108,8 +108,10 @@ public function execute()
     
                 $result['url'] = $this->productMediaConfig->getTmpMediaUrl($result['file']);
                 $result['file'] = $result['file'] . '.tmp';
    -        } catch (\Exception $e) {
    +        } catch (LocalizedException $e) {
                 $result = ['error' => $e->getMessage(), 'errorcode' => $e->getCode()];
    +        } catch (\Throwable $e) {
    +            $result = ['error' => 'Something went wrong while saving the file(s).', 'errorcode' => 0];
             }
     
             /** @var \Magento\Framework\Controller\Result\Raw $response */
    
  • app/code/Magento/CatalogCustomerGraphQl/composer.json+10 8 modified
    @@ -2,18 +2,19 @@
         "name": "magento/module-catalog-customer-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-store": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-catalog-graph-ql": "100.4.*",
    +        "magento/module-store": "101.1.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogGraphQl/composer.json+18 16 modified
    @@ -2,27 +2,28 @@
         "name": "magento/module-catalog-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-eav": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    -        "magento/module-eav-graph-ql": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/framework": "*",
    -        "magento/module-graph-ql": "*"
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-search": "101.1.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-eav-graph-ql": "100.4.*",
    +        "magento/module-catalog-search": "102.0.*",
    +        "magento/framework": "103.0.*",
    +        "magento/module-graph-ql": "100.4.*"
         },
         "suggest": {
    -        "magento/module-graph-ql-cache": "*",
    -        "magento/module-store-graph-ql": "*"
    +        "magento/module-graph-ql-cache": "100.4.*",
    +        "magento/module-store-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -32,3 +33,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogImportExport/composer.json+18 16 modified
    @@ -1,29 +1,30 @@
     {
         "name": "magento/module-catalog-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.1.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "ext-ctype": "*",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-authorization": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-catalog-url-rewrite": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-import-export": "101.0.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-authorization": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -33,3 +34,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogInventory/composer.json+15 13 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-catalog-inventory",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -30,3 +31,4 @@
         },
         "abandoned": "magento/inventory-composer-metapackage"
     }
    +
    
  • app/code/Magento/CatalogInventoryGraphQl/composer.json+9 7 modified
    @@ -2,17 +2,18 @@
         "name": "magento/module-catalog-inventory-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogRule/composer.json+17 15 modified
    @@ -1,29 +1,30 @@
     {
         "name": "magento/module-catalog-rule",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-rule": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-rule": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-import-export": "*",
    -        "magento/module-catalog-rule-sample-data": "*"
    +        "magento/module-import-export": "101.0.*",
    +        "magento/module-catalog-rule-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -33,3 +34,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogRuleConfigurable/composer.json+12 10 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-catalog-rule-configurable",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    +        "magento/framework": "103.0.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-rule": "*",
    -        "magento/module-configurable-product": "*"
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-rule": "101.2.*",
    +        "magento/module-configurable-product": "100.4.*"
         },
         "suggest": {
    -        "magento/module-catalog-rule": "*"
    +        "magento/module-catalog-rule": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogRuleGraphQl/composer.json+8 6 modified
    @@ -2,17 +2,18 @@
         "name": "magento/module-catalog-rule-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-catalog-rule": "*"
    +        "magento/module-catalog-rule": "101.2.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogSearch/composer.json+20 18 modified
    @@ -1,32 +1,33 @@
     {
         "name": "magento/module-catalog-search",
         "description": "Catalog search",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "102.0.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-indexer": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-indexer": "100.4.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-search": "101.1.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -36,3 +37,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Catalog/Test/Mftf/Test/CreateProductAttributeEntityTest/CreateProductAttributeEntityDateTest.xml+3 3 modified
    @@ -14,8 +14,8 @@
                 <title value="Admin should be able to create a Date product attribute"/>
                 <description value="Admin should be able to create a Date product attribute"/>
                 <severity value="BLOCKER"/>
    -            <testCaseId value="MC-10895"/>
    -            <group value="Catalog"/>
    +            <testCaseId value="MC-26021"/>
    +            <group value="catalog"/>
                 <group value="mtf_migrated"/>
             </annotations>
     
    @@ -34,7 +34,7 @@
     
             <!--Generate date for use as default value, needs to be MM/d/YYYY and mm/d/yy-->
             <generateDate date="now" format="m/j/Y" stepKey="generateDefaultDate"/>
    -        <generateDate date="now" format="m/j/y" stepKey="generateDateCompressedFormat"/>
    +        <generateDate date="now" format="n/j/y" stepKey="generateDateCompressedFormat"/>
     
             <!--Navigate to Stores > Attributes > Product.-->
             <actionGroup ref="AdminOpenProductAttributePageActionGroup" stepKey="goToProductAttributes"/>
    
  • app/code/Magento/CatalogUrlRewrite/composer.json+17 15 modified
    @@ -1,29 +1,30 @@
     {
         "name": "magento/module-catalog-url-rewrite",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-url-rewrite": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-import-export": "101.1.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-import-export": "101.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-url-rewrite": "102.0.*"
         },
         "suggest": {
    -        "magento/module-webapi": "*"
    +        "magento/module-webapi": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -33,3 +34,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogUrlRewriteGraphQl/composer.json+12 10 modified
    @@ -2,21 +2,22 @@
         "name": "magento/module-catalog-url-rewrite-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/framework": "*"
    +        "magento/module-store": "101.1.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-url-rewrite-graph-ql": "*"
    +        "magento/module-catalog-url-rewrite": "100.4.*",
    +        "magento/module-catalog-graph-ql": "100.4.*",
    +        "magento/module-url-rewrite-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CatalogWidget/composer.json+17 15 modified
    @@ -1,27 +1,28 @@
     {
         "name": "magento/module-catalog-widget",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-rule": "*",
    -        "magento/module-store": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-wishlist": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-rule": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-widget": "101.2.*",
    +        "magento/module-wishlist": "101.2.*",
    +        "magento/module-theme": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -31,3 +32,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CheckoutAgreements/composer.json+12 10 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-checkout-agreements",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CheckoutAgreementsGraphQl/composer.json+10 8 modified
    @@ -2,19 +2,20 @@
         "name": "magento/module-checkout-agreements-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*",
    -        "magento/module-checkout-agreements": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-checkout-agreements": "100.4.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Checkout/composer.json+29 27 modified
    @@ -1,41 +1,42 @@
     {
         "name": "magento/module-checkout",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-captcha": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-security": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-authorization": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-captcha": "100.4.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-msrp": "100.4.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-sales-rule": "101.2.*",
    +        "magento/module-security": "100.4.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-authorization": "100.4.*"
         },
         "suggest": {
    -        "magento/module-cookie": "*"
    +        "magento/module-cookie": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -45,3 +46,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Cms/composer.json+18 16 modified
    @@ -1,30 +1,31 @@
     {
         "name": "magento/module-cms",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "104.0.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-email": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-variable": "*",
    -        "magento/module-widget": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-email": "101.1.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-variable": "100.4.*",
    +        "magento/module-widget": "101.2.*"
         },
         "suggest": {
    -        "magento/module-cms-sample-data": "*"
    +        "magento/module-cms-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -34,3 +35,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CmsGraphQl/composer.json+13 11 modified
    @@ -2,22 +2,23 @@
         "name": "magento/module-cms-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-widget": "101.2.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*",
    -        "magento/module-graph-ql-cache": "*",
    -        "magento/module-store-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/module-graph-ql-cache": "100.4.*",
    +        "magento/module-store-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CmsUrlRewrite/composer.json+11 9 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-cms-url-rewrite",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-store": "*",
    -        "magento/module-url-rewrite": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-url-rewrite": "102.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CmsUrlRewriteGraphQl/composer.json+12 10 modified
    @@ -2,21 +2,22 @@
         "name": "magento/module-cms-url-rewrite-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-store": "*",
    -        "magento/module-url-rewrite-graph-ql": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-url-rewrite-graph-ql": "100.4.*"
         },
         "suggest": {
    -        "magento/module-cms-url-rewrite": "*",
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-cms-url-rewrite": "100.4.*",
    +        "magento/module-catalog-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CompareListGraphQl/composer.json+8 6 modified
    @@ -2,16 +2,17 @@
         "name": "magento/module-compare-list-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-customer": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Config/composer.json+15 13 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-config",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cron": "*",
    -        "magento/module-deploy": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-email": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-cron": "100.4.*",
    +        "magento/module-deploy": "100.4.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-email": "101.1.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ConfigurableImportExport/composer.json+14 12 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-configurable-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-configurable-product": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-import-export": "101.1.*",
    +        "magento/module-configurable-product": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-import-export": "101.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ConfigurableProduct/composer.json+26 24 modified
    @@ -1,38 +1,39 @@
     {
         "name": "magento/module-configurable-product",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-msrp": "*",
    -        "magento/module-webapi": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-product-video": "*",
    -        "magento/module-configurable-sample-data": "*",
    -        "magento/module-product-links-sample-data": "*",
    -        "magento/module-tax": "*"
    +        "magento/module-msrp": "100.4.*",
    +        "magento/module-webapi": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-sales-rule": "101.2.*",
    +        "magento/module-product-video": "100.4.*",
    +        "magento/module-configurable-sample-data": "Sample Data version: 100.4.*",
    +        "magento/module-product-links-sample-data": "Sample Data version: 100.4.*",
    +        "magento/module-tax": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -42,3 +43,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ConfigurableProductGraphQl/composer.json+13 11 modified
    @@ -2,21 +2,22 @@
         "name": "magento/module-configurable-product-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-catalog": "*",
    -        "magento/module-configurable-product": "*",
    -        "magento/module-graph-ql": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/framework": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-configurable-product": "100.4.*",
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/module-catalog-graph-ql": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-quote-graph-ql": "100.4.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ConfigurableProductSales/composer.json+12 10 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-configurable-product-sales",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-configurable-product": "*"
    +        "magento/module-configurable-product": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Contact/composer.json+12 10 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-contact",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Cookie/composer.json+10 8 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-cookie",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-backend": "*"
    +        "magento/module-backend": "102.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Cron/composer.json+10 8 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-cron",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Csp/composer.json+9 7 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-csp",
         "description": "CSP module enables Content Security Policies for Magento",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CurrencySymbol/composer.json+13 11 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-currency-symbol",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CustomerAnalytics/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-customer-analytics",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-analytics": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-analytics": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Customer/composer.json+29 27 modified
    @@ -1,41 +1,42 @@
     {
         "name": "magento/module-customer",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "103.0.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-newsletter": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-wishlist": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-integration": "100.4.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-newsletter": "100.4.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-wishlist": "101.2.*"
         },
         "suggest": {
    -        "magento/module-cookie": "*",
    -        "magento/module-customer-sample-data": "*",
    -        "magento/module-webapi": "*"
    +        "magento/module-cookie": "100.4.*",
    +        "magento/module-customer-sample-data": "Sample Data version: 100.4.*",
    +        "magento/module-webapi": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -45,3 +46,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CustomerDownloadableGraphQl/composer.json+10 8 modified
    @@ -2,19 +2,20 @@
         "name": "magento/module-customer-downloadable-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-downloadable-graph-ql": "*",
    -        "magento/module-graph-ql": "*",
    -        "magento/framework": "*"
    +        "magento/module-downloadable-graph-ql": "100.4.*",
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-catalog-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Customer/etc/validation.xml+6 0 modified
    @@ -18,11 +18,17 @@
                         <constraint alias="metadata_data_validator" class="Magento\Customer\Model\Metadata\Validator" />
                     </entity_constraints>
                 </rule>
    +            <rule name="check_name">
    +                <entity_constraints>
    +                    <constraint alias="name_validator" class="Magento\Customer\Model\Validator\Name" />
    +                </entity_constraints>
    +            </rule>
             </rules>
             <groups>
                 <group name="save">
                     <uses>
                         <use rule="check_eav"/>
    +                    <use rule="check_name"/>
                     </uses>
                 </group>
                 <group name="form">
    
  • app/code/Magento/CustomerGraphQl/composer.json+14 12 modified
    @@ -2,22 +2,23 @@
         "name": "magento/module-customer-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-authorization": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-graph-ql": "*",
    -        "magento/module-newsletter": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-store": "*",
    -        "magento/framework": "*",
    -        "magento/module-directory": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/module-newsletter": "100.4.*",
    +        "magento/module-integration": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/framework": "103.0.*",
    +        "magento/module-directory": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/CustomerImportExport/composer.json+14 12 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-customer-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-import-export": "101.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Customer/Model/AccountManagement.php+50 29 modified
    @@ -55,6 +55,7 @@
     use Magento\Store\Model\ScopeInterface;
     use Magento\Store\Model\StoreManagerInterface;
     use Psr\Log\LoggerInterface as PsrLogger;
    +use Magento\Framework\AuthorizationInterface;
     
     /**
      * Handle various customer account actions
    @@ -69,104 +70,104 @@ class AccountManagement implements AccountManagementInterface
         /**
          * Configuration paths for create account email template
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_REGISTER_EMAIL_TEMPLATE = 'customer/create_account/email_template';
     
         /**
          * Configuration paths for register no password email template
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_REGISTER_NO_PASSWORD_EMAIL_TEMPLATE
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_REGISTER_NO_PASSWORD_EMAIL_TEMPLATE = 'customer/create_account/email_no_password_template';
     
         /**
          * Configuration paths for remind email identity
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_REGISTER_EMAIL_IDENTITY
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_REGISTER_EMAIL_IDENTITY = 'customer/create_account/email_identity';
     
         /**
          * Configuration paths for remind email template
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_REMIND_EMAIL_TEMPLATE
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_REMIND_EMAIL_TEMPLATE = 'customer/password/remind_email_template';
     
         /**
          * Configuration paths for forgot email email template
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_FORGOT_EMAIL_TEMPLATE
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_FORGOT_EMAIL_TEMPLATE = 'customer/password/forgot_email_template';
     
         /**
          * Configuration paths for forgot email identity
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_FORGOT_EMAIL_IDENTITY
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_FORGOT_EMAIL_IDENTITY = 'customer/password/forgot_email_identity';
     
         /**
          * Configuration paths for account confirmation required
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    +     * @deprecated Get rid of Helpers in Password Security Management
          * @see AccountConfirmation::XML_PATH_IS_CONFIRM
          */
         const XML_PATH_IS_CONFIRM = 'customer/create_account/confirm';
     
         /**
          * Configuration paths for account confirmation email template
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_CONFIRM_EMAIL_TEMPLATE
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_CONFIRM_EMAIL_TEMPLATE = 'customer/create_account/email_confirmation_template';
     
         /**
          * Configuration paths for confirmation confirmed email template
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_CONFIRMED_EMAIL_TEMPLATE
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_CONFIRMED_EMAIL_TEMPLATE = 'customer/create_account/email_confirmed_template';
     
         /**
          * Constants for the type of new account email to be sent
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotificationInterface::NEW_ACCOUNT_EMAIL_REGISTERED
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotificationInterface::NEW_ACCOUNT_EMAIL_REGISTERED
          */
         const NEW_ACCOUNT_EMAIL_REGISTERED = 'registered';
     
         /**
          * Welcome email, when password setting is required
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotificationInterface::NEW_ACCOUNT_EMAIL_REGISTERED_NO_PASSWORD
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotificationInterface::NEW_ACCOUNT_EMAIL_REGISTERED
          */
         const NEW_ACCOUNT_EMAIL_REGISTERED_NO_PASSWORD = 'registered_no_password';
     
         /**
          * Welcome email, when confirmation is enabled
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotificationInterface::NEW_ACCOUNT_EMAIL_CONFIRMATION
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotificationInterface::NEW_ACCOUNT_EMAIL_REGISTERED
          */
         const NEW_ACCOUNT_EMAIL_CONFIRMATION = 'confirmation';
     
         /**
          * Confirmation email, when account is confirmed
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotificationInterface::NEW_ACCOUNT_EMAIL_CONFIRMED
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see EmailNotificationInterface::NEW_ACCOUNT_EMAIL_REGISTERED
          */
         const NEW_ACCOUNT_EMAIL_CONFIRMED = 'confirmed';
     
    @@ -192,19 +193,26 @@ class AccountManagement implements AccountManagementInterface
         /**
          * Configuration path to customer reset password email template
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    -     * @see \Magento\Customer\Model\EmailNotification::XML_PATH_RESET_PASSWORD_TEMPLATE
    +     * @deprecated Get rid of Helpers in Password Security Management
    +     * @see Magento/Customer/Model/EmailNotification::XML_PATH_REGISTER_EMAIL_TEMPLATE
          */
         const XML_PATH_RESET_PASSWORD_TEMPLATE = 'customer/password/reset_password_template';
     
         /**
          * Minimum password length
          *
    -     * @deprecated get rid of Helpers in Password Security Management.
    +     * @deprecated Get rid of Helpers in Password Security Management
          * @see \Magento\Customer\Model\AccountManagement::XML_PATH_MINIMUM_PASSWORD_LENGTH
          */
         const MIN_PASSWORD_LENGTH = 6;
     
    +    /**
    +     * Authorization level of a basic admin session
    +     *
    +     * @see _isAllowed()
    +     */
    +    const ADMIN_RESOURCE = 'Magento_Customer::manage';
    +
         /**
          * @var CustomerFactory
          */
    @@ -375,6 +383,11 @@ class AccountManagement implements AccountManagementInterface
          */
         private $sessionCleaner;
     
    +    /**
    +     * @var AuthorizationInterface
    +     */
    +    private $authorization;
    +
         /**
          * @param CustomerFactory $customerFactory
          * @param ManagerInterface $eventManager
    @@ -410,6 +423,7 @@ class AccountManagement implements AccountManagementInterface
          * @param GetCustomerByToken|null $getByToken
          * @param AllowedCountries|null $allowedCountriesReader
          * @param SessionCleanerInterface|null $sessionCleaner
    +     * @param AuthorizationInterface|null $authorization
          * @SuppressWarnings(PHPMD.CyclomaticComplexity)
          * @SuppressWarnings(PHPMD.ExcessiveParameterList)
          * @SuppressWarnings(PHPMD.NPathComplexity)
    @@ -450,7 +464,8 @@ public function __construct(
             AddressRegistry $addressRegistry = null,
             GetCustomerByToken $getByToken = null,
             AllowedCountries $allowedCountriesReader = null,
    -        SessionCleanerInterface $sessionCleaner = null
    +        SessionCleanerInterface $sessionCleaner = null,
    +        AuthorizationInterface $authorization = null
         ) {
             $this->customerFactory = $customerFactory;
             $this->eventManager = $eventManager;
    @@ -490,6 +505,7 @@ public function __construct(
             $this->allowedCountriesReader = $allowedCountriesReader
                 ?: $objectManager->get(AllowedCountries::class);
             $this->sessionCleaner = $sessionCleaner ?? $objectManager->get(SessionCleanerInterface::class);
    +        $this->authorization = $authorization ?? $objectManager->get(AuthorizationInterface::class);
         }
     
         /**
    @@ -836,6 +852,11 @@ public function getConfirmationStatus($customerId)
          */
         public function createAccount(CustomerInterface $customer, $password = null, $redirectUrl = '')
         {
    +        $groupId = $customer->getGroupId();
    +        if (isset($groupId) && !$this->authorization->isAllowed(self::ADMIN_RESOURCE)) {
    +            $customer->setGroupId(null);
    +        }
    +
             if ($password !== null) {
                 $this->checkPasswordStrength($password);
                 $customerEmail = $customer->getEmail();
    
  • app/code/Magento/Customer/Model/Validator/Name.php+59 0 added
    @@ -0,0 +1,59 @@
    +<?php
    +/**
    + * Copyright © Magento, Inc. All rights reserved.
    + * See COPYING.txt for license details.
    + */
    +declare(strict_types=1);
    +
    +namespace Magento\Customer\Model\Validator;
    +
    +use Magento\Customer\Model\Customer;
    +use Magento\Framework\Validator\AbstractValidator;
    +
    +/**
    + * Customer name fields validator.
    + */
    +class Name extends AbstractValidator
    +{
    +    private const PATTERN_NAME = '/(?:[\p{L}\p{M}\,\-\_\.\'\s\d]){1,255}+/u';
    +
    +    /**
    +     * Validate name fields.
    +     *
    +     * @param Customer $customer
    +     * @return bool
    +     */
    +    public function isValid($customer)
    +    {
    +        if (!$this->isValidName($customer->getFirstname())) {
    +            parent::_addMessages([['firstname' => 'First Name is not valid!']]);
    +        }
    +
    +        if (!$this->isValidName($customer->getLastname())) {
    +            parent::_addMessages([['lastname' => 'Last Name is not valid!']]);
    +        }
    +
    +        if (!$this->isValidName($customer->getMiddlename())) {
    +            parent::_addMessages([['middlename' => 'Middle Name is not valid!']]);
    +        }
    +
    +        return count($this->_messages) == 0;
    +    }
    +
    +    /**
    +     * Check if name field is valid.
    +     *
    +     * @param string|null $nameValue
    +     * @return bool
    +     */
    +    private function isValidName($nameValue)
    +    {
    +        if ($nameValue != null) {
    +            if (preg_match(self::PATTERN_NAME, $nameValue, $matches)) {
    +                return $matches[0] == $nameValue;
    +            }
    +        }
    +
    +        return true;
    +    }
    +}
    
  • app/code/Magento/Customer/Test/Mftf/Test/AdminExactMatchSearchInCustomerGridTest.xml+1 1 modified
    @@ -21,7 +21,7 @@
             <before>
                 <createData entity="Simple_US_Customer" stepKey="createFirstCustomer"/>
                 <createData entity="Simple_US_Customer" stepKey="createSecondCustomer">
    -                <field key="firstname">&quot;Jane Doe&quot;</field>
    +                <field key="firstname">Jane Doe</field>
                 </createData>
                 <actionGroup ref="AdminLoginActionGroup" stepKey="login"/>
             </before>
    
  • app/code/Magento/Customer/Test/Mftf/Test/StorefrontVerifyNoXssInjectionOnUpdateCustomerInformationAddAddressTest.xml+4 1 modified
    @@ -11,12 +11,15 @@
         <test name="StorefrontVerifyNoXssInjectionOnUpdateCustomerInformationAddAddressTest">
             <annotations>
                 <stories value="Update Customer Address"/>
    -            <title value="[Security] Verify No XSS Injection on Update Customer Information Add Address"/>
    +            <title value="DEPRECATED [Security] Verify No XSS Injection on Update Customer Information Add Address"/>
                 <description value="Test log in to Storefront and Verify No XSS Injection on Update Customer Information Add Address"/>
                 <testCaseId value="MC-10910"/>
                 <severity value="CRITICAL"/>
                 <group value="customer"/>
                 <group value="mtf_migrated"/>
    +            <skip>
    +                <issueId value="DEPRECATED">Test outdated</issueId>
    +            </skip>
             </annotations>
     
             <before>
    
  • app/code/Magento/Customer/Test/Unit/Model/AccountManagementTest.php+361 46 modified
    @@ -28,7 +28,6 @@
     use Magento\Customer\Model\EmailNotificationInterface;
     use Magento\Customer\Model\Metadata\Validator;
     use Magento\Customer\Model\ResourceModel\Visitor\CollectionFactory;
    -use Magento\Customer\Model\Visitor;
     use Magento\Directory\Model\AllowedCountries;
     use Magento\Framework\Api\ExtensibleDataObjectConverter;
     use Magento\Framework\Api\SearchCriteriaBuilder;
    @@ -42,8 +41,6 @@
     use Magento\Framework\Exception\InvalidEmailOrPasswordException;
     use Magento\Framework\Exception\LocalizedException;
     use Magento\Framework\Exception\NoSuchEntityException;
    -use Magento\Framework\Exception\State\ExpiredException;
    -use Magento\Framework\Exception\State\InputMismatchException;
     use Magento\Framework\Intl\DateTimeFactory;
     use Magento\Framework\Mail\Template\TransportBuilder;
     use Magento\Framework\Mail\TransportInterface;
    @@ -62,6 +59,8 @@
     use PHPUnit\Framework\MockObject\MockObject;
     use PHPUnit\Framework\TestCase;
     use Psr\Log\LoggerInterface;
    +use Magento\Framework\Exception\State\InputMismatchException;
    +use Magento\Framework\Exception\State\ExpiredException;
     
     /**
      * @SuppressWarnings(PHPMD.TooManyFields)
    @@ -205,10 +204,25 @@ class AccountManagementTest extends TestCase
         private $allowedCountriesReader;
     
         /**
    -     * @var SessionCleanerInterface|\PHPUnit_Framework_MockObject_MockObject
    +     * @var SessionCleanerInterface|MockObject
          */
         private $sessionCleanerMock;
     
    +    /**
    +     * @var int
    +     */
    +    private $getIdCounter;
    +
    +    /**
    +     * @var int
    +     */
    +    private $getStoreIdCounter;
    +
    +    /**
    +     * @var int
    +     */
    +    private $getWebsiteIdCounter;
    +
         /**
          * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
          */
    @@ -324,6 +338,9 @@ protected function setUp(): void
                 'emailNotification',
                 $this->emailNotificationMock
             );
    +        $this->getIdCounter = 0;
    +        $this->getStoreIdCounter = 0;
    +        $this->getWebsiteIdCounter = 0;
         }
     
         public function testCreateAccountWithPasswordHashWithExistingCustomer()
    @@ -374,6 +391,9 @@ public function testCreateAccountWithPasswordHashWithExistingCustomer()
             $this->accountManagement->createAccountWithPasswordHash($customer, $hash);
         }
     
    +    /**
    +     * @expectedException \Magento\Framework\Exception\State\InputMismatchException
    +     */
         public function testCreateAccountWithPasswordHashWithCustomerWithoutStoreId()
         {
             $this->expectException(InputMismatchException::class);
    @@ -452,6 +472,9 @@ public function testCreateAccountWithPasswordHashWithCustomerWithoutStoreId()
             $this->accountManagement->createAccountWithPasswordHash($customer, $hash);
         }
     
    +    /**
    +     * @expectedException \Magento\Framework\Exception\LocalizedException
    +     */
         public function testCreateAccountWithPasswordHashWithLocalizedException()
         {
             $this->expectException(LocalizedException::class);
    @@ -529,6 +552,9 @@ public function testCreateAccountWithPasswordHashWithLocalizedException()
             $this->accountManagement->createAccountWithPasswordHash($customer, $hash);
         }
     
    +    /**
    +     * @expectedException \Magento\Framework\Exception\LocalizedException
    +     */
         public function testCreateAccountWithPasswordHashWithAddressException()
         {
             $this->expectException(LocalizedException::class);
    @@ -625,6 +651,9 @@ public function testCreateAccountWithPasswordHashWithAddressException()
             $this->accountManagement->createAccountWithPasswordHash($customer, $hash);
         }
     
    +    /**
    +     * @expectedException \Magento\Framework\Exception\LocalizedException
    +     */
         public function testCreateAccountWithPasswordHashWithNewCustomerAndLocalizedException()
         {
             $this->expectException(LocalizedException::class);
    @@ -723,29 +752,55 @@ public function testCreateAccountWithoutPassword()
             $store->expects($this->once())
                 ->method('getId')
                 ->willReturn($defaultStoreId);
    +        $store->expects($this->once())
    +            ->method('getWebsiteId')
    +            ->willReturn($websiteId);
             $website = $this->getMockBuilder(Website::class)
                 ->disableOriginalConstructor()
                 ->getMock();
             $website->expects($this->atLeastOnce())
                 ->method('getStoreIds')
                 ->willReturn([1, 2, 3]);
    -        $website->expects($this->once())
    -            ->method('getDefaultStore')
    -            ->willReturn($store);
             $customer = $this->getMockBuilder(Customer::class)
                 ->disableOriginalConstructor()
                 ->getMock();
    -        $customer->expects($this->atLeastOnce())
    +        $testCase = $this;
    +        $customer->expects($this->any())
                 ->method('getId')
    -            ->willReturn($customerId);
    +            ->will($this->returnCallback(function () use ($testCase, $customerId) {
    +                if ($testCase->getIdCounter > 0) {
    +                    return $customerId;
    +                } else {
    +                    $testCase->getIdCounter += 1;
    +                    return null;
    +                }
    +            }));
             $customer->expects($this->atLeastOnce())
                 ->method('getEmail')
                 ->willReturn($customerEmail);
    -        $customer->expects($this->atLeastOnce())
    +        $customer->expects($this->any())
                 ->method('getWebsiteId')
    -            ->willReturn($websiteId);
    -        $customer->expects($this->at(10))->method('getStoreId')
    -            ->willReturn(1);
    +            ->will($this->returnCallback(function () use ($testCase, $websiteId) {
    +                if ($testCase->getWebsiteIdCounter > 1) {
    +                    return $websiteId;
    +                } else {
    +                    $testCase->getWebsiteIdCounter += 1;
    +                    return null;
    +                }
    +            }));
    +        $customer->expects($this->once())
    +            ->method('setWebsiteId')
    +            ->with($websiteId);
    +        $customer->expects($this->any())
    +            ->method('getStoreId')
    +            ->will($this->returnCallback(function () use ($testCase, $defaultStoreId) {
    +                if ($testCase->getStoreIdCounter > 0) {
    +                    return $defaultStoreId;
    +                } else {
    +                    $testCase->getStoreIdCounter += 1;
    +                    return null;
    +                }
    +            }));
             $customer->expects($this->once())
                 ->method('setStoreId')
                 ->with($defaultStoreId);
    @@ -755,17 +810,15 @@ public function testCreateAccountWithoutPassword()
             $customer->expects($this->once())
                 ->method('setAddresses')
                 ->with(null);
    -        $this->customerRepository
    -            ->expects($this->once())
    -            ->method('get')
    -            ->with($customerEmail)
    -            ->willReturn($customer);
             $this->share->method('isWebsiteScope')
                 ->willReturn(true);
             $this->storeManager->expects($this->atLeastOnce())
                 ->method('getWebsite')
                 ->with($websiteId)
                 ->willReturn($website);
    +        $this->storeManager->expects($this->atLeastOnce())
    +            ->method('getStore')
    +            ->willReturn($store);
             $this->customerRepository->expects($this->atLeastOnce())
                 ->method('save')
                 ->willReturn($customer);
    @@ -840,6 +893,7 @@ public function dataProviderCheckPasswordStrength()
          * @param int $minPasswordLength
          * @param int $minCharacterSetsNum
          * @dataProvider dataProviderCheckPasswordStrength
    +     * @throws \Magento\Framework\Exception\LocalizedException
          */
         public function testCreateAccountWithPasswordInputException(
             $testNumber,
    @@ -985,30 +1039,55 @@ public function testCreateAccountWithPassword()
             $store->expects($this->once())
                 ->method('getId')
                 ->willReturn($defaultStoreId);
    +        $store->expects($this->once())
    +            ->method('getWebsiteId')
    +            ->willReturn($websiteId);
             $website = $this->getMockBuilder(Website::class)
                 ->disableOriginalConstructor()
                 ->getMock();
             $website->expects($this->atLeastOnce())
                 ->method('getStoreIds')
                 ->willReturn([1, 2, 3]);
    -        $website->expects($this->once())
    -            ->method('getDefaultStore')
    -            ->willReturn($store);
             $customer = $this->getMockBuilder(Customer::class)
                 ->disableOriginalConstructor()
                 ->getMock();
    -        $customer->expects($this->atLeastOnce())
    +        $testCase = $this;
    +        $customer->expects($this->any())
                 ->method('getId')
    -            ->willReturn($customerId);
    +            ->will($this->returnCallback(function () use ($testCase, $customerId) {
    +                if ($testCase->getIdCounter > 0) {
    +                    return $customerId;
    +                } else {
    +                    $testCase->getIdCounter += 1;
    +                    return null;
    +                }
    +            }));
             $customer->expects($this->atLeastOnce())
                 ->method('getEmail')
                 ->willReturn($customerEmail);
    -        $customer->expects($this->atLeastOnce())
    +        $customer->expects($this->any())
                 ->method('getWebsiteId')
    -            ->willReturn($websiteId);
    -        $customer->expects($this->at(11))
    +            ->will($this->returnCallback(function () use ($testCase, $websiteId) {
    +                if ($testCase->getWebsiteIdCounter > 1) {
    +                    return $websiteId;
    +                } else {
    +                    $testCase->getWebsiteIdCounter += 1;
    +                    return null;
    +                }
    +            }));
    +        $customer->expects($this->once())
    +            ->method('setWebsiteId')
    +            ->with($websiteId);
    +        $customer->expects($this->any())
                 ->method('getStoreId')
    -            ->willReturn(1);
    +            ->will($this->returnCallback(function () use ($testCase, $defaultStoreId) {
    +                if ($testCase->getStoreIdCounter > 0) {
    +                    return $defaultStoreId;
    +                } else {
    +                    $testCase->getStoreIdCounter += 1;
    +                    return null;
    +                }
    +            }));
             $customer->expects($this->once())
                 ->method('setStoreId')
                 ->with($defaultStoreId);
    @@ -1018,27 +1097,216 @@ public function testCreateAccountWithPassword()
             $customer->expects($this->once())
                 ->method('setAddresses')
                 ->with(null);
    -        $this->customerRepository
    -            ->expects($this->once())
    -            ->method('get')
    -            ->with($customerEmail)
    -            ->willReturn($customer);
             $this->share->method('isWebsiteScope')
                 ->willReturn(true);
             $this->storeManager->expects($this->atLeastOnce())
                 ->method('getWebsite')
                 ->with($websiteId)
                 ->willReturn($website);
    +        $this->storeManager->expects($this->atLeastOnce())
    +            ->method('getStore')
    +            ->willReturn($store);
             $this->customerRepository->expects($this->atLeastOnce())
                 ->method('save')
                 ->willReturn($customer);
    +        $this->customerRepository->expects($this->once())
    +            ->method('getById')
    +            ->with($customerId)
    +            ->willReturn($customer);
             $this->addressRepository->expects($this->atLeastOnce())
                 ->method('save')
                 ->with($address);
    +        $this->random->expects($this->once())
    +            ->method('getUniqueHash')
    +            ->willReturn($newLinkToken);
    +        $customerSecure = $this->getMockBuilder(CustomerSecure::class)
    +            ->setMethods(['setRpToken', 'setRpTokenCreatedAt', 'getPasswordHash'])
    +            ->disableOriginalConstructor()
    +            ->getMock();
    +        $customerSecure->expects($this->any())
    +            ->method('setRpToken')
    +            ->with($newLinkToken);
    +        $customerSecure->expects($this->any())
    +            ->method('setRpTokenCreatedAt')
    +            ->with($datetime)
    +            ->willReturnSelf();
    +        $customerSecure->expects($this->any())
    +            ->method('getPasswordHash')
    +            ->willReturn($hash);
    +        $this->customerRegistry->expects($this->atLeastOnce())
    +            ->method('retrieveSecureData')
    +            ->willReturn($customerSecure);
    +        $this->emailNotificationMock->expects($this->once())
    +            ->method('newAccount')
    +            ->willReturnSelf();
    +        $this->allowedCountriesReader
    +            ->expects($this->atLeastOnce())
    +            ->method('getAllowedCountries')
    +            ->willReturn(['US' => 'US']);
    +        $address
    +            ->expects($this->atLeastOnce())
    +            ->method('getCountryId')
    +            ->willReturn('US');
    +        $this->accountManagement->createAccount($customer, $password);
    +    }
    +
    +    /**
    +     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
    +     */
    +    public function testCreateAccountWithGroupId()
    +    {
    +        $websiteId = 1;
    +        $defaultStoreId = 1;
    +        $customerId = 1;
    +        $customerEmail = 'email@email.com';
    +        $hash = '4nj54lkj5jfi03j49f8bgujfgsd';
    +        $newLinkToken = '2jh43j5h2345jh23lh452h345hfuzasd96ofu';
    +        $templateIdentifier = 'Template Identifier';
    +        $sender = 'Sender';
    +        $password = 'wrfewqedf1';
    +        $minPasswordLength = 5;
    +        $minCharacterSetsNum = 2;
    +        $defaultGroupId = 1;
    +        $requestedGroupId = 3;
    +
    +        $datetime = $this->prepareDateTimeFactory();
    +
    +        $this->scopeConfig->expects($this->any())
    +            ->method('getValue')
    +            ->willReturnMap(
    +                [
    +                    [
    +                        AccountManagement::XML_PATH_MINIMUM_PASSWORD_LENGTH,
    +                        'default',
    +                        null,
    +                        $minPasswordLength,
    +                    ],
    +                    [
    +                        AccountManagement::XML_PATH_REQUIRED_CHARACTER_CLASSES_NUMBER,
    +                        'default',
    +                        null,
    +                        $minCharacterSetsNum,
    +                    ],
    +                    [
    +                        AccountManagement::XML_PATH_REGISTER_EMAIL_TEMPLATE,
    +                        ScopeInterface::SCOPE_STORE,
    +                        $defaultStoreId,
    +                        $templateIdentifier,
    +                    ],
    +                    [
    +                        AccountManagement::XML_PATH_REGISTER_EMAIL_IDENTITY,
    +                        ScopeInterface::SCOPE_STORE,
    +                        1,
    +                        $sender,
    +                    ],
    +                ]
    +            );
    +        $this->string->expects($this->any())
    +            ->method('strlen')
    +            ->with($password)
    +            ->willReturn(iconv_strlen($password, 'UTF-8'));
    +        $this->encryptor->expects($this->once())
    +            ->method('getHash')
    +            ->with($password, true)
    +            ->willReturn($hash);
    +        $address = $this->getMockBuilder(AddressInterface::class)
    +            ->disableOriginalConstructor()
    +            ->getMockForAbstractClass();
    +        $address->expects($this->once())
    +            ->method('setCustomerId')
    +            ->with($customerId);
    +        $store = $this->getMockBuilder(Store::class)
    +            ->disableOriginalConstructor()
    +            ->getMock();
    +        $store->expects($this->once())
    +            ->method('getId')
    +            ->willReturn($defaultStoreId);
    +        $store->expects($this->once())
    +            ->method('getWebsiteId')
    +            ->willReturn($websiteId);
    +        $website = $this->getMockBuilder(Website::class)
    +            ->disableOriginalConstructor()
    +            ->getMock();
    +        $website->expects($this->atLeastOnce())
    +            ->method('getStoreIds')
    +            ->willReturn([1, 2, 3]);
    +        $customer = $this->getMockBuilder(Customer::class)
    +            ->disableOriginalConstructor()
    +            ->getMock();
    +        $testCase = $this;
    +        $customer->expects($this->any())
    +            ->method('getId')
    +            ->will($this->returnCallback(function () use ($testCase, $customerId) {
    +                if ($testCase->getIdCounter > 0) {
    +                    return $customerId;
    +                } else {
    +                    $testCase->getIdCounter += 1;
    +                    return null;
    +                }
    +            }));
    +        $customer->expects($this->atLeastOnce())
    +            ->method('getGroupId')
    +            ->willReturn($requestedGroupId);
    +        $customer->expects($this->at(0))
    +            ->method('setGroupId')
    +            ->willReturn(null);
    +        $customer->expects($this->at(1))
    +            ->method('setGroupId')
    +            ->willReturn($defaultGroupId);
    +        $customer->expects($this->atLeastOnce())
    +            ->method('getEmail')
    +            ->willReturn($customerEmail);
    +        $customer->expects($this->any())
    +            ->method('getWebsiteId')
    +            ->will($this->returnCallback(function () use ($testCase, $websiteId) {
    +                if ($testCase->getWebsiteIdCounter > 1) {
    +                    return $websiteId;
    +                } else {
    +                    $testCase->getWebsiteIdCounter += 1;
    +                    return null;
    +                }
    +            }));
    +        $customer->expects($this->once())
    +            ->method('setWebsiteId')
    +            ->with($websiteId);
    +        $customer->expects($this->any())
    +            ->method('getStoreId')
    +            ->will($this->returnCallback(function () use ($testCase, $defaultStoreId) {
    +                if ($testCase->getStoreIdCounter > 0) {
    +                    return $defaultStoreId;
    +                } else {
    +                    $testCase->getStoreIdCounter += 1;
    +                    return null;
    +                }
    +            }));
    +        $customer->expects($this->once())
    +            ->method('setStoreId')
    +            ->with($defaultStoreId);
    +        $customer->expects($this->once())
    +            ->method('getAddresses')
    +            ->willReturn([$address]);
    +        $customer->expects($this->once())
    +            ->method('setAddresses')
    +            ->with(null);
    +        $this->share->method('isWebsiteScope')
    +            ->willReturn(true);
    +        $this->storeManager->expects($this->atLeastOnce())
    +            ->method('getWebsite')
    +            ->with($websiteId)
    +            ->willReturn($website);
    +        $this->storeManager->expects($this->atLeastOnce())
    +            ->method('getStore')
    +            ->willReturn($store);
    +        $this->customerRepository->expects($this->atLeastOnce())
    +            ->method('save')
    +            ->willReturn($customer);
             $this->customerRepository->expects($this->once())
                 ->method('getById')
                 ->with($customerId)
                 ->willReturn($customer);
    +        $this->addressRepository->expects($this->atLeastOnce())
    +            ->method('save')
    +            ->with($address);
             $this->random->expects($this->once())
                 ->method('getUniqueHash')
                 ->willReturn($newLinkToken);
    @@ -1070,7 +1338,6 @@ public function testCreateAccountWithPassword()
                 ->expects($this->atLeastOnce())
                 ->method('getCountryId')
                 ->willReturn('US');
    -
             $this->accountManagement->createAccount($customer, $password);
         }
     
    @@ -1414,6 +1681,10 @@ public function testValidateResetPasswordTokenBadResetPasswordLinkToken()
             $this->accountManagement->validateResetPasswordLinkToken(22, null);
         }
     
    +    /**
    +     * @expectedException \Magento\Framework\Exception\State\InputMismatchException
    +     * @expectedExceptionMessage The password token is mismatched. Reset and try again.
    +     */
         public function testValidateResetPasswordTokenTokenMismatch()
         {
             $this->expectException(InputMismatchException::class);
    @@ -1558,6 +1829,9 @@ private function reInitModel()
     
         /**
          * @return void
    +     * @throws \Magento\Framework\Exception\LocalizedException
    +     * @throws InvalidEmailOrPasswordException
    +     *
          */
         public function testChangePassword()
         {
    @@ -1695,6 +1969,8 @@ function ($string) {
     
         /**
          * @return void
    +     * @throws InvalidEmailOrPasswordException
    +     * @throws \Magento\Framework\Exception\LocalizedException
          */
         public function testChangePasswordException()
         {
    @@ -1719,6 +1995,7 @@ public function testChangePasswordException()
     
         /**
          * @return void
    +     * @throws \Magento\Framework\Exception\LocalizedException
          */
         public function testAuthenticate()
         {
    @@ -1782,6 +2059,7 @@ public function testAuthenticate()
          * @param string|null $confirmation
          * @param string $expected
          * @dataProvider dataProviderGetConfirmationStatus
    +     * @throws \Magento\Framework\Exception\LocalizedException
          */
         public function testGetConfirmationStatus(
             $isConfirmationRequired,
    @@ -1835,6 +2113,10 @@ public function dataProviderGetConfirmationStatus()
             ];
         }
     
    +    /**
    +     * @expectedException \Magento\Framework\Exception\LocalizedException
    +     * @expectedExceptionMessage Exception message
    +     */
         public function testCreateAccountWithPasswordHashForGuestException()
         {
             $this->expectException(LocalizedException::class);
    @@ -2032,7 +2314,9 @@ private function prepareDateTimeFactory()
         }
     
         /**
    +     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
          * @return void
    +     * @throws \Magento\Framework\Exception\LocalizedException
          */
         public function testCreateAccountUnexpectedValueException(): void
         {
    @@ -2053,25 +2337,50 @@ public function testCreateAccountUnexpectedValueException(): void
             $store->expects($this->once())
                 ->method('getId')
                 ->willReturn($defaultStoreId);
    +        $store->expects($this->once())
    +            ->method('getWebsiteId')
    +            ->willReturn($websiteId);
             $website = $this->createMock(Website::class);
             $website->method('getStoreIds')
                 ->willReturn([1, 2, 3]);
    -        $website->expects($this->once())
    -            ->method('getDefaultStore')
    -            ->willReturn($store);
             $customer = $this->createMock(Customer::class);
    -        $customer->expects($this->atLeastOnce())
    +        $testCase = $this;
    +        $customer->expects($this->any())
                 ->method('getId')
    -            ->willReturn($customerId);
    +            ->will($this->returnCallback(function () use ($testCase, $customerId) {
    +                if ($testCase->getIdCounter > 0) {
    +                    return $customerId;
    +                } else {
    +                    $testCase->getIdCounter += 1;
    +                    return null;
    +                }
    +            }));
             $customer->expects($this->atLeastOnce())
                 ->method('getEmail')
                 ->willReturn($customerEmail);
    -        $customer->expects($this->atLeastOnce())
    +        $customer->expects($this->any())
                 ->method('getWebsiteId')
    -            ->willReturn($websiteId);
    -        $customer->expects($this->at(10))
    +            ->will($this->returnCallback(function () use ($testCase, $websiteId) {
    +                if ($testCase->getWebsiteIdCounter > 1) {
    +                    return $websiteId;
    +                } else {
    +                    $testCase->getWebsiteIdCounter += 1;
    +                    return null;
    +                }
    +            }));
    +        $customer->expects($this->once())
    +            ->method('setWebsiteId')
    +            ->with($websiteId);
    +        $customer->expects($this->any())
                 ->method('getStoreId')
    -            ->willReturn(1);
    +            ->will($this->returnCallback(function () use ($testCase, $defaultStoreId) {
    +                if ($testCase->getStoreIdCounter > 0) {
    +                    return $defaultStoreId;
    +                } else {
    +                    $testCase->getStoreIdCounter += 1;
    +                    return null;
    +                }
    +            }));
             $customer->expects($this->once())
                 ->method('setStoreId')
                 ->with($defaultStoreId);
    @@ -2081,16 +2390,15 @@ public function testCreateAccountUnexpectedValueException(): void
             $customer->expects($this->once())
                 ->method('setAddresses')
                 ->with(null);
    -        $this->customerRepository->expects($this->once())
    -            ->method('get')
    -            ->with($customerEmail)
    -            ->willReturn($customer);
             $this->share->method('isWebsiteScope')
                 ->willReturn(true);
             $this->storeManager->expects($this->atLeastOnce())
                 ->method('getWebsite')
                 ->with($websiteId)
                 ->willReturn($website);
    +        $this->storeManager->expects($this->atLeastOnce())
    +            ->method('getStore')
    +            ->willReturn($store);
             $this->customerRepository->expects($this->atLeastOnce())
                 ->method('save')
                 ->willReturn($customer);
    @@ -2131,6 +2439,10 @@ public function testCreateAccountUnexpectedValueException(): void
             $this->accountManagement->createAccount($customer);
         }
     
    +    /**
    +     * @throws \Magento\Framework\Exception\LocalizedException
    +     * @expectedException \Magento\Framework\Exception\LocalizedException
    +     */
         public function testCreateAccountWithStoreNotInWebsite()
         {
             $this->expectException(LocalizedException::class);
    @@ -2172,6 +2484,7 @@ public function testCreateAccountWithStoreNotInWebsite()
          * Test for validating customer store id by customer website id.
          *
          * @return void
    +     * @throws \Magento\Framework\Exception\LocalizedException
          */
         public function testValidateCustomerStoreIdByWebsiteId(): void
         {
    @@ -2194,6 +2507,8 @@ public function testValidateCustomerStoreIdByWebsiteId(): void
         /**
          * Test for validating customer store id by customer website id with Exception
          *
    +     * @expectedException \Magento\Framework\Exception\LocalizedException
    +     * @expectedExceptionMessage The store view is not in the associated website.
          */
         public function testValidateCustomerStoreIdByWebsiteIdException(): void
         {
    
  • app/code/Magento/Deploy/composer.json+12 10 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-deploy",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-config": "*",
    -        "magento/module-require-js": "*",
    -        "magento/module-store": "*",
    -        "magento/module-user": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-require-js": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-user": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "cli_commands.php",
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Developer/composer.json+10 8 modified
    @@ -1,20 +1,21 @@
     {
         "name": "magento/module-developer",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Dhl/composer.json+18 16 modified
    @@ -1,31 +1,32 @@
     {
         "name": "magento/module-dhl",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-checkout": "*"
    +        "magento/module-checkout": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -35,3 +36,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Directory/composer.json+11 9 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-directory",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/DirectoryGraphQl/composer.json+9 7 modified
    @@ -2,17 +2,18 @@
         "name": "magento/module-directory-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-directory": "*",
    -        "magento/module-store": "*",
    -        "magento/module-graph-ql": "*",
    -        "magento/framework": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Downloadable/composer.json+25 23 modified
    @@ -1,37 +1,38 @@
     {
         "name": "magento/module-downloadable",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-gift-message": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-gift-message": "100.4.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-downloadable-sample-data": "*"
    +        "magento/module-downloadable-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -41,3 +42,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/DownloadableGraphQl/composer.json+15 13 modified
    @@ -2,24 +2,25 @@
         "name": "magento/module-downloadable-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/framework": "*"
    +        "magento/module-store": "101.1.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-downloadable": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-quote-graph-ql": "100.4.*",
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-sales-graph-ql": "*"
    +        "magento/module-catalog-graph-ql": "100.4.*",
    +        "magento/module-sales-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/DownloadableImportExport/composer.json+14 12 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-downloadable-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-import-export": "101.1.*",
    +        "magento/module-downloadable": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-import-export": "101.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Eav/composer.json+13 11 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-eav",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "102.1.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/EavGraphQl/composer.json+9 7 modified
    @@ -2,18 +2,19 @@
         "name": "magento/module-eav-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-eav": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-eav": "102.1.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Elasticsearch6/composer.json+13 11 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-elasticsearch-6",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-advanced-search": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/module-search": "*",
    -        "magento/module-elasticsearch": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/module-advanced-search": "100.4.*",
    +        "magento/module-catalog-search": "102.0.*",
    +        "magento/module-search": "101.1.*",
    +        "magento/module-elasticsearch": "101.0.*",
             "elasticsearch/elasticsearch": "~7.7.0"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Elasticsearch7/composer.json+13 11 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-elasticsearch-7",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-elasticsearch": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/module-elasticsearch": "101.0.*",
             "elasticsearch/elasticsearch": "~7.7.0",
    -        "magento/module-advanced-search": "*",
    -        "magento/module-catalog-search": "*"
    +        "magento/module-advanced-search": "100.4.*",
    +        "magento/module-catalog-search": "102.0.*"
         },
         "suggest": {
    -        "magento/module-config": "*",
    -        "magento/module-search": "*"
    +        "magento/module-config": "101.2.*",
    +        "magento/module-search": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Elasticsearch/composer.json+17 15 modified
    @@ -1,27 +1,28 @@
     {
         "name": "magento/module-elasticsearch",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "101.0.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-advanced-search": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-search": "*",
    -        "magento/module-store": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/framework": "*",
    +        "magento/module-advanced-search": "100.4.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-search": "102.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-search": "101.1.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/framework": "103.0.*",
             "elasticsearch/elasticsearch": "~7.7.0"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -31,3 +32,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Email/composer.json+18 16 modified
    @@ -1,30 +1,31 @@
     {
         "name": "magento/module-email",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.1.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-require-js": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-variable": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-require-js": "100.4.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-variable": "100.4.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-theme": "*"
    +        "magento/module-theme": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -34,3 +35,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/EncryptionKey/composer.json+10 8 modified
    @@ -1,20 +1,21 @@
     {
         "name": "magento/module-encryption-key",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Fedex/composer.json+16 14 modified
    @@ -1,27 +1,28 @@
     {
         "name": "magento/module-fedex",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -31,3 +32,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GiftMessage/composer.json+18 16 modified
    @@ -1,30 +1,31 @@
     {
         "name": "magento/module-gift-message",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-eav": "*",
    -        "magento/module-multishipping": "*"
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-multishipping": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -34,3 +35,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GiftMessageGraphQl/composer.json+9 7 modified
    @@ -2,18 +2,19 @@
         "name": "magento/module-gift-message-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-gift-message": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-gift-message": "100.4.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GoogleAdwords/composer.json+10 8 modified
    @@ -1,20 +1,21 @@
     {
         "name": "magento/module-google-adwords",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GoogleAnalytics/composer.json+12 10 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-google-analytics",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-cookie": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-cookie": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GoogleOptimizer/composer.json+14 12 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-google-optimizer",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-google-analytics": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-google-analytics": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GraphQlCache/composer.json+8 6 modified
    @@ -2,16 +2,17 @@
         "name": "magento/module-graph-ql-cache",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-graph-ql": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-graph-ql": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GraphQl/composer.json+10 8 modified
    @@ -2,19 +2,20 @@
         "name": "magento/module-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-eav": "*",
    -        "magento/framework": "*",
    -        "magento/module-webapi": "*"
    +        "magento/module-eav": "102.1.*",
    +        "magento/framework": "103.0.*",
    +        "magento/module-webapi": "100.4.*"
         },
         "suggest": {
    -        "magento/module-graph-ql-cache": "*"
    +        "magento/module-graph-ql-cache": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GroupedCatalogInventory/composer.json+11 9 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-grouped-catalog-inventory",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-grouped-product": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-grouped-product": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GroupedImportExport/composer.json+13 11 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-grouped-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-grouped-product": "*",
    -        "magento/module-import-export": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-import-export": "101.1.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-grouped-product": "100.4.*",
    +        "magento/module-import-export": "101.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GroupedProduct/composer.json+22 20 modified
    @@ -1,34 +1,35 @@
     {
         "name": "magento/module-grouped-product",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-wishlist": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-msrp": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-wishlist": "101.2.*"
         },
         "suggest": {
    -        "magento/module-grouped-product-sample-data": "*"
    +        "magento/module-grouped-product-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -38,3 +39,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/GroupedProductGraphQl/composer.json+9 7 modified
    @@ -2,17 +2,18 @@
         "name": "magento/module-grouped-product-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-grouped-product": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/framework": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-grouped-product": "100.4.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-graph-ql": "100.4.*",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ImportExport/composer.json+14 12 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.0.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "ext-ctype": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Indexer/composer.json+9 7 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-indexer",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/InstantPurchase/composer.json+10 8 modified
    @@ -6,16 +6,17 @@
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-vault": "*",
    -        "magento/framework": "*"
    +        "magento/module-store": "101.1.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-vault": "101.2.*",
    +        "magento/framework": "103.0.*"
         },
         "autoload": {
             "files": [
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Integration/composer.json+15 13 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-integration",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-security": "*",
    -        "magento/module-store": "*",
    -        "magento/module-user": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-security": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-user": "101.2.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/LayeredNavigation/composer.json+10 8 modified
    @@ -1,20 +1,21 @@
     {
         "name": "magento/module-layered-navigation",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerAdminUi/composer.json+18 15 modified
    @@ -1,28 +1,31 @@
     {
         "name": "magento/module-login-as-customer-admin-ui",
    -    "description": "",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-login-as-customer-api": "*",
    -        "magento/module-login-as-customer-frontend-ui": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    -    },
    -    "suggest": {
    -        "magento/module-login-as-customer": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2-p1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-login-as-customer-api": "100.4.*",
    +        "magento/module-login-as-customer-frontend-ui": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*"
    +    },
    +    "suggest": {
    +        "magento/module-login-as-customer": "100.4.*"
    +    },
         "autoload": {
    -        "files": [ "registration.php" ],
    +        "files": [
    +            "registration.php"
    +        ],
             "psr-4": {
                 "Magento\\LoginAsCustomerAdminUi\\": ""
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerApi/composer.json+9 5 modified
    @@ -1,19 +1,23 @@
     {
         "name": "magento/module-login-as-customer-api",
         "description": "Allow for admin to enter a customer account",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
    -        "files": [ "registration.php" ],
    +        "files": [
    +            "registration.php"
    +        ],
             "psr-4": {
                 "Magento\\LoginAsCustomerApi\\": ""
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerAssistance/composer.json+18 14 modified
    @@ -1,27 +1,31 @@
     {
         "name": "magento/module-login-as-customer-assistance",
    -    "description": "",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*",
    -        "magento/module-login-as-customer": "*",
    -        "magento/module-login-as-customer-api": "*"
    -    },
    -    "suggest": {
    -        "magento/module-login-as-customer-admin-ui": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1-p1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-login-as-customer": "100.4.*",
    +        "magento/module-login-as-customer-api": "100.4.*"
    +    },
    +    "suggest": {
    +        "magento/module-login-as-customer-admin-ui": "100.4.*"
    +    },
         "autoload": {
    -        "files": [ "registration.php" ],
    +        "files": [
    +            "registration.php"
    +        ],
             "psr-4": {
                 "Magento\\LoginAsCustomerAssistance\\": ""
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerAssistance/Plugin/CustomerPlugin.php+28 2 modified
    @@ -7,8 +7,11 @@
     
     namespace Magento\LoginAsCustomerAssistance\Plugin;
     
    +use Magento\Authorization\Model\UserContextInterface;
     use Magento\Customer\Api\CustomerRepositoryInterface;
     use Magento\Customer\Api\Data\CustomerInterface;
    +use Magento\Framework\App\ObjectManager;
    +use Magento\Framework\AuthorizationInterface;
     use Magento\LoginAsCustomerAssistance\Api\SetAssistanceInterface;
     use Magento\LoginAsCustomerAssistance\Model\IsAssistanceEnabled;
     
    @@ -22,13 +25,29 @@ class CustomerPlugin
          */
         private $setAssistance;
     
    +    /**
    +     * @var AuthorizationInterface
    +     */
    +    private $authorization;
    +
    +    /**
    +     * @var UserContextInterface
    +     */
    +    private $userContext;
    +
         /**
          * @param SetAssistanceInterface $setAssistance
    +     * @param AuthorizationInterface|null $authorization
    +     * @param UserContextInterface|null $userContext
          */
         public function __construct(
    -        SetAssistanceInterface $setAssistance
    +        SetAssistanceInterface $setAssistance,
    +        ?AuthorizationInterface $authorization = null,
    +        ?UserContextInterface $userContext = null
         ) {
             $this->setAssistance = $setAssistance;
    +        $this->authorization = $authorization ?? ObjectManager::getInstance()->get(AuthorizationInterface::class);
    +        $this->userContext = $userContext ?? ObjectManager::getInstance()->get(UserContextInterface::class);
         }
     
         /**
    @@ -45,9 +64,16 @@ public function afterSave(
             CustomerInterface $result,
             CustomerInterface $customer
         ): CustomerInterface {
    +        $enoughPermission = true;
    +        if ($this->userContext->getUserType() === UserContextInterface::USER_TYPE_ADMIN
    +            || $this->userContext->getUserType() === UserContextInterface::USER_TYPE_INTEGRATION
    +        ) {
    +            $enoughPermission = $this->authorization->isAllowed('Magento_LoginAsCustomer::allow_shopping_assistance');
    +        }
             $customerId = (int)$result->getId();
             $customerExtensionAttributes = $customer->getExtensionAttributes();
    -        if ($customerExtensionAttributes && $customerExtensionAttributes->getAssistanceAllowed()) {
    +
    +        if ($enoughPermission && $customerExtensionAttributes && $customerExtensionAttributes->getAssistanceAllowed()) {
                 $isEnabled = (int)$customerExtensionAttributes->getAssistanceAllowed() === IsAssistanceEnabled::ALLOWED;
                 $this->setAssistance->execute($customerId, $isEnabled);
             }
    
  • app/code/Magento/LoginAsCustomer/composer.json+15 11 modified
    @@ -1,25 +1,29 @@
     {
         "name": "magento/module-login-as-customer",
         "description": "Allow for admin to enter a customer account",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-login-as-customer-api": "*"
    -    },
    -    "suggest": {
    -        "magento/module-backend": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-login-as-customer-api": "100.4.*"
    +    },
    +    "suggest": {
    +        "magento/module-backend": "102.0.*"
    +    },
         "autoload": {
    -        "files": [ "registration.php" ],
    +        "files": [
    +            "registration.php"
    +        ],
             "psr-4": {
                 "Magento\\LoginAsCustomer\\": ""
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerFrontendUi/composer.json+12 9 modified
    @@ -1,22 +1,25 @@
     {
         "name": "magento/module-login-as-customer-frontend-ui",
    -    "description": "",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-login-as-customer-api": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2-p1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-login-as-customer-api": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-store": "101.1.*"
    +    },
         "autoload": {
    -        "files": [ "registration.php" ],
    +        "files": [
    +            "registration.php"
    +        ],
             "psr-4": {
                 "Magento\\LoginAsCustomerFrontendUi\\": ""
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerGraphQl/composer.json+14 12 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-login-as-customer-graph-ql",
         "description": "Flexible login as a customer so a merchant or merchant admin can log into an end customer's account to assist them with their account.",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-login-as-customer-api": "*",
    -        "magento/module-login-as-customer-assistance": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-store": "*",
    -        "magento/module-customer": "*"
    -    },
    -    "suggest": {
    -        "magento/module-login-as-customer": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-login-as-customer-api": "100.4.*",
    +        "magento/module-login-as-customer-assistance": "100.4.*",
    +        "magento/module-integration": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-customer": "103.0.*"
    +    },
    +    "suggest": {
    +        "magento/module-login-as-customer": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerLog/composer.json+17 14 modified
    @@ -1,27 +1,30 @@
     {
         "name": "magento/module-login-as-customer-log",
    -    "description": "",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-login-as-customer-api": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-user": "*"
    -    },
    -    "suggest": {
    -        "magento/module-login-as-customer": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1-p1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-login-as-customer-api": "100.4.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-user": "101.2.*"
    +    },
    +    "suggest": {
    +        "magento/module-login-as-customer": "100.4.*"
    +    },
         "autoload": {
    -        "files": [ "registration.php" ],
    +        "files": [
    +            "registration.php"
    +        ],
             "psr-4": {
                 "Magento\\LoginAsCustomerLog\\": ""
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerPageCache/composer.json+14 11 modified
    @@ -1,24 +1,27 @@
     {
         "name": "magento/module-login-as-customer-page-cache",
    -    "description": "",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*",
    -        "magento/module-login-as-customer-api": "*"
    -    },
    -    "suggest": {
    -        "magento/module-page-cache": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2-p1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-login-as-customer-api": "100.4.*"
    +    },
    +    "suggest": {
    +        "magento/module-page-cache": "100.4.*"
    +    },
         "autoload": {
    -        "files": [ "registration.php" ],
    +        "files": [
    +            "registration.php"
    +        ],
             "psr-4": {
                 "Magento\\LoginAsCustomerPageCache\\": ""
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerQuote/composer.json+12 11 modified
    @@ -1,21 +1,21 @@
     {
         "name": "magento/module-login-as-customer-quote",
    -    "description": "",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-quote": "*"
    -    },
    -    "suggest": {
    -        "magento/module-login-as-customer-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1-p1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-quote": "101.2.*"
    +    },
    +    "suggest": {
    +        "magento/module-login-as-customer-api": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/LoginAsCustomerSales/composer.json+12 11 modified
    @@ -1,21 +1,21 @@
     {
         "name": "magento/module-login-as-customer-sales",
    -    "description": "",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-user": "*",
    -        "magento/module-login-as-customer-api": "*"
    -    },
    -    "suggest": {
    -        "magento/module-sales": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2-p1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-user": "101.2.*",
    +        "magento/module-login-as-customer-api": "100.4.*"
    +    },
    +    "suggest": {
    +        "magento/module-sales": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Marketplace/composer.json+9 7 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-marketplace",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaContentApi/composer.json+7 5 modified
    @@ -1,16 +1,17 @@
     {
         "name": "magento/module-media-content-api",
         "description": "Magento module provides the API interfaces for managing relations between content and media files used in that content",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/framework": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -20,3 +21,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaContentCatalog/composer.json+10 8 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-media-content-catalog",
         "description": "Magento module provides the implementation of MediaContent functionality for Magento_Catalog module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-media-content-api": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-store": "*",
    -        "magento/framework": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-media-content-api": "100.4.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaContentCms/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-media-content-cms",
         "description": "Magento module provides the implementation of MediaContent functionality for Magento_Cms module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-media-content-api": "*",
    -        "magento/module-cms": "*",
    -        "magento/framework": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-media-content-api": "100.4.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaContent/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-media-content",
         "description": "Magento module provides the implementation for managing relations between content and media files used in that content",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-content-api": "*",
    -        "magento/module-media-gallery-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-content-api": "100.4.*",
    +        "magento/module-media-gallery-api": "101.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaContentSynchronizationApi/composer.json+7 5 modified
    @@ -1,16 +1,17 @@
     {
         "name": "magento/module-media-content-synchronization-api",
         "description": "Magento module responsible for the media content synchronization implementation API",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-content-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-content-api": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -20,3 +21,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaContentSynchronizationCatalog/composer.json+9 7 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-media-content-synchronization-catalog",
         "description": "Magento module provides the implementation of MediaContentSynchronization functionality for Magento_Catalog module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-content-synchronization-api": "*",
    -        "magento/module-media-gallery-synchronization-api": "*",
    -        "magento/module-media-content-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-content-synchronization-api": "100.4.*",
    +        "magento/module-media-gallery-synchronization-api": "100.4.*",
    +        "magento/module-media-content-api": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaContentSynchronizationCms/composer.json+9 7 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-media-content-synchronization-cms",
         "description": "Magento module provides the implementation of MediaContentSynchronization functionality for Magento_Cms module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-content-synchronization-api": "*",
    -        "magento/module-media-gallery-synchronization-api": "*",
    -        "magento/module-media-content-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-content-synchronization-api": "100.4.*",
    +        "magento/module-media-gallery-synchronization-api": "100.4.*",
    +        "magento/module-media-content-api": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaContentSynchronization/composer.json+13 11 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-media-content-synchronization",
         "description": "Magento module provides implementation of the media content data synchronization.",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/framework-bulk": "*",
    -        "magento/module-media-content-synchronization-api": "*",
    -        "magento/module-media-content-api": "*",
    -        "magento/module-asynchronous-operations": "*"
    -    },
    -    "suggest": {
    -        "magento/module-media-gallery-synchronization": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/framework-bulk": "101.0.*",
    +        "magento/module-media-content-synchronization-api": "100.4.*",
    +        "magento/module-media-content-api": "100.4.*",
    +        "magento/module-asynchronous-operations": "100.4.*"
    +    },
    +    "suggest": {
    +        "magento/module-media-gallery-synchronization": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryApi/composer.json+6 4 modified
    @@ -1,15 +1,16 @@
     {
         "name": "magento/module-media-gallery-api",
         "description": "Magento module responsible for media gallery asset attributes storage and management",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "101.0.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -19,3 +20,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryCatalog/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-media-gallery-catalog",
         "description": "Magento module responsible for catalog gallery processor delete operation handling",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-catalog": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/module-catalog": "104.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryCatalogIntegration/composer.json+13 11 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-media-gallery-catalog-integration",
         "description": "Magento module responsible for extending catalog image uploader functionality",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-media-gallery-synchronization-api": "*",
    -        "magento/module-media-gallery-ui-api": "*"
    -    },
    -    "suggest": {
    -        "magento/module-catalog": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/module-media-gallery-synchronization-api": "100.4.*",
    +        "magento/module-media-gallery-ui-api": "100.4.*"
    +    },
    +    "suggest": {
    +        "magento/module-catalog": "104.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryCatalogUi/composer.json+11 9 modified
    @@ -1,20 +1,21 @@
     {
         "name": "magento/module-media-gallery-catalog-ui",
         "description": "Magento module that implement category grid for media gallery.",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryCmsUi/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-media-gallery-cms-ui",
         "description": "Cms related UI elements in the magento media gallery",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-backend": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-backend": "102.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGallery/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-media-gallery",
         "description": "Magento module responsible for media handling",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-cms": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/module-cms": "104.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryIntegration/composer.json+17 15 modified
    @@ -1,32 +1,34 @@
     {
         "name": "magento/module-media-gallery-integration",
         "description": "Magento module responsible for integration of enhanced media gallery",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-ui-api": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-media-gallery-synchronization-api": "*",
    -        "magento/module-ui": "*"
    -    },
    -    "require-dev": {
    -        "magento/module-cms": "*"
    -    },
    -    "suggest": {
    -        "magento/module-catalog": "*",
    -        "magento/module-cms": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-gallery-ui-api": "100.4.*",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/module-media-gallery-synchronization-api": "100.4.*",
    +        "magento/module-ui": "101.2.*"
    +    },
    +    "suggest": {
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-cms": "104.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
             ],
             "psr-4": {
                 "Magento\\MediaGalleryIntegration\\": ""
             }
    +    },
    +    "require-dev": {
    +        "magento/module-cms": "*"
         }
     }
    +
    
  • app/code/Magento/MediaGalleryMetadataApi/composer.json+6 4 modified
    @@ -1,15 +1,16 @@
     {
         "name": "magento/module-media-gallery-metadata-api",
         "description": "Magento module responsible for media gallery metadata implementation API",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -19,3 +20,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryMetadata/composer.json+7 5 modified
    @@ -1,16 +1,17 @@
     {
         "name": "magento/module-media-gallery-metadata",
         "description": "Magento module responsible for images metadata processing",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-metadata-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-gallery-metadata-api": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -20,3 +21,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryRenditionsApi/composer.json+6 4 modified
    @@ -1,15 +1,16 @@
     {
         "name": "magento/module-media-gallery-renditions-api",
         "description": "Magento module that is responsible for the API implementation of Media Gallery Renditions.",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -19,3 +20,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryRenditions/composer.json+13 11 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-media-gallery-renditions",
         "description": "Magento module that implements height and width fields for for media gallery items.",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-renditions-api": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/framework-message-queue": "*",
    -        "magento/module-cms": "*"
    -    },
    -    "suggest": {
    -        "magento/module-media-content-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-gallery-renditions-api": "100.4.*",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/framework-message-queue": "100.4.*",
    +        "magento/module-cms": "104.0.*"
    +    },
    +    "suggest": {
    +        "magento/module-media-content-api": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGallerySynchronizationApi/composer.json+7 5 modified
    @@ -1,16 +1,17 @@
     {
         "name": "magento/module-media-gallery-synchronization-api",
         "description": "Magento module responsible for the media gallery synchronization implementation API",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-gallery-api": "101.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -20,3 +21,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGallerySynchronization/composer.json+9 7 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-media-gallery-synchronization",
         "description": "Magento module provides implementation of the media gallery data synchronization.",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-media-gallery-synchronization-api": "*",
    -        "magento/framework-message-queue": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/module-media-gallery-synchronization-api": "100.4.*",
    +        "magento/framework-message-queue": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGallerySynchronizationMetadata/composer.json+9 7 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-media-gallery-synchronization-metadata",
         "description": "Magento module responsible for images metadata synchronization",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-media-gallery-metadata-api": "*",
    -        "magento/module-media-gallery-synchronization-api": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/module-media-gallery-metadata-api": "100.4.*",
    +        "magento/module-media-gallery-synchronization-api": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryUiApi/composer.json+9 7 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-media-gallery-ui-api",
         "description": "Magento module responsible for the media gallery UI implementation API",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    -    },
    -    "suggest": {
    -        "magento/module-cms": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*"
    +    },
    +    "suggest": {
    +        "magento/module-cms": "104.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaGalleryUi/composer.json+17 15 modified
    @@ -1,26 +1,27 @@
     {
         "name": "magento/module-media-gallery-ui",
         "description": "Magento module responsible for the media gallery UI implementation",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-store": "*",
    -        "magento/module-media-gallery-ui-api": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-media-gallery-metadata-api": "*",
    -        "magento/module-media-gallery-synchronization-api": "*",
    -        "magento/module-media-content-api": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-authorization": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-media-gallery-ui-api": "100.4.*",
    +        "magento/module-media-gallery-api": "101.0.*",
    +        "magento/module-media-gallery-metadata-api": "100.4.*",
    +        "magento/module-media-gallery-synchronization-api": "100.4.*",
    +        "magento/module-media-content-api": "100.4.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-authorization": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -30,3 +31,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MediaStorage/composer.json+16 14 modified
    @@ -1,26 +1,27 @@
     {
         "name": "magento/module-media-storage",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/framework-bulk": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-asynchronous-operations": "*",
    -        "magento/module-authorization": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/framework-bulk": "101.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-asynchronous-operations": "100.4.*",
    +        "magento/module-authorization": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -30,3 +31,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MessageQueue/composer.json+9 7 modified
    @@ -1,20 +1,21 @@
     {
         "name": "magento/module-message-queue",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
    -        "magento/framework": "*",
    -        "magento/framework-message-queue": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/framework-message-queue": "100.4.*",
             "magento/magento-composer-installer": "*",
             "php": "~7.3.0||~7.4.0"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Msrp/composer.json+15 13 modified
    @@ -1,27 +1,28 @@
     {
         "name": "magento/module-msrp",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-downloadable": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*"
         },
         "suggest": {
    -        "magento/module-bundle": "*",
    -        "magento/module-msrp-sample-data": "*"
    +        "magento/module-bundle": "101.0.*",
    +        "magento/module-msrp-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -31,3 +32,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MsrpConfigurableProduct/composer.json+11 9 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-msrp-configurable-product",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-configurable-product": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-msrp": "100.4.*",
    +        "magento/module-configurable-product": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MsrpGroupedProduct/composer.json+11 9 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-msrp-grouped-product",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-grouped-product": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-msrp": "100.4.*",
    +        "magento/module-grouped-product": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Multishipping/composer.json+18 16 modified
    @@ -1,28 +1,29 @@
     {
         "name": "magento/module-multishipping",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-captcha": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-captcha": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -32,3 +33,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/MysqlMq/composer.json+10 8 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-mysql-mq",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
    -        "magento/framework": "*",
    -        "magento/framework-message-queue": "*",
    +        "magento/framework": "103.0.*",
    +        "magento/framework-message-queue": "100.4.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-store": "*",
    +        "magento/module-store": "101.1.*",
             "php": "~7.3.0||~7.4.0"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/NewRelicReporting/composer.json+14 12 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-new-relic-reporting",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    +        "magento/framework": "103.0.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-configurable-product": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*"
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-configurable-product": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Newsletter/composer.json+17 15 modified
    @@ -1,27 +1,28 @@
     {
         "name": "magento/module-newsletter",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-email": "*",
    -        "magento/module-require-js": "*",
    -        "magento/module-store": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-email": "101.1.*",
    +        "magento/module-require-js": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-widget": "101.2.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -31,3 +32,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/NewsletterGraphQl/composer.json+12 10 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-newsletter-graph-ql",
         "description": "Provides GraphQl functionality for the newsletter subscriptions.",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    -    "type": "magento2-module",
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-newsletter": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-newsletter": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/OfflinePayments/composer.json+12 10 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-offline-payments",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-quote": "101.2.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/OfflineShipping/composer.json+19 17 modified
    @@ -1,31 +1,32 @@
     {
         "name": "magento/module-offline-shipping",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-sales-rule": "101.2.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-checkout": "*",
    -        "magento/module-offline-shipping-sample-data": "*"
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-offline-shipping-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -35,3 +36,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/PageCache/composer.json+11 9 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-page-cache",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-config": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Payment/composer.json+15 13 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-payment",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml+30 0 modified
    @@ -40,6 +40,21 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
                        title="<?= $block->escapeHtml(__('Credit Card Number')) ?>"
                        class="admin__control-text validate-cc-number"
                        value="<?= /* @noEscape */ $block->getInfoData('cc_number') ?>"/>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncopy',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncut',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'onpaste',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
             </div>
         </div>
         <div class="field-date admin__field _required">
    @@ -78,6 +93,21 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
                            class="required-entry validate-cc-cvn admin__control-cvn admin__control-text"
                            id="<?= /* @noEscape */ $code ?>_cc_cid"
                            name="payment[cc_cid]" value="<?= /* @noEscape */ $block->getInfoData('cc_cid') ?>"/>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncopy',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncut',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'onpaste',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
                 </div>
             </div>
         <?php endif; ?>
    
  • app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml+30 0 modified
    @@ -80,6 +80,21 @@ $ccExpMonth = $block->getInfoData('cc_exp_month');
                            "validate-cc-type":"#<?= /* @noEscape */ $code ?>_cc_type"
                        }'
                        autocomplete="off"/>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncopy',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncut',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'onpaste',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
             </div>
         </div>
     
    @@ -129,6 +144,21 @@ $ccExpMonth = $block->getInfoData('cc_exp_month');
                            value=""
                            data-validate='{"required-number":true, "validate-cc-cvn":"#<?=/* @noEscape */ $code?>_cc_type"}'
                            autocomplete="off"/>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncopy',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncut',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'onpaste',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
                 </div>
             </div>
         <?php endif; ?>
    
  • app/code/Magento/Payment/view/frontend/templates/form/cc.phtml+30 0 modified
    @@ -51,6 +51,21 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
                            "validate-cc-number":"#<?= /* @noEscape */ $code ?>_cc_type",
                            "validate-cc-type":"#<?= /* @noEscape */ $code ?>_cc_type"
                        }'/>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncopy',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncut',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'onpaste',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
             </div>
         </div>
         <div class="field date required" id="<?= /* @noEscape */ $code ?>_cc_type_exp_div">
    @@ -100,6 +115,21 @@ $ccExpYear = $block->getInfoData('cc_exp_year');
                 <input type="number" title="<?= $block->escapeHtml(__('Card Verification Number')) ?>"
                        class="input-text cvv" id="<?= /* @noEscape */ $code ?>_cc_cid" name="payment[cc_cid]" value=""
                        data-validate='{"required-number":true, "validate-cc-cvn":"#<?= /* @noEscape */ $code ?>_cc_type"}'/>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncopy',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_cid'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncut',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_cid'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'onpaste',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_cid'
    +            ) ?>
                 <?php $content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' .
                     $block->escapeHtml(__('Card Verification Number Visual Reference')) .
                     '\" title=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?>
    
  • app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml+30 0 modified
    @@ -75,6 +75,21 @@ $content = '<img src=\"' . $block->escapeUrl($block->getViewFileUrl('Magento_Che
                                "validate-cc-type":"#<?= /* @noEscape */ $code ?>_cc_type"
                            }'
                            autocomplete="off"/>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncopy',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_number'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncut',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_number'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'onpaste',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_number'
    +                ) ?>
                 </div>
             </div>
             <div class="field required date" id="<?= /* @noEscape */ $code ?>_cc_type_exp_div">
    @@ -130,6 +145,21 @@ $content = '<img src=\"' . $block->escapeUrl($block->getViewFileUrl('Magento_Che
                                "required-number":true,
                                "validate-cc-cvn":"#<?= /* @noEscape */ $code ?>_cc_type"
                            }' autocomplete="off"/>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncopy',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncut',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'onpaste',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
                     <div class="note">
                         <a href="#" id="<?= /* @noEscape */ $code ?>-cvv-what-is-this" class="action cvv"
                            title="<?= $block->escapeHtml(__('What is this?')) ?>" data-mage-init='{
    
  • app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js+8 0 modified
    @@ -192,6 +192,14 @@ define([
                     '" />';
             },
     
    +        /**
    +         * Get unsanitized html for image for CVV
    +         * @returns {String}
    +         */
    +        getCvvImageUnsanitizedHtml: function () {
    +            return this.getCvvImageHtml();
    +        },
    +
             /**
              * @deprecated
              * @returns {Object}
    
  • app/code/Magento/Payment/view/frontend/web/template/payment/cc-form.html+7 1 modified
    @@ -45,6 +45,9 @@
             </label>
             <div class="control">
                 <input type="number" name="payment[cc_number]" class="input-text" value=""
    +                   oncopy="return false;"
    +                   oncut="return false;"
    +                   onpaste="return false;"
                        data-bind="attr: {
                                         autocomplete: off,
                                         id: getCode() + '_cc_number',
    @@ -104,6 +107,9 @@
                        class="input-text cvv"
                        name="payment[cc_cid]"
                        value=""
    +                   oncopy="return false;"
    +                   oncut="return false;"
    +                   onpaste="return false;"
                        data-bind="attr: {id: getCode() + '_cc_cid',
                             title: $t('Card Verification Number'),
                             'data-container': getCode() + '-cc-cvv',
    @@ -119,7 +125,7 @@
                     </span>
                     <div class="field-tooltip-content"
                          data-target="dropdown"
    -                     data-bind="html: getCvvImageHtml()"></div>
    +                     data-bind="html: getCvvImageUnsanitizedHtml()"></div>
                 </div>
             </div>
         </div>
    
  • app/code/Magento/PaypalCaptcha/composer.json+12 10 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-paypal-captcha",
         "description": "Provides CAPTCHA validation for PayPal Payflow Pro",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-captcha": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-captcha": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-paypal": "*"
    +        "magento/module-paypal": "101.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Paypal/composer.json+26 24 modified
    @@ -1,39 +1,40 @@
     {
         "name": "magento/module-paypal",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.0.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-instant-purchase": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-vault": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-instant-purchase": "100.4.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-vault": "101.2.*"
         },
         "suggest": {
    -        "magento/module-checkout-agreements": "*"
    +        "magento/module-checkout-agreements": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -43,3 +44,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/PaypalGraphQl/composer.json+18 16 modified
    @@ -1,30 +1,31 @@
     {
         "name": "magento/module-paypal-graph-ql",
         "description": "GraphQl support for Paypal",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-paypal": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-store": "*",
    -        "magento/module-vault": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-paypal": "101.0.*",
    +        "magento/module-quote-graph-ql": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-vault": "101.2.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*",
    -        "magento/module-store-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/module-store-graph-ql": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -34,3 +35,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Paypal/view/adminhtml/templates/transparent/form.phtml+30 0 modified
    @@ -81,6 +81,21 @@ $ccExpMonth = $block->getInfoData('cc_exp_month');
                            "validate-cc-type":"#<?= /* @noEscape */ $code ?>_cc_type"
                        }'
                        autocomplete="off"/>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncopy',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'oncut',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
    +            <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                'onpaste',
    +                "event.preventDefault();",
    +                '#' . $code . '_cc_number'
    +            ) ?>
             </div>
         </div>
     
    @@ -130,6 +145,21 @@ $ccExpMonth = $block->getInfoData('cc_exp_month');
                            value=""
                            data-validate='{"required-number":true, "validate-cc-cvn":"#<?=/* @noEscape */ $code?>_cc_type"}'
                            autocomplete="off"/>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncopy',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'oncut',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
    +                <?= /* @noEscape */ $secureRenderer->renderEventListenerAsTag(
    +                    'onpaste',
    +                    "event.preventDefault();",
    +                    '#' . $code . '_cc_cid'
    +                ) ?>
                 </div>
             </div>
         <?php endif; ?>
    
  • app/code/Magento/Persistent/composer.json+14 12 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-persistent",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-cron": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-cron": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ProductAlert/composer.json+14 12 modified
    @@ -1,26 +1,27 @@
     {
         "name": "magento/module-product-alert",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -30,3 +31,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ProductVideo/composer.json+15 13 modified
    @@ -1,28 +1,29 @@
     {
         "name": "magento/module-product-video",
         "description": "Add Video to Products",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    +        "magento/framework": "103.0.*",
             "magento/magento-composer-installer": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*"
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-customer": "*",
    -        "magento/module-config": "*"
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -32,3 +33,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ProductVideo/etc/csp_whitelist.xml+6 0 modified
    @@ -14,12 +14,18 @@
                     <value id="google_video" type="host">www.googleapis.com</value>
                     <value id="vimeo" type="host">vimeo.com</value>
                     <value id="www_vimeo" type="host">www.vimeo.com</value>
    +                <value id="vimeo_cdn" type="host">*.vimeocdn.com</value>
                 </values>
             </policy>
             <policy id="img-src">
                 <values>
                     <value id="vimeo_cdn" type="host">*.vimeocdn.com</value>
                 </values>
             </policy>
    +        <policy id="frame-src">
    +            <values>
    +                <value id="player_vimeo" type="host">player.vimeo.com</value>
    +            </values>
    +        </policy>
         </policies>
     </csp_whitelist>
    
  • app/code/Magento/ProductVideo/Test/Mftf/ActionGroup/AssertProductVideoStorefrontProductPageActionGroup.xml+1 0 modified
    @@ -17,6 +17,7 @@
                 <argument name="videoType" type="string" defaultValue="youtube"/>
             </arguments>
     
    +        <waitForElementVisible selector="{{StorefrontProductInfoMainSection.productVideo(videoType)}}" stepKey="waitVideoElementVisible"/>
             <seeElement selector="{{StorefrontProductInfoMainSection.productVideo(videoType)}}" stepKey="seeProductVideoDataType"/>
         </actionGroup>
     </actionGroups>
    
  • app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js+8 7 modified
    @@ -497,20 +497,20 @@ define([
                         var tmp,
                             respData;
     
    -                    if (data.length < 1) {
    +                    if (!data) {
                             this._onRequestError($.mage.__('Video not found'));
     
                             return null;
                         }
    -                    tmp = data[0];
    +                    tmp = data;
                         respData = {
                             duration: this._formatVimeoDuration(tmp.duration),
    -                        channel: tmp['user_name'],
    -                        channelId: tmp['user_url'],
    +                        channel: tmp['author_name'],
    +                        channelId: tmp['author_url'],
                             uploaded: tmp['upload_date'],
                             title: tmp.title,
                             description: tmp.description.replace(/(&nbsp;|<([^>]+)>)/ig, ''),
    -                        thumbnail: tmp['thumbnail_large'],
    +                        thumbnail: tmp['thumbnail_url'],
                             videoId: videoInfo.id,
                             videoProvider: videoInfo.type
                         };
    @@ -539,10 +539,11 @@ define([
                         );
                     } else if (type === 'vimeo') {
                         $.ajax({
    -                        url: 'https://www.vimeo.com/api/v2/video/' + id + '.json',
    +                        url: 'https://vimeo.com/api/oembed.json',
                             dataType: 'jsonp',
                             data: {
    -                            format: 'json'
    +                            format: 'json',
    +                            url: 'https://vimeo.com/' + id
                             },
                             timeout: 5000,
                             success:  $.proxy(_onVimeoLoaded, self),
    
  • app/code/Magento/QuoteAnalytics/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-quote-analytics",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-analytics": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-analytics": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/QuoteBundleOptions/composer.json+7 5 modified
    @@ -1,16 +1,17 @@
     {
         "name": "magento/module-quote-bundle-options",
         "description": "Magento module provides data provider for creating buy request for bundle products",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-quote": "101.2.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -20,3 +21,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Quote/composer.json+23 21 modified
    @@ -1,35 +1,36 @@
     {
         "name": "magento/module-quote",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-sequence": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-sales-sequence": "100.4.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*"
         },
         "suggest": {
    -        "magento/module-webapi": "*"
    +        "magento/module-webapi": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -39,3 +40,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/QuoteConfigurableOptions/composer.json+7 5 modified
    @@ -1,16 +1,17 @@
     {
         "name": "magento/module-quote-configurable-options",
         "description": "Magento module provides data provider for creating buy request for configurable products",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-quote": "101.2.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -20,3 +21,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/QuoteDownloadableLinks/composer.json+7 5 modified
    @@ -1,16 +1,17 @@
     {
         "name": "magento/module-quote-downloadable-links",
         "description": "Magento module provides data provider for creating buy request for links of downloadable products",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-quote": "101.2.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -20,3 +21,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/QuoteGraphQl/composer.json+18 16 modified
    @@ -2,27 +2,28 @@
         "name": "magento/module-quote-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-store": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-customer-graph-ql": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-graph-ql": "*",
    -        "magento/module-gift-message": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-customer-graph-ql": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/module-gift-message": "100.4.*"
         },
         "suggest": {
    -        "magento/module-graph-ql-cache": "*"
    +        "magento/module-graph-ql-cache": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -32,3 +33,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/RelatedProductGraphQl/composer.json+10 8 modified
    @@ -2,19 +2,20 @@
         "name": "magento/module-related-product-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/framework": "*"
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-graph-ql": "100.4.*",
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -24,3 +25,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ReleaseNotification/composer.json+12 10 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-release-notification",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/module-user": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-ui": "*",
    -        "magento/framework": "*"
    -    },
    -    "suggest": {
    -        "magento/module-config": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/module-user": "101.2.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/framework": "103.0.*"
    +    },
    +    "suggest": {
    +        "magento/module-config": "101.2.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/RemoteStorage/composer.json+17 15 modified
    @@ -1,27 +1,28 @@
     {
         "name": "magento/module-remote-storage",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-backend": "*",
    -        "magento/module-sitemap": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-downloadable-import-export": "*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-sitemap": "100.4.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-downloadable": "100.4.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-import-export": "101.0.*",
    +        "magento/module-catalog-import-export": "101.1.*",
    +        "magento/module-downloadable-import-export": "100.4.*",
             "predis/predis": "*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -31,3 +32,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Reports/composer.json+25 23 modified
    @@ -1,35 +1,36 @@
     {
         "name": "magento/module-reports",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-review": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-wishlist": "*",
    -        "magento/module-directory": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-downloadable": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-review": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-sales-rule": "101.2.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-widget": "101.2.*",
    +        "magento/module-wishlist": "101.2.*",
    +        "magento/module-directory": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -39,3 +40,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/RequireJs/composer.json+8 6 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-require-js",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ReviewAnalytics/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-review-analytics",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-review": "*",
    -        "magento/module-analytics": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-review": "100.4.*",
    +        "magento/module-analytics": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Review/composer.json+18 16 modified
    @@ -1,30 +1,31 @@
     {
         "name": "magento/module-review",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-newsletter": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-newsletter": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-cookie": "*",
    -        "magento/module-review-sample-data": "*"
    +        "magento/module-cookie": "100.4.*",
    +        "magento/module-review-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -34,3 +35,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ReviewGraphQl/composer.json+12 10 modified
    @@ -2,21 +2,22 @@
         "name": "magento/module-review-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/module-catalog": "*",
    -        "magento/module-review": "*",
    -        "magento/module-store": "*",
    -        "magento/framework": "*"
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-review": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*",
    -        "magento/module-graph-ql-cache": "*"
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/module-graph-ql-cache": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Robots/composer.json+10 8 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-robots",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.1.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-theme": "*"
    +        "magento/module-theme": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Rss/composer.json+11 9 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-rss",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Rule/composer.json+12 10 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-rule",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SalesAnalytics/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-sales-analytics",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-analytics": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-analytics": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Sales/composer.json+33 31 modified
    @@ -1,45 +1,46 @@
     {
         "name": "magento/module-sales",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "103.0.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-bundle": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-gift-message": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-reports": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-sales-sequence": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-wishlist": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-bundle": "101.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-gift-message": "100.4.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-reports": "100.4.*",
    +        "magento/module-sales-rule": "101.2.*",
    +        "magento/module-sales-sequence": "100.4.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-widget": "101.2.*",
    +        "magento/module-wishlist": "101.2.*"
         },
         "suggest": {
    -        "magento/module-sales-sample-data": "*"
    +        "magento/module-sales-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -49,3 +50,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SalesGraphQl/composer.json+13 11 modified
    @@ -2,21 +2,22 @@
         "name": "magento/module-sales-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-graph-ql": "*",
    -        "magento/module-shipping": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-graph-ql": "100.4.*",
    +        "magento/module-shipping": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SalesInventory/composer.json+12 10 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-sales-inventory",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SalesRule/composer.json+28 26 modified
    @@ -1,40 +1,41 @@
     {
         "name": "magento/module-sales-rule",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-rule": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-reports": "*",
    -        "magento/module-rule": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-captcha": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-authorization": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-rule": "101.2.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-reports": "100.4.*",
    +        "magento/module-rule": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-widget": "101.2.*",
    +        "magento/module-captcha": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-authorization": "100.4.*"
         },
         "suggest": {
    -        "magento/module-sales-rule-sample-data": "*"
    +        "magento/module-sales-rule-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -44,3 +45,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SalesSequence/composer.json+8 6 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-sales-sequence",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SampleData/composer.json+9 7 modified
    @@ -1,21 +1,22 @@
     {
         "name": "magento/module-sample-data",
         "description": "Sample Data fixtures",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/sample-data-media": "*"
    +        "magento/sample-data-media": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "cli_commands.php",
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Search/composer.json+13 11 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-search",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.1.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/module-reports": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog-search": "102.0.*",
    +        "magento/module-reports": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Security/composer.json+12 10 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-security",
         "description": "Security management module",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-store": "*",
    -        "magento/module-user": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-user": "101.2.*"
         },
         "suggest": {
    -        "magento/module-customer": "*"
    +        "magento/module-customer": "103.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Security/view/base/web/js/escaper.js+12 1 modified
    @@ -157,7 +157,8 @@ define([], function () {
                         attribute = treeWalker.currentNode.attributes[i];
                         nodeName = treeWalker.currentNode.nodeName.toLowerCase();
     
    -                    if (this.generallyAllowedAttributes.indexOf(attribute.name) === -1 || // eslint-disable-line max-depth,max-len
    +                    if (this.generallyAllowedAttributes.indexOf(attribute.name) === -1  || // eslint-disable-line max-depth,max-len
    +                        this._checkHrefValue(attribute) ||
                             this.forbiddenAttributesByElement[nodeName] &&
                             this.forbiddenAttributesByElement[nodeName].indexOf(attribute.name) !== -1
                         ) {
    @@ -169,6 +170,16 @@ define([], function () {
                 attributesToRemove.forEach(function (attributeToRemove) {
                     attributeToRemove.ownerElement.removeAttribute(attributeToRemove.name);
                 });
    +        },
    +
    +        /**
    +         * Check that attribute contains script content
    +         *
    +         * @param {Object} attribute
    +         * @private
    +         */
    +        _checkHrefValue: function (attribute) {
    +            return attribute.nodeName === 'href' && attribute.nodeValue.startsWith('javascript');
             }
         };
     });
    
  • app/code/Magento/SendFriend/composer.json+14 12 modified
    @@ -1,24 +1,25 @@
     {
         "name": "magento/module-send-friend",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-store": "*",
    -        "magento/module-captcha": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-captcha": "100.4.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-theme": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -28,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SendFriendGraphQl/composer.json+9 7 modified
    @@ -2,17 +2,18 @@
         "name": "magento/module-send-friend-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-send-friend": "*",
    -        "magento/module-graph-ql": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-send-friend": "100.4.*",
    +        "magento/module-graph-ql": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Shipping/composer.json+24 22 modified
    @@ -1,37 +1,38 @@
     {
         "name": "magento/module-shipping",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "ext-gd": "*",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-contact": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-user": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-contact": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-user": "101.2.*"
         },
         "suggest": {
    -        "magento/module-fedex": "*",
    -        "magento/module-ups": "*",
    -        "magento/module-config": "*"
    +        "magento/module-fedex": "100.4.*",
    +        "magento/module-ups": "100.4.*",
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -41,3 +42,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Sitemap/composer.json+18 16 modified
    @@ -1,30 +1,31 @@
     {
         "name": "magento/module-sitemap",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-robots": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-url-rewrite": "100.4.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-robots": "101.1.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -34,3 +35,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Store/composer.json+17 15 modified
    @@ -1,29 +1,30 @@
     {
         "name": "magento/module-store",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.1.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*"
         },
         "suggest": {
    -        "magento/module-deploy": "*"
    +        "magento/module-deploy": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -33,3 +34,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/StoreGraphQl/composer.json+8 6 modified
    @@ -2,16 +2,17 @@
         "name": "magento/module-store-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*",
    -        "magento/module-graph-ql": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-graph-ql": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Swagger/composer.json+8 6 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-swagger",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SwaggerWebapiAsync/composer.json+10 8 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-swagger-webapi-async",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-swagger": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-swagger": "100.4.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SwaggerWebapi/composer.json+9 7 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-swagger-webapi",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-swagger": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-swagger": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Swatches/composer.json+20 18 modified
    @@ -1,32 +1,33 @@
     {
         "name": "magento/module-swatches",
         "description": "Add Swatches to Products",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-config": "*",
    -        "magento/module-configurable-product": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-configurable-product": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*"
         },
         "suggest": {
    -        "magento/module-layered-navigation": "*",
    -        "magento/module-swatches-sample-data": "*"
    +        "magento/module-layered-navigation": "100.4.*",
    +        "magento/module-swatches-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -36,3 +37,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SwatchesGraphQl/composer.json+9 7 modified
    @@ -2,17 +2,18 @@
         "name": "magento/module-swatches-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-swatches": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-graph-ql": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-swatches": "100.4.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-graph-ql": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/SwatchesLayeredNavigation/composer.json+8 6 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-swatches-layered-navigation",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    +        "magento/framework": "103.0.*",
             "magento/magento-composer-installer": "*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Tax/composer.json+23 21 modified
    @@ -1,35 +1,36 @@
     {
         "name": "magento/module-tax",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-reports": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-reports": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-tax-sample-data": "*"
    +        "magento/module-tax-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -39,3 +40,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/TaxGraphQl/composer.json+9 7 modified
    @@ -2,18 +2,19 @@
         "name": "magento/module-tax-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-tax": "*",
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-catalog-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/TaxImportExport/composer.json+13 11 modified
    @@ -1,23 +1,24 @@
     {
         "name": "magento/module-tax-import-export",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -27,3 +28,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Theme/composer.json+21 19 modified
    @@ -1,33 +1,34 @@
     {
         "name": "magento/module-theme",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.1.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-config": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-require-js": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-widget": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-media-storage": "100.4.*",
    +        "magento/module-require-js": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-widget": "101.2.*"
         },
         "suggest": {
    -        "magento/module-theme-sample-data": "*",
    -        "magento/module-deploy": "*",
    -        "magento/module-directory": "*"
    +        "magento/module-theme-sample-data": "Sample Data version: 100.4.*",
    +        "magento/module-deploy": "100.4.*",
    +        "magento/module-directory": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -37,3 +38,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/ThemeGraphQl/composer.json+8 6 modified
    @@ -2,17 +2,18 @@
         "name": "magento/module-theme-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
         "suggest": {
    -        "magento/module-store-graph-ql": "*"
    +        "magento/module-store-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Tinymce3/composer.json+13 11 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-tinymce-3",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-variable": "*",
    -        "magento/module-widget": "*"
    -    },
    -    "suggest": {
    -        "magento/module-cms": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-variable": "100.4.*",
    +        "magento/module-widget": "101.2.*"
    +    },
    +    "suggest": {
    +        "magento/module-cms": "104.0.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Translation/composer.json+13 11 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-translation",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-developer": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-developer": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*"
         },
         "suggest": {
    -        "magento/module-deploy": "*"
    +        "magento/module-deploy": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Ui/composer.json+14 12 modified
    @@ -1,26 +1,27 @@
     {
         "name": "magento/module-ui",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-store": "*",
    -        "magento/module-user": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-user": "101.2.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -30,3 +31,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Ups/composer.json+16 14 modified
    @@ -1,28 +1,29 @@
     {
         "name": "magento/module-ups",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-config": "*"
    +        "magento/module-config": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -32,3 +33,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/UrlRewrite/composer.json+15 13 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-url-rewrite",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "102.0.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-cms-url-rewrite": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-url-rewrite": "100.4.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-cms-url-rewrite": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/UrlRewriteGraphQl/composer.json+9 7 modified
    @@ -2,18 +2,19 @@
         "name": "magento/module-url-rewrite-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-url-rewrite": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-url-rewrite": "102.0.*"
         },
         "suggest": {
    -        "magento/module-graph-ql": "*"
    +        "magento/module-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/User/composer.json+15 13 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-user",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-email": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-security": "*",
    -        "magento/module-store": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-email": "101.1.*",
    +        "magento/module-integration": "100.4.*",
    +        "magento/module-security": "100.4.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Usps/composer.json+16 14 modified
    @@ -1,27 +1,28 @@
     {
         "name": "magento/module-usps",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "lib-libxml": "*",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-config": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-shipping": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -31,3 +32,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Variable/composer.json+12 10 modified
    @@ -1,22 +1,23 @@
     {
         "name": "magento/module-variable",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-store": "*",
    -        "magento/module-config": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-config": "101.2.*",
    +        "magento/module-ui": "101.2.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -26,3 +27,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Vault/composer.json+15 14 modified
    @@ -1,25 +1,25 @@
     {
         "name": "magento/module-vault",
    -    "description": "",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-payment": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +29,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/VaultGraphQl/composer.json+8 6 modified
    @@ -2,16 +2,17 @@
         "name": "magento/module-vault-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-vault": "*",
    -        "magento/module-graph-ql": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.0",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-vault": "101.2.*",
    +        "magento/module-graph-ql": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Version/composer.json+8 6 modified
    @@ -1,18 +1,19 @@
     {
         "name": "magento/module-version",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -22,3 +23,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/WebapiAsync/composer.json+13 11 modified
    @@ -1,25 +1,26 @@
     {
         "name": "magento/module-webapi-async",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/framework-message-queue": "*",
    -        "magento/module-webapi": "*",
    -        "magento/module-asynchronous-operations": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/framework-message-queue": "100.4.*",
    +        "magento/module-webapi": "100.4.*",
    +        "magento/module-asynchronous-operations": "100.4.*"
         },
         "suggest": {
    -        "magento/module-user": "*",
    -        "magento/module-customer": "*"
    +        "magento/module-user": "101.2.*",
    +        "magento/module-customer": "103.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -29,3 +30,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Webapi/composer.json+14 12 modified
    @@ -1,26 +1,27 @@
     {
         "name": "magento/module-webapi",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.1",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-store": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-authorization": "100.4.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-integration": "100.4.*",
    +        "magento/module-store": "101.1.*"
         },
         "suggest": {
    -        "magento/module-user": "*",
    -        "magento/module-customer": "*"
    +        "magento/module-user": "101.2.*",
    +        "magento/module-customer": "103.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -30,3 +31,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/WebapiSecurity/composer.json+9 7 modified
    @@ -1,19 +1,20 @@
     {
         "name": "magento/module-webapi-security",
         "description": "WebapiSecurity module provides option to loosen security on some webapi resources.",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-webapi": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-webapi": "100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Weee/composer.json+21 19 modified
    @@ -1,33 +1,34 @@
     {
         "name": "magento/module-weee",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-directory": "100.4.*",
    +        "magento/module-eav": "102.1.*",
    +        "magento/module-page-cache": "100.4.*",
    +        "magento/module-quote": "101.2.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-bundle": "*"
    +        "magento/module-bundle": "101.0.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -37,3 +38,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/WeeeGraphQl/composer.json+11 9 modified
    @@ -2,20 +2,21 @@
         "name": "magento/module-weee-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
    +    "version": "100.4.0",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-store": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-weee": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-tax": "100.4.*",
    +        "magento/module-weee": "100.4.*"
         },
         "suggest": {
    -        "magento/module-catalog-graph-ql": "*"
    +        "magento/module-catalog-graph-ql": "100.4.*"
         },
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -25,3 +26,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Widget/composer.json+16 14 modified
    @@ -1,28 +1,29 @@
     {
         "name": "magento/module-widget",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-variable": "*",
    -        "magento/module-ui": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-cms": "104.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-variable": "100.4.*",
    +        "magento/module-ui": "101.2.*"
         },
         "suggest": {
    -        "magento/module-widget-sample-data": "*"
    +        "magento/module-widget-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -32,3 +33,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/WishlistAnalytics/composer.json+8 6 modified
    @@ -1,17 +1,18 @@
     {
         "name": "magento/module-wishlist-analytics",
         "description": "N/A",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-wishlist": "*",
    -        "magento/module-analytics": "*"
    -    },
         "type": "magento2-module",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.1",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-wishlist": "101.2.*",
    +        "magento/module-analytics": "100.4.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -21,3 +22,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/Wishlist/composer.json+25 23 modified
    @@ -1,37 +1,38 @@
     {
         "name": "magento/module-wishlist",
         "description": "N/A",
    +    "type": "magento2-module",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "101.2.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-rss": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-store": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-captcha": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/module-backend": "102.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-inventory": "100.4.*",
    +        "magento/module-checkout": "100.4.*",
    +        "magento/module-customer": "103.0.*",
    +        "magento/module-rss": "100.4.*",
    +        "magento/module-sales": "103.0.*",
    +        "magento/module-store": "101.1.*",
    +        "magento/module-theme": "101.1.*",
    +        "magento/module-ui": "101.2.*",
    +        "magento/module-captcha": "100.4.*"
         },
         "suggest": {
    -        "magento/module-configurable-product": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-bundle": "*",
    -        "magento/module-cookie": "*",
    -        "magento/module-grouped-product": "*",
    -        "magento/module-wishlist-sample-data": "*"
    +        "magento/module-configurable-product": "100.4.*",
    +        "magento/module-downloadable": "100.4.*",
    +        "magento/module-bundle": "101.0.*",
    +        "magento/module-cookie": "100.4.*",
    +        "magento/module-grouped-product": "100.4.*",
    +        "magento/module-wishlist-sample-data": "Sample Data version: 100.4.*"
         },
    -    "type": "magento2-module",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
    @@ -41,3 +42,4 @@
             }
         }
     }
    +
    
  • app/code/Magento/WishlistGraphQl/composer.json+10 8 modified
    @@ -2,18 +2,19 @@
         "name": "magento/module-wishlist-graph-ql",
         "description": "N/A",
         "type": "magento2-module",
    -    "require": {
    -        "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-wishlist": "*",
    -        "magento/module-store": "*"
    -    },
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "version": "100.4.2",
    +    "require": {
    +        "php": "~7.3.0||~7.4.0",
    +        "magento/framework": "103.0.*",
    +        "magento/module-catalog": "104.0.*",
    +        "magento/module-catalog-graph-ql": "100.4.*",
    +        "magento/module-wishlist": "101.2.*",
    +        "magento/module-store": "101.1.*"
    +    },
         "autoload": {
             "files": [
                 "registration.php"
    @@ -23,3 +24,4 @@
             }
         }
     }
    +
    
  • app/design/adminhtml/Magento/backend/composer.json+8 6 modified
    @@ -1,21 +1,23 @@
     {
         "name": "magento/theme-adminhtml-backend",
         "description": "N/A",
    +    "type": "magento2-theme",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-theme",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/design/frontend/Magento/blank/composer.json+8 6 modified
    @@ -1,21 +1,23 @@
     {
         "name": "magento/theme-frontend-blank",
         "description": "N/A",
    +    "type": "magento2-theme",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-theme",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/design/frontend/Magento/luma/composer.json+9 7 modified
    @@ -1,22 +1,24 @@
     {
         "name": "magento/theme-frontend-luma",
         "description": "N/A",
    +    "type": "magento2-theme",
    +    "license": [
    +        "OSL-3.0",
    +        "AFL-3.0"
    +    ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.2",
         "require": {
             "php": "~7.3.0||~7.4.0",
    -        "magento/framework": "*",
    -        "magento/theme-frontend-blank": "*"
    +        "magento/framework": "103.0.*",
    +        "magento/theme-frontend-blank": "100.4.*"
         },
    -    "type": "magento2-theme",
    -    "license": [
    -        "OSL-3.0",
    -        "AFL-3.0"
    -    ],
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/i18n/Magento/de_DE/composer.json+4 2 modified
    @@ -1,20 +1,22 @@
     {
         "name": "magento/language-de_de",
         "description": "German (Germany) language",
    +    "type": "magento2-language",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-language",
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/i18n/Magento/en_US/composer.json+4 2 modified
    @@ -1,20 +1,22 @@
     {
         "name": "magento/language-en_us",
         "description": "English (United States) language",
    +    "type": "magento2-language",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-language",
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/i18n/Magento/es_ES/composer.json+4 2 modified
    @@ -1,20 +1,22 @@
     {
         "name": "magento/language-es_es",
         "description": "Spanish (Spain) language",
    +    "type": "magento2-language",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-language",
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/i18n/Magento/fr_FR/composer.json+4 2 modified
    @@ -1,20 +1,22 @@
     {
         "name": "magento/language-fr_fr",
         "description": "French (France) language",
    +    "type": "magento2-language",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-language",
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/i18n/Magento/nl_NL/composer.json+4 2 modified
    @@ -1,20 +1,22 @@
     {
         "name": "magento/language-nl_nl",
         "description": "Dutch (Netherlands) language",
    +    "type": "magento2-language",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-language",
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/i18n/Magento/pt_BR/composer.json+4 2 modified
    @@ -1,20 +1,22 @@
     {
         "name": "magento/language-pt_br",
         "description": "Portuguese (Brazil) language",
    +    "type": "magento2-language",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-language",
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • app/i18n/Magento/zh_Hans_CN/composer.json+4 2 modified
    @@ -1,20 +1,22 @@
     {
         "name": "magento/language-zh_hans_cn",
         "description": "Chinese (China) language",
    +    "type": "magento2-language",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
         "config": {
             "sort-packages": true
         },
    +    "version": "100.4.0",
         "require": {
    -        "magento/framework": "*"
    +        "magento/framework": "103.0.*"
         },
    -    "type": "magento2-language",
         "autoload": {
             "files": [
                 "registration.php"
             ]
         }
     }
    +
    
  • composer.json+264 262 modified
    @@ -10,6 +10,7 @@
             "preferred-install": "dist",
             "sort-packages": true
         },
    +    "version": "2.4.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "ext-bcmath": "*",
    @@ -85,6 +86,31 @@
             "league/flysystem-aws-s3-v3": "^1.0",
             "league/flysystem-cached-adapter": "^1.0"
         },
    +    "suggest": {
    +        "ext-pcntl": "Need for run processes in parallel mode"
    +    },
    +    "autoload": {
    +        "exclude-from-classmap": [
    +            "**/dev/**",
    +            "**/update/**",
    +            "**/Test/**"
    +        ],
    +        "files": [
    +            "app/etc/NonComposerComponentRegistration.php"
    +        ],
    +        "psr-0": {
    +            "": [
    +                "app/code/",
    +                "generated/code/"
    +            ]
    +        },
    +        "psr-4": {
    +            "Magento\\": "app/code/Magento/",
    +            "Magento\\Framework\\": "lib/internal/Magento/Framework/",
    +            "Magento\\Setup\\": "setup/src/Magento/Setup/",
    +            "Zend\\Mvc\\Controller\\": "setup/src/Zend/Mvc/Controller/"
    +        }
    +    },
         "require-dev": {
             "allure-framework/allure-phpunit": "~1.2.0",
             "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
    @@ -100,290 +126,266 @@
             "sebastian/phpcpd": "~5.0.0",
             "squizlabs/php_codesniffer": "~3.5.4"
         },
    -    "suggest": {
    -        "ext-pcntl": "Need for run processes in parallel mode"
    +    "conflict": {
    +        "gene/bluefoot": "*"
         },
         "replace": {
    -        "magento/module-marketplace": "*",
    -        "magento/module-admin-analytics": "*",
    -        "magento/module-admin-notification": "*",
    -        "magento/module-advanced-pricing-import-export": "*",
    -        "magento/module-amqp": "*",
    -        "magento/module-amqp-store": "*",
    -        "magento/module-analytics": "*",
    -        "magento/module-asynchronous-operations": "*",
    -        "magento/module-authorization": "*",
    -        "magento/module-advanced-search": "*",
    -        "magento/module-backend": "*",
    -        "magento/module-backup": "*",
    -        "magento/module-bundle": "*",
    -        "magento/module-bundle-graph-ql": "*",
    -        "magento/module-bundle-import-export": "*",
    -        "magento/module-cache-invalidate": "*",
    -        "magento/module-captcha": "*",
    -        "magento/module-cardinal-commerce": "*",
    -        "magento/module-catalog": "*",
    -        "magento/module-catalog-customer-graph-ql": "*",
    -        "magento/module-catalog-analytics": "*",
    -        "magento/module-catalog-import-export": "*",
    -        "magento/module-catalog-inventory": "*",
    -        "magento/module-catalog-inventory-graph-ql": "*",
    -        "magento/module-catalog-rule": "*",
    -        "magento/module-catalog-rule-graph-ql": "*",
    -        "magento/module-catalog-rule-configurable": "*",
    -        "magento/module-catalog-search": "*",
    -        "magento/module-catalog-url-rewrite": "*",
    -        "magento/module-catalog-widget": "*",
    -        "magento/module-checkout": "*",
    -        "magento/module-checkout-agreements": "*",
    -        "magento/module-checkout-agreements-graph-ql": "*",
    -        "magento/module-cms": "*",
    -        "magento/module-cms-url-rewrite": "*",
    -        "magento/module-compare-list-graph-ql": "*",
    -        "magento/module-config": "*",
    -        "magento/module-configurable-import-export": "*",
    -        "magento/module-configurable-product": "*",
    -        "magento/module-configurable-product-sales": "*",
    -        "magento/module-contact": "*",
    -        "magento/module-cookie": "*",
    -        "magento/module-cron": "*",
    -        "magento/module-currency-symbol": "*",
    -        "magento/module-customer": "*",
    -        "magento/module-customer-analytics": "*",
    -        "magento/module-customer-downloadable-graph-ql": "*",
    -        "magento/module-customer-import-export": "*",
    -        "magento/module-deploy": "*",
    -        "magento/module-developer": "*",
    -        "magento/module-dhl": "*",
    -        "magento/module-directory": "*",
    -        "magento/module-directory-graph-ql": "*",
    -        "magento/module-downloadable": "*",
    -        "magento/module-downloadable-graph-ql": "*",
    -        "magento/module-downloadable-import-export": "*",
    -        "magento/module-eav": "*",
    -        "magento/module-elasticsearch": "*",
    -        "magento/module-elasticsearch-6": "*",
    -        "magento/module-elasticsearch-7": "*",
    -        "magento/module-email": "*",
    -        "magento/module-encryption-key": "*",
    -        "magento/module-fedex": "*",
    -        "magento/module-gift-message": "*",
    -        "magento/module-gift-message-graph-ql": "*",
    -        "magento/module-google-adwords": "*",
    -        "magento/module-google-analytics": "*",
    -        "magento/module-google-optimizer": "*",
    -        "magento/module-graph-ql": "*",
    -        "magento/module-graph-ql-cache": "*",
    -        "magento/module-catalog-graph-ql": "*",
    -        "magento/module-catalog-cms-graph-ql": "*",
    -        "magento/module-catalog-url-rewrite-graph-ql": "*",
    -        "magento/module-configurable-product-graph-ql": "*",
    -        "magento/module-customer-graph-ql": "*",
    -        "magento/module-eav-graph-ql": "*",
    -        "magento/module-swatches-graph-ql": "*",
    -        "magento/module-tax-graph-ql": "*",
    -        "magento/module-url-rewrite-graph-ql": "*",
    -        "magento/module-cms-url-rewrite-graph-ql": "*",
    -        "magento/module-weee-graph-ql": "*",
    -        "magento/module-cms-graph-ql": "*",
    -        "magento/module-grouped-import-export": "*",
    -        "magento/module-grouped-product": "*",
    -        "magento/module-grouped-catalog-inventory": "*",
    -        "magento/module-grouped-product-graph-ql": "*",
    -        "magento/module-import-export": "*",
    -        "magento/module-indexer": "*",
    -        "magento/module-instant-purchase": "*",
    -        "magento/module-integration": "*",
    -        "magento/module-layered-navigation": "*",
    -        "magento/module-login-as-customer": "*",
    -        "magento/module-login-as-customer-admin-ui": "*",
    -        "magento/module-login-as-customer-api": "*",
    -        "magento/module-login-as-customer-assistance": "*",
    -        "magento/module-login-as-customer-frontend-ui": "*",
    -        "magento/module-login-as-customer-graph-ql": "*",
    -        "magento/module-login-as-customer-log": "*",
    -        "magento/module-login-as-customer-quote": "*",
    -        "magento/module-login-as-customer-page-cache": "*",
    -        "magento/module-login-as-customer-sales": "*",
    -        "magento/module-media-content": "*",
    -        "magento/module-media-content-api": "*",
    -        "magento/module-media-content-catalog": "*",
    -        "magento/module-media-content-cms": "*",
    -        "magento/module-media-gallery": "*",
    -        "magento/module-media-gallery-api": "*",
    -        "magento/module-media-gallery-ui": "*",
    -        "magento/module-media-gallery-ui-api": "*",
    -        "magento/module-media-gallery-integration": "*",
    -        "magento/module-media-gallery-synchronization": "*",
    -        "magento/module-media-gallery-synchronization-api": "*",
    -        "magento/module-media-content-synchronization": "*",
    -        "magento/module-media-content-synchronization-api": "*",
    -        "magento/module-media-content-synchronization-catalog": "*",
    -        "magento/module-media-content-synchronization-cms": "*",
    -        "magento/module-media-gallery-synchronization-metadata": "*",
    -        "magento/module-media-gallery-metadata": "*",
    -        "magento/module-media-gallery-metadata-api": "*",
    -        "magento/module-media-gallery-catalog-ui": "*",
    -        "magento/module-media-gallery-cms-ui": "*",
    -        "magento/module-media-gallery-catalog-integration": "*",
    -        "magento/module-media-gallery-catalog": "*",
    -        "magento/module-media-gallery-renditions": "*",
    -        "magento/module-media-gallery-renditions-api": "*",
    -        "magento/module-media-storage": "*",
    -        "magento/module-message-queue": "*",
    -        "magento/module-msrp": "*",
    -        "magento/module-msrp-configurable-product": "*",
    -        "magento/module-msrp-grouped-product": "*",
    -        "magento/module-multishipping": "*",
    -        "magento/module-mysql-mq": "*",
    -        "magento/module-new-relic-reporting": "*",
    -        "magento/module-newsletter": "*",
    -        "magento/module-newsletter-graph-ql": "*",
    -        "magento/module-offline-payments": "*",
    -        "magento/module-offline-shipping": "*",
    -        "magento/module-page-cache": "*",
    -        "magento/module-payment": "*",
    -        "magento/module-paypal": "*",
    -        "magento/module-paypal-captcha": "*",
    -        "magento/module-paypal-graph-ql": "*",
    -        "magento/module-persistent": "*",
    -        "magento/module-product-alert": "*",
    -        "magento/module-product-video": "*",
    -        "magento/module-quote": "*",
    -        "magento/module-quote-analytics": "*",
    -        "magento/module-quote-bundle-options": "*",
    -        "magento/module-quote-configurable-options": "*",
    -        "magento/module-quote-downloadable-links": "*",
    -        "magento/module-quote-graph-ql": "*",
    -        "magento/module-related-product-graph-ql": "*",
    -        "magento/module-release-notification": "*",
    -        "magento/module-reports": "*",
    -        "magento/module-require-js": "*",
    -        "magento/module-review": "*",
    -        "magento/module-review-graph-ql": "*",
    -        "magento/module-review-analytics": "*",
    -        "magento/module-robots": "*",
    -        "magento/module-rss": "*",
    -        "magento/module-rule": "*",
    -        "magento/module-sales": "*",
    -        "magento/module-sales-analytics": "*",
    -        "magento/module-sales-graph-ql": "*",
    -        "magento/module-sales-inventory": "*",
    -        "magento/module-sales-rule": "*",
    -        "magento/module-sales-sequence": "*",
    -        "magento/module-sample-data": "*",
    -        "magento/module-search": "*",
    -        "magento/module-security": "*",
    -        "magento/module-send-friend": "*",
    -        "magento/module-send-friend-graph-ql": "*",
    -        "magento/module-shipping": "*",
    -        "magento/module-sitemap": "*",
    -        "magento/module-store": "*",
    -        "magento/module-store-graph-ql": "*",
    -        "magento/module-swagger": "*",
    -        "magento/module-swagger-webapi": "*",
    -        "magento/module-swagger-webapi-async": "*",
    -        "magento/module-swatches": "*",
    -        "magento/module-swatches-layered-navigation": "*",
    -        "magento/module-tax": "*",
    -        "magento/module-tax-import-export": "*",
    -        "magento/module-theme": "*",
    -        "magento/module-theme-graph-ql": "*",
    -        "magento/module-translation": "*",
    -        "magento/module-ui": "*",
    -        "magento/module-ups": "*",
    -        "magento/module-url-rewrite": "*",
    -        "magento/module-user": "*",
    -        "magento/module-usps": "*",
    -        "magento/module-variable": "*",
    -        "magento/module-vault": "*",
    -        "magento/module-vault-graph-ql": "*",
    -        "magento/module-version": "*",
    -        "magento/module-webapi": "*",
    -        "magento/module-webapi-async": "*",
    -        "magento/module-webapi-security": "*",
    -        "magento/module-weee": "*",
    -        "magento/module-widget": "*",
    -        "magento/module-wishlist": "*",
    -        "magento/module-wishlist-graph-ql": "*",
    -        "magento/module-wishlist-analytics": "*",
    -        "magento/theme-adminhtml-backend": "*",
    -        "magento/theme-frontend-blank": "*",
    -        "magento/theme-frontend-luma": "*",
    -        "magento/language-de_de": "*",
    -        "magento/language-en_us": "*",
    -        "magento/language-es_es": "*",
    -        "magento/language-fr_fr": "*",
    -        "magento/language-nl_nl": "*",
    -        "magento/language-pt_br": "*",
    -        "magento/language-zh_hans_cn": "*",
    -        "magento/framework": "*",
    -        "magento/framework-amqp": "*",
    -        "magento/framework-bulk": "*",
    -        "magento/framework-message-queue": "*",
    +        "magento/module-marketplace": "100.4.1",
    +        "magento/module-admin-analytics": "100.4.2",
    +        "magento/module-admin-notification": "100.4.1",
    +        "magento/module-advanced-pricing-import-export": "100.4.2",
    +        "magento/module-amqp": "100.4.1",
    +        "magento/module-amqp-store": "100.4.1",
    +        "magento/module-analytics": "100.4.2",
    +        "magento/module-asynchronous-operations": "100.4.2",
    +        "magento/module-authorization": "100.4.2",
    +        "magento/module-advanced-search": "100.4.1",
    +        "magento/module-backend": "102.0.2",
    +        "magento/module-backup": "100.4.2",
    +        "magento/module-bundle": "101.0.2",
    +        "magento/module-bundle-graph-ql": "100.4.2",
    +        "magento/module-bundle-import-export": "100.4.1",
    +        "magento/module-cache-invalidate": "100.4.1",
    +        "magento/module-captcha": "100.4.2",
    +        "magento/module-cardinal-commerce": "100.4.1",
    +        "magento/module-catalog": "104.0.2-p1",
    +        "magento/module-catalog-customer-graph-ql": "100.4.2",
    +        "magento/module-catalog-analytics": "100.4.1",
    +        "magento/module-catalog-import-export": "101.1.2",
    +        "magento/module-catalog-inventory": "100.4.2",
    +        "magento/module-catalog-inventory-graph-ql": "100.4.0",
    +        "magento/module-catalog-rule": "101.2.2",
    +        "magento/module-catalog-rule-graph-ql": "100.4.0",
    +        "magento/module-catalog-rule-configurable": "100.4.1",
    +        "magento/module-catalog-search": "102.0.2",
    +        "magento/module-catalog-url-rewrite": "100.4.2",
    +        "magento/module-catalog-widget": "100.4.2",
    +        "magento/module-checkout": "100.4.2",
    +        "magento/module-checkout-agreements": "100.4.1",
    +        "magento/module-checkout-agreements-graph-ql": "100.4.0",
    +        "magento/module-cms": "104.0.2",
    +        "magento/module-cms-url-rewrite": "100.4.1",
    +        "magento/module-compare-list-graph-ql": "100.4.0",
    +        "magento/module-config": "101.2.2",
    +        "magento/module-configurable-import-export": "100.4.0",
    +        "magento/module-configurable-product": "100.4.2",
    +        "magento/module-configurable-product-sales": "100.4.0",
    +        "magento/module-contact": "100.4.2",
    +        "magento/module-cookie": "100.4.2",
    +        "magento/module-cron": "100.4.2",
    +        "magento/module-currency-symbol": "100.4.1",
    +        "magento/module-customer": "103.0.2-p1",
    +        "magento/module-customer-analytics": "100.4.1",
    +        "magento/module-customer-downloadable-graph-ql": "100.4.0",
    +        "magento/module-customer-import-export": "100.4.2",
    +        "magento/module-deploy": "100.4.2",
    +        "magento/module-developer": "100.4.2",
    +        "magento/module-dhl": "100.4.1",
    +        "magento/module-directory": "100.4.2",
    +        "magento/module-directory-graph-ql": "100.4.1",
    +        "magento/module-downloadable": "100.4.2",
    +        "magento/module-downloadable-graph-ql": "100.4.2",
    +        "magento/module-downloadable-import-export": "100.4.1",
    +        "magento/module-eav": "102.1.2",
    +        "magento/module-elasticsearch": "101.0.2",
    +        "magento/module-elasticsearch-6": "100.4.2",
    +        "magento/module-elasticsearch-7": "100.4.2",
    +        "magento/module-email": "101.1.2",
    +        "magento/module-encryption-key": "100.4.1",
    +        "magento/module-fedex": "100.4.1",
    +        "magento/module-gift-message": "100.4.1",
    +        "magento/module-gift-message-graph-ql": "100.4.0",
    +        "magento/module-google-adwords": "100.4.0",
    +        "magento/module-google-analytics": "100.4.0",
    +        "magento/module-google-optimizer": "100.4.1",
    +        "magento/module-graph-ql": "100.4.2",
    +        "magento/module-graph-ql-cache": "100.4.0",
    +        "magento/module-catalog-graph-ql": "100.4.2",
    +        "magento/module-catalog-cms-graph-ql": "100.4.0",
    +        "magento/module-catalog-url-rewrite-graph-ql": "100.4.1",
    +        "magento/module-configurable-product-graph-ql": "100.4.2",
    +        "magento/module-customer-graph-ql": "100.4.2",
    +        "magento/module-eav-graph-ql": "100.4.0",
    +        "magento/module-swatches-graph-ql": "100.4.1",
    +        "magento/module-tax-graph-ql": "100.4.0",
    +        "magento/module-url-rewrite-graph-ql": "100.4.1",
    +        "magento/module-cms-url-rewrite-graph-ql": "100.4.0",
    +        "magento/module-weee-graph-ql": "100.4.0",
    +        "magento/module-cms-graph-ql": "100.4.0",
    +        "magento/module-grouped-import-export": "100.4.0",
    +        "magento/module-grouped-product": "100.4.2",
    +        "magento/module-grouped-catalog-inventory": "100.4.0",
    +        "magento/module-grouped-product-graph-ql": "100.4.2",
    +        "magento/module-import-export": "101.0.2",
    +        "magento/module-indexer": "100.4.2",
    +        "magento/module-instant-purchase": "100.4.1",
    +        "magento/module-integration": "100.4.2",
    +        "magento/module-layered-navigation": "100.4.2",
    +        "magento/module-login-as-customer": "100.4.2",
    +        "magento/module-login-as-customer-admin-ui": "100.4.2-p1",
    +        "magento/module-login-as-customer-api": "100.4.2",
    +        "magento/module-login-as-customer-assistance": "100.4.1-p1",
    +        "magento/module-login-as-customer-frontend-ui": "100.4.2-p1",
    +        "magento/module-login-as-customer-graph-ql": "100.4.0",
    +        "magento/module-login-as-customer-log": "100.4.1-p1",
    +        "magento/module-login-as-customer-quote": "100.4.1-p1",
    +        "magento/module-login-as-customer-page-cache": "100.4.2-p1",
    +        "magento/module-login-as-customer-sales": "100.4.2-p1",
    +        "magento/module-media-content": "100.4.2",
    +        "magento/module-media-content-api": "100.4.2",
    +        "magento/module-media-content-catalog": "100.4.2",
    +        "magento/module-media-content-cms": "100.4.2",
    +        "magento/module-media-gallery": "100.4.2",
    +        "magento/module-media-gallery-api": "101.0.2",
    +        "magento/module-media-gallery-ui": "100.4.1",
    +        "magento/module-media-gallery-ui-api": "100.4.1",
    +        "magento/module-media-gallery-integration": "100.4.1",
    +        "magento/module-media-gallery-synchronization": "100.4.1",
    +        "magento/module-media-gallery-synchronization-api": "100.4.1",
    +        "magento/module-media-content-synchronization": "100.4.1",
    +        "magento/module-media-content-synchronization-api": "100.4.1",
    +        "magento/module-media-content-synchronization-catalog": "100.4.1",
    +        "magento/module-media-content-synchronization-cms": "100.4.1",
    +        "magento/module-media-gallery-synchronization-metadata": "100.4.0",
    +        "magento/module-media-gallery-metadata": "100.4.0",
    +        "magento/module-media-gallery-metadata-api": "100.4.0",
    +        "magento/module-media-gallery-catalog-ui": "100.4.1",
    +        "magento/module-media-gallery-cms-ui": "100.4.1",
    +        "magento/module-media-gallery-catalog-integration": "100.4.1",
    +        "magento/module-media-gallery-catalog": "100.4.1",
    +        "magento/module-media-gallery-renditions": "100.4.0",
    +        "magento/module-media-gallery-renditions-api": "100.4.0",
    +        "magento/module-media-storage": "100.4.1",
    +        "magento/module-message-queue": "100.4.2",
    +        "magento/module-msrp": "100.4.1",
    +        "magento/module-msrp-configurable-product": "100.4.0",
    +        "magento/module-msrp-grouped-product": "100.4.0",
    +        "magento/module-multishipping": "100.4.2",
    +        "magento/module-mysql-mq": "100.4.0",
    +        "magento/module-new-relic-reporting": "100.4.1",
    +        "magento/module-newsletter": "100.4.2",
    +        "magento/module-newsletter-graph-ql": "100.4.0",
    +        "magento/module-offline-payments": "100.4.1",
    +        "magento/module-offline-shipping": "100.4.1",
    +        "magento/module-page-cache": "100.4.2",
    +        "magento/module-payment": "100.4.2-p1",
    +        "magento/module-paypal": "101.0.2-p1",
    +        "magento/module-paypal-captcha": "100.4.0",
    +        "magento/module-paypal-graph-ql": "100.4.1",
    +        "magento/module-persistent": "100.4.2",
    +        "magento/module-product-alert": "100.4.1",
    +        "magento/module-product-video": "100.4.2-p1",
    +        "magento/module-quote": "101.2.2",
    +        "magento/module-quote-analytics": "100.4.2",
    +        "magento/module-quote-bundle-options": "100.4.0",
    +        "magento/module-quote-configurable-options": "100.4.0",
    +        "magento/module-quote-downloadable-links": "100.4.0",
    +        "magento/module-quote-graph-ql": "100.4.2",
    +        "magento/module-related-product-graph-ql": "100.4.1",
    +        "magento/module-release-notification": "100.4.1",
    +        "magento/module-reports": "100.4.2",
    +        "magento/module-require-js": "100.4.0",
    +        "magento/module-review": "100.4.2",
    +        "magento/module-review-graph-ql": "100.4.0",
    +        "magento/module-review-analytics": "100.4.1",
    +        "magento/module-robots": "101.1.0",
    +        "magento/module-rss": "100.4.1",
    +        "magento/module-rule": "100.4.1",
    +        "magento/module-sales": "103.0.2",
    +        "magento/module-sales-analytics": "100.4.1",
    +        "magento/module-sales-graph-ql": "100.4.2",
    +        "magento/module-sales-inventory": "100.4.0",
    +        "magento/module-sales-rule": "101.2.2",
    +        "magento/module-sales-sequence": "100.4.1",
    +        "magento/module-sample-data": "100.4.1",
    +        "magento/module-search": "101.1.2",
    +        "magento/module-security": "100.4.2-p1",
    +        "magento/module-send-friend": "100.4.1",
    +        "magento/module-send-friend-graph-ql": "100.4.0",
    +        "magento/module-shipping": "100.4.2",
    +        "magento/module-sitemap": "100.4.2",
    +        "magento/module-store": "101.1.2",
    +        "magento/module-store-graph-ql": "100.4.2",
    +        "magento/module-swagger": "100.4.1",
    +        "magento/module-swagger-webapi": "100.4.0",
    +        "magento/module-swagger-webapi-async": "100.4.0",
    +        "magento/module-swatches": "100.4.2",
    +        "magento/module-swatches-layered-navigation": "100.4.0",
    +        "magento/module-tax": "100.4.2",
    +        "magento/module-tax-import-export": "100.4.2",
    +        "magento/module-theme": "101.1.2",
    +        "magento/module-theme-graph-ql": "100.4.1",
    +        "magento/module-translation": "100.4.2",
    +        "magento/module-ui": "101.2.2",
    +        "magento/module-ups": "100.4.2",
    +        "magento/module-url-rewrite": "102.0.1",
    +        "magento/module-user": "101.2.2",
    +        "magento/module-usps": "100.4.1",
    +        "magento/module-variable": "100.4.0",
    +        "magento/module-vault": "101.2.2-p1",
    +        "magento/module-vault-graph-ql": "100.4.0",
    +        "magento/module-version": "100.4.0",
    +        "magento/module-webapi": "100.4.1",
    +        "magento/module-webapi-async": "100.4.0",
    +        "magento/module-webapi-security": "100.4.0",
    +        "magento/module-weee": "100.4.2",
    +        "magento/module-widget": "101.2.2",
    +        "magento/module-wishlist": "101.2.2",
    +        "magento/module-wishlist-graph-ql": "100.4.2",
    +        "magento/module-wishlist-analytics": "100.4.1",
    +        "magento/theme-adminhtml-backend": "100.4.2",
    +        "magento/theme-frontend-blank": "100.4.2",
    +        "magento/theme-frontend-luma": "100.4.2",
    +        "magento/language-de_de": "100.4.0",
    +        "magento/language-en_us": "100.4.0",
    +        "magento/language-es_es": "100.4.0",
    +        "magento/language-fr_fr": "100.4.0",
    +        "magento/language-nl_nl": "100.4.0",
    +        "magento/language-pt_br": "100.4.0",
    +        "magento/language-zh_hans_cn": "100.4.0",
    +        "magento/framework": "103.0.2-p1",
    +        "magento/framework-amqp": "100.4.1",
    +        "magento/framework-bulk": "101.0.0",
    +        "magento/framework-message-queue": "100.4.2",
             "trentrichardson/jquery-timepicker-addon": "1.4.3",
             "components/jquery": "1.11.0",
             "blueimp/jquery-file-upload": "5.6.14",
             "components/jqueryui": "1.10.4",
             "twbs/bootstrap": "3.1.0",
             "tinymce/tinymce": "3.4.7",
    -        "magento/module-tinymce-3": "*",
    -        "magento/module-csp": "*",
    -        "magento/module-aws-s3": "*",
    -        "magento/module-remote-storage": "*"
    +        "magento/module-tinymce-3": "100.4.2",
    +        "magento/module-csp": "100.4.1",
    +        "magento/module-aws-s3": "100.4.0",
    +        "magento/module-remote-storage": "100.4.0"
         },
    -    "conflict": {
    -        "gene/bluefoot": "*"
    +    "autoload-dev": {
    +        "psr-4": {
    +            "Magento\\PhpStan\\": "dev/tests/static/framework/Magento/PhpStan/",
    +            "Magento\\Sniffs\\": "dev/tests/static/framework/Magento/Sniffs/",
    +            "Magento\\TestFramework\\Inspection\\": "dev/tests/static/framework/Magento/TestFramework/Inspection/",
    +            "Magento\\TestFramework\\Utility\\": "dev/tests/static/framework/Magento/TestFramework/Utility/",
    +            "Magento\\Tools\\": "dev/tools/Magento/Tools/",
    +            "Magento\\Tools\\Sanity\\": "dev/build/publication/sanity/Magento/Tools/Sanity/"
    +        }
         },
    +    "prefer-stable": true,
         "extra": {
             "component_paths": {
    -            "trentrichardson/jquery-timepicker-addon": "lib/web/jquery/jquery-ui-timepicker-addon.js",
    +            "blueimp/jquery-file-upload": "lib/web/jquery/fileUploader",
                 "components/jquery": [
                     "lib/web/jquery.js",
                     "lib/web/jquery/jquery.min.js",
                     "lib/web/jquery/jquery-migrate.js"
                 ],
    -            "blueimp/jquery-file-upload": "lib/web/jquery/fileUploader",
                 "components/jqueryui": [
                     "lib/web/jquery/jquery-ui.js"
                 ],
    +            "tinymce/tinymce": "lib/web/tiny_mce_4",
    +            "trentrichardson/jquery-timepicker-addon": "lib/web/jquery/jquery-ui-timepicker-addon.js",
                 "twbs/bootstrap": [
                     "lib/web/jquery/jquery.tabs.js"
    -            ],
    -            "tinymce/tinymce": "lib/web/tiny_mce_4"
    -        }
    -    },
    -    "autoload": {
    -        "psr-4": {
    -            "Magento\\Framework\\": "lib/internal/Magento/Framework/",
    -            "Magento\\Setup\\": "setup/src/Magento/Setup/",
    -            "Magento\\": "app/code/Magento/",
    -            "Zend\\Mvc\\Controller\\": "setup/src/Zend/Mvc/Controller/"
    -        },
    -        "psr-0": {
    -            "": [
    -                "app/code/",
    -                "generated/code/"
                 ]
    -        },
    -        "files": [
    -            "app/etc/NonComposerComponentRegistration.php"
    -        ],
    -        "exclude-from-classmap": [
    -            "**/dev/**",
    -            "**/update/**",
    -            "**/Test/**"
    -        ]
    -    },
    -    "autoload-dev": {
    -        "psr-4": {
    -            "Magento\\Sniffs\\": "dev/tests/static/framework/Magento/Sniffs/",
    -            "Magento\\Tools\\": "dev/tools/Magento/Tools/",
    -            "Magento\\Tools\\Sanity\\": "dev/build/publication/sanity/Magento/Tools/Sanity/",
    -            "Magento\\TestFramework\\Inspection\\": "dev/tests/static/framework/Magento/TestFramework/Inspection/",
    -            "Magento\\TestFramework\\Utility\\": "dev/tests/static/framework/Magento/TestFramework/Utility/",
    -            "Magento\\PhpStan\\": "dev/tests/static/framework/Magento/PhpStan/"
             }
    -    },
    -    "prefer-stable": true
    +    }
     }
    +
    
  • dev/tests/api-functional/testsuite/Magento/Customer/Api/CustomerRepositoryTest.php+200 0 modified
    @@ -1058,4 +1058,204 @@ protected function _createCustomer(?array $additionalData = [])
             $this->currentCustomerId[] = $customerData['id'];
             return $customerData;
         }
    +
    +    /**
    +     * Test customer create with invalid name's.
    +     *
    +     * @param string $fieldName
    +     * @param string $fieldValue
    +     * @param string $expectedMessage
    +     * @return void
    +     *
    +     * @dataProvider customerDataProvider
    +     */
    +    public function testCreateCustomerWithInvalidCustomerFirstName(string $fieldName, string $fieldValue, string $expectedMessage): void
    +    {
    +        $customerData = $this->dataObjectProcessor->buildOutputDataArray(
    +            $this->customerHelper->createSampleCustomerDataObject(),
    +            Customer::class
    +        );
    +        $customerData[$fieldName] = $fieldValue;
    +
    +        $serviceInfo = [
    +            'rest' => [
    +                'resourcePath' => self::RESOURCE_PATH,
    +                'httpMethod' => Request::HTTP_METHOD_POST,
    +            ],
    +            'soap' => [
    +                'service' => self::SERVICE_NAME,
    +                'serviceVersion' => self::SERVICE_VERSION,
    +                'operation' => self::SERVICE_NAME . 'Save',
    +            ],
    +        ];
    +
    +        $requestData = ['customer' => $customerData];
    +
    +        try {
    +            $this->_webApiCall($serviceInfo, $requestData);
    +            $this->fail('Expected exception was not raised');
    +        } catch (\SoapFault $e) {
    +            $this->assertStringContainsString($expectedMessage, $e->getMessage());
    +        } catch (\Exception $e) {
    +            $errorObj = $this->processRestExceptionResult($e);
    +            $this->assertEquals(HTTPExceptionCodes::HTTP_BAD_REQUEST, $e->getCode());
    +            $this->assertEquals($expectedMessage, $errorObj['message']);
    +        }
    +    }
    +
    +    /**
    +     * Invalid customer data provider
    +     *
    +     * @return array
    +     */
    +    public function customerDataProvider(): array
    +    {
    +        return [
    +            ['firstname', 'Jane ☺ ', 'First Name is not valid!'],
    +            ['lastname', '☏ - Doe', 'Last Name is not valid!'],
    +            ['middlename', '⚐ $(date)', 'Middle Name is not valid!'],
    +            [
    +                'firstname',
    +                str_repeat('खाना अच्छा है', 20),
    +                'First Name is not valid!',
    +            ],
    +            [
    +                'lastname',
    +                str_repeat('المغلوطة حول استنكار  النشوة وتمجيد الألمالمغلوطة حول', 5),
    +                'Last Name is not valid!',
    +            ],
    +        ];
    +    }
    +
    +    /**
    +     * Test customer create with ultibyte chanracters in name's.
    +     *
    +     * @param string $fieldName
    +     * @param string $fieldValue
    +     * @return void
    +     *
    +     * @dataProvider customerWithMultiByteDataProvider
    +     */
    +    public function testCreateCustomerWithMultibyteCharacters(string $fieldName, string $fieldValue): void
    +    {
    +        $customerData = $this->dataObjectProcessor->buildOutputDataArray(
    +            $this->customerHelper->createSampleCustomerDataObject(),
    +            Customer::class
    +        );
    +        $customerData[$fieldName] = $fieldValue;
    +
    +        $serviceInfo = [
    +            'rest' => [
    +                'resourcePath' => self::RESOURCE_PATH,
    +                'httpMethod' => Request::HTTP_METHOD_POST,
    +            ],
    +            'soap' => [
    +                'service' => self::SERVICE_NAME,
    +                'serviceVersion' => self::SERVICE_VERSION,
    +                'operation' => self::SERVICE_NAME . 'Save',
    +            ],
    +        ];
    +
    +        $requestData = ['customer' => $customerData];
    +
    +        $response = $this->_webApiCall($serviceInfo, $requestData);
    +
    +        $this->assertNotNull($response);
    +        $this->assertEquals($fieldValue, $response[$fieldName]);
    +    }
    +
    +    /**
    +     * Customer with multibyte characters data provider.
    +     *
    +     * @return array
    +     */
    +    public function customerWithMultiByteDataProvider(): array
    +    {
    +        return [
    +            [
    +                'firstname',
    +                str_repeat('हैखान', 51),
    +            ],
    +            [
    +                'lastname',
    +                str_repeat('مغلوطة حول استنكار  النشوة وتمجيد الألمالمغلوطة حول', 5),
    +            ],
    +        ];
    +    }
    +
    +    /**
    +     * Test customer create with valid name's.
    +     *
    +     * @param string $fieldName
    +     * @param string $fieldValue
    +     * @return void
    +     *
    +     * @dataProvider customerValidNameDataProvider
    +     */
    +    public function testCreateCustomerWithValidName(string $fieldName, string $fieldValue): void
    +    {
    +        $customerData = $this->dataObjectProcessor->buildOutputDataArray(
    +            $this->customerHelper->createSampleCustomerDataObject(),
    +            Customer::class
    +        );
    +        $customerData[$fieldName] = $fieldValue;
    +
    +        $serviceInfo = [
    +            'rest' => [
    +                'resourcePath' => self::RESOURCE_PATH,
    +                'httpMethod' => Request::HTTP_METHOD_POST,
    +            ],
    +            'soap' => [
    +                'service' => self::SERVICE_NAME,
    +                'serviceVersion' => self::SERVICE_VERSION,
    +                'operation' => self::SERVICE_NAME . 'Save',
    +            ],
    +        ];
    +
    +        $requestData = ['customer' => $customerData];
    +
    +        $response = $this->_webApiCall($serviceInfo, $requestData);
    +
    +        $this->assertNotNull($response);
    +        $this->assertEquals($fieldValue, $response[$fieldName]);
    +    }
    +
    +    /**
    +     * Customer valid name data provider.
    +     *
    +     * @return array
    +     */
    +    public function customerValidNameDataProvider(): array
    +    {
    +        return [
    +            [
    +                'firstname',
    +                'Anne-Marie',
    +            ],
    +            [
    +                'lastname',
    +                'D\'Artagnan',
    +            ],
    +            [
    +                'lastname',
    +                'Guðmundsdóttir',
    +            ],
    +            [
    +                'lastname',
    +                'María José Carreño Quiñones',
    +            ],
    +            [
    +                'lastname',
    +                'Q. Public',
    +            ],
    +            [
    +                'firstname',
    +                'Elizabeth II',
    +            ],
    +            [
    +                'firstname',
    +                'X Æ A-12 Musk',
    +            ],
    +        ];
    +    }
     }
    
  • dev/tests/api-functional/testsuite/Magento/LoginAsCustomerAssistance/Plugin/CustomerMeTest.php+155 0 added
    @@ -0,0 +1,155 @@
    +<?php
    +/**
    + * Copyright © Magento, Inc. All rights reserved.
    + * See COPYING.txt for license details.
    + */
    +declare(strict_types=1);
    +
    +namespace Magento\LoginAsCustomerAssistance\Plugin;
    +
    +use Magento\Customer\Api\CustomerRepositoryInterface;
    +use Magento\Customer\Api\Data\CustomerInterface as Customer;
    +use Magento\Customer\Model\CustomerRegistry;
    +use Magento\Framework\Api\ExtensibleDataInterface;
    +use Magento\Framework\Reflection\DataObjectProcessor;
    +use Magento\Framework\Webapi\Rest\Request;
    +use Magento\Integration\Model\Oauth\TokenFactory;
    +use Magento\LoginAsCustomerAssistance\Api\IsAssistanceEnabledInterface;
    +use Magento\LoginAsCustomerAssistance\Model\ResourceModel\GetLoginAsCustomerAssistanceAllowed;
    +use Magento\TestFramework\Helper\Bootstrap;
    +use Magento\TestFramework\TestCase\WebapiAbstract;
    +
    +/**
    + * Api test for @see \Magento\LoginAsCustomerAssistance\Plugin\CustomerPlugin::afterSave.
    + */
    +class CustomerMeTest extends WebapiAbstract
    +{
    +    const SERVICE_VERSION = 'V1';
    +    const SERVICE_NAME = 'customerCustomerRepositoryV1';
    +    const RESOURCE_PATH = '/V1/customers/me';
    +
    +    /**
    +     * @var DataObjectProcessor
    +     */
    +    private $dataObjectProcessor;
    +
    +    /**
    +     * @var CustomerRepositoryInterface
    +     */
    +    private $customerRepository;
    +
    +    /**
    +     * @var CustomerRegistry
    +     */
    +    private $customerRegistry;
    +
    +    /**
    +     * @var GetLoginAsCustomerAssistanceAllowed
    +     */
    +    private $isAssistanceEnabled;
    +
    +    /**
    +     * @var TokenFactory
    +     */
    +    private $tokenFactory;
    +
    +    /**
    +     * @inheritDoc
    +     */
    +    protected function setUp(): void
    +    {
    +        $objectManager = Bootstrap::getObjectManager();
    +        $this->dataObjectProcessor = $objectManager->get(DataObjectProcessor::class);
    +        $this->customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
    +        $this->customerRegistry = $objectManager->get(CustomerRegistry::class);
    +        $this->isAssistanceEnabled = $objectManager->get(GetLoginAsCustomerAssistanceAllowed::class);
    +        $this->tokenFactory = $objectManager->get(TokenFactory::class);
    +    }
    +
    +    /**
    +     * Check that 'assistance_allowed' set as expected.
    +     *
    +     * @magentoApiDataFixture Magento/Customer/_files/customer.php
    +     * @dataProvider assistanceStatesDataProvider
    +     *
    +     * @param int $state
    +     * @param bool $expected
    +     * @return void
    +     */
    +    public function testUpdateSelf(int $state, bool $expected): void
    +    {
    +        $customerId = (int)$this->customerRepository->get('customer@example.com')->getId();
    +        $tokenModel = $this->tokenFactory->create();
    +        $customerToken = $tokenModel->createCustomerToken($customerId)->getToken();
    +
    +        $updatedLastname = 'Updated lastname';
    +        $customer = $this->getCustomerData($customerId);
    +        $customerData = $this->dataObjectProcessor->buildOutputDataArray($customer, Customer::class);
    +        $customerData[Customer::LASTNAME] = $updatedLastname;
    +        $customerData[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]['assistance_allowed'] = $state;
    +
    +        $requestData['customer'] = TESTS_WEB_API_ADAPTER === self::ADAPTER_SOAP
    +            ? $customerData
    +            : [
    +                Customer::EMAIL => $customerData['email'],
    +                Customer::FIRSTNAME => $customerData['firstname'],
    +                Customer::LASTNAME => $updatedLastname,
    +                Customer::EXTENSION_ATTRIBUTES_KEY => ['assistance_allowed' => $state],
    +            ];
    +
    +        $serviceInfo = $this->getServiceInfo('SaveSelf', $customerToken);
    +        $response = $this->_webApiCall($serviceInfo, $requestData);
    +        $this->assertNotNull($response);
    +
    +        $existingCustomerDataObject = $this->getCustomerData($customerId);
    +        $this->assertEquals($updatedLastname, $existingCustomerDataObject->getLastname());
    +        $this->assertEquals($expected, $this->isAssistanceEnabled->execute($customerId));
    +    }
    +
    +    /**
    +     * @param string $operation
    +     * @param string $token
    +     * @return array
    +     */
    +    private function getServiceInfo(string $operation, string $token): array
    +    {
    +        return [
    +            'rest' => [
    +                'resourcePath' => self::RESOURCE_PATH,
    +                'httpMethod' => Request::HTTP_METHOD_PUT,
    +                'token' => $token,
    +            ],
    +            'soap' => [
    +                'service' => self::SERVICE_NAME,
    +                'serviceVersion' => self::SERVICE_VERSION,
    +                'operation' => self::SERVICE_NAME . $operation,
    +                'token' => $token,
    +            ],
    +        ];
    +    }
    +
    +    /**
    +     * Retrieve customer data by Id.
    +     *
    +     * @param int $customerId
    +     * @return Customer
    +     */
    +    private function getCustomerData(int $customerId): Customer
    +    {
    +        $customerData = $this->customerRepository->getById($customerId);
    +        $this->customerRegistry->remove($customerId);
    +
    +        return $customerData;
    +    }
    +
    +    /**
    +     * @return array
    +     */
    +    public function assistanceStatesDataProvider(): array
    +    {
    +        return [
    +            'Assistance Allowed' => [IsAssistanceEnabledInterface::ALLOWED, true],
    +            'Assistance Denied' => [IsAssistanceEnabledInterface::DENIED, false],
    +        ];
    +    }
    +}
    
  • dev/tests/api-functional/testsuite/Magento/LoginAsCustomerAssistance/Plugin/CustomerPluginTest.php+192 0 added
    @@ -0,0 +1,192 @@
    +<?php
    +/**
    + * Copyright © Magento, Inc. All rights reserved.
    + * See COPYING.txt for license details.
    + */
    +declare(strict_types=1);
    +
    +namespace Magento\LoginAsCustomerAssistance\Plugin;
    +
    +use Magento\Customer\Api\CustomerRepositoryInterface;
    +use Magento\Customer\Api\Data\CustomerInterface as Customer;
    +use Magento\Customer\Model\CustomerRegistry;
    +use Magento\Framework\Api\ExtensibleDataInterface;
    +use Magento\Framework\Reflection\DataObjectProcessor;
    +use Magento\Framework\Webapi\Rest\Request;
    +use Magento\LoginAsCustomerAssistance\Api\IsAssistanceEnabledInterface;
    +use Magento\LoginAsCustomerAssistance\Model\ResourceModel\GetLoginAsCustomerAssistanceAllowed;
    +use Magento\TestFramework\Authentication\OauthHelper;
    +use Magento\TestFramework\Helper\Bootstrap;
    +use Magento\TestFramework\TestCase\WebapiAbstract;
    +
    +/**
    + * Api tests for @see \Magento\LoginAsCustomerAssistance\Plugin\CustomerPlugin::afterSave.
    + */
    +class CustomerPluginTest extends WebapiAbstract
    +{
    +    const SERVICE_VERSION = 'V1';
    +    const SERVICE_NAME = 'customerCustomerRepositoryV1';
    +    const RESOURCE_PATH = '/V1/customers';
    +
    +    /**
    +     * @var DataObjectProcessor
    +     */
    +    private $dataObjectProcessor;
    +
    +    /**
    +     * @var CustomerRepositoryInterface
    +     */
    +    private $customerRepository;
    +
    +    /**
    +     * @var CustomerRegistry
    +     */
    +    private $customerRegistry;
    +
    +    /**
    +     * @var GetLoginAsCustomerAssistanceAllowed
    +     */
    +    private $isAssistanceEnabled;
    +
    +    /**
    +     * @inheritDoc
    +     */
    +    protected function setUp(): void
    +    {
    +        $objectManager = Bootstrap::getObjectManager();
    +        $this->dataObjectProcessor = $objectManager->get(DataObjectProcessor::class);
    +        $this->customerRepository = $objectManager->get(CustomerRepositoryInterface::class);
    +        $this->customerRegistry = $objectManager->get(CustomerRegistry::class);
    +        $this->isAssistanceEnabled = $objectManager->get(GetLoginAsCustomerAssistanceAllowed::class);
    +    }
    +
    +    /**
    +     * Check that 'assistance_allowed' set as expected.
    +     *
    +     * @magentoApiDataFixture Magento/Customer/_files/customer.php
    +     * @dataProvider assistanceStatesDataProvider
    +     *
    +     * @param int $state
    +     * @param bool $expected
    +     * @return void
    +     */
    +    public function testUpdateCustomer(int $state, bool $expected): void
    +    {
    +        $customerId = (int)$this->customerRepository->get('customer@example.com')->getId();
    +
    +        $updatedLastname = 'Updated lastname';
    +        $customer = $this->getCustomerData($customerId);
    +        $customerData = $this->dataObjectProcessor->buildOutputDataArray($customer, Customer::class);
    +        $customerData[Customer::LASTNAME] = $updatedLastname;
    +        $customerData[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]['assistance_allowed'] = $state;
    +
    +        $requestData['customer'] = TESTS_WEB_API_ADAPTER === self::ADAPTER_SOAP
    +            ? $customerData
    +            : [
    +                Customer::LASTNAME => $updatedLastname,
    +                Customer::EXTENSION_ATTRIBUTES_KEY => ['assistance_allowed' => $state]
    +            ];
    +
    +        $serviceInfo = $this->getServiceInfo($customerId, 'Save');
    +        $response = $this->_webApiCall($serviceInfo, $requestData);
    +        $this->assertNotNull($response);
    +
    +        $existingCustomerDataObject = $this->getCustomerData($customerId);
    +        $this->assertEquals($updatedLastname, $existingCustomerDataObject->getLastname());
    +        $this->assertEquals($expected, $this->isAssistanceEnabled->execute($customerId));
    +    }
    +
    +    /**
    +     * Check that 'assistance_allowed' set as expected with limited resources.
    +     *
    +     * @magentoApiDataFixture Magento/Customer/_files/customer.php
    +     * @dataProvider assistanceStatesDataProvider
    +     * @SuppressWarnings(PHPMD.UnusedLocalVariable)
    +     *
    +     * @param int $state
    +     * @return void
    +     */
    +    public function testUpdateCustomerWithLimitedResources(int $state): void
    +    {
    +        $resources = [
    +            'Magento_Customer::customer',
    +            'Magento_Customer::manage',
    +        ];
    +        $customerId = (int)$this->customerRepository->get('customer@example.com')->getId();
    +
    +        $updatedLastname = 'Updated lastname';
    +        $customer = $this->getCustomerData($customerId);
    +        $customerData = $this->dataObjectProcessor->buildOutputDataArray($customer, Customer::class);
    +        $customerData[Customer::LASTNAME] = $updatedLastname;
    +        $customerData[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]['assistance_allowed'] = $state;
    +
    +        $requestData['customer'] = TESTS_WEB_API_ADAPTER === self::ADAPTER_SOAP
    +            ? $customerData
    +            : [
    +                Customer::LASTNAME => $updatedLastname,
    +                Customer::EXTENSION_ATTRIBUTES_KEY => ['assistance_allowed' => $state]
    +            ];
    +
    +        $serviceInfo = $this->getServiceInfo($customerId, 'Save');
    +        OauthHelper::getApiAccessCredentials($resources);
    +        $response = $this->_webApiCall($serviceInfo, $requestData);
    +        $this->assertNotNull($response);
    +
    +        $existingCustomerDataObject = $this->getCustomerData($customerId);
    +        $this->assertEquals($updatedLastname, $existingCustomerDataObject->getLastname());
    +        $this->assertEquals(false, $this->isAssistanceEnabled->execute($customerId));
    +    }
    +
    +    /**
    +     * @param int $customerId
    +     * @param string $operation
    +     * @return array
    +     */
    +    private function getServiceInfo(int $customerId, string $operation): array
    +    {
    +        return [
    +            'rest' => [
    +                'resourcePath' => self::RESOURCE_PATH . '/' . $customerId,
    +                'httpMethod' => Request::HTTP_METHOD_PUT,
    +            ],
    +            'soap' => [
    +                'service' => self::SERVICE_NAME,
    +                'serviceVersion' => self::SERVICE_VERSION,
    +                'operation' => self::SERVICE_NAME . $operation,
    +            ],
    +        ];
    +    }
    +
    +    /**
    +     * Retrieve customer data by Id.
    +     *
    +     * @param int $customerId
    +     * @return Customer
    +     */
    +    private function getCustomerData(int $customerId): Customer
    +    {
    +        $customerData = $this->customerRepository->getById($customerId);
    +        $this->customerRegistry->remove($customerId);
    +        return $customerData;
    +    }
    +
    +    /**
    +     * @return array
    +     */
    +    public function assistanceStatesDataProvider(): array
    +    {
    +        return [
    +            'Assistance Allowed' => [IsAssistanceEnabledInterface::ALLOWED, true],
    +            'Assistance Denied' => [IsAssistanceEnabledInterface::DENIED, false],
    +        ];
    +    }
    +
    +    /**
    +     * @inheritDoc
    +     */
    +    protected function tearDown(): void
    +    {
    +        OauthHelper::clearApiAccessCredentials();
    +        parent::tearDown();
    +    }
    +}
    
  • dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/Gallery/UploadTest.php+15 2 modified
    @@ -198,18 +198,31 @@ public function uploadActionWithErrorsDataProvider(): array
                         'current_path' => '/../../../../_files',
                     ],
                     'expectation' => [
    -                    'message' => 'Wrong file size.',
    +                    'message' => 'Something went wrong while saving the file(s).',
                         'errorcode' => 0,
                         'tmp_media_path' => '/m/a/magento_empty.jpg',
                     ],
                 ],
                 'upload_without_image' => [
                     'file' => [],
                     'expectation' => [
    -                    'message' => '$_FILES array is empty',
    +                    'message' => 'Something went wrong while saving the file(s).',
                         'errorcode' => 0,
                     ],
                 ],
    +            'upload_wrong_png' => [
    +                'file' => [
    +                    'copy_file' => true,
    +                    'name' => 'magento_wrong.png',
    +                    'type' => 'image/png',
    +                    'current_path' => '/../../../../_files',
    +                ],
    +                'expectation' => [
    +                    'message' => 'Something went wrong while saving the file(s).',
    +                    'errorcode' => 0,
    +                    'tmp_media_path' => '/m/w/magento_wrong.png',
    +                ],
    +            ]
             ];
         }
     
    
  • dev/tests/integration/testsuite/Magento/Catalog/_files/magento_wrong.png+0 0 added
  • dev/tests/js/jasmine/tests/app/code/Magento/Security/view/base/web/js/escaper.test.js+5 0 modified
    @@ -131,6 +131,11 @@ define([
                     data: '<spa>n id="id1">Some string</span>',
                     expected: 'n id="id1"&gt;Some string',
                     allowedTags: ['span']
    +            },
    +            'link with script content': {
    +                data: '<a href="javascript:void">Click</a>',
    +                expected: '<a>Click</a>',
    +                allowedTags: ['a']
                 }
             };
         }
    
  • lib/internal/Magento/Framework/Amqp/composer.json+10 8 modified
    @@ -1,25 +1,27 @@
     {
         "name": "magento/framework-amqp",
         "description": "N/A",
    -    "config": {
    -        "sort-packages": true
    -    },
         "type": "magento2-library",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "config": {
    +        "sort-packages": true
    +    },
    +    "version": "100.4.1",
         "require": {
    -        "magento/framework": "*",
    +        "magento/framework": "103.0.*",
             "php": "~7.3.0||~7.4.0",
             "php-amqplib/php-amqplib": "~2.7.0||~2.10.0"
         },
         "autoload": {
    -        "psr-4": {
    -            "Magento\\Framework\\Amqp\\": ""
    -        },
             "files": [
                 "registration.php"
    -        ]
    +        ],
    +        "psr-4": {
    +            "Magento\\Framework\\Amqp\\": ""
    +        }
         }
     }
    +
    
  • lib/internal/Magento/Framework/App/StaticResource.php+34 1 modified
    @@ -9,6 +9,8 @@
     use Magento\Framework\ObjectManager\ConfigLoaderInterface;
     use Magento\Framework\Filesystem;
     use Magento\Framework\Config\ConfigOptionsListConstants;
    +use Magento\Framework\Validator\Locale;
    +use Magento\Framework\View\Design\Theme\ThemePackageList;
     use Psr\Log\LoggerInterface;
     use Magento\Framework\Debug;
     use Magento\Framework\Filesystem\Driver\File;
    @@ -80,6 +82,16 @@ class StaticResource implements \Magento\Framework\AppInterface
          */
         private $driver;
     
    +    /**
    +     * @var ThemePackageList
    +     */
    +    private $themePackageList;
    +
    +    /**
    +     * @var Locale
    +     */
    +    private $localeValidator;
    +
         /**
          * @param State $state
          * @param Response\FileInterface $response
    @@ -91,6 +103,8 @@ class StaticResource implements \Magento\Framework\AppInterface
          * @param ConfigLoaderInterface $configLoader
          * @param DeploymentConfig|null $deploymentConfig
          * @param File|null $driver
    +     * @param ThemePackageList|null $themePackageList
    +     * @param Locale|null $localeValidator
          *
          * @SuppressWarnings(PHPMD.ExcessiveParameterList)
          */
    @@ -104,7 +118,9 @@ public function __construct(
             \Magento\Framework\ObjectManagerInterface $objectManager,
             ConfigLoaderInterface $configLoader,
             DeploymentConfig $deploymentConfig = null,
    -        File $driver = null
    +        File $driver = null,
    +        ThemePackageList $themePackageList = null,
    +        Locale $localeValidator = null
         ) {
             $this->state = $state;
             $this->response = $response;
    @@ -116,6 +132,8 @@ public function __construct(
             $this->configLoader = $configLoader;
             $this->deploymentConfig = $deploymentConfig ?: ObjectManager::getInstance()->get(DeploymentConfig::class);
             $this->driver = $driver ?: ObjectManager::getInstance()->get(File::class);
    +        $this->themePackageList = $themePackageList ?? ObjectManager::getInstance()->get(ThemePackageList::class);
    +        $this->localeValidator = $localeValidator ?? ObjectManager::getInstance()->get(Locale::class);
         }
     
         /**
    @@ -149,6 +167,16 @@ public function launch()
                 throw $e;
             }
     
    +        if (!($this->isThemeAllowed($params['area'] . DIRECTORY_SEPARATOR . $params['theme'])
    +            && $this->localeValidator->isValid($params['locale']))
    +        ) {
    +            if ($appMode == \Magento\Framework\App\State::MODE_PRODUCTION) {
    +                $this->response->setHttpResponseCode(404);
    +                return $this->response;
    +            }
    +            throw new \InvalidArgumentException('Requested path ' . $path . ' is wrong.');
    +        }
    +
             $this->state->setAreaCode($params['area']);
             $this->objectManager->configure($this->configLoader->load($params['area']));
             $file = $params['file'];
    @@ -247,4 +275,9 @@ private function getLogger()
     
             return $this->logger;
         }
    +
    +    private function isThemeAllowed(string $theme): bool
    +    {
    +        return in_array($theme, array_keys($this->themePackageList->getThemes()));
    +    }
     }
    
  • lib/internal/Magento/Framework/App/Test/Unit/StaticResourceTest.php+109 1 modified
    @@ -19,8 +19,10 @@
     use Magento\Framework\Filesystem\Driver\File;
     use Magento\Framework\Module\ModuleList;
     use Magento\Framework\ObjectManagerInterface;
    +use Magento\Framework\Validator\Locale;
     use Magento\Framework\View\Asset\LocalInterface;
     use Magento\Framework\View\Asset\Repository;
    +use Magento\Framework\View\Design\Theme\ThemePackageList;
     use PHPUnit\Framework\MockObject\MockObject;
     use PHPUnit\Framework\TestCase;
     use Psr\Log\LoggerInterface;
    @@ -85,6 +87,16 @@ class StaticResourceTest extends TestCase
          */
         private $driverMock;
     
    +    /**
    +     * @var ThemePackageList|MockObject
    +     */
    +    private $themePackageListMock;
    +
    +    /**
    +     * @var Locale|MockObject
    +     */
    +    private $localeValidatorMock;
    +
         /**
          * @var StaticResource
          */
    @@ -106,6 +118,8 @@ protected function setUp(): void
             $this->configLoaderMock = $this->createMock(ConfigLoader::class);
             $this->deploymentConfigMock = $this->createMock(DeploymentConfig::class);
             $this->driverMock = $this->createMock(File::class);
    +        $this->themePackageListMock = $this->createMock(ThemePackageList::class);
    +        $this->localeValidatorMock = $this->createMock(Locale::class);
             $this->object = new StaticResource(
                 $this->stateMock,
                 $this->responseMock,
    @@ -116,7 +130,9 @@ protected function setUp(): void
                 $this->objectManagerMock,
                 $this->configLoaderMock,
                 $this->deploymentConfigMock,
    -            $this->driverMock
    +            $this->driverMock,
    +            $this->themePackageListMock,
    +            $this->localeValidatorMock
             );
         }
     
    @@ -210,6 +226,16 @@ public function testLaunch(
             $this->driverMock->expects($this->once())
                 ->method('getRealPathSafety')
                 ->willReturnArgument(0);
    +        $this->themePackageListMock->expects($this->atLeastOnce())->method('getThemes')->willReturn(
    +            [
    +                'area/Magento/theme' => [
    +                    'area' => 'area',
    +                    'vendor' => 'Magento',
    +                    'name' => 'theme',
    +                ],
    +            ],
    +        );
    +        $this->localeValidatorMock->expects($this->once())->method('isValid')->willReturn(true);
             $this->object->launch();
         }
     
    @@ -353,4 +379,86 @@ public function testLaunchPathAbove()
     
             $this->object->launch();
         }
    +
    +    /**
    +     * @param array $themes
    +     * @dataProvider themesDataProvider
    +     */
    +    public function testLaunchWithInvalidTheme(array $themes): void
    +    {
    +        $this->expectException('InvalidArgumentException');
    +        $path = 'frontend/Test/luma/en_US/calendar.css';
    +
    +        $this->stateMock->expects($this->once())
    +            ->method('getMode')
    +            ->willReturn(State::MODE_DEVELOPER);
    +        $this->requestMock->expects($this->once())
    +            ->method('get')
    +            ->with('resource')
    +            ->willReturn($path);
    +        $this->driverMock->expects($this->once())
    +            ->method('getRealPathSafety')
    +            ->with($path)
    +            ->willReturn($path);
    +        $this->themePackageListMock->expects($this->once())->method('getThemes')->willReturn($themes);
    +        $this->localeValidatorMock->expects($this->never())->method('isValid');
    +        $this->expectExceptionMessage('Requested path ' . $path . ' is wrong.');
    +
    +        $this->object->launch();
    +    }
    +
    +    /**
    +     * @param array $themes
    +     * @dataProvider themesDataProvider
    +     */
    +    public function testLaunchWithInvalidLocale(array $themes): void
    +    {
    +        $this->expectException('InvalidArgumentException');
    +        $path = 'frontend/Magento/luma/test/calendar.css';
    +
    +        $this->stateMock->expects($this->once())
    +            ->method('getMode')
    +            ->willReturn(State::MODE_DEVELOPER);
    +        $this->requestMock->expects($this->once())
    +            ->method('get')
    +            ->with('resource')
    +            ->willReturn($path);
    +        $this->driverMock->expects($this->once())
    +            ->method('getRealPathSafety')
    +            ->with($path)
    +            ->willReturn($path);
    +        $this->themePackageListMock->expects($this->once())->method('getThemes')->willReturn($themes);
    +        $this->localeValidatorMock->expects($this->once())->method('isValid')->willReturn(false);
    +        $this->expectExceptionMessage('Requested path ' . $path . ' is wrong.');
    +
    +        $this->object->launch();
    +    }
    +
    +    /**
    +     * @return array
    +     */
    +    public function themesDataProvider(): array
    +    {
    +        return  [
    +            [
    +                [
    +                    'adminhtml/Magento/backend' => [
    +                        'area' => 'adminhtml',
    +                        'vendor' => 'Magento',
    +                        'name' => 'backend',
    +                    ],
    +                    'frontend/Magento/blank' => [
    +                        'area' => 'frontend',
    +                        'vendor' => 'Magento',
    +                        'name' => 'blank',
    +                    ],
    +                    'frontend/Magento/luma' => [
    +                        'area' => 'frontend',
    +                        'vendor' => 'Magento',
    +                        'name' => 'luma',
    +                    ],
    +                ],
    +            ],
    +        ];
    +    }
     }
    
  • lib/internal/Magento/Framework/Bulk/composer.json+10 8 modified
    @@ -1,24 +1,26 @@
     {
         "name": "magento/framework-bulk",
         "description": "N/A",
    -    "config": {
    -        "sort-packages": true
    -    },
         "type": "magento2-library",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "config": {
    +        "sort-packages": true
    +    },
    +    "version": "101.0.0",
         "require": {
    -        "magento/framework": "*",
    +        "magento/framework": "103.0.*",
             "php": "~7.3.0||~7.4.0"
         },
         "autoload": {
    -        "psr-4": {
    -            "Magento\\Framework\\Bulk\\": ""
    -        },
             "files": [
                 "registration.php"
    -        ]
    +        ],
    +        "psr-4": {
    +            "Magento\\Framework\\Bulk\\": ""
    +        }
         }
     }
    +
    
  • lib/internal/Magento/Framework/composer.json+6 4 modified
    @@ -9,6 +9,7 @@
         "config": {
             "sort-packages": true
         },
    +    "version": "103.0.2-p1",
         "require": {
             "php": "~7.3.0||~7.4.0",
             "ext-bcmath": "*",
    @@ -53,11 +54,12 @@
             "ext-imagick": "Use Image Magick >=3.0.0 as an optional alternative image processing library"
         },
         "autoload": {
    -        "psr-4": {
    -            "Magento\\Framework\\": ""
    -        },
             "files": [
                 "registration.php"
    -        ]
    +        ],
    +        "psr-4": {
    +            "Magento\\Framework\\": ""
    +        }
         }
     }
    +
    
  • lib/internal/Magento/Framework/MessageQueue/composer.json+10 8 modified
    @@ -1,24 +1,26 @@
     {
         "name": "magento/framework-message-queue",
         "description": "N/A",
    -    "config": {
    -        "sort-packages": true
    -    },
         "type": "magento2-library",
         "license": [
             "OSL-3.0",
             "AFL-3.0"
         ],
    +    "config": {
    +        "sort-packages": true
    +    },
    +    "version": "100.4.2",
         "require": {
    -        "magento/framework": "*",
    +        "magento/framework": "103.0.*",
             "php": "~7.3.0||~7.4.0"
         },
         "autoload": {
    -        "psr-4": {
    -            "Magento\\Framework\\MessageQueue\\": ""
    -        },
             "files": [
                 "registration.php"
    -        ]
    +        ],
    +        "psr-4": {
    +            "Magento\\Framework\\MessageQueue\\": ""
    +        }
         }
     }
    +
    
  • lib/web/fotorama/fotorama.js+6 3 modified
    @@ -858,13 +858,16 @@ fotoramaVersion = '4.6.4';
                 dataFrame.thumbsReady = true;
             } else if (video.type === 'vimeo') {
                 $.ajax({
    -                url: getProtocol() + 'vimeo.com/api/v2/video/' + video.id + '.json',
    +                url: getProtocol() + 'vimeo.com/api/oembed.json',
    +                data: {
    +                    url: 'https://vimeo.com/' + video.id
    +                },
                     dataType: 'jsonp',
                     success: function (json) {
                         dataFrame.thumbsReady = true;
                         updateData(data, {
    -                        img: json[0].thumbnail_large,
    -                        thumb: json[0].thumbnail_small
    +                        img: json[0].thumbnail_url,
    +                        thumb: json[0].thumbnail_url
                         }, dataFrame.i, fotorama);
                     }
                 });
    

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

4

News mentions

0

No linked articles in our index yet.