From 726129f9ddd3d7bfcbe82e304ebcfe0de8c8fc8b Mon Sep 17 00:00:00 2001 From: melogale Date: Tue, 10 Mar 2026 02:08:52 -0400 Subject: [PATCH 1/2] sable call and avatar fix --- knip.json | 2 +- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- src/app/plugins/call/utils.ts | 2 ++ src/sw.ts | 14 ++++++++++++++ vite.config.ts | 2 +- 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/knip.json b/knip.json index 8fec7f863..bdecc79c6 100644 --- a/knip.json +++ b/knip.json @@ -5,7 +5,7 @@ "interface": true, "type": true }, - "ignoreDependencies": ["buffer", "@element-hq/element-call-embedded", "workbox-precaching"], + "ignoreDependencies": ["buffer", "@sableclient/sable-call-embedded", "workbox-precaching"], "ignoreBinaries": ["knope"], "rules": { "exports": "off", diff --git a/package-lock.json b/package-lock.json index 5683a6d19..cb788db94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -71,12 +71,12 @@ }, "devDependencies": { "@cloudflare/vite-plugin": "^1.26.0", - "@element-hq/element-call-embedded": "0.16.3", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@eslint/compat": "2.0.2", "@eslint/js": "9.39.3", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-wasm": "^6.2.2", + "@sableclient/sable-call-embedded": "1.0.2", "@types/chroma-js": "^3.1.2", "@types/file-saver": "^2.0.7", "@types/is-hotkey": "^0.1.10", @@ -1911,12 +1911,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@element-hq/element-call-embedded": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@element-hq/element-call-embedded/-/element-call-embedded-0.16.3.tgz", - "integrity": "sha512-OViKJonDaDNVBUW9WdV9mk78/Ruh34C7XsEgt3O8D9z+64C39elbIgllHSoH5S12IRlv9RYrrV37FZLo6QWsDQ==", - "dev": true - }, "node_modules/@emnapi/core": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", @@ -6270,6 +6264,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@sableclient/sable-call-embedded": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sableclient/sable-call-embedded/-/sable-call-embedded-1.0.2.tgz", + "integrity": "sha512-pvf2BxMx/57EnOs7NWf1/2UtchiBoMGdkzDH4Ivl0D0HSXIMO5z9DuHizk2bnHDJxcSSLY0wEl0XMl7ro0zqDA==", + "dev": true + }, "node_modules/@sindresorhus/is": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", @@ -17883,12 +17883,6 @@ } } }, - "@element-hq/element-call-embedded": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@element-hq/element-call-embedded/-/element-call-embedded-0.16.3.tgz", - "integrity": "sha512-OViKJonDaDNVBUW9WdV9mk78/Ruh34C7XsEgt3O8D9z+64C39elbIgllHSoH5S12IRlv9RYrrV37FZLo6QWsDQ==", - "dev": true - }, "@emnapi/core": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", @@ -20486,6 +20480,12 @@ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true }, + "@sableclient/sable-call-embedded": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sableclient/sable-call-embedded/-/sable-call-embedded-1.0.2.tgz", + "integrity": "sha512-pvf2BxMx/57EnOs7NWf1/2UtchiBoMGdkzDH4Ivl0D0HSXIMO5z9DuHizk2bnHDJxcSSLY0wEl0XMl7ro0zqDA==", + "dev": true + }, "@sindresorhus/is": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", @@ -24408,7 +24408,7 @@ "jwt-decode": "^4.0.0", "loglevel": "^1.9.2", "matrix-events-sdk": "0.0.1", - "matrix-widget-api": "^1.10.0", + "matrix-widget-api": "1.13.0", "oidc-client-ts": "^3.0.1", "p-retry": "7", "sdp-transform": "^2.14.1", @@ -26905,4 +26905,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 2667d1481..7850f3de7 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ }, "devDependencies": { "@cloudflare/vite-plugin": "^1.26.0", - "@element-hq/element-call-embedded": "0.16.3", + "@sableclient/sable-call-embedded": "1.0.2", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@eslint/compat": "2.0.2", "@eslint/js": "9.39.3", diff --git a/src/app/plugins/call/utils.ts b/src/app/plugins/call/utils.ts index 0ea72b3c8..8c4955b4e 100644 --- a/src/app/plugins/call/utils.ts +++ b/src/app/plugins/call/utils.ts @@ -18,6 +18,8 @@ export function getCallCapabilities( capabilities.add(MatrixCapabilities.MSC3846TurnServers); capabilities.add(MatrixCapabilities.MSC4157SendDelayedEvent); capabilities.add(MatrixCapabilities.MSC4157UpdateDelayedEvent); + capabilities.add('moe.sable.thumbnails'); + capabilities.add('moe.sable.media_proxy'); capabilities.add(`org.matrix.msc2762.timeline:${roomId}`); capabilities.add(`org.matrix.msc2762.state:${roomId}`); diff --git a/src/sw.ts b/src/sw.ts index a7fd738ec..4d7e0a037 100644 --- a/src/sw.ts +++ b/src/sw.ts @@ -269,6 +269,20 @@ self.addEventListener('fetch', (event: FetchEvent) => { return; } + // Since widgets like element call have their own client ids, + // we need this logic. We just go through the sessions list and get a session + // with the right base url. Media requests to a homeserver simply are fine with any account + // on the homeserver authenticating it, so this is fine. But it can be technically wrong. + // If you have two tabs for different users on the same homeserver, it might authenticate + // as the wrong one. + // Thus any logic in the future which cares about which user is authenticating the request + // might break this. Also, again, it is technically wrong. + const byBaseUrl = [...sessions.values()].find((s) => validMediaRequest(url, s.baseUrl)); + if (byBaseUrl) { + event.respondWith(fetch(url, { ...fetchConfig(byBaseUrl.accessToken), redirect })); + return; + } + event.respondWith( requestSessionWithTimeout(clientId).then((s) => { if (s && validMediaRequest(url, s.baseUrl)) { diff --git a/vite.config.ts b/vite.config.ts index 907f330d2..c4e5fa3e5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -62,7 +62,7 @@ const isReleaseTag = (() => { const copyFiles = { targets: [ { - src: 'node_modules/@element-hq/element-call-embedded/dist/*', + src: 'node_modules/@sableclient/sable-call-embedded/dist/*', dest: 'public/element-call', }, { From 882c6d55cc8666e145b268461b52e4a46ad8b181 Mon Sep 17 00:00:00 2001 From: melogale Date: Tue, 10 Mar 2026 02:09:03 -0400 Subject: [PATCH 2/2] gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1c1104414..5cc8aa47a 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ devAssets *.tfbackend !*.tfbackend.example crash.log +build.sh