@@ -42,136 +42,111 @@ function makeResponse(content, status) {
4242}
4343
4444/**
45- * Handles all types of errors and generates appropriate responses
46- * @param {Request } request - Incoming request
47- * @param {Response|null } response - Server response if available
48- * @param {Error|null } thrownError - Thrown error if present
49- * @param {boolean } isMaintenance - Maintenance mode state
45+ * Handles site maintenance mode
46+ * @param {boolean } isMaintenance - Indicates if maintenance mode is active
5047 * @param {Object } env - Environment variables
51- * @returns {Promise<Response|null> } Appropriate error response or null
48+ * @returns {Promise<Response|null> } Maintenance response or null
5249 */
53- async function handleError ( request , response , thrownError , isMaintenance , env ) {
54- console . log ( "handleError called with:" , {
55- request,
56- response,
57- thrownError,
58- isMaintenance,
59- env
60- } ) ;
61-
50+ async function handleMaintenanceMode ( isMaintenance , env ) {
6251 if ( isMaintenance ) {
63- return makeResponse (
64- REDIRECT . generateErrorPage (
65- "503" ,
66- env . TEXT_MAINTENANCE_TYPE ,
67- env . TEXT_MAINTENANCE_MESSAGE ,
68- env . TEXT_MAINTENANCE_GIF
69- ) ,
70- STATUS . MAINTENANCE
71- ) ;
52+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_MAINTENANCE_TYPE , env . TEXT_MAINTENANCE_MESSAGE , env . TEXT_MAINTENANCE_GIF ) , STATUS . MAINTENANCE ) ;
7253 }
54+ return null ;
55+ }
7356
74- if ( thrownError ) {
75- const originUp = await HELPER . isOriginReachable ( ) . catch ( ( ) => null ) ;
76- if ( originUp === false ) {
77- return makeResponse (
78- REDIRECT . generateErrorPage (
79- "503" ,
80- env . TEXT_BOX_ERROR_TYPE ,
81- env . TEXT_BOX_ERROR_MESSAGE ,
82- env . TEXT_BOX_ERROR_GIF
83- ) ,
84- STATUS . BOX_NO_IP
85- ) ;
86- }
57+ /**
58+ * Handles tunnel and connection errors
59+ * @param {Object } env - Environment variables
60+ * @returns {Promise<Response> } Appropriate response based on error type
61+ */
62+ async function handleTunnelError ( env ) {
63+ const originUp = await HELPER . isOriginReachable ( ) . catch ( ( ) => null ) ;
64+ if ( originUp === false ) {
65+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_BOX_ERROR_TYPE , env . TEXT_BOX_ERROR_MESSAGE , env . TEXT_BOX_ERROR_GIF ) , STATUS . BOX_NO_IP ) ;
66+ }
67+
68+ const npmUp = await HELPER . isNpmUp ( ) . catch ( ( ) => false ) ;
69+ if ( ! npmUp ) {
70+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_CONTAINER_ERROR_TYPE , env . TEXT_CONTAINER_ERROR_MESSAGE , env . TEXT_CONTAINER_ERROR_GIF ) , STATUS . CONTAINER ) ;
71+ }
72+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_GENERIC_ERROR_TYPE , env . TEXT_GENERIC_ERRORR_MESSAGE , env . TEXT_GENERIC_ERROR_GIF ) , STATUS . SERVER ) ;
73+ }
74+
75+ /**
76+ * Handles Cloudflare specific errors
77+ * @param {Response } response - Cloudflare error response
78+ * @param {Object } env - Environment variables
79+ * @returns {Promise<Response> } Appropriate response based on error type
80+ */
81+ async function handleCloudflareError ( response , env ) {
82+ const cfCode = await HELPER . getCloudflareErrorCode ( response ) ;
83+ const originUp = await HELPER . isOriginReachable ( ) . catch ( ( ) => null ) ;
84+
85+ if ( originUp === false ) {
86+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_BOX_ERROR_TYPE , env . TEXT_BOX_ERROR_MESSAGE , env . TEXT_BOX_ERROR_GIF ) , STATUS . BOX_NO_IP ) ;
87+ }
8788
89+ if ( cfCode === 1033 || [ 502 , 521 , 522 , 524 , 525 , 526 ] . includes ( response . status ) ) {
8890 const npmUp = await HELPER . isNpmUp ( ) . catch ( ( ) => false ) ;
8991 if ( ! npmUp ) {
90- return makeResponse (
91- REDIRECT . generateErrorPage (
92- "503" ,
93- env . TEXT_CONTAINER_ERROR_TYPE ,
94- env . TEXT_CONTAINER_ERROR_MESSAGE ,
95- env . TEXT_CONTAINER_ERROR_GIF
96- ) ,
97- STATUS . CONTAINER
98- ) ;
92+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_CONTAINER_ERROR_TYPE , env . TEXT_CONTAINER_ERROR_MESSAGE , env . TEXT_CONTAINER_ERROR_GIF ) , STATUS . CONTAINER ) ;
9993 }
94+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_BOX_ERROR_TYPE , env . TEXT_BOX_ERROR_MESSAGE , env . TEXT_BOX_ERROR_GIF ) , STATUS . BOX ) ;
95+ }
10096
101- return makeResponse (
102- REDIRECT . generateErrorPage (
103- "503" ,
104- env . TEXT_GENERIC_ERROR_TYPE ,
105- env . TEXT_GENERIC_ERRORR_MESSAGE ,
106- env . TEXT_GENERIC_ERROR_GIF
107- ) ,
108- STATUS . SERVER
109- ) ;
97+ if ( response . status === 523 ) {
98+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_BOX_ERROR_TYPE , env . TEXT_BOX_ERROR_MESSAGE , env . TEXT_BOX_ERROR_GIF ) , STATUS . BOX ) ;
11099 }
111100
112- if ( response && response . status >= 500 ) {
113- const cfCode = HELPER . isCloudflareError ( response )
114- ? await HELPER . getCloudflareErrorCode ( response )
115- : null ;
116-
117- const originUp = await HELPER . isOriginReachable ( ) . catch ( ( ) => null ) ;
118- if ( originUp === false ) {
119- return makeResponse (
120- REDIRECT . generateErrorPage (
121- "503" ,
122- env . TEXT_BOX_ERROR_TYPE ,
123- env . TEXT_BOX_ERROR_MESSAGE ,
124- env . TEXT_BOX_ERROR_GIF
125- ) ,
126- STATUS . BOX_NO_IP
127- ) ;
128- }
101+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_GENERIC_ERROR_TYPE , env . TEXT_GENERIC_ERRORR_MESSAGE , env . TEXT_GENERIC_ERROR_GIF ) , STATUS . SERVER ) ;
102+ }
129103
130- if ( cfCode === 1033 || [ 502 , 521 , 522 , 524 , 525 , 526 ] . includes ( response . status ) ) {
131- const npmUp = await HELPER . isNpmUp ( ) . catch ( ( ) => false ) ;
132- if ( ! npmUp ) {
133- return makeResponse (
134- REDIRECT . generateErrorPage (
135- "503" ,
136- env . TEXT_CONTAINER_ERROR_TYPE ,
137- env . TEXT_CONTAINER_ERROR_MESSAGE ,
138- env . TEXT_CONTAINER_ERROR_GIF
139- ) ,
140- STATUS . CONTAINER
141- ) ;
142- }
143- return makeResponse (
144- REDIRECT . generateErrorPage (
145- "503" ,
146- env . TEXT_BOX_ERROR_TYPE ,
147- env . TEXT_BOX_ERROR_MESSAGE ,
148- env . TEXT_BOX_ERROR_GIF
149- ) ,
150- STATUS . BOX
151- ) ;
152- }
104+ /**
105+ * Handles errors from origin server
106+ * @param {Response } response - Origin server error response
107+ * @param {Object } env - Environment variables
108+ * @returns {Promise<Response> } Appropriate response based on error type
109+ */
110+ async function handleOriginError ( response , env ) {
111+ const originUp = await HELPER . isOriginReachable ( ) . catch ( ( ) => null ) ;
112+ if ( originUp === false ) {
113+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_BOX_ERROR_TYPE , env . TEXT_BOX_ERROR_MESSAGE , env . TEXT_BOX_ERROR_GIF ) , STATUS . BOX_NO_IP ) ;
114+ }
153115
154- if ( response . status === 523 ) {
155- return makeResponse (
156- REDIRECT . generateErrorPage (
157- "503" ,
158- env . TEXT_BOX_ERROR_TYPE ,
159- env . TEXT_BOX_ERROR_MESSAGE ,
160- env . TEXT_BOX_ERROR_GIF
161- ) ,
162- STATUS . BOX
163- ) ;
164- }
116+ const npmUp = await HELPER . isNpmUp ( ) . catch ( ( ) => false ) ;
117+ if ( ! npmUp ) {
118+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_CONTAINER_ERROR_TYPE , env . TEXT_CONTAINER_ERROR_MESSAGE , env . TEXT_CONTAINER_ERROR_GIF ) , STATUS . CONTAINER ) ;
119+ }
120+
121+ return makeResponse ( REDIRECT . generateErrorPage ( "503" , env . TEXT_GENERIC_ERROR_TYPE , env . TEXT_GENERIC_ERRORR_MESSAGE , env . TEXT_GENERIC_ERROR_GIF ) , STATUS . SERVER ) ;
122+ }
123+
124+ /**
125+ * Main redirection and error handling function
126+ * @param {Request } request - Incoming request
127+ * @param {Response|null } response - Server response if available
128+ * @param {Error|null } thrownError - Thrown error if present
129+ * @param {boolean } isMaintenance - Maintenance mode state
130+ * @param {Object } env - Environment variables
131+ * @returns {Promise<Response|null> } Appropriate error response or null
132+ */
133+ export async function c_redirect ( request , response , thrownError = null , isMaintenance = false , env ) {
134+ // Check maintenance mode
135+ const maintenanceResponse = await handleMaintenanceMode ( isMaintenance , env ) ;
136+ if ( maintenanceResponse ) return maintenanceResponse ;
137+
138+ // Handle tunnel errors
139+ if ( thrownError ) {
140+ return handleTunnelError ( env ) ;
141+ }
165142
166- return makeResponse (
167- REDIRECT . generateErrorPage (
168- "503" ,
169- env . TEXT_GENERIC_ERROR_TYPE ,
170- env . TEXT_GENERIC_ERRORR_MESSAGE ,
171- env . TEXT_GENERIC_ERROR_GIF
172- ) ,
173- STATUS . SERVER
174- ) ;
143+ // Handle 5xx errors
144+ if ( response && response . status >= 500 ) {
145+ if ( HELPER . isCloudflareError ( response ) ) {
146+ return handleCloudflareError ( response , env ) ;
147+ } else {
148+ return handleOriginError ( response , env ) ;
149+ }
175150 }
176151
177152 return null ;
0 commit comments