@broadcastingplatforms/player 1.3.0 → 1.4.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.
@@ -1,6 +1,7 @@
1
1
  import type { BPLiveConfig, BPLiveStreamResponse, BPLiveClipResponse, BPLiveSource, BPLiveStream, BPLiveClip } from './types';
2
2
  import type { ResolvedPlayerSource } from '../providers/contract';
3
3
  import type { ContentType } from '../core/state';
4
+ import type { NetworkInterceptorController } from '../network/index';
4
5
  export interface BPLiveResolvedResult {
5
6
  source: ResolvedPlayerSource;
6
7
  contentType: ContentType;
@@ -18,9 +19,10 @@ export declare class BPLiveError extends Error {
18
19
  export declare class BPLiveService {
19
20
  private _config;
20
21
  private _authToken;
22
+ private _network;
21
23
  private _stream;
22
24
  private _clip;
23
- constructor(config: BPLiveConfig);
25
+ constructor(config: BPLiveConfig, network?: NetworkInterceptorController);
24
26
  get config(): BPLiveConfig;
25
27
  get authToken(): string | null;
26
28
  get stream(): BPLiveStream | null;
@@ -1,6 +1,7 @@
1
1
  import type { PlayerState, QualityLevel, PresentationMode, ConnectionState, StreamType, PlayerError } from './state';
2
2
  import type { ProviderType, PlayerSource, ProviderConfig } from '../providers/contract';
3
3
  import { BPLiveService } from '../bplive/service';
4
+ import type { NetworkInterceptorController } from '../network/index';
4
5
  export interface PlayerCoreEventMap {
5
6
  play: void;
6
7
  playing: void;
@@ -99,6 +100,7 @@ export interface PlayerCore {
99
100
  readonly state: PlayerState;
100
101
  readonly videoElement: HTMLVideoElement | null;
101
102
  readonly bpLive: BPLiveService | null;
103
+ readonly network: NetworkInterceptorController;
102
104
  /** Whether the player is ready (attached and can accept sources) */
103
105
  readonly ready: boolean;
104
106
  /** Current provider type based on loaded source */
@@ -139,6 +141,7 @@ export declare class PlayerCoreImpl implements PlayerCore {
139
141
  private _eventCleanup;
140
142
  private _destroyed;
141
143
  private _bpLive;
144
+ private _network;
142
145
  private _currentProviderType;
143
146
  private _ready;
144
147
  private _loadGeneration;
@@ -146,6 +149,7 @@ export declare class PlayerCoreImpl implements PlayerCore {
146
149
  get state(): PlayerState;
147
150
  get videoElement(): HTMLVideoElement | null;
148
151
  get bpLive(): BPLiveService | null;
152
+ get network(): NetworkInterceptorController;
149
153
  get ready(): boolean;
150
154
  get providerType(): ProviderType | null;
151
155
  addEventListener<K extends PlayerCoreEventType>(type: K | K[], listener: EventListener<PlayerCoreEventMap[K]>): void;
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export type { PlayerState, QualityLevel, PresentationMode, ConnectionState, Stre
12
12
  export { StateReceiverMixin, StateReceiverProps, isStateReceiverElement, forEachStateReceiverElement, propagateStateToReceiver, removeStateFromReceiver, } from './core/state-receiver';
13
13
  export type { StateReceiverElement, StateReceiverPropertyMap } from './core/state-receiver';
14
14
  export type { ProviderType, ProviderConfig, VideoProviderConfig, NanoProviderConfig, LiveKitProviderConfig, PlayerSource, ResolvedPlayerSource, VideoSource, NanoSource, LiveKitSource, PosterSource, PlayerSourceItem, PlayerSources, SourceDescription, } from './providers/contract';
15
+ export type { NetworkInterceptorController, RequestInterceptor, ResponseInterceptor, InterceptableRequest, InterceptableResponse, RequestType, InterceptorRequestInit, InterceptorResponseInit, WaitUntilCallback, InterceptResult, } from './network/index';
15
16
  export { BPLiveService, BPLiveError, type BPLiveResolvedResult } from './bplive/service';
16
17
  export { isBPLiveSource, isBPLiveStreamSource, isBPLiveClipSource, } from './bplive/types';
17
18
  export type { BPLiveConfig, BPLiveSource, BPLiveStreamSource, BPLiveClipSource, BPLiveStream, BPLiveStreamResponse, BPLiveClip, BPLiveClipResponse, BPLiveChannel, BPLiveActiveStream, BPLivePlayerSource, BPLiveLiveKitPlayerSource, BPLiveNanoPlayerSource, BPLiveClipMedia, } from './bplive/types';
@@ -0,0 +1,2 @@
1
+ export { NetworkInterceptorControllerImpl, type NetworkInterceptorController, type RequestInterceptor, type ResponseInterceptor, type InterceptableRequest, type InterceptableResponse, type RequestType, type InterceptorRequestInit, type InterceptorResponseInit, type WaitUntilCallback, type InterceptResult, } from './interceptor';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,87 @@
1
+ export type RequestType = 'api' | 'manifest' | 'segment' | 'other';
2
+ export interface InterceptorRequestInit {
3
+ url?: string;
4
+ method?: string;
5
+ headers?: Record<string, string>;
6
+ }
7
+ export interface InterceptorResponseInit {
8
+ status?: number;
9
+ headers?: Record<string, string>;
10
+ body?: unknown;
11
+ }
12
+ export type WaitUntilCallback = ((done: (error?: unknown) => void) => void) | (() => PromiseLike<void>);
13
+ export interface InterceptableRequest {
14
+ readonly url: string;
15
+ readonly method: string;
16
+ readonly type: RequestType;
17
+ readonly headers: Record<string, string>;
18
+ readonly closed: boolean;
19
+ redirect(init: InterceptorRequestInit | string): void;
20
+ respondWith(response: InterceptorResponseInit): void;
21
+ waitUntil(fn: WaitUntilCallback): void;
22
+ waitUntil(promise: PromiseLike<unknown>): void;
23
+ }
24
+ export type RequestInterceptor = (request: InterceptableRequest) => void | PromiseLike<void>;
25
+ export interface InterceptableResponse {
26
+ readonly url: string;
27
+ readonly status: number;
28
+ readonly headers: Record<string, string>;
29
+ readonly body: unknown;
30
+ readonly closed: boolean;
31
+ respondWith(response: InterceptorResponseInit): void;
32
+ waitUntil(fn: WaitUntilCallback): void;
33
+ waitUntil(promise: PromiseLike<unknown>): void;
34
+ }
35
+ export type ResponseInterceptor = (response: InterceptableResponse) => void | PromiseLike<void>;
36
+ export interface NetworkInterceptorController {
37
+ addRequestInterceptor(interceptor: RequestInterceptor): void;
38
+ removeRequestInterceptor(interceptor: RequestInterceptor): void;
39
+ addResponseInterceptor(interceptor: ResponseInterceptor): void;
40
+ removeResponseInterceptor(interceptor: ResponseInterceptor): void;
41
+ intercept(request: {
42
+ url: string;
43
+ method: string;
44
+ type: RequestType;
45
+ headers: Record<string, string>;
46
+ }): Promise<InterceptResult>;
47
+ interceptResponse(response: {
48
+ url: string;
49
+ status: number;
50
+ headers: Record<string, string>;
51
+ body: unknown;
52
+ }): Promise<{
53
+ status: number;
54
+ headers: Record<string, string>;
55
+ body: unknown;
56
+ }>;
57
+ }
58
+ export interface InterceptResult {
59
+ url: string;
60
+ headers: Record<string, string>;
61
+ response: InterceptorResponseInit | null;
62
+ }
63
+ export declare class NetworkInterceptorControllerImpl implements NetworkInterceptorController {
64
+ private _requestInterceptors;
65
+ private _responseInterceptors;
66
+ addRequestInterceptor(interceptor: RequestInterceptor): void;
67
+ removeRequestInterceptor(interceptor: RequestInterceptor): void;
68
+ addResponseInterceptor(interceptor: ResponseInterceptor): void;
69
+ removeResponseInterceptor(interceptor: ResponseInterceptor): void;
70
+ intercept(request: {
71
+ url: string;
72
+ method: string;
73
+ type: RequestType;
74
+ headers: Record<string, string>;
75
+ }): Promise<InterceptResult>;
76
+ interceptResponse(response: {
77
+ url: string;
78
+ status: number;
79
+ headers: Record<string, string>;
80
+ body: unknown;
81
+ }): Promise<{
82
+ status: number;
83
+ headers: Record<string, string>;
84
+ body: unknown;
85
+ }>;
86
+ }
87
+ //# sourceMappingURL=interceptor.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interceptor.test.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@broadcastingplatforms/player",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Universal video player web component built with Lit",
5
5
  "type": "module",
6
6
  "main": "dist/bp-player.js",
@@ -30,7 +30,9 @@
30
30
  "dev": "concurrently \"tsc --emitDeclarationOnly --watch --preserveWatchOutput\" \"node build.mjs --watch\"",
31
31
  "dev:demo": "vite",
32
32
  "clean": "rm -rf dist tsconfig.tsbuildinfo",
33
- "typecheck": "tsc --noEmit"
33
+ "typecheck": "tsc --noEmit",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest"
34
36
  },
35
37
  "dependencies": {
36
38
  "better-call": "^1.0.6",
@@ -46,7 +48,8 @@
46
48
  "concurrently": "^9.1.2",
47
49
  "esbuild": "^0.24.0",
48
50
  "typescript": "^5.7.2",
49
- "vite": "^6.0.5"
51
+ "vite": "^6.0.5",
52
+ "vitest": "^4.1.0"
50
53
  },
51
54
  "license": "SEE LICENSE IN LICENSE",
52
55
  "publishConfig": {