/** Geteilte Typen zwischen Server und Client. */
|
|
/**
|
* Bezugsquelle, aus der die Datei einer Software geholt und aktuell gehalten wird.
|
* `manuell` bedeutet: die Datei wird von Hand hochgeladen und nicht automatisch aktualisiert.
|
*/
|
export type QuelleTyp = 'direkt' | 'github' | 'winget' | 'svn' | 'git' | 'manuell';
|
|
/** Einstufung einer Software — gliedert den Katalog und steuert die Hinweise. */
|
export type Einstufung = 'lizenzfrei' | 'lizenzpflichtig' | 'intern';
|
|
/** Alle Einstufungen mit Anzeigetext, in der Reihenfolge der Katalog-Reiter. */
|
export const EINSTUFUNGEN: Array<{ id: Einstufung; text: string }> = [
|
{ id: 'lizenzfrei', text: 'Lizenzfrei' },
|
{ id: 'lizenzpflichtig', text: 'Lizenzpflichtig' },
|
{ id: 'intern', text: 'Intern' },
|
];
|
|
/**
|
* Wie das Programm auf den Rechner kommt. `unbestimmt` ist der Ausgangswert —
|
* ein Eintrag muss nicht sofort eingeordnet werden.
|
*/
|
export type Programmart = 'unbestimmt' | 'installer' | 'eigenstaendig';
|
|
/** Alle Programmarten mit Anzeigetext, in der Reihenfolge des Auswahlfelds. */
|
export const PROGRAMMARTEN: Array<{ id: Programmart; text: string }> = [
|
{ id: 'unbestimmt', text: 'Unbestimmt' },
|
{ id: 'installer', text: 'Installationsprogramm' },
|
{ id: 'eigenstaendig', text: 'Eigenständiges Programm' },
|
];
|
|
/** Ein Bau-Geheimnis, das ein Repository für seinen Bau anfordert. */
|
export interface GeheimnisBedarf {
|
/** Name der Umgebungsvariablen, z. B. `ANTHROPIC_API_KEY`. */
|
name: string;
|
beschreibung: string;
|
}
|
|
/** Stand eines Bau-Geheimnisses in der Oberfläche — nie der Wert selbst. */
|
export interface GeheimnisUebersicht {
|
name: string;
|
hinterlegt: boolean;
|
zeichen: number;
|
}
|
|
/** Ein Software-Eintrag im Katalog. */
|
export interface Software {
|
id: number;
|
name: string;
|
beschreibung: string;
|
/** Id der übergeordneten Software, falls dieser Eintrag ein Zusatzinhalt dazu ist (0 = eigenständiges Tool). */
|
elternId: number;
|
/** Typ der Bezugsquelle (leer, falls noch keine gesetzt). */
|
quelleTyp: QuelleTyp | '';
|
/** Quell-spezifische Angabe: URL (direkt), `besitzer/repo` (github), Paket-ID (winget), Repo-URL (svn/git). Bei `manuell` leer. */
|
quelleWert: string;
|
/** Nur bei Quelle `git`: Befehl, der das Tool baut (im Wurzelverzeichnis der Arbeitskopie ausgeführt). */
|
bauBefehl: string;
|
/** Nur bei Quelle `git`: Pfad des Bau-Ergebnisses relativ zur Arbeitskopie, `*` im Dateinamen erlaubt. */
|
bauErgebnis: string;
|
/** Einstufung: lizenzfrei, lizenzpflichtig (Schlüssel über den Support) oder intern (Eigenentwicklung). */
|
einstufung: Einstufung;
|
/** Installationsprogramm oder eigenständige Datei — bestimmt den Hinweis am Eintrag. */
|
programmart: Programmart;
|
/** Freier Hinweis am Eintrag, z. B. „braucht Adminrechte". Leer = keiner. */
|
hinweis: string;
|
/** Link zur Anleitung (WikiJS intern oder extern), leer falls keine hinterlegt. */
|
anleitungUrl: string;
|
/** Aktuelle Versions-/Stand-Kennung, vom Abgleich gesetzt (Release-Tag, ETag, winget-Version, SVN-Revision). */
|
version: string;
|
/** Aktuell bereitgestellte Datei im Ablageordner (leer, solange noch nichts vorliegt). */
|
dateiname: string;
|
/** Zeitpunkt, zu dem die bereitgestellte Datei zuletzt tatsächlich erneuert wurde (unser Abruf). */
|
dateiStandVom: string;
|
/** Veröffentlichungsdatum beim Anbieter, sofern die Quelle es mitliefert. */
|
veroeffentlichtAm: string;
|
/** Windows-Signaturstatus der bereitgestellten Datei (Valid, NotSigned, …). */
|
signaturStatus: string;
|
/** Signaturgeber der bereitgestellten Datei (leer, wenn unsigniert). */
|
signaturHerausgeber: string;
|
/** Optional: erwarteter Signaturgeber. Weicht er ab, wird die Datei nicht bereitgestellt. */
|
erwarteterHerausgeber: string;
|
/** Vom Repository angeforderte Bau-Geheimnisse (aus `software-bibliothek.json`). */
|
benoetigteGeheimnisse: GeheimnisBedarf[];
|
/** Zeitpunkt des letzten Abgleichs (leer, falls nie geprüft). */
|
letzterAbgleich: string;
|
/** War der letzte Abgleich erfolgreich? */
|
abgleichErfolg: boolean;
|
/** Meldung des letzten Abgleichs (z.B. „Aktualisiert." oder ein Fehlertext). */
|
abgleichMeldung: string;
|
erstelltAm: string;
|
aktualisiertAm: string;
|
}
|
|
/** Nutzlast beim Anlegen/Bearbeiten (server-verwaltete Felder wie Version/Datei/Abgleich ausgenommen). */
|
export interface SoftwareEingabe {
|
name: string;
|
beschreibung: string;
|
elternId: number;
|
quelleTyp: QuelleTyp | '';
|
quelleWert: string;
|
bauBefehl: string;
|
bauErgebnis: string;
|
einstufung: Einstufung;
|
programmart: Programmart;
|
hinweis: string;
|
anleitungUrl: string;
|
erwarteterHerausgeber: string;
|
}
|
|
/** Ergebnis eines Bezugsquellen-Abgleichs, das in die DB zurückgeschrieben wird. */
|
export interface AbgleichErgebnis {
|
version: string;
|
dateiname: string;
|
erfolg: boolean;
|
meldung: string;
|
/** Wurde tatsächlich eine neue Datei bereitgestellt? Nur dann zählt es als Update. */
|
geaendert: boolean;
|
signaturStatus: string;
|
signaturHerausgeber: string;
|
veroeffentlichtAm: string;
|
benoetigteGeheimnisse: GeheimnisBedarf[];
|
}
|
|
/** Einstellungen der Anwendung (Datei `konfiguration.json` neben der Anwendung). */
|
export interface Einstellungen {
|
/** Ablageort für Datenbank und Programm-Dateien. Leer = Ordner „data" neben der Anwendung. */
|
datenOrdner: string;
|
/** Port, auf dem die Oberfläche erreichbar ist. */
|
port: number;
|
/**
|
* Kennung für Git-Zugriffe über SSH. Leer = die SSH-Konfiguration des
|
* Dienstbenutzers entscheidet. Hier zentral gepflegt, damit ein Kontowechsel
|
* keine Anpassung an den Katalogeinträgen erfordert.
|
*/
|
gitBenutzer: string;
|
/** Optionaler Pfad zum privaten SSH-Schlüssel für Git-Zugriffe. */
|
gitSchluessel: string;
|
}
|
|
/** Einstellungen samt der daraus abgeleiteten, tatsächlich genutzten Pfade. */
|
export interface EinstellungenAnsicht {
|
einstellungen: Einstellungen;
|
/** Vollständiger Pfad der Konfigurationsdatei. */
|
konfigurationsDatei: string;
|
/** Tatsächlich verwendeter Datenordner (aufgelöst aus der Einstellung). */
|
effektiverDatenOrdner: string;
|
/** Läuft gerade auf diesem Port (Änderungen wirken erst nach Neustart). */
|
laufenderPort: number;
|
}
|
|
/** Ein protokollierter Zugriff/Download aus dem Netzwerk. */
|
export interface ZugriffslogEintrag {
|
id: number;
|
zeitpunkt: string;
|
ipAdresse: string;
|
rechnername: string;
|
angegebenerName: string;
|
aktion: string;
|
}
|