@tivio/sdk-react 9.2.0-alpha.4 → 9.3.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.
@@ -11,6 +11,7 @@ import type { PaletteType } from '@material-ui/core';
11
11
  import { default as React_2 } from 'react';
12
12
  import { RecommendationsQuery } from '@algolia/recommend';
13
13
  import type { TagManagerArgs } from 'react-gtm-module';
14
+ import type { Timestamp } from '@firebase/firestore-types';
14
15
 
15
16
  export declare interface ActivatedPromotion {
16
17
  id: string;
@@ -607,6 +608,10 @@ export declare interface BannerProps {
607
608
  */
608
609
  export declare type BannerPropsPartial = Partial<BannerProps>;
609
610
 
611
+ declare interface BaseWidgetControlPayload {
612
+ widgetPath: string;
613
+ }
614
+
610
615
  /**
611
616
  * @public
612
617
  */
@@ -683,6 +688,35 @@ export declare interface CancellingMonetizationsSummaryItem {
683
688
  cancellingUsers: number;
684
689
  }
685
690
 
691
+ declare interface ChangeStateResponse {
692
+ success: boolean;
693
+ }
694
+
695
+ declare interface ChangeWidgetStatePayload extends BaseWidgetControlPayload {
696
+ prevState: InteractiveWidgetState;
697
+ targetState: InteractiveWidgetState;
698
+ }
699
+
700
+ export declare interface ChangeWidgetStateRequest {
701
+ /** Path to the widget instance document */
702
+ widgetPath: string;
703
+ /** The state the client believes the widget is currently in */
704
+ prevState: InteractiveWidgetState;
705
+ /** The desired target state to transition to */
706
+ targetState: InteractiveWidgetState;
707
+ /** Active scene id */
708
+ activeSceneId?: string;
709
+ /** Audience delay in seconds */
710
+ audienceDelay?: number;
711
+ /** Time in seconds for the audience to answer the question */
712
+ answerTime?: number;
713
+ }
714
+
715
+ declare interface ChangeWidgetStateRequest_2 {
716
+ action: 'changeState';
717
+ payload: ChangeWidgetStatePayload;
718
+ }
719
+
686
720
  /**
687
721
  * @public
688
722
  * @deprecated this channel structure is not used anymore (don't confuse with tv channels, which are used).
@@ -736,6 +770,11 @@ export declare interface ChurnedMonetizationsSummaryItem {
736
770
  expiredUsers: number;
737
771
  }
738
772
 
773
+ export declare enum CloudflareStreamingPurchaseStatus {
774
+ PAID = "paid",
775
+ FREE = "free"
776
+ }
777
+
739
778
  /**
740
779
  * @public
741
780
  */
@@ -1053,6 +1092,18 @@ export declare interface ConversionsTargetItem {
1053
1092
 
1054
1093
  export declare type CountdownScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.COUNTDOWN>;
1055
1094
 
1095
+ /**
1096
+ * Maps supported country codes (ISO 3166-1 alpha-2) to their primary language codes (ISO 639-1).
1097
+ * Used to determine the default language settings for specific countries.
1098
+ * @example
1099
+ * CountryToLanguageMap['CZ'] // Returns LangCode.CS for Czech Republic
1100
+ */
1101
+ export declare const CountryToLangCodeMap: {
1102
+ CZ: LangCode;
1103
+ PL: LangCode;
1104
+ SK: LangCode;
1105
+ };
1106
+
1056
1107
  /**
1057
1108
  * @public
1058
1109
  * @TODO move somewhere else
@@ -1073,11 +1124,11 @@ export declare const createPubSub: () => PubSub;
1073
1124
  * Fetch & load CommonJS remote module.
1074
1125
  * @public
1075
1126
  */
1076
- export declare const createRemotePackageLoader: () => (secret: string, conf: InternalConfig, checkBundleCharCount?: boolean) => Promise<TivioBundle>;
1127
+ export declare const createRemotePackageLoader: () => (secret: string, conf: InternalConfig, checkBundleCharCount?: boolean, skipCache?: boolean) => Promise<TivioBundle>;
1077
1128
 
1078
1129
  export declare const createTivio: () => (conf: SdkReactConfig) => Promise<RemoteBundleState>;
1079
1130
 
1080
- export declare const createUseRemoteBundle: () => (sdkReactConfig: SdkReactConfig, checkBundleCharCount?: boolean) => RemoteBundleState;
1131
+ export declare const createUseRemoteBundle: () => (sdkReactConfig: SdkReactConfig, checkBundleCharCount?: boolean, skipCache?: boolean) => RemoteBundleState;
1081
1132
 
1082
1133
  export declare interface CreateUserPayload {
1083
1134
  displayName?: string;
@@ -1153,7 +1204,6 @@ export declare enum CustomerId {
1153
1204
  GRAPE = "GRAPE",
1154
1205
  HODINA_DEJEPICHU = "HODINA_DEJEPICHU",
1155
1206
  INVESTICNI_PRUVODCE = "INVESTICNI_PRUVODCE",
1156
- INVESTOREES = "INVESTOREES",
1157
1207
  JOJ = "JOJ",
1158
1208
  KLUCI_Z_PRAHY = "KLUCI_Z_PRAHY",
1159
1209
  MALL = "MALL",
@@ -1198,7 +1248,8 @@ export declare enum CustomerId {
1198
1248
  BEAT_SEXISM = "BEAT_SEXISM",
1199
1249
  KAROL_A_KVIDO = "KAROL_A_KVIDO",
1200
1250
  UZ_BUDU = "UZ_BUDU",
1201
- PRIMA = "PRIMA"
1251
+ PRIMA = "PRIMA",
1252
+ NORA_FRIDRICHOVA = "NORA_FRIDRICHOVA"
1202
1253
  }
1203
1254
 
1204
1255
  /**
@@ -1299,6 +1350,8 @@ export declare interface Customizations {
1299
1350
  color?: string;
1300
1351
  backgroundGradient?: string;
1301
1352
  iconColor?: string;
1353
+ roundedMenuColor?: string;
1354
+ roundedMenuHoverColor?: string;
1302
1355
  };
1303
1356
  CenteredMenu?: {
1304
1357
  backgroundColor: string;
@@ -1562,6 +1615,8 @@ export declare enum DrmProvider {
1562
1615
  * Original oktagon stream provider.
1563
1616
  *
1564
1617
  * https://streamonline.pl
1618
+ *
1619
+ * @deprecated oktagon no longer uses this drm provider.
1565
1620
  */
1566
1621
  STREAMONLINE = "streamonline"
1567
1622
  }
@@ -1610,6 +1665,18 @@ export declare interface EditMessageOptions extends Omit<AddMessageOptions, 'par
1610
1665
  videoTime?: number;
1611
1666
  }
1612
1667
 
1668
+ export declare interface EmailNotification {
1669
+ id: string;
1670
+ name: string;
1671
+ targeting: NotificationTargeting | null;
1672
+ templateId: string;
1673
+ thumbnailUrl?: string;
1674
+ triggerType: NotificationTriggerType;
1675
+ scheduleTime?: Date;
1676
+ status?: NotificationStatus;
1677
+ substitutions: NotificationSubstitution[];
1678
+ }
1679
+
1613
1680
  /**
1614
1681
  * Represents a SendGrid transactional template.
1615
1682
  */
@@ -1705,8 +1772,8 @@ export declare type EmbedScreenPostMessageFn = <T extends EmbedScreenPostMessage
1705
1772
  */
1706
1773
  export declare interface EmitterInterface {
1707
1774
  isSupported: (even: string) => boolean;
1708
- addListener: <T = any>(event: string, cb: (value: T) => Empty_2) => void;
1709
- removeListener: <T = any>(event: string, cb: (value: T) => Empty_2) => void;
1775
+ addListener: <T = unknown>(event: string, cb: (value: T) => Empty_2) => void;
1776
+ removeListener: <T = unknown>(event: string, cb: (value: T) => Empty_2) => void;
1710
1777
  }
1711
1778
 
1712
1779
  /**
@@ -1731,6 +1798,11 @@ export declare type Events = {
1731
1798
  'on-error': Error;
1732
1799
  };
1733
1800
 
1801
+ export declare interface ExtensionMetadata {
1802
+ purchaseStatus: CloudflareStreamingPurchaseStatus;
1803
+ activeVideoId?: string;
1804
+ }
1805
+
1734
1806
  /**
1735
1807
  * @public
1736
1808
  */
@@ -1739,6 +1811,23 @@ export declare type ExternalTvConfig = {
1739
1811
  splashScreenBackgroundColor?: string;
1740
1812
  };
1741
1813
 
1814
+ export declare interface FavoriteTagWithData {
1815
+ content: Tag;
1816
+ type: 'tag';
1817
+ }
1818
+
1819
+ export declare interface FavoriteVideoWithData {
1820
+ content: Video;
1821
+ type: 'video';
1822
+ }
1823
+
1824
+ /**
1825
+ * @public
1826
+ */
1827
+ export declare type FavoriteWithData = FavoriteVideoWithData | (FavoriteTagWithData & {
1828
+ profileId?: string;
1829
+ });
1830
+
1742
1831
  /**
1743
1832
  * @throws if fetch fails
1744
1833
  * @public
@@ -1800,6 +1889,24 @@ export declare type FrequencyInfo = {
1800
1889
  value: number;
1801
1890
  };
1802
1891
 
1892
+ export declare interface GenerateSourceRequest {
1893
+ profileId: string;
1894
+ videoId: string;
1895
+ protocol: VideoSourceProtocol;
1896
+ sessionType: SessionType;
1897
+ extensionMetadata: ExtensionMetadata;
1898
+ }
1899
+
1900
+ export declare interface GenerateWidgetJoinCodeRequest {
1901
+ action: 'generateWidgetJoinCode';
1902
+ payload: BaseWidgetControlPayload;
1903
+ }
1904
+
1905
+ declare interface GenerateWidgetJoinCodeResponse {
1906
+ code: string;
1907
+ qrCodeUri: string;
1908
+ }
1909
+
1803
1910
  /**
1804
1911
  * On call error interface for front-end.
1805
1912
  * Do not use it / throw it from @tivio/api.
@@ -1996,6 +2103,14 @@ export declare interface GetSourceUrlResponse {
1996
2103
 
1997
2104
  export declare type GetTilesInRowResponse<U extends NextPageParamType = NextPageParamType> = PaginatedResponse<TileData, U>;
1998
2105
 
2106
+ export declare interface GetUserProfileDataOptions {
2107
+ /**
2108
+ * If true, the data will be returned for all user profiles.
2109
+ * If false, the data will be returned only for the active user profile.
2110
+ */
2111
+ ignoreActiveUserProfile?: boolean;
2112
+ }
2113
+
1999
2114
  export declare interface GetUserRssUrlRequest {
2000
2115
  organizationId: string;
2001
2116
  }
@@ -2228,6 +2343,7 @@ export declare interface InteractiveWidget<T extends InteractiveWidgetScene = In
2228
2343
  readonly isWaitingForStart: boolean;
2229
2344
  answerQuestion(answerId: string): void;
2230
2345
  submitAnswer(request: Pick<SubmitAnswerRequest, 'answerOptionId' | 'answerText'>): Promise<void>;
2346
+ verifyJoinCode(joinCode: string, shouldJoinPlayer?: boolean): Promise<boolean>;
2231
2347
  destroy(): void;
2232
2348
  }
2233
2349
 
@@ -2253,6 +2369,7 @@ export declare interface InteractiveWidgetSceneBase<TType extends InteractiveWid
2253
2369
  type: TType;
2254
2370
  name: Translation;
2255
2371
  metadata: SceneMetadata<TType>;
2372
+ state: InteractiveWidgetState;
2256
2373
  }
