@vizor-vr/shared 0.1.0 → 0.2.1

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 (47) hide show
  1. package/README.md +4 -0
  2. package/dist/__tests__/pricing.test.d.ts +2 -0
  3. package/dist/__tests__/pricing.test.d.ts.map +1 -0
  4. package/dist/__tests__/pricing.test.js +18 -0
  5. package/dist/__tests__/pricing.test.js.map +1 -0
  6. package/dist/constants/defaults.d.ts +8 -0
  7. package/dist/constants/defaults.d.ts.map +1 -1
  8. package/dist/constants/defaults.js +10 -0
  9. package/dist/constants/defaults.js.map +1 -1
  10. package/dist/constants/events.d.ts +1 -1
  11. package/dist/constants/events.d.ts.map +1 -1
  12. package/dist/constants/events.js +1 -0
  13. package/dist/constants/events.js.map +1 -1
  14. package/dist/constants/index.d.ts +3 -1
  15. package/dist/constants/index.d.ts.map +1 -1
  16. package/dist/constants/index.js +3 -1
  17. package/dist/constants/index.js.map +1 -1
  18. package/dist/constants/license.d.ts.map +1 -1
  19. package/dist/constants/license.js +4 -0
  20. package/dist/constants/license.js.map +1 -1
  21. package/dist/constants/plans.d.ts +49 -0
  22. package/dist/constants/plans.d.ts.map +1 -0
  23. package/dist/constants/plans.js +116 -0
  24. package/dist/constants/plans.js.map +1 -0
  25. package/dist/constants/pricing.d.ts +14 -0
  26. package/dist/constants/pricing.d.ts.map +1 -0
  27. package/dist/constants/pricing.js +13 -0
  28. package/dist/constants/pricing.js.map +1 -0
  29. package/dist/types/analytics.d.ts +3 -1
  30. package/dist/types/analytics.d.ts.map +1 -1
  31. package/dist/types/delivery.d.ts +100 -0
  32. package/dist/types/delivery.d.ts.map +1 -0
  33. package/dist/types/delivery.js +2 -0
  34. package/dist/types/delivery.js.map +1 -0
  35. package/dist/types/events.d.ts +7 -1
  36. package/dist/types/events.d.ts.map +1 -1
  37. package/dist/types/index.d.ts +2 -0
  38. package/dist/types/index.d.ts.map +1 -1
  39. package/dist/types/license.d.ts +2 -0
  40. package/dist/types/license.d.ts.map +1 -1
  41. package/dist/types/plan.d.ts +27 -0
  42. package/dist/types/plan.d.ts.map +1 -0
  43. package/dist/types/plan.js +2 -0
  44. package/dist/types/plan.js.map +1 -0
  45. package/dist/types/player.d.ts +8 -0
  46. package/dist/types/player.d.ts.map +1 -1
  47. package/package.json +9 -1
package/README.md CHANGED
@@ -16,6 +16,10 @@ import { VZ_FORMATS, type LicenseTier, TIER_FEATURES } from '@vizor-vr/shared';
16
16
 
17
17
  This package is primarily an internal dependency of the Vizor packages; it is published so the framework wrappers and player share a single source of truth for types and constants.
18
18
 
