systemUpdate.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import type { JsonValue } from '@shared/types'
  2. import { apiRequest } from './client'
  3. export interface ReleaseManifest {
  4. schemaVersion: 1
  5. releaseVersion: string
  6. webVersion: string
  7. gitTag: string
  8. }
  9. export type UpdateJobState =
  10. | 'queued'
  11. | 'downloading'
  12. | 'building'
  13. | 'installing'
  14. | 'restarting'
  15. | 'verifying'
  16. | 'rolling_back'
  17. | 'succeeded'
  18. | 'failed'
  19. | 'rolled_back'
  20. export interface UpdateJob {
  21. id: string
  22. operation: 'update' | 'rollback'
  23. state: UpdateJobState
  24. message: string
  25. createdAt: string
  26. updatedAt: string
  27. target?: ReleaseManifest
  28. error?: string
  29. }
  30. export interface SystemUpdateStatus {
  31. current: ReleaseManifest
  32. build?: { commit: string; buildNumber: number; dirty: boolean; artifactDigest?: string }
  33. installationMode: 'source' | 'release' | 'desktop'
  34. latest?: ReleaseManifest
  35. updateAvailable: boolean
  36. supported: boolean
  37. unsupportedReason?: string
  38. canRollback: boolean
  39. job?: UpdateJob
  40. }
  41. export function systemUpdateStatus(): Promise<SystemUpdateStatus> {
  42. return apiRequest('/api/app/system/update/status')
  43. }
  44. export function checkSystemUpdate(): Promise<SystemUpdateStatus> {
  45. return apiRequest('/api/app/system/update/check', { method: 'POST', body: {}, timeoutMs: 90_000 })
  46. }
  47. export function applySystemUpdate(targetVersion: string): Promise<UpdateJob> {
  48. return apiRequest('/api/app/system/update/apply', {
  49. method: 'POST',
  50. body: { targetVersion } as JsonValue,
  51. timeoutMs: 90_000,
  52. })
  53. }
  54. export function systemUpdateJob(jobID: string): Promise<UpdateJob> {
  55. return apiRequest(`/api/app/system/update/jobs/${encodeURIComponent(jobID)}`, {
  56. notifyUnauthorized: false,
  57. timeoutMs: 5_000,
  58. })
  59. }
  60. export function rollbackSystemUpdate(): Promise<UpdateJob> {
  61. return apiRequest('/api/app/system/update/rollback', { method: 'POST', body: {} })
  62. }