itube-specs 0.0.805 → 0.0.807

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 (81) hide show
  1. package/package.json +1 -1
  2. package/server/api/age/verify.post.ts +15 -0
  3. package/server/api/authorization/change-email.post.ts +14 -0
  4. package/server/api/authorization/change-password.post.ts +14 -0
  5. package/server/api/authorization/confirm.get.ts +13 -0
  6. package/server/api/authorization/delete-profile.delete.ts +13 -0
  7. package/server/api/authorization/get-profile.get.ts +15 -0
  8. package/server/api/authorization/login.post.ts +14 -0
  9. package/server/api/authorization/password.post.ts +14 -0
  10. package/server/api/authorization/post-profile.post.ts +15 -0
  11. package/server/api/authorization/profile-avatar.delete.ts +13 -0
  12. package/server/api/authorization/recovery-password.post.ts +14 -0
  13. package/server/api/authorization/register.post.ts +14 -0
  14. package/server/api/channels/channels-by-model/[slug].get.ts +26 -0
  15. package/server/api/channels/channels-by-name/[slug].get.ts +16 -0
  16. package/server/api/channels/channels-by-network-name/[slug].get.ts +26 -0
  17. package/server/api/channels/channels.get.ts +25 -0
  18. package/server/api/contacts/email.post.ts +12 -0
  19. package/server/api/dictionaries/countries.get.ts +8 -0
  20. package/server/api/dictionaries/genders.get.ts +8 -0
  21. package/server/api/models/get-info-by-name.get.ts +10 -0
  22. package/server/api/models/get-models-by-phrase.get.ts +25 -0
  23. package/server/api/models/get-top-chips.get.ts +11 -0
  24. package/server/api/models/list-by-category/[category].get.ts +26 -0
  25. package/server/api/models/list-by-channel/[channel].get.ts +26 -0
  26. package/server/api/models/list-by-first-letter-chips.get.ts +11 -0
  27. package/server/api/models/list-by-first-letter.get.ts +18 -0
  28. package/server/api/models/list-by-niche.post.ts +30 -0
  29. package/server/api/models/list-by-tag/[tag].get.ts +26 -0
  30. package/server/api/models/related.get.ts +25 -0
  31. package/server/api/models/top.get.ts +18 -0
  32. package/server/api/playlist/delete-playlist/[id].delete.ts +12 -0
  33. package/server/api/playlist/delete-video/[pid]/[vid].delete.ts +18 -0
  34. package/server/api/playlist/get-playlist-by-id/[id].get.ts +16 -0
  35. package/server/api/playlist/get-playlist-videos-by-id/[id].get.ts +27 -0
  36. package/server/api/playlist/get-user-playlists.get.ts +49 -0
  37. package/server/api/playlist/playlist-dislike/[md].post.ts +13 -0
  38. package/server/api/playlist/playlist-like/[md].post.ts +13 -0
  39. package/server/api/playlist/playlist-view/[id].post.ts +13 -0
  40. package/server/api/playlist/playlists-list-by-niche.get.ts +25 -0
  41. package/server/api/playlist/post-playlist.post.ts +12 -0
  42. package/server/api/playlist/post-video.post.ts +12 -0
  43. package/server/api/playlist/refresh-playlist/[id].put.ts +13 -0
  44. package/server/api/search/multi-suggest.get.ts +14 -0
  45. package/server/api/search/phrases.get.ts +13 -0
  46. package/server/api/site/aabd.get.ts +16 -0
  47. package/server/api/site/index.get.ts +17 -0
  48. package/server/api/videos/get-related-videos-by-id/[id].get.ts +32 -0
  49. package/server/api/videos/get-related-videos-by-url/[url].get.ts +27 -0
  50. package/server/api/videos/get-video-by-id/[id].get.ts +30 -0
  51. package/server/api/videos/get-video-by-url/[url].get.ts +29 -0
  52. package/server/api/videos/list-by-niche-and-category.post.ts +29 -0
  53. package/server/api/videos/list-by-niche-and-channel.post.ts +29 -0
  54. package/server/api/videos/list-by-niche-and-model-and-channel.post.ts +29 -0
  55. package/server/api/videos/list-by-niche-and-model-and-tag.post.ts +29 -0
  56. package/server/api/videos/list-by-niche-and-model.post.ts +29 -0
  57. package/server/api/videos/list-by-niche-and-tag.post.ts +29 -0
  58. package/server/api/videos/list-by-niche.post.ts +32 -0
  59. package/server/api/videos/popular-tags-by-channel-name.get.ts +11 -0
  60. package/server/api/videos/popular-tags-by-model-name.get.ts +11 -0
  61. package/server/api/videos/referer-phrases-by-id/[id].get.ts +14 -0
  62. package/server/api/videos/referer-phrases-by-url/[id].get.ts +14 -0
  63. package/server/api/videos/send-video-abuse/[videoGuid].ts +13 -0
  64. package/server/api/videos/video-dislike/[md].post.ts +13 -0
  65. package/server/api/videos/video-like/[md].post.ts +13 -0
  66. package/server/api/videos/video-search-by-niche.ts +29 -0
  67. package/server/api/videos/video-view/[md].post.ts +13 -0
  68. package/server/middleware/country.ts +14 -0
  69. package/server/middleware/session.ts +26 -0
  70. package/server/plugins/dedupe-inlined-css.ts +79 -0
  71. package/server/plugins/init.server.ts +14 -0
  72. package/server/plugins/metrics.ts +115 -0
  73. package/server/plugins/sentry.ts +18 -0
  74. package/server/tasks/site_info.ts +21 -0
  75. package/server/utils/__tests__/css-dedupe.test.ts +67 -0
  76. package/server/utils/__tests__/lang-prop.test.ts +27 -0
  77. package/server/utils/api-fetch.ts +28 -0
  78. package/server/utils/cached-fetch.ts +68 -0
  79. package/server/utils/css-dedupe.ts +65 -0
  80. package/server/utils/lang-prop.ts +19 -0
  81. package/server/utils/metrics.ts +29 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.805",
