Files
laude/package.json
AnRil 43ebc8d74c
Some checks failed
CI / Typecheck + Tests (push) Has been cancelled
CI / Build (Windows) (push) Has been cancelled
Release / Build installer + publish release (push) Has been cancelled
fix(updater): запекаем токен в build для приватного Gitea repo
Корень проблемы 404: репо приватный, Gitea требует Authorization
header для release assets даже на browser_download_url. Без токена
запрос возвращает 404 (не 401), поэтому electron-updater сообщал
"Cannot find channel latest.yml update info".

Решение — embed read-only токена в build:
- electron.vite.config.ts: vite `define` для __UPDATE_TOKEN__
  читает process.env.UPDATE_TOKEN на этапе сборки
- src/main/updater.ts: если __UPDATE_TOKEN__ непустой, выставляет
  autoUpdater.requestHeaders = { Authorization: 'token ...' }
- Декларация declare const локально в модуле, vite заменяет литерал

Сборка теперь требует:
  $env:UPDATE_TOKEN = '<gitea-token>'; npm run dist

Если переменная не задана — токен пустой, auto-update тихо отключается
(статус 'unsupported' не показывается, просто запросы будут падать).

Альтернатива на будущее (без токена в .exe):
1. Сделать репо публичным в Gitea Settings
2. Или сделать только Releases публичными если в этой версии Gitea
   есть такая опция
Тогда токен в коде не нужен.

== Важно для существующих пользователей ==

Установленные v0.2.x / v0.3.0-0.3.4 не могут получить апдейт
автоматически — у них в бинаре старый updater без токена и они
продолжат получать 404. Им нужно скачать v0.3.5 .exe вручную
и переустановить. После 0.3.5 auto-update заработает.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 18:42:58 +07:00

96 lines
2.8 KiB
JSON

{
"name": "laude",
"version": "0.3.5",
"description": "Exercise reminder — Windows desktop app",
"main": "out/main/index.js",
"author": "AnRil",
"private": true,
"scripts": {
"dev": "electron-vite dev",
"build": "electron-vite build",
"preview": "electron-vite preview",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json",
"typecheck:web": "tsc --noEmit -p tsconfig.web.json",
"typecheck": "npm run typecheck:node && npm run typecheck:web",
"test": "vitest",
"test:run": "vitest run",
"dist": "electron-vite build && electron-builder --win --x64",
"dist:dir": "electron-vite build && electron-builder --win --x64 --dir",
"publish": "electron-vite build && electron-builder --win --x64 --publish always",
"release": "powershell -ExecutionPolicy Bypass -File scripts/release.ps1",
"gen:icons": "powershell -ExecutionPolicy Bypass -File scripts/gen-icons.ps1"
},
"dependencies": {
"electron-updater": "^6.8.3",
"framer-motion": "^11.11.17",
"lucide-react": "^0.460.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^6.28.0",
"zustand": "^5.0.1"
},
"devDependencies": {
"@types/node": "^22.19.19",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.3",
"autoprefixer": "^10.4.20",
"electron": "^33.2.0",
"electron-builder": "^25.1.8",
"electron-vite": "^2.3.0",
"postcss": "^8.4.49",
"tailwindcss": "^3.4.15",
"typescript": "^5.6.3",
"vite": "^5.4.11",
"vitest": "^4.1.6"
},
"build": {
"appId": "com.anril.exercise-reminder",
"productName": "Exercise Reminder",
"directories": {
"output": "release",
"buildResources": "resources"
},
"files": [
"out/**/*",
"resources/**/*"
],
"win": {
"target": [
{
"target": "nsis",
"arch": [
"x64"
]
}
],
"icon": "resources/icon.ico"
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"allowElevation": true,
"createDesktopShortcut": true,
"createStartMenuShortcut": true,
"shortcutName": "Exercise Reminder",
"uninstallDisplayName": "Exercise Reminder",
"installerLanguages": [
"ru_RU",
"en_US"
],
"displayLanguageSelector": true,
"menuCategory": false,
"runAfterFinish": true,
"deleteAppDataOnUninstall": false,
"differentialPackage": true,
"artifactName": "Exercise-Reminder-Setup-${version}.${ext}"
},
"publish": {
"provider": "generic",
"url": "https://xn--90adajar8af4h.xn--p1ai/git/AnRil/laude/releases/download/v${version}",
"channel": "latest"
}
}
}