de81c74e53
- Neuer oeffentlicher Endpunkt (vor download/:platform): base-Origin wird
per safeOrigin validiert (nur http/https, kein Pfad/Query/Fragment/
Userinfo, sonst 400) und nur zum Bau der absoluten Download-URL genutzt,
nie serverseitig abgerufen
- 204 ohne Body bei fremder Plattform/Architektur, fehlendem Manifest,
fehlender Signatur oder fehlendem/ungueltigem updateVersion; sonst
{ version, pub_date (nur RFC 3339), url, signature, notes }
- Manifest-Felder signature (je Plattform) und updateVersion optional in
@tessera/shared, Eintragspruefung akzeptiert nur String-Signaturen
- 10 neue Spec-Tests, Test 11 erweitert (23 gesamt); latest/download
unveraendert
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
export const APP_NAME = "Tessera";
|
|
|
|
export interface HealthResponse {
|
|
status: string;
|
|
timestamp: string;
|
|
}
|
|
|
|
/**
|
|
* Antwort von `GET /health/version` (quick-260914-ku1).
|
|
* `channel` ist in der Praxis `beta` | `live` | `dev`; die Wahrheit der
|
|
* Version ist der Git-Tag (`git describe`), nicht eine package.json.
|
|
*/
|
|
export interface VersionResponse {
|
|
name: string;
|
|
version: string;
|
|
channel: string;
|
|
commit: string;
|
|
buildTime: string;
|
|
}
|
|
|
|
/**
|
|
* Desktop-Pakete (Phase 18, D-08): Quelle ist ausschliesslich `manifest.json`,
|
|
* geschrieben nur von `.gitea/scripts/desktop-collect.sh` im CI. `platform` ist
|
|
* ein geschlossener Wertevorrat -- eine dritte Plattform waere eine bewusste
|
|
* Erweiterung hier und an der Konstante `PLATFORMS` im API-Dienst.
|
|
*/
|
|
export type DesktopPlatform = 'windows' | 'linux';
|
|
|
|
export interface DesktopManifestFile {
|
|
name: string;
|
|
size: number;
|
|
sha256: string;
|
|
/**
|
|
* Base64-Inhalt der `.sig`-Datei des Tauri-Bundlers (minisign), geschrieben
|
|
* von desktop-collect.sh, gelesen nur von `GET /desktop/update`. Fehlt bei
|
|
* Bauten mit `--no-sign` -- dann gibt es kein Update in der App.
|
|
*/
|
|
signature?: string;
|
|
}
|
|
|
|
export interface DesktopManifest {
|
|
version: string;
|
|
channel: string;
|
|
commit: string;
|
|
buildTime: string;
|
|
/**
|
|
* SemVer-Form, die der Updater im Client vergleicht: `X.Y.Z` bei live,
|
|
* `X.Y.Z-beta.g<sha7>` bei beta (Praefix `g` Pflicht -- ein rein numerischer
|
|
* SHA mit fuehrender Null waere kein gueltiger SemVer-Identifier).
|
|
*/
|
|
updateVersion?: string;
|
|
files: Partial<Record<DesktopPlatform, DesktopManifestFile>>;
|
|
}
|
|
|
|
/**
|
|
* Antwort von `GET /desktop/update` -- das dynamische Antwortformat von
|
|
* `tauri-plugin-updater`. Die Feldnamen sind vom Plugin vorgegeben, darum
|
|
* snake_case `pub_date`. `url` muss absolut sein, `signature` ist Pflicht.
|
|
*/
|
|
export interface DesktopUpdateResponse {
|
|
version: string;
|
|
pub_date?: string;
|
|
url: string;
|
|
signature: string;
|
|
notes?: string;
|
|
}
|
|
|
|
export interface DesktopLatestFile extends DesktopManifestFile {
|
|
url: string;
|
|
}
|
|
|
|
export interface DesktopLatestResponse {
|
|
version: string;
|
|
channel: string;
|
|
commit: string;
|
|
buildTime: string;
|
|
files: Partial<Record<DesktopPlatform, DesktopLatestFile>>;
|
|
}
|