2257
2374
 
2258
2375
  export declare enum InteractiveWidgetSceneTemplateType {
@@ -2478,6 +2595,12 @@ export declare interface LeaderboardPlayer {
2478
2595
 
2479
2596
  export declare type LeaderboardScene = InteractiveWidgetSceneBase<InteractiveWidgetSceneTemplateType.LEADERBOARD>;
2480
2597
 
2598
+ export declare interface LeaderboardsRequest {
2599
+ widgetPath: string;
2600
+ lastQuestionIndex: number;
2601
+ allPlayers?: boolean;
2602
+ }
2603
+
2481
2604
  /**
2482
2605
  * @public
2483
2606
  */
@@ -2621,6 +2744,21 @@ export declare interface MallTvExternals {
2621
2744
  mallTvEntityId: string;
2622
2745
  }
2623
2746
 
2747
+ /**
2748
+ * Response for {@link ManagementGenerateSourceRequest}
2749
+ * @private
2750
+ * @example ```json
2751
+ * {
2752
+ * "sessionId": "f6439376-bc57-4891-ac64-4dde4254a423",
2753
+ * "url": "https://live.streaming.tivio.studio/live/ol24ae7lQ4ES1PN6UYSk/tRRu9BMn3eTTX22iTyLz/f6439376-bc57-4891-ac64-4dde4254a423/index.m3u8"
2754
+ * }
2755
+ * ```
2756
+ */
2757
+ export declare interface ManagementGenerateSourceResponse {
2758
+ sessionId: string;
2759
+ url: string;
2760
+ }
2761
+
2624
2762
  /**
2625
2763
  * @public
2626
2764
  */
@@ -2921,17 +3059,11 @@ export declare type NoGraphicsScene = InteractiveWidgetSceneBase<InteractiveWidg
2921
3059
  */
2922
3060
  export declare type NonAdSourceType = Exclude<SourceType, SourceType.ADVERTISEMENT>;
2923
3061
 
2924
- declare interface Notification_2 {
2925
- id: string;
2926
- name: string;
2927
- targeting: NotificationTargeting | null;
2928
- templateId: string;
2929
- thumbnailUrl?: string;
2930
- triggerType: NotificationTriggerType;
2931
- scheduleTime?: Date;
2932
- status?: NotificationStatus;
2933
- substitutions: NotificationSubstitution[];
2934
- }
3062
+ declare type Notification_2 = {
3063
+ type: NotificationType.PUSH;
3064
+ } & SchedulePushNotificationPayload | {
3065
+ type?: NotificationType.EMAIL;
3066
+ } & EmailNotification;
2935
3067
  export { Notification_2 as Notification }
2936
3068
 
2937
3069
  export declare interface NotificationDuration {
@@ -3002,6 +3134,11 @@ export declare interface NotificationTargeting {
3002
3134
 
3003
3135
  export declare type NotificationTriggerType = 'scheduled' | 'manual' | 'purchaseStatusChange' | 'duration' | 'userRegistration';
3004
3136
 
3137
+ export declare enum NotificationType {
3138
+ PUSH = "PUSH",
3139
+ EMAIL = "EMAIL"
3140
+ }
3141
+
3005
3142
  /**
3006
3143
  * @public
3007
3144
  */
@@ -3116,6 +3253,7 @@ export declare interface OrganizationSettingsField extends OrganizationResponsiv
3116
3253
  };
3117
3254
  rss?: {
3118
3255
  title?: string;
3256
+ enabled?: boolean;
3119
3257
  };
3120
3258
  /**
3121
3259
  * Setting for EPG screen on web
@@ -3145,6 +3283,9 @@ export declare interface OrganizationSettingsField extends OrganizationResponsiv
3145
3283
  };
3146
3284
  };
3147
3285
  voucher?: VoucherPageConfiguration;
3286
+ pushNotifications?: {
3287
+ enabled?: boolean;
3288
+ };
3148
3289
  }
3149
3290
 
3150
3291
  /**
@@ -3408,9 +3549,8 @@ export declare interface PlayerEngineInterface {
3408
3549
  stop(): Promise<void>;
3409
3550
  addEventListener<T>(event: PlayerEngineEvent, callback: PlayerEngineListener<T>): void;
3410
3551
  addEventListener(event: 'statechange', callback: PlayerEngineListener<PlayerState>): void;
3411
- addEventListener(event: 'bufferingchange', callback: PlayerEngineListener<boolean>): void;
3552
+ addEventListener(event: 'bufferingchange' | 'togglefullscreen', callback: PlayerEngineListener<boolean>): void;
3412
3553
  addEventListener(event: 'bufferedinfochange', callback: PlayerEngineListener<BufferPercentChunk[]>): void;
3413
- addEventListener(event: 'togglefullscreen', callback: PlayerEngineListener<boolean>): void;
3414
3554
  removeEventListener<T>(event: PlayerEngineEvent, listener: PlayerEngineListener<T>): void;
3415
3555
  /**
3416
3556
  * @returns currently playing audio track in ISO 639-1 format ('cs', 'en' etc.) or null if not available
@@ -3494,7 +3634,7 @@ export declare interface PlayerEngineInterface {
3494
3634
  /**
3495
3635
  * @public
3496
3636
  */
3497
- export declare type PlayerEngineListener<T> = (value: T) => any;
3637
+ export declare type PlayerEngineListener<T> = (value: T) => void;
3498
3638
 
3499
3639
  /**
3500
3640
  * @public
@@ -4261,6 +4401,14 @@ export declare type PurchaseEndpointPayload = {
4261
4401
  };
4262
4402
  };
4263
4403
 
4404
+ /**
4405
+ * @public
4406
+ */
4407
+ export declare type PurchaseEventHandlers = {
4408
+ onPurchaseIntention?: (purchase: PurchasableMonetization) => void;
4409
+ onPurchaseFinished?: (purchase: Purchase) => void;
4410
+ };
4411
+
4264
4412
  /**
4265
4413
  * @public
4266
4414
  */
@@ -4323,6 +4471,20 @@ export declare enum PurchaseStatus {
4323
4471
  */
4324
4472
  export declare type PurchaseType = 'transaction' | 'subscription' | 'voucher';
4325
4473
 
4474
+ export declare type PushNotificationSchedulerRequest = {
4475
+ operation: SchedulerOperation.SCHEDULE;
4476
+ status: NotificationStatus;
4477
+ payload: SchedulePushNotificationPayload;
4478
+ } | {
4479
+ operation: SchedulerOperation.UNSCHEDULE;
4480
+ organizationId: string;
4481
+ contentId: string;
4482
+ } | {
4483
+ operation: SchedulerOperation.GET_STATUS;
4484
+ organizationId: string;
4485
+ contentId: string;
4486
+ };
4487
+
4326
4488
  /**
4327
4489
  * TODO more generic name, since we support stargaze payment gateway as well
4328
4490
  * @public
@@ -4489,6 +4651,8 @@ export declare interface QuizGameGroupStats {
4489
4651
 
4490
4652
  export declare enum QuizGameGroupType {
4491
4653
  HIGHLIGHTED_PLAYERS = "HIGHLIGHTED_PLAYERS",
4654
+ /** Participants playing in Offline mode */
4655
+ LOCAL_PLAYERS = "LOCAL_PLAYERS",
4492
4656
  ALL = "ALL",
4493
4657
  PARTY = "PARTY"
4494
4658
  }
@@ -4496,7 +4660,8 @@ export declare enum QuizGameGroupType {
4496
4660
  export declare enum QuizGameRole {
4497
4661
  OBS = "OBS",
4498
4662
  HOST = "HOST",
4499
- PLAYER = "PLAYER"
4663
+ PLAYER = "PLAYER",
4664
+ LOCAL_PLAYER = "LOCAL_PLAYER"
4500
4665
  }
4501
4666
 
4502
4667
  export declare enum QuizGameStatus {
@@ -4695,7 +4860,7 @@ export declare interface RenderConditionValue {
4695
4860
  subscriptionRefs?: any[];
4696
4861
  }
4697
4862
 
4698
- export declare const renderWebPlayer: (container: HTMLElement, props: WebPlayerProps) => void;
4863
+ export declare const renderWebPlayer: (container: HTMLElement, props: Omit<WebPlayerProps, 'onPlayerControllerCreated'>) => Promise<SimplifiedVideoController>;
4699
4864
 
4700
4865
  /**
4701
4866
  * Make all attributes in given type required, non-nullable and defined.
@@ -4750,6 +4915,7 @@ export declare interface RouterOverrides {
4750
4915
  urlHandle?: string;
4751
4916
  replace?: boolean;
4752
4917
  params?: string;
4918
+ callbackUrl?: string;
4753
4919
  }) => void;
4754
4920
  goToRegistrationPage: (options?: {
4755
4921
  origin?: RegistrationRedirect;
@@ -5063,6 +5229,38 @@ export declare interface ScheduleNotificationRequest {
5063
5229
  notificationPath: string;
5064
5230
  }
5065
5231
 
5232
+ export declare interface SchedulePushNotificationPayload {
5233
+ /**
5234
+ * To which content document will this notification relate to.
5235
+ */
5236
+ contentId: string;
5237
+ /**
5238
+ * Content document type.
5239
+ */
5240
+ contentType: 'video' | 'article';
5241
+ /**
5242
+ * To users of which organization should notifications be sent.
5243
+ */
5244
+ organizationId: string;
5245
+ /**
5246
+ * Contents of notification message that will be shown to users.
5247
+ */
5248
+ notification: {
5249
+ title: string;
5250
+ body?: string;
5251
+ imageUrl?: string;
5252
+ data?: {
5253
+ [key: string]: string;
5254
+ };
5255
+ };
5256
+ }
5257
+
5258
+ export declare enum SchedulerOperation {
5259
+ SCHEDULE = "SCHEDULE",
5260
+ UNSCHEDULE = "UNSCHEDULE",
5261
+ GET_STATUS = "GET_STATUS"
5262
+ }
5263
+
5066
5264
  /**
5067
5265
  * @public
5068
5266
  */
@@ -5088,6 +5286,7 @@ declare interface Screen_2 {
5088
5286
  fetchMoreRows: () => Promise<void>;
5089
5287
  hasNextPage: boolean;
5090
5288
  refetchIfNeeded: () => Promise<void>;
5289
+ allowOrganizationBanner?: boolean;
5091
5290
  }
5092
5291
  export { Screen_2 as Screen }
5093
5292
 
@@ -5246,6 +5445,27 @@ export declare interface SendMessageResponse {
5246
5445
  messageId?: string;
5247
5446
  }
5248
5447
 
5448
+ export declare interface SendPushNotificationsResponse {
5449
+ /**
5450
+ * Potential user count to send notifications to.
5451
+ * Will include organization users that have at least 1 device registered to receive notifications.
5452
+ */
5453
+ potentialUserCount: number;
5454
+ /**
5455
+ * Potential device count from users to send notifications to.
5456
+ * Resulting number is equals to {@link successNotificationCount} + {@link failureNotificationCount}
5457
+ */
5458
+ potentialDeviceCount: number;
5459
+ /**
5460
+ * Number of successfully sent notifications.
5461
+ */
5462
+ successNotificationCount: number;
5463
+ /**
5464
+ * Number of notifications that failed to send.
5465
+ */
5466
+ failureNotificationCount: number;
5467
+ }
5468
+
5249
5469
  export declare interface SendTivioTemplateEmailRequest {
5250
5470
  notificationId: string;
5251
5471
  organizationId: string;
@@ -5281,6 +5501,24 @@ export declare interface SeriesTileSpecificData {
5281
5501
  availableSeasons: AvailableSeason[];
5282
5502
  }
5283
5503
 
5504
+ /**
5505
+ * @public
5506
+ */
5507
+ export declare enum SessionType {
5508
+ /**
5509
+ * Umbrella streaming - viewer will be able to switch between different sources linked to the main source.
5510
+ */
5511
+ INTERACTIVE = "interactive",
5512
+ /**
5513
+ * Classic streaming - viewer will be able to watch a single LIVE source.
5514
+ */
5515
+ LIVE = "live",
5516
+ /**
5517
+ * On-demand streaming - viewer will be able to watch a single VOD source.
5518
+ */
5519
+ ON_DEMAND = "ondemand"
5520
+ }
5521
+
5284
5522
  export declare interface SetCustomClaimsRequest {
5285
5523
  organizationId: string;
5286
5524
  }
@@ -5337,6 +5575,110 @@ export declare const showGdprConsentPreferences: () => Promise<void>;
5337
5575
  */
5338
5576
  export declare type SignInProvider = 'google' | 'patreon' | 'apple';
5339
5577
 
5578
+ /**
5579
+ * Simplified VideoController interface for external rendering
5580
+ */
5581
+ export declare interface SimplifiedVideoController {
5582
+ /**
5583
+ * Resume playback from paused state
5584
+ */
5585
+ play(): void;
5586
+ /**
5587
+ * Pause the current playback
5588
+ */
5589
+ pause(): void;
5590
+ /**
5591
+ * Toggle between play and pause states
5592
+ */
5593
+ togglePause(): void;
5594
+ /**
5595
+ * Replay the current video from the beginning
5596
+ */
5597
+ replay(): Promise<void>;
5598
+ /**
5599
+ * Retry playback if it failed to start
5600
+ */
5601
+ retry(): void;
5602
+ /**
5603
+ * Seek to an absolute position in milliseconds
5604
+ * @param ms - Position in milliseconds from the start of the video
5605
+ */
5606
+ seekToAbsolutePosition(ms: number): void;
5607
+ /**
5608
+ * Seek relative to current position
5609
+ * @param ms - Number of milliseconds to seek (positive for forward, negative for backward)
5610
+ */
5611
+ seekBy(ms: number): void;
5612
+ /**
5613
+ * Seek to a percentage of the video duration
5614
+ * @param percentage - Percentage value between 0 and 100
5615
+ */
5616
+ seekToPercent(percentage: number): void;
5617
+ /**
5618
+ * Seek to the live position for live streams
5619
+ */
5620
+ seekToLive(): void;
5621
+ /**
5622
+ * Set the volume level
5623
+ * @param value - Volume level between 0 and 1
5624
+ */
5625
+ changeVolume(value: number): void;
5626
+ /**
5627
+ * Increase volume by 5%
5628
+ */
5629
+ volumeUp(): void;
5630
+ /**
5631
+ * Decrease volume by 5%
5632
+ */
5633
+ volumeDown(): void;
5634
+ /**
5635
+ * Mute the audio
5636
+ */
5637
+ mute(): void;
5638
+ /**
5639
+ * Unmute the audio
5640
+ */
5641
+ unmute(): void;
5642
+ /**
5643
+ * Toggle between muted and unmuted states
5644
+ */
5645
+ toggleMute(): void;
5646
+ /**
5647
+ * Currently playing source or null if no source is loaded
5648
+ */
5649
+ readonly currentSource: PlayerSource | null;
5650
+ /**
5651
+ * Add an event listener for player events
5652
+ * @param event - The event name to listen for (e.g., 'ended', 'timeupdate', 'statechange')
5653
+ * @param callback - Function to call when the event occurs
5654
+ */
5655
+ addEventListener<T>(event: string, callback: (value: T) => void): void;
5656
+ /**
5657
+ * Add an event listener for volume changes
5658
+ * @param event - Must be 'volumechange'
5659
+ * @param callback - Function called with volume state object
5660
+ */
5661
+ addEventListener(event: 'volumechange', callback: (value: {
5662
+ muted: boolean;
5663
+ volume: number;
5664
+ }) => void): void;
5665
+ /**
5666
+ * Remove an event listener
5667
+ * @param event - The event name to stop listening for
5668
+ * @param callback - The callback function to remove
5669
+ */
5670
+ removeEventListener<T>(event: string, callback: (value: T) => void): void;
5671
+ /**
5672
+ * Change the current source to a new one
5673
+ * @param source - The new source to load (can be a video path, channel path, or source parameters)
5674
+ */
5675
+ setSource(source: WebPlayerProps['source']): void;
5676
+ /**
5677
+ * Destroy the player and clean up all resources
5678
+ */
5679
+ destroy(): Promise<void>;
5680
+ }
5681
+
5340
5682
  export declare enum SocialNetworks {
5341
5683
  FACEBOOK = 0,
5342
5684
  INSTAGRAM = 1,
@@ -5437,6 +5779,19 @@ export declare type StartAndContinuePosition = {
5437
5779
  continueFromPosition?: number;
5438
5780
  };
5439
5781
 
5782
+ export declare type StartLiveStreamPayload = BaseWidgetControlPayload;
5783
+
5784
+ declare interface StartLiveStreamRequest {
5785
+ action: 'startLiveStream';
5786
+ payload: StartLiveStreamPayload;
5787
+ }
5788
+
5789
+ export declare interface StartLiveStreamResponse {
5790
+ liveStreamProcessPath: string;
5791
+ streamingStudioProcessPath: string;
5792
+ error?: string;
5793
+ }
5794
+
5440
5795
  /**
5441
5796
  * @public
5442
5797
  */
@@ -5559,8 +5914,8 @@ export declare interface Tag extends RowItem {
5559
5914
  detailBanner?: string;
5560
5915
  availableSeasons?: AvailableSeason[];
5561
5916
  isFavorite: boolean;
5562
- addToFavorites: () => void;
5563
- removeFromFavorites: () => void;
5917
+ addToFavorites: () => Promise<void>;
5918
+ removeFromFavorites: () => Promise<void>;
5564
5919
  cover: string;
5565
5920
  getApplicationName: () => string | undefined;
5566
5921
  seriesRef?: DocumentReference<any>;
@@ -5908,7 +6263,6 @@ export declare interface TivioComponents {
5908
6263
  }>;
5909
6264
  Provider: React_2.ComponentType<RemoteProviderProps>;
5910
6265
  WebPlayer: React_2.ComponentType<WebPlayerProps>;
5911
- Widget: React_2.ComponentType<TivioWidgetProps>;
5912
6266
  PlayerDataContextProvider: React_2.ComponentType<{
5913
6267
  id: string;
5914
6268
  }>;
@@ -5937,9 +6291,7 @@ export declare interface TivioComponents {
5937
6291
  WebTile: React_2.ComponentType<{
5938
6292
  item?: ItemInRow;
5939
6293
  } & TilePropsPartial>;
5940
- ChannelContext: React_2.Context<TvChannel | undefined>;
5941
6294
  ContentSortPicker: React_2.ComponentType<ContentSortPickerProps>;
5942
- WebProfileScreen: React_2.ComponentType<WebProfileScreenProps>;
5943
6295
  WebTivioProVideoScreen: React_2.ComponentType<WebTivioProVideoScreenProps>;
5944
6296
  RemoteController: React_2.ComponentType<RemoteControllerProps>;
5945
6297
  }
@@ -5965,14 +6317,24 @@ export declare interface TivioConfig {
5965
6317
  preferHttp?: boolean;
5966
6318
  };
5967
6319
  secret: string;
6320
+ /**
6321
+ * Language used when isLanguageSelectionEnabled is false | undefined or when not possible to load language from local storage or localization worker
6322
+ */
5968
6323
  language: LangCode;
5969
6324
  debug?: boolean;
5970
6325
  verbose?: boolean;
5971
6326
  firebaseApp?: any | null;
5972
- firebaseFactory?: (config: Object, appName?: string) => firebase_2.FirebaseApp;
6327
+ firebaseFactory?: (config: object, appName?: string) => firebase_2.FirebaseApp;
5973
6328
  authDomainOverride?: string;
5974
6329
  firestore?: any | null;
5975
6330
  currency: Currency;
6331
+ /**
6332
+ * A flag that indicates whether the language selection feature is enabled.
6333
+ * Language is then stored to local storage 'tivio-user-language'.
6334
+ * If nothing is stored in local storage, then language is set according to location
6335
+ * When set to `true`, users are allowed to choose their preferred language
6336
+ */
6337
+ isLanguageSelectionEnabled?: boolean;
5976
6338
  applicationId?: string;
5977
6339
  isTivioProApp?: boolean;
5978
6340
  lockApplicationHandle?: string;
@@ -6198,6 +6560,9 @@ export declare type TivioInternalProviders = {
6198
6560
  }>;
6199
6561
  MonetizationsSelectOverlayContextProvider: React_2.ComponentType;
6200
6562
  QerkoOverlayContextProvider: React_2.ComponentType;
6563
+ /**
6564
+ * @deprecated do not use, this provider will be removed in the future
6565
+ */
6201
6566
  PurchasesWithVideosContextProvider: React_2.ComponentType<{
6202
6567
  children?: React_2.ReactNode;
6203
6568
  }>;
@@ -6363,55 +6728,6 @@ export declare type TivioVodSource = SourceBase & StartAndContinuePosition & {
6363
6728
  videoPath: string;
6364
6729
  };
6365
6730
 
6366
- /**
6367
- * @public
6368
- */
6369
- export declare const TivioWidget: React_2.ForwardRefExoticComponent<Omit<TivioWidgetProps, "ref"> & React_2.RefAttributes<TivioWidgetRef>>;
6370
-
6371
- /**
6372
- * @public
6373
- */
6374
- export declare const TivioWidgetError: React_2.FC<TivioWidgetErrorProps>;
6375
-
6376
- declare type TivioWidgetErrorProps = {
6377
- error: string | null;
6378
- };
6379
-
6380
- /**
6381
- * @public
6382
- */
6383
- export declare const TivioWidgetLoader: React_2.FC;
6384
-
6385
- /**
6386
- * @public
6387
- */
6388
- export declare interface TivioWidgetProps {
6389
- id: string;
6390
- ref: React_2.MutableRefObject<TivioWidgetRef>;
6391
- onEnabled?: (enabled: boolean) => any;
6392
- onBlur?: (event: {
6393
- key: string;
6394
- width: number;
6395
- x: number;
6396
- }) => any;
6397
- }
6398
-
6399
- /**
6400
- * @public
6401
- */
6402
- export declare interface TivioWidgetRef {
6403
- focus: (args: {
6404
- x?: number;
6405
- }) => void;
6406
- handleKey: (key: string) => ({
6407
- handled: boolean;
6408
- x: number;
6409
- });
6410
- unfocus: () => ({
6411
- x: number;
6412
- });
6413
- }
6414
-
6415
6731
  export declare interface TokenInterface {
6416
6732
  token: string;
6417
6733
  expirationDate: Date;
@@ -6599,6 +6915,25 @@ export declare enum TvStreamType {
6599
6915
  */
6600
6916
  export declare const TvTivioProvider: React_2.FC<TivioProviderProps>;
6601
6917
 
6918
+ export declare type UpdateNotificationSettingsRequest = {
6919
+ tokenToAdd: string;
6920
+ platform: string;
6921
+ tokenToDelete?: string;
6922
+ validateToken?: never;
6923
+ } | {
6924
+ tokenToDelete: string;
6925
+ tokenToAdd?: never;
6926
+ platform?: never;
6927
+ validateToken?: never;
6928
+ } | {
6929
+ validateToken: string;
6930
+ tokenToAdd?: never;
6931
+ platform?: never;
6932
+ tokenToDelete?: never;
6933
+ };
6934
+
6935
+ export declare type UpdateNotificationSettingsResponse = Promise<boolean>;
6936
+
6602
6937
  export declare type UpsertCommentResponse = AddEditCommentResponse | DeleteCommentResponse;
6603
6938
 
6604
6939
  /**
@@ -6693,7 +7028,7 @@ export declare const useChannelSource: (tvChannelId: string) => {
6693
7028
  * but for live video with comments, we want to subscribe to conversation
6694
7029
  */
6695
7030
  export declare type UseComments = (options: UseMessagesOptions) => {
6696
- pagination: PaginationInterface<Comment>;
7031
+ pagination: PaginationInterface<unknown>;
6697
7032
  addComment: (options: AddMessageOptions) => Promise<UseMessagesAddEditMessageResponse>;
6698
7033
  editComment: (options: EditMessageOptions) => Promise<UseMessagesAddEditMessageResponse>;
6699
7034
  deleteComment: (commentId: string) => Promise<UseMessagesDeleteMessageResponse>;
@@ -6956,6 +7291,9 @@ export declare type User = {
6956
7291
  getAllExtendableSubscriptions: () => Promise<Purchase[]>;
6957
7292
  getRssValidToken: () => Promise<TokenInterface | undefined>;
6958
7293
  getRssUrl: () => Promise<GetUserRssUrlResponse>;
7294
+ getFavorites: (options?: GetUserProfileDataOptions) => Promise<FavoriteWithData[]>;
7295
+ getWatchPositions: (options?: GetUserProfileDataOptions) => Promise<WatchPositionWithData[]>;
7296
+ getWatchHistory: (options?: GetUserProfileDataOptions) => Promise<WatchPositionWithData[]>;
6959
7297
  invalidateAllTokens: (type: TokenType) => Promise<void>;
6960
7298
  isPartiallyRegistered: boolean;
6961
7299
  conversationStore: ConversationStore;
@@ -6987,6 +7325,16 @@ export declare enum UserGroup {
6987
7325
  PREMIUM = "premium"
6988
7326
  }
6989
7327
 
7328
+ export declare interface UserNotificationRegistrationToken {
7329
+ token: string;
7330
+ platform?: string;
7331
+ created: Timestamp;
7332
+ }
7333
+
7334
+ export declare interface UserNotificationSettings {
7335
+ registrationTokens?: UserNotificationRegistrationToken[];
7336
+ }
7337
+
6990
7338
  /**
6991
7339
  * @public
6992
7340
  */
@@ -7255,6 +7603,16 @@ export declare interface verifyCustomTokenProps {
7255
7603
  organizationPath: string;
7256
7604
  }
7257
7605
 
7606
+ declare interface VerifyJoinCodePayload extends BaseWidgetControlPayload {
7607
+ joinCode: string;
7608
+ shouldJoinPlayer?: boolean;
7609
+ }
7610
+
7611
+ export declare interface VerifyJoinCodeRequest {
7612
+ action: 'verifyJoinCode';
7613
+ payload: VerifyJoinCodePayload;
7614
+ }
7615
+
7258
7616
  /**
7259
7617
  * @public
7260
7618
  */
@@ -7311,8 +7669,8 @@ export declare interface Video extends RowItem, MonetizableItem, ReactableConten
7311
7669
  tasting: Video | null;
7312
7670
  watchPosition: number | null;
7313
7671
  isFavorite: boolean;
7314
- addToFavorites: () => void;
7315
- removeFromFavorites: () => void;
7672
+ addToFavorites: () => Promise<void>;
7673
+ removeFromFavorites: () => Promise<void>;
7316
7674
  availability: ContentAvailability | null;
7317
7675
  sourceLanguages: LangCode[];
7318
7676
  urlByLanguage: (lang: LangCode) => string | undefined;
@@ -7348,6 +7706,154 @@ export declare enum VideoContentType {
7348
7706
  SERIES = "SERIES"
7349
7707
  }
7350
7708
 
7709
+ /**
7710
+ * @public
7711
+ * VideoController provides control over video playback, seeking, volume, and event handling.
7712
+ */
7713
+ export declare interface VideoController {
7714
+ /** Unique identifier for this player instance */
7715
+ readonly playerId: string;
7716
+ /** Internal control queue for managing player operations */
7717
+ readonly controlQueue: unknown;
7718
+ /** Currently playing source or null if no source is loaded */
7719
+ readonly currentSource: PlayerSource | null;
7720
+ /**
7721
+ * Add an event listener for player events
7722
+ * @param event - The event name to listen for (e.g., 'ended', 'timeupdate', 'statechange')
7723
+ * @param callback - Function to call when the event occurs
7724
+ */
7725
+ addEventListener<T>(event: string, callback: (value: T) => void): void;
7726
+ addEventListener(event: 'volumechange', callback: (value: {
7727
+ muted: boolean;
7728
+ volume: number;
7729
+ }) => void): void;
7730
+ /**
7731
+ * Remove an event listener
7732
+ * @param event - The event name to stop listening for
7733
+ * @param callback - The callback function to remove
7734
+ */
7735
+ removeEventListener<T>(event: string, callback: (value: T) => void): void;
7736
+ /**
7737
+ * Change the current source to a new one
7738
+ * @param sourceData - The new source parameters
7739
+ * @param autoplay - Whether to start playing immediately (default: true)
7740
+ * @returns Promise that resolves to the new source or null if failed
7741
+ */
7742
+ changeSource(sourceData: SourceParams, autoplay?: boolean): Promise<PlayerSource | null>;
7743
+ /**
7744
+ * Load a new source and optionally start playing
7745
+ * @param sourceData - The source parameters to load
7746
+ * @param autoplay - Whether to start playing immediately
7747
+ */
7748
+ load(sourceData: SourceParams, autoplay: boolean): Promise<void>;
7749
+ /**
7750
+ * Toggle between play and pause states
7751
+ */
7752
+ togglePause(): void;
7753
+ /**
7754
+ * Pause the current playback
7755
+ */
7756
+ pause(): void;
7757
+ /**
7758
+ * Resume playback from paused state
7759
+ */
7760
+ unpause(): void;
7761
+ /**
7762
+ * Replay the current video from the beginning
7763
+ */
7764
+ replay(): Promise<void>;
7765
+ /**
7766
+ * Retry playback if it failed to start
7767
+ */
7768
+ retry(): void;
7769
+ /**
7770
+ * Stop playback and reset player state
7771
+ */
7772
+ close(): void;
7773
+ /**
7774
+ * Destroy the player and clean up all resources
7775
+ */
7776
+ destroy(): Promise<void>;
7777
+ /**
7778
+ * Seek to an absolute position in milliseconds
7779
+ * @param ms - Position in milliseconds from the start of the video
7780
+ */
7781
+ seekToAbsolutePosition(ms: number): void;
7782
+ /**
7783
+ * Seek relative to current position
7784
+ * @param ms - Number of milliseconds to seek (positive for forward, negative for backward)
7785
+ */
7786
+ seekBy(ms: number): void;
7787
+ /**
7788
+ * Seek to a percentage of the video duration
7789
+ * @param percentage - Percentage value between 0 and 100
7790
+ */
7791
+ seekToPercent(percentage: number): void;
7792
+ /**
7793
+ * @deprecated Use seekToPercent instead
7794
+ * Seek to a relative position as percentage of video duration
7795
+ * @param percentage - Percentage value between 0 and 100
7796
+ */
7797
+ seekToRelativePosition(percentage: number): void;
7798
+ /**
7799
+ * Seek to the live position for live streams
7800
+ */
7801
+ seekToLive(): void;
7802
+ /**
7803
+ * Internal method to seek to live position
7804
+ */
7805
+ seekToLiveInternal(): void;
7806
+ /**
7807
+ * Set the volume level
7808
+ * @param value - Volume level between 0 and 1
7809
+ */
7810
+ changeVolume(value: number): void;
7811
+ /**
7812
+ * Increase volume by 5%
7813
+ */
7814
+ volumeUp(): void;
7815
+ /**
7816
+ * Decrease volume by 5%
7817
+ */
7818
+ volumeDown(): void;
7819
+ /**
7820
+ * Mute the audio
7821
+ */
7822
+ mute(): void;
7823
+ /**
7824
+ * Unmute the audio
7825
+ */
7826
+ unmute(): void;
7827
+ /**
7828
+ * Toggle between muted and unmuted states
7829
+ */
7830
+ toggleMute(): void;
7831
+ /**
7832
+ * Enter fullscreen mode
7833
+ */
7834
+ goFullScreen(): Promise<void>;
7835
+ /**
7836
+ * @deprecated Use durationchange event instead
7837
+ * Set the duration of the current video in milliseconds
7838
+ * @param ms - Duration in milliseconds
7839
+ */
7840
+ setDurationMs(ms: number): void;
7841
+ /**
7842
+ * Get the duration of the current video in milliseconds
7843
+ * @returns Duration in milliseconds
7844
+ */
7845
+ getDurationMs(): number;
7846
+ /** Whether live seeking is enabled for the current source */
7847
+ readonly isLiveSeekingEnabled: boolean;
7848
+ /** Whether the current playback position is live */
7849
+ readonly isCurrentTimeLive: boolean;
7850
+ /**
7851
+ * Handle watermark element changes for security purposes
7852
+ * @param mutations - Array of DOM mutation records
7853
+ */
7854
+ onWatermarkElementChange(mutations: MutationRecord[]): void;
7855
+ }
7856
+
7351
7857
  declare type VideoDetailResponsiveField = OrganizationResponsiveSetting<{
7352
7858
  modalView?: boolean;
7353
7859
  showDateOfPublicationForRelatedVideos?: boolean;
@@ -7688,6 +8194,21 @@ export declare interface WarningConfirmationOverlayPayload extends ConfirmationO
7688
8194
  subscriptionExpirationText?: string;
7689
8195
  }
7690
8196
 
8197
+ /**
8198
+ * @public
8199
+ */
8200
+ export declare interface WatchPositionWithData extends Omit<UserWatchPositionField, 'videoRef' | 'tagRef'> {
8201
+ /**
8202
+ * Video that given watch position is related to.
8203
+ */
8204
+ video: Video;
8205
+ /**
8206
+ * If user watches episode of series, we have to save series ref as well.
8207
+ * Same for {@link episodeNumber} and {@link seasonNumber}.
8208
+ */
8209
+ tag?: Tag;
8210
+ }
8211
+
7691
8212
  /**
7692
8213
  * @public
7693
8214
  */
@@ -7905,6 +8426,10 @@ export declare interface WebConfig {
7905
8426
  [key: string]: string;
7906
8427
  };
7907
8428
  };
8429
+ /**
8430
+ * Map for all handlers
8431
+ */
8432
+ handlers?: PurchaseEventHandlers;
7908
8433
  }
7909
8434
 
7910
8435
  /**
@@ -7970,10 +8495,7 @@ export declare interface WebPlayerProps {
7970
8495
  */
7971
8496
  enableKeyboardShortcuts?: boolean;
7972
8497
  onProgress?: (event: React_2.ChangeEvent<HTMLVideoElement>) => void;
7973
- /**
7974
- * @deprecated this callback is never called. Will be removed in @tivio/sdk-react version 4
7975
- */
7976
- onPlayerControllerCreated?: (playerController: any) => void;
8498
+ onPlayerControllerCreated?: (playerController: VideoController) => void;
7977
8499
  /**
7978
8500
  * If true, saving of watch position won't be performed.
7979
8501
  */
@@ -8096,6 +8618,16 @@ export declare type Widget = {
8096
8618
  lastVideo: Video | null;
8097
8619
  };
8098
8620
 
8621
+ export declare type WidgetControlRequest = StartLiveStreamRequest | ChangeWidgetStateRequest_2 | GenerateWidgetJoinCodeRequest | VerifyJoinCodeRequest;
8622
+
8623
+ export declare type WidgetControlResponse<T extends WidgetControlRequest['action']> = T extends 'startLiveStream' ? StartLiveStreamResponse : T extends 'changeState' ? ChangeStateResponse : T extends 'generateWidgetJoinCode' ? GenerateWidgetJoinCodeResponse : T extends 'verifyJoinCode' ? boolean : never;
8624
+
8625
+ export declare interface WidgetSecret {
8626
+ code: string;
8627
+ type: 'JWT' | 'alphanumeric';
8628
+ expired?: Date;
8629
+ }
8630
+
8099
8631
  /**
8100
8632
  * @public
8101
8633
  */