diff options
Diffstat (limited to 'src/mls.js')
| -rw-r--r-- | src/mls.js | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -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)) { |
