add sub-bar usage widget extension with opencode-go support
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Error utilities for the sub-bar extension
|
||||
*/
|
||||
|
||||
import type { UsageError, UsageErrorCode } from "./types.js";
|
||||
|
||||
export function createError(code: UsageErrorCode, message: string, httpStatus?: number): UsageError {
|
||||
return { code, message, httpStatus };
|
||||
}
|
||||
|
||||
export function noCredentials(): UsageError {
|
||||
return createError("NO_CREDENTIALS", "No credentials found");
|
||||
}
|
||||
|
||||
export function noCli(cliName: string): UsageError {
|
||||
return createError("NO_CLI", `${cliName} CLI not found`);
|
||||
}
|
||||
|
||||
export function notLoggedIn(): UsageError {
|
||||
return createError("NOT_LOGGED_IN", "Not logged in");
|
||||
}
|
||||
|
||||
export function fetchFailed(reason?: string): UsageError {
|
||||
return createError("FETCH_FAILED", reason ?? "Fetch failed");
|
||||
}
|
||||
|
||||
export function httpError(status: number): UsageError {
|
||||
return createError("HTTP_ERROR", `HTTP ${status}`, status);
|
||||
}
|
||||
|
||||
export function apiError(message: string): UsageError {
|
||||
return createError("API_ERROR", message);
|
||||
}
|
||||
|
||||
export function timeout(): UsageError {
|
||||
return createError("TIMEOUT", "Request timed out");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an error should be considered "no data available" vs actual error
|
||||
* These are expected states when provider isn't configured
|
||||
*/
|
||||
export function isExpectedMissingData(error: UsageError): boolean {
|
||||
const ignoreCodes = new Set<UsageErrorCode>(["NO_CREDENTIALS", "NO_CLI", "NOT_LOGGED_IN"]);
|
||||
return ignoreCodes.has(error.code);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format error for display in the usage widget
|
||||
*/
|
||||
export function formatErrorForDisplay(error: UsageError): string {
|
||||
switch (error.code) {
|
||||
case "NO_CREDENTIALS":
|
||||
return "No creds";
|
||||
case "NO_CLI":
|
||||
return "No CLI";
|
||||
case "NOT_LOGGED_IN":
|
||||
return "Not logged in";
|
||||
case "HTTP_ERROR":
|
||||
if (error.httpStatus === 401) {
|
||||
return "token no longer valid – please /login again";
|
||||
}
|
||||
return `${error.httpStatus}`;
|
||||
case "FETCH_FAILED":
|
||||
case "API_ERROR":
|
||||
case "TIMEOUT":
|
||||
case "UNKNOWN":
|
||||
default:
|
||||
return "Fetch failed";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user