(handler: (metadata: Metadata) => Metadata)
| 609 | } |
| 610 | |
| 611 | updateMetadata(handler: (metadata: Metadata) => Metadata): void { |
| 612 | this.metadataLock.inLock(async () => { |
| 613 | await backoff(async () => { |
| 614 | const current = this.metadata ?? ({} as Metadata) |
| 615 | const updated = handler(current) |
| 616 | |
| 617 | const answer = await this.socket.emitWithAck('update-metadata', { |
| 618 | sid: this.sessionId, |
| 619 | expectedVersion: this.metadataVersion, |
| 620 | metadata: updated |
| 621 | }) as unknown |
| 622 | |
| 623 | applyVersionedAck(answer, { |
| 624 | valueKey: 'metadata', |
| 625 | parseValue: (value) => { |
| 626 | const parsed = MetadataSchema.safeParse(value) |
| 627 | return parsed.success ? parsed.data : null |
| 628 | }, |
| 629 | applyValue: (value) => { |
| 630 | this.metadata = value |
| 631 | }, |
| 632 | applyVersion: (version) => { |
| 633 | this.metadataVersion = version |
| 634 | }, |
| 635 | logInvalidValue: (context, version) => { |
| 636 | const suffix = context === 'success' ? 'ack' : 'version-mismatch ack' |
| 637 | logger.debug(`[API] Ignoring invalid metadata value from ${suffix}`, { version }) |
| 638 | }, |
| 639 | invalidResponseMessage: 'Invalid update-metadata response', |
| 640 | errorMessage: 'Metadata update failed', |
| 641 | versionMismatchMessage: 'Metadata version mismatch' |
| 642 | }) |
| 643 | }) |
| 644 | }) |
| 645 | } |
| 646 | |
| 647 | updateAgentState(handler: (state: AgentState) => AgentState): void { |
| 648 | this.agentStateLock.inLock(async () => { |
no test coverage detected