@tivio/sdk-react 9.8.0 → 10.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.
package/dist/index.d.ts CHANGED
@@ -1,17 +1,14 @@
1
- import { AD_SERVICE_PROXY_NAME } from '@tivio/common';
2
1
  import type { ComponentType } from 'react';
3
- import type dayjs from 'dayjs';
4
2
  import { DocumentReference } from '@firebase/firestore-types';
5
3
  import type duration from 'dayjs/plugin/duration';
6
4
  import type { default as firebase_2 } from '@firebase/app-types';
7
5
  import type { default as firebase_3 } from 'firebase';
8
6
  import { FunctionComponentElement } from 'react';
9
7
  import type { GeoPoint } from '@firebase/firestore-types';
10
- import type { google } from '@alugha/ima';
11
8
  import { OperatingSystem } from 'detect-browser';
12
9
  import type { PaletteType } from '@material-ui/core';
13
10
  import { default as React_2 } from 'react';
14
- import { RecommendationsQuery } from '@algolia/recommend';
11
+ import type { RecommendationsQuery } from '@algolia/recommend';
15
12
  import type { TagManagerArgs } from 'react-gtm-module';
16
13
  import type { Timestamp } from '@firebase/firestore-types';
17
14
 
@@ -36,8 +33,6 @@ declare interface actualPriceDetails {
36
33
  currency?: primaSupportedCurrency;
37
34
  }
38
35
 
39
- export { AD_SERVICE_PROXY_NAME }
40
-
41
36
  export declare type AdBannerScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.AD_BANNER>;
42
37
 
