unified-video-framework 1.4.537 → 1.4.538

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.
Files changed (72) hide show
  1. package/README.md +3 -3
  2. package/package.json +1 -1
  3. package/packages/core/dist/version.d.ts +1 -1
  4. package/packages/core/dist/version.js +1 -1
  5. package/packages/core/src/version.ts +1 -1
  6. package/packages/web/dist/WebPlayer.js +1 -1
  7. package/packages/web/dist/drm/DRMManager.d.ts +15 -0
  8. package/packages/web/dist/drm/DRMManager.d.ts.map +1 -0
  9. package/packages/web/dist/drm/DRMManager.js +66 -0
  10. package/packages/web/dist/drm/DRMManager.js.map +1 -0
  11. package/packages/web/dist/drm/index.d.ts +15 -0
  12. package/packages/web/dist/drm/index.d.ts.map +1 -0
  13. package/packages/web/dist/drm/index.js +13 -0
  14. package/packages/web/dist/drm/index.js.map +1 -0
  15. package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts +6 -0
  16. package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts.map +1 -0
  17. package/packages/web/dist/drm/providers/BunnyNetProvider.js +13 -0
  18. package/packages/web/dist/drm/providers/BunnyNetProvider.js.map +1 -0
  19. package/packages/web/dist/drm/providers/GenericProvider.d.ts +10 -0
  20. package/packages/web/dist/drm/providers/GenericProvider.d.ts.map +1 -0
  21. package/packages/web/dist/drm/providers/GenericProvider.js +11 -0
  22. package/packages/web/dist/drm/providers/GenericProvider.js.map +1 -0
  23. package/packages/web/dist/drm/systems/BaseDRM.d.ts +15 -0
  24. package/packages/web/dist/drm/systems/BaseDRM.d.ts.map +1 -0
  25. package/packages/web/dist/drm/systems/BaseDRM.js +24 -0
  26. package/packages/web/dist/drm/systems/BaseDRM.js.map +1 -0
  27. package/packages/web/dist/drm/systems/FairPlayDRM.d.ts +10 -0
  28. package/packages/web/dist/drm/systems/FairPlayDRM.d.ts.map +1 -0
  29. package/packages/web/dist/drm/systems/FairPlayDRM.js +46 -0
  30. package/packages/web/dist/drm/systems/FairPlayDRM.js.map +1 -0
  31. package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts +9 -0
  32. package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts.map +1 -0
  33. package/packages/web/dist/drm/systems/PlayReadyDRM.js +39 -0
  34. package/packages/web/dist/drm/systems/PlayReadyDRM.js.map +1 -0
  35. package/packages/web/dist/drm/systems/WidevineDRM.d.ts +10 -0
  36. package/packages/web/dist/drm/systems/WidevineDRM.d.ts.map +1 -0
  37. package/packages/web/dist/drm/systems/WidevineDRM.js +63 -0
  38. package/packages/web/dist/drm/systems/WidevineDRM.js.map +1 -0
  39. package/packages/web/dist/drm/types/BunnyNetTypes.d.ts +16 -0
  40. package/packages/web/dist/drm/types/BunnyNetTypes.d.ts.map +1 -0
  41. package/packages/web/dist/drm/types/BunnyNetTypes.js +6 -0
  42. package/packages/web/dist/drm/types/BunnyNetTypes.js.map +1 -0
  43. package/packages/web/dist/drm/types/DRMTypes.d.ts +55 -0
  44. package/packages/web/dist/drm/types/DRMTypes.d.ts.map +1 -0
  45. package/packages/web/dist/drm/types/DRMTypes.js +17 -0
  46. package/packages/web/dist/drm/types/DRMTypes.js.map +1 -0
  47. package/packages/web/dist/drm/utils/BrowserDetector.d.ts +6 -0
  48. package/packages/web/dist/drm/utils/BrowserDetector.d.ts.map +1 -0
  49. package/packages/web/dist/drm/utils/BrowserDetector.js +35 -0
  50. package/packages/web/dist/drm/utils/BrowserDetector.js.map +1 -0
  51. package/packages/web/dist/drm/utils/CertificateManager.d.ts +6 -0
  52. package/packages/web/dist/drm/utils/CertificateManager.d.ts.map +1 -0
  53. package/packages/web/dist/drm/utils/CertificateManager.js +34 -0
  54. package/packages/web/dist/drm/utils/CertificateManager.js.map +1 -0
  55. package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts +7 -0
  56. package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts.map +1 -0
  57. package/packages/web/dist/drm/utils/DRMErrorHandler.js +36 -0
  58. package/packages/web/dist/drm/utils/DRMErrorHandler.js.map +1 -0
  59. package/packages/web/src/drm/DRMManager.ts +81 -0
  60. package/packages/web/src/drm/index.ts +14 -0
  61. package/packages/web/src/drm/providers/BunnyNetProvider.ts +14 -0
  62. package/packages/web/src/drm/providers/GenericProvider.ts +17 -0
  63. package/packages/web/src/drm/systems/BaseDRM.ts +34 -0
  64. package/packages/web/src/drm/systems/FairPlayDRM.ts +46 -0
  65. package/packages/web/src/drm/systems/PlayReadyDRM.ts +42 -0
  66. package/packages/web/src/drm/systems/WidevineDRM.ts +67 -0
  67. package/packages/web/src/drm/types/BunnyNetTypes.ts +18 -0
  68. package/packages/web/src/drm/types/DRMTypes.ts +61 -0
  69. package/packages/web/src/drm/utils/BrowserDetector.ts +35 -0
  70. package/packages/web/src/drm/utils/CertificateManager.ts +39 -0
  71. package/packages/web/src/drm/utils/DRMErrorHandler.ts +34 -0
  72. package/packages/web/src/drm.d.ts +0 -20