19
+ ## Security
20
+
21
+ See the monorepo [security policy](https://github.com/vizor-vr/vizor-vr/blob/main/SECURITY.md) for how to report vulnerabilities (security@utgnetworks.com).
22
+
19
23
  ## License
20
24
 
21
25
  MIT — see [LICENSE](./LICENSE).
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pricing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/pricing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { TIER_PRICING } from '../constants/pricing.js';
3
+ describe('TIER_PRICING — single source of truth (USD cents)', () => {
4
+ it('locks the canonical monthly + yearly prices for every tier', () => {
5
+ expect(TIER_PRICING).toEqual({
6
+ free: { monthly: 0, yearly: 0 },
7
+ starter: { monthly: 2900, yearly: 29000 },
8
+ pro: { monthly: 7900, yearly: 79000 },
9
+ enterprise: { monthly: 19900, yearly: 199000 },
10
+ });
11
+ });
12
+ it('prices the annual plan as two months free (monthly × 10)', () => {
13
+ for (const tier of ['starter', 'pro', 'enterprise']) {
14
+ expect(TIER_PRICING[tier].yearly).toBe(TIER_PRICING[tier].monthly * 10);
15
+ }
16
+ });
17
+ });
18
+ //# sourceMappingURL=pricing.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.test.js","sourceRoot":"","sources":["../../src/__tests__/pricing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IACjE,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;YAC3B,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;YAC/B,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;YACzC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;YACrC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CAAU,EAAE,CAAC;YAC7D,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -28,4 +28,12 @@ export declare const GAZE_BATCH_INTERVAL = 5000;
28
28
  export declare const COLLAB_GAZE_INTERVAL = 200;
29
29
  export declare const COLLAB_GAZE_THRESHOLD = 2;
30
30
  export declare const COLLAB_GAZE_LERP_FACTOR = 0.15;
31
+ /**
32
+ * The published player version embeds pin to (WS-D). Single source of truth
33
+ * for the embed builder, the hosted /embed iframe page, and integrations —
34
+ * a drift-lock test in packages/player asserts it matches package.json.
35
+ */
36
+ export declare const PLAYER_VERSION = "0.2.1";
37
+ /** Pinned CDN URL of the self-registering player bundle. */
38
+ export declare const PLAYER_CDN_SCRIPT_URL = "https://unpkg.com/@vizor-vr/player@0.2.1/dist/register.js";
31
39
  //# sourceMappingURL=defaults.d.ts.map
@@ -1 +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"}
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,YA+B5B,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;AAE5C;;;;GAIG;AACH,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,4DAA4D;AAC5D,eAAO,MAAM,qBAAqB,8DAA0E,CAAC"}
@@ -4,6 +4,8 @@ export const DEFAULT_CONFIG = {
4
4
  format: VzFormat.MONO_360,
5
5
  loop: false,
6
6
  muted: false,
7
+ autoplay: false,
8
+ lensAngle: 180,
7
9
  preload: 'metadata',
8
10
  fps: 30,
9
11
  startLat: 0,
@@ -52,4 +54,12 @@ export const GAZE_BATCH_INTERVAL = 5000;
52
54
  export const COLLAB_GAZE_INTERVAL = 200; // 5Hz broadcast
53
55
  export const COLLAB_GAZE_THRESHOLD = 2; // Min degrees change to send
54
56
  export const COLLAB_GAZE_LERP_FACTOR = 0.15; // Interpolation speed per frame
57
+ /**
58
+ * The published player version embeds pin to (WS-D). Single source of truth
59
+ * for the embed builder, the hosted /embed iframe page, and integrations —
60
+ * a drift-lock test in packages/player asserts it matches package.json.
61
+ */
62
+ export const PLAYER_VERSION = '0.2.1';
63
+ /** Pinned CDN URL of the self-registering player bundle. */
64
+ export const PLAYER_CDN_SCRIPT_URL = `https://unpkg.com/@vizor-vr/player@${PLAYER_VERSION}/dist/register.js`;
55
65
  //# sourceMappingURL=defaults.js.map
@@ -1 +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"}
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,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,GAAG;IACd,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;AAE7E;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,4DAA4D;AAC5D,MAAM,CAAC,MAAM,qBAAqB,GAAG,sCAAsC,cAAc,mBAAmB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /** Standard HTML5 media events */
2
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
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"];
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-hub-select", "vz-collab-join", "vz-collab-leave", "vz-error"];
5
5
  //# sourceMappingURL=events.d.ts.map
@@ -1 +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"}
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,4TAiBhB,CAAC"}
@@ -38,6 +38,7 @@ export const CUSTOM_EVENTS = [
38
38
  'vz-orientation-change',
39
39
  'vz-tour-navigate',
40
40
  'vz-chapter-change',
41
+ 'vz-hub-select',
41
42
  'vz-collab-join',
42
43
  'vz-collab-leave',
43
44
  'vz-error',
@@ -1 +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"}
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,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,UAAU;CACF,CAAC"}
@@ -1,7 +1,9 @@
1
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';
2
+ export { PLAYER_VERSION, PLAYER_CDN_SCRIPT_URL, 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
3
  export { TIER_FEATURES, getFeaturesForTier, TIER_QUOTAS } from './license.js';
4
+ export { TIER_PRICING, type TierPrice } from './pricing.js';
4
5
  export { TIER_MEDIA, MEDIA_OVERAGE, getMediaLimits, type MediaTierLimits } from './media.js';
6
+ export { getSeedPlan, getPlayerSeedPlan, getSeedPlanByKey, basePlanTier, planTierRank, SEED_PLAN_KEYS, PLAYER_SEED_PLAN_KEYS, ALL_SEED_PLAN_KEYS, type SeedPlan, type PlayerPlanKey, } from './plans.js';
5
7
  export { MEDIA_EVENTS, CUSTOM_EVENTS } from './events.js';
6
8
  export { DEFAULT_KEYBINDINGS, SEEK_STEP, SEEK_STEP_LARGE, VOLUME_STEP, PLAYBACK_RATE_STEP } from './keybindings.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC1R,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7F,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,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"}
@@ -1,7 +1,9 @@
1
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';
2
+ export { PLAYER_VERSION, PLAYER_CDN_SCRIPT_URL, 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
3
  export { TIER_FEATURES, getFeaturesForTier, TIER_QUOTAS } from './license.js';
4
+ export { TIER_PRICING } from './pricing.js';
4
5
  export { TIER_MEDIA, MEDIA_OVERAGE, getMediaLimits } from './media.js';
6
+ export { getSeedPlan, getPlayerSeedPlan, getSeedPlanByKey, basePlanTier, planTierRank, SEED_PLAN_KEYS, PLAYER_SEED_PLAN_KEYS, ALL_SEED_PLAN_KEYS, } from './plans.js';
5
7
  export { MEDIA_EVENTS, CUSTOM_EVENTS } from './events.js';
6
8
  export { DEFAULT_KEYBINDINGS, SEEK_STEP, SEEK_STEP_LARGE, VOLUME_STEP, PLAYBACK_RATE_STEP } from './keybindings.js';
7
9
  //# sourceMappingURL=index.js.map
@@ -1 +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"}
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,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC1R,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAkB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAwB,MAAM,YAAY,CAAC;AAC7F,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GAGnB,MAAM,YAAY,CAAC;AACpB,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"}
@@ -1 +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"}
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,CAqG3D,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"}
@@ -23,6 +23,7 @@ export const TIER_FEATURES = {
23
23
  drm: false,
24
24
  webhooks: false,
25
25
  removeWatermark: false,
26
+ animatedPreviews: false,
26
27
  },
27
28
  starter: {
28
29
  stereoFormats: true,
@@ -47,6 +48,7 @@ export const TIER_FEATURES = {
47
48
  drm: false,
48
49
  webhooks: false,
49
50
  removeWatermark: true,
51
+ animatedPreviews: true,
50
52
  },
51
53
  pro: {
52
54
  stereoFormats: true,
@@ -71,6 +73,7 @@ export const TIER_FEATURES = {
71
73
  drm: false,
72
74
  webhooks: true,
73
75
  removeWatermark: true,
76
+ animatedPreviews: true,
74
77
  },
75
78
  enterprise: {
76
79
  stereoFormats: true,
@@ -95,6 +98,7 @@ export const TIER_FEATURES = {
95
98
  drm: true,
96
99
  webhooks: true,
97
100
  removeWatermark: true,
101
+ animatedPreviews: true,
98
102
  },
99
103
  };
100
104
  /** Get feature flags for a given tier */
@@ -1 +1 @@
1
- {"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/constants/license.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/constants/license.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { LicenseTier, FeatureFlags } from '../types/license.js';
2
+ import type { PlanQuotas, PlanOverageRates, ProductType } from '../types/plan.js';
3
+ /**
4
+ * Seed / fallback plan data derived from the compile-time tier constants.
5
+ *
6
+ * Post WS-A the DB `plans` table is the runtime source of truth for tier
7
+ * economics; these become (a) the seed rows written at db:setup and (b) the
8
+ * PlanService fallback when a DB row is absent (fresh/empty DB, tests). Editing
9
+ * a plan in admin overrides these at runtime without a redeploy.
10
+ */
11
+ export interface SeedPlan {
12
+ key: string;
13
+ name: string;
14
+ productType: ProductType;
15
+ active: boolean;
16
+ sortOrder: number;
17
+ features: FeatureFlags;
18
+ quotas: PlanQuotas;
19
+ overageRates: PlanOverageRates;
20
+ priceMonthlyCents: number;
21
+ priceYearlyCents: number;
22
+ }
23
+ export declare const SEED_PLAN_KEYS: LicenseTier[];
24
+ /** Player-only SKU plan keys (WS-B) — `player_<stream namesake>`. */
25
+ export declare const PLAYER_SEED_PLAN_KEYS: readonly ["player_starter", "player_pro", "player_enterprise"];
26
+ export type PlayerPlanKey = (typeof PLAYER_SEED_PLAN_KEYS)[number];
27
+ /** Every seeded plan key, stream tiers first (matches seed sortOrder). */
28
+ export declare const ALL_SEED_PLAN_KEYS: readonly string[];
29
+ /**
30
+ * The stream-tier a plan key ranks as: stream keys rank as themselves, player
31
+ * keys as their namesake (`player_pro` → `pro`), anything unknown as `free`.
32
+ * This is the comparison basis for the WS-B entitlement rule
33
+ * effective player tier = max(org.plan, org.playerPlan).
34
+ */
35
+ export declare function basePlanTier(key: string | null | undefined): LicenseTier;
36
+ /** Numeric rank of a plan key's base tier (free 0 … enterprise 3). */
37
+ export declare function planTierRank(key: string | null | undefined): number;
38
+ /** The default plan data for a stream tier, assembled from the shared constants. */
39
+ export declare function getSeedPlan(key: LicenseTier): SeedPlan;
40
+ /**
41
+ * Seed data for a player-only SKU tier (WS-B): the SAME feature flags as its
42
+ * stream namesake, zeroed media/stream quotas (player-only customers self-host
43
+ * their media; stream-side quotas keep reading org.plan), and — [PAUL]
44
+ * placeholder, MUST CONFIRM before launch — prices at 50% of the namesake.
45
+ */
46
+ export declare function getPlayerSeedPlan(key: PlayerPlanKey): SeedPlan;
47
+ /** Seed data for ANY seeded plan key (stream tier or player SKU). */
48
+ export declare function getSeedPlanByKey(key: string): SeedPlan;
49
+ //# sourceMappingURL=plans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../src/constants/plans.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKlF;;;;;;;GAOG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc,EAAE,WAAW,EAA6C,CAAC;AAEtF,qEAAqE;AACrE,eAAO,MAAM,qBAAqB,gEAAiE,CAAC;AACpG,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAkD,CAAC;AAInG;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAIxE;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEnE;AAiBD,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,QAAQ,CA6BtD;AAaD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,QAAQ,CAqB9D;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAKtD"}
@@ -0,0 +1,116 @@
1
+ import { TIER_FEATURES, TIER_QUOTAS } from './license.js';
2
+ import { TIER_MEDIA, MEDIA_OVERAGE } from './media.js';
3
+ import { TIER_PRICING } from './pricing.js';
4
+ export const SEED_PLAN_KEYS = ['free', 'starter', 'pro', 'enterprise'];
5
+ /** Player-only SKU plan keys (WS-B) — `player_<stream namesake>`. */
6
+ export const PLAYER_SEED_PLAN_KEYS = ['player_starter', 'player_pro', 'player_enterprise'];
7
+ /** Every seeded plan key, stream tiers first (matches seed sortOrder). */
8
+ export const ALL_SEED_PLAN_KEYS = [...SEED_PLAN_KEYS, ...PLAYER_SEED_PLAN_KEYS];
9
+ const TIER_ORDER = { free: 0, starter: 1, pro: 2, enterprise: 3 };
10
+ /**
11
+ * The stream-tier a plan key ranks as: stream keys rank as themselves, player
12
+ * keys as their namesake (`player_pro` → `pro`), anything unknown as `free`.
13
+ * This is the comparison basis for the WS-B entitlement rule
14
+ * effective player tier = max(org.plan, org.playerPlan).
15
+ */
16
+ export function basePlanTier(key) {
17
+ if (!key)
18
+ return 'free';
19
+ const base = key.startsWith('player_') ? key.slice('player_'.length) : key;
20
+ return SEED_PLAN_KEYS.includes(base) ? base : 'free';
21
+ }
22
+ /** Numeric rank of a plan key's base tier (free 0 … enterprise 3). */
23
+ export function planTierRank(key) {
24
+ return TIER_ORDER[basePlanTier(key)];
25
+ }
26
+ const TIER_NAME = {
27
+ free: 'Free',
28
+ starter: 'Starter',
29
+ pro: 'Pro',
30
+ enterprise: 'Enterprise',
31
+ };
32
+ // [PAUL] placeholders — confirm before launch (WS-C). Included monthly delivery
33
+ // GB per tier, ascending; delivery overage rate is on overageRates below.
34
+ const INCLUDED_DELIVERY_GB = {
35
+ free: 10,
36
+ starter: 100,
37
+ pro: 1000,
38
+ enterprise: 5000,
39
+ };
40
+ /** The default plan data for a stream tier, assembled from the shared constants. */
41
+ export function getSeedPlan(key) {
42
+ const media = TIER_MEDIA[key];
43
+ const views = TIER_QUOTAS[key];
44
+ return {
45
+ key,
46
+ name: TIER_NAME[key],
47
+ productType: 'stream',
48
+ active: true,
49
+ sortOrder: TIER_ORDER[key],
50
+ features: TIER_FEATURES[key],
51
+ quotas: {
52
+ // Infinity (enterprise) can't live in a DB integer → null sentinel.
53
+ monthlyViews: Number.isFinite(views) ? views : null,
54
+ storageBytes: media.storageBytes,
55
+ transcodeMinutes: media.transcodeMinutes,
56
+ maxHeight: media.maxHeight,
57
+ hardCap: media.hardCap,
58
+ includedDeliveryGb: INCLUDED_DELIVERY_GB[key],
59
+ // Default per-tier upload cap = the plan's storage cap; WS-E refines.
60
+ maxUploadBytes: media.storageBytes,
61
+ },
62
+ overageRates: {
63
+ storagePerGbMonth: MEDIA_OVERAGE.storagePerGbMonth,
64
+ transcodePerMinute: MEDIA_OVERAGE.transcodePerMinute,
65
+ deliveryPerGb: 0.01, // [PAUL] placeholder — WS-C confirms
66
+ },
67
+ priceMonthlyCents: TIER_PRICING[key].monthly,
68
+ priceYearlyCents: TIER_PRICING[key].yearly,
69
+ };
70
+ }
71
+ const PLAYER_TIER_NAME = {
72
+ player_starter: 'Player Starter',
73
+ player_pro: 'Player Pro',
74
+ player_enterprise: 'Player Enterprise',
75
+ };
76
+ const PLAYER_TIER_ORDER = {
77
+ player_starter: 11,
78
+ player_pro: 12,
79
+ player_enterprise: 13,
80
+ };
81
+ /**
82
+ * Seed data for a player-only SKU tier (WS-B): the SAME feature flags as its
83
+ * stream namesake, zeroed media/stream quotas (player-only customers self-host
84
+ * their media; stream-side quotas keep reading org.plan), and — [PAUL]
85
+ * placeholder, MUST CONFIRM before launch — prices at 50% of the namesake.
86
+ */
87
+ export function getPlayerSeedPlan(key) {
88
+ const base = basePlanTier(key);
89
+ const namesake = getSeedPlan(base);
90
+ return {
91
+ ...namesake,
92
+ key,
93
+ name: PLAYER_TIER_NAME[key],
94
+ productType: 'player',
95
+ sortOrder: PLAYER_TIER_ORDER[key],
96
+ quotas: {
97
+ monthlyViews: 0,
98
+ storageBytes: 0,
99
+ transcodeMinutes: 0,
100
+ maxHeight: namesake.quotas.maxHeight,
101
+ hardCap: true,
102
+ includedDeliveryGb: 0,
103
+ maxUploadBytes: 0,
104
+ },
105
+ priceMonthlyCents: Math.round(namesake.priceMonthlyCents / 2),
106
+ priceYearlyCents: Math.round(namesake.priceYearlyCents / 2),
107
+ };
108
+ }
109
+ /** Seed data for ANY seeded plan key (stream tier or player SKU). */
110
+ export function getSeedPlanByKey(key) {
111
+ if (PLAYER_SEED_PLAN_KEYS.includes(key)) {
112
+ return getPlayerSeedPlan(key);
113
+ }
114
+ return getSeedPlan(basePlanTier(key));
115
+ }
116
+ //# sourceMappingURL=plans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../../src/constants/plans.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { LicenseTier } from '../types/license.js';
2
+ export interface TierPrice {
3
+ /** Price in the smallest currency unit (USD cents). */
4
+ monthly: number;
5
+ yearly: number;
6
+ }
7
+ /**
8
+ * Canonical tier pricing (USD cents). Single source of truth consumed by BOTH
9
+ * the marketing site and the billing API so displayed prices can never drift
10
+ * apart. Annual is priced as "2 months free" (monthly × 10). The amount actually
11
+ * charged is the configured Stripe price ID — keep these in sync with Stripe.
12
+ */
13
+ export declare const TIER_PRICING: Record<LicenseTier, TierPrice>;
14
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/constants/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,CAKvD,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Canonical tier pricing (USD cents). Single source of truth consumed by BOTH
3
+ * the marketing site and the billing API so displayed prices can never drift
4
+ * apart. Annual is priced as "2 months free" (monthly × 10). The amount actually
5
+ * charged is the configured Stripe price ID — keep these in sync with Stripe.
6
+ */
7
+ export const TIER_PRICING = {
8
+ free: { monthly: 0, yearly: 0 },
9
+ starter: { monthly: 2900, yearly: 29000 },
10
+ pro: { monthly: 7900, yearly: 79000 },
11
+ enterprise: { monthly: 19900, yearly: 199000 },
12
+ };
13
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/constants/pricing.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmC;IAC1D,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IAC/B,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACzC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;IACrC,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;CAC/C,CAAC"}
@@ -1,5 +1,7 @@
1
1
  /** Analytics event types */
2
- export type AnalyticsEventType = 'play' | 'pause' | 'seek' | 'ended' | 'quality_change' | 'vr_enter' | 'vr_exit' | 'tour_navigate' | 'buffering' | 'error' | 'fullscreen';
2
+ export type AnalyticsEventType = 'play' | 'pause' | 'seek' | 'ended' | 'quality_change' | 'vr_enter' | 'vr_exit' | 'tour_navigate' | 'buffering' | 'error' | 'fullscreen'
3
+ /** Accumulated playback seconds (WS-C delivery estimation); data: { seconds, quality? }. */
4
+ | 'watch_time';
3
5
  /** Analytics event payload sent from player to API */
4
6
  export interface AnalyticsEvent {
5
7
  type: AnalyticsEventType;
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/types/analytics.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,SAAS,GACT,eAAe,GACf,WAAW,GACX,OAAO,GACP,YAAY,CAAC;AAEjB,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB"}
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/types/analytics.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN,OAAO,GACP,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,SAAS,GACT,eAAe,GACf,WAAW,GACX,OAAO,GACP,YAAY;AACd,4FAA4F;GAC1F,YAAY,CAAC;AAEjB,sDAAsD;AACtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB"}
@@ -0,0 +1,100 @@
1
+ import type { VzFormat } from './formats.js';
2
+ import type { ParsedSource } from './player.js';
3
+ /**
4
+ * Wire types for the public, api-key-gated content-delivery API. The API
5
+ * (producer) builds responses to these shapes; the published player (consumer,
6
+ * zod-free) fetches config by content-id and renders the overlays. Kept in
7
+ * @vizor-vr/shared because it's the one package both ends already depend on.
8
+ */
9
+ export interface DeliveryAnnotation {
10
+ id: string;
11
+ lat: number;
12
+ lon: number;
13
+ timeStart: number | null;
14
+ timeEnd: number | null;
15
+ title: string;
16
+ icon: string;
17
+ htmlContent: string | null;
18
+ sortOrder: number;
19
+ }
20
+ export interface DeliveryCaption {
21
+ srclang: string;
22
+ label: string;
23
+ vttContent: string;
24
+ }
25
+ export interface DeliveryChapter {
26
+ id: string;
27
+ title: string;
28
+ /** Start offset in seconds. Chapters are contiguous (end = next start). */
29
+ startTime: number;
30
+ sortOrder: number;
31
+ }
32
+ export interface DeliveryDrm {
33
+ scheme: 'cbcs';
34
+ keyId: string;
35
+ licenseUrls: {
36
+ widevine: string;
37
+ playready: string;
38
+ fairplay: string;
39
+ };
40
+ fairplayCertUrl: string | null;
41
+ }
42
+ export interface DeliveryContentConfig {
43
+ contentId: string;
44
+ title: string;
45
+ description: string | null;
46
+ format: VzFormat;
47
+ sources: ParsedSource[];
48
+ poster: string | null;
49
+ thumbnailUrl: string | null;
50
+ duration: number | null;
51
+ /** Capture-lens angle in degrees (WS-F); null/absent = the player's 180 default. */
52
+ lensAngle?: number | null;
53
+ /** Animated WebP hover preview URL (WS-E); absent when not generated. */
54
+ previewUrl?: string | null;
55
+ /** Storyboard VTT (seek-bar thumbnails) URL (WS-E). */
56
+ storyboardVttUrl?: string | null;
57
+ published: 'draft' | 'published' | 'archived';
58
+ annotations: DeliveryAnnotation[];
59
+ captions: DeliveryCaption[];
60
+ chapters: DeliveryChapter[];
61
+ /** Present only when the content's media asset is DRM-protected (Slice 2 consumes it). */
62
+ drm?: DeliveryDrm;
63
+ }
64
+ export interface DeliveryTourProbe {
65
+ probeId: string;
66
+ title: string | null;
67
+ format: string;
68
+ src: string;
69
+ srcLeft: string | null;
70
+ srcRight: string | null;
71
+ rotationY: number | null;
72
+ sortOrder: number;
73
+ }
74
+ export interface DeliveryTourPortal {
75
+ fromProbeId: string;
76
+ toProbeId: string;
77
+ title: string | null;
78
+ lat: number;
79
+ lon: number;
80
+ distance: number;
81
+ }
82
+ export interface DeliveryTourConfig {
83
+ tourId: string;
84
+ title: string;
85
+ description: string | null;
86
+ startProbeId: string | null;
87
+ probes: DeliveryTourProbe[];
88
+ portals: DeliveryTourPortal[];
89
+ }
90
+ export interface DeliveryPlaylistItem {
91
+ contentId: string;
92
+ sortOrder: number;
93
+ }
94
+ export interface DeliveryPlaylistConfig {
95
+ playlistId: string;
96
+ title: string;
97
+ description: string | null;
98
+ items: DeliveryPlaylistItem[];
99
+ }
100
+ //# sourceMappingURL=delivery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../src/types/delivery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=delivery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../src/types/delivery.ts"],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  /** Standard HTML5 media events mirrored by the player */
2
2
  export type VzMediaEvent = 'play' | 'pause' | 'playing' | 'seeking' | 'seeked' | 'ended' | 'loadstart' | 'progress' | 'suspend' | 'abort' | 'error' | 'emptied' | 'stalled' | 'loadedmetadata' | 'loadeddata' | 'canplay' | 'canplaythrough' | 'durationchange' | 'timeupdate' | 'ratechange' | 'resize' | 'volumechange' | 'waiting';
3
3
  /** Vizor-specific custom events */
4
- export type VzCustomEvent = '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' | 'vz-license' | 'vz-playlist-change' | 'vz-playlist-end';
4
+ export type VzCustomEvent = '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-hub-select' | 'vz-collab-join' | 'vz-collab-leave' | 'vz-error' | 'vz-license' | 'vz-playlist-change' | 'vz-playlist-end';
5
5
  /** All event types emitted by the player */
6
6
  export type VzEvent = VzMediaEvent | VzCustomEvent;
7
7
  /** Event detail payloads */
@@ -34,6 +34,12 @@ export interface VzEventDetailMap {
34
34
  title: string;
35
35
  startTime: number;
36
36
  };
37
+ 'vz-hub-select': {
38
+ id: string;
39
+ src: string;
40
+ title: string;
41
+ index: number;
42
+ };
37
43
  'vz-collab-join': {
38
44
  userId: string;
39
45
  displayName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,OAAO,GACP,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,GACP,WAAW,GACX,UAAU,GACV,SAAS,GACT,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,gBAAgB,GAChB,YAAY,GACZ,SAAS,GACT,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,cAAc,GACd,SAAS,CAAC;AAEd,mCAAmC;AACnC,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,aAAa,GACb,YAAY,GACZ,qBAAqB,GACrB,oBAAoB,GACpB,uBAAuB,GACvB,kBAAkB,GAClB,mBAAmB,GACnB,gBAAgB,GAChB,iBAAiB,GACjB,UAAU,GACV,YAAY,GACZ,oBAAoB,GACpB,iBAAiB,CAAC;AAEtB,4CAA4C;AAC5C,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,aAAa,CAAC;AAEnD,4BAA4B;AAC5B,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,SAAS,CAAC;IACtB,kBAAkB,EAAE,SAAS,CAAC;IAC9B,qBAAqB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,qBAAqB,EAAE,SAAS,CAAC;IACjC,mBAAmB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IACxD,aAAa,EAAE,SAAS,CAAC;IACzB,YAAY,EAAE,SAAS,CAAC;IACxB,qBAAqB,EAAE,SAAS,CAAC;IACjC,oBAAoB,EAAE,SAAS,CAAC;IAChC,uBAAuB,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,kBAAkB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,mBAAmB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,gBAAgB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,iBAAiB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,YAAY,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,oBAAoB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,iBAAiB,EAAE,SAAS,CAAC;CAC9B"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,OAAO,GACP,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,GACP,WAAW,GACX,UAAU,GACV,SAAS,GACT,OAAO,GACP,OAAO,GACP,SAAS,GACT,SAAS,GACT,gBAAgB,GAChB,YAAY,GACZ,SAAS,GACT,gBAAgB,GAChB,gBAAgB,GAChB,YAAY,GACZ,YAAY,GACZ,QAAQ,GACR,cAAc,GACd,SAAS,CAAC;AAEd,mCAAmC;AACnC,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,kBAAkB,GAClB,qBAAqB,GACrB,qBAAqB,GACrB,mBAAmB,GACnB,aAAa,GACb,YAAY,GACZ,qBAAqB,GACrB,oBAAoB,GACpB,uBAAuB,GACvB,kBAAkB,GAClB,mBAAmB,GACnB,eAAe,GACf,gBAAgB,GAChB,iBAAiB,GACjB,UAAU,GACV,YAAY,GACZ,oBAAoB,GACpB,iBAAiB,CAAC;AAEtB,4CAA4C;AAC5C,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,aAAa,CAAC;AAEnD,4BAA4B;AAC5B,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,SAAS,CAAC;IACtB,kBAAkB,EAAE,SAAS,CAAC;IAC9B,qBAAqB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,qBAAqB,EAAE,SAAS,CAAC;IACjC,mBAAmB,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IACxD,aAAa,EAAE,SAAS,CAAC;IACzB,YAAY,EAAE,SAAS,CAAC;IACxB,qBAAqB,EAAE,SAAS,CAAC;IACjC,oBAAoB,EAAE,SAAS,CAAC;IAChC,uBAAuB,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,kBAAkB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,mBAAmB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,eAAe,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,gBAAgB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,iBAAiB,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,YAAY,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,oBAAoB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,iBAAiB,EAAE,SAAS,CAAC;CAC9B"}
@@ -4,7 +4,9 @@ export type { QualityLevel, PlayerConfig, PlaybackState, RendererState, VzError,
4
4
  export type { VzMediaEvent, VzCustomEvent, VzEvent, VzEventDetailMap, } from './events.js';
5
5
  export type { LicenseTier, FeatureFlags, LicenseResult, LicenseMode, } from './license.js';
6
6
  export type { TourProbe, TourPortal, } from './tour.js';
7
+ export type { ProductType, PlanQuotas, PlanOverageRates, } from './plan.js';
7
8
  export type { AnalyticsEventType, AnalyticsEvent, GazeSample, AnalyticsBatch, GazeBatch, } from './analytics.js';
8
9
  export type { CollabParticipant, ClientMessage, ServerMessage, } from './collaborative.js';
9
10
  export type { AnnotationData, } from './annotations.js';
11
+ export type { DeliveryAnnotation, DeliveryCaption, DeliveryChapter, DeliveryDrm, DeliveryContentConfig, DeliveryTourProbe, DeliveryTourPortal, DeliveryTourConfig, DeliveryPlaylistItem, DeliveryPlaylistConfig, } from './delivery.js';
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,cAAc,EACd,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAExD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,OAAO,EACP,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,OAAO,EACP,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,QAAQ,EACR,cAAc,EACd,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAExD,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,OAAO,EACP,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,YAAY,EACZ,aAAa,EACb,OAAO,EACP,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,cAAc,EACd,SAAS,GACV,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,eAAe,CAAC"}
@@ -24,6 +24,8 @@ export interface FeatureFlags {
24
24
  drm: boolean;
25
25
  webhooks: boolean;
26
26
  removeWatermark: boolean;
27
+ /** Animated WebP hover previews on posters/embeds (WS-E). */
28
+ animatedPreviews: boolean;
27
29
  }
28
30
  /** Result of license validation */
29
31
  export interface LicenseResult {
@@ -1 +1 @@
1
- {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/types/license.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,YAAY,CAAC;AAEpE,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,mCAAmC;AACnC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8BAA8B;AAC9B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,YAAY,CAAC"}
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/types/license.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,YAAY,CAAC;AAEpE,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,6DAA6D;IAC7D,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,mCAAmC;AACnC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8BAA8B;AAC9B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,YAAY,CAAC"}
@@ -0,0 +1,27 @@
1
+ /** A plan's product family: streaming SaaS vs standalone player license (WS-B). */
2
+ export type ProductType = 'stream' | 'player';
3
+ /**
4
+ * Resource allowances for a plan — the DB-backed successor to TIER_MEDIA +
5
+ * TIER_QUOTAS, extended with the fields WS-C (delivery) and WS-E (uploads) need.
6
+ */
7
+ export interface PlanQuotas {
8
+ /** Monthly views; `null` means unlimited (a DB integer can't hold Infinity). */
9
+ monthlyViews: number | null;
10
+ storageBytes: number;
11
+ transcodeMinutes: number;
12
+ /** Max transcode-ladder height (720/1080/1440/2160/4320). */
13
+ maxHeight: number;
14
+ /** When true, exceeding storage blocks uploads; when false, overage is metered. */
15
+ hardCap: boolean;
16
+ /** Included monthly delivery traffic before PAYG overage (WS-C). */
17
+ includedDeliveryGb: number;
18
+ /** Per-tier max single-upload size in bytes (WS-E). */
19
+ maxUploadBytes: number;
20
+ }
21
+ /** Pay-as-you-use overage rates (USD per unit) for a plan. */
22
+ export interface PlanOverageRates {
23
+ storagePerGbMonth: number;
24
+ transcodePerMinute: number;
25
+ deliveryPerGb: number;
26
+ }
27
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/types/plan.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,gFAAgF;IAChF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,OAAO,EAAE,OAAO,CAAC;IACjB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/types/plan.ts"],"names":[],"mappings":""}
@@ -16,8 +16,16 @@ export interface PlayerConfig {
16
16
  author?: string;
17
17
  authorHref?: string;
18
18
  poster?: string;
19
+ /** Animated WebP hover preview shown over the poster (WS-E, tier-gated). */
20
+ preview?: string;
19
21
  loop: boolean;
20
22
  muted: boolean;
23
+ /** Autoplay on load (WS-D). Browsers require muted autoplay — the player
24
+ * forces muted when set without it. */
25
+ autoplay?: boolean;
26
+ /** Capture-lens angle in degrees for fisheye/VR180 content (WS-F).
27
+ * Valid 120–250; default 180. NOT viewing zoom (that's focalLength). */
28
+ lensAngle?: number;
21
29
  preload: 'auto' | 'metadata' | 'none';
22
30
  fps: number;
23
31
  startLat: number;
@@ -1 +1 @@
1
- {"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/types/player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../src/types/player.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,15 @@
1
1
  {
2
2
  "name": "@vizor-vr/shared",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Shared types, constants, and utilities for Vizor VR Player",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/vizor-vr/vizor-vr.git",
8
+ "directory": "packages/shared"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/vizor-vr/vizor-vr/issues"
12
+ },
5
13
  "license": "MIT",
6
14
  "type": "module",
7
15
  "main": "./dist/index.js",