livedesk 0.1.619 → 0.1.621

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.
package/hub/src/server.js CHANGED
@@ -4342,27 +4342,35 @@ app.post('/api/settings/agent/summary', async (req, res) => {
4342
4342
  }
4343
4343
  });
4344
4344
 
4345
- app.get('/api/remote/status', (_req, res) => {
4346
- noStore(res);
4347
- if (runtimeRole !== 'hub') {
4345
+ app.get('/api/remote/status', async (_req, res) => {
4346
+ noStore(res);
4347
+ if (runtimeRole !== 'hub') {
4348
4348
  res.status(403).json({ ok: false, error: 'role-not-allowed' });
4349
4349
  return;
4350
4350
  }
4351
- const secretStatus = remoteHub.getStatus({ includeSecrets: true });
4352
- res.json({
4353
- ...remoteHub.getStatus({ includeSecrets: false }),
4354
- pairingPin: secretStatus.pairingPin,
4355
- product: 'LiveDesk',
4356
- runtimeRole,
4357
- deviceId: runtimeDeviceId,
4358
- deviceName: runtimeDeviceName,
4359
- roleSource: runtimeRoleSource,
4360
- agentPackage: '@livedesk/client',
4361
- consoleRelay: hubConsoleRelay?.inspect() || { enabled: false, state: 'starting' },
4362
- frameLanes: snapshotFrameLaneResourceHealth(),
4363
- update: getLiveDeskUpdateStatus()
4364
- });
4365
- });
4351
+ try {
4352
+ const [secretStatus, wallPreferences] = await Promise.all([
4353
+ Promise.resolve(remoteHub.getStatus({ includeSecrets: true })),
4354
+ liveDeskSettingsStore.getWallPreferencesRecord()
4355
+ ]);
4356
+ res.json({
4357
+ ...remoteHub.getStatus({ includeSecrets: false }),
4358
+ pairingPin: secretStatus.pairingPin,
4359
+ product: 'LiveDesk',
4360
+ runtimeRole,
4361
+ deviceId: runtimeDeviceId,
4362
+ deviceName: runtimeDeviceName,
4363
+ roleSource: runtimeRoleSource,
4364
+ agentPackage: '@livedesk/client',
4365
+ wallPreferences,
4366
+ consoleRelay: hubConsoleRelay?.inspect() || { enabled: false, state: 'starting' },
4367
+ frameLanes: snapshotFrameLaneResourceHealth(),
4368
+ update: getLiveDeskUpdateStatus()
4369
+ });
4370
+ } catch (error) {
4371
+ res.status(500).json({ ok: false, error: error instanceof Error ? error.message : String(error) });
4372
+ }
4373
+ });
4366
4374
 
4367
4375
  app.post('/api/remote/diagnostics/transport/start', async (req, res) => {
4368
4376
  noStore(res);
@@ -46,9 +46,11 @@ export const DEFAULT_LIVEDESK_SETTINGS = Object.freeze({
46
46
  rememberLastMonitor: true,
47
47
  keepControlReadyBetweenPages: true
48
48
  },
49
- wall: {
50
- performanceMode: 'auto',
51
- autoStart: true,
49
+ wall: {
50
+ performanceMode: 'auto',
51
+ cadence: 'fast',
52
+ viewScale: 100,
53
+ autoStart: true,
52
54
  connectedOnly: false,
53
55
  keepEmptySlots: true,
54
56
  showDeviceStatus: true,
@@ -110,9 +112,10 @@ export const DEFAULT_LIVEDESK_SETTINGS = Object.freeze({
110
112
  }
111
113
  });
112
114
 
113
- const ENUMS = {
115
+ const ENUMS = {
114
116
  accessMode: new Set(['trusted-only', 'ask-every-time', 'view-only', 'block-remote-access']),
115
- performanceMode: new Set(['auto', 'responsive', 'quality', 'custom']),
117
+ performanceMode: new Set(['auto', 'responsive', 'quality', 'custom']),
118
+ wallCadence: new Set(['slow', 'fast']),
116
119
  permissionMode: new Set(['ask', 'safe-auto', 'full-access', 'custom']),
117
120
  wallFrameMode: new Set(['auto', 'mode2-lzo', 'mode3-h264-hw', 'mode4-h264-atlas']),
118
121
  controlFrameMode: new Set(['mode3-h264-hw', 'mode5-lzo-delta']),
@@ -169,9 +172,11 @@ const RULES = {
169
172
  control: {
170
173
  ...bools(['allowKeyboardMouse', 'allowSystemShortcuts', 'allowClipboardText', 'allowRemoteRestart', 'reconnectAfterRemoteRestart', 'allowSwitchingMonitors', 'showConnectionToolbar', 'showRemoteCursor', 'openControlOnDoubleClick', 'startRemoteAudioWithControl', 'fitRemoteScreen', 'rememberLastMonitor', 'keepControlReadyBetweenPages'])
171
174
  },
172
- wall: {
173
- performanceMode: { type: 'enum', values: ENUMS.performanceMode },
174
- ...bools(['autoStart', 'connectedOnly', 'keepEmptySlots', 'showDeviceStatus', 'showPerformanceDetails', 'pauseHiddenTiles', 'reduceWhenHidden', 'autoAdjustTileQuality', 'rememberDevicePositions'])
175
+ wall: {
176
+ performanceMode: { type: 'enum', values: ENUMS.performanceMode },
177
+ cadence: { type: 'enum', values: ENUMS.wallCadence },
178
+ viewScale: { type: 'number', min: 0, max: 100 },
179
+ ...bools(['autoStart', 'connectedOnly', 'keepEmptySlots', 'showDeviceStatus', 'showPerformanceDetails', 'pauseHiddenTiles', 'reduceWhenHidden', 'autoAdjustTileQuality', 'rememberDevicePositions'])
175
180
  },
176
181
  filesAudio: {
177
182
  ...bools(['allowFileTransfer', 'allowFolderSync', 'askBeforeReceivingFiles', 'openReceivedFolder', 'notifyTransferComplete', 'allowOverwrite', 'allowRemoteAudio', 'startAudioMuted', 'rememberVolume', 'automaticallyRecoverAudio', 'showAudioTroubleshooting', 'rollingBufferEnabled', 'includeRemoteCursor']),
@@ -40,12 +40,22 @@ export class LiveDeskSettingsStore {
40
40
  return structuredClone(this.record);
41
41
  }
42
42
 
43
- getCached() {
44
- if (!this.record) return DEFAULT_LIVEDESK_SETTINGS;
45
- return { ...this.record.settings, revision: this.record.revision };
46
- }
47
-
48
- async get() {
43
+ getCached() {
44
+ if (!this.record) return DEFAULT_LIVEDESK_SETTINGS;
45
+ return { ...this.record.settings, revision: this.record.revision };
46
+ }
47
+
48
+ async getWallPreferencesRecord() {
49
+ if (!this.record) await this.getRecord();
50
+ return {
51
+ revision: this.record.revision,
52
+ updatedAt: this.record.updatedAt,
53
+ cadence: this.record.settings.wall.cadence,
54
+ viewScale: this.record.settings.wall.viewScale
55
+ };
56
+ }
57
+
58
+ async get() {
49
59
  return publicSettings((await this.getRecord()).settings);
50
60
  }
51
61
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "livedesk",
3
- "version": "0.1.619",
3
+ "version": "0.1.621",
4
4
  "livedeskClientVersion": "0.1.266",
5
5
  "buildFlavor": "production",
6
6
  "description": "VuvoDesk Hub and client launcher",
@@ -4,7 +4,7 @@
4
4
  "short_name": "VuvoDesk",
5
5
  "description": "Monitor and control your VuvoDesk computers from your phone.",
6
6
  "lang": "en",
7
- "start_url": "/app?pwa=0.1.618",
7
+ "start_url": "/app?pwa=0.1.620",
8
8
  "scope": "/",
9
9
  "display": "standalone",
10
10
  "orientation": "any",