43
38
  export declare type AddEditCommentResponse = {
@@ -89,6 +84,14 @@ export declare interface AdExternal {
89
84
  skip: () => void;
90
85
  }
91
86
 
87
+ /**
88
+ * External information of Ad video.
89
+ * @public
90
+ */
91
+ export declare interface AdExternals {
92
+ creativeId: string;
93
+ }
94
+
92
95
  /**
93
96
  * @public
94
97
  */
@@ -104,8 +107,6 @@ export declare type AdMetadata = {
104
107
  isSkippable: boolean;
105
108
  order: number | null;
106
109
  totalCount: number | null;
107
- adPlacementStrategy: AdPlacementStrategy;
108
- customAdMetadata?: Record<string, unknown>;
109
110
  skip: () => void;
110
111
  } | null;
111
112
 
@@ -119,10 +120,7 @@ export declare interface AdPackInfo {
119
120
  total: number;
120
121
  }
121
122
 
122
- export declare type AdPlacementStrategy = 'preroll' | 'midroll' | 'postroll' | 'replacement';
123
-
124
123
  export declare interface AdSegment {
125
- adPlacementStrategy: AdPlacementStrategy;
126
124
  id: string;
127
125
  /**
128
126
  * @deprecated alias to secondsToEnd * 1000
@@ -187,7 +185,6 @@ export declare interface AdSourceActions {
187
185
  */
188
186
  export declare interface AdSourceInterface extends CommonSourceInterface<SourceType.ADVERTISEMENT> {
189
187
  adType: AdType;
190
- adPlacementStrategy: AdPlacementStrategy;
191
188
  durationMs: number;
192
189
  skipDelayMs: number | null;
193
190
  /**
@@ -227,10 +224,6 @@ export declare interface AdSourceInterface extends CommonSourceInterface<SourceT
227
224
  skipAll(): void;
228
225
  onRemainingTimeChanged(ms: number): void;
229
226
  click(): void;
230
- /**
231
- * Rich IMA ad metadata including customAdMetadata (only available for IMA ads)
232
- */
233
- imaAdMetadata?: any;
234
227
  }
235
228
 
236
229
  /**
@@ -238,7 +231,6 @@ export declare interface AdSourceInterface extends CommonSourceInterface<SourceT
238
231
  */
239
232
  export declare interface AdSourceParams extends CommonSourceParams<SourceType.ADVERTISEMENT> {
240
233
  id: string;
241
- adPlacementStrategy: AdPlacementStrategy;
242
234
  adType?: AdType;
243
235
  actions?: AdSourceActions | null;
244
236
  apiFramework?: VastApiFramework | null;
@@ -329,7 +321,9 @@ export declare enum AnalyticsConversionPage {
329
321
  Redeem = "redeem",
330
322
  Referral = "referral",
331
323
  Pair = "pair",
332
- Search = "search"
324
+ Search = "search",
325
+ QerkoPayment = "qerko-payment",
326
+ SubscriptionCard = "subscription-card"
333
327
  }
334
328
 
335
329
  /**
@@ -347,6 +341,31 @@ export declare enum AnalyticsConversionTargetBase {
347
341
  Monetization = "monetization"
348
342
  }
349
343
 
344
+ export declare enum AnalyticsElementId {
345
+ BTN_LOGIN = "stargaze-btn-login",
346
+ BTN_REGISTRATION = "stargaze-btn-registration",
347
+ BTN_SUBSCRIBE = "stargaze-btn-subscribe",
348
+ BTN_FOLLOW = "stargaze-btn-follow",
349
+ BTN_CHOOSE_SUBSCRIPTION = "stargaze-btn-choose-subscription",
350
+ BTN_CANCEL_SUBSCRIPTION = "stargaze-btn-cancel-subscription",
351
+ BTN_RENEW_SUBSCRIPTION = "stargaze-btn-renew-subscription",
352
+ BTN_CHANGE_SUBSCRIPTION = "stargaze-btn-change-subscription",
353
+ BTN_GIFT_VOUCHER = "stargaze-btn-gift-voucher",
354
+ BTN_BUY_SUBSCRIPTION = "stargaze-btn-buy-subscription",
355
+ BTN_PAY_BY_APPLE_PAY = "stargaze-btn-pay-by-apple-pay",
356
+ BTN_PAY_BY_GOOGLE_PAY = "stargaze-btn-pay-by-google-pay",
357
+ BTN_PAY_BY_CARD = "stargaze-btn-pay-by-card",
358
+ BTN_PAY_WITH_PAYPAL = "stargaze-btn-pay-with-paypal",
359
+ BTN_PAY_BY_QERKO = "stargaze-btn-pay-by-qerko",
360
+ BTN_ACTIVATE_VOUCHER = "stargaze-btn-activate-voucher",
361
+ BTN_ACTIVATE_VOUCHER_OVERLAY = "stargaze-btn-activate-voucher-overlay",
362
+ BTN_ACTIVATE_VOUCHER_PROFILE = "stargaze-btn-activate-voucher-profile",
363
+ BTN_GO_TO_REDEEM_PAGE = "stargaze-btn-go-to-redeem-page",
364
+ BTN_REDEEM_CODE = "stargaze-btn-redeem-code",
365
+ BTN_CONTINUE_TO_PAYMENT = "stargaze-btn-continue-to-payment",
366
+ BTN_SELECT_MONETIZATION = "stargaze-btn-select-monetization"
367
+ }
368
+
350
369
  export declare interface AnalyticsInterface {
351
370
  reportAdvertisementPlay: (params: AdvertisementAnalyticParams) => void;
352
371
  reportAdvertisementProgress: () => void;
@@ -543,7 +562,7 @@ export declare interface AssetsField<TAsset extends ScalableAsset = ScalableAsse
543
562
  /**
544
563
  * @public
545
564
  */
546
- export declare type AssetType = 'circled' | 'landscape' | 'portrait' | 'square';
565
+ export declare type AssetType = 'banner' | 'circled' | 'landscape' | 'portrait' | 'square';
547
566
 
548
567
  declare type Attributes = {
549
568
  created: string;
@@ -630,10 +649,124 @@ export declare interface BannerProps {
630
649
  */
631
650
  export declare type BannerPropsPartial = Partial<BannerProps>;
632
651
 
652
+ /**
653
+ * Fields and methods common to every interactive widget (quiz, poll, …).
654
+ * Parameterized over the concrete answer type, state type, and scene type so
655
+ * more specialized widget interfaces can narrow each axis independently.
656
+ */
657
+ export declare interface BaseInteractiveWidget<TAnswer extends BaseQuestionAnswer = QuestionAnswer, TState extends InteractiveWidgetState = InteractiveWidgetState, TScene extends InteractiveWidgetScene = InteractiveWidgetScene> {
658
+ readonly id: string;
659
+ readonly name: string;
660
+ readonly path: string;
661
+ readonly type: InteractiveWidgetType;
662
+ readonly status: InteractiveWidgetStatus;
663
+ readonly questionsCount: number;
664
+ readonly currentAnswerId?: string;
665
+ readonly currentState: TState;
666
+ /**
667
+ * State delayed for end users, used to toggle scenes just like in OBS / host view.
668
+ */
669
+ readonly currentStateWithDelay: InteractiveWidgetCurrentStateWithDelay<TState>;
670
+ readonly currentQuestion: CurrentQuestion<TAnswer> | null;
671
+ readonly answers?: TAnswer[];
672
+ readonly questionIndex?: number;
673
+ readonly isSubmitted?: boolean;
674
+ readonly userRole: InteractiveWidgetRole;
675
+ readonly scenes: TScene[];
676
+ readonly activeScene: TScene | null;
677
+ readonly theme?: InteractiveWidgetTheme;
678
+ /**
679
+ * @remarks Always `false` for `PollWidget` — kept on the base to minimize
680
+ * disruption to existing consumers.
681
+ */
682
+ readonly isWaitingForStart: boolean;
683
+ answerQuestion(answerId: string): void;
684
+ submitAnswer(request: Pick<SubmitAnswerRequest, 'answerOptionId' | 'answerText'>): Promise<void>;
685
+ verifyJoinCode(joinCode: string, shouldJoinPlayer?: boolean): Promise<boolean>;
686
+ destroy(): void;
687
+ }
688
+
689
+ /**
690
+ * Fields shared by both quiz and poll answers.
691
+ */
692
+ export declare interface BaseQuestionAnswer {
693
+ id: string;
694
+ answer: Translation;
695
+ status?: AnswerStatus;
696
+ }
697
+
698
+ /**
699
+ * Base row interface with common fields
700
+ * @public
701
+ */
702
+ export declare interface BaseRow {
703
+ id: string;
704
+ rowId: string;
705
+ name: string;
706
+ description?: string;
707
+ assets: AssetsField;
708
+ type: ScreenRowType;
709
+ isLiveRow: boolean;
710
+ organizationId?: string;
711
+ }
712
+
713
+ /**
714
+ * Base row type with fields common to all row types
715
+ */
716
+ declare type BaseRowInScreen = {
717
+ /**
718
+ * Firebase document path. If not provided, the row is not defined in db and is dynamically generated (e.g. recommendation row).
719
+ */
720
+ path?: string;
721
+ /**
722
+ * Tivio row ID.
723
+ */
724
+ rowId: string;
725
+ /**
726
+ * If all items are from the same organization this will be set.
727
+ */
728
+ organizationId?: string;
729
+ /**
730
+ * Row name.
731
+ */
732
+ name: Translation;
733
+ /**
734
+ * Row order in the screen.
735
+ */
736
+ order?: number;
737
+ /**
738
+ * Standard row or a Banner.
739
+ */
740
+ rowComponent: RowComponent;
741
+ /**
742
+ * Type of the row (continue to watch, custom, filter, static, ...).
743
+ */
744
+ type: ScreenRowType;
745
+ /**
746
+ * Assets for the row (images, videos, etc.)
747
+ */
748
+ assets?: AssetsField;
749
+ };
750
+
751
+ /**
752
+ * Base static row fields shared by all static row types
753
+ */
754
+ declare type BaseStaticRowInScreen = BaseRowInScreen & {
755
+ type: 'static';
756
+ };
757
+
633
758
  declare interface BaseWidgetControlPayload {
634
759
  widgetPath: string;
635
760
  }
636
761
 
762
+ export declare interface BenefitItem {
763
+ iconType: 'Verified' | 'Badge' | 'Clock' | 'Trending' | 'Message' | 'Eye' | 'Info' | 'Chart' | 'Users' | 'Zap' | 'Star' | 'Email' | 'Discord';
764
+ name: Translation;
765
+ description?: Translation;
766
+ }
767
+
768
+ export declare type BenefitTileSpecificData = BenefitItem;
769
+
637
770
  /**
638
771
  * @public
639
772
  */
@@ -682,6 +815,45 @@ export declare const bundlePromise: Promise<RemoteBundleState>;
682
815
  */
683
816
  export declare type Callback<T = any> = (arg?: T) => void;
684
817
 
818
+ /**
819
+ * Camera switch transition progress information.
820
+ * Tracks the state of buffer loading during camera switches in interactive streaming.
821
+ * @public
822
+ */
823
+ export declare interface CameraSwitchProgress {
824
+ /**
825
+ * Whether a camera switch is currently in progress
826
+ */
827
+ isActive: boolean;
828
+ /**
829
+ * Time position (in seconds) where the transition content will begin.
830
+ * This is after any currently loading chunks finish.
831
+ */
832
+ transitionStartTime: number;
833
+ /**
834
+ * Number of segments that need to load before transition is ready
835
+ */
836
+ segmentsToLoad: number;
837
+ /**
838
+ * Number of segments that have already loaded
839
+ */
840
+ segmentsLoaded: number;
841
+ /**
842
+ * Progress percentage (0-1) of the transition loading
843
+ */
844
+ progress: number;
845
+ /**
846
+ * Estimated time remaining until camera switch completes (in seconds)
847
+ * Based on segment duration and remaining segments
848
+ */
849
+ estimatedTimeRemaining: number;
850
+ /**
851
+ * ID of the secondary source this transition is for.
852
+ * Used to track multiple camera switches in quick succession.
853
+ */
854
+ secondarySourceId?: string;
855
+ }
856
+
685
857
  export declare interface CancellingMonetizationsSummaryItem {
686
858
  date: number;
687
859
  monetizationId: string;
@@ -743,7 +915,6 @@ export declare interface ChannelSourceInterface extends PlayerSourceInterface<So
743
915
  to: Date;
744
916
  poster: string | null;
745
917
  tvMode: TvMode | 'live' | null;
746
- clone: (params?: Partial<ChannelSourceParams>) => ChannelSourceInterface;
747
918
  }
748
919
 
749
920
  /**
@@ -757,6 +928,10 @@ export declare interface ChannelSourceParams extends PlayerSourceParams<SourceTy
757
928
  from: Date;
758
929
  to: Date;
759
930
  tvMode?: TvMode | 'live' | null;
931
+ /**
932
+ * Current program from EPG. Available for VIRTUAL and SCHEDULED channels.
933
+ */
934
+ currentProgram?: TvProgram | null;
760
935
  }
761
936
 
762
937
  /**
@@ -826,12 +1001,6 @@ export declare interface CommonSourceParams<T extends SourceType = SourceType> {
826
1001
  videoPath?: string;
827
1002
  }
828
1003
 
829
- /**
830
- * @public
831
- * Re-export of Google IMA CompanionAd type for use throughout the SDK
832
- */
833
- export declare type CompanionAd = google.ima.CompanionAd;
834
-
835
1004
  /**
836
1005
  * Just another alias. Reexported for backward compatibility.
837
1006
  * @public
@@ -891,6 +1060,13 @@ export declare interface ContentAvailability {
891
1060
  manual: boolean;
892
1061
  }
893
1062
 
1063
+ export declare type ContentMetadataFieldId = keyof NonNullable<OrganizationSettingsField['contentMetadata']>;
1064
+
1065
+ export declare interface ContentMetadataOptions {
1066
+ enabled: boolean;
1067
+ order: number;
1068
+ }
1069
+
894
1070
  /**
895
1071
  * @public
896
1072
  */
@@ -1148,10 +1324,23 @@ export declare interface CreatorsWithVoucherSubscriptions {
1148
1324
  name: string;
1149
1325
  }
1150
1326
 
1327
+ export declare interface CtaBannerExtendRowData {
1328
+ variant?: 'light' | 'dark';
1329
+ heading?: Translation;
1330
+ subtitle?: {
1331
+ text: Translation;
1332
+ showIcon?: boolean;
1333
+ };
1334
+ button?: {
1335
+ href: string;
1336
+ text: Translation;
1337
+ };
1338
+ }
1339
+
1151
1340
  /**
1152
1341
  * @public
1153
1342
  */
1154
- export declare const CURRENCIES: string[];
1343
+ export declare const CURRENCIES: Currency[];
1155
1344
 
1156
1345
  /**
1157
1346
  * Three upper-case letters according to ISO-4217.
@@ -1165,13 +1354,22 @@ export declare type Currency = 'CZK' | 'EUR' | 'USD' | 'PLN';
1165
1354
  */
1166
1355
  export declare type CurrencyLowerCase = 'czk' | 'eur' | 'usd' | 'pln';
1167
1356
 
1168
- export declare interface CurrentQuestion {
1357
+ /**
1358
+ * @public
1359
+ */
1360
+ export declare const CurrencyToTitle: Record<Currency, string>;
1361
+
1362
+ /**
1363
+ * Generic "current question" shape, parameterized by answer type.
1364
+ * Use `QuizQuestion` / `PollQuestion` for concrete forms.
1365
+ */
1366
+ export declare interface CurrentQuestion<TAnswer extends BaseQuestionAnswer = QuestionAnswer> {
1169
1367
  id: string;
1170
1368
  question: Translation;
1171
- answers?: QuestionAnswer[];
1369
+ answers?: TAnswer[];
1172
1370
  index?: number;
1173
1371
  endTimestampMs?: number;
1174
- status?: QuizGameStatus;
1372
+ status?: InteractiveWidgetStatus;
1175
1373
  }
1176
1374
 
1177
1375
  export declare type CurrentQuestionScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.CURRENT_QUESTION>;
@@ -1244,14 +1442,27 @@ export declare enum CustomerId {
1244
1442
  UZ_BUDU = "UZ_BUDU",
1245
1443
  PRIMA = "PRIMA",
1246
1444
  NORA_FRIDRICHOVA = "NORA_FRIDRICHOVA",
1247
- LONGEVITY = "LONGEVITY"
1445
+ LONGEVITY = "LONGEVITY",
1446
+ ZASAHTV = "ZASAHTV",
1447
+ ELISKAFLOW = "ELISKAFLOW",
1448
+ PRIJIMACKY = "PRIJIMACKY",
1449
+ PADNI_KOMU_PADNI = "PADNI_KOMU_PADNI",
1450
+ KRYPTOSPACE = "KRYPTOSPACE",
1451
+ ERADIX = "ERADIX",
1452
+ VLADCI_PRAHY = "VLADCI_PRAHY",
1453
+ DOKTOR_EVZEN = "DOKTOR_EVZEN",
1454
+ INVESTUJ_CHYTRE = "INVESTUJ_CHYTRE",
1455
+ RESTART_MUZE = "RESTART_MUZE",
1456
+ THE_JOHNY = "THE_JOHNY",
1457
+ GOOD_MOVE = "GOOD_MOVE",
1458
+ JANA_HANZ = "JANA_HANZ",
1459
+ MYSTICO = "MYSTICO"
1248
1460
  }
1249
1461
 
1250
1462
  export declare interface CustomScript {
1251
1463
  src: string;
1252
1464
  event?: EventName;
1253
1465
  isAsync?: boolean;
1254
- defer?: boolean;
1255
1466
  }
1256
1467
 
1257
1468
  /**
@@ -1269,6 +1480,11 @@ declare type Data = {
1269
1480
  type: 'tier' | 'member' | 'user';
1270
1481
  };
1271
1482
 
1483
+ /**
1484
+ * @public
1485
+ */
1486
+ export declare const DEFAULT_CURRENCY: Currency;
1487
+
1272
1488
  /**
1273
1489
  * @public
1274
1490
  */
@@ -1311,6 +1527,28 @@ export declare type DeviceInfo = ArrisDeviceInfo | ReactNativeDeviceInfo;
1311
1527
  */
1312
1528
  export declare type DeviceOs = OperatingSystem | 'Tizen' | 'webOS' | 'Arris' | 'Android TV' | 'tvOS';
1313
1529
 
1530
+ /**
1531
+ * User consent status for a specific purpose.
1532
+ */
1533
+ export declare interface DidomiPurposeStatus {
1534
+ enabled: boolean;
1535
+ }
1536
+
1537
+ /**
1538
+ * Didomi SDK API.
1539
+ */
1540
+ export declare interface DidomiSDK {
1541
+ getCurrentUserStatus(): DidomiUserStatus;
1542
+ }
1543
+
1544
+ /**
1545
+ * User consent status returned by Didomi SDK.
1546
+ */
1547
+ export declare interface DidomiUserStatus {
1548
+ purposes: Record<string, DidomiPurposeStatus>;
1549
+ consent_string?: string;
1550
+ }
1551
+
1314
1552
  /**
1315
1553
  * Window object with Didomi SDK properties.
1316
1554
  */
@@ -1326,9 +1564,10 @@ export declare interface DidomiWindow {
1326
1564
  * https://developers.didomi.io/cmp/web-sdk/reference/api
1327
1565
  */
1328
1566
  didomiOnReady: (() => void)[];
1329
- Didomi?: {
1330
- getUserConsentStatusForPurpose: (category: string) => boolean;
1331
- };
1567
+ /**
1568
+ * The Didomi SDK instance.
1569
+ */
1570
+ Didomi: DidomiSDK;
1332
1571
  }
1333
1572
 
1334
1573
  /**
@@ -1349,6 +1588,47 @@ export declare interface DividerProps {
1349
1588
  horizontalSpacing?: number;
1350
1589
  }
1351
1590
 
1591
+ export declare interface DocumentTileData<ItemSpecificData extends DocumentTileItemSpecificData = DocumentTileItemSpecificData> {
1592
+ /**
1593
+ * Tile item ID.
1594
+ */
1595
+ id: string;
1596
+ /**
1597
+ * Timestamp of the item creation.
1598
+ */
1599
+ created: number;
1600
+ /**
1601
+ * Type of the tile. VIDEO, TV_CHANNEL, TAG, ...
1602
+ */
1603
+ itemType: ROW_ITEM_TYPES;
1604
+ /**
1605
+ * Tile item name translation.
1606
+ */
1607
+ name: Translation;
1608
+ /**
1609
+ * Firestore path to the item.
1610
+ */
1611
+ path: string;
1612
+ /**
1613
+ * Application info including logo, name and number of videos.
1614
+ */
1615
+ application?: TileApplicationData;
1616
+ /**
1617
+ * Specific data for an item type (e.g. video, tv channel, tag, ...).
1618
+ */
1619
+ itemSpecificData: ItemSpecificData;
1620
+ /**
1621
+ * Optional label to display in the top-right corner of the tile (e.g., "Exclusive").
1622
+ */
1623
+ topLabel?: Translation;
1624
+ /**
1625
+ * CSS color for the topLabel background. Defaults to white.
1626
+ */
1627
+ topLabelColor?: string;
1628
+ }
1629
+
1630
+ export declare type DocumentTileItemSpecificData = VideoTileSpecificData | TvChannelTileSpecificData | TagTileSpecificData | ArticleTileSpecificData | SeriesTileSpecificData;
1631
+
1352
1632
  export declare interface Drm {
1353
1633
  encryption: VideoSourceEncryption;
1354
1634
  /**
@@ -1421,6 +1701,91 @@ export declare interface DurationWithUnit {
1421
1701
  unit: DurationUnit;
1422
1702
  }
1423
1703
 
1704
+ /**
1705
+ * Row components available for dynamic rows (filter, custom, topWatched, etc.)
1706
+ * Matches the rowComponent constraint in DynamicRow type definition
1707
+ * @public
1708
+ */
1709
+ export declare const DYNAMIC_ROW_COMPONENTS: readonly [RowComponent.ROW, RowComponent.BANNER];
1710
+
1711
+ /**
1712
+ * Dynamic row (filter, custom, continueToWatch, etc.) - has itemComponent and dynamic fields
1713
+ * Uses standard ROW or BANNER components
1714
+ * @public
1715
+ */
1716
+ export declare interface DynamicRow extends BaseRow {
1717
+ type: Exclude<ScreenRowType, 'static'>;
1718
+ numberOfLines?: number;
1719
+ monetizations?: Array<{
1720
+ monetizationRef: {
1721
+ id: string;
1722
+ path: string;
1723
+ };
1724
+ } | RowMonetizationData>;
1725
+ rowComponent: RowComponent.ROW | RowComponent.BANNER;
1726
+ itemComponent: RowItemComponent | BannerItemComponent;
1727
+ organizationId?: string;
1728
+ bottomComponent?: BottomComponent;
1729
+ showDescriptionAsTitle?: boolean;
1730
+ hideTitle?: boolean;
1731
+ externalUrl?: string;
1732
+ playButtonTitle?: string;
1733
+ tiles: PaginationInterface<ItemInRow>;
1734
+ /**
1735
+ * Side Banner specific configuration
1736
+ */
1737
+ sideBannerImagePosition?: 'left' | 'right';
1738
+ backgroundColor?: string;
1739
+ }
1740
+
1741
+ /**
1742
+ * Dynamic row type with dynamic-specific fields
1743
+ */
1744
+ export declare type DynamicRowInScreen = BaseRowInScreen & {
1745
+ type: Exclude<ScreenRowType, 'static'>;
1746
+ /**
1747
+ * Row filter based on which to pick tiles.
1748
+ */
1749
+ filter?: RowFilterField;
1750
+ /**
1751
+ * Number of lines of the title.
1752
+ */
1753
+ numberOfLines?: number;
1754
+ /**
1755
+ * Component to use to render the tiles in the row.
1756
+ */
1757
+ itemComponent: RowItemComponent | BannerItemComponent;
1758
+ /**
1759
+ * Items to display in the row.
1760
+ */
1761
+ tiles: GetTilesInRowResponse<DynamicScreenRowType>;
1762
+ /**
1763
+ * Setting for decided what to show bellow the tiles
1764
+ */
1765
+ bottomComponent?: BottomComponent;
1766
+ /**
1767
+ * Setting for decided whether to show description instead of title in the tiles
1768
+ */
1769
+ showDescriptionAsTitle?: boolean;
1770
+ /**
1771
+ * Setting for decided whether to hide title in the tiles/banners
1772
+ */
1773
+ hideTitle?: boolean;
1774
+ /**
1775
+ * Link to external URL
1776
+ */
1777
+ externalUrl?: string;
1778
+ /**
1779
+ * Title of Play button
1780
+ */
1781
+ playButtonTitle?: Translation;
1782
+ };
1783
+
1784
+ /**
1785
+ * @public
1786
+ */
1787
+ export declare type DynamicScreenRowType = Exclude<ScreenRowType, 'static'>;
1788
+
1424
1789
  /**
1425
1790
  * @public
1426
1791
  */
@@ -1539,7 +1904,6 @@ export declare interface EmitterInterface {
1539
1904
  isSupported: (even: string) => boolean;
1540
1905
  addListener: <T = unknown>(event: string, cb: (value: T) => Empty_2) => void;
1541
1906
  removeListener: <T = unknown>(event: string, cb: (value: T) => Empty_2) => void;
1542
- emitEvent: (event: string, value?: unknown) => void;
1543
1907
  }
1544
1908
 
1545
1909
  /**
@@ -1564,8 +1928,19 @@ export declare type Events = {
1564
1928
  'on-error': Error;
1565
1929
  };
1566
1930
 
1567
- export declare interface ExtensionMetadata {
1568
- purchaseStatus: CloudflareStreamingPurchaseStatus;
1931
+ export declare interface ExploreItem {
1932
+ title: Translation;
1933
+ description: Translation;
1934
+ button?: {
1935
+ href: string;
1936
+ text: Translation;
1937
+ };
1938
+ }
1939
+
1940
+ export declare type ExploreTileSpecificData = ExploreItem;
1941
+
1942
+ export declare interface ExtensionMetadata {
1943
+ purchaseStatus: CloudflareStreamingPurchaseStatus;
1569
1944
  activeVideoId?: string;
1570
1945
  }
1571
1946
 
@@ -1577,22 +1952,12 @@ export declare type ExternalTvConfig = {
1577
1952
  splashScreenBackgroundColor?: string;
1578
1953
  };
1579
1954
 
1580
- export declare interface FavoriteTagWithData {
1581
- content: Tag;
1582
- type: 'tag';
1583
- }
1584
-
1585
- export declare interface FavoriteVideoWithData {
1586
- content: Video;
1587
- type: 'video';
1955
+ export declare interface FaqItem {
1956
+ question: Translation;
1957
+ answer: Translation;
1588
1958
  }
1589
1959
 
1590
- /**
1591
- * @public
1592
- */
1593
- export declare type FavoriteWithData = FavoriteVideoWithData | (FavoriteTagWithData & {
1594
- profileId?: string;
1595
- });
1960
+ export declare type FaqTileSpecificData = FaqItem;
1596
1961
 
1597
1962
  /**
1598
1963
  * @throws if fetch fails
@@ -1642,7 +2007,6 @@ export declare interface ForbiddenOnCallError extends GenericOnCallError {
1642
2007
  }
1643
2008
 
1644
2009
  export declare enum ForbiddenReason {
1645
- AD_BLOCKING = "AD_BLOCKING",
1646
2010
  MONETIZATION = "MONETIZATION",
1647
2011
  GEO_BLOCKING = "GEO_BLOCKING",
1648
2012
  EMAIL_ALREADY_EXISTS = "EMAIL_ALREADY_EXISTS",
@@ -1653,8 +2017,7 @@ export declare enum ForbiddenReason {
1653
2017
  NAME_CONTAINS_INVALID_CHAR = "NAME_CONTAINS_INVALID_CHAR",
1654
2018
  USER_ACCOUNT_LOCKED = "USER_ACCOUNT_LOCKED",
1655
2019
  USER_NOT_FOUND = "USER_NOT_FOUND",
1656
- UNSUPPORTED_BROWSER = "UNSUPPORTED_BROWSER",
1657
- ANONYMOUS_USER = "ANONYMOUS_USER"
2020
+ UNSUPPORTED_BROWSER = "UNSUPPORTED_BROWSER"
1658
2021
  }
1659
2022
 
1660
2023
  /**
@@ -1662,7 +2025,7 @@ export declare enum ForbiddenReason {
1662
2025
  */
1663
2026
  export declare type FrequencyInfo = {
1664
2027
  title: Translation;
1665
- unit: string;
2028
+ unit: MONETIZATION_FREQUENCY;
1666
2029
  value: number;
1667
2030
  };
1668
2031
 
@@ -1781,6 +2144,9 @@ export declare type GetPurchaseInfoResponse = {
1781
2144
  };
1782
2145
  };
1783
2146
 
2147
+ /**
2148
+ * Response type for getRowsInScreen
2149
+ */
1784
2150
  export declare type GetRowsInScreenResponse = PaginatedResponse<RowInScreen, 'screenId'>;
1785
2151
 
1786
2152
  export declare interface GetSourceUrlRequest {
@@ -1837,6 +2203,16 @@ export declare interface GetSourceUrlRequest {
1837
2203
  * Parameters related to ads.
1838
2204
  */
1839
2205
  adParams?: Record<string, string | number | undefined>;
2206
+ /**
2207
+ * Which platform the resulting source should support.
2208
+ * If not present, any source that has non-empty `platforms` will be filtered out from the result.
2209
+ */
2210
+ platform?: PLATFORM;
2211
+ /**
2212
+ * Device ID for device tracking on purchase documents.
2213
+ * Used to track which devices are accessing paid content.
2214
+ */
2215
+ deviceId?: string;
1840
2216
  }
1841
2217
 
1842
2218
  export declare interface GetSourceUrlResponse {
@@ -1880,21 +2256,9 @@ export declare interface GetSourceUrlResponse {
1880
2256
  * Determines session type generated for source. If no provided it will be considered 'ondemand' session type.
1881
2257
  */
1882
2258
  sessionType?: VideoSourceField['sessionType'];
1883
- /**
1884
- * Language of the source.
1885
- */
1886
- language?: LangCode;
1887
2259
  }
1888
2260
 
1889
- export declare type GetTilesInRowResponse<U extends NextPageParamType = NextPageParamType> = PaginatedResponse<TileData, U>;
1890
-
1891
- export declare interface GetUserProfileDataOptions {
1892
- /**
1893
- * If true, the data will be returned for all user profiles.
1894
- * If false, the data will be returned only for the active user profile.
1895
- */
1896
- ignoreActiveUserProfile?: boolean;
1897
- }
2261
+ export declare type GetTilesInRowResponse<T extends ScreenRowType = ScreenRowType, U extends NextPageParamType = NextPageParamType> = PaginatedResponse<TileData<T>, U>;
1898
2262
 
1899
2263
  export declare interface GetUserRssUrlRequest {
1900
2264
  organizationId: string;
@@ -1906,58 +2270,6 @@ export declare interface GetUserRssUrlResponse {
1906
2270
  expiresAt?: number;
1907
2271
  }
1908
2272
 
1909
- export declare interface GetVideoAnalyticsErrorItem {
1910
- count: number;
1911
- timestamp: number;
1912
- errorMessage: string;
1913
- }
1914
-
1915
- export declare interface GetVideoAnalyticsErrorResult {
1916
- totalCount: number;
1917
- errors: Array<GetVideoAnalyticsErrorItem>;
1918
- }
1919
-
1920
- export declare interface GetVideoAnalyticsRequest {
1921
- contentId: string;
1922
- timestamp?: number;
1923
- userId?: string;
1924
- source?: string;
1925
- limit?: number;
1926
- errorLimit?: number;
1927
- errorTimestampFrom?: number;
1928
- }
1929
-
1930
- export declare interface GetVideoAnalyticsResponse {
1931
- state?: GetVideoAnalyticsResult;
1932
- quality?: GetVideoAnalyticsResult;
1933
- error?: GetVideoAnalyticsErrorResult;
1934
- localities?: unknown;
1935
- }
1936
-
1937
- export declare type GetVideoAnalyticsResult = {
1938
- [timestamp: string]: {
1939
- totalDuration: number;
1940
- values: Array<{
1941
- value: string;
1942
- duration: number;
1943
- percentage: number;
1944
- }>;
1945
- };
1946
- };
1947
-
1948
- export declare interface GetVideoAnalyticsViewsRequest {
1949
- contentId: string;
1950
- currentViewsIntervalMs: number;
1951
- timestamp?: number;
1952
- source?: string;
1953
- }
1954
-
1955
- export declare interface GetVideoAnalyticsViewsResponse {
1956
- previousViews?: number;
1957
- currentViews?: number;
1958
- totalViews?: number;
1959
- }
1960
-
1961
2273
  export declare interface GetViewAnalyticsResponse {
1962
2274
  viewCountAnalytics: ViewCountItem[];
1963
2275
  topWatched: TopWatchItem[];
@@ -1976,6 +2288,22 @@ export declare enum GRID_TYPES {
1976
2288
  SERIES = "SERIES"
1977
2289
  }
1978
2290
 
2291
+ /**
2292
+ * @public
2293
+ */
2294
+ export declare interface HeroBannerProps {
2295
+ title: string;
2296
+ description?: string;
2297
+ cover: string;
2298
+ onPlayClick?: () => void;
2299
+ onWatchlistClick?: () => void;
2300
+ playButtonHref?: string;
2301
+ watchlistButtonHref?: string;
2302
+ playButtonText?: string;
2303
+ watchlistButtonText?: string;
2304
+ isFavorite?: boolean;
2305
+ }
2306
+
1979
2307
  /**
1980
2308
  * @public
1981
2309
  */
@@ -1984,6 +2312,61 @@ export declare interface HistoryContextData {
1984
2312
  backOrRedirectToRoot: (delta?: number) => void;
1985
2313
  }
1986
2314
 
2315
+ export declare interface HomepageBannerButton {
2316
+ href: string;
2317
+ text: Translation;
2318
+ variant: HomepageBannerButtonVariant;
2319
+ leftIcon?: HomepageBannerButtonIcon;
2320
+ /**
2321
+ * Controls when this button should be visible.
2322
+ * Defaults to 'always' if not specified.
2323
+ */
2324
+ visibility?: HomepageBannerButtonVisibility;
2325
+ }
2326
+
2327
+ export declare type HomepageBannerButtonIcon = 'play';
2328
+
2329
+ export declare type HomepageBannerButtonVariant = 'primary' | 'secondary';
2330
+
2331
+ /**
2332
+ * Visibility condition for banner buttons.
2333
+ * - 'always': Button is always visible (default)
2334
+ * - 'notSignedIn': Button is only visible when user is not signed in
2335
+ * - 'signedIn': Button is only visible when user is signed in
2336
+ */
2337
+ export declare type HomepageBannerButtonVisibility = 'always' | 'notSignedIn' | 'signedIn';
2338
+
2339
+ export declare interface HomepageBannerExtendRowData {
2340
+ /**
2341
+ * Main title displayed on the banner
2342
+ */
2343
+ title?: Translation;
2344
+ /**
2345
+ * Subtitle/tagline displayed below title
2346
+ */
2347
+ subtitle?: {
2348
+ text: Translation;
2349
+ showIcon?: boolean;
2350
+ };
2351
+ /**
2352
+ * Multiple lines of descriptive text for multiline display
2353
+ */
2354
+ descriptionLines?: Translation[];
2355
+ /**
2356
+ * Array of buttons to display on the banner
2357
+ */
2358
+ buttons?: HomepageBannerButton[];
2359
+ /**
2360
+ * Single background image asset (legacy, use backgroundAssets for random selection)
2361
+ */
2362
+ asset?: ScalableAsset;
2363
+ /**
2364
+ * Array of background assets for random selection per page load.
2365
+ * If provided, one will be randomly selected each time the banner loads.
2366
+ */
2367
+ backgroundAssets?: ScalableAsset[];
2368
+ }
2369
+
1987
2370
  export declare type IncludedItem = {
1988
2371
  attributes: {
1989
2372
  next_charge_date: string;
@@ -2019,10 +2402,23 @@ export declare interface IndexedTag extends IndexedObject {
2019
2402
  created: Date;
2020
2403
  name: Translation;
2021
2404
  description?: string;
2405
+ /**
2406
+ * True if the tag has assets (non-empty assets object).
2407
+ */
2408
+ hasAssets: boolean;
2409
+ /**
2410
+ * True if the tag has content (has videos or series episodes).
2411
+ */
2412
+ hasContent: boolean;
2022
2413
  /**
2023
2414
  * True if the tag is available in Tivio Pro (StarMe)
2024
2415
  */
2025
2416
  isTivioPro: boolean;
2417
+ /**
2418
+ * Parental guidance rating (e.g., "O", "07", "U", "7+")
2419
+ * Used for filtering content based on age restrictions for kids profiles
2420
+ */
2421
+ pgRating?: string;
2026
2422
  }
2027
2423
 
2028
2424
  /**
@@ -2068,6 +2464,11 @@ export declare interface IndexedVideo extends IndexedObject {
2068
2464
  defaultName: string;
2069
2465
  name: string | Translation;
2070
2466
  description: string | Translation;
2467
+ descriptionRich?: Translation;
2468
+ /**
2469
+ * EPG program-friendly name
2470
+ */
2471
+ shortName?: Translation;
2071
2472
  hide: boolean;
2072
2473
  isDuplicate: boolean;
2073
2474
  externals?: VideoExternals;
@@ -2086,46 +2487,22 @@ export declare interface IndexedVideo extends IndexedObject {
2086
2487
  * see https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/how-to/filter-by-attributes/#filter-by-null-or-missing-attributes.
2087
2488
  */
2088
2489
  monetizationAccessIds: string[] | false;
2490
+ /**
2491
+ * See {@link VideoDocument.pgRating}
2492
+ */
2493
+ pgRating?: string;
2494
+ /**
2495
+ * See {@link VideoDocument.contentDescriptors}
2496
+ */
2497
+ contentDescriptors?: string[];
2089
2498
  }
2090
2499
 
2091
- export declare type InputSourceParams = SourceParams | VodExternalMultiSourceParams;
2092
-
2093
2500
  export declare type IntegrationType = 'discord' | 'patreon';
2094
2501
 
2095
- export declare interface InteractiveWidget<T extends InteractiveWidgetScene = InteractiveWidgetScene> {
2096
- readonly id: string;
2097
- readonly path: string;
2098
- readonly currentQuestion: CurrentQuestion | null;
2099
- readonly status: QuizGameStatus;
2100
- readonly questionsCount: number;
2101
- readonly currentAnswerId?: string;
2102
- readonly currentState: InteractiveWidgetState;
2103
- /**
2104
- * State delayed for end users, which is used to toggle scenes just like in OBS and host view
2105
- */
2106
- readonly currentStateWithDelay: InteractiveWidgetCurrentStateWithDelay;
2107
- readonly answers?: QuestionAnswer[];
2108
- readonly questionIndex?: number;
2109
- readonly isSubmitted?: boolean;
2110
- readonly leaderboard: LeaderboardGroupItem | null;
2111
- readonly highlightedUsersIds: string[];
2112
- readonly userRole: QuizGameRole;
2113
- readonly secondsToAnswer: number;
2114
- readonly scenes: T[];
2115
- readonly activeScene: T | null;
2116
- readonly theme?: InteractiveWidgetTheme;
2117
- readonly showCountdown: boolean;
2118
- readonly lastQuestionTopScorers: LeaderboardPlayer[];
2119
- readonly questionRepository: QuestionRepository;
2120
- readonly isWaitingForStart: boolean;
2121
- answerQuestion(answerId: string): void;
2122
- submitAnswer(request: Pick<SubmitAnswerRequest, 'answerOptionId' | 'answerText'>): Promise<void>;
2123
- verifyJoinCode(joinCode: string, shouldJoinPlayer?: boolean): Promise<boolean>;
2124
- destroy(): void;
2125
- }
2502
+ export declare type InteractiveWidget<TScene extends InteractiveWidgetScene = InteractiveWidgetScene> = QuizWidget<TScene> | PollWidget<TScene>;
2126
2503
 
2127
- export declare interface InteractiveWidgetCurrentStateWithDelay {
2128
- state: InteractiveWidgetState;
2504
+ export declare interface InteractiveWidgetCurrentStateWithDelay<TState extends InteractiveWidgetState = InteractiveWidgetState> {
2505
+ state: TState;
2129
2506
  enteredAt: Date;
2130
2507
  }
2131
2508
 
@@ -2139,6 +2516,27 @@ export declare enum InteractiveWidgetDisplayComponent {
2139
2516
  AD_VAST = "adVast"
2140
2517
  }
2141
2518
 
2519
+ export declare interface InteractiveWidgetGroupStats {
2520
+ answerPercentages: Record<string, number>;
2521
+ averageScore: number;
2522
+ correctAnswersRatio: number;
2523
+ }
2524
+
2525
+ export declare enum InteractiveWidgetGroupType {
2526
+ HIGHLIGHTED_PLAYERS = "HIGHLIGHTED_PLAYERS",
2527
+ /** Participants playing in Offline mode */
2528
+ LOCAL_PLAYERS = "LOCAL_PLAYERS",
2529
+ ALL = "ALL",
2530
+ PARTY = "PARTY"
2531
+ }
2532
+
2533
+ export declare enum InteractiveWidgetRole {
2534
+ OBS = "OBS",
2535
+ HOST = "HOST",
2536
+ PLAYER = "PLAYER",
2537
+ LOCAL_PLAYER = "LOCAL_PLAYER"
2538
+ }
2539
+
2142
2540
  export declare type InteractiveWidgetScene = CurrentQuestionScene | LeaderboardScene | QRCodeScene | AdBannerScene | PlayersScene | NoGraphicsScene | CountdownScene;
2143
2541
 
2144
2542
  export declare interface InteractiveWidgetSceneBase<TType extends InteractiveWidgetSceneTemplateType> {
@@ -2196,6 +2594,16 @@ export declare enum InteractiveWidgetState {
2196
2594
  RESET_GAME = "ResetGame"
2197
2595
  }
2198
2596
 
2597
+ export declare enum InteractiveWidgetStatus {
2598
+ /**
2599
+ * Waiting to start the quiz / question
2600
+ */
2601
+ WAITING = "WAITING",
2602
+ IN_PROGRESS = "IN_PROGRESS",
2603
+ IN_BETWEEN_QUESTIONS = "IN_BETWEEN_QUESTIONS",
2604
+ DONE = "DONE"
2605
+ }
2606
+
2199
2607
  export declare interface InteractiveWidgetTheme {
2200
2608
  palette: Record<string, string>;
2201
2609
  components: {
@@ -2205,6 +2613,11 @@ export declare interface InteractiveWidgetTheme {
2205
2613
 
2206
2614
  declare type InteractiveWidgetThemeKey = InteractiveWidgetDisplayComponent | `${InteractiveWidgetDisplayComponent.CURRENT_QUESTION}${AnswerStatus}` | 'timeLeftBar';
2207
2615
 
2616
+ export declare enum InteractiveWidgetType {
2617
+ POLL = "POLL",
2618
+ QUIZ = "QUIZ"
2619
+ }
2620
+
2208
2621
  /**
2209
2622
  * @public
2210
2623
  */
@@ -2231,6 +2644,15 @@ export declare type InternalConfig = SdkReactConfig & {
2231
2644
  forceCloudFnResolver?: boolean;
2232
2645
  };
2233
2646
 
2647
+ /**
2648
+ * Subset of `BaseInteractiveWidget` methods that are intentionally **not**
2649
+ * advertised on the SDK hook return types (`useInteractiveWidget`,
2650
+ * `useQuizWidget`, `usePollWidget`). These methods still exist at runtime and
2651
+ * are used by internal `core-react-dom` UI / server flows — they're just hidden
2652
+ * from external SDK consumers, which should only call `submitAnswer`.
2653
+ */
2654
+ export declare type InternalInteractiveWidgetMethods = 'answerQuestion' | 'verifyJoinCode' | 'changeState';
2655
+
2234
2656
  /**
2235
2657
  * @public
2236
2658
  */
@@ -2293,17 +2715,35 @@ export declare type ItemInRow = Tag | Video | TvChannel | Advertisement | Applic
2293
2715
  * @public
2294
2716
  */
2295
2717
  export declare interface JojExternals {
2718
+ /**
2719
+ * e.g. '19876'
2720
+ */
2296
2721
  tvProfiProgramId?: string;
2722
+ /**
2723
+ * e.g. 'S19876'
2724
+ */
2297
2725
  tvProfiContentId?: string;
2298
2726
  tvProfiSerialId?: string;
2727
+ /**
2728
+ * e.g. '70368744177695432'
2729
+ */
2299
2730
  contentId?: string;
2300
2731
  /**
2301
2732
  * Temporary contentId used only for live channel. The video is already encoded and stored in our storage
2302
2733
  * but is also stored on nangu platform to be used for live channel.
2303
2734
  */
2304
2735
  dvtvExtraContentId?: string;
2736
+ /**
2737
+ * e.g. 'W278510'
2738
+ */
2305
2739
  provysId?: string;
2740
+ /**
2741
+ * real provysId unlike provysId, e.g. '2-231027-0009'
2742
+ */
2306
2743
  tvProfiProvysId?: string;
2744
+ /**
2745
+ * e.g. 'W278510'
2746
+ */
2307
2747
  tvProfiHouseId?: string;
2308
2748
  tvProfiTitleOriginal?: string;
2309
2749
  tvProfiTitleSk?: string;
@@ -2329,7 +2769,20 @@ export declare enum LangCode {
2329
2769
  HU = "hu"
2330
2770
  }
2331
2771
 
2332
- export declare const LangCodeToTitle: Partial<Record<LangCode, string>>;
2772
+ export declare const LangCodeToCountryCodeMap: Partial<Record<LangCode, string>>;
2773
+
2774
+ export declare const LangCodeToCurrencyMap: Partial<Record<LangCode, Currency>>;
2775
+
2776
+ export declare const LangCodeToTitle: Record<LangCode, string>;
2777
+
2778
+ /**
2779
+ * Generic type for items that can be restricted to specific languages.
2780
+ * Use with filterByLanguageRestricted utility from @tivio/common.
2781
+ */
2782
+ export declare interface LanguageRestricted {
2783
+ /** By default is available in every language */
2784
+ availableIn?: LangCode[];
2785
+ }
2333
2786
 
2334
2787
  /**
2335
2788
  * All supported languages codes as in ISO 639-1
@@ -2354,7 +2807,7 @@ export declare interface LastMessage {
2354
2807
  export declare interface LeaderboardGroupItem {
2355
2808
  groupPath?: string;
2356
2809
  groupName?: string;
2357
- type: QuizGameGroupType;
2810
+ type: InteractiveWidgetGroupType;
2358
2811
  /**
2359
2812
  * Consists of top 3 players of the group (global or private team)
2360
2813
  * the player's rank in the group
@@ -2524,11 +2977,35 @@ export declare enum LoginRedirect {
2524
2977
  REMOTE_CONTROLLER = "remote-controller"
2525
2978
  }
2526
2979
 
2980
+ declare interface ManageMemberDeleteRequest extends ManageMemberRequestBase {
2981
+ action: 'deleteMember';
2982
+ }
2983
+
2984
+ export declare type ManageMemberRequest = ManageMemberUpdateRoleRequest | ManageMemberDeleteRequest;
2985
+
2527
2986
  /**
2528
- * @public
2987
+ * Request body for manageMember cloud function.
2988
+ * Handles member management operations (role update, deletion) within an organization.
2989
+ */
2990
+ declare interface ManageMemberRequestBase {
2991
+ organizationId: string;
2992
+ targetMemberUid: string;
2993
+ }
2994
+
2995
+ /**
2996
+ * Response body for manageMember cloud function.
2529
2997
  */
2530
- export declare interface MallTvExternals {
2531
- mallTvEntityId: string;
2998
+ export declare interface ManageMemberResponse {
2999
+ success: boolean;
3000
+ }
3001
+
3002
+ declare interface ManageMemberUpdateRoleRequest extends ManageMemberRequestBase {
3003
+ action: 'updateRole';
3004
+ /**
3005
+ * New role for the target member.
3006
+ * Value corresponds to OrganizationMemberRoles enum from @tivio/firebase.
3007
+ */
3008
+ role: number;
2532
3009
  }
2533
3010
 
2534
3011
  /**
@@ -2592,11 +3069,37 @@ export declare enum MarkerType {
2592
3069
  NONE = "none"
2593
3070
  }
2594
3071
 
3072
+ /**
3073
+ * Tile data for MEDIA_ACCORDEON rows.
3074
+ * Contains id, name, and path for video references.
3075
+ * @public
3076
+ */
3077
+ export declare interface MediaAccordeonTileSpecificData {
3078
+ /**
3079
+ * Custom item ID for unique identification.
3080
+ */
3081
+ id: string;
3082
+ /**
3083
+ * Custom item name for display purposes.
3084
+ */
3085
+ name: Translation;
3086
+ /**
3087
+ * Firestore path to the video.
3088
+ */
3089
+ path: string;
3090
+ }
3091
+
2595
3092
  declare type Membership = {
2596
3093
  id: string;
2597
3094
  type: string;
2598
3095
  };
2599
3096
 
3097
+ export declare type MergeUserAccountsPayload = {
3098
+ email: string;
3099
+ name?: string;
3100
+ password: string;
3101
+ };
3102
+
2600
3103
  /**
2601
3104
  * @public
2602
3105
  */
@@ -2632,6 +3135,17 @@ export declare interface MessageUser {
2632
3135
  email: string;
2633
3136
  }
2634
3137
 
3138
+ export declare enum MetadataFieldId {
3139
+ NAME = "name",// always required
3140
+ SHORT_NAME = "shortName",// optional, fixed position (not sortable)
3141
+ DESCRIPTION = "description",// always required
3142
+ RICH_DESCRIPTION = "richDescription",// optional, fixed position (not sortable)
3143
+ TAGS = "tags",
3144
+ FILM_DETAILS = "filmDetails",
3145
+ AUDIENCE_LIMITATIONS = "audienceLimitations",
3146
+ PRODUCT_PLACEMENT = "productPlacement"
3147
+ }
3148
+
2635
3149
  /**
2636
3150
  * External information of video migrated via our Public API.
2637
3151
  * @public
@@ -2853,11 +3367,6 @@ declare type Notification_2 = {
2853
3367
  } & EmailNotification;
2854
3368
  export { Notification_2 as Notification }
2855
3369
 
2856
- export declare interface NotificationDuration {
2857
- value: number;
2858
- unit: dayjs.ManipulateType;
2859
- }
2860
-
2861
3370
  export declare type NotificationFilterType = NotificationFirestoreFilterType | NotificationSurveyFilterType | NotificationLastActivityFilterType;
2862
3371
 
2863
3372
  export declare type NotificationFirestoreFilterType = NotificationSubscriptionFilterType | NotificationMembershipFilterType;
@@ -2880,12 +3389,21 @@ export declare interface NotificationMembershipFilterType {
2880
3389
  };
2881
3390
  }
2882
3391
 
3392
+ /**
3393
+ * Lifecycle status of a notification.
3394
+ */
2883
3395
  export declare enum NotificationStatus {
3396
+ /** Automatic trigger types (e.g. purchaseStatusChange, duration, userRegistration); not manually or scheduled sent. */
2884
3397
  AUTOMATIC = "automatic",
3398
+ /** Editable, not yet scheduled or sent. Initial state; can transition to PLANNED when scheduled. */
2885
3399
  DRAFT = "draft",
3400
+ /** Scheduled (e.g. Cloud Task created for email, or push scheduled). For push, sending runs on DRAFT→PLANNED then status becomes SENT. */
2886
3401
  PLANNED = "planned",
3402
+ /** Notification has been sent. Set after push send and after email send for manual/scheduled. */
2887
3403
  SENT = "sent",
3404
+ /** Manual trigger saved and waiting to be sent (no lastSent yet). */
2888
3405
  WAITING = "waiting",
3406
+ /** Currently being sent (e.g. EmailSender sets RUNNING before sendEmails). Saving and re-sending are blocked while RUNNING. */
2889
3407
  RUNNING = "running"
2890
3408
  }
2891
3409
 
@@ -2919,6 +3437,17 @@ export declare interface NotificationTargeting {
2919
3437
  to?: Date;
2920
3438
  }
2921
3439
 
3440
+ /**
3441
+ * How the notification is triggered.
3442
+ * - **scheduled**: Sent at a fixed time (scheduleTime). Status becomes PLANNED when scheduled;
3443
+ * used with Cloud Tasks for email and for push when moving from DRAFT to PLANNED.
3444
+ * - **manual**: Sent on demand from the admin. Status is WAITING until sent, then SENT.
3445
+ * - **purchaseStatusChange**: Fired when a user's purchase/subscription status changes (before/after).
3446
+ * Matched by getNotificationByPurchaseStatuses; status is AUTOMATIC.
3447
+ * - **duration**: Time-based (e.g. subscription duration). Used by the daily email job (sendEmailsDaily)
3448
+ * via DurationEmailSender to target users by duration criteria.
3449
+ * - **userRegistration**: Fired when a user registers. Resolved by getNotificationUserRegistration.
3450
+ */
2922
3451
  export declare type NotificationTriggerType = 'scheduled' | 'manual' | 'purchaseStatusChange' | 'duration' | 'userRegistration';
2923
3452
 
2924
3453
  export declare enum NotificationType {
@@ -2933,6 +3462,13 @@ export declare type Nullable<T> = {
2933
3462
  [P in keyof T]: T[P] | null;
2934
3463
  };
2935
3464
 
3465
+ export declare interface NumberItem {
3466
+ value: string;
3467
+ description: Translation;
3468
+ }
3469
+
3470
+ export declare type NumbersTileSpecificData = NumberItem;
3471
+
2936
3472
  /**
2937
3473
  * @public
2938
3474
  */
@@ -2998,6 +3534,20 @@ export declare interface OrganizationSettingsField extends OrganizationResponsiv
2998
3534
  enabled: boolean;
2999
3535
  };
3000
3536
  allowedSignInProviders?: SignInProvider[];
3537
+ /**
3538
+ * Social authentication provider for this organization
3539
+ * 'auth0' - Use Auth0 for social login (Kviff)
3540
+ * 'firebase' - Use Firebase Auth for social login (default)
3541
+ */
3542
+ socialAuthProvider?: 'auth0' | 'firebase';
3543
+ /**
3544
+ * Auth0 configuration for organizations using Auth0 social login.
3545
+ * Only relevant when socialAuthProvider === 'auth0'.
3546
+ */
3547
+ auth0?: {
3548
+ domain: string;
3549
+ clientId: string;
3550
+ };
3001
3551
  disableComments?: boolean;
3002
3552
  /**
3003
3553
  * Used on CNC webs - When buying a yearly subscription the recalculated monthly price is display below the yearly price
@@ -3043,6 +3593,11 @@ export declare interface OrganizationSettingsField extends OrganizationResponsiv
3043
3593
  id: string;
3044
3594
  };
3045
3595
  };
3596
+ /**
3597
+ * With this setting, it's possible for the users to purchase with discounted price for the same monetization, if it expired before 1 month ago.
3598
+ * The logic can be found here: {@link apps/api/functions/src/model/purchase.ts}
3599
+ * At the same time `allowExpired: true` setting on a monetization variant will enable discounted variant if the user has active or expired purchase of monetizationRef.
3600
+ */
3046
3601
  cancelledSubscriptionDiscount?: {
3047
3602
  enabled: boolean;
3048
3603
  };
@@ -3058,6 +3613,28 @@ export declare interface OrganizationSettingsField extends OrganizationResponsiv
3058
3613
  pushNotifications?: {
3059
3614
  enabled?: boolean;
3060
3615
  };
3616
+ recommendations?: {
3617
+ videosNoOlderThan?: {
3618
+ unit: 'month';
3619
+ value: number;
3620
+ };
3621
+ };
3622
+ /**
3623
+ * Payment flow configuration
3624
+ * @default PaymentFlow.NEW
3625
+ */
3626
+ paymentFlow?: PaymentFlow;
3627
+ contentMetadata?: {
3628
+ [MetadataFieldId.SHORT_NAME]?: ContentMetadataOptions;
3629
+ [MetadataFieldId.RICH_DESCRIPTION]?: ContentMetadataOptions;
3630
+ [MetadataFieldId.TAGS]?: ContentMetadataOptions;
3631
+ [MetadataFieldId.FILM_DETAILS]?: ContentMetadataOptions;
3632
+ [MetadataFieldId.AUDIENCE_LIMITATIONS]?: ContentMetadataOptions;
3633
+ [MetadataFieldId.PRODUCT_PLACEMENT]?: ContentMetadataOptions;
3634
+ };
3635
+ aiProcessing?: {
3636
+ assets?: boolean;
3637
+ };
3061
3638
  }
3062
3639
 
3063
3640
  /**
@@ -3072,7 +3649,7 @@ export declare type OtherSource = SourceBase & StartAndContinuePosition & {
3072
3649
 
3073
3650
  export declare interface PaginatedResponse<T = unknown, U extends NextPageParamType = NextPageParamType> {
3074
3651
  items: T[];
3075
- nextPageParams: {
3652
+ nextPageParams: ({
3076
3653
  offset: number;
3077
3654
  limit: number;
3078
3655
  } & (U extends 'screenId' ? {
@@ -3084,7 +3661,7 @@ export declare interface PaginatedResponse<T = unknown, U extends NextPageParamT
3084
3661
  rowId: string;
3085
3662
  } : U extends 'filter' ? {
3086
3663
  filter: Omit<RowFilterField, 'limit'>;
3087
- } : {}) | null;
3664
+ } : object)) | null;
3088
3665
  }
3089
3666
 
3090
3667
  /**
@@ -3119,20 +3696,6 @@ export declare interface PartialRegistrationOverlayContextState {
3119
3696
  voucher?: string;
3120
3697
  }
3121
3698
 
3122
- /**
3123
- * @public
3124
- * Generic interface for sources that can be identified by a path (video or TV channel)
3125
- */
3126
- export declare type PathSourceParams = PathSourceParamsTvChannel | PathSourceParamsVideo;
3127
-
3128
- declare interface PathSourceParamsTvChannel extends Partial<ChannelSourceParams> {
3129
- path: `tvChannels/${string}`;
3130
- }
3131
-
3132
- declare interface PathSourceParamsVideo extends Partial<Omit<VodTivioSourceParams, 'videoPath'>> {
3133
- path: `videos/${string}`;
3134
- }
3135
-
3136
3699
  export declare type PatreonCreatorData = {
3137
3700
  campaign: string;
3138
3701
  tiers: Tier[];
@@ -3176,6 +3739,17 @@ export declare type PatreonUserResponse = {
3176
3739
  errors?: PatreonError[];
3177
3740
  };
3178
3741
 
3742
+ /**
3743
+ * @public
3744
+ *
3745
+ * - NEW: Automatically show payment overlay when tasting video ends (ContentIsPaidOverlay with poster)
3746
+ * - LEGACY: Old behavior - users must manually click to purchase, no automatic overlay
3747
+ */
3748
+ export declare enum PaymentFlow {
3749
+ NEW = "new",
3750
+ LEGACY = "legacy"
3751
+ }
3752
+
3179
3753
  /**
3180
3754
  * @public
3181
3755
  */
@@ -3292,11 +3866,6 @@ export declare type PlayerConfig = {
3292
3866
  */
3293
3867
  name: 'IMA SDK' | 'TIVIO AD SERVICE';
3294
3868
  };
3295
- /**
3296
- * If true, then TV channels are not available for anonymous users and they will be shown an overlay to sign in.
3297
- * @default false
3298
- */
3299
- disableTvChannelsForAnonymousUsers?: boolean;
3300
3869
  };
3301
3870
 
3302
3871
  /**
@@ -3308,6 +3877,8 @@ export declare interface PlayerEngineConfig {
3308
3877
  isAd?: boolean;
3309
3878
  positionMs?: number;
3310
3879
  url: string;
3880
+ sessionType?: SessionType;
3881
+ sourcePlayMode?: SourcePlayMode;
3311
3882
  }
3312
3883
 
3313
3884
  /**
@@ -3413,18 +3984,50 @@ export declare interface PlayerEngineInterface {
3413
3984
  selectPlaybackSpeed?: (playbackSpeed: number) => void;
3414
3985
  destroy(): Promise<void>;
3415
3986
  getBufferedInfo?(): BufferChunk[];
3416
- lastQuality: number | null;
3417
3987
  /**
3418
- * Attribute indicating that the video is to be played "inline"
3419
- * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline
3988
+ * Clears buffered segments ahead of the current playback position.
3989
+ * Used during interactive streaming camera switches to enable faster content transition.
3990
+ *
3991
+ * @param safeMarginMs - Milliseconds of buffer to keep ahead of current position (default: 0)
3992
+ * @param secondarySourceId - Optional ID of the secondary source being switched to
3993
+ * @returns Promise that resolves when buffer clearing is complete
3420
3994
  */
3421
- setPlaysInline(value: boolean): void;
3995
+ clearBufferAhead?(safeMarginMs?: number, secondarySourceId?: string): Promise<void>;
3996
+ /**
3997
+ * Sets the streaming profile to configure buffer behavior.
3998
+ * Use 'low' for interactive streaming with fast camera switches,
3999
+ * 'medium' for balanced behavior, 'high' for maximum stability.
4000
+ *
4001
+ * @param profile - The streaming profile to apply
4002
+ */
4003
+ setStreamingProfile?(profile: StreamingProfile): void;
4004
+ /**
4005
+ * Gets the current streaming profile.
4006
+ */
4007
+ getStreamingProfile?(): StreamingProfile;
4008
+ /**
4009
+ * Set whether to prefer native HLS playback over MSE.
4010
+ * This is required for AirPlay to work properly in Safari.
4011
+ * Must be called before play() to take effect.
4012
+ *
4013
+ * @param preferNativeHls - Whether to prefer native HLS playback
4014
+ */
4015
+ setPreferNativeHls?(preferNativeHls: boolean): void;
4016
+ /**
4017
+ * Reload the current source with the current configuration (including preferNativeHls).
4018
+ * This is a lightweight reload that doesn't go through the full playerWrapper source pipeline.
4019
+ * Used for switching between MSE and native HLS playback for AirPlay.
4020
+ *
4021
+ * @returns Promise that resolves when reload is complete
4022
+ */
4023
+ reloadCurrentConfig?(): Promise<void>;
4024
+ lastQuality: number | null;
4025
+ /**
4026
+ * Attribute indicating that the video is to be played "inline"
4027
+ * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline
4028
+ */
4029
+ setPlaysInline(value: boolean): void;
3422
4030
  setControlsList(value: string[]): void;
3423
- /** Gets resolution of the video element in pixels - container size, not the actual source quality resolution */
3424
- getVideoResolution(): {
3425
- width: number;
3426
- height: number;
3427
- };
3428
4031
  }
3429
4032
 
3430
4033
  /**
@@ -3520,11 +4123,19 @@ export declare interface PlayerInterface {
3520
4123
  */
3521
4124
  setPlaysInline?: (value: boolean) => void;
3522
4125
  setControlsList?: (value: string[]) => void;
3523
- /** Gets resolution of the video element in pixels - container size, not the actual source quality resolution */
3524
- getVideoResolution(): {
3525
- width: number;
3526
- height: number;
3527
- };
4126
+ /**
4127
+ * Clears buffered segments ahead of the current playback position.
4128
+ * Used during interactive streaming camera switches to enable faster content transition.
4129
+ *
4130
+ * @param safeMarginMs - Milliseconds of buffer to keep ahead of current position (default: 0)
4131
+ * @returns Promise that resolves when buffer clearing is complete
4132
+ */
4133
+ clearBufferAhead?: (safeMarginMs?: number, secondarySourceId?: string) => Promise<void>;
4134
+ /**
4135
+ * Callback to receive camera switch progress updates.
4136
+ * Called by the engine during interactive streaming camera switches.
4137
+ */
4138
+ onCameraSwitchProgress?: (progress: CameraSwitchProgress) => void;
3528
4139
  }
3529
4140
 
3530
4141
  /**
@@ -3594,7 +4205,6 @@ export declare interface PlayerSourceInterface<T extends NonAdSourceType = NonAd
3594
4205
  start?: Date;
3595
4206
  from?: Date;
3596
4207
  sourceHistory?: string[];
3597
- staticAdsConfig?: StaticAdsBreak[];
3598
4208
  }
3599
4209
 
3600
4210
  /**
@@ -3613,7 +4223,6 @@ export declare interface PlayerSourceParams<T extends NonAdSourceType = NonAdSou
3613
4223
  seekingMatrix?: SeekingMatrixTemplate;
3614
4224
  sessionType?: VideoSourceField['sessionType'];
3615
4225
  sessionId?: string;
3616
- staticAdsConfig?: StaticAdsBreak[];
3617
4226
  }
3618
4227
 
3619
4228
  export declare type PlayersScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.PLAYERS>;
@@ -3627,13 +4236,6 @@ export declare type PlayerState = 'idle' | 'playing' | 'paused';
3627
4236
  * @public
3628
4237
  */
3629
4238
  export declare interface PlayerWrapper {
3630
- /**
3631
- * Unique id of the player wrapper instance, set at construction time
3632
- * (e.g. by `tivio.getPlayerWrapper(id)`). Used to scope DOM ids of
3633
- * player-owned elements (IMA ad containers, content video element, …)
3634
- * so multiple players on the same page don't collide.
3635
- */
3636
- readonly id: string;
3637
4239
  /**
3638
4240
  * Report that playback of video has finished
3639
4241
  */
@@ -3672,6 +4274,11 @@ export declare interface PlayerWrapper {
3672
4274
  availableLanguages: LangCode[] | null;
3673
4275
  canReplay: boolean;
3674
4276
  currentSecondarySource: Video | null;
4277
+ /**
4278
+ * Camera switch transition progress for interactive streaming.
4279
+ * Non-null when a camera switch is in progress.
4280
+ */
4281
+ cameraSwitchProgress: CameraSwitchProgress | null;
3675
4282
  currentTime: number;
3676
4283
  /**
3677
4284
  * Currently playing source
@@ -3722,6 +4329,10 @@ export declare interface PlayerWrapper {
3722
4329
  * Retry to play a video that failed to start playing (e.g. due to a network error)
3723
4330
  */
3724
4331
  retry: () => void;
4332
+ /**
4333
+ * Refresh the current source by calling getSourceUrl without sourceHistory.
4334
+ */
4335
+ refreshSource: () => Promise<void>;
3725
4336
  togglePlayPause: () => void;
3726
4337
  seekTo: (ms: number) => void;
3727
4338
  /**
@@ -3730,6 +4341,21 @@ export declare interface PlayerWrapper {
3730
4341
  setVolume: (volume: number) => void;
3731
4342
  changeLanguage: (langCode: LangCode) => Promise<void>;
3732
4343
  changeToFallbackSource: () => Promise<void>;
4344
+ /**
4345
+ * Switch to HLS source for AirPlay (Safari/iOS only).
4346
+ * Preserves current playback position.
4347
+ */
4348
+ switchToHlsForAirplay: () => Promise<void>;
4349
+ /**
4350
+ * Switch back to DASH from HLS after AirPlay disconnects.
4351
+ * Preserves current playback position.
4352
+ */
4353
+ switchToDashFromAirplay: () => Promise<void>;
4354
+ /**
4355
+ * Reload the current source while preserving playback position.
4356
+ * Used when switching between native HLS and MSE playback modes.
4357
+ */
4358
+ reloadCurrentSource: () => Promise<void>;
3733
4359
  /**
3734
4360
  * change volume by value between -1,1
3735
4361
  */
@@ -3738,10 +4364,6 @@ export declare interface PlayerWrapper {
3738
4364
  setCanPlay: (canPlay: boolean) => void;
3739
4365
  toggleMuted: () => void;
3740
4366
  getQualities: () => Track[];
3741
- getVideoResolution: () => {
3742
- width: number;
3743
- height: number;
3744
- };
3745
4367
  playNativeImaAd: (url: string) => void;
3746
4368
  playSourceAfterAdsRun: () => void;
3747
4369
  putAd: (ad: AdSourceInterface) => void;
@@ -3758,10 +4380,20 @@ export declare interface PlayerWrapper {
3758
4380
  seekToLive: () => void;
3759
4381
  seekToLiveInternal: () => void;
3760
4382
  setIsBuffering: (isBuffering: boolean) => void;
4383
+ isCasting: boolean;
3761
4384
  setIsCasting: (isCasting: boolean) => void;
3762
4385
  skipAd: () => void;
3763
4386
  skipAllAds: () => void;
3764
4387
  switchSecondarySource: (activeVideoId?: string) => Promise<void>;
4388
+ /**
4389
+ * Set whether to prefer HLS sources over DASH.
4390
+ * Used in Safari/iOS when AirPlay is available, as AirPlay only supports HLS streaming.
4391
+ */
4392
+ setPreferHls: (preferHls: boolean) => void;
4393
+ /**
4394
+ * Suppress watermark tamper detection during AirPlay source switching.
4395
+ */
4396
+ setAirplaySwitching?: (isSwitching: boolean) => void;
3765
4397
  }
3766
4398
 
3767
4399
  /**
@@ -3786,19 +4418,7 @@ export declare enum PlayerWrapperEvents {
3786
4418
  /**
3787
4419
  * Un-pause was triggered
3788
4420
  */
3789
- 'unpause_triggered' = "unpause_triggered",
3790
- /**
3791
- * Triggered when an ad starts playing
3792
- */
3793
- 'ad-started' = "ad-started",
3794
- /**
3795
- * Triggered when an ad finishes playing
3796
- */
3797
- 'ad-ended' = "ad-ended",
3798
- /**
3799
- * Triggered when companion ads are available for the current ad
3800
- */
3801
- 'companion-ads' = "companion-ads"
4421
+ 'unpause_triggered' = "unpause_triggered"
3802
4422
  }
3803
4423
 
3804
4424
  /**
@@ -3814,6 +4434,22 @@ export declare enum PlayerWrapperEventType {
3814
4434
  */
3815
4435
  export declare type PlayerWrapperEventTypeType = `${PlayerWrapperEventType}`;
3816
4436
 
4437
+ export declare type PollQuestion = CurrentQuestion<PollQuestionAnswer>;
4438
+
4439
+ export declare interface PollQuestionAnswer extends BaseQuestionAnswer {
4440
+ votes?: number;
4441
+ }
4442
+
4443
+ /**
4444
+ * A poll-flavored interactive widget. No scoring / leaderboard / countdown — just
4445
+ * "here's a question, here are the vote counts". Uses a narrower state machine.
4446
+ */
4447
+ export declare interface PollWidget<TScene extends InteractiveWidgetScene = InteractiveWidgetScene> extends BaseInteractiveWidget<PollQuestionAnswer, PollWidgetState, TScene> {
4448
+ readonly type: InteractiveWidgetType.POLL;
4449
+ }
4450
+
4451
+ export declare type PollWidgetState = InteractiveWidgetState.IDLE | InteractiveWidgetState.CURRENT_QUESTION | InteractiveWidgetState.LEADERBOARD | InteractiveWidgetState.RESET_GAME | InteractiveWidgetState.NEXT_STATE;
4452
+
3817
4453
  /**
3818
4454
  * @public
3819
4455
  */
@@ -3826,6 +4462,20 @@ export declare type PlayerWrapperEventTypeType = `${PlayerWrapperEventType}`;
3826
4462
  */
3827
4463
  export declare type PrerollCheck = (source: PlayerSource) => Promise<AdSourceInterface | null>;
3828
4464
 
4465
+ export declare type PresentBannerExtendRowData = {
4466
+ name: Translation;
4467
+ subname?: Translation;
4468
+ description?: Translation;
4469
+ avatars?: ScalableAsset[];
4470
+ avatarsText?: Translation;
4471
+ asset?: ScalableAsset;
4472
+ buttons?: RowButton[];
4473
+ };
4474
+
4475
+ export declare type PricesField = {
4476
+ [currency in Currency]?: number | null;
4477
+ };
4478
+
3829
4479
  export declare enum primaPlusMonetizationLevel {
3830
4480
  light = "z7soJTA2dYSxnOOJw7B0",
3831
4481
  premium = "kwfM0D7Vzv5wfLf5go8o",
@@ -3924,8 +4574,9 @@ export declare interface ProgressMetadata {
3924
4574
  * @public
3925
4575
  */
3926
4576
  export declare interface Promotion {
4577
+ id?: string;
3927
4578
  duration?: Duration;
3928
- price?: number;
4579
+ prices?: PricesField;
3929
4580
  requiresPaymentAuthorization?: boolean;
3930
4581
  hideOtherSubscriptions?: boolean;
3931
4582
  }
@@ -3975,7 +4626,9 @@ export declare interface PurchasableMonetization extends Monetization {
3975
4626
  */
3976
4627
  price?: string | number;
3977
4628
  promotion: Promotion | null;
3978
- frequency?: MONETIZATION_FREQUENCY;
4629
+ frequency?: Omit<FrequencyInfo, 'title'> & {
4630
+ title: string;
4631
+ };
3979
4632
  frequencyInfo?: FrequencyInfo;
3980
4633
  durationDays?: number;
3981
4634
  /**
@@ -4015,7 +4668,30 @@ export declare interface PurchasableMonetization extends Monetization {
4015
4668
  * Number of seats left for the subscription.
4016
4669
  */
4017
4670
  seatsLeft?: number;
4671
+ /**
4672
+ * Trial period in milliseconds for the subscription.
4673
+ */
4674
+ trialPeriod?: number;
4675
+ /**
4676
+ * Maximum quantity of the subscription.
4677
+ */
4018
4678
  maxQuantity?: number;
4679
+ /**
4680
+ * Currency of the monetization price.
4681
+ */
4682
+ currency?: Currency;
4683
+ /**
4684
+ * Detailed price information, including currency and amount - Takes the price getter from purchsable monetization entity.
4685
+ */
4686
+ detailedPrice?: DetailedPrice;
4687
+ /**
4688
+ * Subtitle for the monetization, used in UI.
4689
+ */
4690
+ subtitle?: string;
4691
+ /**
4692
+ * Banner title for the monetization, used in UI.
4693
+ */
4694
+ bannerTitle?: string;
4019
4695
  }
4020
4696
 
4021
4697
  /**
@@ -4047,6 +4723,7 @@ export declare type Purchase = {
4047
4723
  monetization: PurchaseMonetization | null;
4048
4724
  monetizationId: string | null;
4049
4725
  monetizationRef: any | null;
4726
+ nextPaymentDate: Date | null;
4050
4727
  status: PurchaseStatus | null;
4051
4728
  type: PurchaseType | null;
4052
4729
  /**
@@ -4433,17 +5110,12 @@ export declare interface QerkoTransaction {
4433
5110
  paymentStatus: string | null;
4434
5111
  getPaymentInfo: () => Promise<void>;
4435
5112
  voucherId?: string;
5113
+ isLoading: boolean;
4436
5114
  }
4437
5115
 
4438
5116
  export declare type QRCodeScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.QR_CODE>;
4439
5117
 
4440
- export declare interface QuestionAnswer {
4441
- id: string;
4442
- answer: Translation;
4443
- isCorrect?: boolean;
4444
- votes?: number;
4445
- status?: AnswerStatus;
4446
- }
5118
+ export declare type QuestionAnswer = QuizQuestionAnswer | PollQuestionAnswer;
4447
5119
 
4448
5120
  export declare enum QuestionEvents {
4449
5121
  NEW_QUESTION = "new_question",
@@ -4461,7 +5133,7 @@ export declare interface QuestionRepository {
4461
5133
  readonly selectedAnswerId: string | undefined;
4462
5134
  isSubmitted: boolean;
4463
5135
  isSubmitting: boolean;
4464
- setCurrentQuestion: (question: CurrentQuestion | null, role: QuizGameRole, secondsToAnswer: number, shouldEnterAtTimestampMs?: number) => void;
5136
+ setCurrentQuestion: (question: CurrentQuestion | null, role: InteractiveWidgetRole, secondsToAnswer: number, shouldEnterAtTimestampMs?: number, shouldAdjustEndTimestampMs?: boolean) => void;
4465
5137
  selectAnswer: (answerId: string | undefined) => void;
4466
5138
  setShowCountdown: (showCountdown: boolean) => void;
4467
5139
  reset: () => void;
@@ -4475,41 +5147,28 @@ export declare type QuestionRepositoryEventMap = {
4475
5147
  [QuestionEvents.QUESTION_TIMEOUT]: (question: CurrentQuestion | null) => void;
4476
5148
  };
4477
5149
 
4478
- export declare interface QuizGameGroupStats {
4479
- answerPercentages: Record<string, number>;
4480
- averageScore: number;
4481
- correctAnswersRatio: number;
4482
- }
5150
+ export declare type QuizQuestion = CurrentQuestion<QuizQuestionAnswer>;
4483
5151
 
4484
- export declare enum QuizGameGroupType {
4485
- HIGHLIGHTED_PLAYERS = "HIGHLIGHTED_PLAYERS",
4486
- /** Participants playing in Offline mode */
4487
- LOCAL_PLAYERS = "LOCAL_PLAYERS",
4488
- ALL = "ALL",
4489
- PARTY = "PARTY"
4490
- }
4491
-
4492
- export declare enum QuizGameRole {
4493
- OBS = "OBS",
4494
- HOST = "HOST",
4495
- PLAYER = "PLAYER",
4496
- LOCAL_PLAYER = "LOCAL_PLAYER"
5152
+ export declare interface QuizQuestionAnswer extends BaseQuestionAnswer {
5153
+ isCorrect?: boolean;
5154
+ votes?: number;
4497
5155
  }
4498
5156
 
4499
- export declare enum QuizGameStatus {
4500
- /**
4501
- * Waiting to start the quiz / question
4502
- */
4503
- WAITING = "WAITING",
4504
- IN_PROGRESS = "IN_PROGRESS",
4505
- IN_BETWEEN_QUESTIONS = "IN_BETWEEN_QUESTIONS",
4506
- DONE = "DONE"
5157
+ /**
5158
+ * A quiz-flavored interactive widget. Adds scoring, leaderboard, and countdown
5159
+ * concepts on top of the base, and narrows answers to `QuizQuestionAnswer`.
5160
+ */
5161
+ export declare interface QuizWidget<TScene extends InteractiveWidgetScene = InteractiveWidgetScene> extends BaseInteractiveWidget<QuizQuestionAnswer, QuizWidgetState, TScene> {
5162
+ readonly type: InteractiveWidgetType.QUIZ;
5163
+ readonly leaderboard: LeaderboardGroupItem | null;
5164
+ readonly lastQuestionTopScorers: LeaderboardPlayer[];
5165
+ readonly highlightedUsersIds: string[];
5166
+ readonly secondsToAnswer: number;
5167
+ readonly showCountdown: boolean;
5168
+ readonly questionRepository: QuestionRepository;
4507
5169
  }
4508
5170
 
4509
- export declare enum QuizGameType {
4510
- POLL = "POLL",
4511
- QUIZ = "QUIZ"
4512
- }
5171
+ export declare type QuizWidgetState = InteractiveWidgetState;
4513
5172
 
4514
5173
  /**
4515
5174
  * @public
@@ -4626,6 +5285,11 @@ export declare interface RemoteControlPairPayload {
4626
5285
  profileId: string;
4627
5286
  }
4628
5287
 
5288
+ export declare interface RemoteControlPairResponse {
5289
+ sessionId: string;
5290
+ videoId: string;
5291
+ }
5292
+
4629
5293
  export declare interface RemoteControlPlaybackControlPayload {
4630
5294
  sessionId: string;
4631
5295
  videoId: string;
@@ -4702,6 +5366,16 @@ export declare type RequiredNonNullable<T> = {
4702
5366
  [P in keyof T]-?: NonNullable<T[P]>;
4703
5367
  };
4704
5368
 
5369
+ export declare interface ReviewItem {
5370
+ asset: ScalableAsset;
5371
+ name: Translation;
5372
+ subname?: Translation;
5373
+ rating: 1 | 2 | 3 | 4 | 5;
5374
+ description?: Translation;
5375
+ }
5376
+
5377
+ export declare type ReviewTileSpecificData = ReviewItem;
5378
+
4705
5379
  /**
4706
5380
  * @public
4707
5381
  */
@@ -4724,6 +5398,7 @@ export declare interface RouterOverrides {
4724
5398
  gridType: GRID_TYPES.ROW;
4725
5399
  rowId: string;
4726
5400
  organizationId?: string;
5401
+ applicationHandle?: string;
4727
5402
  } | {
4728
5403
  gridType: GRID_TYPES.VIDEO;
4729
5404
  videoId: string;
@@ -4755,6 +5430,7 @@ export declare interface RouterOverrides {
4755
5430
  goToRecommendedFromOrganizationRow: (screenId: string, rowId: string) => void;
4756
5431
  goToMagentaMomentsPage: (voucher?: string) => void;
4757
5432
  goToVoucherRedeemPage: () => void;
5433
+ goToSubscriptionsPage: (organizationHandle?: string) => void;
4758
5434
  updateParams: (params: URLSearchParams) => void;
4759
5435
  navigate: (path: string) => void;
4760
5436
  }
@@ -4773,25 +5449,7 @@ export declare interface RouterOverridesContextState {
4773
5449
  /**
4774
5450
  * @public
4775
5451
  */
4776
- export declare interface Row {
4777
- id: string;
4778
- rowId: string;
4779
- name: string;
4780
- description?: string;
4781
- assets: AssetsField;
4782
- type: ScreenRowType;
4783
- isLiveRow: boolean;
4784
- tiles: PaginationInterface<ItemInRow>;
4785
- numberOfLines?: number;
4786
- monetizations?: {
4787
- monetizationRef: any;
4788
- }[];
4789
- rowComponent: RowComponent.ROW | RowComponent.BANNER;
4790
- itemComponent: RowItemComponent | BannerItemComponent;
4791
- organizationId?: string;
4792
- bottomComponent?: BottomComponent;
4793
- showDescriptionAsTitle?: boolean;
4794
- }
5452
+ export declare type Row = StaticRow | DynamicRow;
4795
5453
 
4796
5454
  /**
4797
5455
  * @public
@@ -4809,17 +5467,41 @@ export declare enum ROW_ITEM_TYPES {
4809
5467
  /**
4810
5468
  * @public
4811
5469
  */
4812
- export declare interface RowBanner extends Row {
5470
+ export declare interface RowBanner extends DynamicRow {
4813
5471
  rowComponent: RowComponent.BANNER;
4814
5472
  itemComponent: BannerItemComponent;
4815
5473
  }
4816
5474
 
5475
+ export declare interface RowButton {
5476
+ id: string;
5477
+ enabled: boolean;
5478
+ href: string;
5479
+ text: Translation;
5480
+ variant: 'primary' | 'secondary';
5481
+ leftIcon?: 'play';
5482
+ }
5483
+
4817
5484
  /**
4818
5485
  * @public
4819
5486
  */
4820
5487
  export declare enum RowComponent {
4821
5488
  ROW = "ROW",
4822
- BANNER = "BANNER"
5489
+ BANNER = "BANNER",
5490
+ BENEFITS = "BENEFITS",
5491
+ REVIEWS = "REVIEWS",
5492
+ MONETIZATIONS = "MONETIZATIONS",
5493
+ SPLIT_LAYOUT = "SPLIT_LAYOUT",
5494
+ NUMBERS = "NUMBERS",
5495
+ FAQ = "FAQ",
5496
+ CTA_BANNER = "CTA_BANNER",
5497
+ PRESENT_BANNER = "PRESENT_BANNER",
5498
+ MONETIZATION_BANNER = "MONETIZATION_BANNER",
5499
+ VIDEO_BANNER = "VIDEO_BANNER",
5500
+ MEDIA_ACCORDEON = "MEDIA_ACCORDEON",
5501
+ EXPLORE = "EXPLORE",
5502
+ BACKGROUND_BANNER = "BACKGROUND_BANNER",
5503
+ PARTNER_LOGOS = "PARTNER_LOGOS",
5504
+ HOMEPAGE_BANNER = "HOMEPAGE_BANNER"
4823
5505
  }
4824
5506
 
4825
5507
  export declare enum RowFilterCollection {
@@ -4853,72 +5535,10 @@ export declare interface RowFilterWhereField {
4853
5535
  value: any;
4854
5536
  }
4855
5537
 
4856
- export declare type RowInScreen = {
4857
- /**
4858
- * Firebase document path. If not provided, the row is not defined in db and is dynamically generated (e.g. recommendation row).
4859
- */
4860
- path?: string;
4861
- /**
4862
- * Tivio row ID.
4863
- */
4864
- rowId: string;
4865
- /**
4866
- * If all items are from the same organization this will be set.
4867
- */
4868
- organizationId?: string;
4869
- /**
4870
- * Row name.
4871
- */
4872
- name: Translation;
4873
- /**
4874
- * Row filter based on which to pick tiles.
4875
- */
4876
- filter?: RowFilterField;
4877
- /**
4878
- * Row order in the screen.
4879
- */
4880
- order?: number;
4881
- /**
4882
- * Number of lines of the title.
4883
- */
4884
- numberOfLines?: number;
4885
- /**
4886
- * Standard row or a Banner.
4887
- */
4888
- rowComponent: RowComponent;
4889
- /**
4890
- * Component to use to render the tiles in the row.
4891
- */
4892
- itemComponent: RowItemComponent | BannerItemComponent;
4893
- /**
4894
- * Type of the row (continue to watch, custom, filter, ...).
4895
- */
4896
- type: ScreenRowType;
4897
- /**
4898
- * Items to display in the row.
4899
- */
4900
- tiles: GetTilesInRowResponse;
4901
- /**
4902
- * Setting for decided what to show bellow the tiles
4903
- */
4904
- bottomComponent?: BottomComponent;
4905
- /**
4906
- * Setting for decided whether to show description instead of title in the tiles
4907
- */
4908
- showDescriptionAsTitle?: boolean;
4909
- /**
4910
- * Setting for decided whether to hide title in the tiles/banners
4911
- */
4912
- hideTitle?: boolean;
4913
- /**
4914
- * Link to external URL
4915
- */
4916
- externalUrl?: string;
4917
- /**
4918
- * Title of Play button
4919
- */
4920
- playButtonTitle?: Translation;
4921
- };
5538
+ /**
5539
+ * Row in screen - can be either static or dynamic
5540
+ */
5541
+ export declare type RowInScreen = StaticRowInScreen | DynamicRowInScreen;
4922
5542
 
4923
5543
  /**
4924
5544
  * @public
@@ -4931,6 +5551,7 @@ export declare interface RowItem extends RowItemAssets {
4931
5551
  assets: AssetsField | null;
4932
5552
  application: RowItemApplicationData | null;
4933
5553
  feedVisible?: boolean;
5554
+ tileProps?: TileProps;
4934
5555
  }
4935
5556
 
4936
5557
  /**
@@ -4968,7 +5589,11 @@ export declare enum RowItemComponent {
4968
5589
  ROW_ITEM_CREATORS_LANDSCAPE = "ROW_ITEM_CREATORS_LANDSCAPE",
4969
5590
  ROW_ITEM_CIRCLED = "ROW_ITEM_CIRCLED",
4970
5591
  ROW_ITEM_HIGHLIGHTED = "ROW_ITEM_HIGHLIGHTED",
4971
- ROW_ITEM_PLAIN = "ROW_ITEM_PLAIN"
5592
+ ROW_ITEM_PLAIN = "ROW_ITEM_PLAIN",
5593
+ SIDE_BANNER = "SIDE_BANNER",
5594
+ ROW_ITEM_FEATURED = "ROW_ITEM_FEATURED",
5595
+ CATEGORY_GRID = "CATEGORY_GRID",
5596
+ HERO_BANNER = "HERO_BANNER"
4972
5597
  }
4973
5598
 
4974
5599
  /**
@@ -4985,6 +5610,16 @@ export declare type RowItemsSubscription = (rowId: string, cb: (error: Error | n
4985
5610
  hasNextPage: boolean;
4986
5611
  } | null, fetchMore: null | ((count?: number) => void), isLoading: boolean) => void, limit?: number) => Disposer_2;
4987
5612
 
5613
+ /**
5614
+ * @public
5615
+ */
5616
+ export declare interface RowMonetizationData {
5617
+ id: string;
5618
+ path: string;
5619
+ placementType: 'channel' | 'tvChannel' | 'condition' | 'video' | 'section' | 'row';
5620
+ type: MonetizationType;
5621
+ }
5622
+
4988
5623
  /**
4989
5624
  * RowOrderByFieldPath that is used in @tivio/firebase needs to be retyped here.
4990
5625
  * @public
@@ -4997,7 +5632,7 @@ export declare enum RowOrderByFieldPath {
4997
5632
  /**
4998
5633
  * @public
4999
5634
  */
5000
- export declare interface RowStandard extends Row {
5635
+ export declare interface RowStandard extends DynamicRow {
5001
5636
  rowComponent: RowComponent.ROW;
5002
5637
  itemComponent: RowItemComponent;
5003
5638
  }
@@ -5036,7 +5671,7 @@ declare type SceneMetadata<TType extends InteractiveWidgetSceneTemplateType> = T
5036
5671
  } : TType extends InteractiveWidgetSceneTemplateType.LEADERBOARD ? {
5037
5672
  highlightedPlayers: LeaderboardPlayer[];
5038
5673
  topPlayers: LeaderboardPlayer[];
5039
- stats?: QuizGameGroupStats;
5674
+ stats?: InteractiveWidgetGroupStats;
5040
5675
  } : TType extends InteractiveWidgetSceneTemplateType.QR_CODE ? Record<Extract<SceneMetadataKeys[TType], string>, string> : TType extends InteractiveWidgetSceneTemplateType.AD_BANNER ? Record<Extract<SceneMetadataKeys[TType], string>, string> : TType extends InteractiveWidgetSceneTemplateType.PLAYERS ? Record<Extract<SceneMetadataKeys[TType], string>, string> : object;
5041
5676
 
5042
5677
  export declare interface SceneMetadataKeys {
@@ -5110,6 +5745,11 @@ declare interface Screen_2 {
5110
5745
  hasNextPage: boolean;
5111
5746
  refetchIfNeeded: () => Promise<void>;
5112
5747
  allowOrganizationBanner?: boolean;
5748
+ /**
5749
+ * Path to content (e.g., "videos/ID" or "tvChannels/ID").
5750
+ * Used for PLAYER screen type to specify which content to play.
5751
+ */
5752
+ contentPath?: string;
5113
5753
  }
5114
5754
  export { Screen_2 as Screen }
5115
5755
 
@@ -5141,7 +5781,7 @@ export declare type ScreenConfig = {
5141
5781
  /**
5142
5782
  * @public
5143
5783
  */
5144
- export declare type ScreenRowType = 'filter' | 'custom' | 'continueToWatch' | 'favourites' | 'topWatched' | 'applications';
5784
+ export declare type ScreenRowType = 'filter' | 'custom' | 'continueToWatch' | 'favourites' | 'topWatched' | 'applications' | 'static';
5145
5785
 
5146
5786
  /**
5147
5787
  * Listen to screen data
@@ -5158,7 +5798,9 @@ export declare enum ScreenType {
5158
5798
  EMBED = "embed",
5159
5799
  RECOMMENDATION = "recommendation",
5160
5800
  FEED = "feed",
5161
- EPG = "epg"
5801
+ EPG = "epg",
5802
+ LANDING = "landing",
5803
+ PLAYER = "player"
5162
5804
  }
5163
5805
 
5164
5806
  /**
@@ -5183,12 +5825,11 @@ export declare type SdkReactConfig = Omit<TivioConfig, 'language'> & {
5183
5825
  };
5184
5826
 
5185
5827
  /**
5186
- * @public
5828
+ * Narrows away `InternalInteractiveWidgetMethods` from any concrete widget
5829
+ * type. Distributes over discriminated unions so `SDKWidget<InteractiveWidget>`
5830
+ * stays a union of `SDKWidget<QuizWidget> | SDKWidget<PollWidget>`.
5187
5831
  */
5188
- export declare interface SDKUserAuthCallbacks {
5189
- onGoToLogin?: () => void;
5190
- onGoToRegistration?: () => void;
5191
- }
5832
+ export declare type SDKWidget<T> = T extends unknown ? Omit<T, InternalInteractiveWidgetMethods> : never;
5192
5833
 
5193
5834
  /**
5194
5835
  * @public
@@ -5404,7 +6045,22 @@ export declare const showGdprConsentPreferences: () => Promise<void>;
5404
6045
  /**
5405
6046
  * @public
5406
6047
  */
5407
- export declare type SignInProvider = 'google' | 'patreon' | 'apple';
6048
+ export declare interface SideBannerProps {
6049
+ title: string;
6050
+ description: string;
6051
+ cover: string;
6052
+ backgroundColor?: string;
6053
+ buttonText?: string;
6054
+ onButtonClick?: () => void;
6055
+ buttonHref?: string;
6056
+ imagePosition?: 'left' | 'right';
6057
+ textBackgroundColor?: string;
6058
+ }
6059
+
6060
+ /**
6061
+ * @public
6062
+ */
6063
+ export declare type SignInProvider = 'google' | 'patreon' | 'apple' | 'facebook';
5408
6064
 
5409
6065
  /**
5410
6066
  * Simplified VideoController interface for external rendering
@@ -5493,27 +6149,6 @@ export declare interface SimplifiedVideoController {
5493
6149
  muted: boolean;
5494
6150
  volume: number;
5495
6151
  }) => void): void;
5496
- /**
5497
- * Add an event listener for ad started events
5498
- * @param event - Must be 'ad-started'
5499
- * @param callback - Function called when an ad starts playing
5500
- */
5501
- addEventListener(event: 'ad-started', callback: (adMetadata: AdMetadata & {
5502
- customAdMetadata?: Record<string, unknown> | null;
5503
- ctaElement: HTMLElement | null;
5504
- }) => void): void;
5505
- /**
5506
- * Add an event listener for ad ended events
5507
- * @param event - Must be 'ad-ended'
5508
- * @param callback - Function called when an ad finishes playing
5509
- */
5510
- addEventListener(event: 'ad-ended', callback: () => void): void;
5511
- /**
5512
- * Add an event listener for companion ads events
5513
- * @param event - Must be 'companion-ads'
5514
- * @param callback - Function called when companion ads are available
5515
- */
5516
- addEventListener(event: 'companion-ads', callback: (companionAds: CompanionAd[]) => void): void;
5517
6152
  /**
5518
6153
  * Remove an event listener
5519
6154
  * @param event - The event name to stop listening for
@@ -5525,19 +6160,6 @@ export declare interface SimplifiedVideoController {
5525
6160
  * @param source - The new source to load (can be a video path, channel path, or source parameters)
5526
6161
  */
5527
6162
  setSource(source: WebPlayerProps['source']): void;
5528
- setAdsConfig(adsConfig: StaticAdsBreak[]): void;
5529
- /**
5530
- * Toggle the minimal OSD mode.
5531
- *
5532
- * When enabled, the player shows only a minimal set of controls (play/pause,
5533
- * volume and fullscreen) and a small center play/pause icon that briefly
5534
- * flashes when the state changes. Intended for small/pinned containers such
5535
- * as a scroll-fixed mini player in the corner of the page or a full-width
5536
- * mobile player pinned to the top of the viewport.
5537
- *
5538
- * @param isMinimal - Whether the minimal OSD should be used
5539
- */
5540
- setIsMinimal(isMinimal: boolean): void;
5541
6163
  /**
5542
6164
  * Destroy the player and clean up all resources
5543
6165
  */
@@ -5610,6 +6232,14 @@ export declare enum SourceType {
5610
6232
  VOD_EXTERNAL = "vod_external"
5611
6233
  }
5612
6234
 
6235
+ export declare interface SplitLayoutItem {
6236
+ asset: ScalableAsset;
6237
+ name: Translation;
6238
+ description?: Translation;
6239
+ }
6240
+
6241
+ export declare type SplitLayoutSpecificData = SplitLayoutItem;
6242
+
5613
6243
  /**
5614
6244
  * External information of video from SportyTv EPG import
5615
6245
  * @public
@@ -5657,24 +6287,230 @@ export declare interface StartLiveStreamResponse {
5657
6287
  error?: string;
5658
6288
  }
5659
6289
 
5660
- export declare type StaticAdsBreak = StaticAdsBreakPostrollPreroll | StaticAdsBreakMidroll | StaticAdsBreakReplacement;
6290
+ /**
6291
+ * Row components available for static rows (BENEFITS, FAQ, etc.)
6292
+ * Matches the rowComponent constraint in StaticRow type definition
6293
+ * @public
6294
+ */
6295
+ export declare const STATIC_ROW_COMPONENTS: readonly [RowComponent.BENEFITS, RowComponent.REVIEWS, RowComponent.MONETIZATIONS, RowComponent.SPLIT_LAYOUT, RowComponent.NUMBERS, RowComponent.FAQ, RowComponent.CTA_BANNER, RowComponent.PRESENT_BANNER, RowComponent.MONETIZATION_BANNER, RowComponent.VIDEO_BANNER, RowComponent.MEDIA_ACCORDEON, RowComponent.EXPLORE, RowComponent.BACKGROUND_BANNER, RowComponent.PARTNER_LOGOS, RowComponent.HOMEPAGE_BANNER];
6296
+
6297
+ /**
6298
+ * Static row (e.g. benefits, reviews, FAQ) - doesn't have itemComponent or dynamic fields
6299
+ * Uses special row components like BENEFITS, REVIEWS, FAQ, etc.
6300
+ * @public
6301
+ */
6302
+ export declare type StaticRow = StaticRowBenefits | StaticRowReviews | StaticRowNumbers | StaticRowSplitLayout | StaticRowFaq | StaticRowPresentBanner | StaticRowExplore | StaticRowCtaBanner | StaticRowWithoutCustomItems;
6303
+
6304
+ /**
6305
+ * Benefits row
6306
+ * @public
6307
+ */
6308
+ export declare interface StaticRowBenefits extends BaseRow {
6309
+ type: 'static';
6310
+ rowComponent: RowComponent.BENEFITS;
6311
+ customItems: BenefitTileSpecificData;
6312
+ screenRef?: string;
6313
+ videoRef?: string;
6314
+ buttons?: RowButton[];
6315
+ }
6316
+
6317
+ /**
6318
+ * CTA Banner row
6319
+ * @public
6320
+ */
6321
+ export declare interface StaticRowCtaBanner extends BaseRow {
6322
+ type: 'static';
6323
+ rowComponent: RowComponent.CTA_BANNER;
6324
+ customItems: CtaBannerExtendRowData;
6325
+ screenRef?: string;
6326
+ videoRef?: string;
6327
+ variant?: 'light' | 'dark' | 'default' | 'large';
6328
+ heading?: Translation;
6329
+ subtitle?: {
6330
+ text: Translation;
6331
+ showIcon?: boolean;
6332
+ };
6333
+ button?: {
6334
+ href: string;
6335
+ text: Translation;
6336
+ };
6337
+ }
6338
+
6339
+ /**
6340
+ * Explore row
6341
+ * @public
6342
+ */
6343
+ export declare interface StaticRowExplore extends BaseRow {
6344
+ type: 'static';
6345
+ rowComponent: RowComponent.EXPLORE;
6346
+ customItems: ExploreTileSpecificData;
6347
+ screenRef?: string;
6348
+ videoRef?: string;
6349
+ }
6350
+
6351
+ /**
6352
+ * FAQ row
6353
+ * @public
6354
+ */
6355
+ export declare interface StaticRowFaq extends BaseRow {
6356
+ type: 'static';
6357
+ rowComponent: RowComponent.FAQ;
6358
+ customItems: FaqTileSpecificData;
6359
+ screenRef?: string;
6360
+ videoRef?: string;
6361
+ email?: string;
6362
+ }
6363
+
6364
+ /**
6365
+ * Static row type - discriminated union by rowComponent
6366
+ */
6367
+ export declare type StaticRowInScreen = StaticRowInScreenCtaBanner | StaticRowInScreenPresentBanner | StaticRowInScreenVideoBanner | StaticRowInScreenHomepageBanner | StaticRowInScreenFaq | StaticRowInScreenBenefits | StaticRowInScreenWithTiles;
6368
+
6369
+ /**
6370
+ * Benefits static row - has tiles + buttons
6371
+ */
6372
+ declare type StaticRowInScreenBenefits = BaseStaticRowInScreen & {
6373
+ rowComponent: RowComponent.BENEFITS;
6374
+ buttons?: RowButton[];
6375
+ tiles: PaginatedResponse<TileData<'static'>, 'rowId'>;
6376
+ };
6377
+
6378
+ /**
6379
+ * CTA Banner static row - data flatten to row level (no tiles)
6380
+ */
6381
+ declare type StaticRowInScreenCtaBanner = BaseStaticRowInScreen & {
6382
+ rowComponent: RowComponent.CTA_BANNER;
6383
+ } & CtaBannerExtendRowData;
6384
+
6385
+ /**
6386
+ * FAQ static row - has description and email fields specific to FAQ
6387
+ */
6388
+ declare type StaticRowInScreenFaq = BaseStaticRowInScreen & {
6389
+ rowComponent: RowComponent.FAQ;
6390
+ description?: Translation;
6391
+ email?: string;
6392
+ tiles: PaginatedResponse<TileData<'static'>, 'rowId'>;
6393
+ };
6394
+
6395
+ /**
6396
+ * Homepage Banner static row - multiline banner for homepage (no tiles)
6397
+ */
6398
+ declare type StaticRowInScreenHomepageBanner = BaseStaticRowInScreen & {
6399
+ rowComponent: RowComponent.HOMEPAGE_BANNER;
6400
+ } & HomepageBannerExtendRowData;
6401
+
6402
+ /**
6403
+ * Present Banner static row - organization fields + videoPath flatten to row level (no tiles)
6404
+ */
6405
+ declare type StaticRowInScreenPresentBanner = BaseStaticRowInScreen & {
6406
+ rowComponent: RowComponent.PRESENT_BANNER;
6407
+ videoPath?: string;
6408
+ } & Omit<PresentBannerExtendRowData, 'name' | 'description'>;
6409
+
6410
+ /**
6411
+ * Video Banner static row - videoPath flatten to row level (no tiles)
6412
+ */
6413
+ declare type StaticRowInScreenVideoBanner = BaseStaticRowInScreen & {
6414
+ rowComponent: RowComponent.VIDEO_BANNER;
6415
+ videoPath?: string;
6416
+ };
6417
+
6418
+ /**
6419
+ * Static rows with tiles (NUMBERS, EXPLORE, etc.)
6420
+ */
6421
+ declare type StaticRowInScreenWithTiles = BaseStaticRowInScreen & {
6422
+ rowComponent: Exclude<RowComponent, RowComponent.CTA_BANNER | RowComponent.PRESENT_BANNER | RowComponent.VIDEO_BANNER | RowComponent.HOMEPAGE_BANNER | RowComponent.FAQ | RowComponent.BENEFITS>;
6423
+ tiles: PaginatedResponse<TileData<'static'>, 'rowId'>;
6424
+ };
6425
+
6426
+ /**
6427
+ * Numbers row
6428
+ * @public
6429
+ */
6430
+ export declare interface StaticRowNumbers extends BaseRow {
6431
+ type: 'static';
6432
+ rowComponent: RowComponent.NUMBERS;
6433
+ customItems: NumbersTileSpecificData;
6434
+ screenRef?: string;
6435
+ videoRef?: string;
6436
+ variant?: 'default' | 'large';
6437
+ }
6438
+
6439
+ /**
6440
+ * Present banner row
6441
+ * @public
6442
+ */
6443
+ export declare interface StaticRowPresentBanner extends BaseRow {
6444
+ type: 'static';
6445
+ rowComponent: RowComponent.PRESENT_BANNER;
6446
+ customItems: PresentBannerExtendRowData;
6447
+ screenRef?: string;
6448
+ videoRef?: string;
6449
+ subname?: Translation;
6450
+ avatars?: ScalableAsset[];
6451
+ avatarsText?: Translation;
6452
+ asset?: ScalableAsset;
6453
+ videoPath?: string;
6454
+ buttons?: RowButton[];
6455
+ }
6456
+
6457
+ /**
6458
+ * Reviews row
6459
+ * @public
6460
+ */
6461
+ export declare interface StaticRowReviews extends BaseRow {
6462
+ type: 'static';
6463
+ rowComponent: RowComponent.REVIEWS;
6464
+ customItems: ReviewTileSpecificData;
6465
+ screenRef?: string;
6466
+ videoRef?: string;
6467
+ }
5661
6468
 
5662
- export declare interface StaticAdsBreakMidroll {
5663
- type: 'midroll';
5664
- from: number;
5665
- url: string;
6469
+ /**
6470
+ * Split layout row
6471
+ * @public
6472
+ */
6473
+ export declare interface StaticRowSplitLayout extends BaseRow {
6474
+ type: 'static';
6475
+ rowComponent: RowComponent.SPLIT_LAYOUT;
6476
+ customItems: SplitLayoutSpecificData;
6477
+ screenRef?: string;
6478
+ videoRef?: string;
5666
6479
  }
5667
6480
 
5668
- declare interface StaticAdsBreakPostrollPreroll {
5669
- type: 'preroll' | 'postroll';
5670
- url: string;
6481
+ /**
6482
+ * Static row without customItems (video banner, media accordion, monetization banner, background banner)
6483
+ * @public
6484
+ */
6485
+ export declare interface StaticRowWithoutCustomItems extends BaseRow {
6486
+ type: 'static';
6487
+ rowComponent: RowComponent.VIDEO_BANNER | RowComponent.MEDIA_ACCORDEON | RowComponent.MONETIZATION_BANNER | RowComponent.BACKGROUND_BANNER | RowComponent.PARTNER_LOGOS;
6488
+ screenRef?: string;
6489
+ videoRef?: string;
6490
+ videoPath?: string;
5671
6491
  }
5672
6492
 
5673
- export declare interface StaticAdsBreakReplacement {
5674
- type: 'replacement';
5675
- url: string;
6493
+ /**
6494
+ * Tile data for static rows with itemSpecificData (BENEFITS, FAQ, NUMBERS, SPLIT_LAYOUT, REVIEWS, EXPLORE).
6495
+ * @public
6496
+ */
6497
+ export declare interface StaticTileData<ItemSpecificData extends StaticTileItemSpecificData = StaticTileItemSpecificData> {
6498
+ /**
6499
+ * Specific data for an item type (e.g. benefit, faq, numbers, split layout, etc.).
6500
+ */
6501
+ itemSpecificData: ItemSpecificData;
5676
6502
  }
5677
6503
 
6504
+ /**
6505
+ * Type for itemSpecificData in API tile responses.
6506
+ * Excludes types that don't use itemSpecificData in tiles:
6507
+ * - MediaAccordeonTileSpecificData: MEDIA_ACCORDEON only uses path/id/name fields
6508
+ * - PresentBannerExtendRowData: PRESENT_BANNER data is flatten to row level (no tiles)
6509
+ * - CtaBannerExtendRowData: CTA_BANNER data is flatten to row level (no tiles)
6510
+ * @public
6511
+ */
6512
+ export declare type StaticTileItemSpecificData = BenefitTileSpecificData | ReviewTileSpecificData | NumbersTileSpecificData | SplitLayoutSpecificData | FaqTileSpecificData | ExploreTileSpecificData | MediaAccordeonTileSpecificData;
6513
+
5678
6514
  /**
5679
6515
  * @public
5680
6516
  */
@@ -5689,6 +6525,15 @@ export declare interface StoreBadgeConfig {
5689
6525
  appId: string;
5690
6526
  }
5691
6527
 
6528
+ /**
6529
+ * @public
6530
+ * Streaming profile for buffer configuration.
6531
+ * - 'low': Minimal buffering for fastest camera switches (bufferingGoal: 3s)
6532
+ * - 'medium': Balanced buffering (bufferingGoal: 5s) - default
6533
+ * - 'high': Maximum buffering for stable playback (bufferingGoal: 15s)
6534
+ */
6535
+ export declare type StreamingProfile = 'low' | 'medium' | 'high';
6536
+
5692
6537
  export declare interface SubmitAnswerRequest {
5693
6538
  answerOptionId?: string;
5694
6539
  answerText?: string;
@@ -5757,6 +6602,25 @@ declare interface SubscriptionInfo {
5757
6602
  frequency: string;
5758
6603
  }
5759
6604
 
6605
+ /**
6606
+ * Extended language codes for subtitle tracks.
6607
+ * Includes all LangCode values plus additional languages only needed for subtitles.
6608
+ * @public
6609
+ */
6610
+ export declare type SubtitleLangCode = LangCode | 'uk' | 'zh';
6611
+
6612
+ /**
6613
+ * Mapping of subtitle language codes to their English names.
6614
+ * @public
6615
+ */
6616
+ export declare const SubtitleLangCodeToTitle: Record<SubtitleLangCode, string>;
6617
+
6618
+ /**
6619
+ * All subtitle language codes including extra languages not in LangCode.
6620
+ * @public
6621
+ */
6622
+ export declare const subtitleLanguages: SubtitleLangCode[];
6623
+
5760
6624
  /**
5761
6625
  * @public
5762
6626
  */
@@ -5797,8 +6661,8 @@ export declare interface Tag extends RowItem {
5797
6661
  detailBanner?: string;
5798
6662
  availableSeasons?: AvailableSeason[];
5799
6663
  isFavorite: boolean;
5800
- addToFavorites: () => Promise<void>;
5801
- removeFromFavorites: () => Promise<void>;
6664
+ addToFavorites: () => void;
6665
+ removeFromFavorites: () => void;
5802
6666
  cover: string;
5803
6667
  getApplicationName: () => string | undefined;
5804
6668
  seriesRef?: DocumentReference<any>;
@@ -5911,48 +6775,10 @@ export declare interface TileApplicationData {
5911
6775
  isMainApplication?: boolean;
5912
6776
  }
5913
6777
 
5914
- export declare interface TileData<ItemSpecificData = VideoTileSpecificData | TvChannelTileSpecificData | TagTileSpecificData | ArticleTileSpecificData | SeriesTileSpecificData> {
5915
- /**
5916
- * Tile item ID.
5917
- */
5918
- id: string;
5919
- /**
5920
- * Timestamp of the item creation.
5921
- */
5922
- created: number;
5923
- /**
5924
- * Type of the tile. VIDEO, TV_CHANNEL, TAG, ...
5925
- */
5926
- itemType: ROW_ITEM_TYPES;
5927
- /**
5928
- * Tile item name translation.
5929
- */
5930
- name: Translation;
5931
- /**
5932
- * Firestore path to the item.
5933
- */
5934
- path: string;
5935
- /**
5936
- * Application info including logo, name and number of videos.
5937
- */
5938
- application?: TileApplicationData;
5939
- /**
5940
- * Specific data for an item type (e.g. video, tv channel, tag, ...).
5941
- */
5942
- itemSpecificData: ItemSpecificData;
5943
- }
5944
-
5945
- export declare interface TileMonetizationData {
5946
- id: string;
5947
- path: string;
5948
- placementType: 'channel' | 'tvChannel' | 'condition' | 'video' | 'section' | 'row';
5949
- type: MonetizationType;
5950
- }
5951
-
5952
6778
  /**
5953
6779
  * @public
5954
6780
  */
5955
- export declare interface TileProps {
6781
+ export declare interface TileComponentProps {
5956
6782
  children?: React_2.ReactNode;
5957
6783
  cover?: string;
5958
6784
  bottomLabel: string;
@@ -5994,12 +6820,49 @@ export declare interface TileProps {
5994
6820
  itemType?: ROW_ITEM_TYPES;
5995
6821
  description?: string;
5996
6822
  showDescriptionAsTitle?: boolean;
6823
+ isSeries?: boolean;
6824
+ episodeCount?: number;
6825
+ /**
6826
+ * Optional label to display in the top-right corner of the tile (e.g., "Exclusive").
6827
+ * Label text (already resolved for the current language).
6828
+ */
6829
+ topLabel?: string;
6830
+ /**
6831
+ * CSS color for the topLabel background. Defaults to white.
6832
+ */
6833
+ topLabelColor?: string;
6834
+ }
6835
+
6836
+ export declare type TileData<T extends ScreenRowType = ScreenRowType> = T extends 'static' ? StaticTileData : DocumentTileData;
6837
+
6838
+ export declare interface TileMonetizationData {
6839
+ id: string;
6840
+ path: string;
6841
+ placementType: 'channel' | 'tvChannel' | 'condition' | 'video' | 'section' | 'row';
6842
+ type: MonetizationType;
6843
+ }
6844
+
6845
+ /**
6846
+ * Additional properties that can be applied to tiles for visual customization
6847
+ * @public
6848
+ */
6849
+ export declare interface TileProps {
6850
+ topRightLabel?: TileTopRightLabel;
5997
6851
  }
5998
6852
 
5999
6853
  /**
6000
6854
  * @public
6001
6855
  */
6002
- export declare type TilePropsPartial = Partial<TileProps>;
6856
+ export declare type TilePropsPartial = Partial<TileComponentProps>;
6857
+
6858
+ /**
6859
+ * Custom label to be displayed on a tile (e.g., "Exclusive" badge)
6860
+ * @public
6861
+ */
6862
+ export declare interface TileTopRightLabel {
6863
+ text: string;
6864
+ color?: string;
6865
+ }
6003
6866
 
6004
6867
  /**
6005
6868
  * @public
@@ -6091,10 +6954,6 @@ export declare interface TivioComponents {
6091
6954
  ContentSortPicker: React_2.ComponentType<ContentSortPickerProps>;
6092
6955
  WebTivioProVideoScreen: React_2.ComponentType<WebTivioProVideoScreenProps>;
6093
6956
  RemoteController: React_2.ComponentType<RemoteControllerProps>;
6094
- MonetizationsSelectOverlay: React_2.ComponentType;
6095
- MonetizationsSelectOverlayContextProvider: React_2.ComponentType<{
6096
- children: React_2.ReactNode;
6097
- }>;
6098
6957
  }
6099
6958
 
6100
6959
  /**
@@ -6131,7 +6990,10 @@ export declare interface TivioConfig {
6131
6990
  * @deprecated this field is no longer in use and has no impact when set.
6132
6991
  */
6133
6992
  firestore?: any | null;
6134
- currency: Currency;
6993
+ /**
6994
+ * @deprecated currency should be determined by `currencies` field in organization document in database, do not rely on this field.
6995
+ */
6996
+ currency?: Currency;
6135
6997
  /**
6136
6998
  * Represents an optional array of LanguageSelector objects.
6137
6999
  * Used to define and manage a list of supported languages for different language-usages (user, content,...).
@@ -6261,6 +7123,22 @@ export declare type TivioHooks = {
6261
7123
  };
6262
7124
  useChannelSource: UseChannelSource;
6263
7125
  useTvChannel: UseTvChannel;
7126
+ useInteractiveWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7127
+ widget: SDKWidget<InteractiveWidget> | null;
7128
+ isLoading: boolean;
7129
+ error: Error | null;
7130
+ };
7131
+ useQuizWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7132
+ widget: SDKWidget<QuizWidget> | null;
7133
+ isLoading: boolean;
7134
+ error: Error | null;
7135
+ };
7136
+ usePollWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7137
+ widget: SDKWidget<PollWidget> | null;
7138
+ isLoading: boolean;
7139
+ error: Error | null;
7140
+ };
7141
+ useRemoteController: UseRemoteController;
6264
7142
  };
6265
7143
 
6266
7144
  /**
@@ -6290,6 +7168,10 @@ export declare type TivioInternalComponents = {
6290
7168
  }>;
6291
7169
  Banner: React_2.ComponentType<BannerPropsPartial>;
6292
7170
  CustomAppHistoryContext: React_2.Context<HistoryContextData | undefined>;
7171
+ ScrollableSubscriptionList: React_2.ComponentType<{
7172
+ subscriptions: PurchasableMonetization[];
7173
+ renderSubscription: (subscription: PurchasableMonetization) => React_2.ReactNode;
7174
+ }>;
6293
7175
  };
6294
7176
 
6295
7177
  /**
@@ -6340,6 +7222,13 @@ export declare type TivioInternalHooks = {
6340
7222
  error: Error | null;
6341
7223
  loading: boolean;
6342
7224
  });
7225
+ useScrollShadows: () => {
7226
+ scrollRef: React_2.RefObject<HTMLDivElement>;
7227
+ showLeftShadow: boolean;
7228
+ showRightShadow: boolean;
7229
+ shouldCenter: boolean;
7230
+ checkScrollShadows: () => void;
7231
+ };
6343
7232
  useTvChannel: UseTvChannel;
6344
7233
  useUser: () => {
6345
7234
  user: User | null;
@@ -6367,9 +7256,7 @@ export declare type TivioInternalProviders = {
6367
7256
  UserContextProvider: React_2.ComponentType<{
6368
7257
  children?: React_2.ReactNode;
6369
7258
  }>;
6370
- MonetizationsSelectOverlayContextProvider: React_2.ComponentType<{
6371
- children: React_2.ReactNode;
6372
- }>;
7259
+ MonetizationsSelectOverlayContextProvider: React_2.ComponentType;
6373
7260
  QerkoOverlayContextProvider: React_2.ComponentType;
6374
7261
  /**
6375
7262
  * @deprecated do not use, this provider will be removed in the future
@@ -6466,7 +7353,7 @@ export declare type TivioReactBundle = {
6466
7353
  subscriptions: TivioSubscriptions;
6467
7354
  purchaseVideoWithQerko: (videoId: string, monetizationId: string, voucher?: {
6468
7355
  expirationDate: Date;
6469
- }) => Promise<QerkoPaymentInfo>;
7356
+ }, email?: string) => Promise<QerkoPaymentInfo>;
6470
7357
  purchaseSubscriptionWithQerko: (monetizationId: string, voucher?: {
6471
7358
  expirationDate: Date;
6472
7359
  }) => Promise<QerkoPaymentInfo>;
@@ -6479,8 +7366,6 @@ export declare type TivioReactBundle = {
6479
7366
  */
6480
7367
  internal: TivioInternalBundle;
6481
7368
  analytics: TivioAnalytics;
6482
- addToFavoritesByPath: (path: string) => Promise<void>;
6483
- removeFromFavoritesByPath: (path: string) => Promise<void>;
6484
7369
  destroy: () => Promise<void>;
6485
7370
  } & Pick<TivioSetters, 'setBundleVersion' | 'setUser' | 'setLanguage' | 'setStorageManager'> & Omit<Partial<TivioJsBundleExposedApi>, 'createPlayerWrapper'>;
6486
7371
 
@@ -6609,7 +7494,7 @@ export declare interface TvAppProps {
6609
7494
  /**
6610
7495
  * @public
6611
7496
  */
6612
- export declare interface TvChannel extends RowItem, MonetizableItem {
7497
+ export declare interface TvChannel extends RowItem {
6613
7498
  id: string;
6614
7499
  itemType: ROW_ITEM_TYPES.TV_CHANNEL;
6615
7500
  name: string;
@@ -6620,11 +7505,17 @@ export declare interface TvChannel extends RowItem, MonetizableItem {
6620
7505
  logoPendingOverlayWidth?: string;
6621
7506
  hls: string;
6622
7507
  dash: string;
7508
+ /**
7509
+ * Returns all transactions and subscriptions applied to this tv channel.
7510
+ * Transactions before subscriptions, sorted by price ascending.
7511
+ */
7512
+ getPurchasableMonetizations(options?: GetPurchasableMonetizationsOptions): PurchasableMonetization[];
6623
7513
  getSourceUrl(options?: {
6624
7514
  language?: LangCode;
6625
7515
  }): Promise<GetSourceUrlResponse & {
6626
7516
  language?: LangCode;
6627
7517
  }>;
7518
+ purchasableMonetization: any | null;
6628
7519
  price: number;
6629
7520
  cover: string;
6630
7521
  isPlayable: boolean;
@@ -6654,7 +7545,12 @@ export declare enum TvChannelType {
6654
7545
  /**
6655
7546
  * "Virtual" tv channel constructed from separate videos
6656
7547
  */
6657
- VIRTUAL = "VIRTUAL"
7548
+ VIRTUAL = "VIRTUAL",
7549
+ /**
7550
+ * Scheduled channel - has EPG like VIRTUAL (admin can edit schedule)
7551
+ * but streams like CLASSIC (calls getSourceUrl on the channel, not per-video).
7552
+ */
7553
+ SCHEDULED = "SCHEDULED"
6658
7554
  }
6659
7555
 
6660
7556
  /**
@@ -6736,6 +7632,13 @@ export declare type UpdateNotificationSettingsRequest = {
6736
7632
 
6737
7633
  export declare type UpdateNotificationSettingsResponse = Promise<boolean>;
6738
7634
 
7635
+ export declare type UpdateUserEmailPayload = {
7636
+ newEmail: string;
7637
+ password: string;
7638
+ name: string;
7639
+ token?: string;
7640
+ };
7641
+
6739
7642
  export declare type UpsertCommentResponse = AddEditCommentResponse | DeleteCommentResponse;
6740
7643
 
6741
7644
  export declare type UrlNamesType = {
@@ -6798,7 +7701,7 @@ export declare const useCancelSubscription: UseCancelSubscription;
6798
7701
  * @public
6799
7702
  */
6800
7703
  export declare interface UseCancelSubscriptionsResult {
6801
- cancelSubscriptions: (subscriptionIds: string[]) => Promise<void>;
7704
+ cancelSubscriptions: (subscriptionIds: string[]) => Promise<boolean>;
6802
7705
  cancellationInfos: QerkoCancellationInfo[];
6803
7706
  errors: string[];
6804
7707
  }
@@ -6876,6 +7779,18 @@ export declare type UseEpisodesResult = {
6876
7779
  hasMoreEpisodes: boolean;
6877
7780
  };
6878
7781
 
7782
+ /**
7783
+ * Load the interactive widget at `widgetPath` via the remote Tivio bundle.
7784
+ * Returns the union widget (`QuizWidget | PollWidget`); narrow
7785
+ * on `widget.type` to access type-specific fields. Prefer `useQuizWidget` /
7786
+ * `usePollWidget` when you know the type up-front.
7787
+ */
7788
+ export declare const useInteractiveWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7789
+ widget: SDKWidget<InteractiveWidget> | null;
7790
+ isLoading: boolean;
7791
+ error: Error | null;
7792
+ };
7793
+
6879
7794
  /**
6880
7795
  * @public
6881
7796
  */
@@ -6968,6 +7883,12 @@ export declare const useOrganizationSubscriptions: (onlyPurchasableSubscriptions
6968
7883
  subscriptions: PurchasableMonetization[];
6969
7884
  };
6970
7885
 
7886
+ export declare const usePollWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7887
+ widget: Omit<PollWidget<InteractiveWidgetScene>, InternalInteractiveWidgetMethods> | null;
7888
+ isLoading: boolean;
7889
+ error: Error | null;
7890
+ };
7891
+
6971
7892
  /**
6972
7893
  * Is used to mark purchase in recovery state as PAID.
6973
7894
  *
@@ -6989,6 +7910,12 @@ export declare function usePurchaseRecovery(): {
6989
7910
  */
6990
7911
  export declare const usePurchaseSubscription: (monetizationId: string, voucher?: NewVoucher) => QerkoTransaction;
6991
7912
 
7913
+ export declare const useQuizWidget: (widgetPath: string | undefined, isObs?: boolean) => {
7914
+ widget: Omit<QuizWidget<InteractiveWidgetScene>, InternalInteractiveWidgetMethods> | null;
7915
+ isLoading: boolean;
7916
+ error: Error | null;
7917
+ };
7918
+
6992
7919
  /**
6993
7920
  * @public
6994
7921
  */
@@ -7007,9 +7934,17 @@ export declare type User = {
7007
7934
  * Returns all PAID or CANCELLED user purchases (expired and non-expired)
7008
7935
  */
7009
7936
  allPurchases: Purchase[];
7937
+ /**
7938
+ * Returns all PAID or CANCELLED user purchases (expired and non-expired)
7939
+ */
7940
+ pastPurchases: Purchase[];
7941
+ /**
7942
+ * IDs of available promotions (promotion document IDs).
7943
+ * Example: ['kaGHeCMcOCEF2OcaJCcr']
7944
+ */
7010
7945
  availablePromotionsIds: string[];
7011
7946
  /**
7012
- * Returns "active" (not CANCELLED) VoD purchases ("transaction" type)
7947
+ * Returns "active" (not CANCELLED) VoD purchases ("transaction" type")
7013
7948
  */
7014
7949
  purchasedVods: Purchase[];
7015
7950
  /**
@@ -7097,9 +8032,6 @@ export declare type User = {
7097
8032
  getAllExtendableSubscriptions: () => Promise<Purchase[]>;
7098
8033
  getRssValidToken: () => Promise<TokenInterface | undefined>;
7099
8034
  getRssUrl: () => Promise<GetUserRssUrlResponse>;
7100
- getFavorites: (options?: GetUserProfileDataOptions) => Promise<FavoriteWithData[]>;
7101
- getWatchPositions: (options?: GetUserProfileDataOptions) => Promise<WatchPositionWithData[]>;
7102
- getWatchHistory: (options?: GetUserProfileDataOptions) => Promise<WatchPositionWithData[]>;
7103
8035
  invalidateAllTokens: (type: TokenType) => Promise<void>;
7104
8036
  isPartiallyRegistered: boolean;
7105
8037
  conversationStore: ConversationStore;
@@ -7125,6 +8057,58 @@ export declare interface UseReactionsOptions {
7125
8057
  onError?: (error: Error) => void;
7126
8058
  }
7127
8059
 
8060
+ /**
8061
+ * @public
8062
+ */
8063
+ export declare type UseRemoteController = (options?: UseRemoteControllerOptions) => UseRemoteControllerResult;
8064
+
8065
+ export declare const useRemoteController: UseRemoteController;
8066
+
8067
+ /**
8068
+ * @public
8069
+ */
8070
+ export declare interface UseRemoteControllerOptions {
8071
+ sessionId?: string;
8072
+ videoId?: string;
8073
+ }
8074
+
8075
+ /**
8076
+ * @public
8077
+ */
8078
+ export declare type UseRemoteControllerPlaybackControlPayload = Pick<RemoteControlPlaybackControlPayload, 'playback' | 'activeVideoId'> & Partial<Pick<RemoteControlPlaybackControlPayload, 'sessionId' | 'videoId'>>;
8079
+
8080
+ /**
8081
+ * @public
8082
+ */
8083
+ export declare type UseRemoteControllerPlayHighlightPayload = Pick<RemoteControlPlayHighlightPayload, 'activeVideoId' | 'replay'> & Partial<Pick<RemoteControlPlayHighlightPayload, 'sessionId' | 'videoId'>>;
8084
+
8085
+ /**
8086
+ * @public
8087
+ */
8088
+ export declare interface UseRemoteControllerResult {
8089
+ session: UserStreamingSessionFieldInterface | null;
8090
+ sessionId: string | null;
8091
+ videoId: string | null;
8092
+ activeContentId: string | null;
8093
+ isInitialized: boolean;
8094
+ isSignedIn: boolean;
8095
+ isLoading: boolean;
8096
+ error: Error | null;
8097
+ resetError: () => void;
8098
+ pairDevice: (payload: RemoteControlPairPayload) => Promise<RemoteControlPairResponse>;
8099
+ unpairDevice: (payload?: Partial<RemoteControlUnpairPayload>) => Promise<boolean | string>;
8100
+ selectCamera: (payload: UseRemoteControllerSelectCameraPayload) => Promise<boolean | string>;
8101
+ playHighlight: (payload: UseRemoteControllerPlayHighlightPayload) => Promise<boolean | string>;
8102
+ playbackControl: (payload: UseRemoteControllerPlaybackControlPayload) => Promise<boolean | string>;
8103
+ getSourceUrl: (payload: RemoteControlGetSourceUrlPayload) => Promise<RemoteControlGenerateSourceResponse>;
8104
+ remoteControl: <TResponse = RemoteControlGenerateSourceResponse | boolean | string>(payload: RemoteControlRequest) => Promise<TResponse>;
8105
+ }
8106
+
8107
+ /**
8108
+ * @public
8109
+ */
8110
+ export declare type UseRemoteControllerSelectCameraPayload = Pick<RemoteControlSelectCameraPayload, 'activeVideoId'> & Partial<Pick<RemoteControlSelectCameraPayload, 'sessionId' | 'videoId'>>;
8111
+
7128
8112
  export declare enum UserGroup {
7129
8113
  ALL = "all",
7130
8114
  FREE = "free",
@@ -7145,7 +8129,7 @@ export declare interface UserNotificationSettings {
7145
8129
  * @public
7146
8130
  */
7147
8131
  export declare type UseRow = (rowId: string | null, organizationId?: string) => {
7148
- row: Row | null;
8132
+ row: BaseRow | null;
7149
8133
  error: Error | null;
7150
8134
  };
7151
8135
 
@@ -7387,7 +8371,6 @@ export declare enum VastProvider {
7387
8371
  TEST = "test",
7388
8372
  TEST_VPAID = "test-vpaid",
7389
8373
  TIVIO_ADS = "tivio-ads",
7390
- STATIC_ADS_PROVIDER = "static-ads-provider",
7391
8374
  JOJ_TEST_AD_FORM_PROGRAMMATIC = "joj-test-ad-form-programmatic",
7392
8375
  JOJ_TEST_TESTER_VASTERIX = "joj-test-tester-vasterix",
7393
8376
  JOJ_TEST_TESTER_ADFORM_30 = "joj-test-tester-adform-30"
@@ -7471,8 +8454,8 @@ export declare interface Video extends RowItem, MonetizableItem, ReactableConten
7471
8454
  tasting: Video | null;
7472
8455
  watchPosition: number | null;
7473
8456
  isFavorite: boolean;
7474
- addToFavorites: () => Promise<void>;
7475
- removeFromFavorites: () => Promise<void>;
8457
+ addToFavorites: () => void;
8458
+ removeFromFavorites: () => void;
7476
8459
  availability: ContentAvailability | null;
7477
8460
  sourceLanguages: LangCode[];
7478
8461
  urlByLanguage: (lang: LangCode) => string | undefined;
@@ -7530,10 +8513,6 @@ export declare interface VideoController {
7530
8513
  muted: boolean;
7531
8514
  volume: number;
7532
8515
  }) => void): void;
7533
- addEventListener(event: 'ad-started', callback: (value: AdMetadata & {
7534
- adCtaElement: HTMLElement | null;
7535
- }) => void): void;
7536
- addEventListener(event: 'companion-ads', callback: (value: CompanionAd[]) => void): void;
7537
8516
  /**
7538
8517
  * Remove an event listener
7539
8518
  * @param event - The event name to stop listening for
@@ -7569,6 +8548,10 @@ export declare interface VideoController {
7569
8548
  * Replay the current video from the beginning
7570
8549
  */
7571
8550
  replay(): Promise<void>;
8551
+ /**
8552
+ * Refresh the current source by calling getSourceUrl without sourceHistory.
8553
+ */
8554
+ refreshSource(): Promise<void>;
7572
8555
  /**
7573
8556
  * Retry playback if it failed to start
7574
8557
  */
@@ -7659,7 +8642,30 @@ export declare interface VideoController {
7659
8642
  * @param mutations - Array of DOM mutation records
7660
8643
  */
7661
8644
  onWatermarkElementChange(mutations: MutationRecord[]): void;
7662
- setAdCtaElement: (element: HTMLElement | null) => void;
8645
+ /**
8646
+ * Switch to HLS source for AirPlay (Safari/iOS only).
8647
+ * Preserves current playback position.
8648
+ */
8649
+ switchToHlsForAirplay(): Promise<void>;
8650
+ /**
8651
+ * Switch back to DASH from HLS after AirPlay disconnects.
8652
+ * Preserves current playback position.
8653
+ */
8654
+ switchToDashFromAirplay(): Promise<void>;
8655
+ /**
8656
+ * Reload the current source while preserving playback position.
8657
+ * Used when switching between native HLS and MSE playback modes.
8658
+ */
8659
+ reloadCurrentSource(): Promise<void>;
8660
+ /**
8661
+ * Set whether to prefer HLS sources over DASH.
8662
+ * Used in Safari/iOS when AirPlay is available, as AirPlay only supports HLS streaming.
8663
+ */
8664
+ setPreferHls(preferHls: boolean): void;
8665
+ /**
8666
+ * Suppress watermark tamper detection during AirPlay source switching.
8667
+ */
8668
+ setAirplaySwitching(isSwitching: boolean): void;
7663
8669
  }
7664
8670
 
7665
8671
  declare type VideoDetailResponsiveField = OrganizationResponsiveSetting<{
@@ -7680,7 +8686,7 @@ declare type VideoDetailResponsiveField = OrganizationResponsiveSetting<{
7680
8686
  /**
7681
8687
  * @public
7682
8688
  */
7683
- export declare type VideoExternals = (JojExternals | MallTvExternals | OktagonExternals | MigratedVideoExternals | SportyExternals) & {
8689
+ export declare type VideoExternals = (JojExternals | OktagonExternals | MigratedVideoExternals | SportyExternals | AdExternals) & {
7684
8690
  channelKey?: string;
7685
8691
  };
7686
8692
 
@@ -7743,6 +8749,11 @@ export declare type VideoSourceField = {
7743
8749
  * because content id in source url and authentication will not match.
7744
8750
  */
7745
8751
  contentId?: string;
8752
+ /**
8753
+ * List of platforms that this source is restricted to.
8754
+ * If empty or not defined, there are no restrictions, and source is available for all platforms.
8755
+ */
8756
+ platforms?: PLATFORM[];
7746
8757
  } & ({
7747
8758
  url: string;
7748
8759
  provider?: Exclude<VideoSourceProvider, VideoSourceProvider.CLOUDFLARE>;
@@ -7792,6 +8803,7 @@ export declare interface VideoTileSpecificData {
7792
8803
  urlName?: UrlNamesType;
7793
8804
  monetizations?: VideoTileMonetizationData[];
7794
8805
  description?: Translation;
8806
+ duration?: number;
7795
8807
  }
7796
8808
 
7797
8809
  /**
@@ -7880,7 +8892,7 @@ export declare interface ViewCountItem {
7880
8892
  /**
7881
8893
  * @public
7882
8894
  */
7883
- export declare interface VirtualChannelSourceInterface extends Omit<ChannelSourceInterface, 'clone'> {
8895
+ export declare interface VirtualChannelSourceInterface extends ChannelSourceInterface {
7884
8896
  tvChannelType: TvChannelType.VIRTUAL;
7885
8897
  program?: TvProgram | null;
7886
8898
  video?: Video | null;
@@ -7893,18 +8905,9 @@ export declare interface VirtualChannelSourceInterface extends Omit<ChannelSourc
7893
8905
  */
7894
8906
  export declare interface VirtualChannelSourceParams extends ChannelSourceParams {
7895
8907
  tvChannelType: TvChannelType.VIRTUAL;
7896
- currentProgram?: TvProgram | null;
7897
8908
  drm?: Drm;
7898
8909
  }
7899
8910
 
7900
- /**
7901
- * Interface representing the parameters for a VOD (Video On Demand) external multi-source configuration.
7902
- * Multi-source means an array of string URLs representing the external sources for the video content.
7903
- */
7904
- export declare interface VodExternalMultiSourceParams extends Omit<VodExternalSourceParams, 'url'> {
7905
- urls: string[];
7906
- }
7907
-
7908
8911
  /**
7909
8912
  * @public
7910
8913
  */
@@ -8003,21 +9006,6 @@ export declare interface WarningConfirmationOverlayPayload extends ConfirmationO
8003
9006
  subscriptionExpirationText?: string;
8004
9007
  }
8005
9008
 
8006
- /**
8007
- * @public
8008
- */
8009
- export declare interface WatchPositionWithData extends Omit<UserWatchPositionField, 'videoRef' | 'tagRef'> {
8010
- /**
8011
- * Video that given watch position is related to.
8012
- */
8013
- video: Video;
8014
- /**
8015
- * If user watches episode of series, we have to save series ref as well.
8016
- * Same for {@link episodeNumber} and {@link seasonNumber}.
8017
- */
8018
- tag?: Tag;
8019
- }
8020
-
8021
9009
  /**
8022
9010
  * @public
8023
9011
  */
@@ -8028,7 +9016,6 @@ export declare interface Watermark {
8028
9016
 
8029
9017
  export declare interface WebConfig {
8030
9018
  customer: CustomerId;
8031
- customerName?: string;
8032
9019
  title?: string;
8033
9020
  description?: string;
8034
9021
  logo: string;
@@ -8042,37 +9029,31 @@ export declare interface WebConfig {
8042
9029
  header?: {
8043
9030
  /**
8044
9031
  * Text on buy voucher button, if not provided the default text will be used.
9032
+ * Can be a string or an array of language-specific texts.
9033
+ * @deprecated Use headerButton instead
8045
9034
  */
8046
9035
  buyVoucherButtonText?: string;
8047
9036
  /**
8048
- * If true, the voucher button will be shown in the header.
9037
+ * Configurable button shown in the header (e.g., for vouchers, creator signup, etc.)
9038
+ * Array of language-specific button configurations.
8049
9039
  */
8050
- showVoucherButton?: boolean;
9040
+ headerButton?: (LanguageRestricted & {
9041
+ label: string;
9042
+ href: string;
9043
+ /** Icon to show on the button (mobile only) */
9044
+ icon?: 'gift' | 'star' | 'videoRecorder';
9045
+ variant?: 'primary' | 'secondary' | 'transparent';
9046
+ })[];
8051
9047
  allowSearch?: boolean;
8052
9048
  logoHeight?: string;
8053
9049
  mobileLogoHeight?: string;
8054
9050
  buySubscriptionButtonText?: string;
8055
- isHidden?: boolean;
8056
- /**
8057
- * Additional menu items to be shown in the rounded menu in the header (external or internal)
8058
- */
8059
- additionalMenuItems?: {
8060
- name: string;
8061
- href: string;
8062
- newTab?: boolean;
8063
- }[];
8064
9051
  };
8065
9052
  footer?: {
8066
- isHidden?: boolean;
8067
9053
  /**
8068
9054
  * If logo is different from logo in header
8069
9055
  */
8070
9056
  logo?: string;
8071
- /**
8072
- * @fixme https://app.clickup.com/t/90151157205/TIV-1515
8073
- * If multiple logos are provided, the multiple logos are prioritized over the single logo.
8074
- */
8075
- multipleLogos?: string[];
8076
9057
  showLogo?: boolean;
8077
9058
  /**
8078
9059
  * right panel - various type of contacts to owners of website
@@ -8115,19 +9096,6 @@ export declare interface WebConfig {
8115
9096
  email?: string;
8116
9097
  };
8117
9098
  cookieSettingsLabel?: string;
8118
- disclaimer?: string;
8119
- showDivider?: boolean;
8120
- /**
8121
- * Additional links to be shown in the footer
8122
- */
8123
- additionalLinks?: {
8124
- name: string;
8125
- href: string;
8126
- }[];
8127
- /**
8128
- * Hide footer on these paths
8129
- */
8130
- hideFooter?: string[];
8131
9099
  partners?: {
8132
9100
  name: string;
8133
9101
  logo: string;
@@ -8143,14 +9111,6 @@ export declare interface WebConfig {
8143
9111
  * so app requires authorization to see them.
8144
9112
  */
8145
9113
  securedContent?: boolean;
8146
- /**
8147
- * If true, then auth is required for all pages.
8148
- */
8149
- isAuthRequired?: boolean;
8150
- /**
8151
- * If true, then buy subscription button is hidden.
8152
- */
8153
- hideBuySubscriptionButton?: boolean;
8154
9114
  /**
8155
9115
  * CSS styles for application background.
8156
9116
  */
@@ -8169,10 +9129,6 @@ export declare interface WebConfig {
8169
9129
  * Default is TRUE (see {@link AppLoadingOverlay}
8170
9130
  */
8171
9131
  showProgressBar?: boolean;
8172
- /**
8173
- * URL to background image shown on loading screen.
8174
- */
8175
- backgroundUrl?: string;
8176
9132
  };
8177
9133
  /**
8178
9134
  * Slug of all pages where user will be forced to fill login form if he's not logged in.
@@ -8200,7 +9156,6 @@ export declare interface WebConfig {
8200
9156
  */
8201
9157
  showChooseSubscription?: boolean;
8202
9158
  registration?: {
8203
- logoMarginTop?: string;
8204
9159
  /**
8205
9160
  * Customization of auth form
8206
9161
  */
@@ -8220,18 +9175,18 @@ export declare interface WebConfig {
8220
9175
  showAcceptanceOfTermsAndConditions?: boolean;
8221
9176
  };
8222
9177
  registrationConsent?: string;
8223
- socialRegistrationConsent?: string;
8224
9178
  };
8225
9179
  payment?: {
8226
9180
  paymentConsent?: string;
8227
9181
  paymentRenewalConsent?: boolean;
9182
+ allowFrequencySwitcher?: boolean;
8228
9183
  };
8229
9184
  /**
8230
9185
  * If web supports entering vouchers
8231
9186
  */
8232
9187
  supportVouchers?: boolean;
8233
9188
  /**
8234
- * Config for Google Tag Manager with optional shouldWaitForDidomi flag
9189
+ * Config for Google Tag Manager
8235
9190
  */
8236
9191
  googleTagManagerConfig?: TagManagerArgs & {
8237
9192
  shouldWaitForDidomi?: boolean;
@@ -8254,8 +9209,6 @@ export declare interface WebConfig {
8254
9209
  };
8255
9210
  monetizationSelectOverlay?: {
8256
9211
  title?: string;
8257
- benefitLeftIcon?: string;
8258
- showFullMonetizationOnMobile?: boolean;
8259
9212
  };
8260
9213
  /**
8261
9214
  * Google Analytics ID. If provided, Google Analytics will be enabled.
@@ -8267,7 +9220,6 @@ export declare interface WebConfig {
8267
9220
  centeredMenu?: boolean;
8268
9221
  /**
8269
9222
  * All values are considered as false if not provided.
8270
- * @deprecated - use settings.allowedSignInProviders inside OrganizationDocument
8271
9223
  */
8272
9224
  socialLogins?: {
8273
9225
  showAppleLogin?: boolean;
@@ -8282,24 +9234,11 @@ export declare interface WebConfig {
8282
9234
  * If true, robots.txt will prevent crawling of the website.
8283
9235
  */
8284
9236
  norobots?: boolean;
8285
- voucher?: {
8286
- voucherConsent: string;
8287
- };
8288
- customTranslations?: Record<string, Record<string, string>>;
8289
- onPurchase?: (monetization: Purchase) => void;
8290
- facebookPixelConfig?: {
8291
- pixelId: string;
8292
- shouldWaitForDidomi?: boolean;
9237
+ customTranslations?: {
9238
+ [key: string]: {
9239
+ [key: string]: string;
9240
+ };
8293
9241
  };
8294
- /**
8295
- * If true, the app will be locked in the "remote controller" mode.
8296
- * This means that the app will not be able to navigate to other pages and will only show the remote controller.
8297
- */
8298
- isRemoteControllerApp?: boolean;
8299
- /**
8300
- * Determines if application should check allowed URL handles when switching applications.
8301
- */
8302
- disableUrlHandleCheck?: boolean;
8303
9242
  /**
8304
9243
  * Map for all handlers
8305
9244
  */
@@ -8326,7 +9265,7 @@ export declare interface WebGridScreenProps {
8326
9265
  */
8327
9266
  export declare interface WebPlayerProps {
8328
9267
  id: string;
8329
- source?: InputSourceParams | PathSourceParams | VideoPath | ChannelPath | null;
9268
+ source?: SourceParams | VideoPath | ChannelPath | null;
8330
9269
  onEnded?: () => any;
8331
9270
  /**
8332
9271
  * If true, the player will inherit the width and height of its parent element.
@@ -8390,14 +9329,6 @@ export declare interface WebPlayerProps {
8390
9329
  * If true then OSD is shown based on condition resolved in HidableOsdContainer, e.g. on pause, on mouse move etc.
8391
9330
  */
8392
9331
  showOsd?: boolean;
8393
- /**
8394
- * If true, then only a minimal set of OSD controls is shown (play/pause, volume, fullscreen)
8395
- * and the big center play/pause button only flashes briefly on state change.
8396
- *
8397
- * Intended for small fixed containers (e.g. a scroll-pinned mini player in the corner
8398
- * of the page, or a full-width mobile player pinned to the top of the viewport).
8399
- */
8400
- isMinimal?: boolean;
8401
9332
  /**
8402
9333
  * If false, then buffering spinner is never shown.
8403
9334
  * If true then buffering spinner is shown while buffering.
@@ -8420,8 +9351,6 @@ export declare interface WebPlayerProps {
8420
9351
  setPaymentOverlayVisible?: React_2.Dispatch<React_2.SetStateAction<boolean>>;
8421
9352
  hideOverlay?: boolean;
8422
9353
  sourcePlayMode?: SourcePlayMode;
8423
- adsConfig?: StaticAdsBreak[];
8424
- userAuthCallbacks?: SDKUserAuthCallbacks;
8425
9354
  }
8426
9355
 
8427
9356
  /**