import { Error } from '@playkit-js/playkit-js'; const isBackEndError = (error: Error): boolean => error.category === 2; const isBlockAction = (error: Error): boolean => error.code === 2001; const isMediaNotReady = (error: Error): boolean => error.code === 2002; const isScheduledRestrictedCode = (error: Error): boolean => error.code === 2003; const isDeletedEntryCode = (error: Error): boolean => error.code === 2004; const isGeolocationRestricted = (error: Error): boolean => error.data?.messages && error.data?.messages[0].code === 'COUNTRY_RESTRICTED'; const isSessionRestricted = (error: Error): boolean => error.data?.messages && error.data?.messages[0].code === 'SESSION_RESTRICTED'; const isIPRestricted = (error: Error): boolean => error.data?.messages && error.data?.messages[0].code === 'IP_RESTRICTED'; const isSitedRestricted = (error: Error): boolean => error.data?.messages && error.data?.messages[0].code === 'SITE_RESTRICTED'; const isScheduledRestricted = (error: Error): boolean => error.data?.messages && error.data?.messages[0].code === 'SCHEDULED_RESTRICTED'; const isSessionRestrictedError = (error: Error): boolean => isBackEndError(error) && isBlockAction(error) && isSessionRestricted(error); const isGeolocationError = (error: Error): boolean => isBackEndError(error) && isBlockAction(error) && isGeolocationRestricted(error); const isMediaNotReadyError = (error: Error): boolean => isBackEndError(error) && isMediaNotReady(error); const isIPRestrictedError = (error: Error): boolean => isBackEndError(error) && isBlockAction(error) && isIPRestricted(error); const isSitedRestrictedError = (error: Error): boolean => isBackEndError(error) && isBlockAction(error) && isSitedRestricted(error); const isScheduledRestrictedError = (error: Error): boolean => isBackEndError(error) && isScheduledRestrictedCode(error) && isScheduledRestricted(error); const isDeletedEntryError = (error: Error): boolean => isBackEndError(error) && isDeletedEntryCode(error); const isAccessControlRestrictedError = (error: Error): boolean => { return ( isBackEndError(error) && isBlockAction(error) && !isGeolocationRestricted(error) && !isSessionRestricted(error) && !isIPRestricted(error) && !isSitedRestricted(error) && !isScheduledRestricted(error) && !isDeletedEntryError(error) ); }; const isDRMError = (error: Error): boolean => error.code < 7000 && error.code >= 6000; const conditionsToErrors: any[] = [ [isSessionRestrictedError, Error.Category.MEDIA_UNAVAILABLE], [isGeolocationError, Error.Category.GEO_LOCATION], [isMediaNotReadyError, Error.Category.MEDIA_NOT_READY], [isIPRestrictedError, Error.Category.IP_RESTRICTED], [isScheduledRestrictedError, Error.Category.SCHEDULED_RESTRICTED], [isSitedRestrictedError, Error.Category.SITE_RESTRICTED], [isDeletedEntryError, Error.Category.DELETED_ENTRY], [isAccessControlRestrictedError, Error.Category.ACCESS_CONTROL_BLOCKED] ]; function getErrorCategory(error: Error): number { const [, errorCategory] = conditionsToErrors.find((errorCondition) => errorCondition[0](error)) || []; return errorCategory || Error.Category.PLAYER; } export { getErrorCategory, isDRMError };