@tivio/sdk-react 9.0.0 → 9.1.0

Sign up to get free protection for your applications and to get access to all the features.
package/dist/index.d.ts CHANGED
@@ -1,9 +1,26 @@
1
1
  import { ComponentType } from 'react';
2
+ import { DocumentReference } from '@firebase/firestore-types';
3
+ import firebase from '@firebase/app-types';
2
4
  import { FunctionComponentElement } from 'react';
3
5
  import { GeoPoint } from '@firebase/firestore-types';
4
6
  import { OperatingSystem } from 'detect-browser';
7
+ import type { PaletteType } from '@material-ui/core';
5
8
  import { default as React_2 } from 'react';
6
9
  import { RecommendationsQuery } from '@algolia/recommend';
10
+ import type { TagManagerArgs } from 'react-gtm-module';
11
+
12
+ /**
13
+ * @public
14
+ */
15
+ export declare interface AddCommentOptions {
16
+ parentCommentId?: string;
17
+ text: string;
18
+ videoTime?: number;
19
+ }
20
+
21
+ export declare type AddEditCommentResponse = {
22
+ id: string;
23
+ };
7
24
 
8
25
  /**
9
26
  * @public
@@ -224,6 +241,10 @@ export declare enum ALGOLIA_INDEX_NAME {
224
241
  USERS = "users"
225
242
  }
226
243
 
244
+ export declare interface AllStargazeCreatorsWithVoucherSubscriptionsResponse {
245
+ creators: CreatorsWithVoucherSubscriptions[];
246
+ }
247
+
227
248
  /**
228
249
  * List of conversion types that we send to analytics.
229
250
  */