4
+ "version": "0.0.807",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
@@ -0,0 +1,15 @@
1
+ import { readBody, getHeaders } from 'h3';
2
+ import { getUrlWithProxiedParams } from '../../../runtime';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const body = await readBody(event);
6
+
7
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
8
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/user/verify-age-validation`, event);
9
+
10
+ return await apiFetch(url, {
11
+ method: 'POST',
12
+ headers: getHeaders(event) as HeadersInit,
13
+ body: JSON.stringify(body),
14
+ });
15
+ });
@@ -0,0 +1,14 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/email/change`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'POST',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ body: JSON.stringify(await readBody(event)),
11
+ });
12
+
13
+ return rawData.data ?? rawData;
14
+ });
@@ -0,0 +1,14 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/password/change`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'POST',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ body: JSON.stringify(await readBody(event)),
11
+ });
12
+
13
+ return rawData.data ?? rawData;
14
+ });
@@ -0,0 +1,13 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const { token } = getQuery(event);
6
+
7
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/registration/confirm?token=${token}`, event);
8
+
9
+ return await apiFetch(url, {
10
+ method: 'GET',
11
+ headers: getHeaders(event) as HeadersInit,
12
+ });
13
+ });
@@ -0,0 +1,13 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/profile`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'DELETE',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ });
11
+
12
+ return rawData.data ?? rawData;
13
+ });
@@ -0,0 +1,15 @@
1
+ import { cleanProfileData, getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/profile`, event);
6
+
7
+ const clientHeaders = event.node.req.headers as HeadersInit;
8
+
9
+ const rawData = await apiFetch(url, {
10
+ method: 'GET',
11
+ headers: clientHeaders,
12
+ });
13
+
14
+ return cleanProfileData(rawData.data);
15
+ });
@@ -0,0 +1,14 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/login`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'POST',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ body: JSON.stringify(await readBody(event)),
11
+ });
12
+
13
+ return rawData.data ?? rawData;
14
+ });
@@ -0,0 +1,14 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/profile/password`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'POST',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ body: JSON.stringify(await readBody(event)),
11
+ });
12
+
13
+ return rawData.data ?? rawData;
14
+ });
@@ -0,0 +1,15 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/profile`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'POST',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ body: getRequestWebStream(event) as any,
11
+ duplex: 'half',
12
+ } as any);
13
+
14
+ return rawData.data ?? rawData;
15
+ });
@@ -0,0 +1,13 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/profile/avatar`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'DELETE',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ });
11
+
12
+ return rawData.data ?? rawData;
13
+ });
@@ -0,0 +1,14 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/password/confirm`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'POST',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ body: JSON.stringify(await readBody(event)),
11
+ });
12
+
13
+ return rawData.data ?? rawData;
14
+ });
@@ -0,0 +1,14 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/register`, event);
6
+
7
+ const rawData = await apiFetch(url, {
8
+ method: 'POST',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ body: JSON.stringify(await readBody(event)),
11
+ });
12
+
13
+ return rawData.data ?? rawData;
14
+ });
@@ -0,0 +1,26 @@
1
+ import type { IChannelCard, IRawChannelCard } from '../../../../types';
2
+ import { cleanChannelCard, getUrlWithProxiedParams } from '../../../../runtime';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const slug = getRouterParam(event, 'slug');
7
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/channels/by-model/${slug}`, event);
8
+
9
+ const clientHeaders = event.node.req.headers as HeadersInit;
10
+
11
+ const rawData = await apiFetch(url, {
12
+ method: 'GET',
13
+ headers: clientHeaders,
14
+ });
15
+
16
+ const items: IRawChannelCard[] = rawData.data?.items || [];
17
+
18
+ const cleanedItems: IChannelCard[] = items.map(cleanChannelCard);
19
+
20
+ return {
21
+ currentPage: rawData.data?.current_page,
22
+ allPages: rawData.data?.all_pages,
23
+ total: rawData.data?.total,
24
+ items: cleanedItems,
25
+ };
26
+ });
@@ -0,0 +1,16 @@
1
+ import { cleanChannelInfo, getUrlWithProxiedParams } from '../../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const slug = getRouterParam(event, 'slug');
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/channels/${slug}`, event);
7
+
8
+ const clientHeaders = event.node.req.headers as HeadersInit;
9
+
10
+ const rawData = await apiFetch(url, {
11
+ method: 'GET',
12
+ headers: clientHeaders,
13
+ });
14
+
15
+ return cleanChannelInfo(rawData.data);
16
+ });
@@ -0,0 +1,26 @@
1
+ import type { IChannelCard, IRawChannelCard } from '../../../../types';
2
+ import { cleanChannelCard, getUrlWithProxiedParams } from '../../../../runtime';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const slug = getRouterParam(event, 'slug');
7
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/channels/by-network/${slug}`, event);
8
+
9
+ const clientHeaders = event.node.req.headers as HeadersInit;
10
+
11
+ const rawData = await apiFetch(url, {
12
+ method: 'GET',
13
+ headers: clientHeaders,
14
+ });
15
+
16
+ const items: IRawChannelCard[] = rawData.data?.items || [];
17
+
18
+ const cleanedItems: IChannelCard[] = items.map(cleanChannelCard);
19
+
20
+ return {
21
+ currentPage: rawData.data?.current_page,
22
+ allPages: rawData.data?.all_pages,
23
+ total: rawData.data?.total,
24
+ items: cleanedItems,
25
+ };
26
+ });
@@ -0,0 +1,25 @@
1
+ import type { IChannelCard, IRawChannelCard } from '../../../types';
2
+ import { cleanChannelCard, getUrlWithProxiedParams } from '../../../runtime';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/channels`, event);
7
+
8
+ const data = await cachedApiFetch<{
9
+ items?: IRawChannelCard[];
10
+ current_page?: number;
11
+ all_pages?: number;
12
+ total?: number;
13
+ }>(url, event, 600);
14
+
15
+ const items: IRawChannelCard[] = data?.items || [];
16
+
17
+ const cleanedItems: IChannelCard[] = items.map(cleanChannelCard);
18
+
19
+ return {
20
+ currentPage: data?.current_page,
21
+ allPages: data?.all_pages,
22
+ total: data?.total,
23
+ items: cleanedItems,
24
+ };
25
+ });
@@ -0,0 +1,12 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/contacts/email`, event);
6
+
7
+ return await apiFetch(url, {
8
+ method: 'POST',
9
+ headers: getRequestHeaders(event) as HeadersInit,
10
+ body: JSON.stringify(await readBody(event)),
11
+ });
12
+ });
@@ -0,0 +1,8 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/countries`, event);
6
+
7
+ return await cachedApiFetch(url, event, 3600);
8
+ });
@@ -0,0 +1,8 @@
1
+ import { getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/genders`, event);
6
+
7
+ return await cachedApiFetch(url, event, 3600);
8
+ });
@@ -0,0 +1,10 @@
1
+ import { cleanModelInfo, getUrlWithProxiedParams } from '../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/get-info-by-name`, event);
6
+
7
+ const data = await cachedApiFetch(url, event, 300);
8
+
9
+ return cleanModelInfo(data);
10
+ });
@@ -0,0 +1,25 @@
1
+ import { cleanModelCard, getUrlWithProxiedParams } from '../../../runtime';
2
+ import type { IRawModelCard, IModelCard } from '../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/search`, event);
7
+
8
+ const clientHeaders = event.node.req.headers as HeadersInit;
9
+
10
+ const rawData = await apiFetch(url, {
11
+ method: 'GET',
12
+ headers: clientHeaders,
13
+ });
14
+
15
+ const items: IRawModelCard[] = rawData.data?.items || [];
16
+
17
+ const cleanedItems: IModelCard[] = items.map(cleanModelCard);
18
+
19
+ return {
20
+ currentPage: rawData.data?.current_page,
21
+ allPages: rawData.data?.all_pages,
22
+ total: rawData.data?.total,
23
+ items: cleanedItems,
24
+ };
25
+ });
@@ -0,0 +1,11 @@
1
+ import type { IRawModelCard, PaginatedResponse } from '../../../types';
2
+ import { convertModelCardToChips, getUrlWithProxiedParams } from '../../../runtime';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/top`, event);
7
+
8
+ const models = await cachedApiFetch<PaginatedResponse<IRawModelCard>>(url, event);
9
+
10
+ return convertModelCardToChips(models.items);
11
+ });
@@ -0,0 +1,26 @@
1
+ import { cleanModelCard, getUrlWithProxiedParams } from '../../../../runtime';
2
+ import type { IRawModelCard, IModelCard } from '../../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const category = getRouterParam(event, 'category');
7
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/list-by-category/${category}`, event);
8
+
9
+ const clientHeaders = event.node.req.headers as HeadersInit;
10
+
11
+ const rawData = await apiFetch(url, {
12
+ method: 'GET',
13
+ headers: clientHeaders,
14
+ });
15
+
16
+ const items: IRawModelCard[] = rawData.data?.items || [];
17
+
18
+ const cleanedItems: IModelCard[] = items.map(cleanModelCard);
19
+
20
+ return {
21
+ currentPage: rawData.data?.current_page,
22
+ allPages: rawData.data?.all_pages,
23
+ total: rawData.data?.total,
24
+ items: cleanedItems,
25
+ };
26
+ });
@@ -0,0 +1,26 @@
1
+ import { cleanModelCard, getUrlWithProxiedParams } from '../../../../runtime';
2
+ import type { IRawModelCard, IModelCard } from '../../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const channel = getRouterParam(event, 'channel');
7
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/list-by-channel/${channel}`, event);
8
+
9
+ const clientHeaders = event.node.req.headers as HeadersInit;
10
+
11
+ const rawData = await apiFetch(url, {
12
+ method: 'GET',
13
+ headers: clientHeaders,
14
+ });
15
+
16
+ const items: IRawModelCard[] = rawData.data?.items || [];
17
+
18
+ const cleanedItems: IModelCard[] = items.map(cleanModelCard);
19
+
20
+ return {
21
+ currentPage: rawData.data?.current_page,
22
+ allPages: rawData.data?.all_pages,
23
+ total: rawData.data?.total,
24
+ items: cleanedItems,
25
+ };
26
+ });
@@ -0,0 +1,11 @@
1
+ import type { IRawModelCard, PaginatedResponse } from '../../../types';
2
+ import { convertModelCardToChips, getUrlWithProxiedParams } from '../../../runtime';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/list-by-first-letter`, event);
7
+
8
+ const models = await cachedApiFetch<PaginatedResponse<IRawModelCard>>(url, event);
9
+
10
+ return convertModelCardToChips(models.items);
11
+ });
@@ -0,0 +1,18 @@
1
+ import { cleanModelCard, getUrlWithProxiedParams } from '../../../runtime';
2
+ import type { IRawModelCard, IModelCard, PaginatedResponse } from '../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/list-by-first-letter`, event);
7
+
8
+ const data = await cachedApiFetch<PaginatedResponse<IRawModelCard>>(url, event);
9
+
10
+ const cleanedItems: IModelCard[] = (data.items || []).map(cleanModelCard);
11
+
12
+ return {
13
+ currentPage: data.current_page,
14
+ allPages: data.all_pages,
15
+ total: data.total,
16
+ items: cleanedItems,
17
+ };
18
+ });
@@ -0,0 +1,30 @@
1
+ import { cleanModelCard, getUrlWithProxiedParams } from '../../../runtime';
2
+ import type { IModelFilter, IRawModelCard, IModelCard } from '../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/filter`, event);
7
+
8
+ const clientHeaders = event.node.req.headers as HeadersInit;
9
+
10
+ const body = await readBody(event);
11
+
12
+ const rawData = await apiFetch(url, {
13
+ method: 'POST',
14
+ headers: clientHeaders,
15
+ body: JSON.stringify(body),
16
+ });
17
+
18
+ const items: IRawModelCard[] = rawData?.data?.items || [];
19
+ const filters: IModelFilter[] = rawData?.data?.filters || [];
20
+
21
+ const cleanedItems: IModelCard[] = items && items.length > 0 ? items.map(cleanModelCard) : [];
22
+
23
+ return {
24
+ currentPage: rawData?.data?.current_page,
25
+ allPages: rawData?.data?.all_pages,
26
+ total: rawData?.data?.total,
27
+ items: cleanedItems,
28
+ filters: filters,
29
+ };
30
+ });
@@ -0,0 +1,26 @@
1
+ import { cleanModelCard, getUrlWithProxiedParams } from '../../../../runtime';
2
+ import type { IRawModelCard, IModelCard } from '../../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const tag = getRouterParam(event, 'tag');
7
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/list-by-tag/${tag}`, event);
8
+
9
+ const clientHeaders = event.node.req.headers as HeadersInit;
10
+
11
+ const rawData = await apiFetch(url, {
12
+ method: 'GET',
13
+ headers: clientHeaders,
14
+ });
15
+
16
+ const items: IRawModelCard[] = rawData.data?.items || [];
17
+
18
+ const cleanedItems: IModelCard[] = items.map(cleanModelCard);
19
+
20
+ return {
21
+ currentPage: rawData.data?.current_page,
22
+ allPages: rawData.data?.all_pages,
23
+ total: rawData.data?.total,
24
+ items: cleanedItems,
25
+ };
26
+ });
@@ -0,0 +1,25 @@
1
+ import { cleanModelCard, getUrlWithProxiedParams } from '../../../runtime';
2
+ import type { IRawModelCard, IModelCard } from '../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/related`, event);
7
+
8
+ const clientHeaders = event.node.req.headers as HeadersInit;
9
+
10
+ const rawData = await apiFetch(url, {
11
+ method: 'GET',
12
+ headers: clientHeaders,
13
+ });
14
+
15
+ const items: IRawModelCard[] = rawData.data?.items || [];
16
+
17
+ const cleanedItems: IModelCard[] = items.map(cleanModelCard);
18
+
19
+ return {
20
+ currentPage: rawData.data?.current_page,
21
+ allPages: rawData.data?.all_pages,
22
+ total: rawData.data?.total,
23
+ items: cleanedItems,
24
+ };
25
+ });
@@ -0,0 +1,18 @@
1
+ import { cleanModelCard, getUrlWithProxiedParams } from '../../../runtime';
2
+ import type { IRawModelCard, IModelCard, PaginatedResponse } from '../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v2/models/top`, event);
7
+
8
+ const data = await cachedApiFetch<PaginatedResponse<IRawModelCard>>(url, event);
9
+
10
+ const cleanedItems: IModelCard[] = (data?.items || []).map(cleanModelCard);
11
+
12
+ return {
13
+ currentPage: data?.current_page,
14
+ allPages: data?.all_pages,
15
+ total: data?.total,
16
+ items: cleanedItems,
17
+ };
18
+ });
@@ -0,0 +1,12 @@
1
+ import { getUrlWithProxiedParams } from '../../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const id = getRouterParam(event, 'id');
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/playlist/${id}`, event);
7
+
8
+ return await apiFetch(url, {
9
+ method: 'DELETE',
10
+ headers: getRequestHeaders(event) as HeadersInit,
11
+ });
12
+ });
@@ -0,0 +1,18 @@
1
+ import { getUrlWithProxiedParams } from '../../../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+
6
+ const pid = getRouterParam(event, 'pid');
7
+ const vid = getRouterParam(event, 'vid');
8
+
9
+ const url = getUrlWithProxiedParams(
10
+ `${apiUrl}/v1/playlist/${pid}/video/${vid}`,
11
+ event
12
+ );
13
+
14
+ return await apiFetch(url, {
15
+ method: 'DELETE',
16
+ headers: getRequestHeaders(event) as HeadersInit,
17
+ });
18
+ });
@@ -0,0 +1,16 @@
1
+ import { cleanPlaylistData, getUrlWithProxiedParams } from '../../../../runtime';
2
+
3
+ export default defineEventHandler(async (event) => {
4
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
5
+ const id = getRouterParam(event, 'id');
6
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/playlist/${id}`, event);
7
+
8
+ const clientHeaders = event.node.req.headers as HeadersInit;
9
+
10
+ const rawData = await apiFetch(url, {
11
+ method: 'GET',
12
+ headers: clientHeaders,
13
+ });
14
+
15
+ return cleanPlaylistData(rawData.data);
16
+ });
@@ -0,0 +1,27 @@
1
+ import { cleanPlaylistVideo, getUrlWithProxiedParams } from '../../../../runtime';
2
+ import type { IRawPlaylistVideo, IVideoCard } from '../../../../types';
3
+
4
+ export default defineEventHandler(async (event) => {
5
+ const apiUrl = process.env.NUXT_PUBLIC_API_DOMAIN;
6
+ const id = getRouterParam(event, 'id');
7
+
8
+ const url = getUrlWithProxiedParams(`${apiUrl}/v1/video/list-by-playlist-id/${id}`, event);
9
+
10
+ const clientHeaders = event.node.req.headers as HeadersInit;
11
+
12
+ const rawData = await apiFetch(url, {
13
+ method: 'GET',
14
+ headers: clientHeaders,
15
+ });
16
+
17
+ const items: IRawPlaylistVideo[] = rawData?.data?.items || [];
18
+
19
+ const cleanedItems: IVideoCard[] = items.map(cleanPlaylistVideo);
20
+
21
+ return {
22
+ currentPage: rawData.data?.currentPage,
23
+ allPages: rawData.data?.allPages,
24
+ total: rawData.data?.total,
25
+ items: cleanedItems,
26
+ };
27
+ });