mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-12 20:16:15 -08:00
* docs(playback): design recovery recommendations * docs(playback): plan recovery recommendations * refactor(playback): extract diagnostic utilities * feat(playback): define recovery recommendation contracts * feat(playback): rank recovery recommendations * feat(playback): track session recovery attempts * feat(playback): identify content recovery sessions * feat(ui): add ranked playback diagnostic panel * feat(playback): switch temporarily to recommended players * test(playback): cover temporary player recommendation * test(playback): verify recommendation capability guards * docs(playback): document recovery recommendations * fix(playback): keep recovery keys credential-free * fix(playback): remove derived tracking ownership * fix(playback): preserve distinct recovery fallbacks * fix(playback): reset resume for new sources * fix(playback): preserve desktop recovery guidance * docs(playback): clarify recovery policy exceptions * fix(playback): reject stale progress updates * fix(playback): keep protected recovery guidance neutral * test(playback): cover stale progress output * fix(playback): neutralize protected diagnostic copy * fix(playback): harden runtime guidance ownership * fix(playback): stabilize recovery application ownership * fix(ci): classify playback util coverage * fix(e2e): preserve playback fixture bytes
122 lines
4.6 KiB
TypeScript
122 lines
4.6 KiB
TypeScript
import { SHAKA_ERROR_CODE } from './shaka-error-contract';
|
|
|
|
export const SHAKA_PUBLIC_CODES = new Set<number>(
|
|
Object.values(SHAKA_ERROR_CODE)
|
|
);
|
|
|
|
export const SHAKA_NETWORK_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.UNSUPPORTED_SCHEME,
|
|
SHAKA_ERROR_CODE.BAD_HTTP_STATUS,
|
|
SHAKA_ERROR_CODE.HTTP_ERROR,
|
|
SHAKA_ERROR_CODE.TIMEOUT,
|
|
SHAKA_ERROR_CODE.MALFORMED_DATA_URI,
|
|
SHAKA_ERROR_CODE.REQUEST_FILTER_ERROR,
|
|
SHAKA_ERROR_CODE.RESPONSE_FILTER_ERROR,
|
|
SHAKA_ERROR_CODE.SEGMENT_MISSING,
|
|
]);
|
|
|
|
export const SHAKA_MEDIA_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.BUFFER_READ_OUT_OF_BOUNDS,
|
|
SHAKA_ERROR_CODE.JS_INTEGER_OVERFLOW,
|
|
SHAKA_ERROR_CODE.EBML_OVERFLOW,
|
|
SHAKA_ERROR_CODE.EBML_BAD_FLOATING_POINT_SIZE,
|
|
SHAKA_ERROR_CODE.MP4_SIDX_WRONG_BOX_TYPE,
|
|
SHAKA_ERROR_CODE.MP4_SIDX_INVALID_TIMESCALE,
|
|
SHAKA_ERROR_CODE.MP4_SIDX_TYPE_NOT_SUPPORTED,
|
|
SHAKA_ERROR_CODE.WEBM_CUES_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_EBML_HEADER_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_SEGMENT_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_INFO_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_DURATION_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_CUE_TRACK_POSITIONS_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_CUE_TIME_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.MEDIA_SOURCE_OPERATION_FAILED,
|
|
SHAKA_ERROR_CODE.MEDIA_SOURCE_OPERATION_THREW,
|
|
SHAKA_ERROR_CODE.VIDEO_ERROR,
|
|
SHAKA_ERROR_CODE.QUOTA_EXCEEDED_ERROR,
|
|
SHAKA_ERROR_CODE.TRANSMUXING_FAILED,
|
|
SHAKA_ERROR_CODE.CONTENT_TRANSFORMATION_FAILED,
|
|
SHAKA_ERROR_CODE.TRANSMUXING_NO_VIDEO_DATA,
|
|
SHAKA_ERROR_CODE.STREAMING_NOT_ALLOWED,
|
|
SHAKA_ERROR_CODE.BUFFER_WRITE_OUT_OF_BOUNDS,
|
|
]);
|
|
|
|
export const SHAKA_MANIFEST_DRM_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.DASH_PSSH_BAD_ENCODING,
|
|
SHAKA_ERROR_CODE.DASH_NO_COMMON_KEY_SYSTEM,
|
|
SHAKA_ERROR_CODE.DASH_MULTIPLE_KEY_IDS_NOT_SUPPORTED,
|
|
SHAKA_ERROR_CODE.DASH_CONFLICTING_KEY_IDS,
|
|
SHAKA_ERROR_CODE.INCONSISTENT_DRM_ACROSS_PERIODS,
|
|
SHAKA_ERROR_CODE.NO_WEB_CRYPTO_API,
|
|
SHAKA_ERROR_CODE.AES_128_INVALID_IV_LENGTH,
|
|
SHAKA_ERROR_CODE.AES_128_INVALID_KEY_LENGTH,
|
|
SHAKA_ERROR_CODE.DASH_CONFLICTING_AES_128,
|
|
SHAKA_ERROR_CODE.DASH_UNSUPPORTED_AES_128,
|
|
SHAKA_ERROR_CODE.DASH_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED,
|
|
]);
|
|
|
|
export const SHAKA_MANIFEST_MEDIA_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.DASH_UNSUPPORTED_CONTAINER,
|
|
SHAKA_ERROR_CODE.CONTENT_UNSUPPORTED_BY_BROWSER,
|
|
]);
|
|
|
|
export const SHAKA_AMBIGUOUS_MANIFEST_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.RESTRICTIONS_CANNOT_BE_MET,
|
|
]);
|
|
|
|
export const SHAKA_MANIFEST_CODES = new Set<number>(
|
|
Object.values(SHAKA_ERROR_CODE).filter(
|
|
(code) => code >= 4000 && code < 5000
|
|
)
|
|
);
|
|
|
|
export const SHAKA_DRM_CODES = new Set<number>(
|
|
Object.values(SHAKA_ERROR_CODE).filter(
|
|
(code) => code >= 6000 && code < 7000
|
|
)
|
|
);
|
|
|
|
export const SHAKA_SEGMENT_STAGE_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.SEGMENT_MISSING,
|
|
SHAKA_ERROR_CODE.BUFFER_READ_OUT_OF_BOUNDS,
|
|
SHAKA_ERROR_CODE.JS_INTEGER_OVERFLOW,
|
|
SHAKA_ERROR_CODE.EBML_OVERFLOW,
|
|
SHAKA_ERROR_CODE.EBML_BAD_FLOATING_POINT_SIZE,
|
|
SHAKA_ERROR_CODE.MP4_SIDX_WRONG_BOX_TYPE,
|
|
SHAKA_ERROR_CODE.MP4_SIDX_INVALID_TIMESCALE,
|
|
SHAKA_ERROR_CODE.MP4_SIDX_TYPE_NOT_SUPPORTED,
|
|
SHAKA_ERROR_CODE.WEBM_CUES_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_EBML_HEADER_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_SEGMENT_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_INFO_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_DURATION_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_CUE_TRACK_POSITIONS_ELEMENT_MISSING,
|
|
SHAKA_ERROR_CODE.WEBM_CUE_TIME_ELEMENT_MISSING,
|
|
]);
|
|
|
|
export const SHAKA_MEDIA_STAGE_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.MEDIA_SOURCE_OPERATION_FAILED,
|
|
SHAKA_ERROR_CODE.MEDIA_SOURCE_OPERATION_THREW,
|
|
SHAKA_ERROR_CODE.VIDEO_ERROR,
|
|
SHAKA_ERROR_CODE.QUOTA_EXCEEDED_ERROR,
|
|
SHAKA_ERROR_CODE.TRANSMUXING_FAILED,
|
|
SHAKA_ERROR_CODE.CONTENT_TRANSFORMATION_FAILED,
|
|
SHAKA_ERROR_CODE.TRANSMUXING_NO_VIDEO_DATA,
|
|
SHAKA_ERROR_CODE.STREAMING_NOT_ALLOWED,
|
|
SHAKA_ERROR_CODE.BUFFER_WRITE_OUT_OF_BOUNDS,
|
|
]);
|
|
|
|
export const SHAKA_LICENSE_STAGE_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.FAILED_TO_GENERATE_LICENSE_REQUEST,
|
|
SHAKA_ERROR_CODE.LICENSE_REQUEST_FAILED,
|
|
SHAKA_ERROR_CODE.LICENSE_RESPONSE_REJECTED,
|
|
SHAKA_ERROR_CODE.NO_LICENSE_SERVER_GIVEN,
|
|
SHAKA_ERROR_CODE.EXPIRED,
|
|
SHAKA_ERROR_CODE.SERVER_CERTIFICATE_REQUEST_FAILED,
|
|
]);
|
|
|
|
export const SHAKA_NESTED_HTTP_CODES = new Set<number>([
|
|
SHAKA_ERROR_CODE.LICENSE_REQUEST_FAILED,
|
|
SHAKA_ERROR_CODE.SERVER_CERTIFICATE_REQUEST_FAILED,
|
|
]);
|