partey_workadventure/messages/JsonMessages/ErrorApiData.ts

136 lines
5.8 KiB
TypeScript
Raw Permalink Normal View History

import { z } from "zod";
2022-04-28 11:51:55 +02:00
import { extendApi } from "@anatine/zod-openapi";
/*
* WARNING! The original file is in /messages/JsonMessages.
* All other files are automatically copied from this file on container startup / build
*/
2022-04-28 11:39:08 +02:00
export const isErrorApiErrorData = extendApi(
// @ts-ignore
2022-04-28 11:39:08 +02:00
z.object({
type: z.literal("error"),
2022-04-28 11:51:55 +02:00
code: extendApi(z.string(), {
description: "The system code of an error, it must be in SCREAMING_SNAKE_CASE.",
example: "ROOM_NOT_FOUND",
}),
title: extendApi(z.string(), { description: "Big title displayed on the error screen.", example: "ERROR" }),
subtitle: extendApi(z.string(), {
description: "Subtitle displayed to let the user know what is the main subject of the error.",
example: "The room was not found.",
}),
details: extendApi(z.string(), {
description: "Some others details on what the user can do if he don't understand the error.",
example:
"If you would like more information, you can contact the administrator or us at example@workadventu.re.",
}),
image: extendApi(z.string(), {
description: "The URL of the image displayed just under the logo in the error screen.",
example: "https://example.com/error.png",
}),
2022-04-28 11:39:08 +02:00
}),
{
2022-04-28 11:51:55 +02:00
description:
'This is an error that can be returned by the API, its type must be equal to "error".\n If such an error is caught, an error screen will be displayed.',
2022-04-28 11:39:08 +02:00
}
);
2022-04-28 11:39:08 +02:00
export const isErrorApiRetryData = extendApi(
z.object({
type: z.literal("retry"),
2022-04-28 11:51:55 +02:00
code: extendApi(z.string(), {
description:
"The system code of an error, it must be in SCREAMING_SNAKE_CASE. \n It will not be displayed to the user.",
example: "WORLD_FULL",
}),
title: extendApi(z.string(), { description: "Big title displayed on the error screen.", example: "ERROR" }),
subtitle: extendApi(z.string(), {
description: "Subtitle displayed to let the user know what is the main subject of the error.",
example: "Too successful, your WorkAdventure world is full!",
}),
details: extendApi(z.string(), {
description: "Some others details on what the user can do if he don't understand the error.",
example: "New automatic attempt in 30 seconds",
}),
image: extendApi(z.string(), {
description: "The URL of the image displayed just under the logo in the waiting screen.",
example: "https://example.com/wait.png",
}),
buttonTitle: extendApi(z.optional(z.nullable(z.string())), {
description:
"If this is not defined the button and the parameter canRetryManual is set to true, the button will be not displayed at all.",
example: "Retry",
}),
timeToRetry: extendApi(z.number(), {
description: "This is the time (in millisecond) between the next auto refresh of the page.",
example: 30_000,
}),
canRetryManual: extendApi(z.boolean(), {
description: "This boolean show or hide the button to let the user refresh manually the current page.",
example: true,
}),
2022-04-28 11:39:08 +02:00
}),
{
2022-04-28 11:51:55 +02:00
description:
'This is an error that can be returned by the API, its type must be equal to "retry".\n' +
"If such an error is caught, a waiting screen will be displayed.",
2022-04-28 11:39:08 +02:00
}
);
2022-04-28 11:39:08 +02:00
export const isErrorApiRedirectData = extendApi(
z.object({
type: z.literal("redirect"),
2022-04-28 11:51:55 +02:00
urlToRedirect: extendApi(z.string(), {
description: "A URL specified to redirect the user onto it directly",
example: "/contact-us",
}),
2022-04-28 11:39:08 +02:00
}),
{
2022-04-28 11:51:55 +02:00
description:
'This is an error that can be returned by the API, its type must be equal to "redirect".\n' +
"If such an error is caught, the user will be automatically redirected to urlToRedirect.",
2022-04-28 11:39:08 +02:00
}
);
2022-04-28 11:39:08 +02:00
export const isErrorApiUnauthorizedData = extendApi(
z.object({
type: z.literal("unauthorized"),
2022-04-28 11:51:55 +02:00
code: extendApi(z.string(), {
description: "This is the system code of an error, it must be in SCREAMING_SNAKE_CASE.",
example: "USER_ACCESS_FORBIDDEN",
}),
title: extendApi(z.string(), { description: "Big title displayed on the error screen.", example: "ERROR" }),
subtitle: extendApi(z.string(), {
description: "Subtitle displayed to let the user know what is the main subject of the error.",
example: "You can't access this place.",
}),
details: extendApi(z.string(), {
description: "Some others details on what the user can do if he don't understand the error.",
example:
"If you would like more information, you can contact the administrator or us at example@workadventu.re.",
}),
image: extendApi(z.string(), {
description: "The URL of the image displayed just under the logo in the error screen.",
example: "https://example.com/error.png",
}),
buttonTitle: extendApi(z.optional(z.nullable(z.string())), {
description: "If this is not defined the button to logout will be not displayed.",
example: "Log out",
}),
2022-04-28 11:39:08 +02:00
}),
{
2022-04-28 11:51:55 +02:00
description:
'This is an error that can be returned by the API, its type must be equal to "unauthorized".\n' +
"If such an error is caught, an error screen will be displayed with a button to let him logout and go to login page.",
}
);
export const isErrorApiData = z.discriminatedUnion("type", [
isErrorApiErrorData,
isErrorApiRetryData,
isErrorApiRedirectData,
isErrorApiUnauthorizedData,
]);
export type ErrorApiData = z.infer<typeof isErrorApiData>;