itube-specs 0.0.716 → 0.0.719

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.
@@ -8,7 +8,7 @@ export const useFetchVideos = async (
8
8
  apiMethod: (...args: any[]) => Promise<PaginatedResponse<IVideoCard>>
9
9
  ) => {
10
10
  const route = useRoute();
11
-
11
+
12
12
  const headers = useRequestHeaders()[ 'user-agent' ] ?? '';
13
13
  const mobile = isMobileDevice(headers);
14
14
  const perPage = mobile ? 12 : 48;
@@ -28,7 +28,7 @@ export const useFetchVideos = async (
28
28
  [ 'per-page' ]: perPage,
29
29
  },
30
30
  filters.value,
31
- getSelectedQuery(route, sortItemsDefault) || '-popularity,-primary_thumb_rank'
31
+ getSelectedQuery(route, sortItemsDefault) || '-country_order'
32
32
  )(),
33
33
  {
34
34
  watch: [
@@ -5,7 +5,7 @@ export const sortItemsDefault: Array<IChipsItem> = [
5
5
  title: 'sort.trending',
6
6
  value: 'trending',
7
7
  key: 'sort',
8
- query: '-popularity',
8
+ query: '-country_order',
9
9
  },
10
10
  {
11
11
  title: 'sort.new',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.716",
4
+ "version": "0.0.719",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
@@ -1,6 +1,7 @@
1
1
  import { getCookie } from 'h3';
2
2
  import { getClientHeaders } from './get-client-headers';
3
3
 
4
+ /** Возвращает true если пользователь находится в регионе где требуется верификация возраста (GB, штат KS). */
4
5
  export async function isGeoMatch(event, config) {
5
6
  const AGE_VERIFY_REGIONS = ['KS'];
6
7
  const AGE_VERIFY_COUNTRIES = ['GB'];
@@ -13,6 +14,7 @@ export async function isGeoMatch(event, config) {
13
14
  || AGE_VERIFY_REGIONS.includes(stateCode);
14
15
  }
15
16
 
17
+ /** Проверяет через API прошёл ли пользователь верификацию возраста по session_id из cookie или контекста. */
16
18
  export async function isAgeVerified(event, config) {
17
19
  const apiUrl = config.public.apiDomain;
18
20
  const sessionId = getCookie(event, 'session_id') || event?.context.sessionId;
@@ -33,6 +35,11 @@ export async function isAgeVerified(event, config) {
33
35
  return res.data === true;
34
36
  }
35
37
 
38
+ /**
39
+ * Запрашивает у API URL для редиректа на страницу верификации возраста.
40
+ * @param backPath - путь на который вернуть пользователя после верификации
41
+ * @returns URL редиректа и countryCode пользователя
42
+ */
36
43
  export async function getAgeValidationUrl(event, backPath: string, config) {
37
44
  const sessionId = event.context?.sessionId || getCookie(event, 'session_id');
38
45
  const apiUrl = config.public.apiDomain;
@@ -1,8 +1,12 @@
1
1
  import type { NitroFetchOptions } from "nitropack/types";
2
2
 
3
- /** Хелпер для работы с API */
3
+ /** Клиентский хелпер для запросов через BFF (/bff prefix). Автоматически добавляет x-domain заголовок. */
4
4
  export class ApiHelper {
5
- /** Метод для получения данных */
5
+ /**
6
+ * @param path - путь без /bff префикса, например `/videos/list`
7
+ * @param fetchOptions - стандартные опции $fetch
8
+ * @param runtimeConfig - useRuntimeConfig() для получения xDomain
9
+ */
6
10
  static async fetch<T>(
7
11
  path: string,
8
12
  fetchOptions: NitroFetchOptions<string>,
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Извлекает гео-данные и клиентские параметры из заголовков запроса.
3
+ * Поддерживает заголовки Cloudflare (cf-ipcountry, cf-region) и кастомные (x-country-code, x-region-code).
4
+ */
1
5
  export function getClientHeaders(event: any) {
2
6
  const headers = event.node.req.headers;
3
7
 
@@ -1,3 +1,4 @@
1
+ /** Копирует query-параметры из текущего запроса (event) в переданный URL. Используется для проксирования запросов с сохранением параметров. */
1
2
  export function getUrlWithProxiedParams(url: string, event) {
2
3
  const _url = new URL(url);
3
4
  _url.search = new URLSearchParams(getQuery(event));
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Нормализует ошибку API в строку.
3
+ * Обрабатывает форматы: `data.error`, `error`, строку, массив и объект с вложенными значениями.
4
+ */
1
5
  export function parseApiError(error: any): string {
2
6
  const fallback = 'Unknown error occurred.';
3
7
 
@@ -2,7 +2,13 @@ import type { H3Event } from "h3";
2
2
  import { getHeaders } from "h3";
3
3
  import type { FetchOptions } from "ofetch";
4
4
 
5
+ /** Серверный хелпер для запросов к внешнему API. Проксирует заголовки клиента и разворачивает `response.data`. */
5
6
  export class ServerApiHelper {
7
+ /**
8
+ * @param url - полный URL внешнего API
9
+ * @param event - H3Event для проброса заголовков клиента
10
+ * @param requestOptions - дополнительные опции fetch (method, body и т.д.)
11
+ */
6
12
  public static async fetch<T>(url: string, event: H3Event, requestOptions?: FetchOptions): Promise<T> {
7
13
  try {
8
14
  const response = await $fetch<{ data: T }>(url, {