export const TASK_STATUS = { PENDING_PAYMENT: "pending_payment", PAID: "paid", LINK_GENERATED: "link_generated", CLAIMED: "claimed", PENDING_BINDING_PREPARE: "pending_binding_prepare", WAITING_BINDING: "waiting_binding", ROLE_CONFIRMED: "role_confirmed", REDEEMING: "redeeming", DISPATCHED_PENDING_RETURN: "dispatched_pending_return", COMPLETED: "completed", REDEEMED: "redeemed", RETRY_PENDING: "retry_pending", MANUAL_REVIEW: "manual_review", FAILED: "failed", EXPIRED: "expired", CLOSED: "closed", } as const; export type KnownTaskStatus = (typeof TASK_STATUS)[keyof typeof TASK_STATUS]; export type TaskStatus = KnownTaskStatus | (string & {}); const CLAIM_INACTIVE_STATUSES = new Set([ TASK_STATUS.COMPLETED, TASK_STATUS.REDEEMED, TASK_STATUS.MANUAL_REVIEW, TASK_STATUS.FAILED, TASK_STATUS.EXPIRED, TASK_STATUS.CLOSED, ]); const KUAISHOU_CLOUD_RESULT_STATUSES = new Set([ TASK_STATUS.DISPATCHED_PENDING_RETURN, TASK_STATUS.COMPLETED, TASK_STATUS.REDEEMED, TASK_STATUS.MANUAL_REVIEW, TASK_STATUS.FAILED, ]); export function normalizeTaskStatus(value: unknown): TaskStatus { return String(value || "").trim() as TaskStatus; } export function isClaimInactiveTaskStatus(status: unknown): boolean { return CLAIM_INACTIVE_STATUSES.has(normalizeTaskStatus(status)); } export function isKuaishouCloudRoleConfirmedStatus(status: unknown): boolean { return normalizeTaskStatus(status) === TASK_STATUS.ROLE_CONFIRMED; } export function isKuaishouCloudCompletedStatus(status: unknown): boolean { const normalized = normalizeTaskStatus(status); return normalized === TASK_STATUS.COMPLETED || normalized === TASK_STATUS.REDEEMED; } export function hasKuaishouCloudRedeemResultStatus(status: unknown): boolean { return KUAISHOU_CLOUD_RESULT_STATUSES.has(normalizeTaskStatus(status)); }