@playkit-js/playkit-js-providers 2.41.0-canary.0-2452bbc → 2.41.0-canary.0-3d6d02a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/analytics-service/package.json +6 -0
  2. package/bookmark-service/package.json +6 -0
  3. package/dist/analytics-service.d.ts +160 -0
  4. package/dist/bookmark-service.d.ts +157 -0
  5. package/dist/ott-provider.d.ts +545 -0
  6. package/dist/{index.d.ts → ovp-provider.d.ts} +102 -120
  7. package/dist/playkit-analytics-service.js +1 -1
  8. package/dist/playkit-analytics-service.js.map +1 -1
  9. package/dist/playkit-bookmark-service.js +1 -1
  10. package/dist/playkit-bookmark-service.js.map +1 -1
  11. package/dist/playkit-ott-provider.js +1 -1
  12. package/dist/playkit-ott-provider.js.map +1 -1
  13. package/dist/playkit-ovp-provider.js +1 -1
  14. package/dist/playkit-ovp-provider.js.map +1 -1
  15. package/dist/playkit-stats-service.js +1 -1
  16. package/dist/playkit-stats-service.js.map +1 -1
  17. package/dist/stats-service.d.ts +159 -0
  18. package/dist/tsdoc-metadata.json +1 -1
  19. package/dist/types.d.ts +391 -0
  20. package/ott-provider/package.json +6 -0
  21. package/ovp-provider/package.json +6 -0
  22. package/package.json +29 -21
  23. package/src/entities/document-source.ts +31 -0
  24. package/src/entities/media-entry.ts +2 -1
  25. package/src/entities/media-sources.ts +6 -1
  26. package/src/k-provider/common/base-provider.ts +14 -3
  27. package/src/k-provider/ott/provider.ts +1 -0
  28. package/src/k-provider/ovp/loaders/media-entry-loader.ts +4 -4
  29. package/src/k-provider/ovp/provider-parser.ts +22 -2
  30. package/src/k-provider/ovp/provider.ts +9 -5
  31. package/src/k-provider/ovp/regex-action-handler.ts +51 -44
  32. package/src/k-provider/ovp/response-types/kaltura-media-entries.ts +1 -7
  33. package/src/k-provider/ovp/services/base-entry-service.ts +2 -2
  34. package/src/types/index.ts +0 -8
  35. package/src/types/media-config-sources.ts +2 -0
  36. package/src/types/media-sources.ts +2 -0
  37. package/src/types/provider-options.ts +1 -0
  38. package/stats-service/package.json +6 -0
  39. package/types/package.json +5 -0
  40. package/playkit-analytics-service/package.json +0 -5
  41. package/playkit-bookmark-service/package.json +0 -5
  42. package/playkit-ott-provider/package.json +0 -5
  43. package/playkit-ovp-provider/package.json +0 -5
  44. package/playkit-stats-service/package.json +0 -5
@@ -21,6 +21,7 @@ import {KalturaAccessControlMessage} from '../common/response-types/kaltura-acce
21
21
  import type {OVPMediaEntryLoaderResponse} from './loaders/media-entry-loader';
22
22
  import {ExternalCaptionsBuilder} from './external-captions-builder';
23
23
  import {ImageSource} from '../../entities/image-source';
24
+ import {DocumentSource} from '../../entities/document-source';
24
25
 
