@vizor-vr/shared 0.1.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.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -0
  3. package/dist/__tests__/defaults.test.d.ts +2 -0
  4. package/dist/__tests__/defaults.test.d.ts.map +1 -0
  5. package/dist/__tests__/defaults.test.js +78 -0
  6. package/dist/__tests__/defaults.test.js.map +1 -0
  7. package/dist/__tests__/events.test.d.ts +2 -0
  8. package/dist/__tests__/events.test.d.ts.map +1 -0
  9. package/dist/__tests__/events.test.js +56 -0
  10. package/dist/__tests__/events.test.js.map +1 -0
  11. package/dist/__tests__/formats.test.d.ts +2 -0
  12. package/dist/__tests__/formats.test.d.ts.map +1 -0
  13. package/dist/__tests__/formats.test.js +75 -0
  14. package/dist/__tests__/formats.test.js.map +1 -0
  15. package/dist/__tests__/keybindings.test.d.ts +2 -0
  16. package/dist/__tests__/keybindings.test.d.ts.map +1 -0
  17. package/dist/__tests__/keybindings.test.js +59 -0
  18. package/dist/__tests__/keybindings.test.js.map +1 -0
  19. package/dist/__tests__/license.test.d.ts +2 -0
  20. package/dist/__tests__/license.test.d.ts.map +1 -0
  21. package/dist/__tests__/license.test.js +57 -0
  22. package/dist/__tests__/license.test.js.map +1 -0
  23. package/dist/__tests__/math.test.d.ts +2 -0
  24. package/dist/__tests__/math.test.d.ts.map +1 -0
  25. package/dist/__tests__/math.test.js +131 -0
  26. package/dist/__tests__/math.test.js.map +1 -0
  27. package/dist/__tests__/media.test.d.ts +2 -0
  28. package/dist/__tests__/media.test.d.ts.map +1 -0
  29. package/dist/__tests__/media.test.js +32 -0
  30. package/dist/__tests__/media.test.js.map +1 -0
  31. package/dist/constants/defaults.d.ts +31 -0
  32. package/dist/constants/defaults.d.ts.map +1 -0
  33. package/dist/constants/defaults.js +55 -0
  34. package/dist/constants/defaults.js.map +1 -0
  35. package/dist/constants/events.d.ts +5 -0
  36. package/dist/constants/events.d.ts.map +1 -0
  37. package/dist/constants/events.js +45 -0
  38. package/dist/constants/events.js.map +1 -0
  39. package/dist/constants/formats.d.ts +9 -0
  40. package/dist/constants/formats.d.ts.map +1 -0
  41. package/dist/constants/formats.js +206 -0
  42. package/dist/constants/formats.js.map +1 -0
  43. package/dist/constants/index.d.ts +7 -0
  44. package/dist/constants/index.d.ts.map +1 -0
  45. package/dist/constants/index.js +7 -0
  46. package/dist/constants/index.js.map +1 -0
  47. package/dist/constants/keybindings.d.ts +10 -0
  48. package/dist/constants/keybindings.d.ts.map +1 -0
  49. package/dist/constants/keybindings.js +26 -0
  50. package/dist/constants/keybindings.js.map +1 -0
  51. package/dist/constants/license.d.ts +8 -0
  52. package/dist/constants/license.d.ts.map +1 -0
  53. package/dist/constants/license.js +111 -0
  54. package/dist/constants/license.js.map +1 -0
  55. package/dist/constants/media.d.ts +23 -0
  56. package/dist/constants/media.d.ts.map +1 -0
  57. package/dist/constants/media.js +20 -0
  58. package/dist/constants/media.js.map +1 -0
  59. package/dist/index.d.ts +5 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +9 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/types/analytics.d.ts +30 -0
  64. package/dist/types/analytics.d.ts.map +1 -0
  65. package/dist/types/analytics.js +2 -0
  66. package/dist/types/analytics.js.map +1 -0
  67. package/dist/types/annotations.d.ts +22 -0
  68. package/dist/types/annotations.d.ts.map +1 -0
  69. package/dist/types/annotations.js +2 -0
  70. package/dist/types/annotations.js.map +1 -0
  71. package/dist/types/collaborative.d.ts +77 -0
  72. package/dist/types/collaborative.d.ts.map +1 -0
  73. package/dist/types/collaborative.js +2 -0
  74. package/dist/types/collaborative.js.map +1 -0
  75. package/dist/types/events.d.ts +60 -0
  76. package/dist/types/events.d.ts.map +1 -0
  77. package/dist/types/events.js +2 -0
  78. package/dist/types/events.js.map +1 -0
  79. package/dist/types/formats.d.ts +41 -0
  80. package/dist/types/formats.d.ts.map +1 -0
  81. package/dist/types/formats.js +33 -0
  82. package/dist/types/formats.js.map +1 -0
  83. package/dist/types/index.d.ts +10 -0
  84. package/dist/types/index.d.ts.map +1 -0
  85. package/dist/types/index.js +2 -0
  86. package/dist/types/index.js.map +1 -0
  87. package/dist/types/license.d.ts +39 -0
  88. package/dist/types/license.d.ts.map +1 -0
  89. package/dist/types/license.js +2 -0
  90. package/dist/types/license.js.map +1 -0
  91. package/dist/types/player.d.ts +107 -0
  92. package/dist/types/player.d.ts.map +1 -0
  93. package/dist/types/player.js +2 -0
  94. package/dist/types/player.js.map +1 -0
  95. package/dist/types/tour.d.ts +21 -0
  96. package/dist/types/tour.d.ts.map +1 -0
  97. package/dist/types/tour.js +2 -0
  98. package/dist/types/tour.js.map +1 -0
  99. package/dist/utils/index.d.ts +2 -0
  100. package/dist/utils/index.d.ts.map +1 -0
  101. package/dist/utils/index.js +2 -0
  102. package/dist/utils/index.js.map +1 -0
  103. package/dist/utils/math.d.ts +28 -0
  104. package/dist/utils/math.d.ts.map +1 -0
  105. package/dist/utils/math.js +46 -0
  106. package/dist/utils/math.js.map +1 -0
  107. package/package.json +42 -0
