itube-specs 0.0.779 → 0.0.781

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 (59) hide show
  1. package/package.json +6 -1
  2. package/services/__tests__/site-data.service.test.ts +61 -0
  3. package/services/api/authorization.service.ts +172 -0
  4. package/services/api/categories.service.ts +239 -0
  5. package/services/api/channels.service.ts +101 -0
  6. package/services/api/contacts.service.ts +22 -0
  7. package/services/api/dictionaries.service.ts +34 -0
  8. package/services/api/models.service.ts +315 -0
  9. package/services/api/playlists.service.ts +250 -0
  10. package/services/api/search.service.ts +63 -0
  11. package/services/api/videos.service.ts +558 -0
  12. package/services/site-data.service.ts +72 -0
  13. package/utils/__tests__/get-sorted-filter-groups.test.ts +28 -0
  14. package/utils/__tests__/parse-filter-categories.test.ts +21 -0
  15. package/utils/__tests__/sort-filter-radio-options.test.ts +23 -0
  16. package/utils/category-letter-groups/__tests__/group-by-first-letter.test.ts +42 -0
  17. package/utils/category-letter-groups/group-by-first-letter.ts +25 -0
  18. package/utils/filter-main/__tests__/build-filter-query.test.ts +56 -0
  19. package/utils/filter-main/__tests__/get-active-filter-values.test.ts +22 -0
  20. package/utils/filter-main/__tests__/parse-category-filter-values.test.ts +20 -0
  21. package/utils/filter-main/build-filter-query.ts +42 -0
  22. package/utils/filter-main/get-active-filter-values.ts +33 -0
  23. package/utils/filter-main/parse-category-filter-values.ts +15 -0
  24. package/utils/filter-slider/__tests__/build-range-filter-query.test.ts +39 -0
  25. package/utils/filter-slider/__tests__/get-slider-range-info.test.ts +28 -0
  26. package/utils/filter-slider/build-range-filter-query.ts +32 -0
  27. package/utils/filter-slider/get-slider-range-info.ts +28 -0
  28. package/utils/get-sorted-filter-groups.ts +13 -0
  29. package/utils/info-main/__tests__/group-parameters-by-group.test.ts +42 -0
  30. package/utils/info-main/group-parameters-by-group.ts +37 -0
  31. package/utils/iso-code-map.ts +2 -0
  32. package/utils/parse-filter-categories.ts +14 -0
  33. package/utils/player-channel/__tests__/get-name-initials.test.ts +24 -0
  34. package/utils/player-channel/get-name-initials.ts +11 -0
  35. package/utils/player-like/__tests__/apply-reaction.test.ts +28 -0
  36. package/utils/player-like/__tests__/get-reaction-percents.test.ts +16 -0
  37. package/utils/player-like/apply-reaction.ts +23 -0
  38. package/utils/player-like/get-reaction-percents.ts +19 -0
  39. package/utils/search-result/__tests__/build-search-tabs.test.ts +28 -0
  40. package/utils/search-result/build-search-tabs.ts +19 -0
  41. package/utils/section-seo-text/__tests__/split-text-by-keyword-links.test.ts +46 -0
  42. package/utils/section-seo-text/split-text-by-keyword-links.ts +60 -0
  43. package/utils/sort-filter-radio-options.ts +18 -0
  44. package/utils/ui-full-descr/__tests__/split-paragraphs.test.ts +24 -0
  45. package/utils/ui-full-descr/split-paragraphs.ts +12 -0
  46. package/utils/ui-pagination/__tests__/get-pagination-link.test.ts +24 -0
  47. package/utils/ui-pagination/__tests__/get-pagination-numbers.test.ts +18 -0
  48. package/utils/ui-pagination/get-pagination-link.ts +34 -0
  49. package/utils/ui-pagination/get-pagination-numbers.ts +14 -0
  50. package/components/auth/__tests__/login.test.ts +0 -123
  51. package/components/auth/__tests__/recovery.test.ts +0 -86
  52. package/components/auth/__tests__/register.test.ts +0 -122
  53. package/components/player/__tests__/like.test.ts +0 -85
  54. package/components/playlist/__tests__/add.test.ts +0 -115
  55. package/components/playlist/__tests__/edit.test.ts +0 -91
  56. package/components/profile/__tests__/password.test.ts +0 -60
  57. package/components/profile/__tests__/setup.test.ts +0 -100
  58. package/components/report/__tests__/main.test.ts +0 -106
  59. package/composables/__tests__/use-next-video.test.ts +0 -123