package/README.md CHANGED
@@ -4,15 +4,15 @@
4
4
 
5
5
  Built and maintained by **Flicknexs**, trusted by teams building video platforms across Web, Mobile Streaming Devices.
6
6
 
7
- 🔗 **Official Website**: https://flicknexs.com
8
- 📘 **Docs & Examples**: https://flicknexs.com/video-player-sdk?utm_source=npm&utm_medium=referral&utm_campaign=unified_video_framework
7
+ 🔗 **Official Website**: https://flicknexs.com<br>
8
+ 📘 **Docs & Examples**: https://flicknexs.com/video-player-sdk?utm_source=npm&utm_medium=referral&utm_campaign=unified_video_framework<br>
9
9
  💻 **GitHub Repository**: https://github.com/flicknexs/unified-video-framework
10
10
 
11
11
  ---
12
12
 
13
13
  ## Why Unified Video Framework?
14
14
 
15
- Most video teams struggle with maintaining **separate players for Web, Mobile **. Flicknexs Unified Video Framework eliminates this complexity by providing **one SDK that works everywhere**.
15
+ Most video teams struggle with maintaining **separate players for Web, Mobile**. Flicknexs Unified Video Framework eliminates this complexity by providing **one SDK that works everywhere**.
16
16
 
17
17
  ### ✅ Supported Platforms
18
18
  - **Web** (all modern browsers)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unified-video-framework",
3
- "version": "1.4.537",
3
+ "version": "1.4.538",
4
4
  "description": "Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more",
5
5
  "main": "packages/core/dist/index.js",
6
6
  "types": "packages/core/dist/index.d.ts",
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "1.4.537";
1
+ export declare const VERSION = "1.4.538";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,2 +1,2 @@
1
- export const VERSION = '1.4.537';
1
+ export const VERSION = '1.4.538';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- export const VERSION = '1.4.537';
1
+ export const VERSION = '1.4.538';
@@ -3,7 +3,7 @@ import { ChapterManager as CoreChapterManager } from '../../core/dist/index.js';
3
3
  import { ChapterManager } from './chapters/ChapterManager.js';
4
4
  import YouTubeExtractor from './utils/YouTubeExtractor.js';
5
5
  import { SrtConverter } from './utils/SrtConverter.js';
