Driftwatch

Square / Square API /

Breakingdirection flip: their tools call this safe

value can now return "READER_DECLINED", "REFUND_ERROR_PAYMENT_NEEDS_COMPLETION"

What changed

Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

Affects this value on ErrorCode reachable from 305 operations.

New values: READER_DECLINED, REFUND_ERROR_PAYMENT_NEEDS_COMPLETION.

can now return "READER_DECLINED", "REFUND_ERROR_PAYMENT_NEEDS_COMPLETION"

Who is affected

Code that reads Square's ErrorCode objects, used by 305 Square operations.

Before and after

WhereBeforeAfter
ErrorCode"ACCESS_TOKEN_EXPIRED", "ACCESS_TOKEN_REVOKED", "ACCOUNT_UNUSABLE", "ADDRESS_VERIFICATION_FAILURE", "ALLOWABLE_PIN_TRIES_EXCEEDED", "AMOUNT_TOO_HIGH", "API_VERSION_INCOMPATIBLE", "APPLE_PAYMENT_PROCESSING_CERTIFICATE_HASH_NOT_FOUND", "APPLE_TTP_PIN_TOKEN", "APPLICATION_DISABLED", "ARRAY_EMPTY", "ARRAY_LENGTH_TOO_LONG", "ARRAY_LENGTH_TOO_SHORT", "BAD_CERTIFICATE", "BAD_EXPIRATION", "BAD_GATEWAY", "BAD_REQUEST", "BUYER_REFUSED_PAYMENT", "CARDHOLDER_INSUFFICIENT_PERMISSIONS", "CARD_DECLINED", "CARD_DECLINED_CALL_ISSUER", "CARD_DECLINED_VERIFICATION_REQUIRED", "CARD_EXPIRED", "CARD_MISMATCH", "CARD_NOT_SUPPORTED", "CARD_PRESENCE_REQUIRED", "CARD_PROCESSING_NOT_ENABLED", "CARD_TOKEN_EXPIRED", "CARD_TOKEN_USED", "CHECKOUT_EXPIRED", "CHIP_INSERTION_REQUIRED", "CLIENT_DISABLED", "CONFLICT", "CONFLICTING_PARAMETERS", "CURRENCY_MISMATCH", "CUSTOMER_MISSING_EMAIL", "CUSTOMER_MISSING_NAME", "CUSTOMER_NOT_FOUND", "CVV_FAILURE", "DELAYED_TRANSACTION_CANCELED", "DELAYED_TRANSACTION_CAPTURED", "DELAYED_TRANSACTION_EXPIRED", "DELAYED_TRANSACTION_FAILED", "EXPECTED_ARRAY", "EXPECTED_BASE64_ENCODED_BYTE_ARRAY", "EXPECTED_BOOLEAN", "EXPECTED_FLOAT", "EXPECTED_INTEGER", "EXPECTED_JSON_BODY", "EXPECTED_MAP", "EXPECTED_OBJECT", "EXPECTED_STRING", "EXPIRATION_FAILURE", "FORBIDDEN", "GATEWAY_TIMEOUT", "GENERIC_DECLINE", "GIFT_CARD_AVAILABLE_AMOUNT", "GONE", "IDEMPOTENCY_KEY_REUSED", "INCORRECT_TYPE", "INSUFFICIENT_FUNDS", "INSUFFICIENT_PERMISSIONS", "INSUFFICIENT_PERMISSIONS_FOR_REFUND", "INSUFFICIENT_SCOPES", "INTERNAL_SERVER_ERROR", "INVALID_ACCOUNT", "INVALID_ARRAY_VALUE", "INVALID_CARD", "INVALID_CARD_DATA", "INVALID_CONTENT_TYPE", "INVALID_CURSOR", "INVALID_DATE", "INVALID_EMAIL_ADDRESS", "INVALID_ENCRYPTED_CARD", "INVALID_ENUM_VALUE", "INVALID_EXPIRATION", "INVALID_EXPIRATION_DATE", "INVALID_EXPIRATION_YEAR", "INVALID_FEES", "INVALID_FORM_VALUE", "INVALID_LOCATION", "INVALID_PAUSE_LENGTH", "INVALID_PHONE_NUMBER", "INVALID_PIN", "INVALID_POSTAL_CODE", "INVALID_SORT_ORDER", "INVALID_SQUARE_VERSION_FORMAT", "INVALID_TIME", "INVALID_TIME_RANGE", "INVALID_VALUE", "LOCATION_MISMATCH", "MANUALLY_ENTERED_PAYMENT_NOT_SUPPORTED", "MAP_KEY_LENGTH_TOO_LONG", "MAP_KEY_LENGTH_TOO_SHORT", "MERCHANT_SUBSCRIPTION_NOT_FOUND", "METHOD_NOT_ALLOWED", "MISSING_ACCOUNT_TYPE", "MISSING_PIN", "MISSING_REQUIRED_PARAMETER", "NOT_ACCEPTABLE", "NOT_FOUND", "NOT_IMPLEMENTED", "NO_FIELDS_SET", "ONE_INSTRUMENT_EXPECTED", "PAN_FAILURE", "PAYMENT_AMOUNT_MISMATCH", "PAYMENT_LIMIT_EXCEEDED", "PAYMENT_NOT_REFUNDABLE", "PAYMENT_NOT_REFUNDABLE_DUE_TO_DISPUTE", "PLAID_ERROR", "PLAID_ERROR_ITEM_LOGIN_REQUIRED", "PLAID_ERROR_RATE_LIMIT", "RATE_LIMITED", "REFUND_ALREADY_PENDING", "REFUND_AMOUNT_INVALID", "REFUND_DECLINED", "REQUEST_ENTITY_TOO_LARGE", "REQUEST_TIMEOUT", "RESERVATION_DECLINED", "SANDBOX_NOT_SUPPORTED", "SERVICE_UNAVAILABLE", "SOURCE_EXPIRED", "SOURCE_USED", "TEMPORARY_ERROR", "TOO_MANY_MAP_ENTRIES", "TRANSACTION_LIMIT", "UNAUTHORIZED", "UNEXPECTED_VALUE", "UNKNOWN_BODY_PARAMETER", "UNKNOWN_QUERY_PARAMETER", "UNPROCESSABLE_ENTITY", "UNSUPPORTED_CARD_BRAND", "UNSUPPORTED_COUNTRY", "UNSUPPORTED_CURRENCY", "UNSUPPORTED_ENTRY_METHOD", "UNSUPPORTED_INSTRUMENT_TYPE", "UNSUPPORTED_LOYALTY_REWARD_TIER", "UNSUPPORTED_MEDIA_TYPE", "UNSUPPORTED_SOURCE_TYPE", "V1_ACCESS_TOKEN", "V1_APPLICATION", "VALUE_EMPTY", "VALUE_REGEX_MISMATCH", "VALUE_TOO_HIGH", "VALUE_TOO_LONG", "VALUE_TOO_LOW", "VALUE_TOO_SHORT", "VERIFY_AVS_FAILURE", "VERIFY_CVV_FAILURE", "VOICE_FAILURE""ACCESS_TOKEN_EXPIRED", "ACCESS_TOKEN_REVOKED", "ACCOUNT_UNUSABLE", "ADDRESS_VERIFICATION_FAILURE", "ALLOWABLE_PIN_TRIES_EXCEEDED", "AMOUNT_TOO_HIGH", "API_VERSION_INCOMPATIBLE", "APPLE_PAYMENT_PROCESSING_CERTIFICATE_HASH_NOT_FOUND", "APPLE_TTP_PIN_TOKEN", "APPLICATION_DISABLED", "ARRAY_EMPTY", "ARRAY_LENGTH_TOO_LONG", "ARRAY_LENGTH_TOO_SHORT", "BAD_CERTIFICATE", "BAD_EXPIRATION", "BAD_GATEWAY", "BAD_REQUEST", "BUYER_REFUSED_PAYMENT", "CARDHOLDER_INSUFFICIENT_PERMISSIONS", "CARD_DECLINED", "CARD_DECLINED_CALL_ISSUER", "CARD_DECLINED_VERIFICATION_REQUIRED", "CARD_EXPIRED", "CARD_MISMATCH", "CARD_NOT_SUPPORTED", "CARD_PRESENCE_REQUIRED", "CARD_PROCESSING_NOT_ENABLED", "CARD_TOKEN_EXPIRED", "CARD_TOKEN_USED", "CHECKOUT_EXPIRED", "CHIP_INSERTION_REQUIRED", "CLIENT_DISABLED", "CONFLICT", "CONFLICTING_PARAMETERS", "CURRENCY_MISMATCH", "CUSTOMER_MISSING_EMAIL", "CUSTOMER_MISSING_NAME", "CUSTOMER_NOT_FOUND", "CVV_FAILURE", "DELAYED_TRANSACTION_CANCELED", "DELAYED_TRANSACTION_CAPTURED", "DELAYED_TRANSACTION_EXPIRED", "DELAYED_TRANSACTION_FAILED", "EXPECTED_ARRAY", "EXPECTED_BASE64_ENCODED_BYTE_ARRAY", "EXPECTED_BOOLEAN", "EXPECTED_FLOAT", "EXPECTED_INTEGER", "EXPECTED_JSON_BODY", "EXPECTED_MAP", "EXPECTED_OBJECT", "EXPECTED_STRING", "EXPIRATION_FAILURE", "FORBIDDEN", "GATEWAY_TIMEOUT", "GENERIC_DECLINE", "GIFT_CARD_AVAILABLE_AMOUNT", "GONE", "IDEMPOTENCY_KEY_REUSED", "INCORRECT_TYPE", "INSUFFICIENT_FUNDS", "INSUFFICIENT_PERMISSIONS", "INSUFFICIENT_PERMISSIONS_FOR_REFUND", "INSUFFICIENT_SCOPES", "INTERNAL_SERVER_ERROR", "INVALID_ACCOUNT", "INVALID_ARRAY_VALUE", "INVALID_CARD", "INVALID_CARD_DATA", "INVALID_CONTENT_TYPE", "INVALID_CURSOR", "INVALID_DATE", "INVALID_EMAIL_ADDRESS", "INVALID_ENCRYPTED_CARD", "INVALID_ENUM_VALUE", "INVALID_EXPIRATION", "INVALID_EXPIRATION_DATE", "INVALID_EXPIRATION_YEAR", "INVALID_FEES", "INVALID_FORM_VALUE", "INVALID_LOCATION", "INVALID_PAUSE_LENGTH", "INVALID_PHONE_NUMBER", "INVALID_PIN", "INVALID_POSTAL_CODE", "INVALID_SORT_ORDER", "INVALID_SQUARE_VERSION_FORMAT", "INVALID_TIME", "INVALID_TIME_RANGE", "INVALID_VALUE", "LOCATION_MISMATCH", "MANUALLY_ENTERED_PAYMENT_NOT_SUPPORTED", "MAP_KEY_LENGTH_TOO_LONG", "MAP_KEY_LENGTH_TOO_SHORT", "MERCHANT_SUBSCRIPTION_NOT_FOUND", "METHOD_NOT_ALLOWED", "MISSING_ACCOUNT_TYPE", "MISSING_PIN", "MISSING_REQUIRED_PARAMETER", "NOT_ACCEPTABLE", "NOT_FOUND", "NOT_IMPLEMENTED", "NO_FIELDS_SET", "ONE_INSTRUMENT_EXPECTED", "PAN_FAILURE", "PAYMENT_AMOUNT_MISMATCH", "PAYMENT_LIMIT_EXCEEDED", "PAYMENT_NOT_REFUNDABLE", "PAYMENT_NOT_REFUNDABLE_DUE_TO_DISPUTE", "PLAID_ERROR", "PLAID_ERROR_ITEM_LOGIN_REQUIRED", "PLAID_ERROR_RATE_LIMIT", "RATE_LIMITED", "READER_DECLINED", "REFUND_ALREADY_PENDING", "REFUND_AMOUNT_INVALID", "REFUND_DECLINED", "REFUND_ERROR_PAYMENT_NEEDS_COMPLETION", "REQUEST_ENTITY_TOO_LARGE", "REQUEST_TIMEOUT", "RESERVATION_DECLINED", "SANDBOX_NOT_SUPPORTED", "SERVICE_UNAVAILABLE", "SOURCE_EXPIRED", "SOURCE_USED", "TEMPORARY_ERROR", "TOO_MANY_MAP_ENTRIES", "TRANSACTION_LIMIT", "UNAUTHORIZED", "UNEXPECTED_VALUE", "UNKNOWN_BODY_PARAMETER", "UNKNOWN_QUERY_PARAMETER", "UNPROCESSABLE_ENTITY", "UNSUPPORTED_CARD_BRAND", "UNSUPPORTED_COUNTRY", "UNSUPPORTED_CURRENCY", "UNSUPPORTED_ENTRY_METHOD", "UNSUPPORTED_INSTRUMENT_TYPE", "UNSUPPORTED_LOYALTY_REWARD_TIER", "UNSUPPORTED_MEDIA_TYPE", "UNSUPPORTED_SOURCE_TYPE", "V1_ACCESS_TOKEN", "V1_APPLICATION", "VALUE_EMPTY", "VALUE_REGEX_MISMATCH", "VALUE_TOO_HIGH", "VALUE_TOO_LONG", "VALUE_TOO_LOW", "VALUE_TOO_SHORT", "VERIFY_AVS_FAILURE", "VERIFY_CVV_FAILURE", "VOICE_FAILURE"

Code that breaks

switch (response) {
  // existing branches …
  // no branch for "READER_DECLINED"
  // no branch for "REFUND_ERROR_PAYMENT_NEEDS_COMPLETION"
  default:
    throw new Error("unexpected value");
}

Based on Square’s published API specification. How severity is decided.