@playkit-js/playkit-js-providers 2.39.1 → 2.39.2

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 (130) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/playkit-analytics-service.js +2 -0
  3. package/dist/playkit-analytics-service.js.map +1 -0
  4. package/dist/playkit-bookmark-service.js +2 -0
  5. package/dist/playkit-bookmark-service.js.map +1 -0
  6. package/dist/playkit-ott-provider.js +2 -0
  7. package/dist/playkit-ott-provider.js.map +1 -0
  8. package/dist/playkit-ovp-provider.js +2 -0
  9. package/dist/playkit-ovp-provider.js.map +1 -0
  10. package/dist/playkit-stats-service.js +2 -0
  11. package/dist/playkit-stats-service.js.map +1 -0
  12. package/package.json +1 -1
  13. package/.babelrc +0 -22
  14. package/.editorconfig +0 -10
  15. package/.eslintignore +0 -3
  16. package/.eslintrc.json +0 -26
  17. package/.flowconfig +0 -5
  18. package/.github/ISSUE_TEMPLATE.md +0 -28
  19. package/.github/PULL_REQUEST_TEMPLATE.md +0 -12
  20. package/.github/workflows/run_canary_full_flow.yaml +0 -28
  21. package/.github/workflows/run_prod.yaml +0 -24
  22. package/.github/workflows/run_tests.yaml +0 -24
  23. package/.prettierignore +0 -7
  24. package/.prettierrc +0 -12
  25. package/docs/configuration.md +0 -225
  26. package/karma.conf.js +0 -42
  27. package/src/entities/bumper.js +0 -23
  28. package/src/entities/drm.js +0 -46
  29. package/src/entities/entry-list.js +0 -15
  30. package/src/entities/image-source.js +0 -37
  31. package/src/entities/media-entry.js +0 -96
  32. package/src/entities/media-format.js +0 -46
  33. package/src/entities/media-source.js +0 -70
  34. package/src/entities/media-sources.js +0 -79
  35. package/src/entities/playlist.js +0 -37
  36. package/src/index.html +0 -11
  37. package/src/k-provider/common/base-provider-parser.js +0 -0
  38. package/src/k-provider/common/base-provider.js +0 -110
  39. package/src/k-provider/common/base-service-result.js +0 -57
  40. package/src/k-provider/common/data-loader-manager.js +0 -115
  41. package/src/k-provider/common/multi-request-builder.js +0 -112
  42. package/src/k-provider/common/response-types/kaltura-access-control-message.js +0 -22
  43. package/src/k-provider/common/response-types/kaltura-drm-playback-plugin-data.js +0 -39
  44. package/src/k-provider/ott/config.js +0 -22
  45. package/src/k-provider/ott/index.js +0 -15
  46. package/src/k-provider/ott/loaders/asset-list-loader.js +0 -68
  47. package/src/k-provider/ott/loaders/asset-loader.js +0 -69
  48. package/src/k-provider/ott/loaders/data-loader-manager.js +0 -15
  49. package/src/k-provider/ott/loaders/session-loader.js +0 -62
  50. package/src/k-provider/ott/provider-parser.js +0 -282
  51. package/src/k-provider/ott/provider.js +0 -242
  52. package/src/k-provider/ott/response-types/kaltura-asset.js +0 -79
  53. package/src/k-provider/ott/response-types/kaltura-bumper-playback-plugin-data.js +0 -28
  54. package/src/k-provider/ott/response-types/kaltura-playback-context.js +0 -74
  55. package/src/k-provider/ott/response-types/kaltura-playback-source.js +0 -63
  56. package/src/k-provider/ott/response-types/kaltura-rule-action.js +0 -26
  57. package/src/k-provider/ott/services/asset-service.js +0 -50
  58. package/src/k-provider/ott/services/bookmark/bookmark-service.js +0 -49
  59. package/src/k-provider/ott/services/bookmark/index.js +0 -12
  60. package/src/k-provider/ott/services/ott-service.js +0 -34
  61. package/src/k-provider/ott/services/user-service.js +0 -32
  62. package/src/k-provider/ovp/config.js +0 -28
  63. package/src/k-provider/ovp/external-captions-builder.js +0 -38
  64. package/src/k-provider/ovp/index.js +0 -13
  65. package/src/k-provider/ovp/loaders/data-loader-manager.js +0 -17
  66. package/src/k-provider/ovp/loaders/entry-list-loader.js +0 -69
  67. package/src/k-provider/ovp/loaders/media-entry-loader.js +0 -84
  68. package/src/k-provider/ovp/loaders/playlist-loader.js +0 -66
  69. package/src/k-provider/ovp/loaders/session-loader.js +0 -62
  70. package/src/k-provider/ovp/loaders/ui-config-loader.js +0 -71
  71. package/src/k-provider/ovp/play-source-url-builder.js +0 -60
  72. package/src/k-provider/ovp/provider-parser.js +0 -451
  73. package/src/k-provider/ovp/provider.js +0 -344
  74. package/src/k-provider/ovp/regex-action-handler.js +0 -147
  75. package/src/k-provider/ovp/request-params/base-entry-response-profile.js +0 -29
  76. package/src/k-provider/ovp/response-types/index.js +0 -18
  77. package/src/k-provider/ovp/response-types/kaltura-access-control-modify-request-host-regex-action.js +0 -36
  78. package/src/k-provider/ovp/response-types/kaltura-base-entry-list-response.js +0 -31
  79. package/src/k-provider/ovp/response-types/kaltura-bumper.js +0 -26
  80. package/src/k-provider/ovp/response-types/kaltura-flavor-asset.js +0 -109
  81. package/src/k-provider/ovp/response-types/kaltura-media-entries.js +0 -23
  82. package/src/k-provider/ovp/response-types/kaltura-media-entry.js +0 -141
  83. package/src/k-provider/ovp/response-types/kaltura-metadata-list-response.js +0 -23
  84. package/src/k-provider/ovp/response-types/kaltura-metadata.js +0 -51
  85. package/src/k-provider/ovp/response-types/kaltura-playback-context.js +0 -96
  86. package/src/k-provider/ovp/response-types/kaltura-playback-source.js +0 -90
  87. package/src/k-provider/ovp/response-types/kaltura-playlist.js +0 -35
  88. package/src/k-provider/ovp/response-types/kaltura-rule-action.js +0 -28
  89. package/src/k-provider/ovp/response-types/kaltura-ui-conf-response.js +0 -90
  90. package/src/k-provider/ovp/services/analytics/analytics-service.js +0 -57
  91. package/src/k-provider/ovp/services/analytics/index.js +0 -12
  92. package/src/k-provider/ovp/services/base-entry-service.js +0 -76
  93. package/src/k-provider/ovp/services/meta-data-service.js +0 -30
  94. package/src/k-provider/ovp/services/ovp-service.js +0 -33
  95. package/src/k-provider/ovp/services/playlist-service.js +0 -63
  96. package/src/k-provider/ovp/services/session-service.js +0 -28
  97. package/src/k-provider/ovp/services/stats/index.js +0 -12
  98. package/src/k-provider/ovp/services/stats/stats-service.js +0 -33
  99. package/src/k-provider/ovp/services/ui-conf-service.js +0 -33
  100. package/src/util/clone.js +0 -23
  101. package/src/util/error/category.js +0 -12
  102. package/src/util/error/code.js +0 -79
  103. package/src/util/error/error.js +0 -48
  104. package/src/util/error/severity.js +0 -23
  105. package/src/util/logger.js +0 -108
  106. package/src/util/param.js +0 -45
  107. package/src/util/request-builder.js +0 -187
  108. package/src/util/xml-parser.js +0 -40
  109. package/test/.eslintrc.json +0 -9
  110. package/test/setup/karma.js +0 -5
  111. package/test/setup/load-specs.js +0 -13
  112. package/test/setup/prepare-test-environment.js +0 -17
  113. package/test/src/k-provider/ott/be-data.js +0 -3306
  114. package/test/src/k-provider/ott/media-config-data.js +0 -793
  115. package/test/src/k-provider/ott/provider-parser.spec.js +0 -30
  116. package/test/src/k-provider/ott/provider.spec.js +0 -384
  117. package/test/src/k-provider/ott/services/bookmark-service.spec.js +0 -38
  118. package/test/src/k-provider/ovp/be-data.js +0 -3932
  119. package/test/src/k-provider/ovp/external-captions-builder.spec.js +0 -59
  120. package/test/src/k-provider/ovp/media-config-data.js +0 -1509
  121. package/test/src/k-provider/ovp/playback-sources-data.js +0 -229
  122. package/test/src/k-provider/ovp/provider-parser-data.js +0 -142
  123. package/test/src/k-provider/ovp/provider-parser.spec.js +0 -96
  124. package/test/src/k-provider/ovp/provider.spec.js +0 -1075
  125. package/test/src/k-provider/ovp/regex-action-handler-data.js +0 -794
  126. package/test/src/k-provider/ovp/regex-action-handler.spec.js +0 -93
  127. package/test/src/k-provider/ovp/services/analytics-service.spec.js +0 -62
  128. package/test/src/k-provider/ovp/services/stats-service.spec.js +0 -37
  129. package/test/src/util/param.spec.js +0 -23
  130. package/webpack.config.js +0 -85
