googlevideo 2.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -9
- package/README.md +127 -66
- package/dist/protos/generated/misc/common.d.ts +180 -21
- package/dist/protos/generated/misc/common.js +277 -147
- package/dist/protos/generated/misc/common.js.map +1 -0
- package/dist/protos/generated/video_streaming/buffered_range.d.ts +10 -25
- package/dist/protos/generated/video_streaming/buffered_range.js +21 -166
- package/dist/protos/generated/video_streaming/buffered_range.js.map +1 -0
- package/dist/protos/generated/video_streaming/client_abr_state.d.ts +34 -45
- package/dist/protos/generated/video_streaming/client_abr_state.js +209 -350
- package/dist/protos/generated/video_streaming/client_abr_state.js.map +1 -0
- package/dist/protos/generated/video_streaming/crypto_params.d.ts +2 -24
- package/dist/protos/generated/video_streaming/crypto_params.js +2 -86
- package/dist/protos/generated/video_streaming/crypto_params.js.map +1 -0
- package/dist/protos/generated/video_streaming/format_initialization_metadata.d.ts +6 -21
- package/dist/protos/generated/video_streaming/format_initialization_metadata.js +32 -95
- package/dist/protos/generated/video_streaming/format_initialization_metadata.js.map +1 -0
- package/dist/protos/generated/video_streaming/format_selection_config.d.ts +12 -0
- package/dist/protos/generated/video_streaming/format_selection_config.js +68 -0
- package/dist/protos/generated/video_streaming/format_selection_config.js.map +1 -0
- package/dist/protos/generated/video_streaming/innertube_request.d.ts +25 -0
- package/dist/protos/generated/video_streaming/innertube_request.js +186 -0
- package/dist/protos/generated/video_streaming/innertube_request.js.map +1 -0
- package/dist/protos/generated/video_streaming/live_metadata.d.ts +20 -0
- package/dist/protos/generated/video_streaming/live_metadata.js +153 -0
- package/dist/protos/generated/video_streaming/live_metadata.js.map +1 -0
- package/dist/protos/generated/video_streaming/media_capabilities.d.ts +0 -15
- package/dist/protos/generated/video_streaming/media_capabilities.js +2 -122
- package/dist/protos/generated/video_streaming/media_capabilities.js.map +1 -0
- package/dist/protos/generated/video_streaming/media_header.d.ts +5 -27
- package/dist/protos/generated/video_streaming/media_header.js +28 -151
- package/dist/protos/generated/video_streaming/media_header.js.map +1 -0
- package/dist/protos/generated/video_streaming/next_request_policy.d.ts +3 -15
- package/dist/protos/generated/video_streaming/next_request_policy.js +32 -50
- package/dist/protos/generated/video_streaming/next_request_policy.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_header.d.ts +7 -22
- package/dist/protos/generated/video_streaming/onesie_header.js +16 -137
- package/dist/protos/generated/video_streaming/onesie_header.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_header_type.d.ts +9 -25
- package/dist/protos/generated/video_streaming/onesie_header_type.js +17 -176
- package/dist/protos/generated/video_streaming/onesie_header_type.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_innertube_request.d.ts +15 -0
- package/dist/protos/generated/video_streaming/{onesie_player_request.js → onesie_innertube_request.js} +10 -54
- package/dist/protos/generated/video_streaming/onesie_innertube_request.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_innertube_response.d.ts +15 -0
- package/dist/protos/generated/video_streaming/{onesie_player_response.js → onesie_innertube_response.js} +6 -58
- package/dist/protos/generated/video_streaming/onesie_innertube_response.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_proxy_status.d.ts +18 -0
- package/dist/protos/generated/video_streaming/onesie_proxy_status.js +25 -0
- package/dist/protos/generated/video_streaming/onesie_proxy_status.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_request.d.ts +7 -17
- package/dist/protos/generated/video_streaming/onesie_request.js +28 -89
- package/dist/protos/generated/video_streaming/onesie_request.js.map +1 -0
- package/dist/protos/generated/video_streaming/playback_cookie.d.ts +2 -17
- package/dist/protos/generated/video_streaming/playback_cookie.js +6 -47
- package/dist/protos/generated/video_streaming/playback_cookie.js.map +1 -0
- package/dist/protos/generated/video_streaming/playback_start_policy.d.ts +0 -15
- package/dist/protos/generated/video_streaming/playback_start_policy.js +2 -66
- package/dist/protos/generated/video_streaming/playback_start_policy.js.map +1 -0
- package/dist/protos/generated/video_streaming/reload_player_response.d.ts +14 -0
- package/dist/protos/generated/video_streaming/reload_player_response.js +73 -0
- package/dist/protos/generated/video_streaming/reload_player_response.js.map +1 -0
- package/dist/protos/generated/video_streaming/request_cancellation_policy.d.ts +0 -15
- package/dist/protos/generated/video_streaming/request_cancellation_policy.js +2 -66
- package/dist/protos/generated/video_streaming/request_cancellation_policy.js.map +1 -0
- package/dist/protos/generated/video_streaming/request_identifier.d.ts +10 -0
- package/dist/protos/generated/video_streaming/request_identifier.js +41 -0
- package/dist/protos/generated/video_streaming/request_identifier.js.map +1 -0
- package/dist/protos/generated/video_streaming/sabr_context_sending_policy.d.ts +12 -0
- package/dist/protos/generated/video_streaming/sabr_context_sending_policy.js +86 -0
- package/dist/protos/generated/video_streaming/sabr_context_sending_policy.js.map +1 -0
- package/dist/protos/generated/video_streaming/sabr_context_update.d.ts +48 -0
- package/dist/protos/generated/video_streaming/sabr_context_update.js +242 -0
- package/dist/protos/generated/video_streaming/sabr_context_update.js.map +1 -0
- package/dist/protos/generated/video_streaming/sabr_error.d.ts +0 -15
- package/dist/protos/generated/video_streaming/sabr_error.js +2 -29
- package/dist/protos/generated/video_streaming/sabr_error.js.map +1 -0
- package/dist/protos/generated/video_streaming/sabr_redirect.d.ts +0 -15
- package/dist/protos/generated/video_streaming/sabr_redirect.js +2 -22
- package/dist/protos/generated/video_streaming/sabr_redirect.js.map +1 -0
- package/dist/protos/generated/video_streaming/snackbar_message.d.ts +10 -0
- package/dist/protos/generated/video_streaming/snackbar_message.js +41 -0
- package/dist/protos/generated/video_streaming/snackbar_message.js.map +1 -0
- package/dist/protos/generated/video_streaming/stream_protection_status.d.ts +1 -16
- package/dist/protos/generated/video_streaming/stream_protection_status.js +6 -33
- package/dist/protos/generated/video_streaming/stream_protection_status.js.map +1 -0
- package/dist/protos/generated/video_streaming/streamer_context.d.ts +11 -28
- package/dist/protos/generated/video_streaming/streamer_context.js +33 -383
- package/dist/protos/generated/video_streaming/streamer_context.js.map +1 -0
- package/dist/protos/generated/video_streaming/time_range.d.ts +2 -17
- package/dist/protos/generated/video_streaming/time_range.js +9 -41
- package/dist/protos/generated/video_streaming/time_range.js.map +1 -0
- package/dist/protos/generated/video_streaming/ump_part_id.d.ts +58 -0
- package/dist/protos/generated/video_streaming/ump_part_id.js +89 -0
- package/dist/protos/generated/video_streaming/ump_part_id.js.map +1 -0
- package/dist/protos/generated/video_streaming/video_playback_abr_request.d.ts +21 -36
- package/dist/protos/generated/video_streaming/video_playback_abr_request.js +67 -343
- package/dist/protos/generated/video_streaming/video_playback_abr_request.js.map +1 -0
- package/dist/src/core/{ChunkedDataBuffer.d.ts → CompositeBuffer.d.ts} +8 -8
- package/dist/src/core/{ChunkedDataBuffer.js → CompositeBuffer.js} +32 -27
- package/dist/src/core/CompositeBuffer.js.map +1 -0
- package/dist/src/core/SabrStream.d.ts +356 -0
- package/dist/src/core/SabrStream.js +958 -0
- package/dist/src/core/SabrStream.js.map +1 -0
- package/dist/src/core/SabrStreamingAdapter.d.ts +158 -0
- package/dist/src/core/SabrStreamingAdapter.js +496 -0
- package/dist/src/core/SabrStreamingAdapter.js.map +1 -0
- package/dist/src/core/SabrUmpProcessor.d.ts +53 -0
- package/dist/src/core/SabrUmpProcessor.js +234 -0
- package/dist/src/core/SabrUmpProcessor.js.map +1 -0
- package/dist/src/core/UmpReader.d.ts +30 -0
- package/dist/src/core/UmpReader.js +122 -0
- package/dist/src/core/UmpReader.js.map +1 -0
- package/dist/src/core/UmpWriter.d.ts +16 -0
- package/dist/src/core/UmpWriter.js +56 -0
- package/dist/src/core/UmpWriter.js.map +1 -0
- package/dist/src/exports/protos.d.ts +1 -0
- package/dist/src/exports/protos.js +2 -0
- package/dist/src/exports/protos.js.map +1 -0
- package/dist/src/exports/sabr-stream.d.ts +2 -0
- package/dist/src/exports/sabr-stream.js +2 -0
- package/dist/src/exports/sabr-stream.js.map +1 -0
- package/dist/src/exports/sabr-streaming-adapter.d.ts +3 -0
- package/dist/src/exports/sabr-streaming-adapter.js +3 -0
- package/dist/src/exports/sabr-streaming-adapter.js.map +1 -0
- package/dist/src/exports/ump.d.ts +3 -0
- package/dist/src/exports/ump.js +4 -0
- package/dist/src/exports/ump.js.map +1 -0
- package/dist/src/exports/utils.d.ts +1 -0
- package/dist/src/exports/utils.js +2 -0
- package/dist/src/exports/utils.js.map +1 -0
- package/dist/src/types/sabrStreamTypes.d.ts +102 -0
- package/dist/src/types/sabrStreamTypes.js +2 -0
- package/dist/src/types/sabrStreamTypes.js.map +1 -0
- package/dist/src/types/sabrStreamingAdapterTypes.d.ts +93 -0
- package/dist/src/types/sabrStreamingAdapterTypes.js +2 -0
- package/dist/src/types/sabrStreamingAdapterTypes.js.map +1 -0
- package/dist/src/types/shared.d.ts +64 -0
- package/dist/src/types/shared.js +2 -0
- package/dist/src/types/shared.js.map +1 -0
- package/dist/src/utils/CacheManager.d.ts +32 -0
- package/dist/src/utils/CacheManager.js +131 -0
- package/dist/src/utils/CacheManager.js.map +1 -0
- package/dist/src/utils/EventEmitterLike.d.ts +5 -0
- package/dist/src/utils/EventEmitterLike.js +51 -10
- package/dist/src/utils/EventEmitterLike.js.map +1 -0
- package/dist/src/utils/Logger.d.ts +30 -0
- package/dist/src/utils/Logger.js +80 -0
- package/dist/src/utils/Logger.js.map +1 -0
- package/dist/src/utils/Protos.d.ts +21 -13
- package/dist/src/utils/Protos.js +22 -13
- package/dist/src/utils/Protos.js.map +1 -0
- package/dist/src/utils/RequestMetadataManager.d.ts +15 -0
- package/dist/src/utils/RequestMetadataManager.js +48 -0
- package/dist/src/utils/RequestMetadataManager.js.map +1 -0
- package/dist/src/utils/formatKeyUtils.d.ts +45 -0
- package/dist/src/utils/formatKeyUtils.js +77 -0
- package/dist/src/utils/formatKeyUtils.js.map +1 -0
- package/dist/src/utils/index.d.ts +5 -3
- package/dist/src/utils/index.js +6 -2
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/sabrStreamUtils.d.ts +28 -0
- package/dist/src/utils/sabrStreamUtils.js +76 -0
- package/dist/src/utils/sabrStreamUtils.js.map +1 -0
- package/dist/src/utils/shared.d.ts +43 -0
- package/dist/src/utils/shared.js +108 -0
- package/dist/src/utils/shared.js.map +1 -0
- package/package.json +88 -61
- package/dist/protos/generated/video_streaming/encrypted_player_request.d.ts +0 -37
- package/dist/protos/generated/video_streaming/encrypted_player_request.js +0 -239
- package/dist/protos/generated/video_streaming/onesie_player_request.d.ts +0 -31
- package/dist/protos/generated/video_streaming/onesie_player_response.d.ts +0 -29
- package/dist/protos/generated/video_streaming/proxy_status.d.ts +0 -16
- package/dist/protos/generated/video_streaming/proxy_status.js +0 -86
- package/dist/src/core/ServerAbrStream.d.ts +0 -38
- package/dist/src/core/ServerAbrStream.js +0 -272
- package/dist/src/core/UMP.d.ts +0 -10
- package/dist/src/core/UMP.js +0 -109
- package/dist/src/core/index.d.ts +0 -3
- package/dist/src/core/index.js +0 -3
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.js +0 -4
- package/dist/src/utils/helpers.d.ts +0 -63
- package/dist/src/utils/helpers.js +0 -101
- package/dist/src/utils/types.d.ts +0 -65
- package/dist/src/utils/types.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sabrStreamTypes.js","sourceRoot":"","sources":["../../../src/types/sabrStreamTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { ClientInfo, FormatInitializationMetadata, MediaHeader, NextRequestPolicy, PlaybackCookie, ReloadPlaybackContext, SabrContextSendingPolicy, SabrContextUpdate, SabrError, SabrRedirect, SnackbarMessage, StreamProtectionStatus } from '../utils/Protos.js';
|
|
2
|
+
import type { SabrFormat } from './shared.js';
|
|
3
|
+
import type { CacheManager, RequestMetadataManager } from '../utils/index.js';
|
|
4
|
+
export interface SabrRequestMetadata {
|
|
5
|
+
byteRange?: {
|
|
6
|
+
start: number;
|
|
7
|
+
end: number;
|
|
8
|
+
};
|
|
9
|
+
format?: SabrFormat;
|
|
10
|
+
isInit?: boolean;
|
|
11
|
+
isUMP?: boolean;
|
|
12
|
+
isSABR?: boolean;
|
|
13
|
+
streamInfo?: {
|
|
14
|
+
playbackCookie?: PlaybackCookie;
|
|
15
|
+
nextRequestPolicy?: NextRequestPolicy;
|
|
16
|
+
formatInitMetadata?: FormatInitializationMetadata[];
|
|
17
|
+
streamProtectionStatus?: StreamProtectionStatus;
|
|
18
|
+
reloadPlaybackContext?: ReloadPlaybackContext;
|
|
19
|
+
sabrContextSendingPolicy?: SabrContextSendingPolicy;
|
|
20
|
+
sabrContextUpdate?: SabrContextUpdate;
|
|
21
|
+
snackbarMessage?: SnackbarMessage;
|
|
22
|
+
mediaHeader?: MediaHeader;
|
|
23
|
+
redirect?: SabrRedirect;
|
|
24
|
+
};
|
|
25
|
+
error?: {
|
|
26
|
+
sabrError?: SabrError;
|
|
27
|
+
};
|
|
28
|
+
timestamp: number;
|
|
29
|
+
}
|
|
30
|
+
export interface SabrOptions {
|
|
31
|
+
/**
|
|
32
|
+
* Whether to enable caching of SABR segments.
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
35
|
+
enableCaching?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Enables verbose logging of all SABR requests made by the player.
|
|
38
|
+
* @NOTE: `DEBUG` level logging must be enabled for this to take effect.
|
|
39
|
+
* @default false
|
|
40
|
+
*/
|
|
41
|
+
enableVerboseRequestLogging?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Maximum size of the segment cache in megabytes.
|
|
44
|
+
* @default 3
|
|
45
|
+
*/
|
|
46
|
+
maxCacheSizeMB?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Maximum age of cached segments in seconds.
|
|
49
|
+
* @default 300 (5 minutes)
|
|
50
|
+
*/
|
|
51
|
+
maxCacheAgeSeconds?: number;
|
|
52
|
+
/**
|
|
53
|
+
* Player adapter to use for SABR streaming.
|
|
54
|
+
*/
|
|
55
|
+
playerAdapter?: SabrPlayerAdapter;
|
|
56
|
+
/**
|
|
57
|
+
* Client information to send with SABR requests.
|
|
58
|
+
*/
|
|
59
|
+
clientInfo?: ClientInfo;
|
|
60
|
+
}
|
|
61
|
+
export interface PlayerHttpResponse {
|
|
62
|
+
url: string;
|
|
63
|
+
method: string;
|
|
64
|
+
headers: Record<string, string>;
|
|
65
|
+
data?: ArrayBuffer | ArrayBufferView;
|
|
66
|
+
makeRequest: (url: string, headers: Record<string, string>) => Promise<Omit<PlayerHttpResponse, 'makeRequest'>>;
|
|
67
|
+
}
|
|
68
|
+
export interface PlayerHttpRequest {
|
|
69
|
+
url: string;
|
|
70
|
+
method: string;
|
|
71
|
+
headers: Record<string, string>;
|
|
72
|
+
segment: RequestSegment;
|
|
73
|
+
body?: ArrayBuffer | ArrayBufferView | null;
|
|
74
|
+
}
|
|
75
|
+
export interface RequestSegment {
|
|
76
|
+
getStartTime: () => number | null;
|
|
77
|
+
isInit: () => boolean;
|
|
78
|
+
}
|
|
79
|
+
export type RequestFilter = (request: PlayerHttpRequest) => Promise<PlayerHttpRequest | undefined> | PlayerHttpRequest | undefined;
|
|
80
|
+
export type ResponseFilter = (response: PlayerHttpResponse) => Promise<PlayerHttpResponse | undefined> | PlayerHttpResponse | undefined;
|
|
81
|
+
export interface SabrPlayerAdapter {
|
|
82
|
+
initialize(player: any, requestMetadataManager: RequestMetadataManager, cache: CacheManager | null): void;
|
|
83
|
+
getPlayerTime(): number;
|
|
84
|
+
getPlaybackRate(): number;
|
|
85
|
+
getBandwidthEstimate(): number;
|
|
86
|
+
getActiveTrackFormats(activeFormat: SabrFormat, sabrFormats: SabrFormat[]): {
|
|
87
|
+
audioFormat?: SabrFormat;
|
|
88
|
+
videoFormat?: SabrFormat;
|
|
89
|
+
};
|
|
90
|
+
registerRequestInterceptor(interceptor: RequestFilter): void;
|
|
91
|
+
registerResponseInterceptor(interceptor: ResponseFilter): void;
|
|
92
|
+
dispose(): void;
|
|
93
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sabrStreamingAdapterTypes.js","sourceRoot":"","sources":["../../../src/types/sabrStreamingAdapterTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { CompositeBuffer } from '../core/CompositeBuffer.js';
|
|
2
|
+
export type Part = {
|
|
3
|
+
type: number;
|
|
4
|
+
size: number;
|
|
5
|
+
data: CompositeBuffer;
|
|
6
|
+
};
|
|
7
|
+
export interface SabrFormat {
|
|
8
|
+
itag: number;
|
|
9
|
+
lastModified: number;
|
|
10
|
+
xtags?: string;
|
|
11
|
+
width?: number;
|
|
12
|
+
height?: number;
|
|
13
|
+
contentLength?: number;
|
|
14
|
+
audioTrackId?: string;
|
|
15
|
+
mimeType?: string;
|
|
16
|
+
isDrc?: boolean;
|
|
17
|
+
quality?: string;
|
|
18
|
+
qualityLabel?: string;
|
|
19
|
+
averageBitrate?: number;
|
|
20
|
+
bitrate: number;
|
|
21
|
+
audioQuality?: string;
|
|
22
|
+
approxDurationMs: number;
|
|
23
|
+
language?: string | null;
|
|
24
|
+
isDubbed?: boolean;
|
|
25
|
+
isAutoDubbed?: boolean;
|
|
26
|
+
isDescriptive?: boolean;
|
|
27
|
+
isSecondary?: boolean;
|
|
28
|
+
isOriginal?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface FormatStream {
|
|
31
|
+
itag: number;
|
|
32
|
+
last_modified_ms?: string;
|
|
33
|
+
lastModified?: string;
|
|
34
|
+
xtags?: string;
|
|
35
|
+
width?: number;
|
|
36
|
+
height?: number;
|
|
37
|
+
mime_type?: string;
|
|
38
|
+
mimeType?: string;
|
|
39
|
+
audio_quality?: string;
|
|
40
|
+
audioQuality?: string;
|
|
41
|
+
bitrate: number;
|
|
42
|
+
average_bitrate?: number;
|
|
43
|
+
averageBitrate?: number;
|
|
44
|
+
quality?: string;
|
|
45
|
+
quality_label?: string;
|
|
46
|
+
qualityLabel?: string;
|
|
47
|
+
audio_track?: {
|
|
48
|
+
id: string;
|
|
49
|
+
};
|
|
50
|
+
audioTrackId?: string;
|
|
51
|
+
is_drc?: boolean;
|
|
52
|
+
isDrc?: boolean;
|
|
53
|
+
approx_duration_ms?: number;
|
|
54
|
+
approxDurationMs?: string;
|
|
55
|
+
content_length?: number;
|
|
56
|
+
contentLength?: string;
|
|
57
|
+
is_auto_dubbed?: boolean;
|
|
58
|
+
is_descriptive?: boolean;
|
|
59
|
+
is_dubbed?: boolean;
|
|
60
|
+
language?: string | null;
|
|
61
|
+
is_original?: boolean;
|
|
62
|
+
is_secondary?: boolean;
|
|
63
|
+
}
|
|
64
|
+
export type FetchFunction = typeof fetch;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/types/shared.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface CacheEntry {
|
|
2
|
+
data: Uint8Array;
|
|
3
|
+
timestamp: number;
|
|
4
|
+
size: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* A "proper" cache for storing segments.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CacheManager {
|
|
10
|
+
private initSegmentCache;
|
|
11
|
+
private segmentCache;
|
|
12
|
+
private currentSize;
|
|
13
|
+
private timerId;
|
|
14
|
+
private readonly maxCacheSize;
|
|
15
|
+
private readonly maxAge;
|
|
16
|
+
private readonly logger;
|
|
17
|
+
constructor(maxSizeMB?: number, maxAgeSeconds?: number);
|
|
18
|
+
getCacheEntries(): {
|
|
19
|
+
initSegmentCache: Map<string, CacheEntry>;
|
|
20
|
+
segmentCache: Map<string, CacheEntry>;
|
|
21
|
+
};
|
|
22
|
+
setInitSegment(key: string, data: Uint8Array): void;
|
|
23
|
+
setSegment(key: string, data: Uint8Array): void;
|
|
24
|
+
getInitSegment(key: string): Uint8Array | undefined;
|
|
25
|
+
getSegment(key: string): Uint8Array | undefined;
|
|
26
|
+
private isExpired;
|
|
27
|
+
private enforceStorageLimit;
|
|
28
|
+
private clearExpiredEntries;
|
|
29
|
+
private removeOldestEntries;
|
|
30
|
+
private startGarbageCollection;
|
|
31
|
+
dispose(): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Logger } from './Logger.js';
|
|
2
|
+
const TAG = 'CacheManager';
|
|
3
|
+
/**
|
|
4
|
+
* A "proper" cache for storing segments.
|
|
5
|
+
*/
|
|
6
|
+
export class CacheManager {
|
|
7
|
+
constructor(maxSizeMB = 50, maxAgeSeconds = 600) {
|
|
8
|
+
this.initSegmentCache = new Map();
|
|
9
|
+
this.segmentCache = new Map();
|
|
10
|
+
this.currentSize = 0;
|
|
11
|
+
this.logger = Logger.getInstance();
|
|
12
|
+
this.maxCacheSize = maxSizeMB * 1024 * 1024;
|
|
13
|
+
this.maxAge = maxAgeSeconds * 1000;
|
|
14
|
+
this.startGarbageCollection();
|
|
15
|
+
}
|
|
16
|
+
getCacheEntries() {
|
|
17
|
+
return {
|
|
18
|
+
initSegmentCache: this.initSegmentCache,
|
|
19
|
+
segmentCache: this.segmentCache
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
setInitSegment(key, data) {
|
|
23
|
+
const entry = {
|
|
24
|
+
data,
|
|
25
|
+
timestamp: Date.now(),
|
|
26
|
+
size: data.byteLength
|
|
27
|
+
};
|
|
28
|
+
if (!this.initSegmentCache.has(key)) {
|
|
29
|
+
this.currentSize += entry.size;
|
|
30
|
+
this.enforceStorageLimit();
|
|
31
|
+
}
|
|
32
|
+
this.initSegmentCache.set(key, entry);
|
|
33
|
+
}
|
|
34
|
+
setSegment(key, data) {
|
|
35
|
+
const entry = {
|
|
36
|
+
data,
|
|
37
|
+
timestamp: Date.now(),
|
|
38
|
+
size: data.byteLength
|
|
39
|
+
};
|
|
40
|
+
this.currentSize += entry.size;
|
|
41
|
+
this.enforceStorageLimit();
|
|
42
|
+
this.segmentCache.set(key, entry);
|
|
43
|
+
}
|
|
44
|
+
getInitSegment(key) {
|
|
45
|
+
const entry = this.initSegmentCache.get(key);
|
|
46
|
+
if (entry && !this.isExpired(entry)) {
|
|
47
|
+
this.logger.debug(TAG, `Cache hit for init segment: ${key}`);
|
|
48
|
+
entry.timestamp = Date.now();
|
|
49
|
+
return entry.data;
|
|
50
|
+
}
|
|
51
|
+
// Expired. Get rid of it.
|
|
52
|
+
if (entry) {
|
|
53
|
+
this.initSegmentCache.delete(key);
|
|
54
|
+
this.currentSize -= entry.size;
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
getSegment(key) {
|
|
59
|
+
const entry = this.segmentCache.get(key);
|
|
60
|
+
if (entry && !this.isExpired(entry)) {
|
|
61
|
+
this.logger.debug(TAG, `Cache hit for segment: ${key}`);
|
|
62
|
+
const data = entry.data;
|
|
63
|
+
this.segmentCache.delete(key);
|
|
64
|
+
this.currentSize -= entry.size;
|
|
65
|
+
return data;
|
|
66
|
+
}
|
|
67
|
+
// Expired. Get rid of it.
|
|
68
|
+
if (entry) {
|
|
69
|
+
this.segmentCache.delete(key);
|
|
70
|
+
this.currentSize -= entry.size;
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
isExpired(entry) {
|
|
75
|
+
return Date.now() - entry.timestamp > this.maxAge;
|
|
76
|
+
}
|
|
77
|
+
enforceStorageLimit() {
|
|
78
|
+
if (this.currentSize <= this.maxCacheSize)
|
|
79
|
+
return;
|
|
80
|
+
this.clearExpiredEntries();
|
|
81
|
+
// If still over limit, remove oldest entries.
|
|
82
|
+
if (this.currentSize > this.maxCacheSize) {
|
|
83
|
+
this.removeOldestEntries();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
clearExpiredEntries() {
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
for (const [key, entry] of this.segmentCache.entries()) {
|
|
89
|
+
if (now - entry.timestamp > this.maxAge) {
|
|
90
|
+
this.logger.debug(TAG, `Removing expired segment from cache: ${key}`);
|
|
91
|
+
this.segmentCache.delete(key);
|
|
92
|
+
this.currentSize -= entry.size;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const [key, entry] of this.initSegmentCache.entries()) {
|
|
96
|
+
if (now - entry.timestamp > this.maxAge) {
|
|
97
|
+
this.logger.debug(TAG, `Removing expired init segment from cache: ${key}`);
|
|
98
|
+
this.initSegmentCache.delete(key);
|
|
99
|
+
this.currentSize -= entry.size;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
removeOldestEntries() {
|
|
104
|
+
const segments = Array.from(this.segmentCache.entries());
|
|
105
|
+
const initSegments = Array.from(this.initSegmentCache.entries());
|
|
106
|
+
const allEntries = [...segments, ...initSegments]
|
|
107
|
+
.sort((a, b) => a[1].timestamp - b[1].timestamp);
|
|
108
|
+
while (this.currentSize > this.maxCacheSize && allEntries.length > 0) {
|
|
109
|
+
const [key, entry] = allEntries.shift();
|
|
110
|
+
this.segmentCache.delete(key);
|
|
111
|
+
this.initSegmentCache.delete(key);
|
|
112
|
+
this.currentSize -= entry.size;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
startGarbageCollection() {
|
|
116
|
+
this.timerId = setInterval(() => {
|
|
117
|
+
this.clearExpiredEntries();
|
|
118
|
+
}, 60000);
|
|
119
|
+
}
|
|
120
|
+
dispose() {
|
|
121
|
+
this.initSegmentCache.clear();
|
|
122
|
+
this.segmentCache.clear();
|
|
123
|
+
this.currentSize = 0;
|
|
124
|
+
if (this.timerId) {
|
|
125
|
+
clearInterval(this.timerId);
|
|
126
|
+
this.timerId = undefined;
|
|
127
|
+
}
|
|
128
|
+
this.logger.debug(TAG, 'Disposed');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=CacheManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../../../src/utils/CacheManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export declare class SabrAdapterError extends Error {
|
|
2
|
+
code?: string | undefined;
|
|
3
|
+
constructor(message: string, code?: string | undefined);
|
|
4
|
+
}
|
|
1
5
|
export declare class EventEmitterLike extends EventTarget {
|
|
2
6
|
#private;
|
|
3
7
|
constructor();
|
|
@@ -5,4 +9,5 @@ export declare class EventEmitterLike extends EventTarget {
|
|
|
5
9
|
on(type: string, listener: (...args: any[]) => void): void;
|
|
6
10
|
once(type: string, listener: (...args: any[]) => void): void;
|
|
7
11
|
off(type: string, listener: (...args: any[]) => void): void;
|
|
12
|
+
removeAllListeners(type?: string): void;
|
|
8
13
|
}
|
|
@@ -1,14 +1,38 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
1
7
|
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
8
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
11
|
};
|
|
6
|
-
var
|
|
7
|
-
|
|
12
|
+
var _CustomEvent_detail, _EventEmitterLike_legacyListeners;
|
|
13
|
+
// See https://github.com/nodejs/node/issues/40678#issuecomment-1126944677
|
|
14
|
+
class CustomEvent extends Event {
|
|
15
|
+
constructor(type, options) {
|
|
16
|
+
super(type, options);
|
|
17
|
+
_CustomEvent_detail.set(this, void 0);
|
|
18
|
+
__classPrivateFieldSet(this, _CustomEvent_detail, options?.detail ?? null, "f");
|
|
19
|
+
}
|
|
20
|
+
get detail() {
|
|
21
|
+
return __classPrivateFieldGet(this, _CustomEvent_detail, "f");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
_CustomEvent_detail = new WeakMap();
|
|
25
|
+
export class SabrAdapterError extends Error {
|
|
26
|
+
constructor(message, code) {
|
|
27
|
+
super(`[SabrStreamingAdapter] ${message}`);
|
|
28
|
+
this.code = code;
|
|
29
|
+
this.name = 'SabrAdapterError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
8
32
|
export class EventEmitterLike extends EventTarget {
|
|
9
33
|
constructor() {
|
|
10
34
|
super();
|
|
11
|
-
|
|
35
|
+
_EventEmitterLike_legacyListeners.set(this, new Map());
|
|
12
36
|
}
|
|
13
37
|
emit(type, ...args) {
|
|
14
38
|
const event = new CustomEvent(type, { detail: args });
|
|
@@ -23,7 +47,7 @@ export class EventEmitterLike extends EventTarget {
|
|
|
23
47
|
listener(ev);
|
|
24
48
|
}
|
|
25
49
|
};
|
|
26
|
-
__classPrivateFieldGet(this,
|
|
50
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").set(listener, { type, wrapper });
|
|
27
51
|
this.addEventListener(type, wrapper);
|
|
28
52
|
}
|
|
29
53
|
once(type, listener) {
|
|
@@ -36,15 +60,32 @@ export class EventEmitterLike extends EventTarget {
|
|
|
36
60
|
}
|
|
37
61
|
this.off(type, listener);
|
|
38
62
|
};
|
|
39
|
-
__classPrivateFieldGet(this,
|
|
63
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").set(listener, { type, wrapper });
|
|
40
64
|
this.addEventListener(type, wrapper);
|
|
41
65
|
}
|
|
42
66
|
off(type, listener) {
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
45
|
-
this.removeEventListener(type, wrapper);
|
|
46
|
-
__classPrivateFieldGet(this,
|
|
67
|
+
const listenerData = __classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").get(listener);
|
|
68
|
+
if (listenerData && listenerData.type === type) {
|
|
69
|
+
this.removeEventListener(type, listenerData.wrapper);
|
|
70
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").delete(listener);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
removeAllListeners(type) {
|
|
74
|
+
if (type) {
|
|
75
|
+
for (const [listener, listenerData] of __classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").entries()) {
|
|
76
|
+
if (listenerData.type === type) {
|
|
77
|
+
this.removeEventListener(type, listenerData.wrapper);
|
|
78
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").delete(listener);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
for (const [listener, listenerData] of __classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").entries()) {
|
|
84
|
+
this.removeEventListener(listenerData.type, listenerData.wrapper);
|
|
85
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").delete(listener);
|
|
86
|
+
}
|
|
47
87
|
}
|
|
48
88
|
}
|
|
49
89
|
}
|
|
50
|
-
|
|
90
|
+
_EventEmitterLike_legacyListeners = new WeakMap();
|
|
91
|
+
//# sourceMappingURL=EventEmitterLike.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventEmitterLike.js","sourceRoot":"","sources":["../../../src/utils/EventEmitterLike.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0EAA0E;AAC1E,MAAM,WAAY,SAAQ,KAAK;IAG7B,YAAY,IAAY,EAAE,OAAgC;QACxD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAHvB,sCAAQ;QAIN,uBAAA,IAAI,uBAAW,OAAO,EAAE,MAAM,IAAI,IAAI,MAAA,CAAC;IACzC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,uBAAA,IAAI,2BAAQ,CAAC;IACtB,CAAC;CACF;;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe,EAAS,IAAa;QAC/C,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;QADT,SAAI,GAAJ,IAAI,CAAS;QAE/C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAG/C;QACE,KAAK,EAAE,CAAC;QAHV,4CAAmB,IAAI,GAAG,EAAsE,EAAC;IAIjG,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,GAAG,IAAW;QAC/B,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,QAAkC;QACjD,MAAM,OAAO,GAAkB,CAAC,EAAE,EAAE,EAAE;YACpC,IAAI,EAAE,YAAY,WAAW,EAAE,CAAC;gBAC9B,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAe,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;QACH,CAAC,CAAC;QACF,uBAAA,IAAI,yCAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,QAAkC;QACnD,MAAM,OAAO,GAAkB,CAAC,EAAE,EAAE,EAAE;YACpC,IAAI,EAAE,YAAY,WAAW,EAAE,CAAC;gBAC9B,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAe,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,EAAE,CAAC,CAAC;YACf,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3B,CAAC,CAAC;QACF,uBAAA,IAAI,yCAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,QAAkC;QAClD,MAAM,YAAY,GAAG,uBAAA,IAAI,yCAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;YACrD,uBAAA,IAAI,yCAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,IAAa;QAC9B,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,MAAM,CAAE,QAAQ,EAAE,YAAY,CAAE,IAAI,uBAAA,IAAI,yCAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACzE,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC/B,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;oBACrD,uBAAA,IAAI,yCAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAE,QAAQ,EAAE,YAAY,CAAE,IAAI,uBAAA,IAAI,yCAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACzE,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBAClE,uBAAA,IAAI,yCAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare enum LogLevel {
|
|
2
|
+
NONE = 0,
|
|
3
|
+
ERROR = 1,
|
|
4
|
+
WARN = 2,
|
|
5
|
+
INFO = 3,
|
|
6
|
+
DEBUG = 4,
|
|
7
|
+
ALL = 99
|
|
8
|
+
}
|
|
9
|
+
export declare class Logger {
|
|
10
|
+
private static instance;
|
|
11
|
+
private currentLogLevels;
|
|
12
|
+
static getInstance(): Logger;
|
|
13
|
+
/**
|
|
14
|
+
* Sets the active log levels.
|
|
15
|
+
* Call with LogLevel.NONE or no arguments to turn off all logging.
|
|
16
|
+
* Otherwise, specify one or more log levels to be active.
|
|
17
|
+
* Use LogLevel.ALL to enable all log levels.
|
|
18
|
+
*/
|
|
19
|
+
setLogLevels(...levels: LogLevel[]): void;
|
|
20
|
+
/**
|
|
21
|
+
* Gets the current set of active log levels.
|
|
22
|
+
* @returns A new Set containing the active LogLevel enums.
|
|
23
|
+
*/
|
|
24
|
+
getLogLevels(): Set<LogLevel>;
|
|
25
|
+
private log;
|
|
26
|
+
error(tag: string, ...messages: any[]): void;
|
|
27
|
+
warn(tag: string, ...messages: any[]): void;
|
|
28
|
+
info(tag: string, ...messages: any[]): void;
|
|
29
|
+
debug(tag: string, ...messages: any[]): void;
|
|
30
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export const LogLevel = {
|
|
2
|
+
NONE: 0, 0: "NONE",
|
|
3
|
+
ERROR: 1, 1: "ERROR",
|
|
4
|
+
WARN: 2, 2: "WARN",
|
|
5
|
+
INFO: 3, 3: "INFO",
|
|
6
|
+
DEBUG: 4, 4: "DEBUG",
|
|
7
|
+
ALL: 99, 99: "ALL"
|
|
8
|
+
};
|
|
9
|
+
export class Logger {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.currentLogLevels = new Set([LogLevel.INFO, LogLevel.ERROR]);
|
|
12
|
+
}
|
|
13
|
+
static getInstance() {
|
|
14
|
+
if (!Logger.instance) {
|
|
15
|
+
Logger.instance = new Logger();
|
|
16
|
+
}
|
|
17
|
+
return Logger.instance;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Sets the active log levels.
|
|
21
|
+
* Call with LogLevel.NONE or no arguments to turn off all logging.
|
|
22
|
+
* Otherwise, specify one or more log levels to be active.
|
|
23
|
+
* Use LogLevel.ALL to enable all log levels.
|
|
24
|
+
*/
|
|
25
|
+
setLogLevels(...levels) {
|
|
26
|
+
if (levels.length === 0 || levels.includes(LogLevel.NONE)) {
|
|
27
|
+
this.currentLogLevels = new Set(); // Turn off logging
|
|
28
|
+
}
|
|
29
|
+
else if (levels.includes(LogLevel.ALL)) {
|
|
30
|
+
this.currentLogLevels = new Set([
|
|
31
|
+
LogLevel.ERROR,
|
|
32
|
+
LogLevel.WARN,
|
|
33
|
+
LogLevel.INFO,
|
|
34
|
+
LogLevel.DEBUG
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this.currentLogLevels = new Set(levels.filter((level) => level !== LogLevel.NONE && level !== LogLevel.ALL));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Gets the current set of active log levels.
|
|
43
|
+
* @returns A new Set containing the active LogLevel enums.
|
|
44
|
+
*/
|
|
45
|
+
getLogLevels() {
|
|
46
|
+
return new Set(this.currentLogLevels);
|
|
47
|
+
}
|
|
48
|
+
log(level, tag, ...messages) {
|
|
49
|
+
if (level !== LogLevel.NONE && this.currentLogLevels.has(level)) {
|
|
50
|
+
const prefix = `[${LogLevel[level]}] [${tag}]`;
|
|
51
|
+
switch (level) {
|
|
52
|
+
case LogLevel.ERROR:
|
|
53
|
+
console.error(prefix, ...messages);
|
|
54
|
+
break;
|
|
55
|
+
case LogLevel.WARN:
|
|
56
|
+
console.warn(prefix, ...messages);
|
|
57
|
+
break;
|
|
58
|
+
case LogLevel.INFO:
|
|
59
|
+
console.info(prefix, ...messages);
|
|
60
|
+
break;
|
|
61
|
+
case LogLevel.DEBUG:
|
|
62
|
+
console.debug(prefix, ...messages);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
error(tag, ...messages) {
|
|
68
|
+
this.log(LogLevel.ERROR, tag, ...messages);
|
|
69
|
+
}
|
|
70
|
+
warn(tag, ...messages) {
|
|
71
|
+
this.log(LogLevel.WARN, tag, ...messages);
|
|
72
|
+
}
|
|
73
|
+
info(tag, ...messages) {
|
|
74
|
+
this.log(LogLevel.INFO, tag, ...messages);
|
|
75
|
+
}
|
|
76
|
+
debug(tag, ...messages) {
|
|
77
|
+
this.log(LogLevel.DEBUG, tag, ...messages);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=Logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../../src/utils/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
export { FormatInitializationMetadata } from '../../protos/generated/video_streaming/format_initialization_metadata.js';
|
|
2
|
-
export { BufferedRange } from '../../protos/generated/video_streaming/buffered_range.js';
|
|
3
2
|
export { MediaHeader } from '../../protos/generated/video_streaming/media_header.js';
|
|
4
|
-
export {
|
|
3
|
+
export { BufferedRange } from '../../protos/generated/video_streaming/buffered_range.js';
|
|
4
|
+
export { MediaCapabilities } from '../../protos/generated/video_streaming/media_capabilities.js';
|
|
5
|
+
export { CryptoParams } from '../../protos/generated/video_streaming/crypto_params.js';
|
|
5
6
|
export { PlaybackCookie } from '../../protos/generated/video_streaming/playback_cookie.js';
|
|
6
7
|
export { PlaybackStartPolicy } from '../../protos/generated/video_streaming/playback_start_policy.js';
|
|
8
|
+
export { VideoPlaybackAbrRequest } from '../../protos/generated/video_streaming/video_playback_abr_request.js';
|
|
9
|
+
export { ClientAbrState } from '../../protos/generated/video_streaming/client_abr_state.js';
|
|
10
|
+
export { NextRequestPolicy } from '../../protos/generated/video_streaming/next_request_policy.js';
|
|
7
11
|
export { RequestCancellationPolicy } from '../../protos/generated/video_streaming/request_cancellation_policy.js';
|
|
12
|
+
export { RequestIdentifier } from '../../protos/generated/video_streaming/request_identifier.js';
|
|
8
13
|
export { SabrError } from '../../protos/generated/video_streaming/sabr_error.js';
|
|
9
14
|
export { SabrRedirect } from '../../protos/generated/video_streaming/sabr_redirect.js';
|
|
10
|
-
export { StreamProtectionStatus } from '../../protos/generated/video_streaming/stream_protection_status.js';
|
|
11
|
-
export { VideoPlaybackAbrRequest } from '../../protos/generated/video_streaming/video_playback_abr_request.js';
|
|
12
15
|
export { OnesieRequest } from '../../protos/generated/video_streaming/onesie_request.js';
|
|
13
|
-
export { EncryptedPlayerRequest } from '../../protos/generated/video_streaming/encrypted_player_request.js';
|
|
14
16
|
export { OnesieHeader } from '../../protos/generated/video_streaming/onesie_header.js';
|
|
15
17
|
export { OnesieHeaderType } from '../../protos/generated/video_streaming/onesie_header_type.js';
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
23
|
-
export {
|
|
18
|
+
export { OnesieInnertubeRequest } from '../../protos/generated/video_streaming/onesie_innertube_request.js';
|
|
19
|
+
export { OnesieInnertubeResponse } from '../../protos/generated/video_streaming/onesie_innertube_response.js';
|
|
20
|
+
export { OnesieProxyStatus } from '../../protos/generated/video_streaming/onesie_proxy_status.js';
|
|
21
|
+
export { InnertubeRequest, UstreamerFlags } from '../../protos/generated/video_streaming/innertube_request.js';
|
|
22
|
+
export { StreamerContext, StreamerContext_ClientInfo as ClientInfo } from '../../protos/generated/video_streaming/streamer_context.js';
|
|
23
|
+
export { SabrContextUpdate, SabrContextUpdate_SabrContextWritePolicy as SabrContextWritePolicy, SabrContextValue } from '../../protos/generated/video_streaming/sabr_context_update.js';
|
|
24
|
+
export { SabrContextSendingPolicy } from '../../protos/generated/video_streaming/sabr_context_sending_policy.js';
|
|
25
|
+
export { StreamProtectionStatus } from '../../protos/generated/video_streaming/stream_protection_status.js';
|
|
26
|
+
export { LiveMetadata } from '../../protos/generated/video_streaming/live_metadata.js';
|
|
27
|
+
export { SnackbarMessage } from '../../protos/generated/video_streaming/snackbar_message.js';
|
|
28
|
+
export { UMPPartId } from '../../protos/generated/video_streaming/ump_part_id.js';
|
|
29
|
+
export { ReloadPlaybackContext, ReloadPlaybackParams } from '../../protos/generated/video_streaming/reload_player_response.js';
|
|
30
|
+
export { FormatSelectionConfig } from '../../protos/generated/video_streaming/format_selection_config.js';
|
|
31
|
+
export { FormatId, KeyValuePair, Range, HttpHeader, IdentifierToken, CompressionType, OnesieRequestTarget, AuthorizedFormat, AudioQuality, PlaybackAuthorization, NetworkMeteredState, PlaybackAudioRouteOutputType, SeekSource, VideoQualitySetting } from '../../protos/generated/misc/common.js';
|