(handler: (metadata: MachineMetadata | null) => MachineMetadata)
| 308 | } |
| 309 | |
| 310 | async updateMachineMetadata(handler: (metadata: MachineMetadata | null) => MachineMetadata): Promise<void> { |
| 311 | await backoff(async () => { |
| 312 | const updated = handler(this.machine.metadata) |
| 313 | |
| 314 | const answer = await this.socket.emitWithAck('machine-update-metadata', { |
| 315 | machineId: this.machine.id, |
| 316 | metadata: updated, |
| 317 | expectedVersion: this.machine.metadataVersion |
| 318 | }) as unknown |
| 319 | |
| 320 | applyVersionedAck(answer, { |
| 321 | valueKey: 'metadata', |
| 322 | parseValue: (value) => { |
| 323 | const parsed = MachineMetadataSchema.safeParse(value) |
| 324 | return parsed.success ? parsed.data : null |
| 325 | }, |
| 326 | applyValue: (value) => { |
| 327 | this.machine.metadata = value |
| 328 | }, |
| 329 | applyVersion: (version) => { |
| 330 | this.machine.metadataVersion = version |
| 331 | }, |
| 332 | logInvalidValue: (context, version) => { |
| 333 | const suffix = context === 'success' ? 'ack' : 'version-mismatch ack' |
| 334 | logger.debug(`[API MACHINE] Ignoring invalid metadata value from ${suffix}`, { version }) |
| 335 | }, |
| 336 | invalidResponseMessage: 'Invalid machine-update-metadata response', |
| 337 | errorMessage: 'Machine metadata update failed', |
| 338 | versionMismatchMessage: 'Metadata version mismatch' |
| 339 | }) |
| 340 | }) |
| 341 | } |
| 342 | |
| 343 | async updateRunnerState(handler: (state: RunnerState | null) => RunnerState): Promise<void> { |
| 344 | await backoff(async () => { |
no test coverage detected