@@ -1,96 +0,0 @@
1
- //@flow
2
- import MediaSources from './media-sources';
3
-
4
- export default class MediaEntry {
5
- static Type: {[type: string]: string} = {
6
- VOD: 'Vod',
7
- LIVE: 'Live',
8
- IMAGE: 'Image',
9
- AUDIO: 'Audio',
10
- UNKNOWN: 'Unknown'
11
- };
12
- static DvrStatus: {[type: string]: number} = {
13
- ON: 1,
14
- OFF: 0
15
- };
16
-
17
- /**
18
- * @member - entry id
19
- * @type {string}
20
- */
21
- id: string;
22
- /**
23
- * @member - entry name
24
- * @type {string}
25
- */
26
- name: string;
27
- /**
28
- * @member - entry sources
29
- * @type {MediaSources}
30
- */
31
- sources: MediaSources;
32
- /**
33
- * @member - entry duration
34
- * @type {number}
35
- */
36
- duration: number;
37
- /**
38
- * @member - entry type
39
- * @type {string}
40
- */
41
- type: string;
42
- /**
43
- * @member - entry metadata
44
- * @type {Object}
45
- */
46
- metadata: Object;
47
- /**
48
- * @member - DVR status
49
- * @type {number}
50
- */
51
- dvrStatus: number;
52
- /**
53
- * @member - media status
54
- * @type {number}
55
- */
56
- status: number;
57
- /**
58
- * @member - media poster
59
- * @type {string | Array<Object>}
60
- */
61
- poster: string | Array<Object>;
62
-
63
- /**
64
- * @member - assetReferenceType
65
- * @type {string }
66
- */
67
- assetReferenceType: string;
68
-
69
- /**
70
- * @constructor
71
- */
72
- constructor() {
73
- this.metadata = new Map();
74
- this.sources = new MediaSources();
75
- this.type = MediaEntry.Type.UNKNOWN;
76
- }
77
-
78
- /**
79
- * Convert class to native js object.
80
- * @returns {ProviderMediaEntryObject} - The json class object.
81
- */
82
- toJSON(): ProviderMediaEntryObject {
83
- return {
84
- id: this.id,
85
- name: this.name,
86
- sources: this.sources.toJSON(),
87
- duration: this.duration,
88
- dvrStatus: this.dvrStatus,
89
- status: this.status,
90
- metadata: this.metadata,
91
- type: this.type,
92
- poster: this.poster,
93
- assetReferenceType: this.assetReferenceType
94
- };
95
- }
96
- }
@@ -1,46 +0,0 @@
1
- //@flow
2
- export const MediaFormat: {[name: string]: ProviderMediaFormatType} = {
3
- DASH: {
4
- name: 'dash',
5
- mimeType: 'application/dash+xml',
6
- pathExt: 'mpd'
7
- },
8
- HLS: {
9
- name: 'hls',
10
- mimeType: 'application/x-mpegURL',
11
- pathExt: 'm3u8'
12
- },
13
- WVM: {
14
- name: 'wvm',
15
- mimeType: 'video/wvm',
16
- pathExt: 'wvm'
17
- },
18
- MP4: {
19
- name: 'mp4',
20
- mimeType: 'video/mp4',
21
- pathExt: 'mp4'
22
- },
23
- MP3: {
24
- name: 'mp3',
25
- mimeType: 'audio/mpeg',
26
- pathExt: 'mp3'
27
- }
28
- };
29
-
30
- export const SupportedStreamFormat: Map<string, ProviderMediaFormatType> = new Map([
31
- ['mpegdash', MediaFormat.DASH],
32
- ['applehttp', MediaFormat.HLS],
33
- ['url', MediaFormat.MP4]
34
- ]);
35
-
36
- /**
37
- * returns a boolean whether a source is progressive or not
38
- * @param {string} formatName - the format name
39
- * @returns {boolean} - if source is progressive or not
40
- */
41
- function isProgressiveSource(formatName: string): boolean {
42
- const sourceFormat = SupportedStreamFormat.get(formatName);
43
- return !!sourceFormat && sourceFormat.name === MediaFormat.MP4.name;
44
- }
45
-
46
- export {isProgressiveSource};
@@ -1,70 +0,0 @@
1
- //@flow
2
- import Drm from './drm';
3
-
4
- export default class MediaSource {
5
- /**
6
- * @member - media source id
7
- * @type {string}
8
- */
9
- id: string;
10
- /**
11
- * @member - media source url
12
- * @type {string}
13
- */
14
- url: string;
15
- /**
16
- * @member - media source mimetype
17
- * @type {string}
18
- */
19
- mimetype: string;
20
- /**
21
- * @member - media source drm data
22
- * @type {Array<Drm>}
23
- */
24
- drmData: Array<Drm>;
25
- /**
26
- * @member - media source bandwidth
27
- * @type {number}
28
- */
29
- bandwidth: number;
30
- /**
31
- * @member - media source width
32
- * @type {number}
33
- */
34
- width: number;
35
- /**
36
- * @member - media source height
37
- * @type {number}
38
- */
39
- height: number;
40
- /**
41
- * @member - media source label
42
- * @type {string}
43
- */
44
- label: string;
45
-
46
- /**
47
- * Convert class to native js object.
48
- * @returns {ProviderMediaSourceObject} - The json class object.
49
- */
50
- toJSON(): ProviderMediaSourceObject {
51
- const response: ProviderMediaSourceObject = {
52
- id: this.id,
53
- url: this.url,
54
- mimetype: this.mimetype
55
- };
56
- if (this.bandwidth) response.bandwidth = this.bandwidth;
57
- if (this.width) response.width = this.width;
58
- if (this.height) response.height = this.height;
59
- if (this.label) response.label = this.label;
60
- if (this.drmData && this.drmData.length > 0) {
61
- response.drmData = [];
62
- this.drmData.forEach(d => {
63
- if (Array.isArray(response.drmData)) {
64
- response.drmData.push(d.toJSON());
65
- }
66
- });
67
- }
68
- return response;
69
- }
70
- }
@@ -1,79 +0,0 @@
1
- // @flow
2
- import MediaSource from './media-source';
3
- import {MediaFormat} from './media-format';
4
- import ImageSource from './image-source';
5
-
6
- export default class MediaSources {
7
- /**
8
- * Progressive download media sources container.
9
- * @type {Array<MediaSource>}
10
- * @public
11
- */
12
- progressive: Array<MediaSource>;
13
- /**
14
- * Dash media sources container.
15
- * @type {Array<MediaSource>}
16
- * @public
17
- */
18
- dash: Array<MediaSource>;
19
- /**
20
- * Hls media sources container.
21
- * @type {Array<MediaSource>}
22
- * @public
23
- */
24
- hls: Array<MediaSource>;
25
- image: Array<ImageSource>;
26
- captions: Array<PKExternalCaptionObject>;
27
-
28
- /**
29
- * @constructor
30
- */
31
- constructor() {
32
- this.progressive = [];
33
- this.dash = [];
34
- this.hls = [];
35
- this.image = [];
36
- }
37
-
38
- /**
39
- * Maps the source to one of the containers according to his media format.
40
- * @param {MediaSource} source - The source to add to one of the containers.
41
- * @param {MediaFormat} mediaFormat - The media format of the source.
42
- * @returns {void}
43
- */
44
- map(source: MediaSource, mediaFormat: ?ProviderMediaFormatType) {
45
- if (mediaFormat) {
46
- switch (mediaFormat.name) {
47
- case MediaFormat.MP4.name:
48
- this.progressive.push(source);
49
- break;
50
- case MediaFormat.DASH.name:
51
- this.dash.push(source);
52
- break;
53
- case MediaFormat.HLS.name:
54
- this.hls.push(source);
55
- break;
56
- default:
57
- break;
58
- }
59
- }
60
- }
61
-
62
- /**
63
- * Convert class to native js object.
64
- * @returns {ProviderMediaSourcesObject} - The json class object.
65
- */
66
- toJSON(): ProviderMediaSourcesObject {
67
- const response: ProviderMediaSourcesObject = {
68
- progressive: [],
69
- dash: [],
70
- hls: [],
71
- image: []
72
- };
73
- this.progressive.forEach(p => response.progressive.push(p.toJSON()));
74
- this.hls.forEach(h => response.hls.push(h.toJSON()));
75
- this.dash.forEach(d => response.dash.push(d.toJSON()));
76
- response.image = this.image;
77
- return response;
78
- }
79
- }
@@ -1,37 +0,0 @@
1
- //@flow
2
-
3
- import MediaEntry from '../entities/media-entry';
4
-
5
- export default class Playlist {
6
- /**
7
- * @member - playlist id
8
- * @type {string}
9
- */
10
- id: string;
11
- /**
12
- * @member - playlist name
13
- * @type {string}
14
- */
15
- name: string;
16
- /**
17
- * @member - playlist description
18
- * @type {string}
19
- */
20
- description: string;
21
-
22
- /**
23
- * @member - playlist poster
24
- * @type {string}
25
- */
26
- poster: string;
27
-
28
- /**
29
- * @member - playlist items
30
- * @type {Array<MediaEntry>}
31
- */
32
- items: Array<MediaEntry>;
33
-
34
- constructor() {
35
- this.items = [];
36
- }
37
- }
package/src/index.html DELETED
@@ -1,11 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <title>Title</title>
6
- </head>
7
- <body>
8
- <script>
9
- </script>
10
- </body>
11
- </html>
File without changes
@@ -1,110 +0,0 @@
1
- // @flow
2
- import {getLogLevel, setLogLevel, setLogger, type LogLevelType, LogLevel} from '../../util/logger';
3
- import DataLoaderManager from './data-loader-manager';
4
- import Error from '../../util/error/error';
5
-
6
- export default class BaseProvider<MI> {
7
- _partnerId: number;
8
- _widgetId: ?string;
9
- _ks: string;
10
- _uiConfId: ?number;
11
- _dataLoader: DataLoaderManager;
12
- _playerVersion: string;
13
- _logger: any;
14
- _isAnonymous: boolean;
15
- _networkRetryConfig: ProviderNetworkRetryParameters = {
16
- async: true,
17
- timeout: 0,
18
- maxAttempts: 4
19
- };
20
-
21
- get partnerId(): number {
22
- return this._partnerId;
23
- }
24
-
25
- get widgetId(): string {
26
- return this._widgetId || this.defaultWidgetId;
27
- }
28
-
29
- get defaultWidgetId(): string {
30
- return '_' + this._partnerId;
31
- }
32
-
33
- get uiConfId(): ?number {
34
- return this._uiConfId;
35
- }
36
-
37
- get ks(): string {
38
- return this._ks;
39
- }
40
-
41
- set ks(value: string): void {
42
- this._ks = value;
43
- }
44
-
45
- get playerVersion(): string {
46
- return this._playerVersion;
47
- }
48
-
49
- get isAnonymous(): boolean {
50
- return this._isAnonymous;
51
- }
52
-
53
- constructor(options: ProviderOptionsObject, playerVersion: string) {
54
- setLogger(options.logger);
55
- this._partnerId = options.partnerId;
56
- this._widgetId = options.widgetId;
57
- this._uiConfId = options.uiConfId;
58
- this._isAnonymous = !options.ks;
59
- this._ks = options.ks || '';
60
- this._playerVersion = playerVersion;
61
- }
62
-
63
- // eslint-disable-next-line no-unused-vars
64
- getMediaConfig(mediaInfo: MI): Promise<ProviderMediaConfigObject> {
65
- return Promise.reject(
66
- new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {
67
- message: 'getMediaConfig method must be implement by the derived class'
68
- })
69
- );
70
- }
71
-
72
- // eslint-disable-next-line no-unused-vars
73
- getPlaylistConfig(playlistInfo: ProviderPlaylistInfoObject): Promise<ProviderPlaylistObject> {
74
- return Promise.reject(
75
- new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {
76
- message: 'The provider does not support loading playlist by id'
77
- })
78
- );
79
- }
80
-
81
- // eslint-disable-next-line no-unused-vars
82
- getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise<ProviderPlaylistObject> {
83
- return Promise.reject(
84
- new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {
85
- message: 'The provider does not support loading entry list'
86
- })
87
- );
88
- }
89
-
90
- _verifyHasSources(sources: ProviderMediaConfigSourcesObject) {
91
- if (sources.hls.concat(sources.dash, sources.progressive, sources.image).length === 0) {
92
- throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.MISSING_PLAY_SOURCE, {
93
- action: '',
94
- messages: `No play source for entry id: ${sources.id}`
95
- });
96
- }
97
- }
98
-
99
- get LogLevel(): LogLevelType {
100
- return LogLevel;
101
- }
102
-
103
- getLogLevel(name?: string): Object {
104
- return getLogLevel(name);
105
- }
106
-
107
- setLogLevel(level: Object, name?: string): void {
108
- setLogLevel(level, name);
109
- }
110
- }
@@ -1,57 +0,0 @@
1
- //@flow
2
- export default class ServiceResult {
3
- /**
4
- * @member - Is service returned an error
5
- * @type {boolean}
6
- */
7
- hasError: boolean = false;
8
- /**
9
- * @member - The service error
10
- * @type {ServiceError}
11
- */
12
- error: ServiceError;
13
- /**
14
- * @member - The service result data
15
- * @type {Object}
16
- */
17
- data: Object;
18
-
19
- /**
20
- * @constructor
21
- * @param {Object} response - Service response
22
- */
23
- constructor(response: Object) {
24
- if (response.objectType === 'KalturaAPIException') {
25
- this.hasError = true;
26
- this.error = new ServiceError(response.code, response.message);
27
- } else if (response.error && response.error.objectType === 'KalturaAPIException') {
28
- this.hasError = true;
29
- this.error = new ServiceError(response.error.code, response.error.message);
30
- } else {
31
- this.data = response;
32
- }
33
- }
34
- }
35
-
36
- class ServiceError {
37
- /**
38
- * @member - The error code
39
- * @type {string}
40
- */
41
- code: string;
42
- /**
43
- * @member - The error message
44
- * @type {string}
45
- */
46
- message: string;
47
-
48
- /**
49
- * @constructor
50
- * @param {string} code - The result code
51
- * @param {string} message - The result message
52
- */
53
- constructor(code: string, message: string) {
54
- this.code = code;
55
- this.message = message;
56
- }
57
- }
@@ -1,115 +0,0 @@
1
- // @flow
2
- import MultiRequestBuilder, {MultiRequestResult} from './multi-request-builder';
3
- import Error from '../../util/error/error';
4
-
5
- export default class DataLoaderManager {
6
- /**
7
- * @member - Loaders response map index
8
- * @type {Map<string,Array<number>>}
9
- * @private
10
- */
11
- _loadersResponseMap: Map<string, Array<number>> = new Map();
12
- /**
13
- * @member - Loaders multi request
14
- * @type {MultiRequestBuilder}
15
- * @protected
16
- */
17
- _multiRequest: MultiRequestBuilder;
18
- /**
19
- * @member - Loaders multi response
20
- * @type {MultiRequestResult}
21
- * @private
22
- */
23
- _multiResponse: MultiRequestResult;
24
- /**
25
- * @member - Loaders to execute
26
- * @type {Map<string,Function>}
27
- * @private
28
- */
29
- _loaders: Map<string, ILoader> = new Map();
30
-
31
- _networkRetryConfig: ProviderNetworkRetryParameters;
32
-
33
- constructor(networkRetryConfig: ProviderNetworkRetryParameters) {
34
- this._networkRetryConfig = networkRetryConfig;
35
- }
36
-
37
- /**
38
- * Add loader to execution loaders map
39
- * @function
40
- * @param {Function} loader Loader to add
41
- * @param {Object} params Loader params
42
- * @param {string} ks ks
43
- * @returns {void}
44
- */
45
- add(loader: Function, params: Object, ks?: string): void {
46
- let execution_loader = new loader(params);
47
- if (execution_loader.isValid()) {
48
- this._loaders.set(loader.id, execution_loader);
49
- // Get the start index from the multiReqeust before adding current execution_loader requests
50
- let startIndex = this._multiRequest.requests.length;
51
- // Get the requests
52
- let requests = execution_loader.requests;
53
- this._multiRequest.retryConfig = this._networkRetryConfig;
54
- // Add requests to multiRequest queue
55
- requests.forEach(request => {
56
- request.params = request.params || {};
57
- request.params.ks = request.params.ks || ks;
58
- this._multiRequest.add(request);
59
- });
60
- // Create range array of current execution_loader requests
61
- let executionLoaderResponseMap = Array.from(new Array(requests.length), (val, index) => index + startIndex);
62
- // Add to map
63
- this._loadersResponseMap.set(loader.id, executionLoaderResponseMap);
64
- }
65
- }
66
-
67
- /**
68
- * Get data from all loaders using multi request
69
- * @param {boolean} requestsMustSucceed whether all of the requests must succeed or not
70
- * @function
71
- * @returns {Promise} Promise
72
- */
73
- fetchData(requestsMustSucceed?: boolean): Promise<any> {
74
- return new Promise((resolve, reject) => {
75
- this._multiRequest.execute(requestsMustSucceed).then(
76
- data => {
77
- this._multiResponse = data.response;
78
- let preparedData: Object = this.prepareData(data.response);
79
- if (preparedData.success) {
80
- resolve(this._loaders);
81
- } else {
82
- reject(
83
- new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, Error.Code.API_RESPONSE_MISMATCH, {
84
- headers: data.headers
85
- })
86
- );
87
- }
88
- },
89
- err => {
90
- reject(err);
91
- }
92
- );
93
- });
94
- }
95
-
96
- /**
97
- * Prepare fetched data
98
- * @function
99
- * @param {MultiRequestResult} response - The multi request result
100
- * @returns {Object} - The prepared data
101
- */
102
- prepareData(response: MultiRequestResult): Object {
103
- this._loaders.forEach((loader, name) => {
104
- let loaderDataIndexes = this._loadersResponseMap.get(name);
105
- try {
106
- if (loaderDataIndexes && loaderDataIndexes.length > 0) {
107
- loader.response = response.results.slice(loaderDataIndexes[0], loaderDataIndexes[loaderDataIndexes.length - 1] + 1);
108
- }
109
- } catch (err) {
110
- return {success: false, error: err};
111
- }
112
- });
113
- return {success: true, data: this._loaders};
114
- }
115
- }