Files
calendar/packages/lib/errorCodes.ts
Benny JooGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
e625308881 fix: Improve the error handling in Stripe collectCard method (#27249)
* fix: improve error handling in Stripe collectCard method

- Add CollectCardFailure error code for better error categorization
- Replace generic error with ErrorWithCode for consistent error handling
- Add error mappings for common Stripe errors (customer not found, invalid API key, rate limit, etc.)
- Include Stripe error message when available for better debugging
- Follow the same pattern used in chargeCard method

Co-Authored-By: [email protected] <[email protected]>

* fix: add CollectCardFailure to getHttpStatusCode mapping

This ensures the error returns 400 instead of 500 when collectCard fails.

Co-Authored-By: [email protected] <[email protected]>

* docs: add comments explaining ChargeCardFailure vs CollectCardFailure

Co-Authored-By: [email protected] <[email protected]>

* refactor: simplify collectCard error handling

Remove complex error mapping logic per code review feedback.

Co-Authored-By: [email protected] <[email protected]>

* test: add CollectCardFailure to HTTP status code tests

Co-Authored-By: [email protected] <[email protected]>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 06:47:11 +00:00

45 lines
2.5 KiB
TypeScript

export enum ErrorCode {
// Generic HTTP error codes for transport-agnostic error handling
Unauthorized = "unauthorized_error",
Forbidden = "forbidden_error",
NotFound = "not_found_error",
BadRequest = "bad_request_error",
InternalServerError = "internal_server_error",
// Domain-specific error codes
PaymentCreationFailure = "payment_not_created_error",
NoAvailableUsersFound = "no_available_users_found_error",
// Thrown when charging a card fails (e.g., insufficient funds, card declined during actual payment)
ChargeCardFailure = "couldnt_charge_card_error",
// Thrown when collecting/verifying a payment method fails (e.g., card setup failed during HOLD payment flow)
CollectCardFailure = "couldnt_collect_card_error",
RequestBodyWithouEnd = "request_body_end_time_internal_error",
AlreadySignedUpForBooking = "already_signed_up_for_this_booking_error",
FixedHostsUnavailableForBooking = "fixed_hosts_unavailable_for_booking",
RoundRobinHostsUnavailableForBooking = "round_robin_host_unavailable_for_booking",
EventTypeNotFound = "event_type_not_found_error",
BookingNotFound = "booking_not_found_error",
BookingSeatsFull = "booking_seats_full_error",
MissingPaymentCredential = "missing_payment_credential_error",
MissingPaymentAppId = "missing_payment_app_id_error",
NotEnoughAvailableSeats = "not_enough_available_seats_error",
AvailabilityNotFoundInSchedule = "availability_not_found_in_schedule_error",
CancelledBookingsCannotBeRescheduled = "cancelled_bookings_cannot_be_rescheduled",
UnableToSubscribeToThePlatform = "unable_to_subscribe_to_the_platform",
UpdatingOauthClientError = "updating_oauth_client_error",
CreatingOauthClientError = "creating_oauth_client_error",
BookingTimeOutOfBounds = "booking_time_out_of_bounds_error",
BookingConflict = "booking_conflict_error",
BookerLimitExceeded = "booker_limit_exceeded_error",
BookerLimitExceededReschedule = "booker_limit_exceeded_error_reschedule",
BookingNotAllowedByRestrictionSchedule = "booking_not_allowed_by_restriction_schedule_error",
RestrictionScheduleNotFound = "restriction_schedule_not_found_error",
EventTypeNoHosts = "event_type_no_hosts",
RequestBodyInvalid = "request_body_invalid_error",
PrivateLinkExpired = "private_link_expired",
BookerEmailBlocked = "booker_email_blocked",
BookerEmailRequiresLogin = "booker_email_requires_login",
InvalidVerificationCode = "invalid_verification_code",
UnableToValidateVerificationCode = "unable_to_validate_verification_code",
}