// src/errors.ts
var ApiError = class extends Error {
  constructor(status, type, message) {
    super(message);
    this.status = status;
    this.type = type;
  }
  status;
  type;
};
function envelope(type, message) {
  return { type: "error", error: { type, message } };
}
function toResponse(err) {
  if (err instanceof ApiError) {
    return Response.json(envelope(err.type, err.message), { status: err.status });
  }
  const msg = err instanceof Error ? err.message : String(err);
  console.error("[error] unhandled:", msg);
  return Response.json(envelope("server_error", "internal server error"), { status: 500 });
}
var badRequest = (msg) => new ApiError(400, "invalid_request_error", msg);
var unauthorized = (msg = "missing or invalid API key") => new ApiError(401, "authentication_error", msg);
var forbidden = (msg) => new ApiError(403, "permission_error", msg);
var notFound = (msg) => new ApiError(404, "not_found_error", msg);
var conflict = (msg) => new ApiError(409, "invalid_request_error", msg);
var tooManyRequests = (msg = "rate limit exceeded") => new ApiError(429, "rate_limit_error", msg);
var serverBusy = (msg = "server is at capacity") => new ApiError(503, "server_busy", msg);

export {
  ApiError,
  envelope,
  toResponse,
  badRequest,
  unauthorized,
  forbidden,
  notFound,
  conflict,
  tooManyRequests,
  serverBusy
};
