aboutsummaryrefslogtreecommitdiffstats
path: root/src/mls.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/mls.js')
-rw-r--r--src/mls.js10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/mls.js b/src/mls.js
index 449036b..5a273b6 100644
--- a/src/mls.js
+++ b/src/mls.js
@@ -1578,9 +1578,13 @@ const applyProposals = (s, list, committer, { appData, psks, now, own } = {}) =>
let extensions = gce.length ? gce[0].proposal.extensions : s.extensions;
if (gce.length) {
uniqueTypes(extensions, "group context");
- // an OpenMLS rule, not an RFC one: whatever the context carries must be required of every member
- let required = requiredCapabilities(extensions)?.extensions || [];
- if (!extensions.every((e) => supportsExtension({ extensions: required }, e.type)))
+ // An OpenMLS rule, not an RFC one: whatever the context carries must be
+ // required of every member. Applied where the group plays by it (a
+ // required_capabilities extension in the context, as White Noise groups
+ // have); a ts-mls group (Cordn) carries none and changes its metadata
+ // extension freely, as the RFC allows.
+ let required = requiredCapabilities(extensions)?.extensions;
+ if (required && !extensions.every((e) => supportsExtension({ extensions: required }, e.type)))
fail("group context extension type missing from required_capabilities");
// with app_data_update required, the dictionary only changes through app_data_update
if (requiresAppDataUpdate(s.extensions) || requiresAppDataUpdate(extensions)) {