6
- import { DRMManager, DRMErrorHandler } from './drm.js';
6
+ import { DRMManager, DRMErrorHandler } from './drm/index.js';
7
7
  export class WebPlayer extends BasePlayer {
8
8
  constructor() {
9
9
  super(...arguments);
@@ -0,0 +1,15 @@
1
+ import { ExtendedDRMConfig, DRMInitResult } from './types/DRMTypes';
2
+ export declare class DRMManager {
3
+ private video;
4
+ private config;
5
+ private debug;
6
+ private activeDRM;
7
+ constructor(video: HTMLVideoElement, config: ExtendedDRMConfig, debug?: boolean);
8
+ initialize(): Promise<DRMInitResult>;
9
+ private initSpecific;
10
+ getHLSConfig(): Record<string, any>;
11
+ getDashProtectionData(): Record<string, any>;
12
+ destroy(): Promise<void>;
13
+ private log;
14
+ }
15
+ //# sourceMappingURL=DRMManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DRMManager.d.ts","sourceRoot":"","sources":["../../src/drm/DRMManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAgB,MAAM,kBAAkB,CAAC;AAQlF,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,SAAS,CAAwB;gBAE7B,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,GAAE,OAAe;IAMhF,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;YA2B5B,YAAY;IAe1B,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAInC,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAItC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,OAAO,CAAC,GAAG;CAGZ"}
@@ -0,0 +1,66 @@
1
+ import { DRMErrorCode } from './types/DRMTypes.js';
2
+ import { DRMErrorHandler } from './utils/DRMErrorHandler.js';
3
+ import { BrowserDetector } from './utils/BrowserDetector.js';
4
+ import { WidevineDRM } from './systems/WidevineDRM.js';
5
+ import { FairPlayDRM } from './systems/FairPlayDRM.js';
6
+ import { PlayReadyDRM } from './systems/PlayReadyDRM.js';
7
+ export class DRMManager {
8
+ constructor(video, config, debug = false) {
9
+ this.activeDRM = null;
10
+ this.video = video;
11
+ this.config = config;
12
+ this.debug = debug;
13
+ }
14
+ async initialize() {
15
+ const type = this.config.type || 'auto';
16
+ if (type !== 'auto') {
17
+ return this.initSpecific(type);
18
+ }
19
+ const caps = await BrowserDetector.detectCapabilities();
20
+ this.log('DRM capabilities:', caps);
21
+ if (BrowserDetector.isSafari() && caps.fairplay && this.config.certificateUrl) {
22
+ return this.initSpecific('fairplay');
23
+ }
24
+ if (caps.widevine) {
25
+ return this.initSpecific('widevine');
26
+ }
27
+ if (caps.playready) {
28
+ return this.initSpecific('playready');
29
+ }
30
+ return {
31
+ success: false,
32
+ error: DRMErrorHandler.createError(DRMErrorCode.UNSUPPORTED, 'No supported DRM system found in this browser'),
33
+ };
34
+ }
35
+ async initSpecific(type) {
36
+ switch (type) {
37
+ case 'widevine':
38
+ this.activeDRM = new WidevineDRM(this.video, this.config, this.debug);
39
+ break;
40
+ case 'fairplay':
41
+ this.activeDRM = new FairPlayDRM(this.video, this.config, this.debug);
42
+ break;
43
+ case 'playready':
44
+ this.activeDRM = new PlayReadyDRM(this.video, this.config, this.debug);
45
+ break;
46
+ }
47
+ return this.activeDRM.initialize();
48
+ }
49
+ getHLSConfig() {
50
+ return this.activeDRM?.getHLSConfig() || {};
51
+ }
52
+ getDashProtectionData() {
53
+ return this.activeDRM?.getDashProtectionData() || {};
54
+ }
55
+ async destroy() {
56
+ if (this.activeDRM) {
57
+ await this.activeDRM.destroy();
58
+ this.activeDRM = null;
59
+ }
60
+ }
61
+ log(...args) {
62
+ if (this.debug)
63
+ console.log('[DRMManager]', ...args);
64
+ }
65
+ }
66
+ //# sourceMappingURL=DRMManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DRMManager.js","sourceRoot":"","sources":["../../src/drm/DRMManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export { DRMManager } from './DRMManager';
2
+ export { BunnyNetProvider } from './providers/BunnyNetProvider';
3
+ export { GenericProvider } from './providers/GenericProvider';
4
+ export type { ExtendedDRMConfig, DRMCapabilities, LicenseRequest, LicenseResponse, DRMInitResult, DRMError } from './types/DRMTypes';
5
+ export { DRMErrorCode, KEY_SYSTEMS } from './types/DRMTypes';
6
+ export type { BunnyNetConfig, BunnyNetEndpoints } from './types/BunnyNetTypes';
7
+ export { BUNNY_NET_BASE_URL, BUNNY_NET_ENDPOINTS } from './types/BunnyNetTypes';
8
+ export { BrowserDetector } from './utils/BrowserDetector';
9
+ export { DRMErrorHandler } from './utils/DRMErrorHandler';
10
+ export { CertificateManager } from './utils/CertificateManager';
11
+ export { BaseDRM } from './systems/BaseDRM';
12
+ export { WidevineDRM } from './systems/WidevineDRM';
13
+ export { FairPlayDRM } from './systems/FairPlayDRM';
14
+ export { PlayReadyDRM } from './systems/PlayReadyDRM';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrI,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export { DRMManager } from './DRMManager.js';
2
+ export { BunnyNetProvider } from './providers/BunnyNetProvider.js';
3
+ export { GenericProvider } from './providers/GenericProvider.js';
4
+ export { DRMErrorCode, KEY_SYSTEMS } from './types/DRMTypes.js';
5
+ export { BUNNY_NET_BASE_URL, BUNNY_NET_ENDPOINTS } from './types/BunnyNetTypes.js';
6
+ export { BrowserDetector } from './utils/BrowserDetector.js';
7
+ export { DRMErrorHandler } from './utils/DRMErrorHandler.js';
8
+ export { CertificateManager } from './utils/CertificateManager.js';
9
+ export { BaseDRM } from './systems/BaseDRM.js';
10
+ export { WidevineDRM } from './systems/WidevineDRM.js';
11
+ export { FairPlayDRM } from './systems/FairPlayDRM.js';
12
+ export { PlayReadyDRM } from './systems/PlayReadyDRM.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { BunnyNetConfig } from '../types/BunnyNetTypes';
2
+ import { ExtendedDRMConfig } from '../types/DRMTypes';
3
+ export declare class BunnyNetProvider {
4
+ static createConfig(bunnyConfig: BunnyNetConfig): ExtendedDRMConfig;
5
+ }
6
+ //# sourceMappingURL=BunnyNetProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunnyNetProvider.d.ts","sourceRoot":"","sources":["../../../src/drm/providers/BunnyNetProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,cAAc,GAAG,iBAAiB;CASpE"}
@@ -0,0 +1,13 @@
1
+ import { BUNNY_NET_BASE_URL, BUNNY_NET_ENDPOINTS } from '../types/BunnyNetTypes.js';
2
+ export class BunnyNetProvider {
3
+ static createConfig(bunnyConfig) {
4
+ const base = `${BUNNY_NET_BASE_URL}/${bunnyConfig.libraryId}/${bunnyConfig.videoId}`;
5
+ return {
6
+ type: 'fairplay',
7
+ licenseUrl: `${base}${BUNNY_NET_ENDPOINTS.license}`,
8
+ certificateUrl: `${base}${BUNNY_NET_ENDPOINTS.certificate}`,
9
+ headers: bunnyConfig.token ? { 'AccessKey': bunnyConfig.token } : undefined,
10
+ };
11
+ }
12
+ }
13
+ //# sourceMappingURL=BunnyNetProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunnyNetProvider.js","sourceRoot":"","sources":["../../../src/drm/providers/BunnyNetProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAkB,MAAM,wBAAwB,CAAC;AAGjG,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,YAAY,CAAC,WAA2B;QAC7C,MAAM,IAAI,GAAG,GAAG,kBAAkB,IAAI,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACrF,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,GAAG,IAAI,GAAG,mBAAmB,CAAC,OAAO,EAAE;YACnD,cAAc,EAAE,GAAG,IAAI,GAAG,mBAAmB,CAAC,WAAW,EAAE;YAC3D,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;SAC5E,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { ExtendedDRMConfig } from '../types/DRMTypes';
2
+ export declare class GenericProvider {
3
+ static createConfig(config: {
4
+ licenseUrl: string;
5
+ certificateUrl?: string;
6
+ headers?: Record<string, string>;
7
+ type?: ExtendedDRMConfig['type'];
8
+ }): ExtendedDRMConfig;
9
+ }
10
+ //# sourceMappingURL=GenericProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericProvider.d.ts","sourceRoot":"","sources":["../../../src/drm/providers/GenericProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,qBAAa,eAAe;IAC1B,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;KAClC,GAAG,iBAAiB;CAQtB"}
@@ -0,0 +1,11 @@
1
+ export class GenericProvider {
2
+ static createConfig(config) {
3
+ return {
4
+ type: config.type || 'auto',
5
+ licenseUrl: config.licenseUrl,
6
+ certificateUrl: config.certificateUrl,
7
+ headers: config.headers,
8
+ };
9
+ }
10
+ }
11
+ //# sourceMappingURL=GenericProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericProvider.js","sourceRoot":"","sources":["../../../src/drm/providers/GenericProvider.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAe;IAC1B,MAAM,CAAC,YAAY,CAAC,MAKnB;QACC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { ExtendedDRMConfig, DRMInitResult } from '../types/DRMTypes';
2
+ export declare abstract class BaseDRM {
3
+ protected video: HTMLVideoElement;
4
+ protected config: ExtendedDRMConfig;
5
+ protected debug: boolean;
6
+ constructor(video: HTMLVideoElement, config: ExtendedDRMConfig, debug?: boolean);
7
+ abstract initialize(): Promise<DRMInitResult>;
8
+ abstract destroy(): Promise<void>;
9
+ abstract getKeySystem(): string;
10
+ getHLSConfig(): Record<string, any>;
11
+ getDashProtectionData(): Record<string, any>;
12
+ protected log(...args: any[]): void;
13
+ protected requestLicense(url: string, body: ArrayBuffer, headers?: Record<string, string>): Promise<ArrayBuffer>;
14
+ }
15
+ //# sourceMappingURL=BaseDRM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseDRM.d.ts","sourceRoot":"","sources":["../../../src/drm/systems/BaseDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAErE,8BAAsB,OAAO;IAC3B,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC;IAClC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;gBAEb,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,GAAE,OAAe;IAMtF,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAC7C,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IACjC,QAAQ,CAAC,YAAY,IAAI,MAAM;IAE/B,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnC,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAE5C,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;cAInB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CASvH"}
@@ -0,0 +1,24 @@
1
+ export class BaseDRM {
2
+ constructor(video, config, debug = false) {
3
+ this.video = video;
4
+ this.config = config;
5
+ this.debug = debug;
6
+ }
7
+ getHLSConfig() { return {}; }
8
+ getDashProtectionData() { return {}; }
9
+ log(...args) {
10
+ if (this.debug)
11
+ console.log('[DRM]', ...args);
12
+ }
13
+ async requestLicense(url, body, headers) {
14
+ const resp = await fetch(url, {
15
+ method: 'POST',
16
+ headers: { 'Content-Type': 'application/octet-stream', ...(headers || {}) },
17
+ body,
18
+ });
19
+ if (!resp.ok)
20
+ throw new Error(`License request failed: HTTP ${resp.status}`);
21
+ return resp.arrayBuffer();
22
+ }
23
+ }
24
+ //# sourceMappingURL=BaseDRM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseDRM.js","sourceRoot":"","sources":["../../../src/drm/systems/BaseDRM.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,OAAO;IAK3B,YAAY,KAAuB,EAAE,MAAyB,EAAE,QAAiB,KAAK;QACpF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAMD,YAAY,KAA0B,OAAO,EAAE,CAAC,CAAC,CAAC;IAClD,qBAAqB,KAA0B,OAAO,EAAE,CAAC,CAAC,CAAC;IAEjD,GAAG,CAAC,GAAG,IAAW;QAC1B,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,IAAiB,EAAE,OAAgC;QAC7F,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;YAC3E,IAAI;SACL,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { BaseDRM } from './BaseDRM';
2
+ import { DRMInitResult } from '../types/DRMTypes';
3
+ export declare class FairPlayDRM extends BaseDRM {
4
+ private certManager;
5
+ getKeySystem(): string;
6
+ initialize(): Promise<DRMInitResult>;
7
+ getHLSConfig(): Record<string, any>;
8
+ destroy(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=FairPlayDRM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FairPlayDRM.d.ts","sourceRoot":"","sources":["../../../src/drm/systems/FairPlayDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAI7E,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAO,CAAC,WAAW,CAA4B;IAE/C,YAAY,IAAI,MAAM;IAEhB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAmB1C,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAY7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAI/B"}
@@ -0,0 +1,46 @@
1
+ import { BaseDRM } from './BaseDRM.js';
2
+ import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes.js';
3
+ import { DRMErrorHandler } from '../utils/DRMErrorHandler.js';
4
+ import { CertificateManager } from '../utils/CertificateManager.js';
5
+ export class FairPlayDRM extends BaseDRM {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.certManager = new CertificateManager();
9
+ }
10
+ getKeySystem() { return KEY_SYSTEMS.FAIRPLAY; }
11
+ async initialize() {
12
+ try {
13
+ if (!this.config.certificateUrl) {
14
+ return {
15
+ success: false,
16
+ error: DRMErrorHandler.createError(DRMErrorCode.CERTIFICATE_FETCH_FAILED, 'FairPlay requires certificateUrl'),
17
+ };
18
+ }
19
+ const cert = await this.certManager.fetchCertificate(this.config.certificateUrl, this.config.headers);
20
+ this.log('FairPlay certificate fetched, size:', cert.byteLength);
21
+ return { success: true, drmType: 'fairplay', keySystem: KEY_SYSTEMS.FAIRPLAY };
22
+ }
23
+ catch (error) {
24
+ return {
25
+ success: false,
26
+ error: DRMErrorHandler.createError(DRMErrorCode.INITIALIZATION_FAILED, `FairPlay init failed: ${error.message}`, error),
27
+ };
28
+ }
29
+ }
30
+ getHLSConfig() {
31
+ return {
32
+ emeEnabled: true,
33
+ drmSystems: {
34
+ 'com.apple.fps.1_0': {
35
+ licenseUrl: this.config.licenseUrl,
36
+ serverCertificateUrl: this.config.certificateUrl,
37
+ },
38
+ },
39
+ };
40
+ }
41
+ async destroy() {
42
+ this.certManager.clear();
43
+ this.log('FairPlay DRM destroyed');
44
+ }
45
+ }
46
+ //# sourceMappingURL=FairPlayDRM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FairPlayDRM.js","sourceRoot":"","sources":["../../../src/drm/systems/FairPlayDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,OAAO,WAAY,SAAQ,OAAO;IAAxC;;QACU,gBAAW,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAuCjD,CAAC;IArCC,YAAY,KAAa,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAChC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,wBAAwB,EAAE,kCAAkC,CAAC;iBAC9G,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACtG,IAAI,CAAC,GAAG,CAAC,qCAAqC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,EAAE,yBAAyB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;aACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE;gBACV,mBAAmB,EAAE;oBACnB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;oBAClC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc;iBACjD;aACF;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { BaseDRM } from './BaseDRM';
2
+ import { DRMInitResult } from '../types/DRMTypes';
3
+ export declare class PlayReadyDRM extends BaseDRM {
4
+ getKeySystem(): string;
5
+ initialize(): Promise<DRMInitResult>;
6
+ getDashProtectionData(): Record<string, any>;
7
+ destroy(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=PlayReadyDRM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlayReadyDRM.d.ts","sourceRoot":"","sources":["../../../src/drm/systems/PlayReadyDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAG7E,qBAAa,YAAa,SAAQ,OAAO;IACvC,YAAY,IAAI,MAAM;IAEhB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IAqB1C,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAUtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -0,0 +1,39 @@
1
+ import { BaseDRM } from './BaseDRM.js';
2
+ import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes.js';
3
+ import { DRMErrorHandler } from '../utils/DRMErrorHandler.js';
4
+ export class PlayReadyDRM extends BaseDRM {
5
+ getKeySystem() { return KEY_SYSTEMS.PLAYREADY; }
6
+ async initialize() {
7
+ try {
8
+ const config = [{
9
+ initDataTypes: ['cenc'],
10
+ videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }],
11
+ audioCapabilities: [{ contentType: 'audio/mp4; codecs="mp4a.40.2"' }],
12
+ persistentState: this.config.persistentState || 'optional',
13
+ distinctiveIdentifier: this.config.distinctiveIdentifier || 'optional',
14
+ }];
15
+ await navigator.requestMediaKeySystemAccess(KEY_SYSTEMS.PLAYREADY, config);
16
+ this.log('PlayReady access granted');
17
+ return { success: true, drmType: 'playready', keySystem: KEY_SYSTEMS.PLAYREADY };
18
+ }
19
+ catch (error) {
20
+ return {
21
+ success: false,
22
+ error: DRMErrorHandler.createError(DRMErrorCode.INITIALIZATION_FAILED, `PlayReady init failed: ${error.message}`, error),
23
+ };
24
+ }
25
+ }
26
+ getDashProtectionData() {
27
+ return {
28
+ [KEY_SYSTEMS.PLAYREADY]: {
29
+ serverURL: this.config.licenseUrl,
30
+ httpRequestHeaders: this.config.headers || {},
31
+ withCredentials: this.config.withCredentials || false,
32
+ },
33
+ };
34
+ }
35
+ async destroy() {
36
+ this.log('PlayReady DRM destroyed');
37
+ }
38
+ }
39
+ //# sourceMappingURL=PlayReadyDRM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlayReadyDRM.js","sourceRoot":"","sources":["../../../src/drm/systems/PlayReadyDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,YAAa,SAAQ,OAAO;IACvC,YAAY,KAAa,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAExD,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAkC,CAAC;oBAC7C,aAAa,EAAE,CAAC,MAAM,CAAC;oBACvB,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC;oBACvE,iBAAiB,EAAE,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;oBACrE,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,UAAU;oBAC1D,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,UAAU;iBACvE,CAAC,CAAC;YAEH,MAAM,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC3E,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC;QACnF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,EAAE,0BAA0B,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;aACzH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;gBACvB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gBACjC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;gBAC7C,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK;aACtD;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { BaseDRM } from './BaseDRM';
2
+ import { DRMInitResult } from '../types/DRMTypes';
3
+ export declare class WidevineDRM extends BaseDRM {
4
+ getKeySystem(): string;
5
+ initialize(): Promise<DRMInitResult>;
6
+ getHLSConfig(): Record<string, any>;
7
+ getDashProtectionData(): Record<string, any>;
8
+ destroy(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=WidevineDRM.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidevineDRM.d.ts","sourceRoot":"","sources":["../../../src/drm/systems/WidevineDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAe,aAAa,EAAgB,MAAM,mBAAmB,CAAC;AAG7E,qBAAa,WAAY,SAAQ,OAAO;IACtC,YAAY,IAAI,MAAM;IAEhB,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;IA2B1C,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmBnC,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAUtC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -0,0 +1,63 @@
1
+ import { BaseDRM } from './BaseDRM.js';
2
+ import { KEY_SYSTEMS, DRMErrorCode } from '../types/DRMTypes.js';
3
+ import { DRMErrorHandler } from '../utils/DRMErrorHandler.js';
4
+ export class WidevineDRM extends BaseDRM {
5
+ getKeySystem() { return KEY_SYSTEMS.WIDEVINE; }
6
+ async initialize() {
7
+ try {
8
+ const config = [{
9
+ initDataTypes: ['cenc'],
10
+ videoCapabilities: [{
11
+ contentType: 'video/mp4; codecs="avc1.42E01E"',
12
+ robustness: this.config.videoRobustness || 'SW_SECURE_CRYPTO',
13
+ }],
14
+ audioCapabilities: [{
15
+ contentType: 'audio/mp4; codecs="mp4a.40.2"',
16
+ robustness: this.config.audioRobustness || 'SW_SECURE_CRYPTO',
17
+ }],
18
+ persistentState: this.config.persistentState || 'optional',
19
+ distinctiveIdentifier: this.config.distinctiveIdentifier || 'optional',
20
+ }];
21
+ await navigator.requestMediaKeySystemAccess(KEY_SYSTEMS.WIDEVINE, config);
22
+ this.log('Widevine access granted');
23
+ return { success: true, drmType: 'widevine', keySystem: KEY_SYSTEMS.WIDEVINE };
24
+ }
25
+ catch (error) {
26
+ return {
27
+ success: false,
28
+ error: DRMErrorHandler.createError(DRMErrorCode.INITIALIZATION_FAILED, `Widevine init failed: ${error.message}`, error),
29
+ };
30
+ }
31
+ }
32
+ getHLSConfig() {
33
+ return {
34
+ emeEnabled: true,
35
+ widevineLicenseUrl: this.config.licenseUrl,
36
+ drmSystems: {
37
+ 'com.widevine.alpha': {
38
+ licenseUrl: this.config.licenseUrl,
39
+ },
40
+ },
41
+ licenseXhrSetup: this.config.headers
42
+ ? (xhr) => {
43
+ for (const [k, v] of Object.entries(this.config.headers)) {
44
+ xhr.setRequestHeader(k, v);
45
+ }
46
+ }
47
+ : undefined,
48
+ };
49
+ }
50
+ getDashProtectionData() {
51
+ return {
52
+ [KEY_SYSTEMS.WIDEVINE]: {
53
+ serverURL: this.config.licenseUrl,
54
+ httpRequestHeaders: this.config.headers || {},
55
+ withCredentials: this.config.withCredentials || false,
56
+ },
57
+ };
58
+ }
59
+ async destroy() {
60
+ this.log('Widevine DRM destroyed');
61
+ }
62
+ }
63
+ //# sourceMappingURL=WidevineDRM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidevineDRM.js","sourceRoot":"","sources":["../../../src/drm/systems/WidevineDRM.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,YAAY,KAAa,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvD,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAkC,CAAC;oBAC7C,aAAa,EAAE,CAAC,MAAM,CAAC;oBACvB,iBAAiB,EAAE,CAAC;4BAClB,WAAW,EAAE,iCAAiC;4BAC9C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,kBAAkB;yBAC9D,CAAC;oBACF,iBAAiB,EAAE,CAAC;4BAClB,WAAW,EAAE,+BAA+B;4BAC5C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,kBAAkB;yBAC9D,CAAC;oBACF,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,UAAU;oBAC1D,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,UAAU;iBACvE,CAAC,CAAC;YAEH,MAAM,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC1E,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,qBAAqB,EAAE,yBAAyB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC;aACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;YAC1C,UAAU,EAAE;gBACV,oBAAoB,EAAE;oBACpB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;iBACnC;aACF;YACD,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;gBAClC,CAAC,CAAC,CAAC,GAAmB,EAAE,EAAE;oBACtB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAQ,CAAC,EAAE,CAAC;wBAC1D,GAAG,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;gBACH,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAED,qBAAqB;QACnB,OAAO;YACL,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;gBACtB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gBACjC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;gBAC7C,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK;aACtD;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ export interface BunnyNetConfig {
2
+ libraryId: string;
3
+ videoId: string;
4
+ token?: string;
5
+ expirationTime?: number;
6
+ }
7
+ export interface BunnyNetEndpoints {
8
+ license: string;
9
+ certificate: string;
10
+ }
11
+ export declare const BUNNY_NET_BASE_URL = "https://video.bunnycdn.com";
12
+ export declare const BUNNY_NET_ENDPOINTS: {
13
+ readonly license: "/FairPlay/License";
14
+ readonly certificate: "/FairPlay/Certificate";
15
+ };
16
+ //# sourceMappingURL=BunnyNetTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunnyNetTypes.d.ts","sourceRoot":"","sources":["../../../src/drm/types/BunnyNetTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,+BAA+B,CAAC;AAE/D,eAAO,MAAM,mBAAmB;;;CAGtB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const BUNNY_NET_BASE_URL = 'https://video.bunnycdn.com';
2
+ export const BUNNY_NET_ENDPOINTS = {
3
+ license: '/FairPlay/License',
4
+ certificate: '/FairPlay/Certificate',
5
+ };
6
+ //# sourceMappingURL=BunnyNetTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunnyNetTypes.js","sourceRoot":"","sources":["../../../src/drm/types/BunnyNetTypes.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,kBAAkB,GAAG,4BAA4B,CAAC;AAE/D,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,mBAAmB;IAC5B,WAAW,EAAE,uBAAuB;CAC5B,CAAC"}
@@ -0,0 +1,55 @@
1
+ export declare enum DRMErrorCode {
2
+ UNSUPPORTED = "DRM_UNSUPPORTED",
3
+ LICENSE_REQUEST_FAILED = "DRM_LICENSE_REQUEST_FAILED",
4
+ LICENSE_RESPONSE_INVALID = "DRM_LICENSE_RESPONSE_INVALID",
5
+ CERTIFICATE_FETCH_FAILED = "DRM_CERTIFICATE_FETCH_FAILED",
6
+ KEY_SESSION_ERROR = "DRM_KEY_SESSION_ERROR",
7
+ OUTPUT_RESTRICTED = "DRM_OUTPUT_RESTRICTED",
8
+ INITIALIZATION_FAILED = "DRM_INITIALIZATION_FAILED",
9
+ UNKNOWN = "DRM_UNKNOWN"
10
+ }
11
+ export declare const KEY_SYSTEMS: {
12
+ readonly WIDEVINE: "com.widevine.alpha";
13
+ readonly FAIRPLAY: "com.apple.fps.1_0";
14
+ readonly PLAYREADY: "com.microsoft.playready";
15
+ };
16
+ export interface ExtendedDRMConfig {
17
+ type?: 'widevine' | 'fairplay' | 'playready' | 'auto';
18
+ licenseUrl: string;
19
+ certificateUrl?: string;
20
+ headers?: Record<string, string>;
21
+ withCredentials?: boolean;
22
+ serverCertificate?: Uint8Array;
23
+ videoRobustness?: string;
24
+ audioRobustness?: string;
25
+ persistentState?: MediaKeysRequirement;
26
+ distinctiveIdentifier?: MediaKeysRequirement;
27
+ }
28
+ export interface DRMCapabilities {
29
+ widevine: boolean;
30
+ fairplay: boolean;
31
+ playready: boolean;
32
+ }
33
+ export interface LicenseRequest {
34
+ url: string;
35
+ method: string;
36
+ headers: Record<string, string>;
37
+ body: ArrayBuffer;
38
+ }
39
+ export interface LicenseResponse {
40
+ status: number;
41
+ data: ArrayBuffer;
42
+ headers: Record<string, string>;
43
+ }
44
+ export interface DRMInitResult {
45
+ success: boolean;
46
+ drmType?: string;
47
+ keySystem?: string;
48
+ error?: DRMError;
49
+ }
50
+ export interface DRMError {
51
+ code: DRMErrorCode | string;
52
+ message: string;
53
+ details?: any;
54
+ }
55
+ //# sourceMappingURL=DRMTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DRMTypes.d.ts","sourceRoot":"","sources":["../../../src/drm/types/DRMTypes.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IACtB,WAAW,oBAAoB;IAC/B,sBAAsB,+BAA+B;IACrD,wBAAwB,iCAAiC;IACzD,wBAAwB,iCAAiC;IACzD,iBAAiB,0BAA0B;IAC3C,iBAAiB,0BAA0B;IAC3C,qBAAqB,8BAA8B;IACnD,OAAO,gBAAgB;CACxB;AAED,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,qBAAqB,CAAC,EAAE,oBAAoB,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf"}