25
26
  class OVPProviderParser {
26
27
  private static _logger = getLogger('OVPProviderParser');
@@ -44,7 +45,7 @@ class OVPProviderParser {
44
45
  const kalturaSources = playbackContext.sources;
45
46
 
46
47
  mediaEntry.sources = OVPProviderParser._getParsedSources(kalturaSources, ks, partnerId, uiConfId, entry, playbackContext);
47
- OVPProviderParser._fillBaseData(mediaEntry, entry, metadataList);
48
+ OVPProviderParser._fillBaseData(mediaEntry, entry, metadataList, playbackContext);
48
49
  if (mediaEntry.type !== MediaEntry.Type.LIVE && OVPConfiguration.get().useApiCaptions && playbackContext.data.playbackCaptions) {
49
50
  mediaEntry.sources.captions = ExternalCaptionsBuilder.createConfig(playbackContext.data.playbackCaptions, ks);
50
51
  }
@@ -150,7 +151,7 @@ class OVPProviderParser {
150
151
  }
151
152
  }
152
153
 
153
- private static _fillBaseData(mediaEntry: MediaEntry, entry: KalturaMediaEntry, metadataList?: KalturaMetadataListResponse): MediaEntry {
154
+ private static _fillBaseData(mediaEntry: MediaEntry, entry: KalturaMediaEntry, metadataList?: KalturaMetadataListResponse, playbackContext?: any): MediaEntry {
154
155
  mediaEntry.poster = entry.poster;
155
156
  mediaEntry.id = entry.id;
156
157
  mediaEntry.duration = entry.duration;
@@ -173,6 +174,16 @@ class OVPProviderParser {
173
174
  mediaEntry.dvrStatus = entry.dvrStatus;
174
175
  }
175
176
 
177
+ if (playbackContext &&
178
+ playbackContext.flavorAssets[0] &&
179
+ playbackContext.flavorAssets[0].width && playbackContext.flavorAssets[0].height) {
180
+
181
+ const {height, width} = playbackContext.flavorAssets[0];
182
+ mediaEntry.metadata.heightRatio = +Number(height / width).toFixed(2);
183
+ } else {
184
+ mediaEntry.metadata.heightRatio = 1.78;
185
+ }
186
+
176
187
  return mediaEntry;
177
188
  }
178
189
 
@@ -194,6 +205,9 @@ class OVPProviderParser {
194
205
  case KalturaMediaEntry.EntryType.LIVE_CHANNEL.value:
195
206
  type = MediaEntry.Type.LIVE;
196
207
  break;
208
+ case KalturaMediaEntry.EntryType.DOCUMENT.value:
209
+ type = MediaEntry.Type.DOCUMENT;
210
+ break;
197
211
  default:
198
212
  type = MediaEntry.Type.UNKNOWN;
199
213
  }
@@ -246,6 +260,10 @@ class OVPProviderParser {
246
260
  sources.image.push(new ImageSource(entry));
247
261
  };
248
262
 
263
+ const parseDocumentSources = (): void => {
264
+ sources.document.push(new DocumentSource(entry));
265
+ };
266
+
249
267
  const parseExternalMedia = (): void => {
250
268
  const mediaSource = new MediaSource();
251
269
  mediaSource.mimetype = 'video/youtube';
@@ -258,6 +276,8 @@ class OVPProviderParser {
258
276
  parseExternalMedia();
259
277
  } else if (entry.entryType === KalturaMediaEntry.MediaType.IMAGE.value) {
260
278
  parseImageSources();
279
+ } else if (entry.type === KalturaMediaEntry.EntryType.DOCUMENT.value) {
280
+ parseDocumentSources();
261
281
  } else if (kalturaSources && kalturaSources.length > 0) {
262
282
  parseAdaptiveSources();
263
283
  parseProgressiveSources();
@@ -18,8 +18,10 @@ import {
18
18
  ProviderFilterOptionsObject,
19
19
  ProviderMediaConfigObject,
20
20
  ProviderMediaConfigSourcesObject,
21
- ProviderOptionsObject, ProviderPlaylistInfoObject,
22
- ProviderPlaylistObject, RequestLoader
21
+ ProviderOptionsObject,
22
+ ProviderPlaylistInfoObject,
23
+ ProviderPlaylistObject,
24
+ RequestLoader
23
25
  } from '../../types';
24
26
 
25
27
  export default class OVPProvider extends BaseProvider<OVPProviderMediaInfoObject> {
@@ -65,7 +67,7 @@ export default class OVPProvider extends BaseProvider<OVPProviderMediaInfoObject
65
67
  this._dataLoader.add(OVPSessionLoader, {widgetId: this.widgetId});
66
68
  }
67
69
  const redirectFromEntryId = this._getEntryRedirectFilter(mediaInfo);
68
- this._dataLoader.add(OVPMediaEntryLoader, {entryId, ks, redirectFromEntryId, referenceId});
70
+ this._dataLoader.add(OVPMediaEntryLoader, {entryId, ks, redirectFromEntryId, referenceId, referrer: this._referrer});
69
71
  return this._dataLoader.fetchData().then(
70
72
  response => {
71
73
  try {
@@ -85,7 +87,7 @@ export default class OVPProvider extends BaseProvider<OVPProviderMediaInfoObject
85
87
  });
86
88
  }
87
89
 
88
- public doRequest(loaders: Array<RequestLoader>, ks?: string): Promise<any> {
90
+ public doRequest(loaders: Array<RequestLoader>, ks?: string, requestsMustSucceed?: boolean): Promise<any> {
89
91
  const theKs: string = ks || this.ks;
90
92
  const dataLoader = new OVPDataLoaderManager(this.playerVersion, this.partnerId, theKs, this._networkRetryConfig);
91
93
 
@@ -98,7 +100,7 @@ export default class OVPProvider extends BaseProvider<OVPProviderMediaInfoObject
98
100
  // @ts-ignore
99
101
  dataLoader.add(loaderRequest.loader, loaderRequest.params, theKs || '{1:result:ks}');
100
102
  });
101
- return dataLoader.fetchData().then(
103
+ return dataLoader.fetchData(requestsMustSucceed).then(
102
104
  response => {
103
105
  try {
104
106
  resolve(response);
@@ -319,6 +321,7 @@ export default class OVPProvider extends BaseProvider<OVPProviderMediaInfoObject
319
321
  dash: [],
320
322
  progressive: [],
321
323
  image: [],
324
+ document: [],
322
325
  id: '',
323
326
  duration: 0,
324
327
  type: MediaEntry.Type.UNKNOWN,
@@ -340,6 +343,7 @@ export default class OVPProvider extends BaseProvider<OVPProviderMediaInfoObject
340
343
  sourcesObject.dash = mediaSources.dash;
341
344
  sourcesObject.progressive = mediaSources.progressive;
342
345
  sourcesObject.image = mediaSources.image;
346
+ sourcesObject.document = mediaSources.document;
343
347
  sourcesObject.id = mediaEntry.id;
344
348
  sourcesObject.duration = mediaEntry.duration;
345
349
  sourcesObject.type = mediaEntry.type;
@@ -27,34 +27,39 @@ class RegexActionHandler {
27
27
  }
28
28
 
29
29
  /**
30
- * Ping the ECDN url to check if alive
31
- * @function _pingECDNUrl
30
+ * Ping the ECDN url and replace the host urls if needed
31
+ * @function _pingECDNAndReplaceHostUrls
32
+ * @param {ProviderMediaConfigObject} mediaConfig - The media config
32
33
  * @param {KalturaAccessControlModifyRequestHostRegexAction} regexAction - The regex action
33
34
  * @param {string} cdnUrl - The CDN url
34
- * @returns {Promise<boolean>} - Whether the media config sources urls should be modified or not
35
+ * @returns {Promise<ProviderMediaConfigObject>} - The media config with old or modified urls
35
36
  * @static
36
37
  * @private
37
38
  */
38
- private static async _isECDNUrlAlive(regexAction: KalturaAccessControlModifyRequestHostRegexAction, cdnUrl: string): Promise<boolean> {
39
- const urlPing = cdnUrl + '/api_v3/service/system/action/ping/format/1';
40
- const req = new XMLHttpRequest();
41
- req.open('GET', urlPing);
42
- req.timeout = regexAction.checkAliveTimeoutMs;
43
- req.onreadystatechange = (): boolean => {
44
- if (req.readyState === 4) {
45
- if (req.status === 200) {
46
- return true;
39
+ private static _pingECDNAndReplaceHostUrls(
40
+ mediaConfig: ProviderMediaConfigObject,
41
+ regexAction: KalturaAccessControlModifyRequestHostRegexAction,
42
+ cdnUrl: string
43
+ ): Promise<ProviderMediaConfigObject> {
44
+ return new Promise(resolve => {
45
+ const urlPing = cdnUrl + '/api_v3/service/system/action/ping/format/1';
46
+ const req = new XMLHttpRequest();
47
+ req.open('GET', urlPing);
48
+ req.timeout = regexAction.checkAliveTimeoutMs;
49
+ req.onreadystatechange = ():void => {
50
+ if (req.readyState === 4) {
51
+ if (req.status === 200) {
52
+ RegexActionHandler._replaceHostUrls(mediaConfig, regexAction);
53
+ }
54
+ resolve(mediaConfig);
47
55
  }
48
- return false;
49
- }
50
- return false;
51
- };
52
- req.ontimeout = (): boolean => {
53
- RegexActionHandler._logger.warn(`Got timeout while pinging the ECDN url. the ping url: ${urlPing}`);
54
- return false;
55
- };
56
- req.send();
57
- return false;
56
+ };
57
+ req.ontimeout = ():void => {
58
+ RegexActionHandler._logger.warn(`Got timeout while pinging the ECDN url. the ping url: ${urlPing}`);
59
+ resolve(mediaConfig);
60
+ };
61
+ req.send();
62
+ });
58
63
  }
59
64
 
60
65
  /**
@@ -62,31 +67,33 @@ class RegexActionHandler {
62
67
  * @function handleRegexAction
63
68
  * @param {ProviderMediaConfigObject} mediaConfig - The media config
64
69
  * @param {Map<string, Function>} rawResponse - The raw response data from backend
65
- * @returns {Promise<ProviderMediaConfigObject>} - The media config with old or modified urls
70
+ * @returns {ProviderMediaConfigObject} - The media config with old or modified urls
66
71
  * @static
67
72
  */
68
- public static async handleRegexAction(mediaConfig: ProviderMediaConfigObject, rawResponse: Map<string, ILoader>): Promise<ProviderMediaConfigObject> {
69
- const cdnUrl = OVPConfiguration.get().cdnUrl;
70
- const regexAction = RegexActionHandler._extractRegexActionFromData(rawResponse);
71
- const regExp = RegexActionHandler._getRegExp(regexAction);
73
+ public static handleRegexAction(mediaConfig: ProviderMediaConfigObject, rawResponse: Map<string, ILoader>): Promise<ProviderMediaConfigObject> {
74
+ return new Promise(resolve => {
75
+ const cdnUrl = OVPConfiguration.get().cdnUrl;
76
+ const regexAction = RegexActionHandler._extractRegexActionFromData(rawResponse);
77
+ const regExp = RegexActionHandler._getRegExp(regexAction);
72
78
 
73
- if (
74
- cdnUrl &&
75
- regexAction &&
76
- regExp &&
77
- cdnUrl.match(regExp) &&
78
- // we need to make the replacement in all cases except for when the checkAliveTimeoutMs > 0 && the ping has failed
79
- !(
80
- regexAction.checkAliveTimeoutMs > 0 &&
81
- !(await RegexActionHandler._isECDNUrlAlive(regexAction, cdnUrl.replace(regExp, regexAction.replacement)))
82
- )
83
- ) {
84
- RegexActionHandler._replaceHostUrls(mediaConfig, regexAction);
85
- return mediaConfig;
86
- }
87
-
88
- RegexActionHandler._logger.debug('exiting handleRegexAction - not applying regex action.');
89
- return mediaConfig;
79
+ if(
80
+ cdnUrl &&
81
+ regexAction &&
82
+ regExp &&
83
+ cdnUrl.match(regExp)
84
+ ) {
85
+ if (regexAction.checkAliveTimeoutMs > 0) {
86
+ RegexActionHandler._logger.debug('executing ping request...');
87
+ RegexActionHandler._pingECDNAndReplaceHostUrls(mediaConfig, regexAction, cdnUrl.replace(regExp, regexAction.replacement)).then(resolve);
88
+ } else {
89
+ RegexActionHandler._replaceHostUrls(mediaConfig, regexAction);
90
+ resolve(mediaConfig);
91
+ }
92
+ } else {
93
+ RegexActionHandler._logger.debug('exiting handleRegexAction - not applying regex action.');
94
+ resolve(mediaConfig);
95
+ }
96
+ });
90
97
  }
91
98
 
92
99
  /**
@@ -16,13 +16,7 @@ export class KalturaMediaEntries extends ServiceResult {
16
16
  super(responseObj);
17
17
  if (!this.hasError) {
18
18
  this.entries = [];
19
- responseObj.map(entry => {
20
- const kalturaMediaEntry = new KalturaMediaEntry(entry);
21
- if (kalturaMediaEntry.type !== KalturaMediaEntry.EntryType.DOCUMENT.value) {
22
- // filter out documents
23
- this.entries.push(kalturaMediaEntry);
24
- }
25
- });
19
+ responseObj.map(entry => this.entries.push(new KalturaMediaEntry(entry)));
26
20
  }
27
21
  }
28
22
  }
@@ -14,7 +14,7 @@ export default class OVPBaseEntryService extends OVPService {
14
14
  * @returns {RequestBuilder} The request builder
15
15
  * @static
16
16
  */
17
- public static getPlaybackContext(serviceUrl: string, ks: string, serviceEntryId: string): RequestBuilder {
17
+ public static getPlaybackContext(serviceUrl: string, ks: string, serviceEntryId: string, referrer?: string): RequestBuilder {
18
18
  const headers: Map<string, string> = new Map();
19
19
  headers.set('Content-Type', 'application/json');
20
20
  const request = new RequestBuilder(headers);
@@ -23,7 +23,7 @@ export default class OVPBaseEntryService extends OVPService {
23
23
  request.method = 'POST';
24
24
  request.url = request.getUrl(serviceUrl);
25
25
  request.tag = 'baseEntry-getPlaybackContext';
26
- const contextDataParams = {objectType: 'KalturaContextDataParams', flavorTags: 'all'};
26
+ const contextDataParams = {objectType: 'KalturaContextDataParams', flavorTags: 'all', referrer};
27
27
  request.params = {entryId: serviceEntryId, ks: ks, contextDataParams: contextDataParams};
28
28
  return request;
29
29
  }
@@ -24,11 +24,3 @@ export * from './playlist-info'
24
24
  export * from './provider-options'
25
25
  export * from './request-loader'
26
26
  export * from './poster'
27
-
28
- export { ProviderParser, RequestBuilder, ResponseTypes} from '../k-provider/ovp'
29
- export { ContextType, MediaType} from '../k-provider/ott'
30
- import {BaseProvider} from '../k-provider/common/base-provider'
31
- import OTTProvider from '../k-provider/ott/provider'
32
- import OVPProvider from '../k-provider/ovp/provider'
33
- export {OTTProvider, OVPProvider, OTTProvider as Provider, BaseProvider}
34
- export type IProvider = OTTProvider | OVPProvider;
@@ -1,4 +1,5 @@
1
1
  import {ImageSource} from '../entities/image-source';
2
+ import {DocumentSource} from '../entities/document-source';
2
3
  import {ProviderMediaConfigMetadataObject} from './media-config-metadata';
3
4
  import {PKExternalCaptionObject} from './external-caption-object';
4
5
  import {ProviderMediaSourceObject} from './media-source';
@@ -8,6 +9,7 @@ export type ProviderMediaConfigSourcesObject = {
8
9
  hls: Array<ProviderMediaSourceObject>;
9
10
  progressive: Array<ProviderMediaSourceObject>;
10
11
  image: Array<ImageSource>;
12
+ document: Array<DocumentSource>;
11
13
  duration?: number;
12
14
  type: string;
13
15
  id?: string;
@@ -1,4 +1,5 @@
1
1
  import {ImageSource} from '../entities/image-source';
2
+ import {DocumentSource} from '../entities/document-source';
2
3
  import {ProviderMediaSourceObject} from './media-source';
3
4
  import {PKExternalCaptionObject} from './external-caption-object';
4
5
 
@@ -7,5 +8,6 @@ export type ProviderMediaSourcesObject = {
7
8
  dash: Array<ProviderMediaSourceObject>;
8
9
  hls: Array<ProviderMediaSourceObject>;
9
10
  image: Array<ImageSource>;
11
+ document: Array<DocumentSource>;
10
12
  captions?: Array<PKExternalCaptionObject>;
11
13
  };
@@ -14,4 +14,5 @@ export type ProviderOptionsObject = {
14
14
  filterOptions?: ProviderFilterOptionsObject;
15
15
  ignoreServerConfig?: boolean;
16
16
  loadThumbnailWithKs?: boolean;
17
+ referrer?: string;
17
18
  };
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "@playkit-js/playkit-js-providers/stats-service",
3
+ "main": "../dist/playkit-stats-service.js",
4
+ "types": "../dist/stats-service.d.ts",
5
+ "sideEffects": false
6
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "@playkit-js/playkit-js-providers/types",
3
+ "types": "../dist/types.d.ts",
4
+ "sideEffects": false
5
+ }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@playkit-js/playkit-js-providers/playkit-analytics-service",
3
- "main": "../dist/playkit-analytics-service.js",
4
- "sideEffects": false
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@playkit-js/playkit-js-providers/playkit-bookmark-service",
3
- "main": "../dist/playkit-bookmark-service.js",
4
- "sideEffects": false
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@playkit-js/playkit-js-providers/playkit-ott-provider",
3
- "main": "../dist/playkit-ott-provider.js",
4
- "sideEffects": false
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@playkit-js/playkit-js-providers/playkit-ovp-provider",
3
- "main": "../dist/playkit-ovp-provider.js",
4
- "sideEffects": false
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@playkit-js/playkit-js-providers/playkit-stats-service",
3
- "main": "../dist/playkit-stats-service.js",
4
- "sideEffects": false
5
- }