62 lines
1.6 KiB
TypeScript
62 lines
1.6 KiB
TypeScript
|
|
export const ACP_ERROR_CODES = [
|
||
|
|
"ACP_BACKEND_MISSING",
|
||
|
|
"ACP_BACKEND_UNAVAILABLE",
|
||
|
|
"ACP_BACKEND_UNSUPPORTED_CONTROL",
|
||
|
|
"ACP_DISPATCH_DISABLED",
|
||
|
|
"ACP_INVALID_RUNTIME_OPTION",
|
||
|
|
"ACP_SESSION_INIT_FAILED",
|
||
|
|
"ACP_TURN_FAILED",
|
||
|
|
] as const;
|
||
|
|
|
||
|
|
export type AcpRuntimeErrorCode = (typeof ACP_ERROR_CODES)[number];
|
||
|
|
|
||
|
|
export class AcpRuntimeError extends Error {
|
||
|
|
readonly code: AcpRuntimeErrorCode;
|
||
|
|
override readonly cause?: unknown;
|
||
|
|
|
||
|
|
constructor(code: AcpRuntimeErrorCode, message: string, options?: { cause?: unknown }) {
|
||
|
|
super(message);
|
||
|
|
this.name = "AcpRuntimeError";
|
||
|
|
this.code = code;
|
||
|
|
this.cause = options?.cause;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isAcpRuntimeError(value: unknown): value is AcpRuntimeError {
|
||
|
|
return value instanceof AcpRuntimeError;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function toAcpRuntimeError(params: {
|
||
|
|
error: unknown;
|
||
|
|
fallbackCode: AcpRuntimeErrorCode;
|
||
|
|
fallbackMessage: string;
|
||
|
|
}): AcpRuntimeError {
|
||
|
|
if (params.error instanceof AcpRuntimeError) {
|
||
|
|
return params.error;
|
||
|
|
}
|
||
|
|
if (params.error instanceof Error) {
|
||
|
|
return new AcpRuntimeError(params.fallbackCode, params.error.message, {
|
||
|
|
cause: params.error,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
return new AcpRuntimeError(params.fallbackCode, params.fallbackMessage, {
|
||
|
|
cause: params.error,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function withAcpRuntimeErrorBoundary<T>(params: {
|
||
|
|
run: () => Promise<T>;
|
||
|
|
fallbackCode: AcpRuntimeErrorCode;
|
||
|
|
fallbackMessage: string;
|
||
|
|
}): Promise<T> {
|
||
|
|
try {
|
||
|
|
return await params.run();
|
||
|
|
} catch (error) {
|
||
|
|
throw toAcpRuntimeError({
|
||
|
|
error,
|
||
|
|
fallbackCode: params.fallbackCode,
|
||
|
|
fallbackMessage: params.fallbackMessage,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|