From 1a03e664793ff20acb552e95a23c751326ee9570 Mon Sep 17 00:00:00 2001 From: bbassie <17990055+bbassie@users.noreply.github.com> Date: Tue, 27 Oct 2026 22:05:14 +0000 Subject: [PATCH] Use the new error classes in code added on master Co-Authored-By: Claude Opus 5.5 --- packages/controller/src/ControlConnection.ts | 2 +- packages/lib/src/npm_registry.ts | 18 +++++++++--------- plugins/player_sync/controller.ts | 6 +++--- plugins/player_sync/test/controller.js | 6 +++--- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/controller/src/ControlConnection.ts b/packages/controller/src/ControlConnection.ts index 3772ceec..d0f7b636 100644 --- a/packages/controller/src/ControlConnection.ts +++ b/packages/controller/src/ControlConnection.ts @@ -200,7 +200,7 @@ export default class ControlConnection extends BaseConnection { throw new lib.ConflictError("Cannot restart, controller does not have a process monitor to restart it."); } if (await lib.packageOperationRunning()) { - throw new lib.RequestError("Cannot restart while a plugin install or update is running on this machine."); + throw new lib.ConflictError("Cannot restart while a plugin install or update is running on this machine."); } const downgrade = await this._controller.checkRestartDowngrade(); if (downgrade) { diff --git a/packages/lib/src/npm_registry.ts b/packages/lib/src/npm_registry.ts index a36090fd..ad6dbcd6 100644 --- a/packages/lib/src/npm_registry.ts +++ b/packages/lib/src/npm_registry.ts @@ -1,5 +1,5 @@ import { logger } from "./logging.js"; -import { RequestError } from "./errors.js"; +import { NotFoundError, UnavailableError, ValidationError } from "./errors.js"; import { PluginSearchRequest, PluginSearchResult } from "./data/messages_plugin.js"; const registryTimeoutMs = 10e3; @@ -19,10 +19,10 @@ export function parsePackageSpec(spec: string) { ? [spec.slice(0, versionSeparator), spec.slice(versionSeparator + 1)] : [spec, undefined]; if (name.length > 214 || !packageNamePattern.test(name)) { - throw new RequestError(`Invalid plugin name: ${spec}`); + throw new ValidationError(`Invalid plugin name: ${spec}`); } if (version !== undefined && !/^[a-zA-Z0-9][a-zA-Z0-9\-.+]*$/.test(version)) { - throw new RequestError(`Invalid plugin version: ${version}`); + throw new ValidationError(`Invalid plugin version: ${version}`); } return { name, version }; } @@ -37,7 +37,7 @@ export async function checkRegistry(name: string, version?: string) { signal: AbortSignal.timeout(registryTimeoutMs), }); if (!npmRequest.ok) { - throw new RequestError(`Unknown plugin: ${spec}`); + throw new NotFoundError(`Unknown plugin: ${spec}`); } return spec; } @@ -55,12 +55,12 @@ export type LatestVersionCache = Map 500) { - throw new RequestError("Too many packages"); + throw new ValidationError("Too many packages"); } const names = [...new Set(packages.map(packageName => { const { name, version: pinned } = parsePackageSpec(packageName); if (pinned !== undefined) { - throw new RequestError(`Invalid plugin name: ${packageName}`); + throw new ValidationError(`Invalid plugin name: ${packageName}`); } return name; }))]; @@ -117,10 +117,10 @@ const npmSearchMaxSize = 250; // Limit imposed by the registry export async function searchPlugins(query: string, page: number, pageSize: number) { if (query.length > 214) { - throw new RequestError("Search query too long"); + throw new ValidationError("Search query too long"); } if (page < 1 || pageSize < 1 || pageSize > npmSearchMaxSize) { - throw new RequestError("Invalid page or page size"); + throw new ValidationError("Invalid page or page size"); } const url = new URL("https://registry.npmjs.com/-/v1/search"); @@ -130,7 +130,7 @@ export async function searchPlugins(query: string, page: number, pageSize: numbe const response = await fetch(url, { signal: AbortSignal.timeout(registryTimeoutMs) }); if (!response.ok) { - throw new RequestError(`npm registry search failed: ${response.status} ${response.statusText}`); + throw new UnavailableError(`npm registry search failed: ${response.status} ${response.statusText}`); } const json = await response.json() as { diff --git a/plugins/player_sync/controller.ts b/plugins/player_sync/controller.ts index 513e3a2b..0df18cb1 100644 --- a/plugins/player_sync/controller.ts +++ b/plugins/player_sync/controller.ts @@ -109,7 +109,7 @@ export default async function(context: ControllerPluginContext) { let acquisitionRecord = getAcquisition(playerName); if (acquisitionRecord) { let instanceName = controller.instances.get(acquisitionRecord.instanceId)!.config.get("instance.name"); - throw new lib.RequestError( + throw new lib.ConflictError( `${playerName} is currently acquired by ${instanceName}, ` + "have the player leave or release the lock first" ); @@ -340,7 +340,7 @@ export default async function(context: ControllerPluginContext) { controller.handle(msg.DeletePlayerDataRequest, async (request: msg.DeletePlayerDataRequest) => { let { playerName } = request; if (!playerDatastore.has(playerName)) { - throw new lib.RequestError(`No player data stored for ${playerName}`); + throw new lib.NotFoundError(`No player data stored for ${playerName}`); } checkNotAcquired(playerName); @@ -354,7 +354,7 @@ export default async function(context: ControllerPluginContext) { controller.handle(msg.ForceReleaseRequest, async (request: msg.ForceReleaseRequest) => { let { playerName } = request; if (!acquiredPlayers.delete(playerName)) { - throw new lib.RequestError(`${playerName} is not acquired by any instance`); + throw new lib.ConflictError(`${playerName} is not acquired by any instance`); } logger.info(`Released lock on ${playerName}`); }); diff --git a/plugins/player_sync/test/controller.js b/plugins/player_sync/test/controller.js index 76eb0f27..a249aa7c 100644 --- a/plugins/player_sync/test/controller.js +++ b/plugins/player_sync/test/controller.js @@ -172,7 +172,7 @@ describe("player_sync controller", function() { }); }); - const acquiredError = new lib.RequestError( + const acquiredError = new lib.ConflictError( "stored is currently acquired by Running, have the player leave or release the lock first" ); @@ -323,7 +323,7 @@ describe("player_sync controller", function() { assert.equal((await saved()).get("stored").generation, 4); }); it("should reject unknown players", async function() { - await assert.rejects(del("unknown"), new lib.RequestError("No player data stored for unknown")); + await assert.rejects(del("unknown"), new lib.NotFoundError("No player data stored for unknown")); }); it("should reject when the player is acquired", async function() { await assert.rejects(del("stored"), acquiredError); @@ -371,7 +371,7 @@ describe("player_sync controller", function() { }); it("should reject players that are not acquired", async function() { await assert.rejects( - release("unknown"), new lib.RequestError("unknown is not acquired by any instance"), + release("unknown"), new lib.ConflictError("unknown is not acquired by any instance"), ); }); });