2022-04-19 16:50:21 +02:00
import { z } from "zod" ;
2022-04-28 11:51:55 +02:00
import { extendApi } from "@anatine/zod-openapi" ;
2022-04-19 16:50:21 +02:00
/ *
* WARNING ! The original file is in / m e s s a g e s / J s o n M e s s a g e s .
* 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 (
2022-04-21 14:16:18 +02:00
// @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-21 14:16:18 +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-19 16:50:21 +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-21 14:16:18 +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." ,
}
) ;
2022-04-21 14:16:18 +02:00
export const isErrorApiData = z . discriminatedUnion ( "type" , [
isErrorApiErrorData ,
isErrorApiRetryData ,
isErrorApiRedirectData ,
isErrorApiUnauthorizedData ,
] ) ;
2022-04-19 16:50:21 +02:00
export type ErrorApiData = z . infer < typeof isErrorApiData > ;