from enum import StrEnum class JDErrorCode(StrEnum): TOKEN_INVALID = "JD_TOKEN_INVALID" TOKEN_EXPIRED = "JD_TOKEN_EXPIRED" JOS_API_ERROR = "JD_JOS_API_ERROR" NETWORK_ERROR = "JD_NETWORK_ERROR" SIGNATURE_ERROR = "JD_SIGNATURE_ERROR" DECRYPT_ERROR = "JD_DECRYPT_ERROR" WEBHOOK_REJECTED = "JD_WEBHOOK_REJECTED" RATE_LIMITED = "JD_RATE_LIMITED" class JDError(Exception): def __init__(self, code: JDErrorCode, message: str, detail: dict | None = None): self.code = code self.message = message self.detail = detail or {} super().__init__(message)