@@ -292,11 +313,20 @@ export declare interface AnalyticsInterface {
292
313
  /**
293
314
  * @public
294
315
  */
295
- export declare interface Application {
296
- name: Translation;
316
+ export declare interface Application extends RowItem {
317
+ id: string;
318
+ organizationId?: string;
319
+ itemType: ROW_ITEM_TYPES.APPLICATION;
320
+ name: string;
297
321
  type: ApplicationType;
298
322
  urlHandle: string;
299
- screens: ApplicationScreenConfig[] | null;
323
+ applicationScreens: ApplicationScreenConfig[] | null;
324
+ screenConfigs: ScreenConfig[] | null;
325
+ logo: string | null;
326
+ cover: string | null;
327
+ videosCount: number | null;
328
+ organization?: Organization;
329
+ isEnabled: boolean;
300
330
  }
301
331
 
302
332
  /**
@@ -314,6 +344,16 @@ export declare enum ApplicationType {
314
344
  ORGANIZATION = "ORGANIZATION"
315
345
  }
316
346
 
347
+ /**
348
+ * @public
349
+ */
350
+ export declare interface ApplyScreenConditionPayload {
351
+ embedUrl?: string;
352
+ userPurchases?: Purchase[];
353
+ isSignedIn?: boolean;
354
+ condition: RenderCondition;
355
+ }
356
+
317
357
  /**
318
358
  * @public
319
359
  */
@@ -322,6 +362,45 @@ export declare type ArrisDeviceInfo = {
322
362
  model?: 'VIP1003' | 'VIP1113' | 'VIP5305';
323
363
  };
324
364
 
365
+ /**
366
+ * @public
367
+ */
368
+ export declare interface Article extends RowItem, MonetizableItem, ReactableContent {
369
+ id: string;
370
+ itemType: ROW_ITEM_TYPES.ARTICLE;
371
+ blocks: ArticleBlock[];
372
+ cover: string;
373
+ organizationId?: string;
374
+ }
375
+
376
+ /**
377
+ * @public
378
+ */
379
+ export declare interface ArticleBlock {
380
+ id: string;
381
+ type: ArticleBlockType;
382
+ htmlContent?: string;
383
+ imageUrl?: string;
384
+ textContent?: string;
385
+ videoId?: string;
386
+ }
387
+
388
+ export declare interface ArticleBlockField extends Omit<ArticleBlock, 'textContent' | 'htmlContent'> {
389
+ textContent?: Translation;
390
+ htmlContent?: Translation;
391
+ }
392
+
393
+ /**
394
+ * @public
395
+ */
396
+ export declare type ArticleBlockType = 'PARAGRAPH' | 'IMAGE' | 'VIDEO' | 'HEADING' | 'PAYWALL';
397
+
398
+ export declare interface ArticleTileSpecificData {
399
+ organizationId: string;
400
+ blocks: ArticleBlockField[];
401
+ assets?: AssetsField;
402
+ }
403
+
325
404
  /**
326
405
  * @public
327
406
  */
@@ -339,7 +418,14 @@ export declare type Assets = {
339
418
  /**
340
419
  * @public
341
420
  */
342
- export declare type AssetType = 'circled' | 'landscape' | 'portrait';
421
+ export declare interface AssetsField<TAsset extends ScalableAsset = ScalableAsset> {
422
+ [assetName: string]: TAsset;
423
+ }
424
+
425
+ /**
426
+ * @public
427
+ */
428
+ export declare type AssetType = 'circled' | 'landscape' | 'portrait' | 'square';
343
429
 
344
430
  declare type Attributes = {
345
431
  created: string;
@@ -354,36 +440,45 @@ declare type Attributes = {
354
440
  */
355
441
  export declare interface AvailableSeason {
356
442
  seasonNumber: number;
443
+ seasonName?: string;
444
+ }
445
+
446
+ export declare interface AvailableSeasonField {
447
+ seasonNumber: number;
448
+ seasonName?: Translation;
357
449
  }
358
450
 
359
451
  /**
360
452
  * @public
361
453
  */
362
- export declare type AvatarProps = {
454
+ export declare interface AvatarProps {
363
455
  cover?: string;
364
456
  isLoading?: boolean;
365
457
  size?: number;
366
- };
458
+ }
367
459
 
368
460
  /**
369
461
  * @public
370
462
  */
371
463
  export declare type BadRequestError = Error & {
372
464
  details?: {
373
- reason?: 'DOES_NOT_EXIST' | 'EXPIRED' | 'ALREADY_USED';
465
+ reason?: 'DOES_NOT_EXIST' | 'EXPIRED' | 'ALREADY_USED' | 'ALREADY_USED_BY_CURRENT_USER';
374
466
  };
375
467
  };
376
468
 
377
469
  export declare enum BannerItemComponent {
378
470
  CLASSIC = "CLASSIC",
379
471
  SPLIT = "SPLIT",
380
- BACKGROUND = "BACKGROUND"
472
+ BACKGROUND = "BACKGROUND",
473
+ BACKGROUND_BLUR = "BACKGROUND_BLUR",
474
+ ORGANIZATION_BANNER = "ORGANIZATION_BANNER",
475
+ CAROUSEL = "CAROUSEL"
381
476
  }
382
477
 
383
478
  /**
384
479
  * @public
385
480
  */
386
- export declare type BannerProps = {
481
+ export declare interface BannerProps {
387
482
  isLoading: boolean;
388
483
  text: string;
389
484
  description?: string;
@@ -391,7 +486,7 @@ export declare type BannerProps = {
391
486
  onClick?: () => void;
392
487
  hoverable: boolean;
393
488
  height: number;
394
- cover: string;
489
+ cover?: string | null;
395
490
  overlay: boolean;
396
491
  price: string;
397
492
  borderRadius?: string | number;
@@ -399,7 +494,13 @@ export declare type BannerProps = {
399
494
  onButtonClick?: () => void;
400
495
  buttonHref?: string;
401
496
  numberOfLines?: number;
402
- };
497
+ organizationId?: string;
498
+ organizationName?: string;
499
+ organizationLogo?: string;
500
+ organizationLogoLandscape?: string;
501
+ organizationHandle?: string;
502
+ organizationProfilePhoto?: string;
503
+ }
403
504
 
404
505
  /**
405
506
  * @public
@@ -500,6 +601,31 @@ export declare type Chapter = any;
500
601
  */
501
602
  export declare type CmpConfig = 'default' | 'debug' | 'none';
502
603
 
604
+ /**
605
+ * @public
606
+ */
607
+ declare interface Comment_2 {
608
+ id: string;
609
+ text: string;
610
+ videoTime: number | null;
611
+ createdAt: Date;
612
+ editedAt: Date | null;
613
+ user: CommentUser | null;
614
+ reactions: Record<string, number> | null;
615
+ repliesCount: number | null;
616
+ isReady: boolean;
617
+ updateRepliesCount: (increment: boolean) => void;
618
+ }
619
+ export { Comment_2 as Comment }
620
+
621
+ /**
622
+ * @public
623
+ */
624
+ export declare interface CommentUser {
625
+ name: string;
626
+ avatarUrl: string | null;
627
+ }
628
+
503
629
  /**
504
630
  * TODO same name as core-js entity, not convenient
505
631
  * @public
@@ -592,6 +718,15 @@ export declare interface ConsumedAds {
592
718
  preroll: boolean;
593
719
  }
594
720
 
721
+ /**
722
+ * @public
723
+ */
724
+ export declare interface ContentAvailability {
725
+ from: Date;
726
+ to: Date | null;
727
+ manual: boolean;
728
+ }
729
+
595
730
  /**
596
731
  * @public
597
732
  */
@@ -607,11 +742,11 @@ export declare enum ContentSortEnum {
607
742
  /**
608
743
  * @public
609
744
  */
610
- export declare type ContentSortPickerProps = {
745
+ export declare interface ContentSortPickerProps {
611
746
  value: ContentSortEnum;
612
747
  isSeries?: boolean;
613
748
  onChange: (value: ContentSortEnum) => void;
614
- };
749
+ }
615
750
 
616
751
  /**
617
752
  * @public
@@ -694,12 +829,12 @@ export declare interface ConversionsTargetItem {
694
829
  * @public
695
830
  * @TODO move somewhere else
696
831
  */
697
- export declare type CoverPadding = {
832
+ export declare interface CoverPadding {
698
833
  top?: number;
699
834
  bottom?: number;
700
835
  left?: number;
701
836
  right?: number;
702
- };
837
+ }
703
838
 
704
839
  /**
705
840
  * @public
@@ -725,6 +860,8 @@ export declare interface CreateUserPayload {
725
860
  referralToken?: string;
726
861
  username?: string;
727
862
  phoneNumber?: string;
863
+ authUserId?: string;
864
+ isAnonymous?: boolean;
728
865
  }
729
866
 
730
867
  /**
@@ -732,6 +869,12 @@ export declare interface CreateUserPayload {
732
869
  */
733
870
  export declare type CreateUserWithEmailAndPassword = (email: string, password: string, username?: string, phoneNumber?: string, referralToken?: string) => Promise<string | null>;
734
871
 
872
+ export declare interface CreatorsWithVoucherSubscriptions {
873
+ id: string;
874
+ logo: string;
875
+ name: string;
876
+ }
877
+
735
878
  /**
736
879
  * @public
737
880
  */
@@ -743,10 +886,17 @@ export declare const CURRENCIES: string[];
743
886
  */
744
887
  export declare type Currency = 'CZK' | 'EUR' | 'USD';
745
888
 
889
+ /**
890
+ * Necessary because keys in cloud function config cannot contain upper-case letters.
891
+ * Has to be in sync with {@link Currency}.
892
+ */
893
+ export declare type CurrencyLowerCase = 'czk' | 'eur' | 'usd';
894
+
746
895
  /**
747
896
  * @public
748
897
  */
749
898
  export declare enum CustomerId {
899
+ CESTMIR_STRAKATY = "CESTMIR_STRAKATY",
750
900
  CNC = "CNC",
751
901
  DVTV = "DVTV",
752
902
  DVTV_DEV = "DVTV_DEV",
@@ -756,17 +906,31 @@ export declare enum CustomerId {
756
906
  INVESTICNI_PRUVODCE = "INVESTICNI_PRUVODCE",
757
907
  INVESTOREES = "INVESTOREES",
758
908
  JOJ = "JOJ",
909
+ KLUCI_Z_PRAHY = "KLUCI_Z_PRAHY",
759
910
  MALL = "MALL",
760
911
  MEDIAR = "MEDIAR",
761
912
  NANGU_DEV = "NANGU_DEV",
762
913
  O2 = "O2",
763
914
  OKTAGON = "OKTAGON",
915
+ ONDREJ_AUST = "ONDREJ_AUST",
764
916
  ONDREJ_KOBERSKY = "ONDREJ_KOBERSKY",
917
+ REALTALK = "REALTALK",
765
918
  STARMAX = "STARMAX",
766
- STORYBOOK = "STORYBOOK",
919
+ STARGAZE = "STARGAZE",
920
+ STORYBOOK = "STORYBOOK",// dev
767
921
  TIVIO = "TIVIO",
922
+ TIVIO_PRO = "TIVIO_PRO",
768
923
  U_KULATEHO_STOLU = "U_KULATEHO_STOLU",
769
- STARME = "STARME"
924
+ VIRTUAL_CHANNEL_VIDEOS = "VIRTUAL_CHANNEL_VIDEOS",
925
+ VOJTA_ZIZKA = "VOJTA_ZIZKA",
926
+ LIGA_NARUBY = "LIGA_NARUBY",
927
+ VIC_NEZ_SI_MYSLITE = "VIC_NEZ_SI_MYSLITE"
928
+ }
929
+
930
+ export declare interface CustomScript {
931
+ src: string;
932
+ event?: EventName;
933
+ isAsync?: boolean;
770
934
  }
771
935
 
772
936
  /**
@@ -802,14 +966,19 @@ export declare const DEFAULT_ORDER_BY: {
802
966
  */
803
967
  export declare type DefaultOrderByField = 'created';
804
968
 
969
+ export declare type DeleteCommentResponse = {
970
+ deleted: boolean;
971
+ };
972
+
805
973
  /**
806
974
  * @public
807
975
  */
808
- export declare type DetailedPrice = {
976
+ export declare interface DetailedPrice {
809
977
  amount: number;
810
978
  currency: Currency;
811
979
  frequency?: MONETIZATION_FREQUENCY;
812
- };
980
+ durationDays?: number;
981
+ }
813
982
 
814
983
  /**
815
984
  * @public
@@ -834,10 +1003,10 @@ declare type Disposer_2 = () => void;
834
1003
  /**
835
1004
  * @public
836
1005
  */
837
- export declare type DividerProps = {
1006
+ export declare interface DividerProps {
838
1007
  verticalSpacing?: number;
839
1008
  horizontalSpacing?: number;
840
- };
1009
+ }
841
1010
 
842
1011
  /**
843
1012
  * @public
@@ -898,6 +1067,15 @@ export declare enum DurationUnits {
898
1067
  MONTH = "month"
899
1068
  }
900
1069
 
1070
+ /**
1071
+ * @public
1072
+ */
1073
+ export declare interface EditCommentOptions extends Omit<AddCommentOptions, 'parentCommentId'> {
1074
+ commentId: string;
1075
+ text: string;
1076
+ videoTime?: number;
1077
+ }
1078
+
901
1079
  /**
902
1080
  * Represents a SendGrid transactional template.
903
1081
  */
@@ -1007,6 +1185,10 @@ export declare type Empty = void | Promise<void> | undefined | Promise<undefined
1007
1185
  */
1008
1186
  declare type Empty_2 = void | Promise<void> | undefined | Promise<undefined>;
1009
1187
 
1188
+ export declare enum EventName {
1189
+ REGISTRATION_DONE = "REGISTRATION_DONE"
1190
+ }
1191
+
1010
1192
  /**
1011
1193
  * @public
1012
1194
  */
@@ -1035,6 +1217,21 @@ export declare const fetchBundle: (secret: string, conf: InternalConfig) => Prom
1035
1217
  */
1036
1218
  declare type FetchPackage = (url: string) => Promise<string>;
1037
1219
 
1220
+ /**
1221
+ * @public
1222
+ */
1223
+ export declare type FollowedOrganizationData = {
1224
+ id: string;
1225
+ name: string;
1226
+ application: {
1227
+ id: string;
1228
+ urlHandle: string;
1229
+ logo?: string;
1230
+ logoLandscape?: string;
1231
+ profilePhoto?: string;
1232
+ };
1233
+ };
1234
+
1038
1235
  /**
1039
1236
  * Counterpart for {@link ForbiddenError} from @tivio/api.
1040
1237
  * @public
@@ -1064,6 +1261,15 @@ export declare interface GenericOnCallError extends Error {
1064
1261
  details?: Record<string, string>;
1065
1262
  }
1066
1263
 
1264
+ /**
1265
+ * @public
1266
+ */
1267
+ export declare type GeoBlocking = {
1268
+ whitelist: Array<any>;
1269
+ } | {
1270
+ blacklist: Array<any>;
1271
+ };
1272
+
1067
1273
  export declare interface GetBaseAnalyticsRequest {
1068
1274
  /**
1069
1275
  * Id of organization to return analytics data.
@@ -1087,6 +1293,12 @@ export declare interface GetMonetizationsAnalyticsResponse {
1087
1293
  monetizationsAnalytics: MonetizationSummaryItem[];
1088
1294
  }
1089
1295
 
1296
+ export declare type GetMonetizationsCountsAnalyticsRequest = GetBaseAnalyticsRequest;
1297
+
1298
+ export declare interface GetMonetizationsCountsAnalyticsResponse {
1299
+ monetizationsCountsAnalytics: MonetizationsCountsSummaryItem[];
1300
+ }
1301
+
1090
1302
  /**
1091
1303
  * Share singleton instance
1092
1304
  * @public
@@ -1096,9 +1308,9 @@ export declare const getPubSub: () => PubSub;
1096
1308
  /**
1097
1309
  * @public
1098
1310
  */
1099
- export declare type GetPurchasableMonetizationsOptions = {
1311
+ export declare interface GetPurchasableMonetizationsOptions {
1100
1312
  includeMonetizationsWithPurchaseDisabled: boolean;
1101
- };
1313
+ }
1102
1314
 
1103
1315
  /**
1104
1316
  * Response from Tivio getPurchaseInfo HTTP endpoint.
@@ -1115,6 +1327,8 @@ export declare type GetPurchaseInfoResponse = {
1115
1327
  };
1116
1328
  };
1117
1329
 
1330
+ export declare type GetRowsInScreenResponse = PaginatedResponse<RowInScreen, 'screenId'>;
1331
+
1118
1332
  export declare interface GetSourceUrlRequest {
1119
1333
  /**
1120
1334
  * Id of the document to return source for.
@@ -1186,6 +1400,8 @@ export declare interface GetSourceUrlResponse {
1186
1400
  audioOnly?: boolean;
1187
1401
  }
1188
1402
 
1403
+ export declare type GetTilesInRowResponse<U extends NextPageParamType = NextPageParamType> = PaginatedResponse<TileData, U>;
1404
+
1189
1405
  export declare interface GetVideoAnalyticsErrorItem {
1190
1406
  count: number;
1191
1407
  timestamp: number;
@@ -1254,19 +1470,26 @@ export declare enum GRID_TYPES {
1254
1470
  SERIES = "SERIES"
1255
1471
  }
1256
1472
 
1257
- declare type IncludedItem = {
1473
+ /**
1474
+ * @public
1475
+ */
1476
+ export declare interface HistoryContextData {
1477
+ history: string[];
1478
+ backOrRedirectToRoot: () => void;
1479
+ }
1480
+
1481
+ export declare type IncludedItem = {
1258
1482
  attributes: {
1259
1483
  next_charge_date: string;
1260
- /**
1261
- * A null value indicates the member has never pledged. Can be null.
1262
- */
1263
- patron_status: 'active_patron' | 'declined_patron' | 'former_patron' | null;
1484
+ patron_status: PatreonStatus;
1264
1485
  /**
1265
1486
  * The only successful status is Paid. null if never charged. Can be null.
1266
1487
  * One of Paid Declined Deleted Pending Refunded Fraud Other.
1267
1488
  */
1268
1489
  last_charge_status: 'Paid' | 'Declined' | 'Deleted' | 'Pending' | 'Refunded' | 'Fraud' | 'Other';
1269
1490
  last_charge_date: string;
1491
+ pledge_relationship_start: string;
1492
+ campaign_lifetime_support_cents: number;
1270
1493
  };
1271
1494
  id: string;
1272
1495
  type: string;
@@ -1327,7 +1550,16 @@ export declare interface IndexedVideo extends IndexedObject {
1327
1550
  sharedOrganizationPaths?: string[];
1328
1551
  tagPaths?: string[];
1329
1552
  created: Date | string;
1553
+ /**
1554
+ * Is evaluated on publishedStatus and transcodingStatus fields.
1555
+ * TODO this will be true for videos with UNLISTED status, which is unintuitive for 'isDraft', we need to rename this
1556
+ */
1330
1557
  isDraft: boolean;
1558
+ /**
1559
+ * TODO: Remove optional once we have all videos with transcodingStatus and publishedStatus set in algolia
1560
+ */
1561
+ transcodingStatus?: VideoTranscodingStatus;
1562
+ publishedStatus?: PublishedStatus;
1331
1563
  type: VideoType;
1332
1564
  contentType?: VideoContentType;
1333
1565
  name: string | Translation;
@@ -1343,8 +1575,17 @@ export declare interface IndexedVideo extends IndexedObject {
1343
1575
  * True if the video is available in Tivio Pro (StarMe)
1344
1576
  */
1345
1577
  isTivioPro: boolean;
1578
+ /**
1579
+ * See {@link VideoDocument.monetizationAccessRefs}.
1580
+ * We need explicitly set to false when there are no access monetizations set,
1581
+ * because algolia can't filter based on absence of attribute,
1582
+ * see https://www.algolia.com/doc/guides/managing-results/refine-results/filtering/how-to/filter-by-attributes/#filter-by-null-or-missing-attributes.
1583
+ */
1584
+ monetizationAccessIds: string[] | false;
1346
1585
  }
1347
1586
 
1587
+ export declare type IntegrationType = 'discord' | 'patreon';
1588
+
1348
1589
  /**
1349
1590
  * @public
1350
1591
  */
@@ -1423,7 +1664,7 @@ export declare type ItemComponent = RowItemComponent | BannerItemComponent;
1423
1664
  /**
1424
1665
  * @public
1425
1666
  */
1426
- export declare type ItemsInRow = Tag | Video | TvChannel | Advertisement;
1667
+ export declare type ItemInRow = Tag | Video | TvChannel | Advertisement | Application | Article;
1427
1668
 
1428
1669
  /**
1429
1670
  * @public
@@ -1433,6 +1674,11 @@ export declare interface JojExternals {
1433
1674
  tvProfiContentId?: string;
1434
1675
  tvProfiSerialId?: string;
1435
1676
  contentId?: string;
1677
+ /**
1678
+ * Temporary contentId used only for live channel. The video is already encoded and stored in our storage
1679
+ * but is also stored on nangu platform to be used for live channel.
1680
+ */
1681
+ dvtvExtraContentId?: string;
1436
1682
  provysId?: string;
1437
1683
  tvProfiProvysId?: string;
1438
1684
  tvProfiHouseId?: string;
@@ -1475,10 +1721,18 @@ export declare type LanguageType = `${LangCode}`;
1475
1721
  /**
1476
1722
  * @public
1477
1723
  */
1478
- export declare type LinkedVideo = {
1724
+ export declare interface LinkedVideo {
1479
1725
  video: Video;
1480
- type: 'CUT' | 'TRAILER' | 'BONUS' | 'CHILD';
1481
- };
1726
+ type: 'CUT' | 'TRAILER' | 'BONUS' | 'CHILD' | 'TEASER' | 'TASTING' | 'VIRTUAL_PROGRAM' | 'PIP';
1727
+ }
1728
+
1729
+ /**
1730
+ * @public
1731
+ */
1732
+ export declare interface LinkedVideoRaw {
1733
+ videoRef: any;
1734
+ type: LinkedVideo['type'];
1735
+ }
1482
1736
 
1483
1737
  declare type Links = {
1484
1738
  self: string;
@@ -1583,7 +1837,9 @@ declare type LoggerArgs = any[];
1583
1837
 
1584
1838
  export declare enum LoginRedirect {
1585
1839
  PAYMENT = "payment",
1586
- VOUCHER = "voucher"
1840
+ VOUCHER = "voucher",
1841
+ VOUCHER_PURCHASE = "voucherPurchase",
1842
+ MAGENTA_MOMENTS = "magenta_moments"
1587
1843
  }
1588
1844
 
1589
1845
  /**
@@ -1611,10 +1867,10 @@ export declare interface Marker {
1611
1867
  /**
1612
1868
  * @public
1613
1869
  */
1614
- export declare type MarkersProps = {
1870
+ export declare interface MarkersProps {
1615
1871
  color?: string;
1616
1872
  className?: string;
1617
- };
1873
+ }
1618
1874
 
1619
1875
  declare type Membership = {
1620
1876
  id: string;
@@ -1627,7 +1883,23 @@ declare type Membership = {
1627
1883
  */
1628
1884
  export declare interface MigratedVideoExternals {
1629
1885
  externalVideoId: string;
1630
- additionalData: any;
1886
+ additionalData?: any;
1887
+ }
1888
+
1889
+ export declare interface MonetizableItem {
1890
+ /**
1891
+ * Returns true if content is purchased (via transaction or subscription) or free.
1892
+ */
1893
+ isPaid: boolean;
1894
+ /**
1895
+ * Gets the most relevant monetization for this content.
1896
+ */
1897
+ purchasableMonetization: PurchasableMonetization | null;
1898
+ /**
1899
+ * Returns all transactions and subscriptions applied to this video.
1900
+ * Transactions before subscriptions, sorted by price ascending.
1901
+ */
1902
+ getPurchasableMonetizations(options?: GetPurchasableMonetizationsOptions): PurchasableMonetization[];
1631
1903
  }
1632
1904
 
1633
1905
  /**
@@ -1638,6 +1910,7 @@ export declare interface Monetization {
1638
1910
  type?: MonetizationType;
1639
1911
  name?: string;
1640
1912
  description?: string;
1913
+ organizationId?: string;
1641
1914
  }
1642
1915
 
1643
1916
  /**
@@ -1683,6 +1956,21 @@ export declare interface MonetizationCardProps {
1683
1956
  focused?: boolean;
1684
1957
  }
1685
1958
 
1959
+ export declare interface MonetizationsCountsSummaryItem {
1960
+ /**
1961
+ * Unix timestamp at which the data is aggregated
1962
+ */
1963
+ date: number;
1964
+ /**
1965
+ * ID of monetization
1966
+ */
1967
+ monetizationId: string;
1968
+ /**
1969
+ * Count of active purchases for that date
1970
+ */
1971
+ count: number;
1972
+ }
1973
+
1686
1974
  /**
1687
1975
  * @public
1688
1976
  */
@@ -1699,8 +1987,15 @@ export declare interface MonetizationsSelectOverlayData {
1699
1987
  */
1700
1988
  voucherPurchase?: boolean;
1701
1989
  registrationRedirect?: boolean;
1990
+ organizationId?: string;
1702
1991
  onPurchase?: () => void;
1703
1992
  onClose?: () => void;
1993
+ hideActivateVoucherButton?: boolean;
1994
+ showHeaderBackButton?: boolean;
1995
+ /**
1996
+ * Applies only if {@link subscriptions} are passed.
1997
+ */
1998
+ doNotFilterPassedSubscriptions?: boolean;
1704
1999
  }
1705
2000
 
1706
2001
  /**
@@ -1709,7 +2004,7 @@ export declare interface MonetizationsSelectOverlayData {
1709
2004
  export declare type MonetizationsSelectOverlayState = {
1710
2005
  isOpen: boolean;
1711
2006
  data: MonetizationsSelectOverlayData | null;
1712
- openMonetizationsSelectOverlay: (data: MonetizationsSelectOverlayData) => void;
2007
+ openMonetizationsSelectOverlay: (data?: MonetizationsSelectOverlayData) => void;
1713
2008
  closeMonetizationsSelectOverlay: () => void;
1714
2009
  };
1715
2010
 
@@ -1769,6 +2064,8 @@ export declare type NewVoucher = {
1769
2064
  expirationDate: Date | number;
1770
2065
  };
1771
2066
 
2067
+ declare type NextPageParamType = 'screenId' | 'rowId' | 'filter';
2068
+
1772
2069
  /**
1773
2070
  * @public
1774
2071
  */
@@ -1833,8 +2130,13 @@ declare type OrderByDirection = 'desc' | 'asc';
1833
2130
  * @public
1834
2131
  */
1835
2132
  export declare interface Organization {
2133
+ id: string;
1836
2134
  userProfileConfiguration: any;
1837
2135
  screenConfigs: ScreenConfig[];
2136
+ logo: string | null;
2137
+ logoLandscape: string | null;
2138
+ organizationBanner: string | null;
2139
+ profilePhoto: string | null;
1838
2140
  }
1839
2141
 
1840
2142
  /**
@@ -1847,6 +2149,23 @@ export declare type OtherSource = SourceBase & StartAndContinuePosition & {
1847
2149
  type: 'other';
1848
2150
  };
1849
2151
 
2152
+ export declare interface PaginatedResponse<T = unknown, U extends NextPageParamType = NextPageParamType> {
2153
+ items: T[];
2154
+ nextPageParams: {
2155
+ offset: number;
2156
+ limit: number;
2157
+ } & (U extends 'screenId' ? {
2158
+ organizationId: string;
2159
+ screenId: string;
2160
+ initialTilesCount: number;
2161
+ } : U extends 'rowId' ? {
2162
+ organizationId: string;
2163
+ rowId: string;
2164
+ } : U extends 'filter' ? {
2165
+ filter: Omit<RowFilterField, 'limit'>;
2166
+ } : {}) | null;
2167
+ }
2168
+
1850
2169
  /**
1851
2170
  * @public
1852
2171
  */
@@ -1866,6 +2185,18 @@ export declare type PaginationOptions = Partial<{
1866
2185
  noAutoFetch: boolean;
1867
2186
  }>;
1868
2187
 
2188
+ /**
2189
+ * @public
2190
+ */
2191
+ export declare interface PartialRegistrationOverlayContextState {
2192
+ isOpen: boolean;
2193
+ openOverlay: (onEmailSent?: () => void, origin?: RegistrationRedirect, voucher?: string) => void;
2194
+ closeOverlay: () => void;
2195
+ onEmailSent?: () => void;
2196
+ origin?: RegistrationRedirect;
2197
+ voucher?: string;
2198
+ }
2199
+
1869
2200
  export declare type PatreonCreatorData = {
1870
2201
  campaign: string;
1871
2202
  tiers: Tier[];
@@ -1881,6 +2212,11 @@ declare type PatreonError = {
1881
2212
  title?: string;
1882
2213
  };
1883
2214
 
2215
+ /**
2216
+ * A null value indicates the member has never pledged. Can be null.
2217
+ */
2218
+ export declare type PatreonStatus = 'active_patron' | 'declined_patron' | 'former_patron' | null;
2219
+
1884
2220
  export declare type PatreonUserAuth = {
1885
2221
  access_token: string;
1886
2222
  refresh_token: string;
@@ -1890,9 +2226,16 @@ export declare type PatreonUserAuth = {
1890
2226
  version?: string;
1891
2227
  };
1892
2228
 
2229
+ export declare interface PatreonUserAuthWithCreated extends PatreonUserAuth {
2230
+ /**
2231
+ * unix timestamp in ms
2232
+ */
2233
+ created: number;
2234
+ }
2235
+
1893
2236
  export declare type PatreonUserResponse = {
1894
2237
  data: Data;
1895
- included: IncludedItem[];
2238
+ included?: IncludedItem[];
1896
2239
  links: Links;
1897
2240
  errors?: PatreonError[];
1898
2241
  };
@@ -1950,6 +2293,7 @@ export declare interface PlayerCapability {
1950
2293
  * @public
1951
2294
  */
1952
2295
  export declare type PlayerConfig = {
2296
+ enabled?: boolean;
1953
2297
  /**
1954
2298
  * Some devices do not seek exactly
1955
2299
  *
@@ -2126,6 +2470,7 @@ export declare interface PlayerEngineInterface {
2126
2470
  * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline
2127
2471
  */
2128
2472
  setPlaysInline(value: boolean): void;
2473
+ setControlsList(value: string[]): void;
2129
2474
  }
2130
2475
 
2131
2476
  /**
@@ -2205,6 +2550,7 @@ export declare interface PlayerInterface {
2205
2550
  * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline
2206
2551
  */
2207
2552
  setPlaysInline?: (value: boolean) => void;
2553
+ setControlsList?: (value: string[]) => void;
2208
2554
  }
2209
2555
 
2210
2556
  /**
@@ -2384,6 +2730,8 @@ export declare type PlayerWrapperEventTypeType = `${PlayerWrapperEventType}`;
2384
2730
  export declare interface Promotion {
2385
2731
  duration?: Duration;
2386
2732
  price?: number;
2733
+ requiresPaymentAuthorization?: boolean;
2734
+ hideOtherSubscriptions?: boolean;
2387
2735
  }
2388
2736
 
2389
2737
  /**
@@ -2391,6 +2739,25 @@ export declare interface Promotion {
2391
2739
  */
2392
2740
  export declare type PromotionType = 'CLASSIC' | 'PATREON';
2393
2741
 
2742
+ /**
2743
+ * @public
2744
+ */
2745
+ export declare enum PublishedStatus {
2746
+ /**
2747
+ * Content is not published, is not shown in any application and cannot be played,
2748
+ * even if user enters url directly into browser.
2749
+ */
2750
+ DRAFT = "DRAFT",
2751
+ /**
2752
+ * Content is published and can be accessed and played freely in any application.
2753
+ */
2754
+ PUBLISHED = "PUBLISHED",
2755
+ /**
2756
+ * Content is not visible in the application (e.g. rows, search), but if user has direct url to it, they can play it.
2757
+ */
2758
+ UNLISTED = "UNLISTED"
2759
+ }
2760
+
2394
2761
  /**
2395
2762
  * @public
2396
2763
  */
@@ -2413,6 +2780,7 @@ export declare interface PurchasableMonetization extends Monetization {
2413
2780
  price?: string | number;
2414
2781
  promotion: Promotion | null;
2415
2782
  frequency?: MONETIZATION_FREQUENCY;
2783
+ durationDays?: number;
2416
2784
  /**
2417
2785
  * Returns TRUE if subscription is purchased (and not expired) by user.
2418
2786
  * Returns TRUE if transaction is purchased (and not expired) for transactionItemId.
@@ -2438,6 +2806,10 @@ export declare interface PurchasableMonetization extends Monetization {
2438
2806
  * Returns array of tag ids of monetization placements
2439
2807
  */
2440
2808
  tagIds: string[];
2809
+ /**
2810
+ * When set to true, subscription is hidden in UI (e.g. in MonetizationSelectOverlay).
2811
+ */
2812
+ subscriptionIsHidden?: boolean;
2441
2813
  }
2442
2814
 
2443
2815
  /**
@@ -2453,6 +2825,7 @@ export declare type Purchase = {
2453
2825
  */
2454
2826
  createdBy?: string;
2455
2827
  expirationDate: Date | null;
2828
+ gateway: PurchaseDocumentGateway | null;
2456
2829
  id: string;
2457
2830
  isExpired: boolean;
2458
2831
  /**
@@ -2472,6 +2845,8 @@ export declare type Purchase = {
2472
2845
  videoId: string | null;
2473
2846
  videoRef: any | null;
2474
2847
  voucherId: string | null;
2848
+ isVoucherActivation?: boolean;
2849
+ rebalancingVideoRef?: any;
2475
2850
  };
2476
2851
 
2477
2852
  /**
@@ -2483,7 +2858,8 @@ export declare enum PurchaseDocumentGateway {
2483
2858
  'voucher' = "voucher",
2484
2859
  'comgate' = "comgate",
2485
2860
  'tivio' = "tivio",
2486
- 'patreon' = "patreon"
2861
+ 'patreon' = "patreon",
2862
+ 'paypal' = "paypal"
2487
2863
  }
2488
2864
 
2489
2865
  /**
@@ -2510,6 +2886,10 @@ export declare type PurchaseEndpointPayload = {
2510
2886
  * really expire at this timestamp - additional payment of this subscription can occur so expiration timestamp may be increased.
2511
2887
  */
2512
2888
  expiration?: number;
2889
+ /**
2890
+ * If purchase was made outside of standard Tivio payment method (e.g PayPal), this is its ID.
2891
+ */
2892
+ externalId?: string;
2513
2893
  /**
2514
2894
  * Gateway name or "voucher".
2515
2895
  */
@@ -2531,9 +2911,10 @@ export declare type PurchaseEndpointPayload = {
2531
2911
  */
2532
2912
  originalPurchaseId?: string;
2533
2913
  /**
2534
- * Purchase status before change.
2914
+ * Purchase status before change. Not present for new documents - e.g. for reoccurring payment (old document is
2915
+ * set to RENEWED, new document is created with PAID status).
2535
2916
  */
2536
- previousStatus: PurchaseStatus;
2917
+ previousStatus?: PurchaseStatus;
2537
2918
  /**
2538
2919
  * Timestamp of the last change of the purchase - in this case it is timestamp when it was paid.
2539
2920
  */
@@ -2626,8 +3007,8 @@ export declare type PurchaseEndpointPayload = {
2626
3007
  * @public
2627
3008
  */
2628
3009
  export declare type PurchaseMonetization = {
3010
+ durationDays?: MONETIZATION_DURATION | number;
2629
3011
  currency?: Currency;
2630
- period?: number;
2631
3012
  price?: number;
2632
3013
  /**
2633
3014
  * Here are only transaction and subscription because purchasing of advertisement monetization doesn't make sense.
@@ -2693,6 +3074,7 @@ export declare interface QerkoCancellationInfo {
2693
3074
  export declare interface QerkoData {
2694
3075
  monetization: PurchasableMonetization;
2695
3076
  item?: Video | TvChannel;
3077
+ isMagentaMoments?: boolean;
2696
3078
  /**
2697
3079
  * If set to true, user is buying voucher.
2698
3080
  * Otherwise, user is making a purchase for himself.
@@ -2730,6 +3112,7 @@ export declare interface QerkoPaymentInfo {
2730
3112
  monetizationType: MonetizationType;
2731
3113
  recovery?: boolean;
2732
3114
  monetizationFrequency: MONETIZATION_FREQUENCY;
3115
+ customToken?: string;
2733
3116
  }
2734
3117
 
2735
3118
  /**
@@ -2745,6 +3128,38 @@ export declare interface QerkoPaymentProps {
2745
3128
  masterCardLogoUrl?: string;
2746
3129
  }
2747
3130
 
3131
+ /**
3132
+ * Request body which is accepted by qerkoPaymentWebhookByApiKey endpoint.
3133
+ *
3134
+ * @public
3135
+ */
3136
+ export declare interface QerkoPaymentWebhookByApiKeyRequest {
3137
+ /**
3138
+ * Payment state.
3139
+ */
3140
+ state: 'PAID' | 'CANCELLED';
3141
+ /**
3142
+ * Tivio purchase ID.
3143
+ */
3144
+ idOrder: string;
3145
+ payment: {
3146
+ additionalData: {
3147
+ /**
3148
+ * Tivio user ID.
3149
+ */
3150
+ userId: string;
3151
+ };
3152
+ };
3153
+ /**
3154
+ * Gateway where payment was made.
3155
+ */
3156
+ gateway?: PurchaseDocumentGateway;
3157
+ /**
3158
+ * If purchase was made outside of standard Tivio payment method (e.g PayPal), this is its ID.
3159
+ */
3160
+ externalPurchaseId?: string;
3161
+ }
3162
+
2748
3163
  /**
2749
3164
  * @public
2750
3165
  */
@@ -2756,6 +3171,39 @@ export declare interface QerkoTransaction {
2756
3171
  voucherId?: string;
2757
3172
  }
2758
3173
 
3174
+ /**
3175
+ * @public
3176
+ */
3177
+ export declare interface ReactableContent {
3178
+ path: string;
3179
+ reactions: {
3180
+ [key in ReactionEnum]?: number;
3181
+ } | null;
3182
+ updateReactionCount: (reaction: ReactionEnum, newCount: number) => void;
3183
+ }
3184
+
3185
+ /**
3186
+ * @public
3187
+ */
3188
+ export declare enum ReactionEnum {
3189
+ LIKE = "LIKE",
3190
+ DISLIKE = "DISLIKE",
3191
+ LOVE = "LOVE",
3192
+ HAHA = "HAHA",
3193
+ WOW = "WOW",
3194
+ SAD = "SAD",
3195
+ ANGRY = "ANGRY",
3196
+ CARE = "CARE",
3197
+ SUPPORT = "SUPPORT",
3198
+ PRAY = "PRAY",
3199
+ THINK = "THINK",
3200
+ CELEBRATE = "CELEBRATE",
3201
+ THANKFUL = "THANKFUL",
3202
+ LAUGH = "LAUGH",
3203
+ INSPIRED = "INSPIRED",
3204
+ AWW = "AWW"
3205
+ }
3206
+
2759
3207
  /**
2760
3208
  * @public
2761
3209
  */
@@ -2771,7 +3219,10 @@ export declare type ReactNativeDeviceInfo = {
2771
3219
  };
2772
3220
 
2773
3221
  export declare enum RegistrationRedirect {
2774
- PAYMENT = "payment"
3222
+ PAYMENT = "payment",
3223
+ VOUCHER_PURCHASE = "voucherPurchase",
3224
+ VOUCHER = "voucher",
3225
+ MAGENTA_MOMENTS = "magenta_moments"
2775
3226
  }
2776
3227
 
2777
3228
  declare type Relationship = {
@@ -2795,11 +3246,11 @@ export declare type RemoteBundleState = {
2795
3246
  /**
2796
3247
  * @public
2797
3248
  */
2798
- export declare type RemoteProviderProps = {
3249
+ export declare interface RemoteProviderProps {
2799
3250
  disableUnmounting?: boolean;
2800
3251
  language?: LangCode;
2801
3252
  children: React_2.ReactNode;
2802
- };
3253
+ }
2803
3254
 
2804
3255
  /**
2805
3256
  * Conditions that are dynamically applied to screens before they are rendered.
@@ -2808,44 +3259,79 @@ export declare type RemoteProviderProps = {
2808
3259
  * 'else' indicates what should happen if the conditions are not met.
2809
3260
  * 'elseValue' is a payload.
2810
3261
  */
2811
- export declare type RenderCondition = {
3262
+ export declare interface RenderCondition {
2812
3263
  type: ScreenConditionType;
3264
+ value?: RenderConditionValue[];
2813
3265
  else: ScreenConditionElse;
2814
3266
  elseValue: RenderConditionElseValue[];
2815
- };
3267
+ }
2816
3268
 
2817
- export declare type RenderConditionElseValue = {
3269
+ export declare interface RenderConditionElseValue {
2818
3270
  key: string;
2819
3271
  value: string;
3272
+ }
3273
+
3274
+ export declare interface RenderConditionValue {
3275
+ subscriptionRefs?: any[];
3276
+ }
3277
+
3278
+ /**
3279
+ * Make all attributes in given type required, non-nullable and defined.
3280
+ * e.g. will make `{ attribute?: string | null }` to be `{ attribute: string }`
3281
+ */
3282
+ export declare type RequiredNonNullable<T> = {
3283
+ [P in keyof T]-?: NonNullable<T[P]>;
2820
3284
  };
2821
3285
 
2822
3286
  /**
2823
3287
  * @public
2824
3288
  */
2825
3289
  export declare interface RouterOverrides {
2826
- getVideoDetailPath: (videoIdOrUrlName: string) => string;
2827
- getSeriesDetailPath: (tagId: string) => string;
3290
+ getVideoDetailPath: (videoIdOrUrlName: string, item?: ItemInRow) => string;
3291
+ getSeriesDetailPath: (tagId: string, item?: ItemInRow) => string;
2828
3292
  getTagPath: (tagId: string) => string;
2829
3293
  getLoginPath: () => string;
2830
3294
  getRegistrationPath: () => string;
2831
3295
  getLivePlayerPath: (tvChannelId: string) => string;
2832
3296
  getVodPlayerPath: (videoIdOrUrlName: string) => string;
2833
3297
  getHomePath: (screens: ScreenConfig[]) => string;
2834
- goToVideoDetailPage: (videoIdOrUrlName: string) => void;
3298
+ getArticlePath: (articleId: string) => string;
3299
+ getApplicationPath: (applicationUrlHandle: string) => string;
3300
+ getGridPath: (options: {
3301
+ gridType: GRID_TYPES.SERIES;
3302
+ seriesTagId: string;
3303
+ season?: number;
3304
+ } | {
3305
+ gridType: GRID_TYPES.ROW;
3306
+ rowId: string;
3307
+ } | {
3308
+ gridType: GRID_TYPES.VIDEO;
3309
+ videoId: string;
3310
+ }) => string;
3311
+ goToVideoDetailPage: (videoIdOrUrlName: string, item?: ItemInRow) => void;
2835
3312
  goToSeriesDetailPage: (tagId: string) => void;
2836
3313
  goToTagPage: (tagId: string) => void;
2837
3314
  goToLoginPage: (options?: {
2838
3315
  manual?: boolean;
2839
3316
  origin?: LoginRedirect;
3317
+ email?: string;
3318
+ urlHandle?: string;
3319
+ replace?: boolean;
2840
3320
  }) => void;
2841
3321
  goToRegistrationPage: (options?: {
2842
3322
  origin?: RegistrationRedirect;
3323
+ email?: string;
2843
3324
  }) => void;
2844
3325
  goBack: () => void;
2845
3326
  goLivePlayer: (tvChannelId: string) => void;
2846
3327
  goVodPlayer: (videoIdOrUrlName: string) => void;
2847
3328
  goToHome: (user?: any, activeUserProfileId?: string) => void;
2848
3329
  goToRoute: (route: string) => void;
3330
+ goToArticle: (id: string, applicationUrlHandle?: string) => void;
3331
+ goToRecommendedFromOrganization: (screenId: string, organizationId: string) => void;
3332
+ goToRecommendedFromOrganizationRow: (screenId: string, rowId: string) => void;
3333
+ goToMagentaMomentsPage: (voucher?: string) => void;
3334
+ goToVoucherRedeemPage: () => void;
2849
3335
  }
2850
3336
 
2851
3337
  /**
@@ -2862,43 +3348,44 @@ export declare interface RouterOverridesContextState {
2862
3348
  /**
2863
3349
  * @public
2864
3350
  */
2865
- export declare type Row = RowStandard | RowBanner;
3351
+ export declare interface Row {
3352
+ id: string;
3353
+ rowId: string;
3354
+ name: string;
3355
+ description?: string;
3356
+ assets: AssetsField;
3357
+ type: ScreenRowType;
3358
+ isLiveRow: boolean;
3359
+ tiles: PaginationInterface<ItemInRow>;
3360
+ numberOfLines?: number;
3361
+ monetizations?: {
3362
+ monetizationRef: any;
3363
+ }[];
3364
+ rowComponent: RowComponent.ROW | RowComponent.BANNER;
3365
+ itemComponent: RowItemComponent | BannerItemComponent;
3366
+ organizationId?: string;
3367
+ }
2866
3368
 
2867
3369
  /**
2868
3370
  * @public
2869
3371
  */
2870
3372
  export declare enum ROW_ITEM_TYPES {
3373
+ APPLICATION = "APPLICATION",
2871
3374
  VIDEO = "VIDEO",
2872
3375
  TAG = "TAG",
2873
3376
  TV_CHANNEL = "TV_CHANNEL",
2874
- ADVERTISEMENT = "ADVERTISEMENT"
3377
+ ADVERTISEMENT = "ADVERTISEMENT",
3378
+ ARTICLE = "ARTICLE"
2875
3379
  }
2876
3380
 
2877
3381
  /**
2878
- * @private
3382
+ * @public
2879
3383
  */
2880
- export declare interface RowBanner extends RowBase {
3384
+ export declare interface RowBanner extends Row {
2881
3385
  rowComponent: RowComponent.BANNER;
2882
3386
  itemComponent: BannerItemComponent;
2883
3387
  }
2884
3388
 
2885
- /**
2886
- * @private
2887
- */
2888
- declare interface RowBase {
2889
- id: string;
2890
- rowId: string;
2891
- name: string;
2892
- description?: string;
2893
- assets: Assets;
2894
- type: ScreenRowType;
2895
- isLiveRow: boolean;
2896
- numberOfLines?: number;
2897
- monetizations?: {
2898
- monetizationRef: any;
2899
- }[];
2900
- }
2901
-
2902
3389
  /**
2903
3390
  * @public
2904
3391
  */
@@ -2907,13 +3394,14 @@ export declare enum RowComponent {
2907
3394
  BANNER = "BANNER"
2908
3395
  }
2909
3396
 
2910
- declare enum RowFilterCollection {
3397
+ export declare enum RowFilterCollection {
2911
3398
  VIDEOS = "videos",
2912
3399
  /**
2913
3400
  * This is not real collection path. Path always should be ${organizationId}/tags
2914
3401
  */
2915
3402
  TAGS = "tags",
2916
- TV_CHANNELS = "tvChannels"
3403
+ TV_CHANNELS = "tvChannels",
3404
+ CONTENTS = "contents"
2917
3405
  }
2918
3406
 
2919
3407
  /**
@@ -2923,19 +3411,66 @@ declare enum RowFilterCollection {
2923
3411
  export declare interface RowFilterField {
2924
3412
  collection: RowFilterCollection;
2925
3413
  limit?: number;
2926
- orderBy: {
3414
+ orderBy?: {
2927
3415
  fieldPath: RowOrderByFieldPath;
2928
- directionStr: OrderByDirection;
3416
+ directionStr?: OrderByDirection;
2929
3417
  };
2930
- where: RowFilterWhereField[];
3418
+ where?: RowFilterWhereField[];
2931
3419
  }
2932
3420
 
2933
- declare interface RowFilterWhereField {
3421
+ export declare interface RowFilterWhereField {
2934
3422
  fieldPath: RowWhereFilterFieldPath;
2935
3423
  opStr: WhereFilterOp;
2936
3424
  value: any;
2937
3425
  }
2938
3426
 
3427
+ export declare type RowInScreen = {
3428
+ /**
3429
+ * Firebase document path. If not provided, the row is not defined in db and is dynamically generated (e.g. recommendation row).
3430
+ */
3431
+ path?: string;
3432
+ /**
3433
+ * Tivio row ID.
3434
+ */
3435
+ rowId: string;
3436
+ /**
3437
+ * If all items are from the same organization this will be set.
3438
+ */
3439
+ organizationId?: string;
3440
+ /**
3441
+ * Row name.
3442
+ */
3443
+ name: Translation;
3444
+ /**
3445
+ * Row filter based on which to pick tiles.
3446
+ */
3447
+ filter?: RowFilterField;
3448
+ /**
3449
+ * Row order in the screen.
3450
+ */
3451
+ order?: number;
3452
+ /**
3453
+ * Number of lines of the title.
3454
+ */
3455
+ numberOfLines?: number;
3456
+ /**
3457
+ * Standard row or a Banner.
3458
+ */
3459
+ rowComponent: RowComponent;
3460
+ /**
3461
+ * Component to use to render the tiles in the row.
3462
+ */
3463
+ itemComponent: RowItemComponent | BannerItemComponent;
3464
+ /**
3465
+ * Type of the row (continue to watch, custom, filter, ...).
3466
+ */
3467
+ type: ScreenRowType;
3468
+ /**
3469
+ * Items to display in the row.
3470
+ */
3471
+ tiles: GetTilesInRowResponse;
3472
+ };
3473
+
2939
3474
  /**
2940
3475
  * @public
2941
3476
  */
@@ -2944,7 +3479,21 @@ export declare interface RowItem extends RowItemAssets {
2944
3479
  itemType: ROW_ITEM_TYPES;
2945
3480
  name?: string;
2946
3481
  description?: string;
2947
- assets: Assets | null;
3482
+ assets: AssetsField | null;
3483
+ application: RowItemApplicationData | null;
3484
+ feedVisible?: boolean;
3485
+ }
3486
+
3487
+ /**
3488
+ * @public
3489
+ */
3490
+ export declare interface RowItemApplicationData {
3491
+ name: string;
3492
+ logo?: string | null;
3493
+ logoLandscape?: string | null;
3494
+ profilePhoto?: string | null;
3495
+ urlHandle: string;
3496
+ organizationId?: string | null;
2948
3497
  }
2949
3498
 
2950
3499
  /**
@@ -2954,6 +3503,7 @@ export declare interface RowItemAssets {
2954
3503
  landscape?: string | null;
2955
3504
  portrait?: string | null;
2956
3505
  circled?: string | null;
3506
+ square?: string | null;
2957
3507
  banner?: string | null;
2958
3508
  bannerMobile?: string | null;
2959
3509
  }
@@ -2964,7 +3514,12 @@ export declare interface RowItemAssets {
2964
3514
  export declare enum RowItemComponent {
2965
3515
  ROW_ITEM_PORTRAIT = "ROW_ITEM_PORTRAIT",
2966
3516
  ROW_ITEM_LANDSCAPE = "ROW_ITEM_LANDSCAPE",
2967
- ROW_ITEM_CIRCLED = "ROW_ITEM_CIRCLED"
3517
+ ROW_ITEM_SQUARE = "ROW_ITEM_SQUARE",
3518
+ ROW_ITEM_CREATORS_SQUARE = "ROW_ITEM_CREATORS_SQUARE",
3519
+ ROW_ITEM_CREATORS_LANDSCAPE = "ROW_ITEM_CREATORS_LANDSCAPE",
3520
+ ROW_ITEM_CIRCLED = "ROW_ITEM_CIRCLED",
3521
+ ROW_ITEM_HIGHLIGHTED = "ROW_ITEM_HIGHLIGHTED",
3522
+ ROW_ITEM_PLAIN = "ROW_ITEM_PLAIN"
2968
3523
  }
2969
3524
 
2970
3525
  /**
@@ -2991,9 +3546,9 @@ export declare enum RowOrderByFieldPath {
2991
3546
  }
2992
3547
 
2993
3548
  /**
2994
- * @private
3549
+ * @public
2995
3550
  */
2996
- export declare interface RowStandard extends RowBase {
3551
+ export declare interface RowStandard extends Row {
2997
3552
  rowComponent: RowComponent.ROW;
2998
3553
  itemComponent: RowItemComponent;
2999
3554
  }
@@ -3004,7 +3559,10 @@ export declare enum RowWhereFilterFieldPath {
3004
3559
  TAG_TYPE_REF = "tagTypeRef",
3005
3560
  TYPE = "type",
3006
3561
  CONTENT_TYPE = "contentType",
3007
- CHANNEL_KEY = "channelKey"
3562
+ CHANNEL_KEY = "channelKey",
3563
+ PUBLISHED_STATUS = "publishedStatus",
3564
+ ORGANIZATION_REF = "organizationRef",
3565
+ TRANSCODING_STATUS = "transcodingStatus"
3008
3566
  }
3009
3567
 
3010
3568
  /**
@@ -3028,20 +3586,35 @@ declare interface Screen_2 {
3028
3586
  id: string;
3029
3587
  name: string | null;
3030
3588
  description?: string | null;
3031
- assets: Assets;
3032
- rows: Row[];
3589
+ assets: AssetsField;
3590
+ rows: PaginatedResponse<Row>;
3033
3591
  type?: ScreenType;
3034
3592
  filter?: RowFilterField | null;
3035
- embedUrl?: string | null;
3593
+ embedUrl?: string;
3594
+ screenId: string;
3595
+ renderConditions: RenderCondition[];
3596
+ getRenderCondition: (context: {
3597
+ purchasedSubscriptions: Purchase[];
3598
+ }) => RenderCondition | undefined;
3599
+ applyRenderCondition: (payload: ApplyScreenConditionPayload) => {
3600
+ isSignInRequired?: boolean;
3601
+ isPurchaseRequired?: boolean;
3602
+ embedUrl?: string;
3603
+ };
3604
+ fetchMoreRows: () => Promise<void>;
3605
+ hasNextPage: boolean;
3606
+ refetchIfNeeded: () => Promise<void>;
3036
3607
  }
3037
3608
  export { Screen_2 as Screen }
3038
3609
 
3039
3610
  export declare enum ScreenConditionElse {
3040
- SET_QUERY_PARAMS = "setQueryParams"
3611
+ SET_QUERY_PARAMS = "setQueryParams",
3612
+ SHOW_PURCHASE_MODAL = "showPurchaseModal"
3041
3613
  }
3042
3614
 
3043
3615
  export declare enum ScreenConditionType {
3044
- SUBSCRIBED = "subscribed"
3616
+ SUBSCRIBED = "subscribed",
3617
+ SIGNED_IN = "signedIn"
3045
3618
  }
3046
3619
 
3047
3620
  /**
@@ -3051,24 +3624,18 @@ export declare type ScreenConfig = {
3051
3624
  id: string;
3052
3625
  name: string;
3053
3626
  route?: string;
3627
+ isHiddenFromMenu?: boolean;
3054
3628
  showForUserProfileType?: {
3055
3629
  kids: boolean;
3056
3630
  adults: boolean;
3057
3631
  };
3632
+ monetizationAccessIds?: string[];
3058
3633
  };
3059
3634
 
3060
3635
  /**
3061
3636
  * @public
3062
3637
  */
3063
- export declare type ScreenOptions = Partial<{
3064
- language: LangCode;
3065
- initRows: boolean;
3066
- }> & DocumentOptions;
3067
-
3068
- /**
3069
- * @public
3070
- */
3071
- export declare type ScreenRowType = 'filter' | 'custom' | 'continueToWatch' | 'favourites' | 'topWatched';
3638
+ export declare type ScreenRowType = 'filter' | 'custom' | 'continueToWatch' | 'favourites' | 'topWatched' | 'applications';
3072
3639
 
3073
3640
  /**
3074
3641
  * Listen to screen data
@@ -3082,7 +3649,9 @@ export declare type ScreenSubscription = (screenId: string, cb: (error: Error |
3082
3649
  export declare enum ScreenType {
3083
3650
  DEFAULT = "default",
3084
3651
  GRID = "grid",
3085
- EMBED = "embed"
3652
+ EMBED = "embed",
3653
+ RECOMMENDATION = "recommendation",
3654
+ FEED = "feed"
3086
3655
  }
3087
3656
 
3088
3657
  /**
@@ -3123,6 +3692,12 @@ export declare enum SemanticDate {
3123
3692
  TOMORROW = "Tomorrow"
3124
3693
  }
3125
3694
 
3695
+ export declare interface SendFinalizeRegistrationEmailPayload {
3696
+ email: string;
3697
+ userId: string;
3698
+ authUserId: string;
3699
+ }
3700
+
3126
3701
  /**
3127
3702
  * Used for entities, that can be global (e.g. asset presets, tag types).
3128
3703
  * Non-global is stored under organizations (in sub-collection), and shown for organization's users and super-admin.
@@ -3148,6 +3723,15 @@ export declare const setUser: (userId: string | null, payload?: UserPayload) =>
3148
3723
  */
3149
3724
  export declare const showGdprConsentPreferences: () => Promise<void>;
3150
3725
 
3726
+ export declare enum SocialNetworks {
3727
+ FACEBOOK = 0,
3728
+ INSTAGRAM = 1,
3729
+ TWITTER = 2,
3730
+ LINKED_IN = 3,
3731
+ EMAIL = 4,
3732
+ YOUTUBE = 5
3733
+ }
3734
+
3151
3735
  /**
3152
3736
  * @public
3153
3737
  */
@@ -3233,13 +3817,18 @@ export declare type StartAndContinuePosition = {
3233
3817
  declare interface StorageManager_2 {
3234
3818
  getItem(key: string): string | null | Promise<string | null>;
3235
3819
  setItem(key: string, value: string): void | Promise<void>;
3820
+ removeItem(key: string): void | Promise<void>;
3236
3821
  }
3237
3822
  export { StorageManager_2 as StorageManager }
3238
3823
 
3824
+ export declare interface StoreBadgeConfig {
3825
+ appId: string;
3826
+ }
3827
+
3239
3828
  /**
3240
3829
  * @public
3241
3830
  */
3242
- export declare type SubscribeToItemsInRow = (rowId: string, cb: (error: Error | null, data: PaginationInterface<ItemsInRow> | null) => void, options?: SubscribeToItemsInRowOptions) => Disposer_2;
3831
+ export declare type SubscribeToItemsInRow = (rowId: string, cb: (error: Error | null, data: PaginationInterface<ItemInRow> | null) => void, options?: SubscribeToItemsInRowOptions) => Disposer_2;
3243
3832
 
3244
3833
  /**
3245
3834
  * @public
@@ -3255,11 +3844,6 @@ export declare type SubscribeToItemsInRowOptions = Partial<{
3255
3844
  */
3256
3845
  export declare type SubscribeToRowsInScreen = (screenId: string, cb: (error: Error | null, data: PaginationInterface<Row> | null) => void, options?: PaginationOptions) => Disposer_2;
3257
3846
 
3258
- /**
3259
- * @public
3260
- */
3261
- export declare type SubscribeToScreen = (screenId: string, cb: (error: Error | null, data: Screen_2 | null) => void, options?: ScreenOptions) => Disposer_2;
3262
-
3263
3847
  /**
3264
3848
  * @public
3265
3849
  */
@@ -3287,7 +3871,7 @@ export declare interface SuccessConfirmationOverlayPayload extends ConfirmationO
3287
3871
  confirmButtonText?: string;
3288
3872
  }
3289
3873
 
3290
- export declare type SynchronizeUserTypeFunction = (payload: CreateUserPayload, tenantId: string, tenantUserId: string) => Promise<string>;
3874
+ export declare type SynchronizeUserTypeFunction = (payload: CreateUserPayload, tenantId: string, tenantUserId: string, organizationId?: string) => Promise<string>;
3291
3875
 
3292
3876
  /**
3293
3877
  * @public
@@ -3297,7 +3881,7 @@ export declare interface Tag extends RowItem {
3297
3881
  itemType: ROW_ITEM_TYPES.TAG;
3298
3882
  tagId: string;
3299
3883
  type?: string | null;
3300
- metadata?: any[];
3884
+ metadata?: TagMetadataField[];
3301
3885
  color?: string;
3302
3886
  detailBanner?: string;
3303
3887
  availableSeasons?: AvailableSeason[];
@@ -3305,6 +3889,17 @@ export declare interface Tag extends RowItem {
3305
3889
  addToFavorites: () => void;
3306
3890
  removeFromFavorites: () => void;
3307
3891
  cover: string;
3892
+ getApplicationName: () => string | undefined;
3893
+ }
3894
+
3895
+ export declare interface TagAvailableSeasonsFieldType extends TagMetadataFieldDefinition {
3896
+ type: TagMetadataFieldType.AVAILABLE_SEASONS;
3897
+ value: AvailableSeasonField[];
3898
+ }
3899
+
3900
+ export declare interface TagBooleanFieldType extends TagMetadataFieldDefinition {
3901
+ type: TagMetadataFieldType.BOOLEAN;
3902
+ value: boolean;
3308
3903
  }
3309
3904
 
3310
3905
  /**
@@ -3312,6 +3907,61 @@ export declare interface Tag extends RowItem {
3312
3907
  */
3313
3908
  export declare type TaggedVideosOrderByField = 'seasonNumber' | 'episodeNumber' | 'contentType' | DefaultOrderByField;
3314
3909
 
3910
+ export declare type TagMetadataField = TagStringFieldType | TagNumberFieldType | TagBooleanFieldType | TagTranslationFieldType | TagAvailableSeasonsFieldType | TagOrganizationRefFieldType;
3911
+
3912
+ export declare interface TagMetadataFieldDefinition {
3913
+ key: string;
3914
+ type: TagMetadataFieldType;
3915
+ }
3916
+
3917
+ export declare enum TagMetadataFieldType {
3918
+ STRING = "STRING",
3919
+ TRANSLATION = "TRANSLATION",
3920
+ NUMBER = "NUMBER",
3921
+ BOOLEAN = "BOOLEAN",
3922
+ AVAILABLE_SEASONS = "AVAILABLE_SEASONS",
3923
+ ORGANIZATION_REF = "ORGANIZATION_REF"
3924
+ }
3925
+
3926
+ export declare interface TagNumberFieldType extends TagMetadataFieldDefinition {
3927
+ type: TagMetadataFieldType.NUMBER;
3928
+ value: number;
3929
+ }
3930
+
3931
+ export declare interface TagOrganizationRefFieldType extends TagMetadataFieldDefinition {
3932
+ type: TagMetadataFieldType.ORGANIZATION_REF;
3933
+ value: DocumentReference<any>;
3934
+ }
3935
+
3936
+ export declare enum TagSimplicityType {
3937
+ /**
3938
+ * Simple tags
3939
+ */
3940
+ SIMPLE = "SIMPLE",
3941
+ /**
3942
+ * Composed of simple tags. Used for filtering by tagA AND tagB by using one composed tag tagA__tagB
3943
+ */
3944
+ COMPOSED = "COMPOSED"
3945
+ }
3946
+
3947
+ export declare interface TagStringFieldType extends TagMetadataFieldDefinition {
3948
+ type: TagMetadataFieldType.STRING;
3949
+ value: string;
3950
+ }
3951
+
3952
+ export declare interface TagTileSpecificData {
3953
+ assets?: AssetsField;
3954
+ tagId: string;
3955
+ metadata: TagMetadataField[];
3956
+ simplicity: TagSimplicityType;
3957
+ tagTypePath?: string;
3958
+ }
3959
+
3960
+ export declare interface TagTranslationFieldType extends TagMetadataFieldDefinition {
3961
+ type: TagMetadataFieldType.TRANSLATION;
3962
+ value: Translation;
3963
+ }
3964
+
3315
3965
  export declare type Tier = {
3316
3966
  attributes: {
3317
3967
  amount_cents: number;
@@ -3330,19 +3980,53 @@ export declare interface TileApplicationData {
3330
3980
  name: Translation;
3331
3981
  description?: string;
3332
3982
  logo: string;
3983
+ organizationBanner?: string;
3333
3984
  urlHandle: string;
3334
3985
  organizationId: string;
3335
3986
  type: ApplicationType;
3987
+ profilePhoto?: string;
3988
+ }
3989
+
3990
+ export declare interface TileData<ItemSpecificData = VideoTileSpecificData | TvChannelTileSpecificData | TagTileSpecificData | ArticleTileSpecificData> {
3991
+ /**
3992
+ * Tile item ID.
3993
+ */
3994
+ id: string;
3995
+ /**
3996
+ * Timestamp of the item creation.
3997
+ */
3998
+ created: number;
3999
+ /**
4000
+ * Type of the tile. VIDEO, TV_CHANNEL, TAG, ...
4001
+ */
4002
+ itemType: ROW_ITEM_TYPES;
4003
+ /**
4004
+ * Tile item name translation.
4005
+ */
4006
+ name: Translation;
4007
+ /**
4008
+ * Firestore path to the item.
4009
+ */
4010
+ path: string;
4011
+ /**
4012
+ * Application info including logo, name and number of videos.
4013
+ */
4014
+ application?: TileApplicationData;
4015
+ /**
4016
+ * Specific data for an item type (e.g. video, tv channel, tag, ...).
4017
+ */
4018
+ itemSpecificData: ItemSpecificData;
3336
4019
  }
3337
4020
 
3338
4021
  /**
3339
4022
  * @public
3340
4023
  */
3341
- export declare type TileProps = {
4024
+ export declare interface TileProps {
3342
4025
  children?: React_2.ReactNode;
3343
- cover: string;
4026
+ cover?: string;
3344
4027
  bottomLabel: string;
3345
4028
  bottomLabelAreaHeight: number;
4029
+ bottomComponent?: React_2.ReactNode;
3346
4030
  innerLabel: string;
3347
4031
  duration: string;
3348
4032
  price: string | null;
@@ -3355,7 +4039,9 @@ export declare type TileProps = {
3355
4039
  progress?: number;
3356
4040
  time?: string;
3357
4041
  logo?: string;
4042
+ bigLogo?: string;
3358
4043
  coverHeight: number;
4044
+ aspectRatio?: number;
3359
4045
  /**
3360
4046
  * Margin of inner TileContainer.
3361
4047
  * Now used for backward compatibility for WebTileGrid. Consider to use it other way.
@@ -3363,7 +4049,12 @@ export declare type TileProps = {
3363
4049
  containerMargin?: number | string;
3364
4050
  created?: Date;
3365
4051
  numberOfLines?: number;
3366
- };
4052
+ applicationName?: string;
4053
+ applicationLogo?: string;
4054
+ hasBranding?: boolean;
4055
+ applicationHandle?: string;
4056
+ fullWidth?: boolean;
4057
+ }
3367
4058
 
3368
4059
  /**
3369
4060
  * @public
@@ -3415,7 +4106,7 @@ export declare type TivioBundleFile = {
3415
4106
  /**
3416
4107
  * @public
3417
4108
  */
3418
- export declare type TivioComponents = {
4109
+ export declare interface TivioComponents {
3419
4110
  Markers: React_2.ComponentType<MarkersProps>;
3420
4111
  PlayerDataContext: React_2.Context<{
3421
4112
  player: any | null;
@@ -3437,6 +4128,7 @@ export declare type TivioComponents = {
3437
4128
  FeatureSupportCheck: React_2.ComponentType;
3438
4129
  CustomerScreen: React_2.ComponentType<{
3439
4130
  screenId: string;
4131
+ screen: Screen_2;
3440
4132
  }>;
3441
4133
  WebTagScreen: React_2.ComponentType<{
3442
4134
  tagId: string;
@@ -3448,11 +4140,13 @@ export declare type TivioComponents = {
3448
4140
  }>;
3449
4141
  WebRow: React_2.ComponentType<WebRowProps>;
3450
4142
  WebTile: React_2.ComponentType<{
3451
- item?: ItemsInRow;
4143
+ item?: ItemInRow;
3452
4144
  } & TilePropsPartial>;
3453
4145
  ChannelContext: React_2.Context<TvChannel | undefined>;
3454
4146
  ContentSortPicker: React_2.ComponentType<ContentSortPickerProps>;
3455
- };
4147
+ WebProfileScreen: React_2.ComponentType<WebProfileScreenProps>;
4148
+ WebTivioProVideoScreen: React_2.ComponentType<WebTivioProVideoScreenProps>;
4149
+ }
3456
4150
 
3457
4151
  /**
3458
4152
  * @public
@@ -3479,10 +4173,13 @@ export declare interface TivioConfig {
3479
4173
  debug?: boolean;
3480
4174
  verbose?: boolean;
3481
4175
  firebaseApp?: any | null;
4176
+ firebaseFactory?: (config: Object, appName?: string) => firebase.FirebaseApp;
4177
+ authDomainOverride?: string;
3482
4178
  firestore?: any | null;
3483
4179
  currency: Currency;
3484
4180
  applicationId?: string;
3485
4181
  isTivioProApp?: boolean;
4182
+ lockApplicationHandle?: string;
3486
4183
  /**
3487
4184
  * Configuration for GDPR consent collection (CMP)
3488
4185
  */
@@ -3543,7 +4240,7 @@ export declare type TivioHooks = {
3543
4240
  useAdSegment: () => AdSegment_2 | null;
3544
4241
  useCancelSubscription: UseCancelSubscription;
3545
4242
  useItemsInRow: (rowId?: string, options?: PaginationOptions) => {
3546
- pagination: PaginationInterface<ItemsInRow> | null;
4243
+ pagination: PaginationInterface<ItemInRow> | null;
3547
4244
  error: Error | null;
3548
4245
  };
3549
4246
  usePurchaseRecovery: () => {
@@ -3608,6 +4305,7 @@ export declare type TivioInternalComponents = {
3608
4305
  onClose: (selectedProfileId: string) => void;
3609
4306
  }>;
3610
4307
  Banner: React_2.ComponentType<BannerPropsPartial>;
4308
+ CustomAppHistoryContext: React_2.Context<HistoryContextData | undefined>;
3611
4309
  };
3612
4310
 
3613
4311
  /**
@@ -3624,7 +4322,7 @@ export declare type TivioInternalHooks = {
3624
4322
  pagination: PaginationInterface<Video> | null;
3625
4323
  error: Error | null;
3626
4324
  };
3627
- useSimilars: () => {
4325
+ useSimilars: (shouldLoadApplicationsOfOrganizations?: boolean) => {
3628
4326
  getSimilars: ({ videoId, similarsQuery }: {
3629
4327
  videoId: string;
3630
4328
  similarsQuery?: RecommendationsQuery | undefined;
@@ -3638,9 +4336,12 @@ export declare type TivioInternalHooks = {
3638
4336
  useCurrentApplication: () => {
3639
4337
  screenConfigs: ScreenConfig[] | undefined;
3640
4338
  isLoading: boolean;
3641
- switchApplicationByHandle: (handle?: string) => (Promise<void> | undefined);
3642
4339
  isDefaultOrganization: boolean;
3643
4340
  };
4341
+ useDefaultApplication: () => {
4342
+ isLoading: boolean;
4343
+ screenConfigs: ScreenConfig[] | undefined;
4344
+ };
3644
4345
  useIsMonetizationPurchased: () => {
3645
4346
  isOneOfSubscriptionPurchased: (subscriptionIds: string[]) => boolean;
3646
4347
  };
@@ -3665,6 +4366,7 @@ export declare type TivioInternalHooks = {
3665
4366
  useOrganization: () => Organization | null;
3666
4367
  useRow: UseRow;
3667
4368
  useScreen: (screenId: string | null) => Screen_2 | null;
4369
+ useCustomAppHistory: () => HistoryContextData;
3668
4370
  };
3669
4371
 
3670
4372
  /**
@@ -3945,9 +4647,9 @@ export declare type TriggerType = 'scheduled' | 'manual';
3945
4647
  /**
3946
4648
  * @public
3947
4649
  */
3948
- export declare type TvAppProps = {
4650
+ export declare interface TvAppProps {
3949
4651
  customer: CustomerId;
3950
- };
4652
+ }
3951
4653
 
3952
4654
  /**
3953
4655
  * @public
@@ -3981,6 +4683,19 @@ export declare interface TvChannel extends RowItem {
3981
4683
  type?: TvChannelType;
3982
4684
  }
3983
4685
 
4686
+ export declare interface TvChannelAssetValue extends ScalableAsset {
4687
+ pendingOverlayWidth: string;
4688
+ }
4689
+
4690
+ export declare interface TvChannelTileSpecificData {
4691
+ type: TvChannelType;
4692
+ channelKey: string;
4693
+ filters: string[];
4694
+ sources: VideoSourceField[];
4695
+ organizationId: string;
4696
+ assets?: AssetsField<TvChannelAssetValue>;
4697
+ }
4698
+
3984
4699
  export declare enum TvChannelType {
3985
4700
  /**
3986
4701
  * Classic live tv channel
@@ -4050,6 +4765,8 @@ export declare enum TvStreamType {
4050
4765
  */
4051
4766
  export declare const TvTivioProvider: React_2.FC<TivioProviderProps>;
4052
4767
 
4768
+ export declare type UpsertCommentResponse = AddEditCommentResponse | DeleteCommentResponse;
4769
+
4053
4770
  /**
4054
4771
  * @public
4055
4772
  */
@@ -4134,6 +4851,41 @@ export declare const useChannelSource: (tvChannelId: string) => {
4134
4851
  source: null;
4135
4852
  };
4136
4853
 
4854
+ /**
4855
+ * @public
4856
+ */
4857
+ export declare type UseComments = (options: UseCommentsOptions) => {
4858
+ pagination: PaginationInterface<Comment_2>;
4859
+ addComment: (options: AddCommentOptions) => Promise<UseCommentsAddEditCommentResponse>;
4860
+ editComment: (options: EditCommentOptions) => Promise<UseCommentsAddEditCommentResponse>;
4861
+ deleteComment: (commentId: string) => Promise<UseCommentsDeleteCommentResponse>;
4862
+ };
4863
+
4864
+ /**
4865
+ * @public
4866
+ */
4867
+ export declare interface UseCommentsAddEditCommentResponse {
4868
+ id?: string;
4869
+ error?: string;
4870
+ }
4871
+
4872
+ /**
4873
+ * @public
4874
+ */
4875
+ export declare interface UseCommentsDeleteCommentResponse {
4876
+ deleted?: boolean;
4877
+ error?: string;
4878
+ }
4879
+
4880
+ /**
4881
+ * @public
4882
+ */
4883
+ export declare interface UseCommentsOptions {
4884
+ videoId: string;
4885
+ mainParentId?: string;
4886
+ autoInit?: boolean;
4887
+ }
4888
+
4137
4889
  /**
4138
4890
  * @public
4139
4891
  */
@@ -4196,7 +4948,7 @@ export declare const useIsMonetizationPurchased: () => {
4196
4948
  * @public
4197
4949
  */
4198
4950
  export declare const useItemsInRow: (rowId?: string, options?: SubscribeToItemsInRowOptions) => {
4199
- pagination: PaginationInterface<ItemsInRow> | null;
4951
+ pagination: PaginationInterface<ItemInRow> | null;
4200
4952
  error: Error | null;
4201
4953
  };
4202
4954
 
@@ -4256,6 +5008,7 @@ export declare type User = {
4256
5008
  * Returns all PAID or CANCELLED user purchases (expired and non-expired)
4257
5009
  */
4258
5010
  allPurchases: Purchase[];
5011
+ availablePromotionsIds: string[];
4259
5012
  /**
4260
5013
  * Returns "active" (not CANCELLED) VoD purchases ("transaction" type)
4261
5014
  */
@@ -4269,6 +5022,7 @@ export declare type User = {
4269
5022
  */
4270
5023
  extendableSubscription?: Purchase;
4271
5024
  getPurchasedVideos: () => Video[];
5025
+ getOneTimePurchases: () => Purchase[];
4272
5026
  isPurchasesInitialized: boolean;
4273
5027
  isSignedIn: boolean;
4274
5028
  isReady: boolean;
@@ -4282,14 +5036,41 @@ export declare type User = {
4282
5036
  authUserId?: string;
4283
5037
  favorites: any[];
4284
5038
  watchedPositions: any[];
5039
+ watchHistory: any[];
4285
5040
  profiles: any[];
4286
5041
  activeUserProfileId: string | null;
4287
5042
  patreon?: PatreonUserAuth;
5043
+ subscriptionIdsToShow: string[] | null;
5044
+ followedOrganizationIds: string[];
5045
+ isAnonymous: boolean;
5046
+ isDiscordConnected: boolean;
4288
5047
  createUserProfile: (request: any) => Promise<void>;
4289
5048
  deleteUserProfile: (profileId: string) => Promise<void>;
4290
5049
  setActiveUserProfileId: (id: string) => void;
5050
+ getFollowedOrganizations: () => Promise<Array<FollowedOrganizationData | undefined>>;
5051
+ sendFinalizeRegistrationEmail: (email: string) => Promise<void>;
5052
+ isUserAlreadyRegisteredByTenant: (email: string, tenantId: string) => Promise<boolean>;
5053
+ };
5054
+
5055
+ /**
5056
+ * @public
5057
+ */
5058
+ export declare type UseReactions = (options: UseReactionsOptions) => {
5059
+ react: () => void;
5060
+ count: number;
5061
+ hasReacted: boolean;
4291
5062
  };
4292
5063
 
5064
+ /**
5065
+ * @public
5066
+ */
5067
+ export declare interface UseReactionsOptions {
5068
+ content: ReactableContent;
5069
+ reactionType: ReactionEnum;
5070
+ onUnauthorized?: () => void;
5071
+ onError?: (error: Error) => void;
5072
+ }
5073
+
4293
5074
  export declare enum UserGroup {
4294
5075
  ALL = "all",
4295
5076
  FREE = "free",
@@ -4446,7 +5227,7 @@ export declare const useVoucher: (voucherId: string) => {
4446
5227
  voucher: Voucher | null;
4447
5228
  /**
4448
5229
  * You can check error.details if you need to know error type when you want your own error messages
4449
- * (can be one of "DOES_NOT_EXIST", "EXPIRED" and "ALREADY_USED").
5230
+ * (can be one of "DOES_NOT_EXIST", "EXPIRED", "ALREADY_USED_BY_CURRENT_USER" and "ALREADY_USED").
4450
5231
  */
4451
5232
  error: Error | BadRequestError | null;
4452
5233
  /**
@@ -4510,7 +5291,7 @@ export declare interface verifyCustomTokenProps {
4510
5291
  /**
4511
5292
  * @public
4512
5293
  */
4513
- export declare interface Video extends RowItem {
5294
+ export declare interface Video extends RowItem, MonetizableItem, ReactableContent {
4514
5295
  id: string;
4515
5296
  itemType: ROW_ITEM_TYPES.VIDEO;
4516
5297
  /**
@@ -4519,35 +5300,31 @@ export declare interface Video extends RowItem {
4519
5300
  cover: string | null;
4520
5301
  sectionId: string | null;
4521
5302
  channelId: string | null;
4522
- /**
4523
- * seconds
4524
- */
4525
5303
  duration: number;
4526
5304
  path: string;
4527
5305
  tags: Tag[];
4528
5306
  image: string | null;
4529
5307
  isPlayable: boolean;
4530
5308
  monetizations: Monetization[];
4531
- /**
4532
- * Returns all transactions and subscriptions applied to this video.
4533
- * Transactions before subscriptions, sorted by price ascending.
4534
- */
4535
- getPurchasableMonetizations(options?: GetPurchasableMonetizationsOptions): PurchasableMonetization[];
4536
5309
  getSourceUrl(options?: {
4537
5310
  language?: LangCode;
4538
5311
  }): Promise<GetSourceUrlResponse & {
4539
5312
  language?: LangCode;
4540
5313
  }>;
4541
- getSeekingMatrixPreviewByTime(timeMs: number, offsetIndex: number): {
5314
+ getSeekingMatrixPreviewByTime(timeMs: number, offsetIndex?: number): {
4542
5315
  url: string;
4543
5316
  x: number;
4544
5317
  y: number;
5318
+ width: number;
5319
+ height: number;
5320
+ interval: number;
4545
5321
  timeMs: number;
4546
5322
  } | null;
4547
5323
  purchasableMonetization: any | null;
4548
5324
  transaction: PurchasableMonetization | undefined;
4549
5325
  subscriptions: PurchasableMonetization[];
4550
5326
  sources?: any[];
5327
+ allSources?: any[];
4551
5328
  isPlaylist: boolean;
4552
5329
  name: string;
4553
5330
  urlNames?: string[];
@@ -4559,34 +5336,38 @@ export declare interface Video extends RowItem {
4559
5336
  from?: Date;
4560
5337
  to?: Date;
4561
5338
  detailBanner?: string;
4562
- linkedVideosRaw: any[];
4563
- linkedVideos: LinkedVideo[];
5339
+ descriptionRich?: string;
5340
+ organizationId?: string;
5341
+ linkedVideosRaw: LinkedVideoRaw[] | undefined;
5342
+ linkedVideos: LinkedVideo[] | undefined;
5343
+ pipPaths?: string[];
4564
5344
  contentType: VideoContentType | null;
4565
5345
  year?: number;
4566
5346
  episodeNumber?: number;
4567
5347
  seasonNumber?: number;
4568
5348
  getTagsOfType: (type: string) => Tag[];
5349
+ geoBlocking: GeoBlocking | undefined;
4569
5350
  loadLinkedVideos: () => any;
4570
5351
  getLinkedVideos: (type: any) => any;
4571
5352
  trailer: Video | null;
5353
+ teaser: Video | null;
5354
+ hasTasting: boolean;
5355
+ isTastingValid: () => boolean;
5356
+ tasting: Video | null;
4572
5357
  watchPosition: number | null;
4573
5358
  isFavorite: boolean;
4574
5359
  addToFavorites: () => void;
4575
5360
  removeFromFavorites: () => void;
4576
- availability: VideoAvailability | null;
5361
+ availability: ContentAvailability | null;
4577
5362
  sourceLanguages: LangCode[];
4578
5363
  urlByLanguage: (lang: LangCode) => string | undefined;
5364
+ getApplicationName: () => string | undefined;
5365
+ getApplicationLogo: () => string | undefined;
5366
+ setApplicationData: (applicationData: RowItemApplicationData) => void;
5367
+ linkedVideosInNotLoaded: () => boolean | undefined;
5368
+ initApplication: () => Promise<void>;
4579
5369
  }
4580
5370
 
4581
- /**
4582
- * @public
4583
- */
4584
- export declare type VideoAvailability = {
4585
- from: Date;
4586
- to: Date | null;
4587
- manual: boolean;
4588
- };
4589
-
4590
5371
  /**
4591
5372
  * @public
4592
5373
  */
@@ -4620,6 +5401,25 @@ export declare enum VideoSourceEncryption {
4620
5401
  PLAYREADY = "playready"
4621
5402
  }
4622
5403
 
5404
+ export declare interface VideoSourceField {
5405
+ codec: VideoSourceCodec;
5406
+ /**
5407
+ * DRM provider for given encrypted source.
5408
+ *
5409
+ * If encryption is {@link VideoSourceEncryption.NONE}, DRM provider should not be set.
5410
+ * If encryption is set to anything other than {@link VideoSourceEncryption.NONE} and DRM provider is not set, we pick the default one.
5411
+ */
5412
+ drmProvider?: DrmProvider;
5413
+ encryption: VideoSourceEncryption;
5414
+ /**
5415
+ * Lower number = higher priority (so 1 equals highest priority)
5416
+ */
5417
+ priority: VideoSourcePriority;
5418
+ protocol: VideoSourceProtocol;
5419
+ url: string;
5420
+ languages?: LangCode[];
5421
+ }
5422
+
4623
5423
  /**
4624
5424
  * Lower number = higher priority.
4625
5425
  */
@@ -4631,6 +5431,37 @@ export declare enum VideoSourceProtocol {
4631
5431
  MP4 = "mp4"
4632
5432
  }
4633
5433
 
5434
+ export declare interface VideoTileSpecificData {
5435
+ cover?: string;
5436
+ assets?: AssetsField;
5437
+ episodeNumber?: number;
5438
+ seasonNumber?: number;
5439
+ urlName?: VideoUrlNames;
5440
+ }
5441
+
5442
+ /**
5443
+ * Transcoding status of uploaded video.
5444
+ * @public
5445
+ */
5446
+ export declare enum VideoTranscodingStatus {
5447
+ /**
5448
+ * Video is not transcoded yet. It's in the queue, though.
5449
+ */
5450
+ ON_HOLD = "CREATED",
5451
+ /**
5452
+ * Video is being transcoded.
5453
+ */
5454
+ IN_PROGRESS = "ENCODING",
5455
+ /**
5456
+ * Video has been transcoded.
5457
+ */
5458
+ DONE = "ENCODING_DONE",
5459
+ /**
5460
+ * An error occured during transcoding.
5461
+ */
5462
+ ERROR = "ERROR"
5463
+ }
5464
+
4634
5465
  /**
4635
5466
  * Video type.
4636
5467
  * @public
@@ -4652,11 +5483,20 @@ export declare enum VideoType {
4652
5483
  * Part of video original video like TRAILER.
4653
5484
  */
4654
5485
  TRAILER = "TRAILER",
5486
+ /**
5487
+ * Timeshift.
5488
+ */
4655
5489
  TV_PROGRAM = "TV_PROGRAM",
4656
5490
  /**
4657
5491
  * Video object represents whole series, e.g. tv show.
4658
5492
  */
4659
- SERIES = "SERIES"
5493
+ SERIES = "SERIES",
5494
+ TEASER = "TEASER",
5495
+ TASTING = "TASTING",
5496
+ /**
5497
+ * Video that is in locked state and is used in virtual channel EPG.
5498
+ */
5499
+ VIRTUAL_PROGRAM = "VIRTUAL_PROGRAM"
4660
5500
  }
4661
5501
 
4662
5502
  /**
@@ -4745,7 +5585,7 @@ export declare interface VodTivioSourceInterface extends PlayerSourceInterface<S
4745
5585
  watermark: Watermark | null;
4746
5586
  canWatchOnDevice: boolean;
4747
5587
  isAvailable: boolean;
4748
- availability: VideoAvailability | null;
5588
+ availability: ContentAvailability | null;
4749
5589
  video: Video;
4750
5590
  clone: (params?: Partial<VodTivioSourceParams>) => VodTivioSourceInterface;
4751
5591
  }
@@ -4758,6 +5598,7 @@ export declare interface VodTivioSourceParams extends PlayerSourceParams<SourceT
4758
5598
  adMonetizationId?: string;
4759
5599
  language?: LangCode;
4760
5600
  drm?: Drm;
5601
+ ignoreWatchPosition?: boolean;
4761
5602
  }
4762
5603
 
4763
5604
  /**
@@ -4778,6 +5619,7 @@ export declare interface WarningConfirmationOverlayPayload extends ConfirmationO
4778
5619
  type: 'warning';
4779
5620
  confirmButtonText?: string;
4780
5621
  closeButtonText?: string;
5622
+ subscriptionExpirationText?: string;
4781
5623
  }
4782
5624
 
4783
5625
  /**
@@ -4788,16 +5630,216 @@ export declare interface Watermark {
4788
5630
  size: 'large' | 'medium';
4789
5631
  }
4790
5632
 
5633
+ export declare interface WebConfig {
5634
+ customer: CustomerId;
5635
+ title?: string;
5636
+ description?: string;
5637
+ logo: string;
5638
+ mobileLogo?: string;
5639
+ /**
5640
+ * Logo for loading overlay, if not present, logo is used.
5641
+ */
5642
+ logoLoadingOverlay?: string;
5643
+ tivio: WebTivioConfig;
5644
+ appColorMode?: 'light' | 'dark';
5645
+ header?: {
5646
+ /**
5647
+ * Text on buy voucher button, if not provided the default text will be used.
5648
+ */
5649
+ buyVoucherButtonText?: string;
5650
+ allowSearch?: boolean;
5651
+ logoHeight?: string;
5652
+ mobileLogoHeight?: string;
5653
+ buySubscriptionButtonText?: string;
5654
+ };
5655
+ footer?: {
5656
+ /**
5657
+ * If logo is different from logo in header
5658
+ */
5659
+ logo?: string;
5660
+ showLogo?: boolean;
5661
+ /**
5662
+ * right panel - various type of contacts to owners of website
5663
+ */
5664
+ contacts?: {
5665
+ name: string;
5666
+ contact: string;
5667
+ }[];
5668
+ /**
5669
+ * right panel - important documents for viewer of website that should know about it
5670
+ */
5671
+ documents?: {
5672
+ name: string;
5673
+ href: string;
5674
+ }[];
5675
+ /**
5676
+ * right panel - hyperlinks to social networks
5677
+ */
5678
+ socialNetworks?: {
5679
+ type: SocialNetworks;
5680
+ url: string;
5681
+ }[];
5682
+ /**
5683
+ * right panel - some short common description of website
5684
+ */
5685
+ description?: string;
5686
+ /**
5687
+ * left panel - hyperlinks to stores for downloading native app
5688
+ * if our client has some native app
5689
+ */
5690
+ storeBadges?: {
5691
+ ios?: StoreBadgeConfig;
5692
+ android?: StoreBadgeConfig;
5693
+ };
5694
+ isCentered?: boolean;
5695
+ legalInfo?: {
5696
+ name?: string;
5697
+ address?: string;
5698
+ cin?: string;
5699
+ email?: string;
5700
+ };
5701
+ cookieSettingsLabel?: string;
5702
+ };
5703
+ theme?: {
5704
+ headerType?: PaletteType;
5705
+ };
5706
+ screens?: ScreenConfig[];
5707
+ /**
5708
+ * If content is secured, then landing page is shown to hide content (customer screens, videos etc.),
5709
+ * so app requires authorization to see them.
5710
+ */
5711
+ securedContent?: boolean;
5712
+ /**
5713
+ * CSS styles for application background.
5714
+ */
5715
+ appBackground?: string;
5716
+ /**
5717
+ * CSS styles for application color.
5718
+ */
5719
+ appColor?: string;
5720
+ loader?: {
5721
+ /**
5722
+ * URL to animated image shown on splash screen.
5723
+ */
5724
+ animatedLogo?: string;
5725
+ /**
5726
+ * Defines if progress bar should be shown on loading screen.
5727
+ * Default is TRUE (see {@link AppLoadingOverlay}
5728
+ */
5729
+ showProgressBar?: boolean;
5730
+ };
5731
+ /**
5732
+ * Slug of all pages where user will be forced to fill login form if he's not logged in.
5733
+ */
5734
+ forceLogin?: string[];
5735
+ /**
5736
+ * Hides registration button from the menu and from the login form. Direct access to /registration URL will still work.
5737
+ *
5738
+ * Useful when customer is going to quit a business or leaves Tivio platform - so he doesn't want to allow
5739
+ * a creation of new users anymore.
5740
+ */
5741
+ hideRegistrationButton?: boolean;
5742
+ /**
5743
+ * Hides registration button from the login form.
5744
+ */
5745
+ allowRegistrationFromLoginForm?: boolean;
5746
+ /**
5747
+ * Customization of auth process
5748
+ */
5749
+ /**
5750
+ * When enabled choose subscription button will be shown in the header. After choosing a subscription user will be
5751
+ * redirected to registration form.
5752
+ *
5753
+ * This will also hide registration button from the header
5754
+ */
5755
+ showChooseSubscription?: boolean;
5756
+ registration?: {
5757
+ /**
5758
+ * Customization of auth form
5759
+ */
5760
+ form?: {
5761
+ subtitle?: string;
5762
+ /**
5763
+ * Optional phoneNumber form field
5764
+ */
5765
+ showPhoneNumberField?: boolean;
5766
+ /**
5767
+ * Optional bottomText (e.g. terms & conditions agreement)
5768
+ */
5769
+ bottomText?: string;
5770
+ /**
5771
+ * Toggle for showing acceptance of terms & conditions text
5772
+ */
5773
+ showAcceptanceOfTermsAndConditions?: boolean;
5774
+ };
5775
+ registrationConsent?: string;
5776
+ };
5777
+ payment?: {
5778
+ paymentConsent?: string;
5779
+ };
5780
+ /**
5781
+ * If web supports entering vouchers
5782
+ */
5783
+ supportVouchers?: boolean;
5784
+ /**
5785
+ * Config for Google Tag Manager
5786
+ */
5787
+ googleTagManagerConfig?: TagManagerArgs;
5788
+ customScripts?: CustomScript[];
5789
+ /**
5790
+ * Favicons config
5791
+ */
5792
+ favicons?: {
5793
+ /**
5794
+ * Path to folder with favicons in format generated by https://realfavicongenerator.net
5795
+ */
5796
+ folderPath: string;
5797
+ safariFavicon: {
5798
+ color: string;
5799
+ };
5800
+ msFaviconApplication: {
5801
+ color: string;
5802
+ };
5803
+ };
5804
+ monetizationSelectOverlay?: {
5805
+ title?: string;
5806
+ };
5807
+ /**
5808
+ * Google Analytics ID. If provided, Google Analytics will be enabled.
5809
+ */
5810
+ googleAnalyticsId?: string;
5811
+ /**
5812
+ * If enabled, header menu will be centered.
5813
+ */
5814
+ centeredMenu?: boolean;
5815
+ /**
5816
+ * All values are considered as false if not provided.
5817
+ */
5818
+ socialLogins?: {
5819
+ showAppleLogin?: boolean;
5820
+ showGoogleLogin?: boolean;
5821
+ showPatreonLogin?: boolean;
5822
+ };
5823
+ /**
5824
+ * If the monetizations are filled in, the MonetizationSelectOverlay displays the monetizations from that configuration.
5825
+ */
5826
+ monetizationOverride?: string[];
5827
+ /**
5828
+ * If true, robots.txt will prevent crawling of the website.
5829
+ */
5830
+ norobots?: boolean;
5831
+ }
5832
+
4791
5833
  /**
4792
5834
  * @public
4793
5835
  */
4794
- export declare type WebGridScreenProps = {
5836
+ export declare interface WebGridScreenProps {
4795
5837
  screen?: Screen_2;
4796
5838
  seriesId?: string;
4797
5839
  season?: number;
4798
5840
  rowId?: string;
4799
5841
  videoId?: string;
4800
- };
5842
+ }
4801
5843
 
4802
5844
  /**
4803
5845
  * @public
@@ -4806,6 +5848,10 @@ export declare interface WebPlayerProps {
4806
5848
  id: string;
4807
5849
  source?: SourceParams | VideoPath | ChannelPath | null;
4808
5850
  onEnded?: () => any;
5851
+ /**
5852
+ * If true, the player will inherit the width and height of its parent element.
5853
+ */
5854
+ isSameSizeAsParent?: boolean;
4809
5855
  /**
4810
5856
  * If this function is specified, then "Back" button is shown in top right corner.
4811
5857
  */
@@ -4886,25 +5932,58 @@ export declare interface WebPlayerProps {
4886
5932
  * If true, it does not play the next video when the current video reaches the end.
4887
5933
  */
4888
5934
  disablePlayNext?: boolean;
5935
+ setPaymentOverlayVisible?: React_2.Dispatch<React_2.SetStateAction<boolean>>;
4889
5936
  }
4890
5937
 
4891
5938
  /**
4892
5939
  * @public
4893
5940
  */
4894
- export declare type WebRowProps = {
4895
- items?: ItemsInRow[];
5941
+ export declare interface WebProfileScreenProps {
5942
+ onLogout: () => void;
5943
+ }
5944
+
5945
+ /**
5946
+ * @public
5947
+ */
5948
+ export declare interface WebRowProps {
5949
+ items?: ItemInRow[];
4896
5950
  variant?: RowItemComponent;
4897
5951
  rowName?: string | any;
4898
5952
  fetchMore?: () => void;
4899
- onTileClick?: (item?: ItemsInRow | null) => void;
4900
- };
5953
+ onTileClick?: (item?: ItemInRow | null) => void;
5954
+ }
4901
5955
 
4902
5956
  /**
4903
5957
  * @public
4904
5958
  */
4905
- export declare type WebSeriesDetailScreenProps = {
5959
+ export declare interface WebSeriesDetailScreenProps {
4906
5960
  tagId: string;
4907
- };
5961
+ }
5962
+
5963
+ /**
5964
+ * Previously SdkReactConfig.
5965
+ */
5966
+ export declare interface WebTivioConfig extends Omit<TivioConfig, 'language'> {
5967
+ disableUnmounting?: boolean;
5968
+ enable?: boolean;
5969
+ enableSentry?: boolean;
5970
+ ErrorComponent?: any;
5971
+ LoaderComponent?: any;
5972
+ logger?: any | null;
5973
+ language?: LangCode;
5974
+ overrideLanguage?: LangCode;
5975
+ lockApplicationHandle?: string;
5976
+ applicationId?: string;
5977
+ }
5978
+
5979
+ /**
5980
+ * @public
5981
+ */
5982
+ export declare interface WebTivioProVideoScreenProps {
5983
+ video: Video;
5984
+ seriesTag?: Tag;
5985
+ autoplay: boolean;
5986
+ }
4908
5987
 
4909
5988
  /**
4910
5989
  * @public