refactor(web): restructure into api/domain/services/worker; capabilities, file domains, video covers

- dissolve core-bridge into api (wire contract), domain (models), services (what the UI
  calls) and worker (everything that runs in the Web Worker, grouped by account, crypto,
  space, files, shares, runtime); regroup features, lib and store by responsibility and
  delete unused components
- the UI only reads backend capabilities (domain/capabilities); one tokenRole picks the
  token, hasCode/isRetryable handle errors; pre-checks that decided permissions on the
  client are gone; tests fail if those rules are reimplemented
- files go straight to the file domain (create, upload, download, delete, commit, cancel);
  the host sees one registration per file; creating a channel allocates a file domain and
  works even when the file service is down
- file panel shows which channel the files belong to and its space usage; unlimited files
  preview in chat; videos get a stored cover; the file service status is shown
- fix: console flooded by Retry-After reads on every upload frame
This commit is contained in:
justme committed 2026-10-19 13:38:51 +08:00
1 parent 17638b6e20
commit 5489407241
260 files changed
+1503 -1246

No files matched your search

@@ -0,0 +1,12 @@
import { AccountPanel } from './AccountPanel';
import { ThemeMenu } from '@/ui/ThemeMenu';
import styles from '@/features/home/Home.module.css';
export function AccountScreen() {
return <div className={styles.page}><div className={styles.appearance}><ThemeMenu /></div><main className={`${styles.main} ${styles.authMain}`}>
<header className={styles.authIntro}>
<h1 className={styles.authLogo}>WebDrop</h1>
<p>登录后,可在其他设备恢复本账号保存的空间和分享。</p>
</header>
<AccountPanel variant="auth" />
</main></div>;
}