@tivio/sdk-react 5.0.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md.bak ADDED
@@ -0,0 +1,497 @@
1
+ # @tivio/sdk-react
2
+
3
+ @tivio/sdk-react provides everything which is necessary (components, data hooks etc.) to build a custom React application
4
+ above Tivio Studio. You can comfortably manage all you videos, settings such as application's screens and rows and also monetization
5
+ settings in the administration of Tivio Studio while having the freedom to build your own application.
6
+
7
+ ## Changelog
8
+
9
+ * 5.0.1
10
+ * patch: move changelog
11
+
12
+ * 5.0.0
13
+ * major: upgrade to React 18, change react and react-dom peer dependencies to 17.x || 18.x
14
+ * major: fix typing for useReferralInfo, now correctly showing that `null` can be returned
15
+ * major: fix typing for `WebRowProps.onTileClick`, now correctly showing that `null` can be accepted
16
+ * minor: add analytics
17
+ * minor: add getSourceUrl function to video and tv channel types
18
+ * minor: add uri property to tv channel type
19
+ * minor: add useChannelSource to hooks
20
+
21
+ * 4.5.0
22
+ * minor: extend PurchaseEndpointPayload type with purchase previousStatus and newStatus fields
23
+
24
+ * 4.4.1
25
+ * patch: added waitForTags param in useSearch hook for videos
26
+
27
+ * 4.4.0
28
+ * minor: PrimaryButton component props type set to any for now
29
+ * patch: isPurchasableAsVoucher added to PurchasableMonetization
30
+ * patch: voucherPurchase flag added to purchase overlays
31
+ * patch: item added to MonetizationsSelectOverlayData
32
+ * minor: added hungarian language to `LangCode` enum
33
+
34
+ * 4.3.0:
35
+ * minor: add GetPurchaseInfoResponse and PurchaseEndpointPayload to exported types
36
+ * minor: support for disabling purchase of specified subscriptions (new param in useOrganizationSubscriptions hook)
37
+ * minor: more specific PurchasableMonetization type usage instead of Monetization
38
+ * minor: monetization property deleted from Video type
39
+ * minor: monetization now has originalPrice and promotion properties available
40
+ * patch: remove not used OrganizationSubscriptionsContext, **this change requires bundle 3.20.0 or newer**
41
+
42
+ * 4.2.0:
43
+ * minor: fix useSearch loading type
44
+ * patch: added italian language to `LangCode` enum
45
+
46
+ * 4.1.0
47
+ * patch: added italian language to `LangCode` enum
48
+ * minor: fixed spanish language code in `LangCode` enum (`sp` -> `es`)
49
+ * minor: other misc type changes
50
+
51
+ * 4.0.1
52
+ * patch: added setBundleVersion setter to bundle type
53
+ * patch: added setStorageManager setter to bundle type
54
+ * patch: `Purchase.isPurchased` is deprecated
55
+ * patch: fill `useSearch` field `hasNextPage` with proper value
56
+
57
+ * 4.0.0
58
+ * minor: Types cleanup
59
+ * MAJOR: Remove deprecated and unused stuff
60
+ * auth
61
+ * changePassword
62
+ * changeUserPhoto
63
+ * removeUserPhoto
64
+ * getPurchasedVodsWithInitializedVideos
65
+ * initializeUser
66
+ * createFreePurchase
67
+ * components
68
+ * videoAdBanner
69
+ * getters
70
+ * getExportedConfig
71
+ * getChannelById
72
+ * getSectionById
73
+ * getWidgetById
74
+ * hooks
75
+ * useLastVideoByWidgetId
76
+ * useScreen
77
+ * useFreePurchase
78
+ * useWidget
79
+ * useChannel
80
+ * useSection
81
+ * useVideosInSection
82
+ * useSectionsInChannel
83
+ * useChannelsInWidget
84
+ * subscriptions
85
+ * subscribeToWidget
86
+ * subscribeToChannel
87
+ * subscribeToSection
88
+ * subscribeToVideosInSection
89
+ * subscribeToSectionsInChannel
90
+ * subscribeToChannelsInWidget
91
+ * subscribeToScreen
92
+ ---
93
+ _Versions <= v3.7.0 requires core-react-dom bundle < v3.0.0 (because sdk-react used some sdk API deleted in core-react-dom@4.0.0)_
94
+
95
+ * 3.7.0
96
+ * minor: purchase contains created and updated
97
+
98
+ * 3.6.3
99
+ * patch: improve README.md
100
+
101
+ * 3.6.2
102
+ * patch: Fix types
103
+
104
+ * 3.6.1
105
+ * patch: Fix README
106
+
107
+ * 3.6.0
108
+ * minor: Update types
109
+
110
+ * 3.5.2
111
+ * patch: All types are available again.
112
+
113
+ * 3.5.1
114
+ * patch: remove incorrect dependency (@tivio/types)
115
+
116
+ * 3.5.0
117
+ * minor: Types change - Video.price and Video.detailedPrice can be null
118
+ * minor: Types change - Video.cover is marked as deprecated
119
+
120
+ * 3.4.0
121
+ * minor: more precise type for errors in usePurchaseRecovery and usePurchaseRecovery
122
+ * patch: jsdocs for usePurchaseRecovery and usePurchaseRecovery
123
+ * minor: inviteCodeReset in useApplyInviteCode
124
+ * minor: Reset forgotten password
125
+ * minor: Consolidating monetization logic
126
+ * 3.3.2
127
+ * patch: Adding new optional parameters (where, orderBy) to useTaggedVideos hook
128
+ * 3.3.1
129
+ * patch: Fixed types of `setUser`
130
+ * 3.3.0
131
+ * minor: Add getPlayerCapabilities to getters.
132
+ * patch: Added option to log out via `setUser(null)`, requires @tivio/core-react-dom@2.17.9
133
+ * 3.2.5
134
+ * patch: added recovery flag to QerkoPaymentInfo type
135
+ * patch: bundle.types changes - internal.components.WebVideoScreen
136
+ * patch: types changes - add new onBack prop to WebPlayerProps
137
+ * patch: Refactor useVideo hook, now uses hook from core-react
138
+ * 3.2.4
139
+ * minor: added useApplyInviteCode
140
+ * minor: better errors from useVoucher
141
+ * 3.2.3
142
+ * minor: added usePurchaseRecovery hook
143
+ * patch: deprecated `useLastVideoByWidgetId`
144
+ * 3.2.2
145
+ * minor: useRowsInScreen, useItemsInRow, useTaggedVideos - hasNextPage and loading added to pagination
146
+ * minor: useRowsInScreen, useItemsInRow, useTaggedVideos - implementation moved to remote bundle
147
+ * patch: Fixed Tivio startup on Tizen 6
148
+ * minor: Added `forceCloudFnResolver` option
149
+ * 3.2.1
150
+ * patch: fix of @tivio/common version
151
+ * 3.2.0
152
+ * minor: Added `capabilitiesOptions` for finer configuration of device capabilities
153
+ * minor: tag names are returned in correct language (the one from tivio config); language value should be one from enum "LangCode"
154
+ * 3.1.3
155
+ * patch: Hotfix made sure disabled Tivio does not break React Native
156
+ * 3.1.2
157
+ * patch: Allow `conf` prop of `TivioProvider` to be `null` or `undefined` in order to turn off Tivio
158
+ * 3.1.1
159
+ * patch: fixed `setUser()` crash when bundle fails to load
160
+ * 3.1.0
161
+ * patch: `useAdSegment()` now returns null if no monetization is configured, ad segments are not managed in that situation
162
+ * minor: enriched `AdSegment` type from `useAdSegment()`
163
+ * minor: Added `setUser()` function for login and logout
164
+ * 3.0.0
165
+ * minor: Added hook `useWatchWithoutAdsOffer` to trigger purchase dialog to "watch without ads", if available
166
+ * patch: fix peerDependency declaration for react, react-dom
167
+ * major: TivioProvider requires deviceCapabilities
168
+ * major: TivioProvider requires currency
169
+ * minor: add voucher support (see usePurchaseSubscription and useTransactionPayment hooks)
170
+ * minor: device limit support
171
+ * minor: drm (Widevine, PlayReady) support
172
+ * minor: watermarking support
173
+ * minor: add useSearch hook
174
+ * patch: price on video is 0 when purchased
175
+ * 2.4.2
176
+ * patch: added back changelog
177
+ * 2.4.1
178
+ * patch: improved doc about player wrapper
179
+ * 2.4.0
180
+ * patch: improved Player wrapper types
181
+ * minor: added Tivio DOM events `tivio_key_input_handling_change`, `tivio_context_switch` and `tivio_request_goto`
182
+ * patch: added support for remote code on browsers that do not implement [indexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API)
183
+ * patch: added support for browsers that do not implement [indexedDB API](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API)
184
+ * 2.3.4
185
+ * patch: fix of usePurchaseSubscription not reactive
186
+ * 2.3.3
187
+ * patch: fix of useUser not updating
188
+ * 2.3.2
189
+ * patch: next app doesn't fail anymore due to "self is not defined"
190
+ * 2.3.1
191
+ * patch: fix of @tivio/common dependency
192
+ * 2.3.0
193
+ * minor: add useTaggedVideos that allows to fetch videos with given tags
194
+ * minor: add option to fetch tags (on hook useItemsInRow), useVideo always fetching videos tags
195
+ * 2.2.1
196
+ * patch: disable Sentry when no config is supplied to `TivioProvider`
197
+ * 2.2.0
198
+ * patch: reduced bundle size
199
+ * minor: disable Sentry when no config is supplied to `TivioProvider` or when Tivio is disabled `{ enable: false }`, or when Sentry is disabled via config `{ enableSentry: false }`
200
+ * 2.1.5
201
+ * patch fix of `useVideosInSection` hook (fetching video's monetizations)
202
+ * 2.1.4
203
+ * patch: fix re-rendering of `useAd` during non-skippable ads (requires core-react-dom@2.1.9)
204
+ * 2.1.3
205
+ * patch: fix changelog
206
+ * 2.1.2
207
+ * patch: Fixed exported types
208
+ * 2.1.1
209
+ * patch: TivioWidget now correctly reports `false` via `onEnabled` callback when in invalid internal state
210
+ * 2.1.0
211
+ * patch: fix of useItemsInRow hook
212
+ * patch: fix of useScreen hook
213
+ * add: useRowsInScreen hook
214
+ * 2.0.3
215
+ * patch: fix of useItemsInRow hook
216
+ * 2.0.2
217
+ * patch: screen and row IDs fixed
218
+ * `TivioBundle.subscriptions.subscribeToItemsInRow` now accepts user-defined ID via studio.tiv.io
219
+ * `TivioBundle.subscriptions.subscribeToScreen` now accepts user-defined ID via studio.tiv.io
220
+ * `Screen` and `Row` types returned by `useScreen()` return their user-defined IDs (`.id`) correctly
221
+ * 2.0.1
222
+ * no changes
223
+ * 2.0.0
224
+ * major: video.channelId can now be `string | null` used to be `string`
225
+ * minor: added data API and hooks for screens (screens, rows of screen and row items)
226
+ * hooks: `useScreen()`, `useItemsInRow()`
227
+ * api: `TivioBundle.subscriptions.subscribeToScreen`, `TivioBundle.subscriptions.subscribeToItemsInRow`
228
+ * 1.3.6
229
+ * ?
230
+ * 1.3.5
231
+ * minor: added WebPlayer props (canReplay, showMarkers, customShortcuts, enableKeyboardShortcuts, source.poster)
232
+ * 1.3.4
233
+ * ...
234
+
235
+ ## Installation
236
+
237
+ Install @tivio/sdk-react along with its peer dependencies
238
+ ```sh
239
+ npm i react@17 react-dom@17 @tivio/sdk-react
240
+ # or
241
+ yarn add react@17 react-dom@17 @tivio/sdk-react
242
+ ```
243
+
244
+ ## Initialization
245
+
246
+ Put Tivio Provider at the top level of your application:
247
+
248
+ ``` javascript
249
+ import { TivioProvider } from '@tivio/sdk-react'
250
+
251
+ const config = {
252
+ secret: 'XXXXXXXXXX',
253
+ }
254
+
255
+ function App({children}) {
256
+ return (
257
+ <TivioProvider conf={config}>
258
+ {children}
259
+ </TivioProvider>
260
+ )
261
+ }
262
+ ```
263
+
264
+ ## Authentication
265
+
266
+ A logged-in user can access more features, such as making purchases. In order to authenticate a user with Tivio, use the `setUser()` method.
267
+
268
+ Verification of the user against 3rd party auth servers is implemented per customer.
269
+
270
+ ```typescript
271
+ import { setUser } from '@tivio/sdk-react'
272
+
273
+ // Log in
274
+
275
+ // Payload is specific per customer
276
+ // A common use-case is sending an auth token inside the payload, which Tivio can use to verify the user
277
+ await setUser('userId', { token: 'xxx'})
278
+
279
+ // Log out
280
+ await setUser(null)
281
+ ```
282
+
283
+ ## Player
284
+
285
+ You can choose whether you will use complete player component provided by Tivio or you will wrap your existing player
286
+ with the Tivio Player Wrapper.
287
+
288
+ ### Tivio Player component
289
+
290
+ ```javascript
291
+ import { useTivioData } from '@tivio/sdk-react'
292
+
293
+ const PlayerExample = () => {
294
+ const bundle = useTivioData()
295
+
296
+ if (!bundle?.components?.WebPlayer) {
297
+ return <p>Loading...</p>
298
+ }
299
+
300
+ return (
301
+ <>
302
+ <div
303
+ style={{
304
+ height: 720,
305
+ width: 1280,
306
+ }}
307
+ >
308
+ <bundle.components.WebPlayer
309
+ id="player1"
310
+ className="web-player"
311
+ source="/videos/xxxxxxxxxxxxxxxxxxxx" // dynamically change this based on video you want to play
312
+ />
313
+ </div>
314
+ </>
315
+ )
316
+ }
317
+ ```
318
+
319
+ ### Player wrapper
320
+
321
+ Player wrapper is the way how you can enhance your video player with Tivio features, such Tivio Ads. In order to start
322
+ using Tivio player wrapper, wrap your player methods with PlayerWrapper, start using PlayerWrapper's methods
323
+ instead of them to control your playback and start sending player events to Tivio PlayerWrapper.
324
+
325
+ #### Wrap your player methods with Tivio player wrapper
326
+
327
+ ```javascript
328
+ import { useTivioReadyData } from '@tivio/sdk-react'
329
+
330
+ function CustomPlayer() {
331
+ const tivioData = useTivioReadyData()
332
+
333
+ useEffect(() => {
334
+ if (tivioData) {
335
+ // If your app uses multiple player instances, use different Tivio player wrapper for each
336
+ // distinguished by playerWrapperId
337
+ const playerWrapper = tivio.getPlayerWrapper({ playerWrapperId: 'PLAYER_1' })
338
+
339
+ // Pass your player methods to Tivio player wrapper
340
+ playerWrapper.register({
341
+ play: () => {
342
+ // Un-pause your player
343
+ },
344
+ pause: () => {
345
+ // Pause your player
346
+ },
347
+ seekTo: (ms: number) => {
348
+ // Seek to position in milliseconds using your player
349
+ },
350
+ setSource: (videoSource: InputSource) => {
351
+ // Send this video source to your player to load it
352
+ },
353
+ })
354
+ }
355
+ }, [tivioData])
356
+ }
357
+ ```
358
+
359
+ #### Start using Tivio player wrapper methods to control playback
360
+
361
+ ```javascript
362
+ // Channel source metadata, such as channel name, epg start and epg end are necessary
363
+ // for TV ad segment detection and application of ad strategies
364
+ const source = new ChannelSource(
365
+ 'https://channel_prima_hd.m3u8',
366
+ {
367
+ // here put any additional metadata, for your use.
368
+ // This object will not be touched by Tivio
369
+ },
370
+ // channel name
371
+ // can also be prima hd, prima_hd, prima, Prima, PRIMA, etc.
372
+ // we will normalize it to snake case and add '_hd' if necessary
373
+ 'Prima HD',
374
+ // program name
375
+ 'Dr. House',
376
+ // description (optional)
377
+ 'Episode about Dr. House being awesome',
378
+ // EPG start
379
+ new Date('2021-12-10T12:00:00'),
380
+ // EPG end
381
+ new Date('2021-12-10T13:40:00'),
382
+ )
383
+
384
+ // Send source to player
385
+ playerWrapper.onSourceChanged(source)
386
+
387
+ // Un-pause player
388
+ playerWrapper.play()
389
+
390
+ // Pause player
391
+ playerWrapper.pause()
392
+ }
393
+ ```
394
+
395
+ #### Start reporting player events to Tivio
396
+
397
+ ```javascript
398
+ // Report that source is playing
399
+ playerWrapper.onStateChanged('playing')
400
+
401
+ // Report that source is paused
402
+ playerWrapper.onStateChanged('paused')
403
+
404
+ // Report that source stopped playing
405
+ playerWrapper.onPlaybackEnded()
406
+ playerWrapper.onStateChanged('idle')
407
+
408
+ // Report video progress
409
+ playerWrapper.onTimeChanged(ms)
410
+ }
411
+ ```
412
+
413
+ #### Start reporting playback-related errors to Tivio
414
+
415
+ ```javascript
416
+ // Report that video failed to load (e.g. due to a wrong URI)
417
+ playerWrapper.onLoadError(new Error('video failed to load'))
418
+
419
+ // Report that video failed during playback (e.g. due to bad connection, corrupted chunks of stream video etc.)
420
+ // This type of error may be auto-recoverable
421
+ playerWrapper.onError(new Error('playback error'))
422
+ }
423
+ ```
424
+
425
+ ## Data hooks
426
+
427
+ ### useUser hook
428
+ Gets information about current user.
429
+
430
+ ```ts
431
+ useUser: () => {
432
+ user: User | null
433
+ error: string | null
434
+ isInitialized: boolean
435
+ }
436
+ ```
437
+
438
+ ### useRowsInScreen hook
439
+ Gets array of Rows objects of specific screen and subscribes to its changes.
440
+
441
+ ```ts
442
+ /**
443
+ * Use rows in screen
444
+ * @param screenId - screen id (from studio.tiv.io)
445
+ * @param options - subscription options
446
+ */
447
+ useRowsInScreen: (screenId: string, options?: PaginationOptions) => {
448
+ pagination: PaginationInterface<Row> | null
449
+ error: Error | null
450
+ }
451
+ ```
452
+
453
+ ### useItemsInRow hook
454
+ Gets array of row items objects of specific row and subscribes to its changes.
455
+
456
+ ```ts
457
+ /**
458
+ * Use row items
459
+ * @param rowId - row ID
460
+ * @param options - subscription options
461
+ */
462
+ useItemsInRow: (rowId: string, options?: SubscribeToItemsInRowOptions) => {
463
+ pagination: PaginationInterface<ItemsInRow> | null
464
+ error: Error | null
465
+ }
466
+ ```
467
+
468
+ ### useVideo hook
469
+
470
+ Gets Video object and subscribes to its changes.
471
+
472
+ ```ts
473
+ /**
474
+ * Use video
475
+ * @param videoId - video id
476
+ */
477
+ useVideo: (videoId: string) => {
478
+ error: string | null;
479
+ data: Video | null;
480
+ }
481
+ ```
482
+
483
+ ### useTaggedVideos hook
484
+ Gets videos with given tag IDs.
485
+
486
+ ```ts
487
+ /**
488
+ * Use tagged videos
489
+ * @param tagIds - tag ids
490
+ * @param options - subscription options
491
+ * @public
492
+ */
493
+ useTaggedVideos: (tagIds: string[], options?: SubscribeToItemsInRowOptions) => {
494
+ pagination: PaginationInterface<Video> | null
495
+ error: Error | null
496
+ }
497
+ ```
package/dist/index.d.ts CHANGED
@@ -2450,7 +2450,6 @@ export declare type TivioHooks = {
2450
2450
  applyInviteCode: (code: string) => void;
2451
2451
  inviteCodeReset: () => void;
2452
2452
  };
2453
- useChannelSource: UseChannelSource;
2454
2453
  };
2455
2454
 
2456
2455
  /**
@@ -2510,6 +2509,7 @@ export declare type TivioInternalHooks = {
2510
2509
  loading: boolean;
2511
2510
  });
2512
2511
  useTvChannel: UseTvChannel;
2512
+ useChannelSource: UseChannelSource;
2513
2513
  useUser: () => {
2514
2514
  user: User | null;
2515
2515
  error: string | null;