MCPcopy Index your code
hub / github.com/coder/mux / setHeartbeatSettings

Method setHeartbeatSettings

src/node/services/workspaceService.ts:4413–4503  ·  view source on GitHub ↗
(
    workspaceId: string,
    settings: WorkspaceHeartbeatSettingsUpdate
  )

Source from the content-addressed store, hash-verified

4411 }
4412
4413 async setHeartbeatSettings(
4414 workspaceId: string,
4415 settings: WorkspaceHeartbeatSettingsUpdate
4416 ): Promise<Result<WorkspaceHeartbeatSettings, string>> {
4417 try {
4418 assert(
4419 settings != null && typeof settings === "object",
4420 "setHeartbeatSettings requires settings"
4421 );
4422
4423 const hasEnabledUpdate = Object.prototype.hasOwnProperty.call(settings, "enabled");
4424 assert(
4425 !hasEnabledUpdate || typeof settings.enabled === "boolean",
4426 "Heartbeat enabled flag must be a boolean when provided"
4427 );
4428 const hasIntervalUpdate = Object.prototype.hasOwnProperty.call(settings, "intervalMs");
4429 assert(
4430 !hasIntervalUpdate || Number.isInteger(settings.intervalMs),
4431 "Heartbeat interval must be an integer when provided"
4432 );
4433 assert(
4434 !hasIntervalUpdate ||
4435 (settings.intervalMs! >= HEARTBEAT_MIN_INTERVAL_MS &&
4436 settings.intervalMs! <= HEARTBEAT_MAX_INTERVAL_MS),
4437 `Heartbeat interval must be between ${HEARTBEAT_MIN_INTERVAL_MS} and ${HEARTBEAT_MAX_INTERVAL_MS} ms`
4438 );
4439 const hasMessageUpdate = Object.prototype.hasOwnProperty.call(settings, "message");
4440 assert(
4441 !hasMessageUpdate || settings.message == null || typeof settings.message === "string",
4442 "Heartbeat message must be a string when provided"
4443 );
4444 const hasContextModeUpdate = Object.prototype.hasOwnProperty.call(settings, "contextMode");
4445 assert(
4446 !hasContextModeUpdate ||
4447 settings.contextMode == null ||
4448 isHeartbeatContextMode(settings.contextMode),
4449 "Heartbeat context mode must be a supported value when provided"
4450 );
4451
4452 const resolved = this.resolveHeartbeatWorkspaceEntry(workspaceId, "setHeartbeatSettings");
4453 if (!resolved.success) {
4454 return Err(resolved.error);
4455 }
4456
4457 const { normalizedWorkspaceId, config, workspaceEntry } = resolved.data;
4458 const defaultIntervalMs = this.getHeartbeatDefaultIntervalMsFromConfig(config);
4459 const currentSettings = normalizeHeartbeatSettings(
4460 workspaceEntry.heartbeat,
4461 defaultIntervalMs
4462 );
4463 const nextMessage = hasMessageUpdate
4464 ? sanitizeHeartbeatMessage(settings.message)
4465 : currentSettings?.message;
4466 // Keep the interval on disk even when disabled so re-enabling restores the user's choice.
4467 const nextSettings: WorkspaceHeartbeatSettings = {
4468 enabled: hasEnabledUpdate ? settings.enabled! : (currentSettings?.enabled ?? true),
4469 intervalMs: hasIntervalUpdate
4470 ? settings.intervalMs!

Callers

nothing calls this directly

Calls 13

ErrFunction · 0.90
OkFunction · 0.90
getErrorMessageFunction · 0.90
isHeartbeatContextModeFunction · 0.85
sanitizeHeartbeatMessageFunction · 0.85
saveConfigMethod · 0.80

Tested by

no test coverage detected