From 65f7545ba549d7cc9ce93a1ce8f94fd9411c789c Mon Sep 17 00:00:00 2001
From: Dominik Henneke <dominik.henneke@nordeck.net>
Date: Fri, 18 Aug 2023 14:03:28 +0200
Subject: [PATCH] Bump @matrix-org/react-sdk-module-api from 1.0.0 to 2.0.0
 (#25986)

---
 module_system/installer.ts | 13 ++++++++++++-
 package.json               |  2 +-
 webpack.config.js          |  4 ++++
 yarn.lock                  |  7 +++++++
 4 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/module_system/installer.ts b/module_system/installer.ts
index 9bc3721ae1..a1e31e42a8 100644
--- a/module_system/installer.ts
+++ b/module_system/installer.ts
@@ -185,9 +185,20 @@ function getModuleApiVersionFor(moduleName: string): string {
     return findDepVersionInPackageJson(moduleApiDepName, pkgJsonStr);
 }
 
+// A list of Module API versions that are supported in addition to the currently installed one
+// defined in the package.json. This is necessary because semantic versioning is applied to both
+// the Module-side surface of the API and the Client-side surface of the API. So breaking changes
+// in the Client-side surface lead to a major bump even though the Module-side surface stays
+// compatible. We aim to not break the Module-side surface so we maintain a list of compatible
+// older versions.
+const backwardsCompatibleMajorVersions = ["1.0.0"];
+
 function isModuleVersionCompatible(ourApiVersion: string, moduleApiVersion: string): boolean {
     if (!moduleApiVersion) return false;
-    return semver.satisfies(ourApiVersion, moduleApiVersion);
+    return (
+        semver.satisfies(ourApiVersion, moduleApiVersion) ||
+        backwardsCompatibleMajorVersions.some((version) => semver.satisfies(version, moduleApiVersion))
+    );
 }
 
 function writeModulesTs(content: string): void {
diff --git a/package.json b/package.json
index 61e524db56..897a6b33ce 100644
--- a/package.json
+++ b/package.json
@@ -70,7 +70,7 @@
     },
     "dependencies": {
         "@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.14.tgz",
-        "@matrix-org/react-sdk-module-api": "^1.0.0",
+        "@matrix-org/react-sdk-module-api": "^2.0.0",
         "gfm.css": "^1.1.2",
         "jsrsasign": "^10.5.25",
         "katex": "^0.16.0",
diff --git a/webpack.config.js b/webpack.config.js
index 6ae7c02294..8c6923902c 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -216,6 +216,10 @@ module.exports = (env, argv) => {
                 // Same goes for js/react-sdk - we don't need two copies.
                 "matrix-js-sdk": path.resolve(__dirname, "node_modules/matrix-js-sdk"),
                 "matrix-react-sdk": path.resolve(__dirname, "node_modules/matrix-react-sdk"),
+                "@matrix-org/react-sdk-module-api": path.resolve(
+                    __dirname,
+                    "node_modules/@matrix-org/react-sdk-module-api",
+                ),
                 // and matrix-events-sdk & matrix-widget-api
                 "matrix-events-sdk": path.resolve(__dirname, "node_modules/matrix-events-sdk"),
                 "matrix-widget-api": path.resolve(__dirname, "node_modules/matrix-widget-api"),
diff --git a/yarn.lock b/yarn.lock
index d0bcf4479c..ee90db70ca 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1636,6 +1636,13 @@
   dependencies:
     "@babel/runtime" "^7.17.9"
 
+"@matrix-org/react-sdk-module-api@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@matrix-org/react-sdk-module-api/-/react-sdk-module-api-2.0.0.tgz#f894af429ad352d5151dc7240cc2f987d9dab780"
+  integrity sha512-o/M+IfB3bu4S3yTO10zMRiEtTQagV9AJ9cNmq8a/ksniCx3QLShtzWeL5FkTa8co0ab/VdxdqTlEux0aStT/dg==
+  dependencies:
+    "@babel/runtime" "^7.17.9"
+
 "@mrmlnc/readdir-enhanced@^2.2.1":
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"