Gitee
by normal-coder
Verified
- common
export class GiteeError extends Error {
constructor(message: string) {
super(message);
this.name = "GiteeError";
}
}
export class GiteeValidationError extends GiteeError {
response?: unknown;
constructor(message: string, response?: unknown) {
super(message);
this.name = "GiteeValidationError";
this.response = response;
}
}
export class GiteeResourceNotFoundError extends GiteeError {
constructor(message: string) {
super(message);
this.name = "GiteeResourceNotFoundError";
}
}
export class GiteeAuthenticationError extends GiteeError {
constructor(message: string) {
super(message);
this.name = "GiteeAuthenticationError";
}
}
export class GiteePermissionError extends GiteeError {
constructor(message: string) {
super(message);
this.name = "GiteePermissionError";
}
}
export class GiteeRateLimitError extends GiteeError {
resetAt: Date;
constructor(message: string, resetAt: Date) {
super(message);
this.name = "GiteeRateLimitError";
this.resetAt = resetAt;
}
}
export class GiteeConflictError extends GiteeError {
constructor(message: string) {
super(message);
this.name = "GiteeConflictError";
}
}
export function isGiteeError(error: unknown): error is GiteeError {
return error instanceof GiteeError;
}
export function createGiteeError(status: number, responseBody: unknown): GiteeError {
let message = "Gitee API request failed";
let resetAt: Date | undefined;
if (typeof responseBody === "object" && responseBody !== null) {
const body = responseBody as Record<string, unknown>;
if (body.message && typeof body.message === "string") {
message = body.message;
}
if (body.documentation_url && typeof body.documentation_url === "string") {
message += ` - Documentation: ${body.documentation_url}`;
}
}
switch (status) {
case 400:
return new GiteeValidationError(message, responseBody);
case 401:
return new GiteeAuthenticationError(message);
case 403:
return new GiteePermissionError(message);
case 404:
return new GiteeResourceNotFoundError(message);
case 409:
return new GiteeConflictError(message);
case 429:
return new GiteeRateLimitError(
message,
resetAt || new Date(Date.now() + 60 * 1000) // Default: reset after 1 minute
);
default:
return new GiteeError(message);
}
}