@@ -0,0 +1,315 @@
1
+ import type {
2
+ ICardInfo,
3
+ IModelCard,
4
+ IModelFilterPayload,
5
+ RequestPagination,
6
+ PaginatedResponse,
7
+ IModelTag
8
+ } from '../../types';
9
+ import type { Language } from '../../runtime';
10
+ import { ApiHelper, toHeaderLanguage } from '../../runtime';
11
+
12
+ /** Сервис для работы с API моделей */
13
+ export class ModelsApiService {
14
+ static async getModelsSearch(
15
+ pagination: RequestPagination,
16
+ lang: Language,
17
+ phrase: string,
18
+ niche? = NicheHelper.getSiteDefaultNiche(),
19
+ ): Promise<PaginatedResponse<IModelCard>> {
20
+ return await ApiHelper.fetch(
21
+ '/models/get-models-by-phrase/',
22
+ {
23
+ method: 'GET',
24
+ headers: {
25
+ 'X-Niche': niche,
26
+ 'X-Language': toHeaderLanguage(lang),
27
+ 'X-Cache-Time': 259200,
28
+ 'Content-Type': 'application/json',
29
+ 'Access-Control-Allow-Origin': '*',
30
+ },
31
+ params: {
32
+ ...pagination,
33
+ query: phrase,
34
+ },
35
+ },
36
+ useRuntimeConfig(),
37
+ );
38
+ }
39
+
40
+ static getModelsSearchFiltered(phrase: string) {
41
+ return async (
42
+ lang: Language,
43
+ pagination: RequestPagination,
44
+ order: string,
45
+ form: IModelFilterPayload[],
46
+ niche = NicheHelper.getSiteDefaultNiche(),
47
+ ): Promise<PaginatedResponse<IModelCard>> => {
48
+ return await ApiHelper.fetch(
49
+ '/models/get-models-by-phrase/',
50
+ {
51
+ method: 'GET',
52
+ headers: {
53
+ 'X-Niche': niche,
54
+ 'X-Language': toHeaderLanguage(lang),
55
+ 'X-Cache-Time': 259200,
56
+ 'Content-Type': 'application/json',
57
+ },
58
+ params: {
59
+ ...pagination,
60
+ order,
61
+ query: phrase,
62
+ },
63
+ },
64
+ useRuntimeConfig(),
65
+ );
66
+ };
67
+ }
68
+
69
+ static async getRelatedModels(
70
+ model: string,
71
+ limit: number,
72
+ max_sampling_limit: number,
73
+ lang: Language,
74
+ cacheId = 'default',
75
+ niche? = NicheHelper.getSiteDefaultNiche(),
76
+ ): Promise<PaginatedResponse<IModelCard>> {
77
+ return await ApiHelper.fetch(
78
+ '/models/related',
79
+ {
80
+ method: 'GET',
81
+ headers: {
82
+ 'X-Niche': niche,
83
+ 'X-Language': toHeaderLanguage(lang),
84
+ 'X-Cache-Extra': cacheId,
85
+ 'X-Cache-Time': 259200,
86
+ 'Content-Type': 'application/json',
87
+ 'Access-Control-Allow-Origin': '*',
88
+ },
89
+ params: {
90
+ model,
91
+ limit,
92
+ max_sampling_limit,
93
+ },
94
+ },
95
+ useRuntimeConfig(),
96
+ );
97
+ }
98
+
99
+ static async getModelsByName(
100
+ lang: Language,
101
+ slug: string,
102
+ niche? = NicheHelper.getSiteDefaultNiche(),
103
+ ): Promise<ICardInfo> {
104
+ return await ApiHelper.fetch(
105
+ '/models/get-info-by-name/',
106
+ {
107
+ method: 'GET',
108
+ headers: {
109
+ 'X-Niche': niche,
110
+ 'X-Language': toHeaderLanguage(lang),
111
+ 'X-Cache-Time': 259200,
112
+ 'Content-Type': 'application/json',
113
+ 'Access-Control-Allow-Origin': '*',
114
+ },
115
+ params: {
116
+ model: slug,
117
+ },
118
+ },
119
+ useRuntimeConfig(),
120
+ );
121
+ }
122
+
123
+ static async getListByNiche(
124
+ lang: Language,
125
+ pagination: RequestPagination,
126
+ order: string,
127
+ form: IModelFilterPayload[],
128
+ niche? = NicheHelper.getSiteDefaultNiche(),
129
+ ): Promise<PaginatedResponse<IModelCard>> {
130
+ return await ApiHelper.fetch(
131
+ '/models/list-by-niche',
132
+ {
133
+ method: 'POST',
134
+ headers: {
135
+ 'X-Niche': niche,
136
+ 'X-Language': toHeaderLanguage(lang),
137
+ 'X-Cache-Time': 259200,
138
+ 'Content-Type': 'application/json',
139
+ 'Access-Control-Allow-Origin': '*',
140
+ },
141
+ params: {
142
+ ...pagination,
143
+ order,
144
+ },
145
+ body: {
146
+ filters: form
147
+ }
148
+ },
149
+ useRuntimeConfig(),
150
+ );
151
+ }
152
+
153
+ static async getListByNicheAndLetter(
154
+ lang: Language,
155
+ pagination: RequestPagination,
156
+ order: string,
157
+ form: IModelFilterPayload[],
158
+ letter: string,
159
+ niche? = NicheHelper.getSiteDefaultNiche(),
160
+ ): Promise<PaginatedResponse<IModelCard>> {
161
+ return await ApiHelper.fetch(
162
+ '/models/list-by-niche',
163
+ {
164
+ method: 'POST',
165
+ headers: {
166
+ 'X-Niche': niche,
167
+ 'X-Language': toHeaderLanguage(lang),
168
+ 'X-Cache-Time': 259200,
169
+ 'Content-Type': 'application/json',
170
+ 'Access-Control-Allow-Origin': '*',
171
+ },
172
+ params: {
173
+ ...pagination,
174
+ order,
175
+ letter,
176
+ },
177
+ body: {
178
+ filters: form
179
+ }
180
+ },
181
+ useRuntimeConfig(),
182
+ );
183
+ }
184
+
185
+ static async getTop(
186
+ limit: number,
187
+ max_sampling_limit: number,
188
+ lang: Language,
189
+ cacheId = 'default',
190
+ niche? = NicheHelper.getSiteDefaultNiche(),
191
+ ): Promise<PaginatedResponse<IModelCard>> {
192
+ return await ApiHelper.fetch(
193
+ '/models/top',
194
+ {
195
+ method: 'GET',
196
+ headers: {
197
+ 'X-Niche': niche,
198
+ 'X-Language': toHeaderLanguage(lang),
199
+ 'X-Cache-Extra': cacheId,
200
+ 'X-Cache-Time': 259200,
201
+ 'Content-Type': 'application/json',
202
+ 'Access-Control-Allow-Origin': '*',
203
+ },
204
+ params: {
205
+ limit,
206
+ max_sampling_limit,
207
+ },
208
+ },
209
+ useRuntimeConfig(),
210
+ );
211
+ }
212
+
213
+ static async getListByCategory(
214
+ category: string,
215
+ limit: number,
216
+ lang: Language,
217
+ niche? = NicheHelper.getSiteDefaultNiche(),
218
+ ): Promise<PaginatedResponse<IModelCard>> {
219
+ return await ApiHelper.fetch(
220
+ `/models/list-by-category/${category}`,
221
+ {
222
+ method: 'GET',
223
+ headers: {
224
+ 'X-Niche': niche,
225
+ 'X-Language': toHeaderLanguage(lang),
226
+ 'X-Cache-Time': 259200,
227
+ 'Content-Type': 'application/json',
228
+ 'Access-Control-Allow-Origin': '*',
229
+ },
230
+ params: {
231
+ limit,
232
+ },
233
+ },
234
+ useRuntimeConfig(),
235
+ );
236
+ }
237
+
238
+ static async getListByChannel(
239
+ channel: string,
240
+ limit: number,
241
+ lang: Language,
242
+ niche? = NicheHelper.getSiteDefaultNiche(),
243
+ ): Promise<PaginatedResponse<IModelCard>> {
244
+ return await ApiHelper.fetch(
245
+ `/models/list-by-channel/${channel}`,
246
+ {
247
+ method: 'GET',
248
+ headers: {
249
+ 'X-Niche': niche,
250
+ 'X-Language': toHeaderLanguage(lang),
251
+ 'X-Cache-Time': 259200,
252
+ 'Content-Type': 'application/json',
253
+ 'Access-Control-Allow-Origin': '*',
254
+ },
255
+ params: {
256
+ limit,
257
+ },
258
+ },
259
+ useRuntimeConfig(),
260
+ );
261
+ }
262
+
263
+ static async getListByTag(
264
+ tag: string,
265
+ limit: number,
266
+ lang: Language,
267
+ niche? = NicheHelper.getSiteDefaultNiche(),
268
+ ): Promise<PaginatedResponse<IModelCard>> {
269
+ return await ApiHelper.fetch(
270
+ `/models/list-by-tag/${tag}`,
271
+ {
272
+ method: 'GET',
273
+ headers: {
274
+ 'X-Niche': niche,
275
+ 'X-Language': toHeaderLanguage(lang),
276
+ 'X-Cache-Time': 259200,
277
+ 'Content-Type': 'application/json',
278
+ 'Access-Control-Allow-Origin': '*',
279
+ },
280
+ params: {
281
+ limit,
282
+ },
283
+ },
284
+ useRuntimeConfig(),
285
+ );
286
+ }
287
+
288
+ static async getTopChips(
289
+ limit: number,
290
+ max_sampling_limit: number,
291
+ lang: Language,
292
+ cacheId = 'default',
293
+ niche? = NicheHelper.getSiteDefaultNiche(),
294
+ ): Promise<Array<IModelTag>> {
295
+ return await ApiHelper.fetch(
296
+ '/models/get-top-chips',
297
+ {
298
+ method: 'GET',
299
+ headers: {
300
+ 'X-Niche': niche,
301
+ 'X-Language': toHeaderLanguage(lang),
302
+ 'X-Cache-Extra': cacheId,
303
+ 'X-Cache-Time': 259200,
304
+ 'Content-Type': 'application/json',
305
+ 'Access-Control-Allow-Origin': '*',
306
+ },
307
+ params: {
308
+ limit,
309
+ max_sampling_limit,
310
+ },
311
+ },
312
+ useRuntimeConfig(),
313
+ );
314
+ }
315
+ }
@@ -0,0 +1,250 @@
1
+ import type { PlaylistType, Language } from '../../runtime';
2
+ import { ApiHelper, toHeaderLanguage } from '../../runtime';
3
+ import type { IPlaylistData, PaginatedResponse, RequestPagination, IPlaylistVideoFormType, IVideoCard, IVideoData, IPlaylistCard, IPlaylistInfoType } from '../../types';
4
+
5
+ /** Сервис для работы с API плейлистов */
6
+ export class PlaylistsApiService {
7
+ static async playlistLike(
8
+ md: string,
9
+ niche = NicheHelper.getSiteDefaultNiche(),
10
+ ): Promise<IVideoData> {
11
+ return await ApiHelper.fetch(
12
+ `/playlist/playlist-like/${md}`,
13
+ {
14
+ method: 'POST',
15
+ headers: {
16
+ 'X-Niche': niche,
17
+ 'X-Cache-Time': '259200',
18
+ 'Content-Type': 'application/json',
19
+ },
20
+ },
21
+ useRuntimeConfig(),
22
+ );
23
+ }
24
+
25
+ static async playlistDislike(
26
+ md: string,
27
+ niche = NicheHelper.getSiteDefaultNiche(),
28
+ ): Promise<IVideoData> {
29
+ return await ApiHelper.fetch(
30
+ `/playlist/playlist-dislike/${md}`,
31
+ {
32
+ method: 'POST',
33
+ headers: {
34
+ 'X-Niche': niche,
35
+ 'X-Cache-Time': '259200',
36
+ 'Content-Type': 'application/json',
37
+ },
38
+ },
39
+ useRuntimeConfig(),
40
+ );
41
+ }
42
+ static async setPlaylistView(
43
+ id: string,
44
+ videoView: string
45
+ ): Promise<IPlaylistInfoType> {
46
+ return await ApiHelper.fetch(
47
+ `/playlist/playlist-view/${id}`,
48
+ {
49
+ method: 'POST',
50
+ headers: {
51
+ 'X-Cache-Time': 259200,
52
+ 'Content-Type': 'application/json',
53
+ },
54
+ body: {
55
+ videoView,
56
+ },
57
+ },
58
+ useRuntimeConfig(),
59
+ );
60
+ }
61
+
62
+ static async getPlaylistById(
63
+ id: string,
64
+ lang: Language,
65
+ _limit? = 100,
66
+ ): Promise<IPlaylistData> {
67
+ return await ApiHelper.fetch(
68
+ `/playlist/get-playlist-by-id/${id}`,
69
+ {
70
+ method: 'GET',
71
+ headers: {
72
+ 'X-Language': toHeaderLanguage(lang),
73
+ 'X-Cache-Time': 259200,
74
+ 'Content-Type': 'application/json',
75
+ },
76
+ },
77
+ useRuntimeConfig(),
78
+ );
79
+ }
80
+
81
+ static async getVideosByPlaylist(
82
+ id: string,
83
+ pagination: RequestPagination,
84
+ lang: Language,
85
+ limit? = 100,
86
+ ): Promise<PaginatedResponse<IVideoCard>> {
87
+ return await ApiHelper.fetch(
88
+ `/playlist/get-playlist-videos-by-id/${id}`,
89
+ {
90
+ method: 'GET',
91
+ headers: {
92
+ 'X-Language': toHeaderLanguage(lang),
93
+ 'X-Cache-Time': 259200,
94
+ 'Content-Type': 'application/json',
95
+ },
96
+ params: {
97
+ limit: limit,
98
+ ...pagination,
99
+ },
100
+ },
101
+ useRuntimeConfig(),
102
+ );
103
+ }
104
+
105
+ static async deleteVideo(
106
+ pid: string,
107
+ vid: string,
108
+ ): Promise<PaginatedResponse<never>> {
109
+ return await ApiHelper.fetch(
110
+ `/playlist/delete-video/${pid}/${vid}`,
111
+ {
112
+ method: 'DELETE',
113
+ headers: {
114
+ 'X-Cache-Time': 259200,
115
+ 'Content-Type': 'application/json',
116
+ },
117
+ },
118
+ useRuntimeConfig(),
119
+ );
120
+ }
121
+
122
+ static async deletePlaylist(
123
+ id: string,
124
+ ): Promise<PaginatedResponse<never>> {
125
+ return await ApiHelper.fetch(
126
+ `/playlist/delete-playlist/${id}`,
127
+ {
128
+ method: 'DELETE',
129
+ headers: {
130
+ 'X-Cache-Time': 259200,
131
+ 'Content-Type': 'application/json',
132
+ },
133
+ },
134
+ useRuntimeConfig(),
135
+ );
136
+ }
137
+
138
+ static async refreshPlaylist(
139
+ id: string,
140
+ name: string,
141
+ type: PlaylistType,
142
+ ): Promise<PaginatedResponse<never>> {
143
+ return await ApiHelper.fetch(
144
+ `/playlist/refresh-playlist/${id}`,
145
+ {
146
+ method: 'PUT',
147
+ headers: {
148
+ 'X-Cache-Time': 259200,
149
+ 'Content-Type': 'application/json',
150
+ },
151
+ body: {
152
+ name,
153
+ type,
154
+ },
155
+ },
156
+ useRuntimeConfig(),
157
+ );
158
+ }
159
+
160
+ static async getPlaylistByNiche(
161
+ pagination: RequestPagination,
162
+ order: string,
163
+ lang: Language,
164
+ niche? = NicheHelper.getSiteDefaultNiche(),
165
+ ): Promise<PaginatedResponse<never>> {
166
+ return await ApiHelper.fetch(
167
+ '/playlist/playlists-list-by-niche',
168
+ {
169
+ method: 'GET',
170
+ headers: {
171
+ 'X-Niche': niche,
172
+ 'X-Language': toHeaderLanguage(lang),
173
+ 'X-Cache-Time': 259200,
174
+ 'Content-Type': 'application/json',
175
+ },
176
+ params: {
177
+ ...pagination,
178
+ order,
179
+ },
180
+ },
181
+ useRuntimeConfig(),
182
+ );
183
+ }
184
+
185
+ static async postPlaylistVideo(
186
+ data: IPlaylistVideoFormType,
187
+ ) {
188
+ return await ApiHelper.fetch(
189
+ '/playlist/post-video',
190
+ {
191
+ method: 'POST',
192
+ headers: {
193
+ 'X-Cache-Time': 259200,
194
+ 'Content-Type': 'application/json',
195
+ 'Access-Control-Allow-Origin': '*',
196
+ },
197
+ body: data,
198
+ },
199
+ useRuntimeConfig(),
200
+ );
201
+ }
202
+
203
+ static async postPlaylist(
204
+ name: string,
205
+ type: PlaylistType,
206
+ niche? = NicheHelper.getSiteDefaultNiche(),
207
+ ) {
208
+ return await ApiHelper.fetch(
209
+ '/playlist/post-playlist',
210
+ {
211
+ method: 'POST',
212
+ headers: {
213
+ 'X-Cache-Time': 259200,
214
+ 'Content-Type': 'application/json',
215
+ 'Access-Control-Allow-Origin': '*',
216
+ },
217
+ body: {
218
+ niche: niche,
219
+ name: name,
220
+ type: type,
221
+ },
222
+ },
223
+ useRuntimeConfig(),
224
+ );
225
+ }
226
+
227
+ static async getUserPlaylists(
228
+ lang: Language,
229
+ niche? = NicheHelper.getSiteDefaultNiche(),
230
+ limit? = 100,
231
+ ): Promise<PaginatedResponse<IPlaylistCard>> {
232
+ return await ApiHelper.fetch(
233
+ '/playlist/get-user-playlists',
234
+ {
235
+ method: 'GET',
236
+ headers: {
237
+ 'X-Niche': niche,
238
+ 'X-Language': toHeaderLanguage(lang),
239
+ 'X-Cache-Time': 259200,
240
+ 'Content-Type': 'application/json',
241
+ 'Access-Control-Allow-Origin': '*',
242
+ },
243
+ params: {
244
+ limit: limit,
245
+ },
246
+ },
247
+ useRuntimeConfig(),
248
+ );
249
+ }
250
+ }
@@ -0,0 +1,63 @@
1
+ import type { Language } from '../../runtime';
2
+ import { ApiHelper, toHeaderLanguage } from '../../runtime';
3
+ import type { IMultiSuggest } from '../../types';
4
+
5
+ /** Сервис для работы с API поиска */
6
+ export class SearchApiService {
7
+ static async getMultiSuggest(
8
+ lang: Language,
9
+ query: string,
10
+ phrasesLimit: number,
11
+ modelsLimit: number,
12
+ categoriesLimit: number,
13
+ niche? = NicheHelper.getSiteDefaultNiche(),
14
+ ): Promise<IMultiSuggest | null> {
15
+ if (query.length > 2) {
16
+ return await ApiHelper.fetch(
17
+ '/search/multi-suggest',
18
+ {
19
+ method: 'GET',
20
+ headers: {
21
+ 'X-Niche': niche,
22
+ 'X-Language': toHeaderLanguage(lang),
23
+ 'X-Cache-Time': 259200,
24
+ 'Content-Type': 'application/json',
25
+ 'Access-Control-Allow-Origin': '*',
26
+ },
27
+ params: {
28
+ query,
29
+ 'phrases-limit': phrasesLimit,
30
+ 'models-limit': modelsLimit,
31
+ 'categories-limit': categoriesLimit,
32
+ },
33
+ },
34
+ useRuntimeConfig(),
35
+ );
36
+ }
37
+ return null;
38
+ }
39
+
40
+ static async getPhrases(
41
+ lang: Language,
42
+ limit = 15,
43
+ niche? = NicheHelper.getSiteDefaultNiche(),
44
+ ): Promise<Array<string>> {
45
+ return await ApiHelper.fetch(
46
+ '/search/phrases',
47
+ {
48
+ method: 'GET',
49
+ headers: {
50
+ 'X-Niche': niche,
51
+ 'X-Language': toHeaderLanguage(lang),
52
+ 'X-Cache-Time': 259200,
53
+ 'Content-Type': 'application/json',
54
+ 'Access-Control-Allow-Origin': '*',
55
+ },
56
+ params: {
57
+ limit: limit,
58
+ },
59
+ },
60
+ useRuntimeConfig(),
61
+ );
62
+ }
63
+ }