Skip to content

Commit

Permalink
suggestion(server): refactor server utils
Browse files Browse the repository at this point in the history
  • Loading branch information
Вахрамеев Сергей Сергеевич authored and Вахрамеев Сергей Сергеевич committed Dec 19, 2024
1 parent d12318d commit 577aa2a
Showing 1 changed file with 52 additions and 15 deletions.
67 changes: 52 additions & 15 deletions src/server/utils.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,65 @@
import { RequestHeaderType } from './types';
import { extractNativeParamsFromCookies } from "../shared/utils";
import { APP_VERSION_HEADER_KEY, NATIVE_PARAMS_COOKIE_KEY } from './constants';
import { UniversalRequest } from './types';

/**
* Заголовок с версией приложения, который посылает вебвью из AM Android
*/
const AppVersion = 'app-version';
function getHeaderValue(request: UniversalRequest, headerName: string) {
if (!(request.headers instanceof Headers)) {
return request.headers[headerName] || null;
}

// Если есть несколько заголовком с одним ключем, они разделяются запятой с пробелом,
// см. примеры тут → https://developer.mozilla.org/en-US/docs/Web/API/Headers/get#examples
const sameKeyHeadersSeparator = ', ';

const headerValue = request.headers.get(headerName);
const severalValues = headerValue?.split(sameKeyHeadersSeparator);

if (!Array.isArray(severalValues)) {
return null;
}

return severalValues.length > 1 ? severalValues : severalValues[0];
}

/**
* Возвращает `app-version` из заголовков запроса
* Возвращает `app-version` из заголовков запроса.
*/
export function extractAppVersion(request: RequestHeaderType): string | undefined {
return request.headers[AppVersion];
export function extractAppVersion(request: UniversalRequest) {
const appVersionValue = getHeaderValue(request, APP_VERSION_HEADER_KEY);

// Не должно быть несколько таких заголовков, но если так почему-то случилось, работаем с первым.
return Array.isArray(appVersionValue) ? appVersionValue[0] : appVersionValue;
}

/**
* Возвращает `User-agent` из заголовков запроса
* Возвращает `User-agent` из заголовков запроса.
*/
export function extractUserAgent(request: RequestHeaderType): string {
return request.headers['user-agent'];
export function extractUserAgent(request: UniversalRequest) {
const uaValue = getHeaderValue(request, 'user-agent');

// Не должно быть несколько таких заголовков, но если так почему-то случилось, работаем с первым.
return Array.isArray(uaValue) ? uaValue[0] : uaValue;
}

/**
* Возвращает объект с `webview-параметрами` из cookies
* Возвращает объект с параметрами нативного приложения из cookie, если они были сохранены ранее.
*/
export function extractNativeParamsFromCookieHeader(request: RequestHeaderType): Record<string, unknown> | null {
return extractNativeParamsFromCookies(request.headers['cookie'])
export function extractNativeParams(
request: UniversalRequest,
) {
const cookies = getHeaderValue(request, 'cookie');

if (!cookies) {
return null;
}

const cookiesArray = typeof cookies === 'string' ? [cookies] : cookies;
const nativeParamsCookie = cookiesArray.find(cookie => cookie.startsWith(NATIVE_PARAMS_COOKIE_KEY));

if (!nativeParamsCookie) {
return null;
}

const [, value] = nativeParamsCookie.split('=');

return value;
}

0 comments on commit 577aa2a

Please sign in to comment.