From 8524012aa373c17d5ed435a7fba4a09b0564cc65 Mon Sep 17 00:00:00 2001 From: Roman Stetsyk <25715951+romanstetsyk@users.noreply.github.com> Date: Thu, 8 May 2025 14:32:30 +0100 Subject: [PATCH] Expand ActionError codes to include IANA HTTP error codes --- .changeset/spotty-glasses-prove.md | 5 ++ .../src/actions/runtime/virtual/shared.ts | 66 ++++++++++++++++--- 2 files changed, 63 insertions(+), 8 deletions(-) create mode 100644 .changeset/spotty-glasses-prove.md diff --git a/.changeset/spotty-glasses-prove.md b/.changeset/spotty-glasses-prove.md new file mode 100644 index 000000000000..6d355fa8fa8c --- /dev/null +++ b/.changeset/spotty-glasses-prove.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Expand ActionError codes to include all IANA-registered HTTP error codes. diff --git a/packages/astro/src/actions/runtime/virtual/shared.ts b/packages/astro/src/actions/runtime/virtual/shared.ts index c9df7969f11c..479bab4e621c 100644 --- a/packages/astro/src/actions/runtime/virtual/shared.ts +++ b/packages/astro/src/actions/runtime/virtual/shared.ts @@ -22,37 +22,87 @@ export const appendForwardSlash = _appendForwardSlash; export const ACTION_ERROR_CODES = [ 'BAD_REQUEST', 'UNAUTHORIZED', + 'PAYMENT_REQUIRED', 'FORBIDDEN', 'NOT_FOUND', - 'TIMEOUT', + 'METHOD_NOT_ALLOWED', + 'NOT_ACCEPTABLE', + 'PROXY_AUTHENTICATION_REQUIRED', + 'REQUEST_TIMEOUT', 'CONFLICT', + 'GONE', + 'LENGTH_REQUIRED', 'PRECONDITION_FAILED', - 'PAYLOAD_TOO_LARGE', + 'CONTENT_TOO_LARGE', + 'URI_TOO_LONG', 'UNSUPPORTED_MEDIA_TYPE', + 'RANGE_NOT_SATISFIABLE', + 'EXPECTATION_FAILED', + 'MISDIRECTED_REQUEST', 'UNPROCESSABLE_CONTENT', + 'LOCKED', + 'FAILED_DEPENDENCY', + 'TOO_EARLY', + 'UPGRADE_REQUIRED', + 'PRECONDITION_REQUIRED', 'TOO_MANY_REQUESTS', - 'CLIENT_CLOSED_REQUEST', + 'REQUEST_HEADER_FIELDS_TOO_LARGE', + 'UNAVAILABLE_FOR_LEGAL_REASONS', 'INTERNAL_SERVER_ERROR', + 'NOT_IMPLEMENTED', + 'BAD_GATEWAY', + 'SERVICE_UNAVAILABLE', + 'GATEWAY_TIMEOUT', + 'HTTP_VERSION_NOT_SUPPORTED', + 'VARIANT_ALSO_NEGOTIATES', + 'INSUFFICIENT_STORAGE', + 'LOOP_DETECTED', + 'NETWORK_AUTHENTICATION_REQUIRED', ] as const; export type ActionErrorCode = (typeof ACTION_ERROR_CODES)[number]; const codeToStatusMap: Record = { - // Implemented from tRPC error code table - // https://trpc.io/docs/server/error-handling#error-codes + // Implemented from IANA HTTP Status Code Registry + // https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml BAD_REQUEST: 400, UNAUTHORIZED: 401, + PAYMENT_REQUIRED: 402, FORBIDDEN: 403, NOT_FOUND: 404, - TIMEOUT: 405, + METHOD_NOT_ALLOWED: 405, + NOT_ACCEPTABLE: 406, + PROXY_AUTHENTICATION_REQUIRED: 407, + REQUEST_TIMEOUT: 408, CONFLICT: 409, + GONE: 410, + LENGTH_REQUIRED: 411, PRECONDITION_FAILED: 412, - PAYLOAD_TOO_LARGE: 413, + CONTENT_TOO_LARGE: 413, + URI_TOO_LONG: 414, UNSUPPORTED_MEDIA_TYPE: 415, + RANGE_NOT_SATISFIABLE: 416, + EXPECTATION_FAILED: 417, + MISDIRECTED_REQUEST: 421, UNPROCESSABLE_CONTENT: 422, + LOCKED: 423, + FAILED_DEPENDENCY: 424, + TOO_EARLY: 425, + UPGRADE_REQUIRED: 426, + PRECONDITION_REQUIRED: 428, TOO_MANY_REQUESTS: 429, - CLIENT_CLOSED_REQUEST: 499, + REQUEST_HEADER_FIELDS_TOO_LARGE: 431, + UNAVAILABLE_FOR_LEGAL_REASONS: 451, INTERNAL_SERVER_ERROR: 500, + NOT_IMPLEMENTED: 501, + BAD_GATEWAY: 502, + SERVICE_UNAVAILABLE: 503, + GATEWAY_TIMEOUT: 504, + HTTP_VERSION_NOT_SUPPORTED: 505, + VARIANT_ALSO_NEGOTIATES: 506, + INSUFFICIENT_STORAGE: 507, + LOOP_DETECTED: 508, + NETWORK_AUTHENTICATION_REQUIRED: 511, }; const statusToCodeMap: Record = Object.entries(codeToStatusMap).reduce(