CI / Test (ubuntu-latest) (push) Canceled after 0s
CI / Test (windows-latest) (push) Canceled after 0s
CI / Storage tests on PostgreSQL (push) Canceled after 0s
CI / Complement (federation off) (push) Canceled after 0s
CI / golangci-lint (push) Canceled after 0s
CI / Smoke test the binary (push) Canceled after 0s
CI / Admin panel (push) Canceled after 0s
CI / Web client (push) Canceled after 0s
- Replies: Reply on a message puts it above the composer; the reply quotes it (sender and first line), and the quote goes to the message. Sent without the quoted fallback (Matrix 1.13); the fallback in older replies is not shown. - Reactions: the six quick ones of the Android app or any other emoji, chips under the message with counts, yours highlighted; a chip adds yours or takes it back. - Threads: matrix-js-sdk's thread support is on. Reply in thread opens the thread beside the room with its own composer; the root shows "N replies" and the last reply; Threads in the header lists them. Receipts are per thread (MSC3771): the room is marked read with its read marker and a separate receipt for "main", since /read_markers' receipt has no thread_id and would read every thread. Unread counts per thread (MSC3773) and a dot on unread threads. Two SDK quirks worked around: the thread view creates the thread object when a thread starts here (else the first reply's remote echo is dropped until reload), and the reply count is re-read from the root's bundled count after replies arrive (the SDK can count one twice). - Spaces: kept out of the room list; a picker narrows the list to a space's rooms and its subspaces'. A space's page (/hierarchy) lists its rooms with Open or Join; admins add existing rooms, create new ones in it and take rooms out. New space in the + menu and picker. - The room composer moved into RoomComposer.vue, shared by the room and the thread pane. New thread and space icons in apps/ui. - Dev server: the Rust crypto's .wasm was lost to vite's pre-bundling, so E2EE never started under `pnpm web:dev`; the package is now served as it is in dev. Server: /versions lists v1.1 to v1.14. matrix-js-sdk checks for the exact version a feature came in, and with only v1.13 and v1.14 it kept threads, per-thread unread counts, recursive relations and intentional mentions off. Tested in the browser against a local server: replies, reactions, threads (new and existing, in plain and encrypted rooms, receipts checked on the server) and spaces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
60 lines
2.3 KiB
TypeScript
60 lines
2.3 KiB
TypeScript
import { existsSync } from 'node:fs'
|
|
import { createRequire } from 'node:module'
|
|
import { dirname, join } from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
import tailwindcss from '@tailwindcss/vite'
|
|
import vue from '@vitejs/plugin-vue'
|
|
import { defineConfig } from 'vite'
|
|
|
|
// In development the client talks to a homeserver through Vite's proxy, the
|
|
// same paths warp-web proxies in production, so the code never needs to
|
|
// know where the homeserver is. WARP_WEB_HOMESERVER points it elsewhere.
|
|
const homeserver = process.env.WARP_WEB_HOMESERVER ?? 'http://localhost:8008'
|
|
|
|
// The Rust crypto loads its .wasm relative to its own module
|
|
// (new URL(..., import.meta.url)). Vite's dependency pre-bundling moves the
|
|
// module into node_modules/.vite/deps without the .wasm, so the dev server
|
|
// answered with index.html and initRustCrypto failed. The dev server serves
|
|
// the package as it is instead. It is only matrix-js-sdk's dependency, which
|
|
// pnpm doesn't make reachable from the pre-bundled matrix-js-sdk, so it is
|
|
// aliased to the very copy matrix-js-sdk resolves. A production build is
|
|
// bundled by Rollup and needs neither.
|
|
const cryptoWasm = '@matrix-org/matrix-sdk-crypto-wasm'
|
|
|
|
function cryptoWasmDir(): string {
|
|
const sdk = createRequire(import.meta.url).resolve('matrix-js-sdk')
|
|
let dir = dirname(createRequire(sdk).resolve(cryptoWasm))
|
|
while (!existsSync(join(dir, 'package.json'))) dir = dirname(dir)
|
|
return dir
|
|
}
|
|
|
|
export default defineConfig(({ command }) => ({
|
|
plugins: [vue(), tailwindcss()],
|
|
resolve: {
|
|
alias: {
|
|
'@': fileURLToPath(new URL('./src', import.meta.url)),
|
|
...(command === 'serve' ? { [cryptoWasm]: cryptoWasmDir() } : {}),
|
|
},
|
|
},
|
|
optimizeDeps: {
|
|
exclude: [cryptoWasm],
|
|
},
|
|
build: {
|
|
// Embedded into the warp-web binary by client/ (and the desktop app).
|
|
outDir: 'client/build/dist',
|
|
emptyOutDir: true,
|
|
assetsInlineLimit: 0,
|
|
// matrix-js-sdk is most of the bundle; it is one chunk on purpose.
|
|
chunkSizeWarningLimit: 1500,
|
|
},
|
|
server: {
|
|
port: 5175,
|
|
proxy: {
|
|
'/_matrix/client': { target: homeserver, changeOrigin: true },
|
|
'/_matrix/media': { target: homeserver, changeOrigin: true },
|
|
// Where the client finds the group call backend (rtc_foci).
|
|
'/.well-known/matrix/client': { target: homeserver, changeOrigin: true },
|
|
},
|
|
},
|
|
}))
|