@streamscloud/streams-api-client 3.4.1 → 4.0.0-beta.5
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/dist/components-data/component-data-provider.service.js +2 -2
- package/dist/components-data/components-data-fetcher.service.js +8 -1
- package/dist/components-data/components-data-parameters-reader.service.d.ts +2 -2
- package/dist/components-data/components-data-parameters-reader.service.js +17 -1
- package/dist/components-data/types.d.ts +19 -2
- package/dist/data-loaders/index.d.ts +2 -2
- package/dist/data-loaders/short-videos-data-loader/index.d.ts +1 -1
- package/dist/data-loaders/short-videos-data-loader/loader.d.ts +3 -3
- package/dist/data-loaders/short-videos-data-loader/loader.js +12 -2
- package/dist/data-loaders/short-videos-data-loader/mapper.d.ts +3 -1
- package/dist/data-loaders/short-videos-data-loader/mapper.js +7 -1
- package/dist/data-loaders/short-videos-data-loader/types.d.ts +4 -0
- package/dist/data-loaders/streams-data-loader/index.d.ts +1 -1
- package/dist/data-loaders/streams-data-loader/loader.js +11 -1
- package/dist/data-loaders/streams-data-loader/mapper.d.ts +3 -1
- package/dist/data-loaders/streams-data-loader/mapper.js +6 -1
- package/dist/data-loaders/streams-data-loader/types.d.ts +3 -0
- package/dist/data-loaders/types.d.ts +4 -0
- package/dist/services/embed-content-api-client.d.ts +3 -1
- package/dist/services/embed-content-api-client.js +18 -0
- package/dist/services/types.d.ts +9 -0
- package/package.json +1 -1
|
@@ -27,9 +27,9 @@ const getComponentData = (componentsData, parameters) => {
|
|
|
27
27
|
return result;
|
|
28
28
|
};
|
|
29
29
|
const getModels = (content, ids) => ids.length
|
|
30
|
-
? content
|
|
30
|
+
? content.chosen
|
|
31
31
|
.filter((x) => ids.includes(x.id))
|
|
32
32
|
.sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id))
|
|
33
|
-
:
|
|
33
|
+
: content.dynamicallyLoaded.splice(0, 1);
|
|
34
34
|
|
|
35
35
|
export { createComponentDataProvider, getComponentData };
|
|
@@ -29,7 +29,14 @@ const createComponentsDataFetcher = (client) => {
|
|
|
29
29
|
};
|
|
30
30
|
};
|
|
31
31
|
const loadContent = async (dataLoader, contentParameters) => {
|
|
32
|
-
|
|
32
|
+
const chosenPromise = loadChosen(contentParameters, dataLoader);
|
|
33
|
+
const dynamicDataPromise = loadDynamicData(contentParameters, dataLoader);
|
|
34
|
+
return {
|
|
35
|
+
chosen: await chosenPromise,
|
|
36
|
+
dynamicallyLoaded: await dynamicDataPromise
|
|
37
|
+
};
|
|
33
38
|
};
|
|
39
|
+
const loadChosen = async (contentParameters, dataLoader) => contentParameters.ids.length ? dataLoader.load(contentParameters.ids) : [];
|
|
40
|
+
const loadDynamicData = async (contentParameters, dataLoader) => contentParameters.page ? (await dataLoader.loadBatch(contentParameters.page.limit, contentParameters.page.filter, contentParameters.ids)) : [];
|
|
34
41
|
|
|
35
42
|
export { createComponentsDataFetcher };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export declare const getComponentsDataParameters: (parameters: DataParameters[]) => ComponentsDataParameters;
|
|
1
|
+
import { type ComponentsDataParameters, type DataParameters, type DynamicLoadingConfig } from './types';
|
|
2
|
+
export declare const getComponentsDataParameters: (parameters: DataParameters[], dynamicLoadingConfig?: DynamicLoadingConfig) => ComponentsDataParameters;
|
|
@@ -1,15 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
import { DataType } from './types.js';
|
|
2
|
+
|
|
3
|
+
const getComponentsDataParameters = (parameters, dynamicLoadingConfig) => {
|
|
2
4
|
const result = {};
|
|
3
5
|
const params = parameters
|
|
4
6
|
.flatMap((x) => Object.entries(x).filter(([_, v]) => Array.isArray(v)).map(([t, v]) => ({ type: t, value: v })));
|
|
5
7
|
const dataTypes = [...new Set(params.map(x => x.type))];
|
|
6
8
|
for (const dataType of dataTypes) {
|
|
9
|
+
const filter = getFilter(dataType, dynamicLoadingConfig);
|
|
7
10
|
result[dataType] = {
|
|
8
11
|
ids: getIds(params, dataType),
|
|
12
|
+
page: filter ? { limit: parameters.length, filter } : undefined
|
|
9
13
|
};
|
|
10
14
|
}
|
|
11
15
|
return result;
|
|
12
16
|
};
|
|
17
|
+
const getFilter = (dataType, dynamicLoadingConfig) => {
|
|
18
|
+
if (!dynamicLoadingConfig) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
if (dataType === DataType.ShortVideo && dynamicLoadingConfig.posts.enabled) {
|
|
22
|
+
return {
|
|
23
|
+
categoryId: dynamicLoadingConfig.posts.categoryId ?? undefined,
|
|
24
|
+
types: dynamicLoadingConfig.posts.types ?? undefined
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
};
|
|
13
29
|
const getIds = (parameters, dataType) => [
|
|
14
30
|
...new Set(parameters
|
|
15
31
|
.filter((x) => x.type === dataType && typeof Array.isArray(x.value))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ShortVideoModel, StreamModel } from '../data-loaders';
|
|
1
|
+
import { ShortVideoModel, ShortVideosFilter, StreamModel, StreamsFilter } from '../data-loaders';
|
|
2
2
|
export declare const DataType: {
|
|
3
3
|
ShortVideo: string;
|
|
4
4
|
Stream: string;
|
|
@@ -8,9 +8,19 @@ export type ComponentsDataParameters = {
|
|
|
8
8
|
};
|
|
9
9
|
export type ContentParameters = {
|
|
10
10
|
ids: string[];
|
|
11
|
+
page?: DataPageParameters;
|
|
11
12
|
};
|
|
13
|
+
export type DataPageParameters = {
|
|
14
|
+
limit: number;
|
|
15
|
+
filter: DataFilterParameters;
|
|
16
|
+
};
|
|
17
|
+
export type DataFilterParameters = ShortVideosFilter | StreamsFilter;
|
|
12
18
|
export type ComponentsData = {
|
|
13
|
-
[key: string]:
|
|
19
|
+
[key: string]: Content;
|
|
20
|
+
};
|
|
21
|
+
export type Content = {
|
|
22
|
+
chosen: ComponentDataModel[];
|
|
23
|
+
dynamicallyLoaded: ComponentDataModel[];
|
|
14
24
|
};
|
|
15
25
|
export type ComponentDataModel = ShortVideoModel | StreamModel;
|
|
16
26
|
export type DataParameters = {
|
|
@@ -22,3 +32,10 @@ export type ComponentData = {
|
|
|
22
32
|
export type ComponentDataProvider = {
|
|
23
33
|
getData: (parameters?: DataParameters) => ComponentData;
|
|
24
34
|
};
|
|
35
|
+
export type DynamicLoadingConfig = {
|
|
36
|
+
posts: {
|
|
37
|
+
enabled: boolean;
|
|
38
|
+
categoryId?: string;
|
|
39
|
+
types?: string[];
|
|
40
|
+
};
|
|
41
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { getShortVideosDataLoader, type ShortVideoModel } from './short-videos-data-loader';
|
|
2
|
-
export { getStreamsDataLoader, type StreamModel } from './streams-data-loader';
|
|
1
|
+
export { getShortVideosDataLoader, type ShortVideoModel, type ShortVideosFilter } from './short-videos-data-loader';
|
|
2
|
+
export { getStreamsDataLoader, type StreamModel, type StreamsFilter } from './streams-data-loader';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { getShortVideosDataLoader } from './loader';
|
|
2
|
-
export type { ShortVideoModel } from './types';
|
|
2
|
+
export type { ShortVideoModel, ShortVideosFilter } from './types';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ShortVideoModel } from
|
|
2
|
-
import { EmbedContentApiClient } from
|
|
3
|
-
import { DataLoader } from
|
|
1
|
+
import { ShortVideoModel } from "./types";
|
|
2
|
+
import { EmbedContentApiClient } from "../../services";
|
|
3
|
+
import { DataLoader } from "../types";
|
|
4
4
|
export declare const getShortVideosDataLoader: (client: EmbedContentApiClient) => DataLoader<ShortVideoModel>;
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import { mapToSiteShortVideoModels } from './mapper.js';
|
|
1
|
+
import { mapToFilter, mapToSiteShortVideoModels } from './mapper.js';
|
|
2
2
|
|
|
3
3
|
const getShortVideosDataLoader = (client) => ({
|
|
4
4
|
async load(ids) {
|
|
5
5
|
const posts = await client.getPosts(ids);
|
|
6
6
|
if (!posts) {
|
|
7
|
-
console.error(
|
|
7
|
+
console.error("Failed to fetch short video posts: Null-payload received", posts);
|
|
8
|
+
return [];
|
|
9
|
+
}
|
|
10
|
+
return mapToSiteShortVideoModels(posts);
|
|
11
|
+
},
|
|
12
|
+
async loadBatch(limit, filter, excludeIds) {
|
|
13
|
+
const postsFilter = mapToFilter(filter);
|
|
14
|
+
postsFilter.excludeIds = excludeIds;
|
|
15
|
+
const posts = await client.getPostsBy(limit, postsFilter);
|
|
16
|
+
if (!posts) {
|
|
17
|
+
console.error("Failed to fetch short video posts: Null-payload received", posts);
|
|
8
18
|
return [];
|
|
9
19
|
}
|
|
10
20
|
return mapToSiteShortVideoModels(posts);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { ShortVideoModel } from './types';
|
|
2
|
-
import { Post } from '../../services/types';
|
|
2
|
+
import { Post, PostsFilter } from '../../services/types';
|
|
3
|
+
import { Filter } from '../types';
|
|
3
4
|
export declare const mapToSiteShortVideoModels: (posts: Post[]) => ShortVideoModel[];
|
|
5
|
+
export declare const mapToFilter: (filter: Filter) => PostsFilter;
|
|
@@ -19,5 +19,11 @@ const mapToSiteShortVideoModels = (posts) => {
|
|
|
19
19
|
return shortVideo;
|
|
20
20
|
});
|
|
21
21
|
};
|
|
22
|
+
const mapToFilter = (filter) => {
|
|
23
|
+
return {
|
|
24
|
+
categoryId: Array.isArray(filter.categoryId) ? undefined : filter.categoryId,
|
|
25
|
+
types: Array.isArray(filter.types) ? filter.types : undefined,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
22
28
|
|
|
23
|
-
export { mapToSiteShortVideoModels };
|
|
29
|
+
export { mapToFilter, mapToSiteShortVideoModels };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { getStreamsDataLoader } from './loader';
|
|
2
|
-
export type { StreamModel } from './types';
|
|
2
|
+
export type { StreamModel, StreamsFilter } from './types';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mapToStreamModels } from './mapper.js';
|
|
1
|
+
import { mapToFilter, mapToStreamModels } from './mapper.js';
|
|
2
2
|
|
|
3
3
|
const getStreamsDataLoader = (client) => ({
|
|
4
4
|
async load(ids) {
|
|
@@ -9,6 +9,16 @@ const getStreamsDataLoader = (client) => ({
|
|
|
9
9
|
}
|
|
10
10
|
return mapToStreamModels(streams);
|
|
11
11
|
},
|
|
12
|
+
async loadBatch(limit, filter, excludeIds) {
|
|
13
|
+
const streamsFilter = mapToFilter(filter);
|
|
14
|
+
streamsFilter.excludeIds = excludeIds;
|
|
15
|
+
const streams = await client.getStreamsBy(limit, streamsFilter);
|
|
16
|
+
if (!streams) {
|
|
17
|
+
console.error('Failed to fetch site short video posts: Null-payload received', streams);
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
return mapToStreamModels(streams);
|
|
21
|
+
}
|
|
12
22
|
});
|
|
13
23
|
|
|
14
24
|
export { getStreamsDataLoader };
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { StreamModel } from './types';
|
|
2
|
-
import type { Stream } from '../../services/types';
|
|
2
|
+
import type { Stream, StreamsFilter } from '../../services/types';
|
|
3
|
+
import { Filter } from '../types';
|
|
3
4
|
export declare const mapToStreamModels: (streams: Stream[]) => StreamModel[];
|
|
5
|
+
export declare const mapToFilter: (filter: Filter) => StreamsFilter;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { Post, Stream } from './types';
|
|
1
|
+
import type { Post, PostsFilter, Stream, StreamsFilter } from './types';
|
|
2
2
|
export declare class EmbedContentApiClient {
|
|
3
3
|
private readonly gqlEndpoint;
|
|
4
4
|
private readonly clientId;
|
|
5
5
|
constructor(gqlEndpoint: string, clientId: string);
|
|
6
6
|
getPosts(ids: string[]): Promise<Post[] | undefined>;
|
|
7
|
+
getPostsBy(limit: number, filter?: PostsFilter): Promise<Post[] | undefined>;
|
|
7
8
|
getStreams(ids: string[]): Promise<Stream[] | undefined>;
|
|
9
|
+
getStreamsBy(limit: number, filter?: StreamsFilter): Promise<Stream[] | undefined>;
|
|
8
10
|
private queryGql;
|
|
9
11
|
}
|
|
@@ -18,6 +18,15 @@ class EmbedContentApiClient {
|
|
|
18
18
|
});
|
|
19
19
|
return response.embedPosts?.items;
|
|
20
20
|
}
|
|
21
|
+
async getPostsBy(limit, filter) {
|
|
22
|
+
const response = await this.queryGql(EmbedPostsQuery, {
|
|
23
|
+
input: {
|
|
24
|
+
filter,
|
|
25
|
+
limit
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return response.embedPosts?.items;
|
|
29
|
+
}
|
|
21
30
|
async getStreams(ids) {
|
|
22
31
|
const response = await this.queryGql(EmbedStreamsQuery, {
|
|
23
32
|
input: {
|
|
@@ -28,6 +37,15 @@ class EmbedContentApiClient {
|
|
|
28
37
|
});
|
|
29
38
|
return response.embedStreams?.items;
|
|
30
39
|
}
|
|
40
|
+
async getStreamsBy(limit, filter) {
|
|
41
|
+
const response = await this.queryGql(EmbedStreamsQuery, {
|
|
42
|
+
input: {
|
|
43
|
+
filter,
|
|
44
|
+
limit
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return response.embedStreams?.items;
|
|
48
|
+
}
|
|
31
49
|
queryGql = async (query, variables) => {
|
|
32
50
|
const response = await fetch(this.gqlEndpoint, {
|
|
33
51
|
method: 'POST',
|
package/dist/services/types.d.ts
CHANGED
|
@@ -153,6 +153,15 @@ export type Ad = {
|
|
|
153
153
|
type: AdType;
|
|
154
154
|
media: Media[];
|
|
155
155
|
};
|
|
156
|
+
export type StreamsFilter = {
|
|
157
|
+
categoryId?: string;
|
|
158
|
+
excludeIds?: string[];
|
|
159
|
+
};
|
|
160
|
+
export type PostsFilter = {
|
|
161
|
+
categoryId?: string;
|
|
162
|
+
excludeIds?: string[];
|
|
163
|
+
types?: string[];
|
|
164
|
+
};
|
|
156
165
|
export type Post = {
|
|
157
166
|
ad?: Ad;
|
|
158
167
|
allProducts: Product[];
|