livedesk 0.1.262 → 0.1.263

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -188,8 +188,16 @@ export function createLiveDeskUpdateManager({
188
188
  };
189
189
 
190
190
  const getStatus = () => {
191
- const updateAvailable = !!latestRelease
191
+ const managerUpdateAvailable = !!latestRelease
192
192
  && compareVersions(latestRelease.latestManagerVersion, currentManagerVersion) > 0;
193
+ const clientDevices = connectedDevices(remoteHub);
194
+ const outdatedClientDevices = latestRelease
195
+ ? clientDevices.filter(device => !isVersionAtLeast(device.agentVersion, latestRelease.latestClientVersion))
196
+ : [];
197
+ const clientPackageUpdateAvailable = !!latestRelease
198
+ && compareVersions(latestRelease.latestClientVersion, currentClientVersion) > 0;
199
+ const clientUpdateAvailable = clientPackageUpdateAvailable || outdatedClientDevices.length > 0;
200
+ const updateAvailable = managerUpdateAvailable || clientUpdateAvailable;
193
201
  const activeRun = statusForRun(run);
194
202
  return {
195
203
  currentVersion: String(currentManagerVersion || ''),
@@ -197,10 +205,14 @@ export function createLiveDeskUpdateManager({
197
205
  latestVersion: latestRelease?.latestManagerVersion || '',
198
206
  latestClientVersion: latestRelease?.latestClientVersion || '',
199
207
  updateAvailable,
208
+ managerUpdateAvailable,
209
+ clientUpdateAvailable,
210
+ clientPackageUpdateAvailable,
211
+ outdatedClientCount: outdatedClientDevices.length,
200
212
  checkedAt: latestRelease?.checkedAt || '',
201
213
  checkError,
202
214
  restartSupported: !!restartSupported,
203
- canApply: updateAvailable && !!restartSupported,
215
+ canApply: updateAvailable && (!managerUpdateAvailable && !clientPackageUpdateAvailable || !!restartSupported),
204
216
  ...(activeRun || { state: 'idle', operationId: '', targetCount: 0, completedCount: 0, waitingCount: 0, failedCount: 0, targets: [] })
205
217
  };
206
218
  };
@@ -257,7 +269,12 @@ export function createLiveDeskUpdateManager({
257
269
  clearInterval(runTimer);
258
270
  runTimer = null;
259
271
  }
260
- requestRestart();
272
+ if (run.needsHubRestart) {
273
+ requestRestart();
274
+ } else {
275
+ run.state = 'clients-updated';
276
+ touch();
277
+ }
261
278
  return;
262
279
  }
263
280
  if (now() - Date.parse(run.startedAt) >= LIVE_DESK_UPDATE_TIMEOUT_MS) {
@@ -303,13 +320,18 @@ export function createLiveDeskUpdateManager({
303
320
  }
304
321
  const release = latestRelease || await checkLatest();
305
322
  if (!release) return { ok: false, error: checkError || 'LiveDesk update check failed.', ...getStatus() };
306
- if (compareVersions(release.latestManagerVersion, currentManagerVersion) <= 0) {
323
+ const managerNeedsUpdate = compareVersions(release.latestManagerVersion, currentManagerVersion) > 0;
324
+ const clientPackageNeedsUpdate = compareVersions(release.latestClientVersion, currentClientVersion) > 0;
325
+ const connected = connectedDevices(remoteHub);
326
+ const outdatedClients = connected.filter(device => !isVersionAtLeast(device.agentVersion, release.latestClientVersion));
327
+ const needsHubRestart = managerNeedsUpdate || clientPackageNeedsUpdate;
328
+ if (!managerNeedsUpdate && !clientPackageNeedsUpdate && outdatedClients.length === 0) {
307
329
  return { ok: false, error: 'LiveDesk is already up to date.', ...getStatus() };
308
330
  }
309
- if (!restartSupported) {
331
+ if (needsHubRestart && !restartSupported) {
310
332
  return { ok: false, error: 'Hub launcher restart is unavailable. Start LiveDesk through npx livedesk@latest.', ...getStatus() };
311
333
  }
312
- const targets = connectedDevices(remoteHub);
334
+ const targets = managerNeedsUpdate || clientPackageNeedsUpdate ? connected : outdatedClients;
313
335
  const credentials = remoteHub.getStatus({ includeSecrets: true });
314
336
  run = {
315
337
  operationId: randomUUID(),
@@ -318,6 +340,7 @@ export function createLiveDeskUpdateManager({
318
340
  updatedAt: new Date(now()).toISOString(),
319
341
  latestManagerVersion: release.latestManagerVersion,
320
342
  latestClientVersion: release.latestClientVersion,
343
+ needsHubRestart,
321
344
  error: '',
322
345
  targets: targets.map(device => ({
323
346
  deviceId: String(device.deviceId || ''),
@@ -339,7 +362,12 @@ export function createLiveDeskUpdateManager({
339
362
  return { ok: false, error: run.error, ...getStatus() };
340
363
  }
341
364
  if (run.targets.length === 0) {
342
- requestRestart();
365
+ if (run.needsHubRestart) {
366
+ requestRestart();
367
+ } else {
368
+ run.state = 'clients-updated';
369
+ touch();
370
+ }
343
371
  return { ok: true, ...getStatus() };
344
372
  }
345
373
  run.state = 'waiting-for-clients';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livedesk",
3
- "version": "0.1.262",
3
+ "version": "0.1.263",
4
4
  "description": "LiveDesk Hub and client launcher",
5
5
  "type": "module",
6
6
  "bin": {