mirror of
https://github.com/binwiederhier/ntfy.git
synced 2025-01-16 05:35:02 +01:00
59011c8a32
These are safe fixes, more complicated fixes can be done separately (just disabled those errors for now). - Reorder declarations to fix `no-use-before-define` - Rename parameters for `no-shadow` - Remove unused parameters, functions, imports - Switch from `++` and `—` to `+= 1` and `-= 1` for `no-unary` - Use object spreading instead of parameter reassignment in auth utils - Use `window.location` instead of `location` global - Use inline JSX strings instead of unescaped values -
80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
/* eslint-disable max-classes-per-file */
|
|
// This is a subset of, and the counterpart to errors.go
|
|
|
|
const maybeToJson = async (response) => {
|
|
try {
|
|
return await response.json();
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
export class UnauthorizedError extends Error {
|
|
constructor() {
|
|
super("Unauthorized");
|
|
}
|
|
}
|
|
|
|
export class UserExistsError extends Error {
|
|
static CODE = 40901; // errHTTPConflictUserExists
|
|
|
|
constructor() {
|
|
super("Username already exists");
|
|
}
|
|
}
|
|
|
|
export class TopicReservedError extends Error {
|
|
static CODE = 40902; // errHTTPConflictTopicReserved
|
|
|
|
constructor() {
|
|
super("Topic already reserved");
|
|
}
|
|
}
|
|
|
|
export class AccountCreateLimitReachedError extends Error {
|
|
static CODE = 42906; // errHTTPTooManyRequestsLimitAccountCreation
|
|
|
|
constructor() {
|
|
super("Account creation limit reached");
|
|
}
|
|
}
|
|
|
|
export class IncorrectPasswordError extends Error {
|
|
static CODE = 40026; // errHTTPBadRequestIncorrectPasswordConfirmation
|
|
|
|
constructor() {
|
|
super("Password incorrect");
|
|
}
|
|
}
|
|
|
|
export const throwAppError = async (response) => {
|
|
if (response.status === 401 || response.status === 403) {
|
|
console.log(`[Error] HTTP ${response.status}`, response);
|
|
throw new UnauthorizedError();
|
|
}
|
|
const error = await maybeToJson(response);
|
|
if (error?.code) {
|
|
console.log(`[Error] HTTP ${response.status}, ntfy error ${error.code}: ${error.error || ""}`, response);
|
|
if (error.code === UserExistsError.CODE) {
|
|
throw new UserExistsError();
|
|
} else if (error.code === TopicReservedError.CODE) {
|
|
throw new TopicReservedError();
|
|
} else if (error.code === AccountCreateLimitReachedError.CODE) {
|
|
throw new AccountCreateLimitReachedError();
|
|
} else if (error.code === IncorrectPasswordError.CODE) {
|
|
throw new IncorrectPasswordError();
|
|
} else if (error?.error) {
|
|
throw new Error(`Error ${error.code}: ${error.error}`);
|
|
}
|
|
}
|
|
console.log(`[Error] HTTP ${response.status}, not a ntfy error`, response);
|
|
throw new Error(`Unexpected response ${response.status}`);
|
|
};
|
|
|
|
export const fetchOrThrow = async (url, options) => {
|
|
const response = await fetch(url, options);
|
|
if (response.status !== 200) {
|
|
await throwAppError(response);
|
|
}
|
|
return response; // Promise!
|
|
};
|