feat: Windows download link + self-served update feed + install tracking
Downloads/updates: - config: DOWNLOADS_DIR (override to a mounted volume in prod). - static.js: serves /downloads/* (installer, latest.yml, .blockmap) with range support for resumable + differential auto-updates; /download/windows redirects to the current .exe (stable link). Landing page gets a "Download the Windows desktop app" button (hidden in-app). Install tracking (who installed the app): - db app_installs + repos.appInstalls (upsert by install_id, fills in the user on sign-in). - POST /api/v1/telemetry/install (records install + user once authenticated); GET /api/v1/admin/installs (admin: list installs with user/version/os/last-seen). - desktop main.js: stable per-install id in userData, exposed via preload (bizConnectNative.installId/version/os); home.html reportInstall() posts it after login. - e2e: +2 checks (telemetry recorded, admin sees it). 119/119. build batch20. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -321,6 +321,25 @@ CREATE TABLE IF NOT EXISTS device_tokens (
|
||||
CREATE INDEX IF NOT EXISTS idx_devtok_user ON device_tokens(user_id);
|
||||
`);
|
||||
|
||||
// App installs (desktop/mobile clients): one row per install, associated with the user once
|
||||
// they sign in. Lets admins see who installed the app, which version, and when it was last used.
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS app_installs (
|
||||
id TEXT PRIMARY KEY,
|
||||
install_id TEXT NOT NULL UNIQUE,
|
||||
user_id TEXT,
|
||||
user_email TEXT,
|
||||
tenant_id TEXT,
|
||||
platform TEXT,
|
||||
app_version TEXT,
|
||||
os TEXT,
|
||||
first_seen INTEGER NOT NULL,
|
||||
last_seen INTEGER NOT NULL
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_installs_tenant ON app_installs(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_installs_user ON app_installs(user_id);
|
||||
`);
|
||||
|
||||
// Favourite conversations (per user). target = 'dm:<userId>' or 'group:<groupId>'.
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS favorites (
|
||||
|
||||
Reference in New Issue
Block a user