@@ -0,0 +1,32 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { TIER_MEDIA, getMediaLimits, MEDIA_OVERAGE } from '../constants/media.js';
3
+ const GB = 1024 ** 3;
4
+ describe('TIER_MEDIA (approved economics)', () => {
5
+ it('caps rendition quality per tier', () => {
6
+ expect(TIER_MEDIA.free.maxHeight).toBe(720);
7
+ expect(TIER_MEDIA.starter.maxHeight).toBe(1080);
8
+ expect(TIER_MEDIA.pro.maxHeight).toBe(2160);
9
+ expect(TIER_MEDIA.enterprise.maxHeight).toBe(4320);
10
+ });
11
+ it('hard-caps free/starter and meters overage (PAYG) for pro/enterprise', () => {
12
+ expect(TIER_MEDIA.free.hardCap).toBe(true);
13
+ expect(TIER_MEDIA.starter.hardCap).toBe(true);
14
+ expect(TIER_MEDIA.pro.hardCap).toBe(false);
15
+ expect(TIER_MEDIA.enterprise.hardCap).toBe(false);
16
+ });
17
+ it('sets the approved storage caps', () => {
18
+ expect(TIER_MEDIA.free.storageBytes).toBe(5 * GB);
19
+ expect(TIER_MEDIA.starter.storageBytes).toBe(50 * GB);
20
+ expect(TIER_MEDIA.pro.storageBytes).toBe(250 * GB);
21
+ expect(TIER_MEDIA.enterprise.storageBytes).toBe(1024 * GB);
22
+ });
23
+ it('getMediaLimits falls back to free for an unknown tier', () => {
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ expect(getMediaLimits('bogus')).toEqual(TIER_MEDIA.free);
26
+ });
27
+ it('defines positive PAYG overage rates', () => {
28
+ expect(MEDIA_OVERAGE.storagePerGbMonth).toBeGreaterThan(0);
29
+ expect(MEDIA_OVERAGE.transcodePerMinute).toBeGreaterThan(0);
30
+ });
31
+ });
32
+ //# sourceMappingURL=media.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.test.js","sourceRoot":"","sources":["../../src/__tests__/media.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAElF,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;AAErB,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,8DAA8D;QAC9D,MAAM,CAAC,cAAc,CAAC,OAAc,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { PlayerConfig } from '../types/player.js';
2
+ /** Default player configuration values */
3
+ export declare const DEFAULT_CONFIG: PlayerConfig;
4
+ /** Default sphere geometry parameters */
5
+ export declare const SPHERE_DEFAULTS: {
6
+ readonly radius: 500;
7
+ readonly widthSegments: 64;
8
+ readonly heightSegments: 32;
9
+ };
10
+ /** Camera defaults */
11
+ export declare const CAMERA_DEFAULTS: {
12
+ readonly fov: 75;
13
+ readonly near: 0.1;
14
+ readonly far: 1000;
15
+ readonly dampingFactor: 0.08;
16
+ readonly dragSensitivity: 0.25;
17
+ readonly touchSensitivity: 0.3;
18
+ readonly keyboardPanSpeed: 2;
19
+ readonly zoomSpeed: 0.05;
20
+ };
21
+ /** Controls auto-hide timeout in ms */
22
+ export declare const CONTROLS_HIDE_TIMEOUT = 3000;
23
+ /** Analytics batching intervals in ms */
24
+ export declare const ANALYTICS_BATCH_INTERVAL = 10000;
25
+ export declare const GAZE_SAMPLE_INTERVAL = 333;
26
+ export declare const GAZE_BATCH_INTERVAL = 5000;
27
+ /** Collaborative gaze sharing */
28
+ export declare const COLLAB_GAZE_INTERVAL = 200;
29
+ export declare const COLLAB_GAZE_THRESHOLD = 2;
30
+ export declare const COLLAB_GAZE_LERP_FACTOR = 0.15;
31
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,0CAA0C;AAC1C,eAAO,MAAM,cAAc,EAAE,YA6B5B,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX,sBAAsB;AACtB,eAAO,MAAM,eAAe;;;;;;;;;CASlB,CAAC;AAEX,uCAAuC;AACvC,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C,yCAAyC;AACzC,eAAO,MAAM,wBAAwB,QAAQ,CAAC;AAC9C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,iCAAiC;AACjC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,uBAAuB,OAAO,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { VzFormat } from '../types/formats.js';
2
+ /** Default player configuration values */
3
+ export const DEFAULT_CONFIG = {
4
+ format: VzFormat.MONO_360,
5
+ loop: false,
6
+ muted: false,
7
+ preload: 'metadata',
8
+ fps: 30,
9
+ startLat: 0,
10
+ startLon: 0,
11
+ focalLength: 75,
12
+ minFocalLength: 30,
13
+ maxFocalLength: 120,
14
+ displayMode: 'inline',
15
+ corsFallbackRedirectConfirmation: true,
16
+ seekable: false,
17
+ primaryColor: '#f43f5e',
18
+ secondaryColor: '#1a1a2e',
19
+ hideCompass: false,
20
+ hideVrButton: false,
21
+ hideSettings: false,
22
+ hideFullscreen: false,
23
+ hideControls: false,
24
+ hideTitle: false,
25
+ hideBrandLogo: false,
26
+ hideWatermark: false,
27
+ };
28
+ /** Default sphere geometry parameters */
29
+ export const SPHERE_DEFAULTS = {
30
+ radius: 500,
31
+ widthSegments: 64,
32
+ heightSegments: 32,
33
+ };
34
+ /** Camera defaults */
35
+ export const CAMERA_DEFAULTS = {
36
+ fov: 75,
37
+ near: 0.1,
38
+ far: 1000,
39
+ dampingFactor: 0.08,
40
+ dragSensitivity: 0.25,
41
+ touchSensitivity: 0.3,
42
+ keyboardPanSpeed: 2,
43
+ zoomSpeed: 0.05,
44
+ };
45
+ /** Controls auto-hide timeout in ms */
46
+ export const CONTROLS_HIDE_TIMEOUT = 3000;
47
+ /** Analytics batching intervals in ms */
48
+ export const ANALYTICS_BATCH_INTERVAL = 10000;
49
+ export const GAZE_SAMPLE_INTERVAL = 333; // ~3Hz
50
+ export const GAZE_BATCH_INTERVAL = 5000;
51
+ /** Collaborative gaze sharing */
52
+ export const COLLAB_GAZE_INTERVAL = 200; // 5Hz broadcast
53
+ export const COLLAB_GAZE_THRESHOLD = 2; // Min degrees change to send
54
+ export const COLLAB_GAZE_LERP_FACTOR = 0.15; // Interpolation speed per frame
55
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,0CAA0C;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,MAAM,EAAE,QAAQ,CAAC,QAAQ;IACzB,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,UAAU;IACnB,GAAG,EAAE,EAAE;IAEP,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,GAAG;IAEnB,WAAW,EAAE,QAAQ;IACrB,gCAAgC,EAAE,IAAI;IAEtC,QAAQ,EAAE,KAAK;IAEf,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,SAAS;IAEzB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,KAAK;IACrB,YAAY,EAAE,KAAK;IACnB,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,GAAG;IACX,aAAa,EAAE,EAAE;IACjB,cAAc,EAAE,EAAE;CACV,CAAC;AAEX,sBAAsB;AACtB,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,GAAG;IACT,GAAG,EAAE,IAAI;IACT,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,GAAG;IACrB,gBAAgB,EAAE,CAAC;IACnB,SAAS,EAAE,IAAI;CACP,CAAC;AAEX,uCAAuC;AACvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAE1C,yCAAyC;AACzC,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC,CAAC,OAAO;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,iCAAiC;AACjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC,CAAC,gBAAgB;AACzD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,CAAC,6BAA6B;AACrE,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC,CAAC,gCAAgC"}
@@ -0,0 +1,5 @@
1
+ /** Standard HTML5 media events */
2
+ export declare const MEDIA_EVENTS: readonly ["play", "pause", "playing", "seeking", "seeked", "ended", "loadstart", "progress", "suspend", "abort", "error", "emptied", "stalled", "loadedmetadata", "loadeddata", "canplay", "canplaythrough", "durationchange", "timeupdate", "ratechange", "resize", "volumechange", "waiting"];
3
+ /** Vizor custom events */
4
+ export declare const CUSTOM_EVENTS: readonly ["vz-ready", "vz-loading-start", "vz-loading-progress", "vz-loading-complete", "vz-quality-change", "vz-xr-enter", "vz-xr-exit", "vz-fullscreen-enter", "vz-fullscreen-exit", "vz-orientation-change", "vz-tour-navigate", "vz-chapter-change", "vz-collab-join", "vz-collab-leave", "vz-error"];
5
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/constants/events.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,eAAO,MAAM,YAAY,iSAwBf,CAAC;AAEX,0BAA0B;AAC1B,eAAO,MAAM,aAAa,2SAgBhB,CAAC"}
@@ -0,0 +1,45 @@
1
+ /** Standard HTML5 media events */
2
+ export const MEDIA_EVENTS = [
3
+ 'play',
4
+ 'pause',
5
+ 'playing',
6
+ 'seeking',
7
+ 'seeked',
8
+ 'ended',
9
+ 'loadstart',
10
+ 'progress',
11
+ 'suspend',
12
+ 'abort',
13
+ 'error',
14
+ 'emptied',
15
+ 'stalled',
16
+ 'loadedmetadata',
17
+ 'loadeddata',
18
+ 'canplay',
19
+ 'canplaythrough',
20
+ 'durationchange',
21
+ 'timeupdate',
22
+ 'ratechange',
23
+ 'resize',
24
+ 'volumechange',
25
+ 'waiting',
26
+ ];
27
+ /** Vizor custom events */
28
+ export const CUSTOM_EVENTS = [
29
+ 'vz-ready',
30
+ 'vz-loading-start',
31
+ 'vz-loading-progress',
32
+ 'vz-loading-complete',
33
+ 'vz-quality-change',
34
+ 'vz-xr-enter',
35
+ 'vz-xr-exit',
36
+ 'vz-fullscreen-enter',
37
+ 'vz-fullscreen-exit',
38
+ 'vz-orientation-change',
39
+ 'vz-tour-navigate',
40
+ 'vz-chapter-change',
41
+ 'vz-collab-join',
42
+ 'vz-collab-leave',
43
+ 'vz-error',
44
+ ];
45
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/constants/events.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM;IACN,OAAO;IACP,SAAS;IACT,SAAS;IACT,QAAQ;IACR,OAAO;IACP,WAAW;IACX,UAAU;IACV,SAAS;IACT,OAAO;IACP,OAAO;IACP,SAAS;IACT,SAAS;IACT,gBAAgB;IAChB,YAAY;IACZ,SAAS;IACT,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,YAAY;IACZ,QAAQ;IACR,cAAc;IACd,SAAS;CACD,CAAC;AAEX,0BAA0B;AAC1B,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU;IACV,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,mBAAmB;IACnB,aAAa;IACb,YAAY;IACZ,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;IACvB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,UAAU;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { VzFormat } from '../types/formats.js';
2
+ import type { FormatMeta } from '../types/formats.js';
3
+ /** Central format registry. Adding a new format to Vizor starts here. */
4
+ export declare const FORMAT_REGISTRY: Record<VzFormat, FormatMeta>;
5
+ /** Get format metadata. Returns undefined for unknown formats. */
6
+ export declare function getFormatMeta(format: VzFormat | string): FormatMeta | undefined;
7
+ /** Parse a format string into the VzFormat enum. Returns undefined for invalid strings. */
8
+ export declare function parseFormat(format: string): VzFormat | undefined;
9
+ //# sourceMappingURL=formats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/constants/formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,yEAAyE;AACzE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CA+LxD,CAAC;AAEF,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAE/E;AAED,2FAA2F;AAC3F,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAKhE"}
@@ -0,0 +1,206 @@
1
+ import { VzFormat } from '../types/formats.js';
2
+ /** Central format registry. Adding a new format to Vizor starts here. */
3
+ export const FORMAT_REGISTRY = {
4
+ [VzFormat.MONO_360]: {
5
+ format: VzFormat.MONO_360,
6
+ projection: 'equirect',
7
+ stereoMode: 'mono',
8
+ fovH: 360,
9
+ fovV: 180,
10
+ supportsVideo: true,
11
+ supportsImage: true,
12
+ isFlat: false,
13
+ },
14
+ [VzFormat.MONO_FLAT]: {
15
+ format: VzFormat.MONO_FLAT,
16
+ projection: 'flat',
17
+ stereoMode: 'mono',
18
+ fovH: 0,
19
+ fovV: 0,
20
+ supportsVideo: true,
21
+ supportsImage: true,
22
+ isFlat: true,
23
+ },
24
+ [VzFormat.STEREO_180_LR]: {
25
+ format: VzFormat.STEREO_180_LR,
26
+ projection: 'equirect',
27
+ stereoMode: 'sbs',
28
+ fovH: 180,
29
+ fovV: 180,
30
+ supportsVideo: true,
31
+ supportsImage: true,
32
+ isFlat: false,
33
+ },
34
+ [VzFormat.STEREO_180_TB]: {
35
+ format: VzFormat.STEREO_180_TB,
36
+ projection: 'equirect',
37
+ stereoMode: 'tb',
38
+ fovH: 180,
39
+ fovV: 180,
40
+ supportsVideo: true,
41
+ supportsImage: true,
42
+ isFlat: false,
43
+ },
44
+ [VzFormat.STEREO_180_LR_SPHERICAL]: {
45
+ format: VzFormat.STEREO_180_LR_SPHERICAL,
46
+ projection: 'spherical',
47
+ stereoMode: 'sbs',
48
+ fovH: 180,
49
+ fovV: 180,
50
+ supportsVideo: true,
51
+ supportsImage: true,
52
+ isFlat: false,
53
+ },
54
+ [VzFormat.STEREO_180_TB_SPHERICAL]: {
55
+ format: VzFormat.STEREO_180_TB_SPHERICAL,
56
+ projection: 'spherical',
57
+ stereoMode: 'tb',
58
+ fovH: 180,
59
+ fovV: 180,
60
+ supportsVideo: true,
61
+ supportsImage: true,
62
+ isFlat: false,
63
+ },
64
+ [VzFormat.STEREO_360_LR]: {
65
+ format: VzFormat.STEREO_360_LR,
66
+ projection: 'equirect',
67
+ stereoMode: 'sbs',
68
+ fovH: 360,
69
+ fovV: 180,
70
+ supportsVideo: true,
71
+ supportsImage: true,
72
+ isFlat: false,
73
+ },
74
+ [VzFormat.STEREO_360_TB]: {
75
+ format: VzFormat.STEREO_360_TB,
76
+ projection: 'equirect',
77
+ stereoMode: 'tb',
78
+ fovH: 360,
79
+ fovV: 180,
80
+ supportsVideo: true,
81
+ supportsImage: true,
82
+ isFlat: false,
83
+ },
84
+ [VzFormat.STEREO_FLAT_LR]: {
85
+ format: VzFormat.STEREO_FLAT_LR,
86
+ projection: 'flat',
87
+ stereoMode: 'sbs',
88
+ fovH: 0,
89
+ fovV: 0,
90
+ supportsVideo: true,
91
+ supportsImage: false,
92
+ isFlat: true,
93
+ },
94
+ [VzFormat.STEREO_FLAT_LR_SQUARE]: {
95
+ format: VzFormat.STEREO_FLAT_LR_SQUARE,
96
+ projection: 'flat',
97
+ stereoMode: 'sbs',
98
+ fovH: 0,
99
+ fovV: 0,
100
+ supportsVideo: true,
101
+ supportsImage: false,
102
+ isFlat: true,
103
+ },
104
+ [VzFormat.STEREO_FLAT_TB]: {
105
+ format: VzFormat.STEREO_FLAT_TB,
106
+ projection: 'flat',
107
+ stereoMode: 'tb',
108
+ fovH: 0,
109
+ fovV: 0,
110
+ supportsVideo: true,
111
+ supportsImage: false,
112
+ isFlat: true,
113
+ },
114
+ [VzFormat.STEREO_FLAT_TB_SQUARE]: {
115
+ format: VzFormat.STEREO_FLAT_TB_SQUARE,
116
+ projection: 'flat',
117
+ stereoMode: 'tb',
118
+ fovH: 0,
119
+ fovV: 0,
120
+ supportsVideo: true,
121
+ supportsImage: false,
122
+ isFlat: true,
123
+ },
124
+ [VzFormat.MONO_CUBEMAP]: {
125
+ format: VzFormat.MONO_CUBEMAP,
126
+ projection: 'cubemap',
127
+ stereoMode: 'mono',
128
+ fovH: 360,
129
+ fovV: 180,
130
+ supportsVideo: true,
131
+ supportsImage: true,
132
+ isFlat: false,
133
+ },
134
+ [VzFormat.STEREO_CUBEMAP]: {
135
+ format: VzFormat.STEREO_CUBEMAP,
136
+ projection: 'cubemap',
137
+ stereoMode: 'tb',
138
+ fovH: 360,
139
+ fovV: 180,
140
+ supportsVideo: true,
141
+ supportsImage: true,
142
+ isFlat: false,
143
+ },
144
+ [VzFormat.MONO_EAC]: {
145
+ format: VzFormat.MONO_EAC,
146
+ projection: 'eac',
147
+ stereoMode: 'mono',
148
+ fovH: 360,
149
+ fovV: 180,
150
+ supportsVideo: true,
151
+ supportsImage: true,
152
+ isFlat: false,
153
+ },
154
+ [VzFormat.STEREO_EAC_TB]: {
155
+ format: VzFormat.STEREO_EAC_TB,
156
+ projection: 'eac',
157
+ stereoMode: 'tb',
158
+ fovH: 360,
159
+ fovV: 180,
160
+ supportsVideo: true,
161
+ supportsImage: true,
162
+ isFlat: false,
163
+ },
164
+ [VzFormat.MONO_FISHEYE]: {
165
+ format: VzFormat.MONO_FISHEYE,
166
+ projection: 'fisheye',
167
+ stereoMode: 'mono',
168
+ fovH: 360,
169
+ fovV: 180,
170
+ supportsVideo: true,
171
+ supportsImage: true,
172
+ isFlat: false,
173
+ },
174
+ [VzFormat.STEREO_FISHEYE_LR]: {
175
+ format: VzFormat.STEREO_FISHEYE_LR,
176
+ projection: 'fisheye',
177
+ stereoMode: 'sbs',
178
+ fovH: 360,
179
+ fovV: 180,
180
+ supportsVideo: true,
181
+ supportsImage: true,
182
+ isFlat: false,
183
+ },
184
+ [VzFormat.CARDBOARD_PHOTO]: {
185
+ format: VzFormat.CARDBOARD_PHOTO,
186
+ projection: 'equirect',
187
+ stereoMode: 'sbs',
188
+ fovH: 360,
189
+ fovV: 180,
190
+ supportsVideo: false,
191
+ supportsImage: true,
192
+ isFlat: false,
193
+ },
194
+ };
195
+ /** Get format metadata. Returns undefined for unknown formats. */
196
+ export function getFormatMeta(format) {
197
+ return FORMAT_REGISTRY[format];
198
+ }
199
+ /** Parse a format string into the VzFormat enum. Returns undefined for invalid strings. */
200
+ export function parseFormat(format) {
201
+ if (format in VzFormat) {
202
+ return format;
203
+ }
204
+ return undefined;
205
+ }
206
+ //# sourceMappingURL=formats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/constants/formats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { FORMAT_REGISTRY, getFormatMeta, parseFormat } from './formats.js';
2
+ export { DEFAULT_CONFIG, SPHERE_DEFAULTS, CAMERA_DEFAULTS, CONTROLS_HIDE_TIMEOUT, ANALYTICS_BATCH_INTERVAL, GAZE_SAMPLE_INTERVAL, GAZE_BATCH_INTERVAL, COLLAB_GAZE_INTERVAL, COLLAB_GAZE_THRESHOLD, COLLAB_GAZE_LERP_FACTOR } from './defaults.js';
3
+ export { TIER_FEATURES, getFeaturesForTier, TIER_QUOTAS } from './license.js';
4
+ export { TIER_MEDIA, MEDIA_OVERAGE, getMediaLimits, type MediaTierLimits } from './media.js';
5
+ export { MEDIA_EVENTS, CUSTOM_EVENTS } from './events.js';
6
+ export { DEFAULT_KEYBINDINGS, SEEK_STEP, SEEK_STEP_LARGE, VOLUME_STEP, PLAYBACK_RATE_STEP } from './keybindings.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACnP,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { FORMAT_REGISTRY, getFormatMeta, parseFormat } from './formats.js';
2
+ export { DEFAULT_CONFIG, SPHERE_DEFAULTS, CAMERA_DEFAULTS, CONTROLS_HIDE_TIMEOUT, ANALYTICS_BATCH_INTERVAL, GAZE_SAMPLE_INTERVAL, GAZE_BATCH_INTERVAL, COLLAB_GAZE_INTERVAL, COLLAB_GAZE_THRESHOLD, COLLAB_GAZE_LERP_FACTOR } from './defaults.js';
3
+ export { TIER_FEATURES, getFeaturesForTier, TIER_QUOTAS } from './license.js';
4
+ export { TIER_MEDIA, MEDIA_OVERAGE, getMediaLimits } from './media.js';
5
+ export { MEDIA_EVENTS, CUSTOM_EVENTS } from './events.js';
6
+ export { DEFAULT_KEYBINDINGS, SEEK_STEP, SEEK_STEP_LARGE, VOLUME_STEP, PLAYBACK_RATE_STEP } from './keybindings.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACnP,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** Default keyboard shortcuts for the player */
2
+ export declare const DEFAULT_KEYBINDINGS: Record<string, string>;
3
+ /** Seek amount in seconds for arrow key navigation */
4
+ export declare const SEEK_STEP = 5;
5
+ export declare const SEEK_STEP_LARGE = 10;
6
+ /** Volume step for arrow key changes */
7
+ export declare const VOLUME_STEP = 0.05;
8
+ /** Playback rate step */
9
+ export declare const PLAYBACK_RATE_STEP = 0.25;
10
+ //# sourceMappingURL=keybindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keybindings.d.ts","sourceRoot":"","sources":["../../src/constants/keybindings.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBtD,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,wCAAwC;AACxC,eAAO,MAAM,WAAW,OAAO,CAAC;AAEhC,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,OAAO,CAAC"}
@@ -0,0 +1,26 @@
1
+ /** Default keyboard shortcuts for the player */
2
+ export const DEFAULT_KEYBINDINGS = {
3
+ 'Space': 'togglePlay',
4
+ 'KeyK': 'togglePlay',
5
+ 'ArrowLeft': 'seekBackward',
6
+ 'ArrowRight': 'seekForward',
7
+ 'ArrowUp': 'volumeUp',
8
+ 'ArrowDown': 'volumeDown',
9
+ 'KeyM': 'toggleMute',
10
+ 'KeyF': 'toggleFullscreen',
11
+ 'KeyV': 'toggleVR',
12
+ 'Escape': 'exitFullscreen',
13
+ 'Home': 'seekStart',
14
+ 'End': 'seekEnd',
15
+ 'Comma': 'decreasePlaybackRate',
16
+ 'Period': 'increasePlaybackRate',
17
+ 'KeyC': 'toggleCaptions',
18
+ };
19
+ /** Seek amount in seconds for arrow key navigation */
20
+ export const SEEK_STEP = 5;
21
+ export const SEEK_STEP_LARGE = 10;
22
+ /** Volume step for arrow key changes */
23
+ export const VOLUME_STEP = 0.05;
24
+ /** Playback rate step */
25
+ export const PLAYBACK_RATE_STEP = 0.25;
26
+ //# sourceMappingURL=keybindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../src/constants/keybindings.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,YAAY;IACpB,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,aAAa;IAC3B,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,YAAY;IACzB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,UAAU;IAClB,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,sBAAsB;IAChC,MAAM,EAAE,gBAAgB;CACzB,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAElC,wCAAwC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEhC,yBAAyB;AACzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { LicenseTier, FeatureFlags } from '../types/license.js';
2
+ /** Feature flags for each license tier */
3
+ export declare const TIER_FEATURES: Record<LicenseTier, FeatureFlags>;
4
+ /** Get feature flags for a given tier */
5
+ export declare function getFeaturesForTier(tier: LicenseTier): FeatureFlags;
6
+ /** Monthly view quotas per tier */
7
+ export declare const TIER_QUOTAS: Record<LicenseTier, number>;
8
+ //# sourceMappingURL=license.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/constants/license.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAErE,0CAA0C;AAC1C,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,YAAY,CAiG3D,CAAC;AAEF,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAElE;AAED,mCAAmC;AACnC,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAKnD,CAAC"}
@@ -0,0 +1,111 @@
1
+ /** Feature flags for each license tier */
2
+ export const TIER_FEATURES = {
3
+ free: {
4
+ stereoFormats: false,
5
+ formats180: false,
6
+ adaptiveStreaming: false,
7
+ qualitySelector: false,
8
+ tours: false,
9
+ cinema: false,
10
+ hub: false,
11
+ spatialAudio: false,
12
+ webxr: false,
13
+ customBranding: false,
14
+ brandLogoColors: false,
15
+ analytics: false,
16
+ analyticsHeatmaps: false,
17
+ collaborative: false,
18
+ chapters: false,
19
+ aiChaptering: false,
20
+ captions: true,
21
+ keyboardShortcuts: true,
22
+ playlist: false,
23
+ drm: false,
24
+ webhooks: false,
25
+ removeWatermark: false,
26
+ },
27
+ starter: {
28
+ stereoFormats: true,
29
+ formats180: true,
30
+ adaptiveStreaming: true,
31
+ qualitySelector: true,
32
+ tours: false,
33
+ cinema: false,
34
+ hub: false,
35
+ spatialAudio: false,
36
+ webxr: true,
37
+ customBranding: true,
38
+ brandLogoColors: false,
39
+ analytics: true,
40
+ analyticsHeatmaps: false,
41
+ collaborative: false,
42
+ chapters: false,
43
+ aiChaptering: false,
44
+ captions: true,
45
+ keyboardShortcuts: true,
46
+ playlist: false,
47
+ drm: false,
48
+ webhooks: false,
49
+ removeWatermark: true,
50
+ },
51
+ pro: {
52
+ stereoFormats: true,
53
+ formats180: true,
54
+ adaptiveStreaming: true,
55
+ qualitySelector: true,
56
+ tours: true,
57
+ cinema: true,
58
+ hub: false,
59
+ spatialAudio: true,
60
+ webxr: true,
61
+ customBranding: true,
62
+ brandLogoColors: true,
63
+ analytics: true,
64
+ analyticsHeatmaps: true,
65
+ collaborative: false,
66
+ chapters: true,
67
+ aiChaptering: false,
68
+ captions: true,
69
+ keyboardShortcuts: true,
70
+ playlist: true,
71
+ drm: false,
72
+ webhooks: true,
73
+ removeWatermark: true,
74
+ },
75
+ enterprise: {
76
+ stereoFormats: true,
77
+ formats180: true,
78
+ adaptiveStreaming: true,
79
+ qualitySelector: true,
80
+ tours: true,
81
+ cinema: true,
82
+ hub: true,
83
+ spatialAudio: true,
84
+ webxr: true,
85
+ customBranding: true,
86
+ brandLogoColors: true,
87
+ analytics: true,
88
+ analyticsHeatmaps: true,
89
+ collaborative: true,
90
+ chapters: true,
91
+ aiChaptering: true,
92
+ captions: true,
93
+ keyboardShortcuts: true,
94
+ playlist: true,
95
+ drm: true,
96
+ webhooks: true,
97
+ removeWatermark: true,
98
+ },
99
+ };
100
+ /** Get feature flags for a given tier */
101
+ export function getFeaturesForTier(tier) {
102
+ return TIER_FEATURES[tier];
103
+ }
104
+ /** Monthly view quotas per tier */
105
+ export const TIER_QUOTAS = {
106
+ free: 100,
107
+ starter: 10_000,
108
+ pro: 100_000,
109
+ enterprise: Infinity,
110
+ };
111
+ //# sourceMappingURL=license.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/constants/license.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { LicenseTier } from '../types/license.js';
2
+ export interface MediaTierLimits {
3
+ /** Max rendition height produced for this tier (quality cap; never upscales). */
4
+ maxHeight: number;
5
+ /** Storage cap in bytes. Hard-blocked on hardCap tiers; metered overage otherwise. */
6
+ storageBytes: number;
7
+ /** Transcode minutes allowed per calendar month. */
8
+ transcodeMinutes: number;
9
+ /** true = block when a limit is exceeded; false = allow and meter overage (PAYG). */
10
+ hardCap: boolean;
11
+ }
12
+ /**
13
+ * Per-tier media limits — the approved unit economics. Free/Starter are hard
14
+ * capped (block when exceeded); Pro/Enterprise allow overage and meter it.
15
+ */
16
+ export declare const TIER_MEDIA: Record<LicenseTier, MediaTierLimits>;
17
+ /** Pay-as-you-go overage rates (USD), billed on PAYG tiers only. */
18
+ export declare const MEDIA_OVERAGE: {
19
+ readonly storagePerGbMonth: 0.05;
20
+ readonly transcodePerMinute: 0.05;
21
+ };
22
+ export declare function getMediaLimits(tier: LicenseTier): MediaTierLimits;
23
+ //# sourceMappingURL=media.d.ts.map