You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

180 lines
5.6 KiB

import { Uri } from 'vscode';
import { isSubscriptionPaidPlan, RequiredSubscriptionPlans, Subscription } from './subscription';
export class AccessDeniedError extends Error {
public readonly subscription: Subscription;
public readonly required: RequiredSubscriptionPlans | undefined;
constructor(subscription: Subscription, required: RequiredSubscriptionPlans | undefined) {
let message;
if (subscription.account?.verified === false) {
message = 'Email verification required';
} else if (required != null && isSubscriptionPaidPlan(required)) {
message = 'Paid subscription required';
} else {
message = 'Subscription required';
}
super(message);
this.subscription = subscription;
this.required = required;
Error.captureStackTrace?.(this, AccessDeniedError);
}
}
export class AccountValidationError extends Error {
readonly original?: Error;
readonly statusCode?: number;
readonly statusText?: string;
constructor(message: string, original?: Error, statusCode?: number, statusText?: string) {
message += `; status=${statusCode}: ${statusText}`;
super(message);
this.original = original;
this.statusCode = statusCode;
this.statusText = statusText;
Error.captureStackTrace?.(this, AccountValidationError);
}
}
export const enum AuthenticationErrorReason {
UserDidNotConsent = 1,
Unauthorized = 2,
Forbidden = 3,
}
export class AuthenticationError extends Error {
readonly id: string;
readonly original?: Error;
readonly reason: AuthenticationErrorReason | undefined;
constructor(id: string, reason?: AuthenticationErrorReason, original?: Error);
constructor(id: string, message?: string, original?: Error);
constructor(id: string, messageOrReason: string | AuthenticationErrorReason | undefined, original?: Error) {
let message;
let reason: AuthenticationErrorReason | undefined;
if (messageOrReason == null) {
message = `Unable to get required authentication session for '${id}'`;
} else if (typeof messageOrReason === 'string') {
message = messageOrReason;
reason = undefined;
} else {
reason = messageOrReason;
switch (reason) {
case AuthenticationErrorReason.UserDidNotConsent:
message = `'${id}' authentication is required for this operation`;
break;
case AuthenticationErrorReason.Unauthorized:
message = `Your '${id}' credentials are either invalid or expired`;
break;
case AuthenticationErrorReason.Forbidden:
message = `Your '${id}' credentials do not have the required access`;
break;
}
}
super(message);
this.id = id;
this.original = original;
this.reason = reason;
Error.captureStackTrace?.(this, AuthenticationError);
}
}
export class ExtensionNotFoundError extends Error {
constructor(public readonly extensionId: string, public readonly extensionName: string) {
super(
`Unable to find the ${extensionName} extension (${extensionId}). Please ensure it is installed and enabled.`,
);
Error.captureStackTrace?.(this, ExtensionNotFoundError);
}
}
export const enum OpenVirtualRepositoryErrorReason {
RemoteHubApiNotFound = 1,
NotAGitHubRepository = 2,
GitHubAuthenticationNotFound = 3,
GitHubAuthenticationDenied = 4,
}
export class OpenVirtualRepositoryError extends Error {
readonly original?: Error;
readonly reason: OpenVirtualRepositoryErrorReason | undefined;
readonly repoPath: string;
constructor(repoPath: string, reason?: OpenVirtualRepositoryErrorReason, original?: Error);
constructor(repoPath: string, message?: string, original?: Error);
constructor(
repoPath: string,
messageOrReason: string | OpenVirtualRepositoryErrorReason | undefined,
original?: Error,
) {
let message;
let reason: OpenVirtualRepositoryErrorReason | undefined;
if (messageOrReason == null) {
message = `Unable to open the virtual repository: ${repoPath}`;
} else if (typeof messageOrReason === 'string') {
message = messageOrReason;
reason = undefined;
} else {
reason = messageOrReason;
message = `Unable to open the virtual repository: ${repoPath}; `;
switch (reason) {
case OpenVirtualRepositoryErrorReason.RemoteHubApiNotFound:
message +=
'Unable to get required api from the GitHub Repositories extension. Please ensure that the GitHub Repositories extension is installed and enabled';
break;
case OpenVirtualRepositoryErrorReason.NotAGitHubRepository:
message += 'Only GitHub repositories are supported currently';
break;
case OpenVirtualRepositoryErrorReason.GitHubAuthenticationNotFound:
message += 'Unable to get required GitHub authentication';
break;
case OpenVirtualRepositoryErrorReason.GitHubAuthenticationDenied:
message += 'GitHub authentication is required';
break;
}
}
super(message);
this.original = original;
this.reason = reason;
this.repoPath = repoPath;
Error.captureStackTrace?.(this, OpenVirtualRepositoryError);
}
}
export class ProviderNotFoundError extends Error {
constructor(pathOrUri: string | Uri | undefined) {
super(
`No provider registered for '${
pathOrUri == null
? String(pathOrUri)
: typeof pathOrUri === 'string'
? pathOrUri
: pathOrUri.toString(true)
}'`,
);
Error.captureStackTrace?.(this, ProviderNotFoundError);
}
}
export class ProviderRequestClientError extends Error {
constructor(public readonly original: Error) {
super(original.message);
Error.captureStackTrace?.(this, ProviderRequestClientError);
}
}
export class ProviderRequestNotFoundError extends Error {
constructor(public readonly original: Error) {
super(original.message);
Error.captureStackTrace?.(this, ProviderRequestNotFoundError);
}
}