@auth0/auth0-spa-js
Version:
Auth0 SDK for Single Page Applications using Authorization Code Grant Flow with PKCE
160 lines (146 loc) • 5.62 kB
text/typescript
/**
* Thrown when network requests to the Auth server fail.
*/
export class GenericError extends Error {
constructor(public error: string, public error_description: string) {
super(error_description);
Object.setPrototypeOf(this, GenericError.prototype);
}
static fromPayload({
error,
error_description
}: {
error: string;
error_description: string;
}) {
return new GenericError(error, error_description);
}
}
/**
* Thrown when handling the redirect callback fails, will be one of Auth0's
* Authentication API's Standard Error Responses: https://auth0.com/docs/api/authentication?javascript#standard-error-responses
*/
export class AuthenticationError extends GenericError {
constructor(
error: string,
error_description: string,
public state: string,
public appState: any = null
) {
super(error, error_description);
//https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
Object.setPrototypeOf(this, AuthenticationError.prototype);
}
}
/**
* Thrown when handling the redirect callback for the connect flow fails, will be one of Auth0's
* Authentication API's Standard Error Responses: https://auth0.com/docs/api/authentication?javascript#standard-error-responses
*/
export class ConnectError extends GenericError {
constructor(
error: string,
error_description: string,
public connection: string,
public state: string,
public appState: any = null
) {
super(error, error_description);
//https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
Object.setPrototypeOf(this, ConnectError.prototype);
}
}
/**
* Thrown when silent auth times out (usually due to a configuration issue) or
* when network requests to the Auth server timeout.
*/
export class TimeoutError extends GenericError {
constructor() {
super('timeout', 'Timeout');
//https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
Object.setPrototypeOf(this, TimeoutError.prototype);
}
}
/**
* Error thrown when the login popup times out (if the user does not complete auth)
*/
export class PopupTimeoutError extends TimeoutError {
constructor(public popup: Window) {
super();
//https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
Object.setPrototypeOf(this, PopupTimeoutError.prototype);
}
}
export class PopupCancelledError extends GenericError {
constructor(public popup: Window) {
super('cancelled', 'Popup closed');
//https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
Object.setPrototypeOf(this, PopupCancelledError.prototype);
}
}
export class PopupOpenError extends GenericError {
constructor() {
super('popup_open', 'Unable to open a popup for loginWithPopup - window.open returned `null`');
//https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
Object.setPrototypeOf(this, PopupOpenError.prototype);
}
}
/**
* Error thrown when the token exchange results in a `mfa_required` error
*/
export class MfaRequiredError extends GenericError {
constructor(
error: string,
error_description: string,
public mfa_token: string
) {
super(error, error_description);
//https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work
Object.setPrototypeOf(this, MfaRequiredError.prototype);
}
}
/**
* Error thrown when there is no refresh token to use
*/
export class MissingRefreshTokenError extends GenericError {
constructor(public audience: string, public scope: string) {
super(
'missing_refresh_token',
`Missing Refresh Token (audience: '${valueOrEmptyString(audience, [
'default'
])}', scope: '${valueOrEmptyString(scope)}')`
);
Object.setPrototypeOf(this, MissingRefreshTokenError.prototype);
}
}
/**
* Error thrown when there are missing scopes after refreshing a token
*/
export class MissingScopesError extends GenericError {
constructor(public audience: string, public scope: string) {
super(
'missing_scopes',
`Missing requested scopes after refresh (audience: '${valueOrEmptyString(audience, [
'default'
])}', missing scope: '${valueOrEmptyString(scope)}')`
);
Object.setPrototypeOf(this, MissingScopesError.prototype);
}
}
/**
* Error thrown when the wrong DPoP nonce is used and a potential subsequent retry wasn't able to fix it.
*/
export class UseDpopNonceError extends GenericError {
constructor(public newDpopNonce: string | undefined) {
super('use_dpop_nonce', 'Server rejected DPoP proof: wrong nonce');
Object.setPrototypeOf(this, UseDpopNonceError.prototype);
}
}
/**
* Returns an empty string when value is falsy, or when it's value is included in the exclude argument.
* @param value The value to check
* @param exclude An array of values that should result in an empty string.
* @returns The value, or an empty string when falsy or included in the exclude argument.
*/
function valueOrEmptyString(value: string, exclude: string[] = []) {
return value && !exclude.includes(value) ? value : '';
}